(function(wA,d0){typeof exports=="object"&&typeof module<"u"?module.exports=d0():typeof define=="function"&&define.amd?define(d0):(wA=typeof globalThis<"u"?globalThis:wA||self,wA.mermaid=d0())})(this,function(){"use strict";function wA(i){for(var a=[],f=1;f<arguments.length;f++)a[f-1]=arguments[f];var p=Array.from(typeof i=="string"?[i]:i);p[p.length-1]=p[p.length-1].replace(/\r?\n([\t ]*)$/,"");var v=p.reduce(function(E,_){var L=_.match(/\n([\t ]+|(?!\s).)/g);return L?E.concat(L.map(function(N){var B,j;return(j=(B=N.match(/[\t ]/g))===null||B===void 0?void 0:B.length)!==null&&j!==void 0?j:0})):E},[]);if(v.length){var m=new RegExp(`
[	 ]{`+Math.min.apply(Math,v)+"}","g");p=p.map(function(E){return E.replace(m,`
`)})}p[0]=p[0].replace(/^\r?\n/,"");var b=p[0];return a.forEach(function(E,_){var L=b.match(/(?:^|\n)( *)$/),N=L?L[1]:"",B=E;typeof E=="string"&&E.includes(`
`)&&(B=String(E).split(`
`).map(function(j,R){return R===0?j:""+N+j}).join(`
`)),b+=B+p[_+1]}),b}var d0=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function B7(i){return i&&i.__esModule&&Object.prototype.hasOwnProperty.call(i,"default")?i.default:i}var ILt={exports:{}};(function(i,a){(function(f,p){i.exports=p()})(d0,function(){var f=1e3,p=6e4,v=36e5,m="millisecond",b="second",E="minute",_="hour",L="day",N="week",B="month",j="quarter",R="year",z="date",K="Invalid Date",it=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,st=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,ut={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(nt){var Ot=["th","st","nd","rd"],Nt=nt%100;return"["+nt+(Ot[(Nt-20)%10]||Ot[Nt]||Ot[0])+"]"}},bt=function(nt,Ot,Nt){var qt=String(nt);return!qt||qt.length>=Ot?nt:""+Array(Ot+1-qt.length).join(Nt)+nt},mt={s:bt,z:function(nt){var Ot=-nt.utcOffset(),Nt=Math.abs(Ot),qt=Math.floor(Nt/60),Ct=Nt%60;return(Ot<=0?"+":"-")+bt(qt,2,"0")+":"+bt(Ct,2,"0")},m:function nt(Ot,Nt){if(Ot.date()<Nt.date())return-nt(Nt,Ot);var qt=12*(Nt.year()-Ot.year())+(Nt.month()-Ot.month()),Ct=Ot.clone().add(qt,B),Z=Nt-Ct<0,Tt=Ot.clone().add(qt+(Z?-1:1),B);return+(-(qt+(Nt-Ct)/(Z?Ct-Tt:Tt-Ct))||0)},a:function(nt){return nt<0?Math.ceil(nt)||0:Math.floor(nt)},p:function(nt){return{M:B,y:R,w:N,d:L,D:z,h:_,m:E,s:b,ms:m,Q:j}[nt]||String(nt||"").toLowerCase().replace(/s$/,"")},u:function(nt){return nt===void 0}},yt="en",dt={};dt[yt]=ut;var ht=function(nt){return nt instanceof U},wt=function nt(Ot,Nt,qt){var Ct;if(!Ot)return yt;if(typeof Ot=="string"){var Z=Ot.toLowerCase();dt[Z]&&(Ct=Z),Nt&&(dt[Z]=Nt,Ct=Z);var Tt=Ot.split("-");if(!Ct&&Tt.length>1)return nt(Tt[0])}else{var Ht=Ot.name;dt[Ht]=Ot,Ct=Ht}return!qt&&Ct&&(yt=Ct),Ct||!qt&&yt},X=function(nt,Ot){if(ht(nt))return nt.clone();var Nt=typeof Ot=="object"?Ot:{};return Nt.date=nt,Nt.args=arguments,new U(Nt)},pt=mt;pt.l=wt,pt.i=ht,pt.w=function(nt,Ot){return X(nt,{locale:Ot.$L,utc:Ot.$u,x:Ot.$x,$offset:Ot.$offset})};var U=function(){function nt(Nt){this.$L=wt(Nt.locale,null,!0),this.parse(Nt)}var Ot=nt.prototype;return Ot.parse=function(Nt){this.$d=function(qt){var Ct=qt.date,Z=qt.utc;if(Ct===null)return new Date(NaN);if(pt.u(Ct))return new Date;if(Ct instanceof Date)return new Date(Ct);if(typeof Ct=="string"&&!/Z$/i.test(Ct)){var Tt=Ct.match(it);if(Tt){var Ht=Tt[2]-1||0,It=(Tt[7]||"0").substring(0,3);return Z?new Date(Date.UTC(Tt[1],Ht,Tt[3]||1,Tt[4]||0,Tt[5]||0,Tt[6]||0,It)):new Date(Tt[1],Ht,Tt[3]||1,Tt[4]||0,Tt[5]||0,Tt[6]||0,It)}}return new Date(Ct)}(Nt),this.$x=Nt.x||{},this.init()},Ot.init=function(){var Nt=this.$d;this.$y=Nt.getFullYear(),this.$M=Nt.getMonth(),this.$D=Nt.getDate(),this.$W=Nt.getDay(),this.$H=Nt.getHours(),this.$m=Nt.getMinutes(),this.$s=Nt.getSeconds(),this.$ms=Nt.getMilliseconds()},Ot.$utils=function(){return pt},Ot.isValid=function(){return this.$d.toString()!==K},Ot.isSame=function(Nt,qt){var Ct=X(Nt);return this.startOf(qt)<=Ct&&Ct<=this.endOf(qt)},Ot.isAfter=function(Nt,qt){return X(Nt)<this.startOf(qt)},Ot.isBefore=function(Nt,qt){return this.endOf(qt)<X(Nt)},Ot.$g=function(Nt,qt,Ct){return pt.u(Nt)?this[qt]:this.set(Ct,Nt)},Ot.unix=function(){return Math.floor(this.valueOf()/1e3)},Ot.valueOf=function(){return this.$d.getTime()},Ot.startOf=function(Nt,qt){var Ct=this,Z=!!pt.u(qt)||qt,Tt=pt.p(Nt),Ht=function(Ke,we){var _e=pt.w(Ct.$u?Date.UTC(Ct.$y,we,Ke):new Date(Ct.$y,we,Ke),Ct);return Z?_e:_e.endOf(L)},It=function(Ke,we){return pt.w(Ct.toDate()[Ke].apply(Ct.toDate("s"),(Z?[0,0,0,0]:[23,59,59,999]).slice(we)),Ct)},Ft=this.$W,ke=this.$M,pn=this.$D,Me="set"+(this.$u?"UTC":"");switch(Tt){case R:return Z?Ht(1,0):Ht(31,11);case B:return Z?Ht(1,ke):Ht(0,ke+1);case N:var ve=this.$locale().weekStart||0,Ge=(Ft<ve?Ft+7:Ft)-ve;return Ht(Z?pn-Ge:pn+(6-Ge),ke);case L:case z:return It(Me+"Hours",0);case _:return It(Me+"Minutes",1);case E:return It(Me+"Seconds",2);case b:return It(Me+"Milliseconds",3);default:return this.clone()}},Ot.endOf=function(Nt){return this.startOf(Nt,!1)},Ot.$set=function(Nt,qt){var Ct,Z=pt.p(Nt),Tt="set"+(this.$u?"UTC":""),Ht=(Ct={},Ct[L]=Tt+"Date",Ct[z]=Tt+"Date",Ct[B]=Tt+"Month",Ct[R]=Tt+"FullYear",Ct[_]=Tt+"Hours",Ct[E]=Tt+"Minutes",Ct[b]=Tt+"Seconds",Ct[m]=Tt+"Milliseconds",Ct)[Z],It=Z===L?this.$D+(qt-this.$W):qt;if(Z===B||Z===R){var Ft=this.clone().set(z,1);Ft.$d[Ht](It),Ft.init(),this.$d=Ft.set(z,Math.min(this.$D,Ft.daysInMonth())).$d}else Ht&&this.$d[Ht](It);return this.init(),this},Ot.set=function(Nt,qt){return this.clone().$set(Nt,qt)},Ot.get=function(Nt){return this[pt.p(Nt)]()},Ot.add=function(Nt,qt){var Ct,Z=this;Nt=Number(Nt);var Tt=pt.p(qt),Ht=function(ke){var pn=X(Z);return pt.w(pn.date(pn.date()+Math.round(ke*Nt)),Z)};if(Tt===B)return this.set(B,this.$M+Nt);if(Tt===R)return this.set(R,this.$y+Nt);if(Tt===L)return Ht(1);if(Tt===N)return Ht(7);var It=(Ct={},Ct[E]=p,Ct[_]=v,Ct[b]=f,Ct)[Tt]||1,Ft=this.$d.getTime()+Nt*It;return pt.w(Ft,this)},Ot.subtract=function(Nt,qt){return this.add(-1*Nt,qt)},Ot.format=function(Nt){var qt=this,Ct=this.$locale();if(!this.isValid())return Ct.invalidDate||K;var Z=Nt||"YYYY-MM-DDTHH:mm:ssZ",Tt=pt.z(this),Ht=this.$H,It=this.$m,Ft=this.$M,ke=Ct.weekdays,pn=Ct.months,Me=function(we,_e,$t,re){return we&&(we[_e]||we(qt,Z))||$t[_e].slice(0,re)},ve=function(we){return pt.s(Ht%12||12,we,"0")},Ge=Ct.meridiem||function(we,_e,$t){var re=we<12?"AM":"PM";return $t?re.toLowerCase():re},Ke={YY:String(this.$y).slice(-2),YYYY:this.$y,M:Ft+1,MM:pt.s(Ft+1,2,"0"),MMM:Me(Ct.monthsShort,Ft,pn,3),MMMM:Me(pn,Ft),D:this.$D,DD:pt.s(this.$D,2,"0"),d:String(this.$W),dd:Me(Ct.weekdaysMin,this.$W,ke,2),ddd:Me(Ct.weekdaysShort,this.$W,ke,3),dddd:ke[this.$W],H:String(Ht),HH:pt.s(Ht,2,"0"),h:ve(1),hh:ve(2),a:Ge(Ht,It,!0),A:Ge(Ht,It,!1),m:String(It),mm:pt.s(It,2,"0"),s:String(this.$s),ss:pt.s(this.$s,2,"0"),SSS:pt.s(this.$ms,3,"0"),Z:Tt};return Z.replace(st,function(we,_e){return _e||Ke[we]||Tt.replace(":","")})},Ot.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},Ot.diff=function(Nt,qt,Ct){var Z,Tt=pt.p(qt),Ht=X(Nt),It=(Ht.utcOffset()-this.utcOffset())*p,Ft=this-Ht,ke=pt.m(this,Ht);return ke=(Z={},Z[R]=ke/12,Z[B]=ke,Z[j]=ke/3,Z[N]=(Ft-It)/6048e5,Z[L]=(Ft-It)/864e5,Z[_]=Ft/v,Z[E]=Ft/p,Z[b]=Ft/f,Z)[Tt]||Ft,Ct?ke:pt.a(ke)},Ot.daysInMonth=function(){return this.endOf(B).$D},Ot.$locale=function(){return dt[this.$L]},Ot.locale=function(Nt,qt){if(!Nt)return this.$L;var Ct=this.clone(),Z=wt(Nt,qt,!0);return Z&&(Ct.$L=Z),Ct},Ot.clone=function(){return pt.w(this.$d,this)},Ot.toDate=function(){return new Date(this.valueOf())},Ot.toJSON=function(){return this.isValid()?this.toISOString():null},Ot.toISOString=function(){return this.$d.toISOString()},Ot.toString=function(){return this.$d.toUTCString()},nt}(),xt=U.prototype;return X.prototype=xt,[["$ms",m],["$s",b],["$m",E],["$H",_],["$W",L],["$M",B],["$y",R],["$D",z]].forEach(function(nt){xt[nt[1]]=function(Ot){return this.$g(Ot,nt[0],nt[1])}}),X.extend=function(nt,Ot){return nt.$i||(nt(Ot,U,X),nt.$i=!0),X},X.locale=wt,X.isDayjs=ht,X.unix=function(nt){return X(1e3*nt)},X.en=dt[yt],X.Ls=dt,X.p={},X})})(ILt);var G5e=ILt.exports;const g0=B7(G5e),d5={trace:0,debug:1,info:2,warn:3,error:4,fatal:5},Ut={trace:(...i)=>{},debug:(...i)=>{},info:(...i)=>{},warn:(...i)=>{},error:(...i)=>{},fatal:(...i)=>{}},jft=function(i="fatal"){let a=d5.fatal;typeof i=="string"?(i=i.toLowerCase(),i in d5&&(a=d5[i])):typeof i=="number"&&(a=i),Ut.trace=()=>{},Ut.debug=()=>{},Ut.info=()=>{},Ut.warn=()=>{},Ut.error=()=>{},Ut.fatal=()=>{},a<=d5.fatal&&(Ut.fatal=console.error?console.error.bind(console,W2("FATAL"),"color: orange"):console.log.bind(console,"\x1B[35m",W2("FATAL"))),a<=d5.error&&(Ut.error=console.error?console.error.bind(console,W2("ERROR"),"color: orange"):console.log.bind(console,"\x1B[31m",W2("ERROR"))),a<=d5.warn&&(Ut.warn=console.warn?console.warn.bind(console,W2("WARN"),"color: orange"):console.log.bind(console,"\x1B[33m",W2("WARN"))),a<=d5.info&&(Ut.info=console.info?console.info.bind(console,W2("INFO"),"color: lightblue"):console.log.bind(console,"\x1B[34m",W2("INFO"))),a<=d5.debug&&(Ut.debug=console.debug?console.debug.bind(console,W2("DEBUG"),"color: lightgreen"):console.log.bind(console,"\x1B[32m",W2("DEBUG"))),a<=d5.trace&&(Ut.trace=console.debug?console.debug.bind(console,W2("TRACE"),"color: lightgreen"):console.log.bind(console,"\x1B[32m",W2("TRACE")))},W2=i=>`%c${g0().format("ss.SSS")} : ${i} : `;var $ft={};Object.defineProperty($ft,"__esModule",{value:!0});var Q6=$ft.sanitizeUrl=void 0,V5e=/^([^\w]*)(javascript|data|vbscript)/im,U5e=/&#(\w+)(^\w|;)?/g,W5e=/&(newline|tab);/gi,K5e=/[\u0000-\u001F\u007F-\u009F\u2000-\u200D\uFEFF]/gim,Y5e=/^.+(:|&colon;)/gim,X5e=[".","/"];function Q5e(i){return X5e.indexOf(i[0])>-1}function Z5e(i){return i.replace(U5e,function(a,f){return String.fromCharCode(f)})}function J5e(i){var a=Z5e(i||"").replace(W5e,"").replace(K5e,"").trim();if(!a)return"about:blank";if(Q5e(a))return a;var f=a.match(Y5e);if(!f)return a;var p=f[0];return V5e.test(p)?"about:blank":a}Q6=$ft.sanitizeUrl=J5e;function fU(i,a){return i==null||a==null?NaN:i<a?-1:i>a?1:i>=a?0:NaN}function txe(i,a){return i==null||a==null?NaN:a<i?-1:a>i?1:a>=i?0:NaN}function zft(i){let a,f,p;i.length!==2?(a=fU,f=(E,_)=>fU(i(E),_),p=(E,_)=>i(E)-_):(a=i===fU||i===txe?i:exe,f=i,p=i);function v(E,_,L=0,N=E.length){if(L<N){if(a(_,_)!==0)return N;do{const B=L+N>>>1;f(E[B],_)<0?L=B+1:N=B}while(L<N)}return L}function m(E,_,L=0,N=E.length){if(L<N){if(a(_,_)!==0)return N;do{const B=L+N>>>1;f(E[B],_)<=0?L=B+1:N=B}while(L<N)}return L}function b(E,_,L=0,N=E.length){const B=v(E,_,L,N-1);return B>L&&p(E[B-1],_)>-p(E[B],_)?B-1:B}return{left:v,center:b,right:m}}function exe(){return 0}function nxe(i){return i===null?NaN:+i}const rxe=zft(fU).right;zft(nxe).center;const ixe=rxe;class DLt extends Map{constructor(a,f=oxe){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:f}}),a!=null)for(const[p,v]of a)this.set(p,v)}get(a){return super.get(OLt(this,a))}has(a){return super.has(OLt(this,a))}set(a,f){return super.set(sxe(this,a),f)}delete(a){return super.delete(axe(this,a))}}function OLt({_intern:i,_key:a},f){const p=a(f);return i.has(p)?i.get(p):f}function sxe({_intern:i,_key:a},f){const p=a(f);return i.has(p)?i.get(p):(i.set(p,f),f)}function axe({_intern:i,_key:a},f){const p=a(f);return i.has(p)&&(f=i.get(p),i.delete(p)),f}function oxe(i){return i!==null&&typeof i=="object"?i.valueOf():i}var qft=Math.sqrt(50),Hft=Math.sqrt(10),Gft=Math.sqrt(2);function cxe(i,a,f){var p,v=-1,m,b,E;if(a=+a,i=+i,f=+f,i===a&&f>0)return[i];if((p=a<i)&&(m=i,i=a,a=m),(E=NLt(i,a,f))===0||!isFinite(E))return[];if(E>0){let _=Math.round(i/E),L=Math.round(a/E);for(_*E<i&&++_,L*E>a&&--L,b=new Array(m=L-_+1);++v<m;)b[v]=(_+v)*E}else{E=-E;let _=Math.round(i*E),L=Math.round(a*E);for(_/E<i&&++_,L/E>a&&--L,b=new Array(m=L-_+1);++v<m;)b[v]=(_+v)/E}return p&&b.reverse(),b}function NLt(i,a,f){var p=(a-i)/Math.max(0,f),v=Math.floor(Math.log(p)/Math.LN10),m=p/Math.pow(10,v);return v>=0?(m>=qft?10:m>=Hft?5:m>=Gft?2:1)*Math.pow(10,v):-Math.pow(10,-v)/(m>=qft?10:m>=Hft?5:m>=Gft?2:1)}function Vft(i,a,f){var p=Math.abs(a-i)/Math.max(0,f),v=Math.pow(10,Math.floor(Math.log(p)/Math.LN10)),m=p/v;return m>=qft?v*=10:m>=Hft?v*=5:m>=Gft&&(v*=2),a<i?-v:v}function uxe(i,a){let f;if(a===void 0)for(const p of i)p!=null&&(f<p||f===void 0&&p>=p)&&(f=p);else{let p=-1;for(let v of i)(v=a(v,++p,i))!=null&&(f<v||f===void 0&&v>=v)&&(f=v)}return f}function lxe(i,a){let f;if(a===void 0)for(const p of i)p!=null&&(f>p||f===void 0&&p>=p)&&(f=p);else{let p=-1;for(let v of i)(v=a(v,++p,i))!=null&&(f>v||f===void 0&&v>=v)&&(f=v)}return f}function hxe(i){return i}var dU=1,Uft=2,Wft=3,gU=4,PLt=1e-6;function fxe(i){return"translate("+i+",0)"}function dxe(i){return"translate(0,"+i+")"}function gxe(i){return a=>+i(a)}function pxe(i,a){return a=Math.max(0,i.bandwidth()-a*2)/2,i.round()&&(a=Math.round(a)),f=>+i(f)+a}function bxe(){return!this.__axis}function FLt(i,a){var f=[],p=null,v=null,m=6,b=6,E=3,_=typeof window<"u"&&window.devicePixelRatio>1?0:.5,L=i===dU||i===gU?-1:1,N=i===gU||i===Uft?"x":"y",B=i===dU||i===Wft?fxe:dxe;function j(R){var z=p??(a.ticks?a.ticks.apply(a,f):a.domain()),K=v??(a.tickFormat?a.tickFormat.apply(a,f):hxe),it=Math.max(m,0)+E,st=a.range(),ut=+st[0]+_,bt=+st[st.length-1]+_,mt=(a.bandwidth?pxe:gxe)(a.copy(),_),yt=R.selection?R.selection():R,dt=yt.selectAll(".domain").data([null]),ht=yt.selectAll(".tick").data(z,a).order(),wt=ht.exit(),X=ht.enter().append("g").attr("class","tick"),pt=ht.select("line"),U=ht.select("text");dt=dt.merge(dt.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),ht=ht.merge(X),pt=pt.merge(X.append("line").attr("stroke","currentColor").attr(N+"2",L*m)),U=U.merge(X.append("text").attr("fill","currentColor").attr(N,L*it).attr("dy",i===dU?"0em":i===Wft?"0.71em":"0.32em")),R!==yt&&(dt=dt.transition(R),ht=ht.transition(R),pt=pt.transition(R),U=U.transition(R),wt=wt.transition(R).attr("opacity",PLt).attr("transform",function(xt){return isFinite(xt=mt(xt))?B(xt+_):this.getAttribute("transform")}),X.attr("opacity",PLt).attr("transform",function(xt){var nt=this.parentNode.__axis;return B((nt&&isFinite(nt=nt(xt))?nt:mt(xt))+_)})),wt.remove(),dt.attr("d",i===gU||i===Uft?b?"M"+L*b+","+ut+"H"+_+"V"+bt+"H"+L*b:"M"+_+","+ut+"V"+bt:b?"M"+ut+","+L*b+"V"+_+"H"+bt+"V"+L*b:"M"+ut+","+_+"H"+bt),ht.attr("opacity",1).attr("transform",function(xt){return B(mt(xt)+_)}),pt.attr(N+"2",L*m),U.attr(N,L*it).text(K),yt.filter(bxe).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",i===Uft?"start":i===gU?"end":"middle"),yt.each(function(){this.__axis=mt})}return j.scale=function(R){return arguments.length?(a=R,j):a},j.ticks=function(){return f=Array.from(arguments),j},j.tickArguments=function(R){return arguments.length?(f=R==null?[]:Array.from(R),j):f.slice()},j.tickValues=function(R){return arguments.length?(p=R==null?null:Array.from(R),j):p&&p.slice()},j.tickFormat=function(R){return arguments.length?(v=R,j):v},j.tickSize=function(R){return arguments.length?(m=b=+R,j):m},j.tickSizeInner=function(R){return arguments.length?(m=+R,j):m},j.tickSizeOuter=function(R){return arguments.length?(b=+R,j):b},j.tickPadding=function(R){return arguments.length?(E=+R,j):E},j.offset=function(R){return arguments.length?(_=+R,j):_},j}function vxe(i){return FLt(dU,i)}function wxe(i){return FLt(Wft,i)}var mxe={value:()=>{}};function BLt(){for(var i=0,a=arguments.length,f={},p;i<a;++i){if(!(p=arguments[i]+"")||p in f||/[\s.]/.test(p))throw new Error("illegal type: "+p);f[p]=[]}return new pU(f)}function pU(i){this._=i}function yxe(i,a){return i.trim().split(/^|\s+/).map(function(f){var p="",v=f.indexOf(".");if(v>=0&&(p=f.slice(v+1),f=f.slice(0,v)),f&&!a.hasOwnProperty(f))throw new Error("unknown type: "+f);return{type:f,name:p}})}pU.prototype=BLt.prototype={constructor:pU,on:function(i,a){var f=this._,p=yxe(i+"",f),v,m=-1,b=p.length;if(arguments.length<2){for(;++m<b;)if((v=(i=p[m]).type)&&(v=xxe(f[v],i.name)))return v;return}if(a!=null&&typeof a!="function")throw new Error("invalid callback: "+a);for(;++m<b;)if(v=(i=p[m]).type)f[v]=RLt(f[v],i.name,a);else if(a==null)for(v in f)f[v]=RLt(f[v],i.name,null);return this},copy:function(){var i={},a=this._;for(var f in a)i[f]=a[f].slice();return new pU(i)},call:function(i,a){if((v=arguments.length-2)>0)for(var f=new Array(v),p=0,v,m;p<v;++p)f[p]=arguments[p+2];if(!this._.hasOwnProperty(i))throw new Error("unknown type: "+i);for(m=this._[i],p=0,v=m.length;p<v;++p)m[p].value.apply(a,f)},apply:function(i,a,f){if(!this._.hasOwnProperty(i))throw new Error("unknown type: "+i);for(var p=this._[i],v=0,m=p.length;v<m;++v)p[v].value.apply(a,f)}};function xxe(i,a){for(var f=0,p=i.length,v;f<p;++f)if((v=i[f]).name===a)return v.value}function RLt(i,a,f){for(var p=0,v=i.length;p<v;++p)if(i[p].name===a){i[p]=mxe,i=i.slice(0,p).concat(i.slice(p+1));break}return f!=null&&i.push({name:a,value:f}),i}var Kft="http://www.w3.org/1999/xhtml";const jLt={svg:"http://www.w3.org/2000/svg",xhtml:Kft,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};function bU(i){var a=i+="",f=a.indexOf(":");return f>=0&&(a=i.slice(0,f))!=="xmlns"&&(i=i.slice(f+1)),jLt.hasOwnProperty(a)?{space:jLt[a],local:i}:i}function kxe(i){return function(){var a=this.ownerDocument,f=this.namespaceURI;return f===Kft&&a.documentElement.namespaceURI===Kft?a.createElement(i):a.createElementNS(f,i)}}function Exe(i){return function(){return this.ownerDocument.createElementNS(i.space,i.local)}}function $Lt(i){var a=bU(i);return(a.local?Exe:kxe)(a)}function Txe(){}function Yft(i){return i==null?Txe:function(){return this.querySelector(i)}}function Cxe(i){typeof i!="function"&&(i=Yft(i));for(var a=this._groups,f=a.length,p=new Array(f),v=0;v<f;++v)for(var m=a[v],b=m.length,E=p[v]=new Array(b),_,L,N=0;N<b;++N)(_=m[N])&&(L=i.call(_,_.__data__,N,m))&&("__data__"in _&&(L.__data__=_.__data__),E[N]=L);return new ng(p,this._parents)}function zLt(i){return i==null?[]:Array.isArray(i)?i:Array.from(i)}function _xe(){return[]}function qLt(i){return i==null?_xe:function(){return this.querySelectorAll(i)}}function Sxe(i){return function(){return zLt(i.apply(this,arguments))}}function Axe(i){typeof i=="function"?i=Sxe(i):i=qLt(i);for(var a=this._groups,f=a.length,p=[],v=[],m=0;m<f;++m)for(var b=a[m],E=b.length,_,L=0;L<E;++L)(_=b[L])&&(p.push(i.call(_,_.__data__,L,b)),v.push(_));return new ng(p,v)}function HLt(i){return function(){return this.matches(i)}}function GLt(i){return function(a){return a.matches(i)}}var Lxe=Array.prototype.find;function Mxe(i){return function(){return Lxe.call(this.children,i)}}function Ixe(){return this.firstElementChild}function Dxe(i){return this.select(i==null?Ixe:Mxe(typeof i=="function"?i:GLt(i)))}var Oxe=Array.prototype.filter;function Nxe(){return Array.from(this.children)}function Pxe(i){return function(){return Oxe.call(this.children,i)}}function Fxe(i){return this.selectAll(i==null?Nxe:Pxe(typeof i=="function"?i:GLt(i)))}function Bxe(i){typeof i!="function"&&(i=HLt(i));for(var a=this._groups,f=a.length,p=new Array(f),v=0;v<f;++v)for(var m=a[v],b=m.length,E=p[v]=[],_,L=0;L<b;++L)(_=m[L])&&i.call(_,_.__data__,L,m)&&E.push(_);return new ng(p,this._parents)}function VLt(i){return new Array(i.length)}function Rxe(){return new ng(this._enter||this._groups.map(VLt),this._parents)}function vU(i,a){this.ownerDocument=i.ownerDocument,this.namespaceURI=i.namespaceURI,this._next=null,this._parent=i,this.__data__=a}vU.prototype={constructor:vU,appendChild:function(i){return this._parent.insertBefore(i,this._next)},insertBefore:function(i,a){return this._parent.insertBefore(i,a)},querySelector:function(i){return this._parent.querySelector(i)},querySelectorAll:function(i){return this._parent.querySelectorAll(i)}};function jxe(i){return function(){return i}}function $xe(i,a,f,p,v,m){for(var b=0,E,_=a.length,L=m.length;b<L;++b)(E=a[b])?(E.__data__=m[b],p[b]=E):f[b]=new vU(i,m[b]);for(;b<_;++b)(E=a[b])&&(v[b]=E)}function zxe(i,a,f,p,v,m,b){var E,_,L=new Map,N=a.length,B=m.length,j=new Array(N),R;for(E=0;E<N;++E)(_=a[E])&&(j[E]=R=b.call(_,_.__data__,E,a)+"",L.has(R)?v[E]=_:L.set(R,_));for(E=0;E<B;++E)R=b.call(i,m[E],E,m)+"",(_=L.get(R))?(p[E]=_,_.__data__=m[E],L.delete(R)):f[E]=new vU(i,m[E]);for(E=0;E<N;++E)(_=a[E])&&L.get(j[E])===_&&(v[E]=_)}function qxe(i){return i.__data__}function Hxe(i,a){if(!arguments.length)return Array.from(this,qxe);var f=a?zxe:$xe,p=this._parents,v=this._groups;typeof i!="function"&&(i=jxe(i));for(var m=v.length,b=new Array(m),E=new Array(m),_=new Array(m),L=0;L<m;++L){var N=p[L],B=v[L],j=B.length,R=Gxe(i.call(N,N&&N.__data__,L,p)),z=R.length,K=E[L]=new Array(z),it=b[L]=new Array(z),st=_[L]=new Array(j);f(N,B,K,it,st,R,a);for(var ut=0,bt=0,mt,yt;ut<z;++ut)if(mt=K[ut]){for(ut>=bt&&(bt=ut+1);!(yt=it[bt])&&++bt<z;);mt._next=yt||null}}return b=new ng(b,p),b._enter=E,b._exit=_,b}function Gxe(i){return typeof i=="object"&&"length"in i?i:Array.from(i)}function Vxe(){return new ng(this._exit||this._groups.map(VLt),this._parents)}function Uxe(i,a,f){var p=this.enter(),v=this,m=this.exit();return typeof i=="function"?(p=i(p),p&&(p=p.selection())):p=p.append(i+""),a!=null&&(v=a(v),v&&(v=v.selection())),f==null?m.remove():f(m),p&&v?p.merge(v).order():v}function Wxe(i){for(var a=i.selection?i.selection():i,f=this._groups,p=a._groups,v=f.length,m=p.length,b=Math.min(v,m),E=new Array(v),_=0;_<b;++_)for(var L=f[_],N=p[_],B=L.length,j=E[_]=new Array(B),R,z=0;z<B;++z)(R=L[z]||N[z])&&(j[z]=R);for(;_<v;++_)E[_]=f[_];return new ng(E,this._parents)}function Kxe(){for(var i=this._groups,a=-1,f=i.length;++a<f;)for(var p=i[a],v=p.length-1,m=p[v],b;--v>=0;)(b=p[v])&&(m&&b.compareDocumentPosition(m)^4&&m.parentNode.insertBefore(b,m),m=b);return this}function Yxe(i){i||(i=Xxe);function a(B,j){return B&&j?i(B.__data__,j.__data__):!B-!j}for(var f=this._groups,p=f.length,v=new Array(p),m=0;m<p;++m){for(var b=f[m],E=b.length,_=v[m]=new Array(E),L,N=0;N<E;++N)(L=b[N])&&(_[N]=L);_.sort(a)}return new ng(v,this._parents).order()}function Xxe(i,a){return i<a?-1:i>a?1:i>=a?0:NaN}function Qxe(){var i=arguments[0];return arguments[0]=this,i.apply(null,arguments),this}function Zxe(){return Array.from(this)}function Jxe(){for(var i=this._groups,a=0,f=i.length;a<f;++a)for(var p=i[a],v=0,m=p.length;v<m;++v){var b=p[v];if(b)return b}return null}function t6e(){let i=0;for(const a of this)++i;return i}function e6e(){return!this.node()}function n6e(i){for(var a=this._groups,f=0,p=a.length;f<p;++f)for(var v=a[f],m=0,b=v.length,E;m<b;++m)(E=v[m])&&i.call(E,E.__data__,m,v);return this}function r6e(i){return function(){this.removeAttribute(i)}}function i6e(i){return function(){this.removeAttributeNS(i.space,i.local)}}function s6e(i,a){return function(){this.setAttribute(i,a)}}function a6e(i,a){return function(){this.setAttributeNS(i.space,i.local,a)}}function o6e(i,a){return function(){var f=a.apply(this,arguments);f==null?this.removeAttribute(i):this.setAttribute(i,f)}}function c6e(i,a){return function(){var f=a.apply(this,arguments);f==null?this.removeAttributeNS(i.space,i.local):this.setAttributeNS(i.space,i.local,f)}}function u6e(i,a){var f=bU(i);if(arguments.length<2){var p=this.node();return f.local?p.getAttributeNS(f.space,f.local):p.getAttribute(f)}return this.each((a==null?f.local?i6e:r6e:typeof a=="function"?f.local?c6e:o6e:f.local?a6e:s6e)(f,a))}function ULt(i){return i.ownerDocument&&i.ownerDocument.defaultView||i.document&&i||i.defaultView}function l6e(i){return function(){this.style.removeProperty(i)}}function h6e(i,a,f){return function(){this.style.setProperty(i,a,f)}}function f6e(i,a,f){return function(){var p=a.apply(this,arguments);p==null?this.style.removeProperty(i):this.style.setProperty(i,p,f)}}function d6e(i,a,f){return arguments.length>1?this.each((a==null?l6e:typeof a=="function"?f6e:h6e)(i,a,f??"")):mA(this.node(),i)}function mA(i,a){return i.style.getPropertyValue(a)||ULt(i).getComputedStyle(i,null).getPropertyValue(a)}function g6e(i){return function(){delete this[i]}}function p6e(i,a){return function(){this[i]=a}}function b6e(i,a){return function(){var f=a.apply(this,arguments);f==null?delete this[i]:this[i]=f}}function v6e(i,a){return arguments.length>1?this.each((a==null?g6e:typeof a=="function"?b6e:p6e)(i,a)):this.node()[i]}function WLt(i){return i.trim().split(/^|\s+/)}function Xft(i){return i.classList||new KLt(i)}function KLt(i){this._node=i,this._names=WLt(i.getAttribute("class")||"")}KLt.prototype={add:function(i){var a=this._names.indexOf(i);a<0&&(this._names.push(i),this._node.setAttribute("class",this._names.join(" ")))},remove:function(i){var a=this._names.indexOf(i);a>=0&&(this._names.splice(a,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(i){return this._names.indexOf(i)>=0}};function YLt(i,a){for(var f=Xft(i),p=-1,v=a.length;++p<v;)f.add(a[p])}function XLt(i,a){for(var f=Xft(i),p=-1,v=a.length;++p<v;)f.remove(a[p])}function w6e(i){return function(){YLt(this,i)}}function m6e(i){return function(){XLt(this,i)}}function y6e(i,a){return function(){(a.apply(this,arguments)?YLt:XLt)(this,i)}}function x6e(i,a){var f=WLt(i+"");if(arguments.length<2){for(var p=Xft(this.node()),v=-1,m=f.length;++v<m;)if(!p.contains(f[v]))return!1;return!0}return this.each((typeof a=="function"?y6e:a?w6e:m6e)(f,a))}function k6e(){this.textContent=""}function E6e(i){return function(){this.textContent=i}}function T6e(i){return function(){var a=i.apply(this,arguments);this.textContent=a??""}}function C6e(i){return arguments.length?this.each(i==null?k6e:(typeof i=="function"?T6e:E6e)(i)):this.node().textContent}function _6e(){this.innerHTML=""}function S6e(i){return function(){this.innerHTML=i}}function A6e(i){return function(){var a=i.apply(this,arguments);this.innerHTML=a??""}}function L6e(i){return arguments.length?this.each(i==null?_6e:(typeof i=="function"?A6e:S6e)(i)):this.node().innerHTML}function M6e(){this.nextSibling&&this.parentNode.appendChild(this)}function I6e(){return this.each(M6e)}function D6e(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function O6e(){return this.each(D6e)}function N6e(i){var a=typeof i=="function"?i:$Lt(i);return this.select(function(){return this.appendChild(a.apply(this,arguments))})}function P6e(){return null}function F6e(i,a){var f=typeof i=="function"?i:$Lt(i),p=a==null?P6e:typeof a=="function"?a:Yft(a);return this.select(function(){return this.insertBefore(f.apply(this,arguments),p.apply(this,arguments)||null)})}function B6e(){var i=this.parentNode;i&&i.removeChild(this)}function R6e(){return this.each(B6e)}function j6e(){var i=this.cloneNode(!1),a=this.parentNode;return a?a.insertBefore(i,this.nextSibling):i}function $6e(){var i=this.cloneNode(!0),a=this.parentNode;return a?a.insertBefore(i,this.nextSibling):i}function z6e(i){return this.select(i?$6e:j6e)}function q6e(i){return arguments.length?this.property("__data__",i):this.node().__data__}function H6e(i){return function(a){i.call(this,a,this.__data__)}}function G6e(i){return i.trim().split(/^|\s+/).map(function(a){var f="",p=a.indexOf(".");return p>=0&&(f=a.slice(p+1),a=a.slice(0,p)),{type:a,name:f}})}function V6e(i){return function(){var a=this.__on;if(a){for(var f=0,p=-1,v=a.length,m;f<v;++f)m=a[f],(!i.type||m.type===i.type)&&m.name===i.name?this.removeEventListener(m.type,m.listener,m.options):a[++p]=m;++p?a.length=p:delete this.__on}}}function U6e(i,a,f){return function(){var p=this.__on,v,m=H6e(a);if(p){for(var b=0,E=p.length;b<E;++b)if((v=p[b]).type===i.type&&v.name===i.name){this.removeEventListener(v.type,v.listener,v.options),this.addEventListener(v.type,v.listener=m,v.options=f),v.value=a;return}}this.addEventListener(i.type,m,f),v={type:i.type,name:i.name,value:a,listener:m,options:f},p?p.push(v):this.__on=[v]}}function W6e(i,a,f){var p=G6e(i+""),v,m=p.length,b;if(arguments.length<2){var E=this.node().__on;if(E){for(var _=0,L=E.length,N;_<L;++_)for(v=0,N=E[_];v<m;++v)if((b=p[v]).type===N.type&&b.name===N.name)return N.value}return}for(E=a?U6e:V6e,v=0;v<m;++v)this.each(E(p[v],a,f));return this}function QLt(i,a,f){var p=ULt(i),v=p.CustomEvent;typeof v=="function"?v=new v(a,f):(v=p.document.createEvent("Event"),f?(v.initEvent(a,f.bubbles,f.cancelable),v.detail=f.detail):v.initEvent(a,!1,!1)),i.dispatchEvent(v)}function K6e(i,a){return function(){return QLt(this,i,a)}}function Y6e(i,a){return function(){return QLt(this,i,a.apply(this,arguments))}}function X6e(i,a){return this.each((typeof a=="function"?Y6e:K6e)(i,a))}function*Q6e(){for(var i=this._groups,a=0,f=i.length;a<f;++a)for(var p=i[a],v=0,m=p.length,b;v<m;++v)(b=p[v])&&(yield b)}var Qft=[null];function ng(i,a){this._groups=i,this._parents=a}function yN(){return new ng([[document.documentElement]],Qft)}function Z6e(){return this}ng.prototype=yN.prototype={constructor:ng,select:Cxe,selectAll:Axe,selectChild:Dxe,selectChildren:Fxe,filter:Bxe,data:Hxe,enter:Rxe,exit:Vxe,join:Uxe,merge:Wxe,selection:Z6e,order:Kxe,sort:Yxe,call:Qxe,nodes:Zxe,node:Jxe,size:t6e,empty:e6e,each:n6e,attr:u6e,style:d6e,property:v6e,classed:x6e,text:C6e,html:L6e,raise:I6e,lower:O6e,append:N6e,insert:F6e,remove:R6e,clone:z6e,datum:q6e,on:W6e,dispatch:X6e,[Symbol.iterator]:Q6e};function yr(i){return typeof i=="string"?new ng([[document.querySelector(i)]],[document.documentElement]):new ng([[i]],Qft)}function ZLt(i){return typeof i=="string"?new ng([document.querySelectorAll(i)],[document.documentElement]):new ng([zLt(i)],Qft)}function xN(i,a,f){i.prototype=a.prototype=f,f.constructor=i}function wU(i,a){var f=Object.create(i.prototype);for(var p in a)f[p]=a[p];return f}function R7(){}var kN=.7,mU=1/kN,yA="\\s*([+-]?\\d+)\\s*",EN="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",s3="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",J6e=/^#([0-9a-f]{3,8})$/,tke=new RegExp(`^rgb\\(${yA},${yA},${yA}\\)$`),eke=new RegExp(`^rgb\\(${s3},${s3},${s3}\\)$`),nke=new RegExp(`^rgba\\(${yA},${yA},${yA},${EN}\\)$`),rke=new RegExp(`^rgba\\(${s3},${s3},${s3},${EN}\\)$`),ike=new RegExp(`^hsl\\(${EN},${s3},${s3}\\)$`),ske=new RegExp(`^hsla\\(${EN},${s3},${s3},${EN}\\)$`),JLt={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};xN(R7,j7,{copy(i){return Object.assign(new this.constructor,this,i)},displayable(){return this.rgb().displayable()},hex:tMt,formatHex:tMt,formatHex8:ake,formatHsl:oke,formatRgb:eMt,toString:eMt});function tMt(){return this.rgb().formatHex()}function ake(){return this.rgb().formatHex8()}function oke(){return oMt(this).formatHsl()}function eMt(){return this.rgb().formatRgb()}function j7(i){var a,f;return i=(i+"").trim().toLowerCase(),(a=J6e.exec(i))?(f=a[1].length,a=parseInt(a[1],16),f===6?nMt(a):f===3?new p0(a>>8&15|a>>4&240,a>>4&15|a&240,(a&15)<<4|a&15,1):f===8?yU(a>>24&255,a>>16&255,a>>8&255,(a&255)/255):f===4?yU(a>>12&15|a>>8&240,a>>8&15|a>>4&240,a>>4&15|a&240,((a&15)<<4|a&15)/255):null):(a=tke.exec(i))?new p0(a[1],a[2],a[3],1):(a=eke.exec(i))?new p0(a[1]*255/100,a[2]*255/100,a[3]*255/100,1):(a=nke.exec(i))?yU(a[1],a[2],a[3],a[4]):(a=rke.exec(i))?yU(a[1]*255/100,a[2]*255/100,a[3]*255/100,a[4]):(a=ike.exec(i))?aMt(a[1],a[2]/100,a[3]/100,1):(a=ske.exec(i))?aMt(a[1],a[2]/100,a[3]/100,a[4]):JLt.hasOwnProperty(i)?nMt(JLt[i]):i==="transparent"?new p0(NaN,NaN,NaN,0):null}function nMt(i){return new p0(i>>16&255,i>>8&255,i&255,1)}function yU(i,a,f,p){return p<=0&&(i=a=f=NaN),new p0(i,a,f,p)}function rMt(i){return i instanceof R7||(i=j7(i)),i?(i=i.rgb(),new p0(i.r,i.g,i.b,i.opacity)):new p0}function Zft(i,a,f,p){return arguments.length===1?rMt(i):new p0(i,a,f,p??1)}function p0(i,a,f,p){this.r=+i,this.g=+a,this.b=+f,this.opacity=+p}xN(p0,Zft,wU(R7,{brighter(i){return i=i==null?mU:Math.pow(mU,i),new p0(this.r*i,this.g*i,this.b*i,this.opacity)},darker(i){return i=i==null?kN:Math.pow(kN,i),new p0(this.r*i,this.g*i,this.b*i,this.opacity)},rgb(){return this},clamp(){return new p0($7(this.r),$7(this.g),$7(this.b),xU(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:iMt,formatHex:iMt,formatHex8:cke,formatRgb:sMt,toString:sMt}));function iMt(){return`#${z7(this.r)}${z7(this.g)}${z7(this.b)}`}function cke(){return`#${z7(this.r)}${z7(this.g)}${z7(this.b)}${z7((isNaN(this.opacity)?1:this.opacity)*255)}`}function sMt(){const i=xU(this.opacity);return`${i===1?"rgb(":"rgba("}${$7(this.r)}, ${$7(this.g)}, ${$7(this.b)}${i===1?")":`, ${i})`}`}function xU(i){return isNaN(i)?1:Math.max(0,Math.min(1,i))}function $7(i){return Math.max(0,Math.min(255,Math.round(i)||0))}function z7(i){return i=$7(i),(i<16?"0":"")+i.toString(16)}function aMt(i,a,f,p){return p<=0?i=a=f=NaN:f<=0||f>=1?i=a=NaN:a<=0&&(i=NaN),new Ww(i,a,f,p)}function oMt(i){if(i instanceof Ww)return new Ww(i.h,i.s,i.l,i.opacity);if(i instanceof R7||(i=j7(i)),!i)return new Ww;if(i instanceof Ww)return i;i=i.rgb();var a=i.r/255,f=i.g/255,p=i.b/255,v=Math.min(a,f,p),m=Math.max(a,f,p),b=NaN,E=m-v,_=(m+v)/2;return E?(a===m?b=(f-p)/E+(f<p)*6:f===m?b=(p-a)/E+2:b=(a-f)/E+4,E/=_<.5?m+v:2-m-v,b*=60):E=_>0&&_<1?0:b,new Ww(b,E,_,i.opacity)}function uke(i,a,f,p){return arguments.length===1?oMt(i):new Ww(i,a,f,p??1)}function Ww(i,a,f,p){this.h=+i,this.s=+a,this.l=+f,this.opacity=+p}xN(Ww,uke,wU(R7,{brighter(i){return i=i==null?mU:Math.pow(mU,i),new Ww(this.h,this.s,this.l*i,this.opacity)},darker(i){return i=i==null?kN:Math.pow(kN,i),new Ww(this.h,this.s,this.l*i,this.opacity)},rgb(){var i=this.h%360+(this.h<0)*360,a=isNaN(i)||isNaN(this.s)?0:this.s,f=this.l,p=f+(f<.5?f:1-f)*a,v=2*f-p;return new p0(Jft(i>=240?i-240:i+120,v,p),Jft(i,v,p),Jft(i<120?i+240:i-120,v,p),this.opacity)},clamp(){return new Ww(cMt(this.h),kU(this.s),kU(this.l),xU(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(){const i=xU(this.opacity);return`${i===1?"hsl(":"hsla("}${cMt(this.h)}, ${kU(this.s)*100}%, ${kU(this.l)*100}%${i===1?")":`, ${i})`}`}}));function cMt(i){return i=(i||0)%360,i<0?i+360:i}function kU(i){return Math.max(0,Math.min(1,i||0))}function Jft(i,a,f){return(i<60?a+(f-a)*i/60:i<180?f:i<240?a+(f-a)*(240-i)/60:a)*255}const lke=Math.PI/180,hke=180/Math.PI,EU=18,uMt=.96422,lMt=1,hMt=.82521,fMt=4/29,xA=6/29,dMt=3*xA*xA,fke=xA*xA*xA;function gMt(i){if(i instanceof a3)return new a3(i.l,i.a,i.b,i.opacity);if(i instanceof g5)return pMt(i);i instanceof p0||(i=rMt(i));var a=r1t(i.r),f=r1t(i.g),p=r1t(i.b),v=t1t((.2225045*a+.7168786*f+.0606169*p)/lMt),m,b;return a===f&&f===p?m=b=v:(m=t1t((.4360747*a+.3850649*f+.1430804*p)/uMt),b=t1t((.0139322*a+.0971045*f+.7141733*p)/hMt)),new a3(116*v-16,500*(m-v),200*(v-b),i.opacity)}function dke(i,a,f,p){return arguments.length===1?gMt(i):new a3(i,a,f,p??1)}function a3(i,a,f,p){this.l=+i,this.a=+a,this.b=+f,this.opacity=+p}xN(a3,dke,wU(R7,{brighter(i){return new a3(this.l+EU*(i??1),this.a,this.b,this.opacity)},darker(i){return new a3(this.l-EU*(i??1),this.a,this.b,this.opacity)},rgb(){var i=(this.l+16)/116,a=isNaN(this.a)?i:i+this.a/500,f=isNaN(this.b)?i:i-this.b/200;return a=uMt*e1t(a),i=lMt*e1t(i),f=hMt*e1t(f),new p0(n1t(3.1338561*a-1.6168667*i-.4906146*f),n1t(-.9787684*a+1.9161415*i+.033454*f),n1t(.0719453*a-.2289914*i+1.4052427*f),this.opacity)}}));function t1t(i){return i>fke?Math.pow(i,1/3):i/dMt+fMt}function e1t(i){return i>xA?i*i*i:dMt*(i-fMt)}function n1t(i){return 255*(i<=.0031308?12.92*i:1.055*Math.pow(i,1/2.4)-.055)}function r1t(i){return(i/=255)<=.04045?i/12.92:Math.pow((i+.055)/1.055,2.4)}function gke(i){if(i instanceof g5)return new g5(i.h,i.c,i.l,i.opacity);if(i instanceof a3||(i=gMt(i)),i.a===0&&i.b===0)return new g5(NaN,0<i.l&&i.l<100?0:NaN,i.l,i.opacity);var a=Math.atan2(i.b,i.a)*hke;return new g5(a<0?a+360:a,Math.sqrt(i.a*i.a+i.b*i.b),i.l,i.opacity)}function i1t(i,a,f,p){return arguments.length===1?gke(i):new g5(i,a,f,p??1)}function g5(i,a,f,p){this.h=+i,this.c=+a,this.l=+f,this.opacity=+p}function pMt(i){if(isNaN(i.h))return new a3(i.l,0,0,i.opacity);var a=i.h*lke;return new a3(i.l,Math.cos(a)*i.c,Math.sin(a)*i.c,i.opacity)}xN(g5,i1t,wU(R7,{brighter(i){return new g5(this.h,this.c,this.l+EU*(i??1),this.opacity)},darker(i){return new g5(this.h,this.c,this.l-EU*(i??1),this.opacity)},rgb(){return pMt(this).rgb()}}));const TU=i=>()=>i;function bMt(i,a){return function(f){return i+f*a}}function pke(i,a,f){return i=Math.pow(i,f),a=Math.pow(a,f)-i,f=1/f,function(p){return Math.pow(i+p*a,f)}}function bke(i,a){var f=a-i;return f?bMt(i,f>180||f<-180?f-360*Math.round(f/360):f):TU(isNaN(i)?a:i)}function vke(i){return(i=+i)==1?TN:function(a,f){return f-a?pke(a,f,i):TU(isNaN(a)?f:a)}}function TN(i,a){var f=a-i;return f?bMt(i,f):TU(isNaN(i)?a:i)}const CU=function i(a){var f=vke(a);function p(v,m){var b=f((v=Zft(v)).r,(m=Zft(m)).r),E=f(v.g,m.g),_=f(v.b,m.b),L=TN(v.opacity,m.opacity);return function(N){return v.r=b(N),v.g=E(N),v.b=_(N),v.opacity=L(N),v+""}}return p.gamma=i,p}(1);function wke(i,a){a||(a=[]);var f=i?Math.min(a.length,i.length):0,p=a.slice(),v;return function(m){for(v=0;v<f;++v)p[v]=i[v]*(1-m)+a[v]*m;return p}}function mke(i){return ArrayBuffer.isView(i)&&!(i instanceof DataView)}function yke(i,a){var f=a?a.length:0,p=i?Math.min(f,i.length):0,v=new Array(p),m=new Array(f),b;for(b=0;b<p;++b)v[b]=o1t(i[b],a[b]);for(;b<f;++b)m[b]=a[b];return function(E){for(b=0;b<p;++b)m[b]=v[b](E);return m}}function xke(i,a){var f=new Date;return i=+i,a=+a,function(p){return f.setTime(i*(1-p)+a*p),f}}function Kw(i,a){return i=+i,a=+a,function(f){return i*(1-f)+a*f}}function kke(i,a){var f={},p={},v;(i===null||typeof i!="object")&&(i={}),(a===null||typeof a!="object")&&(a={});for(v in a)v in i?f[v]=o1t(i[v],a[v]):p[v]=a[v];return function(m){for(v in f)p[v]=f[v](m);return p}}var s1t=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,a1t=new RegExp(s1t.source,"g");function Eke(i){return function(){return i}}function Tke(i){return function(a){return i(a)+""}}function vMt(i,a){var f=s1t.lastIndex=a1t.lastIndex=0,p,v,m,b=-1,E=[],_=[];for(i=i+"",a=a+"";(p=s1t.exec(i))&&(v=a1t.exec(a));)(m=v.index)>f&&(m=a.slice(f,m),E[b]?E[b]+=m:E[++b]=m),(p=p[0])===(v=v[0])?E[b]?E[b]+=v:E[++b]=v:(E[++b]=null,_.push({i:b,x:Kw(p,v)})),f=a1t.lastIndex;return f<a.length&&(m=a.slice(f),E[b]?E[b]+=m:E[++b]=m),E.length<2?_[0]?Tke(_[0].x):Eke(a):(a=_.length,function(L){for(var N=0,B;N<a;++N)E[(B=_[N]).i]=B.x(L);return E.join("")})}function o1t(i,a){var f=typeof a,p;return a==null||f==="boolean"?TU(a):(f==="number"?Kw:f==="string"?(p=j7(a))?(a=p,CU):vMt:a instanceof j7?CU:a instanceof Date?xke:mke(a)?wke:Array.isArray(a)?yke:typeof a.valueOf!="function"&&typeof a.toString!="function"||isNaN(a)?kke:Kw)(i,a)}function Cke(i,a){return i=+i,a=+a,function(f){return Math.round(i*(1-f)+a*f)}}var wMt=180/Math.PI,c1t={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};function mMt(i,a,f,p,v,m){var b,E,_;return(b=Math.sqrt(i*i+a*a))&&(i/=b,a/=b),(_=i*f+a*p)&&(f-=i*_,p-=a*_),(E=Math.sqrt(f*f+p*p))&&(f/=E,p/=E,_/=E),i*p<a*f&&(i=-i,a=-a,_=-_,b=-b),{translateX:v,translateY:m,rotate:Math.atan2(a,i)*wMt,skewX:Math.atan(_)*wMt,scaleX:b,scaleY:E}}var _U;function _ke(i){const a=new(typeof DOMMatrix=="function"?DOMMatrix:WebKitCSSMatrix)(i+"");return a.isIdentity?c1t:mMt(a.a,a.b,a.c,a.d,a.e,a.f)}function Ske(i){return i==null||(_U||(_U=document.createElementNS("http://www.w3.org/2000/svg","g")),_U.setAttribute("transform",i),!(i=_U.transform.baseVal.consolidate()))?c1t:(i=i.matrix,mMt(i.a,i.b,i.c,i.d,i.e,i.f))}function yMt(i,a,f,p){function v(L){return L.length?L.pop()+" ":""}function m(L,N,B,j,R,z){if(L!==B||N!==j){var K=R.push("translate(",null,a,null,f);z.push({i:K-4,x:Kw(L,B)},{i:K-2,x:Kw(N,j)})}else(B||j)&&R.push("translate("+B+a+j+f)}function b(L,N,B,j){L!==N?(L-N>180?N+=360:N-L>180&&(L+=360),j.push({i:B.push(v(B)+"rotate(",null,p)-2,x:Kw(L,N)})):N&&B.push(v(B)+"rotate("+N+p)}function E(L,N,B,j){L!==N?j.push({i:B.push(v(B)+"skewX(",null,p)-2,x:Kw(L,N)}):N&&B.push(v(B)+"skewX("+N+p)}function _(L,N,B,j,R,z){if(L!==B||N!==j){var K=R.push(v(R)+"scale(",null,",",null,")");z.push({i:K-4,x:Kw(L,B)},{i:K-2,x:Kw(N,j)})}else(B!==1||j!==1)&&R.push(v(R)+"scale("+B+","+j+")")}return function(L,N){var B=[],j=[];return L=i(L),N=i(N),m(L.translateX,L.translateY,N.translateX,N.translateY,B,j),b(L.rotate,N.rotate,B,j),E(L.skewX,N.skewX,B,j),_(L.scaleX,L.scaleY,N.scaleX,N.scaleY,B,j),L=N=null,function(R){for(var z=-1,K=j.length,it;++z<K;)B[(it=j[z]).i]=it.x(R);return B.join("")}}}var Ake=yMt(_ke,"px, ","px)","deg)"),Lke=yMt(Ske,", ",")",")");function Mke(i){return function(a,f){var p=i((a=i1t(a)).h,(f=i1t(f)).h),v=TN(a.c,f.c),m=TN(a.l,f.l),b=TN(a.opacity,f.opacity);return function(E){return a.h=p(E),a.c=v(E),a.l=m(E),a.opacity=b(E),a+""}}}const Ike=Mke(bke);var kA=0,CN=0,_N=0,xMt=1e3,SU,SN,AU=0,q7=0,LU=0,AN=typeof performance=="object"&&performance.now?performance:Date,kMt=typeof window=="object"&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(i){setTimeout(i,17)};function u1t(){return q7||(kMt(Dke),q7=AN.now()+LU)}function Dke(){q7=0}function MU(){this._call=this._time=this._next=null}MU.prototype=EMt.prototype={constructor:MU,restart:function(i,a,f){if(typeof i!="function")throw new TypeError("callback is not a function");f=(f==null?u1t():+f)+(a==null?0:+a),!this._next&&SN!==this&&(SN?SN._next=this:SU=this,SN=this),this._call=i,this._time=f,l1t()},stop:function(){this._call&&(this._call=null,this._time=1/0,l1t())}};function EMt(i,a,f){var p=new MU;return p.restart(i,a,f),p}function Oke(){u1t(),++kA;for(var i=SU,a;i;)(a=q7-i._time)>=0&&i._call.call(void 0,a),i=i._next;--kA}function TMt(){q7=(AU=AN.now())+LU,kA=CN=0;try{Oke()}finally{kA=0,Pke(),q7=0}}function Nke(){var i=AN.now(),a=i-AU;a>xMt&&(LU-=a,AU=i)}function Pke(){for(var i,a=SU,f,p=1/0;a;)a._call?(p>a._time&&(p=a._time),i=a,a=a._next):(f=a._next,a._next=null,a=i?i._next=f:SU=f);SN=i,l1t(p)}function l1t(i){if(!kA){CN&&(CN=clearTimeout(CN));var a=i-q7;a>24?(i<1/0&&(CN=setTimeout(TMt,i-AN.now()-LU)),_N&&(_N=clearInterval(_N))):(_N||(AU=AN.now(),_N=setInterval(Nke,xMt)),kA=1,kMt(TMt))}}function CMt(i,a,f){var p=new MU;return a=a==null?0:+a,p.restart(v=>{p.stop(),i(v+a)},a,f),p}var Fke=BLt("start","end","cancel","interrupt"),Bke=[],_Mt=0,SMt=1,h1t=2,IU=3,AMt=4,f1t=5,DU=6;function OU(i,a,f,p,v,m){var b=i.__transition;if(!b)i.__transition={};else if(f in b)return;Rke(i,f,{name:a,index:p,group:v,on:Fke,tween:Bke,time:m.time,delay:m.delay,duration:m.duration,ease:m.ease,timer:null,state:_Mt})}function d1t(i,a){var f=Yw(i,a);if(f.state>_Mt)throw new Error("too late; already scheduled");return f}function o3(i,a){var f=Yw(i,a);if(f.state>IU)throw new Error("too late; already running");return f}function Yw(i,a){var f=i.__transition;if(!f||!(f=f[a]))throw new Error("transition not found");return f}function Rke(i,a,f){var p=i.__transition,v;p[a]=f,f.timer=EMt(m,0,f.time);function m(L){f.state=SMt,f.timer.restart(b,f.delay,f.time),f.delay<=L&&b(L-f.delay)}function b(L){var N,B,j,R;if(f.state!==SMt)return _();for(N in p)if(R=p[N],R.name===f.name){if(R.state===IU)return CMt(b);R.state===AMt?(R.state=DU,R.timer.stop(),R.on.call("interrupt",i,i.__data__,R.index,R.group),delete p[N]):+N<a&&(R.state=DU,R.timer.stop(),R.on.call("cancel",i,i.__data__,R.index,R.group),delete p[N])}if(CMt(function(){f.state===IU&&(f.state=AMt,f.timer.restart(E,f.delay,f.time),E(L))}),f.state=h1t,f.on.call("start",i,i.__data__,f.index,f.group),f.state===h1t){for(f.state=IU,v=new Array(j=f.tween.length),N=0,B=-1;N<j;++N)(R=f.tween[N].value.call(i,i.__data__,f.index,f.group))&&(v[++B]=R);v.length=B+1}}function E(L){for(var N=L<f.duration?f.ease.call(null,L/f.duration):(f.timer.restart(_),f.state=f1t,1),B=-1,j=v.length;++B<j;)v[B].call(i,N);f.state===f1t&&(f.on.call("end",i,i.__data__,f.index,f.group),_())}function _(){f.state=DU,f.timer.stop(),delete p[a];for(var L in p)return;delete i.__transition}}function jke(i,a){var f=i.__transition,p,v,m=!0,b;if(f){a=a==null?null:a+"";for(b in f){if((p=f[b]).name!==a){m=!1;continue}v=p.state>h1t&&p.state<f1t,p.state=DU,p.timer.stop(),p.on.call(v?"interrupt":"cancel",i,i.__data__,p.index,p.group),delete f[b]}m&&delete i.__transition}}function $ke(i){return this.each(function(){jke(this,i)})}function zke(i,a){var f,p;return function(){var v=o3(this,i),m=v.tween;if(m!==f){p=f=m;for(var b=0,E=p.length;b<E;++b)if(p[b].name===a){p=p.slice(),p.splice(b,1);break}}v.tween=p}}function qke(i,a,f){var p,v;if(typeof f!="function")throw new Error;return function(){var m=o3(this,i),b=m.tween;if(b!==p){v=(p=b).slice();for(var E={name:a,value:f},_=0,L=v.length;_<L;++_)if(v[_].name===a){v[_]=E;break}_===L&&v.push(E)}m.tween=v}}function Hke(i,a){var f=this._id;if(i+="",arguments.length<2){for(var p=Yw(this.node(),f).tween,v=0,m=p.length,b;v<m;++v)if((b=p[v]).name===i)return b.value;return null}return this.each((a==null?zke:qke)(f,i,a))}function g1t(i,a,f){var p=i._id;return i.each(function(){var v=o3(this,p);(v.value||(v.value={}))[a]=f.apply(this,arguments)}),function(v){return Yw(v,p).value[a]}}function LMt(i,a){var f;return(typeof a=="number"?Kw:a instanceof j7?CU:(f=j7(a))?(a=f,CU):vMt)(i,a)}function Gke(i){return function(){this.removeAttribute(i)}}function Vke(i){return function(){this.removeAttributeNS(i.space,i.local)}}function Uke(i,a,f){var p,v=f+"",m;return function(){var b=this.getAttribute(i);return b===v?null:b===p?m:m=a(p=b,f)}}function Wke(i,a,f){var p,v=f+"",m;return function(){var b=this.getAttributeNS(i.space,i.local);return b===v?null:b===p?m:m=a(p=b,f)}}function Kke(i,a,f){var p,v,m;return function(){var b,E=f(this),_;return E==null?void this.removeAttribute(i):(b=this.getAttribute(i),_=E+"",b===_?null:b===p&&_===v?m:(v=_,m=a(p=b,E)))}}function Yke(i,a,f){var p,v,m;return function(){var b,E=f(this),_;return E==null?void this.removeAttributeNS(i.space,i.local):(b=this.getAttributeNS(i.space,i.local),_=E+"",b===_?null:b===p&&_===v?m:(v=_,m=a(p=b,E)))}}function Xke(i,a){var f=bU(i),p=f==="transform"?Lke:LMt;return this.attrTween(i,typeof a=="function"?(f.local?Yke:Kke)(f,p,g1t(this,"attr."+i,a)):a==null?(f.local?Vke:Gke)(f):(f.local?Wke:Uke)(f,p,a))}function Qke(i,a){return function(f){this.setAttribute(i,a.call(this,f))}}function Zke(i,a){return function(f){this.setAttributeNS(i.space,i.local,a.call(this,f))}}function Jke(i,a){var f,p;function v(){var m=a.apply(this,arguments);return m!==p&&(f=(p=m)&&Zke(i,m)),f}return v._value=a,v}function t8e(i,a){var f,p;function v(){var m=a.apply(this,arguments);return m!==p&&(f=(p=m)&&Qke(i,m)),f}return v._value=a,v}function e8e(i,a){var f="attr."+i;if(arguments.length<2)return(f=this.tween(f))&&f._value;if(a==null)return this.tween(f,null);if(typeof a!="function")throw new Error;var p=bU(i);return this.tween(f,(p.local?Jke:t8e)(p,a))}function n8e(i,a){return function(){d1t(this,i).delay=+a.apply(this,arguments)}}function r8e(i,a){return a=+a,function(){d1t(this,i).delay=a}}function i8e(i){var a=this._id;return arguments.length?this.each((typeof i=="function"?n8e:r8e)(a,i)):Yw(this.node(),a).delay}function s8e(i,a){return function(){o3(this,i).duration=+a.apply(this,arguments)}}function a8e(i,a){return a=+a,function(){o3(this,i).duration=a}}function o8e(i){var a=this._id;return arguments.length?this.each((typeof i=="function"?s8e:a8e)(a,i)):Yw(this.node(),a).duration}function c8e(i,a){if(typeof a!="function")throw new Error;return function(){o3(this,i).ease=a}}function u8e(i){var a=this._id;return arguments.length?this.each(c8e(a,i)):Yw(this.node(),a).ease}function l8e(i,a){return function(){var f=a.apply(this,arguments);if(typeof f!="function")throw new Error;o3(this,i).ease=f}}function h8e(i){if(typeof i!="function")throw new Error;return this.each(l8e(this._id,i))}function f8e(i){typeof i!="function"&&(i=HLt(i));for(var a=this._groups,f=a.length,p=new Array(f),v=0;v<f;++v)for(var m=a[v],b=m.length,E=p[v]=[],_,L=0;L<b;++L)(_=m[L])&&i.call(_,_.__data__,L,m)&&E.push(_);return new p5(p,this._parents,this._name,this._id)}function d8e(i){if(i._id!==this._id)throw new Error;for(var a=this._groups,f=i._groups,p=a.length,v=f.length,m=Math.min(p,v),b=new Array(p),E=0;E<m;++E)for(var _=a[E],L=f[E],N=_.length,B=b[E]=new Array(N),j,R=0;R<N;++R)(j=_[R]||L[R])&&(B[R]=j);for(;E<p;++E)b[E]=a[E];return new p5(b,this._parents,this._name,this._id)}function g8e(i){return(i+"").trim().split(/^|\s+/).every(function(a){var f=a.indexOf(".");return f>=0&&(a=a.slice(0,f)),!a||a==="start"})}function p8e(i,a,f){var p,v,m=g8e(a)?d1t:o3;return function(){var b=m(this,i),E=b.on;E!==p&&(v=(p=E).copy()).on(a,f),b.on=v}}function b8e(i,a){var f=this._id;return arguments.length<2?Yw(this.node(),f).on.on(i):this.each(p8e(f,i,a))}function v8e(i){return function(){var a=this.parentNode;for(var f in this.__transition)if(+f!==i)return;a&&a.removeChild(this)}}function w8e(){return this.on("end.remove",v8e(this._id))}function m8e(i){var a=this._name,f=this._id;typeof i!="function"&&(i=Yft(i));for(var p=this._groups,v=p.length,m=new Array(v),b=0;b<v;++b)for(var E=p[b],_=E.length,L=m[b]=new Array(_),N,B,j=0;j<_;++j)(N=E[j])&&(B=i.call(N,N.__data__,j,E))&&("__data__"in N&&(B.__data__=N.__data__),L[j]=B,OU(L[j],a,f,j,L,Yw(N,f)));return new p5(m,this._parents,a,f)}function y8e(i){var a=this._name,f=this._id;typeof i!="function"&&(i=qLt(i));for(var p=this._groups,v=p.length,m=[],b=[],E=0;E<v;++E)for(var _=p[E],L=_.length,N,B=0;B<L;++B)if(N=_[B]){for(var j=i.call(N,N.__data__,B,_),R,z=Yw(N,f),K=0,it=j.length;K<it;++K)(R=j[K])&&OU(R,a,f,K,j,z);m.push(j),b.push(N)}return new p5(m,b,a,f)}var x8e=yN.prototype.constructor;function k8e(){return new x8e(this._groups,this._parents)}function E8e(i,a){var f,p,v;return function(){var m=mA(this,i),b=(this.style.removeProperty(i),mA(this,i));return m===b?null:m===f&&b===p?v:v=a(f=m,p=b)}}function MMt(i){return function(){this.style.removeProperty(i)}}function T8e(i,a,f){var p,v=f+"",m;return function(){var b=mA(this,i);return b===v?null:b===p?m:m=a(p=b,f)}}function C8e(i,a,f){var p,v,m;return function(){var b=mA(this,i),E=f(this),_=E+"";return E==null&&(_=E=(this.style.removeProperty(i),mA(this,i))),b===_?null:b===p&&_===v?m:(v=_,m=a(p=b,E))}}function _8e(i,a){var f,p,v,m="style."+a,b="end."+m,E;return function(){var _=o3(this,i),L=_.on,N=_.value[m]==null?E||(E=MMt(a)):void 0;(L!==f||v!==N)&&(p=(f=L).copy()).on(b,v=N),_.on=p}}function S8e(i,a,f){var p=(i+="")=="transform"?Ake:LMt;return a==null?this.styleTween(i,E8e(i,p)).on("end.style."+i,MMt(i)):typeof a=="function"?this.styleTween(i,C8e(i,p,g1t(this,"style."+i,a))).each(_8e(this._id,i)):this.styleTween(i,T8e(i,p,a),f).on("end.style."+i,null)}function A8e(i,a,f){return function(p){this.style.setProperty(i,a.call(this,p),f)}}function L8e(i,a,f){var p,v;function m(){var b=a.apply(this,arguments);return b!==v&&(p=(v=b)&&A8e(i,b,f)),p}return m._value=a,m}function M8e(i,a,f){var p="style."+(i+="");if(arguments.length<2)return(p=this.tween(p))&&p._value;if(a==null)return this.tween(p,null);if(typeof a!="function")throw new Error;return this.tween(p,L8e(i,a,f??""))}function I8e(i){return function(){this.textContent=i}}function D8e(i){return function(){var a=i(this);this.textContent=a??""}}function O8e(i){return this.tween("text",typeof i=="function"?D8e(g1t(this,"text",i)):I8e(i==null?"":i+""))}function N8e(i){return function(a){this.textContent=i.call(this,a)}}function P8e(i){var a,f;function p(){var v=i.apply(this,arguments);return v!==f&&(a=(f=v)&&N8e(v)),a}return p._value=i,p}function F8e(i){var a="text";if(arguments.length<1)return(a=this.tween(a))&&a._value;if(i==null)return this.tween(a,null);if(typeof i!="function")throw new Error;return this.tween(a,P8e(i))}function B8e(){for(var i=this._name,a=this._id,f=IMt(),p=this._groups,v=p.length,m=0;m<v;++m)for(var b=p[m],E=b.length,_,L=0;L<E;++L)if(_=b[L]){var N=Yw(_,a);OU(_,i,f,L,b,{time:N.time+N.delay+N.duration,delay:0,duration:N.duration,ease:N.ease})}return new p5(p,this._parents,i,f)}function R8e(){var i,a,f=this,p=f._id,v=f.size();return new Promise(function(m,b){var E={value:b},_={value:function(){--v===0&&m()}};f.each(function(){var L=o3(this,p),N=L.on;N!==i&&(a=(i=N).copy(),a._.cancel.push(E),a._.interrupt.push(E),a._.end.push(_)),L.on=a}),v===0&&m()})}var j8e=0;function p5(i,a,f,p){this._groups=i,this._parents=a,this._name=f,this._id=p}function IMt(){return++j8e}var b5=yN.prototype;p5.prototype={constructor:p5,select:m8e,selectAll:y8e,selectChild:b5.selectChild,selectChildren:b5.selectChildren,filter:f8e,merge:d8e,selection:k8e,transition:B8e,call:b5.call,nodes:b5.nodes,node:b5.node,size:b5.size,empty:b5.empty,each:b5.each,on:b8e,attr:Xke,attrTween:e8e,style:S8e,styleTween:M8e,text:O8e,textTween:F8e,remove:w8e,tween:Hke,delay:i8e,duration:o8e,ease:u8e,easeVarying:h8e,end:R8e,[Symbol.iterator]:b5[Symbol.iterator]};function $8e(i){return((i*=2)<=1?i*i*i:(i-=2)*i*i+2)/2}var z8e={time:null,delay:0,duration:250,ease:$8e};function q8e(i,a){for(var f;!(f=i.__transition)||!(f=f[a]);)if(!(i=i.parentNode))throw new Error(`transition ${a} not found`);return f}function H8e(i){var a,f;i instanceof p5?(a=i._id,i=i._name):(a=IMt(),(f=z8e).time=u1t(),i=i==null?null:i+"");for(var p=this._groups,v=p.length,m=0;m<v;++m)for(var b=p[m],E=b.length,_,L=0;L<E;++L)(_=b[L])&&OU(_,i,a,L,b,f||q8e(_,a));return new p5(p,this._parents,i,a)}yN.prototype.interrupt=$ke,yN.prototype.transition=H8e;const p1t=Math.PI,b1t=2*p1t,H7=1e-6,G8e=b1t-H7;function v1t(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function w1t(){return new v1t}v1t.prototype=w1t.prototype={constructor:v1t,moveTo:function(i,a){this._+="M"+(this._x0=this._x1=+i)+","+(this._y0=this._y1=+a)},closePath:function(){this._x1!==null&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function(i,a){this._+="L"+(this._x1=+i)+","+(this._y1=+a)},quadraticCurveTo:function(i,a,f,p){this._+="Q"+ +i+","+ +a+","+(this._x1=+f)+","+(this._y1=+p)},bezierCurveTo:function(i,a,f,p,v,m){this._+="C"+ +i+","+ +a+","+ +f+","+ +p+","+(this._x1=+v)+","+(this._y1=+m)},arcTo:function(i,a,f,p,v){i=+i,a=+a,f=+f,p=+p,v=+v;var m=this._x1,b=this._y1,E=f-i,_=p-a,L=m-i,N=b-a,B=L*L+N*N;if(v<0)throw new Error("negative radius: "+v);if(this._x1===null)this._+="M"+(this._x1=i)+","+(this._y1=a);else if(B>H7)if(!(Math.abs(N*E-_*L)>H7)||!v)this._+="L"+(this._x1=i)+","+(this._y1=a);else{var j=f-m,R=p-b,z=E*E+_*_,K=j*j+R*R,it=Math.sqrt(z),st=Math.sqrt(B),ut=v*Math.tan((p1t-Math.acos((z+B-K)/(2*it*st)))/2),bt=ut/st,mt=ut/it;Math.abs(bt-1)>H7&&(this._+="L"+(i+bt*L)+","+(a+bt*N)),this._+="A"+v+","+v+",0,0,"+ +(N*j>L*R)+","+(this._x1=i+mt*E)+","+(this._y1=a+mt*_)}},arc:function(i,a,f,p,v,m){i=+i,a=+a,f=+f,m=!!m;var b=f*Math.cos(p),E=f*Math.sin(p),_=i+b,L=a+E,N=1^m,B=m?p-v:v-p;if(f<0)throw new Error("negative radius: "+f);this._x1===null?this._+="M"+_+","+L:(Math.abs(this._x1-_)>H7||Math.abs(this._y1-L)>H7)&&(this._+="L"+_+","+L),f&&(B<0&&(B=B%b1t+b1t),B>G8e?this._+="A"+f+","+f+",0,1,"+N+","+(i-b)+","+(a-E)+"A"+f+","+f+",0,1,"+N+","+(this._x1=_)+","+(this._y1=L):B>H7&&(this._+="A"+f+","+f+",0,"+ +(B>=p1t)+","+N+","+(this._x1=i+f*Math.cos(v))+","+(this._y1=a+f*Math.sin(v))))},rect:function(i,a,f,p){this._+="M"+(this._x0=this._x1=+i)+","+(this._y0=this._y1=+a)+"h"+ +f+"v"+ +p+"h"+-f+"Z"},toString:function(){return this._}};function V8e(i){if(!i.ok)throw new Error(i.status+" "+i.statusText);return i.text()}function U8e(i,a){return fetch(i,a).then(V8e)}function W8e(i){return(a,f)=>U8e(a,f).then(p=>new DOMParser().parseFromString(p,i))}var K8e=W8e("image/svg+xml");function Y8e(i){return Math.abs(i=Math.round(i))>=1e21?i.toLocaleString("en").replace(/,/g,""):i.toString(10)}function NU(i,a){if((f=(i=a?i.toExponential(a-1):i.toExponential()).indexOf("e"))<0)return null;var f,p=i.slice(0,f);return[p.length>1?p[0]+p.slice(2):p,+i.slice(f+1)]}function EA(i){return i=NU(Math.abs(i)),i?i[1]:NaN}function X8e(i,a){return function(f,p){for(var v=f.length,m=[],b=0,E=i[0],_=0;v>0&&E>0&&(_+E+1>p&&(E=Math.max(1,p-_)),m.push(f.substring(v-=E,v+E)),!((_+=E+1)>p));)E=i[b=(b+1)%i.length];return m.reverse().join(a)}}function Q8e(i){return function(a){return a.replace(/[0-9]/g,function(f){return i[+f]})}}var Z8e=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function PU(i){if(!(a=Z8e.exec(i)))throw new Error("invalid format: "+i);var a;return new m1t({fill:a[1],align:a[2],sign:a[3],symbol:a[4],zero:a[5],width:a[6],comma:a[7],precision:a[8]&&a[8].slice(1),trim:a[9],type:a[10]})}PU.prototype=m1t.prototype;function m1t(i){this.fill=i.fill===void 0?" ":i.fill+"",this.align=i.align===void 0?">":i.align+"",this.sign=i.sign===void 0?"-":i.sign+"",this.symbol=i.symbol===void 0?"":i.symbol+"",this.zero=!!i.zero,this.width=i.width===void 0?void 0:+i.width,this.comma=!!i.comma,this.precision=i.precision===void 0?void 0:+i.precision,this.trim=!!i.trim,this.type=i.type===void 0?"":i.type+""}m1t.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 J8e(i){t:for(var a=i.length,f=1,p=-1,v;f<a;++f)switch(i[f]){case".":p=v=f;break;case"0":p===0&&(p=f),v=f;break;default:if(!+i[f])break t;p>0&&(p=0);break}return p>0?i.slice(0,p)+i.slice(v+1):i}var DMt;function tEe(i,a){var f=NU(i,a);if(!f)return i+"";var p=f[0],v=f[1],m=v-(DMt=Math.max(-8,Math.min(8,Math.floor(v/3)))*3)+1,b=p.length;return m===b?p:m>b?p+new Array(m-b+1).join("0"):m>0?p.slice(0,m)+"."+p.slice(m):"0."+new Array(1-m).join("0")+NU(i,Math.max(0,a+m-1))[0]}function OMt(i,a){var f=NU(i,a);if(!f)return i+"";var p=f[0],v=f[1];return v<0?"0."+new Array(-v).join("0")+p:p.length>v+1?p.slice(0,v+1)+"."+p.slice(v+1):p+new Array(v-p.length+2).join("0")}const NMt={"%":(i,a)=>(i*100).toFixed(a),b:i=>Math.round(i).toString(2),c:i=>i+"",d:Y8e,e:(i,a)=>i.toExponential(a),f:(i,a)=>i.toFixed(a),g:(i,a)=>i.toPrecision(a),o:i=>Math.round(i).toString(8),p:(i,a)=>OMt(i*100,a),r:OMt,s:tEe,X:i=>Math.round(i).toString(16).toUpperCase(),x:i=>Math.round(i).toString(16)};function PMt(i){return i}var FMt=Array.prototype.map,BMt=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function eEe(i){var a=i.grouping===void 0||i.thousands===void 0?PMt:X8e(FMt.call(i.grouping,Number),i.thousands+""),f=i.currency===void 0?"":i.currency[0]+"",p=i.currency===void 0?"":i.currency[1]+"",v=i.decimal===void 0?".":i.decimal+"",m=i.numerals===void 0?PMt:Q8e(FMt.call(i.numerals,String)),b=i.percent===void 0?"%":i.percent+"",E=i.minus===void 0?"−":i.minus+"",_=i.nan===void 0?"NaN":i.nan+"";function L(B){B=PU(B);var j=B.fill,R=B.align,z=B.sign,K=B.symbol,it=B.zero,st=B.width,ut=B.comma,bt=B.precision,mt=B.trim,yt=B.type;yt==="n"?(ut=!0,yt="g"):NMt[yt]||(bt===void 0&&(bt=12),mt=!0,yt="g"),(it||j==="0"&&R==="=")&&(it=!0,j="0",R="=");var dt=K==="$"?f:K==="#"&&/[boxX]/.test(yt)?"0"+yt.toLowerCase():"",ht=K==="$"?p:/[%p]/.test(yt)?b:"",wt=NMt[yt],X=/[defgprs%]/.test(yt);bt=bt===void 0?6:/[gprs]/.test(yt)?Math.max(1,Math.min(21,bt)):Math.max(0,Math.min(20,bt));function pt(U){var xt=dt,nt=ht,Ot,Nt,qt;if(yt==="c")nt=wt(U)+nt,U="";else{U=+U;var Ct=U<0||1/U<0;if(U=isNaN(U)?_:wt(Math.abs(U),bt),mt&&(U=J8e(U)),Ct&&+U==0&&z!=="+"&&(Ct=!1),xt=(Ct?z==="("?z:E:z==="-"||z==="("?"":z)+xt,nt=(yt==="s"?BMt[8+DMt/3]:"")+nt+(Ct&&z==="("?")":""),X){for(Ot=-1,Nt=U.length;++Ot<Nt;)if(qt=U.charCodeAt(Ot),48>qt||qt>57){nt=(qt===46?v+U.slice(Ot+1):U.slice(Ot))+nt,U=U.slice(0,Ot);break}}}ut&&!it&&(U=a(U,1/0));var Z=xt.length+U.length+nt.length,Tt=Z<st?new Array(st-Z+1).join(j):"";switch(ut&&it&&(U=a(Tt+U,Tt.length?st-nt.length:1/0),Tt=""),R){case"<":U=xt+U+nt+Tt;break;case"=":U=xt+Tt+U+nt;break;case"^":U=Tt.slice(0,Z=Tt.length>>1)+xt+U+nt+Tt.slice(Z);break;default:U=Tt+xt+U+nt;break}return m(U)}return pt.toString=function(){return B+""},pt}function N(B,j){var R=L((B=PU(B),B.type="f",B)),z=Math.max(-8,Math.min(8,Math.floor(EA(j)/3)))*3,K=Math.pow(10,-z),it=BMt[8+z/3];return function(st){return R(K*st)+it}}return{format:L,formatPrefix:N}}var FU,RMt,jMt;nEe({thousands:",",grouping:[3],currency:["$",""]});function nEe(i){return FU=eEe(i),RMt=FU.format,jMt=FU.formatPrefix,FU}function rEe(i){return Math.max(0,-EA(Math.abs(i)))}function iEe(i,a){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(EA(a)/3)))*3-EA(Math.abs(i)))}function sEe(i,a){return i=Math.abs(i),a=Math.abs(a)-i,Math.max(0,EA(a)-EA(i))+1}function y1t(i,a){switch(arguments.length){case 0:break;case 1:this.range(i);break;default:this.range(a).domain(i);break}return this}const $Mt=Symbol("implicit");function x1t(){var i=new DLt,a=[],f=[],p=$Mt;function v(m){let b=i.get(m);if(b===void 0){if(p!==$Mt)return p;i.set(m,b=a.push(m)-1)}return f[b%f.length]}return v.domain=function(m){if(!arguments.length)return a.slice();a=[],i=new DLt;for(const b of m)i.has(b)||i.set(b,a.push(b)-1);return v},v.range=function(m){return arguments.length?(f=Array.from(m),v):f.slice()},v.unknown=function(m){return arguments.length?(p=m,v):p},v.copy=function(){return x1t(a,f).unknown(p)},y1t.apply(v,arguments),v}function aEe(i){return function(){return i}}function oEe(i){return+i}var zMt=[0,1];function TA(i){return i}function k1t(i,a){return(a-=i=+i)?function(f){return(f-i)/a}:aEe(isNaN(a)?NaN:.5)}function cEe(i,a){var f;return i>a&&(f=i,i=a,a=f),function(p){return Math.max(i,Math.min(a,p))}}function uEe(i,a,f){var p=i[0],v=i[1],m=a[0],b=a[1];return v<p?(p=k1t(v,p),m=f(b,m)):(p=k1t(p,v),m=f(m,b)),function(E){return m(p(E))}}function lEe(i,a,f){var p=Math.min(i.length,a.length)-1,v=new Array(p),m=new Array(p),b=-1;for(i[p]<i[0]&&(i=i.slice().reverse(),a=a.slice().reverse());++b<p;)v[b]=k1t(i[b],i[b+1]),m[b]=f(a[b],a[b+1]);return function(E){var _=ixe(i,E,1,p)-1;return m[_](v[_](E))}}function qMt(i,a){return a.domain(i.domain()).range(i.range()).interpolate(i.interpolate()).clamp(i.clamp()).unknown(i.unknown())}function hEe(){var i=zMt,a=zMt,f=o1t,p,v,m,b=TA,E,_,L;function N(){var j=Math.min(i.length,a.length);return b!==TA&&(b=cEe(i[0],i[j-1])),E=j>2?lEe:uEe,_=L=null,B}function B(j){return j==null||isNaN(j=+j)?m:(_||(_=E(i.map(p),a,f)))(p(b(j)))}return B.invert=function(j){return b(v((L||(L=E(a,i.map(p),Kw)))(j)))},B.domain=function(j){return arguments.length?(i=Array.from(j,oEe),N()):i.slice()},B.range=function(j){return arguments.length?(a=Array.from(j),N()):a.slice()},B.rangeRound=function(j){return a=Array.from(j),f=Cke,N()},B.clamp=function(j){return arguments.length?(b=j?!0:TA,N()):b!==TA},B.interpolate=function(j){return arguments.length?(f=j,N()):f},B.unknown=function(j){return arguments.length?(m=j,B):m},function(j,R){return p=j,v=R,N()}}function HMt(){return hEe()(TA,TA)}function fEe(i,a,f,p){var v=Vft(i,a,f),m;switch(p=PU(p??",f"),p.type){case"s":{var b=Math.max(Math.abs(i),Math.abs(a));return p.precision==null&&!isNaN(m=iEe(v,b))&&(p.precision=m),jMt(p,b)}case"":case"e":case"g":case"p":case"r":{p.precision==null&&!isNaN(m=sEe(v,Math.max(Math.abs(i),Math.abs(a))))&&(p.precision=m-(p.type==="e"));break}case"f":case"%":{p.precision==null&&!isNaN(m=rEe(v))&&(p.precision=m-(p.type==="%")*2);break}}return RMt(p)}function dEe(i){var a=i.domain;return i.ticks=function(f){var p=a();return cxe(p[0],p[p.length-1],f??10)},i.tickFormat=function(f,p){var v=a();return fEe(v[0],v[v.length-1],f??10,p)},i.nice=function(f){f==null&&(f=10);var p=a(),v=0,m=p.length-1,b=p[v],E=p[m],_,L,N=10;for(E<b&&(L=b,b=E,E=L,L=v,v=m,m=L);N-- >0;){if(L=NLt(b,E,f),L===_)return p[v]=b,p[m]=E,a(p);if(L>0)b=Math.floor(b/L)*L,E=Math.ceil(E/L)*L;else if(L<0)b=Math.ceil(b*L)/L,E=Math.floor(E*L)/L;else break;_=L}return i},i}function BU(){var i=HMt();return i.copy=function(){return qMt(i,BU())},y1t.apply(i,arguments),dEe(i)}function gEe(i,a){i=i.slice();var f=0,p=i.length-1,v=i[f],m=i[p],b;return m<v&&(b=f,f=p,p=b,b=v,v=m,m=b),i[f]=a.floor(v),i[p]=a.ceil(m),i}var E1t=new Date,T1t=new Date;function rg(i,a,f,p){function v(m){return i(m=arguments.length===0?new Date:new Date(+m)),m}return v.floor=function(m){return i(m=new Date(+m)),m},v.ceil=function(m){return i(m=new Date(m-1)),a(m,1),i(m),m},v.round=function(m){var b=v(m),E=v.ceil(m);return m-b<E-m?b:E},v.offset=function(m,b){return a(m=new Date(+m),b==null?1:Math.floor(b)),m},v.range=function(m,b,E){var _=[],L;if(m=v.ceil(m),E=E==null?1:Math.floor(E),!(m<b)||!(E>0))return _;do _.push(L=new Date(+m)),a(m,E),i(m);while(L<m&&m<b);return _},v.filter=function(m){return rg(function(b){if(b>=b)for(;i(b),!m(b);)b.setTime(b-1)},function(b,E){if(b>=b)if(E<0)for(;++E<=0;)for(;a(b,-1),!m(b););else for(;--E>=0;)for(;a(b,1),!m(b););})},f&&(v.count=function(m,b){return E1t.setTime(+m),T1t.setTime(+b),i(E1t),i(T1t),Math.floor(f(E1t,T1t))},v.every=function(m){return m=Math.floor(m),!isFinite(m)||!(m>0)?null:m>1?v.filter(p?function(b){return p(b)%m===0}:function(b){return v.count(0,b)%m===0}):v}),v}var RU=rg(function(){},function(i,a){i.setTime(+i+a)},function(i,a){return a-i});RU.every=function(i){return i=Math.floor(i),!isFinite(i)||!(i>0)?null:i>1?rg(function(a){a.setTime(Math.floor(a/i)*i)},function(a,f){a.setTime(+a+f*i)},function(a,f){return(f-a)/i}):RU};const C1t=RU;RU.range;const v5=1e3,c3=v5*60,G7=c3*60,V7=G7*24,_1t=V7*7,GMt=V7*30,S1t=V7*365;var VMt=rg(function(i){i.setTime(i-i.getMilliseconds())},function(i,a){i.setTime(+i+a*v5)},function(i,a){return(a-i)/v5},function(i){return i.getUTCSeconds()});const U7=VMt;VMt.range;var UMt=rg(function(i){i.setTime(i-i.getMilliseconds()-i.getSeconds()*v5)},function(i,a){i.setTime(+i+a*c3)},function(i,a){return(a-i)/c3},function(i){return i.getMinutes()});const jU=UMt;UMt.range;var WMt=rg(function(i){i.setTime(i-i.getMilliseconds()-i.getSeconds()*v5-i.getMinutes()*c3)},function(i,a){i.setTime(+i+a*G7)},function(i,a){return(a-i)/G7},function(i){return i.getHours()});const $U=WMt;WMt.range;var KMt=rg(i=>i.setHours(0,0,0,0),(i,a)=>i.setDate(i.getDate()+a),(i,a)=>(a-i-(a.getTimezoneOffset()-i.getTimezoneOffset())*c3)/V7,i=>i.getDate()-1);const CA=KMt;KMt.range;function W7(i){return rg(function(a){a.setDate(a.getDate()-(a.getDay()+7-i)%7),a.setHours(0,0,0,0)},function(a,f){a.setDate(a.getDate()+f*7)},function(a,f){return(f-a-(f.getTimezoneOffset()-a.getTimezoneOffset())*c3)/_1t})}var LN=W7(0),MN=W7(1),YMt=W7(2),XMt=W7(3),K7=W7(4),QMt=W7(5),ZMt=W7(6);LN.range,MN.range,YMt.range,XMt.range,K7.range,QMt.range,ZMt.range;var JMt=rg(function(i){i.setDate(1),i.setHours(0,0,0,0)},function(i,a){i.setMonth(i.getMonth()+a)},function(i,a){return a.getMonth()-i.getMonth()+(a.getFullYear()-i.getFullYear())*12},function(i){return i.getMonth()});const zU=JMt;JMt.range;var A1t=rg(function(i){i.setMonth(0,1),i.setHours(0,0,0,0)},function(i,a){i.setFullYear(i.getFullYear()+a)},function(i,a){return a.getFullYear()-i.getFullYear()},function(i){return i.getFullYear()});A1t.every=function(i){return!isFinite(i=Math.floor(i))||!(i>0)?null:rg(function(a){a.setFullYear(Math.floor(a.getFullYear()/i)*i),a.setMonth(0,1),a.setHours(0,0,0,0)},function(a,f){a.setFullYear(a.getFullYear()+f*i)})};const Y7=A1t;A1t.range;var tIt=rg(function(i){i.setUTCHours(0,0,0,0)},function(i,a){i.setUTCDate(i.getUTCDate()+a)},function(i,a){return(a-i)/V7},function(i){return i.getUTCDate()-1});const eIt=tIt;tIt.range;function X7(i){return rg(function(a){a.setUTCDate(a.getUTCDate()-(a.getUTCDay()+7-i)%7),a.setUTCHours(0,0,0,0)},function(a,f){a.setUTCDate(a.getUTCDate()+f*7)},function(a,f){return(f-a)/_1t})}var nIt=X7(0),qU=X7(1),pEe=X7(2),bEe=X7(3),_A=X7(4),vEe=X7(5),wEe=X7(6);nIt.range,qU.range,pEe.range,bEe.range,_A.range,vEe.range,wEe.range;var L1t=rg(function(i){i.setUTCMonth(0,1),i.setUTCHours(0,0,0,0)},function(i,a){i.setUTCFullYear(i.getUTCFullYear()+a)},function(i,a){return a.getUTCFullYear()-i.getUTCFullYear()},function(i){return i.getUTCFullYear()});L1t.every=function(i){return!isFinite(i=Math.floor(i))||!(i>0)?null:rg(function(a){a.setUTCFullYear(Math.floor(a.getUTCFullYear()/i)*i),a.setUTCMonth(0,1),a.setUTCHours(0,0,0,0)},function(a,f){a.setUTCFullYear(a.getUTCFullYear()+f*i)})};const IN=L1t;L1t.range;function mEe(i,a,f,p,v,m){const b=[[U7,1,v5],[U7,5,5*v5],[U7,15,15*v5],[U7,30,30*v5],[m,1,c3],[m,5,5*c3],[m,15,15*c3],[m,30,30*c3],[v,1,G7],[v,3,3*G7],[v,6,6*G7],[v,12,12*G7],[p,1,V7],[p,2,2*V7],[f,1,_1t],[a,1,GMt],[a,3,3*GMt],[i,1,S1t]];function E(L,N,B){const j=N<L;j&&([L,N]=[N,L]);const R=B&&typeof B.range=="function"?B:_(L,N,B),z=R?R.range(L,+N+1):[];return j?z.reverse():z}function _(L,N,B){const j=Math.abs(N-L)/B,R=zft(([,,it])=>it).right(b,j);if(R===b.length)return i.every(Vft(L/S1t,N/S1t,B));if(R===0)return C1t.every(Math.max(Vft(L,N,B),1));const[z,K]=b[j/b[R-1][2]<b[R][2]/j?R-1:R];return z.every(K)}return[E,_]}const[yEe,xEe]=mEe(Y7,zU,LN,CA,$U,jU);function M1t(i){if(0<=i.y&&i.y<100){var a=new Date(-1,i.m,i.d,i.H,i.M,i.S,i.L);return a.setFullYear(i.y),a}return new Date(i.y,i.m,i.d,i.H,i.M,i.S,i.L)}function I1t(i){if(0<=i.y&&i.y<100){var a=new Date(Date.UTC(-1,i.m,i.d,i.H,i.M,i.S,i.L));return a.setUTCFullYear(i.y),a}return new Date(Date.UTC(i.y,i.m,i.d,i.H,i.M,i.S,i.L))}function DN(i,a,f){return{y:i,m:a,d:f,H:0,M:0,S:0,L:0}}function kEe(i){var a=i.dateTime,f=i.date,p=i.time,v=i.periods,m=i.days,b=i.shortDays,E=i.months,_=i.shortMonths,L=ON(v),N=NN(v),B=ON(m),j=NN(m),R=ON(b),z=NN(b),K=ON(E),it=NN(E),st=ON(_),ut=NN(_),bt={a:Ct,A:Z,b:Tt,B:Ht,c:null,d:cIt,e:cIt,f:VEe,g:e7e,G:r7e,H:qEe,I:HEe,j:GEe,L:uIt,m:UEe,M:WEe,p:It,q:Ft,Q:pIt,s:bIt,S:KEe,u:YEe,U:XEe,V:QEe,w:ZEe,W:JEe,x:null,X:null,y:t7e,Y:n7e,Z:i7e,"%":gIt},mt={a:ke,A:pn,b:Me,B:ve,c:null,d:hIt,e:hIt,f:c7e,g:w7e,G:y7e,H:s7e,I:a7e,j:o7e,L:fIt,m:u7e,M:l7e,p:Ge,q:Ke,Q:pIt,s:bIt,S:h7e,u:f7e,U:d7e,V:g7e,w:p7e,W:b7e,x:null,X:null,y:v7e,Y:m7e,Z:x7e,"%":gIt},yt={a:pt,A:U,b:xt,B:nt,c:Ot,d:aIt,e:aIt,f:REe,g:sIt,G:iIt,H:oIt,I:oIt,j:NEe,L:BEe,m:OEe,M:PEe,p:X,q:DEe,Q:$Ee,s:zEe,S:FEe,u:SEe,U:AEe,V:LEe,w:_Ee,W:MEe,x:Nt,X:qt,y:sIt,Y:iIt,Z:IEe,"%":jEe};bt.x=dt(f,bt),bt.X=dt(p,bt),bt.c=dt(a,bt),mt.x=dt(f,mt),mt.X=dt(p,mt),mt.c=dt(a,mt);function dt(we,_e){return function($t){var re=[],ie=-1,Oe=0,oe=we.length,Ne,me,cn;for($t instanceof Date||($t=new Date(+$t));++ie<oe;)we.charCodeAt(ie)===37&&(re.push(we.slice(Oe,ie)),(me=rIt[Ne=we.charAt(++ie)])!=null?Ne=we.charAt(++ie):me=Ne==="e"?" ":"0",(cn=_e[Ne])&&(Ne=cn($t,me)),re.push(Ne),Oe=ie+1);return re.push(we.slice(Oe,ie)),re.join("")}}function ht(we,_e){return function($t){var re=DN(1900,void 0,1),ie=wt(re,we,$t+="",0),Oe,oe;if(ie!=$t.length)return null;if("Q"in re)return new Date(re.Q);if("s"in re)return new Date(re.s*1e3+("L"in re?re.L:0));if(_e&&!("Z"in re)&&(re.Z=0),"p"in re&&(re.H=re.H%12+re.p*12),re.m===void 0&&(re.m="q"in re?re.q:0),"V"in re){if(re.V<1||re.V>53)return null;"w"in re||(re.w=1),"Z"in re?(Oe=I1t(DN(re.y,0,1)),oe=Oe.getUTCDay(),Oe=oe>4||oe===0?qU.ceil(Oe):qU(Oe),Oe=eIt.offset(Oe,(re.V-1)*7),re.y=Oe.getUTCFullYear(),re.m=Oe.getUTCMonth(),re.d=Oe.getUTCDate()+(re.w+6)%7):(Oe=M1t(DN(re.y,0,1)),oe=Oe.getDay(),Oe=oe>4||oe===0?MN.ceil(Oe):MN(Oe),Oe=CA.offset(Oe,(re.V-1)*7),re.y=Oe.getFullYear(),re.m=Oe.getMonth(),re.d=Oe.getDate()+(re.w+6)%7)}else("W"in re||"U"in re)&&("w"in re||(re.w="u"in re?re.u%7:"W"in re?1:0),oe="Z"in re?I1t(DN(re.y,0,1)).getUTCDay():M1t(DN(re.y,0,1)).getDay(),re.m=0,re.d="W"in re?(re.w+6)%7+re.W*7-(oe+5)%7:re.w+re.U*7-(oe+6)%7);return"Z"in re?(re.H+=re.Z/100|0,re.M+=re.Z%100,I1t(re)):M1t(re)}}function wt(we,_e,$t,re){for(var ie=0,Oe=_e.length,oe=$t.length,Ne,me;ie<Oe;){if(re>=oe)return-1;if(Ne=_e.charCodeAt(ie++),Ne===37){if(Ne=_e.charAt(ie++),me=yt[Ne in rIt?_e.charAt(ie++):Ne],!me||(re=me(we,$t,re))<0)return-1}else if(Ne!=$t.charCodeAt(re++))return-1}return re}function X(we,_e,$t){var re=L.exec(_e.slice($t));return re?(we.p=N.get(re[0].toLowerCase()),$t+re[0].length):-1}function pt(we,_e,$t){var re=R.exec(_e.slice($t));return re?(we.w=z.get(re[0].toLowerCase()),$t+re[0].length):-1}function U(we,_e,$t){var re=B.exec(_e.slice($t));return re?(we.w=j.get(re[0].toLowerCase()),$t+re[0].length):-1}function xt(we,_e,$t){var re=st.exec(_e.slice($t));return re?(we.m=ut.get(re[0].toLowerCase()),$t+re[0].length):-1}function nt(we,_e,$t){var re=K.exec(_e.slice($t));return re?(we.m=it.get(re[0].toLowerCase()),$t+re[0].length):-1}function Ot(we,_e,$t){return wt(we,a,_e,$t)}function Nt(we,_e,$t){return wt(we,f,_e,$t)}function qt(we,_e,$t){return wt(we,p,_e,$t)}function Ct(we){return b[we.getDay()]}function Z(we){return m[we.getDay()]}function Tt(we){return _[we.getMonth()]}function Ht(we){return E[we.getMonth()]}function It(we){return v[+(we.getHours()>=12)]}function Ft(we){return 1+~~(we.getMonth()/3)}function ke(we){return b[we.getUTCDay()]}function pn(we){return m[we.getUTCDay()]}function Me(we){return _[we.getUTCMonth()]}function ve(we){return E[we.getUTCMonth()]}function Ge(we){return v[+(we.getUTCHours()>=12)]}function Ke(we){return 1+~~(we.getUTCMonth()/3)}return{format:function(we){var _e=dt(we+="",bt);return _e.toString=function(){return we},_e},parse:function(we){var _e=ht(we+="",!1);return _e.toString=function(){return we},_e},utcFormat:function(we){var _e=dt(we+="",mt);return _e.toString=function(){return we},_e},utcParse:function(we){var _e=ht(we+="",!0);return _e.toString=function(){return we},_e}}}var rIt={"-":"",_:" ",0:"0"},K1=/^\s*\d+/,EEe=/^%/,TEe=/[\\^$*+?|[\]().{}]/g;function Dc(i,a,f){var p=i<0?"-":"",v=(p?-i:i)+"",m=v.length;return p+(m<f?new Array(f-m+1).join(a)+v:v)}function CEe(i){return i.replace(TEe,"\\$&")}function ON(i){return new RegExp("^(?:"+i.map(CEe).join("|")+")","i")}function NN(i){return new Map(i.map((a,f)=>[a.toLowerCase(),f]))}function _Ee(i,a,f){var p=K1.exec(a.slice(f,f+1));return p?(i.w=+p[0],f+p[0].length):-1}function SEe(i,a,f){var p=K1.exec(a.slice(f,f+1));return p?(i.u=+p[0],f+p[0].length):-1}function AEe(i,a,f){var p=K1.exec(a.slice(f,f+2));return p?(i.U=+p[0],f+p[0].length):-1}function LEe(i,a,f){var p=K1.exec(a.slice(f,f+2));return p?(i.V=+p[0],f+p[0].length):-1}function MEe(i,a,f){var p=K1.exec(a.slice(f,f+2));return p?(i.W=+p[0],f+p[0].length):-1}function iIt(i,a,f){var p=K1.exec(a.slice(f,f+4));return p?(i.y=+p[0],f+p[0].length):-1}function sIt(i,a,f){var p=K1.exec(a.slice(f,f+2));return p?(i.y=+p[0]+(+p[0]>68?1900:2e3),f+p[0].length):-1}function IEe(i,a,f){var p=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(a.slice(f,f+6));return p?(i.Z=p[1]?0:-(p[2]+(p[3]||"00")),f+p[0].length):-1}function DEe(i,a,f){var p=K1.exec(a.slice(f,f+1));return p?(i.q=p[0]*3-3,f+p[0].length):-1}function OEe(i,a,f){var p=K1.exec(a.slice(f,f+2));return p?(i.m=p[0]-1,f+p[0].length):-1}function aIt(i,a,f){var p=K1.exec(a.slice(f,f+2));return p?(i.d=+p[0],f+p[0].length):-1}function NEe(i,a,f){var p=K1.exec(a.slice(f,f+3));return p?(i.m=0,i.d=+p[0],f+p[0].length):-1}function oIt(i,a,f){var p=K1.exec(a.slice(f,f+2));return p?(i.H=+p[0],f+p[0].length):-1}function PEe(i,a,f){var p=K1.exec(a.slice(f,f+2));return p?(i.M=+p[0],f+p[0].length):-1}function FEe(i,a,f){var p=K1.exec(a.slice(f,f+2));return p?(i.S=+p[0],f+p[0].length):-1}function BEe(i,a,f){var p=K1.exec(a.slice(f,f+3));return p?(i.L=+p[0],f+p[0].length):-1}function REe(i,a,f){var p=K1.exec(a.slice(f,f+6));return p?(i.L=Math.floor(p[0]/1e3),f+p[0].length):-1}function jEe(i,a,f){var p=EEe.exec(a.slice(f,f+1));return p?f+p[0].length:-1}function $Ee(i,a,f){var p=K1.exec(a.slice(f));return p?(i.Q=+p[0],f+p[0].length):-1}function zEe(i,a,f){var p=K1.exec(a.slice(f));return p?(i.s=+p[0],f+p[0].length):-1}function cIt(i,a){return Dc(i.getDate(),a,2)}function qEe(i,a){return Dc(i.getHours(),a,2)}function HEe(i,a){return Dc(i.getHours()%12||12,a,2)}function GEe(i,a){return Dc(1+CA.count(Y7(i),i),a,3)}function uIt(i,a){return Dc(i.getMilliseconds(),a,3)}function VEe(i,a){return uIt(i,a)+"000"}function UEe(i,a){return Dc(i.getMonth()+1,a,2)}function WEe(i,a){return Dc(i.getMinutes(),a,2)}function KEe(i,a){return Dc(i.getSeconds(),a,2)}function YEe(i){var a=i.getDay();return a===0?7:a}function XEe(i,a){return Dc(LN.count(Y7(i)-1,i),a,2)}function lIt(i){var a=i.getDay();return a>=4||a===0?K7(i):K7.ceil(i)}function QEe(i,a){return i=lIt(i),Dc(K7.count(Y7(i),i)+(Y7(i).getDay()===4),a,2)}function ZEe(i){return i.getDay()}function JEe(i,a){return Dc(MN.count(Y7(i)-1,i),a,2)}function t7e(i,a){return Dc(i.getFullYear()%100,a,2)}function e7e(i,a){return i=lIt(i),Dc(i.getFullYear()%100,a,2)}function n7e(i,a){return Dc(i.getFullYear()%1e4,a,4)}function r7e(i,a){var f=i.getDay();return i=f>=4||f===0?K7(i):K7.ceil(i),Dc(i.getFullYear()%1e4,a,4)}function i7e(i){var a=i.getTimezoneOffset();return(a>0?"-":(a*=-1,"+"))+Dc(a/60|0,"0",2)+Dc(a%60,"0",2)}function hIt(i,a){return Dc(i.getUTCDate(),a,2)}function s7e(i,a){return Dc(i.getUTCHours(),a,2)}function a7e(i,a){return Dc(i.getUTCHours()%12||12,a,2)}function o7e(i,a){return Dc(1+eIt.count(IN(i),i),a,3)}function fIt(i,a){return Dc(i.getUTCMilliseconds(),a,3)}function c7e(i,a){return fIt(i,a)+"000"}function u7e(i,a){return Dc(i.getUTCMonth()+1,a,2)}function l7e(i,a){return Dc(i.getUTCMinutes(),a,2)}function h7e(i,a){return Dc(i.getUTCSeconds(),a,2)}function f7e(i){var a=i.getUTCDay();return a===0?7:a}function d7e(i,a){return Dc(nIt.count(IN(i)-1,i),a,2)}function dIt(i){var a=i.getUTCDay();return a>=4||a===0?_A(i):_A.ceil(i)}function g7e(i,a){return i=dIt(i),Dc(_A.count(IN(i),i)+(IN(i).getUTCDay()===4),a,2)}function p7e(i){return i.getUTCDay()}function b7e(i,a){return Dc(qU.count(IN(i)-1,i),a,2)}function v7e(i,a){return Dc(i.getUTCFullYear()%100,a,2)}function w7e(i,a){return i=dIt(i),Dc(i.getUTCFullYear()%100,a,2)}function m7e(i,a){return Dc(i.getUTCFullYear()%1e4,a,4)}function y7e(i,a){var f=i.getUTCDay();return i=f>=4||f===0?_A(i):_A.ceil(i),Dc(i.getUTCFullYear()%1e4,a,4)}function x7e(){return"+0000"}function gIt(){return"%"}function pIt(i){return+i}function bIt(i){return Math.floor(+i/1e3)}var SA,HU;k7e({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"]});function k7e(i){return SA=kEe(i),HU=SA.format,SA.parse,SA.utcFormat,SA.utcParse,SA}function E7e(i){return new Date(i)}function T7e(i){return i instanceof Date?+i:+new Date(+i)}function vIt(i,a,f,p,v,m,b,E,_,L){var N=HMt(),B=N.invert,j=N.domain,R=L(".%L"),z=L(":%S"),K=L("%I:%M"),it=L("%I %p"),st=L("%a %d"),ut=L("%b %d"),bt=L("%B"),mt=L("%Y");function yt(dt){return(_(dt)<dt?R:E(dt)<dt?z:b(dt)<dt?K:m(dt)<dt?it:p(dt)<dt?v(dt)<dt?st:ut:f(dt)<dt?bt:mt)(dt)}return N.invert=function(dt){return new Date(B(dt))},N.domain=function(dt){return arguments.length?j(Array.from(dt,T7e)):j().map(E7e)},N.ticks=function(dt){var ht=j();return i(ht[0],ht[ht.length-1],dt??10)},N.tickFormat=function(dt,ht){return ht==null?yt:L(ht)},N.nice=function(dt){var ht=j();return(!dt||typeof dt.range!="function")&&(dt=a(ht[0],ht[ht.length-1],dt??10)),dt?j(gEe(ht,dt)):N},N.copy=function(){return qMt(N,vIt(i,a,f,p,v,m,b,E,_,L))},N}function C7e(){return y1t.apply(vIt(yEe,xEe,Y7,zU,LN,CA,$U,jU,U7,HU).domain([new Date(2e3,0,1),new Date(2e3,0,2)]),arguments)}function _7e(i){for(var a=i.length/6|0,f=new Array(a),p=0;p<a;)f[p]="#"+i.slice(p*6,++p*6);return f}const S7e=_7e("4e79a7f28e2ce1575976b7b259a14fedc949af7aa1ff9da79c755fbab0ab");function Yh(i){return function(){return i}}const wIt=Math.abs,b0=Math.atan2,Q7=Math.cos,A7e=Math.max,D1t=Math.min,u3=Math.sin,AA=Math.sqrt,v0=1e-12,PN=Math.PI,GU=PN/2,VU=2*PN;function L7e(i){return i>1?0:i<-1?PN:Math.acos(i)}function mIt(i){return i>=1?GU:i<=-1?-GU:Math.asin(i)}function M7e(i){return i.innerRadius}function I7e(i){return i.outerRadius}function D7e(i){return i.startAngle}function O7e(i){return i.endAngle}function N7e(i){return i&&i.padAngle}function P7e(i,a,f,p,v,m,b,E){var _=f-i,L=p-a,N=b-v,B=E-m,j=B*_-N*L;if(!(j*j<v0))return j=(N*(a-m)-B*(i-v))/j,[i+j*_,a+j*L]}function UU(i,a,f,p,v,m,b){var E=i-f,_=a-p,L=(b?m:-m)/AA(E*E+_*_),N=L*_,B=-L*E,j=i+N,R=a+B,z=f+N,K=p+B,it=(j+z)/2,st=(R+K)/2,ut=z-j,bt=K-R,mt=ut*ut+bt*bt,yt=v-m,dt=j*K-z*R,ht=(bt<0?-1:1)*AA(A7e(0,yt*yt*mt-dt*dt)),wt=(dt*bt-ut*ht)/mt,X=(-dt*ut-bt*ht)/mt,pt=(dt*bt+ut*ht)/mt,U=(-dt*ut+bt*ht)/mt,xt=wt-it,nt=X-st,Ot=pt-it,Nt=U-st;return xt*xt+nt*nt>Ot*Ot+Nt*Nt&&(wt=pt,X=U),{cx:wt,cy:X,x01:-N,y01:-B,x11:wt*(v/yt-1),y11:X*(v/yt-1)}}function LA(){var i=M7e,a=I7e,f=Yh(0),p=null,v=D7e,m=O7e,b=N7e,E=null;function _(){var L,N,B=+i.apply(this,arguments),j=+a.apply(this,arguments),R=v.apply(this,arguments)-GU,z=m.apply(this,arguments)-GU,K=wIt(z-R),it=z>R;if(E||(E=L=w1t()),j<B&&(N=j,j=B,B=N),!(j>v0))E.moveTo(0,0);else if(K>VU-v0)E.moveTo(j*Q7(R),j*u3(R)),E.arc(0,0,j,R,z,!it),B>v0&&(E.moveTo(B*Q7(z),B*u3(z)),E.arc(0,0,B,z,R,it));else{var st=R,ut=z,bt=R,mt=z,yt=K,dt=K,ht=b.apply(this,arguments)/2,wt=ht>v0&&(p?+p.apply(this,arguments):AA(B*B+j*j)),X=D1t(wIt(j-B)/2,+f.apply(this,arguments)),pt=X,U=X,xt,nt;if(wt>v0){var Ot=mIt(wt/B*u3(ht)),Nt=mIt(wt/j*u3(ht));(yt-=Ot*2)>v0?(Ot*=it?1:-1,bt+=Ot,mt-=Ot):(yt=0,bt=mt=(R+z)/2),(dt-=Nt*2)>v0?(Nt*=it?1:-1,st+=Nt,ut-=Nt):(dt=0,st=ut=(R+z)/2)}var qt=j*Q7(st),Ct=j*u3(st),Z=B*Q7(mt),Tt=B*u3(mt);if(X>v0){var Ht=j*Q7(ut),It=j*u3(ut),Ft=B*Q7(bt),ke=B*u3(bt),pn;if(K<PN&&(pn=P7e(qt,Ct,Ft,ke,Ht,It,Z,Tt))){var Me=qt-pn[0],ve=Ct-pn[1],Ge=Ht-pn[0],Ke=It-pn[1],we=1/u3(L7e((Me*Ge+ve*Ke)/(AA(Me*Me+ve*ve)*AA(Ge*Ge+Ke*Ke)))/2),_e=AA(pn[0]*pn[0]+pn[1]*pn[1]);pt=D1t(X,(B-_e)/(we-1)),U=D1t(X,(j-_e)/(we+1))}}dt>v0?U>v0?(xt=UU(Ft,ke,qt,Ct,j,U,it),nt=UU(Ht,It,Z,Tt,j,U,it),E.moveTo(xt.cx+xt.x01,xt.cy+xt.y01),U<X?E.arc(xt.cx,xt.cy,U,b0(xt.y01,xt.x01),b0(nt.y01,nt.x01),!it):(E.arc(xt.cx,xt.cy,U,b0(xt.y01,xt.x01),b0(xt.y11,xt.x11),!it),E.arc(0,0,j,b0(xt.cy+xt.y11,xt.cx+xt.x11),b0(nt.cy+nt.y11,nt.cx+nt.x11),!it),E.arc(nt.cx,nt.cy,U,b0(nt.y11,nt.x11),b0(nt.y01,nt.x01),!it))):(E.moveTo(qt,Ct),E.arc(0,0,j,st,ut,!it)):E.moveTo(qt,Ct),!(B>v0)||!(yt>v0)?E.lineTo(Z,Tt):pt>v0?(xt=UU(Z,Tt,Ht,It,B,-pt,it),nt=UU(qt,Ct,Ft,ke,B,-pt,it),E.lineTo(xt.cx+xt.x01,xt.cy+xt.y01),pt<X?E.arc(xt.cx,xt.cy,pt,b0(xt.y01,xt.x01),b0(nt.y01,nt.x01),!it):(E.arc(xt.cx,xt.cy,pt,b0(xt.y01,xt.x01),b0(xt.y11,xt.x11),!it),E.arc(0,0,B,b0(xt.cy+xt.y11,xt.cx+xt.x11),b0(nt.cy+nt.y11,nt.cx+nt.x11),it),E.arc(nt.cx,nt.cy,pt,b0(nt.y11,nt.x11),b0(nt.y01,nt.x01),!it))):E.arc(0,0,B,mt,bt,it)}if(E.closePath(),L)return E=null,L+""||null}return _.centroid=function(){var L=(+i.apply(this,arguments)+ +a.apply(this,arguments))/2,N=(+v.apply(this,arguments)+ +m.apply(this,arguments))/2-PN/2;return[Q7(N)*L,u3(N)*L]},_.innerRadius=function(L){return arguments.length?(i=typeof L=="function"?L:Yh(+L),_):i},_.outerRadius=function(L){return arguments.length?(a=typeof L=="function"?L:Yh(+L),_):a},_.cornerRadius=function(L){return arguments.length?(f=typeof L=="function"?L:Yh(+L),_):f},_.padRadius=function(L){return arguments.length?(p=L==null?null:typeof L=="function"?L:Yh(+L),_):p},_.startAngle=function(L){return arguments.length?(v=typeof L=="function"?L:Yh(+L),_):v},_.endAngle=function(L){return arguments.length?(m=typeof L=="function"?L:Yh(+L),_):m},_.padAngle=function(L){return arguments.length?(b=typeof L=="function"?L:Yh(+L),_):b},_.context=function(L){return arguments.length?(E=L??null,_):E},_}function yIt(i){return typeof i=="object"&&"length"in i?i:Array.from(i)}function xIt(i){this._context=i}xIt.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(i,a){switch(i=+i,a=+a,this._point){case 0:this._point=1,this._line?this._context.lineTo(i,a):this._context.moveTo(i,a);break;case 1:this._point=2;default:this._context.lineTo(i,a);break}}};function ig(i){return new xIt(i)}function F7e(i){return i[0]}function B7e(i){return i[1]}function Z7(i,a){var f=Yh(!0),p=null,v=ig,m=null;i=typeof i=="function"?i:i===void 0?F7e:Yh(i),a=typeof a=="function"?a:a===void 0?B7e:Yh(a);function b(E){var _,L=(E=yIt(E)).length,N,B=!1,j;for(p==null&&(m=v(j=w1t())),_=0;_<=L;++_)!(_<L&&f(N=E[_],_,E))===B&&((B=!B)?m.lineStart():m.lineEnd()),B&&m.point(+i(N,_,E),+a(N,_,E));if(j)return m=null,j+""||null}return b.x=function(E){return arguments.length?(i=typeof E=="function"?E:Yh(+E),b):i},b.y=function(E){return arguments.length?(a=typeof E=="function"?E:Yh(+E),b):a},b.defined=function(E){return arguments.length?(f=typeof E=="function"?E:Yh(!!E),b):f},b.curve=function(E){return arguments.length?(v=E,p!=null&&(m=v(p)),b):v},b.context=function(E){return arguments.length?(E==null?p=m=null:m=v(p=E),b):p},b}function R7e(i,a){return a<i?-1:a>i?1:a>=i?0:NaN}function j7e(i){return i}function $7e(){var i=j7e,a=R7e,f=null,p=Yh(0),v=Yh(VU),m=Yh(0);function b(E){var _,L=(E=yIt(E)).length,N,B,j=0,R=new Array(L),z=new Array(L),K=+p.apply(this,arguments),it=Math.min(VU,Math.max(-VU,v.apply(this,arguments)-K)),st,ut=Math.min(Math.abs(it)/L,m.apply(this,arguments)),bt=ut*(it<0?-1:1),mt;for(_=0;_<L;++_)(mt=z[R[_]=_]=+i(E[_],_,E))>0&&(j+=mt);for(a!=null?R.sort(function(yt,dt){return a(z[yt],z[dt])}):f!=null&&R.sort(function(yt,dt){return f(E[yt],E[dt])}),_=0,B=j?(it-L*bt)/j:0;_<L;++_,K=st)N=R[_],mt=z[N],st=K+(mt>0?mt*B:0)+bt,z[N]={data:E[N],index:_,value:mt,startAngle:K,endAngle:st,padAngle:ut};return z}return b.value=function(E){return arguments.length?(i=typeof E=="function"?E:Yh(+E),b):i},b.sortValues=function(E){return arguments.length?(a=E,f=null,b):a},b.sort=function(E){return arguments.length?(f=E,a=null,b):f},b.startAngle=function(E){return arguments.length?(p=typeof E=="function"?E:Yh(+E),b):p},b.endAngle=function(E){return arguments.length?(v=typeof E=="function"?E:Yh(+E),b):v},b.padAngle=function(E){return arguments.length?(m=typeof E=="function"?E:Yh(+E),b):m},b}class kIt{constructor(a,f){this._context=a,this._x=f}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(a,f){switch(a=+a,f=+f,this._point){case 0:{this._point=1,this._line?this._context.lineTo(a,f):this._context.moveTo(a,f);break}case 1:this._point=2;default:{this._x?this._context.bezierCurveTo(this._x0=(this._x0+a)/2,this._y0,this._x0,f,a,f):this._context.bezierCurveTo(this._x0,this._y0=(this._y0+f)/2,a,this._y0,a,f);break}}this._x0=a,this._y0=f}}function z7e(i){return new kIt(i,!0)}function q7e(i){return new kIt(i,!1)}function Z6(){}function WU(i,a,f){i._context.bezierCurveTo((2*i._x0+i._x1)/3,(2*i._y0+i._y1)/3,(i._x0+2*i._x1)/3,(i._y0+2*i._y1)/3,(i._x0+4*i._x1+a)/6,(i._y0+4*i._y1+f)/6)}function KU(i){this._context=i}KU.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:WU(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},point:function(i,a){switch(i=+i,a=+a,this._point){case 0:this._point=1,this._line?this._context.lineTo(i,a):this._context.moveTo(i,a);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:WU(this,i,a);break}this._x0=this._x1,this._x1=i,this._y0=this._y1,this._y1=a}};function FN(i){return new KU(i)}function EIt(i){this._context=i}EIt.prototype={areaStart:Z6,areaEnd:Z6,lineStart: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},lineEnd: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}}},point:function(i,a){switch(i=+i,a=+a,this._point){case 0:this._point=1,this._x2=i,this._y2=a;break;case 1:this._point=2,this._x3=i,this._y3=a;break;case 2:this._point=3,this._x4=i,this._y4=a,this._context.moveTo((this._x0+4*this._x1+i)/6,(this._y0+4*this._y1+a)/6);break;default:WU(this,i,a);break}this._x0=this._x1,this._x1=i,this._y0=this._y1,this._y1=a}};function H7e(i){return new EIt(i)}function TIt(i){this._context=i}TIt.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},point:function(i,a){switch(i=+i,a=+a,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var f=(this._x0+4*this._x1+i)/6,p=(this._y0+4*this._y1+a)/6;this._line?this._context.lineTo(f,p):this._context.moveTo(f,p);break;case 3:this._point=4;default:WU(this,i,a);break}this._x0=this._x1,this._x1=i,this._y0=this._y1,this._y1=a}};function G7e(i){return new TIt(i)}function CIt(i,a){this._basis=new KU(i),this._beta=a}CIt.prototype={lineStart:function(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function(){var i=this._x,a=this._y,f=i.length-1;if(f>0)for(var p=i[0],v=a[0],m=i[f]-p,b=a[f]-v,E=-1,_;++E<=f;)_=E/f,this._basis.point(this._beta*i[E]+(1-this._beta)*(p+_*m),this._beta*a[E]+(1-this._beta)*(v+_*b));this._x=this._y=null,this._basis.lineEnd()},point:function(i,a){this._x.push(+i),this._y.push(+a)}};const V7e=function i(a){function f(p){return a===1?new KU(p):new CIt(p,a)}return f.beta=function(p){return i(+p)},f}(.85);function YU(i,a,f){i._context.bezierCurveTo(i._x1+i._k*(i._x2-i._x0),i._y1+i._k*(i._y2-i._y0),i._x2+i._k*(i._x1-a),i._y2+i._k*(i._y1-f),i._x2,i._y2)}function O1t(i,a){this._context=i,this._k=(1-a)/6}O1t.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:YU(this,this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(i,a){switch(i=+i,a=+a,this._point){case 0:this._point=1,this._line?this._context.lineTo(i,a):this._context.moveTo(i,a);break;case 1:this._point=2,this._x1=i,this._y1=a;break;case 2:this._point=3;default:YU(this,i,a);break}this._x0=this._x1,this._x1=this._x2,this._x2=i,this._y0=this._y1,this._y1=this._y2,this._y2=a}};const U7e=function i(a){function f(p){return new O1t(p,a)}return f.tension=function(p){return i(+p)},f}(0);function N1t(i,a){this._context=i,this._k=(1-a)/6}N1t.prototype={areaStart:Z6,areaEnd:Z6,lineStart: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},lineEnd: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}}},point:function(i,a){switch(i=+i,a=+a,this._point){case 0:this._point=1,this._x3=i,this._y3=a;break;case 1:this._point=2,this._context.moveTo(this._x4=i,this._y4=a);break;case 2:this._point=3,this._x5=i,this._y5=a;break;default:YU(this,i,a);break}this._x0=this._x1,this._x1=this._x2,this._x2=i,this._y0=this._y1,this._y1=this._y2,this._y2=a}};const W7e=function i(a){function f(p){return new N1t(p,a)}return f.tension=function(p){return i(+p)},f}(0);function P1t(i,a){this._context=i,this._k=(1-a)/6}P1t.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},point:function(i,a){switch(i=+i,a=+a,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:YU(this,i,a);break}this._x0=this._x1,this._x1=this._x2,this._x2=i,this._y0=this._y1,this._y1=this._y2,this._y2=a}};const K7e=function i(a){function f(p){return new P1t(p,a)}return f.tension=function(p){return i(+p)},f}(0);function F1t(i,a,f){var p=i._x1,v=i._y1,m=i._x2,b=i._y2;if(i._l01_a>v0){var E=2*i._l01_2a+3*i._l01_a*i._l12_a+i._l12_2a,_=3*i._l01_a*(i._l01_a+i._l12_a);p=(p*E-i._x0*i._l12_2a+i._x2*i._l01_2a)/_,v=(v*E-i._y0*i._l12_2a+i._y2*i._l01_2a)/_}if(i._l23_a>v0){var L=2*i._l23_2a+3*i._l23_a*i._l12_a+i._l12_2a,N=3*i._l23_a*(i._l23_a+i._l12_a);m=(m*L+i._x1*i._l23_2a-a*i._l12_2a)/N,b=(b*L+i._y1*i._l23_2a-f*i._l12_2a)/N}i._context.bezierCurveTo(p,v,m,b,i._x2,i._y2)}function _It(i,a){this._context=i,this._alpha=a}_It.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart: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},lineEnd: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},point:function(i,a){if(i=+i,a=+a,this._point){var f=this._x2-i,p=this._y2-a;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(f*f+p*p,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(i,a):this._context.moveTo(i,a);break;case 1:this._point=2;break;case 2:this._point=3;default:F1t(this,i,a);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=i,this._y0=this._y1,this._y1=this._y2,this._y2=a}};const Y7e=function i(a){function f(p){return a?new _It(p,a):new O1t(p,0)}return f.alpha=function(p){return i(+p)},f}(.5);function SIt(i,a){this._context=i,this._alpha=a}SIt.prototype={areaStart:Z6,areaEnd:Z6,lineStart: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},lineEnd: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}}},point:function(i,a){if(i=+i,a=+a,this._point){var f=this._x2-i,p=this._y2-a;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(f*f+p*p,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=i,this._y3=a;break;case 1:this._point=2,this._context.moveTo(this._x4=i,this._y4=a);break;case 2:this._point=3,this._x5=i,this._y5=a;break;default:F1t(this,i,a);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=i,this._y0=this._y1,this._y1=this._y2,this._y2=a}};const X7e=function i(a){function f(p){return a?new SIt(p,a):new N1t(p,0)}return f.alpha=function(p){return i(+p)},f}(.5);function AIt(i,a){this._context=i,this._alpha=a}AIt.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart: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},lineEnd:function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},point:function(i,a){if(i=+i,a=+a,this._point){var f=this._x2-i,p=this._y2-a;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(f*f+p*p,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:F1t(this,i,a);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=i,this._y0=this._y1,this._y1=this._y2,this._y2=a}};const Q7e=function i(a){function f(p){return a?new AIt(p,a):new P1t(p,0)}return f.alpha=function(p){return i(+p)},f}(.5);function LIt(i){this._context=i}LIt.prototype={areaStart:Z6,areaEnd:Z6,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(i,a){i=+i,a=+a,this._point?this._context.lineTo(i,a):(this._point=1,this._context.moveTo(i,a))}};function Z7e(i){return new LIt(i)}function MIt(i){return i<0?-1:1}function IIt(i,a,f){var p=i._x1-i._x0,v=a-i._x1,m=(i._y1-i._y0)/(p||v<0&&-0),b=(f-i._y1)/(v||p<0&&-0),E=(m*v+b*p)/(p+v);return(MIt(m)+MIt(b))*Math.min(Math.abs(m),Math.abs(b),.5*Math.abs(E))||0}function DIt(i,a){var f=i._x1-i._x0;return f?(3*(i._y1-i._y0)/f-a)/2:a}function B1t(i,a,f){var p=i._x0,v=i._y0,m=i._x1,b=i._y1,E=(m-p)/3;i._context.bezierCurveTo(p+E,v+E*a,m-E,b-E*f,m,b)}function XU(i){this._context=i}XU.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:B1t(this,this._t0,DIt(this,this._t0));break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(i,a){var f=NaN;if(i=+i,a=+a,!(i===this._x1&&a===this._y1)){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(i,a):this._context.moveTo(i,a);break;case 1:this._point=2;break;case 2:this._point=3,B1t(this,DIt(this,f=IIt(this,i,a)),f);break;default:B1t(this,this._t0,f=IIt(this,i,a));break}this._x0=this._x1,this._x1=i,this._y0=this._y1,this._y1=a,this._t0=f}}};function OIt(i){this._context=new NIt(i)}(OIt.prototype=Object.create(XU.prototype)).point=function(i,a){XU.prototype.point.call(this,a,i)};function NIt(i){this._context=i}NIt.prototype={moveTo:function(i,a){this._context.moveTo(a,i)},closePath:function(){this._context.closePath()},lineTo:function(i,a){this._context.lineTo(a,i)},bezierCurveTo:function(i,a,f,p,v,m){this._context.bezierCurveTo(a,i,p,f,m,v)}};function J7e(i){return new XU(i)}function tTe(i){return new OIt(i)}function PIt(i){this._context=i}PIt.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=[],this._y=[]},lineEnd:function(){var i=this._x,a=this._y,f=i.length;if(f)if(this._line?this._context.lineTo(i[0],a[0]):this._context.moveTo(i[0],a[0]),f===2)this._context.lineTo(i[1],a[1]);else for(var p=FIt(i),v=FIt(a),m=0,b=1;b<f;++m,++b)this._context.bezierCurveTo(p[0][m],v[0][m],p[1][m],v[1][m],i[b],a[b]);(this._line||this._line!==0&&f===1)&&this._context.closePath(),this._line=1-this._line,this._x=this._y=null},point:function(i,a){this._x.push(+i),this._y.push(+a)}};function FIt(i){var a,f=i.length-1,p,v=new Array(f),m=new Array(f),b=new Array(f);for(v[0]=0,m[0]=2,b[0]=i[0]+2*i[1],a=1;a<f-1;++a)v[a]=1,m[a]=4,b[a]=4*i[a]+2*i[a+1];for(v[f-1]=2,m[f-1]=7,b[f-1]=8*i[f-1]+i[f],a=1;a<f;++a)p=v[a]/m[a-1],m[a]-=p,b[a]-=p*b[a-1];for(v[f-1]=b[f-1]/m[f-1],a=f-2;a>=0;--a)v[a]=(b[a]-v[a+1])/m[a];for(m[f-1]=(i[f]+v[f-1])/2,a=0;a<f-1;++a)m[a]=2*i[a+1]-v[a+1];return[v,m]}function eTe(i){return new PIt(i)}function QU(i,a){this._context=i,this._t=a}QU.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=this._y=NaN,this._point=0},lineEnd:function(){0<this._t&&this._t<1&&this._point===2&&this._context.lineTo(this._x,this._y),(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line>=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(i,a){switch(i=+i,a=+a,this._point){case 0:this._point=1,this._line?this._context.lineTo(i,a):this._context.moveTo(i,a);break;case 1:this._point=2;default:{if(this._t<=0)this._context.lineTo(this._x,a),this._context.lineTo(i,a);else{var f=this._x*(1-this._t)+i*this._t;this._context.lineTo(f,this._y),this._context.lineTo(f,a)}break}}this._x=i,this._y=a}};function nTe(i){return new QU(i,.5)}function rTe(i){return new QU(i,0)}function iTe(i){return new QU(i,1)}function BN(i,a,f){this.k=i,this.x=a,this.y=f}BN.prototype={constructor:BN,scale:function(i){return i===1?this:new BN(this.k*i,this.x,this.y)},translate:function(i,a){return i===0&a===0?this:new BN(this.k,this.x+this.k*i,this.y+this.k*a)},apply:function(i){return[i[0]*this.k+this.x,i[1]*this.k+this.y]},applyX:function(i){return i*this.k+this.x},applyY:function(i){return i*this.k+this.y},invert:function(i){return[(i[0]-this.x)/this.k,(i[1]-this.y)/this.k]},invertX:function(i){return(i-this.x)/this.k},invertY:function(i){return(i-this.y)/this.k},rescaleX:function(i){return i.copy().domain(i.range().map(this.invertX,this).map(i.invert,i))},rescaleY:function(i){return i.copy().domain(i.range().map(this.invertY,this).map(i.invert,i))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}},BN.prototype;/*! @license DOMPurify 3.0.5 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.0.5/LICENSE */const{entries:BIt,setPrototypeOf:RIt,isFrozen:sTe,getPrototypeOf:aTe,getOwnPropertyDescriptor:oTe}=Object;let{freeze:sg,seal:Xw,create:cTe}=Object,{apply:R1t,construct:j1t}=typeof Reflect<"u"&&Reflect;R1t||(R1t=function(a,f,p){return a.apply(f,p)}),sg||(sg=function(a){return a}),Xw||(Xw=function(a){return a}),j1t||(j1t=function(a,f){return new a(...f)});const uTe=K2(Array.prototype.forEach),jIt=K2(Array.prototype.pop),RN=K2(Array.prototype.push),ZU=K2(String.prototype.toLowerCase),$1t=K2(String.prototype.toString),lTe=K2(String.prototype.match),Qw=K2(String.prototype.replace),hTe=K2(String.prototype.indexOf),fTe=K2(String.prototype.trim),Mb=K2(RegExp.prototype.test),jN=dTe(TypeError);function K2(i){return function(a){for(var f=arguments.length,p=new Array(f>1?f-1:0),v=1;v<f;v++)p[v-1]=arguments[v];return R1t(i,a,p)}}function dTe(i){return function(){for(var a=arguments.length,f=new Array(a),p=0;p<a;p++)f[p]=arguments[p];return j1t(i,f)}}function wo(i,a,f){var p;f=(p=f)!==null&&p!==void 0?p:ZU,RIt&&RIt(i,null);let v=a.length;for(;v--;){let m=a[v];if(typeof m=="string"){const b=f(m);b!==m&&(sTe(a)||(a[v]=b),m=b)}i[m]=!0}return i}function MA(i){const a=cTe(null);for(const[f,p]of BIt(i))a[f]=p;return a}function JU(i,a){for(;i!==null;){const p=oTe(i,a);if(p){if(p.get)return K2(p.get);if(typeof p.value=="function")return K2(p.value)}i=aTe(i)}function f(p){return console.warn("fallback value for",p),null}return f}const $It=sg(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","section","select","shadow","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),z1t=sg(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","filter","font","g","glyph","glyphref","hkern","image","line","lineargradient","marker","mask","metadata","mpath","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),q1t=sg(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),gTe=sg(["animate","color-profile","cursor","discard","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),H1t=sg(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover","mprescripts"]),pTe=sg(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),zIt=sg(["#text"]),qIt=sg(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","face","for","headers","height","hidden","high","href","hreflang","id","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","nonce","noshade","novalidate","nowrap","open","optimum","pattern","placeholder","playsinline","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","xmlns","slot"]),G1t=sg(["accent-height","accumulate","additive","alignment-baseline","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","targetx","targety","transform","transform-origin","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),HIt=sg(["accent","accentunder","align","bevelled","close","columnsalign","columnlines","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lspace","lquote","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),tW=sg(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),bTe=Xw(/\{\{[\w\W]*|[\w\W]*\}\}/gm),vTe=Xw(/<%[\w\W]*|[\w\W]*%>/gm),wTe=Xw(/\${[\w\W]*}/gm),mTe=Xw(/^data-[\-\w.\u00B7-\uFFFF]/),yTe=Xw(/^aria-[\-\w]+$/),GIt=Xw(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),xTe=Xw(/^(?:\w+script|data):/i),kTe=Xw(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),VIt=Xw(/^html$/i);var UIt=Object.freeze({__proto__:null,MUSTACHE_EXPR:bTe,ERB_EXPR:vTe,TMPLIT_EXPR:wTe,DATA_ATTR:mTe,ARIA_ATTR:yTe,IS_ALLOWED_URI:GIt,IS_SCRIPT_OR_DATA:xTe,ATTR_WHITESPACE:kTe,DOCTYPE_NAME:VIt});const ETe=()=>typeof window>"u"?null:window,TTe=function(a,f){if(typeof a!="object"||typeof a.createPolicy!="function")return null;let p=null;const v="data-tt-policy-suffix";f&&f.hasAttribute(v)&&(p=f.getAttribute(v));const m="dompurify"+(p?"#"+p:"");try{return a.createPolicy(m,{createHTML(b){return b},createScriptURL(b){return b}})}catch{return console.warn("TrustedTypes policy "+m+" could not be created."),null}};function WIt(){let i=arguments.length>0&&arguments[0]!==void 0?arguments[0]:ETe();const a=Bi=>WIt(Bi);if(a.version="3.0.5",a.removed=[],!i||!i.document||i.document.nodeType!==9)return a.isSupported=!1,a;const f=i.document,p=f.currentScript;let{document:v}=i;const{DocumentFragment:m,HTMLTemplateElement:b,Node:E,Element:_,NodeFilter:L,NamedNodeMap:N=i.NamedNodeMap||i.MozNamedAttrMap,HTMLFormElement:B,DOMParser:j,trustedTypes:R}=i,z=_.prototype,K=JU(z,"cloneNode"),it=JU(z,"nextSibling"),st=JU(z,"childNodes"),ut=JU(z,"parentNode");if(typeof b=="function"){const Bi=v.createElement("template");Bi.content&&Bi.content.ownerDocument&&(v=Bi.content.ownerDocument)}let bt,mt="";const{implementation:yt,createNodeIterator:dt,createDocumentFragment:ht,getElementsByTagName:wt}=v,{importNode:X}=f;let pt={};a.isSupported=typeof BIt=="function"&&typeof ut=="function"&&yt&&yt.createHTMLDocument!==void 0;const{MUSTACHE_EXPR:U,ERB_EXPR:xt,TMPLIT_EXPR:nt,DATA_ATTR:Ot,ARIA_ATTR:Nt,IS_SCRIPT_OR_DATA:qt,ATTR_WHITESPACE:Ct}=UIt;let{IS_ALLOWED_URI:Z}=UIt,Tt=null;const Ht=wo({},[...$It,...z1t,...q1t,...H1t,...zIt]);let It=null;const Ft=wo({},[...qIt,...G1t,...HIt,...tW]);let ke=Object.seal(Object.create(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),pn=null,Me=null,ve=!0,Ge=!0,Ke=!1,we=!0,_e=!1,$t=!1,re=!1,ie=!1,Oe=!1,oe=!1,Ne=!1,me=!0,cn=!1;const li="user-content-";let ya=!0,da=!1,Oo={},ds=null;const Dr=wo({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]);let nr=null;const di=wo({},["audio","video","img","source","image","track"]);let Ee=null;const Yn=wo({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),He="http://www.w3.org/1998/Math/MathML",Ti="http://www.w3.org/2000/svg",gn="http://www.w3.org/1999/xhtml";let ks=gn,qa=!1,La=null;const Gs=wo({},[He,Ti,gn],$1t);let No;const vs=["application/xhtml+xml","text/html"],nu="text/html";let $s,Lu=null;const fm=v.createElement("form"),av=function(on){return on instanceof RegExp||on instanceof Function},Uu=function(on){if(!(Lu&&Lu===on)){if((!on||typeof on!="object")&&(on={}),on=MA(on),No=vs.indexOf(on.PARSER_MEDIA_TYPE)===-1?No=nu:No=on.PARSER_MEDIA_TYPE,$s=No==="application/xhtml+xml"?$1t:ZU,Tt="ALLOWED_TAGS"in on?wo({},on.ALLOWED_TAGS,$s):Ht,It="ALLOWED_ATTR"in on?wo({},on.ALLOWED_ATTR,$s):Ft,La="ALLOWED_NAMESPACES"in on?wo({},on.ALLOWED_NAMESPACES,$1t):Gs,Ee="ADD_URI_SAFE_ATTR"in on?wo(MA(Yn),on.ADD_URI_SAFE_ATTR,$s):Yn,nr="ADD_DATA_URI_TAGS"in on?wo(MA(di),on.ADD_DATA_URI_TAGS,$s):di,ds="FORBID_CONTENTS"in on?wo({},on.FORBID_CONTENTS,$s):Dr,pn="FORBID_TAGS"in on?wo({},on.FORBID_TAGS,$s):{},Me="FORBID_ATTR"in on?wo({},on.FORBID_ATTR,$s):{},Oo="USE_PROFILES"in on?on.USE_PROFILES:!1,ve=on.ALLOW_ARIA_ATTR!==!1,Ge=on.ALLOW_DATA_ATTR!==!1,Ke=on.ALLOW_UNKNOWN_PROTOCOLS||!1,we=on.ALLOW_SELF_CLOSE_IN_ATTR!==!1,_e=on.SAFE_FOR_TEMPLATES||!1,$t=on.WHOLE_DOCUMENT||!1,Oe=on.RETURN_DOM||!1,oe=on.RETURN_DOM_FRAGMENT||!1,Ne=on.RETURN_TRUSTED_TYPE||!1,ie=on.FORCE_BODY||!1,me=on.SANITIZE_DOM!==!1,cn=on.SANITIZE_NAMED_PROPS||!1,ya=on.KEEP_CONTENT!==!1,da=on.IN_PLACE||!1,Z=on.ALLOWED_URI_REGEXP||GIt,ks=on.NAMESPACE||gn,ke=on.CUSTOM_ELEMENT_HANDLING||{},on.CUSTOM_ELEMENT_HANDLING&&av(on.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(ke.tagNameCheck=on.CUSTOM_ELEMENT_HANDLING.tagNameCheck),on.CUSTOM_ELEMENT_HANDLING&&av(on.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(ke.attributeNameCheck=on.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),on.CUSTOM_ELEMENT_HANDLING&&typeof on.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements=="boolean"&&(ke.allowCustomizedBuiltInElements=on.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),_e&&(Ge=!1),oe&&(Oe=!0),Oo&&(Tt=wo({},[...zIt]),It=[],Oo.html===!0&&(wo(Tt,$It),wo(It,qIt)),Oo.svg===!0&&(wo(Tt,z1t),wo(It,G1t),wo(It,tW)),Oo.svgFilters===!0&&(wo(Tt,q1t),wo(It,G1t),wo(It,tW)),Oo.mathMl===!0&&(wo(Tt,H1t),wo(It,HIt),wo(It,tW))),on.ADD_TAGS&&(Tt===Ht&&(Tt=MA(Tt)),wo(Tt,on.ADD_TAGS,$s)),on.ADD_ATTR&&(It===Ft&&(It=MA(It)),wo(It,on.ADD_ATTR,$s)),on.ADD_URI_SAFE_ATTR&&wo(Ee,on.ADD_URI_SAFE_ATTR,$s),on.FORBID_CONTENTS&&(ds===Dr&&(ds=MA(ds)),wo(ds,on.FORBID_CONTENTS,$s)),ya&&(Tt["#text"]=!0),$t&&wo(Tt,["html","head","body"]),Tt.table&&(wo(Tt,["tbody"]),delete pn.tbody),on.TRUSTED_TYPES_POLICY){if(typeof on.TRUSTED_TYPES_POLICY.createHTML!="function")throw jN('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof on.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw jN('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');bt=on.TRUSTED_TYPES_POLICY,mt=bt.createHTML("")}else bt===void 0&&(bt=TTe(R,p)),bt!==null&&typeof mt=="string"&&(mt=bt.createHTML(""));sg&&sg(on),Lu=on}},Zl=wo({},["mi","mo","mn","ms","mtext"]),Pa=wo({},["foreignobject","desc","title","annotation-xml"]),Al=wo({},["title","style","font","a","script"]),ua=wo({},z1t);wo(ua,q1t),wo(ua,gTe);const bc=wo({},H1t);wo(bc,pTe);const Cc=function(on){let kr=ut(on);(!kr||!kr.tagName)&&(kr={namespaceURI:ks,tagName:"template"});const Ei=ZU(on.tagName),Jo=ZU(kr.tagName);return La[on.namespaceURI]?on.namespaceURI===Ti?kr.namespaceURI===gn?Ei==="svg":kr.namespaceURI===He?Ei==="svg"&&(Jo==="annotation-xml"||Zl[Jo]):!!ua[Ei]:on.namespaceURI===He?kr.namespaceURI===gn?Ei==="math":kr.namespaceURI===Ti?Ei==="math"&&Pa[Jo]:!!bc[Ei]:on.namespaceURI===gn?kr.namespaceURI===Ti&&!Pa[Jo]||kr.namespaceURI===He&&!Zl[Jo]?!1:!bc[Ei]&&(Al[Ei]||!ua[Ei]):!!(No==="application/xhtml+xml"&&La[on.namespaceURI]):!1},ga=function(on){RN(a.removed,{element:on});try{on.parentNode.removeChild(on)}catch{on.remove()}},Ma=function(on,kr){try{RN(a.removed,{attribute:kr.getAttributeNode(on),from:kr})}catch{RN(a.removed,{attribute:null,from:kr})}if(kr.removeAttribute(on),on==="is"&&!It[on])if(Oe||oe)try{ga(kr)}catch{}else try{kr.setAttribute(on,"")}catch{}},Ha=function(on){let kr,Ei;if(ie)on="<remove></remove>"+on;else{const tf=lTe(on,/^[\r\n\t ]+/);Ei=tf&&tf[0]}No==="application/xhtml+xml"&&ks===gn&&(on='<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>'+on+"</body></html>");const Jo=bt?bt.createHTML(on):on;if(ks===gn)try{kr=new j().parseFromString(Jo,No)}catch{}if(!kr||!kr.documentElement){kr=yt.createDocument(ks,"template",null);try{kr.documentElement.innerHTML=qa?mt:Jo}catch{}}const vc=kr.body||kr.documentElement;return on&&Ei&&vc.insertBefore(v.createTextNode(Ei),vc.childNodes[0]||null),ks===gn?wt.call(kr,$t?"html":"body")[0]:$t?kr.documentElement:vc},Ll=function(on){return dt.call(on.ownerDocument||on,on,L.SHOW_ELEMENT|L.SHOW_COMMENT|L.SHOW_TEXT,null,!1)},_c=function(on){return on instanceof B&&(typeof on.nodeName!="string"||typeof on.textContent!="string"||typeof on.removeChild!="function"||!(on.attributes instanceof N)||typeof on.removeAttribute!="function"||typeof on.setAttribute!="function"||typeof on.namespaceURI!="string"||typeof on.insertBefore!="function"||typeof on.hasChildNodes!="function")},ov=function(on){return typeof E=="object"?on instanceof E:on&&typeof on=="object"&&typeof on.nodeType=="number"&&typeof on.nodeName=="string"},Jl=function(on,kr,Ei){pt[on]&&uTe(pt[on],Jo=>{Jo.call(a,kr,Ei,Lu)})},Z1=function(on){let kr;if(Jl("beforeSanitizeElements",on,null),_c(on))return ga(on),!0;const Ei=$s(on.nodeName);if(Jl("uponSanitizeElement",on,{tagName:Ei,allowedTags:Tt}),on.hasChildNodes()&&!ov(on.firstElementChild)&&(!ov(on.content)||!ov(on.content.firstElementChild))&&Mb(/<[/\w]/g,on.innerHTML)&&Mb(/<[/\w]/g,on.textContent))return ga(on),!0;if(!Tt[Ei]||pn[Ei]){if(!pn[Ei]&&J1(Ei)&&(ke.tagNameCheck instanceof RegExp&&Mb(ke.tagNameCheck,Ei)||ke.tagNameCheck instanceof Function&&ke.tagNameCheck(Ei)))return!1;if(ya&&!ds[Ei]){const Jo=ut(on)||on.parentNode,vc=st(on)||on.childNodes;if(vc&&Jo){const tf=vc.length;for(let Oc=tf-1;Oc>=0;--Oc)Jo.insertBefore(K(vc[Oc],!0),it(on))}}return ga(on),!0}return on instanceof _&&!Cc(on)||(Ei==="noscript"||Ei==="noembed"||Ei==="noframes")&&Mb(/<\/no(script|embed|frames)/i,on.innerHTML)?(ga(on),!0):(_e&&on.nodeType===3&&(kr=on.textContent,kr=Qw(kr,U," "),kr=Qw(kr,xt," "),kr=Qw(kr,nt," "),on.textContent!==kr&&(RN(a.removed,{element:on.cloneNode()}),on.textContent=kr)),Jl("afterSanitizeElements",on,null),!1)},Fd=function(on,kr,Ei){if(me&&(kr==="id"||kr==="name")&&(Ei in v||Ei in fm))return!1;if(!(Ge&&!Me[kr]&&Mb(Ot,kr))){if(!(ve&&Mb(Nt,kr))){if(!It[kr]||Me[kr]){if(!(J1(on)&&(ke.tagNameCheck instanceof RegExp&&Mb(ke.tagNameCheck,on)||ke.tagNameCheck instanceof Function&&ke.tagNameCheck(on))&&(ke.attributeNameCheck instanceof RegExp&&Mb(ke.attributeNameCheck,kr)||ke.attributeNameCheck instanceof Function&&ke.attributeNameCheck(kr))||kr==="is"&&ke.allowCustomizedBuiltInElements&&(ke.tagNameCheck instanceof RegExp&&Mb(ke.tagNameCheck,Ei)||ke.tagNameCheck instanceof Function&&ke.tagNameCheck(Ei))))return!1}else if(!Ee[kr]){if(!Mb(Z,Qw(Ei,Ct,""))){if(!((kr==="src"||kr==="xlink:href"||kr==="href")&&on!=="script"&&hTe(Ei,"data:")===0&&nr[on])){if(!(Ke&&!Mb(qt,Qw(Ei,Ct,"")))){if(Ei)return!1}}}}}}return!0},J1=function(on){return on.indexOf("-")>0},Bd=function(on){let kr,Ei,Jo,vc;Jl("beforeSanitizeAttributes",on,null);const{attributes:tf}=on;if(!tf)return;const Oc={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:It};for(vc=tf.length;vc--;){kr=tf[vc];const{name:ef,namespaceURI:nf}=kr;if(Ei=ef==="value"?kr.value:fTe(kr.value),Jo=$s(ef),Oc.attrName=Jo,Oc.attrValue=Ei,Oc.keepAttr=!0,Oc.forceKeepAttr=void 0,Jl("uponSanitizeAttribute",on,Oc),Ei=Oc.attrValue,Oc.forceKeepAttr||(Ma(ef,on),!Oc.keepAttr))continue;if(!we&&Mb(/\/>/i,Ei)){Ma(ef,on);continue}_e&&(Ei=Qw(Ei,U," "),Ei=Qw(Ei,xt," "),Ei=Qw(Ei,nt," "));const Xi=$s(on.nodeName);if(Fd(Xi,Jo,Ei)){if(cn&&(Jo==="id"||Jo==="name")&&(Ma(ef,on),Ei=li+Ei),bt&&typeof R=="object"&&typeof R.getAttributeType=="function"&&!nf)switch(R.getAttributeType(Xi,Jo)){case"TrustedHTML":{Ei=bt.createHTML(Ei);break}case"TrustedScriptURL":{Ei=bt.createScriptURL(Ei);break}}try{nf?on.setAttributeNS(nf,ef,Ei):on.setAttribute(ef,Ei),jIt(a.removed)}catch{}}}Jl("afterSanitizeAttributes",on,null)},E0=function Bi(on){let kr;const Ei=Ll(on);for(Jl("beforeSanitizeShadowDOM",on,null);kr=Ei.nextNode();)Jl("uponSanitizeShadowNode",kr,null),!Z1(kr)&&(kr.content instanceof m&&Bi(kr.content),Bd(kr));Jl("afterSanitizeShadowDOM",on,null)};return a.sanitize=function(Bi){let on=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},kr,Ei,Jo,vc;if(qa=!Bi,qa&&(Bi="<!-->"),typeof Bi!="string"&&!ov(Bi))if(typeof Bi.toString=="function"){if(Bi=Bi.toString(),typeof Bi!="string")throw jN("dirty is not a string, aborting")}else throw jN("toString is not a function");if(!a.isSupported)return Bi;if(re||Uu(on),a.removed=[],typeof Bi=="string"&&(da=!1),da){if(Bi.nodeName){const ef=$s(Bi.nodeName);if(!Tt[ef]||pn[ef])throw jN("root node is forbidden and cannot be sanitized in-place")}}else if(Bi instanceof E)kr=Ha("<!---->"),Ei=kr.ownerDocument.importNode(Bi,!0),Ei.nodeType===1&&Ei.nodeName==="BODY"||Ei.nodeName==="HTML"?kr=Ei:kr.appendChild(Ei);else{if(!Oe&&!_e&&!$t&&Bi.indexOf("<")===-1)return bt&&Ne?bt.createHTML(Bi):Bi;if(kr=Ha(Bi),!kr)return Oe?null:Ne?mt:""}kr&&ie&&ga(kr.firstChild);const tf=Ll(da?Bi:kr);for(;Jo=tf.nextNode();)Z1(Jo)||(Jo.content instanceof m&&E0(Jo.content),Bd(Jo));if(da)return Bi;if(Oe){if(oe)for(vc=ht.call(kr.ownerDocument);kr.firstChild;)vc.appendChild(kr.firstChild);else vc=kr;return(It.shadowroot||It.shadowrootmode)&&(vc=X.call(f,vc,!0)),vc}let Oc=$t?kr.outerHTML:kr.innerHTML;return $t&&Tt["!doctype"]&&kr.ownerDocument&&kr.ownerDocument.doctype&&kr.ownerDocument.doctype.name&&Mb(VIt,kr.ownerDocument.doctype.name)&&(Oc="<!DOCTYPE "+kr.ownerDocument.doctype.name+`>
`+Oc),_e&&(Oc=Qw(Oc,U," "),Oc=Qw(Oc,xt," "),Oc=Qw(Oc,nt," ")),bt&&Ne?bt.createHTML(Oc):Oc},a.setConfig=function(Bi){Uu(Bi),re=!0},a.clearConfig=function(){Lu=null,re=!1},a.isValidAttribute=function(Bi,on,kr){Lu||Uu({});const Ei=$s(Bi),Jo=$s(on);return Fd(Ei,Jo,kr)},a.addHook=function(Bi,on){typeof on=="function"&&(pt[Bi]=pt[Bi]||[],RN(pt[Bi],on))},a.removeHook=function(Bi){if(pt[Bi])return jIt(pt[Bi])},a.removeHooks=function(Bi){pt[Bi]&&(pt[Bi]=[])},a.removeAllHooks=function(){pt={}},a}var eW=WIt();const $N=/<br\s*\/?>/gi,CTe=i=>i?XIt(i).replace(/\\n/g,"#br#").split("#br#"):[""],KIt=i=>eW.sanitize(i),YIt=(i,a)=>{var f;if(((f=a.flowchart)==null?void 0:f.htmlLabels)!==!1){const p=a.securityLevel;p==="antiscript"||p==="strict"?i=KIt(i):p!=="loose"&&(i=XIt(i),i=i.replace(/</g,"&lt;").replace(/>/g,"&gt;"),i=i.replace(/=/g,"&equals;"),i=LTe(i))}return i},Dd=(i,a)=>i&&(a.dompurifyConfig?i=eW.sanitize(YIt(i,a),a.dompurifyConfig).toString():i=eW.sanitize(YIt(i,a),{FORBID_TAGS:["style"]}).toString(),i),_Te=(i,a)=>typeof i=="string"?Dd(i,a):i.flat().map(f=>Dd(f,a)),STe=i=>$N.test(i),ATe=i=>i.split($N),LTe=i=>i.replace(/#br#/g,"<br/>"),XIt=i=>i.replace($N,"#br#"),MTe=i=>{let a="";return i&&(a=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,a=a.replaceAll(/\(/g,"\\("),a=a.replaceAll(/\)/g,"\\)")),a},s1=i=>!(i===!1||["false","null","0"].includes(String(i).trim().toLowerCase())),ITe=function(...i){const a=i.filter(f=>!isNaN(f));return Math.max(...a)},DTe=function(...i){const a=i.filter(f=>!isNaN(f));return Math.min(...a)},zN=function(i){const a=i.split(/(,)/),f=[];for(let p=0;p<a.length;p++){let v=a[p];if(v===","&&p>0&&p+1<a.length){const m=a[p-1],b=a[p+1];OTe(m,b)&&(v=m+","+b,p++,f.pop())}f.push(NTe(v))}return f.join("")},V1t=(i,a)=>Math.max(0,i.split(a).length-1),OTe=(i,a)=>{const f=V1t(i,"~"),p=V1t(a,"~");return f===1&&p===1},NTe=i=>{const a=V1t(i,"~");let f=!1;if(a<=1)return i;a%2!==0&&i.startsWith("~")&&(i=i.substring(1),f=!0);const p=[...i];let v=p.indexOf("~"),m=p.lastIndexOf("~");for(;v!==-1&&m!==-1&&v!==m;)p[v]="<",p[m]=">",v=p.indexOf("~"),m=p.lastIndexOf("~");return f&&p.unshift("~"),p.join("")},Yr={getRows:CTe,sanitizeText:Dd,sanitizeTextOrArray:_Te,hasBreaks:STe,splitBreaks:ATe,lineBreakRegex:$N,removeScript:KIt,getUrl:MTe,evaluate:s1,getMax:ITe,getMin:DTe},nW={min:{r:0,g:0,b:0,s:0,l:0,a:0},max:{r:255,g:255,b:255,h:360,s:100,l:100,a:1},clamp:{r:i=>i>=255?255:i<0?0:i,g:i=>i>=255?255:i<0?0:i,b:i=>i>=255?255:i<0?0:i,h:i=>i%360,s:i=>i>=100?100:i<0?0:i,l:i=>i>=100?100:i<0?0:i,a:i=>i>=1?1:i<0?0:i},toLinear:i=>{const a=i/255;return i>.03928?Math.pow((a+.055)/1.055,2.4):a/12.92},hue2rgb:(i,a,f)=>(f<0&&(f+=1),f>1&&(f-=1),f<1/6?i+(a-i)*6*f:f<1/2?a:f<2/3?i+(a-i)*(2/3-f)*6:i),hsl2rgb:({h:i,s:a,l:f},p)=>{if(!a)return f*2.55;i/=360,a/=100,f/=100;const v=f<.5?f*(1+a):f+a-f*a,m=2*f-v;switch(p){case"r":return nW.hue2rgb(m,v,i+1/3)*255;case"g":return nW.hue2rgb(m,v,i)*255;case"b":return nW.hue2rgb(m,v,i-1/3)*255}},rgb2hsl:({r:i,g:a,b:f},p)=>{i/=255,a/=255,f/=255;const v=Math.max(i,a,f),m=Math.min(i,a,f),b=(v+m)/2;if(p==="l")return b*100;if(v===m)return 0;const E=v-m,_=b>.5?E/(2-v-m):E/(v+m);if(p==="s")return _*100;switch(v){case i:return((a-f)/E+(a<f?6:0))*60;case a:return((f-i)/E+2)*60;case f:return((i-a)/E+4)*60;default:return-1}}},fa={channel:nW,lang:{clamp:(i,a,f)=>a>f?Math.min(a,Math.max(f,i)):Math.min(f,Math.max(a,i)),round:i=>Math.round(i*1e10)/1e10},unit:{dec2hex:i=>{const a=Math.round(i).toString(16);return a.length>1?a:`0${a}`}}},J6={};for(let i=0;i<=255;i++)J6[i]=fa.unit.dec2hex(i);const w0={ALL:0,RGB:1,HSL:2};class PTe{constructor(){this.type=w0.ALL}get(){return this.type}set(a){if(this.type&&this.type!==a)throw new Error("Cannot change both RGB and HSL channels at the same time");this.type=a}reset(){this.type=w0.ALL}is(a){return this.type===a}}const FTe=PTe;class BTe{constructor(a,f){this.color=f,this.changed=!1,this.data=a,this.type=new FTe}set(a,f){return this.color=f,this.changed=!1,this.data=a,this.type.type=w0.ALL,this}_ensureHSL(){const a=this.data,{h:f,s:p,l:v}=a;f===void 0&&(a.h=fa.channel.rgb2hsl(a,"h")),p===void 0&&(a.s=fa.channel.rgb2hsl(a,"s")),v===void 0&&(a.l=fa.channel.rgb2hsl(a,"l"))}_ensureRGB(){const a=this.data,{r:f,g:p,b:v}=a;f===void 0&&(a.r=fa.channel.hsl2rgb(a,"r")),p===void 0&&(a.g=fa.channel.hsl2rgb(a,"g")),v===void 0&&(a.b=fa.channel.hsl2rgb(a,"b"))}get r(){const a=this.data,f=a.r;return!this.type.is(w0.HSL)&&f!==void 0?f:(this._ensureHSL(),fa.channel.hsl2rgb(a,"r"))}get g(){const a=this.data,f=a.g;return!this.type.is(w0.HSL)&&f!==void 0?f:(this._ensureHSL(),fa.channel.hsl2rgb(a,"g"))}get b(){const a=this.data,f=a.b;return!this.type.is(w0.HSL)&&f!==void 0?f:(this._ensureHSL(),fa.channel.hsl2rgb(a,"b"))}get h(){const a=this.data,f=a.h;return!this.type.is(w0.RGB)&&f!==void 0?f:(this._ensureRGB(),fa.channel.rgb2hsl(a,"h"))}get s(){const a=this.data,f=a.s;return!this.type.is(w0.RGB)&&f!==void 0?f:(this._ensureRGB(),fa.channel.rgb2hsl(a,"s"))}get l(){const a=this.data,f=a.l;return!this.type.is(w0.RGB)&&f!==void 0?f:(this._ensureRGB(),fa.channel.rgb2hsl(a,"l"))}get a(){return this.data.a}set r(a){this.type.set(w0.RGB),this.changed=!0,this.data.r=a}set g(a){this.type.set(w0.RGB),this.changed=!0,this.data.g=a}set b(a){this.type.set(w0.RGB),this.changed=!0,this.data.b=a}set h(a){this.type.set(w0.HSL),this.changed=!0,this.data.h=a}set s(a){this.type.set(w0.HSL),this.changed=!0,this.data.s=a}set l(a){this.type.set(w0.HSL),this.changed=!0,this.data.l=a}set a(a){this.changed=!0,this.data.a=a}}const RTe=BTe,rW=new RTe({r:0,g:0,b:0,a:0},"transparent"),QIt={re:/^#((?:[a-f0-9]{2}){2,4}|[a-f0-9]{3})$/i,parse:i=>{if(i.charCodeAt(0)!==35)return;const a=i.match(QIt.re);if(!a)return;const f=a[1],p=parseInt(f,16),v=f.length,m=v%4===0,b=v>4,E=b?1:17,_=b?8:4,L=m?0:-1,N=b?255:15;return rW.set({r:(p>>_*(L+3)&N)*E,g:(p>>_*(L+2)&N)*E,b:(p>>_*(L+1)&N)*E,a:m?(p&N)*E/255:1},i)},stringify:i=>{const{r:a,g:f,b:p,a:v}=i;return v<1?`#${J6[Math.round(a)]}${J6[Math.round(f)]}${J6[Math.round(p)]}${J6[Math.round(v*255)]}`:`#${J6[Math.round(a)]}${J6[Math.round(f)]}${J6[Math.round(p)]}`}},qN=QIt,iW={re:/^hsla?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(?:deg|grad|rad|turn)?)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(%)?))?\s*?\)$/i,hueRe:/^(.+?)(deg|grad|rad|turn)$/i,_hue2deg:i=>{const a=i.match(iW.hueRe);if(a){const[,f,p]=a;switch(p){case"grad":return fa.channel.clamp.h(parseFloat(f)*.9);case"rad":return fa.channel.clamp.h(parseFloat(f)*180/Math.PI);case"turn":return fa.channel.clamp.h(parseFloat(f)*360)}}return fa.channel.clamp.h(parseFloat(i))},parse:i=>{const a=i.charCodeAt(0);if(a!==104&&a!==72)return;const f=i.match(iW.re);if(!f)return;const[,p,v,m,b,E]=f;return rW.set({h:iW._hue2deg(p),s:fa.channel.clamp.s(parseFloat(v)),l:fa.channel.clamp.l(parseFloat(m)),a:b?fa.channel.clamp.a(E?parseFloat(b)/100:parseFloat(b)):1},i)},stringify:i=>{const{h:a,s:f,l:p,a:v}=i;return v<1?`hsla(${fa.lang.round(a)}, ${fa.lang.round(f)}%, ${fa.lang.round(p)}%, ${v})`:`hsl(${fa.lang.round(a)}, ${fa.lang.round(f)}%, ${fa.lang.round(p)}%)`}},sW=iW,aW={colors:{aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyanaqua:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",transparent:"#00000000",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},parse:i=>{i=i.toLowerCase();const a=aW.colors[i];if(a)return qN.parse(a)},stringify:i=>{const a=qN.stringify(i);for(const f in aW.colors)if(aW.colors[f]===a)return f}},ZIt=aW,JIt={re:/^rgba?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?)))?\s*?\)$/i,parse:i=>{const a=i.charCodeAt(0);if(a!==114&&a!==82)return;const f=i.match(JIt.re);if(!f)return;const[,p,v,m,b,E,_,L,N]=f;return rW.set({r:fa.channel.clamp.r(v?parseFloat(p)*2.55:parseFloat(p)),g:fa.channel.clamp.g(b?parseFloat(m)*2.55:parseFloat(m)),b:fa.channel.clamp.b(_?parseFloat(E)*2.55:parseFloat(E)),a:L?fa.channel.clamp.a(N?parseFloat(L)/100:parseFloat(L)):1},i)},stringify:i=>{const{r:a,g:f,b:p,a:v}=i;return v<1?`rgba(${fa.lang.round(a)}, ${fa.lang.round(f)}, ${fa.lang.round(p)}, ${fa.lang.round(v)})`:`rgb(${fa.lang.round(a)}, ${fa.lang.round(f)}, ${fa.lang.round(p)})`}},oW=JIt,Zw={format:{keyword:ZIt,hex:qN,rgb:oW,rgba:oW,hsl:sW,hsla:sW},parse:i=>{if(typeof i!="string")return i;const a=qN.parse(i)||oW.parse(i)||sW.parse(i)||ZIt.parse(i);if(a)return a;throw new Error(`Unsupported color format: "${i}"`)},stringify:i=>!i.changed&&i.color?i.color:i.type.is(w0.HSL)||i.data.r===void 0?sW.stringify(i):i.a<1||!Number.isInteger(i.r)||!Number.isInteger(i.g)||!Number.isInteger(i.b)?oW.stringify(i):qN.stringify(i)},tDt=(i,a)=>{const f=Zw.parse(i);for(const p in a)f[p]=fa.channel.clamp[p](a[p]);return Zw.stringify(f)},IA=(i,a,f=0,p=1)=>{if(typeof i!="number")return tDt(i,{a});const v=rW.set({r:fa.channel.clamp.r(i),g:fa.channel.clamp.g(a),b:fa.channel.clamp.b(f),a:fa.channel.clamp.a(p)});return Zw.stringify(v)},jTe=(i,a)=>fa.lang.round(Zw.parse(i)[a]),$Te=i=>{const{r:a,g:f,b:p}=Zw.parse(i),v=.2126*fa.channel.toLinear(a)+.7152*fa.channel.toLinear(f)+.0722*fa.channel.toLinear(p);return fa.lang.round(v)},zTe=i=>$Te(i)>=.5,J7=i=>!zTe(i),eDt=(i,a,f)=>{const p=Zw.parse(i),v=p[a],m=fa.channel.clamp[a](v+f);return v!==m&&(p[a]=m),Zw.stringify(p)},bs=(i,a)=>eDt(i,"l",a),js=(i,a)=>eDt(i,"l",-a),xn=(i,a)=>{const f=Zw.parse(i),p={};for(const v in a)a[v]&&(p[v]=f[v]+a[v]);return tDt(i,p)},qTe=(i,a,f=50)=>{const{r:p,g:v,b:m,a:b}=Zw.parse(i),{r:E,g:_,b:L,a:N}=Zw.parse(a),B=f/100,j=B*2-1,R=b-N,K=((j*R===-1?j:(j+R)/(1+j*R))+1)/2,it=1-K,st=p*K+E*it,ut=v*K+_*it,bt=m*K+L*it,mt=b*B+N*(1-B);return IA(st,ut,bt,mt)},Ii=(i,a=100)=>{const f=Zw.parse(i);return f.r=255-f.r,f.g=255-f.g,f.b=255-f.b,qTe(f,i,a)},ag=(i,a)=>a?xn(i,{s:-40,l:10}):xn(i,{s:-40,l:-10}),cW="#ffffff",uW="#f2f2f2";let HTe=class{constructor(){this.background="#f4f4f4",this.primaryColor="#fff4dd",this.noteBkgColor="#fff5ad",this.noteTextColor="#333",this.THEME_COLOR_LIMIT=12,this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px"}updateColors(){if(this.primaryTextColor=this.primaryTextColor||(this.darkMode?"#eee":"#333"),this.secondaryColor=this.secondaryColor||xn(this.primaryColor,{h:-120}),this.tertiaryColor=this.tertiaryColor||xn(this.primaryColor,{h:180,l:5}),this.primaryBorderColor=this.primaryBorderColor||ag(this.primaryColor,this.darkMode),this.secondaryBorderColor=this.secondaryBorderColor||ag(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=this.tertiaryBorderColor||ag(this.tertiaryColor,this.darkMode),this.noteBorderColor=this.noteBorderColor||ag(this.noteBkgColor,this.darkMode),this.noteBkgColor=this.noteBkgColor||"#fff5ad",this.noteTextColor=this.noteTextColor||"#333",this.secondaryTextColor=this.secondaryTextColor||Ii(this.secondaryColor),this.tertiaryTextColor=this.tertiaryTextColor||Ii(this.tertiaryColor),this.lineColor=this.lineColor||Ii(this.background),this.arrowheadColor=this.arrowheadColor||Ii(this.background),this.textColor=this.textColor||this.primaryTextColor,this.border2=this.border2||this.tertiaryBorderColor,this.nodeBkg=this.nodeBkg||this.primaryColor,this.mainBkg=this.mainBkg||this.primaryColor,this.nodeBorder=this.nodeBorder||this.primaryBorderColor,this.clusterBkg=this.clusterBkg||this.tertiaryColor,this.clusterBorder=this.clusterBorder||this.tertiaryBorderColor,this.defaultLinkColor=this.defaultLinkColor||this.lineColor,this.titleColor=this.titleColor||this.tertiaryTextColor,this.edgeLabelBackground=this.edgeLabelBackground||(this.darkMode?js(this.secondaryColor,30):this.secondaryColor),this.nodeTextColor=this.nodeTextColor||this.primaryTextColor,this.actorBorder=this.actorBorder||this.primaryBorderColor,this.actorBkg=this.actorBkg||this.mainBkg,this.actorTextColor=this.actorTextColor||this.primaryTextColor,this.actorLineColor=this.actorLineColor||"grey",this.labelBoxBkgColor=this.labelBoxBkgColor||this.actorBkg,this.signalColor=this.signalColor||this.textColor,this.signalTextColor=this.signalTextColor||this.textColor,this.labelBoxBorderColor=this.labelBoxBorderColor||this.actorBorder,this.labelTextColor=this.labelTextColor||this.actorTextColor,this.loopTextColor=this.loopTextColor||this.actorTextColor,this.activationBorderColor=this.activationBorderColor||js(this.secondaryColor,10),this.activationBkgColor=this.activationBkgColor||this.secondaryColor,this.sequenceNumberColor=this.sequenceNumberColor||Ii(this.lineColor),this.sectionBkgColor=this.sectionBkgColor||this.tertiaryColor,this.altSectionBkgColor=this.altSectionBkgColor||"white",this.sectionBkgColor=this.sectionBkgColor||this.secondaryColor,this.sectionBkgColor2=this.sectionBkgColor2||this.primaryColor,this.excludeBkgColor=this.excludeBkgColor||"#eeeeee",this.taskBorderColor=this.taskBorderColor||this.primaryBorderColor,this.taskBkgColor=this.taskBkgColor||this.primaryColor,this.activeTaskBorderColor=this.activeTaskBorderColor||this.primaryColor,this.activeTaskBkgColor=this.activeTaskBkgColor||bs(this.primaryColor,23),this.gridColor=this.gridColor||"lightgrey",this.doneTaskBkgColor=this.doneTaskBkgColor||"lightgrey",this.doneTaskBorderColor=this.doneTaskBorderColor||"grey",this.critBorderColor=this.critBorderColor||"#ff8888",this.critBkgColor=this.critBkgColor||"red",this.todayLineColor=this.todayLineColor||"red",this.taskTextColor=this.taskTextColor||this.textColor,this.taskTextOutsideColor=this.taskTextOutsideColor||this.textColor,this.taskTextLightColor=this.taskTextLightColor||this.textColor,this.taskTextColor=this.taskTextColor||this.primaryTextColor,this.taskTextDarkColor=this.taskTextDarkColor||this.textColor,this.taskTextClickableColor=this.taskTextClickableColor||"#003163",this.personBorder=this.personBorder||this.primaryBorderColor,this.personBkg=this.personBkg||this.mainBkg,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||this.tertiaryColor,this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.nodeBorder,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.specialStateColor=this.lineColor,this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||xn(this.primaryColor,{h:30}),this.cScale4=this.cScale4||xn(this.primaryColor,{h:60}),this.cScale5=this.cScale5||xn(this.primaryColor,{h:90}),this.cScale6=this.cScale6||xn(this.primaryColor,{h:120}),this.cScale7=this.cScale7||xn(this.primaryColor,{h:150}),this.cScale8=this.cScale8||xn(this.primaryColor,{h:210,l:150}),this.cScale9=this.cScale9||xn(this.primaryColor,{h:270}),this.cScale10=this.cScale10||xn(this.primaryColor,{h:300}),this.cScale11=this.cScale11||xn(this.primaryColor,{h:330}),this.darkMode)for(let f=0;f<this.THEME_COLOR_LIMIT;f++)this["cScale"+f]=js(this["cScale"+f],75);else for(let f=0;f<this.THEME_COLOR_LIMIT;f++)this["cScale"+f]=js(this["cScale"+f],25);for(let f=0;f<this.THEME_COLOR_LIMIT;f++)this["cScaleInv"+f]=this["cScaleInv"+f]||Ii(this["cScale"+f]);for(let f=0;f<this.THEME_COLOR_LIMIT;f++)this.darkMode?this["cScalePeer"+f]=this["cScalePeer"+f]||bs(this["cScale"+f],10):this["cScalePeer"+f]=this["cScalePeer"+f]||js(this["cScale"+f],10);this.scaleLabelColor=this.scaleLabelColor||this.labelTextColor;for(let f=0;f<this.THEME_COLOR_LIMIT;f++)this["cScaleLabel"+f]=this["cScaleLabel"+f]||this.scaleLabelColor;const a=this.darkMode?-4:-1;for(let f=0;f<5;f++)this["surface"+f]=this["surface"+f]||xn(this.mainBkg,{h:180,s:-15,l:a*(5+f*3)}),this["surfacePeer"+f]=this["surfacePeer"+f]||xn(this.mainBkg,{h:180,s:-15,l:a*(8+f*3)});this.classText=this.classText||this.textColor,this.fillType0=this.fillType0||this.primaryColor,this.fillType1=this.fillType1||this.secondaryColor,this.fillType2=this.fillType2||xn(this.primaryColor,{h:64}),this.fillType3=this.fillType3||xn(this.secondaryColor,{h:64}),this.fillType4=this.fillType4||xn(this.primaryColor,{h:-64}),this.fillType5=this.fillType5||xn(this.secondaryColor,{h:-64}),this.fillType6=this.fillType6||xn(this.primaryColor,{h:128}),this.fillType7=this.fillType7||xn(this.secondaryColor,{h:128}),this.pie1=this.pie1||this.primaryColor,this.pie2=this.pie2||this.secondaryColor,this.pie3=this.pie3||this.tertiaryColor,this.pie4=this.pie4||xn(this.primaryColor,{l:-10}),this.pie5=this.pie5||xn(this.secondaryColor,{l:-10}),this.pie6=this.pie6||xn(this.tertiaryColor,{l:-10}),this.pie7=this.pie7||xn(this.primaryColor,{h:60,l:-10}),this.pie8=this.pie8||xn(this.primaryColor,{h:-60,l:-10}),this.pie9=this.pie9||xn(this.primaryColor,{h:120,l:0}),this.pie10=this.pie10||xn(this.primaryColor,{h:60,l:-20}),this.pie11=this.pie11||xn(this.primaryColor,{h:-60,l:-20}),this.pie12=this.pie12||xn(this.primaryColor,{h:120,l:-10}),this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOuterStrokeWidth=this.pieOuterStrokeWidth||"2px",this.pieOuterStrokeColor=this.pieOuterStrokeColor||"black",this.pieOpacity=this.pieOpacity||"0.7",this.quadrant1Fill=this.quadrant1Fill||this.primaryColor,this.quadrant2Fill=this.quadrant2Fill||xn(this.primaryColor,{r:5,g:5,b:5}),this.quadrant3Fill=this.quadrant3Fill||xn(this.primaryColor,{r:10,g:10,b:10}),this.quadrant4Fill=this.quadrant4Fill||xn(this.primaryColor,{r:15,g:15,b:15}),this.quadrant1TextFill=this.quadrant1TextFill||this.primaryTextColor,this.quadrant2TextFill=this.quadrant2TextFill||xn(this.primaryTextColor,{r:-5,g:-5,b:-5}),this.quadrant3TextFill=this.quadrant3TextFill||xn(this.primaryTextColor,{r:-10,g:-10,b:-10}),this.quadrant4TextFill=this.quadrant4TextFill||xn(this.primaryTextColor,{r:-15,g:-15,b:-15}),this.quadrantPointFill=this.quadrantPointFill||J7(this.quadrant1Fill)?bs(this.quadrant1Fill):js(this.quadrant1Fill),this.quadrantPointTextFill=this.quadrantPointTextFill||this.primaryTextColor,this.quadrantXAxisTextFill=this.quadrantXAxisTextFill||this.primaryTextColor,this.quadrantYAxisTextFill=this.quadrantYAxisTextFill||this.primaryTextColor,this.quadrantInternalBorderStrokeFill=this.quadrantInternalBorderStrokeFill||this.primaryBorderColor,this.quadrantExternalBorderStrokeFill=this.quadrantExternalBorderStrokeFill||this.primaryBorderColor,this.quadrantTitleFill=this.quadrantTitleFill||this.primaryTextColor,this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||"1",this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||(this.darkMode?js(this.secondaryColor,30):this.secondaryColor),this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=this.git0||this.primaryColor,this.git1=this.git1||this.secondaryColor,this.git2=this.git2||this.tertiaryColor,this.git3=this.git3||xn(this.primaryColor,{h:-30}),this.git4=this.git4||xn(this.primaryColor,{h:-60}),this.git5=this.git5||xn(this.primaryColor,{h:-90}),this.git6=this.git6||xn(this.primaryColor,{h:60}),this.git7=this.git7||xn(this.primaryColor,{h:120}),this.darkMode?(this.git0=bs(this.git0,25),this.git1=bs(this.git1,25),this.git2=bs(this.git2,25),this.git3=bs(this.git3,25),this.git4=bs(this.git4,25),this.git5=bs(this.git5,25),this.git6=bs(this.git6,25),this.git7=bs(this.git7,25)):(this.git0=js(this.git0,25),this.git1=js(this.git1,25),this.git2=js(this.git2,25),this.git3=js(this.git3,25),this.git4=js(this.git4,25),this.git5=js(this.git5,25),this.git6=js(this.git6,25),this.git7=js(this.git7,25)),this.gitInv0=this.gitInv0||Ii(this.git0),this.gitInv1=this.gitInv1||Ii(this.git1),this.gitInv2=this.gitInv2||Ii(this.git2),this.gitInv3=this.gitInv3||Ii(this.git3),this.gitInv4=this.gitInv4||Ii(this.git4),this.gitInv5=this.gitInv5||Ii(this.git5),this.gitInv6=this.gitInv6||Ii(this.git6),this.gitInv7=this.gitInv7||Ii(this.git7),this.branchLabelColor=this.branchLabelColor||(this.darkMode?"black":this.labelTextColor),this.gitBranchLabel0=this.gitBranchLabel0||this.branchLabelColor,this.gitBranchLabel1=this.gitBranchLabel1||this.branchLabelColor,this.gitBranchLabel2=this.gitBranchLabel2||this.branchLabelColor,this.gitBranchLabel3=this.gitBranchLabel3||this.branchLabelColor,this.gitBranchLabel4=this.gitBranchLabel4||this.branchLabelColor,this.gitBranchLabel5=this.gitBranchLabel5||this.branchLabelColor,this.gitBranchLabel6=this.gitBranchLabel6||this.branchLabelColor,this.gitBranchLabel7=this.gitBranchLabel7||this.branchLabelColor,this.tagLabelColor=this.tagLabelColor||this.primaryTextColor,this.tagLabelBackground=this.tagLabelBackground||this.primaryColor,this.tagLabelBorder=this.tagBorder||this.primaryBorderColor,this.tagLabelFontSize=this.tagLabelFontSize||"10px",this.commitLabelColor=this.commitLabelColor||this.secondaryTextColor,this.commitLabelBackground=this.commitLabelBackground||this.secondaryColor,this.commitLabelFontSize=this.commitLabelFontSize||"10px",this.attributeBackgroundColorOdd=this.attributeBackgroundColorOdd||cW,this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||uW}calculate(a){if(typeof a!="object"){this.updateColors();return}const f=Object.keys(a);f.forEach(p=>{this[p]=a[p]}),this.updateColors(),f.forEach(p=>{this[p]=a[p]})}};const GTe=i=>{const a=new HTe;return a.calculate(i),a};let VTe=class{constructor(){this.background="#333",this.primaryColor="#1f2020",this.secondaryColor=bs(this.primaryColor,16),this.tertiaryColor=xn(this.primaryColor,{h:-160}),this.primaryBorderColor=Ii(this.background),this.secondaryBorderColor=ag(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=ag(this.tertiaryColor,this.darkMode),this.primaryTextColor=Ii(this.primaryColor),this.secondaryTextColor=Ii(this.secondaryColor),this.tertiaryTextColor=Ii(this.tertiaryColor),this.lineColor=Ii(this.background),this.textColor=Ii(this.background),this.mainBkg="#1f2020",this.secondBkg="calculated",this.mainContrastColor="lightgrey",this.darkTextColor=bs(Ii("#323D47"),10),this.lineColor="calculated",this.border1="#81B1DB",this.border2=IA(255,255,255,.25),this.arrowheadColor="calculated",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.labelBackground="#181818",this.textColor="#ccc",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="#F9FFFE",this.edgeLabelBackground="calculated",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="calculated",this.actorLineColor="calculated",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="calculated",this.activationBkgColor="calculated",this.sequenceNumberColor="black",this.sectionBkgColor=js("#EAE8D9",30),this.altSectionBkgColor="calculated",this.sectionBkgColor2="#EAE8D9",this.excludeBkgColor=js(this.sectionBkgColor,10),this.taskBorderColor=IA(255,255,255,70),this.taskBkgColor="calculated",this.taskTextColor="calculated",this.taskTextLightColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor=IA(255,255,255,50),this.activeTaskBkgColor="#81B1DB",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="grey",this.critBorderColor="#E83737",this.critBkgColor="#E83737",this.taskTextDarkColor="calculated",this.todayLineColor="#DB5757",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.labelColor="calculated",this.errorBkgColor="#a44141",this.errorTextColor="#ddd"}updateColors(){this.secondBkg=bs(this.mainBkg,16),this.lineColor=this.mainContrastColor,this.arrowheadColor=this.mainContrastColor,this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.edgeLabelBackground=bs(this.labelBackground,25),this.actorBorder=this.border1,this.actorBkg=this.mainBkg,this.actorTextColor=this.mainContrastColor,this.actorLineColor=this.mainContrastColor,this.signalColor=this.mainContrastColor,this.signalTextColor=this.mainContrastColor,this.labelBoxBkgColor=this.actorBkg,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.mainContrastColor,this.loopTextColor=this.mainContrastColor,this.noteBorderColor=this.secondaryBorderColor,this.noteBkgColor=this.secondBkg,this.noteTextColor=this.secondaryTextColor,this.activationBorderColor=this.border1,this.activationBkgColor=this.secondBkg,this.altSectionBkgColor=this.background,this.taskBkgColor=bs(this.mainBkg,23),this.taskTextColor=this.darkTextColor,this.taskTextLightColor=this.mainContrastColor,this.taskTextOutsideColor=this.taskTextLightColor,this.gridColor=this.mainContrastColor,this.doneTaskBkgColor=this.mainContrastColor,this.taskTextDarkColor=this.darkTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#555",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.primaryBorderColor,this.specialStateColor="#f4f4f4",this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=xn(this.primaryColor,{h:64}),this.fillType3=xn(this.secondaryColor,{h:64}),this.fillType4=xn(this.primaryColor,{h:-64}),this.fillType5=xn(this.secondaryColor,{h:-64}),this.fillType6=xn(this.primaryColor,{h:128}),this.fillType7=xn(this.secondaryColor,{h:128}),this.cScale1=this.cScale1||"#0b0000",this.cScale2=this.cScale2||"#4d1037",this.cScale3=this.cScale3||"#3f5258",this.cScale4=this.cScale4||"#4f2f1b",this.cScale5=this.cScale5||"#6e0a0a",this.cScale6=this.cScale6||"#3b0048",this.cScale7=this.cScale7||"#995a01",this.cScale8=this.cScale8||"#154706",this.cScale9=this.cScale9||"#161722",this.cScale10=this.cScale10||"#00296f",this.cScale11=this.cScale11||"#01629c",this.cScale12=this.cScale12||"#010029",this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||xn(this.primaryColor,{h:30}),this.cScale4=this.cScale4||xn(this.primaryColor,{h:60}),this.cScale5=this.cScale5||xn(this.primaryColor,{h:90}),this.cScale6=this.cScale6||xn(this.primaryColor,{h:120}),this.cScale7=this.cScale7||xn(this.primaryColor,{h:150}),this.cScale8=this.cScale8||xn(this.primaryColor,{h:210}),this.cScale9=this.cScale9||xn(this.primaryColor,{h:270}),this.cScale10=this.cScale10||xn(this.primaryColor,{h:300}),this.cScale11=this.cScale11||xn(this.primaryColor,{h:330});for(let a=0;a<this.THEME_COLOR_LIMIT;a++)this["cScaleInv"+a]=this["cScaleInv"+a]||Ii(this["cScale"+a]);for(let a=0;a<this.THEME_COLOR_LIMIT;a++)this["cScalePeer"+a]=this["cScalePeer"+a]||bs(this["cScale"+a],10);for(let a=0;a<5;a++)this["surface"+a]=this["surface"+a]||xn(this.mainBkg,{h:30,s:-30,l:-(-10+a*4)}),this["surfacePeer"+a]=this["surfacePeer"+a]||xn(this.mainBkg,{h:30,s:-30,l:-(-7+a*4)});this.scaleLabelColor=this.scaleLabelColor||(this.darkMode?"black":this.labelTextColor);for(let a=0;a<this.THEME_COLOR_LIMIT;a++)this["cScaleLabel"+a]=this["cScaleLabel"+a]||this.scaleLabelColor;for(let a=0;a<this.THEME_COLOR_LIMIT;a++)this["pie"+a]=this["cScale"+a];this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOuterStrokeWidth=this.pieOuterStrokeWidth||"2px",this.pieOuterStrokeColor=this.pieOuterStrokeColor||"black",this.pieOpacity=this.pieOpacity||"0.7",this.quadrant1Fill=this.quadrant1Fill||this.primaryColor,this.quadrant2Fill=this.quadrant2Fill||xn(this.primaryColor,{r:5,g:5,b:5}),this.quadrant3Fill=this.quadrant3Fill||xn(this.primaryColor,{r:10,g:10,b:10}),this.quadrant4Fill=this.quadrant4Fill||xn(this.primaryColor,{r:15,g:15,b:15}),this.quadrant1TextFill=this.quadrant1TextFill||this.primaryTextColor,this.quadrant2TextFill=this.quadrant2TextFill||xn(this.primaryTextColor,{r:-5,g:-5,b:-5}),this.quadrant3TextFill=this.quadrant3TextFill||xn(this.primaryTextColor,{r:-10,g:-10,b:-10}),this.quadrant4TextFill=this.quadrant4TextFill||xn(this.primaryTextColor,{r:-15,g:-15,b:-15}),this.quadrantPointFill=this.quadrantPointFill||J7(this.quadrant1Fill)?bs(this.quadrant1Fill):js(this.quadrant1Fill),this.quadrantPointTextFill=this.quadrantPointTextFill||this.primaryTextColor,this.quadrantXAxisTextFill=this.quadrantXAxisTextFill||this.primaryTextColor,this.quadrantYAxisTextFill=this.quadrantYAxisTextFill||this.primaryTextColor,this.quadrantInternalBorderStrokeFill=this.quadrantInternalBorderStrokeFill||this.primaryBorderColor,this.quadrantExternalBorderStrokeFill=this.quadrantExternalBorderStrokeFill||this.primaryBorderColor,this.quadrantTitleFill=this.quadrantTitleFill||this.primaryTextColor,this.classText=this.primaryTextColor,this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||"1",this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||(this.darkMode?js(this.secondaryColor,30):this.secondaryColor),this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=bs(this.secondaryColor,20),this.git1=bs(this.pie2||this.secondaryColor,20),this.git2=bs(this.pie3||this.tertiaryColor,20),this.git3=bs(this.pie4||xn(this.primaryColor,{h:-30}),20),this.git4=bs(this.pie5||xn(this.primaryColor,{h:-60}),20),this.git5=bs(this.pie6||xn(this.primaryColor,{h:-90}),10),this.git6=bs(this.pie7||xn(this.primaryColor,{h:60}),10),this.git7=bs(this.pie8||xn(this.primaryColor,{h:120}),20),this.gitInv0=this.gitInv0||Ii(this.git0),this.gitInv1=this.gitInv1||Ii(this.git1),this.gitInv2=this.gitInv2||Ii(this.git2),this.gitInv3=this.gitInv3||Ii(this.git3),this.gitInv4=this.gitInv4||Ii(this.git4),this.gitInv5=this.gitInv5||Ii(this.git5),this.gitInv6=this.gitInv6||Ii(this.git6),this.gitInv7=this.gitInv7||Ii(this.git7),this.gitBranchLabel0=this.gitBranchLabel0||Ii(this.labelTextColor),this.gitBranchLabel1=this.gitBranchLabel1||this.labelTextColor,this.gitBranchLabel2=this.gitBranchLabel2||this.labelTextColor,this.gitBranchLabel3=this.gitBranchLabel3||Ii(this.labelTextColor),this.gitBranchLabel4=this.gitBranchLabel4||this.labelTextColor,this.gitBranchLabel5=this.gitBranchLabel5||this.labelTextColor,this.gitBranchLabel6=this.gitBranchLabel6||this.labelTextColor,this.gitBranchLabel7=this.gitBranchLabel7||this.labelTextColor,this.tagLabelColor=this.tagLabelColor||this.primaryTextColor,this.tagLabelBackground=this.tagLabelBackground||this.primaryColor,this.tagLabelBorder=this.tagBorder||this.primaryBorderColor,this.tagLabelFontSize=this.tagLabelFontSize||"10px",this.commitLabelColor=this.commitLabelColor||this.secondaryTextColor,this.commitLabelBackground=this.commitLabelBackground||this.secondaryColor,this.commitLabelFontSize=this.commitLabelFontSize||"10px",this.attributeBackgroundColorOdd=this.attributeBackgroundColorOdd||bs(this.background,12),this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||bs(this.background,2)}calculate(a){if(typeof a!="object"){this.updateColors();return}const f=Object.keys(a);f.forEach(p=>{this[p]=a[p]}),this.updateColors(),f.forEach(p=>{this[p]=a[p]})}};const UTe=i=>{const a=new VTe;return a.calculate(i),a};let WTe=class{constructor(){this.background="#f4f4f4",this.primaryColor="#ECECFF",this.secondaryColor=xn(this.primaryColor,{h:120}),this.secondaryColor="#ffffde",this.tertiaryColor=xn(this.primaryColor,{h:-160}),this.primaryBorderColor=ag(this.primaryColor,this.darkMode),this.secondaryBorderColor=ag(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=ag(this.tertiaryColor,this.darkMode),this.primaryTextColor=Ii(this.primaryColor),this.secondaryTextColor=Ii(this.secondaryColor),this.tertiaryTextColor=Ii(this.tertiaryColor),this.lineColor=Ii(this.background),this.textColor=Ii(this.background),this.background="white",this.mainBkg="#ECECFF",this.secondBkg="#ffffde",this.lineColor="#333333",this.border1="#9370DB",this.border2="#aaaa33",this.arrowheadColor="#333333",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.labelBackground="#e8e8e8",this.textColor="#333",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="calculated",this.edgeLabelBackground="calculated",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="black",this.actorLineColor="grey",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="calculated",this.altSectionBkgColor="calculated",this.sectionBkgColor2="calculated",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="calculated",this.taskTextLightColor="calculated",this.taskTextColor=this.taskTextLightColor,this.taskTextDarkColor="calculated",this.taskTextOutsideColor=this.taskTextDarkColor,this.taskTextClickableColor="calculated",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="calculated",this.critBorderColor="calculated",this.critBkgColor="calculated",this.todayLineColor="calculated",this.sectionBkgColor=IA(102,102,255,.49),this.altSectionBkgColor="white",this.sectionBkgColor2="#fff400",this.taskBorderColor="#534fbc",this.taskBkgColor="#8a90dd",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="black",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="#534fbc",this.activeTaskBkgColor="#bfc7ff",this.gridColor="lightgrey",this.doneTaskBkgColor="lightgrey",this.doneTaskBorderColor="grey",this.critBorderColor="#ff8888",this.critBkgColor="red",this.todayLineColor="red",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222",this.updateColors()}updateColors(){this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||xn(this.primaryColor,{h:30}),this.cScale4=this.cScale4||xn(this.primaryColor,{h:60}),this.cScale5=this.cScale5||xn(this.primaryColor,{h:90}),this.cScale6=this.cScale6||xn(this.primaryColor,{h:120}),this.cScale7=this.cScale7||xn(this.primaryColor,{h:150}),this.cScale8=this.cScale8||xn(this.primaryColor,{h:210}),this.cScale9=this.cScale9||xn(this.primaryColor,{h:270}),this.cScale10=this.cScale10||xn(this.primaryColor,{h:300}),this.cScale11=this.cScale11||xn(this.primaryColor,{h:330}),this["cScalePeer1"]=this["cScalePeer1"]||js(this.secondaryColor,45),this["cScalePeer2"]=this["cScalePeer2"]||js(this.tertiaryColor,40);for(let a=0;a<this.THEME_COLOR_LIMIT;a++)this["cScale"+a]=js(this["cScale"+a],10),this["cScalePeer"+a]=this["cScalePeer"+a]||js(this["cScale"+a],25);for(let a=0;a<this.THEME_COLOR_LIMIT;a++)this["cScaleInv"+a]=this["cScaleInv"+a]||xn(this["cScale"+a],{h:180});for(let a=0;a<5;a++)this["surface"+a]=this["surface"+a]||xn(this.mainBkg,{h:30,l:-(5+a*5)}),this["surfacePeer"+a]=this["surfacePeer"+a]||xn(this.mainBkg,{h:30,l:-(7+a*5)});if(this.scaleLabelColor=this.scaleLabelColor!=="calculated"&&this.scaleLabelColor?this.scaleLabelColor:this.labelTextColor,this.labelTextColor!=="calculated"){this.cScaleLabel0=this.cScaleLabel0||Ii(this.labelTextColor),this.cScaleLabel3=this.cScaleLabel3||Ii(this.labelTextColor);for(let a=0;a<this.THEME_COLOR_LIMIT;a++)this["cScaleLabel"+a]=this["cScaleLabel"+a]||this.labelTextColor}this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.titleColor=this.textColor,this.edgeLabelBackground=this.labelBackground,this.actorBorder=bs(this.border1,23),this.actorBkg=this.mainBkg,this.labelBoxBkgColor=this.actorBkg,this.signalColor=this.textColor,this.signalTextColor=this.textColor,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.actorTextColor,this.loopTextColor=this.actorTextColor,this.noteBorderColor=this.border2,this.noteTextColor=this.actorTextColor,this.taskTextColor=this.taskTextLightColor,this.taskTextOutsideColor=this.taskTextDarkColor,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#f0f0f0",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.nodeBorder,this.specialStateColor=this.lineColor,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.classText=this.primaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=xn(this.primaryColor,{h:64}),this.fillType3=xn(this.secondaryColor,{h:64}),this.fillType4=xn(this.primaryColor,{h:-64}),this.fillType5=xn(this.secondaryColor,{h:-64}),this.fillType6=xn(this.primaryColor,{h:128}),this.fillType7=xn(this.secondaryColor,{h:128}),this.pie1=this.pie1||this.primaryColor,this.pie2=this.pie2||this.secondaryColor,this.pie3=this.pie3||xn(this.tertiaryColor,{l:-40}),this.pie4=this.pie4||xn(this.primaryColor,{l:-10}),this.pie5=this.pie5||xn(this.secondaryColor,{l:-30}),this.pie6=this.pie6||xn(this.tertiaryColor,{l:-20}),this.pie7=this.pie7||xn(this.primaryColor,{h:60,l:-20}),this.pie8=this.pie8||xn(this.primaryColor,{h:-60,l:-40}),this.pie9=this.pie9||xn(this.primaryColor,{h:120,l:-40}),this.pie10=this.pie10||xn(this.primaryColor,{h:60,l:-40}),this.pie11=this.pie11||xn(this.primaryColor,{h:-90,l:-40}),this.pie12=this.pie12||xn(this.primaryColor,{h:120,l:-30}),this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOuterStrokeWidth=this.pieOuterStrokeWidth||"2px",this.pieOuterStrokeColor=this.pieOuterStrokeColor||"black",this.pieOpacity=this.pieOpacity||"0.7",this.quadrant1Fill=this.quadrant1Fill||this.primaryColor,this.quadrant2Fill=this.quadrant2Fill||xn(this.primaryColor,{r:5,g:5,b:5}),this.quadrant3Fill=this.quadrant3Fill||xn(this.primaryColor,{r:10,g:10,b:10}),this.quadrant4Fill=this.quadrant4Fill||xn(this.primaryColor,{r:15,g:15,b:15}),this.quadrant1TextFill=this.quadrant1TextFill||this.primaryTextColor,this.quadrant2TextFill=this.quadrant2TextFill||xn(this.primaryTextColor,{r:-5,g:-5,b:-5}),this.quadrant3TextFill=this.quadrant3TextFill||xn(this.primaryTextColor,{r:-10,g:-10,b:-10}),this.quadrant4TextFill=this.quadrant4TextFill||xn(this.primaryTextColor,{r:-15,g:-15,b:-15}),this.quadrantPointFill=this.quadrantPointFill||J7(this.quadrant1Fill)?bs(this.quadrant1Fill):js(this.quadrant1Fill),this.quadrantPointTextFill=this.quadrantPointTextFill||this.primaryTextColor,this.quadrantXAxisTextFill=this.quadrantXAxisTextFill||this.primaryTextColor,this.quadrantYAxisTextFill=this.quadrantYAxisTextFill||this.primaryTextColor,this.quadrantInternalBorderStrokeFill=this.quadrantInternalBorderStrokeFill||this.primaryBorderColor,this.quadrantExternalBorderStrokeFill=this.quadrantExternalBorderStrokeFill||this.primaryBorderColor,this.quadrantTitleFill=this.quadrantTitleFill||this.primaryTextColor,this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||"1",this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||this.labelBackground,this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=this.git0||this.primaryColor,this.git1=this.git1||this.secondaryColor,this.git2=this.git2||this.tertiaryColor,this.git3=this.git3||xn(this.primaryColor,{h:-30}),this.git4=this.git4||xn(this.primaryColor,{h:-60}),this.git5=this.git5||xn(this.primaryColor,{h:-90}),this.git6=this.git6||xn(this.primaryColor,{h:60}),this.git7=this.git7||xn(this.primaryColor,{h:120}),this.darkMode?(this.git0=bs(this.git0,25),this.git1=bs(this.git1,25),this.git2=bs(this.git2,25),this.git3=bs(this.git3,25),this.git4=bs(this.git4,25),this.git5=bs(this.git5,25),this.git6=bs(this.git6,25),this.git7=bs(this.git7,25)):(this.git0=js(this.git0,25),this.git1=js(this.git1,25),this.git2=js(this.git2,25),this.git3=js(this.git3,25),this.git4=js(this.git4,25),this.git5=js(this.git5,25),this.git6=js(this.git6,25),this.git7=js(this.git7,25)),this.gitInv0=this.gitInv0||js(Ii(this.git0),25),this.gitInv1=this.gitInv1||Ii(this.git1),this.gitInv2=this.gitInv2||Ii(this.git2),this.gitInv3=this.gitInv3||Ii(this.git3),this.gitInv4=this.gitInv4||Ii(this.git4),this.gitInv5=this.gitInv5||Ii(this.git5),this.gitInv6=this.gitInv6||Ii(this.git6),this.gitInv7=this.gitInv7||Ii(this.git7),this.gitBranchLabel0=this.gitBranchLabel0||Ii(this.labelTextColor),this.gitBranchLabel1=this.gitBranchLabel1||this.labelTextColor,this.gitBranchLabel2=this.gitBranchLabel2||this.labelTextColor,this.gitBranchLabel3=this.gitBranchLabel3||Ii(this.labelTextColor),this.gitBranchLabel4=this.gitBranchLabel4||this.labelTextColor,this.gitBranchLabel5=this.gitBranchLabel5||this.labelTextColor,this.gitBranchLabel6=this.gitBranchLabel6||this.labelTextColor,this.gitBranchLabel7=this.gitBranchLabel7||this.labelTextColor,this.tagLabelColor=this.tagLabelColor||this.primaryTextColor,this.tagLabelBackground=this.tagLabelBackground||this.primaryColor,this.tagLabelBorder=this.tagBorder||this.primaryBorderColor,this.tagLabelFontSize=this.tagLabelFontSize||"10px",this.commitLabelColor=this.commitLabelColor||this.secondaryTextColor,this.commitLabelBackground=this.commitLabelBackground||this.secondaryColor,this.commitLabelFontSize=this.commitLabelFontSize||"10px",this.attributeBackgroundColorOdd=this.attributeBackgroundColorOdd||cW,this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||uW}calculate(a){if(typeof a!="object"){this.updateColors();return}const f=Object.keys(a);f.forEach(p=>{this[p]=a[p]}),this.updateColors(),f.forEach(p=>{this[p]=a[p]})}};const nDt=i=>{const a=new WTe;return a.calculate(i),a};let KTe=class{constructor(){this.background="#f4f4f4",this.primaryColor="#cde498",this.secondaryColor="#cdffb2",this.background="white",this.mainBkg="#cde498",this.secondBkg="#cdffb2",this.lineColor="green",this.border1="#13540c",this.border2="#6eaa49",this.arrowheadColor="green",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.tertiaryColor=bs("#cde498",10),this.primaryBorderColor=ag(this.primaryColor,this.darkMode),this.secondaryBorderColor=ag(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=ag(this.tertiaryColor,this.darkMode),this.primaryTextColor=Ii(this.primaryColor),this.secondaryTextColor=Ii(this.secondaryColor),this.tertiaryTextColor=Ii(this.primaryColor),this.lineColor=Ii(this.background),this.textColor=Ii(this.background),this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="#333",this.edgeLabelBackground="#e8e8e8",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="black",this.actorLineColor="grey",this.signalColor="#333",this.signalTextColor="#333",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="#326932",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="#6eaa49",this.altSectionBkgColor="white",this.sectionBkgColor2="#6eaa49",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="#487e3a",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="black",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="lightgrey",this.doneTaskBkgColor="lightgrey",this.doneTaskBorderColor="grey",this.critBorderColor="#ff8888",this.critBkgColor="red",this.todayLineColor="red",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}updateColors(){this.actorBorder=js(this.mainBkg,20),this.actorBkg=this.mainBkg,this.labelBoxBkgColor=this.actorBkg,this.labelTextColor=this.actorTextColor,this.loopTextColor=this.actorTextColor,this.noteBorderColor=this.border2,this.noteTextColor=this.actorTextColor,this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||xn(this.primaryColor,{h:30}),this.cScale4=this.cScale4||xn(this.primaryColor,{h:60}),this.cScale5=this.cScale5||xn(this.primaryColor,{h:90}),this.cScale6=this.cScale6||xn(this.primaryColor,{h:120}),this.cScale7=this.cScale7||xn(this.primaryColor,{h:150}),this.cScale8=this.cScale8||xn(this.primaryColor,{h:210}),this.cScale9=this.cScale9||xn(this.primaryColor,{h:270}),this.cScale10=this.cScale10||xn(this.primaryColor,{h:300}),this.cScale11=this.cScale11||xn(this.primaryColor,{h:330}),this["cScalePeer1"]=this["cScalePeer1"]||js(this.secondaryColor,45),this["cScalePeer2"]=this["cScalePeer2"]||js(this.tertiaryColor,40);for(let a=0;a<this.THEME_COLOR_LIMIT;a++)this["cScale"+a]=js(this["cScale"+a],10),this["cScalePeer"+a]=this["cScalePeer"+a]||js(this["cScale"+a],25);for(let a=0;a<this.THEME_COLOR_LIMIT;a++)this["cScaleInv"+a]=this["cScaleInv"+a]||xn(this["cScale"+a],{h:180});this.scaleLabelColor=this.scaleLabelColor!=="calculated"&&this.scaleLabelColor?this.scaleLabelColor:this.labelTextColor;for(let a=0;a<this.THEME_COLOR_LIMIT;a++)this["cScaleLabel"+a]=this["cScaleLabel"+a]||this.scaleLabelColor;for(let a=0;a<5;a++)this["surface"+a]=this["surface"+a]||xn(this.mainBkg,{h:30,s:-30,l:-(5+a*5)}),this["surfacePeer"+a]=this["surfacePeer"+a]||xn(this.mainBkg,{h:30,s:-30,l:-(8+a*5)});this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.taskBorderColor=this.border1,this.taskTextColor=this.taskTextLightColor,this.taskTextOutsideColor=this.taskTextDarkColor,this.activeTaskBorderColor=this.taskBorderColor,this.activeTaskBkgColor=this.mainBkg,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#f0f0f0",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.primaryBorderColor,this.specialStateColor=this.lineColor,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.classText=this.primaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=xn(this.primaryColor,{h:64}),this.fillType3=xn(this.secondaryColor,{h:64}),this.fillType4=xn(this.primaryColor,{h:-64}),this.fillType5=xn(this.secondaryColor,{h:-64}),this.fillType6=xn(this.primaryColor,{h:128}),this.fillType7=xn(this.secondaryColor,{h:128}),this.pie1=this.pie1||this.primaryColor,this.pie2=this.pie2||this.secondaryColor,this.pie3=this.pie3||this.tertiaryColor,this.pie4=this.pie4||xn(this.primaryColor,{l:-30}),this.pie5=this.pie5||xn(this.secondaryColor,{l:-30}),this.pie6=this.pie6||xn(this.tertiaryColor,{h:40,l:-40}),this.pie7=this.pie7||xn(this.primaryColor,{h:60,l:-10}),this.pie8=this.pie8||xn(this.primaryColor,{h:-60,l:-10}),this.pie9=this.pie9||xn(this.primaryColor,{h:120,l:0}),this.pie10=this.pie10||xn(this.primaryColor,{h:60,l:-50}),this.pie11=this.pie11||xn(this.primaryColor,{h:-60,l:-50}),this.pie12=this.pie12||xn(this.primaryColor,{h:120,l:-50}),this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOuterStrokeWidth=this.pieOuterStrokeWidth||"2px",this.pieOuterStrokeColor=this.pieOuterStrokeColor||"black",this.pieOpacity=this.pieOpacity||"0.7",this.quadrant1Fill=this.quadrant1Fill||this.primaryColor,this.quadrant2Fill=this.quadrant2Fill||xn(this.primaryColor,{r:5,g:5,b:5}),this.quadrant3Fill=this.quadrant3Fill||xn(this.primaryColor,{r:10,g:10,b:10}),this.quadrant4Fill=this.quadrant4Fill||xn(this.primaryColor,{r:15,g:15,b:15}),this.quadrant1TextFill=this.quadrant1TextFill||this.primaryTextColor,this.quadrant2TextFill=this.quadrant2TextFill||xn(this.primaryTextColor,{r:-5,g:-5,b:-5}),this.quadrant3TextFill=this.quadrant3TextFill||xn(this.primaryTextColor,{r:-10,g:-10,b:-10}),this.quadrant4TextFill=this.quadrant4TextFill||xn(this.primaryTextColor,{r:-15,g:-15,b:-15}),this.quadrantPointFill=this.quadrantPointFill||J7(this.quadrant1Fill)?bs(this.quadrant1Fill):js(this.quadrant1Fill),this.quadrantPointTextFill=this.quadrantPointTextFill||this.primaryTextColor,this.quadrantXAxisTextFill=this.quadrantXAxisTextFill||this.primaryTextColor,this.quadrantYAxisTextFill=this.quadrantYAxisTextFill||this.primaryTextColor,this.quadrantInternalBorderStrokeFill=this.quadrantInternalBorderStrokeFill||this.primaryBorderColor,this.quadrantExternalBorderStrokeFill=this.quadrantExternalBorderStrokeFill||this.primaryBorderColor,this.quadrantTitleFill=this.quadrantTitleFill||this.primaryTextColor,this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||"1",this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||this.edgeLabelBackground,this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=this.git0||this.primaryColor,this.git1=this.git1||this.secondaryColor,this.git2=this.git2||this.tertiaryColor,this.git3=this.git3||xn(this.primaryColor,{h:-30}),this.git4=this.git4||xn(this.primaryColor,{h:-60}),this.git5=this.git5||xn(this.primaryColor,{h:-90}),this.git6=this.git6||xn(this.primaryColor,{h:60}),this.git7=this.git7||xn(this.primaryColor,{h:120}),this.darkMode?(this.git0=bs(this.git0,25),this.git1=bs(this.git1,25),this.git2=bs(this.git2,25),this.git3=bs(this.git3,25),this.git4=bs(this.git4,25),this.git5=bs(this.git5,25),this.git6=bs(this.git6,25),this.git7=bs(this.git7,25)):(this.git0=js(this.git0,25),this.git1=js(this.git1,25),this.git2=js(this.git2,25),this.git3=js(this.git3,25),this.git4=js(this.git4,25),this.git5=js(this.git5,25),this.git6=js(this.git6,25),this.git7=js(this.git7,25)),this.gitInv0=this.gitInv0||Ii(this.git0),this.gitInv1=this.gitInv1||Ii(this.git1),this.gitInv2=this.gitInv2||Ii(this.git2),this.gitInv3=this.gitInv3||Ii(this.git3),this.gitInv4=this.gitInv4||Ii(this.git4),this.gitInv5=this.gitInv5||Ii(this.git5),this.gitInv6=this.gitInv6||Ii(this.git6),this.gitInv7=this.gitInv7||Ii(this.git7),this.gitBranchLabel0=this.gitBranchLabel0||Ii(this.labelTextColor),this.gitBranchLabel1=this.gitBranchLabel1||this.labelTextColor,this.gitBranchLabel2=this.gitBranchLabel2||this.labelTextColor,this.gitBranchLabel3=this.gitBranchLabel3||Ii(this.labelTextColor),this.gitBranchLabel4=this.gitBranchLabel4||this.labelTextColor,this.gitBranchLabel5=this.gitBranchLabel5||this.labelTextColor,this.gitBranchLabel6=this.gitBranchLabel6||this.labelTextColor,this.gitBranchLabel7=this.gitBranchLabel7||this.labelTextColor,this.tagLabelColor=this.tagLabelColor||this.primaryTextColor,this.tagLabelBackground=this.tagLabelBackground||this.primaryColor,this.tagLabelBorder=this.tagBorder||this.primaryBorderColor,this.tagLabelFontSize=this.tagLabelFontSize||"10px",this.commitLabelColor=this.commitLabelColor||this.secondaryTextColor,this.commitLabelBackground=this.commitLabelBackground||this.secondaryColor,this.commitLabelFontSize=this.commitLabelFontSize||"10px",this.attributeBackgroundColorOdd=this.attributeBackgroundColorOdd||cW,this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||uW}calculate(a){if(typeof a!="object"){this.updateColors();return}const f=Object.keys(a);f.forEach(p=>{this[p]=a[p]}),this.updateColors(),f.forEach(p=>{this[p]=a[p]})}};const YTe=i=>{const a=new KTe;return a.calculate(i),a};class XTe{constructor(){this.primaryColor="#eee",this.contrast="#707070",this.secondaryColor=bs(this.contrast,55),this.background="#ffffff",this.tertiaryColor=xn(this.primaryColor,{h:-160}),this.primaryBorderColor=ag(this.primaryColor,this.darkMode),this.secondaryBorderColor=ag(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=ag(this.tertiaryColor,this.darkMode),this.primaryTextColor=Ii(this.primaryColor),this.secondaryTextColor=Ii(this.secondaryColor),this.tertiaryTextColor=Ii(this.tertiaryColor),this.lineColor=Ii(this.background),this.textColor=Ii(this.background),this.mainBkg="#eee",this.secondBkg="calculated",this.lineColor="#666",this.border1="#999",this.border2="calculated",this.note="#ffa",this.text="#333",this.critical="#d42",this.done="#bbb",this.arrowheadColor="#333333",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="calculated",this.edgeLabelBackground="white",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="calculated",this.actorLineColor="calculated",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="calculated",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="calculated",this.altSectionBkgColor="white",this.sectionBkgColor2="calculated",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="calculated",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="calculated",this.critBkgColor="calculated",this.critBorderColor="calculated",this.todayLineColor="calculated",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}updateColors(){this.secondBkg=bs(this.contrast,55),this.border2=this.contrast,this.actorBorder=bs(this.border1,23),this.actorBkg=this.mainBkg,this.actorTextColor=this.text,this.actorLineColor=this.lineColor,this.signalColor=this.text,this.signalTextColor=this.text,this.labelBoxBkgColor=this.actorBkg,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.text,this.loopTextColor=this.text,this.noteBorderColor="#999",this.noteBkgColor="#666",this.noteTextColor="#fff",this.cScale0=this.cScale0||"#555",this.cScale1=this.cScale1||"#F4F4F4",this.cScale2=this.cScale2||"#555",this.cScale3=this.cScale3||"#BBB",this.cScale4=this.cScale4||"#777",this.cScale5=this.cScale5||"#999",this.cScale6=this.cScale6||"#DDD",this.cScale7=this.cScale7||"#FFF",this.cScale8=this.cScale8||"#DDD",this.cScale9=this.cScale9||"#BBB",this.cScale10=this.cScale10||"#999",this.cScale11=this.cScale11||"#777";for(let a=0;a<this.THEME_COLOR_LIMIT;a++)this["cScaleInv"+a]=this["cScaleInv"+a]||Ii(this["cScale"+a]);for(let a=0;a<this.THEME_COLOR_LIMIT;a++)this.darkMode?this["cScalePeer"+a]=this["cScalePeer"+a]||bs(this["cScale"+a],10):this["cScalePeer"+a]=this["cScalePeer"+a]||js(this["cScale"+a],10);this.scaleLabelColor=this.scaleLabelColor||(this.darkMode?"black":this.labelTextColor),this.cScaleLabel0=this.cScaleLabel0||this.cScale1,this.cScaleLabel2=this.cScaleLabel2||this.cScale1;for(let a=0;a<this.THEME_COLOR_LIMIT;a++)this["cScaleLabel"+a]=this["cScaleLabel"+a]||this.scaleLabelColor;for(let a=0;a<5;a++)this["surface"+a]=this["surface"+a]||xn(this.mainBkg,{l:-(5+a*5)}),this["surfacePeer"+a]=this["surfacePeer"+a]||xn(this.mainBkg,{l:-(8+a*5)});this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.titleColor=this.text,this.sectionBkgColor=bs(this.contrast,30),this.sectionBkgColor2=bs(this.contrast,30),this.taskBorderColor=js(this.contrast,10),this.taskBkgColor=this.contrast,this.taskTextColor=this.taskTextLightColor,this.taskTextDarkColor=this.text,this.taskTextOutsideColor=this.taskTextDarkColor,this.activeTaskBorderColor=this.taskBorderColor,this.activeTaskBkgColor=this.mainBkg,this.gridColor=bs(this.border1,30),this.doneTaskBkgColor=this.done,this.doneTaskBorderColor=this.lineColor,this.critBkgColor=this.critical,this.critBorderColor=js(this.critBkgColor,10),this.todayLineColor=this.critBkgColor,this.transitionColor=this.transitionColor||"#000",this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#f4f4f4",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.stateBorder=this.stateBorder||"#000",this.innerEndBackground=this.primaryBorderColor,this.specialStateColor="#222",this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.classText=this.primaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=xn(this.primaryColor,{h:64}),this.fillType3=xn(this.secondaryColor,{h:64}),this.fillType4=xn(this.primaryColor,{h:-64}),this.fillType5=xn(this.secondaryColor,{h:-64}),this.fillType6=xn(this.primaryColor,{h:128}),this.fillType7=xn(this.secondaryColor,{h:128});for(let a=0;a<this.THEME_COLOR_LIMIT;a++)this["pie"+a]=this["cScale"+a];this.pie12=this.pie0,this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOuterStrokeWidth=this.pieOuterStrokeWidth||"2px",this.pieOuterStrokeColor=this.pieOuterStrokeColor||"black",this.pieOpacity=this.pieOpacity||"0.7",this.quadrant1Fill=this.quadrant1Fill||this.primaryColor,this.quadrant2Fill=this.quadrant2Fill||xn(this.primaryColor,{r:5,g:5,b:5}),this.quadrant3Fill=this.quadrant3Fill||xn(this.primaryColor,{r:10,g:10,b:10}),this.quadrant4Fill=this.quadrant4Fill||xn(this.primaryColor,{r:15,g:15,b:15}),this.quadrant1TextFill=this.quadrant1TextFill||this.primaryTextColor,this.quadrant2TextFill=this.quadrant2TextFill||xn(this.primaryTextColor,{r:-5,g:-5,b:-5}),this.quadrant3TextFill=this.quadrant3TextFill||xn(this.primaryTextColor,{r:-10,g:-10,b:-10}),this.quadrant4TextFill=this.quadrant4TextFill||xn(this.primaryTextColor,{r:-15,g:-15,b:-15}),this.quadrantPointFill=this.quadrantPointFill||J7(this.quadrant1Fill)?bs(this.quadrant1Fill):js(this.quadrant1Fill),this.quadrantPointTextFill=this.quadrantPointTextFill||this.primaryTextColor,this.quadrantXAxisTextFill=this.quadrantXAxisTextFill||this.primaryTextColor,this.quadrantYAxisTextFill=this.quadrantYAxisTextFill||this.primaryTextColor,this.quadrantInternalBorderStrokeFill=this.quadrantInternalBorderStrokeFill||this.primaryBorderColor,this.quadrantExternalBorderStrokeFill=this.quadrantExternalBorderStrokeFill||this.primaryBorderColor,this.quadrantTitleFill=this.quadrantTitleFill||this.primaryTextColor,this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||"1",this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||this.edgeLabelBackground,this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=js(this.pie1,25)||this.primaryColor,this.git1=this.pie2||this.secondaryColor,this.git2=this.pie3||this.tertiaryColor,this.git3=this.pie4||xn(this.primaryColor,{h:-30}),this.git4=this.pie5||xn(this.primaryColor,{h:-60}),this.git5=this.pie6||xn(this.primaryColor,{h:-90}),this.git6=this.pie7||xn(this.primaryColor,{h:60}),this.git7=this.pie8||xn(this.primaryColor,{h:120}),this.gitInv0=this.gitInv0||Ii(this.git0),this.gitInv1=this.gitInv1||Ii(this.git1),this.gitInv2=this.gitInv2||Ii(this.git2),this.gitInv3=this.gitInv3||Ii(this.git3),this.gitInv4=this.gitInv4||Ii(this.git4),this.gitInv5=this.gitInv5||Ii(this.git5),this.gitInv6=this.gitInv6||Ii(this.git6),this.gitInv7=this.gitInv7||Ii(this.git7),this.branchLabelColor=this.branchLabelColor||this.labelTextColor,this.gitBranchLabel0=this.branchLabelColor,this.gitBranchLabel1="white",this.gitBranchLabel2=this.branchLabelColor,this.gitBranchLabel3="white",this.gitBranchLabel4=this.branchLabelColor,this.gitBranchLabel5=this.branchLabelColor,this.gitBranchLabel6=this.branchLabelColor,this.gitBranchLabel7=this.branchLabelColor,this.tagLabelColor=this.tagLabelColor||this.primaryTextColor,this.tagLabelBackground=this.tagLabelBackground||this.primaryColor,this.tagLabelBorder=this.tagBorder||this.primaryBorderColor,this.tagLabelFontSize=this.tagLabelFontSize||"10px",this.commitLabelColor=this.commitLabelColor||this.secondaryTextColor,this.commitLabelBackground=this.commitLabelBackground||this.secondaryColor,this.commitLabelFontSize=this.commitLabelFontSize||"10px",this.attributeBackgroundColorOdd=this.attributeBackgroundColorOdd||cW,this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||uW}calculate(a){if(typeof a!="object"){this.updateColors();return}const f=Object.keys(a);f.forEach(p=>{this[p]=a[p]}),this.updateColors(),f.forEach(p=>{this[p]=a[p]})}}const w5={base:{getThemeVariables:GTe},dark:{getThemeVariables:UTe},default:{getThemeVariables:nDt},forest:{getThemeVariables:YTe},neutral:{getThemeVariables:i=>{const a=new XTe;return a.calculate(i),a}}},tk={flowchart:{useMaxWidth:!0,titleTopMargin:25,diagramPadding:8,htmlLabels:!0,nodeSpacing:50,rankSpacing:50,curve:"basis",padding:15,defaultRenderer:"dagre-wrapper",wrappingWidth:200},sequence:{useMaxWidth:!0,hideUnusedParticipants:!1,activationWidth:10,diagramMarginX:50,diagramMarginY:10,actorMargin:50,width:150,height:65,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",mirrorActors:!0,forceMenus:!1,bottomMarginAdj:1,rightAngles:!1,showSequenceNumbers:!1,actorFontSize:14,actorFontFamily:'"Open Sans", sans-serif',actorFontWeight:400,noteFontSize:14,noteFontFamily:'"trebuchet ms", verdana, arial, sans-serif',noteFontWeight:400,noteAlign:"center",messageFontSize:16,messageFontFamily:'"trebuchet ms", verdana, arial, sans-serif',messageFontWeight:400,wrap:!1,wrapPadding:10,labelBoxWidth:50,labelBoxHeight:20},gantt:{useMaxWidth:!0,titleTopMargin:25,barHeight:20,barGap:4,topPadding:50,rightPadding:75,leftPadding:75,gridLineStartPadding:35,fontSize:11,sectionFontSize:11,numberSectionStyles:4,axisFormat:"%Y-%m-%d",topAxis:!1,displayMode:"",weekday:"sunday"},journey:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,leftMargin:150,width:150,height:50,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,rightAngles:!1,taskFontSize:14,taskFontFamily:'"Open Sans", sans-serif',taskMargin:50,activationWidth:10,textPlacement:"fo",actorColours:["#8FBC8F","#7CFC00","#00FFFF","#20B2AA","#B0E0E6","#FFFFE0"],sectionFills:["#191970","#8B008B","#4B0082","#2F4F4F","#800000","#8B4513","#00008B"],sectionColours:["#fff"]},class:{useMaxWidth:!0,titleTopMargin:25,arrowMarkerAbsolute:!1,dividerMargin:10,padding:5,textHeight:10,defaultRenderer:"dagre-wrapper",htmlLabels:!1},state:{useMaxWidth:!0,titleTopMargin:25,dividerMargin:10,sizeUnit:5,padding:8,textHeight:10,titleShift:-15,noteMargin:10,forkWidth:70,forkHeight:7,miniPadding:2,fontSizeFactor:5.02,fontSize:24,labelHeight:16,edgeLengthFactor:"20",compositTitleSize:35,radius:5,defaultRenderer:"dagre-wrapper"},er:{useMaxWidth:!0,titleTopMargin:25,diagramPadding:20,layoutDirection:"TB",minEntityWidth:100,minEntityHeight:75,entityPadding:15,stroke:"gray",fill:"honeydew",fontSize:12},pie:{useMaxWidth:!0,textPosition:.75},quadrantChart:{useMaxWidth:!0,chartWidth:500,chartHeight:500,titleFontSize:20,titlePadding:10,quadrantPadding:5,xAxisLabelPadding:5,yAxisLabelPadding:5,xAxisLabelFontSize:16,yAxisLabelFontSize:16,quadrantLabelFontSize:16,quadrantTextTopPadding:5,pointTextPadding:5,pointLabelFontSize:12,pointRadius:5,xAxisPosition:"top",yAxisPosition:"left",quadrantInternalBorderStrokeWidth:1,quadrantExternalBorderStrokeWidth:2},requirement:{useMaxWidth:!0,rect_fill:"#f9f9f9",text_color:"#333",rect_border_size:"0.5px",rect_border_color:"#bbb",rect_min_width:200,rect_min_height:200,fontSize:14,rect_padding:10,line_height:20},mindmap:{useMaxWidth:!0,padding:10,maxNodeWidth:200},timeline:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,leftMargin:150,width:150,height:50,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,rightAngles:!1,taskFontSize:14,taskFontFamily:'"Open Sans", sans-serif',taskMargin:50,activationWidth:10,textPlacement:"fo",actorColours:["#8FBC8F","#7CFC00","#00FFFF","#20B2AA","#B0E0E6","#FFFFE0"],sectionFills:["#191970","#8B008B","#4B0082","#2F4F4F","#800000","#8B4513","#00008B"],sectionColours:["#fff"],disableMulticolor:!1},gitGraph:{useMaxWidth:!0,titleTopMargin:25,diagramPadding:8,nodeLabel:{width:75,height:100,x:-25,y:0},mainBranchName:"main",mainBranchOrder:0,showCommitLabel:!0,showBranches:!0,rotateCommitLabel:!0,arrowMarkerAbsolute:!1},c4:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,c4ShapeMargin:50,c4ShapePadding:20,width:216,height:60,boxMargin:10,c4ShapeInRow:4,nextLinePaddingX:0,c4BoundaryInRow:2,personFontSize:14,personFontFamily:'"Open Sans", sans-serif',personFontWeight:"normal",external_personFontSize:14,external_personFontFamily:'"Open Sans", sans-serif',external_personFontWeight:"normal",systemFontSize:14,systemFontFamily:'"Open Sans", sans-serif',systemFontWeight:"normal",external_systemFontSize:14,external_systemFontFamily:'"Open Sans", sans-serif',external_systemFontWeight:"normal",system_dbFontSize:14,system_dbFontFamily:'"Open Sans", sans-serif',system_dbFontWeight:"normal",external_system_dbFontSize:14,external_system_dbFontFamily:'"Open Sans", sans-serif',external_system_dbFontWeight:"normal",system_queueFontSize:14,system_queueFontFamily:'"Open Sans", sans-serif',system_queueFontWeight:"normal",external_system_queueFontSize:14,external_system_queueFontFamily:'"Open Sans", sans-serif',external_system_queueFontWeight:"normal",boundaryFontSize:14,boundaryFontFamily:'"Open Sans", sans-serif',boundaryFontWeight:"normal",messageFontSize:12,messageFontFamily:'"Open Sans", sans-serif',messageFontWeight:"normal",containerFontSize:14,containerFontFamily:'"Open Sans", sans-serif',containerFontWeight:"normal",external_containerFontSize:14,external_containerFontFamily:'"Open Sans", sans-serif',external_containerFontWeight:"normal",container_dbFontSize:14,container_dbFontFamily:'"Open Sans", sans-serif',container_dbFontWeight:"normal",external_container_dbFontSize:14,external_container_dbFontFamily:'"Open Sans", sans-serif',external_container_dbFontWeight:"normal",container_queueFontSize:14,container_queueFontFamily:'"Open Sans", sans-serif',container_queueFontWeight:"normal",external_container_queueFontSize:14,external_container_queueFontFamily:'"Open Sans", sans-serif',external_container_queueFontWeight:"normal",componentFontSize:14,componentFontFamily:'"Open Sans", sans-serif',componentFontWeight:"normal",external_componentFontSize:14,external_componentFontFamily:'"Open Sans", sans-serif',external_componentFontWeight:"normal",component_dbFontSize:14,component_dbFontFamily:'"Open Sans", sans-serif',component_dbFontWeight:"normal",external_component_dbFontSize:14,external_component_dbFontFamily:'"Open Sans", sans-serif',external_component_dbFontWeight:"normal",component_queueFontSize:14,component_queueFontFamily:'"Open Sans", sans-serif',component_queueFontWeight:"normal",external_component_queueFontSize:14,external_component_queueFontFamily:'"Open Sans", sans-serif',external_component_queueFontWeight:"normal",wrap:!0,wrapPadding:10,person_bg_color:"#08427B",person_border_color:"#073B6F",external_person_bg_color:"#686868",external_person_border_color:"#8A8A8A",system_bg_color:"#1168BD",system_border_color:"#3C7FC0",system_db_bg_color:"#1168BD",system_db_border_color:"#3C7FC0",system_queue_bg_color:"#1168BD",system_queue_border_color:"#3C7FC0",external_system_bg_color:"#999999",external_system_border_color:"#8A8A8A",external_system_db_bg_color:"#999999",external_system_db_border_color:"#8A8A8A",external_system_queue_bg_color:"#999999",external_system_queue_border_color:"#8A8A8A",container_bg_color:"#438DD5",container_border_color:"#3C7FC0",container_db_bg_color:"#438DD5",container_db_border_color:"#3C7FC0",container_queue_bg_color:"#438DD5",container_queue_border_color:"#3C7FC0",external_container_bg_color:"#B3B3B3",external_container_border_color:"#A6A6A6",external_container_db_bg_color:"#B3B3B3",external_container_db_border_color:"#A6A6A6",external_container_queue_bg_color:"#B3B3B3",external_container_queue_border_color:"#A6A6A6",component_bg_color:"#85BBF0",component_border_color:"#78A8D8",component_db_bg_color:"#85BBF0",component_db_border_color:"#78A8D8",component_queue_bg_color:"#85BBF0",component_queue_border_color:"#78A8D8",external_component_bg_color:"#CCCCCC",external_component_border_color:"#BFBFBF",external_component_db_bg_color:"#CCCCCC",external_component_db_border_color:"#BFBFBF",external_component_queue_bg_color:"#CCCCCC",external_component_queue_border_color:"#BFBFBF"},sankey:{useMaxWidth:!0,width:600,height:400,linkColor:"gradient",nodeAlignment:"justify",showValues:!0,prefix:"",suffix:""},theme:"default",maxTextSize:5e4,darkMode:!1,fontFamily:'"trebuchet ms", verdana, arial, sans-serif;',logLevel:5,securityLevel:"strict",startOnLoad:!0,arrowMarkerAbsolute:!1,secure:["secure","securityLevel","startOnLoad","maxTextSize"],deterministicIds:!1,fontSize:16},rDt={...tk,deterministicIDSeed:void 0,themeCSS:void 0,themeVariables:w5.default.getThemeVariables(),sequence:{...tk.sequence,messageFont:function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}},noteFont:function(){return{fontFamily:this.noteFontFamily,fontSize:this.noteFontSize,fontWeight:this.noteFontWeight}},actorFont:function(){return{fontFamily:this.actorFontFamily,fontSize:this.actorFontSize,fontWeight:this.actorFontWeight}}},gantt:{...tk.gantt,tickInterval:void 0,useWidth:void 0},c4:{...tk.c4,useWidth:void 0,personFont:function(){return{fontFamily:this.personFontFamily,fontSize:this.personFontSize,fontWeight:this.personFontWeight}},external_personFont:function(){return{fontFamily:this.external_personFontFamily,fontSize:this.external_personFontSize,fontWeight:this.external_personFontWeight}},systemFont:function(){return{fontFamily:this.systemFontFamily,fontSize:this.systemFontSize,fontWeight:this.systemFontWeight}},external_systemFont:function(){return{fontFamily:this.external_systemFontFamily,fontSize:this.external_systemFontSize,fontWeight:this.external_systemFontWeight}},system_dbFont:function(){return{fontFamily:this.system_dbFontFamily,fontSize:this.system_dbFontSize,fontWeight:this.system_dbFontWeight}},external_system_dbFont:function(){return{fontFamily:this.external_system_dbFontFamily,fontSize:this.external_system_dbFontSize,fontWeight:this.external_system_dbFontWeight}},system_queueFont:function(){return{fontFamily:this.system_queueFontFamily,fontSize:this.system_queueFontSize,fontWeight:this.system_queueFontWeight}},external_system_queueFont:function(){return{fontFamily:this.external_system_queueFontFamily,fontSize:this.external_system_queueFontSize,fontWeight:this.external_system_queueFontWeight}},containerFont:function(){return{fontFamily:this.containerFontFamily,fontSize:this.containerFontSize,fontWeight:this.containerFontWeight}},external_containerFont:function(){return{fontFamily:this.external_containerFontFamily,fontSize:this.external_containerFontSize,fontWeight:this.external_containerFontWeight}},container_dbFont:function(){return{fontFamily:this.container_dbFontFamily,fontSize:this.container_dbFontSize,fontWeight:this.container_dbFontWeight}},external_container_dbFont:function(){return{fontFamily:this.external_container_dbFontFamily,fontSize:this.external_container_dbFontSize,fontWeight:this.external_container_dbFontWeight}},container_queueFont:function(){return{fontFamily:this.container_queueFontFamily,fontSize:this.container_queueFontSize,fontWeight:this.container_queueFontWeight}},external_container_queueFont:function(){return{fontFamily:this.external_container_queueFontFamily,fontSize:this.external_container_queueFontSize,fontWeight:this.external_container_queueFontWeight}},componentFont:function(){return{fontFamily:this.componentFontFamily,fontSize:this.componentFontSize,fontWeight:this.componentFontWeight}},external_componentFont:function(){return{fontFamily:this.external_componentFontFamily,fontSize:this.external_componentFontSize,fontWeight:this.external_componentFontWeight}},component_dbFont:function(){return{fontFamily:this.component_dbFontFamily,fontSize:this.component_dbFontSize,fontWeight:this.component_dbFontWeight}},external_component_dbFont:function(){return{fontFamily:this.external_component_dbFontFamily,fontSize:this.external_component_dbFontSize,fontWeight:this.external_component_dbFontWeight}},component_queueFont:function(){return{fontFamily:this.component_queueFontFamily,fontSize:this.component_queueFontSize,fontWeight:this.component_queueFontWeight}},external_component_queueFont:function(){return{fontFamily:this.external_component_queueFontFamily,fontSize:this.external_component_queueFontSize,fontWeight:this.external_component_queueFontWeight}},boundaryFont:function(){return{fontFamily:this.boundaryFontFamily,fontSize:this.boundaryFontSize,fontWeight:this.boundaryFontWeight}},messageFont:function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}}},pie:{...tk.pie,useWidth:984},requirement:{...tk.requirement,useWidth:void 0},gitGraph:{...tk.gitGraph,useMaxWidth:!1},sankey:{...tk.sankey,useMaxWidth:!1}},iDt=(i,a="")=>Object.keys(i).reduce((f,p)=>Array.isArray(i[p])?f:typeof i[p]=="object"&&i[p]!==null?[...f,a+p,...iDt(i[p],"")]:[...f,a+p],[]),QTe=new Set(iDt(rDt,"")),Lf=rDt,lW=i=>{if(Ut.debug("sanitizeDirective called with",i),!(typeof i!="object"||i==null)){if(Array.isArray(i)){i.forEach(a=>lW(a));return}for(const a of Object.keys(i)){if(Ut.debug("Checking key",a),a.startsWith("__")||a.includes("proto")||a.includes("constr")||!QTe.has(a)||i[a]==null){Ut.debug("sanitize deleting key: ",a),delete i[a];continue}if(typeof i[a]=="object"){Ut.debug("sanitizing object",a),lW(i[a]);continue}const f=["themeCSS","fontFamily","altFontFamily"];for(const p of f)a.includes(p)&&(Ut.debug("sanitizing css option",a),i[a]=ZTe(i[a]))}if(i.themeVariables)for(const a of Object.keys(i.themeVariables)){const f=i.themeVariables[a];f!=null&&f.match&&!f.match(/^[\d "#%(),.;A-Za-z]+$/)&&(i.themeVariables[a]="")}Ut.debug("After sanitization",i)}},ZTe=i=>{let a=0,f=0;for(const p of i){if(a<f)return"{ /* ERROR: Unbalanced CSS */ }";p==="{"?a++:p==="}"&&f++}return a!==f?"{ /* ERROR: Unbalanced CSS */ }":i},sDt=/^-{3}\s*[\n\r](.*?)[\n\r]-{3}\s*[\n\r]+/s,HN=/%{2}{\s*(?:(\w+)\s*:|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi,JTe=/\s*%%.*\n/gm;class aDt extends Error{constructor(a){super(a),this.name="UnknownDiagramError"}}const DA={},hW=function(i,a){i=i.replace(sDt,"").replace(HN,"").replace(JTe,`
`);for(const[f,{detector:p}]of Object.entries(DA))if(p(i,a))return f;throw new aDt(`No diagram type detected matching given configuration for text: ${i}`)},oDt=(...i)=>{for(const{id:a,detector:f,loader:p}of i)cDt(a,f,p)},cDt=(i,a,f)=>{DA[i]?Ut.error(`Detector with key ${i} already exists`):DA[i]={detector:a,loader:f},Ut.debug(`Detector with key ${i} added${f?" with loader":""}`)},t9e=i=>DA[i].loader,U1t=(i,a,{depth:f=2,clobber:p=!1}={})=>{const v={depth:f,clobber:p};return Array.isArray(a)&&!Array.isArray(i)?(a.forEach(m=>U1t(i,m,v)),i):Array.isArray(a)&&Array.isArray(i)?(a.forEach(m=>{i.includes(m)||i.push(m)}),i):i===void 0||f<=0?i!=null&&typeof i=="object"&&typeof a=="object"?Object.assign(i,a):a:(a!==void 0&&typeof i=="object"&&typeof a=="object"&&Object.keys(a).forEach(m=>{typeof a[m]=="object"&&(i[m]===void 0||typeof i[m]=="object")?(i[m]===void 0&&(i[m]=Array.isArray(a[m])?[]:{}),i[m]=U1t(i[m],a[m],{depth:f-1,clobber:p})):(p||typeof i[m]!="object"&&typeof a[m]!="object")&&(i[m]=a[m])}),i)},Y1=U1t;var e9e=typeof global=="object"&&global&&global.Object===Object&&global;const uDt=e9e;var n9e=typeof self=="object"&&self&&self.Object===Object&&self,r9e=uDt||n9e||Function("return this")();const Jw=r9e;var i9e=Jw.Symbol;const Y2=i9e;var lDt=Object.prototype,s9e=lDt.hasOwnProperty,a9e=lDt.toString,GN=Y2?Y2.toStringTag:void 0;function o9e(i){var a=s9e.call(i,GN),f=i[GN];try{i[GN]=void 0;var p=!0}catch{}var v=a9e.call(i);return p&&(a?i[GN]=f:delete i[GN]),v}var c9e=Object.prototype,u9e=c9e.toString;function l9e(i){return u9e.call(i)}var h9e="[object Null]",f9e="[object Undefined]",hDt=Y2?Y2.toStringTag:void 0;function tT(i){return i==null?i===void 0?f9e:h9e:hDt&&hDt in Object(i)?o9e(i):l9e(i)}function Ib(i){var a=typeof i;return i!=null&&(a=="object"||a=="function")}var d9e="[object AsyncFunction]",g9e="[object Function]",p9e="[object GeneratorFunction]",b9e="[object Proxy]";function OA(i){if(!Ib(i))return!1;var a=tT(i);return a==g9e||a==p9e||a==d9e||a==b9e}var v9e=Jw["__core-js_shared__"];const W1t=v9e;var fDt=function(){var i=/[^.]+$/.exec(W1t&&W1t.keys&&W1t.keys.IE_PROTO||"");return i?"Symbol(src)_1."+i:""}();function w9e(i){return!!fDt&&fDt in i}var m9e=Function.prototype,y9e=m9e.toString;function eT(i){if(i!=null){try{return y9e.call(i)}catch{}try{return i+""}catch{}}return""}var x9e=/[\\^$.*+?()[\]{}|]/g,k9e=/^\[object .+?Constructor\]$/,E9e=Function.prototype,T9e=Object.prototype,C9e=E9e.toString,_9e=T9e.hasOwnProperty,S9e=RegExp("^"+C9e.call(_9e).replace(x9e,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function A9e(i){if(!Ib(i)||w9e(i))return!1;var a=OA(i)?S9e:k9e;return a.test(eT(i))}function L9e(i,a){return i==null?void 0:i[a]}function nT(i,a){var f=L9e(i,a);return A9e(f)?f:void 0}var M9e=nT(Object,"create");const VN=M9e;function I9e(){this.__data__=VN?VN(null):{},this.size=0}function D9e(i){var a=this.has(i)&&delete this.__data__[i];return this.size-=a?1:0,a}var O9e="__lodash_hash_undefined__",N9e=Object.prototype,P9e=N9e.hasOwnProperty;function F9e(i){var a=this.__data__;if(VN){var f=a[i];return f===O9e?void 0:f}return P9e.call(a,i)?a[i]:void 0}var B9e=Object.prototype,R9e=B9e.hasOwnProperty;function j9e(i){var a=this.__data__;return VN?a[i]!==void 0:R9e.call(a,i)}var $9e="__lodash_hash_undefined__";function z9e(i,a){var f=this.__data__;return this.size+=this.has(i)?0:1,f[i]=VN&&a===void 0?$9e:a,this}function rT(i){var a=-1,f=i==null?0:i.length;for(this.clear();++a<f;){var p=i[a];this.set(p[0],p[1])}}rT.prototype.clear=I9e,rT.prototype.delete=D9e,rT.prototype.get=F9e,rT.prototype.has=j9e,rT.prototype.set=z9e;function q9e(){this.__data__=[],this.size=0}function NA(i,a){return i===a||i!==i&&a!==a}function fW(i,a){for(var f=i.length;f--;)if(NA(i[f][0],a))return f;return-1}var H9e=Array.prototype,G9e=H9e.splice;function V9e(i){var a=this.__data__,f=fW(a,i);if(f<0)return!1;var p=a.length-1;return f==p?a.pop():G9e.call(a,f,1),--this.size,!0}function U9e(i){var a=this.__data__,f=fW(a,i);return f<0?void 0:a[f][1]}function W9e(i){return fW(this.__data__,i)>-1}function K9e(i,a){var f=this.__data__,p=fW(f,i);return p<0?(++this.size,f.push([i,a])):f[p][1]=a,this}function m5(i){var a=-1,f=i==null?0:i.length;for(this.clear();++a<f;){var p=i[a];this.set(p[0],p[1])}}m5.prototype.clear=q9e,m5.prototype.delete=V9e,m5.prototype.get=U9e,m5.prototype.has=W9e,m5.prototype.set=K9e;var Y9e=nT(Jw,"Map");const UN=Y9e;function X9e(){this.size=0,this.__data__={hash:new rT,map:new(UN||m5),string:new rT}}function Q9e(i){var a=typeof i;return a=="string"||a=="number"||a=="symbol"||a=="boolean"?i!=="__proto__":i===null}function dW(i,a){var f=i.__data__;return Q9e(a)?f[typeof a=="string"?"string":"hash"]:f.map}function Z9e(i){var a=dW(this,i).delete(i);return this.size-=a?1:0,a}function J9e(i){return dW(this,i).get(i)}function tCe(i){return dW(this,i).has(i)}function eCe(i,a){var f=dW(this,i),p=f.size;return f.set(i,a),this.size+=f.size==p?0:1,this}function y5(i){var a=-1,f=i==null?0:i.length;for(this.clear();++a<f;){var p=i[a];this.set(p[0],p[1])}}y5.prototype.clear=X9e,y5.prototype.delete=Z9e,y5.prototype.get=J9e,y5.prototype.has=tCe,y5.prototype.set=eCe;var nCe="Expected a function";function PA(i,a){if(typeof i!="function"||a!=null&&typeof a!="function")throw new TypeError(nCe);var f=function(){var p=arguments,v=a?a.apply(this,p):p[0],m=f.cache;if(m.has(v))return m.get(v);var b=i.apply(this,p);return f.cache=m.set(v,b)||m,b};return f.cache=new(PA.Cache||y5),f}PA.Cache=y5;function rCe(){this.__data__=new m5,this.size=0}function iCe(i){var a=this.__data__,f=a.delete(i);return this.size=a.size,f}function sCe(i){return this.__data__.get(i)}function aCe(i){return this.__data__.has(i)}var oCe=200;function cCe(i,a){var f=this.__data__;if(f instanceof m5){var p=f.__data__;if(!UN||p.length<oCe-1)return p.push([i,a]),this.size=++f.size,this;f=this.__data__=new y5(p)}return f.set(i,a),this.size=f.size,this}function tm(i){var a=this.__data__=new m5(i);this.size=a.size}tm.prototype.clear=rCe,tm.prototype.delete=iCe,tm.prototype.get=sCe,tm.prototype.has=aCe,tm.prototype.set=cCe;var uCe=function(){try{var i=nT(Object,"defineProperty");return i({},"",{}),i}catch{}}();const gW=uCe;function pW(i,a,f){a=="__proto__"&&gW?gW(i,a,{configurable:!0,enumerable:!0,value:f,writable:!0}):i[a]=f}function K1t(i,a,f){(f!==void 0&&!NA(i[a],f)||f===void 0&&!(a in i))&&pW(i,a,f)}function lCe(i){return function(a,f,p){for(var v=-1,m=Object(a),b=p(a),E=b.length;E--;){var _=b[i?E:++v];if(f(m[_],_,m)===!1)break}return a}}var hCe=lCe();const Y1t=hCe;var dDt=typeof exports=="object"&&exports&&!exports.nodeType&&exports,gDt=dDt&&typeof module=="object"&&module&&!module.nodeType&&module,fCe=gDt&&gDt.exports===dDt,pDt=fCe?Jw.Buffer:void 0,bDt=pDt?pDt.allocUnsafe:void 0;function vDt(i,a){if(a)return i.slice();var f=i.length,p=bDt?bDt(f):new i.constructor(f);return i.copy(p),p}var dCe=Jw.Uint8Array;const bW=dCe;function X1t(i){var a=new i.constructor(i.byteLength);return new bW(a).set(new bW(i)),a}function wDt(i,a){var f=a?X1t(i.buffer):i.buffer;return new i.constructor(f,i.byteOffset,i.length)}function mDt(i,a){var f=-1,p=i.length;for(a||(a=Array(p));++f<p;)a[f]=i[f];return a}var yDt=Object.create,gCe=function(){function i(){}return function(a){if(!Ib(a))return{};if(yDt)return yDt(a);i.prototype=a;var f=new i;return i.prototype=void 0,f}}();const pCe=gCe;function xDt(i,a){return function(f){return i(a(f))}}var bCe=xDt(Object.getPrototypeOf,Object);const Q1t=bCe;var vCe=Object.prototype;function vW(i){var a=i&&i.constructor,f=typeof a=="function"&&a.prototype||vCe;return i===f}function kDt(i){return typeof i.constructor=="function"&&!vW(i)?pCe(Q1t(i)):{}}function l3(i){return i!=null&&typeof i=="object"}var wCe="[object Arguments]";function EDt(i){return l3(i)&&tT(i)==wCe}var TDt=Object.prototype,mCe=TDt.hasOwnProperty,yCe=TDt.propertyIsEnumerable,xCe=EDt(function(){return arguments}())?EDt:function(i){return l3(i)&&mCe.call(i,"callee")&&!yCe.call(i,"callee")};const FA=xCe;var kCe=Array.isArray;const Mf=kCe;var ECe=9007199254740991;function Z1t(i){return typeof i=="number"&&i>-1&&i%1==0&&i<=ECe}function ek(i){return i!=null&&Z1t(i.length)&&!OA(i)}function CDt(i){return l3(i)&&ek(i)}function TCe(){return!1}var _Dt=typeof exports=="object"&&exports&&!exports.nodeType&&exports,SDt=_Dt&&typeof module=="object"&&module&&!module.nodeType&&module,CCe=SDt&&SDt.exports===_Dt,ADt=CCe?Jw.Buffer:void 0,_Ce=ADt?ADt.isBuffer:void 0,SCe=_Ce||TCe;const BA=SCe;var ACe="[object Object]",LCe=Function.prototype,MCe=Object.prototype,LDt=LCe.toString,ICe=MCe.hasOwnProperty,DCe=LDt.call(Object);function MDt(i){if(!l3(i)||tT(i)!=ACe)return!1;var a=Q1t(i);if(a===null)return!0;var f=ICe.call(a,"constructor")&&a.constructor;return typeof f=="function"&&f instanceof f&&LDt.call(f)==DCe}var OCe="[object Arguments]",NCe="[object Array]",PCe="[object Boolean]",FCe="[object Date]",BCe="[object Error]",RCe="[object Function]",jCe="[object Map]",$Ce="[object Number]",zCe="[object Object]",qCe="[object RegExp]",HCe="[object Set]",GCe="[object String]",VCe="[object WeakMap]",UCe="[object ArrayBuffer]",WCe="[object DataView]",KCe="[object Float32Array]",YCe="[object Float64Array]",XCe="[object Int8Array]",QCe="[object Int16Array]",ZCe="[object Int32Array]",JCe="[object Uint8Array]",t_e="[object Uint8ClampedArray]",e_e="[object Uint16Array]",n_e="[object Uint32Array]",gl={};gl[KCe]=gl[YCe]=gl[XCe]=gl[QCe]=gl[ZCe]=gl[JCe]=gl[t_e]=gl[e_e]=gl[n_e]=!0,gl[OCe]=gl[NCe]=gl[UCe]=gl[PCe]=gl[WCe]=gl[FCe]=gl[BCe]=gl[RCe]=gl[jCe]=gl[$Ce]=gl[zCe]=gl[qCe]=gl[HCe]=gl[GCe]=gl[VCe]=!1;function r_e(i){return l3(i)&&Z1t(i.length)&&!!gl[tT(i)]}function wW(i){return function(a){return i(a)}}var IDt=typeof exports=="object"&&exports&&!exports.nodeType&&exports,WN=IDt&&typeof module=="object"&&module&&!module.nodeType&&module,i_e=WN&&WN.exports===IDt,J1t=i_e&&uDt.process,s_e=function(){try{var i=WN&&WN.require&&WN.require("util").types;return i||J1t&&J1t.binding&&J1t.binding("util")}catch{}}();const RA=s_e;var DDt=RA&&RA.isTypedArray,a_e=DDt?wW(DDt):r_e;const mW=a_e;function tdt(i,a){if(!(a==="constructor"&&typeof i[a]=="function")&&a!="__proto__")return i[a]}var o_e=Object.prototype,c_e=o_e.hasOwnProperty;function yW(i,a,f){var p=i[a];(!(c_e.call(i,a)&&NA(p,f))||f===void 0&&!(a in i))&&pW(i,a,f)}function KN(i,a,f,p){var v=!f;f||(f={});for(var m=-1,b=a.length;++m<b;){var E=a[m],_=p?p(f[E],i[E],E,f,i):void 0;_===void 0&&(_=i[E]),v?pW(f,E,_):yW(f,E,_)}return f}function u_e(i,a){for(var f=-1,p=Array(i);++f<i;)p[f]=a(f);return p}var l_e=9007199254740991,h_e=/^(?:0|[1-9]\d*)$/;function xW(i,a){var f=typeof i;return a=a??l_e,!!a&&(f=="number"||f!="symbol"&&h_e.test(i))&&i>-1&&i%1==0&&i<a}var f_e=Object.prototype,d_e=f_e.hasOwnProperty;function ODt(i,a){var f=Mf(i),p=!f&&FA(i),v=!f&&!p&&BA(i),m=!f&&!p&&!v&&mW(i),b=f||p||v||m,E=b?u_e(i.length,String):[],_=E.length;for(var L in i)(a||d_e.call(i,L))&&!(b&&(L=="length"||v&&(L=="offset"||L=="parent")||m&&(L=="buffer"||L=="byteLength"||L=="byteOffset")||xW(L,_)))&&E.push(L);return E}function g_e(i){var a=[];if(i!=null)for(var f in Object(i))a.push(f);return a}var p_e=Object.prototype,b_e=p_e.hasOwnProperty;function v_e(i){if(!Ib(i))return g_e(i);var a=vW(i),f=[];for(var p in i)p=="constructor"&&(a||!b_e.call(i,p))||f.push(p);return f}function iT(i){return ek(i)?ODt(i,!0):v_e(i)}function w_e(i){return KN(i,iT(i))}function m_e(i,a,f,p,v,m,b){var E=tdt(i,f),_=tdt(a,f),L=b.get(_);if(L){K1t(i,f,L);return}var N=m?m(E,_,f+"",i,a,b):void 0,B=N===void 0;if(B){var j=Mf(_),R=!j&&BA(_),z=!j&&!R&&mW(_);N=_,j||R||z?Mf(E)?N=E:CDt(E)?N=mDt(E):R?(B=!1,N=vDt(_,!0)):z?(B=!1,N=wDt(_,!0)):N=[]:MDt(_)||FA(_)?(N=E,FA(E)?N=w_e(E):(!Ib(E)||OA(E))&&(N=kDt(_))):B=!1}B&&(b.set(_,N),v(N,_,p,m,b),b.delete(_)),K1t(i,f,N)}function NDt(i,a,f,p,v){i!==a&&Y1t(a,function(m,b){if(v||(v=new tm),Ib(m))m_e(i,a,b,f,NDt,p,v);else{var E=p?p(tdt(i,b),m,b+"",i,a,v):void 0;E===void 0&&(E=m),K1t(i,b,E)}},iT)}function sT(i){return i}function y_e(i,a,f){switch(f.length){case 0:return i.call(a);case 1:return i.call(a,f[0]);case 2:return i.call(a,f[0],f[1]);case 3:return i.call(a,f[0],f[1],f[2])}return i.apply(a,f)}var PDt=Math.max;function FDt(i,a,f){return a=PDt(a===void 0?i.length-1:a,0),function(){for(var p=arguments,v=-1,m=PDt(p.length-a,0),b=Array(m);++v<m;)b[v]=p[a+v];v=-1;for(var E=Array(a+1);++v<a;)E[v]=p[v];return E[a]=f(b),y_e(i,this,E)}}function jA(i){return function(){return i}}var x_e=gW?function(i,a){return gW(i,"toString",{configurable:!0,enumerable:!1,value:jA(a),writable:!0})}:sT;const k_e=x_e;var E_e=800,T_e=16,C_e=Date.now;function __e(i){var a=0,f=0;return function(){var p=C_e(),v=T_e-(p-f);if(f=p,v>0){if(++a>=E_e)return arguments[0]}else a=0;return i.apply(void 0,arguments)}}var S_e=__e(k_e);const BDt=S_e;function kW(i,a){return BDt(FDt(i,a,sT),i+"")}function YN(i,a,f){if(!Ib(f))return!1;var p=typeof a;return(p=="number"?ek(f)&&xW(a,f.length):p=="string"&&a in f)?NA(f[a],i):!1}function A_e(i){return kW(function(a,f){var p=-1,v=f.length,m=v>1?f[v-1]:void 0,b=v>2?f[2]:void 0;for(m=i.length>3&&typeof m=="function"?(v--,m):void 0,b&&YN(f[0],f[1],b)&&(m=v<3?void 0:m,v=1),a=Object(a);++p<v;){var E=f[p];E&&i(a,E,p,m)}return a})}var L_e=A_e(function(i,a,f){NDt(i,a,f)});const EW=L_e,RDt="​",M_e={curveBasis:FN,curveBasisClosed:H7e,curveBasisOpen:G7e,curveBumpX:z7e,curveBumpY:q7e,curveBundle:V7e,curveCardinalClosed:W7e,curveCardinalOpen:K7e,curveCardinal:U7e,curveCatmullRomClosed:X7e,curveCatmullRomOpen:Q7e,curveCatmullRom:Y7e,curveLinear:ig,curveLinearClosed:Z7e,curveMonotoneX:J7e,curveMonotoneY:tTe,curveNatural:eTe,curveStep:nTe,curveStepAfter:iTe,curveStepBefore:rTe},I_e=/\s*(?:(\w+)(?=:):|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi,D_e=function(i,a){const f=jDt(i,/(?:init\b)|(?:initialize\b)/);let p={};if(Array.isArray(f)){const b=f.map(E=>E.args);lW(b),p=Y1(p,[...b])}else p=f.args;if(!p)return;let v=hW(i,a);const m="config";return p[m]!==void 0&&(v==="flowchart-v2"&&(v="flowchart"),p[v]=p[m],delete p[m]),p},jDt=function(i,a=null){try{const f=new RegExp(`[%]{2}(?![{]${I_e.source})(?=[}][%]{2}).*
`,"ig");i=i.trim().replace(f,"").replace(/'/gm,'"'),Ut.debug(`Detecting diagram directive${a!==null?" type:"+a:""} based on the text:${i}`);let p;const v=[];for(;(p=HN.exec(i))!==null;)if(p.index===HN.lastIndex&&HN.lastIndex++,p&&!a||a&&p[1]&&p[1].match(a)||a&&p[2]&&p[2].match(a)){const m=p[1]?p[1]:p[2],b=p[3]?p[3].trim():p[4]?JSON.parse(p[4].trim()):null;v.push({type:m,args:b})}return v.length===0?{type:i,args:null}:v.length===1?v[0]:v}catch(f){return Ut.error(`ERROR: ${f.message} - Unable to parse directive type: '${a}' based on the text: '${i}'`),{type:void 0,args:null}}},O_e=function(i){return i.replace(HN,"")},N_e=function(i,a){for(const[f,p]of a.entries())if(p.match(i))return f;return-1};function X2(i,a){if(!i)return a;const f=`curve${i.charAt(0).toUpperCase()+i.slice(1)}`;return M_e[f]??a}function P_e(i,a){const f=i.trim();if(f)return a.securityLevel!=="loose"?Q6(f):f}const F_e=(i,...a)=>{const f=i.split("."),p=f.length-1,v=f[p];let m=window;for(let b=0;b<p;b++)if(m=m[f[b]],!m){Ut.error(`Function name: ${i} not found in window`);return}m[v](...a)};function $Dt(i,a){return!i||!a?0:Math.sqrt(Math.pow(a.x-i.x,2)+Math.pow(a.y-i.y,2))}function B_e(i){let a,f=0;i.forEach(v=>{f+=$Dt(v,a),a=v});const p=f/2;return edt(i,p)}function R_e(i){return i.length===1?i[0]:B_e(i)}const zDt=(i,a=2)=>{const f=Math.pow(10,a);return Math.round(i*f)/f},edt=(i,a)=>{let f,p=a;for(const v of i){if(f){const m=$Dt(v,f);if(m<p)p-=m;else{const b=p/m;if(b<=0)return f;if(b>=1)return{x:v.x,y:v.y};if(b>0&&b<1)return{x:zDt((1-b)*f.x+b*v.x,5),y:zDt((1-b)*f.y+b*v.y,5)}}}f=v}throw new Error("Could not find a suitable point for the given distance")},j_e=(i,a,f)=>{Ut.info(`our points ${JSON.stringify(a)}`),a[0]!==f&&(a=a.reverse());const v=edt(a,25),m=i?10:5,b=Math.atan2(a[0].y-v.y,a[0].x-v.x),E={x:0,y:0};return E.x=Math.sin(b)*m+(a[0].x+v.x)/2,E.y=-Math.cos(b)*m+(a[0].y+v.y)/2,E};function $_e(i,a,f){const p=structuredClone(f);Ut.info("our points",p),a!=="start_left"&&a!=="start_right"&&p.reverse();const v=25+i,m=edt(p,v),b=10+i*.5,E=Math.atan2(p[0].y-m.y,p[0].x-m.x),_={x:0,y:0};return a==="start_left"?(_.x=Math.sin(E+Math.PI)*b+(p[0].x+m.x)/2,_.y=-Math.cos(E+Math.PI)*b+(p[0].y+m.y)/2):a==="end_right"?(_.x=Math.sin(E-Math.PI)*b+(p[0].x+m.x)/2-5,_.y=-Math.cos(E-Math.PI)*b+(p[0].y+m.y)/2-5):a==="end_left"?(_.x=Math.sin(E)*b+(p[0].x+m.x)/2-5,_.y=-Math.cos(E)*b+(p[0].y+m.y)/2-5):(_.x=Math.sin(E)*b+(p[0].x+m.x)/2,_.y=-Math.cos(E)*b+(p[0].y+m.y)/2),_}function em(i){let a="",f="";for(const p of i)p!==void 0&&(p.startsWith("color:")||p.startsWith("text-align:")?f=f+p+";":a=a+p+";");return{style:a,labelStyle:f}}let qDt=0;const HDt=()=>(qDt++,"id-"+Math.random().toString(36).substr(2,12)+"-"+qDt);function z_e(i){let a="";const f="0123456789abcdef",p=f.length;for(let v=0;v<i;v++)a+=f.charAt(Math.floor(Math.random()*p));return a}const GDt=i=>z_e(i.length),q_e=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:""}},H_e=function(i,a){const f=a.text.replace(Yr.lineBreakRegex," "),[,p]=$A(a.fontSize),v=i.append("text");v.attr("x",a.x),v.attr("y",a.y),v.style("text-anchor",a.anchor),v.style("font-family",a.fontFamily),v.style("font-size",p),v.style("font-weight",a.fontWeight),v.attr("fill",a.fill),a.class!==void 0&&v.attr("class",a.class);const m=v.append("tspan");return m.attr("x",a.x+a.textMargin*2),m.attr("fill",a.fill),m.text(f),v},VDt=PA((i,a,f)=>{if(!i||(f=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",joinWith:"<br/>"},f),Yr.lineBreakRegex.test(i)))return i;const p=i.split(" "),v=[];let m="";return p.forEach((b,E)=>{const _=h3(`${b} `,f),L=h3(m,f);if(_>a){const{hyphenatedStrings:j,remainingWord:R}=G_e(b,a,"-",f);v.push(m,...j),m=R}else L+_>=a?(v.push(m),m=b):m=[m,b].filter(Boolean).join(" ");E+1===p.length&&v.push(m)}),v.filter(b=>b!=="").join(f.joinWith)},(i,a,f)=>`${i}${a}${f.fontSize}${f.fontWeight}${f.fontFamily}${f.joinWith}`),G_e=PA((i,a,f="-",p)=>{p=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",margin:0},p);const v=[...i],m=[];let b="";return v.forEach((E,_)=>{const L=`${b}${E}`;if(h3(L,p)>=a){const B=_+1,j=v.length===B,R=`${L}${f}`;m.push(j?L:R),b=""}else b=L}),{hyphenatedStrings:m,remainingWord:b}},(i,a,f="-",p)=>`${i}${a}${f}${p.fontSize}${p.fontWeight}${p.fontFamily}`);function ndt(i,a){return rdt(i,a).height}function h3(i,a){return rdt(i,a).width}const rdt=PA((i,a)=>{const{fontSize:f=12,fontFamily:p="Arial",fontWeight:v=400}=a;if(!i)return{width:0,height:0};const[,m]=$A(f),b=["sans-serif",p],E=i.split(Yr.lineBreakRegex),_=[],L=yr("body");if(!L.remove)return{width:0,height:0,lineHeight:0};const N=L.append("svg");for(const j of b){let R=0;const z={width:0,height:0,lineHeight:0};for(const K of E){const it=q_e();it.text=K||RDt;const st=H_e(N,it).style("font-size",m).style("font-weight",v).style("font-family",j),ut=(st._groups||st)[0][0].getBBox();if(ut.width===0&&ut.height===0)throw new Error("svg element not in render tree");z.width=Math.round(Math.max(z.width,ut.width)),R=Math.round(ut.height),z.height+=R,z.lineHeight=Math.round(Math.max(z.lineHeight,R))}_.push(z)}N.remove();const B=isNaN(_[1].height)||isNaN(_[1].width)||isNaN(_[1].lineHeight)||_[0].height>_[1].height&&_[0].width>_[1].width&&_[0].lineHeight>_[1].lineHeight?0:1;return _[B]},(i,a)=>`${i}${a.fontSize}${a.fontWeight}${a.fontFamily}`);class V_e{constructor(a=!1,f){this.count=0,this.count=f?f.length:0,this.next=a?()=>this.count++:()=>Date.now()}}let TW;const U_e=function(i){return TW=TW||document.createElement("div"),i=escape(i).replace(/%26/g,"&").replace(/%23/g,"#").replace(/%3B/g,";"),TW.innerHTML=i,unescape(TW.textContent)};function UDt(i){return"str"in i}const W_e=(i,a,f,p)=>{var m;if(!p)return;const v=(m=i.node())==null?void 0:m.getBBox();v&&i.append("text").text(p).attr("x",v.x+v.width/2).attr("y",-f).attr("class",a)},$A=i=>{if(typeof i=="number")return[i,i+"px"];const a=parseInt(i??"",10);return Number.isNaN(a)?[void 0,void 0]:i===String(a)?[a,i+"px"]:[a,i]};function idt(i,a){return EW({},i,a)}const $a={assignWithDepth:Y1,wrapLabel:VDt,calculateTextHeight:ndt,calculateTextWidth:h3,calculateTextDimensions:rdt,cleanAndMerge:idt,detectInit:D_e,detectDirective:jDt,isSubstringInArray:N_e,interpolateToCurve:X2,calcLabelPosition:R_e,calcCardinalityPosition:j_e,calcTerminalLabelPosition:$_e,formatUrl:P_e,getStylesFromArray:em,generateId:HDt,random:GDt,runFunc:F_e,entityDecode:U_e,insertTitle:W_e,parseFontSize:$A,InitIDGenerator:V_e};var WDt="comm",KDt="rule",YDt="decl",K_e="@import",Y_e="@keyframes",X_e=Math.abs,sdt=String.fromCharCode;function XDt(i){return i.trim()}function adt(i,a,f){return i.replace(a,f)}function Q_e(i,a){return i.indexOf(a)}function XN(i,a){return i.charCodeAt(a)|0}function QN(i,a,f){return i.slice(a,f)}function nk(i){return i.length}function QDt(i){return i.length}function CW(i,a){return a.push(i),i}var _W=1,zA=1,ZDt=0,Q2=0,If=0,qA="";function odt(i,a,f,p,v,m,b){return{value:i,root:a,parent:f,type:p,props:v,children:m,line:_W,column:zA,length:b,return:""}}function Z_e(){return If}function J_e(){return If=Q2>0?XN(qA,--Q2):0,zA--,If===10&&(zA=1,_W--),If}function nm(){return If=Q2<ZDt?XN(qA,Q2++):0,zA++,If===10&&(zA=1,_W++),If}function aT(){return XN(qA,Q2)}function SW(){return Q2}function AW(i,a){return QN(qA,i,a)}function cdt(i){switch(i){case 0:case 9:case 10:case 13:case 32:return 5;case 33:case 43:case 44:case 47:case 62:case 64:case 126:case 59:case 123:case 125:return 4;case 58:return 3;case 34:case 39:case 40:case 91:return 2;case 41:case 93:return 1}return 0}function tSe(i){return _W=zA=1,ZDt=nk(qA=i),Q2=0,[]}function eSe(i){return qA="",i}function udt(i){return XDt(AW(Q2-1,ldt(i===91?i+2:i===40?i+1:i)))}function nSe(i){for(;(If=aT())&&If<33;)nm();return cdt(i)>2||cdt(If)>3?"":" "}function rSe(i,a){for(;--a&&nm()&&!(If<48||If>102||If>57&&If<65||If>70&&If<97););return AW(i,SW()+(a<6&&aT()==32&&nm()==32))}function ldt(i){for(;nm();)switch(If){case i:return Q2;case 34:case 39:i!==34&&i!==39&&ldt(If);break;case 40:i===41&&ldt(i);break;case 92:nm();break}return Q2}function iSe(i,a){for(;nm()&&i+If!==47+10;)if(i+If===42+42&&aT()===47)break;return"/*"+AW(a,Q2-1)+"*"+sdt(i===47?i:nm())}function sSe(i){for(;!cdt(aT());)nm();return AW(i,Q2)}function aSe(i){return eSe(LW("",null,null,null,[""],i=tSe(i),0,[0],i))}function LW(i,a,f,p,v,m,b,E,_){for(var L=0,N=0,B=b,j=0,R=0,z=0,K=1,it=1,st=1,ut=0,bt="",mt=v,yt=m,dt=p,ht=bt;it;)switch(z=ut,ut=nm()){case 40:if(z!=108&&XN(ht,B-1)==58){Q_e(ht+=adt(udt(ut),"&","&\f"),"&\f")!=-1&&(st=-1);break}case 34:case 39:case 91:ht+=udt(ut);break;case 9:case 10:case 13:case 32:ht+=nSe(z);break;case 92:ht+=rSe(SW()-1,7);continue;case 47:switch(aT()){case 42:case 47:CW(oSe(iSe(nm(),SW()),a,f),_);break;default:ht+="/"}break;case 123*K:E[L++]=nk(ht)*st;case 125*K:case 59:case 0:switch(ut){case 0:case 125:it=0;case 59+N:R>0&&nk(ht)-B&&CW(R>32?tOt(ht+";",p,f,B-1):tOt(adt(ht," ","")+";",p,f,B-2),_);break;case 59:ht+=";";default:if(CW(dt=JDt(ht,a,f,L,N,v,E,bt,mt=[],yt=[],B),m),ut===123)if(N===0)LW(ht,a,dt,dt,mt,m,B,E,yt);else switch(j===99&&XN(ht,3)===110?100:j){case 100:case 109:case 115:LW(i,dt,dt,p&&CW(JDt(i,dt,dt,0,0,v,E,bt,v,mt=[],B),yt),v,yt,B,E,p?mt:yt);break;default:LW(ht,dt,dt,dt,[""],yt,0,E,yt)}}L=N=R=0,K=st=1,bt=ht="",B=b;break;case 58:B=1+nk(ht),R=z;default:if(K<1){if(ut==123)--K;else if(ut==125&&K++==0&&J_e()==125)continue}switch(ht+=sdt(ut),ut*K){case 38:st=N>0?1:(ht+="\f",-1);break;case 44:E[L++]=(nk(ht)-1)*st,st=1;break;case 64:aT()===45&&(ht+=udt(nm())),j=aT(),N=B=nk(bt=ht+=sSe(SW())),ut++;break;case 45:z===45&&nk(ht)==2&&(K=0)}}return m}function JDt(i,a,f,p,v,m,b,E,_,L,N){for(var B=v-1,j=v===0?m:[""],R=QDt(j),z=0,K=0,it=0;z<p;++z)for(var st=0,ut=QN(i,B+1,B=X_e(K=b[z])),bt=i;st<R;++st)(bt=XDt(K>0?j[st]+" "+ut:adt(ut,/&\f/g,j[st])))&&(_[it++]=bt);return odt(i,a,f,v===0?KDt:E,_,L,N)}function oSe(i,a,f){return odt(i,a,f,WDt,sdt(Z_e()),QN(i,2,-2),0)}function tOt(i,a,f,p){return odt(i,a,f,YDt,QN(i,0,p),QN(i,p+1,-1),p)}function hdt(i,a){for(var f="",p=QDt(i),v=0;v<p;v++)f+=a(i[v],v,i,a)||"";return f}function cSe(i,a,f,p){switch(i.type){case K_e:case YDt:return i.return=i.return||i.value;case WDt:return"";case Y_e:return i.return=i.value+"{"+hdt(i.children,p)+"}";case KDt:i.value=i.props.join(",")}return nk(f=hdt(i.children,p))?i.return=i.value+"{"+f+"}":""}const eOt="10.5.0",oT=Object.freeze(Lf);let sp=Y1({},oT),nOt,HA=[],ZN=Y1({},oT);const MW=(i,a)=>{let f=Y1({},i),p={};for(const v of a)sOt(v),p=Y1(p,v);if(f=Y1(f,p),p.theme&&p.theme in w5){const v=Y1({},nOt),m=Y1(v.themeVariables||{},p.themeVariables);f.theme&&f.theme in w5&&(f.themeVariables=w5[f.theme].getThemeVariables(m))}return ZN=f,oOt(ZN),ZN},uSe=i=>(sp=Y1({},oT),sp=Y1(sp,i),i.theme&&w5[i.theme]&&(sp.themeVariables=w5[i.theme].getThemeVariables(i.themeVariables)),MW(sp,HA),sp),lSe=i=>{nOt=Y1({},i)},hSe=i=>(sp=Y1(sp,i),MW(sp,HA),sp),rOt=()=>Y1({},sp),iOt=i=>(oOt(i),Y1(ZN,i),Le()),Le=()=>Y1({},ZN),sOt=i=>{i&&(["secure",...sp.secure??[]].forEach(a=>{Object.hasOwn(i,a)&&(Ut.debug(`Denied attempt to modify a secure key ${a}`,i[a]),delete i[a])}),Object.keys(i).forEach(a=>{a.startsWith("__")&&delete i[a]}),Object.keys(i).forEach(a=>{typeof i[a]=="string"&&(i[a].includes("<")||i[a].includes(">")||i[a].includes("url(data:"))&&delete i[a],typeof i[a]=="object"&&sOt(i[a])}))},fSe=i=>{lW(i),i.fontFamily&&(!i.themeVariables||!i.themeVariables.fontFamily)&&(i.themeVariables={fontFamily:i.fontFamily}),HA.push(i),MW(sp,HA)},IW=(i=sp)=>{HA=[],MW(i,HA)},dSe={LAZY_LOAD_DEPRECATED:"The configuration options lazyLoadedDiagrams and loadExternalDiagramsAtStartup are deprecated. Please use registerExternalDiagrams instead."},aOt={},gSe=i=>{aOt[i]||(Ut.warn(dSe[i]),aOt[i]=!0)},oOt=i=>{i&&(i.lazyLoadedDiagrams||i.loadExternalDiagramsAtStartup)&&gSe("LAZY_LOAD_DEPRECATED")},cOt="c4",pSe={id:cOt,detector:i=>/^\s*C4Context|C4Container|C4Component|C4Dynamic|C4Deployment/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>IIe);return{id:cOt,diagram:i}}},uOt="flowchart",bSe={id:uOt,detector:(i,a)=>{var f,p;return((f=a==null?void 0:a.flowchart)==null?void 0:f.defaultRenderer)==="dagre-wrapper"||((p=a==null?void 0:a.flowchart)==null?void 0:p.defaultRenderer)==="elk"?!1:/^\s*graph/.test(i)},loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>O$e);return{id:uOt,diagram:i}}},lOt="flowchart-v2",vSe={id:lOt,detector:(i,a)=>{var f,p,v;return((f=a==null?void 0:a.flowchart)==null?void 0:f.defaultRenderer)==="dagre-d3"||((p=a==null?void 0:a.flowchart)==null?void 0:p.defaultRenderer)==="elk"?!1:/^\s*graph/.test(i)&&((v=a==null?void 0:a.flowchart)==null?void 0:v.defaultRenderer)==="dagre-wrapper"?!0:/^\s*flowchart/.test(i)},loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>N$e);return{id:lOt,diagram:i}}},hOt="er",wSe={id:hOt,detector:i=>/^\s*erDiagram/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>aze);return{id:hOt,diagram:i}}},fOt="gitGraph",mSe={id:fOt,detector:i=>/^\s*gitGraph/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>Ize);return{id:fOt,diagram:i}}},dOt="gantt",ySe={id:dOt,detector:i=>/^\s*gantt/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>yqe);return{id:dOt,diagram:i}}},gOt="info",xSe={id:gOt,detector:i=>/^\s*info/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>kqe);return{id:gOt,diagram:i}}},pOt="pie",kSe={id:pOt,detector:i=>/^\s*pie/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>Aqe);return{id:pOt,diagram:i}}},bOt="quadrantChart",ESe={id:bOt,detector:i=>/^\s*quadrantChart/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>Gqe);return{id:bOt,diagram:i}}},vOt="requirement",TSe={id:vOt,detector:i=>/^\s*requirement(Diagram)?/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>tHe);return{id:vOt,diagram:i}}},wOt="sequence",CSe={id:wOt,detector:i=>/^\s*sequenceDiagram/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>sGe);return{id:wOt,diagram:i}}},mOt="class",_Se={id:mOt,detector:(i,a)=>{var f;return((f=a==null?void 0:a.class)==null?void 0:f.defaultRenderer)==="dagre-wrapper"?!1:/^\s*classDiagram/.test(i)},loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>LGe);return{id:mOt,diagram:i}}},yOt="classDiagram",SSe={id:yOt,detector:(i,a)=>{var f;return/^\s*classDiagram/.test(i)&&((f=a==null?void 0:a.class)==null?void 0:f.defaultRenderer)==="dagre-wrapper"?!0:/^\s*classDiagram-v2/.test(i)},loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>PGe);return{id:yOt,diagram:i}}},xOt="state",ASe={id:xOt,detector:(i,a)=>{var f;return((f=a==null?void 0:a.state)==null?void 0:f.defaultRenderer)==="dagre-wrapper"?!1:/^\s*stateDiagram/.test(i)},loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>kVe);return{id:xOt,diagram:i}}},kOt="stateDiagram",LSe={id:kOt,detector:(i,a)=>{var f;return!!(/^\s*stateDiagram-v2/.test(i)||/^\s*stateDiagram/.test(i)&&((f=a==null?void 0:a.state)==null?void 0:f.defaultRenderer)==="dagre-wrapper")},loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>zVe);return{id:kOt,diagram:i}}},EOt="journey",MSe={id:EOt,detector:i=>/^\s*journey/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>aUe);return{id:EOt,diagram:i}}},fdt=i=>{var v;const{securityLevel:a}=Le();let f=yr("body");if(a==="sandbox"){const b=((v=yr(`#i${i}`).node())==null?void 0:v.contentDocument)??document;f=yr(b.body)}return f.select(`#${i}`)},ISe=function(i,a){for(let f of a)i.attr(f[0],f[1])},DSe=function(i,a,f){let p=new Map;return f?(p.set("width","100%"),p.set("style",`max-width: ${a}px;`)):(p.set("height",i),p.set("width",a)),p},og=function(i,a,f,p){const v=DSe(a,f,p);ISe(i,v)},cT=function(i,a,f,p){const v=a.node().getBBox(),m=v.width,b=v.height;Ut.info(`SVG bounds: ${m}x${b}`,v);let E=0,_=0;Ut.info(`Graph bounds: ${E}x${_}`,i),E=m+f*2,_=b+f*2,Ut.info(`Calculated bounds: ${E}x${_}`),og(a,_,E,p);const L=`${v.x-f} ${v.y-f} ${v.width+2*f} ${v.height+2*f}`;a.attr("viewBox",L)},TOt={draw:(i,a,f)=>{Ut.debug(`renering svg for syntax error
`);const p=fdt(a);p.attr("viewBox","0 0 2412 512"),og(p,100,512,!0);const v=p.append("g");v.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"),v.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"),v.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"),v.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"),v.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"),v.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"),v.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"),v.append("text").attr("class","error-text").attr("x",1250).attr("y",400).attr("font-size","100px").style("text-anchor","middle").text(`mermaid version ${f}`)}},OSe=TOt,NSe={db:{},renderer:TOt,parser:{parser:{yy:{}},parse:()=>{}}},COt="flowchart-elk",PSe={id:COt,detector:(i,a)=>{var f;return!!(/^\s*flowchart-elk/.test(i)||/^\s*flowchart|graph/.test(i)&&((f=a==null?void 0:a.flowchart)==null?void 0:f.defaultRenderer)==="elk")},loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>kUe);return{id:COt,diagram:i}}},_Ot="timeline",FSe={id:_Ot,detector:i=>/^\s*timeline/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>zUe);return{id:_Ot,diagram:i}}},SOt="mindmap",BSe={id:SOt,detector:i=>/^\s*mindmap/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>vWe);return{id:SOt,diagram:i}}},AOt="sankey",RSe={id:AOt,detector:i=>/^\s*sankey-beta/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>WWe);return{id:AOt,diagram:i}}},DW={},jSe=(i,a,f)=>{let p="";return i in DW&&DW[i]?p=DW[i](f):Ut.warn(`No theme found for ${i}`),` & {
    font-family: ${f.fontFamily};
    font-size: ${f.fontSize};
    fill: ${f.textColor}
  }

  /* Classes common for multiple diagrams */

  & .error-icon {
    fill: ${f.errorBkgColor};
  }
  & .error-text {
    fill: ${f.errorTextColor};
    stroke: ${f.errorTextColor};
  }

  & .edge-thickness-normal {
    stroke-width: 2px;
  }
  & .edge-thickness-thick {
    stroke-width: 3.5px
  }
  & .edge-pattern-solid {
    stroke-dasharray: 0;
  }

  & .edge-pattern-dashed{
    stroke-dasharray: 3;
  }
  .edge-pattern-dotted {
    stroke-dasharray: 2;
  }

  & .marker {
    fill: ${f.lineColor};
    stroke: ${f.lineColor};
  }
  & .marker.cross {
    stroke: ${f.lineColor};
  }

  & svg {
    font-family: ${f.fontFamily};
    font-size: ${f.fontSize};
  }

  ${p}

  ${a}
`},$Se=(i,a)=>{a!==void 0&&(DW[i]=a)},zSe=jSe;let ddt="",gdt="",pdt="";const bdt=i=>Dd(i,Le()),ap=()=>{ddt="",pdt="",gdt=""},cg=i=>{ddt=bdt(i).replace(/^\s+/g,"")},op=()=>ddt,cp=i=>{pdt=bdt(i).replace(/\n\s+/g,`
`)},up=()=>pdt,Z2=i=>{gdt=bdt(i)},Db=()=>gdt,LOt=Object.freeze(Object.defineProperty({__proto__:null,clear:ap,getAccDescription:up,getAccTitle:op,getDiagramTitle:Db,setAccDescription:cp,setAccTitle:cg,setDiagramTitle:Z2},Symbol.toStringTag,{value:"Module"})),qSe=Ut,HSe=jft,JN=Le,GSe=i=>Dd(i,JN()),MOt=cT,VSe=()=>LOt,OW={},NW=(i,a,f)=>{var p;if(OW[i])throw new Error(`Diagram ${i} already registered.`);OW[i]=a,f&&cDt(i,f),$Se(i,a.styles),(p=a.injectUtils)==null||p.call(a,qSe,HSe,JN,GSe,MOt,VSe(),()=>{})},vdt=i=>{if(i in OW)return OW[i];throw new USe(i)};class USe extends Error{constructor(a){super(`Diagram ${a} not found.`)}}let IOt=!1;const wdt=()=>{IOt||(IOt=!0,NW("error",NSe,i=>i.toLowerCase().trim()==="error"),NW("---",{db:{clear:()=>{}},styles:{},renderer:{draw:()=>{}},parser:{parser:{yy:{}},parse:()=>{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")}},init:()=>null},i=>i.toLowerCase().trimStart().startsWith("---")),oDt(pSe,SSe,_Se,wSe,ySe,xSe,kSe,TSe,CSe,PSe,vSe,bSe,BSe,FSe,mSe,LSe,ASe,MSe,ESe,RSe))};class DOt{constructor(a,f={}){this.text=a,this.metadata=f,this.type="graph",this.text+=`
`;const p=Le();try{this.type=hW(a,p)}catch(m){this.type="error",this.detectError=m}const v=vdt(this.type);Ut.debug("Type "+this.type),this.db=v.db,this.renderer=v.renderer,this.parser=v.parser,this.parser.parser.yy=this.db,this.init=v.init,this.parse()}parse(){var f,p,v,m,b;if(this.detectError)throw this.detectError;(p=(f=this.db).clear)==null||p.call(f);const a=Le();(v=this.init)==null||v.call(this,a),this.metadata.title&&((b=(m=this.db).setDiagramTitle)==null||b.call(m,this.metadata.title)),this.parser.parse(this.text)}async render(a,f){await this.renderer.draw(this.text,a,f,this)}getParser(){return this.parser}getType(){return this.type}}const mdt=async(i,a={})=>{const f=hW(i,Le());try{vdt(f)}catch{const v=t9e(f);if(!v)throw new aDt(`Diagram ${f} not found.`);const{id:m,diagram:b}=await v();NW(m,b)}return new DOt(i,a)};let ydt=[];const WSe=i=>{ydt.push(i)},KSe=()=>{ydt.forEach(i=>{i()}),ydt=[]};var YSe=xDt(Object.keys,Object);const XSe=YSe;var QSe=Object.prototype,ZSe=QSe.hasOwnProperty;function OOt(i){if(!vW(i))return XSe(i);var a=[];for(var f in Object(i))ZSe.call(i,f)&&f!="constructor"&&a.push(f);return a}var JSe=nT(Jw,"DataView");const xdt=JSe;var tAe=nT(Jw,"Promise");const kdt=tAe;var eAe=nT(Jw,"Set");const GA=eAe;var nAe=nT(Jw,"WeakMap");const Edt=nAe;var NOt="[object Map]",rAe="[object Object]",POt="[object Promise]",FOt="[object Set]",BOt="[object WeakMap]",ROt="[object DataView]",iAe=eT(xdt),sAe=eT(UN),aAe=eT(kdt),oAe=eT(GA),cAe=eT(Edt),uT=tT;(xdt&&uT(new xdt(new ArrayBuffer(1)))!=ROt||UN&&uT(new UN)!=NOt||kdt&&uT(kdt.resolve())!=POt||GA&&uT(new GA)!=FOt||Edt&&uT(new Edt)!=BOt)&&(uT=function(i){var a=tT(i),f=a==rAe?i.constructor:void 0,p=f?eT(f):"";if(p)switch(p){case iAe:return ROt;case sAe:return NOt;case aAe:return POt;case oAe:return FOt;case cAe:return BOt}return a});const VA=uT;var uAe="[object Map]",lAe="[object Set]",hAe=Object.prototype,fAe=hAe.hasOwnProperty;function tP(i){if(i==null)return!0;if(ek(i)&&(Mf(i)||typeof i=="string"||typeof i.splice=="function"||BA(i)||mW(i)||FA(i)))return!i.length;var a=VA(i);if(a==uAe||a==lAe)return!i.size;if(vW(i))return!OOt(i).length;for(var f in i)if(fAe.call(i,f))return!1;return!0}const dAe="graphics-document document";function gAe(i,a){i.attr("role",dAe),a!==""&&i.attr("aria-roledescription",a)}function pAe(i,a,f,p){if(i.insert!==void 0){if(f){const v=`chart-desc-${p}`;i.attr("aria-describedby",v),i.insert("desc",":first-child").attr("id",v).text(f)}if(a){const v=`chart-title-${p}`;i.attr("aria-labelledby",v),i.insert("title",":first-child").attr("id",v).text(a)}}}const bAe=i=>i.replace(/^\s*%%(?!{)[^\n]+\n?/gm,"").trimStart();/*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT */function jOt(i){return typeof i>"u"||i===null}function vAe(i){return typeof i=="object"&&i!==null}function wAe(i){return Array.isArray(i)?i:jOt(i)?[]:[i]}function mAe(i,a){var f,p,v,m;if(a)for(m=Object.keys(a),f=0,p=m.length;f<p;f+=1)v=m[f],i[v]=a[v];return i}function yAe(i,a){var f="",p;for(p=0;p<a;p+=1)f+=i;return f}function xAe(i){return i===0&&Number.NEGATIVE_INFINITY===1/i}var kAe=jOt,EAe=vAe,TAe=wAe,CAe=yAe,_Ae=xAe,SAe=mAe,ug={isNothing:kAe,isObject:EAe,toArray:TAe,repeat:CAe,isNegativeZero:_Ae,extend:SAe};function $Ot(i,a){var f="",p=i.reason||"(unknown reason)";return i.mark?(i.mark.name&&(f+='in "'+i.mark.name+'" '),f+="("+(i.mark.line+1)+":"+(i.mark.column+1)+")",!a&&i.mark.snippet&&(f+=`

`+i.mark.snippet),p+" "+f):p}function eP(i,a){Error.call(this),this.name="YAMLException",this.reason=i,this.mark=a,this.message=$Ot(this,!1),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack||""}eP.prototype=Object.create(Error.prototype),eP.prototype.constructor=eP,eP.prototype.toString=function(a){return this.name+": "+$Ot(this,a)};var x5=eP;function Tdt(i,a,f,p,v){var m="",b="",E=Math.floor(v/2)-1;return p-a>E&&(m=" ... ",a=p-E+m.length),f-p>E&&(b=" ...",f=p+E-b.length),{str:m+i.slice(a,f).replace(/\t/g,"→")+b,pos:p-a+m.length}}function Cdt(i,a){return ug.repeat(" ",a-i.length)+i}function AAe(i,a){if(a=Object.create(a||null),!i.buffer)return null;a.maxLength||(a.maxLength=79),typeof a.indent!="number"&&(a.indent=1),typeof a.linesBefore!="number"&&(a.linesBefore=3),typeof a.linesAfter!="number"&&(a.linesAfter=2);for(var f=/\r?\n|\r|\0/g,p=[0],v=[],m,b=-1;m=f.exec(i.buffer);)v.push(m.index),p.push(m.index+m[0].length),i.position<=m.index&&b<0&&(b=p.length-2);b<0&&(b=p.length-1);var E="",_,L,N=Math.min(i.line+a.linesAfter,v.length).toString().length,B=a.maxLength-(a.indent+N+3);for(_=1;_<=a.linesBefore&&!(b-_<0);_++)L=Tdt(i.buffer,p[b-_],v[b-_],i.position-(p[b]-p[b-_]),B),E=ug.repeat(" ",a.indent)+Cdt((i.line-_+1).toString(),N)+" | "+L.str+`
`+E;for(L=Tdt(i.buffer,p[b],v[b],i.position,B),E+=ug.repeat(" ",a.indent)+Cdt((i.line+1).toString(),N)+" | "+L.str+`
`,E+=ug.repeat("-",a.indent+N+3+L.pos)+`^
`,_=1;_<=a.linesAfter&&!(b+_>=v.length);_++)L=Tdt(i.buffer,p[b+_],v[b+_],i.position-(p[b]-p[b+_]),B),E+=ug.repeat(" ",a.indent)+Cdt((i.line+_+1).toString(),N)+" | "+L.str+`
`;return E.replace(/\n$/,"")}var LAe=AAe,MAe=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],IAe=["scalar","sequence","mapping"];function DAe(i){var a={};return i!==null&&Object.keys(i).forEach(function(f){i[f].forEach(function(p){a[String(p)]=f})}),a}function OAe(i,a){if(a=a||{},Object.keys(a).forEach(function(f){if(MAe.indexOf(f)===-1)throw new x5('Unknown option "'+f+'" is met in definition of "'+i+'" YAML type.')}),this.options=a,this.tag=i,this.kind=a.kind||null,this.resolve=a.resolve||function(){return!0},this.construct=a.construct||function(f){return f},this.instanceOf=a.instanceOf||null,this.predicate=a.predicate||null,this.represent=a.represent||null,this.representName=a.representName||null,this.defaultStyle=a.defaultStyle||null,this.multi=a.multi||!1,this.styleAliases=DAe(a.styleAliases||null),IAe.indexOf(this.kind)===-1)throw new x5('Unknown kind "'+this.kind+'" is specified for "'+i+'" YAML type.')}var m0=OAe;function zOt(i,a){var f=[];return i[a].forEach(function(p){var v=f.length;f.forEach(function(m,b){m.tag===p.tag&&m.kind===p.kind&&m.multi===p.multi&&(v=b)}),f[v]=p}),f}function NAe(){var i={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}},a,f;function p(v){v.multi?(i.multi[v.kind].push(v),i.multi.fallback.push(v)):i[v.kind][v.tag]=i.fallback[v.tag]=v}for(a=0,f=arguments.length;a<f;a+=1)arguments[a].forEach(p);return i}function _dt(i){return this.extend(i)}_dt.prototype.extend=function(a){var f=[],p=[];if(a instanceof m0)p.push(a);else if(Array.isArray(a))p=p.concat(a);else if(a&&(Array.isArray(a.implicit)||Array.isArray(a.explicit)))a.implicit&&(f=f.concat(a.implicit)),a.explicit&&(p=p.concat(a.explicit));else throw new x5("Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })");f.forEach(function(m){if(!(m instanceof m0))throw new x5("Specified list of YAML types (or a single Type object) contains a non-Type object.");if(m.loadKind&&m.loadKind!=="scalar")throw new x5("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.");if(m.multi)throw new x5("There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.")}),p.forEach(function(m){if(!(m instanceof m0))throw new x5("Specified list of YAML types (or a single Type object) contains a non-Type object.")});var v=Object.create(_dt.prototype);return v.implicit=(this.implicit||[]).concat(f),v.explicit=(this.explicit||[]).concat(p),v.compiledImplicit=zOt(v,"implicit"),v.compiledExplicit=zOt(v,"explicit"),v.compiledTypeMap=NAe(v.compiledImplicit,v.compiledExplicit),v};var PAe=_dt,FAe=new m0("tag:yaml.org,2002:str",{kind:"scalar",construct:function(i){return i!==null?i:""}}),BAe=new m0("tag:yaml.org,2002:seq",{kind:"sequence",construct:function(i){return i!==null?i:[]}}),RAe=new m0("tag:yaml.org,2002:map",{kind:"mapping",construct:function(i){return i!==null?i:{}}}),jAe=new PAe({explicit:[FAe,BAe,RAe]});function $Ae(i){if(i===null)return!0;var a=i.length;return a===1&&i==="~"||a===4&&(i==="null"||i==="Null"||i==="NULL")}function zAe(){return null}function qAe(i){return i===null}var HAe=new m0("tag:yaml.org,2002:null",{kind:"scalar",resolve:$Ae,construct:zAe,predicate:qAe,represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"},empty:function(){return""}},defaultStyle:"lowercase"});function GAe(i){if(i===null)return!1;var a=i.length;return a===4&&(i==="true"||i==="True"||i==="TRUE")||a===5&&(i==="false"||i==="False"||i==="FALSE")}function VAe(i){return i==="true"||i==="True"||i==="TRUE"}function UAe(i){return Object.prototype.toString.call(i)==="[object Boolean]"}var WAe=new m0("tag:yaml.org,2002:bool",{kind:"scalar",resolve:GAe,construct:VAe,predicate:UAe,represent:{lowercase:function(i){return i?"true":"false"},uppercase:function(i){return i?"TRUE":"FALSE"},camelcase:function(i){return i?"True":"False"}},defaultStyle:"lowercase"});function KAe(i){return 48<=i&&i<=57||65<=i&&i<=70||97<=i&&i<=102}function YAe(i){return 48<=i&&i<=55}function XAe(i){return 48<=i&&i<=57}function QAe(i){if(i===null)return!1;var a=i.length,f=0,p=!1,v;if(!a)return!1;if(v=i[f],(v==="-"||v==="+")&&(v=i[++f]),v==="0"){if(f+1===a)return!0;if(v=i[++f],v==="b"){for(f++;f<a;f++)if(v=i[f],v!=="_"){if(v!=="0"&&v!=="1")return!1;p=!0}return p&&v!=="_"}if(v==="x"){for(f++;f<a;f++)if(v=i[f],v!=="_"){if(!KAe(i.charCodeAt(f)))return!1;p=!0}return p&&v!=="_"}if(v==="o"){for(f++;f<a;f++)if(v=i[f],v!=="_"){if(!YAe(i.charCodeAt(f)))return!1;p=!0}return p&&v!=="_"}}if(v==="_")return!1;for(;f<a;f++)if(v=i[f],v!=="_"){if(!XAe(i.charCodeAt(f)))return!1;p=!0}return!(!p||v==="_")}function ZAe(i){var a=i,f=1,p;if(a.indexOf("_")!==-1&&(a=a.replace(/_/g,"")),p=a[0],(p==="-"||p==="+")&&(p==="-"&&(f=-1),a=a.slice(1),p=a[0]),a==="0")return 0;if(p==="0"){if(a[1]==="b")return f*parseInt(a.slice(2),2);if(a[1]==="x")return f*parseInt(a.slice(2),16);if(a[1]==="o")return f*parseInt(a.slice(2),8)}return f*parseInt(a,10)}function JAe(i){return Object.prototype.toString.call(i)==="[object Number]"&&i%1===0&&!ug.isNegativeZero(i)}var tLe=new m0("tag:yaml.org,2002:int",{kind:"scalar",resolve:QAe,construct:ZAe,predicate:JAe,represent:{binary:function(i){return i>=0?"0b"+i.toString(2):"-0b"+i.toString(2).slice(1)},octal:function(i){return i>=0?"0o"+i.toString(8):"-0o"+i.toString(8).slice(1)},decimal:function(i){return i.toString(10)},hexadecimal:function(i){return i>=0?"0x"+i.toString(16).toUpperCase():"-0x"+i.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}),eLe=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");function nLe(i){return!(i===null||!eLe.test(i)||i[i.length-1]==="_")}function rLe(i){var a,f;return a=i.replace(/_/g,"").toLowerCase(),f=a[0]==="-"?-1:1,"+-".indexOf(a[0])>=0&&(a=a.slice(1)),a===".inf"?f===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:a===".nan"?NaN:f*parseFloat(a,10)}var iLe=/^[-+]?[0-9]+e/;function sLe(i,a){var f;if(isNaN(i))switch(a){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===i)switch(a){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===i)switch(a){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(ug.isNegativeZero(i))return"-0.0";return f=i.toString(10),iLe.test(f)?f.replace("e",".e"):f}function aLe(i){return Object.prototype.toString.call(i)==="[object Number]"&&(i%1!==0||ug.isNegativeZero(i))}var oLe=new m0("tag:yaml.org,2002:float",{kind:"scalar",resolve:nLe,construct:rLe,predicate:aLe,represent:sLe,defaultStyle:"lowercase"}),qOt=jAe.extend({implicit:[HAe,WAe,tLe,oLe]}),cLe=qOt,HOt=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),GOt=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 uLe(i){return i===null?!1:HOt.exec(i)!==null||GOt.exec(i)!==null}function lLe(i){var a,f,p,v,m,b,E,_=0,L=null,N,B,j;if(a=HOt.exec(i),a===null&&(a=GOt.exec(i)),a===null)throw new Error("Date resolve error");if(f=+a[1],p=+a[2]-1,v=+a[3],!a[4])return new Date(Date.UTC(f,p,v));if(m=+a[4],b=+a[5],E=+a[6],a[7]){for(_=a[7].slice(0,3);_.length<3;)_+="0";_=+_}return a[9]&&(N=+a[10],B=+(a[11]||0),L=(N*60+B)*6e4,a[9]==="-"&&(L=-L)),j=new Date(Date.UTC(f,p,v,m,b,E,_)),L&&j.setTime(j.getTime()-L),j}function hLe(i){return i.toISOString()}var fLe=new m0("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:uLe,construct:lLe,instanceOf:Date,represent:hLe});function dLe(i){return i==="<<"||i===null}var gLe=new m0("tag:yaml.org,2002:merge",{kind:"scalar",resolve:dLe}),Sdt=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=
\r`;function pLe(i){if(i===null)return!1;var a,f,p=0,v=i.length,m=Sdt;for(f=0;f<v;f++)if(a=m.indexOf(i.charAt(f)),!(a>64)){if(a<0)return!1;p+=6}return p%8===0}function bLe(i){var a,f,p=i.replace(/[\r\n=]/g,""),v=p.length,m=Sdt,b=0,E=[];for(a=0;a<v;a++)a%4===0&&a&&(E.push(b>>16&255),E.push(b>>8&255),E.push(b&255)),b=b<<6|m.indexOf(p.charAt(a));return f=v%4*6,f===0?(E.push(b>>16&255),E.push(b>>8&255),E.push(b&255)):f===18?(E.push(b>>10&255),E.push(b>>2&255)):f===12&&E.push(b>>4&255),new Uint8Array(E)}function vLe(i){var a="",f=0,p,v,m=i.length,b=Sdt;for(p=0;p<m;p++)p%3===0&&p&&(a+=b[f>>18&63],a+=b[f>>12&63],a+=b[f>>6&63],a+=b[f&63]),f=(f<<8)+i[p];return v=m%3,v===0?(a+=b[f>>18&63],a+=b[f>>12&63],a+=b[f>>6&63],a+=b[f&63]):v===2?(a+=b[f>>10&63],a+=b[f>>4&63],a+=b[f<<2&63],a+=b[64]):v===1&&(a+=b[f>>2&63],a+=b[f<<4&63],a+=b[64],a+=b[64]),a}function wLe(i){return Object.prototype.toString.call(i)==="[object Uint8Array]"}var mLe=new m0("tag:yaml.org,2002:binary",{kind:"scalar",resolve:pLe,construct:bLe,predicate:wLe,represent:vLe}),yLe=Object.prototype.hasOwnProperty,xLe=Object.prototype.toString;function kLe(i){if(i===null)return!0;var a=[],f,p,v,m,b,E=i;for(f=0,p=E.length;f<p;f+=1){if(v=E[f],b=!1,xLe.call(v)!=="[object Object]")return!1;for(m in v)if(yLe.call(v,m))if(!b)b=!0;else return!1;if(!b)return!1;if(a.indexOf(m)===-1)a.push(m);else return!1}return!0}function ELe(i){return i!==null?i:[]}var TLe=new m0("tag:yaml.org,2002:omap",{kind:"sequence",resolve:kLe,construct:ELe}),CLe=Object.prototype.toString;function _Le(i){if(i===null)return!0;var a,f,p,v,m,b=i;for(m=new Array(b.length),a=0,f=b.length;a<f;a+=1){if(p=b[a],CLe.call(p)!=="[object Object]"||(v=Object.keys(p),v.length!==1))return!1;m[a]=[v[0],p[v[0]]]}return!0}function SLe(i){if(i===null)return[];var a,f,p,v,m,b=i;for(m=new Array(b.length),a=0,f=b.length;a<f;a+=1)p=b[a],v=Object.keys(p),m[a]=[v[0],p[v[0]]];return m}var ALe=new m0("tag:yaml.org,2002:pairs",{kind:"sequence",resolve:_Le,construct:SLe}),LLe=Object.prototype.hasOwnProperty;function MLe(i){if(i===null)return!0;var a,f=i;for(a in f)if(LLe.call(f,a)&&f[a]!==null)return!1;return!0}function ILe(i){return i!==null?i:{}}var DLe=new m0("tag:yaml.org,2002:set",{kind:"mapping",resolve:MLe,construct:ILe}),OLe=cLe.extend({implicit:[fLe,gLe],explicit:[mLe,TLe,ALe,DLe]}),rk=Object.prototype.hasOwnProperty,PW=1,VOt=2,UOt=3,FW=4,Adt=1,NLe=2,WOt=3,PLe=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,FLe=/[\x85\u2028\u2029]/,BLe=/[,\[\]\{\}]/,KOt=/^(?:!|!!|![a-z\-]+!)$/i,YOt=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;function XOt(i){return Object.prototype.toString.call(i)}function f3(i){return i===10||i===13}function lT(i){return i===9||i===32}function lp(i){return i===9||i===32||i===10||i===13}function UA(i){return i===44||i===91||i===93||i===123||i===125}function RLe(i){var a;return 48<=i&&i<=57?i-48:(a=i|32,97<=a&&a<=102?a-97+10:-1)}function jLe(i){return i===120?2:i===117?4:i===85?8:0}function $Le(i){return 48<=i&&i<=57?i-48:-1}function QOt(i){return i===48?"\0":i===97?"\x07":i===98?"\b":i===116||i===9?"	":i===110?`
`:i===118?"\v":i===102?"\f":i===114?"\r":i===101?"\x1B":i===32?" ":i===34?'"':i===47?"/":i===92?"\\":i===78?"":i===95?" ":i===76?"\u2028":i===80?"\u2029":""}function zLe(i){return i<=65535?String.fromCharCode(i):String.fromCharCode((i-65536>>10)+55296,(i-65536&1023)+56320)}for(var ZOt=new Array(256),JOt=new Array(256),WA=0;WA<256;WA++)ZOt[WA]=QOt(WA)?1:0,JOt[WA]=QOt(WA);function qLe(i,a){this.input=i,this.filename=a.filename||null,this.schema=a.schema||OLe,this.onWarning=a.onWarning||null,this.legacy=a.legacy||!1,this.json=a.json||!1,this.listener=a.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=i.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}function tNt(i,a){var f={name:i.filename,buffer:i.input.slice(0,-1),position:i.position,line:i.line,column:i.position-i.lineStart};return f.snippet=LAe(f),new x5(a,f)}function _s(i,a){throw tNt(i,a)}function BW(i,a){i.onWarning&&i.onWarning.call(null,tNt(i,a))}var eNt={YAML:function(a,f,p){var v,m,b;a.version!==null&&_s(a,"duplication of %YAML directive"),p.length!==1&&_s(a,"YAML directive accepts exactly one argument"),v=/^([0-9]+)\.([0-9]+)$/.exec(p[0]),v===null&&_s(a,"ill-formed argument of the YAML directive"),m=parseInt(v[1],10),b=parseInt(v[2],10),m!==1&&_s(a,"unacceptable YAML version of the document"),a.version=p[0],a.checkLineBreaks=b<2,b!==1&&b!==2&&BW(a,"unsupported YAML version of the document")},TAG:function(a,f,p){var v,m;p.length!==2&&_s(a,"TAG directive accepts exactly two arguments"),v=p[0],m=p[1],KOt.test(v)||_s(a,"ill-formed tag handle (first argument) of the TAG directive"),rk.call(a.tagMap,v)&&_s(a,'there is a previously declared suffix for "'+v+'" tag handle'),YOt.test(m)||_s(a,"ill-formed tag prefix (second argument) of the TAG directive");try{m=decodeURIComponent(m)}catch{_s(a,"tag prefix is malformed: "+m)}a.tagMap[v]=m}};function ik(i,a,f,p){var v,m,b,E;if(a<f){if(E=i.input.slice(a,f),p)for(v=0,m=E.length;v<m;v+=1)b=E.charCodeAt(v),b===9||32<=b&&b<=1114111||_s(i,"expected valid JSON character");else PLe.test(E)&&_s(i,"the stream contains non-printable characters");i.result+=E}}function nNt(i,a,f,p){var v,m,b,E;for(ug.isObject(f)||_s(i,"cannot merge mappings; the provided source object is unacceptable"),v=Object.keys(f),b=0,E=v.length;b<E;b+=1)m=v[b],rk.call(a,m)||(a[m]=f[m],p[m]=!0)}function KA(i,a,f,p,v,m,b,E,_){var L,N;if(Array.isArray(v))for(v=Array.prototype.slice.call(v),L=0,N=v.length;L<N;L+=1)Array.isArray(v[L])&&_s(i,"nested arrays are not supported inside keys"),typeof v=="object"&&XOt(v[L])==="[object Object]"&&(v[L]="[object Object]");if(typeof v=="object"&&XOt(v)==="[object Object]"&&(v="[object Object]"),v=String(v),a===null&&(a={}),p==="tag:yaml.org,2002:merge")if(Array.isArray(m))for(L=0,N=m.length;L<N;L+=1)nNt(i,a,m[L],f);else nNt(i,a,m,f);else!i.json&&!rk.call(f,v)&&rk.call(a,v)&&(i.line=b||i.line,i.lineStart=E||i.lineStart,i.position=_||i.position,_s(i,"duplicated mapping key")),v==="__proto__"?Object.defineProperty(a,v,{configurable:!0,enumerable:!0,writable:!0,value:m}):a[v]=m,delete f[v];return a}function Ldt(i){var a;a=i.input.charCodeAt(i.position),a===10?i.position++:a===13?(i.position++,i.input.charCodeAt(i.position)===10&&i.position++):_s(i,"a line break is expected"),i.line+=1,i.lineStart=i.position,i.firstTabInLine=-1}function Df(i,a,f){for(var p=0,v=i.input.charCodeAt(i.position);v!==0;){for(;lT(v);)v===9&&i.firstTabInLine===-1&&(i.firstTabInLine=i.position),v=i.input.charCodeAt(++i.position);if(a&&v===35)do v=i.input.charCodeAt(++i.position);while(v!==10&&v!==13&&v!==0);if(f3(v))for(Ldt(i),v=i.input.charCodeAt(i.position),p++,i.lineIndent=0;v===32;)i.lineIndent++,v=i.input.charCodeAt(++i.position);else break}return f!==-1&&p!==0&&i.lineIndent<f&&BW(i,"deficient indentation"),p}function RW(i){var a=i.position,f;return f=i.input.charCodeAt(a),!!((f===45||f===46)&&f===i.input.charCodeAt(a+1)&&f===i.input.charCodeAt(a+2)&&(a+=3,f=i.input.charCodeAt(a),f===0||lp(f)))}function Mdt(i,a){a===1?i.result+=" ":a>1&&(i.result+=ug.repeat(`
`,a-1))}function HLe(i,a,f){var p,v,m,b,E,_,L,N,B=i.kind,j=i.result,R;if(R=i.input.charCodeAt(i.position),lp(R)||UA(R)||R===35||R===38||R===42||R===33||R===124||R===62||R===39||R===34||R===37||R===64||R===96||(R===63||R===45)&&(v=i.input.charCodeAt(i.position+1),lp(v)||f&&UA(v)))return!1;for(i.kind="scalar",i.result="",m=b=i.position,E=!1;R!==0;){if(R===58){if(v=i.input.charCodeAt(i.position+1),lp(v)||f&&UA(v))break}else if(R===35){if(p=i.input.charCodeAt(i.position-1),lp(p))break}else{if(i.position===i.lineStart&&RW(i)||f&&UA(R))break;if(f3(R))if(_=i.line,L=i.lineStart,N=i.lineIndent,Df(i,!1,-1),i.lineIndent>=a){E=!0,R=i.input.charCodeAt(i.position);continue}else{i.position=b,i.line=_,i.lineStart=L,i.lineIndent=N;break}}E&&(ik(i,m,b,!1),Mdt(i,i.line-_),m=b=i.position,E=!1),lT(R)||(b=i.position+1),R=i.input.charCodeAt(++i.position)}return ik(i,m,b,!1),i.result?!0:(i.kind=B,i.result=j,!1)}function GLe(i,a){var f,p,v;if(f=i.input.charCodeAt(i.position),f!==39)return!1;for(i.kind="scalar",i.result="",i.position++,p=v=i.position;(f=i.input.charCodeAt(i.position))!==0;)if(f===39)if(ik(i,p,i.position,!0),f=i.input.charCodeAt(++i.position),f===39)p=i.position,i.position++,v=i.position;else return!0;else f3(f)?(ik(i,p,v,!0),Mdt(i,Df(i,!1,a)),p=v=i.position):i.position===i.lineStart&&RW(i)?_s(i,"unexpected end of the document within a single quoted scalar"):(i.position++,v=i.position);_s(i,"unexpected end of the stream within a single quoted scalar")}function VLe(i,a){var f,p,v,m,b,E;if(E=i.input.charCodeAt(i.position),E!==34)return!1;for(i.kind="scalar",i.result="",i.position++,f=p=i.position;(E=i.input.charCodeAt(i.position))!==0;){if(E===34)return ik(i,f,i.position,!0),i.position++,!0;if(E===92){if(ik(i,f,i.position,!0),E=i.input.charCodeAt(++i.position),f3(E))Df(i,!1,a);else if(E<256&&ZOt[E])i.result+=JOt[E],i.position++;else if((b=jLe(E))>0){for(v=b,m=0;v>0;v--)E=i.input.charCodeAt(++i.position),(b=RLe(E))>=0?m=(m<<4)+b:_s(i,"expected hexadecimal character");i.result+=zLe(m),i.position++}else _s(i,"unknown escape sequence");f=p=i.position}else f3(E)?(ik(i,f,p,!0),Mdt(i,Df(i,!1,a)),f=p=i.position):i.position===i.lineStart&&RW(i)?_s(i,"unexpected end of the document within a double quoted scalar"):(i.position++,p=i.position)}_s(i,"unexpected end of the stream within a double quoted scalar")}function ULe(i,a){var f=!0,p,v,m,b=i.tag,E,_=i.anchor,L,N,B,j,R,z=Object.create(null),K,it,st,ut;if(ut=i.input.charCodeAt(i.position),ut===91)N=93,R=!1,E=[];else if(ut===123)N=125,R=!0,E={};else return!1;for(i.anchor!==null&&(i.anchorMap[i.anchor]=E),ut=i.input.charCodeAt(++i.position);ut!==0;){if(Df(i,!0,a),ut=i.input.charCodeAt(i.position),ut===N)return i.position++,i.tag=b,i.anchor=_,i.kind=R?"mapping":"sequence",i.result=E,!0;f?ut===44&&_s(i,"expected the node content, but found ','"):_s(i,"missed comma between flow collection entries"),it=K=st=null,B=j=!1,ut===63&&(L=i.input.charCodeAt(i.position+1),lp(L)&&(B=j=!0,i.position++,Df(i,!0,a))),p=i.line,v=i.lineStart,m=i.position,YA(i,a,PW,!1,!0),it=i.tag,K=i.result,Df(i,!0,a),ut=i.input.charCodeAt(i.position),(j||i.line===p)&&ut===58&&(B=!0,ut=i.input.charCodeAt(++i.position),Df(i,!0,a),YA(i,a,PW,!1,!0),st=i.result),R?KA(i,E,z,it,K,st,p,v,m):B?E.push(KA(i,null,z,it,K,st,p,v,m)):E.push(K),Df(i,!0,a),ut=i.input.charCodeAt(i.position),ut===44?(f=!0,ut=i.input.charCodeAt(++i.position)):f=!1}_s(i,"unexpected end of the stream within a flow collection")}function WLe(i,a){var f,p,v=Adt,m=!1,b=!1,E=a,_=0,L=!1,N,B;if(B=i.input.charCodeAt(i.position),B===124)p=!1;else if(B===62)p=!0;else return!1;for(i.kind="scalar",i.result="";B!==0;)if(B=i.input.charCodeAt(++i.position),B===43||B===45)Adt===v?v=B===43?WOt:NLe:_s(i,"repeat of a chomping mode identifier");else if((N=$Le(B))>=0)N===0?_s(i,"bad explicit indentation width of a block scalar; it cannot be less than one"):b?_s(i,"repeat of an indentation width identifier"):(E=a+N-1,b=!0);else break;if(lT(B)){do B=i.input.charCodeAt(++i.position);while(lT(B));if(B===35)do B=i.input.charCodeAt(++i.position);while(!f3(B)&&B!==0)}for(;B!==0;){for(Ldt(i),i.lineIndent=0,B=i.input.charCodeAt(i.position);(!b||i.lineIndent<E)&&B===32;)i.lineIndent++,B=i.input.charCodeAt(++i.position);if(!b&&i.lineIndent>E&&(E=i.lineIndent),f3(B)){_++;continue}if(i.lineIndent<E){v===WOt?i.result+=ug.repeat(`
`,m?1+_:_):v===Adt&&m&&(i.result+=`
`);break}for(p?lT(B)?(L=!0,i.result+=ug.repeat(`
`,m?1+_:_)):L?(L=!1,i.result+=ug.repeat(`
`,_+1)):_===0?m&&(i.result+=" "):i.result+=ug.repeat(`
`,_):i.result+=ug.repeat(`
`,m?1+_:_),m=!0,b=!0,_=0,f=i.position;!f3(B)&&B!==0;)B=i.input.charCodeAt(++i.position);ik(i,f,i.position,!1)}return!0}function rNt(i,a){var f,p=i.tag,v=i.anchor,m=[],b,E=!1,_;if(i.firstTabInLine!==-1)return!1;for(i.anchor!==null&&(i.anchorMap[i.anchor]=m),_=i.input.charCodeAt(i.position);_!==0&&(i.firstTabInLine!==-1&&(i.position=i.firstTabInLine,_s(i,"tab characters must not be used in indentation")),!(_!==45||(b=i.input.charCodeAt(i.position+1),!lp(b))));){if(E=!0,i.position++,Df(i,!0,-1)&&i.lineIndent<=a){m.push(null),_=i.input.charCodeAt(i.position);continue}if(f=i.line,YA(i,a,UOt,!1,!0),m.push(i.result),Df(i,!0,-1),_=i.input.charCodeAt(i.position),(i.line===f||i.lineIndent>a)&&_!==0)_s(i,"bad indentation of a sequence entry");else if(i.lineIndent<a)break}return E?(i.tag=p,i.anchor=v,i.kind="sequence",i.result=m,!0):!1}function KLe(i,a,f){var p,v,m,b,E,_,L=i.tag,N=i.anchor,B={},j=Object.create(null),R=null,z=null,K=null,it=!1,st=!1,ut;if(i.firstTabInLine!==-1)return!1;for(i.anchor!==null&&(i.anchorMap[i.anchor]=B),ut=i.input.charCodeAt(i.position);ut!==0;){if(!it&&i.firstTabInLine!==-1&&(i.position=i.firstTabInLine,_s(i,"tab characters must not be used in indentation")),p=i.input.charCodeAt(i.position+1),m=i.line,(ut===63||ut===58)&&lp(p))ut===63?(it&&(KA(i,B,j,R,z,null,b,E,_),R=z=K=null),st=!0,it=!0,v=!0):it?(it=!1,v=!0):_s(i,"incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line"),i.position+=1,ut=p;else{if(b=i.line,E=i.lineStart,_=i.position,!YA(i,f,VOt,!1,!0))break;if(i.line===m){for(ut=i.input.charCodeAt(i.position);lT(ut);)ut=i.input.charCodeAt(++i.position);if(ut===58)ut=i.input.charCodeAt(++i.position),lp(ut)||_s(i,"a whitespace character is expected after the key-value separator within a block mapping"),it&&(KA(i,B,j,R,z,null,b,E,_),R=z=K=null),st=!0,it=!1,v=!1,R=i.tag,z=i.result;else if(st)_s(i,"can not read an implicit mapping pair; a colon is missed");else return i.tag=L,i.anchor=N,!0}else if(st)_s(i,"can not read a block mapping entry; a multiline key may not be an implicit key");else return i.tag=L,i.anchor=N,!0}if((i.line===m||i.lineIndent>a)&&(it&&(b=i.line,E=i.lineStart,_=i.position),YA(i,a,FW,!0,v)&&(it?z=i.result:K=i.result),it||(KA(i,B,j,R,z,K,b,E,_),R=z=K=null),Df(i,!0,-1),ut=i.input.charCodeAt(i.position)),(i.line===m||i.lineIndent>a)&&ut!==0)_s(i,"bad indentation of a mapping entry");else if(i.lineIndent<a)break}return it&&KA(i,B,j,R,z,null,b,E,_),st&&(i.tag=L,i.anchor=N,i.kind="mapping",i.result=B),st}function YLe(i){var a,f=!1,p=!1,v,m,b;if(b=i.input.charCodeAt(i.position),b!==33)return!1;if(i.tag!==null&&_s(i,"duplication of a tag property"),b=i.input.charCodeAt(++i.position),b===60?(f=!0,b=i.input.charCodeAt(++i.position)):b===33?(p=!0,v="!!",b=i.input.charCodeAt(++i.position)):v="!",a=i.position,f){do b=i.input.charCodeAt(++i.position);while(b!==0&&b!==62);i.position<i.length?(m=i.input.slice(a,i.position),b=i.input.charCodeAt(++i.position)):_s(i,"unexpected end of the stream within a verbatim tag")}else{for(;b!==0&&!lp(b);)b===33&&(p?_s(i,"tag suffix cannot contain exclamation marks"):(v=i.input.slice(a-1,i.position+1),KOt.test(v)||_s(i,"named tag handle cannot contain such characters"),p=!0,a=i.position+1)),b=i.input.charCodeAt(++i.position);m=i.input.slice(a,i.position),BLe.test(m)&&_s(i,"tag suffix cannot contain flow indicator characters")}m&&!YOt.test(m)&&_s(i,"tag name cannot contain such characters: "+m);try{m=decodeURIComponent(m)}catch{_s(i,"tag name is malformed: "+m)}return f?i.tag=m:rk.call(i.tagMap,v)?i.tag=i.tagMap[v]+m:v==="!"?i.tag="!"+m:v==="!!"?i.tag="tag:yaml.org,2002:"+m:_s(i,'undeclared tag handle "'+v+'"'),!0}function XLe(i){var a,f;if(f=i.input.charCodeAt(i.position),f!==38)return!1;for(i.anchor!==null&&_s(i,"duplication of an anchor property"),f=i.input.charCodeAt(++i.position),a=i.position;f!==0&&!lp(f)&&!UA(f);)f=i.input.charCodeAt(++i.position);return i.position===a&&_s(i,"name of an anchor node must contain at least one character"),i.anchor=i.input.slice(a,i.position),!0}function QLe(i){var a,f,p;if(p=i.input.charCodeAt(i.position),p!==42)return!1;for(p=i.input.charCodeAt(++i.position),a=i.position;p!==0&&!lp(p)&&!UA(p);)p=i.input.charCodeAt(++i.position);return i.position===a&&_s(i,"name of an alias node must contain at least one character"),f=i.input.slice(a,i.position),rk.call(i.anchorMap,f)||_s(i,'unidentified alias "'+f+'"'),i.result=i.anchorMap[f],Df(i,!0,-1),!0}function YA(i,a,f,p,v){var m,b,E,_=1,L=!1,N=!1,B,j,R,z,K,it;if(i.listener!==null&&i.listener("open",i),i.tag=null,i.anchor=null,i.kind=null,i.result=null,m=b=E=FW===f||UOt===f,p&&Df(i,!0,-1)&&(L=!0,i.lineIndent>a?_=1:i.lineIndent===a?_=0:i.lineIndent<a&&(_=-1)),_===1)for(;YLe(i)||XLe(i);)Df(i,!0,-1)?(L=!0,E=m,i.lineIndent>a?_=1:i.lineIndent===a?_=0:i.lineIndent<a&&(_=-1)):E=!1;if(E&&(E=L||v),(_===1||FW===f)&&(PW===f||VOt===f?K=a:K=a+1,it=i.position-i.lineStart,_===1?E&&(rNt(i,it)||KLe(i,it,K))||ULe(i,K)?N=!0:(b&&WLe(i,K)||GLe(i,K)||VLe(i,K)?N=!0:QLe(i)?(N=!0,(i.tag!==null||i.anchor!==null)&&_s(i,"alias node should not have any properties")):HLe(i,K,PW===f)&&(N=!0,i.tag===null&&(i.tag="?")),i.anchor!==null&&(i.anchorMap[i.anchor]=i.result)):_===0&&(N=E&&rNt(i,it))),i.tag===null)i.anchor!==null&&(i.anchorMap[i.anchor]=i.result);else if(i.tag==="?"){for(i.result!==null&&i.kind!=="scalar"&&_s(i,'unacceptable node kind for !<?> tag; it should be "scalar", not "'+i.kind+'"'),B=0,j=i.implicitTypes.length;B<j;B+=1)if(z=i.implicitTypes[B],z.resolve(i.result)){i.result=z.construct(i.result),i.tag=z.tag,i.anchor!==null&&(i.anchorMap[i.anchor]=i.result);break}}else if(i.tag!=="!"){if(rk.call(i.typeMap[i.kind||"fallback"],i.tag))z=i.typeMap[i.kind||"fallback"][i.tag];else for(z=null,R=i.typeMap.multi[i.kind||"fallback"],B=0,j=R.length;B<j;B+=1)if(i.tag.slice(0,R[B].tag.length)===R[B].tag){z=R[B];break}z||_s(i,"unknown tag !<"+i.tag+">"),i.result!==null&&z.kind!==i.kind&&_s(i,"unacceptable node kind for !<"+i.tag+'> tag; it should be "'+z.kind+'", not "'+i.kind+'"'),z.resolve(i.result,i.tag)?(i.result=z.construct(i.result,i.tag),i.anchor!==null&&(i.anchorMap[i.anchor]=i.result)):_s(i,"cannot resolve a node with !<"+i.tag+"> explicit tag")}return i.listener!==null&&i.listener("close",i),i.tag!==null||i.anchor!==null||N}function ZLe(i){var a=i.position,f,p,v,m=!1,b;for(i.version=null,i.checkLineBreaks=i.legacy,i.tagMap=Object.create(null),i.anchorMap=Object.create(null);(b=i.input.charCodeAt(i.position))!==0&&(Df(i,!0,-1),b=i.input.charCodeAt(i.position),!(i.lineIndent>0||b!==37));){for(m=!0,b=i.input.charCodeAt(++i.position),f=i.position;b!==0&&!lp(b);)b=i.input.charCodeAt(++i.position);for(p=i.input.slice(f,i.position),v=[],p.length<1&&_s(i,"directive name must not be less than one character in length");b!==0;){for(;lT(b);)b=i.input.charCodeAt(++i.position);if(b===35){do b=i.input.charCodeAt(++i.position);while(b!==0&&!f3(b));break}if(f3(b))break;for(f=i.position;b!==0&&!lp(b);)b=i.input.charCodeAt(++i.position);v.push(i.input.slice(f,i.position))}b!==0&&Ldt(i),rk.call(eNt,p)?eNt[p](i,p,v):BW(i,'unknown document directive "'+p+'"')}if(Df(i,!0,-1),i.lineIndent===0&&i.input.charCodeAt(i.position)===45&&i.input.charCodeAt(i.position+1)===45&&i.input.charCodeAt(i.position+2)===45?(i.position+=3,Df(i,!0,-1)):m&&_s(i,"directives end mark is expected"),YA(i,i.lineIndent-1,FW,!1,!0),Df(i,!0,-1),i.checkLineBreaks&&FLe.test(i.input.slice(a,i.position))&&BW(i,"non-ASCII line breaks are interpreted as content"),i.documents.push(i.result),i.position===i.lineStart&&RW(i)){i.input.charCodeAt(i.position)===46&&(i.position+=3,Df(i,!0,-1));return}if(i.position<i.length-1)_s(i,"end of the stream or a document separator is expected");else return}function iNt(i,a){i=String(i),a=a||{},i.length!==0&&(i.charCodeAt(i.length-1)!==10&&i.charCodeAt(i.length-1)!==13&&(i+=`
`),i.charCodeAt(0)===65279&&(i=i.slice(1)));var f=new qLe(i,a),p=i.indexOf("\0");for(p!==-1&&(f.position=p,_s(f,"null byte is not allowed in input")),f.input+="\0";f.input.charCodeAt(f.position)===32;)f.lineIndent+=1,f.position+=1;for(;f.position<f.length-1;)ZLe(f);return f.documents}function JLe(i,a,f){a!==null&&typeof a=="object"&&typeof f>"u"&&(f=a,a=null);var p=iNt(i,f);if(typeof a!="function")return p;for(var v=0,m=p.length;v<m;v+=1)a(p[v])}function tMe(i,a){var f=iNt(i,a);if(f.length!==0){if(f.length===1)return f[0];throw new x5("expected a single document in the stream, but found more")}}var eMe=JLe,nMe=tMe,rMe={loadAll:eMe,load:nMe},iMe=qOt,sMe=rMe.load;function aMe(i){const a=i.match(sDt);if(!a)return{text:i,metadata:{}};let f=sMe(a[1],{schema:iMe})??{};f=typeof f=="object"&&!Array.isArray(f)?f:{};const p={};return f.displayMode&&(p.displayMode=f.displayMode.toString()),f.title&&(p.title=f.title.toString()),f.config&&(p.config=f.config),{text:i.slice(a[0].length),metadata:p}}const oMe=i=>i.replace(/\r\n?/g,`
`).replace(/<(\w+)([^>]*)>/g,(a,f,p)=>"<"+f+p.replace(/="([^"]*)"/g,"='$1'")+">"),cMe=i=>{const{text:a,metadata:f}=aMe(i),{displayMode:p,title:v,config:m={}}=f;return p&&(m.gantt||(m.gantt={}),m.gantt.displayMode=p),{title:v,config:m,text:a}},uMe=i=>{const a=$a.detectInit(i)??{},f=$a.detectDirective(i,"wrap");return Array.isArray(f)?a.wrap=f.some(({type:p})=>{}):(f==null?void 0:f.type)==="wrap"&&(a.wrap=!0),{text:O_e(i),directive:a}};function lMe(i){const a=oMe(i),f=cMe(a),p=uMe(f.text),v=idt(f.config,p.directive);return i=bAe(p.text),{code:i,title:f.title,config:v}}const hMe=5e4,fMe="graph TB;a[Maximum text size in diagram exceeded];style a fill:#faa",dMe="sandbox",gMe="loose",pMe="http://www.w3.org/2000/svg",bMe="http://www.w3.org/1999/xlink",vMe="http://www.w3.org/1999/xhtml",wMe="100%",mMe="100%",yMe="border:0;margin:0;",xMe="margin:0",kMe="allow-top-navigation-by-user-activation allow-popups",EMe='The "iframe" tag is not supported by your browser.',TMe=["foreignobject"],CMe=["dominant-baseline"];function sNt(i){const a=lMe(i);return IW(),fSe(a.config??{}),a}async function _Me(i,a){wdt(),i=sNt(i).code;try{await mdt(i)}catch(f){if(a!=null&&a.suppressErrors)return!1;throw f}return!0}const SMe=function(i){let a=i;return a=a.replace(/style.*:\S*#.*;/g,function(f){return f.substring(0,f.length-1)}),a=a.replace(/classDef.*:\S*#.*;/g,function(f){return f.substring(0,f.length-1)}),a=a.replace(/#\w+;/g,function(f){const p=f.substring(1,f.length-1);return/^\+?\d+$/.test(p)?"ﬂ°°"+p+"¶ß":"ﬂ°"+p+"¶ß"}),a},nP=function(i){return i.replace(/ﬂ°°/g,"&#").replace(/ﬂ°/g,"&").replace(/¶ß/g,";")},aNt=(i,a,f=[])=>`
.${i} ${a} { ${f.join(" !important; ")} !important; }`,AMe=(i,a={})=>{var p;let f="";if(i.themeCSS!==void 0&&(f+=`
${i.themeCSS}`),i.fontFamily!==void 0&&(f+=`
:root { --mermaid-font-family: ${i.fontFamily}}`),i.altFontFamily!==void 0&&(f+=`
:root { --mermaid-alt-font-family: ${i.altFontFamily}}`),!tP(a)){const E=i.htmlLabels||((p=i.flowchart)==null?void 0:p.htmlLabels)?["> *","span"]:["rect","polygon","ellipse","circle","path"];for(const _ in a){const L=a[_];tP(L.styles)||E.forEach(N=>{f+=aNt(L.id,N,L.styles)}),tP(L.textStyles)||(f+=aNt(L.id,"tspan",L.textStyles))}}return f},LMe=(i,a,f,p)=>{const v=AMe(i,f),m=zSe(a,v,i.themeVariables);return hdt(aSe(`${p}{${m}}`),cSe)},MMe=(i="",a,f)=>{let p=i;return!f&&!a&&(p=p.replace(/marker-end="url\([\d+./:=?A-Za-z-]*?#/g,'marker-end="url(#')),p=nP(p),p=p.replace(/<br>/g,"<br/>"),p},IMe=(i="",a)=>{var v,m;const f=(m=(v=a==null?void 0:a.viewBox)==null?void 0:v.baseVal)!=null&&m.height?a.viewBox.baseVal.height+"px":mMe,p=btoa('<body style="'+xMe+'">'+i+"</body>");return`<iframe style="width:${wMe};height:${f};${yMe}" src="data:text/html;base64,${p}" sandbox="${kMe}">
  ${EMe}
</iframe>`},oNt=(i,a,f,p,v)=>{const m=i.append("div");m.attr("id",f),p&&m.attr("style",p);const b=m.append("svg").attr("id",a).attr("width","100%").attr("xmlns",pMe);return v&&b.attr("xmlns:xlink",v),b.append("g"),i};function cNt(i,a){return i.append("iframe").attr("id",a).attr("style","width: 100%; height: 100%;").attr("sandbox","")}const DMe=(i,a,f,p)=>{var v,m,b;(v=i.getElementById(a))==null||v.remove(),(m=i.getElementById(f))==null||m.remove(),(b=i.getElementById(p))==null||b.remove()},OMe=async function(i,a,f){var nt,Ot,Nt,qt,Ct,Z;wdt();const p=sNt(a);a=p.code;const v=Le();Ut.debug(v),a.length>((v==null?void 0:v.maxTextSize)??hMe)&&(a=fMe);const m="#"+i,b="i"+i,E="#"+b,_="d"+i,L="#"+_;let N=yr("body");const B=v.securityLevel===dMe,j=v.securityLevel===gMe,R=v.fontFamily;if(f!==void 0){if(f&&(f.innerHTML=""),B){const Tt=cNt(yr(f),b);N=yr(Tt.nodes()[0].contentDocument.body),N.node().style.margin=0}else N=yr(f);oNt(N,i,_,`font-family: ${R}`,bMe)}else{if(DMe(document,i,_,b),B){const Tt=cNt(yr("body"),b);N=yr(Tt.nodes()[0].contentDocument.body),N.node().style.margin=0}else N=yr("body");oNt(N,i,_)}a=SMe(a);let z,K;try{z=await mdt(a,{title:p.title})}catch(Tt){z=new DOt("error"),K=Tt}const it=N.select(L).node(),st=z.type,ut=it.firstChild,bt=ut.firstChild,mt=(Ot=(nt=z.renderer).getClasses)==null?void 0:Ot.call(nt,a,z),yt=LMe(v,st,mt,m),dt=document.createElement("style");dt.innerHTML=yt,ut.insertBefore(dt,bt);try{await z.renderer.draw(a,i,eOt,z)}catch(Tt){throw OSe.draw(a,i,eOt),Tt}const ht=N.select(`${L} svg`),wt=(qt=(Nt=z.db).getAccTitle)==null?void 0:qt.call(Nt),X=(Z=(Ct=z.db).getAccDescription)==null?void 0:Z.call(Ct);PMe(st,ht,wt,X),N.select(`[id="${i}"]`).selectAll("foreignobject > *").attr("xmlns",vMe);let pt=N.select(L).node().innerHTML;if(Ut.debug("config.arrowMarkerAbsolute",v.arrowMarkerAbsolute),pt=MMe(pt,B,s1(v.arrowMarkerAbsolute)),B){const Tt=N.select(L+" svg").node();pt=IMe(pt,Tt)}else j||(pt=eW.sanitize(pt,{ADD_TAGS:TMe,ADD_ATTR:CMe}));if(KSe(),K)throw K;const xt=yr(B?E:L).node();return xt&&"remove"in xt&&xt.remove(),{svg:pt,bindFunctions:z.db.bindFunctions}};function NMe(i={}){var f;i!=null&&i.fontFamily&&!((f=i.themeVariables)!=null&&f.fontFamily)&&(i.themeVariables||(i.themeVariables={}),i.themeVariables.fontFamily=i.fontFamily),lSe(i),i!=null&&i.theme&&i.theme in w5?i.themeVariables=w5[i.theme].getThemeVariables(i.themeVariables):i&&(i.themeVariables=w5.default.getThemeVariables(i.themeVariables));const a=typeof i=="object"?uSe(i):rOt();jft(a.logLevel),wdt()}function PMe(i,a,f,p){gAe(a,i),pAe(a,f,p,a.attr("id"))}const hT=Object.freeze({render:OMe,parse:_Me,getDiagramFromText:mdt,initialize:NMe,getConfig:Le,setConfig:iOt,getSiteConfig:rOt,updateSiteConfig:hSe,reset:()=>{IW()},globalReset:()=>{IW(oT)},defaultConfig:oT});jft(Le().logLevel),IW(Le());const FMe=async()=>{Ut.debug("Loading registered diagrams");const a=(await Promise.allSettled(Object.entries(DA).map(async([f,{detector:p,loader:v}])=>{if(v)try{vdt(f)}catch{try{const{diagram:b,id:E}=await v();NW(E,b,p)}catch(b){throw Ut.error(`Failed to load external diagram with key ${f}. Removing from detectors.`),delete DA[f],b}}}))).filter(f=>f.status==="rejected");if(a.length>0){Ut.error(`Failed to load ${a.length} external diagrams`);for(const f of a)Ut.error(f);throw new Error(`Failed to load ${a.length} external diagrams`)}},BMe=(i,a,f)=>{Ut.warn(i),UDt(i)?(f&&f(i.str,i.hash),a.push({...i,message:i.str,error:i})):(f&&f(i),i instanceof Error&&a.push({str:i.message,message:i.message,hash:i.name,error:i}))},uNt=async function(i={querySelector:".mermaid"}){try{await RMe(i)}catch(a){if(UDt(a)&&Ut.error(a.str),Ob.parseError&&Ob.parseError(a),!i.suppressErrors)throw Ut.error("Use the suppressErrors option to suppress these errors"),a}},RMe=async function({postRenderCallback:i,querySelector:a,nodes:f}={querySelector:".mermaid"}){const p=hT.getConfig();Ut.debug(`${i?"":"No "}Callback function found`);let v;if(f)v=f;else if(a)v=document.querySelectorAll(a);else throw new Error("Nodes and querySelector are both undefined");Ut.debug(`Found ${v.length} diagrams`),(p==null?void 0:p.startOnLoad)!==void 0&&(Ut.debug("Start On Load: "+(p==null?void 0:p.startOnLoad)),hT.updateSiteConfig({startOnLoad:p==null?void 0:p.startOnLoad}));const m=new $a.InitIDGenerator(p.deterministicIds,p.deterministicIDSeed);let b;const E=[];for(const _ of Array.from(v)){Ut.info("Rendering diagram: "+_.id);/*! Check if previously processed */if(_.getAttribute("data-processed"))continue;_.setAttribute("data-processed","true");const L=`mermaid-${m.next()}`;b=_.innerHTML,b=wA($a.entityDecode(b)).trim().replace(/<br\s*\/?>/gi,"<br/>");const N=$a.detectInit(b);N&&Ut.debug("Detected early reinit: ",N);try{const{svg:B,bindFunctions:j}=await dNt(L,b,_);_.innerHTML=B,i&&await i(L),j&&j(_)}catch(B){BMe(B,E,Ob.parseError)}}if(E.length>0)throw E[0]},lNt=function(i){hT.initialize(i)},jMe=async function(i,a,f){Ut.warn("mermaid.init is deprecated. Please use run instead."),i&&lNt(i);const p={postRenderCallback:f,querySelector:".mermaid"};typeof a=="string"?p.querySelector=a:a&&(a instanceof HTMLElement?p.nodes=[a]:p.nodes=a),await uNt(p)},$Me=async(i,{lazyLoad:a=!0}={})=>{oDt(...i),a===!1&&await FMe()},hNt=function(){if(Ob.startOnLoad){const{startOnLoad:i}=hT.getConfig();i&&Ob.run().catch(a=>Ut.error("Mermaid failed to initialize",a))}};if(typeof document<"u"){/*!
 * Wait for document loaded before starting the execution
 */window.addEventListener("load",hNt,!1)}const zMe=function(i){Ob.parseError=i},jW=[];let Idt=!1;const fNt=async()=>{if(!Idt){for(Idt=!0;jW.length>0;){const i=jW.shift();if(i)try{await i()}catch(a){Ut.error("Error executing queue",a)}}Idt=!1}},qMe=async(i,a)=>new Promise((f,p)=>{const v=()=>new Promise((m,b)=>{hT.parse(i,a).then(E=>{m(E),f(E)},E=>{var _;Ut.error("Error parsing",E),(_=Ob.parseError)==null||_.call(Ob,E),b(E),p(E)})});jW.push(v),fNt().catch(p)}),dNt=(i,a,f)=>new Promise((p,v)=>{const m=()=>new Promise((b,E)=>{hT.render(i,a,f).then(_=>{b(_),p(_)},_=>{var L;Ut.error("Error parsing",_),(L=Ob.parseError)==null||L.call(Ob,_),E(_),v(_)})});jW.push(m),fNt().catch(v)}),Ob={startOnLoad:!0,mermaidAPI:hT,parse:qMe,render:dNt,init:jMe,run:uNt,registerExternalDiagrams:$Me,initialize:lNt,parseError:void 0,contentLoaded:hNt,setParseErrorHandler:zMe,detectType:hW};var $W=function(){var i=function(ds,Dr,nr,di){for(nr=nr||{},di=ds.length;di--;nr[ds[di]]=Dr);return nr},a=[1,24],f=[1,25],p=[1,26],v=[1,27],m=[1,28],b=[1,63],E=[1,64],_=[1,65],L=[1,66],N=[1,67],B=[1,68],j=[1,69],R=[1,29],z=[1,30],K=[1,31],it=[1,32],st=[1,33],ut=[1,34],bt=[1,35],mt=[1,36],yt=[1,37],dt=[1,38],ht=[1,39],wt=[1,40],X=[1,41],pt=[1,42],U=[1,43],xt=[1,44],nt=[1,45],Ot=[1,46],Nt=[1,47],qt=[1,48],Ct=[1,50],Z=[1,51],Tt=[1,52],Ht=[1,53],It=[1,54],Ft=[1,55],ke=[1,56],pn=[1,57],Me=[1,58],ve=[1,59],Ge=[1,60],Ke=[14,42],we=[14,34,36,37,38,39,40,41,42,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],_e=[12,14,34,36,37,38,39,40,41,42,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],$t=[1,82],re=[1,83],ie=[1,84],Oe=[1,85],oe=[12,14,42],Ne=[12,14,33,42],me=[12,14,33,42,76,77,79,80],cn=[12,33],li=[34,36,37,38,39,40,41,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],ya={trace:function(){},yy:{},symbols_:{error:2,start:3,mermaidDoc:4,direction:5,direction_tb:6,direction_bt:7,direction_rl:8,direction_lr:9,graphConfig:10,C4_CONTEXT:11,NEWLINE:12,statements:13,EOF:14,C4_CONTAINER:15,C4_COMPONENT:16,C4_DYNAMIC:17,C4_DEPLOYMENT:18,otherStatements:19,diagramStatements:20,otherStatement:21,title:22,accDescription:23,acc_title:24,acc_title_value:25,acc_descr:26,acc_descr_value:27,acc_descr_multiline_value:28,boundaryStatement:29,boundaryStartStatement:30,boundaryStopStatement:31,boundaryStart:32,LBRACE:33,ENTERPRISE_BOUNDARY:34,attributes:35,SYSTEM_BOUNDARY:36,BOUNDARY:37,CONTAINER_BOUNDARY:38,NODE:39,NODE_L:40,NODE_R:41,RBRACE:42,diagramStatement:43,PERSON:44,PERSON_EXT:45,SYSTEM:46,SYSTEM_DB:47,SYSTEM_QUEUE:48,SYSTEM_EXT:49,SYSTEM_EXT_DB:50,SYSTEM_EXT_QUEUE:51,CONTAINER:52,CONTAINER_DB:53,CONTAINER_QUEUE:54,CONTAINER_EXT:55,CONTAINER_EXT_DB:56,CONTAINER_EXT_QUEUE:57,COMPONENT:58,COMPONENT_DB:59,COMPONENT_QUEUE:60,COMPONENT_EXT:61,COMPONENT_EXT_DB:62,COMPONENT_EXT_QUEUE:63,REL:64,BIREL:65,REL_U:66,REL_D:67,REL_L:68,REL_R:69,REL_B:70,REL_INDEX:71,UPDATE_EL_STYLE:72,UPDATE_REL_STYLE:73,UPDATE_LAYOUT_CONFIG:74,attribute:75,STR:76,STR_KEY:77,STR_VALUE:78,ATTRIBUTE:79,ATTRIBUTE_EMPTY:80,$accept:0,$end:1},terminals_:{2:"error",6:"direction_tb",7:"direction_bt",8:"direction_rl",9:"direction_lr",11:"C4_CONTEXT",12:"NEWLINE",14:"EOF",15:"C4_CONTAINER",16:"C4_COMPONENT",17:"C4_DYNAMIC",18:"C4_DEPLOYMENT",22:"title",23:"accDescription",24:"acc_title",25:"acc_title_value",26:"acc_descr",27:"acc_descr_value",28:"acc_descr_multiline_value",33:"LBRACE",34:"ENTERPRISE_BOUNDARY",36:"SYSTEM_BOUNDARY",37:"BOUNDARY",38:"CONTAINER_BOUNDARY",39:"NODE",40:"NODE_L",41:"NODE_R",42:"RBRACE",44:"PERSON",45:"PERSON_EXT",46:"SYSTEM",47:"SYSTEM_DB",48:"SYSTEM_QUEUE",49:"SYSTEM_EXT",50:"SYSTEM_EXT_DB",51:"SYSTEM_EXT_QUEUE",52:"CONTAINER",53:"CONTAINER_DB",54:"CONTAINER_QUEUE",55:"CONTAINER_EXT",56:"CONTAINER_EXT_DB",57:"CONTAINER_EXT_QUEUE",58:"COMPONENT",59:"COMPONENT_DB",60:"COMPONENT_QUEUE",61:"COMPONENT_EXT",62:"COMPONENT_EXT_DB",63:"COMPONENT_EXT_QUEUE",64:"REL",65:"BIREL",66:"REL_U",67:"REL_D",68:"REL_L",69:"REL_R",70:"REL_B",71:"REL_INDEX",72:"UPDATE_EL_STYLE",73:"UPDATE_REL_STYLE",74:"UPDATE_LAYOUT_CONFIG",76:"STR",77:"STR_KEY",78:"STR_VALUE",79:"ATTRIBUTE",80:"ATTRIBUTE_EMPTY"},productions_:[0,[3,1],[3,1],[5,1],[5,1],[5,1],[5,1],[4,1],[10,4],[10,4],[10,4],[10,4],[10,4],[13,1],[13,1],[13,2],[19,1],[19,2],[19,3],[21,1],[21,1],[21,2],[21,2],[21,1],[29,3],[30,3],[30,3],[30,4],[32,2],[32,2],[32,2],[32,2],[32,2],[32,2],[32,2],[31,1],[20,1],[20,2],[20,3],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,1],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[35,1],[35,2],[75,1],[75,2],[75,1],[75,1]],performAction:function(Dr,nr,di,Ee,Yn,He,Ti){var gn=He.length-1;switch(Yn){case 3:Ee.setDirection("TB");break;case 4:Ee.setDirection("BT");break;case 5:Ee.setDirection("RL");break;case 6:Ee.setDirection("LR");break;case 8:case 9:case 10:case 11:case 12:Ee.setC4Type(He[gn-3]);break;case 19:Ee.setTitle(He[gn].substring(6)),this.$=He[gn].substring(6);break;case 20:Ee.setAccDescription(He[gn].substring(15)),this.$=He[gn].substring(15);break;case 21:this.$=He[gn].trim(),Ee.setTitle(this.$);break;case 22:case 23:this.$=He[gn].trim(),Ee.setAccDescription(this.$);break;case 28:case 29:He[gn].splice(2,0,"ENTERPRISE"),Ee.addPersonOrSystemBoundary(...He[gn]),this.$=He[gn];break;case 30:Ee.addPersonOrSystemBoundary(...He[gn]),this.$=He[gn];break;case 31:He[gn].splice(2,0,"CONTAINER"),Ee.addContainerBoundary(...He[gn]),this.$=He[gn];break;case 32:Ee.addDeploymentNode("node",...He[gn]),this.$=He[gn];break;case 33:Ee.addDeploymentNode("nodeL",...He[gn]),this.$=He[gn];break;case 34:Ee.addDeploymentNode("nodeR",...He[gn]),this.$=He[gn];break;case 35:Ee.popBoundaryParseStack();break;case 39:Ee.addPersonOrSystem("person",...He[gn]),this.$=He[gn];break;case 40:Ee.addPersonOrSystem("external_person",...He[gn]),this.$=He[gn];break;case 41:Ee.addPersonOrSystem("system",...He[gn]),this.$=He[gn];break;case 42:Ee.addPersonOrSystem("system_db",...He[gn]),this.$=He[gn];break;case 43:Ee.addPersonOrSystem("system_queue",...He[gn]),this.$=He[gn];break;case 44:Ee.addPersonOrSystem("external_system",...He[gn]),this.$=He[gn];break;case 45:Ee.addPersonOrSystem("external_system_db",...He[gn]),this.$=He[gn];break;case 46:Ee.addPersonOrSystem("external_system_queue",...He[gn]),this.$=He[gn];break;case 47:Ee.addContainer("container",...He[gn]),this.$=He[gn];break;case 48:Ee.addContainer("container_db",...He[gn]),this.$=He[gn];break;case 49:Ee.addContainer("container_queue",...He[gn]),this.$=He[gn];break;case 50:Ee.addContainer("external_container",...He[gn]),this.$=He[gn];break;case 51:Ee.addContainer("external_container_db",...He[gn]),this.$=He[gn];break;case 52:Ee.addContainer("external_container_queue",...He[gn]),this.$=He[gn];break;case 53:Ee.addComponent("component",...He[gn]),this.$=He[gn];break;case 54:Ee.addComponent("component_db",...He[gn]),this.$=He[gn];break;case 55:Ee.addComponent("component_queue",...He[gn]),this.$=He[gn];break;case 56:Ee.addComponent("external_component",...He[gn]),this.$=He[gn];break;case 57:Ee.addComponent("external_component_db",...He[gn]),this.$=He[gn];break;case 58:Ee.addComponent("external_component_queue",...He[gn]),this.$=He[gn];break;case 60:Ee.addRel("rel",...He[gn]),this.$=He[gn];break;case 61:Ee.addRel("birel",...He[gn]),this.$=He[gn];break;case 62:Ee.addRel("rel_u",...He[gn]),this.$=He[gn];break;case 63:Ee.addRel("rel_d",...He[gn]),this.$=He[gn];break;case 64:Ee.addRel("rel_l",...He[gn]),this.$=He[gn];break;case 65:Ee.addRel("rel_r",...He[gn]),this.$=He[gn];break;case 66:Ee.addRel("rel_b",...He[gn]),this.$=He[gn];break;case 67:He[gn].splice(0,1),Ee.addRel("rel",...He[gn]),this.$=He[gn];break;case 68:Ee.updateElStyle("update_el_style",...He[gn]),this.$=He[gn];break;case 69:Ee.updateRelStyle("update_rel_style",...He[gn]),this.$=He[gn];break;case 70:Ee.updateLayoutConfig("update_layout_config",...He[gn]),this.$=He[gn];break;case 71:this.$=[He[gn]];break;case 72:He[gn].unshift(He[gn-1]),this.$=He[gn];break;case 73:case 75:this.$=He[gn].trim();break;case 74:let ks={};ks[He[gn-1].trim()]=He[gn].trim(),this.$=ks;break;case 76:this.$="";break}},table:[{3:1,4:2,5:3,6:[1,5],7:[1,6],8:[1,7],9:[1,8],10:4,11:[1,9],15:[1,10],16:[1,11],17:[1,12],18:[1,13]},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,7]},{1:[2,3]},{1:[2,4]},{1:[2,5]},{1:[2,6]},{12:[1,14]},{12:[1,15]},{12:[1,16]},{12:[1,17]},{12:[1,18]},{13:19,19:20,20:21,21:22,22:a,23:f,24:p,26:v,28:m,29:49,30:61,32:62,34:b,36:E,37:_,38:L,39:N,40:B,41:j,43:23,44:R,45:z,46:K,47:it,48:st,49:ut,50:bt,51:mt,52:yt,53:dt,54:ht,55:wt,56:X,57:pt,58:U,59:xt,60:nt,61:Ot,62:Nt,63:qt,64:Ct,65:Z,66:Tt,67:Ht,68:It,69:Ft,70:ke,71:pn,72:Me,73:ve,74:Ge},{13:70,19:20,20:21,21:22,22:a,23:f,24:p,26:v,28:m,29:49,30:61,32:62,34:b,36:E,37:_,38:L,39:N,40:B,41:j,43:23,44:R,45:z,46:K,47:it,48:st,49:ut,50:bt,51:mt,52:yt,53:dt,54:ht,55:wt,56:X,57:pt,58:U,59:xt,60:nt,61:Ot,62:Nt,63:qt,64:Ct,65:Z,66:Tt,67:Ht,68:It,69:Ft,70:ke,71:pn,72:Me,73:ve,74:Ge},{13:71,19:20,20:21,21:22,22:a,23:f,24:p,26:v,28:m,29:49,30:61,32:62,34:b,36:E,37:_,38:L,39:N,40:B,41:j,43:23,44:R,45:z,46:K,47:it,48:st,49:ut,50:bt,51:mt,52:yt,53:dt,54:ht,55:wt,56:X,57:pt,58:U,59:xt,60:nt,61:Ot,62:Nt,63:qt,64:Ct,65:Z,66:Tt,67:Ht,68:It,69:Ft,70:ke,71:pn,72:Me,73:ve,74:Ge},{13:72,19:20,20:21,21:22,22:a,23:f,24:p,26:v,28:m,29:49,30:61,32:62,34:b,36:E,37:_,38:L,39:N,40:B,41:j,43:23,44:R,45:z,46:K,47:it,48:st,49:ut,50:bt,51:mt,52:yt,53:dt,54:ht,55:wt,56:X,57:pt,58:U,59:xt,60:nt,61:Ot,62:Nt,63:qt,64:Ct,65:Z,66:Tt,67:Ht,68:It,69:Ft,70:ke,71:pn,72:Me,73:ve,74:Ge},{13:73,19:20,20:21,21:22,22:a,23:f,24:p,26:v,28:m,29:49,30:61,32:62,34:b,36:E,37:_,38:L,39:N,40:B,41:j,43:23,44:R,45:z,46:K,47:it,48:st,49:ut,50:bt,51:mt,52:yt,53:dt,54:ht,55:wt,56:X,57:pt,58:U,59:xt,60:nt,61:Ot,62:Nt,63:qt,64:Ct,65:Z,66:Tt,67:Ht,68:It,69:Ft,70:ke,71:pn,72:Me,73:ve,74:Ge},{14:[1,74]},i(Ke,[2,13],{43:23,29:49,30:61,32:62,20:75,34:b,36:E,37:_,38:L,39:N,40:B,41:j,44:R,45:z,46:K,47:it,48:st,49:ut,50:bt,51:mt,52:yt,53:dt,54:ht,55:wt,56:X,57:pt,58:U,59:xt,60:nt,61:Ot,62:Nt,63:qt,64:Ct,65:Z,66:Tt,67:Ht,68:It,69:Ft,70:ke,71:pn,72:Me,73:ve,74:Ge}),i(Ke,[2,14]),i(we,[2,16],{12:[1,76]}),i(Ke,[2,36],{12:[1,77]}),i(_e,[2,19]),i(_e,[2,20]),{25:[1,78]},{27:[1,79]},i(_e,[2,23]),{35:80,75:81,76:$t,77:re,79:ie,80:Oe},{35:86,75:81,76:$t,77:re,79:ie,80:Oe},{35:87,75:81,76:$t,77:re,79:ie,80:Oe},{35:88,75:81,76:$t,77:re,79:ie,80:Oe},{35:89,75:81,76:$t,77:re,79:ie,80:Oe},{35:90,75:81,76:$t,77:re,79:ie,80:Oe},{35:91,75:81,76:$t,77:re,79:ie,80:Oe},{35:92,75:81,76:$t,77:re,79:ie,80:Oe},{35:93,75:81,76:$t,77:re,79:ie,80:Oe},{35:94,75:81,76:$t,77:re,79:ie,80:Oe},{35:95,75:81,76:$t,77:re,79:ie,80:Oe},{35:96,75:81,76:$t,77:re,79:ie,80:Oe},{35:97,75:81,76:$t,77:re,79:ie,80:Oe},{35:98,75:81,76:$t,77:re,79:ie,80:Oe},{35:99,75:81,76:$t,77:re,79:ie,80:Oe},{35:100,75:81,76:$t,77:re,79:ie,80:Oe},{35:101,75:81,76:$t,77:re,79:ie,80:Oe},{35:102,75:81,76:$t,77:re,79:ie,80:Oe},{35:103,75:81,76:$t,77:re,79:ie,80:Oe},{35:104,75:81,76:$t,77:re,79:ie,80:Oe},i(oe,[2,59]),{35:105,75:81,76:$t,77:re,79:ie,80:Oe},{35:106,75:81,76:$t,77:re,79:ie,80:Oe},{35:107,75:81,76:$t,77:re,79:ie,80:Oe},{35:108,75:81,76:$t,77:re,79:ie,80:Oe},{35:109,75:81,76:$t,77:re,79:ie,80:Oe},{35:110,75:81,76:$t,77:re,79:ie,80:Oe},{35:111,75:81,76:$t,77:re,79:ie,80:Oe},{35:112,75:81,76:$t,77:re,79:ie,80:Oe},{35:113,75:81,76:$t,77:re,79:ie,80:Oe},{35:114,75:81,76:$t,77:re,79:ie,80:Oe},{35:115,75:81,76:$t,77:re,79:ie,80:Oe},{20:116,29:49,30:61,32:62,34:b,36:E,37:_,38:L,39:N,40:B,41:j,43:23,44:R,45:z,46:K,47:it,48:st,49:ut,50:bt,51:mt,52:yt,53:dt,54:ht,55:wt,56:X,57:pt,58:U,59:xt,60:nt,61:Ot,62:Nt,63:qt,64:Ct,65:Z,66:Tt,67:Ht,68:It,69:Ft,70:ke,71:pn,72:Me,73:ve,74:Ge},{12:[1,118],33:[1,117]},{35:119,75:81,76:$t,77:re,79:ie,80:Oe},{35:120,75:81,76:$t,77:re,79:ie,80:Oe},{35:121,75:81,76:$t,77:re,79:ie,80:Oe},{35:122,75:81,76:$t,77:re,79:ie,80:Oe},{35:123,75:81,76:$t,77:re,79:ie,80:Oe},{35:124,75:81,76:$t,77:re,79:ie,80:Oe},{35:125,75:81,76:$t,77:re,79:ie,80:Oe},{14:[1,126]},{14:[1,127]},{14:[1,128]},{14:[1,129]},{1:[2,8]},i(Ke,[2,15]),i(we,[2,17],{21:22,19:130,22:a,23:f,24:p,26:v,28:m}),i(Ke,[2,37],{19:20,20:21,21:22,43:23,29:49,30:61,32:62,13:131,22:a,23:f,24:p,26:v,28:m,34:b,36:E,37:_,38:L,39:N,40:B,41:j,44:R,45:z,46:K,47:it,48:st,49:ut,50:bt,51:mt,52:yt,53:dt,54:ht,55:wt,56:X,57:pt,58:U,59:xt,60:nt,61:Ot,62:Nt,63:qt,64:Ct,65:Z,66:Tt,67:Ht,68:It,69:Ft,70:ke,71:pn,72:Me,73:ve,74:Ge}),i(_e,[2,21]),i(_e,[2,22]),i(oe,[2,39]),i(Ne,[2,71],{75:81,35:132,76:$t,77:re,79:ie,80:Oe}),i(me,[2,73]),{78:[1,133]},i(me,[2,75]),i(me,[2,76]),i(oe,[2,40]),i(oe,[2,41]),i(oe,[2,42]),i(oe,[2,43]),i(oe,[2,44]),i(oe,[2,45]),i(oe,[2,46]),i(oe,[2,47]),i(oe,[2,48]),i(oe,[2,49]),i(oe,[2,50]),i(oe,[2,51]),i(oe,[2,52]),i(oe,[2,53]),i(oe,[2,54]),i(oe,[2,55]),i(oe,[2,56]),i(oe,[2,57]),i(oe,[2,58]),i(oe,[2,60]),i(oe,[2,61]),i(oe,[2,62]),i(oe,[2,63]),i(oe,[2,64]),i(oe,[2,65]),i(oe,[2,66]),i(oe,[2,67]),i(oe,[2,68]),i(oe,[2,69]),i(oe,[2,70]),{31:134,42:[1,135]},{12:[1,136]},{33:[1,137]},i(cn,[2,28]),i(cn,[2,29]),i(cn,[2,30]),i(cn,[2,31]),i(cn,[2,32]),i(cn,[2,33]),i(cn,[2,34]),{1:[2,9]},{1:[2,10]},{1:[2,11]},{1:[2,12]},i(we,[2,18]),i(Ke,[2,38]),i(Ne,[2,72]),i(me,[2,74]),i(oe,[2,24]),i(oe,[2,35]),i(li,[2,25]),i(li,[2,26],{12:[1,138]}),i(li,[2,27])],defaultActions:{2:[2,1],3:[2,2],4:[2,7],5:[2,3],6:[2,4],7:[2,5],8:[2,6],74:[2,8],126:[2,9],127:[2,10],128:[2,11],129:[2,12]},parseError:function(Dr,nr){if(nr.recoverable)this.trace(Dr);else{var di=new Error(Dr);throw di.hash=nr,di}},parse:function(Dr){var nr=this,di=[0],Ee=[],Yn=[null],He=[],Ti=this.table,gn="",ks=0,qa=0,La=2,Gs=1,No=He.slice.call(arguments,1),vs=Object.create(this.lexer),nu={yy:{}};for(var $s in this.yy)Object.prototype.hasOwnProperty.call(this.yy,$s)&&(nu.yy[$s]=this.yy[$s]);vs.setInput(Dr,nu.yy),nu.yy.lexer=vs,nu.yy.parser=this,typeof vs.yylloc>"u"&&(vs.yylloc={});var Lu=vs.yylloc;He.push(Lu);var fm=vs.options&&vs.options.ranges;typeof nu.yy.parseError=="function"?this.parseError=nu.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function av(){var Ll;return Ll=Ee.pop()||vs.lex()||Gs,typeof Ll!="number"&&(Ll instanceof Array&&(Ee=Ll,Ll=Ee.pop()),Ll=nr.symbols_[Ll]||Ll),Ll}for(var Uu,Zl,Pa,Al,ua={},bc,Cc,ga,Ma;;){if(Zl=di[di.length-1],this.defaultActions[Zl]?Pa=this.defaultActions[Zl]:((Uu===null||typeof Uu>"u")&&(Uu=av()),Pa=Ti[Zl]&&Ti[Zl][Uu]),typeof Pa>"u"||!Pa.length||!Pa[0]){var Ha="";Ma=[];for(bc in Ti[Zl])this.terminals_[bc]&&bc>La&&Ma.push("'"+this.terminals_[bc]+"'");vs.showPosition?Ha="Parse error on line "+(ks+1)+`:
`+vs.showPosition()+`
Expecting `+Ma.join(", ")+", got '"+(this.terminals_[Uu]||Uu)+"'":Ha="Parse error on line "+(ks+1)+": Unexpected "+(Uu==Gs?"end of input":"'"+(this.terminals_[Uu]||Uu)+"'"),this.parseError(Ha,{text:vs.match,token:this.terminals_[Uu]||Uu,line:vs.yylineno,loc:Lu,expected:Ma})}if(Pa[0]instanceof Array&&Pa.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Zl+", token: "+Uu);switch(Pa[0]){case 1:di.push(Uu),Yn.push(vs.yytext),He.push(vs.yylloc),di.push(Pa[1]),Uu=null,qa=vs.yyleng,gn=vs.yytext,ks=vs.yylineno,Lu=vs.yylloc;break;case 2:if(Cc=this.productions_[Pa[1]][1],ua.$=Yn[Yn.length-Cc],ua._$={first_line:He[He.length-(Cc||1)].first_line,last_line:He[He.length-1].last_line,first_column:He[He.length-(Cc||1)].first_column,last_column:He[He.length-1].last_column},fm&&(ua._$.range=[He[He.length-(Cc||1)].range[0],He[He.length-1].range[1]]),Al=this.performAction.apply(ua,[gn,qa,ks,nu.yy,Pa[1],Yn,He].concat(No)),typeof Al<"u")return Al;Cc&&(di=di.slice(0,-1*Cc*2),Yn=Yn.slice(0,-1*Cc),He=He.slice(0,-1*Cc)),di.push(this.productions_[Pa[1]][0]),Yn.push(ua.$),He.push(ua._$),ga=Ti[di[di.length-2]][di[di.length-1]],di.push(ga);break;case 3:return!0}}return!0}},da=function(){var ds={EOF:1,parseError:function(nr,di){if(this.yy.parser)this.yy.parser.parseError(nr,di);else throw new Error(nr)},setInput:function(Dr,nr){return this.yy=nr||this.yy||{},this._input=Dr,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},input:function(){var Dr=this._input[0];this.yytext+=Dr,this.yyleng++,this.offset++,this.match+=Dr,this.matched+=Dr;var nr=Dr.match(/(?:\r\n?|\n).*/g);return nr?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),Dr},unput:function(Dr){var nr=Dr.length,di=Dr.split(/(?:\r\n?|\n)/g);this._input=Dr+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-nr),this.offset-=nr;var Ee=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),di.length-1&&(this.yylineno-=di.length-1);var Yn=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:di?(di.length===Ee.length?this.yylloc.first_column:0)+Ee[Ee.length-di.length].length-di[0].length:this.yylloc.first_column-nr},this.options.ranges&&(this.yylloc.range=[Yn[0],Yn[0]+this.yyleng-nr]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject: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},less:function(Dr){this.unput(this.match.slice(Dr))},pastInput:function(){var Dr=this.matched.substr(0,this.matched.length-this.match.length);return(Dr.length>20?"...":"")+Dr.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var Dr=this.match;return Dr.length<20&&(Dr+=this._input.substr(0,20-Dr.length)),(Dr.substr(0,20)+(Dr.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var Dr=this.pastInput(),nr=new Array(Dr.length+1).join("-");return Dr+this.upcomingInput()+`
`+nr+"^"},test_match:function(Dr,nr){var di,Ee,Yn;if(this.options.backtrack_lexer&&(Yn={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&&(Yn.yylloc.range=this.yylloc.range.slice(0))),Ee=Dr[0].match(/(?:\r\n?|\n).*/g),Ee&&(this.yylineno+=Ee.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:Ee?Ee[Ee.length-1].length-Ee[Ee.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+Dr[0].length},this.yytext+=Dr[0],this.match+=Dr[0],this.matches=Dr,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(Dr[0].length),this.matched+=Dr[0],di=this.performAction.call(this,this.yy,this,nr,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),di)return di;if(this._backtrack){for(var He in Yn)this[He]=Yn[He];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var Dr,nr,di,Ee;this._more||(this.yytext="",this.match="");for(var Yn=this._currentRules(),He=0;He<Yn.length;He++)if(di=this._input.match(this.rules[Yn[He]]),di&&(!nr||di[0].length>nr[0].length)){if(nr=di,Ee=He,this.options.backtrack_lexer){if(Dr=this.test_match(di,Yn[He]),Dr!==!1)return Dr;if(this._backtrack){nr=!1;continue}else return!1}else if(!this.options.flex)break}return nr?(Dr=this.test_match(nr,Yn[Ee]),Dr!==!1?Dr:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text.
`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var nr=this.next();return nr||this.lex()},begin:function(nr){this.conditionStack.push(nr)},popState:function(){var nr=this.conditionStack.length-1;return nr>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(nr){return nr=this.conditionStack.length-1-Math.abs(nr||0),nr>=0?this.conditionStack[nr]:"INITIAL"},pushState:function(nr){this.begin(nr)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(nr,di,Ee,Yn){switch(Ee){case 0:return 6;case 1:return 7;case 2:return 8;case 3:return 9;case 4:return 22;case 5:return 23;case 6:return this.begin("acc_title"),24;case 7:return this.popState(),"acc_title_value";case 8:return this.begin("acc_descr"),26;case 9:return this.popState(),"acc_descr_value";case 10:this.begin("acc_descr_multiline");break;case 11:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:break;case 14:c;break;case 15:return 12;case 16:break;case 17:return 11;case 18:return 15;case 19:return 16;case 20:return 17;case 21:return 18;case 22:return this.begin("person_ext"),45;case 23:return this.begin("person"),44;case 24:return this.begin("system_ext_queue"),51;case 25:return this.begin("system_ext_db"),50;case 26:return this.begin("system_ext"),49;case 27:return this.begin("system_queue"),48;case 28:return this.begin("system_db"),47;case 29:return this.begin("system"),46;case 30:return this.begin("boundary"),37;case 31:return this.begin("enterprise_boundary"),34;case 32:return this.begin("system_boundary"),36;case 33:return this.begin("container_ext_queue"),57;case 34:return this.begin("container_ext_db"),56;case 35:return this.begin("container_ext"),55;case 36:return this.begin("container_queue"),54;case 37:return this.begin("container_db"),53;case 38:return this.begin("container"),52;case 39:return this.begin("container_boundary"),38;case 40:return this.begin("component_ext_queue"),63;case 41:return this.begin("component_ext_db"),62;case 42:return this.begin("component_ext"),61;case 43:return this.begin("component_queue"),60;case 44:return this.begin("component_db"),59;case 45:return this.begin("component"),58;case 46:return this.begin("node"),39;case 47:return this.begin("node"),39;case 48:return this.begin("node_l"),40;case 49:return this.begin("node_r"),41;case 50:return this.begin("rel"),64;case 51:return this.begin("birel"),65;case 52:return this.begin("rel_u"),66;case 53:return this.begin("rel_u"),66;case 54:return this.begin("rel_d"),67;case 55:return this.begin("rel_d"),67;case 56:return this.begin("rel_l"),68;case 57:return this.begin("rel_l"),68;case 58:return this.begin("rel_r"),69;case 59:return this.begin("rel_r"),69;case 60:return this.begin("rel_b"),70;case 61:return this.begin("rel_index"),71;case 62:return this.begin("update_el_style"),72;case 63:return this.begin("update_rel_style"),73;case 64:return this.begin("update_layout_config"),74;case 65:return"EOF_IN_STRUCT";case 66:return this.begin("attribute"),"ATTRIBUTE_EMPTY";case 67:this.begin("attribute");break;case 68:this.popState(),this.popState();break;case 69:return 80;case 70:break;case 71:return 80;case 72:this.begin("string");break;case 73:this.popState();break;case 74:return"STR";case 75:this.begin("string_kv");break;case 76:return this.begin("string_kv_key"),"STR_KEY";case 77:this.popState(),this.begin("string_kv_value");break;case 78:return"STR_VALUE";case 79:this.popState(),this.popState();break;case 80:return"STR";case 81:return"LBRACE";case 82:return"RBRACE";case 83:return"SPACE";case 84:return"EOL";case 85:return 14}},rules:[/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:title\s[^#\n;]+)/,/^(?:accDescription\s[^#\n;]+)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/,/^(?:%%[^\n]*(\r?\n)*)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:C4Context\b)/,/^(?:C4Container\b)/,/^(?:C4Component\b)/,/^(?:C4Dynamic\b)/,/^(?:C4Deployment\b)/,/^(?:Person_Ext\b)/,/^(?:Person\b)/,/^(?:SystemQueue_Ext\b)/,/^(?:SystemDb_Ext\b)/,/^(?:System_Ext\b)/,/^(?:SystemQueue\b)/,/^(?:SystemDb\b)/,/^(?:System\b)/,/^(?:Boundary\b)/,/^(?:Enterprise_Boundary\b)/,/^(?:System_Boundary\b)/,/^(?:ContainerQueue_Ext\b)/,/^(?:ContainerDb_Ext\b)/,/^(?:Container_Ext\b)/,/^(?:ContainerQueue\b)/,/^(?:ContainerDb\b)/,/^(?:Container\b)/,/^(?:Container_Boundary\b)/,/^(?:ComponentQueue_Ext\b)/,/^(?:ComponentDb_Ext\b)/,/^(?:Component_Ext\b)/,/^(?:ComponentQueue\b)/,/^(?:ComponentDb\b)/,/^(?:Component\b)/,/^(?:Deployment_Node\b)/,/^(?:Node\b)/,/^(?:Node_L\b)/,/^(?:Node_R\b)/,/^(?:Rel\b)/,/^(?:BiRel\b)/,/^(?:Rel_Up\b)/,/^(?:Rel_U\b)/,/^(?:Rel_Down\b)/,/^(?:Rel_D\b)/,/^(?:Rel_Left\b)/,/^(?:Rel_L\b)/,/^(?:Rel_Right\b)/,/^(?:Rel_R\b)/,/^(?:Rel_Back\b)/,/^(?:RelIndex\b)/,/^(?:UpdateElementStyle\b)/,/^(?:UpdateRelStyle\b)/,/^(?:UpdateLayoutConfig\b)/,/^(?:$)/,/^(?:[(][ ]*[,])/,/^(?:[(])/,/^(?:[)])/,/^(?:,,)/,/^(?:,)/,/^(?:[ ]*["]["])/,/^(?:[ ]*["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:[ ]*[\$])/,/^(?:[^=]*)/,/^(?:[=][ ]*["])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:[^,]+)/,/^(?:\{)/,/^(?:\})/,/^(?:[\s]+)/,/^(?:[\n\r]+)/,/^(?:$)/],conditions:{acc_descr_multiline:{rules:[11,12],inclusive:!1},acc_descr:{rules:[9],inclusive:!1},acc_title:{rules:[7],inclusive:!1},string_kv_value:{rules:[78,79],inclusive:!1},string_kv_key:{rules:[77],inclusive:!1},string_kv:{rules:[76],inclusive:!1},string:{rules:[73,74],inclusive:!1},attribute:{rules:[68,69,70,71,72,75,80],inclusive:!1},update_layout_config:{rules:[65,66,67,68],inclusive:!1},update_rel_style:{rules:[65,66,67,68],inclusive:!1},update_el_style:{rules:[65,66,67,68],inclusive:!1},rel_b:{rules:[65,66,67,68],inclusive:!1},rel_r:{rules:[65,66,67,68],inclusive:!1},rel_l:{rules:[65,66,67,68],inclusive:!1},rel_d:{rules:[65,66,67,68],inclusive:!1},rel_u:{rules:[65,66,67,68],inclusive:!1},rel_bi:{rules:[],inclusive:!1},rel:{rules:[65,66,67,68],inclusive:!1},node_r:{rules:[65,66,67,68],inclusive:!1},node_l:{rules:[65,66,67,68],inclusive:!1},node:{rules:[65,66,67,68],inclusive:!1},index:{rules:[],inclusive:!1},rel_index:{rules:[65,66,67,68],inclusive:!1},component_ext_queue:{rules:[],inclusive:!1},component_ext_db:{rules:[65,66,67,68],inclusive:!1},component_ext:{rules:[65,66,67,68],inclusive:!1},component_queue:{rules:[65,66,67,68],inclusive:!1},component_db:{rules:[65,66,67,68],inclusive:!1},component:{rules:[65,66,67,68],inclusive:!1},container_boundary:{rules:[65,66,67,68],inclusive:!1},container_ext_queue:{rules:[65,66,67,68],inclusive:!1},container_ext_db:{rules:[65,66,67,68],inclusive:!1},container_ext:{rules:[65,66,67,68],inclusive:!1},container_queue:{rules:[65,66,67,68],inclusive:!1},container_db:{rules:[65,66,67,68],inclusive:!1},container:{rules:[65,66,67,68],inclusive:!1},birel:{rules:[65,66,67,68],inclusive:!1},system_boundary:{rules:[65,66,67,68],inclusive:!1},enterprise_boundary:{rules:[65,66,67,68],inclusive:!1},boundary:{rules:[65,66,67,68],inclusive:!1},system_ext_queue:{rules:[65,66,67,68],inclusive:!1},system_ext_db:{rules:[65,66,67,68],inclusive:!1},system_ext:{rules:[65,66,67,68],inclusive:!1},system_queue:{rules:[65,66,67,68],inclusive:!1},system_db:{rules:[65,66,67,68],inclusive:!1},system:{rules:[65,66,67,68],inclusive:!1},person_ext:{rules:[65,66,67,68],inclusive:!1},person:{rules:[65,66,67,68],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,8,10,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,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,81,82,83,84,85],inclusive:!0}}};return ds}();ya.lexer=da;function Oo(){this.yy={}}return Oo.prototype=ya,ya.Parser=Oo,new Oo}();$W.parser=$W;const HMe=$W;let rm=[],sk=[""],lg="global",im="",d3=[{alias:"global",label:{text:"global"},type:{text:"global"},tags:null,link:null,parentBoundary:""}],rP=[],Ddt="",Odt=!1,zW=4,qW=2;var gNt;const GMe=function(){return gNt},VMe=function(i){gNt=Dd(i,Le())},UMe=function(i,a,f,p,v,m,b,E,_){if(i==null||a===void 0||a===null||f===void 0||f===null||p===void 0||p===null)return;let L={};const N=rP.find(B=>B.from===a&&B.to===f);if(N?L=N:rP.push(L),L.type=i,L.from=a,L.to=f,L.label={text:p},v==null)L.techn={text:""};else if(typeof v=="object"){let[B,j]=Object.entries(v)[0];L[B]={text:j}}else L.techn={text:v};if(m==null)L.descr={text:""};else if(typeof m=="object"){let[B,j]=Object.entries(m)[0];L[B]={text:j}}else L.descr={text:m};if(typeof b=="object"){let[B,j]=Object.entries(b)[0];L[B]=j}else L.sprite=b;if(typeof E=="object"){let[B,j]=Object.entries(E)[0];L[B]=j}else L.tags=E;if(typeof _=="object"){let[B,j]=Object.entries(_)[0];L[B]=j}else L.link=_;L.wrap=ak()},WMe=function(i,a,f,p,v,m,b){if(a===null||f===null)return;let E={};const _=rm.find(L=>L.alias===a);if(_&&a===_.alias?E=_:(E.alias=a,rm.push(E)),f==null?E.label={text:""}:E.label={text:f},p==null)E.descr={text:""};else if(typeof p=="object"){let[L,N]=Object.entries(p)[0];E[L]={text:N}}else E.descr={text:p};if(typeof v=="object"){let[L,N]=Object.entries(v)[0];E[L]=N}else E.sprite=v;if(typeof m=="object"){let[L,N]=Object.entries(m)[0];E[L]=N}else E.tags=m;if(typeof b=="object"){let[L,N]=Object.entries(b)[0];E[L]=N}else E.link=b;E.typeC4Shape={text:i},E.parentBoundary=lg,E.wrap=ak()},KMe=function(i,a,f,p,v,m,b,E){if(a===null||f===null)return;let _={};const L=rm.find(N=>N.alias===a);if(L&&a===L.alias?_=L:(_.alias=a,rm.push(_)),f==null?_.label={text:""}:_.label={text:f},p==null)_.techn={text:""};else if(typeof p=="object"){let[N,B]=Object.entries(p)[0];_[N]={text:B}}else _.techn={text:p};if(v==null)_.descr={text:""};else if(typeof v=="object"){let[N,B]=Object.entries(v)[0];_[N]={text:B}}else _.descr={text:v};if(typeof m=="object"){let[N,B]=Object.entries(m)[0];_[N]=B}else _.sprite=m;if(typeof b=="object"){let[N,B]=Object.entries(b)[0];_[N]=B}else _.tags=b;if(typeof E=="object"){let[N,B]=Object.entries(E)[0];_[N]=B}else _.link=E;_.wrap=ak(),_.typeC4Shape={text:i},_.parentBoundary=lg},YMe=function(i,a,f,p,v,m,b,E){if(a===null||f===null)return;let _={};const L=rm.find(N=>N.alias===a);if(L&&a===L.alias?_=L:(_.alias=a,rm.push(_)),f==null?_.label={text:""}:_.label={text:f},p==null)_.techn={text:""};else if(typeof p=="object"){let[N,B]=Object.entries(p)[0];_[N]={text:B}}else _.techn={text:p};if(v==null)_.descr={text:""};else if(typeof v=="object"){let[N,B]=Object.entries(v)[0];_[N]={text:B}}else _.descr={text:v};if(typeof m=="object"){let[N,B]=Object.entries(m)[0];_[N]=B}else _.sprite=m;if(typeof b=="object"){let[N,B]=Object.entries(b)[0];_[N]=B}else _.tags=b;if(typeof E=="object"){let[N,B]=Object.entries(E)[0];_[N]=B}else _.link=E;_.wrap=ak(),_.typeC4Shape={text:i},_.parentBoundary=lg},XMe=function(i,a,f,p,v){if(i===null||a===null)return;let m={};const b=d3.find(E=>E.alias===i);if(b&&i===b.alias?m=b:(m.alias=i,d3.push(m)),a==null?m.label={text:""}:m.label={text:a},f==null)m.type={text:"system"};else if(typeof f=="object"){let[E,_]=Object.entries(f)[0];m[E]={text:_}}else m.type={text:f};if(typeof p=="object"){let[E,_]=Object.entries(p)[0];m[E]=_}else m.tags=p;if(typeof v=="object"){let[E,_]=Object.entries(v)[0];m[E]=_}else m.link=v;m.parentBoundary=lg,m.wrap=ak(),im=lg,lg=i,sk.push(im)},QMe=function(i,a,f,p,v){if(i===null||a===null)return;let m={};const b=d3.find(E=>E.alias===i);if(b&&i===b.alias?m=b:(m.alias=i,d3.push(m)),a==null?m.label={text:""}:m.label={text:a},f==null)m.type={text:"container"};else if(typeof f=="object"){let[E,_]=Object.entries(f)[0];m[E]={text:_}}else m.type={text:f};if(typeof p=="object"){let[E,_]=Object.entries(p)[0];m[E]=_}else m.tags=p;if(typeof v=="object"){let[E,_]=Object.entries(v)[0];m[E]=_}else m.link=v;m.parentBoundary=lg,m.wrap=ak(),im=lg,lg=i,sk.push(im)},ZMe=function(i,a,f,p,v,m,b,E){if(a===null||f===null)return;let _={};const L=d3.find(N=>N.alias===a);if(L&&a===L.alias?_=L:(_.alias=a,d3.push(_)),f==null?_.label={text:""}:_.label={text:f},p==null)_.type={text:"node"};else if(typeof p=="object"){let[N,B]=Object.entries(p)[0];_[N]={text:B}}else _.type={text:p};if(v==null)_.descr={text:""};else if(typeof v=="object"){let[N,B]=Object.entries(v)[0];_[N]={text:B}}else _.descr={text:v};if(typeof b=="object"){let[N,B]=Object.entries(b)[0];_[N]=B}else _.tags=b;if(typeof E=="object"){let[N,B]=Object.entries(E)[0];_[N]=B}else _.link=E;_.nodeType=i,_.parentBoundary=lg,_.wrap=ak(),im=lg,lg=a,sk.push(im)},JMe=function(){lg=im,sk.pop(),im=sk.pop(),sk.push(im)},tIe=function(i,a,f,p,v,m,b,E,_,L,N){let B=rm.find(j=>j.alias===a);if(!(B===void 0&&(B=d3.find(j=>j.alias===a),B===void 0))){if(f!=null)if(typeof f=="object"){let[j,R]=Object.entries(f)[0];B[j]=R}else B.bgColor=f;if(p!=null)if(typeof p=="object"){let[j,R]=Object.entries(p)[0];B[j]=R}else B.fontColor=p;if(v!=null)if(typeof v=="object"){let[j,R]=Object.entries(v)[0];B[j]=R}else B.borderColor=v;if(m!=null)if(typeof m=="object"){let[j,R]=Object.entries(m)[0];B[j]=R}else B.shadowing=m;if(b!=null)if(typeof b=="object"){let[j,R]=Object.entries(b)[0];B[j]=R}else B.shape=b;if(E!=null)if(typeof E=="object"){let[j,R]=Object.entries(E)[0];B[j]=R}else B.sprite=E;if(_!=null)if(typeof _=="object"){let[j,R]=Object.entries(_)[0];B[j]=R}else B.techn=_;if(L!=null)if(typeof L=="object"){let[j,R]=Object.entries(L)[0];B[j]=R}else B.legendText=L;if(N!=null)if(typeof N=="object"){let[j,R]=Object.entries(N)[0];B[j]=R}else B.legendSprite=N}},eIe=function(i,a,f,p,v,m,b){const E=rP.find(_=>_.from===a&&_.to===f);if(E!==void 0){if(p!=null)if(typeof p=="object"){let[_,L]=Object.entries(p)[0];E[_]=L}else E.textColor=p;if(v!=null)if(typeof v=="object"){let[_,L]=Object.entries(v)[0];E[_]=L}else E.lineColor=v;if(m!=null)if(typeof m=="object"){let[_,L]=Object.entries(m)[0];E[_]=parseInt(L)}else E.offsetX=parseInt(m);if(b!=null)if(typeof b=="object"){let[_,L]=Object.entries(b)[0];E[_]=parseInt(L)}else E.offsetY=parseInt(b)}},nIe=function(i,a,f){let p=zW,v=qW;if(typeof a=="object"){const m=Object.values(a)[0];p=parseInt(m)}else p=parseInt(a);if(typeof f=="object"){const m=Object.values(f)[0];v=parseInt(m)}else v=parseInt(f);p>=1&&(zW=p),v>=1&&(qW=v)},rIe=function(){return zW},iIe=function(){return qW},sIe=function(){return lg},aIe=function(){return im},pNt=function(i){return i==null?rm:rm.filter(a=>a.parentBoundary===i)},oIe=function(i){return rm.find(a=>a.alias===i)},cIe=function(i){return Object.keys(pNt(i))},uIe=function(i){return i==null?d3:d3.filter(a=>a.parentBoundary===i)},lIe=function(){return rP},hIe=function(){return Ddt},fIe=function(i){Odt=i},ak=function(){return Odt},Ndt={addPersonOrSystem:WMe,addPersonOrSystemBoundary:XMe,addContainer:KMe,addContainerBoundary:QMe,addComponent:YMe,addDeploymentNode:ZMe,popBoundaryParseStack:JMe,addRel:UMe,updateElStyle:tIe,updateRelStyle:eIe,updateLayoutConfig:nIe,autoWrap:ak,setWrap:fIe,getC4ShapeArray:pNt,getC4Shape:oIe,getC4ShapeKeys:cIe,getBoundarys:uIe,getCurrentBoundaryParse:sIe,getParentBoundaryParse:aIe,getRels:lIe,getTitle:hIe,getC4Type:GMe,getC4ShapeInRow:rIe,getC4BoundaryInRow:iIe,setAccTitle:cg,getAccTitle:op,getAccDescription:up,setAccDescription:cp,getConfig:()=>Le().c4,clear:function(){rm=[],d3=[{alias:"global",label:{text:"global"},type:{text:"global"},tags:null,link:null,parentBoundary:""}],im="",lg="global",sk=[""],rP=[],sk=[""],Ddt="",Odt=!1,zW=4,qW=2},LINETYPE:{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},ARROWTYPE:{FILLED:0,OPEN:1},PLACEMENT:{LEFTOF:0,RIGHTOF:1,OVER:2},setTitle:function(i){Ddt=Dd(i,Le())},setC4Type:VMe},HW=(i,a)=>{const f=i.append("rect");if(f.attr("x",a.x),f.attr("y",a.y),f.attr("fill",a.fill),f.attr("stroke",a.stroke),f.attr("width",a.width),f.attr("height",a.height),a.rx!==void 0&&f.attr("rx",a.rx),a.ry!==void 0&&f.attr("ry",a.ry),a.attrs!==void 0)for(const p in a.attrs)f.attr(p,a.attrs[p]);return a.class!==void 0&&f.attr("class",a.class),f},bNt=(i,a)=>{const f={x:a.startx,y:a.starty,width:a.stopx-a.startx,height:a.stopy-a.starty,fill:a.fill,stroke:a.stroke,class:"rect"};HW(i,f).lower()},dIe=(i,a)=>{const f=a.text.replace($N," "),p=i.append("text");p.attr("x",a.x),p.attr("y",a.y),p.attr("class","legend"),p.style("text-anchor",a.anchor),a.class!==void 0&&p.attr("class",a.class);const v=p.append("tspan");return v.attr("x",a.x+a.textMargin*2),v.text(f),p},gIe=(i,a,f,p)=>{const v=i.append("image");v.attr("x",a),v.attr("y",f);const m=Q6(p);v.attr("xlink:href",m)},pIe=(i,a,f,p)=>{const v=i.append("use");v.attr("x",a),v.attr("y",f);const m=Q6(p);v.attr("xlink:href",`#${m}`)},fT=()=>({x:0,y:0,width:100,height:100,fill:"#EDF2AE",stroke:"#666",anchor:"start",rx:0,ry:0}),Pdt=()=>({x:0,y:0,width:100,height:100,"text-anchor":"start",style:"#666",textMargin:0,rx:0,ry:0,tspan:!0}),Fdt=function(i,a){return HW(i,a)},vNt=function(i,a,f,p,v,m){const b=i.append("image");b.attr("width",a),b.attr("height",f),b.attr("x",p),b.attr("y",v);let E=m.startsWith("data:image/png;base64")?m:Q6(m);b.attr("xlink:href",E)},bIe=(i,a,f)=>{const p=i.append("g");let v=0;for(let m of a){let b=m.textColor?m.textColor:"#444444",E=m.lineColor?m.lineColor:"#444444",_=m.offsetX?parseInt(m.offsetX):0,L=m.offsetY?parseInt(m.offsetY):0,N="";if(v===0){let j=p.append("line");j.attr("x1",m.startPoint.x),j.attr("y1",m.startPoint.y),j.attr("x2",m.endPoint.x),j.attr("y2",m.endPoint.y),j.attr("stroke-width","1"),j.attr("stroke",E),j.style("fill","none"),m.type!=="rel_b"&&j.attr("marker-end","url("+N+"#arrowhead)"),(m.type==="birel"||m.type==="rel_b")&&j.attr("marker-start","url("+N+"#arrowend)"),v=-1}else{let j=p.append("path");j.attr("fill","none").attr("stroke-width","1").attr("stroke",E).attr("d","Mstartx,starty Qcontrolx,controly stopx,stopy ".replaceAll("startx",m.startPoint.x).replaceAll("starty",m.startPoint.y).replaceAll("controlx",m.startPoint.x+(m.endPoint.x-m.startPoint.x)/2-(m.endPoint.x-m.startPoint.x)/4).replaceAll("controly",m.startPoint.y+(m.endPoint.y-m.startPoint.y)/2).replaceAll("stopx",m.endPoint.x).replaceAll("stopy",m.endPoint.y)),m.type!=="rel_b"&&j.attr("marker-end","url("+N+"#arrowhead)"),(m.type==="birel"||m.type==="rel_b")&&j.attr("marker-start","url("+N+"#arrowend)")}let B=f.messageFont();k5(f)(m.label.text,p,Math.min(m.startPoint.x,m.endPoint.x)+Math.abs(m.endPoint.x-m.startPoint.x)/2+_,Math.min(m.startPoint.y,m.endPoint.y)+Math.abs(m.endPoint.y-m.startPoint.y)/2+L,m.label.width,m.label.height,{fill:b},B),m.techn&&m.techn.text!==""&&(B=f.messageFont(),k5(f)("["+m.techn.text+"]",p,Math.min(m.startPoint.x,m.endPoint.x)+Math.abs(m.endPoint.x-m.startPoint.x)/2+_,Math.min(m.startPoint.y,m.endPoint.y)+Math.abs(m.endPoint.y-m.startPoint.y)/2+f.messageFontSize+5+L,Math.max(m.label.width,m.techn.width),m.techn.height,{fill:b,"font-style":"italic"},B))}},vIe=function(i,a,f){const p=i.append("g");let v=a.bgColor?a.bgColor:"none",m=a.borderColor?a.borderColor:"#444444",b=a.fontColor?a.fontColor:"black",E={"stroke-width":1,"stroke-dasharray":"7.0,7.0"};a.nodeType&&(E={"stroke-width":1});let _={x:a.x,y:a.y,fill:v,stroke:m,width:a.width,height:a.height,rx:2.5,ry:2.5,attrs:E};Fdt(p,_);let L=f.boundaryFont();L.fontWeight="bold",L.fontSize=L.fontSize+2,L.fontColor=b,k5(f)(a.label.text,p,a.x,a.y+a.label.Y,a.width,a.height,{fill:"#444444"},L),a.type&&a.type.text!==""&&(L=f.boundaryFont(),L.fontColor=b,k5(f)(a.type.text,p,a.x,a.y+a.type.Y,a.width,a.height,{fill:"#444444"},L)),a.descr&&a.descr.text!==""&&(L=f.boundaryFont(),L.fontSize=L.fontSize-2,L.fontColor=b,k5(f)(a.descr.text,p,a.x,a.y+a.descr.Y,a.width,a.height,{fill:"#444444"},L))},wIe=function(i,a,f){var B;let p=a.bgColor?a.bgColor:f[a.typeC4Shape.text+"_bg_color"],v=a.borderColor?a.borderColor:f[a.typeC4Shape.text+"_border_color"],m=a.fontColor?a.fontColor:"#FFFFFF",b="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=";switch(a.typeC4Shape.text){case"person":b="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":b="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAAB6ElEQVR4Xu2YLY+EMBCG9+dWr0aj0Wg0Go1Go0+j8Xdv2uTCvv1gpt0ebHKPuhDaeW4605Z9mJvx4AdXUyTUdd08z+u6flmWZRnHsWkafk9DptAwDPu+f0eAYtu2PEaGWuj5fCIZrBAC2eLBAnRCsEkkxmeaJp7iDJ2QMDdHsLg8SxKFEJaAo8lAXnmuOFIhTMpxxKATebo4UiFknuNo4OniSIXQyRxEA3YsnjGCVEjVXD7yLUAqxBGUyPv/Y4W2beMgGuS7kVQIBycH0fD+oi5pezQETxdHKmQKGk1eQEYldK+jw5GxPfZ9z7Mk0Qnhf1W1m3w//EUn5BDmSZsbR44QQLBEqrBHqOrmSKaQAxdnLArCrxZcM7A7ZKs4ioRq8LFC+NpC3WCBJsvpVw5edm9iEXFuyNfxXAgSwfrFQ1c0iNda8AdejvUgnktOtJQQxmcfFzGglc5WVCj7oDgFqU18boeFSs52CUh8LE8BIVQDT1ABrB0HtgSEYlX5doJnCwv9TXocKCaKbnwhdDKPq4lf3SwU3HLq4V/+WYhHVMa/3b4IlfyikAduCkcBc7mQ3/z/Qq/cTuikhkzB12Ae/mcJC9U+Vo8Ej1gWAtgbeGgFsAMHr50BIWOLCbezvhpBFUdY6EJuJ/QDW0XoMX60zZ0AAAAASUVORK5CYII=";break}const E=i.append("g");E.attr("class","person-man");const _=fT();switch(a.typeC4Shape.text){case"person":case"external_person":case"system":case"external_system":case"container":case"external_container":case"component":case"external_component":_.x=a.x,_.y=a.y,_.fill=p,_.width=a.width,_.height=a.height,_.stroke=v,_.rx=2.5,_.ry=2.5,_.attrs={"stroke-width":.5},Fdt(E,_);break;case"system_db":case"external_system_db":case"container_db":case"external_container_db":case"component_db":case"external_component_db":E.append("path").attr("fill",p).attr("stroke-width","0.5").attr("stroke",v).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",a.x).replaceAll("starty",a.y).replaceAll("half",a.width/2).replaceAll("height",a.height)),E.append("path").attr("fill","none").attr("stroke-width","0.5").attr("stroke",v).attr("d","Mstartx,startyc0,10 half,10 half,10c0,0 half,0 half,-10".replaceAll("startx",a.x).replaceAll("starty",a.y).replaceAll("half",a.width/2));break;case"system_queue":case"external_system_queue":case"container_queue":case"external_container_queue":case"component_queue":case"external_component_queue":E.append("path").attr("fill",p).attr("stroke-width","0.5").attr("stroke",v).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",a.x).replaceAll("starty",a.y).replaceAll("width",a.width).replaceAll("half",a.height/2)),E.append("path").attr("fill","none").attr("stroke-width","0.5").attr("stroke",v).attr("d","Mstartx,startyc-5,0 -5,half -5,halfc0,half 5,half 5,half".replaceAll("startx",a.x+a.width).replaceAll("starty",a.y).replaceAll("half",a.height/2));break}let L=SIe(f,a.typeC4Shape.text);switch(E.append("text").attr("fill",m).attr("font-family",L.fontFamily).attr("font-size",L.fontSize-2).attr("font-style","italic").attr("lengthAdjust","spacing").attr("textLength",a.typeC4Shape.width).attr("x",a.x+a.width/2-a.typeC4Shape.width/2).attr("y",a.y+a.typeC4Shape.Y).text("<<"+a.typeC4Shape.text+">>"),a.typeC4Shape.text){case"person":case"external_person":vNt(E,48,48,a.x+a.width/2-24,a.y+a.image.Y,b);break}let N=f[a.typeC4Shape.text+"Font"]();return N.fontWeight="bold",N.fontSize=N.fontSize+2,N.fontColor=m,k5(f)(a.label.text,E,a.x,a.y+a.label.Y,a.width,a.height,{fill:m},N),N=f[a.typeC4Shape.text+"Font"](),N.fontColor=m,a.techn&&((B=a.techn)==null?void 0:B.text)!==""?k5(f)(a.techn.text,E,a.x,a.y+a.techn.Y,a.width,a.height,{fill:m,"font-style":"italic"},N):a.type&&a.type.text!==""&&k5(f)(a.type.text,E,a.x,a.y+a.type.Y,a.width,a.height,{fill:m,"font-style":"italic"},N),a.descr&&a.descr.text!==""&&(N=f.personFont(),N.fontColor=m,k5(f)(a.descr.text,E,a.x,a.y+a.descr.Y,a.width,a.height,{fill:m},N)),a.height},mIe=function(i){i.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")},yIe=function(i){i.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")},xIe=function(i){i.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")},kIe=function(i){i.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")},EIe=function(i){i.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")},TIe=function(i){i.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")},CIe=function(i){i.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)},_Ie=function(i){const f=i.append("defs").append("marker").attr("id","crosshead").attr("markerWidth",15).attr("markerHeight",8).attr("orient","auto").attr("refX",16).attr("refY",4);f.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"),f.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")},SIe=(i,a)=>({fontFamily:i[a+"FontFamily"],fontSize:i[a+"FontSize"],fontWeight:i[a+"FontWeight"]}),k5=function(){function i(v,m,b,E,_,L,N){const B=m.append("text").attr("x",b+_/2).attr("y",E+L/2+5).style("text-anchor","middle").text(v);p(B,N)}function a(v,m,b,E,_,L,N,B){const{fontSize:j,fontFamily:R,fontWeight:z}=B,K=v.split(Yr.lineBreakRegex);for(let it=0;it<K.length;it++){const st=it*j-j*(K.length-1)/2,ut=m.append("text").attr("x",b+_/2).attr("y",E).style("text-anchor","middle").attr("dominant-baseline","middle").style("font-size",j).style("font-weight",z).style("font-family",R);ut.append("tspan").attr("dy",st).text(K[it]).attr("alignment-baseline","mathematical"),p(ut,N)}}function f(v,m,b,E,_,L,N,B){const j=m.append("switch"),z=j.append("foreignObject").attr("x",b).attr("y",E).attr("width",_).attr("height",L).append("xhtml:div").style("display","table").style("height","100%").style("width","100%");z.append("div").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(v),a(v,j,b,E,_,L,N,B),p(z,N)}function p(v,m){for(const b in m)m.hasOwnProperty(b)&&v.attr(b,m[b])}return function(v){return v.textPlacement==="fo"?f:v.textPlacement==="old"?i:a}}(),g3={drawRect:Fdt,drawBoundary:vIe,drawC4Shape:wIe,drawRels:bIe,drawImage:vNt,insertArrowHead:kIe,insertArrowEnd:EIe,insertArrowFilledHead:TIe,insertDynamicNumber:CIe,insertArrowCrossHead:_Ie,insertDatabaseIcon:mIe,insertComputerIcon:yIe,insertClockIcon:xIe};let GW=0,VW=0,wNt=4,Bdt=2;$W.yy=Ndt;let fs={};class mNt{constructor(a){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,Rdt(a.db.getConfig())}setData(a,f,p,v){this.nextData.startx=this.data.startx=a,this.nextData.stopx=this.data.stopx=f,this.nextData.starty=this.data.starty=p,this.nextData.stopy=this.data.stopy=v}updateVal(a,f,p,v){a[f]===void 0?a[f]=p:a[f]=v(p,a[f])}insert(a){this.nextData.cnt=this.nextData.cnt+1;let f=this.nextData.startx===this.nextData.stopx?this.nextData.stopx+a.margin:this.nextData.stopx+a.margin*2,p=f+a.width,v=this.nextData.starty+a.margin*2,m=v+a.height;(f>=this.data.widthLimit||p>=this.data.widthLimit||this.nextData.cnt>wNt)&&(f=this.nextData.startx+a.margin+fs.nextLinePaddingX,v=this.nextData.stopy+a.margin*2,this.nextData.stopx=p=f+a.width,this.nextData.starty=this.nextData.stopy,this.nextData.stopy=m=v+a.height,this.nextData.cnt=1),a.x=f,a.y=v,this.updateVal(this.data,"startx",f,Math.min),this.updateVal(this.data,"starty",v,Math.min),this.updateVal(this.data,"stopx",p,Math.max),this.updateVal(this.data,"stopy",m,Math.max),this.updateVal(this.nextData,"startx",f,Math.min),this.updateVal(this.nextData,"starty",v,Math.min),this.updateVal(this.nextData,"stopx",p,Math.max),this.updateVal(this.nextData,"stopy",m,Math.max)}init(a){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},Rdt(a.db.getConfig())}bumpLastMargin(a){this.data.stopx+=a,this.data.stopy+=a}}const Rdt=function(i){Y1(fs,i),i.fontFamily&&(fs.personFontFamily=fs.systemFontFamily=fs.messageFontFamily=i.fontFamily),i.fontSize&&(fs.personFontSize=fs.systemFontSize=fs.messageFontSize=i.fontSize),i.fontWeight&&(fs.personFontWeight=fs.systemFontWeight=fs.messageFontWeight=i.fontWeight)},iP=(i,a)=>({fontFamily:i[a+"FontFamily"],fontSize:i[a+"FontSize"],fontWeight:i[a+"FontWeight"]}),UW=i=>({fontFamily:i.boundaryFontFamily,fontSize:i.boundaryFontSize,fontWeight:i.boundaryFontWeight}),AIe=i=>({fontFamily:i.messageFontFamily,fontSize:i.messageFontSize,fontWeight:i.messageFontWeight});function sm(i,a,f,p,v){if(!a[i].width)if(f)a[i].text=VDt(a[i].text,v,p),a[i].textLines=a[i].text.split(Yr.lineBreakRegex).length,a[i].width=v,a[i].height=ndt(a[i].text,p);else{let m=a[i].text.split(Yr.lineBreakRegex);a[i].textLines=m.length;let b=0;a[i].height=0,a[i].width=0;for(const E of m)a[i].width=Math.max(h3(E,p),a[i].width),b=ndt(E,p),a[i].height=a[i].height+b}}const yNt=function(i,a,f){a.x=f.data.startx,a.y=f.data.starty,a.width=f.data.stopx-f.data.startx,a.height=f.data.stopy-f.data.starty,a.label.y=fs.c4ShapeMargin-35;let p=a.wrap&&fs.wrap,v=UW(fs);v.fontSize=v.fontSize+2,v.fontWeight="bold";let m=h3(a.label.text,v);sm("label",a,p,v,m),g3.drawBoundary(i,a,fs)},xNt=function(i,a,f,p){let v=0;for(const m of p){v=0;const b=f[m];let E=iP(fs,b.typeC4Shape.text);switch(E.fontSize=E.fontSize-2,b.typeC4Shape.width=h3("«"+b.typeC4Shape.text+"»",E),b.typeC4Shape.height=E.fontSize+2,b.typeC4Shape.Y=fs.c4ShapePadding,v=b.typeC4Shape.Y+b.typeC4Shape.height-4,b.image={width:0,height:0,Y:0},b.typeC4Shape.text){case"person":case"external_person":b.image.width=48,b.image.height=48,b.image.Y=v,v=b.image.Y+b.image.height;break}b.sprite&&(b.image.width=48,b.image.height=48,b.image.Y=v,v=b.image.Y+b.image.height);let _=b.wrap&&fs.wrap,L=fs.width-fs.c4ShapePadding*2,N=iP(fs,b.typeC4Shape.text);if(N.fontSize=N.fontSize+2,N.fontWeight="bold",sm("label",b,_,N,L),b.label.Y=v+8,v=b.label.Y+b.label.height,b.type&&b.type.text!==""){b.type.text="["+b.type.text+"]";let R=iP(fs,b.typeC4Shape.text);sm("type",b,_,R,L),b.type.Y=v+5,v=b.type.Y+b.type.height}else if(b.techn&&b.techn.text!==""){b.techn.text="["+b.techn.text+"]";let R=iP(fs,b.techn.text);sm("techn",b,_,R,L),b.techn.Y=v+5,v=b.techn.Y+b.techn.height}let B=v,j=b.label.width;if(b.descr&&b.descr.text!==""){let R=iP(fs,b.typeC4Shape.text);sm("descr",b,_,R,L),b.descr.Y=v+20,v=b.descr.Y+b.descr.height,j=Math.max(b.label.width,b.descr.width),B=v-b.descr.textLines*5}j=j+fs.c4ShapePadding,b.width=Math.max(b.width||fs.width,j,fs.width),b.height=Math.max(b.height||fs.height,B,fs.height),b.margin=b.margin||fs.c4ShapeMargin,i.insert(b),g3.drawC4Shape(a,b,fs)}i.bumpLastMargin(fs.c4ShapeMargin)};let J2=class{constructor(a,f){this.x=a,this.y=f}},kNt=function(i,a){let f=i.x,p=i.y,v=a.x,m=a.y,b=f+i.width/2,E=p+i.height/2,_=Math.abs(f-v),L=Math.abs(p-m),N=L/_,B=i.height/i.width,j=null;return p==m&&f<v?j=new J2(f+i.width,E):p==m&&f>v?j=new J2(f,E):f==v&&p<m?j=new J2(b,p+i.height):f==v&&p>m&&(j=new J2(b,p)),f>v&&p<m?B>=N?j=new J2(f,E+N*i.width/2):j=new J2(b-_/L*i.height/2,p+i.height):f<v&&p<m?B>=N?j=new J2(f+i.width,E+N*i.width/2):j=new J2(b+_/L*i.height/2,p+i.height):f<v&&p>m?B>=N?j=new J2(f+i.width,E-N*i.width/2):j=new J2(b+i.height/2*_/L,p):f>v&&p>m&&(B>=N?j=new J2(f,E-i.width/2*N):j=new J2(b-i.height/2*_/L,p)),j},LIe=function(i,a){let f={x:0,y:0};f.x=a.x+a.width/2,f.y=a.y+a.height/2;let p=kNt(i,f);f.x=i.x+i.width/2,f.y=i.y+i.height/2;let v=kNt(a,f);return{startPoint:p,endPoint:v}};const MIe=function(i,a,f,p){let v=0;for(let m of a){v=v+1;let b=m.wrap&&fs.wrap,E=AIe(fs);p.db.getC4Type()==="C4Dynamic"&&(m.label.text=v+": "+m.label.text);let L=h3(m.label.text,E);sm("label",m,b,E,L),m.techn&&m.techn.text!==""&&(L=h3(m.techn.text,E),sm("techn",m,b,E,L)),m.descr&&m.descr.text!==""&&(L=h3(m.descr.text,E),sm("descr",m,b,E,L));let N=f(m.from),B=f(m.to),j=LIe(N,B);m.startPoint=j.startPoint,m.endPoint=j.endPoint}g3.drawRels(i,a,fs)};function ENt(i,a,f,p,v){let m=new mNt(v);m.data.widthLimit=f.data.widthLimit/Math.min(Bdt,p.length);for(let[b,E]of p.entries()){let _=0;E.image={width:0,height:0,Y:0},E.sprite&&(E.image.width=48,E.image.height=48,E.image.Y=_,_=E.image.Y+E.image.height);let L=E.wrap&&fs.wrap,N=UW(fs);if(N.fontSize=N.fontSize+2,N.fontWeight="bold",sm("label",E,L,N,m.data.widthLimit),E.label.Y=_+8,_=E.label.Y+E.label.height,E.type&&E.type.text!==""){E.type.text="["+E.type.text+"]";let z=UW(fs);sm("type",E,L,z,m.data.widthLimit),E.type.Y=_+5,_=E.type.Y+E.type.height}if(E.descr&&E.descr.text!==""){let z=UW(fs);z.fontSize=z.fontSize-2,sm("descr",E,L,z,m.data.widthLimit),E.descr.Y=_+20,_=E.descr.Y+E.descr.height}if(b==0||b%Bdt===0){let z=f.data.startx+fs.diagramMarginX,K=f.data.stopy+fs.diagramMarginY+_;m.setData(z,z,K,K)}else{let z=m.data.stopx!==m.data.startx?m.data.stopx+fs.diagramMarginX:m.data.startx,K=m.data.starty;m.setData(z,z,K,K)}m.name=E.alias;let B=v.db.getC4ShapeArray(E.alias),j=v.db.getC4ShapeKeys(E.alias);j.length>0&&xNt(m,i,B,j),a=E.alias;let R=v.db.getBoundarys(a);R.length>0&&ENt(i,a,m,R,v),E.alias!=="global"&&yNt(i,E,m),f.data.stopy=Math.max(m.data.stopy+fs.c4ShapeMargin,f.data.stopy),f.data.stopx=Math.max(m.data.stopx+fs.c4ShapeMargin,f.data.stopx),GW=Math.max(GW,f.data.stopx),VW=Math.max(VW,f.data.stopy)}}const TNt={drawPersonOrSystemArray:xNt,drawBoundary:yNt,setConf:Rdt,draw:function(i,a,f,p){fs=Le().c4;const v=Le().securityLevel;let m;v==="sandbox"&&(m=yr("#i"+a));const b=yr(v==="sandbox"?m.nodes()[0].contentDocument.body:"body");let E=p.db;p.db.setWrap(fs.wrap),wNt=E.getC4ShapeInRow(),Bdt=E.getC4BoundaryInRow(),Ut.debug(`C:${JSON.stringify(fs,null,2)}`);const _=v==="sandbox"?b.select(`[id="${a}"]`):yr(`[id="${a}"]`);g3.insertComputerIcon(_),g3.insertDatabaseIcon(_),g3.insertClockIcon(_);let L=new mNt(p);L.setData(fs.diagramMarginX,fs.diagramMarginX,fs.diagramMarginY,fs.diagramMarginY),L.data.widthLimit=screen.availWidth,GW=fs.diagramMarginX,VW=fs.diagramMarginY;const N=p.db.getTitle();let B=p.db.getBoundarys("");ENt(_,"",L,B,p),g3.insertArrowHead(_),g3.insertArrowEnd(_),g3.insertArrowCrossHead(_),g3.insertArrowFilledHead(_),MIe(_,p.db.getRels(),p.db.getC4Shape,p),L.data.stopx=GW,L.data.stopy=VW;const j=L.data;let z=j.stopy-j.starty+2*fs.diagramMarginY;const it=j.stopx-j.startx+2*fs.diagramMarginX;N&&_.append("text").text(N).attr("x",(j.stopx-j.startx)/2-4*fs.diagramMarginX).attr("y",j.starty+fs.diagramMarginY),og(_,z,it,fs.useMaxWidth);const st=N?60:0;_.attr("viewBox",j.startx-fs.diagramMarginX+" -"+(fs.diagramMarginY+st)+" "+it+" "+(z+st)),Ut.debug("models:",j)}},IIe=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:HMe,db:Ndt,renderer:TNt,styles:i=>`.person {
    stroke: ${i.personBorder};
    fill: ${i.personBkg};
  }
`,init:({c4:i,wrap:a})=>{TNt.setConf(i),Ndt.setWrap(a)}}},Symbol.toStringTag,{value:"Module"}));var jdt=function(){var i=function(nf,Xi,Es,xa){for(Es=Es||{},xa=nf.length;xa--;Es[nf[xa]]=Xi);return Es},a=[1,4],f=[1,3],p=[1,5],v=[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],m=[2,2],b=[1,13],E=[1,14],_=[1,15],L=[1,16],N=[1,23],B=[1,25],j=[1,26],R=[1,27],z=[1,49],K=[1,48],it=[1,29],st=[1,30],ut=[1,31],bt=[1,32],mt=[1,33],yt=[1,44],dt=[1,46],ht=[1,42],wt=[1,47],X=[1,43],pt=[1,50],U=[1,45],xt=[1,51],nt=[1,52],Ot=[1,34],Nt=[1,35],qt=[1,36],Ct=[1,37],Z=[1,57],Tt=[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],Ht=[1,61],It=[1,60],Ft=[1,62],ke=[8,9,11,73,75],pn=[1,88],Me=[1,93],ve=[1,92],Ge=[1,89],Ke=[1,85],we=[1,91],_e=[1,87],$t=[1,94],re=[1,90],ie=[1,95],Oe=[1,86],oe=[8,9,10,11,73,75],Ne=[8,9,10,11,44,73,75],me=[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],cn=[8,9,11,42,58,73,75,86,99,102,103,106,108,111,112,113],li=[42,58,86,99,102,103,106,108,111,112,113],ya=[1,121],da=[1,120],Oo=[1,128],ds=[1,142],Dr=[1,143],nr=[1,144],di=[1,145],Ee=[1,130],Yn=[1,132],He=[1,136],Ti=[1,137],gn=[1,138],ks=[1,139],qa=[1,140],La=[1,141],Gs=[1,146],No=[1,147],vs=[1,126],nu=[1,127],$s=[1,134],Lu=[1,129],fm=[1,133],av=[1,131],Uu=[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],Zl=[1,149],Pa=[8,9,11],Al=[8,9,10,11,14,42,58,86,102,103,106,108,111,112,113],ua=[1,169],bc=[1,165],Cc=[1,166],ga=[1,170],Ma=[1,167],Ha=[1,168],Ll=[75,113,116],_c=[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],ov=[10,103],Jl=[31,47,49,51,53,55,60,62,64,65,67,69,113,114,115],Z1=[1,235],Fd=[1,233],J1=[1,237],Bd=[1,231],E0=[1,232],Bi=[1,234],on=[1,236],kr=[1,238],Ei=[1,255],Jo=[8,9,11,103],vc=[8,9,10,11,58,81,102,103,106,107,108,109],tf={trace:function(){},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,FirstStmtSeperator:15,ending:16,endToken:17,spaceList:18,spaceListNewline:19,verticeStatement: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:function(Xi,Es,xa,xi,Wc,Ce,gp){var Be=Ce.length-1;switch(Wc){case 2:this.$=[];break;case 3:(!Array.isArray(Ce[Be])||Ce[Be].length>0)&&Ce[Be-1].push(Ce[Be]),this.$=Ce[Be-1];break;case 4:case 176:this.$=Ce[Be];break;case 11:xi.setDirection("TB"),this.$="TB";break;case 12:xi.setDirection(Ce[Be-1]),this.$=Ce[Be-1];break;case 27:this.$=Ce[Be-1].nodes;break;case 28:case 29:case 30:case 31:case 32:this.$=[];break;case 33:this.$=xi.addSubGraph(Ce[Be-6],Ce[Be-1],Ce[Be-4]);break;case 34:this.$=xi.addSubGraph(Ce[Be-3],Ce[Be-1],Ce[Be-3]);break;case 35:this.$=xi.addSubGraph(void 0,Ce[Be-1],void 0);break;case 37:this.$=Ce[Be].trim(),xi.setAccTitle(this.$);break;case 38:case 39:this.$=Ce[Be].trim(),xi.setAccDescription(this.$);break;case 43:xi.addLink(Ce[Be-2].stmt,Ce[Be],Ce[Be-1]),this.$={stmt:Ce[Be],nodes:Ce[Be].concat(Ce[Be-2].nodes)};break;case 44:xi.addLink(Ce[Be-3].stmt,Ce[Be-1],Ce[Be-2]),this.$={stmt:Ce[Be-1],nodes:Ce[Be-1].concat(Ce[Be-3].nodes)};break;case 45:this.$={stmt:Ce[Be-1],nodes:Ce[Be-1]};break;case 46:this.$={stmt:Ce[Be],nodes:Ce[Be]};break;case 47:this.$=[Ce[Be]];break;case 48:this.$=Ce[Be-4].concat(Ce[Be]);break;case 49:this.$=Ce[Be];break;case 50:this.$=Ce[Be-2],xi.setClass(Ce[Be-2],Ce[Be]);break;case 51:this.$=Ce[Be-3],xi.addVertex(Ce[Be-3],Ce[Be-1],"square");break;case 52:this.$=Ce[Be-3],xi.addVertex(Ce[Be-3],Ce[Be-1],"doublecircle");break;case 53:this.$=Ce[Be-5],xi.addVertex(Ce[Be-5],Ce[Be-2],"circle");break;case 54:this.$=Ce[Be-3],xi.addVertex(Ce[Be-3],Ce[Be-1],"ellipse");break;case 55:this.$=Ce[Be-3],xi.addVertex(Ce[Be-3],Ce[Be-1],"stadium");break;case 56:this.$=Ce[Be-3],xi.addVertex(Ce[Be-3],Ce[Be-1],"subroutine");break;case 57:this.$=Ce[Be-7],xi.addVertex(Ce[Be-7],Ce[Be-1],"rect",void 0,void 0,void 0,Object.fromEntries([[Ce[Be-5],Ce[Be-3]]]));break;case 58:this.$=Ce[Be-3],xi.addVertex(Ce[Be-3],Ce[Be-1],"cylinder");break;case 59:this.$=Ce[Be-3],xi.addVertex(Ce[Be-3],Ce[Be-1],"round");break;case 60:this.$=Ce[Be-3],xi.addVertex(Ce[Be-3],Ce[Be-1],"diamond");break;case 61:this.$=Ce[Be-5],xi.addVertex(Ce[Be-5],Ce[Be-2],"hexagon");break;case 62:this.$=Ce[Be-3],xi.addVertex(Ce[Be-3],Ce[Be-1],"odd");break;case 63:this.$=Ce[Be-3],xi.addVertex(Ce[Be-3],Ce[Be-1],"trapezoid");break;case 64:this.$=Ce[Be-3],xi.addVertex(Ce[Be-3],Ce[Be-1],"inv_trapezoid");break;case 65:this.$=Ce[Be-3],xi.addVertex(Ce[Be-3],Ce[Be-1],"lean_right");break;case 66:this.$=Ce[Be-3],xi.addVertex(Ce[Be-3],Ce[Be-1],"lean_left");break;case 67:this.$=Ce[Be],xi.addVertex(Ce[Be]);break;case 68:Ce[Be-1].text=Ce[Be],this.$=Ce[Be-1];break;case 69:case 70:Ce[Be-2].text=Ce[Be-1],this.$=Ce[Be-2];break;case 71:this.$=Ce[Be];break;case 72:var Ff=xi.destructLink(Ce[Be],Ce[Be-2]);this.$={type:Ff.type,stroke:Ff.stroke,length:Ff.length,text:Ce[Be-1]};break;case 73:this.$={text:Ce[Be],type:"text"};break;case 74:this.$={text:Ce[Be-1].text+""+Ce[Be],type:Ce[Be-1].type};break;case 75:this.$={text:Ce[Be],type:"string"};break;case 76:this.$={text:Ce[Be],type:"markdown"};break;case 77:var Ff=xi.destructLink(Ce[Be]);this.$={type:Ff.type,stroke:Ff.stroke,length:Ff.length};break;case 78:this.$=Ce[Be-1];break;case 79:this.$={text:Ce[Be],type:"text"};break;case 80:this.$={text:Ce[Be-1].text+""+Ce[Be],type:Ce[Be-1].type};break;case 81:this.$={text:Ce[Be],type:"string"};break;case 82:case 97:this.$={text:Ce[Be],type:"markdown"};break;case 94:this.$={text:Ce[Be],type:"text"};break;case 95:this.$={text:Ce[Be-1].text+""+Ce[Be],type:Ce[Be-1].type};break;case 96:this.$={text:Ce[Be],type:"text"};break;case 98:this.$=Ce[Be-4],xi.addClass(Ce[Be-2],Ce[Be]);break;case 99:this.$=Ce[Be-4],xi.setClass(Ce[Be-2],Ce[Be]);break;case 100:case 108:this.$=Ce[Be-1],xi.setClickEvent(Ce[Be-1],Ce[Be]);break;case 101:case 109:this.$=Ce[Be-3],xi.setClickEvent(Ce[Be-3],Ce[Be-2]),xi.setTooltip(Ce[Be-3],Ce[Be]);break;case 102:this.$=Ce[Be-2],xi.setClickEvent(Ce[Be-2],Ce[Be-1],Ce[Be]);break;case 103:this.$=Ce[Be-4],xi.setClickEvent(Ce[Be-4],Ce[Be-3],Ce[Be-2]),xi.setTooltip(Ce[Be-4],Ce[Be]);break;case 104:this.$=Ce[Be-2],xi.setLink(Ce[Be-2],Ce[Be]);break;case 105:this.$=Ce[Be-4],xi.setLink(Ce[Be-4],Ce[Be-2]),xi.setTooltip(Ce[Be-4],Ce[Be]);break;case 106:this.$=Ce[Be-4],xi.setLink(Ce[Be-4],Ce[Be-2],Ce[Be]);break;case 107:this.$=Ce[Be-6],xi.setLink(Ce[Be-6],Ce[Be-4],Ce[Be]),xi.setTooltip(Ce[Be-6],Ce[Be-2]);break;case 110:this.$=Ce[Be-1],xi.setLink(Ce[Be-1],Ce[Be]);break;case 111:this.$=Ce[Be-3],xi.setLink(Ce[Be-3],Ce[Be-2]),xi.setTooltip(Ce[Be-3],Ce[Be]);break;case 112:this.$=Ce[Be-3],xi.setLink(Ce[Be-3],Ce[Be-2],Ce[Be]);break;case 113:this.$=Ce[Be-5],xi.setLink(Ce[Be-5],Ce[Be-4],Ce[Be]),xi.setTooltip(Ce[Be-5],Ce[Be-2]);break;case 114:this.$=Ce[Be-4],xi.addVertex(Ce[Be-2],void 0,void 0,Ce[Be]);break;case 115:this.$=Ce[Be-4],xi.updateLink([Ce[Be-2]],Ce[Be]);break;case 116:this.$=Ce[Be-4],xi.updateLink(Ce[Be-2],Ce[Be]);break;case 117:this.$=Ce[Be-8],xi.updateLinkInterpolate([Ce[Be-6]],Ce[Be-2]),xi.updateLink([Ce[Be-6]],Ce[Be]);break;case 118:this.$=Ce[Be-8],xi.updateLinkInterpolate(Ce[Be-6],Ce[Be-2]),xi.updateLink(Ce[Be-6],Ce[Be]);break;case 119:this.$=Ce[Be-6],xi.updateLinkInterpolate([Ce[Be-4]],Ce[Be]);break;case 120:this.$=Ce[Be-6],xi.updateLinkInterpolate(Ce[Be-4],Ce[Be]);break;case 121:case 123:this.$=[Ce[Be]];break;case 122:case 124:Ce[Be-2].push(Ce[Be]),this.$=Ce[Be-2];break;case 126:this.$=Ce[Be-1]+Ce[Be];break;case 174:this.$=Ce[Be];break;case 175:this.$=Ce[Be-1]+""+Ce[Be];break;case 177:this.$=Ce[Be-1]+""+Ce[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}},table:[{3:1,4:2,9:a,10:f,12:p},{1:[3]},i(v,m,{5:6}),{4:7,9:a,10:f,12:p},{4:8,9:a,10:f,12:p},{13:[1,9],14:[1,10]},{1:[2,1],6:11,7:12,8:b,9:E,10:_,11:L,20:17,22:18,23:19,24:20,25:21,26:22,27:N,33:24,34:B,36:j,38:R,40:28,41:38,42:z,43:39,45:40,58:K,81:it,82:st,83:ut,84:bt,85:mt,86:yt,99:dt,102:ht,103:wt,106:X,108:pt,110:41,111:U,112:xt,113:nt,118:Ot,119:Nt,120:qt,121:Ct},i(v,[2,9]),i(v,[2,10]),i(v,[2,11]),{8:[1,54],9:[1,55],10:Z,15:53,18:56},i(Tt,[2,3]),i(Tt,[2,4]),i(Tt,[2,5]),i(Tt,[2,6]),i(Tt,[2,7]),i(Tt,[2,8]),{8:Ht,9:It,11:Ft,21:58,39:59,70:63,73:[1,64],75:[1,65]},{8:Ht,9:It,11:Ft,21:66},{8:Ht,9:It,11:Ft,21:67},{8:Ht,9:It,11:Ft,21:68},{8:Ht,9:It,11:Ft,21:69},{8:Ht,9:It,11:Ft,21:70},{8:Ht,9:It,10:[1,71],11:Ft,21:72},i(Tt,[2,36]),{35:[1,73]},{37:[1,74]},i(Tt,[2,39]),i(ke,[2,46],{18:75,10:Z}),{10:[1,76]},{10:[1,77]},{10:[1,78]},{10:[1,79]},{14:pn,42:Me,58:ve,77:[1,83],86:Ge,92:[1,80],94:[1,81],98:82,102:Ke,103:we,106:_e,108:$t,111:re,112:ie,113:Oe,117:84},i(Tt,[2,178]),i(Tt,[2,179]),i(Tt,[2,180]),i(Tt,[2,181]),i(oe,[2,47]),i(oe,[2,49],{44:[1,96]}),i(Ne,[2,67],{110:109,29:[1,97],42:z,46:[1,98],48:[1,99],50:[1,100],52:[1,101],54:[1,102],56:[1,103],58:K,61:[1,104],63:[1,105],65:[1,106],66:[1,107],68:[1,108],86:yt,99:dt,102:ht,103:wt,106:X,108:pt,111:U,112:xt,113:nt}),i(me,[2,174]),i(me,[2,135]),i(me,[2,136]),i(me,[2,137]),i(me,[2,138]),i(me,[2,139]),i(me,[2,140]),i(me,[2,141]),i(me,[2,142]),i(me,[2,143]),i(me,[2,144]),i(me,[2,145]),i(v,[2,12]),i(v,[2,18]),i(v,[2,19]),{9:[1,110]},i(cn,[2,26],{18:111,10:Z}),i(Tt,[2,27]),{40:112,41:38,42:z,43:39,45:40,58:K,86:yt,99:dt,102:ht,103:wt,106:X,108:pt,110:41,111:U,112:xt,113:nt},i(Tt,[2,40]),i(Tt,[2,41]),i(Tt,[2,42]),i(li,[2,71],{71:113,60:[1,115],72:[1,114]}),{74:116,76:117,77:[1,118],78:[1,119],113:ya,116:da},i([42,58,60,72,86,99,102,103,106,108,111,112,113],[2,77]),i(Tt,[2,28]),i(Tt,[2,29]),i(Tt,[2,30]),i(Tt,[2,31]),i(Tt,[2,32]),{10:Oo,12:ds,14:Dr,27:nr,28:122,32:di,42:Ee,58:Yn,73:He,77:[1,124],78:[1,125],80:135,81:Ti,82:gn,83:ks,84:qa,85:La,86:Gs,87:No,88:123,102:vs,106:nu,108:$s,111:Lu,112:fm,113:av},i(Uu,m,{5:148}),i(Tt,[2,37]),i(Tt,[2,38]),i(ke,[2,45],{42:Zl}),{42:z,45:150,58:K,86:yt,99:dt,102:ht,103:wt,106:X,108:pt,110:41,111:U,112:xt,113:nt},{99:[1,151],100:152,102:[1,153]},{42:z,45:154,58:K,86:yt,99:dt,102:ht,103:wt,106:X,108:pt,110:41,111:U,112:xt,113:nt},{42:z,45:155,58:K,86:yt,99:dt,102:ht,103:wt,106:X,108:pt,110:41,111:U,112:xt,113:nt},i(Pa,[2,100],{10:[1,156],93:[1,157]}),{77:[1,158]},i(Pa,[2,108],{117:160,10:[1,159],14:pn,42:Me,58:ve,86:Ge,102:Ke,103:we,106:_e,108:$t,111:re,112:ie,113:Oe}),i(Pa,[2,110],{10:[1,161]}),i(Al,[2,176]),i(Al,[2,163]),i(Al,[2,164]),i(Al,[2,165]),i(Al,[2,166]),i(Al,[2,167]),i(Al,[2,168]),i(Al,[2,169]),i(Al,[2,170]),i(Al,[2,171]),i(Al,[2,172]),i(Al,[2,173]),{42:z,45:162,58:K,86:yt,99:dt,102:ht,103:wt,106:X,108:pt,110:41,111:U,112:xt,113:nt},{30:163,65:ua,77:bc,78:Cc,79:164,113:ga,114:Ma,115:Ha},{30:171,65:ua,77:bc,78:Cc,79:164,113:ga,114:Ma,115:Ha},{30:173,48:[1,172],65:ua,77:bc,78:Cc,79:164,113:ga,114:Ma,115:Ha},{30:174,65:ua,77:bc,78:Cc,79:164,113:ga,114:Ma,115:Ha},{30:175,65:ua,77:bc,78:Cc,79:164,113:ga,114:Ma,115:Ha},{30:176,65:ua,77:bc,78:Cc,79:164,113:ga,114:Ma,115:Ha},{106:[1,177]},{30:178,65:ua,77:bc,78:Cc,79:164,113:ga,114:Ma,115:Ha},{30:179,63:[1,180],65:ua,77:bc,78:Cc,79:164,113:ga,114:Ma,115:Ha},{30:181,65:ua,77:bc,78:Cc,79:164,113:ga,114:Ma,115:Ha},{30:182,65:ua,77:bc,78:Cc,79:164,113:ga,114:Ma,115:Ha},{30:183,65:ua,77:bc,78:Cc,79:164,113:ga,114:Ma,115:Ha},i(me,[2,175]),i(v,[2,20]),i(cn,[2,25]),i(ke,[2,43],{18:184,10:Z}),i(li,[2,68],{10:[1,185]}),{10:[1,186]},{30:187,65:ua,77:bc,78:Cc,79:164,113:ga,114:Ma,115:Ha},{75:[1,188],76:189,113:ya,116:da},i(Ll,[2,73]),i(Ll,[2,75]),i(Ll,[2,76]),i(Ll,[2,161]),i(Ll,[2,162]),{8:Ht,9:It,10:Oo,11:Ft,12:ds,14:Dr,21:191,27:nr,29:[1,190],32:di,42:Ee,58:Yn,73:He,80:135,81:Ti,82:gn,83:ks,84:qa,85:La,86:Gs,87:No,88:192,102:vs,106:nu,108:$s,111:Lu,112:fm,113:av},i(_c,[2,94]),i(_c,[2,96]),i(_c,[2,97]),i(_c,[2,150]),i(_c,[2,151]),i(_c,[2,152]),i(_c,[2,153]),i(_c,[2,154]),i(_c,[2,155]),i(_c,[2,156]),i(_c,[2,157]),i(_c,[2,158]),i(_c,[2,159]),i(_c,[2,160]),i(_c,[2,83]),i(_c,[2,84]),i(_c,[2,85]),i(_c,[2,86]),i(_c,[2,87]),i(_c,[2,88]),i(_c,[2,89]),i(_c,[2,90]),i(_c,[2,91]),i(_c,[2,92]),i(_c,[2,93]),{6:11,7:12,8:b,9:E,10:_,11:L,20:17,22:18,23:19,24:20,25:21,26:22,27:N,32:[1,193],33:24,34:B,36:j,38:R,40:28,41:38,42:z,43:39,45:40,58:K,81:it,82:st,83:ut,84:bt,85:mt,86:yt,99:dt,102:ht,103:wt,106:X,108:pt,110:41,111:U,112:xt,113:nt,118:Ot,119:Nt,120:qt,121:Ct},{10:Z,18:194},{10:[1,195],42:z,58:K,86:yt,99:dt,102:ht,103:wt,106:X,108:pt,110:109,111:U,112:xt,113:nt},{10:[1,196]},{10:[1,197],103:[1,198]},i(ov,[2,121]),{10:[1,199],42:z,58:K,86:yt,99:dt,102:ht,103:wt,106:X,108:pt,110:109,111:U,112:xt,113:nt},{10:[1,200],42:z,58:K,86:yt,99:dt,102:ht,103:wt,106:X,108:pt,110:109,111:U,112:xt,113:nt},{77:[1,201]},i(Pa,[2,102],{10:[1,202]}),i(Pa,[2,104],{10:[1,203]}),{77:[1,204]},i(Al,[2,177]),{77:[1,205],95:[1,206]},i(oe,[2,50],{110:109,42:z,58:K,86:yt,99:dt,102:ht,103:wt,106:X,108:pt,111:U,112:xt,113:nt}),{31:[1,207],65:ua,79:208,113:ga,114:Ma,115:Ha},i(Jl,[2,79]),i(Jl,[2,81]),i(Jl,[2,82]),i(Jl,[2,146]),i(Jl,[2,147]),i(Jl,[2,148]),i(Jl,[2,149]),{47:[1,209],65:ua,79:208,113:ga,114:Ma,115:Ha},{30:210,65:ua,77:bc,78:Cc,79:164,113:ga,114:Ma,115:Ha},{49:[1,211],65:ua,79:208,113:ga,114:Ma,115:Ha},{51:[1,212],65:ua,79:208,113:ga,114:Ma,115:Ha},{53:[1,213],65:ua,79:208,113:ga,114:Ma,115:Ha},{55:[1,214],65:ua,79:208,113:ga,114:Ma,115:Ha},{58:[1,215]},{62:[1,216],65:ua,79:208,113:ga,114:Ma,115:Ha},{64:[1,217],65:ua,79:208,113:ga,114:Ma,115:Ha},{30:218,65:ua,77:bc,78:Cc,79:164,113:ga,114:Ma,115:Ha},{31:[1,219],65:ua,79:208,113:ga,114:Ma,115:Ha},{65:ua,67:[1,220],69:[1,221],79:208,113:ga,114:Ma,115:Ha},{65:ua,67:[1,223],69:[1,222],79:208,113:ga,114:Ma,115:Ha},i(ke,[2,44],{42:Zl}),i(li,[2,70]),i(li,[2,69]),{60:[1,224],65:ua,79:208,113:ga,114:Ma,115:Ha},i(li,[2,72]),i(Ll,[2,74]),{30:225,65:ua,77:bc,78:Cc,79:164,113:ga,114:Ma,115:Ha},i(Uu,m,{5:226}),i(_c,[2,95]),i(Tt,[2,35]),{41:227,42:z,43:39,45:40,58:K,86:yt,99:dt,102:ht,103:wt,106:X,108:pt,110:41,111:U,112:xt,113:nt},{10:Z1,58:Fd,81:J1,89:228,102:Bd,104:229,105:230,106:E0,107:Bi,108:on,109:kr},{10:Z1,58:Fd,81:J1,89:239,101:[1,240],102:Bd,104:229,105:230,106:E0,107:Bi,108:on,109:kr},{10:Z1,58:Fd,81:J1,89:241,101:[1,242],102:Bd,104:229,105:230,106:E0,107:Bi,108:on,109:kr},{102:[1,243]},{10:Z1,58:Fd,81:J1,89:244,102:Bd,104:229,105:230,106:E0,107:Bi,108:on,109:kr},{42:z,45:245,58:K,86:yt,99:dt,102:ht,103:wt,106:X,108:pt,110:41,111:U,112:xt,113:nt},i(Pa,[2,101]),{77:[1,246]},{77:[1,247],95:[1,248]},i(Pa,[2,109]),i(Pa,[2,111],{10:[1,249]}),i(Pa,[2,112]),i(Ne,[2,51]),i(Jl,[2,80]),i(Ne,[2,52]),{49:[1,250],65:ua,79:208,113:ga,114:Ma,115:Ha},i(Ne,[2,59]),i(Ne,[2,54]),i(Ne,[2,55]),i(Ne,[2,56]),{106:[1,251]},i(Ne,[2,58]),i(Ne,[2,60]),{64:[1,252],65:ua,79:208,113:ga,114:Ma,115:Ha},i(Ne,[2,62]),i(Ne,[2,63]),i(Ne,[2,65]),i(Ne,[2,64]),i(Ne,[2,66]),i([10,42,58,86,99,102,103,106,108,111,112,113],[2,78]),{31:[1,253],65:ua,79:208,113:ga,114:Ma,115:Ha},{6:11,7:12,8:b,9:E,10:_,11:L,20:17,22:18,23:19,24:20,25:21,26:22,27:N,32:[1,254],33:24,34:B,36:j,38:R,40:28,41:38,42:z,43:39,45:40,58:K,81:it,82:st,83:ut,84:bt,85:mt,86:yt,99:dt,102:ht,103:wt,106:X,108:pt,110:41,111:U,112:xt,113:nt,118:Ot,119:Nt,120:qt,121:Ct},i(oe,[2,48]),i(Pa,[2,114],{103:Ei}),i(Jo,[2,123],{105:256,10:Z1,58:Fd,81:J1,102:Bd,106:E0,107:Bi,108:on,109:kr}),i(vc,[2,125]),i(vc,[2,127]),i(vc,[2,128]),i(vc,[2,129]),i(vc,[2,130]),i(vc,[2,131]),i(vc,[2,132]),i(vc,[2,133]),i(vc,[2,134]),i(Pa,[2,115],{103:Ei}),{10:[1,257]},i(Pa,[2,116],{103:Ei}),{10:[1,258]},i(ov,[2,122]),i(Pa,[2,98],{103:Ei}),i(Pa,[2,99],{110:109,42:z,58:K,86:yt,99:dt,102:ht,103:wt,106:X,108:pt,111:U,112:xt,113:nt}),i(Pa,[2,103]),i(Pa,[2,105],{10:[1,259]}),i(Pa,[2,106]),{95:[1,260]},{49:[1,261]},{60:[1,262]},{64:[1,263]},{8:Ht,9:It,11:Ft,21:264},i(Tt,[2,34]),{10:Z1,58:Fd,81:J1,102:Bd,104:265,105:230,106:E0,107:Bi,108:on,109:kr},i(vc,[2,126]),{14:pn,42:Me,58:ve,86:Ge,98:266,102:Ke,103:we,106:_e,108:$t,111:re,112:ie,113:Oe,117:84},{14:pn,42:Me,58:ve,86:Ge,98:267,102:Ke,103:we,106:_e,108:$t,111:re,112:ie,113:Oe,117:84},{95:[1,268]},i(Pa,[2,113]),i(Ne,[2,53]),{30:269,65:ua,77:bc,78:Cc,79:164,113:ga,114:Ma,115:Ha},i(Ne,[2,61]),i(Uu,m,{5:270}),i(Jo,[2,124],{105:256,10:Z1,58:Fd,81:J1,102:Bd,106:E0,107:Bi,108:on,109:kr}),i(Pa,[2,119],{117:160,10:[1,271],14:pn,42:Me,58:ve,86:Ge,102:Ke,103:we,106:_e,108:$t,111:re,112:ie,113:Oe}),i(Pa,[2,120],{117:160,10:[1,272],14:pn,42:Me,58:ve,86:Ge,102:Ke,103:we,106:_e,108:$t,111:re,112:ie,113:Oe}),i(Pa,[2,107]),{31:[1,273],65:ua,79:208,113:ga,114:Ma,115:Ha},{6:11,7:12,8:b,9:E,10:_,11:L,20:17,22:18,23:19,24:20,25:21,26:22,27:N,32:[1,274],33:24,34:B,36:j,38:R,40:28,41:38,42:z,43:39,45:40,58:K,81:it,82:st,83:ut,84:bt,85:mt,86:yt,99:dt,102:ht,103:wt,106:X,108:pt,110:41,111:U,112:xt,113:nt,118:Ot,119:Nt,120:qt,121:Ct},{10:Z1,58:Fd,81:J1,89:275,102:Bd,104:229,105:230,106:E0,107:Bi,108:on,109:kr},{10:Z1,58:Fd,81:J1,89:276,102:Bd,104:229,105:230,106:E0,107:Bi,108:on,109:kr},i(Ne,[2,57]),i(Tt,[2,33]),i(Pa,[2,117],{103:Ei}),i(Pa,[2,118],{103:Ei})],defaultActions:{},parseError:function(Xi,Es){if(Es.recoverable)this.trace(Xi);else{var xa=new Error(Xi);throw xa.hash=Es,xa}},parse:function(Xi){var Es=this,xa=[0],xi=[],Wc=[null],Ce=[],gp=this.table,Be="",Ff=0,dg=0,dm=2,pk=1,x3=Ce.slice.call(arguments,1),Ml=Object.create(this.lexer),T0={yy:{}};for(var cv in this.yy)Object.prototype.hasOwnProperty.call(this.yy,cv)&&(T0.yy[cv]=this.yy[cv]);Ml.setInput(Xi,T0.yy),T0.yy.lexer=Ml,T0.yy.parser=this,typeof Ml.yylloc>"u"&&(Ml.yylloc={});var F5=Ml.yylloc;Ce.push(F5);var jb=Ml.options&&Ml.options.ranges;typeof T0.yy.parseError=="function"?this.parseError=T0.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function B5(){var gg;return gg=xi.pop()||Ml.lex()||pk,typeof gg!="number"&&(gg instanceof Array&&(xi=gg,gg=xi.pop()),gg=Es.symbols_[gg]||gg),gg}for(var l1,td,ed,R5,uv={},j5,pp,$5,k3;;){if(td=xa[xa.length-1],this.defaultActions[td]?ed=this.defaultActions[td]:((l1===null||typeof l1>"u")&&(l1=B5()),ed=gp[td]&&gp[td][l1]),typeof ed>"u"||!ed.length||!ed[0]){var gm="";k3=[];for(j5 in gp[td])this.terminals_[j5]&&j5>dm&&k3.push("'"+this.terminals_[j5]+"'");Ml.showPosition?gm="Parse error on line "+(Ff+1)+`:
`+Ml.showPosition()+`
Expecting `+k3.join(", ")+", got '"+(this.terminals_[l1]||l1)+"'":gm="Parse error on line "+(Ff+1)+": Unexpected "+(l1==pk?"end of input":"'"+(this.terminals_[l1]||l1)+"'"),this.parseError(gm,{text:Ml.match,token:this.terminals_[l1]||l1,line:Ml.yylineno,loc:F5,expected:k3})}if(ed[0]instanceof Array&&ed.length>1)throw new Error("Parse Error: multiple actions possible at state: "+td+", token: "+l1);switch(ed[0]){case 1:xa.push(l1),Wc.push(Ml.yytext),Ce.push(Ml.yylloc),xa.push(ed[1]),l1=null,dg=Ml.yyleng,Be=Ml.yytext,Ff=Ml.yylineno,F5=Ml.yylloc;break;case 2:if(pp=this.productions_[ed[1]][1],uv.$=Wc[Wc.length-pp],uv._$={first_line:Ce[Ce.length-(pp||1)].first_line,last_line:Ce[Ce.length-1].last_line,first_column:Ce[Ce.length-(pp||1)].first_column,last_column:Ce[Ce.length-1].last_column},jb&&(uv._$.range=[Ce[Ce.length-(pp||1)].range[0],Ce[Ce.length-1].range[1]]),R5=this.performAction.apply(uv,[Be,dg,Ff,T0.yy,ed[1],Wc,Ce].concat(x3)),typeof R5<"u")return R5;pp&&(xa=xa.slice(0,-1*pp*2),Wc=Wc.slice(0,-1*pp),Ce=Ce.slice(0,-1*pp)),xa.push(this.productions_[ed[1]][0]),Wc.push(uv.$),Ce.push(uv._$),$5=gp[xa[xa.length-2]][xa[xa.length-1]],xa.push($5);break;case 3:return!0}}return!0}},Oc=function(){var nf={EOF:1,parseError:function(Es,xa){if(this.yy.parser)this.yy.parser.parseError(Es,xa);else throw new Error(Es)},setInput:function(Xi,Es){return this.yy=Es||this.yy||{},this._input=Xi,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},input:function(){var Xi=this._input[0];this.yytext+=Xi,this.yyleng++,this.offset++,this.match+=Xi,this.matched+=Xi;var Es=Xi.match(/(?:\r\n?|\n).*/g);return Es?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),Xi},unput:function(Xi){var Es=Xi.length,xa=Xi.split(/(?:\r\n?|\n)/g);this._input=Xi+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-Es),this.offset-=Es;var xi=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),xa.length-1&&(this.yylineno-=xa.length-1);var Wc=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:xa?(xa.length===xi.length?this.yylloc.first_column:0)+xi[xi.length-xa.length].length-xa[0].length:this.yylloc.first_column-Es},this.options.ranges&&(this.yylloc.range=[Wc[0],Wc[0]+this.yyleng-Es]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject: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},less:function(Xi){this.unput(this.match.slice(Xi))},pastInput:function(){var Xi=this.matched.substr(0,this.matched.length-this.match.length);return(Xi.length>20?"...":"")+Xi.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var Xi=this.match;return Xi.length<20&&(Xi+=this._input.substr(0,20-Xi.length)),(Xi.substr(0,20)+(Xi.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var Xi=this.pastInput(),Es=new Array(Xi.length+1).join("-");return Xi+this.upcomingInput()+`
`+Es+"^"},test_match:function(Xi,Es){var xa,xi,Wc;if(this.options.backtrack_lexer&&(Wc={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&&(Wc.yylloc.range=this.yylloc.range.slice(0))),xi=Xi[0].match(/(?:\r\n?|\n).*/g),xi&&(this.yylineno+=xi.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:xi?xi[xi.length-1].length-xi[xi.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+Xi[0].length},this.yytext+=Xi[0],this.match+=Xi[0],this.matches=Xi,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(Xi[0].length),this.matched+=Xi[0],xa=this.performAction.call(this,this.yy,this,Es,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),xa)return xa;if(this._backtrack){for(var Ce in Wc)this[Ce]=Wc[Ce];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var Xi,Es,xa,xi;this._more||(this.yytext="",this.match="");for(var Wc=this._currentRules(),Ce=0;Ce<Wc.length;Ce++)if(xa=this._input.match(this.rules[Wc[Ce]]),xa&&(!Es||xa[0].length>Es[0].length)){if(Es=xa,xi=Ce,this.options.backtrack_lexer){if(Xi=this.test_match(xa,Wc[Ce]),Xi!==!1)return Xi;if(this._backtrack){Es=!1;continue}else return!1}else if(!this.options.flex)break}return Es?(Xi=this.test_match(Es,Wc[xi]),Xi!==!1?Xi:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text.
`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var Es=this.next();return Es||this.lex()},begin:function(Es){this.conditionStack.push(Es)},popState:function(){var Es=this.conditionStack.length-1;return Es>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(Es){return Es=this.conditionStack.length-1-Math.abs(Es||0),Es>=0?this.conditionStack[Es]:"INITIAL"},pushState:function(Es){this.begin(Es)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(Es,xa,xi,Wc){switch(xi){case 0:return this.begin("acc_title"),34;case 1:return this.popState(),"acc_title_value";case 2:return this.begin("acc_descr"),36;case 3:return this.popState(),"acc_descr_value";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 Es.lex.firstGraph()&&this.begin("dir"),12;case 30:return Es.lex.firstGraph()&&this.begin("dir"),12;case 31:return Es.lex.firstGraph()&&this.begin("dir"),12;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;case 39:return this.popState(),14;case 40:return this.popState(),14;case 41:return this.popState(),14;case 42:return this.popState(),14;case 43:return this.popState(),14;case 44:return this.popState(),14;case 45:return this.popState(),14;case 46:return this.popState(),14;case 47:return this.popState(),14;case 48:return this.popState(),14;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;case 62:return this.pushState("edgeText"),73;case 63:return 116;case 64:return this.popState(),75;case 65:return this.pushState("thickEdgeText"),73;case 66:return 116;case 67:return this.popState(),75;case 68:return this.pushState("dottedEdgeText"),73;case 69:return 116;case 70:return 75;case 71:return this.popState(),51;case 72:return"TEXT";case 73:return this.pushState("ellipseText"),50;case 74:return this.popState(),53;case 75:return this.pushState("text"),52;case 76:return this.popState(),55;case 77:return this.pushState("text"),54;case 78:return 56;case 79:return this.pushState("text"),65;case 80:return this.popState(),62;case 81:return this.pushState("text"),61;case 82:return this.popState(),47;case 83:return this.pushState("text"),46;case 84:return this.popState(),67;case 85:return this.popState(),69;case 86:return 114;case 87:return this.pushState("trapText"),66;case 88:return this.pushState("trapText"),68;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;case 101:return this.pushState("text"),60;case 102:return this.popState(),49;case 103:return this.pushState("text"),48;case 104:return this.popState(),31;case 105:return this.pushState("text"),29;case 106:return this.popState(),64;case 107:return this.pushState("text"),63;case 108:return"TEXT";case 109:return"QUOTE";case 110:return 9;case 111:return 10;case 112:return 11}},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 nf}();tf.lexer=Oc;function ef(){this.yy={}}return ef.prototype=tf,tf.Parser=ef,new ef}();jdt.parser=jdt;const $dt=jdt,DIe="flowchart-";let CNt=0,zdt=Le(),pl={},dT=[],XA={},E5=[],WW={},KW={},YW=0,qdt=!0,tv,XW,QW=[];const ZW=i=>Yr.sanitizeText(i,zdt),sP=function(i){const a=Object.keys(pl);for(const f of a)if(pl[f].id===i)return pl[f].domId;return i},_Nt=function(i,a,f,p,v,m,b={}){let E,_=i;_!==void 0&&_.trim().length!==0&&(pl[_]===void 0&&(pl[_]={id:_,labelType:"text",domId:DIe+_+"-"+CNt,styles:[],classes:[]}),CNt++,a!==void 0?(zdt=Le(),E=ZW(a.text.trim()),pl[_].labelType=a.type,E[0]==='"'&&E[E.length-1]==='"'&&(E=E.substring(1,E.length-1)),pl[_].text=E):pl[_].text===void 0&&(pl[_].text=i),f!==void 0&&(pl[_].type=f),p!=null&&p.forEach(function(L){pl[_].styles.push(L)}),v!=null&&v.forEach(function(L){pl[_].classes.push(L)}),m!==void 0&&(pl[_].dir=m),pl[_].props===void 0?pl[_].props=b:b!==void 0&&Object.assign(pl[_].props,b))},SNt=function(i,a,f){const m={start:i,end:a,type:void 0,text:"",labelType:"text"};Ut.info("abc78 Got edge...",m);const b=f.text;b!==void 0&&(m.text=ZW(b.text.trim()),m.text[0]==='"'&&m.text[m.text.length-1]==='"'&&(m.text=m.text.substring(1,m.text.length-1)),m.labelType=b.type),f!==void 0&&(m.type=f.type,m.stroke=f.stroke,m.length=f.length),dT.push(m)},ANt=function(i,a,f){Ut.info("addLink (abc78)",i,a,f);let p,v;for(p=0;p<i.length;p++)for(v=0;v<a.length;v++)SNt(i[p],a[v],f)},LNt=function(i,a){i.forEach(function(f){f==="default"?dT.defaultInterpolate=a:dT[f].interpolate=a})},MNt=function(i,a){i.forEach(function(f){f==="default"?dT.defaultStyle=a:($a.isSubstringInArray("fill",a)===-1&&a.push("fill:none"),dT[f].style=a)})},INt=function(i,a){i.split(",").forEach(function(f){XA[f]===void 0&&(XA[f]={id:f,styles:[],textStyles:[]}),a!=null&&a.forEach(function(p){if(p.match("color")){const v=p.replace("fill","bgFill").replace("color","fill");XA[f].textStyles.push(v)}XA[f].styles.push(p)})})},DNt=function(i){tv=i,tv.match(/.*</)&&(tv="RL"),tv.match(/.*\^/)&&(tv="BT"),tv.match(/.*>/)&&(tv="LR"),tv.match(/.*v/)&&(tv="TB"),tv==="TD"&&(tv="TB")},JW=function(i,a){i.split(",").forEach(function(f){let p=f;pl[p]!==void 0&&pl[p].classes.push(a),WW[p]!==void 0&&WW[p].classes.push(a)})},OIe=function(i,a){i.split(",").forEach(function(f){a!==void 0&&(KW[XW==="gen-1"?sP(f):f]=ZW(a))})},NIe=function(i,a,f){let p=sP(i);if(Le().securityLevel!=="loose"||a===void 0)return;let v=[];if(typeof f=="string"){v=f.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let m=0;m<v.length;m++){let b=v[m].trim();b.charAt(0)==='"'&&b.charAt(b.length-1)==='"'&&(b=b.substr(1,b.length-2)),v[m]=b}}v.length===0&&v.push(i),pl[i]!==void 0&&(pl[i].haveCallback=!0,QW.push(function(){const m=document.querySelector(`[id="${p}"]`);m!==null&&m.addEventListener("click",function(){$a.runFunc(a,...v)},!1)}))},ONt=function(i,a,f){i.split(",").forEach(function(p){pl[p]!==void 0&&(pl[p].link=$a.formatUrl(a,zdt),pl[p].linkTarget=f)}),JW(i,"clickable")},NNt=function(i){if(KW.hasOwnProperty(i))return KW[i]},PNt=function(i,a,f){i.split(",").forEach(function(p){NIe(p,a,f)}),JW(i,"clickable")},FNt=function(i){QW.forEach(function(a){a(i)})},BNt=function(){return tv.trim()},RNt=function(){return pl},jNt=function(){return dT},$Nt=function(){return XA},zNt=function(i){let a=yr(".mermaidTooltip");(a._groups||a)[0][0]===null&&(a=yr("body").append("div").attr("class","mermaidTooltip").style("opacity",0)),yr(i).select("svg").selectAll("g.node").on("mouseover",function(){const v=yr(this);if(v.attr("title")===null)return;const b=this.getBoundingClientRect();a.transition().duration(200).style("opacity",".9"),a.text(v.attr("title")).style("left",window.scrollX+b.left+(b.right-b.left)/2+"px").style("top",window.scrollY+b.top-14+document.body.scrollTop+"px"),a.html(a.html().replace(/&lt;br\/&gt;/g,"<br/>")),v.classed("hover",!0)}).on("mouseout",function(){a.transition().duration(500).style("opacity",0),yr(this).classed("hover",!1)})};QW.push(zNt);const qNt=function(i="gen-1"){pl={},XA={},dT=[],QW=[zNt],E5=[],WW={},YW=0,KW={},qdt=!0,XW=i,ap()},HNt=i=>{XW=i||"gen-2"},GNt=function(){return"fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;"},VNt=function(i,a,f){let p=i.text.trim(),v=f.text;i===f&&f.text.match(/\s/)&&(p=void 0);function m(N){const B={boolean:{},number:{},string:{}},j=[];let R;return{nodeList:N.filter(function(K){const it=typeof K;return K.stmt&&K.stmt==="dir"?(R=K.value,!1):K.trim()===""?!1:it in B?B[it].hasOwnProperty(K)?!1:B[it][K]=!0:j.includes(K)?!1:j.push(K)}),dir:R}}let b=[];const{nodeList:E,dir:_}=m(b.concat.apply(b,a));if(b=E,XW==="gen-1")for(let N=0;N<b.length;N++)b[N]=sP(b[N]);p=p||"subGraph"+YW,v=v||"",v=ZW(v),YW=YW+1;const L={id:p,nodes:b,title:v.trim(),classes:[],dir:_,labelType:f.type};return Ut.info("Adding",L.id,L.nodes,L.dir),L.nodes=tPt(L,E5).nodes,E5.push(L),WW[p]=L,p},PIe=function(i){for(const[a,f]of E5.entries())if(f.id===i)return a;return-1};let aP=-1;const UNt=[],WNt=function(i,a){const f=E5[a].nodes;if(aP=aP+1,aP>2e3)return;if(UNt[aP]=a,E5[a].id===i)return{result:!0,count:0};let p=0,v=1;for(;p<f.length;){const m=PIe(f[p]);if(m>=0){const b=WNt(i,m);if(b.result)return{result:!0,count:v+b.count};v=v+b.count}p=p+1}return{result:!1,count:v}},KNt=function(i){return UNt[i]},YNt=function(){aP=-1,E5.length>0&&WNt("none",E5.length-1)},XNt=function(){return E5},QNt=()=>qdt?(qdt=!1,!0):!1,FIe=i=>{let a=i.trim(),f="arrow_open";switch(a[0]){case"<":f="arrow_point",a=a.slice(1);break;case"x":f="arrow_cross",a=a.slice(1);break;case"o":f="arrow_circle",a=a.slice(1);break}let p="normal";return a.includes("=")&&(p="thick"),a.includes(".")&&(p="dotted"),{type:f,stroke:p}},BIe=(i,a)=>{const f=a.length;let p=0;for(let v=0;v<f;++v)a[v]===i&&++p;return p},RIe=i=>{const a=i.trim();let f=a.slice(0,-1),p="arrow_open";switch(a.slice(-1)){case"x":p="arrow_cross",a[0]==="x"&&(p="double_"+p,f=f.slice(1));break;case">":p="arrow_point",a[0]==="<"&&(p="double_"+p,f=f.slice(1));break;case"o":p="arrow_circle",a[0]==="o"&&(p="double_"+p,f=f.slice(1));break}let v="normal",m=f.length-1;f[0]==="="&&(v="thick"),f[0]==="~"&&(v="invisible");let b=BIe(".",f);return b&&(v="dotted",m=b),{type:p,stroke:v,length:m}},ZNt=(i,a)=>{const f=RIe(i);let p;if(a){if(p=FIe(a),p.stroke!==f.stroke)return{type:"INVALID",stroke:"INVALID"};if(p.type==="arrow_open")p.type=f.type;else{if(p.type!==f.type)return{type:"INVALID",stroke:"INVALID"};p.type="double_"+p.type}return p.type==="double_arrow"&&(p.type="double_arrow_point"),p.length=f.length,p}return f},JNt=(i,a)=>{let f=!1;return i.forEach(p=>{p.nodes.indexOf(a)>=0&&(f=!0)}),f},tPt=(i,a)=>{const f=[];return i.nodes.forEach((p,v)=>{JNt(a,p)||f.push(i.nodes[v])}),{nodes:f}},ePt={firstGraph:QNt},gT={defaultConfig:()=>oT.flowchart,setAccTitle:cg,getAccTitle:op,getAccDescription:up,setAccDescription:cp,addVertex:_Nt,lookUpDomId:sP,addLink:ANt,updateLinkInterpolate:LNt,updateLink:MNt,addClass:INt,setDirection:DNt,setClass:JW,setTooltip:OIe,getTooltip:NNt,setClickEvent:PNt,setLink:ONt,bindFunctions:FNt,getDirection:BNt,getVertices:RNt,getEdges:jNt,getClasses:$Nt,clear:qNt,setGen:HNt,defaultStyle:GNt,addSubGraph:VNt,getDepthFirstPos:KNt,indexNodes:YNt,getSubGraphs:XNt,destructLink:ZNt,lex:ePt,exists:JNt,makeUniq:tPt,setDiagramTitle:Z2,getDiagramTitle:Db},jIe=Object.freeze(Object.defineProperty({__proto__:null,addClass:INt,addLink:ANt,addSingleLink:SNt,addSubGraph:VNt,addVertex:_Nt,bindFunctions:FNt,clear:qNt,default:gT,defaultStyle:GNt,destructLink:ZNt,firstGraph:QNt,getClasses:$Nt,getDepthFirstPos:KNt,getDirection:BNt,getEdges:jNt,getSubGraphs:XNt,getTooltip:NNt,getVertices:RNt,indexNodes:YNt,lex:ePt,lookUpDomId:sP,setClass:JW,setClickEvent:PNt,setDirection:DNt,setGen:HNt,setLink:ONt,updateLink:MNt,updateLinkInterpolate:LNt},Symbol.toStringTag,{value:"Module"}));var $Ie="[object Symbol]";function pT(i){return typeof i=="symbol"||l3(i)&&tT(i)==$Ie}function QA(i,a){for(var f=-1,p=i==null?0:i.length,v=Array(p);++f<p;)v[f]=a(i[f],f,i);return v}var zIe=1/0,nPt=Y2?Y2.prototype:void 0,rPt=nPt?nPt.toString:void 0;function iPt(i){if(typeof i=="string")return i;if(Mf(i))return QA(i,iPt)+"";if(pT(i))return rPt?rPt.call(i):"";var a=i+"";return a=="0"&&1/i==-zIe?"-0":a}var qIe=/\s/;function HIe(i){for(var a=i.length;a--&&qIe.test(i.charAt(a)););return a}var GIe=/^\s+/;function VIe(i){return i&&i.slice(0,HIe(i)+1).replace(GIe,"")}var sPt=0/0,UIe=/^[-+]0x[0-9a-f]+$/i,WIe=/^0b[01]+$/i,KIe=/^0o[0-7]+$/i,YIe=parseInt;function XIe(i){if(typeof i=="number")return i;if(pT(i))return sPt;if(Ib(i)){var a=typeof i.valueOf=="function"?i.valueOf():i;i=Ib(a)?a+"":a}if(typeof i!="string")return i===0?i:+i;i=VIe(i);var f=WIe.test(i);return f||KIe.test(i)?YIe(i.slice(2),f?2:8):UIe.test(i)?sPt:+i}var aPt=1/0,QIe=17976931348623157e292;function tK(i){if(!i)return i===0?i:0;if(i=XIe(i),i===aPt||i===-aPt){var a=i<0?-1:1;return a*QIe}return i===i?i:0}function ZIe(i){var a=tK(i),f=a%1;return a===a?f?a-f:a:0}function JIe(){}function oPt(i,a){for(var f=-1,p=i==null?0:i.length;++f<p&&a(i[f],f,i)!==!1;);return i}function cPt(i,a,f,p){for(var v=i.length,m=f+(p?1:-1);p?m--:++m<v;)if(a(i[m],m,i))return m;return-1}function tDe(i){return i!==i}function eDe(i,a,f){for(var p=f-1,v=i.length;++p<v;)if(i[p]===a)return p;return-1}function nDe(i,a,f){return a===a?eDe(i,a,f):cPt(i,tDe,f)}function rDe(i,a){var f=i==null?0:i.length;return!!f&&nDe(i,a,0)>-1}function Nb(i){return ek(i)?ODt(i):OOt(i)}var iDe=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,sDe=/^\w*$/;function Hdt(i,a){if(Mf(i))return!1;var f=typeof i;return f=="number"||f=="symbol"||f=="boolean"||i==null||pT(i)?!0:sDe.test(i)||!iDe.test(i)||a!=null&&i in Object(a)}var aDe=500;function oDe(i){var a=PA(i,function(p){return f.size===aDe&&f.clear(),p}),f=a.cache;return a}var cDe=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,uDe=/\\(\\)?/g,lDe=oDe(function(i){var a=[];return i.charCodeAt(0)===46&&a.push(""),i.replace(cDe,function(f,p,v,m){a.push(v?m.replace(uDe,"$1"):p||f)}),a});const hDe=lDe;function uPt(i){return i==null?"":iPt(i)}function eK(i,a){return Mf(i)?i:Hdt(i,a)?[i]:hDe(uPt(i))}var fDe=1/0;function oP(i){if(typeof i=="string"||pT(i))return i;var a=i+"";return a=="0"&&1/i==-fDe?"-0":a}function nK(i,a){a=eK(a,i);for(var f=0,p=a.length;i!=null&&f<p;)i=i[oP(a[f++])];return f&&f==p?i:void 0}function dDe(i,a,f){var p=i==null?void 0:nK(i,a);return p===void 0?f:p}function Gdt(i,a){for(var f=-1,p=a.length,v=i.length;++f<p;)i[v+f]=a[f];return i}var lPt=Y2?Y2.isConcatSpreadable:void 0;function gDe(i){return Mf(i)||FA(i)||!!(lPt&&i&&i[lPt])}function rK(i,a,f,p,v){var m=-1,b=i.length;for(f||(f=gDe),v||(v=[]);++m<b;){var E=i[m];a>0&&f(E)?a>1?rK(E,a-1,f,p,v):Gdt(v,E):p||(v[v.length]=E)}return v}function ZA(i){var a=i==null?0:i.length;return a?rK(i,1):[]}function pDe(i){return BDt(FDt(i,void 0,ZA),i+"")}function bDe(i,a,f,p){var v=-1,m=i==null?0:i.length;for(p&&m&&(f=i[++v]);++v<m;)f=a(f,i[v],v,i);return f}function vDe(i,a){return i&&KN(a,Nb(a),i)}function wDe(i,a){return i&&KN(a,iT(a),i)}function hPt(i,a){for(var f=-1,p=i==null?0:i.length,v=0,m=[];++f<p;){var b=i[f];a(b,f,i)&&(m[v++]=b)}return m}function fPt(){return[]}var mDe=Object.prototype,yDe=mDe.propertyIsEnumerable,dPt=Object.getOwnPropertySymbols,xDe=dPt?function(i){return i==null?[]:(i=Object(i),hPt(dPt(i),function(a){return yDe.call(i,a)}))}:fPt;const Vdt=xDe;function kDe(i,a){return KN(i,Vdt(i),a)}var EDe=Object.getOwnPropertySymbols,TDe=EDe?function(i){for(var a=[];i;)Gdt(a,Vdt(i)),i=Q1t(i);return a}:fPt;const gPt=TDe;function CDe(i,a){return KN(i,gPt(i),a)}function pPt(i,a,f){var p=a(i);return Mf(i)?p:Gdt(p,f(i))}function Udt(i){return pPt(i,Nb,Vdt)}function _De(i){return pPt(i,iT,gPt)}var SDe=Object.prototype,ADe=SDe.hasOwnProperty;function LDe(i){var a=i.length,f=new i.constructor(a);return a&&typeof i[0]=="string"&&ADe.call(i,"index")&&(f.index=i.index,f.input=i.input),f}function MDe(i,a){var f=a?X1t(i.buffer):i.buffer;return new i.constructor(f,i.byteOffset,i.byteLength)}var IDe=/\w*$/;function DDe(i){var a=new i.constructor(i.source,IDe.exec(i));return a.lastIndex=i.lastIndex,a}var bPt=Y2?Y2.prototype:void 0,vPt=bPt?bPt.valueOf:void 0;function ODe(i){return vPt?Object(vPt.call(i)):{}}var NDe="[object Boolean]",PDe="[object Date]",FDe="[object Map]",BDe="[object Number]",RDe="[object RegExp]",jDe="[object Set]",$De="[object String]",zDe="[object Symbol]",qDe="[object ArrayBuffer]",HDe="[object DataView]",GDe="[object Float32Array]",VDe="[object Float64Array]",UDe="[object Int8Array]",WDe="[object Int16Array]",KDe="[object Int32Array]",YDe="[object Uint8Array]",XDe="[object Uint8ClampedArray]",QDe="[object Uint16Array]",ZDe="[object Uint32Array]";function JDe(i,a,f){var p=i.constructor;switch(a){case qDe:return X1t(i);case NDe:case PDe:return new p(+i);case HDe:return MDe(i,f);case GDe:case VDe:case UDe:case WDe:case KDe:case YDe:case XDe:case QDe:case ZDe:return wDt(i,f);case FDe:return new p;case BDe:case $De:return new p(i);case RDe:return DDe(i);case jDe:return new p;case zDe:return ODe(i)}}var tOe="[object Map]";function eOe(i){return l3(i)&&VA(i)==tOe}var wPt=RA&&RA.isMap,nOe=wPt?wW(wPt):eOe;const rOe=nOe;var iOe="[object Set]";function sOe(i){return l3(i)&&VA(i)==iOe}var mPt=RA&&RA.isSet,aOe=mPt?wW(mPt):sOe;const oOe=aOe;var cOe=1,uOe=2,lOe=4,yPt="[object Arguments]",hOe="[object Array]",fOe="[object Boolean]",dOe="[object Date]",gOe="[object Error]",xPt="[object Function]",pOe="[object GeneratorFunction]",bOe="[object Map]",vOe="[object Number]",kPt="[object Object]",wOe="[object RegExp]",mOe="[object Set]",yOe="[object String]",xOe="[object Symbol]",kOe="[object WeakMap]",EOe="[object ArrayBuffer]",TOe="[object DataView]",COe="[object Float32Array]",_Oe="[object Float64Array]",SOe="[object Int8Array]",AOe="[object Int16Array]",LOe="[object Int32Array]",MOe="[object Uint8Array]",IOe="[object Uint8ClampedArray]",DOe="[object Uint16Array]",OOe="[object Uint32Array]",nl={};nl[yPt]=nl[hOe]=nl[EOe]=nl[TOe]=nl[fOe]=nl[dOe]=nl[COe]=nl[_Oe]=nl[SOe]=nl[AOe]=nl[LOe]=nl[bOe]=nl[vOe]=nl[kPt]=nl[wOe]=nl[mOe]=nl[yOe]=nl[xOe]=nl[MOe]=nl[IOe]=nl[DOe]=nl[OOe]=!0,nl[gOe]=nl[xPt]=nl[kOe]=!1;function cP(i,a,f,p,v,m){var b,E=a&cOe,_=a&uOe,L=a&lOe;if(f&&(b=v?f(i,p,v,m):f(i)),b!==void 0)return b;if(!Ib(i))return i;var N=Mf(i);if(N){if(b=LDe(i),!E)return mDt(i,b)}else{var B=VA(i),j=B==xPt||B==pOe;if(BA(i))return vDt(i,E);if(B==kPt||B==yPt||j&&!v){if(b=_||j?{}:kDt(i),!E)return _?CDe(i,wDe(b,i)):kDe(i,vDe(b,i))}else{if(!nl[B])return v?i:{};b=JDe(i,B,E)}}m||(m=new tm);var R=m.get(i);if(R)return R;m.set(i,b),oOe(i)?i.forEach(function(it){b.add(cP(it,a,f,it,i,m))}):rOe(i)&&i.forEach(function(it,st){b.set(st,cP(it,a,f,st,i,m))});var z=L?_?_De:Udt:_?iT:Nb,K=N?void 0:z(i);return oPt(K||i,function(it,st){K&&(st=it,it=i[st]),yW(b,st,cP(it,a,f,st,i,m))}),b}var NOe=4;function POe(i){return cP(i,NOe)}var FOe=1,BOe=4;function ROe(i){return cP(i,FOe|BOe)}var jOe="__lodash_hash_undefined__";function $Oe(i){return this.__data__.set(i,jOe),this}function zOe(i){return this.__data__.has(i)}function uP(i){var a=-1,f=i==null?0:i.length;for(this.__data__=new y5;++a<f;)this.add(i[a])}uP.prototype.add=uP.prototype.push=$Oe,uP.prototype.has=zOe;function qOe(i,a){for(var f=-1,p=i==null?0:i.length;++f<p;)if(a(i[f],f,i))return!0;return!1}function EPt(i,a){return i.has(a)}var HOe=1,GOe=2;function TPt(i,a,f,p,v,m){var b=f&HOe,E=i.length,_=a.length;if(E!=_&&!(b&&_>E))return!1;var L=m.get(i),N=m.get(a);if(L&&N)return L==a&&N==i;var B=-1,j=!0,R=f&GOe?new uP:void 0;for(m.set(i,a),m.set(a,i);++B<E;){var z=i[B],K=a[B];if(p)var it=b?p(K,z,B,a,i,m):p(z,K,B,i,a,m);if(it!==void 0){if(it)continue;j=!1;break}if(R){if(!qOe(a,function(st,ut){if(!EPt(R,ut)&&(z===st||v(z,st,f,p,m)))return R.push(ut)})){j=!1;break}}else if(!(z===K||v(z,K,f,p,m))){j=!1;break}}return m.delete(i),m.delete(a),j}function VOe(i){var a=-1,f=Array(i.size);return i.forEach(function(p,v){f[++a]=[v,p]}),f}function Wdt(i){var a=-1,f=Array(i.size);return i.forEach(function(p){f[++a]=p}),f}var UOe=1,WOe=2,KOe="[object Boolean]",YOe="[object Date]",XOe="[object Error]",QOe="[object Map]",ZOe="[object Number]",JOe="[object RegExp]",tNe="[object Set]",eNe="[object String]",nNe="[object Symbol]",rNe="[object ArrayBuffer]",iNe="[object DataView]",CPt=Y2?Y2.prototype:void 0,Kdt=CPt?CPt.valueOf:void 0;function sNe(i,a,f,p,v,m,b){switch(f){case iNe:if(i.byteLength!=a.byteLength||i.byteOffset!=a.byteOffset)return!1;i=i.buffer,a=a.buffer;case rNe:return!(i.byteLength!=a.byteLength||!m(new bW(i),new bW(a)));case KOe:case YOe:case ZOe:return NA(+i,+a);case XOe:return i.name==a.name&&i.message==a.message;case JOe:case eNe:return i==a+"";case QOe:var E=VOe;case tNe:var _=p&UOe;if(E||(E=Wdt),i.size!=a.size&&!_)return!1;var L=b.get(i);if(L)return L==a;p|=WOe,b.set(i,a);var N=TPt(E(i),E(a),p,v,m,b);return b.delete(i),N;case nNe:if(Kdt)return Kdt.call(i)==Kdt.call(a)}return!1}var aNe=1,oNe=Object.prototype,cNe=oNe.hasOwnProperty;function uNe(i,a,f,p,v,m){var b=f&aNe,E=Udt(i),_=E.length,L=Udt(a),N=L.length;if(_!=N&&!b)return!1;for(var B=_;B--;){var j=E[B];if(!(b?j in a:cNe.call(a,j)))return!1}var R=m.get(i),z=m.get(a);if(R&&z)return R==a&&z==i;var K=!0;m.set(i,a),m.set(a,i);for(var it=b;++B<_;){j=E[B];var st=i[j],ut=a[j];if(p)var bt=b?p(ut,st,j,a,i,m):p(st,ut,j,i,a,m);if(!(bt===void 0?st===ut||v(st,ut,f,p,m):bt)){K=!1;break}it||(it=j=="constructor")}if(K&&!it){var mt=i.constructor,yt=a.constructor;mt!=yt&&"constructor"in i&&"constructor"in a&&!(typeof mt=="function"&&mt instanceof mt&&typeof yt=="function"&&yt instanceof yt)&&(K=!1)}return m.delete(i),m.delete(a),K}var lNe=1,_Pt="[object Arguments]",SPt="[object Array]",iK="[object Object]",hNe=Object.prototype,APt=hNe.hasOwnProperty;function fNe(i,a,f,p,v,m){var b=Mf(i),E=Mf(a),_=b?SPt:VA(i),L=E?SPt:VA(a);_=_==_Pt?iK:_,L=L==_Pt?iK:L;var N=_==iK,B=L==iK,j=_==L;if(j&&BA(i)){if(!BA(a))return!1;b=!0,N=!1}if(j&&!N)return m||(m=new tm),b||mW(i)?TPt(i,a,f,p,v,m):sNe(i,a,_,f,p,v,m);if(!(f&lNe)){var R=N&&APt.call(i,"__wrapped__"),z=B&&APt.call(a,"__wrapped__");if(R||z){var K=R?i.value():i,it=z?a.value():a;return m||(m=new tm),v(K,it,f,p,m)}}return j?(m||(m=new tm),uNe(i,a,f,p,v,m)):!1}function Ydt(i,a,f,p,v){return i===a?!0:i==null||a==null||!l3(i)&&!l3(a)?i!==i&&a!==a:fNe(i,a,f,p,Ydt,v)}var dNe=1,gNe=2;function pNe(i,a,f,p){var v=f.length,m=v,b=!p;if(i==null)return!m;for(i=Object(i);v--;){var E=f[v];if(b&&E[2]?E[1]!==i[E[0]]:!(E[0]in i))return!1}for(;++v<m;){E=f[v];var _=E[0],L=i[_],N=E[1];if(b&&E[2]){if(L===void 0&&!(_ in i))return!1}else{var B=new tm;if(p)var j=p(L,N,_,i,a,B);if(!(j===void 0?Ydt(N,L,dNe|gNe,p,B):j))return!1}}return!0}function LPt(i){return i===i&&!Ib(i)}function bNe(i){for(var a=Nb(i),f=a.length;f--;){var p=a[f],v=i[p];a[f]=[p,v,LPt(v)]}return a}function MPt(i,a){return function(f){return f==null?!1:f[i]===a&&(a!==void 0||i in Object(f))}}function vNe(i){var a=bNe(i);return a.length==1&&a[0][2]?MPt(a[0][0],a[0][1]):function(f){return f===i||pNe(f,i,a)}}function wNe(i,a){return i!=null&&a in Object(i)}function IPt(i,a,f){a=eK(a,i);for(var p=-1,v=a.length,m=!1;++p<v;){var b=oP(a[p]);if(!(m=i!=null&&f(i,b)))break;i=i[b]}return m||++p!=v?m:(v=i==null?0:i.length,!!v&&Z1t(v)&&xW(b,v)&&(Mf(i)||FA(i)))}function DPt(i,a){return i!=null&&IPt(i,a,wNe)}var mNe=1,yNe=2;function xNe(i,a){return Hdt(i)&&LPt(a)?MPt(oP(i),a):function(f){var p=dDe(f,i);return p===void 0&&p===a?DPt(f,i):Ydt(a,p,mNe|yNe)}}function kNe(i){return function(a){return a==null?void 0:a[i]}}function ENe(i){return function(a){return nK(a,i)}}function TNe(i){return Hdt(i)?kNe(oP(i)):ENe(i)}function ok(i){return typeof i=="function"?i:i==null?sT:typeof i=="object"?Mf(i)?xNe(i[0],i[1]):vNe(i):TNe(i)}function Xdt(i,a){return i&&Y1t(i,a,Nb)}function CNe(i,a){return function(f,p){if(f==null)return f;if(!ek(f))return i(f,p);for(var v=f.length,m=a?v:-1,b=Object(f);(a?m--:++m<v)&&p(b[m],m,b)!==!1;);return f}}var _Ne=CNe(Xdt);const sK=_Ne;var SNe=function(){return Jw.Date.now()};const OPt=SNe;var NPt=Object.prototype,ANe=NPt.hasOwnProperty,LNe=kW(function(i,a){i=Object(i);var f=-1,p=a.length,v=p>2?a[2]:void 0;for(v&&YN(a[0],a[1],v)&&(p=1);++f<p;)for(var m=a[f],b=iT(m),E=-1,_=b.length;++E<_;){var L=b[E],N=i[L];(N===void 0||NA(N,NPt[L])&&!ANe.call(i,L))&&(i[L]=m[L])}return i});const JA=LNe;function MNe(i,a,f){for(var p=-1,v=i==null?0:i.length;++p<v;)if(f(a,i[p]))return!0;return!1}function aK(i){var a=i==null?0:i.length;return a?i[a-1]:void 0}function Qdt(i){return typeof i=="function"?i:sT}function cr(i,a){var f=Mf(i)?oPt:sK;return f(i,Qdt(a))}function INe(i,a){var f=[];return sK(i,function(p,v,m){a(p,v,m)&&f.push(p)}),f}function T5(i,a){var f=Mf(i)?hPt:INe;return f(i,ok(a))}function DNe(i){return function(a,f,p){var v=Object(a);if(!ek(a)){var m=ok(f);a=Nb(a),f=function(E){return m(v[E],E,v)}}var b=i(a,f,p);return b>-1?v[m?a[b]:b]:void 0}}var ONe=Math.max;function NNe(i,a,f){var p=i==null?0:i.length;if(!p)return-1;var v=f==null?0:ZIe(f);return v<0&&(v=ONe(p+v,0)),cPt(i,ok(a),v)}var PNe=DNe(NNe);const Zdt=PNe;function PPt(i,a){var f=-1,p=ek(i)?Array(i.length):[];return sK(i,function(v,m,b){p[++f]=a(v,m,b)}),p}function Of(i,a){var f=Mf(i)?QA:PPt;return f(i,ok(a))}function FNe(i,a){return i==null?i:Y1t(i,Qdt(a),iT)}function BNe(i,a){return i&&Xdt(i,Qdt(a))}function RNe(i,a){return i>a}var jNe=Object.prototype,$Ne=jNe.hasOwnProperty;function zNe(i,a){return i!=null&&$Ne.call(i,a)}function za(i,a){return i!=null&&IPt(i,a,zNe)}function qNe(i,a){return QA(a,function(f){return i[f]})}function C5(i){return i==null?[]:qNe(i,Nb(i))}function Xh(i){return i===void 0}function FPt(i,a){return i<a}function oK(i,a){var f={};return a=ok(a),Xdt(i,function(p,v,m){pW(f,v,a(p,v,m))}),f}function Jdt(i,a,f){for(var p=-1,v=i.length;++p<v;){var m=i[p],b=a(m);if(b!=null&&(E===void 0?b===b&&!pT(b):f(b,E)))var E=b,_=m}return _}function bT(i){return i&&i.length?Jdt(i,sT,RNe):void 0}function lP(i){return i&&i.length?Jdt(i,sT,FPt):void 0}function t0t(i,a){return i&&i.length?Jdt(i,ok(a),FPt):void 0}function HNe(i,a,f,p){if(!Ib(i))return i;a=eK(a,i);for(var v=-1,m=a.length,b=m-1,E=i;E!=null&&++v<m;){var _=oP(a[v]),L=f;if(_==="__proto__"||_==="constructor"||_==="prototype")return i;if(v!=b){var N=E[_];L=p?p(N,_,E):void 0,L===void 0&&(L=Ib(N)?N:xW(a[v+1])?[]:{})}yW(E,_,L),E=E[_]}return i}function GNe(i,a,f){for(var p=-1,v=a.length,m={};++p<v;){var b=a[p],E=nK(i,b);f(E,b)&&HNe(m,eK(b,i),E)}return m}function VNe(i,a){var f=i.length;for(i.sort(a);f--;)i[f]=i[f].value;return i}function UNe(i,a){if(i!==a){var f=i!==void 0,p=i===null,v=i===i,m=pT(i),b=a!==void 0,E=a===null,_=a===a,L=pT(a);if(!E&&!L&&!m&&i>a||m&&b&&_&&!E&&!L||p&&b&&_||!f&&_||!v)return 1;if(!p&&!m&&!L&&i<a||L&&f&&v&&!p&&!m||E&&f&&v||!b&&v||!_)return-1}return 0}function WNe(i,a,f){for(var p=-1,v=i.criteria,m=a.criteria,b=v.length,E=f.length;++p<b;){var _=UNe(v[p],m[p]);if(_){if(p>=E)return _;var L=f[p];return _*(L=="desc"?-1:1)}}return i.index-a.index}function KNe(i,a,f){a.length?a=QA(a,function(m){return Mf(m)?function(b){return nK(b,m.length===1?m[0]:m)}:m}):a=[sT];var p=-1;a=QA(a,wW(ok));var v=PPt(i,function(m,b,E){var _=QA(a,function(L){return L(m)});return{criteria:_,index:++p,value:m}});return VNe(v,function(m,b){return WNe(m,b,f)})}function YNe(i,a){return GNe(i,a,function(f,p){return DPt(i,p)})}var XNe=pDe(function(i,a){return i==null?{}:YNe(i,a)});const hP=XNe;var QNe=Math.ceil,ZNe=Math.max;function JNe(i,a,f,p){for(var v=-1,m=ZNe(QNe((a-i)/(f||1)),0),b=Array(m);m--;)b[p?m:++v]=i,i+=f;return b}function tPe(i){return function(a,f,p){return p&&typeof p!="number"&&YN(a,f,p)&&(f=p=void 0),a=tK(a),f===void 0?(f=a,a=0):f=tK(f),p=p===void 0?a<f?1:-1:tK(p),JNe(a,f,p,i)}}var ePe=tPe();const vT=ePe;function nPe(i,a,f,p,v){return v(i,function(m,b,E){f=p?(p=!1,m):a(f,m,b,E)}),f}function fP(i,a,f){var p=Mf(i)?bDe:nPe,v=arguments.length<3;return p(i,ok(a),f,v,sK)}var rPe=kW(function(i,a){if(i==null)return[];var f=a.length;return f>1&&YN(i,a[0],a[1])?a=[]:f>2&&YN(a[0],a[1],a[2])&&(a=[a[0]]),KNe(i,rK(a,1),[])});const dP=rPe;var iPe=1/0,sPe=GA&&1/Wdt(new GA([,-0]))[1]==iPe?function(i){return new GA(i)}:JIe;const aPe=sPe;var oPe=200;function cPe(i,a,f){var p=-1,v=rDe,m=i.length,b=!0,E=[],_=E;if(f)b=!1,v=MNe;else if(m>=oPe){var L=a?null:aPe(i);if(L)return Wdt(L);b=!1,v=EPt,_=new uP}else _=a?[]:E;t:for(;++p<m;){var N=i[p],B=a?a(N):N;if(N=f||N!==0?N:0,b&&B===B){for(var j=_.length;j--;)if(_[j]===B)continue t;a&&_.push(B),E.push(N)}else v(_,B,f)||(_!==E&&_.push(B),E.push(N))}return E}var uPe=kW(function(i){return cPe(rK(i,1,CDt,!0))});const lPe=uPe;var hPe=0;function cK(i){var a=++hPe;return uPt(i)+a}function fPe(i,a,f){for(var p=-1,v=i.length,m=a.length,b={};++p<v;){var E=p<m?a[p]:void 0;f(b,i[p],E)}return b}function dPe(i,a){return fPe(i||[],a||[],yW)}var gPe="\0",wT="\0",BPt="";class a1{constructor(a={}){this._isDirected=za(a,"directed")?a.directed:!0,this._isMultigraph=za(a,"multigraph")?a.multigraph:!1,this._isCompound=za(a,"compound")?a.compound:!1,this._label=void 0,this._defaultNodeLabelFn=jA(void 0),this._defaultEdgeLabelFn=jA(void 0),this._nodes={},this._isCompound&&(this._parent={},this._children={},this._children[wT]={}),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(a){return this._label=a,this}graph(){return this._label}setDefaultNodeLabel(a){return OA(a)||(a=jA(a)),this._defaultNodeLabelFn=a,this}nodeCount(){return this._nodeCount}nodes(){return Nb(this._nodes)}sources(){var a=this;return T5(this.nodes(),function(f){return tP(a._in[f])})}sinks(){var a=this;return T5(this.nodes(),function(f){return tP(a._out[f])})}setNodes(a,f){var p=arguments,v=this;return cr(a,function(m){p.length>1?v.setNode(m,f):v.setNode(m)}),this}setNode(a,f){return za(this._nodes,a)?(arguments.length>1&&(this._nodes[a]=f),this):(this._nodes[a]=arguments.length>1?f:this._defaultNodeLabelFn(a),this._isCompound&&(this._parent[a]=wT,this._children[a]={},this._children[wT][a]=!0),this._in[a]={},this._preds[a]={},this._out[a]={},this._sucs[a]={},++this._nodeCount,this)}node(a){return this._nodes[a]}hasNode(a){return za(this._nodes,a)}removeNode(a){var f=this;if(za(this._nodes,a)){var p=function(v){f.removeEdge(f._edgeObjs[v])};delete this._nodes[a],this._isCompound&&(this._removeFromParentsChildList(a),delete this._parent[a],cr(this.children(a),function(v){f.setParent(v)}),delete this._children[a]),cr(Nb(this._in[a]),p),delete this._in[a],delete this._preds[a],cr(Nb(this._out[a]),p),delete this._out[a],delete this._sucs[a],--this._nodeCount}return this}setParent(a,f){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(Xh(f))f=wT;else{f+="";for(var p=f;!Xh(p);p=this.parent(p))if(p===a)throw new Error("Setting "+f+" as parent of "+a+" would create a cycle");this.setNode(f)}return this.setNode(a),this._removeFromParentsChildList(a),this._parent[a]=f,this._children[f][a]=!0,this}_removeFromParentsChildList(a){delete this._children[this._parent[a]][a]}parent(a){if(this._isCompound){var f=this._parent[a];if(f!==wT)return f}}children(a){if(Xh(a)&&(a=wT),this._isCompound){var f=this._children[a];if(f)return Nb(f)}else{if(a===wT)return this.nodes();if(this.hasNode(a))return[]}}predecessors(a){var f=this._preds[a];if(f)return Nb(f)}successors(a){var f=this._sucs[a];if(f)return Nb(f)}neighbors(a){var f=this.predecessors(a);if(f)return lPe(f,this.successors(a))}isLeaf(a){var f;return this.isDirected()?f=this.successors(a):f=this.neighbors(a),f.length===0}filterNodes(a){var f=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});f.setGraph(this.graph());var p=this;cr(this._nodes,function(b,E){a(E)&&f.setNode(E,b)}),cr(this._edgeObjs,function(b){f.hasNode(b.v)&&f.hasNode(b.w)&&f.setEdge(b,p.edge(b))});var v={};function m(b){var E=p.parent(b);return E===void 0||f.hasNode(E)?(v[b]=E,E):E in v?v[E]:m(E)}return this._isCompound&&cr(f.nodes(),function(b){f.setParent(b,m(b))}),f}setDefaultEdgeLabel(a){return OA(a)||(a=jA(a)),this._defaultEdgeLabelFn=a,this}edgeCount(){return this._edgeCount}edges(){return C5(this._edgeObjs)}setPath(a,f){var p=this,v=arguments;return fP(a,function(m,b){return v.length>1?p.setEdge(m,b,f):p.setEdge(m,b),b}),this}setEdge(){var a,f,p,v,m=!1,b=arguments[0];typeof b=="object"&&b!==null&&"v"in b?(a=b.v,f=b.w,p=b.name,arguments.length===2&&(v=arguments[1],m=!0)):(a=b,f=arguments[1],p=arguments[3],arguments.length>2&&(v=arguments[2],m=!0)),a=""+a,f=""+f,Xh(p)||(p=""+p);var E=gP(this._isDirected,a,f,p);if(za(this._edgeLabels,E))return m&&(this._edgeLabels[E]=v),this;if(!Xh(p)&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(a),this.setNode(f),this._edgeLabels[E]=m?v:this._defaultEdgeLabelFn(a,f,p);var _=pPe(this._isDirected,a,f,p);return a=_.v,f=_.w,Object.freeze(_),this._edgeObjs[E]=_,RPt(this._preds[f],a),RPt(this._sucs[a],f),this._in[f][E]=_,this._out[a][E]=_,this._edgeCount++,this}edge(a,f,p){var v=arguments.length===1?e0t(this._isDirected,arguments[0]):gP(this._isDirected,a,f,p);return this._edgeLabels[v]}hasEdge(a,f,p){var v=arguments.length===1?e0t(this._isDirected,arguments[0]):gP(this._isDirected,a,f,p);return za(this._edgeLabels,v)}removeEdge(a,f,p){var v=arguments.length===1?e0t(this._isDirected,arguments[0]):gP(this._isDirected,a,f,p),m=this._edgeObjs[v];return m&&(a=m.v,f=m.w,delete this._edgeLabels[v],delete this._edgeObjs[v],jPt(this._preds[f],a),jPt(this._sucs[a],f),delete this._in[f][v],delete this._out[a][v],this._edgeCount--),this}inEdges(a,f){var p=this._in[a];if(p){var v=C5(p);return f?T5(v,function(m){return m.v===f}):v}}outEdges(a,f){var p=this._out[a];if(p){var v=C5(p);return f?T5(v,function(m){return m.w===f}):v}}nodeEdges(a,f){var p=this.inEdges(a,f);if(p)return p.concat(this.outEdges(a,f))}}a1.prototype._nodeCount=0,a1.prototype._edgeCount=0;function RPt(i,a){i[a]?i[a]++:i[a]=1}function jPt(i,a){--i[a]||delete i[a]}function gP(i,a,f,p){var v=""+a,m=""+f;if(!i&&v>m){var b=v;v=m,m=b}return v+BPt+m+BPt+(Xh(p)?gPe:p)}function pPe(i,a,f,p){var v=""+a,m=""+f;if(!i&&v>m){var b=v;v=m,m=b}var E={v,w:m};return p&&(E.name=p),E}function e0t(i,a){return gP(i,a.v,a.w,a.name)}class bPe{constructor(){var a={};a._next=a._prev=a,this._sentinel=a}dequeue(){var a=this._sentinel,f=a._prev;if(f!==a)return $Pt(f),f}enqueue(a){var f=this._sentinel;a._prev&&a._next&&$Pt(a),a._next=f._next,f._next._prev=a,f._next=a,a._prev=f}toString(){for(var a=[],f=this._sentinel,p=f._prev;p!==f;)a.push(JSON.stringify(p,vPe)),p=p._prev;return"["+a.join(", ")+"]"}}function $Pt(i){i._prev._next=i._next,i._next._prev=i._prev,delete i._next,delete i._prev}function vPe(i,a){if(i!=="_next"&&i!=="_prev")return a}var wPe=jA(1);function mPe(i,a){if(i.nodeCount()<=1)return[];var f=xPe(i,a||wPe),p=yPe(f.graph,f.buckets,f.zeroIdx);return ZA(Of(p,function(v){return i.outEdges(v.v,v.w)}))}function yPe(i,a,f){for(var p=[],v=a[a.length-1],m=a[0],b;i.nodeCount();){for(;b=m.dequeue();)n0t(i,a,f,b);for(;b=v.dequeue();)n0t(i,a,f,b);if(i.nodeCount()){for(var E=a.length-2;E>0;--E)if(b=a[E].dequeue(),b){p=p.concat(n0t(i,a,f,b,!0));break}}}return p}function n0t(i,a,f,p,v){var m=v?[]:void 0;return cr(i.inEdges(p.v),function(b){var E=i.edge(b),_=i.node(b.v);v&&m.push({v:b.v,w:b.w}),_.out-=E,r0t(a,f,_)}),cr(i.outEdges(p.v),function(b){var E=i.edge(b),_=b.w,L=i.node(_);L.in-=E,r0t(a,f,L)}),i.removeNode(p.v),m}function xPe(i,a){var f=new a1,p=0,v=0;cr(i.nodes(),function(E){f.setNode(E,{v:E,in:0,out:0})}),cr(i.edges(),function(E){var _=f.edge(E.v,E.w)||0,L=a(E),N=_+L;f.setEdge(E.v,E.w,N),v=Math.max(v,f.node(E.v).out+=L),p=Math.max(p,f.node(E.w).in+=L)});var m=vT(v+p+3).map(function(){return new bPe}),b=p+1;return cr(f.nodes(),function(E){r0t(m,b,f.node(E))}),{graph:f,buckets:m,zeroIdx:b}}function r0t(i,a,f){f.out?f.in?i[f.out-f.in+a].enqueue(f):i[i.length-1].enqueue(f):i[0].enqueue(f)}function kPe(i){var a=i.graph().acyclicer==="greedy"?mPe(i,f(i)):EPe(i);cr(a,function(p){var v=i.edge(p);i.removeEdge(p),v.forwardName=p.name,v.reversed=!0,i.setEdge(p.w,p.v,v,cK("rev"))});function f(p){return function(v){return p.edge(v).weight}}}function EPe(i){var a=[],f={},p={};function v(m){za(p,m)||(p[m]=!0,f[m]=!0,cr(i.outEdges(m),function(b){za(f,b.w)?a.push(b):v(b.w)}),delete f[m])}return cr(i.nodes(),v),a}function TPe(i){cr(i.edges(),function(a){var f=i.edge(a);if(f.reversed){i.removeEdge(a);var p=f.forwardName;delete f.reversed,delete f.forwardName,i.setEdge(a.w,a.v,f,p)}})}function tL(i,a,f,p){var v;do v=cK(p);while(i.hasNode(v));return f.dummy=a,i.setNode(v,f),v}function CPe(i){var a=new a1().setGraph(i.graph());return cr(i.nodes(),function(f){a.setNode(f,i.node(f))}),cr(i.edges(),function(f){var p=a.edge(f.v,f.w)||{weight:0,minlen:1},v=i.edge(f);a.setEdge(f.v,f.w,{weight:p.weight+v.weight,minlen:Math.max(p.minlen,v.minlen)})}),a}function zPt(i){var a=new a1({multigraph:i.isMultigraph()}).setGraph(i.graph());return cr(i.nodes(),function(f){i.children(f).length||a.setNode(f,i.node(f))}),cr(i.edges(),function(f){a.setEdge(f,i.edge(f))}),a}function qPt(i,a){var f=i.x,p=i.y,v=a.x-f,m=a.y-p,b=i.width/2,E=i.height/2;if(!v&&!m)throw new Error("Not possible to find intersection inside of the rectangle");var _,L;return Math.abs(m)*b>Math.abs(v)*E?(m<0&&(E=-E),_=E*v/m,L=E):(v<0&&(b=-b),_=b,L=b*m/v),{x:f+_,y:p+L}}function uK(i){var a=Of(vT(GPt(i)+1),function(){return[]});return cr(i.nodes(),function(f){var p=i.node(f),v=p.rank;Xh(v)||(a[v][p.order]=f)}),a}function _Pe(i){var a=lP(Of(i.nodes(),function(f){return i.node(f).rank}));cr(i.nodes(),function(f){var p=i.node(f);za(p,"rank")&&(p.rank-=a)})}function SPe(i){var a=lP(Of(i.nodes(),function(m){return i.node(m).rank})),f=[];cr(i.nodes(),function(m){var b=i.node(m).rank-a;f[b]||(f[b]=[]),f[b].push(m)});var p=0,v=i.graph().nodeRankFactor;cr(f,function(m,b){Xh(m)&&b%v!==0?--p:p&&cr(m,function(E){i.node(E).rank+=p})})}function HPt(i,a,f,p){var v={width:0,height:0};return arguments.length>=4&&(v.rank=f,v.order=p),tL(i,"border",v,a)}function GPt(i){return bT(Of(i.nodes(),function(a){var f=i.node(a).rank;if(!Xh(f))return f}))}function APe(i,a){var f={lhs:[],rhs:[]};return cr(i,function(p){a(p)?f.lhs.push(p):f.rhs.push(p)}),f}function LPe(i,a){var f=OPt();try{return a()}finally{console.log(i+" time: "+(OPt()-f)+"ms")}}function MPe(i,a){return a()}function IPe(i){function a(f){var p=i.children(f),v=i.node(f);if(p.length&&cr(p,a),za(v,"minRank")){v.borderLeft=[],v.borderRight=[];for(var m=v.minRank,b=v.maxRank+1;m<b;++m)VPt(i,"borderLeft","_bl",f,v,m),VPt(i,"borderRight","_br",f,v,m)}}cr(i.children(),a)}function VPt(i,a,f,p,v,m){var b={width:0,height:0,rank:m,borderType:a},E=v[a][m-1],_=tL(i,"border",b,f);v[a][m]=_,i.setParent(_,p),E&&i.setEdge(E,_,{weight:1})}function DPe(i){var a=i.graph().rankdir.toLowerCase();(a==="lr"||a==="rl")&&UPt(i)}function OPe(i){var a=i.graph().rankdir.toLowerCase();(a==="bt"||a==="rl")&&NPe(i),(a==="lr"||a==="rl")&&(PPe(i),UPt(i))}function UPt(i){cr(i.nodes(),function(a){WPt(i.node(a))}),cr(i.edges(),function(a){WPt(i.edge(a))})}function WPt(i){var a=i.width;i.width=i.height,i.height=a}function NPe(i){cr(i.nodes(),function(a){i0t(i.node(a))}),cr(i.edges(),function(a){var f=i.edge(a);cr(f.points,i0t),za(f,"y")&&i0t(f)})}function i0t(i){i.y=-i.y}function PPe(i){cr(i.nodes(),function(a){s0t(i.node(a))}),cr(i.edges(),function(a){var f=i.edge(a);cr(f.points,s0t),za(f,"x")&&s0t(f)})}function s0t(i){var a=i.x;i.x=i.y,i.y=a}function FPe(i){i.graph().dummyChains=[],cr(i.edges(),function(a){BPe(i,a)})}function BPe(i,a){var f=a.v,p=i.node(f).rank,v=a.w,m=i.node(v).rank,b=a.name,E=i.edge(a),_=E.labelRank;if(m!==p+1){i.removeEdge(a);var L,N,B;for(B=0,++p;p<m;++B,++p)E.points=[],N={width:0,height:0,edgeLabel:E,edgeObj:a,rank:p},L=tL(i,"edge",N,"_d"),p===_&&(N.width=E.width,N.height=E.height,N.dummy="edge-label",N.labelpos=E.labelpos),i.setEdge(f,L,{weight:E.weight},b),B===0&&i.graph().dummyChains.push(L),f=L;i.setEdge(f,v,{weight:E.weight},b)}}function RPe(i){cr(i.graph().dummyChains,function(a){var f=i.node(a),p=f.edgeLabel,v;for(i.setEdge(f.edgeObj,p);f.dummy;)v=i.successors(a)[0],i.removeNode(a),p.points.push({x:f.x,y:f.y}),f.dummy==="edge-label"&&(p.x=f.x,p.y=f.y,p.width=f.width,p.height=f.height),a=v,f=i.node(a)})}function a0t(i){var a={};function f(p){var v=i.node(p);if(za(a,p))return v.rank;a[p]=!0;var m=lP(Of(i.outEdges(p),function(b){return f(b.w)-i.edge(b).minlen}));return(m===Number.POSITIVE_INFINITY||m===void 0||m===null)&&(m=0),v.rank=m}cr(i.sources(),f)}function pP(i,a){return i.node(a.w).rank-i.node(a.v).rank-i.edge(a).minlen}function KPt(i){var a=new a1({directed:!1}),f=i.nodes()[0],p=i.nodeCount();a.setNode(f,{});for(var v,m;jPe(a,i)<p;)v=$Pe(a,i),m=a.hasNode(v.v)?pP(i,v):-pP(i,v),zPe(a,i,m);return a}function jPe(i,a){function f(p){cr(a.nodeEdges(p),function(v){var m=v.v,b=p===m?v.w:m;!i.hasNode(b)&&!pP(a,v)&&(i.setNode(b,{}),i.setEdge(p,b,{}),f(b))})}return cr(i.nodes(),f),i.nodeCount()}function $Pe(i,a){return t0t(a.edges(),function(f){if(i.hasNode(f.v)!==i.hasNode(f.w))return pP(a,f)})}function zPe(i,a,f){cr(i.nodes(),function(p){a.node(p).rank+=f})}function qPe(){}qPe.prototype=new Error;function YPt(i,a,f){Mf(a)||(a=[a]);var p=(i.isDirected()?i.successors:i.neighbors).bind(i),v=[],m={};return cr(a,function(b){if(!i.hasNode(b))throw new Error("Graph does not have node: "+b);XPt(i,b,f==="post",m,p,v)}),v}function XPt(i,a,f,p,v,m){za(p,a)||(p[a]=!0,f||m.push(a),cr(v(a),function(b){XPt(i,b,f,p,v,m)}),f&&m.push(a))}function HPe(i,a){return YPt(i,a,"post")}function GPe(i,a){return YPt(i,a,"pre")}mT.initLowLimValues=c0t,mT.initCutValues=o0t,mT.calcCutValue=QPt,mT.leaveEdge=JPt,mT.enterEdge=tFt,mT.exchangeEdges=eFt;function mT(i){i=CPe(i),a0t(i);var a=KPt(i);c0t(a),o0t(a,i);for(var f,p;f=JPt(a);)p=tFt(a,i,f),eFt(a,i,f,p)}function o0t(i,a){var f=HPe(i,i.nodes());f=f.slice(0,f.length-1),cr(f,function(p){VPe(i,a,p)})}function VPe(i,a,f){var p=i.node(f),v=p.parent;i.edge(f,v).cutvalue=QPt(i,a,f)}function QPt(i,a,f){var p=i.node(f),v=p.parent,m=!0,b=a.edge(f,v),E=0;return b||(m=!1,b=a.edge(v,f)),E=b.weight,cr(a.nodeEdges(f),function(_){var L=_.v===f,N=L?_.w:_.v;if(N!==v){var B=L===m,j=a.edge(_).weight;if(E+=B?j:-j,WPe(i,f,N)){var R=i.edge(f,N).cutvalue;E+=B?-R:R}}}),E}function c0t(i,a){arguments.length<2&&(a=i.nodes()[0]),ZPt(i,{},1,a)}function ZPt(i,a,f,p,v){var m=f,b=i.node(p);return a[p]=!0,cr(i.neighbors(p),function(E){za(a,E)||(f=ZPt(i,a,f,E,p))}),b.low=m,b.lim=f++,v?b.parent=v:delete b.parent,f}function JPt(i){return Zdt(i.edges(),function(a){return i.edge(a).cutvalue<0})}function tFt(i,a,f){var p=f.v,v=f.w;a.hasEdge(p,v)||(p=f.w,v=f.v);var m=i.node(p),b=i.node(v),E=m,_=!1;m.lim>b.lim&&(E=b,_=!0);var L=T5(a.edges(),function(N){return _===nFt(i,i.node(N.v),E)&&_!==nFt(i,i.node(N.w),E)});return t0t(L,function(N){return pP(a,N)})}function eFt(i,a,f,p){var v=f.v,m=f.w;i.removeEdge(v,m),i.setEdge(p.v,p.w,{}),c0t(i),o0t(i,a),UPe(i,a)}function UPe(i,a){var f=Zdt(i.nodes(),function(v){return!a.node(v).parent}),p=GPe(i,f);p=p.slice(1),cr(p,function(v){var m=i.node(v).parent,b=a.edge(v,m),E=!1;b||(b=a.edge(m,v),E=!0),a.node(v).rank=a.node(m).rank+(E?b.minlen:-b.minlen)})}function WPe(i,a,f){return i.hasEdge(a,f)}function nFt(i,a,f){return f.low<=a.lim&&a.lim<=f.lim}function KPe(i){switch(i.graph().ranker){case"network-simplex":rFt(i);break;case"tight-tree":XPe(i);break;case"longest-path":YPe(i);break;default:rFt(i)}}var YPe=a0t;function XPe(i){a0t(i),KPt(i)}function rFt(i){mT(i)}function QPe(i){var a=tL(i,"root",{},"_root"),f=ZPe(i),p=bT(C5(f))-1,v=2*p+1;i.graph().nestingRoot=a,cr(i.edges(),function(b){i.edge(b).minlen*=v});var m=JPe(i)+1;cr(i.children(),function(b){iFt(i,a,v,m,p,f,b)}),i.graph().nodeRankFactor=v}function iFt(i,a,f,p,v,m,b){var E=i.children(b);if(!E.length){b!==a&&i.setEdge(a,b,{weight:0,minlen:f});return}var _=HPt(i,"_bt"),L=HPt(i,"_bb"),N=i.node(b);i.setParent(_,b),N.borderTop=_,i.setParent(L,b),N.borderBottom=L,cr(E,function(B){iFt(i,a,f,p,v,m,B);var j=i.node(B),R=j.borderTop?j.borderTop:B,z=j.borderBottom?j.borderBottom:B,K=j.borderTop?p:2*p,it=R!==z?1:v-m[b]+1;i.setEdge(_,R,{weight:K,minlen:it,nestingEdge:!0}),i.setEdge(z,L,{weight:K,minlen:it,nestingEdge:!0})}),i.parent(b)||i.setEdge(a,_,{weight:0,minlen:v+m[b]})}function ZPe(i){var a={};function f(p,v){var m=i.children(p);m&&m.length&&cr(m,function(b){f(b,v+1)}),a[p]=v}return cr(i.children(),function(p){f(p,1)}),a}function JPe(i){return fP(i.edges(),function(a,f){return a+i.edge(f).weight},0)}function tFe(i){var a=i.graph();i.removeNode(a.nestingRoot),delete a.nestingRoot,cr(i.edges(),function(f){var p=i.edge(f);p.nestingEdge&&i.removeEdge(f)})}function eFe(i,a,f){var p={},v;cr(f,function(m){for(var b=i.parent(m),E,_;b;){if(E=i.parent(b),E?(_=p[E],p[E]=b):(_=v,v=b),_&&_!==b){a.setEdge(_,b);return}b=E}})}function nFe(i,a,f){var p=rFe(i),v=new a1({compound:!0}).setGraph({root:p}).setDefaultNodeLabel(function(m){return i.node(m)});return cr(i.nodes(),function(m){var b=i.node(m),E=i.parent(m);(b.rank===a||b.minRank<=a&&a<=b.maxRank)&&(v.setNode(m),v.setParent(m,E||p),cr(i[f](m),function(_){var L=_.v===m?_.w:_.v,N=v.edge(L,m),B=Xh(N)?0:N.weight;v.setEdge(L,m,{weight:i.edge(_).weight+B})}),za(b,"minRank")&&v.setNode(m,{borderLeft:b.borderLeft[a],borderRight:b.borderRight[a]}))}),v}function rFe(i){for(var a;i.hasNode(a=cK("_root")););return a}function iFe(i,a){for(var f=0,p=1;p<a.length;++p)f+=sFe(i,a[p-1],a[p]);return f}function sFe(i,a,f){for(var p=dPe(f,Of(f,function(L,N){return N})),v=ZA(Of(a,function(L){return dP(Of(i.outEdges(L),function(N){return{pos:p[N.w],weight:i.edge(N).weight}}),"pos")})),m=1;m<f.length;)m<<=1;var b=2*m-1;m-=1;var E=Of(new Array(b),function(){return 0}),_=0;return cr(v.forEach(function(L){var N=L.pos+m;E[N]+=L.weight;for(var B=0;N>0;)N%2&&(B+=E[N+1]),N=N-1>>1,E[N]+=L.weight;_+=L.weight*B})),_}function aFe(i){var a={},f=T5(i.nodes(),function(E){return!i.children(E).length}),p=bT(Of(f,function(E){return i.node(E).rank})),v=Of(vT(p+1),function(){return[]});function m(E){if(!za(a,E)){a[E]=!0;var _=i.node(E);v[_.rank].push(E),cr(i.successors(E),m)}}var b=dP(f,function(E){return i.node(E).rank});return cr(b,m),v}function oFe(i,a){return Of(a,function(f){var p=i.inEdges(f);if(p.length){var v=fP(p,function(m,b){var E=i.edge(b),_=i.node(b.v);return{sum:m.sum+E.weight*_.order,weight:m.weight+E.weight}},{sum:0,weight:0});return{v:f,barycenter:v.sum/v.weight,weight:v.weight}}else return{v:f}})}function cFe(i,a){var f={};cr(i,function(v,m){var b=f[v.v]={indegree:0,in:[],out:[],vs:[v.v],i:m};Xh(v.barycenter)||(b.barycenter=v.barycenter,b.weight=v.weight)}),cr(a.edges(),function(v){var m=f[v.v],b=f[v.w];!Xh(m)&&!Xh(b)&&(b.indegree++,m.out.push(f[v.w]))});var p=T5(f,function(v){return!v.indegree});return uFe(p)}function uFe(i){var a=[];function f(m){return function(b){b.merged||(Xh(b.barycenter)||Xh(m.barycenter)||b.barycenter>=m.barycenter)&&lFe(m,b)}}function p(m){return function(b){b.in.push(m),--b.indegree===0&&i.push(b)}}for(;i.length;){var v=i.pop();a.push(v),cr(v.in.reverse(),f(v)),cr(v.out,p(v))}return Of(T5(a,function(m){return!m.merged}),function(m){return hP(m,["vs","i","barycenter","weight"])})}function lFe(i,a){var f=0,p=0;i.weight&&(f+=i.barycenter*i.weight,p+=i.weight),a.weight&&(f+=a.barycenter*a.weight,p+=a.weight),i.vs=a.vs.concat(i.vs),i.barycenter=f/p,i.weight=p,i.i=Math.min(a.i,i.i),a.merged=!0}function hFe(i,a){var f=APe(i,function(N){return za(N,"barycenter")}),p=f.lhs,v=dP(f.rhs,function(N){return-N.i}),m=[],b=0,E=0,_=0;p.sort(fFe(!!a)),_=sFt(m,v,_),cr(p,function(N){_+=N.vs.length,m.push(N.vs),b+=N.barycenter*N.weight,E+=N.weight,_=sFt(m,v,_)});var L={vs:ZA(m)};return E&&(L.barycenter=b/E,L.weight=E),L}function sFt(i,a,f){for(var p;a.length&&(p=aK(a)).i<=f;)a.pop(),i.push(p.vs),f++;return f}function fFe(i){return function(a,f){return a.barycenter<f.barycenter?-1:a.barycenter>f.barycenter?1:i?f.i-a.i:a.i-f.i}}function aFt(i,a,f,p){var v=i.children(a),m=i.node(a),b=m?m.borderLeft:void 0,E=m?m.borderRight:void 0,_={};b&&(v=T5(v,function(z){return z!==b&&z!==E}));var L=oFe(i,v);cr(L,function(z){if(i.children(z.v).length){var K=aFt(i,z.v,f,p);_[z.v]=K,za(K,"barycenter")&&gFe(z,K)}});var N=cFe(L,f);dFe(N,_);var B=hFe(N,p);if(b&&(B.vs=ZA([b,B.vs,E]),i.predecessors(b).length)){var j=i.node(i.predecessors(b)[0]),R=i.node(i.predecessors(E)[0]);za(B,"barycenter")||(B.barycenter=0,B.weight=0),B.barycenter=(B.barycenter*B.weight+j.order+R.order)/(B.weight+2),B.weight+=2}return B}function dFe(i,a){cr(i,function(f){f.vs=ZA(f.vs.map(function(p){return a[p]?a[p].vs:p}))})}function gFe(i,a){Xh(i.barycenter)?(i.barycenter=a.barycenter,i.weight=a.weight):(i.barycenter=(i.barycenter*i.weight+a.barycenter*a.weight)/(i.weight+a.weight),i.weight+=a.weight)}function pFe(i){var a=GPt(i),f=oFt(i,vT(1,a+1),"inEdges"),p=oFt(i,vT(a-1,-1,-1),"outEdges"),v=aFe(i);cFt(i,v);for(var m=Number.POSITIVE_INFINITY,b,E=0,_=0;_<4;++E,++_){bFe(E%2?f:p,E%4>=2),v=uK(i);var L=iFe(i,v);L<m&&(_=0,b=ROe(v),m=L)}cFt(i,b)}function oFt(i,a,f){return Of(a,function(p){return nFe(i,p,f)})}function bFe(i,a){var f=new a1;cr(i,function(p){var v=p.graph().root,m=aFt(p,v,f,a);cr(m.vs,function(b,E){p.node(b).order=E}),eFe(p,f,m.vs)})}function cFt(i,a){cr(a,function(f){cr(f,function(p,v){i.node(p).order=v})})}function vFe(i){var a=mFe(i);cr(i.graph().dummyChains,function(f){for(var p=i.node(f),v=p.edgeObj,m=wFe(i,a,v.v,v.w),b=m.path,E=m.lca,_=0,L=b[_],N=!0;f!==v.w;){if(p=i.node(f),N){for(;(L=b[_])!==E&&i.node(L).maxRank<p.rank;)_++;L===E&&(N=!1)}if(!N){for(;_<b.length-1&&i.node(L=b[_+1]).minRank<=p.rank;)_++;L=b[_]}i.setParent(f,L),f=i.successors(f)[0]}})}function wFe(i,a,f,p){var v=[],m=[],b=Math.min(a[f].low,a[p].low),E=Math.max(a[f].lim,a[p].lim),_,L;_=f;do _=i.parent(_),v.push(_);while(_&&(a[_].low>b||E>a[_].lim));for(L=_,_=p;(_=i.parent(_))!==L;)m.push(_);return{path:v.concat(m.reverse()),lca:L}}function mFe(i){var a={},f=0;function p(v){var m=f;cr(i.children(v),p),a[v]={low:m,lim:f++}}return cr(i.children(),p),a}function yFe(i,a){var f={};function p(v,m){var b=0,E=0,_=v.length,L=aK(m);return cr(m,function(N,B){var j=kFe(i,N),R=j?i.node(j).order:_;(j||N===L)&&(cr(m.slice(E,B+1),function(z){cr(i.predecessors(z),function(K){var it=i.node(K),st=it.order;(st<b||R<st)&&!(it.dummy&&i.node(z).dummy)&&uFt(f,K,z)})}),E=B+1,b=R)}),m}return fP(a,p),f}function xFe(i,a){var f={};function p(m,b,E,_,L){var N;cr(vT(b,E),function(B){N=m[B],i.node(N).dummy&&cr(i.predecessors(N),function(j){var R=i.node(j);R.dummy&&(R.order<_||R.order>L)&&uFt(f,j,N)})})}function v(m,b){var E=-1,_,L=0;return cr(b,function(N,B){if(i.node(N).dummy==="border"){var j=i.predecessors(N);j.length&&(_=i.node(j[0]).order,p(b,L,B,E,_),L=B,E=_)}p(b,L,b.length,_,m.length)}),b}return fP(a,v),f}function kFe(i,a){if(i.node(a).dummy)return Zdt(i.predecessors(a),function(f){return i.node(f).dummy})}function uFt(i,a,f){if(a>f){var p=a;a=f,f=p}var v=i[a];v||(i[a]=v={}),v[f]=!0}function EFe(i,a,f){if(a>f){var p=a;a=f,f=p}return za(i[a],f)}function TFe(i,a,f,p){var v={},m={},b={};return cr(a,function(E){cr(E,function(_,L){v[_]=_,m[_]=_,b[_]=L})}),cr(a,function(E){var _=-1;cr(E,function(L){var N=p(L);if(N.length){N=dP(N,function(K){return b[K]});for(var B=(N.length-1)/2,j=Math.floor(B),R=Math.ceil(B);j<=R;++j){var z=N[j];m[L]===L&&_<b[z]&&!EFe(f,L,z)&&(m[z]=L,m[L]=v[L]=v[z],_=b[z])}}})}),{root:v,align:m}}function CFe(i,a,f,p,v){var m={},b=_Fe(i,a,f,v),E=v?"borderLeft":"borderRight";function _(B,j){for(var R=b.nodes(),z=R.pop(),K={};z;)K[z]?B(z):(K[z]=!0,R.push(z),R=R.concat(j(z))),z=R.pop()}function L(B){m[B]=b.inEdges(B).reduce(function(j,R){return Math.max(j,m[R.v]+b.edge(R))},0)}function N(B){var j=b.outEdges(B).reduce(function(z,K){return Math.min(z,m[K.w]-b.edge(K))},Number.POSITIVE_INFINITY),R=i.node(B);j!==Number.POSITIVE_INFINITY&&R.borderType!==E&&(m[B]=Math.max(m[B],j))}return _(L,b.predecessors.bind(b)),_(N,b.successors.bind(b)),cr(p,function(B){m[B]=m[f[B]]}),m}function _Fe(i,a,f,p){var v=new a1,m=i.graph(),b=IFe(m.nodesep,m.edgesep,p);return cr(a,function(E){var _;cr(E,function(L){var N=f[L];if(v.setNode(N),_){var B=f[_],j=v.edge(B,N);v.setEdge(B,N,Math.max(b(i,L,_),j||0))}_=L})}),v}function SFe(i,a){return t0t(C5(a),function(f){var p=Number.NEGATIVE_INFINITY,v=Number.POSITIVE_INFINITY;return FNe(f,function(m,b){var E=DFe(i,b)/2;p=Math.max(m+E,p),v=Math.min(m-E,v)}),p-v})}function AFe(i,a){var f=C5(a),p=lP(f),v=bT(f);cr(["u","d"],function(m){cr(["l","r"],function(b){var E=m+b,_=i[E],L;if(_!==a){var N=C5(_);L=b==="l"?p-lP(N):v-bT(N),L&&(i[E]=oK(_,function(B){return B+L}))}})})}function LFe(i,a){return oK(i.ul,function(f,p){if(a)return i[a.toLowerCase()][p];var v=dP(Of(i,p));return(v[1]+v[2])/2})}function MFe(i){var a=uK(i),f=EW(yFe(i,a),xFe(i,a)),p={},v;cr(["u","d"],function(b){v=b==="u"?a:C5(a).reverse(),cr(["l","r"],function(E){E==="r"&&(v=Of(v,function(B){return C5(B).reverse()}));var _=(b==="u"?i.predecessors:i.successors).bind(i),L=TFe(i,v,f,_),N=CFe(i,v,L.root,L.align,E==="r");E==="r"&&(N=oK(N,function(B){return-B})),p[b+E]=N})});var m=SFe(i,p);return AFe(p,m),LFe(p,i.graph().align)}function IFe(i,a,f){return function(p,v,m){var b=p.node(v),E=p.node(m),_=0,L;if(_+=b.width/2,za(b,"labelpos"))switch(b.labelpos.toLowerCase()){case"l":L=-b.width/2;break;case"r":L=b.width/2;break}if(L&&(_+=f?L:-L),L=0,_+=(b.dummy?a:i)/2,_+=(E.dummy?a:i)/2,_+=E.width/2,za(E,"labelpos"))switch(E.labelpos.toLowerCase()){case"l":L=E.width/2;break;case"r":L=-E.width/2;break}return L&&(_+=f?L:-L),L=0,_}}function DFe(i,a){return i.node(a).width}function OFe(i){i=zPt(i),NFe(i),BNe(MFe(i),function(a,f){i.node(f).x=a})}function NFe(i){var a=uK(i),f=i.graph().ranksep,p=0;cr(a,function(v){var m=bT(Of(v,function(b){return i.node(b).height}));cr(v,function(b){i.node(b).y=p+m/2}),p+=m+f})}function eL(i,a){var f=a&&a.debugTiming?LPe:MPe;f("layout",function(){var p=f("  buildLayoutGraph",function(){return VFe(i)});f("  runLayout",function(){PFe(p,f)}),f("  updateInputGraph",function(){FFe(i,p)})})}function PFe(i,a){a("    makeSpaceForEdgeLabels",function(){UFe(i)}),a("    removeSelfEdges",function(){eBe(i)}),a("    acyclic",function(){kPe(i)}),a("    nestingGraph.run",function(){QPe(i)}),a("    rank",function(){KPe(zPt(i))}),a("    injectEdgeLabelProxies",function(){WFe(i)}),a("    removeEmptyRanks",function(){SPe(i)}),a("    nestingGraph.cleanup",function(){tFe(i)}),a("    normalizeRanks",function(){_Pe(i)}),a("    assignRankMinMax",function(){KFe(i)}),a("    removeEdgeLabelProxies",function(){YFe(i)}),a("    normalize.run",function(){FPe(i)}),a("    parentDummyChains",function(){vFe(i)}),a("    addBorderSegments",function(){IPe(i)}),a("    order",function(){pFe(i)}),a("    insertSelfEdges",function(){nBe(i)}),a("    adjustCoordinateSystem",function(){DPe(i)}),a("    position",function(){OFe(i)}),a("    positionSelfEdges",function(){rBe(i)}),a("    removeBorderNodes",function(){tBe(i)}),a("    normalize.undo",function(){RPe(i)}),a("    fixupEdgeLabelCoords",function(){ZFe(i)}),a("    undoCoordinateSystem",function(){OPe(i)}),a("    translateGraph",function(){XFe(i)}),a("    assignNodeIntersects",function(){QFe(i)}),a("    reversePoints",function(){JFe(i)}),a("    acyclic.undo",function(){TPe(i)})}function FFe(i,a){cr(i.nodes(),function(f){var p=i.node(f),v=a.node(f);p&&(p.x=v.x,p.y=v.y,a.children(f).length&&(p.width=v.width,p.height=v.height))}),cr(i.edges(),function(f){var p=i.edge(f),v=a.edge(f);p.points=v.points,za(v,"x")&&(p.x=v.x,p.y=v.y)}),i.graph().width=a.graph().width,i.graph().height=a.graph().height}var BFe=["nodesep","edgesep","ranksep","marginx","marginy"],RFe={ranksep:50,edgesep:20,nodesep:50,rankdir:"tb"},jFe=["acyclicer","ranker","rankdir","align"],$Fe=["width","height"],zFe={width:0,height:0},qFe=["minlen","weight","width","height","labeloffset"],HFe={minlen:1,weight:1,width:0,height:0,labeloffset:10,labelpos:"r"},GFe=["labelpos"];function VFe(i){var a=new a1({multigraph:!0,compound:!0}),f=l0t(i.graph());return a.setGraph(EW({},RFe,u0t(f,BFe),hP(f,jFe))),cr(i.nodes(),function(p){var v=l0t(i.node(p));a.setNode(p,JA(u0t(v,$Fe),zFe)),a.setParent(p,i.parent(p))}),cr(i.edges(),function(p){var v=l0t(i.edge(p));a.setEdge(p,EW({},HFe,u0t(v,qFe),hP(v,GFe)))}),a}function UFe(i){var a=i.graph();a.ranksep/=2,cr(i.edges(),function(f){var p=i.edge(f);p.minlen*=2,p.labelpos.toLowerCase()!=="c"&&(a.rankdir==="TB"||a.rankdir==="BT"?p.width+=p.labeloffset:p.height+=p.labeloffset)})}function WFe(i){cr(i.edges(),function(a){var f=i.edge(a);if(f.width&&f.height){var p=i.node(a.v),v=i.node(a.w),m={rank:(v.rank-p.rank)/2+p.rank,e:a};tL(i,"edge-proxy",m,"_ep")}})}function KFe(i){var a=0;cr(i.nodes(),function(f){var p=i.node(f);p.borderTop&&(p.minRank=i.node(p.borderTop).rank,p.maxRank=i.node(p.borderBottom).rank,a=bT(a,p.maxRank))}),i.graph().maxRank=a}function YFe(i){cr(i.nodes(),function(a){var f=i.node(a);f.dummy==="edge-proxy"&&(i.edge(f.e).labelRank=f.rank,i.removeNode(a))})}function XFe(i){var a=Number.POSITIVE_INFINITY,f=0,p=Number.POSITIVE_INFINITY,v=0,m=i.graph(),b=m.marginx||0,E=m.marginy||0;function _(L){var N=L.x,B=L.y,j=L.width,R=L.height;a=Math.min(a,N-j/2),f=Math.max(f,N+j/2),p=Math.min(p,B-R/2),v=Math.max(v,B+R/2)}cr(i.nodes(),function(L){_(i.node(L))}),cr(i.edges(),function(L){var N=i.edge(L);za(N,"x")&&_(N)}),a-=b,p-=E,cr(i.nodes(),function(L){var N=i.node(L);N.x-=a,N.y-=p}),cr(i.edges(),function(L){var N=i.edge(L);cr(N.points,function(B){B.x-=a,B.y-=p}),za(N,"x")&&(N.x-=a),za(N,"y")&&(N.y-=p)}),m.width=f-a+b,m.height=v-p+E}function QFe(i){cr(i.edges(),function(a){var f=i.edge(a),p=i.node(a.v),v=i.node(a.w),m,b;f.points?(m=f.points[0],b=f.points[f.points.length-1]):(f.points=[],m=v,b=p),f.points.unshift(qPt(p,m)),f.points.push(qPt(v,b))})}function ZFe(i){cr(i.edges(),function(a){var f=i.edge(a);if(za(f,"x"))switch((f.labelpos==="l"||f.labelpos==="r")&&(f.width-=f.labeloffset),f.labelpos){case"l":f.x-=f.width/2+f.labeloffset;break;case"r":f.x+=f.width/2+f.labeloffset;break}})}function JFe(i){cr(i.edges(),function(a){var f=i.edge(a);f.reversed&&f.points.reverse()})}function tBe(i){cr(i.nodes(),function(a){if(i.children(a).length){var f=i.node(a),p=i.node(f.borderTop),v=i.node(f.borderBottom),m=i.node(aK(f.borderLeft)),b=i.node(aK(f.borderRight));f.width=Math.abs(b.x-m.x),f.height=Math.abs(v.y-p.y),f.x=m.x+f.width/2,f.y=p.y+f.height/2}}),cr(i.nodes(),function(a){i.node(a).dummy==="border"&&i.removeNode(a)})}function eBe(i){cr(i.edges(),function(a){if(a.v===a.w){var f=i.node(a.v);f.selfEdges||(f.selfEdges=[]),f.selfEdges.push({e:a,label:i.edge(a)}),i.removeEdge(a)}})}function nBe(i){var a=uK(i);cr(a,function(f){var p=0;cr(f,function(v,m){var b=i.node(v);b.order=m+p,cr(b.selfEdges,function(E){tL(i,"selfedge",{width:E.label.width,height:E.label.height,rank:b.rank,order:m+ ++p,e:E.e,label:E.label},"_se")}),delete b.selfEdges})})}function rBe(i){cr(i.nodes(),function(a){var f=i.node(a);if(f.dummy==="selfedge"){var p=i.node(f.e.v),v=p.x+p.width/2,m=p.y,b=f.x-v,E=p.height/2;i.setEdge(f.e,f.label),i.removeNode(a),f.label.points=[{x:v+2*b/3,y:m-E},{x:v+5*b/6,y:m-E},{x:v+b,y:m},{x:v+5*b/6,y:m+E},{x:v+2*b/3,y:m+E}],f.label.x=f.x,f.label.y=f.y}})}function u0t(i,a){return oK(hP(i,a),Number)}function l0t(i){var a={};return cr(i,function(f,p){a[p.toLowerCase()]=f}),a}function lFt(i,a){return!!i.children(a).length}function hFt(i){return h0t(i.v)+":"+h0t(i.w)+":"+h0t(i.name)}var iBe=/:/g;function h0t(i){return i?String(i).replace(iBe,"\\:"):""}function p3(i,a){a&&i.attr("style",a)}function fFt(i,a,f){a&&i.attr("class",a).attr("class",f+" "+i.attr("class"))}function am(i,a){var f=a.graph();if(MDt(f)){var p=f.transition;if(OA(p))return p(i)}return i}var f0t={normal:aBe,vee:oBe,undirected:cBe};function sBe(i){f0t=i}function aBe(i,a,f,p){var v=i.append("marker").attr("id",a).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto"),m=v.append("path").attr("d","M 0 0 L 10 5 L 0 10 z").style("stroke-width",1).style("stroke-dasharray","1,0");p3(m,f[p+"Style"]),f[p+"Class"]&&m.attr("class",f[p+"Class"])}function oBe(i,a,f,p){var v=i.append("marker").attr("id",a).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto"),m=v.append("path").attr("d","M 0 0 L 10 5 L 0 10 L 4 5 z").style("stroke-width",1).style("stroke-dasharray","1,0");p3(m,f[p+"Style"]),f[p+"Class"]&&m.attr("class",f[p+"Class"])}function cBe(i,a,f,p){var v=i.append("marker").attr("id",a).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto"),m=v.append("path").attr("d","M 0 5 L 10 5").style("stroke-width",1).style("stroke-dasharray","1,0");p3(m,f[p+"Style"]),f[p+"Class"]&&m.attr("class",f[p+"Class"])}function d0t(i,a){var f=i.append("foreignObject").attr("width","100000"),p=f.append("xhtml:div");p.attr("xmlns","http://www.w3.org/1999/xhtml");var v=a.label;switch(typeof v){case"function":p.insert(v);break;case"object":p.insert(function(){return v});break;default:p.html(v)}p3(p,a.labelStyle),p.style("display","inline-block"),p.style("white-space","nowrap");var m=p.node().getBoundingClientRect();return f.attr("width",m.width).attr("height",m.height),f}function uBe(i,a){var f=i;return f.node().appendChild(a.label),p3(f,a.labelStyle),f}function lBe(i,a){for(var f=i.append("text"),p=hBe(a.label).split(`
`),v=0;v<p.length;v++)f.append("tspan").attr("xml:space","preserve").attr("dy","1em").attr("x","1").text(p[v]);return p3(f,a.labelStyle),f}function hBe(i){for(var a="",f=!1,p,v=0;v<i.length;++v)if(p=i[v],f){switch(p){case"n":a+=`
`;break;default:a+=p}f=!1}else p==="\\"?f=!0:a+=p;return a}function g0t(i,a,f){var p=a.label,v=i.append("g");a.labelType==="svg"?uBe(v,a):typeof p!="string"||a.labelType==="html"?d0t(v,a):lBe(v,a);var m=v.node().getBBox(),b;switch(f){case"top":b=-a.height/2;break;case"bottom":b=a.height/2-m.height;break;default:b=-m.height/2}return v.attr("transform","translate("+-m.width/2+","+b+")"),v}var p0t=function(i,a){var f=a.nodes().filter(function(m){return lFt(a,m)}),p=i.selectAll("g.cluster").data(f,function(m){return m});am(p.exit(),a).style("opacity",0).remove();var v=p.enter().append("g").attr("class","cluster").attr("id",function(m){var b=a.node(m);return b.id}).style("opacity",0).each(function(m){var b=a.node(m),E=yr(this);yr(this).append("rect");var _=E.append("g").attr("class","label");g0t(_,b,b.clusterLabelPos)});return p=p.merge(v),p=am(p,a).style("opacity",1),p.selectAll("rect").each(function(m){var b=a.node(m),E=yr(this);p3(E,b.style)}),p};function fBe(i){p0t=i}let b0t=function(i,a){var f=i.selectAll("g.edgeLabel").data(a.edges(),function(v){return hFt(v)}).classed("update",!0);f.exit().remove(),f.enter().append("g").classed("edgeLabel",!0).style("opacity",0),f=i.selectAll("g.edgeLabel"),f.each(function(v){var m=yr(this);m.select(".label").remove();var b=a.edge(v),E=g0t(m,a.edge(v),0).classed("label",!0),_=E.node().getBBox();b.labelId&&E.attr("id",b.labelId),za(b,"width")||(b.width=_.width),za(b,"height")||(b.height=_.height)});var p;return f.exit?p=f.exit():p=f.selectAll(null),am(p,a).style("opacity",0).remove(),f};function dBe(i){b0t=i}function dFt(i,a){return i.intersect(a)}var v0t=function(i,a,f){var p=i.selectAll("g.edgePath").data(a.edges(),function(b){return hFt(b)}).classed("update",!0),v=wBe(p,a);mBe(p,a);var m=p.merge!==void 0?p.merge(v):p;return am(m,a).style("opacity",1),m.each(function(b){var E=yr(this),_=a.edge(b);_.elem=this,_.id&&E.attr("id",_.id),fFt(E,_.class,(E.classed("update")?"update ":"")+"edgePath")}),m.selectAll("path.path").each(function(b){var E=a.edge(b);E.arrowheadId=cK("arrowhead");var _=yr(this).attr("marker-end",function(){return"url("+pBe(location.href,E.arrowheadId)+")"}).style("fill","none");am(_,a).attr("d",function(L){return bBe(a,L)}),p3(_,E.style)}),m.selectAll("defs *").remove(),m.selectAll("defs").each(function(b){var E=a.edge(b),_=f[E.arrowhead];_(yr(this),E.arrowheadId,E,"arrowhead")}),m};function gBe(i){v0t=i}function pBe(i,a){var f=i.split("#")[0];return f+"#"+a}function bBe(i,a){var f=i.edge(a),p=i.node(a.v),v=i.node(a.w),m=f.points.slice(1,f.points.length-1);return m.unshift(dFt(p,m[0])),m.push(dFt(v,m[m.length-1])),gFt(f,m)}function gFt(i,a){var f=(Z7||K8e.line)().x(function(p){return p.x}).y(function(p){return p.y});return(f.curve||f.interpolate)(i.curve),f(a)}function vBe(i){var a=i.getBBox(),f=i.ownerSVGElement.getScreenCTM().inverse().multiply(i.getScreenCTM()).translate(a.width/2,a.height/2);return{x:f.e,y:f.f}}function wBe(i,a){var f=i.enter().append("g").attr("class","edgePath").style("opacity",0);return f.append("path").attr("class","path").attr("d",function(p){var v=a.edge(p),m=a.node(p.v).elem,b=vT(v.points.length).map(function(){return vBe(m)});return gFt(v,b)}),f.append("defs"),f}function mBe(i,a){var f=i.exit();am(f,a).style("opacity",0).remove()}var w0t=function(i,a,f){var p=a.nodes().filter(function(b){return!lFt(a,b)}),v=i.selectAll("g.node").data(p,function(b){return b}).classed("update",!0);v.exit().remove(),v.enter().append("g").attr("class","node").style("opacity",0),v=i.selectAll("g.node"),v.each(function(b){var E=a.node(b),_=yr(this);fFt(_,E.class,(_.classed("update")?"update ":"")+"node"),_.select("g.label").remove();var L=_.append("g").attr("class","label"),N=g0t(L,E),B=f[E.shape],j=hP(N.node().getBBox(),"width","height");E.elem=this,E.id&&_.attr("id",E.id),E.labelId&&L.attr("id",E.labelId),za(E,"width")&&(j.width=E.width),za(E,"height")&&(j.height=E.height),j.width+=E.paddingLeft+E.paddingRight,j.height+=E.paddingTop+E.paddingBottom,L.attr("transform","translate("+(E.paddingLeft-E.paddingRight)/2+","+(E.paddingTop-E.paddingBottom)/2+")");var R=yr(this);R.select(".label-container").remove();var z=B(R,j,E).classed("label-container",!0);p3(z,E.style);var K=z.node().getBBox();E.width=K.width,E.height=K.height});var m;return v.exit?m=v.exit():m=v.selectAll(null),am(m,a).style("opacity",0).remove(),v};function yBe(i){w0t=i}function xBe(i,a){var f=i.filter(function(){return!yr(this).classed("update")});function p(v){var m=a.node(v);return"translate("+m.x+","+m.y+")"}f.attr("transform",p),am(i,a).style("opacity",1).attr("transform",p),am(f.selectAll("rect"),a).attr("width",function(v){return a.node(v).width}).attr("height",function(v){return a.node(v).height}).attr("x",function(v){var m=a.node(v);return-m.width/2}).attr("y",function(v){var m=a.node(v);return-m.height/2})}function kBe(i,a){var f=i.filter(function(){return!yr(this).classed("update")});function p(v){var m=a.edge(v);return za(m,"x")?"translate("+m.x+","+m.y+")":""}f.attr("transform",p),am(i,a).style("opacity",1).attr("transform",p)}function EBe(i,a){var f=i.filter(function(){return!yr(this).classed("update")});function p(v){var m=a.node(v);return"translate("+m.x+","+m.y+")"}f.attr("transform",p),am(i,a).style("opacity",1).attr("transform",p)}function pFt(i,a,f,p){var v=i.x,m=i.y,b=v-p.x,E=m-p.y,_=Math.sqrt(a*a*E*E+f*f*b*b),L=Math.abs(a*f*b/_);p.x<v&&(L=-L);var N=Math.abs(a*f*E/_);return p.y<m&&(N=-N),{x:v+L,y:m+N}}function TBe(i,a,f){return pFt(i,a,a,f)}function CBe(i,a,f,p){var v,m,b,E,_,L,N,B,j,R,z,K,it,st,ut;if(v=a.y-i.y,b=i.x-a.x,_=a.x*i.y-i.x*a.y,j=v*f.x+b*f.y+_,R=v*p.x+b*p.y+_,!(j!==0&&R!==0&&bFt(j,R))&&(m=p.y-f.y,E=f.x-p.x,L=p.x*f.y-f.x*p.y,N=m*i.x+E*i.y+L,B=m*a.x+E*a.y+L,!(N!==0&&B!==0&&bFt(N,B))&&(z=v*E-m*b,z!==0)))return K=Math.abs(z/2),it=b*L-E*_,st=it<0?(it-K)/z:(it+K)/z,it=m*_-v*L,ut=it<0?(it-K)/z:(it+K)/z,{x:st,y:ut}}function bFt(i,a){return i*a>0}function b3(i,a,f){var p=i.x,v=i.y,m=[],b=Number.POSITIVE_INFINITY,E=Number.POSITIVE_INFINITY;a.forEach(function(z){b=Math.min(b,z.x),E=Math.min(E,z.y)});for(var _=p-i.width/2-b,L=v-i.height/2-E,N=0;N<a.length;N++){var B=a[N],j=a[N<a.length-1?N+1:0],R=CBe(i,f,{x:_+B.x,y:L+B.y},{x:_+j.x,y:L+j.y});R&&m.push(R)}return m.length?(m.length>1&&m.sort(function(z,K){var it=z.x-f.x,st=z.y-f.y,ut=Math.sqrt(it*it+st*st),bt=K.x-f.x,mt=K.y-f.y,yt=Math.sqrt(bt*bt+mt*mt);return ut<yt?-1:ut===yt?0:1}),m[0]):(console.log("NO INTERSECTION FOUND, RETURN NODE CENTER",i),i)}function m0t(i,a){var f=i.x,p=i.y,v=a.x-f,m=a.y-p,b=i.width/2,E=i.height/2,_,L;return Math.abs(m)*b>Math.abs(v)*E?(m<0&&(E=-E),_=m===0?0:E*v/m,L=E):(v<0&&(b=-b),_=b,L=v===0?0:b*m/v),{x:f+_,y:p+L}}var y0t={rect:SBe,ellipse:ABe,circle:LBe,diamond:MBe};function _Be(i){y0t=i}function SBe(i,a,f){var p=i.insert("rect",":first-child").attr("rx",f.rx).attr("ry",f.ry).attr("x",-a.width/2).attr("y",-a.height/2).attr("width",a.width).attr("height",a.height);return f.intersect=function(v){return m0t(f,v)},p}function ABe(i,a,f){var p=a.width/2,v=a.height/2,m=i.insert("ellipse",":first-child").attr("x",-a.width/2).attr("y",-a.height/2).attr("rx",p).attr("ry",v);return f.intersect=function(b){return pFt(f,p,v,b)},m}function LBe(i,a,f){var p=Math.max(a.width,a.height)/2,v=i.insert("circle",":first-child").attr("x",-a.width/2).attr("y",-a.height/2).attr("r",p);return f.intersect=function(m){return TBe(f,p,m)},v}function MBe(i,a,f){var p=a.width*Math.SQRT2/2,v=a.height*Math.SQRT2/2,m=[{x:0,y:-v},{x:-p,y:0},{x:0,y:v},{x:p,y:0}],b=i.insert("polygon",":first-child").attr("points",m.map(function(E){return E.x+","+E.y}).join(" "));return f.intersect=function(E){return b3(f,m,E)},b}function IBe(){var i=function(a,f){NBe(f);var p=bP(a,"output"),v=bP(p,"clusters"),m=bP(p,"edgePaths"),b=b0t(bP(p,"edgeLabels"),f),E=w0t(bP(p,"nodes"),f,y0t);eL(f),EBe(E,f),kBe(b,f),v0t(m,f,f0t);var _=p0t(v,f);xBe(_,f),PBe(f)};return i.createNodes=function(a){return arguments.length?(yBe(a),i):w0t},i.createClusters=function(a){return arguments.length?(fBe(a),i):p0t},i.createEdgeLabels=function(a){return arguments.length?(dBe(a),i):b0t},i.createEdgePaths=function(a){return arguments.length?(gBe(a),i):v0t},i.shapes=function(a){return arguments.length?(_Be(a),i):y0t},i.arrows=function(a){return arguments.length?(sBe(a),i):f0t},i}var DBe={paddingLeft:10,paddingRight:10,paddingTop:10,paddingBottom:10,rx:0,ry:0,shape:"rect"},OBe={arrowhead:"normal",curve:ig};function NBe(i){i.nodes().forEach(function(a){var f=i.node(a);!za(f,"label")&&!i.children(a).length&&(f.label=a),za(f,"paddingX")&&JA(f,{paddingLeft:f.paddingX,paddingRight:f.paddingX}),za(f,"paddingY")&&JA(f,{paddingTop:f.paddingY,paddingBottom:f.paddingY}),za(f,"padding")&&JA(f,{paddingLeft:f.padding,paddingRight:f.padding,paddingTop:f.padding,paddingBottom:f.padding}),JA(f,DBe),cr(["paddingLeft","paddingRight","paddingTop","paddingBottom"],function(p){f[p]=Number(f[p])}),za(f,"width")&&(f._prevWidth=f.width),za(f,"height")&&(f._prevHeight=f.height)}),i.edges().forEach(function(a){var f=i.edge(a);za(f,"label")||(f.label=""),JA(f,OBe)})}function PBe(i){cr(i.nodes(),function(a){var f=i.node(a);za(f,"_prevWidth")?f.width=f._prevWidth:delete f.width,za(f,"_prevHeight")?f.height=f._prevHeight:delete f.height,delete f._prevWidth,delete f._prevHeight})}function bP(i,a){var f=i.select("g."+a);return f.empty()&&(f=i.append("g").attr("class",a)),f}function vFt(i,a,f){const p=a.width,v=a.height,m=(p+v)*.9,b=[{x:m/2,y:0},{x:m,y:-m/2},{x:m/2,y:-m},{x:0,y:-m/2}],E=_5(i,m,m,b);return f.intersect=function(_){return b3(f,b,_)},E}function wFt(i,a,f){const v=a.height,m=v/4,b=a.width+2*m,E=[{x:m,y:0},{x:b-m,y:0},{x:b,y:-v/2},{x:b-m,y:-v},{x:m,y:-v},{x:0,y:-v/2}],_=_5(i,b,v,E);return f.intersect=function(L){return b3(f,E,L)},_}function mFt(i,a,f){const p=a.width,v=a.height,m=[{x:-v/2,y:0},{x:p,y:0},{x:p,y:-v},{x:-v/2,y:-v},{x:0,y:-v/2}],b=_5(i,p,v,m);return f.intersect=function(E){return b3(f,m,E)},b}function yFt(i,a,f){const p=a.width,v=a.height,m=[{x:-2*v/6,y:0},{x:p-v/6,y:0},{x:p+2*v/6,y:-v},{x:v/6,y:-v}],b=_5(i,p,v,m);return f.intersect=function(E){return b3(f,m,E)},b}function xFt(i,a,f){const p=a.width,v=a.height,m=[{x:2*v/6,y:0},{x:p+v/6,y:0},{x:p-2*v/6,y:-v},{x:-v/6,y:-v}],b=_5(i,p,v,m);return f.intersect=function(E){return b3(f,m,E)},b}function kFt(i,a,f){const p=a.width,v=a.height,m=[{x:-2*v/6,y:0},{x:p+2*v/6,y:0},{x:p-v/6,y:-v},{x:v/6,y:-v}],b=_5(i,p,v,m);return f.intersect=function(E){return b3(f,m,E)},b}function EFt(i,a,f){const p=a.width,v=a.height,m=[{x:v/6,y:0},{x:p-v/6,y:0},{x:p+2*v/6,y:-v},{x:-2*v/6,y:-v}],b=_5(i,p,v,m);return f.intersect=function(E){return b3(f,m,E)},b}function TFt(i,a,f){const p=a.width,v=a.height,m=[{x:0,y:0},{x:p+v/2,y:0},{x:p,y:-v/2},{x:p+v/2,y:-v},{x:0,y:-v}],b=_5(i,p,v,m);return f.intersect=function(E){return b3(f,m,E)},b}function CFt(i,a,f){const p=a.height,v=a.width+p/4,m=i.insert("rect",":first-child").attr("rx",p/2).attr("ry",p/2).attr("x",-v/2).attr("y",-p/2).attr("width",v).attr("height",p);return f.intersect=function(b){return m0t(f,b)},m}function _Ft(i,a,f){const p=a.width,v=a.height,m=[{x:0,y:0},{x:p,y:0},{x:p,y:-v},{x:0,y:-v},{x:0,y:0},{x:-8,y:0},{x:p+8,y:0},{x:p+8,y:-v},{x:-8,y:-v},{x:-8,y:0}],b=_5(i,p,v,m);return f.intersect=function(E){return b3(f,m,E)},b}function SFt(i,a,f){const p=a.width,v=p/2,m=v/(2.5+p/50),b=a.height+m,E="M 0,"+m+" a "+v+","+m+" 0,0,0 "+p+" 0 a "+v+","+m+" 0,0,0 "+-p+" 0 l 0,"+b+" a "+v+","+m+" 0,0,0 "+p+" 0 l 0,"+-b,_=i.attr("label-offset-y",m).insert("path",":first-child").attr("d",E).attr("transform","translate("+-p/2+","+-(b/2+m)+")");return f.intersect=function(L){const N=m0t(f,L),B=N.x-f.x;if(v!=0&&(Math.abs(B)<f.width/2||Math.abs(B)==f.width/2&&Math.abs(N.y-f.y)>f.height/2-m)){let j=m*m*(1-B*B/(v*v));j!=0&&(j=Math.sqrt(j)),j=m-j,L.y-f.y>0&&(j=-j),N.y+=j}return N},_}function FBe(i){i.shapes().question=vFt,i.shapes().hexagon=wFt,i.shapes().stadium=CFt,i.shapes().subroutine=_Ft,i.shapes().cylinder=SFt,i.shapes().rect_left_inv_arrow=mFt,i.shapes().lean_right=yFt,i.shapes().lean_left=xFt,i.shapes().trapezoid=kFt,i.shapes().inv_trapezoid=EFt,i.shapes().rect_right_inv_arrow=TFt}function BBe(i){i({question:vFt}),i({hexagon:wFt}),i({stadium:CFt}),i({subroutine:_Ft}),i({cylinder:SFt}),i({rect_left_inv_arrow:mFt}),i({lean_right:yFt}),i({lean_left:xFt}),i({trapezoid:kFt}),i({inv_trapezoid:EFt}),i({rect_right_inv_arrow:TFt})}function _5(i,a,f,p){return i.insert("polygon",":first-child").attr("points",p.map(function(v){return v.x+","+v.y}).join(" ")).attr("transform","translate("+-a/2+","+f/2+")")}const RBe={addToRender:FBe,addToRenderV2:BBe},AFt={},jBe=function(i){const a=Object.keys(i);for(const f of a)AFt[f]=i[f]},LFt=function(i,a,f,p,v,m){const b=p?p.select(`[id="${f}"]`):yr(`[id="${f}"]`),E=v||document;Object.keys(i).forEach(function(L){const N=i[L];let B="default";N.classes.length>0&&(B=N.classes.join(" "));const j=em(N.styles);let R=N.text!==void 0?N.text:N.id,z;if(s1(Le().flowchart.htmlLabels)){const st={label:R.replace(/fa[blrs]?:fa-[\w-]+/g,ut=>`<i class='${ut.replace(":"," ")}'></i>`)};z=d0t(b,st).node(),z.parentNode.removeChild(z)}else{const st=E.createElementNS("http://www.w3.org/2000/svg","text");st.setAttribute("style",j.labelStyle.replace("color:","fill:"));const ut=R.split(Yr.lineBreakRegex);for(const bt of ut){const mt=E.createElementNS("http://www.w3.org/2000/svg","tspan");mt.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),mt.setAttribute("dy","1em"),mt.setAttribute("x","1"),mt.textContent=bt,st.appendChild(mt)}z=st}let K=0,it="";switch(N.type){case"round":K=5,it="rect";break;case"square":it="rect";break;case"diamond":it="question";break;case"hexagon":it="hexagon";break;case"odd":it="rect_left_inv_arrow";break;case"lean_right":it="lean_right";break;case"lean_left":it="lean_left";break;case"trapezoid":it="trapezoid";break;case"inv_trapezoid":it="inv_trapezoid";break;case"odd_right":it="rect_left_inv_arrow";break;case"circle":it="circle";break;case"ellipse":it="ellipse";break;case"stadium":it="stadium";break;case"subroutine":it="subroutine";break;case"cylinder":it="cylinder";break;case"group":it="rect";break;default:it="rect"}Ut.warn("Adding node",N.id,N.domId),a.setNode(m.db.lookUpDomId(N.id),{labelType:"svg",labelStyle:j.labelStyle,shape:it,label:z,rx:K,ry:K,class:B,style:j.style,id:m.db.lookUpDomId(N.id)})})},MFt=function(i,a,f){let p=0,v,m;if(i.defaultStyle!==void 0){const b=em(i.defaultStyle);v=b.style,m=b.labelStyle}i.forEach(function(b){p++;const E="L-"+b.start+"-"+b.end,_="LS-"+b.start,L="LE-"+b.end,N={};b.type==="arrow_open"?N.arrowhead="none":N.arrowhead="normal";let B="",j="";if(b.style!==void 0){const R=em(b.style);B=R.style,j=R.labelStyle}else switch(b.stroke){case"normal":B="fill:none",v!==void 0&&(B=v),m!==void 0&&(j=m);break;case"dotted":B="fill:none;stroke-width:2px;stroke-dasharray:3;";break;case"thick":B=" stroke-width: 3.5px;fill:none";break}N.style=B,N.labelStyle=j,b.interpolate!==void 0?N.curve=X2(b.interpolate,ig):i.defaultInterpolate!==void 0?N.curve=X2(i.defaultInterpolate,ig):N.curve=X2(AFt.curve,ig),b.text===void 0?b.style!==void 0&&(N.arrowheadStyle="fill: #333"):(N.arrowheadStyle="fill: #333",N.labelpos="c",s1(Le().flowchart.htmlLabels)?(N.labelType="html",N.label=`<span id="L-${E}" class="edgeLabel L-${_}' L-${L}" style="${N.labelStyle}">${b.text.replace(/fa[blrs]?:fa-[\w-]+/g,R=>`<i class='${R.replace(":"," ")}'></i>`)}</span>`):(N.labelType="text",N.label=b.text.replace(Yr.lineBreakRegex,`
`),b.style===void 0&&(N.style=N.style||"stroke: #333; stroke-width: 1.5px;fill:none"),N.labelStyle=N.labelStyle.replace("color:","fill:"))),N.id=E,N.class=_+" "+L,N.minlen=b.length||1,a.setEdge(f.db.lookUpDomId(b.start),f.db.lookUpDomId(b.end),N,p)})},$Be={setConf:jBe,addVertices:LFt,addEdges:MFt,getClasses:function(i,a){return Ut.info("Extracting classes"),a.db.getClasses()},draw:function(i,a,f,p){Ut.info("Drawing flowchart");const{securityLevel:v,flowchart:m}=Le();let b;v==="sandbox"&&(b=yr("#i"+a));const E=yr(v==="sandbox"?b.nodes()[0].contentDocument.body:"body"),_=v==="sandbox"?b.nodes()[0].contentDocument:document;let L=p.db.getDirection();L===void 0&&(L="TD");const N=m.nodeSpacing||50,B=m.rankSpacing||50,j=new a1({multigraph:!0,compound:!0}).setGraph({rankdir:L,nodesep:N,ranksep:B,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}});let R;const z=p.db.getSubGraphs();for(let dt=z.length-1;dt>=0;dt--)R=z[dt],p.db.addVertex(R.id,R.title,"group",void 0,R.classes);const K=p.db.getVertices();Ut.warn("Get vertices",K);const it=p.db.getEdges();let st=0;for(st=z.length-1;st>=0;st--){R=z[st],ZLt("cluster").append("text");for(let dt=0;dt<R.nodes.length;dt++)Ut.warn("Setting subgraph",R.nodes[dt],p.db.lookUpDomId(R.nodes[dt]),p.db.lookUpDomId(R.id)),j.setParent(p.db.lookUpDomId(R.nodes[dt]),p.db.lookUpDomId(R.id))}LFt(K,j,a,E,_,p),MFt(it,j,p);const ut=new IBe;RBe.addToRender(ut),ut.arrows().none=function(ht,wt,X,pt){const xt=ht.append("marker").attr("id",wt).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto").append("path").attr("d","M 0 0 L 0 0 L 0 0 z");p3(xt,X[pt+"Style"])},ut.arrows().normal=function(ht,wt){ht.append("marker").attr("id",wt).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("class","arrowheadPath").style("stroke-width",1).style("stroke-dasharray","1,0")};const bt=E.select(`[id="${a}"]`),mt=E.select("#"+a+" g");for(ut(mt,j),mt.selectAll("g.node").attr("title",function(){return p.db.getTooltip(this.id)}),p.db.indexNodes("subGraph"+st),st=0;st<z.length;st++)if(R=z[st],R.title!=="undefined"){const dt=_.querySelectorAll("#"+a+' [id="'+p.db.lookUpDomId(R.id)+'"] rect'),ht=_.querySelectorAll("#"+a+' [id="'+p.db.lookUpDomId(R.id)+'"]'),wt=dt[0].x.baseVal.value,X=dt[0].y.baseVal.value,pt=dt[0].width.baseVal.value,xt=yr(ht[0]).select(".label");xt.attr("transform",`translate(${wt+pt/2}, ${X+14})`),xt.attr("id",a+"Text");for(let nt=0;nt<R.classes.length;nt++)ht[0].classList.add(R.classes[nt])}if(!m.htmlLabels){const dt=_.querySelectorAll('[id="'+a+'"] .edgeLabel .label');for(const ht of dt){const wt=ht.getBBox(),X=_.createElementNS("http://www.w3.org/2000/svg","rect");X.setAttribute("rx",0),X.setAttribute("ry",0),X.setAttribute("width",wt.width),X.setAttribute("height",wt.height),ht.insertBefore(X,ht.firstChild)}}cT(j,bt,m.diagramPadding,m.useMaxWidth),Object.keys(K).forEach(function(dt){const ht=K[dt];if(ht.link){const wt=E.select("#"+a+' [id="'+p.db.lookUpDomId(dt)+'"]');if(wt){const X=_.createElementNS("http://www.w3.org/2000/svg","a");X.setAttributeNS("http://www.w3.org/2000/svg","class",ht.classes.join(" ")),X.setAttributeNS("http://www.w3.org/2000/svg","href",ht.link),X.setAttributeNS("http://www.w3.org/2000/svg","rel","noopener"),v==="sandbox"?X.setAttributeNS("http://www.w3.org/2000/svg","target","_top"):ht.linkTarget&&X.setAttributeNS("http://www.w3.org/2000/svg","target",ht.linkTarget);const pt=wt.insert(function(){return X},":first-child"),U=wt.select(".label-container");U&&pt.append(function(){return U.node()});const xt=wt.select(".label");xt&&pt.append(function(){return xt.node()})}}})}};function S5(i){var a={options:{directed:i.isDirected(),multigraph:i.isMultigraph(),compound:i.isCompound()},nodes:zBe(i),edges:qBe(i)};return Xh(i.graph())||(a.value=POe(i.graph())),a}function zBe(i){return Of(i.nodes(),function(a){var f=i.node(a),p=i.parent(a),v={v:a};return Xh(f)||(v.value=f),Xh(p)||(v.parent=p),v})}function qBe(i){return Of(i.edges(),function(a){var f=i.edge(a),p={v:a.v,w:a.w};return Xh(a.name)||(p.name=a.name),Xh(f)||(p.value=f),p})}const HBe=(i,a,f,p)=>{a.forEach(v=>{GBe[v](i,f,p)})},GBe={extension:(i,a,f)=>{Ut.trace("Making markers for ",f),i.append("defs").append("marker").attr("id",f+"_"+a+"-extensionStart").attr("class","marker extension "+a).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"),i.append("defs").append("marker").attr("id",f+"_"+a+"-extensionEnd").attr("class","marker extension "+a).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")},composition:(i,a,f)=>{i.append("defs").append("marker").attr("id",f+"_"+a+"-compositionStart").attr("class","marker composition "+a).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"),i.append("defs").append("marker").attr("id",f+"_"+a+"-compositionEnd").attr("class","marker composition "+a).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:(i,a,f)=>{i.append("defs").append("marker").attr("id",f+"_"+a+"-aggregationStart").attr("class","marker aggregation "+a).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"),i.append("defs").append("marker").attr("id",f+"_"+a+"-aggregationEnd").attr("class","marker aggregation "+a).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")},dependency:(i,a,f)=>{i.append("defs").append("marker").attr("id",f+"_"+a+"-dependencyStart").attr("class","marker dependency "+a).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"),i.append("defs").append("marker").attr("id",f+"_"+a+"-dependencyEnd").attr("class","marker dependency "+a).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")},lollipop:(i,a,f)=>{i.append("defs").append("marker").attr("id",f+"_"+a+"-lollipopStart").attr("class","marker lollipop "+a).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),i.append("defs").append("marker").attr("id",f+"_"+a+"-lollipopEnd").attr("class","marker lollipop "+a).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)},point:(i,a,f)=>{i.append("marker").attr("id",f+"_"+a+"-pointEnd").attr("class","marker "+a).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"),i.append("marker").attr("id",f+"_"+a+"-pointStart").attr("class","marker "+a).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")},circle:(i,a,f)=>{i.append("marker").attr("id",f+"_"+a+"-circleEnd").attr("class","marker "+a).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"),i.append("marker").attr("id",f+"_"+a+"-circleStart").attr("class","marker "+a).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")},cross:(i,a,f)=>{i.append("marker").attr("id",f+"_"+a+"-crossEnd").attr("class","marker cross "+a).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"),i.append("marker").attr("id",f+"_"+a+"-crossStart").attr("class","marker cross "+a).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")},barb:(i,a,f)=>{i.append("defs").append("marker").attr("id",f+"_"+a+"-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")}},IFt=HBe;function VBe(i,a){a&&i.attr("style",a)}function UBe(i){const a=yr(document.createElementNS("http://www.w3.org/2000/svg","foreignObject")),f=a.append("xhtml:div"),p=i.label,v=i.isNode?"nodeLabel":"edgeLabel";return f.html('<span class="'+v+'" '+(i.labelStyle?'style="'+i.labelStyle+'"':"")+">"+p+"</span>"),VBe(f,i.labelStyle),f.style("display","inline-block"),f.style("white-space","nowrap"),f.attr("xmlns","http://www.w3.org/1999/xhtml"),a.node()}const hp=(i,a,f,p)=>{let v=i||"";if(typeof v=="object"&&(v=v[0]),s1(Le().flowchart.htmlLabels)){v=v.replace(/\\n|\n/g,"<br />"),Ut.info("vertexText"+v);const m={isNode:p,label:nP(v).replace(/fa[blrs]?:fa-[\w-]+/g,E=>`<i class='${E.replace(":"," ")}'></i>`),labelStyle:a.replace("fill:","color:")};return UBe(m)}else{const m=document.createElementNS("http://www.w3.org/2000/svg","text");m.setAttribute("style",a.replace("color:","fill:"));let b=[];typeof v=="string"?b=v.split(/\\n|\n|<br\s*\/?>/gi):Array.isArray(v)?b=v:b=[];for(const E of b){const _=document.createElementNS("http://www.w3.org/2000/svg","tspan");_.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),_.setAttribute("dy","1em"),_.setAttribute("x","0"),f?_.setAttribute("class","title-row"):_.setAttribute("class","row"),_.textContent=E.trim(),m.appendChild(_)}return m}};function WBe(i,a){var{includeImageAlt:f=!0}=a||{};return DFt(i,f)}function DFt(i,a){return i&&typeof i=="object"&&(i.value||(a?i.alt:"")||"children"in i&&OFt(i.children,a)||Array.isArray(i)&&OFt(i,a))||""}function OFt(i,a){for(var f=[],p=-1;++p<i.length;)f[p]=DFt(i[p],a);return f.join("")}function v3(i,a,f,p){const v=i.length;let m=0,b;if(a<0?a=-a>v?0:v+a:a=a>v?v:a,f=f>0?f:0,p.length<1e4)b=Array.from(p),b.unshift(a,f),[].splice.apply(i,b);else for(f&&[].splice.apply(i,[a,f]);m<p.length;)b=p.slice(m,m+1e4),b.unshift(a,0),[].splice.apply(i,b),m+=1e4,a+=1e4}function ev(i,a){return i.length>0?(v3(i,i.length,0,a),i):a}const NFt={}.hasOwnProperty;function KBe(i){const a={};let f=-1;for(;++f<i.length;)YBe(a,i[f]);return a}function YBe(i,a){let f;for(f in a){const v=(NFt.call(i,f)?i[f]:void 0)||(i[f]={}),m=a[f];let b;for(b in m){NFt.call(v,b)||(v[b]=[]);const E=m[b];XBe(v[b],Array.isArray(E)?E:E?[E]:[])}}}function XBe(i,a){let f=-1;const p=[];for(;++f<a.length;)(a[f].add==="after"?i:p).push(a[f]);v3(i,0,0,p)}const QBe=/[!-/:-@[-`{-~\u00A1\u00A7\u00AB\u00B6\u00B7\u00BB\u00BF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u2E52\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]/,w3=ck(/[A-Za-z]/),x0t=ck(/\d/),ZBe=ck(/[\dA-Fa-f]/),om=ck(/[\dA-Za-z]/),JBe=ck(/[!-/:-@[-`{-~]/),PFt=ck(/[#-'*+\--9=?A-Z^-~]/);function k0t(i){return i!==null&&(i<32||i===127)}function nv(i){return i!==null&&(i<0||i===32)}function Na(i){return i!==null&&i<-2}function Nf(i){return i===-2||i===-1||i===32}const tRe=ck(/\s/),eRe=ck(QBe);function ck(i){return a;function a(f){return f!==null&&i.test(String.fromCharCode(f))}}function Gu(i,a,f,p){const v=p?p-1:Number.POSITIVE_INFINITY;let m=0;return b;function b(_){return Nf(_)?(i.enter(f),E(_)):a(_)}function E(_){return Nf(_)&&m++<v?(i.consume(_),E):(i.exit(f),a(_))}}const nRe={tokenize:rRe};function rRe(i){const a=i.attempt(this.parser.constructs.contentInitial,p,v);let f;return a;function p(E){if(E===null){i.consume(E);return}return i.enter("lineEnding"),i.consume(E),i.exit("lineEnding"),Gu(i,a,"linePrefix")}function v(E){return i.enter("paragraph"),m(E)}function m(E){const _=i.enter("chunkText",{contentType:"text",previous:f});return f&&(f.next=_),f=_,b(E)}function b(E){if(E===null){i.exit("chunkText"),i.exit("paragraph"),i.consume(E);return}return Na(E)?(i.consume(E),i.exit("chunkText"),m):(i.consume(E),b)}}const iRe={tokenize:sRe},FFt={tokenize:aRe};function sRe(i){const a=this,f=[];let p=0,v,m,b;return E;function E(bt){if(p<f.length){const mt=f[p];return a.containerState=mt[1],i.attempt(mt[0].continuation,_,L)(bt)}return L(bt)}function _(bt){if(p++,a.containerState._closeFlow){a.containerState._closeFlow=void 0,v&&ut();const mt=a.events.length;let yt=mt,dt;for(;yt--;)if(a.events[yt][0]==="exit"&&a.events[yt][1].type==="chunkFlow"){dt=a.events[yt][1].end;break}st(p);let ht=mt;for(;ht<a.events.length;)a.events[ht][1].end=Object.assign({},dt),ht++;return v3(a.events,yt+1,0,a.events.slice(mt)),a.events.length=ht,L(bt)}return E(bt)}function L(bt){if(p===f.length){if(!v)return j(bt);if(v.currentConstruct&&v.currentConstruct.concrete)return z(bt);a.interrupt=!!(v.currentConstruct&&!v._gfmTableDynamicInterruptHack)}return a.containerState={},i.check(FFt,N,B)(bt)}function N(bt){return v&&ut(),st(p),j(bt)}function B(bt){return a.parser.lazy[a.now().line]=p!==f.length,b=a.now().offset,z(bt)}function j(bt){return a.containerState={},i.attempt(FFt,R,z)(bt)}function R(bt){return p++,f.push([a.currentConstruct,a.containerState]),j(bt)}function z(bt){if(bt===null){v&&ut(),st(0),i.consume(bt);return}return v=v||a.parser.flow(a.now()),i.enter("chunkFlow",{contentType:"flow",previous:m,_tokenizer:v}),K(bt)}function K(bt){if(bt===null){it(i.exit("chunkFlow"),!0),st(0),i.consume(bt);return}return Na(bt)?(i.consume(bt),it(i.exit("chunkFlow")),p=0,a.interrupt=void 0,E):(i.consume(bt),K)}function it(bt,mt){const yt=a.sliceStream(bt);if(mt&&yt.push(null),bt.previous=m,m&&(m.next=bt),m=bt,v.defineSkip(bt.start),v.write(yt),a.parser.lazy[bt.start.line]){let dt=v.events.length;for(;dt--;)if(v.events[dt][1].start.offset<b&&(!v.events[dt][1].end||v.events[dt][1].end.offset>b))return;const ht=a.events.length;let wt=ht,X,pt;for(;wt--;)if(a.events[wt][0]==="exit"&&a.events[wt][1].type==="chunkFlow"){if(X){pt=a.events[wt][1].end;break}X=!0}for(st(p),dt=ht;dt<a.events.length;)a.events[dt][1].end=Object.assign({},pt),dt++;v3(a.events,wt+1,0,a.events.slice(ht)),a.events.length=dt}}function st(bt){let mt=f.length;for(;mt-- >bt;){const yt=f[mt];a.containerState=yt[1],yt[0].exit.call(a,i)}f.length=bt}function ut(){v.write([null]),m=void 0,v=void 0,a.containerState._closeFlow=void 0}}function aRe(i,a,f){return Gu(i,i.attempt(this.parser.constructs.document,a,f),"linePrefix",this.parser.constructs.disable.null.includes("codeIndented")?void 0:4)}function BFt(i){if(i===null||nv(i)||tRe(i))return 1;if(eRe(i))return 2}function E0t(i,a,f){const p=[];let v=-1;for(;++v<i.length;){const m=i[v].resolveAll;m&&!p.includes(m)&&(a=m(a,f),p.push(m))}return a}const T0t={name:"attention",tokenize:cRe,resolveAll:oRe};function oRe(i,a){let f=-1,p,v,m,b,E,_,L,N;for(;++f<i.length;)if(i[f][0]==="enter"&&i[f][1].type==="attentionSequence"&&i[f][1]._close){for(p=f;p--;)if(i[p][0]==="exit"&&i[p][1].type==="attentionSequence"&&i[p][1]._open&&a.sliceSerialize(i[p][1]).charCodeAt(0)===a.sliceSerialize(i[f][1]).charCodeAt(0)){if((i[p][1]._close||i[f][1]._open)&&(i[f][1].end.offset-i[f][1].start.offset)%3&&!((i[p][1].end.offset-i[p][1].start.offset+i[f][1].end.offset-i[f][1].start.offset)%3))continue;_=i[p][1].end.offset-i[p][1].start.offset>1&&i[f][1].end.offset-i[f][1].start.offset>1?2:1;const B=Object.assign({},i[p][1].end),j=Object.assign({},i[f][1].start);RFt(B,-_),RFt(j,_),b={type:_>1?"strongSequence":"emphasisSequence",start:B,end:Object.assign({},i[p][1].end)},E={type:_>1?"strongSequence":"emphasisSequence",start:Object.assign({},i[f][1].start),end:j},m={type:_>1?"strongText":"emphasisText",start:Object.assign({},i[p][1].end),end:Object.assign({},i[f][1].start)},v={type:_>1?"strong":"emphasis",start:Object.assign({},b.start),end:Object.assign({},E.end)},i[p][1].end=Object.assign({},b.start),i[f][1].start=Object.assign({},E.end),L=[],i[p][1].end.offset-i[p][1].start.offset&&(L=ev(L,[["enter",i[p][1],a],["exit",i[p][1],a]])),L=ev(L,[["enter",v,a],["enter",b,a],["exit",b,a],["enter",m,a]]),L=ev(L,E0t(a.parser.constructs.insideSpan.null,i.slice(p+1,f),a)),L=ev(L,[["exit",m,a],["enter",E,a],["exit",E,a],["exit",v,a]]),i[f][1].end.offset-i[f][1].start.offset?(N=2,L=ev(L,[["enter",i[f][1],a],["exit",i[f][1],a]])):N=0,v3(i,p-1,f-p+3,L),f=p+L.length-N-2;break}}for(f=-1;++f<i.length;)i[f][1].type==="attentionSequence"&&(i[f][1].type="data");return i}function cRe(i,a){const f=this.parser.constructs.attentionMarkers.null,p=this.previous,v=BFt(p);let m;return b;function b(_){return i.enter("attentionSequence"),m=_,E(_)}function E(_){if(_===m)return i.consume(_),E;const L=i.exit("attentionSequence"),N=BFt(_),B=!N||N===2&&v||f.includes(_),j=!v||v===2&&N||f.includes(p);return L._open=!!(m===42?B:B&&(v||!j)),L._close=!!(m===42?j:j&&(N||!B)),a(_)}}function RFt(i,a){i.column+=a,i.offset+=a,i._bufferIndex+=a}const uRe={name:"autolink",tokenize:lRe};function lRe(i,a,f){let p=1;return v;function v(z){return i.enter("autolink"),i.enter("autolinkMarker"),i.consume(z),i.exit("autolinkMarker"),i.enter("autolinkProtocol"),m}function m(z){return w3(z)?(i.consume(z),b):PFt(z)?L(z):f(z)}function b(z){return z===43||z===45||z===46||om(z)?E(z):L(z)}function E(z){return z===58?(i.consume(z),_):(z===43||z===45||z===46||om(z))&&p++<32?(i.consume(z),E):L(z)}function _(z){return z===62?(i.exit("autolinkProtocol"),R(z)):z===null||z===32||z===60||k0t(z)?f(z):(i.consume(z),_)}function L(z){return z===64?(i.consume(z),p=0,N):PFt(z)?(i.consume(z),L):f(z)}function N(z){return om(z)?B(z):f(z)}function B(z){return z===46?(i.consume(z),p=0,N):z===62?(i.exit("autolinkProtocol").type="autolinkEmail",R(z)):j(z)}function j(z){return(z===45||om(z))&&p++<63?(i.consume(z),z===45?j:B):f(z)}function R(z){return i.enter("autolinkMarker"),i.consume(z),i.exit("autolinkMarker"),i.exit("autolink"),a}}const lK={tokenize:hRe,partial:!0};function hRe(i,a,f){return Gu(i,p,"linePrefix");function p(v){return v===null||Na(v)?a(v):f(v)}}const jFt={name:"blockQuote",tokenize:fRe,continuation:{tokenize:dRe},exit:gRe};function fRe(i,a,f){const p=this;return v;function v(b){if(b===62){const E=p.containerState;return E.open||(i.enter("blockQuote",{_container:!0}),E.open=!0),i.enter("blockQuotePrefix"),i.enter("blockQuoteMarker"),i.consume(b),i.exit("blockQuoteMarker"),m}return f(b)}function m(b){return Nf(b)?(i.enter("blockQuotePrefixWhitespace"),i.consume(b),i.exit("blockQuotePrefixWhitespace"),i.exit("blockQuotePrefix"),a):(i.exit("blockQuotePrefix"),a(b))}}function dRe(i,a,f){return Gu(i,i.attempt(jFt,a,f),"linePrefix",this.parser.constructs.disable.null.includes("codeIndented")?void 0:4)}function gRe(i){i.exit("blockQuote")}const $Ft={name:"characterEscape",tokenize:pRe};function pRe(i,a,f){return p;function p(m){return i.enter("characterEscape"),i.enter("escapeMarker"),i.consume(m),i.exit("escapeMarker"),v}function v(m){return JBe(m)?(i.enter("characterEscapeValue"),i.consume(m),i.exit("characterEscapeValue"),i.exit("characterEscape"),a):f(m)}}const zFt=document.createElement("i");function C0t(i){const a="&"+i+";";zFt.innerHTML=a;const f=zFt.textContent;return f.charCodeAt(f.length-1)===59&&i!=="semi"||f===a?!1:f}const qFt={name:"characterReference",tokenize:bRe};function bRe(i,a,f){const p=this;let v=0,m,b;return E;function E(B){return i.enter("characterReference"),i.enter("characterReferenceMarker"),i.consume(B),i.exit("characterReferenceMarker"),_}function _(B){return B===35?(i.enter("characterReferenceMarkerNumeric"),i.consume(B),i.exit("characterReferenceMarkerNumeric"),L):(i.enter("characterReferenceValue"),m=31,b=om,N(B))}function L(B){return B===88||B===120?(i.enter("characterReferenceMarkerHexadecimal"),i.consume(B),i.exit("characterReferenceMarkerHexadecimal"),i.enter("characterReferenceValue"),m=6,b=ZBe,N):(i.enter("characterReferenceValue"),m=7,b=x0t,N(B))}function N(B){let j;return B===59&&v?(j=i.exit("characterReferenceValue"),b===om&&!C0t(p.sliceSerialize(j))?f(B):(i.enter("characterReferenceMarker"),i.consume(B),i.exit("characterReferenceMarker"),i.exit("characterReference"),a)):b(B)&&v++<m?(i.consume(B),N):f(B)}}const HFt={name:"codeFenced",tokenize:vRe,concrete:!0};function vRe(i,a,f){const p=this,v={tokenize:yt,partial:!0},m={tokenize:mt,partial:!0},b=this.events[this.events.length-1],E=b&&b[1].type==="linePrefix"?b[2].sliceSerialize(b[1],!0).length:0;let _=0,L;return N;function N(dt){return i.enter("codeFenced"),i.enter("codeFencedFence"),i.enter("codeFencedFenceSequence"),L=dt,B(dt)}function B(dt){return dt===L?(i.consume(dt),_++,B):(i.exit("codeFencedFenceSequence"),_<3?f(dt):Gu(i,j,"whitespace")(dt))}function j(dt){return dt===null||Na(dt)?it(dt):(i.enter("codeFencedFenceInfo"),i.enter("chunkString",{contentType:"string"}),R(dt))}function R(dt){return dt===null||nv(dt)?(i.exit("chunkString"),i.exit("codeFencedFenceInfo"),Gu(i,z,"whitespace")(dt)):dt===96&&dt===L?f(dt):(i.consume(dt),R)}function z(dt){return dt===null||Na(dt)?it(dt):(i.enter("codeFencedFenceMeta"),i.enter("chunkString",{contentType:"string"}),K(dt))}function K(dt){return dt===null||Na(dt)?(i.exit("chunkString"),i.exit("codeFencedFenceMeta"),it(dt)):dt===96&&dt===L?f(dt):(i.consume(dt),K)}function it(dt){return i.exit("codeFencedFence"),p.interrupt?a(dt):st(dt)}function st(dt){return dt===null?bt(dt):Na(dt)?i.attempt(m,i.attempt(v,bt,E?Gu(i,st,"linePrefix",E+1):st),bt)(dt):(i.enter("codeFlowValue"),ut(dt))}function ut(dt){return dt===null||Na(dt)?(i.exit("codeFlowValue"),st(dt)):(i.consume(dt),ut)}function bt(dt){return i.exit("codeFenced"),a(dt)}function mt(dt,ht,wt){const X=this;return pt;function pt(xt){return dt.enter("lineEnding"),dt.consume(xt),dt.exit("lineEnding"),U}function U(xt){return X.parser.lazy[X.now().line]?wt(xt):ht(xt)}}function yt(dt,ht,wt){let X=0;return Gu(dt,pt,"linePrefix",this.parser.constructs.disable.null.includes("codeIndented")?void 0:4);function pt(nt){return dt.enter("codeFencedFence"),dt.enter("codeFencedFenceSequence"),U(nt)}function U(nt){return nt===L?(dt.consume(nt),X++,U):X<_?wt(nt):(dt.exit("codeFencedFenceSequence"),Gu(dt,xt,"whitespace")(nt))}function xt(nt){return nt===null||Na(nt)?(dt.exit("codeFencedFence"),ht(nt)):wt(nt)}}}const _0t={name:"codeIndented",tokenize:mRe},wRe={tokenize:yRe,partial:!0};function mRe(i,a,f){const p=this;return v;function v(L){return i.enter("codeIndented"),Gu(i,m,"linePrefix",4+1)(L)}function m(L){const N=p.events[p.events.length-1];return N&&N[1].type==="linePrefix"&&N[2].sliceSerialize(N[1],!0).length>=4?b(L):f(L)}function b(L){return L===null?_(L):Na(L)?i.attempt(wRe,b,_)(L):(i.enter("codeFlowValue"),E(L))}function E(L){return L===null||Na(L)?(i.exit("codeFlowValue"),b(L)):(i.consume(L),E)}function _(L){return i.exit("codeIndented"),a(L)}}function yRe(i,a,f){const p=this;return v;function v(b){return p.parser.lazy[p.now().line]?f(b):Na(b)?(i.enter("lineEnding"),i.consume(b),i.exit("lineEnding"),v):Gu(i,m,"linePrefix",4+1)(b)}function m(b){const E=p.events[p.events.length-1];return E&&E[1].type==="linePrefix"&&E[2].sliceSerialize(E[1],!0).length>=4?a(b):Na(b)?v(b):f(b)}}const xRe={name:"codeText",tokenize:TRe,resolve:kRe,previous:ERe};function kRe(i){let a=i.length-4,f=3,p,v;if((i[f][1].type==="lineEnding"||i[f][1].type==="space")&&(i[a][1].type==="lineEnding"||i[a][1].type==="space")){for(p=f;++p<a;)if(i[p][1].type==="codeTextData"){i[f][1].type="codeTextPadding",i[a][1].type="codeTextPadding",f+=2,a-=2;break}}for(p=f-1,a++;++p<=a;)v===void 0?p!==a&&i[p][1].type!=="lineEnding"&&(v=p):(p===a||i[p][1].type==="lineEnding")&&(i[v][1].type="codeTextData",p!==v+2&&(i[v][1].end=i[p-1][1].end,i.splice(v+2,p-v-2),a-=p-v-2,p=v+2),v=void 0);return i}function ERe(i){return i!==96||this.events[this.events.length-1][1].type==="characterEscape"}function TRe(i,a,f){let p=0,v,m;return b;function b(B){return i.enter("codeText"),i.enter("codeTextSequence"),E(B)}function E(B){return B===96?(i.consume(B),p++,E):(i.exit("codeTextSequence"),_(B))}function _(B){return B===null?f(B):B===96?(m=i.enter("codeTextSequence"),v=0,N(B)):B===32?(i.enter("space"),i.consume(B),i.exit("space"),_):Na(B)?(i.enter("lineEnding"),i.consume(B),i.exit("lineEnding"),_):(i.enter("codeTextData"),L(B))}function L(B){return B===null||B===32||B===96||Na(B)?(i.exit("codeTextData"),_(B)):(i.consume(B),L)}function N(B){return B===96?(i.consume(B),v++,N):v===p?(i.exit("codeTextSequence"),i.exit("codeText"),a(B)):(m.type="codeTextData",L(B))}}function GFt(i){const a={};let f=-1,p,v,m,b,E,_,L;for(;++f<i.length;){for(;f in a;)f=a[f];if(p=i[f],f&&p[1].type==="chunkFlow"&&i[f-1][1].type==="listItemPrefix"&&(_=p[1]._tokenizer.events,m=0,m<_.length&&_[m][1].type==="lineEndingBlank"&&(m+=2),m<_.length&&_[m][1].type==="content"))for(;++m<_.length&&_[m][1].type!=="content";)_[m][1].type==="chunkText"&&(_[m][1]._isInFirstContentOfListItem=!0,m++);if(p[0]==="enter")p[1].contentType&&(Object.assign(a,CRe(i,f)),f=a[f],L=!0);else if(p[1]._container){for(m=f,v=void 0;m--&&(b=i[m],b[1].type==="lineEnding"||b[1].type==="lineEndingBlank");)b[0]==="enter"&&(v&&(i[v][1].type="lineEndingBlank"),b[1].type="lineEnding",v=m);v&&(p[1].end=Object.assign({},i[v][1].start),E=i.slice(v,f),E.unshift(p),v3(i,v,f-v+1,E))}}return!L}function CRe(i,a){const f=i[a][1],p=i[a][2];let v=a-1;const m=[],b=f._tokenizer||p.parser[f.contentType](f.start),E=b.events,_=[],L={};let N,B,j=-1,R=f,z=0,K=0;const it=[K];for(;R;){for(;i[++v][1]!==R;);m.push(v),R._tokenizer||(N=p.sliceStream(R),R.next||N.push(null),B&&b.defineSkip(R.start),R._isInFirstContentOfListItem&&(b._gfmTasklistFirstContentOfListItem=!0),b.write(N),R._isInFirstContentOfListItem&&(b._gfmTasklistFirstContentOfListItem=void 0)),B=R,R=R.next}for(R=f;++j<E.length;)E[j][0]==="exit"&&E[j-1][0]==="enter"&&E[j][1].type===E[j-1][1].type&&E[j][1].start.line!==E[j][1].end.line&&(K=j+1,it.push(K),R._tokenizer=void 0,R.previous=void 0,R=R.next);for(b.events=[],R?(R._tokenizer=void 0,R.previous=void 0):it.pop(),j=it.length;j--;){const st=E.slice(it[j],it[j+1]),ut=m.pop();_.unshift([ut,ut+st.length-1]),v3(i,ut,2,st)}for(j=-1;++j<_.length;)L[z+_[j][0]]=z+_[j][1],z+=_[j][1]-_[j][0]-1;return L}const _Re={tokenize:LRe,resolve:ARe},SRe={tokenize:MRe,partial:!0};function ARe(i){return GFt(i),i}function LRe(i,a){let f;return p;function p(E){return i.enter("content"),f=i.enter("chunkContent",{contentType:"content"}),v(E)}function v(E){return E===null?m(E):Na(E)?i.check(SRe,b,m)(E):(i.consume(E),v)}function m(E){return i.exit("chunkContent"),i.exit("content"),a(E)}function b(E){return i.consume(E),i.exit("chunkContent"),f.next=i.enter("chunkContent",{contentType:"content",previous:f}),f=f.next,v}}function MRe(i,a,f){const p=this;return v;function v(b){return i.exit("chunkContent"),i.enter("lineEnding"),i.consume(b),i.exit("lineEnding"),Gu(i,m,"linePrefix")}function m(b){if(b===null||Na(b))return f(b);const E=p.events[p.events.length-1];return!p.parser.constructs.disable.null.includes("codeIndented")&&E&&E[1].type==="linePrefix"&&E[2].sliceSerialize(E[1],!0).length>=4?a(b):i.interrupt(p.parser.constructs.flow,f,a)(b)}}function VFt(i,a,f,p,v,m,b,E,_){const L=_||Number.POSITIVE_INFINITY;let N=0;return B;function B(st){return st===60?(i.enter(p),i.enter(v),i.enter(m),i.consume(st),i.exit(m),j):st===null||st===41||k0t(st)?f(st):(i.enter(p),i.enter(b),i.enter(E),i.enter("chunkString",{contentType:"string"}),K(st))}function j(st){return st===62?(i.enter(m),i.consume(st),i.exit(m),i.exit(v),i.exit(p),a):(i.enter(E),i.enter("chunkString",{contentType:"string"}),R(st))}function R(st){return st===62?(i.exit("chunkString"),i.exit(E),j(st)):st===null||st===60||Na(st)?f(st):(i.consume(st),st===92?z:R)}function z(st){return st===60||st===62||st===92?(i.consume(st),R):R(st)}function K(st){return st===40?++N>L?f(st):(i.consume(st),K):st===41?N--?(i.consume(st),K):(i.exit("chunkString"),i.exit(E),i.exit(b),i.exit(p),a(st)):st===null||nv(st)?N?f(st):(i.exit("chunkString"),i.exit(E),i.exit(b),i.exit(p),a(st)):k0t(st)?f(st):(i.consume(st),st===92?it:K)}function it(st){return st===40||st===41||st===92?(i.consume(st),K):K(st)}}function UFt(i,a,f,p,v,m){const b=this;let E=0,_;return L;function L(R){return i.enter(p),i.enter(v),i.consume(R),i.exit(v),i.enter(m),N}function N(R){return R===null||R===91||R===93&&!_||R===94&&!E&&"_hiddenFootnoteSupport"in b.parser.constructs||E>999?f(R):R===93?(i.exit(m),i.enter(v),i.consume(R),i.exit(v),i.exit(p),a):Na(R)?(i.enter("lineEnding"),i.consume(R),i.exit("lineEnding"),N):(i.enter("chunkString",{contentType:"string"}),B(R))}function B(R){return R===null||R===91||R===93||Na(R)||E++>999?(i.exit("chunkString"),N(R)):(i.consume(R),_=_||!Nf(R),R===92?j:B)}function j(R){return R===91||R===92||R===93?(i.consume(R),E++,B):B(R)}}function WFt(i,a,f,p,v,m){let b;return E;function E(j){return i.enter(p),i.enter(v),i.consume(j),i.exit(v),b=j===40?41:j,_}function _(j){return j===b?(i.enter(v),i.consume(j),i.exit(v),i.exit(p),a):(i.enter(m),L(j))}function L(j){return j===b?(i.exit(m),_(b)):j===null?f(j):Na(j)?(i.enter("lineEnding"),i.consume(j),i.exit("lineEnding"),Gu(i,L,"linePrefix")):(i.enter("chunkString",{contentType:"string"}),N(j))}function N(j){return j===b||j===null||Na(j)?(i.exit("chunkString"),L(j)):(i.consume(j),j===92?B:N)}function B(j){return j===b||j===92?(i.consume(j),N):N(j)}}function vP(i,a){let f;return p;function p(v){return Na(v)?(i.enter("lineEnding"),i.consume(v),i.exit("lineEnding"),f=!0,p):Nf(v)?Gu(i,p,f?"linePrefix":"lineSuffix")(v):a(v)}}function nL(i){return i.replace(/[\t\n\r ]+/g," ").replace(/^ | $/g,"").toLowerCase().toUpperCase()}const IRe={name:"definition",tokenize:ORe},DRe={tokenize:NRe,partial:!0};function ORe(i,a,f){const p=this;let v;return m;function m(_){return i.enter("definition"),UFt.call(p,i,b,f,"definitionLabel","definitionLabelMarker","definitionLabelString")(_)}function b(_){return v=nL(p.sliceSerialize(p.events[p.events.length-1][1]).slice(1,-1)),_===58?(i.enter("definitionMarker"),i.consume(_),i.exit("definitionMarker"),vP(i,VFt(i,i.attempt(DRe,Gu(i,E,"whitespace"),Gu(i,E,"whitespace")),f,"definitionDestination","definitionDestinationLiteral","definitionDestinationLiteralMarker","definitionDestinationRaw","definitionDestinationString"))):f(_)}function E(_){return _===null||Na(_)?(i.exit("definition"),p.parser.defined.includes(v)||p.parser.defined.push(v),a(_)):f(_)}}function NRe(i,a,f){return p;function p(b){return nv(b)?vP(i,v)(b):f(b)}function v(b){return b===34||b===39||b===40?WFt(i,Gu(i,m,"whitespace"),f,"definitionTitle","definitionTitleMarker","definitionTitleString")(b):f(b)}function m(b){return b===null||Na(b)?a(b):f(b)}}const PRe={name:"hardBreakEscape",tokenize:FRe};function FRe(i,a,f){return p;function p(m){return i.enter("hardBreakEscape"),i.enter("escapeMarker"),i.consume(m),v}function v(m){return Na(m)?(i.exit("escapeMarker"),i.exit("hardBreakEscape"),a(m)):f(m)}}const BRe={name:"headingAtx",tokenize:jRe,resolve:RRe};function RRe(i,a){let f=i.length-2,p=3,v,m;return i[p][1].type==="whitespace"&&(p+=2),f-2>p&&i[f][1].type==="whitespace"&&(f-=2),i[f][1].type==="atxHeadingSequence"&&(p===f-1||f-4>p&&i[f-2][1].type==="whitespace")&&(f-=p+1===f?2:4),f>p&&(v={type:"atxHeadingText",start:i[p][1].start,end:i[f][1].end},m={type:"chunkText",start:i[p][1].start,end:i[f][1].end,contentType:"text"},v3(i,p,f-p+1,[["enter",v,a],["enter",m,a],["exit",m,a],["exit",v,a]])),i}function jRe(i,a,f){const p=this;let v=0;return m;function m(N){return i.enter("atxHeading"),i.enter("atxHeadingSequence"),b(N)}function b(N){return N===35&&v++<6?(i.consume(N),b):N===null||nv(N)?(i.exit("atxHeadingSequence"),p.interrupt?a(N):E(N)):f(N)}function E(N){return N===35?(i.enter("atxHeadingSequence"),_(N)):N===null||Na(N)?(i.exit("atxHeading"),a(N)):Nf(N)?Gu(i,E,"whitespace")(N):(i.enter("atxHeadingText"),L(N))}function _(N){return N===35?(i.consume(N),_):(i.exit("atxHeadingSequence"),E(N))}function L(N){return N===null||N===35||nv(N)?(i.exit("atxHeadingText"),E(N)):(i.consume(N),L)}}const $Re=["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","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","section","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"],KFt=["pre","script","style","textarea"],zRe={name:"htmlFlow",tokenize:GRe,resolveTo:HRe,concrete:!0},qRe={tokenize:VRe,partial:!0};function HRe(i){let a=i.length;for(;a--&&!(i[a][0]==="enter"&&i[a][1].type==="htmlFlow"););return a>1&&i[a-2][1].type==="linePrefix"&&(i[a][1].start=i[a-2][1].start,i[a+1][1].start=i[a-2][1].start,i.splice(a-2,2)),i}function GRe(i,a,f){const p=this;let v,m,b,E,_;return L;function L(Ft){return i.enter("htmlFlow"),i.enter("htmlFlowData"),i.consume(Ft),N}function N(Ft){return Ft===33?(i.consume(Ft),B):Ft===47?(i.consume(Ft),z):Ft===63?(i.consume(Ft),v=3,p.interrupt?a:Tt):w3(Ft)?(i.consume(Ft),b=String.fromCharCode(Ft),m=!0,K):f(Ft)}function B(Ft){return Ft===45?(i.consume(Ft),v=2,j):Ft===91?(i.consume(Ft),v=5,b="CDATA[",E=0,R):w3(Ft)?(i.consume(Ft),v=4,p.interrupt?a:Tt):f(Ft)}function j(Ft){return Ft===45?(i.consume(Ft),p.interrupt?a:Tt):f(Ft)}function R(Ft){return Ft===b.charCodeAt(E++)?(i.consume(Ft),E===b.length?p.interrupt?a:U:R):f(Ft)}function z(Ft){return w3(Ft)?(i.consume(Ft),b=String.fromCharCode(Ft),K):f(Ft)}function K(Ft){return Ft===null||Ft===47||Ft===62||nv(Ft)?Ft!==47&&m&&KFt.includes(b.toLowerCase())?(v=1,p.interrupt?a(Ft):U(Ft)):$Re.includes(b.toLowerCase())?(v=6,Ft===47?(i.consume(Ft),it):p.interrupt?a(Ft):U(Ft)):(v=7,p.interrupt&&!p.parser.lazy[p.now().line]?f(Ft):m?ut(Ft):st(Ft)):Ft===45||om(Ft)?(i.consume(Ft),b+=String.fromCharCode(Ft),K):f(Ft)}function it(Ft){return Ft===62?(i.consume(Ft),p.interrupt?a:U):f(Ft)}function st(Ft){return Nf(Ft)?(i.consume(Ft),st):X(Ft)}function ut(Ft){return Ft===47?(i.consume(Ft),X):Ft===58||Ft===95||w3(Ft)?(i.consume(Ft),bt):Nf(Ft)?(i.consume(Ft),ut):X(Ft)}function bt(Ft){return Ft===45||Ft===46||Ft===58||Ft===95||om(Ft)?(i.consume(Ft),bt):mt(Ft)}function mt(Ft){return Ft===61?(i.consume(Ft),yt):Nf(Ft)?(i.consume(Ft),mt):ut(Ft)}function yt(Ft){return Ft===null||Ft===60||Ft===61||Ft===62||Ft===96?f(Ft):Ft===34||Ft===39?(i.consume(Ft),_=Ft,dt):Nf(Ft)?(i.consume(Ft),yt):(_=null,ht(Ft))}function dt(Ft){return Ft===null||Na(Ft)?f(Ft):Ft===_?(i.consume(Ft),wt):(i.consume(Ft),dt)}function ht(Ft){return Ft===null||Ft===34||Ft===39||Ft===60||Ft===61||Ft===62||Ft===96||nv(Ft)?mt(Ft):(i.consume(Ft),ht)}function wt(Ft){return Ft===47||Ft===62||Nf(Ft)?ut(Ft):f(Ft)}function X(Ft){return Ft===62?(i.consume(Ft),pt):f(Ft)}function pt(Ft){return Nf(Ft)?(i.consume(Ft),pt):Ft===null||Na(Ft)?U(Ft):f(Ft)}function U(Ft){return Ft===45&&v===2?(i.consume(Ft),Nt):Ft===60&&v===1?(i.consume(Ft),qt):Ft===62&&v===4?(i.consume(Ft),Ht):Ft===63&&v===3?(i.consume(Ft),Tt):Ft===93&&v===5?(i.consume(Ft),Z):Na(Ft)&&(v===6||v===7)?i.check(qRe,Ht,xt)(Ft):Ft===null||Na(Ft)?xt(Ft):(i.consume(Ft),U)}function xt(Ft){return i.exit("htmlFlowData"),nt(Ft)}function nt(Ft){return Ft===null?It(Ft):Na(Ft)?i.attempt({tokenize:Ot,partial:!0},nt,It)(Ft):(i.enter("htmlFlowData"),U(Ft))}function Ot(Ft,ke,pn){return Me;function Me(Ge){return Ft.enter("lineEnding"),Ft.consume(Ge),Ft.exit("lineEnding"),ve}function ve(Ge){return p.parser.lazy[p.now().line]?pn(Ge):ke(Ge)}}function Nt(Ft){return Ft===45?(i.consume(Ft),Tt):U(Ft)}function qt(Ft){return Ft===47?(i.consume(Ft),b="",Ct):U(Ft)}function Ct(Ft){return Ft===62&&KFt.includes(b.toLowerCase())?(i.consume(Ft),Ht):w3(Ft)&&b.length<8?(i.consume(Ft),b+=String.fromCharCode(Ft),Ct):U(Ft)}function Z(Ft){return Ft===93?(i.consume(Ft),Tt):U(Ft)}function Tt(Ft){return Ft===62?(i.consume(Ft),Ht):Ft===45&&v===2?(i.consume(Ft),Tt):U(Ft)}function Ht(Ft){return Ft===null||Na(Ft)?(i.exit("htmlFlowData"),It(Ft)):(i.consume(Ft),Ht)}function It(Ft){return i.exit("htmlFlow"),a(Ft)}}function VRe(i,a,f){return p;function p(v){return i.exit("htmlFlowData"),i.enter("lineEndingBlank"),i.consume(v),i.exit("lineEndingBlank"),i.attempt(lK,a,f)}}const URe={name:"htmlText",tokenize:WRe};function WRe(i,a,f){const p=this;let v,m,b,E;return _;function _(It){return i.enter("htmlText"),i.enter("htmlTextData"),i.consume(It),L}function L(It){return It===33?(i.consume(It),N):It===47?(i.consume(It),ht):It===63?(i.consume(It),yt):w3(It)?(i.consume(It),pt):f(It)}function N(It){return It===45?(i.consume(It),B):It===91?(i.consume(It),m="CDATA[",b=0,it):w3(It)?(i.consume(It),mt):f(It)}function B(It){return It===45?(i.consume(It),j):f(It)}function j(It){return It===null||It===62?f(It):It===45?(i.consume(It),R):z(It)}function R(It){return It===null||It===62?f(It):z(It)}function z(It){return It===null?f(It):It===45?(i.consume(It),K):Na(It)?(E=z,Z(It)):(i.consume(It),z)}function K(It){return It===45?(i.consume(It),Ht):z(It)}function it(It){return It===m.charCodeAt(b++)?(i.consume(It),b===m.length?st:it):f(It)}function st(It){return It===null?f(It):It===93?(i.consume(It),ut):Na(It)?(E=st,Z(It)):(i.consume(It),st)}function ut(It){return It===93?(i.consume(It),bt):st(It)}function bt(It){return It===62?Ht(It):It===93?(i.consume(It),bt):st(It)}function mt(It){return It===null||It===62?Ht(It):Na(It)?(E=mt,Z(It)):(i.consume(It),mt)}function yt(It){return It===null?f(It):It===63?(i.consume(It),dt):Na(It)?(E=yt,Z(It)):(i.consume(It),yt)}function dt(It){return It===62?Ht(It):yt(It)}function ht(It){return w3(It)?(i.consume(It),wt):f(It)}function wt(It){return It===45||om(It)?(i.consume(It),wt):X(It)}function X(It){return Na(It)?(E=X,Z(It)):Nf(It)?(i.consume(It),X):Ht(It)}function pt(It){return It===45||om(It)?(i.consume(It),pt):It===47||It===62||nv(It)?U(It):f(It)}function U(It){return It===47?(i.consume(It),Ht):It===58||It===95||w3(It)?(i.consume(It),xt):Na(It)?(E=U,Z(It)):Nf(It)?(i.consume(It),U):Ht(It)}function xt(It){return It===45||It===46||It===58||It===95||om(It)?(i.consume(It),xt):nt(It)}function nt(It){return It===61?(i.consume(It),Ot):Na(It)?(E=nt,Z(It)):Nf(It)?(i.consume(It),nt):U(It)}function Ot(It){return It===null||It===60||It===61||It===62||It===96?f(It):It===34||It===39?(i.consume(It),v=It,Nt):Na(It)?(E=Ot,Z(It)):Nf(It)?(i.consume(It),Ot):(i.consume(It),v=void 0,Ct)}function Nt(It){return It===v?(i.consume(It),qt):It===null?f(It):Na(It)?(E=Nt,Z(It)):(i.consume(It),Nt)}function qt(It){return It===62||It===47||nv(It)?U(It):f(It)}function Ct(It){return It===null||It===34||It===39||It===60||It===61||It===96?f(It):It===62||nv(It)?U(It):(i.consume(It),Ct)}function Z(It){return i.exit("htmlTextData"),i.enter("lineEnding"),i.consume(It),i.exit("lineEnding"),Gu(i,Tt,"linePrefix",p.parser.constructs.disable.null.includes("codeIndented")?void 0:4)}function Tt(It){return i.enter("htmlTextData"),E(It)}function Ht(It){return It===62?(i.consume(It),i.exit("htmlTextData"),i.exit("htmlText"),a):f(It)}}const S0t={name:"labelEnd",tokenize:JRe,resolveTo:ZRe,resolveAll:QRe},KRe={tokenize:tje},YRe={tokenize:eje},XRe={tokenize:nje};function QRe(i){let a=-1,f;for(;++a<i.length;)f=i[a][1],(f.type==="labelImage"||f.type==="labelLink"||f.type==="labelEnd")&&(i.splice(a+1,f.type==="labelImage"?4:2),f.type="data",a++);return i}function ZRe(i,a){let f=i.length,p=0,v,m,b,E;for(;f--;)if(v=i[f][1],m){if(v.type==="link"||v.type==="labelLink"&&v._inactive)break;i[f][0]==="enter"&&v.type==="labelLink"&&(v._inactive=!0)}else if(b){if(i[f][0]==="enter"&&(v.type==="labelImage"||v.type==="labelLink")&&!v._balanced&&(m=f,v.type!=="labelLink")){p=2;break}}else v.type==="labelEnd"&&(b=f);const _={type:i[m][1].type==="labelLink"?"link":"image",start:Object.assign({},i[m][1].start),end:Object.assign({},i[i.length-1][1].end)},L={type:"label",start:Object.assign({},i[m][1].start),end:Object.assign({},i[b][1].end)},N={type:"labelText",start:Object.assign({},i[m+p+2][1].end),end:Object.assign({},i[b-2][1].start)};return E=[["enter",_,a],["enter",L,a]],E=ev(E,i.slice(m+1,m+p+3)),E=ev(E,[["enter",N,a]]),E=ev(E,E0t(a.parser.constructs.insideSpan.null,i.slice(m+p+4,b-3),a)),E=ev(E,[["exit",N,a],i[b-2],i[b-1],["exit",L,a]]),E=ev(E,i.slice(b+1)),E=ev(E,[["exit",_,a]]),v3(i,m,i.length,E),i}function JRe(i,a,f){const p=this;let v=p.events.length,m,b;for(;v--;)if((p.events[v][1].type==="labelImage"||p.events[v][1].type==="labelLink")&&!p.events[v][1]._balanced){m=p.events[v][1];break}return E;function E(N){return m?m._inactive?L(N):(b=p.parser.defined.includes(nL(p.sliceSerialize({start:m.end,end:p.now()}))),i.enter("labelEnd"),i.enter("labelMarker"),i.consume(N),i.exit("labelMarker"),i.exit("labelEnd"),_):f(N)}function _(N){return N===40?i.attempt(KRe,a,b?a:L)(N):N===91?i.attempt(YRe,a,b?i.attempt(XRe,a,L):L)(N):b?a(N):L(N)}function L(N){return m._balanced=!0,f(N)}}function tje(i,a,f){return p;function p(_){return i.enter("resource"),i.enter("resourceMarker"),i.consume(_),i.exit("resourceMarker"),vP(i,v)}function v(_){return _===41?E(_):VFt(i,m,f,"resourceDestination","resourceDestinationLiteral","resourceDestinationLiteralMarker","resourceDestinationRaw","resourceDestinationString",32)(_)}function m(_){return nv(_)?vP(i,b)(_):E(_)}function b(_){return _===34||_===39||_===40?WFt(i,vP(i,E),f,"resourceTitle","resourceTitleMarker","resourceTitleString")(_):E(_)}function E(_){return _===41?(i.enter("resourceMarker"),i.consume(_),i.exit("resourceMarker"),i.exit("resource"),a):f(_)}}function eje(i,a,f){const p=this;return v;function v(b){return UFt.call(p,i,m,f,"reference","referenceMarker","referenceString")(b)}function m(b){return p.parser.defined.includes(nL(p.sliceSerialize(p.events[p.events.length-1][1]).slice(1,-1)))?a(b):f(b)}}function nje(i,a,f){return p;function p(m){return i.enter("reference"),i.enter("referenceMarker"),i.consume(m),i.exit("referenceMarker"),v}function v(m){return m===93?(i.enter("referenceMarker"),i.consume(m),i.exit("referenceMarker"),i.exit("reference"),a):f(m)}}const rje={name:"labelStartImage",tokenize:ije,resolveAll:S0t.resolveAll};function ije(i,a,f){const p=this;return v;function v(E){return i.enter("labelImage"),i.enter("labelImageMarker"),i.consume(E),i.exit("labelImageMarker"),m}function m(E){return E===91?(i.enter("labelMarker"),i.consume(E),i.exit("labelMarker"),i.exit("labelImage"),b):f(E)}function b(E){return E===94&&"_hiddenFootnoteSupport"in p.parser.constructs?f(E):a(E)}}const sje={name:"labelStartLink",tokenize:aje,resolveAll:S0t.resolveAll};function aje(i,a,f){const p=this;return v;function v(b){return i.enter("labelLink"),i.enter("labelMarker"),i.consume(b),i.exit("labelMarker"),i.exit("labelLink"),m}function m(b){return b===94&&"_hiddenFootnoteSupport"in p.parser.constructs?f(b):a(b)}}const A0t={name:"lineEnding",tokenize:oje};function oje(i,a){return f;function f(p){return i.enter("lineEnding"),i.consume(p),i.exit("lineEnding"),Gu(i,a,"linePrefix")}}const hK={name:"thematicBreak",tokenize:cje};function cje(i,a,f){let p=0,v;return m;function m(_){return i.enter("thematicBreak"),v=_,b(_)}function b(_){return _===v?(i.enter("thematicBreakSequence"),E(_)):Nf(_)?Gu(i,b,"whitespace")(_):p<3||_!==null&&!Na(_)?f(_):(i.exit("thematicBreak"),a(_))}function E(_){return _===v?(i.consume(_),p++,E):(i.exit("thematicBreakSequence"),b(_))}}const fp={name:"list",tokenize:hje,continuation:{tokenize:fje},exit:gje},uje={tokenize:pje,partial:!0},lje={tokenize:dje,partial:!0};function hje(i,a,f){const p=this,v=p.events[p.events.length-1];let m=v&&v[1].type==="linePrefix"?v[2].sliceSerialize(v[1],!0).length:0,b=0;return E;function E(R){const z=p.containerState.type||(R===42||R===43||R===45?"listUnordered":"listOrdered");if(z==="listUnordered"?!p.containerState.marker||R===p.containerState.marker:x0t(R)){if(p.containerState.type||(p.containerState.type=z,i.enter(z,{_container:!0})),z==="listUnordered")return i.enter("listItemPrefix"),R===42||R===45?i.check(hK,f,L)(R):L(R);if(!p.interrupt||R===49)return i.enter("listItemPrefix"),i.enter("listItemValue"),_(R)}return f(R)}function _(R){return x0t(R)&&++b<10?(i.consume(R),_):(!p.interrupt||b<2)&&(p.containerState.marker?R===p.containerState.marker:R===41||R===46)?(i.exit("listItemValue"),L(R)):f(R)}function L(R){return i.enter("listItemMarker"),i.consume(R),i.exit("listItemMarker"),p.containerState.marker=p.containerState.marker||R,i.check(lK,p.interrupt?f:N,i.attempt(uje,j,B))}function N(R){return p.containerState.initialBlankLine=!0,m++,j(R)}function B(R){return Nf(R)?(i.enter("listItemPrefixWhitespace"),i.consume(R),i.exit("listItemPrefixWhitespace"),j):f(R)}function j(R){return p.containerState.size=m+p.sliceSerialize(i.exit("listItemPrefix"),!0).length,a(R)}}function fje(i,a,f){const p=this;return p.containerState._closeFlow=void 0,i.check(lK,v,m);function v(E){return p.containerState.furtherBlankLines=p.containerState.furtherBlankLines||p.containerState.initialBlankLine,Gu(i,a,"listItemIndent",p.containerState.size+1)(E)}function m(E){return p.containerState.furtherBlankLines||!Nf(E)?(p.containerState.furtherBlankLines=void 0,p.containerState.initialBlankLine=void 0,b(E)):(p.containerState.furtherBlankLines=void 0,p.containerState.initialBlankLine=void 0,i.attempt(lje,a,b)(E))}function b(E){return p.containerState._closeFlow=!0,p.interrupt=void 0,Gu(i,i.attempt(fp,a,f),"linePrefix",p.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(E)}}function dje(i,a,f){const p=this;return Gu(i,v,"listItemIndent",p.containerState.size+1);function v(m){const b=p.events[p.events.length-1];return b&&b[1].type==="listItemIndent"&&b[2].sliceSerialize(b[1],!0).length===p.containerState.size?a(m):f(m)}}function gje(i){i.exit(this.containerState.type)}function pje(i,a,f){const p=this;return Gu(i,v,"listItemPrefixWhitespace",p.parser.constructs.disable.null.includes("codeIndented")?void 0:4+1);function v(m){const b=p.events[p.events.length-1];return!Nf(m)&&b&&b[1].type==="listItemPrefixWhitespace"?a(m):f(m)}}const YFt={name:"setextUnderline",tokenize:vje,resolveTo:bje};function bje(i,a){let f=i.length,p,v,m;for(;f--;)if(i[f][0]==="enter"){if(i[f][1].type==="content"){p=f;break}i[f][1].type==="paragraph"&&(v=f)}else i[f][1].type==="content"&&i.splice(f,1),!m&&i[f][1].type==="definition"&&(m=f);const b={type:"setextHeading",start:Object.assign({},i[v][1].start),end:Object.assign({},i[i.length-1][1].end)};return i[v][1].type="setextHeadingText",m?(i.splice(v,0,["enter",b,a]),i.splice(m+1,0,["exit",i[p][1],a]),i[p][1].end=Object.assign({},i[m][1].end)):i[p][1]=b,i.push(["exit",b,a]),i}function vje(i,a,f){const p=this;let v=p.events.length,m,b;for(;v--;)if(p.events[v][1].type!=="lineEnding"&&p.events[v][1].type!=="linePrefix"&&p.events[v][1].type!=="content"){b=p.events[v][1].type==="paragraph";break}return E;function E(N){return!p.parser.lazy[p.now().line]&&(p.interrupt||b)?(i.enter("setextHeadingLine"),i.enter("setextHeadingLineSequence"),m=N,_(N)):f(N)}function _(N){return N===m?(i.consume(N),_):(i.exit("setextHeadingLineSequence"),Gu(i,L,"lineSuffix")(N))}function L(N){return N===null||Na(N)?(i.exit("setextHeadingLine"),a(N)):f(N)}}const wje={tokenize:mje};function mje(i){const a=this,f=i.attempt(lK,p,i.attempt(this.parser.constructs.flowInitial,v,Gu(i,i.attempt(this.parser.constructs.flow,v,i.attempt(_Re,v)),"linePrefix")));return f;function p(m){if(m===null){i.consume(m);return}return i.enter("lineEndingBlank"),i.consume(m),i.exit("lineEndingBlank"),a.currentConstruct=void 0,f}function v(m){if(m===null){i.consume(m);return}return i.enter("lineEnding"),i.consume(m),i.exit("lineEnding"),a.currentConstruct=void 0,f}}const yje={resolveAll:QFt()},xje=XFt("string"),kje=XFt("text");function XFt(i){return{tokenize:a,resolveAll:QFt(i==="text"?Eje:void 0)};function a(f){const p=this,v=this.parser.constructs[i],m=f.attempt(v,b,E);return b;function b(N){return L(N)?m(N):E(N)}function E(N){if(N===null){f.consume(N);return}return f.enter("data"),f.consume(N),_}function _(N){return L(N)?(f.exit("data"),m(N)):(f.consume(N),_)}function L(N){if(N===null)return!0;const B=v[N];let j=-1;if(B)for(;++j<B.length;){const R=B[j];if(!R.previous||R.previous.call(p,p.previous))return!0}return!1}}}function QFt(i){return a;function a(f,p){let v=-1,m;for(;++v<=f.length;)m===void 0?f[v]&&f[v][1].type==="data"&&(m=v,v++):(!f[v]||f[v][1].type!=="data")&&(v!==m+2&&(f[m][1].end=f[v-1][1].end,f.splice(m+2,v-m-2),v=m+2),m=void 0);return i?i(f,p):f}}function Eje(i,a){let f=0;for(;++f<=i.length;)if((f===i.length||i[f][1].type==="lineEnding")&&i[f-1][1].type==="data"){const p=i[f-1][1],v=a.sliceStream(p);let m=v.length,b=-1,E=0,_;for(;m--;){const L=v[m];if(typeof L=="string"){for(b=L.length;L.charCodeAt(b-1)===32;)E++,b--;if(b)break;b=-1}else if(L===-2)_=!0,E++;else if(L!==-1){m++;break}}if(E){const L={type:f===i.length||_||E<2?"lineSuffix":"hardBreakTrailing",start:{line:p.end.line,column:p.end.column-E,offset:p.end.offset-E,_index:p.start._index+m,_bufferIndex:m?b:p.start._bufferIndex+b},end:Object.assign({},p.end)};p.end=Object.assign({},L.start),p.start.offset===p.end.offset?Object.assign(p,L):(i.splice(f,0,["enter",L,a],["exit",L,a]),f+=2)}f++}return i}function Tje(i,a,f){let p=Object.assign(f?Object.assign({},f):{line:1,column:1,offset:0},{_index:0,_bufferIndex:-1});const v={},m=[];let b=[],E=[];const _={consume:ut,enter:bt,exit:mt,attempt:ht(yt),check:ht(dt),interrupt:ht(dt,{interrupt:!0})},L={previous:null,code:null,containerState:{},events:[],parser:i,sliceStream:R,sliceSerialize:j,now:z,defineSkip:K,write:B};let N=a.tokenize.call(L,_);return a.resolveAll&&m.push(a),L;function B(U){return b=ev(b,U),it(),b[b.length-1]!==null?[]:(wt(a,0),L.events=E0t(m,L.events,L),L.events)}function j(U,xt){return _je(R(U),xt)}function R(U){return Cje(b,U)}function z(){return Object.assign({},p)}function K(U){v[U.line]=U.column,pt()}function it(){let U;for(;p._index<b.length;){const xt=b[p._index];if(typeof xt=="string")for(U=p._index,p._bufferIndex<0&&(p._bufferIndex=0);p._index===U&&p._bufferIndex<xt.length;)st(xt.charCodeAt(p._bufferIndex));else st(xt)}}function st(U){N=N(U)}function ut(U){Na(U)?(p.line++,p.column=1,p.offset+=U===-3?2:1,pt()):U!==-1&&(p.column++,p.offset++),p._bufferIndex<0?p._index++:(p._bufferIndex++,p._bufferIndex===b[p._index].length&&(p._bufferIndex=-1,p._index++)),L.previous=U}function bt(U,xt){const nt=xt||{};return nt.type=U,nt.start=z(),L.events.push(["enter",nt,L]),E.push(nt),nt}function mt(U){const xt=E.pop();return xt.end=z(),L.events.push(["exit",xt,L]),xt}function yt(U,xt){wt(U,xt.from)}function dt(U,xt){xt.restore()}function ht(U,xt){return nt;function nt(Ot,Nt,qt){let Ct,Z,Tt,Ht;return Array.isArray(Ot)?Ft(Ot):"tokenize"in Ot?Ft([Ot]):It(Ot);function It(ve){return Ge;function Ge(Ke){const we=Ke!==null&&ve[Ke],_e=Ke!==null&&ve.null,$t=[...Array.isArray(we)?we:we?[we]:[],...Array.isArray(_e)?_e:_e?[_e]:[]];return Ft($t)(Ke)}}function Ft(ve){return Ct=ve,Z=0,ve.length===0?qt:ke(ve[Z])}function ke(ve){return Ge;function Ge(Ke){return Ht=X(),Tt=ve,ve.partial||(L.currentConstruct=ve),ve.name&&L.parser.constructs.disable.null.includes(ve.name)?Me():ve.tokenize.call(xt?Object.assign(Object.create(L),xt):L,_,pn,Me)(Ke)}}function pn(ve){return U(Tt,Ht),Nt}function Me(ve){return Ht.restore(),++Z<Ct.length?ke(Ct[Z]):qt}}}function wt(U,xt){U.resolveAll&&!m.includes(U)&&m.push(U),U.resolve&&v3(L.events,xt,L.events.length-xt,U.resolve(L.events.slice(xt),L)),U.resolveTo&&(L.events=U.resolveTo(L.events,L))}function X(){const U=z(),xt=L.previous,nt=L.currentConstruct,Ot=L.events.length,Nt=Array.from(E);return{restore:qt,from:Ot};function qt(){p=U,L.previous=xt,L.currentConstruct=nt,L.events.length=Ot,E=Nt,pt()}}function pt(){p.line in v&&p.column<2&&(p.column=v[p.line],p.offset+=v[p.line]-1)}}function Cje(i,a){const f=a.start._index,p=a.start._bufferIndex,v=a.end._index,m=a.end._bufferIndex;let b;return f===v?b=[i[f].slice(p,m)]:(b=i.slice(f,v),p>-1&&(b[0]=b[0].slice(p)),m>0&&b.push(i[v].slice(0,m))),b}function _je(i,a){let f=-1;const p=[];let v;for(;++f<i.length;){const m=i[f];let b;if(typeof m=="string")b=m;else switch(m){case-5:{b="\r";break}case-4:{b=`
`;break}case-3:{b=`\r
`;break}case-2:{b=a?" ":"	";break}case-1:{if(!a&&v)continue;b=" ";break}default:b=String.fromCharCode(m)}v=m===-2,p.push(b)}return p.join("")}const Sje={[42]:fp,[43]:fp,[45]:fp,[48]:fp,[49]:fp,[50]:fp,[51]:fp,[52]:fp,[53]:fp,[54]:fp,[55]:fp,[56]:fp,[57]:fp,[62]:jFt},Aje={[91]:IRe},Lje={[-2]:_0t,[-1]:_0t,[32]:_0t},Mje=Object.freeze(Object.defineProperty({__proto__:null,attentionMarkers:{null:[42,95]},contentInitial:Aje,disable:{null:[]},document:Sje,flow:{[35]:BRe,[42]:hK,[45]:[YFt,hK],[60]:zRe,[61]:YFt,[95]:hK,[96]:HFt,[126]:HFt},flowInitial:Lje,insideSpan:{null:[T0t,yje]},string:{[38]:qFt,[92]:$Ft},text:{[-5]:A0t,[-4]:A0t,[-3]:A0t,[33]:rje,[38]:qFt,[42]:T0t,[60]:[uRe,URe],[91]:sje,[92]:[PRe,$Ft],[93]:S0t,[95]:T0t,[96]:xRe}},Symbol.toStringTag,{value:"Module"}));function Ije(i={}){const a=KBe([Mje].concat(i.extensions||[])),f={defined:[],lazy:{},constructs:a,content:p(nRe),document:p(iRe),flow:p(wje),string:p(xje),text:p(kje)};return f;function p(v){return m;function m(b){return Tje(f,v,b)}}}const ZFt=/[\0\t\n\r]/g;function Dje(){let i=1,a="",f=!0,p;return v;function v(m,b,E){const _=[];let L,N,B,j,R;for(m=a+m.toString(b),B=0,a="",f&&(m.charCodeAt(0)===65279&&B++,f=void 0);B<m.length;){if(ZFt.lastIndex=B,L=ZFt.exec(m),j=L&&L.index!==void 0?L.index:m.length,R=m.charCodeAt(j),!L){a=m.slice(B);break}if(R===10&&B===j&&p)_.push(-3),p=void 0;else switch(p&&(_.push(-5),p=void 0),B<j&&(_.push(m.slice(B,j)),i+=j-B),R){case 0:{_.push(65533),i++;break}case 9:{for(N=Math.ceil(i/4)*4,_.push(-2);i++<N;)_.push(-1);break}case 10:{_.push(-4),i=1;break}default:p=!0,i=1}B=j+1}return E&&(p&&_.push(-5),a&&_.push(a),_.push(null)),_}}function Oje(i){for(;!GFt(i););return i}function JFt(i,a){const f=Number.parseInt(i,a);return f<9||f===11||f>13&&f<32||f>126&&f<160||f>55295&&f<57344||f>64975&&f<65008||(f&65535)===65535||(f&65535)===65534||f>1114111?"�":String.fromCharCode(f)}const Nje=/\\([!-/:-@[-`{-~])|&(#(?:\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi;function Pje(i){return i.replace(Nje,Fje)}function Fje(i,a,f){if(a)return a;if(f.charCodeAt(0)===35){const v=f.charCodeAt(1),m=v===120||v===88;return JFt(f.slice(m?2:1),m?16:10)}return C0t(f)||i}function fK(i){return!i||typeof i!="object"?"":"position"in i||"type"in i?tBt(i.position):"start"in i||"end"in i?tBt(i):"line"in i||"column"in i?L0t(i):""}function L0t(i){return eBt(i&&i.line)+":"+eBt(i&&i.column)}function tBt(i){return L0t(i&&i.start)+"-"+L0t(i&&i.end)}function eBt(i){return i&&typeof i=="number"?i:1}const nBt={}.hasOwnProperty,rBt=function(i,a,f){return typeof a!="string"&&(f=a,a=void 0),Bje(f)(Oje(Ije(f).document().write(Dje()(i,a,!0))))};function Bje(i){const a={transforms:[],canContainEols:["emphasis","fragment","heading","paragraph","strong"],enter:{autolink:E(ya),autolinkProtocol:U,autolinkEmail:U,atxHeading:E(Ne),blockQuote:E($t),characterEscape:U,characterReference:U,codeFenced:E(re),codeFencedFenceInfo:_,codeFencedFenceMeta:_,codeIndented:E(re,_),codeText:E(ie,_),codeTextData:U,data:U,codeFlowValue:U,definition:E(Oe),definitionDestinationString:_,definitionLabelString:_,definitionTitleString:_,emphasis:E(oe),hardBreakEscape:E(me),hardBreakTrailing:E(me),htmlFlow:E(cn,_),htmlFlowData:U,htmlText:E(cn,_),htmlTextData:U,image:E(li),label:_,link:E(ya),listItem:E(Oo),listItemValue:z,listOrdered:E(da,R),listUnordered:E(da),paragraph:E(ds),reference:Me,referenceString:_,resourceDestinationString:_,resourceTitleString:_,setextHeading:E(Ne),strong:E(Dr),thematicBreak:E(di)},exit:{atxHeading:N(),atxHeadingSequence:ht,autolink:N(),autolinkEmail:_e,autolinkProtocol:we,blockQuote:N(),characterEscapeValue:xt,characterReferenceMarkerHexadecimal:Ge,characterReferenceMarkerNumeric:Ge,characterReferenceValue:Ke,codeFenced:N(ut),codeFencedFence:st,codeFencedFenceInfo:K,codeFencedFenceMeta:it,codeFlowValue:xt,codeIndented:N(bt),codeText:N(Ct),codeTextData:xt,data:xt,definition:N(),definitionDestinationString:dt,definitionLabelString:mt,definitionTitleString:yt,emphasis:N(),hardBreakEscape:N(Ot),hardBreakTrailing:N(Ot),htmlFlow:N(Nt),htmlFlowData:xt,htmlText:N(qt),htmlTextData:xt,image:N(Tt),label:It,labelText:Ht,lineEnding:nt,link:N(Z),listItem:N(),listOrdered:N(),listUnordered:N(),paragraph:N(),referenceString:ve,resourceDestinationString:Ft,resourceTitleString:ke,resource:pn,setextHeading:N(pt),setextHeadingLineSequence:X,setextHeadingText:wt,strong:N(),thematicBreak:N()}};iBt(a,(i||{}).mdastExtensions||[]);const f={};return p;function p(Ee){let Yn={type:"root",children:[]};const He={stack:[Yn],tokenStack:[],config:a,enter:L,exit:B,buffer:_,resume:j,setData:m,getData:b},Ti=[];let gn=-1;for(;++gn<Ee.length;)if(Ee[gn][1].type==="listOrdered"||Ee[gn][1].type==="listUnordered")if(Ee[gn][0]==="enter")Ti.push(gn);else{const ks=Ti.pop();gn=v(Ee,ks,gn)}for(gn=-1;++gn<Ee.length;){const ks=a[Ee[gn][0]];nBt.call(ks,Ee[gn][1].type)&&ks[Ee[gn][1].type].call(Object.assign({sliceSerialize:Ee[gn][2].sliceSerialize},He),Ee[gn][1])}if(He.tokenStack.length>0){const ks=He.tokenStack[He.tokenStack.length-1];(ks[1]||sBt).call(He,void 0,ks[0])}for(Yn.position={start:uk(Ee.length>0?Ee[0][1].start:{line:1,column:1,offset:0}),end:uk(Ee.length>0?Ee[Ee.length-2][1].end:{line:1,column:1,offset:0})},gn=-1;++gn<a.transforms.length;)Yn=a.transforms[gn](Yn)||Yn;return Yn}function v(Ee,Yn,He){let Ti=Yn-1,gn=-1,ks=!1,qa,La,Gs,No;for(;++Ti<=He;){const vs=Ee[Ti];if(vs[1].type==="listUnordered"||vs[1].type==="listOrdered"||vs[1].type==="blockQuote"?(vs[0]==="enter"?gn++:gn--,No=void 0):vs[1].type==="lineEndingBlank"?vs[0]==="enter"&&(qa&&!No&&!gn&&!Gs&&(Gs=Ti),No=void 0):vs[1].type==="linePrefix"||vs[1].type==="listItemValue"||vs[1].type==="listItemMarker"||vs[1].type==="listItemPrefix"||vs[1].type==="listItemPrefixWhitespace"||(No=void 0),!gn&&vs[0]==="enter"&&vs[1].type==="listItemPrefix"||gn===-1&&vs[0]==="exit"&&(vs[1].type==="listUnordered"||vs[1].type==="listOrdered")){if(qa){let nu=Ti;for(La=void 0;nu--;){const $s=Ee[nu];if($s[1].type==="lineEnding"||$s[1].type==="lineEndingBlank"){if($s[0]==="exit")continue;La&&(Ee[La][1].type="lineEndingBlank",ks=!0),$s[1].type="lineEnding",La=nu}else if(!($s[1].type==="linePrefix"||$s[1].type==="blockQuotePrefix"||$s[1].type==="blockQuotePrefixWhitespace"||$s[1].type==="blockQuoteMarker"||$s[1].type==="listItemIndent"))break}Gs&&(!La||Gs<La)&&(qa._spread=!0),qa.end=Object.assign({},La?Ee[La][1].start:vs[1].end),Ee.splice(La||Ti,0,["exit",qa,vs[2]]),Ti++,He++}vs[1].type==="listItemPrefix"&&(qa={type:"listItem",_spread:!1,start:Object.assign({},vs[1].start)},Ee.splice(Ti,0,["enter",qa,vs[2]]),Ti++,He++,Gs=void 0,No=!0)}}return Ee[Yn][1]._spread=ks,He}function m(Ee,Yn){f[Ee]=Yn}function b(Ee){return f[Ee]}function E(Ee,Yn){return He;function He(Ti){L.call(this,Ee(Ti),Ti),Yn&&Yn.call(this,Ti)}}function _(){this.stack.push({type:"fragment",children:[]})}function L(Ee,Yn,He){return this.stack[this.stack.length-1].children.push(Ee),this.stack.push(Ee),this.tokenStack.push([Yn,He]),Ee.position={start:uk(Yn.start)},Ee}function N(Ee){return Yn;function Yn(He){Ee&&Ee.call(this,He),B.call(this,He)}}function B(Ee,Yn){const He=this.stack.pop(),Ti=this.tokenStack.pop();if(Ti)Ti[0].type!==Ee.type&&(Yn?Yn.call(this,Ee,Ti[0]):(Ti[1]||sBt).call(this,Ee,Ti[0]));else throw new Error("Cannot close `"+Ee.type+"` ("+fK({start:Ee.start,end:Ee.end})+"): it’s not open");return He.position.end=uk(Ee.end),He}function j(){return WBe(this.stack.pop())}function R(){m("expectingFirstListItemValue",!0)}function z(Ee){if(b("expectingFirstListItemValue")){const Yn=this.stack[this.stack.length-2];Yn.start=Number.parseInt(this.sliceSerialize(Ee),10),m("expectingFirstListItemValue")}}function K(){const Ee=this.resume(),Yn=this.stack[this.stack.length-1];Yn.lang=Ee}function it(){const Ee=this.resume(),Yn=this.stack[this.stack.length-1];Yn.meta=Ee}function st(){b("flowCodeInside")||(this.buffer(),m("flowCodeInside",!0))}function ut(){const Ee=this.resume(),Yn=this.stack[this.stack.length-1];Yn.value=Ee.replace(/^(\r?\n|\r)|(\r?\n|\r)$/g,""),m("flowCodeInside")}function bt(){const Ee=this.resume(),Yn=this.stack[this.stack.length-1];Yn.value=Ee.replace(/(\r?\n|\r)$/g,"")}function mt(Ee){const Yn=this.resume(),He=this.stack[this.stack.length-1];He.label=Yn,He.identifier=nL(this.sliceSerialize(Ee)).toLowerCase()}function yt(){const Ee=this.resume(),Yn=this.stack[this.stack.length-1];Yn.title=Ee}function dt(){const Ee=this.resume(),Yn=this.stack[this.stack.length-1];Yn.url=Ee}function ht(Ee){const Yn=this.stack[this.stack.length-1];if(!Yn.depth){const He=this.sliceSerialize(Ee).length;Yn.depth=He}}function wt(){m("setextHeadingSlurpLineEnding",!0)}function X(Ee){const Yn=this.stack[this.stack.length-1];Yn.depth=this.sliceSerialize(Ee).charCodeAt(0)===61?1:2}function pt(){m("setextHeadingSlurpLineEnding")}function U(Ee){const Yn=this.stack[this.stack.length-1];let He=Yn.children[Yn.children.length-1];(!He||He.type!=="text")&&(He=nr(),He.position={start:uk(Ee.start)},Yn.children.push(He)),this.stack.push(He)}function xt(Ee){const Yn=this.stack.pop();Yn.value+=this.sliceSerialize(Ee),Yn.position.end=uk(Ee.end)}function nt(Ee){const Yn=this.stack[this.stack.length-1];if(b("atHardBreak")){const He=Yn.children[Yn.children.length-1];He.position.end=uk(Ee.end),m("atHardBreak");return}!b("setextHeadingSlurpLineEnding")&&a.canContainEols.includes(Yn.type)&&(U.call(this,Ee),xt.call(this,Ee))}function Ot(){m("atHardBreak",!0)}function Nt(){const Ee=this.resume(),Yn=this.stack[this.stack.length-1];Yn.value=Ee}function qt(){const Ee=this.resume(),Yn=this.stack[this.stack.length-1];Yn.value=Ee}function Ct(){const Ee=this.resume(),Yn=this.stack[this.stack.length-1];Yn.value=Ee}function Z(){const Ee=this.stack[this.stack.length-1];if(b("inReference")){const Yn=b("referenceType")||"shortcut";Ee.type+="Reference",Ee.referenceType=Yn,delete Ee.url,delete Ee.title}else delete Ee.identifier,delete Ee.label;m("referenceType")}function Tt(){const Ee=this.stack[this.stack.length-1];if(b("inReference")){const Yn=b("referenceType")||"shortcut";Ee.type+="Reference",Ee.referenceType=Yn,delete Ee.url,delete Ee.title}else delete Ee.identifier,delete Ee.label;m("referenceType")}function Ht(Ee){const Yn=this.sliceSerialize(Ee),He=this.stack[this.stack.length-2];He.label=Pje(Yn),He.identifier=nL(Yn).toLowerCase()}function It(){const Ee=this.stack[this.stack.length-1],Yn=this.resume(),He=this.stack[this.stack.length-1];if(m("inReference",!0),He.type==="link"){const Ti=Ee.children;He.children=Ti}else He.alt=Yn}function Ft(){const Ee=this.resume(),Yn=this.stack[this.stack.length-1];Yn.url=Ee}function ke(){const Ee=this.resume(),Yn=this.stack[this.stack.length-1];Yn.title=Ee}function pn(){m("inReference")}function Me(){m("referenceType","collapsed")}function ve(Ee){const Yn=this.resume(),He=this.stack[this.stack.length-1];He.label=Yn,He.identifier=nL(this.sliceSerialize(Ee)).toLowerCase(),m("referenceType","full")}function Ge(Ee){m("characterReferenceType",Ee.type)}function Ke(Ee){const Yn=this.sliceSerialize(Ee),He=b("characterReferenceType");let Ti;He?(Ti=JFt(Yn,He==="characterReferenceMarkerNumeric"?10:16),m("characterReferenceType")):Ti=C0t(Yn);const gn=this.stack.pop();gn.value+=Ti,gn.position.end=uk(Ee.end)}function we(Ee){xt.call(this,Ee);const Yn=this.stack[this.stack.length-1];Yn.url=this.sliceSerialize(Ee)}function _e(Ee){xt.call(this,Ee);const Yn=this.stack[this.stack.length-1];Yn.url="mailto:"+this.sliceSerialize(Ee)}function $t(){return{type:"blockquote",children:[]}}function re(){return{type:"code",lang:null,meta:null,value:""}}function ie(){return{type:"inlineCode",value:""}}function Oe(){return{type:"definition",identifier:"",label:null,title:null,url:""}}function oe(){return{type:"emphasis",children:[]}}function Ne(){return{type:"heading",depth:void 0,children:[]}}function me(){return{type:"break"}}function cn(){return{type:"html",value:""}}function li(){return{type:"image",title:null,url:"",alt:null}}function ya(){return{type:"link",title:null,url:"",children:[]}}function da(Ee){return{type:"list",ordered:Ee.type==="listOrdered",start:null,spread:Ee._spread,children:[]}}function Oo(Ee){return{type:"listItem",spread:Ee._spread,checked:null,children:[]}}function ds(){return{type:"paragraph",children:[]}}function Dr(){return{type:"strong",children:[]}}function nr(){return{type:"text",value:""}}function di(){return{type:"thematicBreak"}}}function uk(i){return{line:i.line,column:i.column,offset:i.offset}}function iBt(i,a){let f=-1;for(;++f<a.length;){const p=a[f];Array.isArray(p)?iBt(i,p):Rje(i,p)}}function Rje(i,a){let f;for(f in a)if(nBt.call(a,f)){if(f==="canContainEols"){const p=a[f];p&&i[f].push(...p)}else if(f==="transforms"){const p=a[f];p&&i[f].push(...p)}else if(f==="enter"||f==="exit"){const p=a[f];p&&Object.assign(i[f],p)}}}function sBt(i,a){throw i?new Error("Cannot close `"+i.type+"` ("+fK({start:i.start,end:i.end})+"): a different token (`"+a.type+"`, "+fK({start:a.start,end:a.end})+") is open"):new Error("Cannot close document, a token (`"+a.type+"`, "+fK({start:a.start,end:a.end})+") is still open")}function jje(i){const a=i.replace(/\n{2,}/g,`
`);return wA(a)}function $je(i){const a=jje(i),{children:f}=rBt(a),p=[[]];let v=0;function m(b,E="normal"){b.type==="text"?b.value.split(`
`).forEach((L,N)=>{N!==0&&(v++,p.push([])),L.split(" ").forEach(B=>{B&&p[v].push({content:B,type:E})})}):(b.type==="strong"||b.type==="emphasis")&&b.children.forEach(_=>{m(_,b.type)})}return f.forEach(b=>{b.type==="paragraph"&&b.children.forEach(E=>{m(E)})}),p}function zje(i){const{children:a}=rBt(i);function f(p){return p.type==="text"?p.value.replace(/\n/g,"<br/>"):p.type==="strong"?`<strong>${p.children.map(f).join("")}</strong>`:p.type==="emphasis"?`<em>${p.children.map(f).join("")}</em>`:p.type==="paragraph"?`<p>${p.children.map(f).join("")}</p>`:`Unsupported markdown: ${p.type}`}return a.map(f).join("")}function qje(i){return Intl.Segmenter?[...new Intl.Segmenter().segment(i)].map(a=>a.segment):[...i]}function Hje(i,a){const f=qje(a.content);return aBt(i,[],f,a.type)}function aBt(i,a,f,p){if(f.length===0)return[{content:a.join(""),type:p},{content:"",type:p}];const[v,...m]=f,b=[...a,v];return i([{content:b.join(""),type:p}])?aBt(i,b,m,p):(a.length===0&&v&&(a.push(v),f.shift()),[{content:a.join(""),type:p},{content:f.join(""),type:p}])}function Gje(i,a){if(i.some(({content:f})=>f.includes(`
`)))throw new Error("splitLineToFitWidth does not support newlines in the line");return M0t(i,a)}function M0t(i,a,f=[],p=[]){if(i.length===0)return p.length>0&&f.push(p),f.length>0?f:[];let v="";i[0].content===" "&&(v=" ",i.shift());const m=i.shift()??{content:" ",type:"normal"},b=[...p];if(v!==""&&b.push({content:v,type:"normal"}),b.push(m),a(b))return M0t(i,a,f,b);if(p.length>0)f.push(p),i.unshift(m);else if(m.content){const[E,_]=Hje(a,m);f.push([E]),_.content&&i.unshift(_)}return M0t(i,a,f)}function Vje(i,a){a&&i.attr("style",a)}function Uje(i,a,f,p,v=!1){const m=i.append("foreignObject"),b=m.append("xhtml:div"),E=a.label,_=a.isNode?"nodeLabel":"edgeLabel";b.html(`
    <span class="${_} ${p}" `+(a.labelStyle?'style="'+a.labelStyle+'"':"")+">"+E+"</span>"),Vje(b,a.labelStyle),b.style("display","table-cell"),b.style("white-space","nowrap"),b.style("max-width",f+"px"),b.attr("xmlns","http://www.w3.org/1999/xhtml"),v&&b.attr("class","labelBkg");let L=b.node().getBoundingClientRect();return L.width===f&&(b.style("display","table"),b.style("white-space","break-spaces"),b.style("width",f+"px"),L=b.node().getBoundingClientRect()),m.style("width",L.width),m.style("height",L.height),m.node()}function oBt(i,a,f){return i.append("tspan").attr("class","text-outer-tspan").attr("x",0).attr("y",a*f-.1+"em").attr("dy",f+"em")}function Wje(i,a,f){const p=i.append("text"),v=oBt(p,1,a);cBt(v,f);const m=v.node().getComputedTextLength();return p.remove(),m}function Kje(i,a,f,p=!1){const m=a.append("g"),b=m.insert("rect").attr("class","background"),E=m.append("text").attr("y","-10.1");let _=0;for(const L of f){const N=j=>Wje(m,1.1,j)<=i,B=N(L)?[L]:Gje(L,N);for(const j of B){const R=oBt(E,_,1.1);cBt(R,j),_++}}if(p){const L=E.node().getBBox(),N=2;return b.attr("x",-N).attr("y",-N).attr("width",L.width+2*N).attr("height",L.height+2*N),m.node()}else return E.node()}function cBt(i,a){i.text(""),a.forEach((f,p)=>{const v=i.append("tspan").attr("font-style",f.type==="emphasis"?"italic":"normal").attr("class","text-inner-tspan").attr("font-weight",f.type==="strong"?"bold":"normal");p===0?v.text(f.content):v.text(" "+f.content)})}const dK=(i,a="",{style:f="",isTitle:p=!1,classes:v="",useHtmlLabels:m=!0,isNode:b=!0,width:E=200,addSvgBackground:_=!1}={})=>{if(Ut.info("createText",a,f,p,v,m,b,_),m){const L=zje(a),N={isNode:b,label:nP(L).replace(/fa[blrs]?:fa-[\w-]+/g,j=>`<i class='${j.replace(":"," ")}'></i>`),labelStyle:f.replace("fill:","color:")};return Uje(i,N,E,v,_)}else{const L=$je(a);return Kje(E,i,L,_)}},Od=async(i,a,f,p)=>{let v;const m=a.useHtmlLabels||s1(Le().flowchart.htmlLabels);f?v=f:v="node default";const b=i.insert("g").attr("class",v).attr("id",a.domId||a.id),E=b.insert("g").attr("class","label").attr("style",a.labelStyle);let _;a.labelText===void 0?_="":_=typeof a.labelText=="string"?a.labelText:a.labelText[0];const L=E.node();let N;a.labelType==="markdown"?N=dK(E,Dd(nP(_),Le()),{useHtmlLabels:m,width:a.width||Le().flowchart.wrappingWidth,classes:"markdown-node-label"}):N=L.appendChild(hp(Dd(nP(_),Le()),a.labelStyle,!1,p));let B=N.getBBox();const j=a.padding/2;if(s1(Le().flowchart.htmlLabels)){const R=N.children[0],z=yr(N),K=R.getElementsByTagName("img");if(K){const it=_.replace(/<img[^>]*>/g,"").trim()==="";await Promise.all([...K].map(st=>new Promise(ut=>{function bt(){if(st.style.display="flex",st.style.flexDirection="column",it){const mt=Le().fontSize?Le().fontSize:window.getComputedStyle(document.body).fontSize,yt=5;st.style.width=parseInt(mt,10)*yt+"px"}else st.style.width="100%";ut(st)}setTimeout(()=>{st.complete&&bt()}),st.addEventListener("error",bt),st.addEventListener("load",bt)})))}B=R.getBoundingClientRect(),z.attr("width",B.width),z.attr("height",B.height)}return m?E.attr("transform","translate("+-B.width/2+", "+-B.height/2+")"):E.attr("transform","translate(0, "+-B.height/2+")"),a.centerLabel&&E.attr("transform","translate("+-B.width/2+", "+-B.height/2+")"),E.insert("rect",":first-child"),{shapeSvg:b,bbox:B,halfPadding:j,label:E}},Qh=(i,a)=>{const f=a.node().getBBox();i.width=f.width,i.height=f.height};function A5(i,a,f,p){return i.insert("polygon",":first-child").attr("points",p.map(function(v){return v.x+","+v.y}).join(" ")).attr("class","label-container").attr("transform","translate("+-a/2+","+f/2+")")}let Ho={},cm={},uBt={};const Yje=()=>{cm={},uBt={},Ho={}},gK=(i,a)=>(Ut.trace("In isDecendant",a," ",i," = ",cm[a].includes(i)),!!cm[a].includes(i)),Xje=(i,a)=>(Ut.info("Decendants of ",a," is ",cm[a]),Ut.info("Edge is ",i),i.v===a||i.w===a?!1:cm[a]?cm[a].includes(i.v)||gK(i.v,a)||gK(i.w,a)||cm[a].includes(i.w):(Ut.debug("Tilt, ",a,",not in decendants"),!1)),lBt=(i,a,f,p)=>{Ut.warn("Copying children of ",i,"root",p,"data",a.node(i),p);const v=a.children(i)||[];i!==p&&v.push(i),Ut.warn("Copying (nodes) clusterId",i,"nodes",v),v.forEach(m=>{if(a.children(m).length>0)lBt(m,a,f,p);else{const b=a.node(m);Ut.info("cp ",m," to ",p," with parent ",i),f.setNode(m,b),p!==a.parent(m)&&(Ut.warn("Setting parent",m,a.parent(m)),f.setParent(m,a.parent(m))),i!==p&&m!==i?(Ut.debug("Setting parent",m,i),f.setParent(m,i)):(Ut.info("In copy ",i,"root",p,"data",a.node(i),p),Ut.debug("Not Setting parent for node=",m,"cluster!==rootId",i!==p,"node!==clusterId",m!==i));const E=a.edges(m);Ut.debug("Copying Edges",E),E.forEach(_=>{Ut.info("Edge",_);const L=a.edge(_.v,_.w,_.name);Ut.info("Edge data",L,p);try{Xje(_,p)?(Ut.info("Copying as ",_.v,_.w,L,_.name),f.setEdge(_.v,_.w,L,_.name),Ut.info("newGraph edges ",f.edges(),f.edge(f.edges()[0]))):Ut.info("Skipping copy of edge ",_.v,"-->",_.w," rootId: ",p," clusterId:",i)}catch(N){Ut.error(N)}})}Ut.debug("Removing node",m),a.removeNode(m)})},hBt=(i,a)=>{const f=a.children(i);let p=[...f];for(const v of f)uBt[v]=i,p=[...p,...hBt(v,a)];return p},wP=(i,a)=>{Ut.trace("Searching",i);const f=a.children(i);if(Ut.trace("Searching children of id ",i,f),f.length<1)return Ut.trace("This is a valid node",i),i;for(const p of f){const v=wP(p,a);if(v)return Ut.trace("Found replacement for",i," => ",v),v}},pK=i=>!Ho[i]||!Ho[i].externalConnections?i:Ho[i]?Ho[i].id:i,Qje=(i,a)=>{if(!i||a>10){Ut.debug("Opting out, no graph ");return}else Ut.debug("Opting in, graph ");i.nodes().forEach(function(f){i.children(f).length>0&&(Ut.warn("Cluster identified",f," Replacement id in edges: ",wP(f,i)),cm[f]=hBt(f,i),Ho[f]={id:wP(f,i),clusterData:i.node(f)})}),i.nodes().forEach(function(f){const p=i.children(f),v=i.edges();p.length>0?(Ut.debug("Cluster identified",f,cm),v.forEach(m=>{if(m.v!==f&&m.w!==f){const b=gK(m.v,f),E=gK(m.w,f);b^E&&(Ut.warn("Edge: ",m," leaves cluster ",f),Ut.warn("Decendants of XXX ",f,": ",cm[f]),Ho[f].externalConnections=!0)}})):Ut.debug("Not a cluster ",f,cm)}),i.edges().forEach(function(f){const p=i.edge(f);Ut.warn("Edge "+f.v+" -> "+f.w+": "+JSON.stringify(f)),Ut.warn("Edge "+f.v+" -> "+f.w+": "+JSON.stringify(i.edge(f)));let v=f.v,m=f.w;if(Ut.warn("Fix XXX",Ho,"ids:",f.v,f.w,"Translating: ",Ho[f.v]," --- ",Ho[f.w]),Ho[f.v]&&Ho[f.w]&&Ho[f.v]===Ho[f.w]){Ut.warn("Fixing and trixing link to self - removing XXX",f.v,f.w,f.name),Ut.warn("Fixing and trixing - removing XXX",f.v,f.w,f.name),v=pK(f.v),m=pK(f.w),i.removeEdge(f.v,f.w,f.name);const b=f.w+"---"+f.v;i.setNode(b,{domId:b,id:b,labelStyle:"",labelText:p.label,padding:0,shape:"labelRect",style:""});const E=structuredClone(p),_=structuredClone(p);E.label="",E.arrowTypeEnd="none",_.label="",E.fromCluster=f.v,_.toCluster=f.v,i.setEdge(v,b,E,f.name+"-cyclic-special"),i.setEdge(b,m,_,f.name+"-cyclic-special")}else(Ho[f.v]||Ho[f.w])&&(Ut.warn("Fixing and trixing - removing XXX",f.v,f.w,f.name),v=pK(f.v),m=pK(f.w),i.removeEdge(f.v,f.w,f.name),v!==f.v&&(p.fromCluster=f.v),m!==f.w&&(p.toCluster=f.w),Ut.warn("Fix Replacing with XXX",v,m,f.name),i.setEdge(v,m,p,f.name))}),Ut.warn("Adjusted Graph",S5(i)),fBt(i,0),Ut.trace(Ho)},fBt=(i,a)=>{if(Ut.warn("extractor - ",a,S5(i),i.children("D")),a>10){Ut.error("Bailing out");return}let f=i.nodes(),p=!1;for(const v of f){const m=i.children(v);p=p||m.length>0}if(!p){Ut.debug("Done, no node has children",i.nodes());return}Ut.debug("Nodes = ",f,a);for(const v of f)if(Ut.debug("Extracting node",v,Ho,Ho[v]&&!Ho[v].externalConnections,!i.parent(v),i.node(v),i.children("D")," Depth ",a),!Ho[v])Ut.debug("Not a cluster",v,a);else if(!Ho[v].externalConnections&&i.children(v)&&i.children(v).length>0){Ut.warn("Cluster without external connections, without a parent and with children",v,a);let b=i.graph().rankdir==="TB"?"LR":"TB";Ho[v]&&Ho[v].clusterData&&Ho[v].clusterData.dir&&(b=Ho[v].clusterData.dir,Ut.warn("Fixing dir",Ho[v].clusterData.dir,b));const E=new a1({multigraph:!0,compound:!0}).setGraph({rankdir:b,nodesep:50,ranksep:50,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}});Ut.warn("Old graph before copy",S5(i)),lBt(v,i,E,v),i.setNode(v,{clusterNode:!0,id:v,clusterData:Ho[v].clusterData,labelText:Ho[v].labelText,graph:E}),Ut.warn("New graph after copy node: (",v,")",S5(E)),Ut.debug("Old graph after copy",S5(i))}else Ut.warn("Cluster ** ",v," **not meeting the criteria !externalConnections:",!Ho[v].externalConnections," no parent: ",!i.parent(v)," children ",i.children(v)&&i.children(v).length>0,i.children("D"),a),Ut.debug(Ho);f=i.nodes(),Ut.warn("New list of nodes",f);for(const v of f){const m=i.node(v);Ut.warn(" Now next level",v,m),m.clusterNode&&fBt(m.graph,a+1)}},dBt=(i,a)=>{if(a.length===0)return[];let f=Object.assign(a);return a.forEach(p=>{const v=i.children(p),m=dBt(i,v);f=[...f,...m]}),f},Zje=i=>dBt(i,i.children());function Jje(i,a){return i.intersect(a)}function gBt(i,a,f,p){var v=i.x,m=i.y,b=v-p.x,E=m-p.y,_=Math.sqrt(a*a*E*E+f*f*b*b),L=Math.abs(a*f*b/_);p.x<v&&(L=-L);var N=Math.abs(a*f*E/_);return p.y<m&&(N=-N),{x:v+L,y:m+N}}function t$e(i,a,f){return gBt(i,a,a,f)}function e$e(i,a,f,p){var v,m,b,E,_,L,N,B,j,R,z,K,it,st,ut;if(v=a.y-i.y,b=i.x-a.x,_=a.x*i.y-i.x*a.y,j=v*f.x+b*f.y+_,R=v*p.x+b*p.y+_,!(j!==0&&R!==0&&pBt(j,R))&&(m=p.y-f.y,E=f.x-p.x,L=p.x*f.y-f.x*p.y,N=m*i.x+E*i.y+L,B=m*a.x+E*a.y+L,!(N!==0&&B!==0&&pBt(N,B))&&(z=v*E-m*b,z!==0)))return K=Math.abs(z/2),it=b*L-E*_,st=it<0?(it-K)/z:(it+K)/z,it=m*_-v*L,ut=it<0?(it-K)/z:(it+K)/z,{x:st,y:ut}}function pBt(i,a){return i*a>0}function n$e(i,a,f){var p=i.x,v=i.y,m=[],b=Number.POSITIVE_INFINITY,E=Number.POSITIVE_INFINITY;typeof a.forEach=="function"?a.forEach(function(z){b=Math.min(b,z.x),E=Math.min(E,z.y)}):(b=Math.min(b,a.x),E=Math.min(E,a.y));for(var _=p-i.width/2-b,L=v-i.height/2-E,N=0;N<a.length;N++){var B=a[N],j=a[N<a.length-1?N+1:0],R=e$e(i,f,{x:_+B.x,y:L+B.y},{x:_+j.x,y:L+j.y});R&&m.push(R)}return m.length?(m.length>1&&m.sort(function(z,K){var it=z.x-f.x,st=z.y-f.y,ut=Math.sqrt(it*it+st*st),bt=K.x-f.x,mt=K.y-f.y,yt=Math.sqrt(bt*bt+mt*mt);return ut<yt?-1:ut===yt?0:1}),m[0]):i}const mP=(i,a)=>{var f=i.x,p=i.y,v=a.x-f,m=a.y-p,b=i.width/2,E=i.height/2,_,L;return Math.abs(m)*b>Math.abs(v)*E?(m<0&&(E=-E),_=m===0?0:E*v/m,L=E):(v<0&&(b=-b),_=b,L=v===0?0:b*m/v),{x:f+_,y:p+L}},yh={node:Jje,circle:t$e,ellipse:gBt,polygon:n$e,rect:mP},r$e=async(i,a)=>{a.useHtmlLabels||Le().flowchart.htmlLabels||(a.centerLabel=!0);const{shapeSvg:p,bbox:v,halfPadding:m}=await Od(i,a,"node "+a.classes,!0);Ut.info("Classes = ",a.classes);const b=p.insert("rect",":first-child");return b.attr("rx",a.rx).attr("ry",a.ry).attr("x",-v.width/2-m).attr("y",-v.height/2-m).attr("width",v.width+a.padding).attr("height",v.height+a.padding),Qh(a,b),a.intersect=function(E){return yh.rect(a,E)},p},bBt=i=>i?" "+i:"",Pb=(i,a)=>`${a||"node default"}${bBt(i.classes)} ${bBt(i.class)}`,vBt=async(i,a)=>{const{shapeSvg:f,bbox:p}=await Od(i,a,Pb(a,void 0),!0),v=p.width+a.padding,m=p.height+a.padding,b=v+m,E=[{x:b/2,y:0},{x:b,y:-b/2},{x:b/2,y:-b},{x:0,y:-b/2}];Ut.info("Question main (Circle)");const _=A5(f,b,b,E);return _.attr("style",a.style),Qh(a,_),a.intersect=function(L){return Ut.warn("Intersect called"),yh.polygon(a,E,L)},f},i$e=(i,a)=>{const f=i.insert("g").attr("class","node default").attr("id",a.domId||a.id),p=28,v=[{x:0,y:p/2},{x:p/2,y:0},{x:0,y:-p/2},{x:-p/2,y:0}];return f.insert("polygon",":first-child").attr("points",v.map(function(b){return b.x+","+b.y}).join(" ")).attr("class","state-start").attr("r",7).attr("width",28).attr("height",28),a.width=28,a.height=28,a.intersect=function(b){return yh.circle(a,14,b)},f},s$e=async(i,a)=>{const{shapeSvg:f,bbox:p}=await Od(i,a,Pb(a,void 0),!0),v=4,m=p.height+a.padding,b=m/v,E=p.width+2*b+a.padding,_=[{x:b,y:0},{x:E-b,y:0},{x:E,y:-m/2},{x:E-b,y:-m},{x:b,y:-m},{x:0,y:-m/2}],L=A5(f,E,m,_);return L.attr("style",a.style),Qh(a,L),a.intersect=function(N){return yh.polygon(a,_,N)},f},a$e=async(i,a)=>{const{shapeSvg:f,bbox:p}=await Od(i,a,Pb(a,void 0),!0),v=p.width+a.padding,m=p.height+a.padding,b=[{x:-m/2,y:0},{x:v,y:0},{x:v,y:-m},{x:-m/2,y:-m},{x:0,y:-m/2}];return A5(f,v,m,b).attr("style",a.style),a.width=v+m,a.height=m,a.intersect=function(_){return yh.polygon(a,b,_)},f},o$e=async(i,a)=>{const{shapeSvg:f,bbox:p}=await Od(i,a,Pb(a),!0),v=p.width+a.padding,m=p.height+a.padding,b=[{x:-2*m/6,y:0},{x:v-m/6,y:0},{x:v+2*m/6,y:-m},{x:m/6,y:-m}],E=A5(f,v,m,b);return E.attr("style",a.style),Qh(a,E),a.intersect=function(_){return yh.polygon(a,b,_)},f},c$e=async(i,a)=>{const{shapeSvg:f,bbox:p}=await Od(i,a,Pb(a,void 0),!0),v=p.width+a.padding,m=p.height+a.padding,b=[{x:2*m/6,y:0},{x:v+m/6,y:0},{x:v-2*m/6,y:-m},{x:-m/6,y:-m}],E=A5(f,v,m,b);return E.attr("style",a.style),Qh(a,E),a.intersect=function(_){return yh.polygon(a,b,_)},f},u$e=async(i,a)=>{const{shapeSvg:f,bbox:p}=await Od(i,a,Pb(a,void 0),!0),v=p.width+a.padding,m=p.height+a.padding,b=[{x:-2*m/6,y:0},{x:v+2*m/6,y:0},{x:v-m/6,y:-m},{x:m/6,y:-m}],E=A5(f,v,m,b);return E.attr("style",a.style),Qh(a,E),a.intersect=function(_){return yh.polygon(a,b,_)},f},l$e=async(i,a)=>{const{shapeSvg:f,bbox:p}=await Od(i,a,Pb(a,void 0),!0),v=p.width+a.padding,m=p.height+a.padding,b=[{x:m/6,y:0},{x:v-m/6,y:0},{x:v+2*m/6,y:-m},{x:-2*m/6,y:-m}],E=A5(f,v,m,b);return E.attr("style",a.style),Qh(a,E),a.intersect=function(_){return yh.polygon(a,b,_)},f},h$e=async(i,a)=>{const{shapeSvg:f,bbox:p}=await Od(i,a,Pb(a,void 0),!0),v=p.width+a.padding,m=p.height+a.padding,b=[{x:0,y:0},{x:v+m/2,y:0},{x:v,y:-m/2},{x:v+m/2,y:-m},{x:0,y:-m}],E=A5(f,v,m,b);return E.attr("style",a.style),Qh(a,E),a.intersect=function(_){return yh.polygon(a,b,_)},f},f$e=async(i,a)=>{const{shapeSvg:f,bbox:p}=await Od(i,a,Pb(a,void 0),!0),v=p.width+a.padding,m=v/2,b=m/(2.5+v/50),E=p.height+b+a.padding,_="M 0,"+b+" a "+m+","+b+" 0,0,0 "+v+" 0 a "+m+","+b+" 0,0,0 "+-v+" 0 l 0,"+E+" a "+m+","+b+" 0,0,0 "+v+" 0 l 0,"+-E,L=f.attr("label-offset-y",b).insert("path",":first-child").attr("style",a.style).attr("d",_).attr("transform","translate("+-v/2+","+-(E/2+b)+")");return Qh(a,L),a.intersect=function(N){const B=yh.rect(a,N),j=B.x-a.x;if(m!=0&&(Math.abs(j)<a.width/2||Math.abs(j)==a.width/2&&Math.abs(B.y-a.y)>a.height/2-b)){let R=b*b*(1-j*j/(m*m));R!=0&&(R=Math.sqrt(R)),R=b-R,N.y-a.y>0&&(R=-R),B.y+=R}return B},f},d$e=async(i,a)=>{const{shapeSvg:f,bbox:p,halfPadding:v}=await Od(i,a,"node "+a.classes+" "+a.class,!0),m=f.insert("rect",":first-child"),b=p.width+a.padding,E=p.height+a.padding;if(m.attr("class","basic label-container").attr("style",a.style).attr("rx",a.rx).attr("ry",a.ry).attr("x",-p.width/2-v).attr("y",-p.height/2-v).attr("width",b).attr("height",E),a.props){const _=new Set(Object.keys(a.props));a.props.borders&&(wBt(m,a.props.borders,b,E),_.delete("borders")),_.forEach(L=>{Ut.warn(`Unknown node property ${L}`)})}return Qh(a,m),a.intersect=function(_){return yh.rect(a,_)},f},g$e=async(i,a)=>{const{shapeSvg:f}=await Od(i,a,"label",!0);Ut.trace("Classes = ",a.class);const p=f.insert("rect",":first-child"),v=0,m=0;if(p.attr("width",v).attr("height",m),f.attr("class","label edgeLabel"),a.props){const b=new Set(Object.keys(a.props));a.props.borders&&(wBt(p,a.props.borders,v,m),b.delete("borders")),b.forEach(E=>{Ut.warn(`Unknown node property ${E}`)})}return Qh(a,p),a.intersect=function(b){return yh.rect(a,b)},f};function wBt(i,a,f,p){const v=[],m=E=>{v.push(E,0)},b=E=>{v.push(0,E)};a.includes("t")?(Ut.debug("add top border"),m(f)):b(f),a.includes("r")?(Ut.debug("add right border"),m(p)):b(p),a.includes("b")?(Ut.debug("add bottom border"),m(f)):b(f),a.includes("l")?(Ut.debug("add left border"),m(p)):b(p),i.attr("stroke-dasharray",v.join(" "))}const p$e=(i,a)=>{let f;a.classes?f="node "+a.classes:f="node default";const p=i.insert("g").attr("class",f).attr("id",a.domId||a.id),v=p.insert("rect",":first-child"),m=p.insert("line"),b=p.insert("g").attr("class","label"),E=a.labelText.flat?a.labelText.flat():a.labelText;let _="";typeof E=="object"?_=E[0]:_=E,Ut.info("Label text abc79",_,E,typeof E=="object");const L=b.node().appendChild(hp(_,a.labelStyle,!0,!0));let N={width:0,height:0};if(s1(Le().flowchart.htmlLabels)){const K=L.children[0],it=yr(L);N=K.getBoundingClientRect(),it.attr("width",N.width),it.attr("height",N.height)}Ut.info("Text 2",E);const B=E.slice(1,E.length);let j=L.getBBox();const R=b.node().appendChild(hp(B.join?B.join("<br/>"):B,a.labelStyle,!0,!0));if(s1(Le().flowchart.htmlLabels)){const K=R.children[0],it=yr(R);N=K.getBoundingClientRect(),it.attr("width",N.width),it.attr("height",N.height)}const z=a.padding/2;return yr(R).attr("transform","translate( "+(N.width>j.width?0:(j.width-N.width)/2)+", "+(j.height+z+5)+")"),yr(L).attr("transform","translate( "+(N.width<j.width?0:-(j.width-N.width)/2)+", 0)"),N=b.node().getBBox(),b.attr("transform","translate("+-N.width/2+", "+(-N.height/2-z+3)+")"),v.attr("class","outer title-state").attr("x",-N.width/2-z).attr("y",-N.height/2-z).attr("width",N.width+a.padding).attr("height",N.height+a.padding),m.attr("class","divider").attr("x1",-N.width/2-z).attr("x2",N.width/2+z).attr("y1",-N.height/2-z+j.height+z).attr("y2",-N.height/2-z+j.height+z),Qh(a,v),a.intersect=function(K){return yh.rect(a,K)},p},b$e=async(i,a)=>{const{shapeSvg:f,bbox:p}=await Od(i,a,Pb(a,void 0),!0),v=p.height+a.padding,m=p.width+v/4+a.padding,b=f.insert("rect",":first-child").attr("style",a.style).attr("rx",v/2).attr("ry",v/2).attr("x",-m/2).attr("y",-v/2).attr("width",m).attr("height",v);return Qh(a,b),a.intersect=function(E){return yh.rect(a,E)},f},v$e=async(i,a)=>{const{shapeSvg:f,bbox:p,halfPadding:v}=await Od(i,a,Pb(a,void 0),!0),m=f.insert("circle",":first-child");return m.attr("style",a.style).attr("rx",a.rx).attr("ry",a.ry).attr("r",p.width/2+v).attr("width",p.width+a.padding).attr("height",p.height+a.padding),Ut.info("Circle main"),Qh(a,m),a.intersect=function(b){return Ut.info("Circle intersect",a,p.width/2+v,b),yh.circle(a,p.width/2+v,b)},f},w$e=async(i,a)=>{const{shapeSvg:f,bbox:p,halfPadding:v}=await Od(i,a,Pb(a,void 0),!0),m=5,b=f.insert("g",":first-child"),E=b.insert("circle"),_=b.insert("circle");return b.attr("class",a.class),E.attr("style",a.style).attr("rx",a.rx).attr("ry",a.ry).attr("r",p.width/2+v+m).attr("width",p.width+a.padding+m*2).attr("height",p.height+a.padding+m*2),_.attr("style",a.style).attr("rx",a.rx).attr("ry",a.ry).attr("r",p.width/2+v).attr("width",p.width+a.padding).attr("height",p.height+a.padding),Ut.info("DoubleCircle main"),Qh(a,E),a.intersect=function(L){return Ut.info("DoubleCircle intersect",a,p.width/2+v+m,L),yh.circle(a,p.width/2+v+m,L)},f},m$e=async(i,a)=>{const{shapeSvg:f,bbox:p}=await Od(i,a,Pb(a,void 0),!0),v=p.width+a.padding,m=p.height+a.padding,b=[{x:0,y:0},{x:v,y:0},{x:v,y:-m},{x:0,y:-m},{x:0,y:0},{x:-8,y:0},{x:v+8,y:0},{x:v+8,y:-m},{x:-8,y:-m},{x:-8,y:0}],E=A5(f,v,m,b);return E.attr("style",a.style),Qh(a,E),a.intersect=function(_){return yh.polygon(a,b,_)},f},y$e=(i,a)=>{const f=i.insert("g").attr("class","node default").attr("id",a.domId||a.id),p=f.insert("circle",":first-child");return p.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),Qh(a,p),a.intersect=function(v){return yh.circle(a,7,v)},f},mBt=(i,a,f)=>{const p=i.insert("g").attr("class","node default").attr("id",a.domId||a.id);let v=70,m=10;f==="LR"&&(v=10,m=70);const b=p.append("rect").attr("x",-1*v/2).attr("y",-1*m/2).attr("width",v).attr("height",m).attr("class","fork-join");return Qh(a,b),a.height=a.height+a.padding/2,a.width=a.width+a.padding/2,a.intersect=function(E){return yh.rect(a,E)},p},yBt={rhombus:vBt,question:vBt,rect:d$e,labelRect:g$e,rectWithTitle:p$e,choice:i$e,circle:v$e,doublecircle:w$e,stadium:b$e,hexagon:s$e,rect_left_inv_arrow:a$e,lean_right:o$e,lean_left:c$e,trapezoid:u$e,inv_trapezoid:l$e,rect_right_inv_arrow:h$e,cylinder:f$e,start:y$e,end:(i,a)=>{const f=i.insert("g").attr("class","node default").attr("id",a.domId||a.id),p=f.insert("circle",":first-child"),v=f.insert("circle",":first-child");return v.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),p.attr("class","state-end").attr("r",5).attr("width",10).attr("height",10),Qh(a,v),a.intersect=function(m){return yh.circle(a,7,m)},f},note:r$e,subroutine:m$e,fork:mBt,join:mBt,class_box:(i,a)=>{const f=a.padding/2,p=4,v=8;let m;a.classes?m="node "+a.classes:m="node default";const b=i.insert("g").attr("class",m).attr("id",a.domId||a.id),E=b.insert("rect",":first-child"),_=b.insert("line"),L=b.insert("line");let N=0,B=p;const j=b.insert("g").attr("class","label");let R=0;const z=a.classData.annotations&&a.classData.annotations[0],K=a.classData.annotations[0]?"«"+a.classData.annotations[0]+"»":"",it=j.node().appendChild(hp(K,a.labelStyle,!0,!0));let st=it.getBBox();if(s1(Le().flowchart.htmlLabels)){const wt=it.children[0],X=yr(it);st=wt.getBoundingClientRect(),X.attr("width",st.width),X.attr("height",st.height)}a.classData.annotations[0]&&(B+=st.height+p,N+=st.width);let ut=a.classData.label;a.classData.type!==void 0&&a.classData.type!==""&&(Le().flowchart.htmlLabels?ut+="&lt;"+a.classData.type+"&gt;":ut+="<"+a.classData.type+">");const bt=j.node().appendChild(hp(ut,a.labelStyle,!0,!0));yr(bt).attr("class","classTitle");let mt=bt.getBBox();if(s1(Le().flowchart.htmlLabels)){const wt=bt.children[0],X=yr(bt);mt=wt.getBoundingClientRect(),X.attr("width",mt.width),X.attr("height",mt.height)}B+=mt.height+p,mt.width>N&&(N=mt.width);const yt=[];a.classData.members.forEach(wt=>{const X=wt.getDisplayDetails();let pt=X.displayText;Le().flowchart.htmlLabels&&(pt=pt.replace(/</g,"&lt;").replace(/>/g,"&gt;"));const U=j.node().appendChild(hp(pt,X.cssStyle?X.cssStyle:a.labelStyle,!0,!0));let xt=U.getBBox();if(s1(Le().flowchart.htmlLabels)){const nt=U.children[0],Ot=yr(U);xt=nt.getBoundingClientRect(),Ot.attr("width",xt.width),Ot.attr("height",xt.height)}xt.width>N&&(N=xt.width),B+=xt.height+p,yt.push(U)}),B+=v;const dt=[];if(a.classData.methods.forEach(wt=>{const X=wt.getDisplayDetails();let pt=X.displayText;Le().flowchart.htmlLabels&&(pt=pt.replace(/</g,"&lt;").replace(/>/g,"&gt;"));const U=j.node().appendChild(hp(pt,X.cssStyle?X.cssStyle:a.labelStyle,!0,!0));let xt=U.getBBox();if(s1(Le().flowchart.htmlLabels)){const nt=U.children[0],Ot=yr(U);xt=nt.getBoundingClientRect(),Ot.attr("width",xt.width),Ot.attr("height",xt.height)}xt.width>N&&(N=xt.width),B+=xt.height+p,dt.push(U)}),B+=v,z){let wt=(N-st.width)/2;yr(it).attr("transform","translate( "+(-1*N/2+wt)+", "+-1*B/2+")"),R=st.height+p}let ht=(N-mt.width)/2;return yr(bt).attr("transform","translate( "+(-1*N/2+ht)+", "+(-1*B/2+R)+")"),R+=mt.height+p,_.attr("class","divider").attr("x1",-N/2-f).attr("x2",N/2+f).attr("y1",-B/2-f+v+R).attr("y2",-B/2-f+v+R),R+=v,yt.forEach(wt=>{yr(wt).attr("transform","translate( "+-N/2+", "+(-1*B/2+R+v/2)+")");const X=wt==null?void 0:wt.getBBox();R+=((X==null?void 0:X.height)??0)+p}),R+=v,L.attr("class","divider").attr("x1",-N/2-f).attr("x2",N/2+f).attr("y1",-B/2-f+v+R).attr("y2",-B/2-f+v+R),R+=v,dt.forEach(wt=>{yr(wt).attr("transform","translate( "+-N/2+", "+(-1*B/2+R)+")");const X=wt==null?void 0:wt.getBBox();R+=((X==null?void 0:X.height)??0)+p}),E.attr("class","outer title-state").attr("x",-N/2-f).attr("y",-(B/2)-f).attr("width",N+a.padding).attr("height",B+a.padding),Qh(a,E),a.intersect=function(wt){return yh.rect(a,wt)},b}};let rL={};const xBt=async(i,a,f)=>{let p,v;if(a.link){let m;Le().securityLevel==="sandbox"?m="_top":a.linkTarget&&(m=a.linkTarget||"_blank"),p=i.insert("svg:a").attr("xlink:href",a.link).attr("target",m),v=await yBt[a.shape](p,a,f)}else v=await yBt[a.shape](i,a,f),p=v;return a.tooltip&&v.attr("title",a.tooltip),a.class&&v.attr("class","node default "+a.class),rL[a.id]=p,a.haveCallback&&rL[a.id].attr("class",rL[a.id].attr("class")+" clickable"),p},x$e=(i,a)=>{rL[a.id]=i},k$e=()=>{rL={}},kBt=i=>{const a=rL[i.id];Ut.trace("Transforming node",i.diff,i,"translate("+(i.x-i.width/2-5)+", "+i.width/2+")");const f=8,p=i.diff||0;return i.clusterNode?a.attr("transform","translate("+(i.x+p-i.width/2)+", "+(i.y-i.height/2-f)+")"):a.attr("transform","translate("+i.x+", "+i.y+")"),p},E$e={rect:(i,a)=>{Ut.info("Creating subgraph rect for ",a.id,a);const f=i.insert("g").attr("class","cluster"+(a.class?" "+a.class:"")).attr("id",a.id),p=f.insert("rect",":first-child"),v=s1(Le().flowchart.htmlLabels),m=f.insert("g").attr("class","cluster-label"),b=a.labelType==="markdown"?dK(m,a.labelText,{style:a.labelStyle,useHtmlLabels:v}):m.node().appendChild(hp(a.labelText,a.labelStyle,void 0,!0));let E=b.getBBox();if(s1(Le().flowchart.htmlLabels)){const j=b.children[0],R=yr(b);E=j.getBoundingClientRect(),R.attr("width",E.width),R.attr("height",E.height)}const _=0*a.padding,L=_/2,N=a.width<=E.width+_?E.width+_:a.width;a.width<=E.width+_?a.diff=(E.width-a.width)/2-a.padding/2:a.diff=-a.padding/2,Ut.trace("Data ",a,JSON.stringify(a)),p.attr("style",a.style).attr("rx",a.rx).attr("ry",a.ry).attr("x",a.x-N/2).attr("y",a.y-a.height/2-L).attr("width",N).attr("height",a.height+_),v?m.attr("transform","translate("+(a.x-E.width/2)+", "+(a.y-a.height/2)+")"):m.attr("transform","translate("+a.x+", "+(a.y-a.height/2)+")");const B=p.node().getBBox();return a.width=B.width,a.height=B.height,a.intersect=function(j){return mP(a,j)},f},roundedWithTitle:(i,a)=>{const f=i.insert("g").attr("class",a.classes).attr("id",a.id),p=f.insert("rect",":first-child"),v=f.insert("g").attr("class","cluster-label"),m=f.append("rect"),b=v.node().appendChild(hp(a.labelText,a.labelStyle,void 0,!0));let E=b.getBBox();if(s1(Le().flowchart.htmlLabels)){const j=b.children[0],R=yr(b);E=j.getBoundingClientRect(),R.attr("width",E.width),R.attr("height",E.height)}E=b.getBBox();const _=0*a.padding,L=_/2,N=a.width<=E.width+a.padding?E.width+a.padding:a.width;a.width<=E.width+a.padding?a.diff=(E.width+a.padding*0-a.width)/2:a.diff=-a.padding/2,p.attr("class","outer").attr("x",a.x-N/2-L).attr("y",a.y-a.height/2-L).attr("width",N+_).attr("height",a.height+_),m.attr("class","inner").attr("x",a.x-N/2-L).attr("y",a.y-a.height/2-L+E.height-1).attr("width",N+_).attr("height",a.height+_-E.height-3),v.attr("transform","translate("+(a.x-E.width/2)+", "+(a.y-a.height/2-a.padding/3+(s1(Le().flowchart.htmlLabels)?5:3))+")");const B=p.node().getBBox();return a.height=B.height,a.intersect=function(j){return mP(a,j)},f},noteGroup:(i,a)=>{const f=i.insert("g").attr("class","note-cluster").attr("id",a.id),p=f.insert("rect",":first-child"),v=0*a.padding,m=v/2;p.attr("rx",a.rx).attr("ry",a.ry).attr("x",a.x-a.width/2-m).attr("y",a.y-a.height/2-m).attr("width",a.width+v).attr("height",a.height+v).attr("fill","none");const b=p.node().getBBox();return a.width=b.width,a.height=b.height,a.intersect=function(E){return mP(a,E)},f},divider:(i,a)=>{const f=i.insert("g").attr("class",a.classes).attr("id",a.id),p=f.insert("rect",":first-child"),v=0*a.padding,m=v/2;p.attr("class","divider").attr("x",a.x-a.width/2-m).attr("y",a.y-a.height/2).attr("width",a.width+v).attr("height",a.height+v);const b=p.node().getBBox();return a.width=b.width,a.height=b.height,a.diff=-a.padding/2,a.intersect=function(E){return mP(a,E)},f}};let EBt={};const T$e=(i,a)=>{Ut.trace("Inserting cluster");const f=a.shape||"rect";EBt[a.id]=E$e[f](i,a)},C$e=()=>{EBt={}},lk={aggregation:18,extension:18,composition:18,dependency:6,lollipop:13.5,arrow_point:5.3};function bK(i,a){i=vK(i),a=vK(a);const[f,p]=[i.x,i.y],[v,m]=[a.x,a.y],b=v-f,E=m-p;return{angle:Math.atan(E/b),deltaX:b,deltaY:E}}const vK=i=>Array.isArray(i)?{x:i[0],y:i[1]}:i,TBt=i=>({x:function(a,f,p){let v=0;if(f===0&&Object.hasOwn(lk,i.arrowTypeStart)){const{angle:m,deltaX:b}=bK(p[0],p[1]);v=lk[i.arrowTypeStart]*Math.cos(m)*(b>=0?1:-1)}else if(f===p.length-1&&Object.hasOwn(lk,i.arrowTypeEnd)){const{angle:m,deltaX:b}=bK(p[p.length-1],p[p.length-2]);v=lk[i.arrowTypeEnd]*Math.cos(m)*(b>=0?1:-1)}return vK(a).x+v},y:function(a,f,p){let v=0;if(f===0&&Object.hasOwn(lk,i.arrowTypeStart)){const{angle:m,deltaY:b}=bK(p[0],p[1]);v=lk[i.arrowTypeStart]*Math.abs(Math.sin(m))*(b>=0?1:-1)}else if(f===p.length-1&&Object.hasOwn(lk,i.arrowTypeEnd)){const{angle:m,deltaY:b}=bK(p[p.length-1],p[p.length-2]);v=lk[i.arrowTypeEnd]*Math.abs(Math.sin(m))*(b>=0?1:-1)}return vK(a).y+v}});let wK={},Nd={};const _$e=()=>{wK={},Nd={}},CBt=(i,a)=>{const f=s1(Le().flowchart.htmlLabels),p=a.labelType==="markdown"?dK(i,a.label,{style:a.labelStyle,useHtmlLabels:f,addSvgBackground:!0}):hp(a.label,a.labelStyle);Ut.info("abc82",a,a.labelType);const v=i.insert("g").attr("class","edgeLabel"),m=v.insert("g").attr("class","label");m.node().appendChild(p);let b=p.getBBox();if(f){const _=p.children[0],L=yr(p);b=_.getBoundingClientRect(),L.attr("width",b.width),L.attr("height",b.height)}m.attr("transform","translate("+-b.width/2+", "+-b.height/2+")"),wK[a.id]=v,a.width=b.width,a.height=b.height;let E;if(a.startLabelLeft){const _=hp(a.startLabelLeft,a.labelStyle),L=i.insert("g").attr("class","edgeTerminals"),N=L.insert("g").attr("class","inner");E=N.node().appendChild(_);const B=_.getBBox();N.attr("transform","translate("+-B.width/2+", "+-B.height/2+")"),Nd[a.id]||(Nd[a.id]={}),Nd[a.id].startLeft=L,mK(E,a.startLabelLeft)}if(a.startLabelRight){const _=hp(a.startLabelRight,a.labelStyle),L=i.insert("g").attr("class","edgeTerminals"),N=L.insert("g").attr("class","inner");E=L.node().appendChild(_),N.node().appendChild(_);const B=_.getBBox();N.attr("transform","translate("+-B.width/2+", "+-B.height/2+")"),Nd[a.id]||(Nd[a.id]={}),Nd[a.id].startRight=L,mK(E,a.startLabelRight)}if(a.endLabelLeft){const _=hp(a.endLabelLeft,a.labelStyle),L=i.insert("g").attr("class","edgeTerminals"),N=L.insert("g").attr("class","inner");E=N.node().appendChild(_);const B=_.getBBox();N.attr("transform","translate("+-B.width/2+", "+-B.height/2+")"),L.node().appendChild(_),Nd[a.id]||(Nd[a.id]={}),Nd[a.id].endLeft=L,mK(E,a.endLabelLeft)}if(a.endLabelRight){const _=hp(a.endLabelRight,a.labelStyle),L=i.insert("g").attr("class","edgeTerminals"),N=L.insert("g").attr("class","inner");E=N.node().appendChild(_);const B=_.getBBox();N.attr("transform","translate("+-B.width/2+", "+-B.height/2+")"),L.node().appendChild(_),Nd[a.id]||(Nd[a.id]={}),Nd[a.id].endRight=L,mK(E,a.endLabelRight)}return p};function mK(i,a){Le().flowchart.htmlLabels&&i&&(i.style.width=a.length*9+"px",i.style.height="12px")}const S$e=(i,a)=>{Ut.info("Moving label abc78 ",i.id,i.label,wK[i.id]);let f=a.updatedPath?a.updatedPath:a.originalPath;if(i.label){const p=wK[i.id];let v=i.x,m=i.y;if(f){const b=$a.calcLabelPosition(f);Ut.info("Moving label "+i.label+" from (",v,",",m,") to (",b.x,",",b.y,") abc78"),a.updatedPath&&(v=b.x,m=b.y)}p.attr("transform","translate("+v+", "+m+")")}if(i.startLabelLeft){const p=Nd[i.id].startLeft;let v=i.x,m=i.y;if(f){const b=$a.calcTerminalLabelPosition(i.arrowTypeStart?10:0,"start_left",f);v=b.x,m=b.y}p.attr("transform","translate("+v+", "+m+")")}if(i.startLabelRight){const p=Nd[i.id].startRight;let v=i.x,m=i.y;if(f){const b=$a.calcTerminalLabelPosition(i.arrowTypeStart?10:0,"start_right",f);v=b.x,m=b.y}p.attr("transform","translate("+v+", "+m+")")}if(i.endLabelLeft){const p=Nd[i.id].endLeft;let v=i.x,m=i.y;if(f){const b=$a.calcTerminalLabelPosition(i.arrowTypeEnd?10:0,"end_left",f);v=b.x,m=b.y}p.attr("transform","translate("+v+", "+m+")")}if(i.endLabelRight){const p=Nd[i.id].endRight;let v=i.x,m=i.y;if(f){const b=$a.calcTerminalLabelPosition(i.arrowTypeEnd?10:0,"end_right",f);v=b.x,m=b.y}p.attr("transform","translate("+v+", "+m+")")}},A$e=(i,a)=>{const f=i.x,p=i.y,v=Math.abs(a.x-f),m=Math.abs(a.y-p),b=i.width/2,E=i.height/2;return v>=b||m>=E},L$e=(i,a,f)=>{Ut.warn(`intersection calc abc89:
  outsidePoint: ${JSON.stringify(a)}
  insidePoint : ${JSON.stringify(f)}
  node        : x:${i.x} y:${i.y} w:${i.width} h:${i.height}`);const p=i.x,v=i.y,m=Math.abs(p-f.x),b=i.width/2;let E=f.x<a.x?b-m:b+m;const _=i.height/2,L=Math.abs(a.y-f.y),N=Math.abs(a.x-f.x);if(Math.abs(v-a.y)*b>Math.abs(p-a.x)*_){let B=f.y<a.y?a.y-_-v:v-_-a.y;E=N*B/L;const j={x:f.x<a.x?f.x+E:f.x-N+E,y:f.y<a.y?f.y+L-B:f.y-L+B};return E===0&&(j.x=a.x,j.y=a.y),N===0&&(j.x=a.x),L===0&&(j.y=a.y),Ut.warn(`abc89 topp/bott calc, Q ${L}, q ${B}, R ${N}, r ${E}`,j),j}else{f.x<a.x?E=a.x-b-p:E=p-b-a.x;let B=L*E/N,j=f.x<a.x?f.x+N-E:f.x-N+E,R=f.y<a.y?f.y+B:f.y-B;return Ut.warn(`sides calc abc89, Q ${L}, q ${B}, R ${N}, r ${E}`,{_x:j,_y:R}),E===0&&(j=a.x,R=a.y),N===0&&(j=a.x),L===0&&(R=a.y),{x:j,y:R}}},_Bt=(i,a)=>{Ut.warn("abc88 cutPathAtIntersect",i,a);let f=[],p=i[0],v=!1;return i.forEach(m=>{if(Ut.info("abc88 checking point",m,a),!A$e(a,m)&&!v){const b=L$e(a,p,m);Ut.warn("abc88 inside",m,p,b),Ut.warn("abc88 intersection",b);let E=!1;f.forEach(_=>{E=E||_.x===b.x&&_.y===b.y}),f.some(_=>_.x===b.x&&_.y===b.y)?Ut.warn("abc88 no intersect",b,f):f.push(b),v=!0}else Ut.warn("abc88 outside",m,p),p=m,v||f.push(m)}),Ut.warn("abc88 returning points",f),f},M$e=function(i,a,f,p,v,m,b){let E=f.points,_=!1;const L=m.node(a.v);var N=m.node(a.w);Ut.info("abc88 InsertEdge: ",f),N.intersect&&L.intersect&&(E=E.slice(1,f.points.length-1),E.unshift(L.intersect(E[0])),Ut.info("Last point",E[E.length-1],N,N.intersect(E[E.length-1])),E.push(N.intersect(E[E.length-1]))),f.toCluster&&(Ut.info("to cluster abc88",p[f.toCluster]),E=_Bt(f.points,p[f.toCluster].node),_=!0),f.fromCluster&&(Ut.info("from cluster abc88",p[f.fromCluster]),E=_Bt(E.reverse(),p[f.fromCluster].node).reverse(),_=!0);const B=E.filter(mt=>!Number.isNaN(mt.y));let j=FN;f.curve&&(v==="graph"||v==="flowchart")&&(j=f.curve);const{x:R,y:z}=TBt(f),K=Z7().x(R).y(z).curve(j);let it;switch(f.thickness){case"normal":it="edge-thickness-normal";break;case"thick":it="edge-thickness-thick";break;case"invisible":it="edge-thickness-thick";break;default:it=""}switch(f.pattern){case"solid":it+=" edge-pattern-solid";break;case"dotted":it+=" edge-pattern-dotted";break;case"dashed":it+=" edge-pattern-dashed";break}const st=i.append("path").attr("d",K(B)).attr("id",f.id).attr("class"," "+it+(f.classes?" "+f.classes:"")).attr("style",f.style);let ut="";switch((Le().flowchart.arrowMarkerAbsolute||Le().state.arrowMarkerAbsolute)&&(ut=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,ut=ut.replace(/\(/g,"\\("),ut=ut.replace(/\)/g,"\\)")),Ut.info("arrowTypeStart",f.arrowTypeStart),Ut.info("arrowTypeEnd",f.arrowTypeEnd),f.arrowTypeStart){case"arrow_cross":st.attr("marker-start","url("+ut+"#"+b+"_"+v+"-crossStart)");break;case"arrow_point":st.attr("marker-start","url("+ut+"#"+b+"_"+v+"-pointStart)");break;case"arrow_barb":st.attr("marker-start","url("+ut+"#"+b+"_"+v+"-barbStart)");break;case"arrow_circle":st.attr("marker-start","url("+ut+"#"+b+"_"+v+"-circleStart)");break;case"aggregation":st.attr("marker-start","url("+ut+"#"+b+"_"+v+"-aggregationStart)");break;case"extension":st.attr("marker-start","url("+ut+"#"+b+"_"+v+"-extensionStart)");break;case"composition":st.attr("marker-start","url("+ut+"#"+b+"_"+v+"-compositionStart)");break;case"dependency":st.attr("marker-start","url("+ut+"#"+b+"_"+v+"-dependencyStart)");break;case"lollipop":st.attr("marker-start","url("+ut+"#"+b+"_"+v+"-lollipopStart)");break}switch(f.arrowTypeEnd){case"arrow_cross":st.attr("marker-end","url("+ut+"#"+b+"_"+v+"-crossEnd)");break;case"arrow_point":st.attr("marker-end","url("+ut+"#"+b+"_"+v+"-pointEnd)");break;case"arrow_barb":st.attr("marker-end","url("+ut+"#"+b+"_"+v+"-barbEnd)");break;case"arrow_circle":st.attr("marker-end","url("+ut+"#"+b+"_"+v+"-circleEnd)");break;case"aggregation":st.attr("marker-end","url("+ut+"#"+b+"_"+v+"-aggregationEnd)");break;case"extension":st.attr("marker-end","url("+ut+"#"+b+"_"+v+"-extensionEnd)");break;case"composition":st.attr("marker-end","url("+ut+"#"+b+"_"+v+"-compositionEnd)");break;case"dependency":st.attr("marker-end","url("+ut+"#"+b+"_"+v+"-dependencyEnd)");break;case"lollipop":st.attr("marker-end","url("+ut+"#"+b+"_"+v+"-lollipopEnd)");break}let bt={};return _&&(bt.updatedPath=E),bt.originalPath=f.points,bt},SBt=async(i,a,f,p,v)=>{Ut.info("Graph in recursive render: XXX",S5(a),v);const m=a.graph().rankdir;Ut.trace("Dir in recursive render - dir:",m);const b=i.insert("g").attr("class","root");a.nodes()?Ut.info("Recursive render XXX",a.nodes()):Ut.info("No nodes found for",a),a.edges().length>0&&Ut.trace("Recursive edges",a.edge(a.edges()[0]));const E=b.insert("g").attr("class","clusters"),_=b.insert("g").attr("class","edgePaths"),L=b.insert("g").attr("class","edgeLabels"),N=b.insert("g").attr("class","nodes");await Promise.all(a.nodes().map(async function(j){const R=a.node(j);if(v!==void 0){const z=JSON.parse(JSON.stringify(v.clusterData));Ut.info("Setting data for cluster XXX (",j,") ",z,v),a.setNode(v.id,z),a.parent(j)||(Ut.trace("Setting parent",j,v.id),a.setParent(j,v.id,z))}if(Ut.info("(Insert) Node XXX"+j+": "+JSON.stringify(a.node(j))),R&&R.clusterNode){Ut.info("Cluster identified",j,R.width,a.node(j));const z=await SBt(N,R.graph,f,p,a.node(j)),K=z.elem;Qh(R,K),R.diff=z.diff||0,Ut.info("Node bounds (abc123)",j,R,R.width,R.x,R.y),x$e(K,R),Ut.warn("Recursive render complete ",K,R)}else a.children(j).length>0?(Ut.info("Cluster - the non recursive path XXX",j,R.id,R,a),Ut.info(wP(R.id,a)),Ho[R.id]={id:wP(R.id,a),node:R}):(Ut.info("Node - the non recursive path",j,R.id,R),await xBt(N,a.node(j),m))})),a.edges().forEach(function(j){const R=a.edge(j.v,j.w,j.name);Ut.info("Edge "+j.v+" -> "+j.w+": "+JSON.stringify(j)),Ut.info("Edge "+j.v+" -> "+j.w+": ",j," ",JSON.stringify(a.edge(j))),Ut.info("Fix",Ho,"ids:",j.v,j.w,"Translateing: ",Ho[j.v],Ho[j.w]),CBt(L,R)}),a.edges().forEach(function(j){Ut.info("Edge "+j.v+" -> "+j.w+": "+JSON.stringify(j))}),Ut.info("#############################################"),Ut.info("###                Layout                 ###"),Ut.info("#############################################"),Ut.info(a),eL(a),Ut.info("Graph after layout:",S5(a));let B=0;return Zje(a).forEach(function(j){const R=a.node(j);Ut.info("Position "+j+": "+JSON.stringify(a.node(j))),Ut.info("Position "+j+": ("+R.x,","+R.y,") width: ",R.width," height: ",R.height),R&&R.clusterNode?kBt(R):a.children(j).length>0?(T$e(E,R),Ho[R.id].node=R):kBt(R)}),a.edges().forEach(function(j){const R=a.edge(j);Ut.info("Edge "+j.v+" -> "+j.w+": "+JSON.stringify(R),R);const z=M$e(_,j,R,Ho,f,a,p);S$e(R,z)}),a.nodes().forEach(function(j){const R=a.node(j);Ut.info(j,R.type,R.diff),R.type==="group"&&(B=R.diff)}),{elem:b,diff:B}},I0t=async(i,a,f,p,v)=>{IFt(i,f,p,v),k$e(),_$e(),C$e(),Yje(),Ut.warn("Graph at first:",JSON.stringify(S5(a))),Qje(a),Ut.warn("Graph after:",JSON.stringify(S5(a))),await SBt(i,a,p,v)},ABt={},I$e=function(i){const a=Object.keys(i);for(const f of a)ABt[f]=i[f]},LBt=function(i,a,f,p,v,m){const b=p.select(`[id="${f}"]`);Object.keys(i).forEach(function(_){const L=i[_];let N="default";L.classes.length>0&&(N=L.classes.join(" ")),N=N+" flowchart-label";const B=em(L.styles);let j=L.text!==void 0?L.text:L.id,R;if(Ut.info("vertex",L,L.labelType),L.labelType==="markdown")Ut.info("vertex",L,L.labelType);else if(s1(Le().flowchart.htmlLabels)){const it={label:j.replace(/fa[blrs]?:fa-[\w-]+/g,st=>`<i class='${st.replace(":"," ")}'></i>`)};R=d0t(b,it).node(),R.parentNode.removeChild(R)}else{const it=v.createElementNS("http://www.w3.org/2000/svg","text");it.setAttribute("style",B.labelStyle.replace("color:","fill:"));const st=j.split(Yr.lineBreakRegex);for(const ut of st){const bt=v.createElementNS("http://www.w3.org/2000/svg","tspan");bt.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),bt.setAttribute("dy","1em"),bt.setAttribute("x","1"),bt.textContent=ut,it.appendChild(bt)}R=it}let z=0,K="";switch(L.type){case"round":z=5,K="rect";break;case"square":K="rect";break;case"diamond":K="question";break;case"hexagon":K="hexagon";break;case"odd":K="rect_left_inv_arrow";break;case"lean_right":K="lean_right";break;case"lean_left":K="lean_left";break;case"trapezoid":K="trapezoid";break;case"inv_trapezoid":K="inv_trapezoid";break;case"odd_right":K="rect_left_inv_arrow";break;case"circle":K="circle";break;case"ellipse":K="ellipse";break;case"stadium":K="stadium";break;case"subroutine":K="subroutine";break;case"cylinder":K="cylinder";break;case"group":K="rect";break;case"doublecircle":K="doublecircle";break;default:K="rect"}a.setNode(L.id,{labelStyle:B.labelStyle,shape:K,labelText:j,labelType:L.labelType,rx:z,ry:z,class:N,style:B.style,id:L.id,link:L.link,linkTarget:L.linkTarget,tooltip:m.db.getTooltip(L.id)||"",domId:m.db.lookUpDomId(L.id),haveCallback:L.haveCallback,width:L.type==="group"?500:void 0,dir:L.dir,type:L.type,props:L.props,padding:Le().flowchart.padding}),Ut.info("setNode",{labelStyle:B.labelStyle,labelType:L.labelType,shape:K,labelText:j,rx:z,ry:z,class:N,style:B.style,id:L.id,domId:m.db.lookUpDomId(L.id),width:L.type==="group"?500:void 0,type:L.type,dir:L.dir,props:L.props,padding:Le().flowchart.padding})})},MBt=function(i,a,f){Ut.info("abc78 edges = ",i);let p=0,v={},m,b;if(i.defaultStyle!==void 0){const E=em(i.defaultStyle);m=E.style,b=E.labelStyle}i.forEach(function(E){p++;const _="L-"+E.start+"-"+E.end;v[_]===void 0?(v[_]=0,Ut.info("abc78 new entry",_,v[_])):(v[_]++,Ut.info("abc78 new entry",_,v[_]));let L=_+"-"+v[_];Ut.info("abc78 new link id to be used is",_,L,v[_]);const N="LS-"+E.start,B="LE-"+E.end,j={style:"",labelStyle:""};switch(j.minlen=E.length||1,E.type==="arrow_open"?j.arrowhead="none":j.arrowhead="normal",j.arrowTypeStart="arrow_open",j.arrowTypeEnd="arrow_open",E.type){case"double_arrow_cross":j.arrowTypeStart="arrow_cross";case"arrow_cross":j.arrowTypeEnd="arrow_cross";break;case"double_arrow_point":j.arrowTypeStart="arrow_point";case"arrow_point":j.arrowTypeEnd="arrow_point";break;case"double_arrow_circle":j.arrowTypeStart="arrow_circle";case"arrow_circle":j.arrowTypeEnd="arrow_circle";break}let R="",z="";switch(E.stroke){case"normal":R="fill:none;",m!==void 0&&(R=m),b!==void 0&&(z=b),j.thickness="normal",j.pattern="solid";break;case"dotted":j.thickness="normal",j.pattern="dotted",j.style="fill:none;stroke-width:2px;stroke-dasharray:3;";break;case"thick":j.thickness="thick",j.pattern="solid",j.style="stroke-width: 3.5px;fill:none;";break;case"invisible":j.thickness="invisible",j.pattern="solid",j.style="stroke-width: 0;fill:none;";break}if(E.style!==void 0){const K=em(E.style);R=K.style,z=K.labelStyle}j.style=j.style+=R,j.labelStyle=j.labelStyle+=z,E.interpolate!==void 0?j.curve=X2(E.interpolate,ig):i.defaultInterpolate!==void 0?j.curve=X2(i.defaultInterpolate,ig):j.curve=X2(ABt.curve,ig),E.text===void 0?E.style!==void 0&&(j.arrowheadStyle="fill: #333"):(j.arrowheadStyle="fill: #333",j.labelpos="c"),j.labelType=E.labelType,j.label=E.text.replace(Yr.lineBreakRegex,`
`),E.style===void 0&&(j.style=j.style||"stroke: #333; stroke-width: 1.5px;fill:none;"),j.labelStyle=j.labelStyle.replace("color:","fill:"),j.id=L,j.classes="flowchart-link "+N+" "+B,a.setEdge(E.start,E.end,j,p)})},D0t={setConf:I$e,addVertices:LBt,addEdges:MBt,getClasses:function(i,a){return a.db.getClasses()},draw:async function(i,a,f,p){Ut.info("Drawing flowchart");let v=p.db.getDirection();v===void 0&&(v="TD");const{securityLevel:m,flowchart:b}=Le(),E=b.nodeSpacing||50,_=b.rankSpacing||50;let L;m==="sandbox"&&(L=yr("#i"+a));const N=yr(m==="sandbox"?L.nodes()[0].contentDocument.body:"body"),B=m==="sandbox"?L.nodes()[0].contentDocument:document,j=new a1({multigraph:!0,compound:!0}).setGraph({rankdir:v,nodesep:E,ranksep:_,marginx:0,marginy:0}).setDefaultEdgeLabel(function(){return{}});let R;const z=p.db.getSubGraphs();Ut.info("Subgraphs - ",z);for(let yt=z.length-1;yt>=0;yt--)R=z[yt],Ut.info("Subgraph - ",R),p.db.addVertex(R.id,{text:R.title,type:R.labelType},"group",void 0,R.classes,R.dir);const K=p.db.getVertices(),it=p.db.getEdges();Ut.info("Edges",it);let st=0;for(st=z.length-1;st>=0;st--){R=z[st],ZLt("cluster").append("text");for(let yt=0;yt<R.nodes.length;yt++)Ut.info("Setting up subgraphs",R.nodes[yt],R.id),j.setParent(R.nodes[yt],R.id)}LBt(K,j,a,N,B,p),MBt(it,j);const ut=N.select(`[id="${a}"]`),bt=N.select("#"+a+" g");if(await I0t(bt,j,["point","circle","cross"],"flowchart",a),$a.insertTitle(ut,"flowchartTitleText",b.titleTopMargin,p.db.getDiagramTitle()),cT(j,ut,b.diagramPadding,b.useMaxWidth),p.db.indexNodes("subGraph"+st),!b.htmlLabels){const yt=B.querySelectorAll('[id="'+a+'"] .edgeLabel .label');for(const dt of yt){const ht=dt.getBBox(),wt=B.createElementNS("http://www.w3.org/2000/svg","rect");wt.setAttribute("rx",0),wt.setAttribute("ry",0),wt.setAttribute("width",ht.width),wt.setAttribute("height",ht.height),dt.insertBefore(wt,dt.firstChild)}}Object.keys(K).forEach(function(yt){const dt=K[yt];if(dt.link){const ht=yr("#"+a+' [id="'+yt+'"]');if(ht){const wt=B.createElementNS("http://www.w3.org/2000/svg","a");wt.setAttributeNS("http://www.w3.org/2000/svg","class",dt.classes.join(" ")),wt.setAttributeNS("http://www.w3.org/2000/svg","href",dt.link),wt.setAttributeNS("http://www.w3.org/2000/svg","rel","noopener"),m==="sandbox"?wt.setAttributeNS("http://www.w3.org/2000/svg","target","_top"):dt.linkTarget&&wt.setAttributeNS("http://www.w3.org/2000/svg","target",dt.linkTarget);const X=ht.insert(function(){return wt},":first-child"),pt=ht.select(".label-container");pt&&X.append(function(){return pt.node()});const U=ht.select(".label");U&&X.append(function(){return U.node()})}}})}},D$e=(i,a)=>{const f=jTe,p=f(i,"r"),v=f(i,"g"),m=f(i,"b");return IA(p,v,m,a)},IBt=i=>`.label {
    font-family: ${i.fontFamily};
    color: ${i.nodeTextColor||i.textColor};
  }
  .cluster-label text {
    fill: ${i.titleColor};
  }
  .cluster-label span,p {
    color: ${i.titleColor};
  }

  .label text,span,p {
    fill: ${i.nodeTextColor||i.textColor};
    color: ${i.nodeTextColor||i.textColor};
  }

  .node rect,
  .node circle,
  .node ellipse,
  .node polygon,
  .node path {
    fill: ${i.mainBkg};
    stroke: ${i.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: ${i.arrowheadColor};
  }

  .edgePath .path {
    stroke: ${i.lineColor};
    stroke-width: 2.0px;
  }

  .flowchart-link {
    stroke: ${i.lineColor};
    fill: none;
  }

  .edgeLabel {
    background-color: ${i.edgeLabelBackground};
    rect {
      opacity: 0.5;
      background-color: ${i.edgeLabelBackground};
      fill: ${i.edgeLabelBackground};
    }
    text-align: center;
  }

  /* For html labels only */
  .labelBkg {
    background-color: ${D$e(i.edgeLabelBackground,.5)};
    // background-color: 
  }

  .cluster rect {
    fill: ${i.clusterBkg};
    stroke: ${i.clusterBorder};
    stroke-width: 1px;
  }

  .cluster text {
    fill: ${i.titleColor};
  }

  .cluster span,p {
    color: ${i.titleColor};
  }
  /* .cluster div {
    color: ${i.titleColor};
  } */

  div.mermaidTooltip {
    position: absolute;
    text-align: center;
    max-width: 200px;
    padding: 2px;
    font-family: ${i.fontFamily};
    font-size: 12px;
    background: ${i.tertiaryColor};
    border: 1px solid ${i.border2};
    border-radius: 2px;
    pointer-events: none;
    z-index: 100;
  }

  .flowchartTitleText {
    text-anchor: middle;
    font-size: 18px;
    fill: ${i.textColor};
  }
`,O$e=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:$dt,db:gT,renderer:D0t,styles:IBt,init:i=>{i.flowchart||(i.flowchart={}),i.flowchart.arrowMarkerAbsolute=i.arrowMarkerAbsolute,$Be.setConf(i.flowchart),gT.clear(),gT.setGen("gen-1")}}},Symbol.toStringTag,{value:"Module"})),N$e=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:$dt,db:gT,renderer:D0t,styles:IBt,init:i=>{i.flowchart||(i.flowchart={}),i.flowchart.arrowMarkerAbsolute=i.arrowMarkerAbsolute,iOt({flowchart:{arrowMarkerAbsolute:i.arrowMarkerAbsolute}}),D0t.setConf(i.flowchart),gT.clear(),gT.setGen("gen-2")}}},Symbol.toStringTag,{value:"Module"}));var O0t=function(){var i=function(wt,X,pt,U){for(pt=pt||{},U=wt.length;U--;pt[wt[U]]=X);return pt},a=[6,8,10,20,22,24,26,27,28],f=[1,10],p=[1,11],v=[1,12],m=[1,13],b=[1,14],E=[1,15],_=[1,21],L=[1,22],N=[1,23],B=[1,24],j=[1,25],R=[6,8,10,13,15,18,19,20,22,24,26,27,28,41,42,43,44,45],z=[1,34],K=[27,28,46,47],it=[41,42,43,44,45],st=[17,34],ut=[1,54],bt=[1,53],mt=[17,34,36,38],yt={trace:function(){},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:function(X,pt,U,xt,nt,Ot,Nt){var qt=Ot.length-1;switch(nt){case 1:break;case 2:this.$=[];break;case 3:Ot[qt-1].push(Ot[qt]),this.$=Ot[qt-1];break;case 4:case 5:this.$=Ot[qt];break;case 6:case 7:this.$=[];break;case 8:xt.addEntity(Ot[qt-4]),xt.addEntity(Ot[qt-2]),xt.addRelationship(Ot[qt-4],Ot[qt],Ot[qt-2],Ot[qt-3]);break;case 9:xt.addEntity(Ot[qt-3]),xt.addAttributes(Ot[qt-3],Ot[qt-1]);break;case 10:xt.addEntity(Ot[qt-2]);break;case 11:xt.addEntity(Ot[qt]);break;case 12:xt.addEntity(Ot[qt-6],Ot[qt-4]),xt.addAttributes(Ot[qt-6],Ot[qt-1]);break;case 13:xt.addEntity(Ot[qt-5],Ot[qt-3]);break;case 14:xt.addEntity(Ot[qt-3],Ot[qt-1]);break;case 15:case 16:this.$=Ot[qt].trim(),xt.setAccTitle(this.$);break;case 17:case 18:this.$=Ot[qt].trim(),xt.setAccDescription(this.$);break;case 19:case 43:this.$=Ot[qt];break;case 20:case 41:case 42:this.$=Ot[qt].replace(/"/g,"");break;case 21:case 29:this.$=[Ot[qt]];break;case 22:Ot[qt].push(Ot[qt-1]),this.$=Ot[qt];break;case 23:this.$={attributeType:Ot[qt-1],attributeName:Ot[qt]};break;case 24:this.$={attributeType:Ot[qt-2],attributeName:Ot[qt-1],attributeKeyTypeList:Ot[qt]};break;case 25:this.$={attributeType:Ot[qt-2],attributeName:Ot[qt-1],attributeComment:Ot[qt]};break;case 26:this.$={attributeType:Ot[qt-3],attributeName:Ot[qt-2],attributeKeyTypeList:Ot[qt-1],attributeComment:Ot[qt]};break;case 27:case 28:case 31:this.$=Ot[qt];break;case 30:Ot[qt-2].push(Ot[qt]),this.$=Ot[qt-2];break;case 32:this.$=Ot[qt].replace(/"/g,"");break;case 33:this.$={cardA:Ot[qt],relType:Ot[qt-1],cardB:Ot[qt-2]};break;case 34:this.$=xt.Cardinality.ZERO_OR_ONE;break;case 35:this.$=xt.Cardinality.ZERO_OR_MORE;break;case 36:this.$=xt.Cardinality.ONE_OR_MORE;break;case 37:this.$=xt.Cardinality.ONLY_ONE;break;case 38:this.$=xt.Cardinality.MD_PARENT;break;case 39:this.$=xt.Identification.NON_IDENTIFYING;break;case 40:this.$=xt.Identification.IDENTIFYING;break}},table:[{3:1,4:[1,2]},{1:[3]},i(a,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:9,20:f,22:p,24:v,26:m,27:b,28:E},i(a,[2,7],{1:[2,1]}),i(a,[2,3]),{9:16,11:9,20:f,22:p,24:v,26:m,27:b,28:E},i(a,[2,5]),i(a,[2,6]),i(a,[2,11],{12:17,39:20,15:[1,18],18:[1,19],41:_,42:L,43:N,44:B,45:j}),{21:[1,26]},{23:[1,27]},{25:[1,28]},i(a,[2,18]),i(R,[2,19]),i(R,[2,20]),i(a,[2,4]),{11:29,27:b,28:E},{16:30,17:[1,31],29:32,30:33,34:z},{11:35,27:b,28:E},{40:36,46:[1,37],47:[1,38]},i(K,[2,34]),i(K,[2,35]),i(K,[2,36]),i(K,[2,37]),i(K,[2,38]),i(a,[2,15]),i(a,[2,16]),i(a,[2,17]),{13:[1,39]},{17:[1,40]},i(a,[2,10]),{16:41,17:[2,21],29:32,30:33,34:z},{31:42,34:[1,43]},{34:[2,27]},{19:[1,44]},{39:45,41:_,42:L,43:N,44:B,45:j},i(it,[2,39]),i(it,[2,40]),{14:46,27:[1,49],28:[1,48],48:[1,47]},i(a,[2,9]),{17:[2,22]},i(st,[2,23],{32:50,33:51,35:52,37:ut,38:bt}),i([17,34,37,38],[2,28]),i(a,[2,14],{15:[1,55]}),i([27,28],[2,33]),i(a,[2,8]),i(a,[2,41]),i(a,[2,42]),i(a,[2,43]),i(st,[2,24],{33:56,36:[1,57],38:bt}),i(st,[2,25]),i(mt,[2,29]),i(st,[2,32]),i(mt,[2,31]),{16:58,17:[1,59],29:32,30:33,34:z},i(st,[2,26]),{35:60,37:ut},{17:[1,61]},i(a,[2,13]),i(mt,[2,30]),i(a,[2,12])],defaultActions:{34:[2,27],41:[2,22]},parseError:function(X,pt){if(pt.recoverable)this.trace(X);else{var U=new Error(X);throw U.hash=pt,U}},parse:function(X){var pt=this,U=[0],xt=[],nt=[null],Ot=[],Nt=this.table,qt="",Ct=0,Z=0,Tt=2,Ht=1,It=Ot.slice.call(arguments,1),Ft=Object.create(this.lexer),ke={yy:{}};for(var pn in this.yy)Object.prototype.hasOwnProperty.call(this.yy,pn)&&(ke.yy[pn]=this.yy[pn]);Ft.setInput(X,ke.yy),ke.yy.lexer=Ft,ke.yy.parser=this,typeof Ft.yylloc>"u"&&(Ft.yylloc={});var Me=Ft.yylloc;Ot.push(Me);var ve=Ft.options&&Ft.options.ranges;typeof ke.yy.parseError=="function"?this.parseError=ke.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Ge(){var cn;return cn=xt.pop()||Ft.lex()||Ht,typeof cn!="number"&&(cn instanceof Array&&(xt=cn,cn=xt.pop()),cn=pt.symbols_[cn]||cn),cn}for(var Ke,we,_e,$t,re={},ie,Oe,oe,Ne;;){if(we=U[U.length-1],this.defaultActions[we]?_e=this.defaultActions[we]:((Ke===null||typeof Ke>"u")&&(Ke=Ge()),_e=Nt[we]&&Nt[we][Ke]),typeof _e>"u"||!_e.length||!_e[0]){var me="";Ne=[];for(ie in Nt[we])this.terminals_[ie]&&ie>Tt&&Ne.push("'"+this.terminals_[ie]+"'");Ft.showPosition?me="Parse error on line "+(Ct+1)+`:
`+Ft.showPosition()+`
Expecting `+Ne.join(", ")+", got '"+(this.terminals_[Ke]||Ke)+"'":me="Parse error on line "+(Ct+1)+": Unexpected "+(Ke==Ht?"end of input":"'"+(this.terminals_[Ke]||Ke)+"'"),this.parseError(me,{text:Ft.match,token:this.terminals_[Ke]||Ke,line:Ft.yylineno,loc:Me,expected:Ne})}if(_e[0]instanceof Array&&_e.length>1)throw new Error("Parse Error: multiple actions possible at state: "+we+", token: "+Ke);switch(_e[0]){case 1:U.push(Ke),nt.push(Ft.yytext),Ot.push(Ft.yylloc),U.push(_e[1]),Ke=null,Z=Ft.yyleng,qt=Ft.yytext,Ct=Ft.yylineno,Me=Ft.yylloc;break;case 2:if(Oe=this.productions_[_e[1]][1],re.$=nt[nt.length-Oe],re._$={first_line:Ot[Ot.length-(Oe||1)].first_line,last_line:Ot[Ot.length-1].last_line,first_column:Ot[Ot.length-(Oe||1)].first_column,last_column:Ot[Ot.length-1].last_column},ve&&(re._$.range=[Ot[Ot.length-(Oe||1)].range[0],Ot[Ot.length-1].range[1]]),$t=this.performAction.apply(re,[qt,Z,Ct,ke.yy,_e[1],nt,Ot].concat(It)),typeof $t<"u")return $t;Oe&&(U=U.slice(0,-1*Oe*2),nt=nt.slice(0,-1*Oe),Ot=Ot.slice(0,-1*Oe)),U.push(this.productions_[_e[1]][0]),nt.push(re.$),Ot.push(re._$),oe=Nt[U[U.length-2]][U[U.length-1]],U.push(oe);break;case 3:return!0}}return!0}},dt=function(){var wt={EOF:1,parseError:function(pt,U){if(this.yy.parser)this.yy.parser.parseError(pt,U);else throw new Error(pt)},setInput:function(X,pt){return this.yy=pt||this.yy||{},this._input=X,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},input:function(){var X=this._input[0];this.yytext+=X,this.yyleng++,this.offset++,this.match+=X,this.matched+=X;var pt=X.match(/(?:\r\n?|\n).*/g);return pt?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),X},unput:function(X){var pt=X.length,U=X.split(/(?:\r\n?|\n)/g);this._input=X+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-pt),this.offset-=pt;var xt=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),U.length-1&&(this.yylineno-=U.length-1);var nt=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:U?(U.length===xt.length?this.yylloc.first_column:0)+xt[xt.length-U.length].length-U[0].length:this.yylloc.first_column-pt},this.options.ranges&&(this.yylloc.range=[nt[0],nt[0]+this.yyleng-pt]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject: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},less:function(X){this.unput(this.match.slice(X))},pastInput:function(){var X=this.matched.substr(0,this.matched.length-this.match.length);return(X.length>20?"...":"")+X.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var X=this.match;return X.length<20&&(X+=this._input.substr(0,20-X.length)),(X.substr(0,20)+(X.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var X=this.pastInput(),pt=new Array(X.length+1).join("-");return X+this.upcomingInput()+`
`+pt+"^"},test_match:function(X,pt){var U,xt,nt;if(this.options.backtrack_lexer&&(nt={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&&(nt.yylloc.range=this.yylloc.range.slice(0))),xt=X[0].match(/(?:\r\n?|\n).*/g),xt&&(this.yylineno+=xt.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:xt?xt[xt.length-1].length-xt[xt.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+X[0].length},this.yytext+=X[0],this.match+=X[0],this.matches=X,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(X[0].length),this.matched+=X[0],U=this.performAction.call(this,this.yy,this,pt,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),U)return U;if(this._backtrack){for(var Ot in nt)this[Ot]=nt[Ot];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var X,pt,U,xt;this._more||(this.yytext="",this.match="");for(var nt=this._currentRules(),Ot=0;Ot<nt.length;Ot++)if(U=this._input.match(this.rules[nt[Ot]]),U&&(!pt||U[0].length>pt[0].length)){if(pt=U,xt=Ot,this.options.backtrack_lexer){if(X=this.test_match(U,nt[Ot]),X!==!1)return X;if(this._backtrack){pt=!1;continue}else return!1}else if(!this.options.flex)break}return pt?(X=this.test_match(pt,nt[xt]),X!==!1?X:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text.
`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var pt=this.next();return pt||this.lex()},begin:function(pt){this.conditionStack.push(pt)},popState:function(){var pt=this.conditionStack.length-1;return pt>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(pt){return pt=this.conditionStack.length-1-Math.abs(pt||0),pt>=0?this.conditionStack[pt]:"INITIAL"},pushState:function(pt){this.begin(pt)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(pt,U,xt,nt){switch(xt){case 0:return this.begin("acc_title"),22;case 1:return this.popState(),"acc_title_value";case 2:return this.begin("acc_descr"),24;case 3:return this.popState(),"acc_descr_value";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;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;case 22:return U.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 U.yytext[0];case 55:return 6}},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 wt}();yt.lexer=dt;function ht(){this.yy={}}return ht.prototype=yt,yt.Parser=ht,new ht}();O0t.parser=O0t;const P$e=O0t;let hk={},N0t=[];const F$e={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"},B$e={NON_IDENTIFYING:"NON_IDENTIFYING",IDENTIFYING:"IDENTIFYING"},DBt=function(i,a=void 0){return hk[i]===void 0?(hk[i]={attributes:[],alias:a},Ut.info("Added new entity :",i)):hk[i]&&!hk[i].alias&&a&&(hk[i].alias=a,Ut.info(`Add alias '${a}' to entity '${i}'`)),hk[i]},R$e={Cardinality:F$e,Identification:B$e,getConfig:()=>Le().er,addEntity:DBt,addAttributes:function(i,a){let f=DBt(i),p;for(p=a.length-1;p>=0;p--)f.attributes.push(a[p]),Ut.debug("Added attribute ",a[p].attributeName)},getEntities:()=>hk,addRelationship:function(i,a,f,p){let v={entityA:i,roleA:a,entityB:f,relSpec:p};N0t.push(v),Ut.debug("Added new relationship :",v)},getRelationships:()=>N0t,clear:function(){hk={},N0t=[],ap()},setAccTitle:cg,getAccTitle:op,setAccDescription:cp,getAccDescription:up,setDiagramTitle:Z2,getDiagramTitle:Db},um={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"},lm={ERMarkers:um,insertMarkers:function(i,a){let f;i.append("defs").append("marker").attr("id",um.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"),i.append("defs").append("marker").attr("id",um.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"),i.append("defs").append("marker").attr("id",um.ONLY_ONE_START).attr("refX",0).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("stroke",a.stroke).attr("fill","none").attr("d","M9,0 L9,18 M15,0 L15,18"),i.append("defs").append("marker").attr("id",um.ONLY_ONE_END).attr("refX",18).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("stroke",a.stroke).attr("fill","none").attr("d","M3,0 L3,18 M9,0 L9,18"),f=i.append("defs").append("marker").attr("id",um.ZERO_OR_ONE_START).attr("refX",0).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto"),f.append("circle").attr("stroke",a.stroke).attr("fill","white").attr("cx",21).attr("cy",9).attr("r",6),f.append("path").attr("stroke",a.stroke).attr("fill","none").attr("d","M9,0 L9,18"),f=i.append("defs").append("marker").attr("id",um.ZERO_OR_ONE_END).attr("refX",30).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto"),f.append("circle").attr("stroke",a.stroke).attr("fill","white").attr("cx",9).attr("cy",9).attr("r",6),f.append("path").attr("stroke",a.stroke).attr("fill","none").attr("d","M21,0 L21,18"),i.append("defs").append("marker").attr("id",um.ONE_OR_MORE_START).attr("refX",18).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("stroke",a.stroke).attr("fill","none").attr("d","M0,18 Q 18,0 36,18 Q 18,36 0,18 M42,9 L42,27"),i.append("defs").append("marker").attr("id",um.ONE_OR_MORE_END).attr("refX",27).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("stroke",a.stroke).attr("fill","none").attr("d","M3,9 L3,27 M9,18 Q27,0 45,18 Q27,36 9,18"),f=i.append("defs").append("marker").attr("id",um.ZERO_OR_MORE_START).attr("refX",18).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto"),f.append("circle").attr("stroke",a.stroke).attr("fill","white").attr("cx",48).attr("cy",18).attr("r",6),f.append("path").attr("stroke",a.stroke).attr("fill","none").attr("d","M0,18 Q18,0 36,18 Q18,36 0,18"),f=i.append("defs").append("marker").attr("id",um.ZERO_OR_MORE_END).attr("refX",39).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto"),f.append("circle").attr("stroke",a.stroke).attr("fill","white").attr("cx",9).attr("cy",18).attr("r",6),f.append("path").attr("stroke",a.stroke).attr("fill","none").attr("d","M21,18 Q39,0 57,18 Q39,36 21,18")}},j$e=/^(?:[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 $$e(i){return typeof i=="string"&&j$e.test(i)}const Pd=[];for(let i=0;i<256;++i)Pd.push((i+256).toString(16).slice(1));function z$e(i,a=0){return(Pd[i[a+0]]+Pd[i[a+1]]+Pd[i[a+2]]+Pd[i[a+3]]+"-"+Pd[i[a+4]]+Pd[i[a+5]]+"-"+Pd[i[a+6]]+Pd[i[a+7]]+"-"+Pd[i[a+8]]+Pd[i[a+9]]+"-"+Pd[i[a+10]]+Pd[i[a+11]]+Pd[i[a+12]]+Pd[i[a+13]]+Pd[i[a+14]]+Pd[i[a+15]]).toLowerCase()}function q$e(i){if(!$$e(i))throw TypeError("Invalid UUID");let a;const f=new Uint8Array(16);return f[0]=(a=parseInt(i.slice(0,8),16))>>>24,f[1]=a>>>16&255,f[2]=a>>>8&255,f[3]=a&255,f[4]=(a=parseInt(i.slice(9,13),16))>>>8,f[5]=a&255,f[6]=(a=parseInt(i.slice(14,18),16))>>>8,f[7]=a&255,f[8]=(a=parseInt(i.slice(19,23),16))>>>8,f[9]=a&255,f[10]=(a=parseInt(i.slice(24,36),16))/1099511627776&255,f[11]=a/4294967296&255,f[12]=a>>>24&255,f[13]=a>>>16&255,f[14]=a>>>8&255,f[15]=a&255,f}function H$e(i){i=unescape(encodeURIComponent(i));const a=[];for(let f=0;f<i.length;++f)a.push(i.charCodeAt(f));return a}const G$e="6ba7b810-9dad-11d1-80b4-00c04fd430c8",V$e="6ba7b811-9dad-11d1-80b4-00c04fd430c8";function U$e(i,a,f){function p(v,m,b,E){var _;if(typeof v=="string"&&(v=H$e(v)),typeof m=="string"&&(m=q$e(m)),((_=m)===null||_===void 0?void 0:_.length)!==16)throw TypeError("Namespace must be array-like (16 iterable integer values, 0-255)");let L=new Uint8Array(16+v.length);if(L.set(m),L.set(v,m.length),L=f(L),L[6]=L[6]&15|a,L[8]=L[8]&63|128,b){E=E||0;for(let N=0;N<16;++N)b[E+N]=L[N];return b}return z$e(L)}try{p.name=i}catch{}return p.DNS=G$e,p.URL=V$e,p}function W$e(i,a,f,p){switch(i){case 0:return a&f^~a&p;case 1:return a^f^p;case 2:return a&f^a&p^f&p;case 3:return a^f^p}}function P0t(i,a){return i<<a|i>>>32-a}function K$e(i){const a=[1518500249,1859775393,2400959708,3395469782],f=[1732584193,4023233417,2562383102,271733878,3285377520];if(typeof i=="string"){const b=unescape(encodeURIComponent(i));i=[];for(let E=0;E<b.length;++E)i.push(b.charCodeAt(E))}else Array.isArray(i)||(i=Array.prototype.slice.call(i));i.push(128);const p=i.length/4+2,v=Math.ceil(p/16),m=new Array(v);for(let b=0;b<v;++b){const E=new Uint32Array(16);for(let _=0;_<16;++_)E[_]=i[b*64+_*4]<<24|i[b*64+_*4+1]<<16|i[b*64+_*4+2]<<8|i[b*64+_*4+3];m[b]=E}m[v-1][14]=(i.length-1)*8/Math.pow(2,32),m[v-1][14]=Math.floor(m[v-1][14]),m[v-1][15]=(i.length-1)*8&4294967295;for(let b=0;b<v;++b){const E=new Uint32Array(80);for(let R=0;R<16;++R)E[R]=m[b][R];for(let R=16;R<80;++R)E[R]=P0t(E[R-3]^E[R-8]^E[R-14]^E[R-16],1);let _=f[0],L=f[1],N=f[2],B=f[3],j=f[4];for(let R=0;R<80;++R){const z=Math.floor(R/20),K=P0t(_,5)+W$e(z,L,N,B)+j+a[z]+E[R]>>>0;j=B,B=N,N=P0t(L,30)>>>0,L=_,_=K}f[0]=f[0]+_>>>0,f[1]=f[1]+L>>>0,f[2]=f[2]+N>>>0,f[3]=f[3]+B>>>0,f[4]=f[4]+j>>>0}return[f[0]>>24&255,f[0]>>16&255,f[0]>>8&255,f[0]&255,f[1]>>24&255,f[1]>>16&255,f[1]>>8&255,f[1]&255,f[2]>>24&255,f[2]>>16&255,f[2]>>8&255,f[2]&255,f[3]>>24&255,f[3]>>16&255,f[3]>>8&255,f[3]&255,f[4]>>24&255,f[4]>>16&255,f[4]>>8&255,f[4]&255]}const Y$e=U$e("v5",80,K$e),X$e=/[^\dA-Za-z](\W)*/g;let o1={},yP=new Map;const Q$e=function(i){const a=Object.keys(i);for(const f of a)o1[f]=i[f]},Z$e=(i,a,f)=>{const p=o1.entityPadding/3,v=o1.entityPadding/3,m=o1.fontSize*.85,b=a.node().getBBox(),E=[];let _=!1,L=!1,N=0,B=0,j=0,R=0,z=b.height+p*2,K=1;f.forEach(bt=>{bt.attributeKeyTypeList!==void 0&&bt.attributeKeyTypeList.length>0&&(_=!0),bt.attributeComment!==void 0&&(L=!0)}),f.forEach(bt=>{const mt=`${a.node().id}-attr-${K}`;let yt=0;const dt=zN(bt.attributeType),ht=i.append("text").classed("er entityLabel",!0).attr("id",`${mt}-type`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",Le().fontFamily).style("font-size",m+"px").text(dt),wt=i.append("text").classed("er entityLabel",!0).attr("id",`${mt}-name`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",Le().fontFamily).style("font-size",m+"px").text(bt.attributeName),X={};X.tn=ht,X.nn=wt;const pt=ht.node().getBBox(),U=wt.node().getBBox();if(N=Math.max(N,pt.width),B=Math.max(B,U.width),yt=Math.max(pt.height,U.height),_){const xt=bt.attributeKeyTypeList!==void 0?bt.attributeKeyTypeList.join(","):"",nt=i.append("text").classed("er entityLabel",!0).attr("id",`${mt}-key`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",Le().fontFamily).style("font-size",m+"px").text(xt);X.kn=nt;const Ot=nt.node().getBBox();j=Math.max(j,Ot.width),yt=Math.max(yt,Ot.height)}if(L){const xt=i.append("text").classed("er entityLabel",!0).attr("id",`${mt}-comment`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",Le().fontFamily).style("font-size",m+"px").text(bt.attributeComment||"");X.cn=xt;const nt=xt.node().getBBox();R=Math.max(R,nt.width),yt=Math.max(yt,nt.height)}X.height=yt,E.push(X),z+=yt+p*2,K+=1});let it=4;_&&(it+=2),L&&(it+=2);const st=N+B+j+R,ut={width:Math.max(o1.minEntityWidth,Math.max(b.width+o1.entityPadding*2,st+v*it)),height:f.length>0?z:Math.max(o1.minEntityHeight,b.height+o1.entityPadding*2)};if(f.length>0){const bt=Math.max(0,(ut.width-st-v*it)/(it/2));a.attr("transform","translate("+ut.width/2+","+(p+b.height/2)+")");let mt=b.height+p*2,yt="attributeBoxOdd";E.forEach(dt=>{const ht=mt+p+dt.height/2;dt.tn.attr("transform","translate("+v+","+ht+")");const wt=i.insert("rect","#"+dt.tn.node().id).classed(`er ${yt}`,!0).attr("x",0).attr("y",mt).attr("width",N+v*2+bt).attr("height",dt.height+p*2),X=parseFloat(wt.attr("x"))+parseFloat(wt.attr("width"));dt.nn.attr("transform","translate("+(X+v)+","+ht+")");const pt=i.insert("rect","#"+dt.nn.node().id).classed(`er ${yt}`,!0).attr("x",X).attr("y",mt).attr("width",B+v*2+bt).attr("height",dt.height+p*2);let U=parseFloat(pt.attr("x"))+parseFloat(pt.attr("width"));if(_){dt.kn.attr("transform","translate("+(U+v)+","+ht+")");const xt=i.insert("rect","#"+dt.kn.node().id).classed(`er ${yt}`,!0).attr("x",U).attr("y",mt).attr("width",j+v*2+bt).attr("height",dt.height+p*2);U=parseFloat(xt.attr("x"))+parseFloat(xt.attr("width"))}L&&(dt.cn.attr("transform","translate("+(U+v)+","+ht+")"),i.insert("rect","#"+dt.cn.node().id).classed(`er ${yt}`,"true").attr("x",U).attr("y",mt).attr("width",R+v*2+bt).attr("height",dt.height+p*2)),mt+=dt.height+p*2,yt=yt==="attributeBoxOdd"?"attributeBoxEven":"attributeBoxOdd"})}else ut.height=Math.max(o1.minEntityHeight,z),a.attr("transform","translate("+ut.width/2+","+ut.height/2+")");return ut},J$e=function(i,a,f){const p=Object.keys(a);let v;return p.forEach(function(m){const b=sze(m,"entity");yP.set(m,b);const E=i.append("g").attr("id",b);v=v===void 0?b:v;const _="text-"+b,L=E.append("text").classed("er entityLabel",!0).attr("id",_).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","middle").style("font-family",Le().fontFamily).style("font-size",o1.fontSize+"px").text(a[m].alias??m),{width:N,height:B}=Z$e(E,L,a[m].attributes),R=E.insert("rect","#"+_).classed("er entityBox",!0).attr("x",0).attr("y",0).attr("width",N).attr("height",B).node().getBBox();f.setNode(b,{width:R.width,height:R.height,shape:"rect",id:b})}),v},tze=function(i,a){a.nodes().forEach(function(f){f!==void 0&&a.node(f)!==void 0&&i.select("#"+f).attr("transform","translate("+(a.node(f).x-a.node(f).width/2)+","+(a.node(f).y-a.node(f).height/2)+" )")})},OBt=function(i){return(i.entityA+i.roleA+i.entityB).replace(/\s/g,"")},eze=function(i,a){return i.forEach(function(f){a.setEdge(yP.get(f.entityA),yP.get(f.entityB),{relationship:f},OBt(f))}),i};let NBt=0;const nze=function(i,a,f,p,v){NBt++;const m=f.edge(yP.get(a.entityA),yP.get(a.entityB),OBt(a)),b=Z7().x(function(z){return z.x}).y(function(z){return z.y}).curve(FN),E=i.insert("path","#"+p).classed("er relationshipLine",!0).attr("d",b(m.points)).style("stroke",o1.stroke).style("fill","none");a.relSpec.relType===v.db.Identification.NON_IDENTIFYING&&E.attr("stroke-dasharray","8,8");let _="";switch(o1.arrowMarkerAbsolute&&(_=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,_=_.replace(/\(/g,"\\("),_=_.replace(/\)/g,"\\)")),a.relSpec.cardA){case v.db.Cardinality.ZERO_OR_ONE:E.attr("marker-end","url("+_+"#"+lm.ERMarkers.ZERO_OR_ONE_END+")");break;case v.db.Cardinality.ZERO_OR_MORE:E.attr("marker-end","url("+_+"#"+lm.ERMarkers.ZERO_OR_MORE_END+")");break;case v.db.Cardinality.ONE_OR_MORE:E.attr("marker-end","url("+_+"#"+lm.ERMarkers.ONE_OR_MORE_END+")");break;case v.db.Cardinality.ONLY_ONE:E.attr("marker-end","url("+_+"#"+lm.ERMarkers.ONLY_ONE_END+")");break;case v.db.Cardinality.MD_PARENT:E.attr("marker-end","url("+_+"#"+lm.ERMarkers.MD_PARENT_END+")");break}switch(a.relSpec.cardB){case v.db.Cardinality.ZERO_OR_ONE:E.attr("marker-start","url("+_+"#"+lm.ERMarkers.ZERO_OR_ONE_START+")");break;case v.db.Cardinality.ZERO_OR_MORE:E.attr("marker-start","url("+_+"#"+lm.ERMarkers.ZERO_OR_MORE_START+")");break;case v.db.Cardinality.ONE_OR_MORE:E.attr("marker-start","url("+_+"#"+lm.ERMarkers.ONE_OR_MORE_START+")");break;case v.db.Cardinality.ONLY_ONE:E.attr("marker-start","url("+_+"#"+lm.ERMarkers.ONLY_ONE_START+")");break;case v.db.Cardinality.MD_PARENT:E.attr("marker-start","url("+_+"#"+lm.ERMarkers.MD_PARENT_START+")");break}const L=E.node().getTotalLength(),N=E.node().getPointAtLength(L*.5),B="rel"+NBt,R=i.append("text").classed("er relationshipLabel",!0).attr("id",B).attr("x",N.x).attr("y",N.y).style("text-anchor","middle").style("dominant-baseline","middle").style("font-family",Le().fontFamily).style("font-size",o1.fontSize+"px").text(a.roleA).node().getBBox();i.insert("rect","#"+B).classed("er relationshipLabelBox",!0).attr("x",N.x-R.width/2).attr("y",N.y-R.height/2).attr("width",R.width).attr("height",R.height)},rze=function(i,a,f,p){o1=Le().er,Ut.info("Drawing ER diagram");const v=Le().securityLevel;let m;v==="sandbox"&&(m=yr("#i"+a));const E=yr(v==="sandbox"?m.nodes()[0].contentDocument.body:"body").select(`[id='${a}']`);lm.insertMarkers(E,o1);let _;_=new a1({multigraph:!0,directed:!0,compound:!1}).setGraph({rankdir:o1.layoutDirection,marginx:20,marginy:20,nodesep:100,edgesep:100,ranksep:100}).setDefaultEdgeLabel(function(){return{}});const L=J$e(E,p.db.getEntities(),_),N=eze(p.db.getRelationships(),_);eL(_),tze(E,_),N.forEach(function(K){nze(E,K,_,L,p)});const B=o1.diagramPadding;$a.insertTitle(E,"entityTitleText",o1.titleTopMargin,p.db.getDiagramTitle());const j=E.node().getBBox(),R=j.width+B*2,z=j.height+B*2;og(E,z,R,o1.useMaxWidth),E.attr("viewBox",`${j.x-B} ${j.y-B} ${R} ${z}`)},ize="28e9f9db-3c8d-5aa5-9faf-44286ae5937c";function sze(i="",a=""){const f=i.replace(X$e,"");return`${PBt(a)}${PBt(f)}${Y$e(i,ize)}`}function PBt(i=""){return i.length>0?`${i}-`:""}const aze=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:P$e,db:R$e,renderer:{setConf:Q$e,draw:rze},styles:i=>`
  .entityBox {
    fill: ${i.mainBkg};
    stroke: ${i.nodeBorder};
  }

  .attributeBoxOdd {
    fill: ${i.attributeBackgroundColorOdd};
    stroke: ${i.nodeBorder};
  }

  .attributeBoxEven {
    fill:  ${i.attributeBackgroundColorEven};
    stroke: ${i.nodeBorder};
  }

  .relationshipLabelBox {
    fill: ${i.tertiaryColor};
    opacity: 0.7;
    background-color: ${i.tertiaryColor};
      rect {
        opacity: 0.5;
      }
  }

    .relationshipLine {
      stroke: ${i.lineColor};
    }

  .entityTitleText {
    text-anchor: middle;
    font-size: 18px;
    fill: ${i.textColor};
  }    
  #MD_PARENT_START {
    fill: #f5f5f5 !important;
    stroke: ${i.lineColor} !important;
    stroke-width: 1;
  }
  #MD_PARENT_END {
    fill: #f5f5f5 !important;
    stroke: ${i.lineColor} !important;
    stroke-width: 1;
  }
  
`}},Symbol.toStringTag,{value:"Module"}));var F0t=function(){var i=function(yt,dt,ht,wt){for(ht=ht||{},wt=yt.length;wt--;ht[yt[wt]]=dt);return ht},a=[1,3],f=[1,6],p=[1,4],v=[1,5],m=[2,5],b=[1,12],E=[5,7,13,19,21,23,24,26,28,31,36,39,46],_=[7,13,19,21,23,24,26,28,31,36,39],L=[7,12,13,19,21,23,24,26,28,31,36,39],N=[7,13,46],B=[1,42],j=[1,41],R=[7,13,29,32,34,37,46],z=[1,55],K=[1,56],it=[1,57],st=[7,13,32,34,41,46],ut={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,GG:5,document:6,EOF:7,":":8,DIR:9,options:10,body:11,OPT:12,NL:13,line:14,statement:15,commitStatement:16,mergeStatement:17,cherryPickStatement:18,acc_title:19,acc_title_value:20,acc_descr:21,acc_descr_value:22,acc_descr_multiline_value:23,section:24,branchStatement:25,CHECKOUT:26,ref:27,BRANCH:28,ORDER:29,NUM:30,CHERRY_PICK:31,COMMIT_ID:32,STR:33,COMMIT_TAG:34,EMPTYSTR:35,MERGE:36,COMMIT_TYPE:37,commitType:38,COMMIT:39,commit_arg:40,COMMIT_MSG:41,NORMAL:42,REVERSE:43,HIGHLIGHT:44,ID:45,";":46,$accept:0,$end:1},terminals_:{2:"error",5:"GG",7:"EOF",8:":",9:"DIR",12:"OPT",13:"NL",19:"acc_title",20:"acc_title_value",21:"acc_descr",22:"acc_descr_value",23:"acc_descr_multiline_value",24:"section",26:"CHECKOUT",28:"BRANCH",29:"ORDER",30:"NUM",31:"CHERRY_PICK",32:"COMMIT_ID",33:"STR",34:"COMMIT_TAG",35:"EMPTYSTR",36:"MERGE",37:"COMMIT_TYPE",39:"COMMIT",41:"COMMIT_MSG",42:"NORMAL",43:"REVERSE",44:"HIGHLIGHT",45:"ID",46:";"},productions_:[0,[3,2],[3,3],[3,4],[3,5],[6,0],[6,2],[10,2],[10,1],[11,0],[11,2],[14,2],[14,1],[15,1],[15,1],[15,1],[15,2],[15,2],[15,1],[15,1],[15,1],[15,2],[25,2],[25,4],[18,3],[18,5],[18,5],[18,5],[18,5],[17,2],[17,4],[17,4],[17,4],[17,6],[17,6],[17,6],[17,6],[17,6],[17,6],[17,8],[17,8],[17,8],[17,8],[17,8],[17,8],[16,2],[16,3],[16,3],[16,5],[16,5],[16,3],[16,5],[16,5],[16,5],[16,5],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,3],[16,5],[16,5],[16,5],[16,5],[16,5],[16,5],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[40,0],[40,1],[38,1],[38,1],[38,1],[27,1],[27,1],[4,1],[4,1],[4,1]],performAction:function(dt,ht,wt,X,pt,U,xt){var nt=U.length-1;switch(pt){case 2:return U[nt];case 3:return U[nt-1];case 4:return X.setDirection(U[nt-3]),U[nt-1];case 6:X.setOptions(U[nt-1]),this.$=U[nt];break;case 7:U[nt-1]+=U[nt],this.$=U[nt-1];break;case 9:this.$=[];break;case 10:U[nt-1].push(U[nt]),this.$=U[nt-1];break;case 11:this.$=U[nt-1];break;case 16:this.$=U[nt].trim(),X.setAccTitle(this.$);break;case 17:case 18:this.$=U[nt].trim(),X.setAccDescription(this.$);break;case 19:X.addSection(U[nt].substr(8)),this.$=U[nt].substr(8);break;case 21:X.checkout(U[nt]);break;case 22:X.branch(U[nt]);break;case 23:X.branch(U[nt-2],U[nt]);break;case 24:X.cherryPick(U[nt],"",void 0);break;case 25:X.cherryPick(U[nt-2],"",U[nt]);break;case 26:case 28:X.cherryPick(U[nt-2],"","");break;case 27:X.cherryPick(U[nt],"",U[nt-2]);break;case 29:X.merge(U[nt],"","","");break;case 30:X.merge(U[nt-2],U[nt],"","");break;case 31:X.merge(U[nt-2],"",U[nt],"");break;case 32:X.merge(U[nt-2],"","",U[nt]);break;case 33:X.merge(U[nt-4],U[nt],"",U[nt-2]);break;case 34:X.merge(U[nt-4],"",U[nt],U[nt-2]);break;case 35:X.merge(U[nt-4],"",U[nt-2],U[nt]);break;case 36:X.merge(U[nt-4],U[nt-2],U[nt],"");break;case 37:X.merge(U[nt-4],U[nt-2],"",U[nt]);break;case 38:X.merge(U[nt-4],U[nt],U[nt-2],"");break;case 39:X.merge(U[nt-6],U[nt-4],U[nt-2],U[nt]);break;case 40:X.merge(U[nt-6],U[nt],U[nt-4],U[nt-2]);break;case 41:X.merge(U[nt-6],U[nt-4],U[nt],U[nt-2]);break;case 42:X.merge(U[nt-6],U[nt-2],U[nt-4],U[nt]);break;case 43:X.merge(U[nt-6],U[nt],U[nt-2],U[nt-4]);break;case 44:X.merge(U[nt-6],U[nt-2],U[nt],U[nt-4]);break;case 45:X.commit(U[nt]);break;case 46:X.commit("","",X.commitType.NORMAL,U[nt]);break;case 47:X.commit("","",U[nt],"");break;case 48:X.commit("","",U[nt],U[nt-2]);break;case 49:X.commit("","",U[nt-2],U[nt]);break;case 50:X.commit("",U[nt],X.commitType.NORMAL,"");break;case 51:X.commit("",U[nt-2],X.commitType.NORMAL,U[nt]);break;case 52:X.commit("",U[nt],X.commitType.NORMAL,U[nt-2]);break;case 53:X.commit("",U[nt-2],U[nt],"");break;case 54:X.commit("",U[nt],U[nt-2],"");break;case 55:X.commit("",U[nt-4],U[nt-2],U[nt]);break;case 56:X.commit("",U[nt-4],U[nt],U[nt-2]);break;case 57:X.commit("",U[nt-2],U[nt-4],U[nt]);break;case 58:X.commit("",U[nt],U[nt-4],U[nt-2]);break;case 59:X.commit("",U[nt],U[nt-2],U[nt-4]);break;case 60:X.commit("",U[nt-2],U[nt],U[nt-4]);break;case 61:X.commit(U[nt],"",X.commitType.NORMAL,"");break;case 62:X.commit(U[nt],"",X.commitType.NORMAL,U[nt-2]);break;case 63:X.commit(U[nt-2],"",X.commitType.NORMAL,U[nt]);break;case 64:X.commit(U[nt-2],"",U[nt],"");break;case 65:X.commit(U[nt],"",U[nt-2],"");break;case 66:X.commit(U[nt],U[nt-2],X.commitType.NORMAL,"");break;case 67:X.commit(U[nt-2],U[nt],X.commitType.NORMAL,"");break;case 68:X.commit(U[nt-4],"",U[nt-2],U[nt]);break;case 69:X.commit(U[nt-4],"",U[nt],U[nt-2]);break;case 70:X.commit(U[nt-2],"",U[nt-4],U[nt]);break;case 71:X.commit(U[nt],"",U[nt-4],U[nt-2]);break;case 72:X.commit(U[nt],"",U[nt-2],U[nt-4]);break;case 73:X.commit(U[nt-2],"",U[nt],U[nt-4]);break;case 74:X.commit(U[nt-4],U[nt],U[nt-2],"");break;case 75:X.commit(U[nt-4],U[nt-2],U[nt],"");break;case 76:X.commit(U[nt-2],U[nt],U[nt-4],"");break;case 77:X.commit(U[nt],U[nt-2],U[nt-4],"");break;case 78:X.commit(U[nt],U[nt-4],U[nt-2],"");break;case 79:X.commit(U[nt-2],U[nt-4],U[nt],"");break;case 80:X.commit(U[nt-4],U[nt],X.commitType.NORMAL,U[nt-2]);break;case 81:X.commit(U[nt-4],U[nt-2],X.commitType.NORMAL,U[nt]);break;case 82:X.commit(U[nt-2],U[nt],X.commitType.NORMAL,U[nt-4]);break;case 83:X.commit(U[nt],U[nt-2],X.commitType.NORMAL,U[nt-4]);break;case 84:X.commit(U[nt],U[nt-4],X.commitType.NORMAL,U[nt-2]);break;case 85:X.commit(U[nt-2],U[nt-4],X.commitType.NORMAL,U[nt]);break;case 86:X.commit(U[nt-6],U[nt-4],U[nt-2],U[nt]);break;case 87:X.commit(U[nt-6],U[nt-4],U[nt],U[nt-2]);break;case 88:X.commit(U[nt-6],U[nt-2],U[nt-4],U[nt]);break;case 89:X.commit(U[nt-6],U[nt],U[nt-4],U[nt-2]);break;case 90:X.commit(U[nt-6],U[nt-2],U[nt],U[nt-4]);break;case 91:X.commit(U[nt-6],U[nt],U[nt-2],U[nt-4]);break;case 92:X.commit(U[nt-4],U[nt-6],U[nt-2],U[nt]);break;case 93:X.commit(U[nt-4],U[nt-6],U[nt],U[nt-2]);break;case 94:X.commit(U[nt-2],U[nt-6],U[nt-4],U[nt]);break;case 95:X.commit(U[nt],U[nt-6],U[nt-4],U[nt-2]);break;case 96:X.commit(U[nt-2],U[nt-6],U[nt],U[nt-4]);break;case 97:X.commit(U[nt],U[nt-6],U[nt-2],U[nt-4]);break;case 98:X.commit(U[nt],U[nt-4],U[nt-2],U[nt-6]);break;case 99:X.commit(U[nt-2],U[nt-4],U[nt],U[nt-6]);break;case 100:X.commit(U[nt],U[nt-2],U[nt-4],U[nt-6]);break;case 101:X.commit(U[nt-2],U[nt],U[nt-4],U[nt-6]);break;case 102:X.commit(U[nt-4],U[nt-2],U[nt],U[nt-6]);break;case 103:X.commit(U[nt-4],U[nt],U[nt-2],U[nt-6]);break;case 104:X.commit(U[nt-2],U[nt-4],U[nt-6],U[nt]);break;case 105:X.commit(U[nt],U[nt-4],U[nt-6],U[nt-2]);break;case 106:X.commit(U[nt-2],U[nt],U[nt-6],U[nt-4]);break;case 107:X.commit(U[nt],U[nt-2],U[nt-6],U[nt-4]);break;case 108:X.commit(U[nt-4],U[nt-2],U[nt-6],U[nt]);break;case 109:X.commit(U[nt-4],U[nt],U[nt-6],U[nt-2]);break;case 110:this.$="";break;case 111:this.$=U[nt];break;case 112:this.$=X.commitType.NORMAL;break;case 113:this.$=X.commitType.REVERSE;break;case 114:this.$=X.commitType.HIGHLIGHT;break}},table:[{3:1,4:2,5:a,7:f,13:p,46:v},{1:[3]},{3:7,4:2,5:a,7:f,13:p,46:v},{6:8,7:m,8:[1,9],9:[1,10],10:11,13:b},i(E,[2,117]),i(E,[2,118]),i(E,[2,119]),{1:[2,1]},{7:[1,13]},{6:14,7:m,10:11,13:b},{8:[1,15]},i(_,[2,9],{11:16,12:[1,17]}),i(L,[2,8]),{1:[2,2]},{7:[1,18]},{6:19,7:m,10:11,13:b},{7:[2,6],13:[1,22],14:20,15:21,16:23,17:24,18:25,19:[1,26],21:[1,27],23:[1,28],24:[1,29],25:30,26:[1,31],28:[1,35],31:[1,34],36:[1,33],39:[1,32]},i(L,[2,7]),{1:[2,3]},{7:[1,36]},i(_,[2,10]),{4:37,7:f,13:p,46:v},i(_,[2,12]),i(N,[2,13]),i(N,[2,14]),i(N,[2,15]),{20:[1,38]},{22:[1,39]},i(N,[2,18]),i(N,[2,19]),i(N,[2,20]),{27:40,33:B,45:j},i(N,[2,110],{40:43,32:[1,46],33:[1,48],34:[1,44],37:[1,45],41:[1,47]}),{27:49,33:B,45:j},{32:[1,50],34:[1,51]},{27:52,33:B,45:j},{1:[2,4]},i(_,[2,11]),i(N,[2,16]),i(N,[2,17]),i(N,[2,21]),i(R,[2,115]),i(R,[2,116]),i(N,[2,45]),{33:[1,53]},{38:54,42:z,43:K,44:it},{33:[1,58]},{33:[1,59]},i(N,[2,111]),i(N,[2,29],{32:[1,60],34:[1,62],37:[1,61]}),{33:[1,63]},{33:[1,64],35:[1,65]},i(N,[2,22],{29:[1,66]}),i(N,[2,46],{32:[1,68],37:[1,67],41:[1,69]}),i(N,[2,47],{32:[1,71],34:[1,70],41:[1,72]}),i(st,[2,112]),i(st,[2,113]),i(st,[2,114]),i(N,[2,50],{34:[1,73],37:[1,74],41:[1,75]}),i(N,[2,61],{32:[1,78],34:[1,76],37:[1,77]}),{33:[1,79]},{38:80,42:z,43:K,44:it},{33:[1,81]},i(N,[2,24],{34:[1,82]}),{32:[1,83]},{32:[1,84]},{30:[1,85]},{38:86,42:z,43:K,44:it},{33:[1,87]},{33:[1,88]},{33:[1,89]},{33:[1,90]},{33:[1,91]},{33:[1,92]},{38:93,42:z,43:K,44:it},{33:[1,94]},{33:[1,95]},{38:96,42:z,43:K,44:it},{33:[1,97]},i(N,[2,30],{34:[1,99],37:[1,98]}),i(N,[2,31],{32:[1,101],34:[1,100]}),i(N,[2,32],{32:[1,102],37:[1,103]}),{33:[1,104],35:[1,105]},{33:[1,106]},{33:[1,107]},i(N,[2,23]),i(N,[2,48],{32:[1,108],41:[1,109]}),i(N,[2,52],{37:[1,110],41:[1,111]}),i(N,[2,62],{32:[1,113],37:[1,112]}),i(N,[2,49],{32:[1,114],41:[1,115]}),i(N,[2,54],{34:[1,116],41:[1,117]}),i(N,[2,65],{32:[1,119],34:[1,118]}),i(N,[2,51],{37:[1,120],41:[1,121]}),i(N,[2,53],{34:[1,122],41:[1,123]}),i(N,[2,66],{34:[1,125],37:[1,124]}),i(N,[2,63],{32:[1,127],37:[1,126]}),i(N,[2,64],{32:[1,129],34:[1,128]}),i(N,[2,67],{34:[1,131],37:[1,130]}),{38:132,42:z,43:K,44:it},{33:[1,133]},{33:[1,134]},{33:[1,135]},{33:[1,136]},{38:137,42:z,43:K,44:it},i(N,[2,25]),i(N,[2,26]),i(N,[2,27]),i(N,[2,28]),{33:[1,138]},{33:[1,139]},{38:140,42:z,43:K,44:it},{33:[1,141]},{38:142,42:z,43:K,44:it},{33:[1,143]},{33:[1,144]},{33:[1,145]},{33:[1,146]},{33:[1,147]},{33:[1,148]},{33:[1,149]},{38:150,42:z,43:K,44:it},{33:[1,151]},{33:[1,152]},{33:[1,153]},{38:154,42:z,43:K,44:it},{33:[1,155]},{38:156,42:z,43:K,44:it},{33:[1,157]},{33:[1,158]},{33:[1,159]},{38:160,42:z,43:K,44:it},{33:[1,161]},i(N,[2,36],{34:[1,162]}),i(N,[2,37],{37:[1,163]}),i(N,[2,35],{32:[1,164]}),i(N,[2,38],{34:[1,165]}),i(N,[2,33],{37:[1,166]}),i(N,[2,34],{32:[1,167]}),i(N,[2,59],{41:[1,168]}),i(N,[2,72],{32:[1,169]}),i(N,[2,60],{41:[1,170]}),i(N,[2,83],{37:[1,171]}),i(N,[2,73],{32:[1,172]}),i(N,[2,82],{37:[1,173]}),i(N,[2,58],{41:[1,174]}),i(N,[2,71],{32:[1,175]}),i(N,[2,57],{41:[1,176]}),i(N,[2,77],{34:[1,177]}),i(N,[2,70],{32:[1,178]}),i(N,[2,76],{34:[1,179]}),i(N,[2,56],{41:[1,180]}),i(N,[2,84],{37:[1,181]}),i(N,[2,55],{41:[1,182]}),i(N,[2,78],{34:[1,183]}),i(N,[2,79],{34:[1,184]}),i(N,[2,85],{37:[1,185]}),i(N,[2,69],{32:[1,186]}),i(N,[2,80],{37:[1,187]}),i(N,[2,68],{32:[1,188]}),i(N,[2,74],{34:[1,189]}),i(N,[2,75],{34:[1,190]}),i(N,[2,81],{37:[1,191]}),{33:[1,192]},{38:193,42:z,43:K,44:it},{33:[1,194]},{33:[1,195]},{38:196,42:z,43:K,44:it},{33:[1,197]},{33:[1,198]},{33:[1,199]},{33:[1,200]},{38:201,42:z,43:K,44:it},{33:[1,202]},{38:203,42:z,43:K,44:it},{33:[1,204]},{33:[1,205]},{33:[1,206]},{33:[1,207]},{33:[1,208]},{33:[1,209]},{33:[1,210]},{38:211,42:z,43:K,44:it},{33:[1,212]},{33:[1,213]},{33:[1,214]},{38:215,42:z,43:K,44:it},{33:[1,216]},{38:217,42:z,43:K,44:it},{33:[1,218]},{33:[1,219]},{33:[1,220]},{38:221,42:z,43:K,44:it},i(N,[2,39]),i(N,[2,41]),i(N,[2,40]),i(N,[2,42]),i(N,[2,44]),i(N,[2,43]),i(N,[2,100]),i(N,[2,101]),i(N,[2,98]),i(N,[2,99]),i(N,[2,103]),i(N,[2,102]),i(N,[2,107]),i(N,[2,106]),i(N,[2,105]),i(N,[2,104]),i(N,[2,109]),i(N,[2,108]),i(N,[2,97]),i(N,[2,96]),i(N,[2,95]),i(N,[2,94]),i(N,[2,92]),i(N,[2,93]),i(N,[2,91]),i(N,[2,90]),i(N,[2,89]),i(N,[2,88]),i(N,[2,86]),i(N,[2,87])],defaultActions:{7:[2,1],13:[2,2],18:[2,3],36:[2,4]},parseError:function(dt,ht){if(ht.recoverable)this.trace(dt);else{var wt=new Error(dt);throw wt.hash=ht,wt}},parse:function(dt){var ht=this,wt=[0],X=[],pt=[null],U=[],xt=this.table,nt="",Ot=0,Nt=0,qt=2,Ct=1,Z=U.slice.call(arguments,1),Tt=Object.create(this.lexer),Ht={yy:{}};for(var It in this.yy)Object.prototype.hasOwnProperty.call(this.yy,It)&&(Ht.yy[It]=this.yy[It]);Tt.setInput(dt,Ht.yy),Ht.yy.lexer=Tt,Ht.yy.parser=this,typeof Tt.yylloc>"u"&&(Tt.yylloc={});var Ft=Tt.yylloc;U.push(Ft);var ke=Tt.options&&Tt.options.ranges;typeof Ht.yy.parseError=="function"?this.parseError=Ht.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function pn(){var oe;return oe=X.pop()||Tt.lex()||Ct,typeof oe!="number"&&(oe instanceof Array&&(X=oe,oe=X.pop()),oe=ht.symbols_[oe]||oe),oe}for(var Me,ve,Ge,Ke,we={},_e,$t,re,ie;;){if(ve=wt[wt.length-1],this.defaultActions[ve]?Ge=this.defaultActions[ve]:((Me===null||typeof Me>"u")&&(Me=pn()),Ge=xt[ve]&&xt[ve][Me]),typeof Ge>"u"||!Ge.length||!Ge[0]){var Oe="";ie=[];for(_e in xt[ve])this.terminals_[_e]&&_e>qt&&ie.push("'"+this.terminals_[_e]+"'");Tt.showPosition?Oe="Parse error on line "+(Ot+1)+`:
`+Tt.showPosition()+`
Expecting `+ie.join(", ")+", got '"+(this.terminals_[Me]||Me)+"'":Oe="Parse error on line "+(Ot+1)+": Unexpected "+(Me==Ct?"end of input":"'"+(this.terminals_[Me]||Me)+"'"),this.parseError(Oe,{text:Tt.match,token:this.terminals_[Me]||Me,line:Tt.yylineno,loc:Ft,expected:ie})}if(Ge[0]instanceof Array&&Ge.length>1)throw new Error("Parse Error: multiple actions possible at state: "+ve+", token: "+Me);switch(Ge[0]){case 1:wt.push(Me),pt.push(Tt.yytext),U.push(Tt.yylloc),wt.push(Ge[1]),Me=null,Nt=Tt.yyleng,nt=Tt.yytext,Ot=Tt.yylineno,Ft=Tt.yylloc;break;case 2:if($t=this.productions_[Ge[1]][1],we.$=pt[pt.length-$t],we._$={first_line:U[U.length-($t||1)].first_line,last_line:U[U.length-1].last_line,first_column:U[U.length-($t||1)].first_column,last_column:U[U.length-1].last_column},ke&&(we._$.range=[U[U.length-($t||1)].range[0],U[U.length-1].range[1]]),Ke=this.performAction.apply(we,[nt,Nt,Ot,Ht.yy,Ge[1],pt,U].concat(Z)),typeof Ke<"u")return Ke;$t&&(wt=wt.slice(0,-1*$t*2),pt=pt.slice(0,-1*$t),U=U.slice(0,-1*$t)),wt.push(this.productions_[Ge[1]][0]),pt.push(we.$),U.push(we._$),re=xt[wt[wt.length-2]][wt[wt.length-1]],wt.push(re);break;case 3:return!0}}return!0}},bt=function(){var yt={EOF:1,parseError:function(ht,wt){if(this.yy.parser)this.yy.parser.parseError(ht,wt);else throw new Error(ht)},setInput:function(dt,ht){return this.yy=ht||this.yy||{},this._input=dt,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},input:function(){var dt=this._input[0];this.yytext+=dt,this.yyleng++,this.offset++,this.match+=dt,this.matched+=dt;var ht=dt.match(/(?:\r\n?|\n).*/g);return ht?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),dt},unput:function(dt){var ht=dt.length,wt=dt.split(/(?:\r\n?|\n)/g);this._input=dt+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-ht),this.offset-=ht;var X=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),wt.length-1&&(this.yylineno-=wt.length-1);var pt=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:wt?(wt.length===X.length?this.yylloc.first_column:0)+X[X.length-wt.length].length-wt[0].length:this.yylloc.first_column-ht},this.options.ranges&&(this.yylloc.range=[pt[0],pt[0]+this.yyleng-ht]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject: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},less:function(dt){this.unput(this.match.slice(dt))},pastInput:function(){var dt=this.matched.substr(0,this.matched.length-this.match.length);return(dt.length>20?"...":"")+dt.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var dt=this.match;return dt.length<20&&(dt+=this._input.substr(0,20-dt.length)),(dt.substr(0,20)+(dt.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var dt=this.pastInput(),ht=new Array(dt.length+1).join("-");return dt+this.upcomingInput()+`
`+ht+"^"},test_match:function(dt,ht){var wt,X,pt;if(this.options.backtrack_lexer&&(pt={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&&(pt.yylloc.range=this.yylloc.range.slice(0))),X=dt[0].match(/(?:\r\n?|\n).*/g),X&&(this.yylineno+=X.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:X?X[X.length-1].length-X[X.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+dt[0].length},this.yytext+=dt[0],this.match+=dt[0],this.matches=dt,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(dt[0].length),this.matched+=dt[0],wt=this.performAction.call(this,this.yy,this,ht,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),wt)return wt;if(this._backtrack){for(var U in pt)this[U]=pt[U];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var dt,ht,wt,X;this._more||(this.yytext="",this.match="");for(var pt=this._currentRules(),U=0;U<pt.length;U++)if(wt=this._input.match(this.rules[pt[U]]),wt&&(!ht||wt[0].length>ht[0].length)){if(ht=wt,X=U,this.options.backtrack_lexer){if(dt=this.test_match(wt,pt[U]),dt!==!1)return dt;if(this._backtrack){ht=!1;continue}else return!1}else if(!this.options.flex)break}return ht?(dt=this.test_match(ht,pt[X]),dt!==!1?dt:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text.
`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var ht=this.next();return ht||this.lex()},begin:function(ht){this.conditionStack.push(ht)},popState:function(){var ht=this.conditionStack.length-1;return ht>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(ht){return ht=this.conditionStack.length-1-Math.abs(ht||0),ht>=0?this.conditionStack[ht]:"INITIAL"},pushState:function(ht){this.begin(ht)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(ht,wt,X,pt){switch(X){case 0:return this.begin("acc_title"),19;case 1:return this.popState(),"acc_title_value";case 2:return this.begin("acc_descr"),21;case 3:return this.popState(),"acc_descr_value";case 4:this.begin("acc_descr_multiline");break;case 5:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:return 13;case 8:break;case 9:break;case 10:return 5;case 11:return 39;case 12:return 32;case 13:return 37;case 14:return 41;case 15:return 42;case 16:return 43;case 17:return 44;case 18:return 34;case 19:return 28;case 20:return 29;case 21:return 36;case 22:return 31;case 23:return 26;case 24:return 9;case 25:return 9;case 26:return 8;case 27:return"CARET";case 28:this.begin("options");break;case 29:this.popState();break;case 30:return 12;case 31:return 35;case 32:this.begin("string");break;case 33:this.popState();break;case 34:return 33;case 35:return 30;case 36:return 45;case 37:return 7}},rules:[/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:(\r?\n)+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:gitGraph\b)/i,/^(?:commit(?=\s|$))/i,/^(?:id:)/i,/^(?:type:)/i,/^(?:msg:)/i,/^(?:NORMAL\b)/i,/^(?:REVERSE\b)/i,/^(?:HIGHLIGHT\b)/i,/^(?:tag:)/i,/^(?:branch(?=\s|$))/i,/^(?:order:)/i,/^(?:merge(?=\s|$))/i,/^(?:cherry-pick(?=\s|$))/i,/^(?:checkout(?=\s|$))/i,/^(?:LR\b)/i,/^(?:TB\b)/i,/^(?::)/i,/^(?:\^)/i,/^(?:options\r?\n)/i,/^(?:[ \r\n\t]+end\b)/i,/^(?:[\s\S]+(?=[ \r\n\t]+end))/i,/^(?:["]["])/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[0-9]+(?=\s|$))/i,/^(?:\w([-\./\w]*[-\w])?)/i,/^(?:$)/i,/^(?:\s+)/i],conditions:{acc_descr_multiline:{rules:[5,6],inclusive:!1},acc_descr:{rules:[3],inclusive:!1},acc_title:{rules:[1],inclusive:!1},options:{rules:[29,30],inclusive:!1},string:{rules:[33,34],inclusive:!1},INITIAL:{rules:[0,2,4,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,31,32,35,36,37,38],inclusive:!0}}};return yt}();ut.lexer=bt;function mt(){this.yy={}}return mt.prototype=ut,ut.Parser=mt,new mt}();F0t.parser=F0t;const oze=F0t;let yK=Le().gitGraph.mainBranchName,cze=Le().gitGraph.mainBranchOrder,c1={},hg=null,xP={};xP[yK]={name:yK,order:cze};let Pf={};Pf[yK]=hg;let X1=yK,FBt="LR",yT=0;function B0t(){return GDt({length:7})}function uze(i,a){const f=Object.create(null);return i.reduce((p,v)=>{const m=a(v);return f[m]||(f[m]=!0,p.push(v)),p},[])}const lze=function(i){FBt=i};let BBt={};const hze=function(i){Ut.debug("options str",i),i=i&&i.trim(),i=i||"{}";try{BBt=JSON.parse(i)}catch(a){Ut.error("error while parsing gitGraph options",a.message)}},fze=function(){return BBt},dze=function(i,a,f,p){Ut.debug("Entering commit:",i,a,f,p),a=Yr.sanitizeText(a,Le()),i=Yr.sanitizeText(i,Le()),p=Yr.sanitizeText(p,Le());const v={id:a||yT+"-"+B0t(),message:i,seq:yT++,type:f||kP.NORMAL,tag:p||"",parents:hg==null?[]:[hg.id],branch:X1};hg=v,c1[v.id]=v,Pf[X1]=v.id,Ut.debug("in pushCommit "+v.id)},gze=function(i,a){if(i=Yr.sanitizeText(i,Le()),Pf[i]===void 0)Pf[i]=hg!=null?hg.id:null,xP[i]={name:i,order:a?parseInt(a,10):null},RBt(i),Ut.debug("in createBranch");else{let f=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 '+i+'")');throw f.hash={text:"branch "+i,token:"branch "+i,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:['"checkout '+i+'"']},f}},pze=function(i,a,f,p){i=Yr.sanitizeText(i,Le()),a=Yr.sanitizeText(a,Le());const v=c1[Pf[X1]],m=c1[Pf[i]];if(X1===i){let E=new Error('Incorrect usage of "merge". Cannot merge a branch to itself');throw E.hash={text:"merge "+i,token:"merge "+i,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["branch abc"]},E}else if(v===void 0||!v){let E=new Error('Incorrect usage of "merge". Current branch ('+X1+")has no commits");throw E.hash={text:"merge "+i,token:"merge "+i,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["commit"]},E}else if(Pf[i]===void 0){let E=new Error('Incorrect usage of "merge". Branch to be merged ('+i+") does not exist");throw E.hash={text:"merge "+i,token:"merge "+i,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["branch "+i]},E}else if(m===void 0||!m){let E=new Error('Incorrect usage of "merge". Branch to be merged ('+i+") has no commits");throw E.hash={text:"merge "+i,token:"merge "+i,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:['"commit"']},E}else if(v===m){let E=new Error('Incorrect usage of "merge". Both branches have same head');throw E.hash={text:"merge "+i,token:"merge "+i,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["branch abc"]},E}else if(a&&c1[a]!==void 0){let E=new Error('Incorrect usage of "merge". Commit with id:'+a+" already exists, use different custom Id");throw E.hash={text:"merge "+i+a+f+p,token:"merge "+i+a+f+p,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["merge "+i+" "+a+"_UNIQUE "+f+" "+p]},E}const b={id:a||yT+"-"+B0t(),message:"merged branch "+i+" into "+X1,seq:yT++,parents:[hg==null?null:hg.id,Pf[i]],branch:X1,type:kP.MERGE,customType:f,customId:!!a,tag:p||""};hg=b,c1[b.id]=b,Pf[X1]=b.id,Ut.debug(Pf),Ut.debug("in mergeBranch")},bze=function(i,a,f){if(Ut.debug("Entering cherryPick:",i,a,f),i=Yr.sanitizeText(i,Le()),a=Yr.sanitizeText(a,Le()),f=Yr.sanitizeText(f,Le()),!i||c1[i]===void 0){let m=new Error('Incorrect usage of "cherryPick". Source commit id should exist and provided');throw m.hash={text:"cherryPick "+i+" "+a,token:"cherryPick "+i+" "+a,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["cherry-pick abc"]},m}let p=c1[i],v=p.branch;if(p.type===kP.MERGE){let m=new Error('Incorrect usage of "cherryPick". Source commit should not be a merge commit');throw m.hash={text:"cherryPick "+i+" "+a,token:"cherryPick "+i+" "+a,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["cherry-pick abc"]},m}if(!a||c1[a]===void 0){if(v===X1){let E=new Error('Incorrect usage of "cherryPick". Source commit is already on current branch');throw E.hash={text:"cherryPick "+i+" "+a,token:"cherryPick "+i+" "+a,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["cherry-pick abc"]},E}const m=c1[Pf[X1]];if(m===void 0||!m){let E=new Error('Incorrect usage of "cherry-pick". Current branch ('+X1+")has no commits");throw E.hash={text:"cherryPick "+i+" "+a,token:"cherryPick "+i+" "+a,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["cherry-pick abc"]},E}const b={id:yT+"-"+B0t(),message:"cherry-picked "+p+" into "+X1,seq:yT++,parents:[hg==null?null:hg.id,p.id],branch:X1,type:kP.CHERRY_PICK,tag:f??"cherry-pick:"+p.id};hg=b,c1[b.id]=b,Pf[X1]=b.id,Ut.debug(Pf),Ut.debug("in cherryPick")}},RBt=function(i){if(i=Yr.sanitizeText(i,Le()),Pf[i]===void 0){let a=new Error('Trying to checkout branch which is not yet created. (Help try using "branch '+i+'")');throw a.hash={text:"checkout "+i,token:"checkout "+i,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:['"branch '+i+'"']},a}else{X1=i;const a=Pf[X1];hg=c1[a]}};function jBt(i,a,f){const p=i.indexOf(a);p===-1?i.push(f):i.splice(p,1,f)}function $Bt(i){const a=i.reduce((v,m)=>v.seq>m.seq?v:m,i[0]);let f="";i.forEach(function(v){v===a?f+="	*":f+="	|"});const p=[f,a.id,a.seq];for(let v in Pf)Pf[v]===a.id&&p.push(v);if(Ut.debug(p.join(" ")),a.parents&&a.parents.length==2){const v=c1[a.parents[0]];jBt(i,a,v),i.push(c1[a.parents[1]])}else{if(a.parents.length==0)return;{const v=c1[a.parents];jBt(i,a,v)}}i=uze(i,v=>v.id),$Bt(i)}const vze=function(){Ut.debug(c1);const i=zBt()[0];$Bt([i])},wze=function(){c1={},hg=null;let i=Le().gitGraph.mainBranchName,a=Le().gitGraph.mainBranchOrder;Pf={},Pf[i]=null,xP={},xP[i]={name:i,order:a},X1=i,yT=0,ap()},mze=function(){return Object.values(xP).map((a,f)=>a.order!==null?a:{...a,order:parseFloat(`0.${f}`,10)}).sort((a,f)=>a.order-f.order).map(({name:a})=>({name:a}))},yze=function(){return Pf},xze=function(){return c1},zBt=function(){const i=Object.keys(c1).map(function(a){return c1[a]});return i.forEach(function(a){Ut.debug(a.id)}),i.sort((a,f)=>a.seq-f.seq),i},kze=function(){return X1},Eze=function(){return FBt},Tze=function(){return hg},kP={NORMAL:0,REVERSE:1,HIGHLIGHT:2,MERGE:3,CHERRY_PICK:4},Cze={getConfig:()=>Le().gitGraph,setDirection:lze,setOptions:hze,getOptions:fze,commit:dze,branch:gze,merge:pze,cherryPick:bze,checkout:RBt,prettyPrint:vze,clear:wze,getBranchesAsObjArray:mze,getBranches:yze,getCommits:xze,getCommitsArray:zBt,getCurrentBranch:kze,getDirection:Eze,getHead:Tze,setAccTitle:cg,getAccTitle:op,getAccDescription:up,setAccDescription:cp,setDiagramTitle:Z2,getDiagramTitle:Db,commitType:kP};let EP={};const Fb={NORMAL:0,REVERSE:1,HIGHLIGHT:2,MERGE:3,CHERRY_PICK:4},xT=8;let Q1={},TP={},xK=[],CP=0,y0="LR";const _ze=()=>{Q1={},TP={},EP={},CP=0,xK=[],y0="LR"},qBt=i=>{const a=document.createElementNS("http://www.w3.org/2000/svg","text");let f=[];typeof i=="string"?f=i.split(/\\n|\n|<br\s*\/?>/gi):Array.isArray(i)?f=i:f=[];for(const p of f){const v=document.createElementNS("http://www.w3.org/2000/svg","tspan");v.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),v.setAttribute("dy","1em"),v.setAttribute("x","0"),v.setAttribute("class","row"),v.textContent=p.trim(),a.appendChild(v)}return a},HBt=(i,a,f)=>{const p=JN().gitGraph,v=i.append("g").attr("class","commit-bullets"),m=i.append("g").attr("class","commit-labels");let b=0;y0==="TB"&&(b=30),Object.keys(a).sort((L,N)=>a[L].seq-a[N].seq).forEach(L=>{const N=a[L],B=y0==="TB"?b+10:Q1[N.branch].pos,j=y0==="TB"?Q1[N.branch].pos:b+10;if(f){let R,z=N.customType!==void 0&&N.customType!==""?N.customType:N.type;switch(z){case Fb.NORMAL:R="commit-normal";break;case Fb.REVERSE:R="commit-reverse";break;case Fb.HIGHLIGHT:R="commit-highlight";break;case Fb.MERGE:R="commit-merge";break;case Fb.CHERRY_PICK:R="commit-cherry-pick";break;default:R="commit-normal"}if(z===Fb.HIGHLIGHT){const K=v.append("rect");K.attr("x",j-10),K.attr("y",B-10),K.attr("height",20),K.attr("width",20),K.attr("class",`commit ${N.id} commit-highlight${Q1[N.branch].index%xT} ${R}-outer`),v.append("rect").attr("x",j-6).attr("y",B-6).attr("height",12).attr("width",12).attr("class",`commit ${N.id} commit${Q1[N.branch].index%xT} ${R}-inner`)}else if(z===Fb.CHERRY_PICK)v.append("circle").attr("cx",j).attr("cy",B).attr("r",10).attr("class",`commit ${N.id} ${R}`),v.append("circle").attr("cx",j-3).attr("cy",B+2).attr("r",2.75).attr("fill","#fff").attr("class",`commit ${N.id} ${R}`),v.append("circle").attr("cx",j+3).attr("cy",B+2).attr("r",2.75).attr("fill","#fff").attr("class",`commit ${N.id} ${R}`),v.append("line").attr("x1",j+3).attr("y1",B+1).attr("x2",j).attr("y2",B-5).attr("stroke","#fff").attr("class",`commit ${N.id} ${R}`),v.append("line").attr("x1",j-3).attr("y1",B+1).attr("x2",j).attr("y2",B-5).attr("stroke","#fff").attr("class",`commit ${N.id} ${R}`);else{const K=v.append("circle");if(K.attr("cx",j),K.attr("cy",B),K.attr("r",N.type===Fb.MERGE?9:10),K.attr("class",`commit ${N.id} commit${Q1[N.branch].index%xT}`),z===Fb.MERGE){const it=v.append("circle");it.attr("cx",j),it.attr("cy",B),it.attr("r",6),it.attr("class",`commit ${R} ${N.id} commit${Q1[N.branch].index%xT}`)}z===Fb.REVERSE&&v.append("path").attr("d",`M ${j-5},${B-5}L${j+5},${B+5}M${j-5},${B+5}L${j+5},${B-5}`).attr("class",`commit ${R} ${N.id} commit${Q1[N.branch].index%xT}`)}}if(y0==="TB"?TP[N.id]={x:j,y:b+10}:TP[N.id]={x:b+10,y:B},f){if(N.type!==Fb.CHERRY_PICK&&(N.customId&&N.type===Fb.MERGE||N.type!==Fb.MERGE)&&p.showCommitLabel){const K=m.append("g"),it=K.insert("rect").attr("class","commit-label-bkg"),st=K.append("text").attr("x",b).attr("y",B+25).attr("class","commit-label").text(N.id);let ut=st.node().getBBox();if(it.attr("x",b+10-ut.width/2-2).attr("y",B+13.5).attr("width",ut.width+2*2).attr("height",ut.height+2*2),y0==="TB"&&(it.attr("x",j-(ut.width+4*4+5)).attr("y",B-12),st.attr("x",j-(ut.width+4*4)).attr("y",B+ut.height-12)),y0!=="TB"&&st.attr("x",b+10-ut.width/2),p.rotateCommitLabel)if(y0==="TB")st.attr("transform","rotate(-45, "+j+", "+B+")"),it.attr("transform","rotate(-45, "+j+", "+B+")");else{let bt=-7.5-(ut.width+10)/25*9.5,mt=10+ut.width/25*8.5;K.attr("transform","translate("+bt+", "+mt+") rotate(-45, "+b+", "+B+")")}}if(N.tag){const K=m.insert("polygon"),it=m.append("circle"),st=m.append("text").attr("y",B-16).attr("class","tag-label").text(N.tag);let ut=st.node().getBBox();st.attr("x",b+10-ut.width/2);const bt=ut.height/2,mt=B-19.2;K.attr("class","tag-label-bkg").attr("points",`
          ${b-ut.width/2-4/2},${mt+2}
          ${b-ut.width/2-4/2},${mt-2}
          ${b+10-ut.width/2-4},${mt-bt-2}
          ${b+10+ut.width/2+4},${mt-bt-2}
          ${b+10+ut.width/2+4},${mt+bt+2}
          ${b+10-ut.width/2-4},${mt+bt+2}`),it.attr("cx",b-ut.width/2+4/2).attr("cy",mt).attr("r",1.5).attr("class","tag-hole"),y0==="TB"&&(K.attr("class","tag-label-bkg").attr("points",`
            ${j},${b+2}
            ${j},${b-2}
            ${j+10},${b-bt-2}
            ${j+10+ut.width+4},${b-bt-2}
            ${j+10+ut.width+4},${b+bt+2}
            ${j+10},${b+bt+2}`).attr("transform","translate(12,12) rotate(45, "+j+","+b+")"),it.attr("cx",j+4/2).attr("cy",b).attr("transform","translate(12,12) rotate(45, "+j+","+b+")"),st.attr("x",j+5).attr("y",b+3).attr("transform","translate(14,14) rotate(45, "+j+","+b+")"))}}b+=50,b>CP&&(CP=b)})},Sze=(i,a,f)=>Object.keys(f).filter(m=>f[m].branch===a.branch&&f[m].seq>i.seq&&f[m].seq<a.seq).length>0,_P=(i,a,f=0)=>{const p=i+Math.abs(i-a)/2;if(f>5)return p;if(xK.every(b=>Math.abs(b-p)>=10))return xK.push(p),p;const m=Math.abs(i-a);return _P(i,a-m/5,f+1)},Aze=(i,a,f,p)=>{const v=TP[a.id],m=TP[f.id],b=Sze(a,f,p);let E="",_="",L=0,N=0,B=Q1[f.branch].index,j;if(b){E="A 10 10, 0, 0, 0,",_="A 10 10, 0, 0, 1,",L=10,N=10,B=Q1[f.branch].index;const R=v.y<m.y?_P(v.y,m.y):_P(m.y,v.y),z=v.x<m.x?_P(v.x,m.x):_P(m.x,v.x);y0==="TB"?v.x<m.x?j=`M ${v.x} ${v.y} L ${z-L} ${v.y} ${_} ${z} ${v.y+N} L ${z} ${m.y-L} ${E} ${z+N} ${m.y} L ${m.x} ${m.y}`:j=`M ${v.x} ${v.y} L ${z+L} ${v.y} ${E} ${z} ${v.y+N} L ${z} ${m.y-L} ${_} ${z-N} ${m.y} L ${m.x} ${m.y}`:v.y<m.y?j=`M ${v.x} ${v.y} L ${v.x} ${R-L} ${E} ${v.x+N} ${R} L ${m.x-L} ${R} ${_} ${m.x} ${R+N} L ${m.x} ${m.y}`:j=`M ${v.x} ${v.y} L ${v.x} ${R+L} ${_} ${v.x+N} ${R} L ${m.x-L} ${R} ${E} ${m.x} ${R-N} L ${m.x} ${m.y}`}else y0==="TB"?(v.x<m.x&&(E="A 20 20, 0, 0, 0,",_="A 20 20, 0, 0, 1,",L=20,N=20,B=Q1[f.branch].index,j=`M ${v.x} ${v.y} L ${m.x-L} ${v.y} ${_} ${m.x} ${v.y+N} L ${m.x} ${m.y}`),v.x>m.x&&(E="A 20 20, 0, 0, 0,",_="A 20 20, 0, 0, 1,",L=20,N=20,B=Q1[a.branch].index,j=`M ${v.x} ${v.y} L ${v.x} ${m.y-L} ${_} ${v.x-N} ${m.y} L ${m.x} ${m.y}`),v.x===m.x&&(B=Q1[a.branch].index,j=`M ${v.x} ${v.y} L ${v.x+L} ${v.y} ${E} ${v.x+N} ${m.y+L} L ${m.x} ${m.y}`)):(v.y<m.y&&(E="A 20 20, 0, 0, 0,",L=20,N=20,B=Q1[f.branch].index,j=`M ${v.x} ${v.y} L ${v.x} ${m.y-L} ${E} ${v.x+N} ${m.y} L ${m.x} ${m.y}`),v.y>m.y&&(E="A 20 20, 0, 0, 0,",L=20,N=20,B=Q1[a.branch].index,j=`M ${v.x} ${v.y} L ${m.x-L} ${v.y} ${E} ${m.x} ${v.y-N} L ${m.x} ${m.y}`),v.y===m.y&&(B=Q1[a.branch].index,j=`M ${v.x} ${v.y} L ${v.x} ${m.y-L} ${E} ${v.x+N} ${m.y} L ${m.x} ${m.y}`));i.append("path").attr("d",j).attr("class","arrow arrow"+B%xT)},Lze=(i,a)=>{const f=i.append("g").attr("class","commit-arrows");Object.keys(a).forEach(p=>{const v=a[p];v.parents&&v.parents.length>0&&v.parents.forEach(m=>{Aze(f,a[m],v,a)})})},Mze=(i,a)=>{const f=JN().gitGraph,p=i.append("g");a.forEach((v,m)=>{const b=m%xT,E=Q1[v.name].pos,_=p.append("line");_.attr("x1",0),_.attr("y1",E),_.attr("x2",CP),_.attr("y2",E),_.attr("class","branch branch"+b),y0==="TB"&&(_.attr("y1",30),_.attr("x1",E),_.attr("y2",CP),_.attr("x2",E)),xK.push(E);let L=v.name;const N=qBt(L),B=p.insert("rect"),R=p.insert("g").attr("class","branchLabel").insert("g").attr("class","label branch-label"+b);R.node().appendChild(N);let z=N.getBBox();B.attr("class","branchLabelBkg label"+b).attr("rx",4).attr("ry",4).attr("x",-z.width-4-(f.rotateCommitLabel===!0?30:0)).attr("y",-z.height/2+8).attr("width",z.width+18).attr("height",z.height+4),R.attr("transform","translate("+(-z.width-14-(f.rotateCommitLabel===!0?30:0))+", "+(E-z.height/2-1)+")"),y0==="TB"&&(B.attr("x",E-z.width/2-10).attr("y",0),R.attr("transform","translate("+(E-z.width/2-5)+", 0)")),y0!=="TB"&&B.attr("transform","translate(-19, "+(E-z.height/2)+")")})},Ize=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:oze,db:Cze,renderer:{draw:function(i,a,f,p){_ze();const v=JN(),m=v.gitGraph;Ut.debug("in gitgraph renderer",i+`
`,"id:",a,f),EP=p.db.getCommits();const b=p.db.getBranchesAsObjArray();y0=p.db.getDirection();const E=yr(`[id="${a}"]`);let _=0;b.forEach((L,N)=>{const B=qBt(L.name),j=E.append("g"),R=j.insert("g").attr("class","branchLabel"),z=R.insert("g").attr("class","label branch-label");z.node().appendChild(B);let K=B.getBBox();Q1[L.name]={pos:_,index:N},_+=50+(m.rotateCommitLabel?40:0)+(y0==="TB"?K.width/2:0),z.remove(),R.remove(),j.remove()}),HBt(E,EP,!1),m.showBranches&&Mze(E,b),Lze(E,EP),HBt(E,EP,!0),$a.insertTitle(E,"gitTitleText",m.titleTopMargin,p.db.getDiagramTitle()),MOt(void 0,E,m.diagramPadding,m.useMaxWidth??v.useMaxWidth)}},styles:i=>`
  .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(a=>`
        .branch-label${a} { fill: ${i["gitBranchLabel"+a]}; }
        .commit${a} { stroke: ${i["git"+a]}; fill: ${i["git"+a]}; }
        .commit-highlight${a} { stroke: ${i["gitInv"+a]}; fill: ${i["gitInv"+a]}; }
        .label${a}  { fill: ${i["git"+a]}; }
        .arrow${a} { stroke: ${i["git"+a]}; }
        `).join(`
`)}

  .branch {
    stroke-width: 1;
    stroke: ${i.lineColor};
    stroke-dasharray: 2;
  }
  .commit-label { font-size: ${i.commitLabelFontSize}; fill: ${i.commitLabelColor};}
  .commit-label-bkg { font-size: ${i.commitLabelFontSize}; fill: ${i.commitLabelBackground}; opacity: 0.5; }
  .tag-label { font-size: ${i.tagLabelFontSize}; fill: ${i.tagLabelColor};}
  .tag-label-bkg { fill: ${i.tagLabelBackground}; stroke: ${i.tagLabelBorder}; }
  .tag-hole { fill: ${i.textColor}; }

  .commit-merge {
    stroke: ${i.primaryColor};
    fill: ${i.primaryColor};
  }
  .commit-reverse {
    stroke: ${i.primaryColor};
    fill: ${i.primaryColor};
    stroke-width: 3;
  }
  .commit-highlight-outer {
  }
  .commit-highlight-inner {
    stroke: ${i.primaryColor};
    fill: ${i.primaryColor};
  }

  .arrow { stroke-width: 8; stroke-linecap: round; fill: none}
  .gitTitleText {
    text-anchor: middle;
    font-size: 18px;
    fill: ${i.textColor};
  }
`}},Symbol.toStringTag,{value:"Module"}));var R0t=function(){var i=function(U,xt,nt,Ot){for(nt=nt||{},Ot=U.length;Ot--;nt[U[Ot]]=xt);return nt},a=[6,8,10,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,30,32,33,35,37],f=[1,25],p=[1,26],v=[1,27],m=[1,28],b=[1,29],E=[1,30],_=[1,31],L=[1,9],N=[1,10],B=[1,11],j=[1,12],R=[1,13],z=[1,14],K=[1,15],it=[1,16],st=[1,18],ut=[1,19],bt=[1,20],mt=[1,21],yt=[1,22],dt=[1,24],ht=[1,32],wt={trace:function(){},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,dateFormat:19,inclusiveEndDates:20,topAxis:21,axisFormat:22,tickInterval:23,excludes:24,includes:25,todayMarker:26,title:27,acc_title:28,acc_title_value:29,acc_descr:30,acc_descr_value:31,acc_descr_multiline_value:32,section:33,clickStatement:34,taskTxt:35,taskData:36,click:37,callbackname:38,callbackargs:39,href:40,clickStatementDebug:41,$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",19:"dateFormat",20:"inclusiveEndDates",21:"topAxis",22:"axisFormat",23:"tickInterval",24:"excludes",25:"includes",26:"todayMarker",27:"title",28:"acc_title",29:"acc_title_value",30:"acc_descr",31:"acc_descr_value",32:"acc_descr_multiline_value",33:"section",35:"taskTxt",36:"taskData",37:"click",38:"callbackname",39:"callbackargs",40:"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],[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],[34,2],[34,3],[34,3],[34,4],[34,3],[34,4],[34,2],[41,2],[41,3],[41,3],[41,4],[41,3],[41,4],[41,2]],performAction:function(xt,nt,Ot,Nt,qt,Ct,Z){var Tt=Ct.length-1;switch(qt){case 1:return Ct[Tt-1];case 2:this.$=[];break;case 3:Ct[Tt-1].push(Ct[Tt]),this.$=Ct[Tt-1];break;case 4:case 5:this.$=Ct[Tt];break;case 6:case 7:this.$=[];break;case 8:Nt.setWeekday("monday");break;case 9:Nt.setWeekday("tuesday");break;case 10:Nt.setWeekday("wednesday");break;case 11:Nt.setWeekday("thursday");break;case 12:Nt.setWeekday("friday");break;case 13:Nt.setWeekday("saturday");break;case 14:Nt.setWeekday("sunday");break;case 15:Nt.setDateFormat(Ct[Tt].substr(11)),this.$=Ct[Tt].substr(11);break;case 16:Nt.enableInclusiveEndDates(),this.$=Ct[Tt].substr(18);break;case 17:Nt.TopAxis(),this.$=Ct[Tt].substr(8);break;case 18:Nt.setAxisFormat(Ct[Tt].substr(11)),this.$=Ct[Tt].substr(11);break;case 19:Nt.setTickInterval(Ct[Tt].substr(13)),this.$=Ct[Tt].substr(13);break;case 20:Nt.setExcludes(Ct[Tt].substr(9)),this.$=Ct[Tt].substr(9);break;case 21:Nt.setIncludes(Ct[Tt].substr(9)),this.$=Ct[Tt].substr(9);break;case 22:Nt.setTodayMarker(Ct[Tt].substr(12)),this.$=Ct[Tt].substr(12);break;case 24:Nt.setDiagramTitle(Ct[Tt].substr(6)),this.$=Ct[Tt].substr(6);break;case 25:this.$=Ct[Tt].trim(),Nt.setAccTitle(this.$);break;case 26:case 27:this.$=Ct[Tt].trim(),Nt.setAccDescription(this.$);break;case 28:Nt.addSection(Ct[Tt].substr(8)),this.$=Ct[Tt].substr(8);break;case 30:Nt.addTask(Ct[Tt-1],Ct[Tt]),this.$="task";break;case 31:this.$=Ct[Tt-1],Nt.setClickEvent(Ct[Tt-1],Ct[Tt],null);break;case 32:this.$=Ct[Tt-2],Nt.setClickEvent(Ct[Tt-2],Ct[Tt-1],Ct[Tt]);break;case 33:this.$=Ct[Tt-2],Nt.setClickEvent(Ct[Tt-2],Ct[Tt-1],null),Nt.setLink(Ct[Tt-2],Ct[Tt]);break;case 34:this.$=Ct[Tt-3],Nt.setClickEvent(Ct[Tt-3],Ct[Tt-2],Ct[Tt-1]),Nt.setLink(Ct[Tt-3],Ct[Tt]);break;case 35:this.$=Ct[Tt-2],Nt.setClickEvent(Ct[Tt-2],Ct[Tt],null),Nt.setLink(Ct[Tt-2],Ct[Tt-1]);break;case 36:this.$=Ct[Tt-3],Nt.setClickEvent(Ct[Tt-3],Ct[Tt-1],Ct[Tt]),Nt.setLink(Ct[Tt-3],Ct[Tt-2]);break;case 37:this.$=Ct[Tt-1],Nt.setLink(Ct[Tt-1],Ct[Tt]);break;case 38:case 44:this.$=Ct[Tt-1]+" "+Ct[Tt];break;case 39:case 40:case 42:this.$=Ct[Tt-2]+" "+Ct[Tt-1]+" "+Ct[Tt];break;case 41:case 43:this.$=Ct[Tt-3]+" "+Ct[Tt-2]+" "+Ct[Tt-1]+" "+Ct[Tt];break}},table:[{3:1,4:[1,2]},{1:[3]},i(a,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:17,12:f,13:p,14:v,15:m,16:b,17:E,18:_,19:L,20:N,21:B,22:j,23:R,24:z,25:K,26:it,27:st,28:ut,30:bt,32:mt,33:yt,34:23,35:dt,37:ht},i(a,[2,7],{1:[2,1]}),i(a,[2,3]),{9:33,11:17,12:f,13:p,14:v,15:m,16:b,17:E,18:_,19:L,20:N,21:B,22:j,23:R,24:z,25:K,26:it,27:st,28:ut,30:bt,32:mt,33:yt,34:23,35:dt,37:ht},i(a,[2,5]),i(a,[2,6]),i(a,[2,15]),i(a,[2,16]),i(a,[2,17]),i(a,[2,18]),i(a,[2,19]),i(a,[2,20]),i(a,[2,21]),i(a,[2,22]),i(a,[2,23]),i(a,[2,24]),{29:[1,34]},{31:[1,35]},i(a,[2,27]),i(a,[2,28]),i(a,[2,29]),{36:[1,36]},i(a,[2,8]),i(a,[2,9]),i(a,[2,10]),i(a,[2,11]),i(a,[2,12]),i(a,[2,13]),i(a,[2,14]),{38:[1,37],40:[1,38]},i(a,[2,4]),i(a,[2,25]),i(a,[2,26]),i(a,[2,30]),i(a,[2,31],{39:[1,39],40:[1,40]}),i(a,[2,37],{38:[1,41]}),i(a,[2,32],{40:[1,42]}),i(a,[2,33]),i(a,[2,35],{39:[1,43]}),i(a,[2,34]),i(a,[2,36])],defaultActions:{},parseError:function(xt,nt){if(nt.recoverable)this.trace(xt);else{var Ot=new Error(xt);throw Ot.hash=nt,Ot}},parse:function(xt){var nt=this,Ot=[0],Nt=[],qt=[null],Ct=[],Z=this.table,Tt="",Ht=0,It=0,Ft=2,ke=1,pn=Ct.slice.call(arguments,1),Me=Object.create(this.lexer),ve={yy:{}};for(var Ge in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Ge)&&(ve.yy[Ge]=this.yy[Ge]);Me.setInput(xt,ve.yy),ve.yy.lexer=Me,ve.yy.parser=this,typeof Me.yylloc>"u"&&(Me.yylloc={});var Ke=Me.yylloc;Ct.push(Ke);var we=Me.options&&Me.options.ranges;typeof ve.yy.parseError=="function"?this.parseError=ve.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function _e(){var da;return da=Nt.pop()||Me.lex()||ke,typeof da!="number"&&(da instanceof Array&&(Nt=da,da=Nt.pop()),da=nt.symbols_[da]||da),da}for(var $t,re,ie,Oe,oe={},Ne,me,cn,li;;){if(re=Ot[Ot.length-1],this.defaultActions[re]?ie=this.defaultActions[re]:(($t===null||typeof $t>"u")&&($t=_e()),ie=Z[re]&&Z[re][$t]),typeof ie>"u"||!ie.length||!ie[0]){var ya="";li=[];for(Ne in Z[re])this.terminals_[Ne]&&Ne>Ft&&li.push("'"+this.terminals_[Ne]+"'");Me.showPosition?ya="Parse error on line "+(Ht+1)+`:
`+Me.showPosition()+`
Expecting `+li.join(", ")+", got '"+(this.terminals_[$t]||$t)+"'":ya="Parse error on line "+(Ht+1)+": Unexpected "+($t==ke?"end of input":"'"+(this.terminals_[$t]||$t)+"'"),this.parseError(ya,{text:Me.match,token:this.terminals_[$t]||$t,line:Me.yylineno,loc:Ke,expected:li})}if(ie[0]instanceof Array&&ie.length>1)throw new Error("Parse Error: multiple actions possible at state: "+re+", token: "+$t);switch(ie[0]){case 1:Ot.push($t),qt.push(Me.yytext),Ct.push(Me.yylloc),Ot.push(ie[1]),$t=null,It=Me.yyleng,Tt=Me.yytext,Ht=Me.yylineno,Ke=Me.yylloc;break;case 2:if(me=this.productions_[ie[1]][1],oe.$=qt[qt.length-me],oe._$={first_line:Ct[Ct.length-(me||1)].first_line,last_line:Ct[Ct.length-1].last_line,first_column:Ct[Ct.length-(me||1)].first_column,last_column:Ct[Ct.length-1].last_column},we&&(oe._$.range=[Ct[Ct.length-(me||1)].range[0],Ct[Ct.length-1].range[1]]),Oe=this.performAction.apply(oe,[Tt,It,Ht,ve.yy,ie[1],qt,Ct].concat(pn)),typeof Oe<"u")return Oe;me&&(Ot=Ot.slice(0,-1*me*2),qt=qt.slice(0,-1*me),Ct=Ct.slice(0,-1*me)),Ot.push(this.productions_[ie[1]][0]),qt.push(oe.$),Ct.push(oe._$),cn=Z[Ot[Ot.length-2]][Ot[Ot.length-1]],Ot.push(cn);break;case 3:return!0}}return!0}},X=function(){var U={EOF:1,parseError:function(nt,Ot){if(this.yy.parser)this.yy.parser.parseError(nt,Ot);else throw new Error(nt)},setInput:function(xt,nt){return this.yy=nt||this.yy||{},this._input=xt,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},input:function(){var xt=this._input[0];this.yytext+=xt,this.yyleng++,this.offset++,this.match+=xt,this.matched+=xt;var nt=xt.match(/(?:\r\n?|\n).*/g);return nt?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),xt},unput:function(xt){var nt=xt.length,Ot=xt.split(/(?:\r\n?|\n)/g);this._input=xt+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-nt),this.offset-=nt;var Nt=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),Ot.length-1&&(this.yylineno-=Ot.length-1);var qt=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:Ot?(Ot.length===Nt.length?this.yylloc.first_column:0)+Nt[Nt.length-Ot.length].length-Ot[0].length:this.yylloc.first_column-nt},this.options.ranges&&(this.yylloc.range=[qt[0],qt[0]+this.yyleng-nt]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject: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},less:function(xt){this.unput(this.match.slice(xt))},pastInput:function(){var xt=this.matched.substr(0,this.matched.length-this.match.length);return(xt.length>20?"...":"")+xt.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var xt=this.match;return xt.length<20&&(xt+=this._input.substr(0,20-xt.length)),(xt.substr(0,20)+(xt.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var xt=this.pastInput(),nt=new Array(xt.length+1).join("-");return xt+this.upcomingInput()+`
`+nt+"^"},test_match:function(xt,nt){var Ot,Nt,qt;if(this.options.backtrack_lexer&&(qt={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&&(qt.yylloc.range=this.yylloc.range.slice(0))),Nt=xt[0].match(/(?:\r\n?|\n).*/g),Nt&&(this.yylineno+=Nt.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:Nt?Nt[Nt.length-1].length-Nt[Nt.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+xt[0].length},this.yytext+=xt[0],this.match+=xt[0],this.matches=xt,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(xt[0].length),this.matched+=xt[0],Ot=this.performAction.call(this,this.yy,this,nt,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),Ot)return Ot;if(this._backtrack){for(var Ct in qt)this[Ct]=qt[Ct];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var xt,nt,Ot,Nt;this._more||(this.yytext="",this.match="");for(var qt=this._currentRules(),Ct=0;Ct<qt.length;Ct++)if(Ot=this._input.match(this.rules[qt[Ct]]),Ot&&(!nt||Ot[0].length>nt[0].length)){if(nt=Ot,Nt=Ct,this.options.backtrack_lexer){if(xt=this.test_match(Ot,qt[Ct]),xt!==!1)return xt;if(this._backtrack){nt=!1;continue}else return!1}else if(!this.options.flex)break}return nt?(xt=this.test_match(nt,qt[Nt]),xt!==!1?xt:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text.
`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var nt=this.next();return nt||this.lex()},begin:function(nt){this.conditionStack.push(nt)},popState:function(){var nt=this.conditionStack.length-1;return nt>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(nt){return nt=this.conditionStack.length-1-Math.abs(nt||0),nt>=0?this.conditionStack[nt]:"INITIAL"},pushState:function(nt){this.begin(nt)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(nt,Ot,Nt,qt){switch(Nt){case 0:return this.begin("open_directive"),"open_directive";case 1:return this.begin("acc_title"),28;case 2:return this.popState(),"acc_title_value";case 3:return this.begin("acc_descr"),30;case 4:return this.popState(),"acc_descr_value";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:break;case 15:this.begin("href");break;case 16:this.popState();break;case 17:return 40;case 18:this.begin("callbackname");break;case 19:this.popState();break;case 20:this.popState(),this.begin("callbackargs");break;case 21:return 38;case 22:this.popState();break;case 23:return 39;case 24:this.begin("click");break;case 25:this.popState();break;case 26:return 37;case 27:return 4;case 28:return 19;case 29:return 20;case 30:return 21;case 31:return 22;case 32:return 23;case 33:return 25;case 34:return 24;case 35:return 26;case 36:return 12;case 37:return 13;case 38:return 14;case 39:return 15;case 40:return 16;case 41:return 17;case 42:return 18;case 43:return"date";case 44:return 27;case 45:return"accDescription";case 46:return 33;case 47:return 35;case 48:return 36;case 49:return":";case 50:return 6;case 51:return"INVALID"}},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,/^(?:%[^\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,/^(?:\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:[22,23],inclusive:!1},callbackname:{rules:[19,20,21],inclusive:!1},href:{rules:[16,17],inclusive:!1},click:{rules:[25,26],inclusive:!1},INITIAL:{rules:[0,1,3,5,8,9,10,11,12,13,14,15,18,24,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],inclusive:!0}}};return U}();wt.lexer=X;function pt(){this.yy={}}return pt.prototype=wt,wt.Parser=pt,new pt}();R0t.parser=R0t;const Dze=R0t;var GBt={exports:{}};(function(i,a){(function(f,p){i.exports=p()})(d0,function(){var f="day";return function(p,v,m){var b=function(L){return L.add(4-L.isoWeekday(),f)},E=v.prototype;E.isoWeekYear=function(){return b(this).year()},E.isoWeek=function(L){if(!this.$utils().u(L))return this.add(7*(L-this.isoWeek()),f);var N,B,j,R,z=b(this),K=(N=this.isoWeekYear(),B=this.$u,j=(B?m.utc:m)().year(N).startOf("year"),R=4-j.isoWeekday(),j.isoWeekday()>4&&(R+=7),j.add(R,f));return z.diff(K,"week")+1},E.isoWeekday=function(L){return this.$utils().u(L)?this.day()||7:this.day(this.day()%7?L:L-7)};var _=E.startOf;E.startOf=function(L,N){var B=this.$utils(),j=!!B.u(N)||N;return B.p(L)==="isoweek"?j?this.date(this.date()-(this.isoWeekday()-1)).startOf("day"):this.date(this.date()-1-(this.isoWeekday()-1)+7).endOf("day"):_.bind(this)(L,N)}}})})(GBt);var Oze=GBt.exports;const Nze=B7(Oze);var VBt={exports:{}};(function(i,a){(function(f,p){i.exports=p()})(d0,function(){var f={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"},p=/(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|YYYY|YY?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,v=/\d\d/,m=/\d\d?/,b=/\d*[^-_:/,()\s\d]+/,E={},_=function(K){return(K=+K)+(K>68?1900:2e3)},L=function(K){return function(it){this[K]=+it}},N=[/[+-]\d\d:?(\d\d)?|Z/,function(K){(this.zone||(this.zone={})).offset=function(it){if(!it||it==="Z")return 0;var st=it.match(/([+-]|\d\d)/g),ut=60*st[1]+(+st[2]||0);return ut===0?0:st[0]==="+"?-ut:ut}(K)}],B=function(K){var it=E[K];return it&&(it.indexOf?it:it.s.concat(it.f))},j=function(K,it){var st,ut=E.meridiem;if(ut){for(var bt=1;bt<=24;bt+=1)if(K.indexOf(ut(bt,0,it))>-1){st=bt>12;break}}else st=K===(it?"pm":"PM");return st},R={A:[b,function(K){this.afternoon=j(K,!1)}],a:[b,function(K){this.afternoon=j(K,!0)}],S:[/\d/,function(K){this.milliseconds=100*+K}],SS:[v,function(K){this.milliseconds=10*+K}],SSS:[/\d{3}/,function(K){this.milliseconds=+K}],s:[m,L("seconds")],ss:[m,L("seconds")],m:[m,L("minutes")],mm:[m,L("minutes")],H:[m,L("hours")],h:[m,L("hours")],HH:[m,L("hours")],hh:[m,L("hours")],D:[m,L("day")],DD:[v,L("day")],Do:[b,function(K){var it=E.ordinal,st=K.match(/\d+/);if(this.day=st[0],it)for(var ut=1;ut<=31;ut+=1)it(ut).replace(/\[|\]/g,"")===K&&(this.day=ut)}],M:[m,L("month")],MM:[v,L("month")],MMM:[b,function(K){var it=B("months"),st=(B("monthsShort")||it.map(function(ut){return ut.slice(0,3)})).indexOf(K)+1;if(st<1)throw new Error;this.month=st%12||st}],MMMM:[b,function(K){var it=B("months").indexOf(K)+1;if(it<1)throw new Error;this.month=it%12||it}],Y:[/[+-]?\d+/,L("year")],YY:[v,function(K){this.year=_(K)}],YYYY:[/\d{4}/,L("year")],Z:N,ZZ:N};function z(K){var it,st;it=K,st=E&&E.formats;for(var ut=(K=it.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,function(X,pt,U){var xt=U&&U.toUpperCase();return pt||st[U]||f[U]||st[xt].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,function(nt,Ot,Nt){return Ot||Nt.slice(1)})})).match(p),bt=ut.length,mt=0;mt<bt;mt+=1){var yt=ut[mt],dt=R[yt],ht=dt&&dt[0],wt=dt&&dt[1];ut[mt]=wt?{regex:ht,parser:wt}:yt.replace(/^\[|\]$/g,"")}return function(X){for(var pt={},U=0,xt=0;U<bt;U+=1){var nt=ut[U];if(typeof nt=="string")xt+=nt.length;else{var Ot=nt.regex,Nt=nt.parser,qt=X.slice(xt),Ct=Ot.exec(qt)[0];Nt.call(pt,Ct),X=X.replace(Ct,"")}}return function(Z){var Tt=Z.afternoon;if(Tt!==void 0){var Ht=Z.hours;Tt?Ht<12&&(Z.hours+=12):Ht===12&&(Z.hours=0),delete Z.afternoon}}(pt),pt}}return function(K,it,st){st.p.customParseFormat=!0,K&&K.parseTwoDigitYear&&(_=K.parseTwoDigitYear);var ut=it.prototype,bt=ut.parse;ut.parse=function(mt){var yt=mt.date,dt=mt.utc,ht=mt.args;this.$u=dt;var wt=ht[1];if(typeof wt=="string"){var X=ht[2]===!0,pt=ht[3]===!0,U=X||pt,xt=ht[2];pt&&(xt=ht[2]),E=this.$locale(),!X&&xt&&(E=st.Ls[xt]),this.$d=function(qt,Ct,Z){try{if(["x","X"].indexOf(Ct)>-1)return new Date((Ct==="X"?1e3:1)*qt);var Tt=z(Ct)(qt),Ht=Tt.year,It=Tt.month,Ft=Tt.day,ke=Tt.hours,pn=Tt.minutes,Me=Tt.seconds,ve=Tt.milliseconds,Ge=Tt.zone,Ke=new Date,we=Ft||(Ht||It?1:Ke.getDate()),_e=Ht||Ke.getFullYear(),$t=0;Ht&&!It||($t=It>0?It-1:Ke.getMonth());var re=ke||0,ie=pn||0,Oe=Me||0,oe=ve||0;return Ge?new Date(Date.UTC(_e,$t,we,re,ie,Oe,oe+60*Ge.offset*1e3)):Z?new Date(Date.UTC(_e,$t,we,re,ie,Oe,oe)):new Date(_e,$t,we,re,ie,Oe,oe)}catch{return new Date("")}}(yt,wt,dt),this.init(),xt&&xt!==!0&&(this.$L=this.locale(xt).$L),U&&yt!=this.format(wt)&&(this.$d=new Date("")),E={}}else if(wt instanceof Array)for(var nt=wt.length,Ot=1;Ot<=nt;Ot+=1){ht[1]=wt[Ot-1];var Nt=st.apply(this,ht);if(Nt.isValid()){this.$d=Nt.$d,this.$L=Nt.$L,this.init();break}Ot===nt&&(this.$d=new Date(""))}else bt.call(this,mt)}}})})(VBt);var Pze=VBt.exports;const Fze=B7(Pze);var UBt={exports:{}};(function(i,a){(function(f,p){i.exports=p()})(d0,function(){return function(f,p){var v=p.prototype,m=v.format;v.format=function(b){var E=this,_=this.$locale();if(!this.isValid())return m.bind(this)(b);var L=this.$utils(),N=(b||"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(B){switch(B){case"Q":return Math.ceil((E.$M+1)/3);case"Do":return _.ordinal(E.$D);case"gggg":return E.weekYear();case"GGGG":return E.isoWeekYear();case"wo":return _.ordinal(E.week(),"W");case"w":case"ww":return L.s(E.week(),B==="w"?1:2,"0");case"W":case"WW":return L.s(E.isoWeek(),B==="W"?1:2,"0");case"k":case"kk":return L.s(String(E.$H===0?24:E.$H),B==="k"?1:2,"0");case"X":return Math.floor(E.$d.getTime()/1e3);case"x":return E.$d.getTime();case"z":return"["+E.offsetName()+"]";case"zzz":return"["+E.offsetName("long")+"]";default:return B}});return m.bind(this)(N)}}})})(UBt);var Bze=UBt.exports;const Rze=B7(Bze);g0.extend(Nze),g0.extend(Fze),g0.extend(Rze);let m3="",j0t="",$0t,z0t="",SP=[],AP=[],q0t={},H0t=[],kK=[],iL="",G0t="";const WBt=["active","done","crit","milestone"];let V0t=[],LP=!1,U0t=!1,W0t="sunday",K0t=0;const jze=function(){H0t=[],kK=[],iL="",V0t=[],EK=0,X0t=void 0,TK=void 0,u1=[],m3="",j0t="",G0t="",$0t=void 0,z0t="",SP=[],AP=[],LP=!1,U0t=!1,K0t=0,q0t={},ap(),W0t="sunday"},$ze=function(i){j0t=i},zze=function(){return j0t},qze=function(i){$0t=i},Hze=function(){return $0t},Gze=function(i){z0t=i},Vze=function(){return z0t},Uze=function(i){m3=i},Wze=function(){LP=!0},Kze=function(){return LP},Yze=function(){U0t=!0},Xze=function(){return U0t},Qze=function(i){G0t=i},Zze=function(){return G0t},Jze=function(){return m3},tqe=function(i){SP=i.toLowerCase().split(/[\s,]+/)},eqe=function(){return SP},nqe=function(i){AP=i.toLowerCase().split(/[\s,]+/)},rqe=function(){return AP},iqe=function(){return q0t},sqe=function(i){iL=i,H0t.push(i)},aqe=function(){return H0t},oqe=function(){let i=JBt();const a=10;let f=0;for(;!i&&f<a;)i=JBt(),f++;return kK=u1,kK},KBt=function(i,a,f,p){return p.includes(i.format(a.trim()))?!1:i.isoWeekday()>=6&&f.includes("weekends")||f.includes(i.format("dddd").toLowerCase())?!0:f.includes(i.format(a.trim()))},cqe=function(i){W0t=i},uqe=function(){return W0t},YBt=function(i,a,f,p){if(!f.length||i.manualEndTime)return;let v;i.startTime instanceof Date?v=g0(i.startTime):v=g0(i.startTime,a,!0),v=v.add(1,"d");let m;i.endTime instanceof Date?m=g0(i.endTime):m=g0(i.endTime,a,!0);const[b,E]=lqe(v,m,a,f,p);i.endTime=b.toDate(),i.renderEndTime=E},lqe=function(i,a,f,p,v){let m=!1,b=null;for(;i<=a;)m||(b=a.toDate()),m=KBt(i,f,p,v),m&&(a=a.add(1,"d")),i=i.add(1,"d");return[a,b]},Y0t=function(i,a,f){f=f.trim();const v=/^after\s+([\d\w- ]+)/.exec(f.trim());if(v!==null){let b=null;if(v[1].split(" ").forEach(function(E){let _=aL(E);_!==void 0&&(b?_.endTime>b.endTime&&(b=_):b=_)}),b)return b.endTime;{const E=new Date;return E.setHours(0,0,0,0),E}}let m=g0(f,a.trim(),!0);if(m.isValid())return m.toDate();{Ut.debug("Invalid date:"+f),Ut.debug("With date format:"+a.trim());const b=new Date(f);if(b===void 0||isNaN(b.getTime())||b.getFullYear()<-1e4||b.getFullYear()>1e4)throw new Error("Invalid date:"+f);return b}},XBt=function(i){const a=/^(\d+(?:\.\d+)?)([Mdhmswy]|ms)$/.exec(i.trim());return a!==null?[Number.parseFloat(a[1]),a[2]]:[NaN,"ms"]},QBt=function(i,a,f,p=!1){f=f.trim();let v=g0(f,a.trim(),!0);if(v.isValid())return p&&(v=v.add(1,"d")),v.toDate();let m=g0(i);const[b,E]=XBt(f);if(!Number.isNaN(b)){const _=m.add(b,E);_.isValid()&&(m=_)}return m.toDate()};let EK=0;const sL=function(i){return i===void 0?(EK=EK+1,"task"+EK):i},hqe=function(i,a){let f;a.substr(0,1)===":"?f=a.substr(1,a.length):f=a;const p=f.split(","),v={};nRt(p,v,WBt);for(let b=0;b<p.length;b++)p[b]=p[b].trim();let m="";switch(p.length){case 1:v.id=sL(),v.startTime=i.endTime,m=p[0];break;case 2:v.id=sL(),v.startTime=Y0t(void 0,m3,p[0]),m=p[1];break;case 3:v.id=sL(p[0]),v.startTime=Y0t(void 0,m3,p[1]),m=p[2];break}return m&&(v.endTime=QBt(v.startTime,m3,m,LP),v.manualEndTime=g0(m,"YYYY-MM-DD",!0).isValid(),YBt(v,m3,AP,SP)),v},fqe=function(i,a){let f;a.substr(0,1)===":"?f=a.substr(1,a.length):f=a;const p=f.split(","),v={};nRt(p,v,WBt);for(let m=0;m<p.length;m++)p[m]=p[m].trim();switch(p.length){case 1:v.id=sL(),v.startTime={type:"prevTaskEnd",id:i},v.endTime={data:p[0]};break;case 2:v.id=sL(),v.startTime={type:"getStartDate",startData:p[0]},v.endTime={data:p[1]};break;case 3:v.id=sL(p[0]),v.startTime={type:"getStartDate",startData:p[1]},v.endTime={data:p[2]};break}return v};let X0t,TK,u1=[];const ZBt={},dqe=function(i,a){const f={section:iL,type:iL,processed:!1,manualEndTime:!1,renderEndTime:null,raw:{data:a},task:i,classes:[]},p=fqe(TK,a);f.raw.startTime=p.startTime,f.raw.endTime=p.endTime,f.id=p.id,f.prevTaskId=TK,f.active=p.active,f.done=p.done,f.crit=p.crit,f.milestone=p.milestone,f.order=K0t,K0t++;const v=u1.push(f);TK=f.id,ZBt[f.id]=v-1},aL=function(i){const a=ZBt[i];return u1[a]},gqe=function(i,a){const f={section:iL,type:iL,description:i,task:i,classes:[]},p=hqe(X0t,a);f.startTime=p.startTime,f.endTime=p.endTime,f.id=p.id,f.active=p.active,f.done=p.done,f.crit=p.crit,f.milestone=p.milestone,X0t=f,kK.push(f)},JBt=function(){const i=function(f){const p=u1[f];let v="";switch(u1[f].raw.startTime.type){case"prevTaskEnd":{const m=aL(p.prevTaskId);p.startTime=m.endTime;break}case"getStartDate":v=Y0t(void 0,m3,u1[f].raw.startTime.startData),v&&(u1[f].startTime=v);break}return u1[f].startTime&&(u1[f].endTime=QBt(u1[f].startTime,m3,u1[f].raw.endTime.data,LP),u1[f].endTime&&(u1[f].processed=!0,u1[f].manualEndTime=g0(u1[f].raw.endTime.data,"YYYY-MM-DD",!0).isValid(),YBt(u1[f],m3,AP,SP))),u1[f].processed};let a=!0;for(const[f,p]of u1.entries())i(f),a=a&&p.processed;return a},pqe=function(i,a){let f=a;Le().securityLevel!=="loose"&&(f=Q6(a)),i.split(",").forEach(function(p){aL(p)!==void 0&&(eRt(p,()=>{window.open(f,"_self")}),q0t[p]=f)}),tRt(i,"clickable")},tRt=function(i,a){i.split(",").forEach(function(f){let p=aL(f);p!==void 0&&p.classes.push(a)})},bqe=function(i,a,f){if(Le().securityLevel!=="loose"||a===void 0)return;let p=[];if(typeof f=="string"){p=f.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let m=0;m<p.length;m++){let b=p[m].trim();b.charAt(0)==='"'&&b.charAt(b.length-1)==='"'&&(b=b.substr(1,b.length-2)),p[m]=b}}p.length===0&&p.push(i),aL(i)!==void 0&&eRt(i,()=>{$a.runFunc(a,...p)})},eRt=function(i,a){V0t.push(function(){const f=document.querySelector(`[id="${i}"]`);f!==null&&f.addEventListener("click",function(){a()})},function(){const f=document.querySelector(`[id="${i}-text"]`);f!==null&&f.addEventListener("click",function(){a()})})},vqe={getConfig:()=>Le().gantt,clear:jze,setDateFormat:Uze,getDateFormat:Jze,enableInclusiveEndDates:Wze,endDatesAreInclusive:Kze,enableTopAxis:Yze,topAxisEnabled:Xze,setAxisFormat:$ze,getAxisFormat:zze,setTickInterval:qze,getTickInterval:Hze,setTodayMarker:Gze,getTodayMarker:Vze,setAccTitle:cg,getAccTitle:op,setDiagramTitle:Z2,getDiagramTitle:Db,setDisplayMode:Qze,getDisplayMode:Zze,setAccDescription:cp,getAccDescription:up,addSection:sqe,getSections:aqe,getTasks:oqe,addTask:dqe,findTaskById:aL,addTaskOrg:gqe,setIncludes:tqe,getIncludes:eqe,setExcludes:nqe,getExcludes:rqe,setClickEvent:function(i,a,f){i.split(",").forEach(function(p){bqe(p,a,f)}),tRt(i,"clickable")},setLink:pqe,getLinks:iqe,bindFunctions:function(i){V0t.forEach(function(a){a(i)})},parseDuration:XBt,isInvalidDate:KBt,setWeekday:cqe,getWeekday:uqe};function nRt(i,a,f){let p=!0;for(;p;)p=!1,f.forEach(function(v){const m="^\\s*"+v+"\\s*$",b=new RegExp(m);i[0].match(b)&&(a[v]=!0,i.shift(1),p=!0)})}const wqe=function(){Ut.debug("Something is calling, setConf, remove the call")},rRt={monday:MN,tuesday:YMt,wednesday:XMt,thursday:K7,friday:QMt,saturday:ZMt,sunday:LN},mqe=(i,a)=>{let f=[...i].map(()=>-1/0),p=[...i].sort((m,b)=>m.startTime-b.startTime||m.order-b.order),v=0;for(const m of p)for(let b=0;b<f.length;b++)if(m.startTime>=f[b]){f[b]=m.endTime,m.order=b+a,b>v&&(v=b);break}return v};let L5;const yqe=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:Dze,db:vqe,renderer:{setConf:wqe,draw:function(i,a,f,p){const v=Le().gantt,m=Le().securityLevel;let b;m==="sandbox"&&(b=yr("#i"+a));const E=yr(m==="sandbox"?b.nodes()[0].contentDocument.body:"body"),_=m==="sandbox"?b.nodes()[0].contentDocument:document,L=_.getElementById(a);L5=L.parentElement.offsetWidth,L5===void 0&&(L5=1200),v.useWidth!==void 0&&(L5=v.useWidth);const N=p.db.getTasks();let B=[];for(const wt of N)B.push(wt.type);B=ht(B);const j={};let R=2*v.topPadding;if(p.db.getDisplayMode()==="compact"||v.displayMode==="compact"){const wt={};for(const pt of N)wt[pt.section]===void 0?wt[pt.section]=[pt]:wt[pt.section].push(pt);let X=0;for(const pt of Object.keys(wt)){const U=mqe(wt[pt],X)+1;X+=U,R+=U*(v.barHeight+v.barGap),j[pt]=U}}else{R+=N.length*(v.barHeight+v.barGap);for(const wt of B)j[wt]=N.filter(X=>X.type===wt).length}L.setAttribute("viewBox","0 0 "+L5+" "+R);const z=E.select(`[id="${a}"]`),K=C7e().domain([lxe(N,function(wt){return wt.startTime}),uxe(N,function(wt){return wt.endTime})]).rangeRound([0,L5-v.leftPadding-v.rightPadding]);function it(wt,X){const pt=wt.startTime,U=X.startTime;let xt=0;return pt>U?xt=1:pt<U&&(xt=-1),xt}N.sort(it),st(N,L5,R),og(z,R,L5,v.useMaxWidth),z.append("text").text(p.db.getDiagramTitle()).attr("x",L5/2).attr("y",v.titleTopMargin).attr("class","titleText");function st(wt,X,pt){const U=v.barHeight,xt=U+v.barGap,nt=v.topPadding,Ot=v.leftPadding,Nt=BU().domain([0,B.length]).range(["#00B9FA","#F95002"]).interpolate(Ike);bt(xt,nt,Ot,X,pt,wt,p.db.getExcludes(),p.db.getIncludes()),mt(Ot,nt,X,pt),ut(wt,xt,nt,Ot,U,Nt,X),yt(xt,nt),dt(Ot,nt,X,pt)}function ut(wt,X,pt,U,xt,nt,Ot){const qt=[...new Set(wt.map(Ht=>Ht.order))].map(Ht=>wt.find(It=>It.order===Ht));z.append("g").selectAll("rect").data(qt).enter().append("rect").attr("x",0).attr("y",function(Ht,It){return It=Ht.order,It*X+pt-2}).attr("width",function(){return Ot-v.rightPadding/2}).attr("height",X).attr("class",function(Ht){for(const[It,Ft]of B.entries())if(Ht.type===Ft)return"section section"+It%v.numberSectionStyles;return"section section0"});const Ct=z.append("g").selectAll("rect").data(wt).enter(),Z=p.db.getLinks();if(Ct.append("rect").attr("id",function(Ht){return Ht.id}).attr("rx",3).attr("ry",3).attr("x",function(Ht){return Ht.milestone?K(Ht.startTime)+U+.5*(K(Ht.endTime)-K(Ht.startTime))-.5*xt:K(Ht.startTime)+U}).attr("y",function(Ht,It){return It=Ht.order,It*X+pt}).attr("width",function(Ht){return Ht.milestone?xt:K(Ht.renderEndTime||Ht.endTime)-K(Ht.startTime)}).attr("height",xt).attr("transform-origin",function(Ht,It){return It=Ht.order,(K(Ht.startTime)+U+.5*(K(Ht.endTime)-K(Ht.startTime))).toString()+"px "+(It*X+pt+.5*xt).toString()+"px"}).attr("class",function(Ht){const It="task";let Ft="";Ht.classes.length>0&&(Ft=Ht.classes.join(" "));let ke=0;for(const[Me,ve]of B.entries())Ht.type===ve&&(ke=Me%v.numberSectionStyles);let pn="";return Ht.active?Ht.crit?pn+=" activeCrit":pn=" active":Ht.done?Ht.crit?pn=" doneCrit":pn=" done":Ht.crit&&(pn+=" crit"),pn.length===0&&(pn=" task"),Ht.milestone&&(pn=" milestone "+pn),pn+=ke,pn+=" "+Ft,It+pn}),Ct.append("text").attr("id",function(Ht){return Ht.id+"-text"}).text(function(Ht){return Ht.task}).attr("font-size",v.fontSize).attr("x",function(Ht){let It=K(Ht.startTime),Ft=K(Ht.renderEndTime||Ht.endTime);Ht.milestone&&(It+=.5*(K(Ht.endTime)-K(Ht.startTime))-.5*xt),Ht.milestone&&(Ft=It+xt);const ke=this.getBBox().width;return ke>Ft-It?Ft+ke+1.5*v.leftPadding>Ot?It+U-5:Ft+U+5:(Ft-It)/2+It+U}).attr("y",function(Ht,It){return It=Ht.order,It*X+v.barHeight/2+(v.fontSize/2-2)+pt}).attr("text-height",xt).attr("class",function(Ht){const It=K(Ht.startTime);let Ft=K(Ht.endTime);Ht.milestone&&(Ft=It+xt);const ke=this.getBBox().width;let pn="";Ht.classes.length>0&&(pn=Ht.classes.join(" "));let Me=0;for(const[Ge,Ke]of B.entries())Ht.type===Ke&&(Me=Ge%v.numberSectionStyles);let ve="";return Ht.active&&(Ht.crit?ve="activeCritText"+Me:ve="activeText"+Me),Ht.done?Ht.crit?ve=ve+" doneCritText"+Me:ve=ve+" doneText"+Me:Ht.crit&&(ve=ve+" critText"+Me),Ht.milestone&&(ve+=" milestoneText"),ke>Ft-It?Ft+ke+1.5*v.leftPadding>Ot?pn+" taskTextOutsideLeft taskTextOutside"+Me+" "+ve:pn+" taskTextOutsideRight taskTextOutside"+Me+" "+ve+" width-"+ke:pn+" taskText taskText"+Me+" "+ve+" width-"+ke}),Le().securityLevel==="sandbox"){let Ht;Ht=yr("#i"+a);const It=Ht.nodes()[0].contentDocument;Ct.filter(function(Ft){return Z[Ft.id]!==void 0}).each(function(Ft){var ke=It.querySelector("#"+Ft.id),pn=It.querySelector("#"+Ft.id+"-text");const Me=ke.parentNode;var ve=It.createElement("a");ve.setAttribute("xlink:href",Z[Ft.id]),ve.setAttribute("target","_top"),Me.appendChild(ve),ve.appendChild(ke),ve.appendChild(pn)})}}function bt(wt,X,pt,U,xt,nt,Ot,Nt){if(Ot.length===0&&Nt.length===0)return;let qt,Ct;for(const{startTime:ke,endTime:pn}of nt)(qt===void 0||ke<qt)&&(qt=ke),(Ct===void 0||pn>Ct)&&(Ct=pn);if(!qt||!Ct)return;if(g0(Ct).diff(g0(qt),"year")>5){Ut.warn("The difference between the min and max time is more than 5 years. This will cause performance issues. Skipping drawing exclude days.");return}const Z=p.db.getDateFormat(),Tt=[];let Ht=null,It=g0(qt);for(;It.valueOf()<=Ct;)p.db.isInvalidDate(It,Z,Ot,Nt)?Ht?Ht.end=It:Ht={start:It,end:It}:Ht&&(Tt.push(Ht),Ht=null),It=It.add(1,"d");z.append("g").selectAll("rect").data(Tt).enter().append("rect").attr("id",function(ke){return"exclude-"+ke.start.format("YYYY-MM-DD")}).attr("x",function(ke){return K(ke.start)+pt}).attr("y",v.gridLineStartPadding).attr("width",function(ke){const pn=ke.end.add(1,"day");return K(pn)-K(ke.start)}).attr("height",xt-X-v.gridLineStartPadding).attr("transform-origin",function(ke,pn){return(K(ke.start)+pt+.5*(K(ke.end)-K(ke.start))).toString()+"px "+(pn*wt+.5*xt).toString()+"px"}).attr("class","exclude-range")}function mt(wt,X,pt,U){let xt=wxe(K).tickSize(-U+X+v.gridLineStartPadding).tickFormat(HU(p.db.getAxisFormat()||v.axisFormat||"%Y-%m-%d"));const Ot=/^([1-9]\d*)(millisecond|second|minute|hour|day|week|month)$/.exec(p.db.getTickInterval()||v.tickInterval);if(Ot!==null){const Nt=Ot[1],qt=Ot[2],Ct=p.db.getWeekday()||v.weekday;switch(qt){case"millisecond":xt.ticks(C1t.every(Nt));break;case"second":xt.ticks(U7.every(Nt));break;case"minute":xt.ticks(jU.every(Nt));break;case"hour":xt.ticks($U.every(Nt));break;case"day":xt.ticks(CA.every(Nt));break;case"week":xt.ticks(rRt[Ct].every(Nt));break;case"month":xt.ticks(zU.every(Nt));break}}if(z.append("g").attr("class","grid").attr("transform","translate("+wt+", "+(U-50)+")").call(xt).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10).attr("dy","1em"),p.db.topAxisEnabled()||v.topAxis){let Nt=vxe(K).tickSize(-U+X+v.gridLineStartPadding).tickFormat(HU(p.db.getAxisFormat()||v.axisFormat||"%Y-%m-%d"));if(Ot!==null){const qt=Ot[1],Ct=Ot[2],Z=p.db.getWeekday()||v.weekday;switch(Ct){case"millisecond":Nt.ticks(C1t.every(qt));break;case"second":Nt.ticks(U7.every(qt));break;case"minute":Nt.ticks(jU.every(qt));break;case"hour":Nt.ticks($U.every(qt));break;case"day":Nt.ticks(CA.every(qt));break;case"week":Nt.ticks(rRt[Z].every(qt));break;case"month":Nt.ticks(zU.every(qt));break}}z.append("g").attr("class","grid").attr("transform","translate("+wt+", "+X+")").call(Nt).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10)}}function yt(wt,X){let pt=0;const U=Object.keys(j).map(xt=>[xt,j[xt]]);z.append("g").selectAll("text").data(U).enter().append(function(xt){const nt=xt[0].split(Yr.lineBreakRegex),Ot=-(nt.length-1)/2,Nt=_.createElementNS("http://www.w3.org/2000/svg","text");Nt.setAttribute("dy",Ot+"em");for(const[qt,Ct]of nt.entries()){const Z=_.createElementNS("http://www.w3.org/2000/svg","tspan");Z.setAttribute("alignment-baseline","central"),Z.setAttribute("x","10"),qt>0&&Z.setAttribute("dy","1em"),Z.textContent=Ct,Nt.appendChild(Z)}return Nt}).attr("x",10).attr("y",function(xt,nt){if(nt>0)for(let Ot=0;Ot<nt;Ot++)return pt+=U[nt-1][1],xt[1]*wt/2+pt*wt+X;else return xt[1]*wt/2+X}).attr("font-size",v.sectionFontSize).attr("class",function(xt){for(const[nt,Ot]of B.entries())if(xt[0]===Ot)return"sectionTitle sectionTitle"+nt%v.numberSectionStyles;return"sectionTitle"})}function dt(wt,X,pt,U){const xt=p.db.getTodayMarker();if(xt==="off")return;const nt=z.append("g").attr("class","today"),Ot=new Date,Nt=nt.append("line");Nt.attr("x1",K(Ot)+wt).attr("x2",K(Ot)+wt).attr("y1",v.titleTopMargin).attr("y2",U-v.titleTopMargin).attr("class","today"),xt!==""&&Nt.attr("style",xt.replace(/,/g,";"))}function ht(wt){const X={},pt=[];for(let U=0,xt=wt.length;U<xt;++U)Object.prototype.hasOwnProperty.call(X,wt[U])||(X[wt[U]]=!0,pt.push(wt[U]));return pt}}},styles:i=>`
  .mermaid-main-font {
    font-family: "trebuchet ms", verdana, arial, sans-serif;
    font-family: var(--mermaid-font-family);
  }
  .exclude-range {
    fill: ${i.excludeBkgColor};
  }

  .section {
    stroke: none;
    opacity: 0.2;
  }

  .section0 {
    fill: ${i.sectionBkgColor};
  }

  .section2 {
    fill: ${i.sectionBkgColor2};
  }

  .section1,
  .section3 {
    fill: ${i.altSectionBkgColor};
    opacity: 0.2;
  }

  .sectionTitle0 {
    fill: ${i.titleColor};
  }

  .sectionTitle1 {
    fill: ${i.titleColor};
  }

  .sectionTitle2 {
    fill: ${i.titleColor};
  }

  .sectionTitle3 {
    fill: ${i.titleColor};
  }

  .sectionTitle {
    text-anchor: start;
    // font-size: ${i.ganttFontSize};
    // text-height: 14px;
    font-family: 'trebuchet ms', verdana, arial, sans-serif;
    font-family: var(--mermaid-font-family);

  }


  /* Grid and axis */

  .grid .tick {
    stroke: ${i.gridColor};
    opacity: 0.8;
    shape-rendering: crispEdges;
    text {
      font-family: ${i.fontFamily};
      fill: ${i.textColor};
    }
  }

  .grid path {
    stroke-width: 0;
  }


  /* Today line */

  .today {
    fill: none;
    stroke: ${i.todayLineColor};
    stroke-width: 2px;
  }


  /* Task styling */

  /* Default task */

  .task {
    stroke-width: 2;
  }

  .taskText {
    text-anchor: middle;
    font-family: 'trebuchet ms', verdana, arial, sans-serif;
    font-family: var(--mermaid-font-family);
  }

  // .taskText:not([font-size]) {
  //   font-size: ${i.ganttFontSize};
  // }

  .taskTextOutsideRight {
    fill: ${i.taskTextDarkColor};
    text-anchor: start;
    // font-size: ${i.ganttFontSize};
    font-family: 'trebuchet ms', verdana, arial, sans-serif;
    font-family: var(--mermaid-font-family);

  }

  .taskTextOutsideLeft {
    fill: ${i.taskTextDarkColor};
    text-anchor: end;
    // font-size: ${i.ganttFontSize};
  }

  /* Special case clickable */
  .task.clickable {
    cursor: pointer;
  }
  .taskText.clickable {
    cursor: pointer;
    fill: ${i.taskTextClickableColor} !important;
    font-weight: bold;
  }

  .taskTextOutsideLeft.clickable {
    cursor: pointer;
    fill: ${i.taskTextClickableColor} !important;
    font-weight: bold;
  }

  .taskTextOutsideRight.clickable {
    cursor: pointer;
    fill: ${i.taskTextClickableColor} !important;
    font-weight: bold;
  }

  /* Specific task settings for the sections*/

  .taskText0,
  .taskText1,
  .taskText2,
  .taskText3 {
    fill: ${i.taskTextColor};
  }

  .task0,
  .task1,
  .task2,
  .task3 {
    fill: ${i.taskBkgColor};
    stroke: ${i.taskBorderColor};
  }

  .taskTextOutside0,
  .taskTextOutside2
  {
    fill: ${i.taskTextOutsideColor};
  }

  .taskTextOutside1,
  .taskTextOutside3 {
    fill: ${i.taskTextOutsideColor};
  }


  /* Active task */

  .active0,
  .active1,
  .active2,
  .active3 {
    fill: ${i.activeTaskBkgColor};
    stroke: ${i.activeTaskBorderColor};
  }

  .activeText0,
  .activeText1,
  .activeText2,
  .activeText3 {
    fill: ${i.taskTextDarkColor} !important;
  }


  /* Completed task */

  .done0,
  .done1,
  .done2,
  .done3 {
    stroke: ${i.doneTaskBorderColor};
    fill: ${i.doneTaskBkgColor};
    stroke-width: 2;
  }

  .doneText0,
  .doneText1,
  .doneText2,
  .doneText3 {
    fill: ${i.taskTextDarkColor} !important;
  }


  /* Tasks on the critical line */

  .crit0,
  .crit1,
  .crit2,
  .crit3 {
    stroke: ${i.critBorderColor};
    fill: ${i.critBkgColor};
    stroke-width: 2;
  }

  .activeCrit0,
  .activeCrit1,
  .activeCrit2,
  .activeCrit3 {
    stroke: ${i.critBorderColor};
    fill: ${i.activeTaskBkgColor};
    stroke-width: 2;
  }

  .doneCrit0,
  .doneCrit1,
  .doneCrit2,
  .doneCrit3 {
    stroke: ${i.critBorderColor};
    fill: ${i.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: ${i.taskTextDarkColor} !important;
  }

  .activeCritText0,
  .activeCritText1,
  .activeCritText2,
  .activeCritText3 {
    fill: ${i.taskTextDarkColor} !important;
  }

  .titleText {
    text-anchor: middle;
    font-size: 18px;
    fill: ${i.textColor}    ;
    font-family: 'trebuchet ms', verdana, arial, sans-serif;
    font-family: var(--mermaid-font-family);
  }
`}},Symbol.toStringTag,{value:"Module"}));var Q0t=function(){var i=function(m,b,E,_){for(E=E||{},_=m.length;_--;E[m[_]]=b);return E},a=[6,9,10],f={trace:function(){},yy:{},symbols_:{error:2,start:3,info:4,document:5,EOF:6,line:7,statement:8,NL:9,showInfo:10,$accept:0,$end:1},terminals_:{2:"error",4:"info",6:"EOF",9:"NL",10:"showInfo"},productions_:[0,[3,3],[5,0],[5,2],[7,1],[7,1],[8,1]],performAction:function(b,E,_,L,N,B,j){switch(B.length-1,N){case 1:return L;case 4:break;case 6:L.setInfo(!0);break}},table:[{3:1,4:[1,2]},{1:[3]},i(a,[2,2],{5:3}),{6:[1,4],7:5,8:6,9:[1,7],10:[1,8]},{1:[2,1]},i(a,[2,3]),i(a,[2,4]),i(a,[2,5]),i(a,[2,6])],defaultActions:{4:[2,1]},parseError:function(b,E){if(E.recoverable)this.trace(b);else{var _=new Error(b);throw _.hash=E,_}},parse:function(b){var E=this,_=[0],L=[],N=[null],B=[],j=this.table,R="",z=0,K=0,it=2,st=1,ut=B.slice.call(arguments,1),bt=Object.create(this.lexer),mt={yy:{}};for(var yt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,yt)&&(mt.yy[yt]=this.yy[yt]);bt.setInput(b,mt.yy),mt.yy.lexer=bt,mt.yy.parser=this,typeof bt.yylloc>"u"&&(bt.yylloc={});var dt=bt.yylloc;B.push(dt);var ht=bt.options&&bt.options.ranges;typeof mt.yy.parseError=="function"?this.parseError=mt.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function wt(){var Tt;return Tt=L.pop()||bt.lex()||st,typeof Tt!="number"&&(Tt instanceof Array&&(L=Tt,Tt=L.pop()),Tt=E.symbols_[Tt]||Tt),Tt}for(var X,pt,U,xt,nt={},Ot,Nt,qt,Ct;;){if(pt=_[_.length-1],this.defaultActions[pt]?U=this.defaultActions[pt]:((X===null||typeof X>"u")&&(X=wt()),U=j[pt]&&j[pt][X]),typeof U>"u"||!U.length||!U[0]){var Z="";Ct=[];for(Ot in j[pt])this.terminals_[Ot]&&Ot>it&&Ct.push("'"+this.terminals_[Ot]+"'");bt.showPosition?Z="Parse error on line "+(z+1)+`:
`+bt.showPosition()+`
Expecting `+Ct.join(", ")+", got '"+(this.terminals_[X]||X)+"'":Z="Parse error on line "+(z+1)+": Unexpected "+(X==st?"end of input":"'"+(this.terminals_[X]||X)+"'"),this.parseError(Z,{text:bt.match,token:this.terminals_[X]||X,line:bt.yylineno,loc:dt,expected:Ct})}if(U[0]instanceof Array&&U.length>1)throw new Error("Parse Error: multiple actions possible at state: "+pt+", token: "+X);switch(U[0]){case 1:_.push(X),N.push(bt.yytext),B.push(bt.yylloc),_.push(U[1]),X=null,K=bt.yyleng,R=bt.yytext,z=bt.yylineno,dt=bt.yylloc;break;case 2:if(Nt=this.productions_[U[1]][1],nt.$=N[N.length-Nt],nt._$={first_line:B[B.length-(Nt||1)].first_line,last_line:B[B.length-1].last_line,first_column:B[B.length-(Nt||1)].first_column,last_column:B[B.length-1].last_column},ht&&(nt._$.range=[B[B.length-(Nt||1)].range[0],B[B.length-1].range[1]]),xt=this.performAction.apply(nt,[R,K,z,mt.yy,U[1],N,B].concat(ut)),typeof xt<"u")return xt;Nt&&(_=_.slice(0,-1*Nt*2),N=N.slice(0,-1*Nt),B=B.slice(0,-1*Nt)),_.push(this.productions_[U[1]][0]),N.push(nt.$),B.push(nt._$),qt=j[_[_.length-2]][_[_.length-1]],_.push(qt);break;case 3:return!0}}return!0}},p=function(){var m={EOF:1,parseError:function(E,_){if(this.yy.parser)this.yy.parser.parseError(E,_);else throw new Error(E)},setInput:function(b,E){return this.yy=E||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},input:function(){var b=this._input[0];this.yytext+=b,this.yyleng++,this.offset++,this.match+=b,this.matched+=b;var E=b.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),b},unput:function(b){var E=b.length,_=b.split(/(?:\r\n?|\n)/g);this._input=b+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-E),this.offset-=E;var L=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 N=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===L.length?this.yylloc.first_column:0)+L[L.length-_.length].length-_[0].length:this.yylloc.first_column-E},this.options.ranges&&(this.yylloc.range=[N[0],N[0]+this.yyleng-E]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject: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},less:function(b){this.unput(this.match.slice(b))},pastInput:function(){var b=this.matched.substr(0,this.matched.length-this.match.length);return(b.length>20?"...":"")+b.substr(-20).replace(/\n/g,"")},upcomingInput: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,"")},showPosition:function(){var b=this.pastInput(),E=new Array(b.length+1).join("-");return b+this.upcomingInput()+`
`+E+"^"},test_match:function(b,E){var _,L,N;if(this.options.backtrack_lexer&&(N={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&&(N.yylloc.range=this.yylloc.range.slice(0))),L=b[0].match(/(?:\r\n?|\n).*/g),L&&(this.yylineno+=L.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:L?L[L.length-1].length-L[L.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],_=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 B in N)this[B]=N[B];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var b,E,_,L;this._more||(this.yytext="",this.match="");for(var N=this._currentRules(),B=0;B<N.length;B++)if(_=this._input.match(this.rules[N[B]]),_&&(!E||_[0].length>E[0].length)){if(E=_,L=B,this.options.backtrack_lexer){if(b=this.test_match(_,N[B]),b!==!1)return b;if(this._backtrack){E=!1;continue}else return!1}else if(!this.options.flex)break}return E?(b=this.test_match(E,N[L]),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})},lex:function(){var E=this.next();return E||this.lex()},begin:function(E){this.conditionStack.push(E)},popState:function(){var E=this.conditionStack.length-1;return E>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(E){return E=this.conditionStack.length-1-Math.abs(E||0),E>=0?this.conditionStack[E]:"INITIAL"},pushState:function(E){this.begin(E)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(E,_,L,N){switch(L){case 0:return 4;case 1:return 9;case 2:return"space";case 3:return 10;case 4:return 6;case 5:return"TXT"}},rules:[/^(?:info\b)/i,/^(?:[\s\n\r]+)/i,/^(?:[\s]+)/i,/^(?:showInfo\b)/i,/^(?:$)/i,/^(?:.)/i],conditions:{INITIAL:{rules:[0,1,2,3,4,5],inclusive:!0}}};return m}();f.lexer=p;function v(){this.yy={}}return v.prototype=f,f.Parser=v,new v}();Q0t.parser=Q0t;const xqe=Q0t,iRt={info:!1};let Z0t=iRt.info;const kqe=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:xqe,db:{clear:()=>{Z0t=iRt.info},setInfo:i=>{Z0t=i},getInfo:()=>Z0t},renderer:{draw:(i,a,f)=>{Ut.debug(`rendering info diagram
`+i);const p=fdt(a);og(p,100,400,!0),p.append("g").append("text").attr("x",100).attr("y",40).attr("class","version").attr("font-size",32).style("text-anchor","middle").text(`v${f}`)}}}},Symbol.toStringTag,{value:"Module"}));var J0t=function(){var i=function(bt,mt,yt,dt){for(yt=yt||{},dt=bt.length;dt--;yt[bt[dt]]=mt);return yt},a=[1,3],f=[1,4],p=[1,5],v=[1,6],m=[1,10,12,14,16,18,19,20,21,22],b=[2,4],E=[1,5,10,12,14,16,18,19,20,21,22],_=[20,21,22],L=[2,7],N=[1,12],B=[1,13],j=[1,14],R=[1,15],z=[1,16],K=[1,17],it={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,PIE:5,document:6,showData:7,line:8,statement:9,txt:10,value:11,title:12,title_value:13,acc_title:14,acc_title_value:15,acc_descr:16,acc_descr_value:17,acc_descr_multiline_value:18,section:19,NEWLINE:20,";":21,EOF:22,$accept:0,$end:1},terminals_:{2:"error",5:"PIE",7:"showData",10:"txt",11:"value",12:"title",13:"title_value",14:"acc_title",15:"acc_title_value",16:"acc_descr",17:"acc_descr_value",18:"acc_descr_multiline_value",19:"section",20:"NEWLINE",21:";",22:"EOF"},productions_:[0,[3,2],[3,2],[3,3],[6,0],[6,2],[8,2],[9,0],[9,2],[9,2],[9,2],[9,2],[9,1],[9,1],[4,1],[4,1],[4,1]],performAction:function(mt,yt,dt,ht,wt,X,pt){var U=X.length-1;switch(wt){case 3:ht.setShowData(!0);break;case 6:this.$=X[U-1];break;case 8:ht.addSection(X[U-1],ht.cleanupValue(X[U]));break;case 9:this.$=X[U].trim(),ht.setDiagramTitle(this.$);break;case 10:this.$=X[U].trim(),ht.setAccTitle(this.$);break;case 11:case 12:this.$=X[U].trim(),ht.setAccDescription(this.$);break;case 13:ht.addSection(X[U].substr(8)),this.$=X[U].substr(8);break}},table:[{3:1,4:2,5:a,20:f,21:p,22:v},{1:[3]},{3:7,4:2,5:a,20:f,21:p,22:v},i(m,b,{6:8,7:[1,9]}),i(E,[2,14]),i(E,[2,15]),i(E,[2,16]),{1:[2,1]},i(_,L,{8:10,9:11,1:[2,2],10:N,12:B,14:j,16:R,18:z,19:K}),i(m,b,{6:18}),i(m,[2,5]),{4:19,20:f,21:p,22:v},{11:[1,20]},{13:[1,21]},{15:[1,22]},{17:[1,23]},i(_,[2,12]),i(_,[2,13]),i(_,L,{8:10,9:11,1:[2,3],10:N,12:B,14:j,16:R,18:z,19:K}),i(m,[2,6]),i(_,[2,8]),i(_,[2,9]),i(_,[2,10]),i(_,[2,11])],defaultActions:{7:[2,1]},parseError:function(mt,yt){if(yt.recoverable)this.trace(mt);else{var dt=new Error(mt);throw dt.hash=yt,dt}},parse:function(mt){var yt=this,dt=[0],ht=[],wt=[null],X=[],pt=this.table,U="",xt=0,nt=0,Ot=2,Nt=1,qt=X.slice.call(arguments,1),Ct=Object.create(this.lexer),Z={yy:{}};for(var Tt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Tt)&&(Z.yy[Tt]=this.yy[Tt]);Ct.setInput(mt,Z.yy),Z.yy.lexer=Ct,Z.yy.parser=this,typeof Ct.yylloc>"u"&&(Ct.yylloc={});var Ht=Ct.yylloc;X.push(Ht);var It=Ct.options&&Ct.options.ranges;typeof Z.yy.parseError=="function"?this.parseError=Z.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Ft(){var ie;return ie=ht.pop()||Ct.lex()||Nt,typeof ie!="number"&&(ie instanceof Array&&(ht=ie,ie=ht.pop()),ie=yt.symbols_[ie]||ie),ie}for(var ke,pn,Me,ve,Ge={},Ke,we,_e,$t;;){if(pn=dt[dt.length-1],this.defaultActions[pn]?Me=this.defaultActions[pn]:((ke===null||typeof ke>"u")&&(ke=Ft()),Me=pt[pn]&&pt[pn][ke]),typeof Me>"u"||!Me.length||!Me[0]){var re="";$t=[];for(Ke in pt[pn])this.terminals_[Ke]&&Ke>Ot&&$t.push("'"+this.terminals_[Ke]+"'");Ct.showPosition?re="Parse error on line "+(xt+1)+`:
`+Ct.showPosition()+`
Expecting `+$t.join(", ")+", got '"+(this.terminals_[ke]||ke)+"'":re="Parse error on line "+(xt+1)+": Unexpected "+(ke==Nt?"end of input":"'"+(this.terminals_[ke]||ke)+"'"),this.parseError(re,{text:Ct.match,token:this.terminals_[ke]||ke,line:Ct.yylineno,loc:Ht,expected:$t})}if(Me[0]instanceof Array&&Me.length>1)throw new Error("Parse Error: multiple actions possible at state: "+pn+", token: "+ke);switch(Me[0]){case 1:dt.push(ke),wt.push(Ct.yytext),X.push(Ct.yylloc),dt.push(Me[1]),ke=null,nt=Ct.yyleng,U=Ct.yytext,xt=Ct.yylineno,Ht=Ct.yylloc;break;case 2:if(we=this.productions_[Me[1]][1],Ge.$=wt[wt.length-we],Ge._$={first_line:X[X.length-(we||1)].first_line,last_line:X[X.length-1].last_line,first_column:X[X.length-(we||1)].first_column,last_column:X[X.length-1].last_column},It&&(Ge._$.range=[X[X.length-(we||1)].range[0],X[X.length-1].range[1]]),ve=this.performAction.apply(Ge,[U,nt,xt,Z.yy,Me[1],wt,X].concat(qt)),typeof ve<"u")return ve;we&&(dt=dt.slice(0,-1*we*2),wt=wt.slice(0,-1*we),X=X.slice(0,-1*we)),dt.push(this.productions_[Me[1]][0]),wt.push(Ge.$),X.push(Ge._$),_e=pt[dt[dt.length-2]][dt[dt.length-1]],dt.push(_e);break;case 3:return!0}}return!0}},st=function(){var bt={EOF:1,parseError:function(yt,dt){if(this.yy.parser)this.yy.parser.parseError(yt,dt);else throw new Error(yt)},setInput:function(mt,yt){return this.yy=yt||this.yy||{},this._input=mt,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},input:function(){var mt=this._input[0];this.yytext+=mt,this.yyleng++,this.offset++,this.match+=mt,this.matched+=mt;var yt=mt.match(/(?:\r\n?|\n).*/g);return yt?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),mt},unput:function(mt){var yt=mt.length,dt=mt.split(/(?:\r\n?|\n)/g);this._input=mt+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-yt),this.offset-=yt;var ht=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),dt.length-1&&(this.yylineno-=dt.length-1);var wt=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:dt?(dt.length===ht.length?this.yylloc.first_column:0)+ht[ht.length-dt.length].length-dt[0].length:this.yylloc.first_column-yt},this.options.ranges&&(this.yylloc.range=[wt[0],wt[0]+this.yyleng-yt]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject: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},less:function(mt){this.unput(this.match.slice(mt))},pastInput:function(){var mt=this.matched.substr(0,this.matched.length-this.match.length);return(mt.length>20?"...":"")+mt.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var mt=this.match;return mt.length<20&&(mt+=this._input.substr(0,20-mt.length)),(mt.substr(0,20)+(mt.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var mt=this.pastInput(),yt=new Array(mt.length+1).join("-");return mt+this.upcomingInput()+`
`+yt+"^"},test_match:function(mt,yt){var dt,ht,wt;if(this.options.backtrack_lexer&&(wt={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&&(wt.yylloc.range=this.yylloc.range.slice(0))),ht=mt[0].match(/(?:\r\n?|\n).*/g),ht&&(this.yylineno+=ht.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:ht?ht[ht.length-1].length-ht[ht.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+mt[0].length},this.yytext+=mt[0],this.match+=mt[0],this.matches=mt,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(mt[0].length),this.matched+=mt[0],dt=this.performAction.call(this,this.yy,this,yt,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),dt)return dt;if(this._backtrack){for(var X in wt)this[X]=wt[X];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var mt,yt,dt,ht;this._more||(this.yytext="",this.match="");for(var wt=this._currentRules(),X=0;X<wt.length;X++)if(dt=this._input.match(this.rules[wt[X]]),dt&&(!yt||dt[0].length>yt[0].length)){if(yt=dt,ht=X,this.options.backtrack_lexer){if(mt=this.test_match(dt,wt[X]),mt!==!1)return mt;if(this._backtrack){yt=!1;continue}else return!1}else if(!this.options.flex)break}return yt?(mt=this.test_match(yt,wt[ht]),mt!==!1?mt:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text.
`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var yt=this.next();return yt||this.lex()},begin:function(yt){this.conditionStack.push(yt)},popState:function(){var yt=this.conditionStack.length-1;return yt>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(yt){return yt=this.conditionStack.length-1-Math.abs(yt||0),yt>=0?this.conditionStack[yt]:"INITIAL"},pushState:function(yt){this.begin(yt)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(yt,dt,ht,wt){switch(ht){case 0:break;case 1:break;case 2:return 20;case 3:break;case 4:break;case 5:return this.begin("title"),12;case 6:return this.popState(),"title_value";case 7:return this.begin("acc_title"),14;case 8:return this.popState(),"acc_title_value";case 9:return this.begin("acc_descr"),16;case 10:return this.popState(),"acc_descr_value";case 11:this.begin("acc_descr_multiline");break;case 12:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:this.begin("string");break;case 15:this.popState();break;case 16:return"txt";case 17:return 5;case 18:return 7;case 19:return"value";case 20:return 22}},rules:[/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:[\s]+)/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,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:pie\b)/i,/^(?:showData\b)/i,/^(?::[\s]*[\d]+(?:\.[\d]+)?)/i,/^(?:$)/i],conditions:{acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},title:{rules:[6],inclusive:!1},string:{rules:[15,16],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,7,9,11,14,17,18,19,20],inclusive:!0}}};return bt}();it.lexer=st;function ut(){this.yy={}}return ut.prototype=it,it.Parser=ut,new ut}();J0t.parser=J0t;const Eqe=J0t,sRt=Lf.pie,CK={sections:{},showData:!1,config:sRt};let _K=CK.sections,tgt=CK.showData;const Tqe=structuredClone(sRt),Cqe={getConfig:()=>structuredClone(Tqe),clear:()=>{_K=structuredClone(CK.sections),tgt=CK.showData,ap()},setDiagramTitle:Z2,getDiagramTitle:Db,setAccTitle:cg,getAccTitle:op,setAccDescription:cp,getAccDescription:up,addSection:(i,a)=>{i=Dd(i,Le()),_K[i]===void 0&&(_K[i]=a,Ut.debug(`added new section: ${i}, with value: ${a}`))},getSections:()=>_K,cleanupValue:i=>(i.substring(0,1)===":"&&(i=i.substring(1).trim()),Number(i.trim())),setShowData:i=>{tgt=i},getShowData:()=>tgt},_qe=i=>`
  .pieCircle{
    stroke: ${i.pieStrokeColor};
    stroke-width : ${i.pieStrokeWidth};
    opacity : ${i.pieOpacity};
  }
  .pieOuterCircle{
    stroke: ${i.pieOuterStrokeColor};
    stroke-width: ${i.pieOuterStrokeWidth};
    fill: none;
  }
  .pieTitleText {
    text-anchor: middle;
    font-size: ${i.pieTitleTextSize};
    fill: ${i.pieTitleTextColor};
    font-family: ${i.fontFamily};
  }
  .slice {
    font-family: ${i.fontFamily};
    fill: ${i.pieSectionTextColor};
    font-size:${i.pieSectionTextSize};
    // fill: white;
  }
  .legend text {
    fill: ${i.pieLegendTextColor};
    font-family: ${i.fontFamily};
    font-size: ${i.pieLegendTextSize};
  }
`,Sqe=i=>{const a=Object.entries(i).map(p=>({label:p[0],value:p[1]})).sort((p,v)=>v.value-p.value);return $7e().value(p=>p.value)(a)},Aqe=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:Eqe,db:Cqe,renderer:{draw:(i,a,f,p)=>{var pt,U;Ut.debug(`rendering pie chart
`+i);const v=p.db,m=Le(),b=idt(v.getConfig(),m.pie),E=450,_=((U=(pt=document.getElementById(a))==null?void 0:pt.parentElement)==null?void 0:U.offsetWidth)??b.useWidth,L=fdt(a);L.attr("viewBox",`0 0 ${_} ${E}`),og(L,E,_,b.useMaxWidth);const N=40,B=18,j=4,R=L.append("g");R.attr("transform","translate("+_/2+","+E/2+")");const{themeVariables:z}=m;let[K]=$A(z.pieOuterStrokeWidth);K??(K=2);const it=b.textPosition,st=Math.min(_,E)/2-N,ut=LA().innerRadius(0).outerRadius(st),bt=LA().innerRadius(st*it).outerRadius(st*it);R.append("circle").attr("cx",0).attr("cy",0).attr("r",st+K/2).attr("class","pieOuterCircle");const mt=v.getSections(),yt=Sqe(mt),dt=[z.pie1,z.pie2,z.pie3,z.pie4,z.pie5,z.pie6,z.pie7,z.pie8,z.pie9,z.pie10,z.pie11,z.pie12],ht=x1t(dt);R.selectAll("mySlices").data(yt).enter().append("path").attr("d",ut).attr("fill",xt=>ht(xt.data.label)).attr("class","pieCircle");let wt=0;Object.keys(mt).forEach(xt=>{wt+=mt[xt]}),R.selectAll("mySlices").data(yt).enter().append("text").text(xt=>(xt.data.value/wt*100).toFixed(0)+"%").attr("transform",xt=>"translate("+bt.centroid(xt)+")").style("text-anchor","middle").attr("class","slice"),R.append("text").text(v.getDiagramTitle()).attr("x",0).attr("y",-(E-50)/2).attr("class","pieTitleText");const X=R.selectAll(".legend").data(ht.domain()).enter().append("g").attr("class","legend").attr("transform",(xt,nt)=>{const Ot=B+j,Nt=Ot*ht.domain().length/2,qt=12*B,Ct=nt*Ot-Nt;return"translate("+qt+","+Ct+")"});X.append("rect").attr("width",B).attr("height",B).style("fill",ht).style("stroke",ht),X.data(yt).append("text").attr("x",B+j).attr("y",B-j).text(xt=>{const{label:nt,value:Ot}=xt.data;return v.getShowData()?`${nt} [${Ot}]`:nt})}},styles:_qe}},Symbol.toStringTag,{value:"Module"}));var egt=function(){var i=function(Me,ve,Ge,Ke){for(Ge=Ge||{},Ke=Me.length;Ke--;Ge[Me[Ke]]=ve);return Ge},a=[1,3],f=[1,4],p=[1,5],v=[1,6],m=[1,7],b=[1,5,13,15,17,19,20,25,27,28,29,30,31,32,33,34,37,38,40,41,42,43,44,45,46,47,48,49,50],E=[1,5,6,13,15,17,19,20,25,27,28,29,30,31,32,33,34,37,38,40,41,42,43,44,45,46,47,48,49,50],_=[32,33,34],L=[2,7],N=[1,13],B=[1,17],j=[1,18],R=[1,19],z=[1,20],K=[1,21],it=[1,22],st=[1,23],ut=[1,24],bt=[1,25],mt=[1,26],yt=[1,27],dt=[1,30],ht=[1,31],wt=[1,32],X=[1,33],pt=[1,34],U=[1,35],xt=[1,36],nt=[1,37],Ot=[1,38],Nt=[1,39],qt=[1,40],Ct=[1,41],Z=[1,42],Tt=[1,57],Ht=[1,58],It=[5,22,26,32,33,34,40,41,42,43,44,45,46,47,48,49,50,51],Ft={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,SPACE:5,QUADRANT:6,document:7,line:8,statement:9,axisDetails:10,quadrantDetails:11,points:12,title:13,title_value:14,acc_title:15,acc_title_value:16,acc_descr:17,acc_descr_value:18,acc_descr_multiline_value:19,section:20,text:21,point_start:22,point_x:23,point_y:24,"X-AXIS":25,"AXIS-TEXT-DELIMITER":26,"Y-AXIS":27,QUADRANT_1:28,QUADRANT_2:29,QUADRANT_3:30,QUADRANT_4:31,NEWLINE:32,SEMI:33,EOF:34,alphaNumToken:35,textNoTagsToken:36,STR:37,MD_STR:38,alphaNum:39,PUNCTUATION:40,AMP:41,NUM:42,ALPHA:43,COMMA:44,PLUS:45,EQUALS:46,MULT:47,DOT:48,BRKT:49,UNDERSCORE:50,MINUS:51,$accept:0,$end:1},terminals_:{2:"error",5:"SPACE",6:"QUADRANT",13:"title",14:"title_value",15:"acc_title",16:"acc_title_value",17:"acc_descr",18:"acc_descr_value",19:"acc_descr_multiline_value",20:"section",22:"point_start",23:"point_x",24:"point_y",25:"X-AXIS",26:"AXIS-TEXT-DELIMITER",27:"Y-AXIS",28:"QUADRANT_1",29:"QUADRANT_2",30:"QUADRANT_3",31:"QUADRANT_4",32:"NEWLINE",33:"SEMI",34:"EOF",37:"STR",38:"MD_STR",40:"PUNCTUATION",41:"AMP",42:"NUM",43:"ALPHA",44:"COMMA",45:"PLUS",46:"EQUALS",47:"MULT",48:"DOT",49:"BRKT",50:"UNDERSCORE",51:"MINUS"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[9,0],[9,2],[9,1],[9,1],[9,1],[9,2],[9,2],[9,2],[9,1],[9,1],[12,4],[10,4],[10,3],[10,2],[10,4],[10,3],[10,2],[11,2],[11,2],[11,2],[11,2],[4,1],[4,1],[4,1],[21,1],[21,2],[21,1],[21,1],[39,1],[39,2],[35,1],[35,1],[35,1],[35,1],[35,1],[35,1],[35,1],[35,1],[35,1],[35,1],[35,1],[36,1],[36,1],[36,1]],performAction:function(ve,Ge,Ke,we,_e,$t,re){var ie=$t.length-1;switch(_e){case 12:this.$=$t[ie].trim(),we.setDiagramTitle(this.$);break;case 13:this.$=$t[ie].trim(),we.setAccTitle(this.$);break;case 14:case 15:this.$=$t[ie].trim(),we.setAccDescription(this.$);break;case 16:we.addSection($t[ie].substr(8)),this.$=$t[ie].substr(8);break;case 17:we.addPoint($t[ie-3],$t[ie-1],$t[ie]);break;case 18:we.setXAxisLeftText($t[ie-2]),we.setXAxisRightText($t[ie]);break;case 19:$t[ie-1].text+=" ⟶ ",we.setXAxisLeftText($t[ie-1]);break;case 20:we.setXAxisLeftText($t[ie]);break;case 21:we.setYAxisBottomText($t[ie-2]),we.setYAxisTopText($t[ie]);break;case 22:$t[ie-1].text+=" ⟶ ",we.setYAxisBottomText($t[ie-1]);break;case 23:we.setYAxisBottomText($t[ie]);break;case 24:we.setQuadrant1Text($t[ie]);break;case 25:we.setQuadrant2Text($t[ie]);break;case 26:we.setQuadrant3Text($t[ie]);break;case 27:we.setQuadrant4Text($t[ie]);break;case 31:this.$={text:$t[ie],type:"text"};break;case 32:this.$={text:$t[ie-1].text+""+$t[ie],type:$t[ie-1].type};break;case 33:this.$={text:$t[ie],type:"text"};break;case 34:this.$={text:$t[ie],type:"markdown"};break;case 35:this.$=$t[ie];break;case 36:this.$=$t[ie-1]+""+$t[ie];break}},table:[{3:1,4:2,5:a,6:f,32:p,33:v,34:m},{1:[3]},{3:8,4:2,5:a,6:f,32:p,33:v,34:m},{3:9,4:2,5:a,6:f,32:p,33:v,34:m},i(b,[2,4],{7:10}),i(E,[2,28]),i(E,[2,29]),i(E,[2,30]),{1:[2,1]},{1:[2,2]},i(_,L,{8:11,9:12,10:14,11:15,12:16,21:28,35:29,1:[2,3],5:N,13:B,15:j,17:R,19:z,20:K,25:it,27:st,28:ut,29:bt,30:mt,31:yt,37:dt,38:ht,40:wt,41:X,42:pt,43:U,44:xt,45:nt,46:Ot,47:Nt,48:qt,49:Ct,50:Z}),i(b,[2,5]),{4:43,32:p,33:v,34:m},i(_,L,{10:14,11:15,12:16,21:28,35:29,9:44,5:N,13:B,15:j,17:R,19:z,20:K,25:it,27:st,28:ut,29:bt,30:mt,31:yt,37:dt,38:ht,40:wt,41:X,42:pt,43:U,44:xt,45:nt,46:Ot,47:Nt,48:qt,49:Ct,50:Z}),i(_,[2,9]),i(_,[2,10]),i(_,[2,11]),{14:[1,45]},{16:[1,46]},{18:[1,47]},i(_,[2,15]),i(_,[2,16]),{21:48,35:29,37:dt,38:ht,40:wt,41:X,42:pt,43:U,44:xt,45:nt,46:Ot,47:Nt,48:qt,49:Ct,50:Z},{21:49,35:29,37:dt,38:ht,40:wt,41:X,42:pt,43:U,44:xt,45:nt,46:Ot,47:Nt,48:qt,49:Ct,50:Z},{21:50,35:29,37:dt,38:ht,40:wt,41:X,42:pt,43:U,44:xt,45:nt,46:Ot,47:Nt,48:qt,49:Ct,50:Z},{21:51,35:29,37:dt,38:ht,40:wt,41:X,42:pt,43:U,44:xt,45:nt,46:Ot,47:Nt,48:qt,49:Ct,50:Z},{21:52,35:29,37:dt,38:ht,40:wt,41:X,42:pt,43:U,44:xt,45:nt,46:Ot,47:Nt,48:qt,49:Ct,50:Z},{21:53,35:29,37:dt,38:ht,40:wt,41:X,42:pt,43:U,44:xt,45:nt,46:Ot,47:Nt,48:qt,49:Ct,50:Z},{5:Tt,22:[1,54],35:56,36:55,40:wt,41:X,42:pt,43:U,44:xt,45:nt,46:Ot,47:Nt,48:qt,49:Ct,50:Z,51:Ht},i(It,[2,31]),i(It,[2,33]),i(It,[2,34]),i(It,[2,37]),i(It,[2,38]),i(It,[2,39]),i(It,[2,40]),i(It,[2,41]),i(It,[2,42]),i(It,[2,43]),i(It,[2,44]),i(It,[2,45]),i(It,[2,46]),i(It,[2,47]),i(b,[2,6]),i(_,[2,8]),i(_,[2,12]),i(_,[2,13]),i(_,[2,14]),i(_,[2,20],{36:55,35:56,5:Tt,26:[1,59],40:wt,41:X,42:pt,43:U,44:xt,45:nt,46:Ot,47:Nt,48:qt,49:Ct,50:Z,51:Ht}),i(_,[2,23],{36:55,35:56,5:Tt,26:[1,60],40:wt,41:X,42:pt,43:U,44:xt,45:nt,46:Ot,47:Nt,48:qt,49:Ct,50:Z,51:Ht}),i(_,[2,24],{36:55,35:56,5:Tt,40:wt,41:X,42:pt,43:U,44:xt,45:nt,46:Ot,47:Nt,48:qt,49:Ct,50:Z,51:Ht}),i(_,[2,25],{36:55,35:56,5:Tt,40:wt,41:X,42:pt,43:U,44:xt,45:nt,46:Ot,47:Nt,48:qt,49:Ct,50:Z,51:Ht}),i(_,[2,26],{36:55,35:56,5:Tt,40:wt,41:X,42:pt,43:U,44:xt,45:nt,46:Ot,47:Nt,48:qt,49:Ct,50:Z,51:Ht}),i(_,[2,27],{36:55,35:56,5:Tt,40:wt,41:X,42:pt,43:U,44:xt,45:nt,46:Ot,47:Nt,48:qt,49:Ct,50:Z,51:Ht}),{23:[1,61]},i(It,[2,32]),i(It,[2,48]),i(It,[2,49]),i(It,[2,50]),i(_,[2,19],{35:29,21:62,37:dt,38:ht,40:wt,41:X,42:pt,43:U,44:xt,45:nt,46:Ot,47:Nt,48:qt,49:Ct,50:Z}),i(_,[2,22],{35:29,21:63,37:dt,38:ht,40:wt,41:X,42:pt,43:U,44:xt,45:nt,46:Ot,47:Nt,48:qt,49:Ct,50:Z}),{24:[1,64]},i(_,[2,18],{36:55,35:56,5:Tt,40:wt,41:X,42:pt,43:U,44:xt,45:nt,46:Ot,47:Nt,48:qt,49:Ct,50:Z,51:Ht}),i(_,[2,21],{36:55,35:56,5:Tt,40:wt,41:X,42:pt,43:U,44:xt,45:nt,46:Ot,47:Nt,48:qt,49:Ct,50:Z,51:Ht}),i(_,[2,17])],defaultActions:{8:[2,1],9:[2,2]},parseError:function(ve,Ge){if(Ge.recoverable)this.trace(ve);else{var Ke=new Error(ve);throw Ke.hash=Ge,Ke}},parse:function(ve){var Ge=this,Ke=[0],we=[],_e=[null],$t=[],re=this.table,ie="",Oe=0,oe=0,Ne=2,me=1,cn=$t.slice.call(arguments,1),li=Object.create(this.lexer),ya={yy:{}};for(var da in this.yy)Object.prototype.hasOwnProperty.call(this.yy,da)&&(ya.yy[da]=this.yy[da]);li.setInput(ve,ya.yy),ya.yy.lexer=li,ya.yy.parser=this,typeof li.yylloc>"u"&&(li.yylloc={});var Oo=li.yylloc;$t.push(Oo);var ds=li.options&&li.options.ranges;typeof ya.yy.parseError=="function"?this.parseError=ya.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Dr(){var Gs;return Gs=we.pop()||li.lex()||me,typeof Gs!="number"&&(Gs instanceof Array&&(we=Gs,Gs=we.pop()),Gs=Ge.symbols_[Gs]||Gs),Gs}for(var nr,di,Ee,Yn,He={},Ti,gn,ks,qa;;){if(di=Ke[Ke.length-1],this.defaultActions[di]?Ee=this.defaultActions[di]:((nr===null||typeof nr>"u")&&(nr=Dr()),Ee=re[di]&&re[di][nr]),typeof Ee>"u"||!Ee.length||!Ee[0]){var La="";qa=[];for(Ti in re[di])this.terminals_[Ti]&&Ti>Ne&&qa.push("'"+this.terminals_[Ti]+"'");li.showPosition?La="Parse error on line "+(Oe+1)+`:
`+li.showPosition()+`
Expecting `+qa.join(", ")+", got '"+(this.terminals_[nr]||nr)+"'":La="Parse error on line "+(Oe+1)+": Unexpected "+(nr==me?"end of input":"'"+(this.terminals_[nr]||nr)+"'"),this.parseError(La,{text:li.match,token:this.terminals_[nr]||nr,line:li.yylineno,loc:Oo,expected:qa})}if(Ee[0]instanceof Array&&Ee.length>1)throw new Error("Parse Error: multiple actions possible at state: "+di+", token: "+nr);switch(Ee[0]){case 1:Ke.push(nr),_e.push(li.yytext),$t.push(li.yylloc),Ke.push(Ee[1]),nr=null,oe=li.yyleng,ie=li.yytext,Oe=li.yylineno,Oo=li.yylloc;break;case 2:if(gn=this.productions_[Ee[1]][1],He.$=_e[_e.length-gn],He._$={first_line:$t[$t.length-(gn||1)].first_line,last_line:$t[$t.length-1].last_line,first_column:$t[$t.length-(gn||1)].first_column,last_column:$t[$t.length-1].last_column},ds&&(He._$.range=[$t[$t.length-(gn||1)].range[0],$t[$t.length-1].range[1]]),Yn=this.performAction.apply(He,[ie,oe,Oe,ya.yy,Ee[1],_e,$t].concat(cn)),typeof Yn<"u")return Yn;gn&&(Ke=Ke.slice(0,-1*gn*2),_e=_e.slice(0,-1*gn),$t=$t.slice(0,-1*gn)),Ke.push(this.productions_[Ee[1]][0]),_e.push(He.$),$t.push(He._$),ks=re[Ke[Ke.length-2]][Ke[Ke.length-1]],Ke.push(ks);break;case 3:return!0}}return!0}},ke=function(){var Me={EOF:1,parseError:function(Ge,Ke){if(this.yy.parser)this.yy.parser.parseError(Ge,Ke);else throw new Error(Ge)},setInput:function(ve,Ge){return this.yy=Ge||this.yy||{},this._input=ve,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},input:function(){var ve=this._input[0];this.yytext+=ve,this.yyleng++,this.offset++,this.match+=ve,this.matched+=ve;var Ge=ve.match(/(?:\r\n?|\n).*/g);return Ge?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),ve},unput:function(ve){var Ge=ve.length,Ke=ve.split(/(?:\r\n?|\n)/g);this._input=ve+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-Ge),this.offset-=Ge;var we=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),Ke.length-1&&(this.yylineno-=Ke.length-1);var _e=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:Ke?(Ke.length===we.length?this.yylloc.first_column:0)+we[we.length-Ke.length].length-Ke[0].length:this.yylloc.first_column-Ge},this.options.ranges&&(this.yylloc.range=[_e[0],_e[0]+this.yyleng-Ge]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject: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},less:function(ve){this.unput(this.match.slice(ve))},pastInput:function(){var ve=this.matched.substr(0,this.matched.length-this.match.length);return(ve.length>20?"...":"")+ve.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var ve=this.match;return ve.length<20&&(ve+=this._input.substr(0,20-ve.length)),(ve.substr(0,20)+(ve.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var ve=this.pastInput(),Ge=new Array(ve.length+1).join("-");return ve+this.upcomingInput()+`
`+Ge+"^"},test_match:function(ve,Ge){var Ke,we,_e;if(this.options.backtrack_lexer&&(_e={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&&(_e.yylloc.range=this.yylloc.range.slice(0))),we=ve[0].match(/(?:\r\n?|\n).*/g),we&&(this.yylineno+=we.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:we?we[we.length-1].length-we[we.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+ve[0].length},this.yytext+=ve[0],this.match+=ve[0],this.matches=ve,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(ve[0].length),this.matched+=ve[0],Ke=this.performAction.call(this,this.yy,this,Ge,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),Ke)return Ke;if(this._backtrack){for(var $t in _e)this[$t]=_e[$t];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var ve,Ge,Ke,we;this._more||(this.yytext="",this.match="");for(var _e=this._currentRules(),$t=0;$t<_e.length;$t++)if(Ke=this._input.match(this.rules[_e[$t]]),Ke&&(!Ge||Ke[0].length>Ge[0].length)){if(Ge=Ke,we=$t,this.options.backtrack_lexer){if(ve=this.test_match(Ke,_e[$t]),ve!==!1)return ve;if(this._backtrack){Ge=!1;continue}else return!1}else if(!this.options.flex)break}return Ge?(ve=this.test_match(Ge,_e[we]),ve!==!1?ve:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text.
`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var Ge=this.next();return Ge||this.lex()},begin:function(Ge){this.conditionStack.push(Ge)},popState:function(){var Ge=this.conditionStack.length-1;return Ge>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(Ge){return Ge=this.conditionStack.length-1-Math.abs(Ge||0),Ge>=0?this.conditionStack[Ge]:"INITIAL"},pushState:function(Ge){this.begin(Ge)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(Ge,Ke,we,_e){switch(we){case 0:break;case 1:break;case 2:return 32;case 3:break;case 4:return this.begin("title"),13;case 5:return this.popState(),"title_value";case 6:return this.begin("acc_title"),15;case 7:return this.popState(),"acc_title_value";case 8:return this.begin("acc_descr"),17;case 9:return this.popState(),"acc_descr_value";case 10:this.begin("acc_descr_multiline");break;case 11:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:return 25;case 14:return 27;case 15:return 26;case 16:return 28;case 17:return 29;case 18:return 30;case 19:return 31;case 20:this.begin("md_string");break;case 21:return"MD_STR";case 22:this.popState();break;case 23:this.begin("string");break;case 24:this.popState();break;case 25:return"STR";case 26:return this.begin("point_start"),22;case 27:return this.begin("point_x"),23;case 28:this.popState();break;case 29:this.popState(),this.begin("point_y");break;case 30:return this.popState(),24;case 31:return 6;case 32:return 43;case 33:return"COLON";case 34:return 45;case 35:return 44;case 36:return 46;case 37:return 46;case 38:return 47;case 39:return 49;case 40:return 50;case 41:return 48;case 42:return 41;case 43:return 51;case 44:return 42;case 45:return 5;case 46:return 33;case 47:return 40;case 48:return 34}},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,/^(?:["][`])/i,/^(?:[^`"]+)/i,/^(?:[`]["])/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/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:{point_y:{rules:[30],inclusive:!1},point_x:{rules:[29],inclusive:!1},point_start:{rules:[27,28],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:[21,22],inclusive:!1},string:{rules:[24,25],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,6,8,10,13,14,15,16,17,18,19,20,23,26,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48],inclusive:!0}}};return Me}();Ft.lexer=ke;function pn(){this.yy={}}return pn.prototype=Ft,Ft.Parser=pn,new pn}();egt.parser=egt;const Lqe=egt,fg=nDt();class Mqe{constructor(){this.config=this.getDefaultConfig(),this.themeConfig=this.getDefaultThemeConfig(),this.data=this.getDefaultData()}getDefaultData(){return{titleText:"",quadrant1Text:"",quadrant2Text:"",quadrant3Text:"",quadrant4Text:"",xAxisLeftText:"",xAxisRightText:"",yAxisBottomText:"",yAxisTopText:"",points:[]}}getDefaultConfig(){var a,f,p,v,m,b,E,_,L,N,B,j,R,z,K,it,st,ut;return{showXAxis:!0,showYAxis:!0,showTitle:!0,chartHeight:((a=Lf.quadrantChart)==null?void 0:a.chartWidth)||500,chartWidth:((f=Lf.quadrantChart)==null?void 0:f.chartHeight)||500,titlePadding:((p=Lf.quadrantChart)==null?void 0:p.titlePadding)||10,titleFontSize:((v=Lf.quadrantChart)==null?void 0:v.titleFontSize)||20,quadrantPadding:((m=Lf.quadrantChart)==null?void 0:m.quadrantPadding)||5,xAxisLabelPadding:((b=Lf.quadrantChart)==null?void 0:b.xAxisLabelPadding)||5,yAxisLabelPadding:((E=Lf.quadrantChart)==null?void 0:E.yAxisLabelPadding)||5,xAxisLabelFontSize:((_=Lf.quadrantChart)==null?void 0:_.xAxisLabelFontSize)||16,yAxisLabelFontSize:((L=Lf.quadrantChart)==null?void 0:L.yAxisLabelFontSize)||16,quadrantLabelFontSize:((N=Lf.quadrantChart)==null?void 0:N.quadrantLabelFontSize)||16,quadrantTextTopPadding:((B=Lf.quadrantChart)==null?void 0:B.quadrantTextTopPadding)||5,pointTextPadding:((j=Lf.quadrantChart)==null?void 0:j.pointTextPadding)||5,pointLabelFontSize:((R=Lf.quadrantChart)==null?void 0:R.pointLabelFontSize)||12,pointRadius:((z=Lf.quadrantChart)==null?void 0:z.pointRadius)||5,xAxisPosition:((K=Lf.quadrantChart)==null?void 0:K.xAxisPosition)||"top",yAxisPosition:((it=Lf.quadrantChart)==null?void 0:it.yAxisPosition)||"left",quadrantInternalBorderStrokeWidth:((st=Lf.quadrantChart)==null?void 0:st.quadrantInternalBorderStrokeWidth)||1,quadrantExternalBorderStrokeWidth:((ut=Lf.quadrantChart)==null?void 0:ut.quadrantExternalBorderStrokeWidth)||2}}getDefaultThemeConfig(){return{quadrant1Fill:fg.quadrant1Fill,quadrant2Fill:fg.quadrant2Fill,quadrant3Fill:fg.quadrant3Fill,quadrant4Fill:fg.quadrant4Fill,quadrant1TextFill:fg.quadrant1TextFill,quadrant2TextFill:fg.quadrant2TextFill,quadrant3TextFill:fg.quadrant3TextFill,quadrant4TextFill:fg.quadrant4TextFill,quadrantPointFill:fg.quadrantPointFill,quadrantPointTextFill:fg.quadrantPointTextFill,quadrantXAxisTextFill:fg.quadrantXAxisTextFill,quadrantYAxisTextFill:fg.quadrantYAxisTextFill,quadrantTitleFill:fg.quadrantTitleFill,quadrantInternalBorderStrokeFill:fg.quadrantInternalBorderStrokeFill,quadrantExternalBorderStrokeFill:fg.quadrantExternalBorderStrokeFill}}clear(){this.config=this.getDefaultConfig(),this.themeConfig=this.getDefaultThemeConfig(),this.data=this.getDefaultData(),Ut.info("clear called")}setData(a){this.data={...this.data,...a}}addPoints(a){this.data.points=[...a,...this.data.points]}setConfig(a){Ut.trace("setConfig called with: ",a),this.config={...this.config,...a}}setThemeConfig(a){Ut.trace("setThemeConfig called with: ",a),this.themeConfig={...this.themeConfig,...a}}calculateSpace(a,f,p,v){const m=this.config.xAxisLabelPadding*2+this.config.xAxisLabelFontSize,b={top:a==="top"&&f?m:0,bottom:a==="bottom"&&f?m:0},E=this.config.yAxisLabelPadding*2+this.config.yAxisLabelFontSize,_={left:this.config.yAxisPosition==="left"&&p?E:0,right:this.config.yAxisPosition==="right"&&p?E:0},L=this.config.titleFontSize+this.config.titlePadding*2,N={top:v?L:0},B=this.config.quadrantPadding+_.left,j=this.config.quadrantPadding+b.top+N.top,R=this.config.chartWidth-this.config.quadrantPadding*2-_.left-_.right,z=this.config.chartHeight-this.config.quadrantPadding*2-b.top-b.bottom-N.top,K=R/2,it=z/2;return{xAxisSpace:b,yAxisSpace:_,titleSpace:N,quadrantSpace:{quadrantLeft:B,quadrantTop:j,quadrantWidth:R,quadrantHalfWidth:K,quadrantHeight:z,quadrantHalfHeight:it}}}getAxisLabels(a,f,p,v){const{quadrantSpace:m,titleSpace:b}=v,{quadrantHalfHeight:E,quadrantHeight:_,quadrantLeft:L,quadrantHalfWidth:N,quadrantTop:B,quadrantWidth:j}=m,R=this.data.points.length===0,z=[];return this.data.xAxisLeftText&&f&&z.push({text:this.data.xAxisLeftText,fill:this.themeConfig.quadrantXAxisTextFill,x:L+(R?N/2:0),y:a==="top"?this.config.xAxisLabelPadding+b.top:this.config.xAxisLabelPadding+B+_+this.config.quadrantPadding,fontSize:this.config.xAxisLabelFontSize,verticalPos:R?"center":"left",horizontalPos:"top",rotation:0}),this.data.xAxisRightText&&f&&z.push({text:this.data.xAxisRightText,fill:this.themeConfig.quadrantXAxisTextFill,x:L+N+(R?N/2:0),y:a==="top"?this.config.xAxisLabelPadding+b.top:this.config.xAxisLabelPadding+B+_+this.config.quadrantPadding,fontSize:this.config.xAxisLabelFontSize,verticalPos:R?"center":"left",horizontalPos:"top",rotation:0}),this.data.yAxisBottomText&&p&&z.push({text:this.data.yAxisBottomText,fill:this.themeConfig.quadrantYAxisTextFill,x:this.config.yAxisPosition==="left"?this.config.yAxisLabelPadding:this.config.yAxisLabelPadding+L+j+this.config.quadrantPadding,y:B+_-(R?E/2:0),fontSize:this.config.yAxisLabelFontSize,verticalPos:R?"center":"left",horizontalPos:"top",rotation:-90}),this.data.yAxisTopText&&p&&z.push({text:this.data.yAxisTopText,fill:this.themeConfig.quadrantYAxisTextFill,x:this.config.yAxisPosition==="left"?this.config.yAxisLabelPadding:this.config.yAxisLabelPadding+L+j+this.config.quadrantPadding,y:B+E-(R?E/2:0),fontSize:this.config.yAxisLabelFontSize,verticalPos:R?"center":"left",horizontalPos:"top",rotation:-90}),z}getQuadrants(a){const{quadrantSpace:f}=a,{quadrantHalfHeight:p,quadrantLeft:v,quadrantHalfWidth:m,quadrantTop:b}=f,E=[{text:{text:this.data.quadrant1Text,fill:this.themeConfig.quadrant1TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:v+m,y:b,width:m,height:p,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:v,y:b,width:m,height:p,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:v,y:b+p,width:m,height:p,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:v+m,y:b+p,width:m,height:p,fill:this.themeConfig.quadrant4Fill}];for(const _ of E)_.text.x=_.x+_.width/2,this.data.points.length===0?(_.text.y=_.y+_.height/2,_.text.horizontalPos="middle"):(_.text.y=_.y+this.config.quadrantTextTopPadding,_.text.horizontalPos="top");return E}getQuadrantPoints(a){const{quadrantSpace:f}=a,{quadrantHeight:p,quadrantLeft:v,quadrantTop:m,quadrantWidth:b}=f,E=BU().domain([0,1]).range([v,b+v]),_=BU().domain([0,1]).range([p+m,m]);return this.data.points.map(N=>({x:E(N.x),y:_(N.y),fill:this.themeConfig.quadrantPointFill,radius:this.config.pointRadius,text:{text:N.text,fill:this.themeConfig.quadrantPointTextFill,x:E(N.x),y:_(N.y)+this.config.pointTextPadding,verticalPos:"center",horizontalPos:"top",fontSize:this.config.pointLabelFontSize,rotation:0}}))}getBorders(a){const f=this.config.quadrantExternalBorderStrokeWidth/2,{quadrantSpace:p}=a,{quadrantHalfHeight:v,quadrantHeight:m,quadrantLeft:b,quadrantHalfWidth:E,quadrantTop:_,quadrantWidth:L}=p;return[{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:b-f,y1:_,x2:b+L+f,y2:_},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:b+L,y1:_+f,x2:b+L,y2:_+m-f},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:b-f,y1:_+m,x2:b+L+f,y2:_+m},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:b,y1:_+f,x2:b,y2:_+m-f},{strokeFill:this.themeConfig.quadrantInternalBorderStrokeFill,strokeWidth:this.config.quadrantInternalBorderStrokeWidth,x1:b+E,y1:_+f,x2:b+E,y2:_+m-f},{strokeFill:this.themeConfig.quadrantInternalBorderStrokeFill,strokeWidth:this.config.quadrantInternalBorderStrokeWidth,x1:b+f,y1:_+v,x2:b+L-f,y2:_+v}]}getTitle(a){if(a)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(){const a=this.config.showXAxis&&!!(this.data.xAxisLeftText||this.data.xAxisRightText),f=this.config.showYAxis&&!!(this.data.yAxisTopText||this.data.yAxisBottomText),p=this.config.showTitle&&!!this.data.titleText,v=this.data.points.length>0?"bottom":this.config.xAxisPosition,m=this.calculateSpace(v,a,f,p);return{points:this.getQuadrantPoints(m),quadrants:this.getQuadrants(m),axisLabels:this.getAxisLabels(v,a,f,m),borderLines:this.getBorders(m),title:this.getTitle(p)}}}const Iqe=Le();function M5(i){return Dd(i.trim(),Iqe)}const x0=new Mqe;function Dqe(i){x0.setData({quadrant1Text:M5(i.text)})}function Oqe(i){x0.setData({quadrant2Text:M5(i.text)})}function Nqe(i){x0.setData({quadrant3Text:M5(i.text)})}function Pqe(i){x0.setData({quadrant4Text:M5(i.text)})}function Fqe(i){x0.setData({xAxisLeftText:M5(i.text)})}function Bqe(i){x0.setData({xAxisRightText:M5(i.text)})}function Rqe(i){x0.setData({yAxisTopText:M5(i.text)})}function jqe(i){x0.setData({yAxisBottomText:M5(i.text)})}function $qe(i,a,f){x0.addPoints([{x:a,y:f,text:M5(i.text)}])}function zqe(i){x0.setConfig({chartWidth:i})}function qqe(i){x0.setConfig({chartHeight:i})}function Hqe(){const i=Le(),{themeVariables:a,quadrantChart:f}=i;return f&&x0.setConfig(f),x0.setThemeConfig({quadrant1Fill:a.quadrant1Fill,quadrant2Fill:a.quadrant2Fill,quadrant3Fill:a.quadrant3Fill,quadrant4Fill:a.quadrant4Fill,quadrant1TextFill:a.quadrant1TextFill,quadrant2TextFill:a.quadrant2TextFill,quadrant3TextFill:a.quadrant3TextFill,quadrant4TextFill:a.quadrant4TextFill,quadrantPointFill:a.quadrantPointFill,quadrantPointTextFill:a.quadrantPointTextFill,quadrantXAxisTextFill:a.quadrantXAxisTextFill,quadrantYAxisTextFill:a.quadrantYAxisTextFill,quadrantExternalBorderStrokeFill:a.quadrantExternalBorderStrokeFill,quadrantInternalBorderStrokeFill:a.quadrantInternalBorderStrokeFill,quadrantTitleFill:a.quadrantTitleFill}),x0.setData({titleText:Db()}),x0.build()}const Gqe=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:Lqe,db:{setWidth:zqe,setHeight:qqe,setQuadrant1Text:Dqe,setQuadrant2Text:Oqe,setQuadrant3Text:Nqe,setQuadrant4Text:Pqe,setXAxisLeftText:Fqe,setXAxisRightText:Bqe,setYAxisTopText:Rqe,setYAxisBottomText:jqe,addPoint:$qe,getQuadrantData:Hqe,clear:function(){x0.clear(),ap()},setAccTitle:cg,getAccTitle:op,setDiagramTitle:Z2,getDiagramTitle:Db,getAccDescription:up,setAccDescription:cp},renderer:{draw:(i,a,f,p)=>{var wt,X,pt;function v(U){return U==="top"?"hanging":"middle"}function m(U){return U==="left"?"start":"middle"}function b(U){return`translate(${U.x}, ${U.y}) rotate(${U.rotation||0})`}const E=Le();Ut.debug(`Rendering quadrant chart
`+i);const _=E.securityLevel;let L;_==="sandbox"&&(L=yr("#i"+a));const B=yr(_==="sandbox"?L.nodes()[0].contentDocument.body:"body").select(`[id="${a}"]`),j=B.append("g").attr("class","main"),R=((wt=E.quadrantChart)==null?void 0:wt.chartWidth)||500,z=((X=E.quadrantChart)==null?void 0:X.chartHeight)||500;og(B,z,R,((pt=E.quadrantChart)==null?void 0:pt.useMaxWidth)||!0),B.attr("viewBox","0 0 "+R+" "+z),p.db.setHeight(z),p.db.setWidth(R);const K=p.db.getQuadrantData(),it=j.append("g").attr("class","quadrants"),st=j.append("g").attr("class","border"),ut=j.append("g").attr("class","data-points"),bt=j.append("g").attr("class","labels"),mt=j.append("g").attr("class","title");K.title&&mt.append("text").attr("x",0).attr("y",0).attr("fill",K.title.fill).attr("font-size",K.title.fontSize).attr("dominant-baseline",v(K.title.horizontalPos)).attr("text-anchor",m(K.title.verticalPos)).attr("transform",b(K.title)).text(K.title.text),K.borderLines&&st.selectAll("line").data(K.borderLines).enter().append("line").attr("x1",U=>U.x1).attr("y1",U=>U.y1).attr("x2",U=>U.x2).attr("y2",U=>U.y2).style("stroke",U=>U.strokeFill).style("stroke-width",U=>U.strokeWidth);const yt=it.selectAll("g.quadrant").data(K.quadrants).enter().append("g").attr("class","quadrant");yt.append("rect").attr("x",U=>U.x).attr("y",U=>U.y).attr("width",U=>U.width).attr("height",U=>U.height).attr("fill",U=>U.fill),yt.append("text").attr("x",0).attr("y",0).attr("fill",U=>U.text.fill).attr("font-size",U=>U.text.fontSize).attr("dominant-baseline",U=>v(U.text.horizontalPos)).attr("text-anchor",U=>m(U.text.verticalPos)).attr("transform",U=>b(U.text)).text(U=>U.text.text),bt.selectAll("g.label").data(K.axisLabels).enter().append("g").attr("class","label").append("text").attr("x",0).attr("y",0).text(U=>U.text).attr("fill",U=>U.fill).attr("font-size",U=>U.fontSize).attr("dominant-baseline",U=>v(U.horizontalPos)).attr("text-anchor",U=>m(U.verticalPos)).attr("transform",U=>b(U));const ht=ut.selectAll("g.data-point").data(K.points).enter().append("g").attr("class","data-point");ht.append("circle").attr("cx",U=>U.x).attr("cy",U=>U.y).attr("r",U=>U.radius).attr("fill",U=>U.fill),ht.append("text").attr("x",0).attr("y",0).text(U=>U.text.text).attr("fill",U=>U.text.fill).attr("font-size",U=>U.text.fontSize).attr("dominant-baseline",U=>v(U.text.horizontalPos)).attr("text-anchor",U=>m(U.text.verticalPos)).attr("transform",U=>b(U.text))}},styles:()=>""}},Symbol.toStringTag,{value:"Module"}));var ngt=function(){var i=function(Me,ve,Ge,Ke){for(Ge=Ge||{},Ke=Me.length;Ke--;Ge[Me[Ke]]=ve);return Ge},a=[1,3],f=[1,4],p=[1,5],v=[1,6],m=[5,6,8,9,11,13,31,32,33,34,35,36,44,62,63],b=[1,18],E=[2,7],_=[1,22],L=[1,23],N=[1,24],B=[1,25],j=[1,26],R=[1,27],z=[1,20],K=[1,28],it=[1,29],st=[62,63],ut=[5,8,9,11,13,31,32,33,34,35,36,44,51,53,62,63],bt=[1,47],mt=[1,48],yt=[1,49],dt=[1,50],ht=[1,51],wt=[1,52],X=[1,53],pt=[53,54],U=[1,64],xt=[1,60],nt=[1,61],Ot=[1,62],Nt=[1,63],qt=[1,65],Ct=[1,69],Z=[1,70],Tt=[1,67],Ht=[1,68],It=[5,8,9,11,13,31,32,33,34,35,36,44,62,63],Ft={trace:function(){},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:function(ve,Ge,Ke,we,_e,$t,re){var ie=$t.length-1;switch(_e){case 4:this.$=$t[ie].trim(),we.setAccTitle(this.$);break;case 5:case 6:this.$=$t[ie].trim(),we.setAccDescription(this.$);break;case 7:this.$=[];break;case 13:we.addRequirement($t[ie-3],$t[ie-4]);break;case 14:we.setNewReqId($t[ie-2]);break;case 15:we.setNewReqText($t[ie-2]);break;case 16:we.setNewReqRisk($t[ie-2]);break;case 17:we.setNewReqVerifyMethod($t[ie-2]);break;case 20:this.$=we.RequirementType.REQUIREMENT;break;case 21:this.$=we.RequirementType.FUNCTIONAL_REQUIREMENT;break;case 22:this.$=we.RequirementType.INTERFACE_REQUIREMENT;break;case 23:this.$=we.RequirementType.PERFORMANCE_REQUIREMENT;break;case 24:this.$=we.RequirementType.PHYSICAL_REQUIREMENT;break;case 25:this.$=we.RequirementType.DESIGN_CONSTRAINT;break;case 26:this.$=we.RiskLevel.LOW_RISK;break;case 27:this.$=we.RiskLevel.MED_RISK;break;case 28:this.$=we.RiskLevel.HIGH_RISK;break;case 29:this.$=we.VerifyType.VERIFY_ANALYSIS;break;case 30:this.$=we.VerifyType.VERIFY_DEMONSTRATION;break;case 31:this.$=we.VerifyType.VERIFY_INSPECTION;break;case 32:this.$=we.VerifyType.VERIFY_TEST;break;case 33:we.addElement($t[ie-3]);break;case 34:we.setNewElementType($t[ie-2]);break;case 35:we.setNewElementDocRef($t[ie-2]);break;case 38:we.addRelationship($t[ie-2],$t[ie],$t[ie-4]);break;case 39:we.addRelationship($t[ie-2],$t[ie-4],$t[ie]);break;case 40:this.$=we.Relationships.CONTAINS;break;case 41:this.$=we.Relationships.COPIES;break;case 42:this.$=we.Relationships.DERIVES;break;case 43:this.$=we.Relationships.SATISFIES;break;case 44:this.$=we.Relationships.VERIFIES;break;case 45:this.$=we.Relationships.REFINES;break;case 46:this.$=we.Relationships.TRACES;break}},table:[{3:1,4:2,6:a,9:f,11:p,13:v},{1:[3]},{3:8,4:2,5:[1,7],6:a,9:f,11:p,13:v},{5:[1,9]},{10:[1,10]},{12:[1,11]},i(m,[2,6]),{3:12,4:2,6:a,9:f,11:p,13:v},{1:[2,2]},{4:17,5:b,7:13,8:E,9:f,11:p,13:v,14:14,15:15,16:16,17:19,23:21,31:_,32:L,33:N,34:B,35:j,36:R,44:z,62:K,63:it},i(m,[2,4]),i(m,[2,5]),{1:[2,1]},{8:[1,30]},{4:17,5:b,7:31,8:E,9:f,11:p,13:v,14:14,15:15,16:16,17:19,23:21,31:_,32:L,33:N,34:B,35:j,36:R,44:z,62:K,63:it},{4:17,5:b,7:32,8:E,9:f,11:p,13:v,14:14,15:15,16:16,17:19,23:21,31:_,32:L,33:N,34:B,35:j,36:R,44:z,62:K,63:it},{4:17,5:b,7:33,8:E,9:f,11:p,13:v,14:14,15:15,16:16,17:19,23:21,31:_,32:L,33:N,34:B,35:j,36:R,44:z,62:K,63:it},{4:17,5:b,7:34,8:E,9:f,11:p,13:v,14:14,15:15,16:16,17:19,23:21,31:_,32:L,33:N,34:B,35:j,36:R,44:z,62:K,63:it},{4:17,5:b,7:35,8:E,9:f,11:p,13:v,14:14,15:15,16:16,17:19,23:21,31:_,32:L,33:N,34:B,35:j,36:R,44:z,62:K,63:it},{18:36,62:[1,37],63:[1,38]},{45:39,62:[1,40],63:[1,41]},{51:[1,42],53:[1,43]},i(st,[2,20]),i(st,[2,21]),i(st,[2,22]),i(st,[2,23]),i(st,[2,24]),i(st,[2,25]),i(ut,[2,49]),i(ut,[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:bt,56:mt,57:yt,58:dt,59:ht,60:wt,61:X},{52:54,55:bt,56:mt,57:yt,58:dt,59:ht,60:wt,61:X},{5:[1,55]},{5:[1,56]},{53:[1,57]},i(pt,[2,40]),i(pt,[2,41]),i(pt,[2,42]),i(pt,[2,43]),i(pt,[2,44]),i(pt,[2,45]),i(pt,[2,46]),{54:[1,58]},{5:U,20:59,21:xt,24:nt,26:Ot,28:Nt,30:qt},{5:Ct,30:Z,46:66,47:Tt,49:Ht},{23:71,62:K,63:it},{23:72,62:K,63:it},i(It,[2,13]),{22:[1,73]},{22:[1,74]},{22:[1,75]},{22:[1,76]},{5:U,20:77,21:xt,24:nt,26:Ot,28:Nt,30:qt},i(It,[2,19]),i(It,[2,33]),{22:[1,78]},{22:[1,79]},{5:Ct,30:Z,46:80,47:Tt,49:Ht},i(It,[2,37]),i(It,[2,38]),i(It,[2,39]),{23:81,62:K,63:it},{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]},i(It,[2,18]),{48:94,62:[1,95],63:[1,96]},{50:97,62:[1,98],63:[1,99]},i(It,[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:U,20:106,21:xt,24:nt,26:Ot,28:Nt,30:qt},{5:U,20:107,21:xt,24:nt,26:Ot,28:Nt,30:qt},{5:U,20:108,21:xt,24:nt,26:Ot,28:Nt,30:qt},{5:U,20:109,21:xt,24:nt,26:Ot,28:Nt,30:qt},{5:Ct,30:Z,46:110,47:Tt,49:Ht},{5:Ct,30:Z,46:111,47:Tt,49:Ht},i(It,[2,14]),i(It,[2,15]),i(It,[2,16]),i(It,[2,17]),i(It,[2,34]),i(It,[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:function(ve,Ge){if(Ge.recoverable)this.trace(ve);else{var Ke=new Error(ve);throw Ke.hash=Ge,Ke}},parse:function(ve){var Ge=this,Ke=[0],we=[],_e=[null],$t=[],re=this.table,ie="",Oe=0,oe=0,Ne=2,me=1,cn=$t.slice.call(arguments,1),li=Object.create(this.lexer),ya={yy:{}};for(var da in this.yy)Object.prototype.hasOwnProperty.call(this.yy,da)&&(ya.yy[da]=this.yy[da]);li.setInput(ve,ya.yy),ya.yy.lexer=li,ya.yy.parser=this,typeof li.yylloc>"u"&&(li.yylloc={});var Oo=li.yylloc;$t.push(Oo);var ds=li.options&&li.options.ranges;typeof ya.yy.parseError=="function"?this.parseError=ya.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Dr(){var Gs;return Gs=we.pop()||li.lex()||me,typeof Gs!="number"&&(Gs instanceof Array&&(we=Gs,Gs=we.pop()),Gs=Ge.symbols_[Gs]||Gs),Gs}for(var nr,di,Ee,Yn,He={},Ti,gn,ks,qa;;){if(di=Ke[Ke.length-1],this.defaultActions[di]?Ee=this.defaultActions[di]:((nr===null||typeof nr>"u")&&(nr=Dr()),Ee=re[di]&&re[di][nr]),typeof Ee>"u"||!Ee.length||!Ee[0]){var La="";qa=[];for(Ti in re[di])this.terminals_[Ti]&&Ti>Ne&&qa.push("'"+this.terminals_[Ti]+"'");li.showPosition?La="Parse error on line "+(Oe+1)+`:
`+li.showPosition()+`
Expecting `+qa.join(", ")+", got '"+(this.terminals_[nr]||nr)+"'":La="Parse error on line "+(Oe+1)+": Unexpected "+(nr==me?"end of input":"'"+(this.terminals_[nr]||nr)+"'"),this.parseError(La,{text:li.match,token:this.terminals_[nr]||nr,line:li.yylineno,loc:Oo,expected:qa})}if(Ee[0]instanceof Array&&Ee.length>1)throw new Error("Parse Error: multiple actions possible at state: "+di+", token: "+nr);switch(Ee[0]){case 1:Ke.push(nr),_e.push(li.yytext),$t.push(li.yylloc),Ke.push(Ee[1]),nr=null,oe=li.yyleng,ie=li.yytext,Oe=li.yylineno,Oo=li.yylloc;break;case 2:if(gn=this.productions_[Ee[1]][1],He.$=_e[_e.length-gn],He._$={first_line:$t[$t.length-(gn||1)].first_line,last_line:$t[$t.length-1].last_line,first_column:$t[$t.length-(gn||1)].first_column,last_column:$t[$t.length-1].last_column},ds&&(He._$.range=[$t[$t.length-(gn||1)].range[0],$t[$t.length-1].range[1]]),Yn=this.performAction.apply(He,[ie,oe,Oe,ya.yy,Ee[1],_e,$t].concat(cn)),typeof Yn<"u")return Yn;gn&&(Ke=Ke.slice(0,-1*gn*2),_e=_e.slice(0,-1*gn),$t=$t.slice(0,-1*gn)),Ke.push(this.productions_[Ee[1]][0]),_e.push(He.$),$t.push(He._$),ks=re[Ke[Ke.length-2]][Ke[Ke.length-1]],Ke.push(ks);break;case 3:return!0}}return!0}},ke=function(){var Me={EOF:1,parseError:function(Ge,Ke){if(this.yy.parser)this.yy.parser.parseError(Ge,Ke);else throw new Error(Ge)},setInput:function(ve,Ge){return this.yy=Ge||this.yy||{},this._input=ve,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},input:function(){var ve=this._input[0];this.yytext+=ve,this.yyleng++,this.offset++,this.match+=ve,this.matched+=ve;var Ge=ve.match(/(?:\r\n?|\n).*/g);return Ge?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),ve},unput:function(ve){var Ge=ve.length,Ke=ve.split(/(?:\r\n?|\n)/g);this._input=ve+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-Ge),this.offset-=Ge;var we=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),Ke.length-1&&(this.yylineno-=Ke.length-1);var _e=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:Ke?(Ke.length===we.length?this.yylloc.first_column:0)+we[we.length-Ke.length].length-Ke[0].length:this.yylloc.first_column-Ge},this.options.ranges&&(this.yylloc.range=[_e[0],_e[0]+this.yyleng-Ge]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject: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},less:function(ve){this.unput(this.match.slice(ve))},pastInput:function(){var ve=this.matched.substr(0,this.matched.length-this.match.length);return(ve.length>20?"...":"")+ve.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var ve=this.match;return ve.length<20&&(ve+=this._input.substr(0,20-ve.length)),(ve.substr(0,20)+(ve.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var ve=this.pastInput(),Ge=new Array(ve.length+1).join("-");return ve+this.upcomingInput()+`
`+Ge+"^"},test_match:function(ve,Ge){var Ke,we,_e;if(this.options.backtrack_lexer&&(_e={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&&(_e.yylloc.range=this.yylloc.range.slice(0))),we=ve[0].match(/(?:\r\n?|\n).*/g),we&&(this.yylineno+=we.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:we?we[we.length-1].length-we[we.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+ve[0].length},this.yytext+=ve[0],this.match+=ve[0],this.matches=ve,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(ve[0].length),this.matched+=ve[0],Ke=this.performAction.call(this,this.yy,this,Ge,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),Ke)return Ke;if(this._backtrack){for(var $t in _e)this[$t]=_e[$t];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var ve,Ge,Ke,we;this._more||(this.yytext="",this.match="");for(var _e=this._currentRules(),$t=0;$t<_e.length;$t++)if(Ke=this._input.match(this.rules[_e[$t]]),Ke&&(!Ge||Ke[0].length>Ge[0].length)){if(Ge=Ke,we=$t,this.options.backtrack_lexer){if(ve=this.test_match(Ke,_e[$t]),ve!==!1)return ve;if(this._backtrack){Ge=!1;continue}else return!1}else if(!this.options.flex)break}return Ge?(ve=this.test_match(Ge,_e[we]),ve!==!1?ve:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text.
`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var Ge=this.next();return Ge||this.lex()},begin:function(Ge){this.conditionStack.push(Ge)},popState:function(){var Ge=this.conditionStack.length-1;return Ge>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(Ge){return Ge=this.conditionStack.length-1-Math.abs(Ge||0),Ge>=0?this.conditionStack[Ge]:"INITIAL"},pushState:function(Ge){this.begin(Ge)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(Ge,Ke,we,_e){switch(we){case 0:return"title";case 1:return this.begin("acc_title"),9;case 2:return this.popState(),"acc_title_value";case 3:return this.begin("acc_descr"),11;case 4:return this.popState(),"acc_descr_value";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 Ke.yytext=Ke.yytext.trim(),62}},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 Me}();Ft.lexer=ke;function pn(){this.yy={}}return pn.prototype=Ft,Ft.Parser=pn,new pn}();ngt.parser=ngt;const Vqe=ngt;let rgt=[],dp={},MP={},fk={},IP={};const Uqe={RequirementType:{REQUIREMENT:"Requirement",FUNCTIONAL_REQUIREMENT:"Functional Requirement",INTERFACE_REQUIREMENT:"Interface Requirement",PERFORMANCE_REQUIREMENT:"Performance Requirement",PHYSICAL_REQUIREMENT:"Physical Requirement",DESIGN_CONSTRAINT:"Design Constraint"},RiskLevel:{LOW_RISK:"Low",MED_RISK:"Medium",HIGH_RISK:"High"},VerifyType:{VERIFY_ANALYSIS:"Analysis",VERIFY_DEMONSTRATION:"Demonstration",VERIFY_INSPECTION:"Inspection",VERIFY_TEST:"Test"},Relationships:{CONTAINS:"contains",COPIES:"copies",DERIVES:"derives",SATISFIES:"satisfies",VERIFIES:"verifies",REFINES:"refines",TRACES:"traces"},getConfig:()=>Le().req,addRequirement:(i,a)=>(MP[i]===void 0&&(MP[i]={name:i,type:a,id:dp.id,text:dp.text,risk:dp.risk,verifyMethod:dp.verifyMethod}),dp={},MP[i]),getRequirements:()=>MP,setNewReqId:i=>{dp!==void 0&&(dp.id=i)},setNewReqText:i=>{dp!==void 0&&(dp.text=i)},setNewReqRisk:i=>{dp!==void 0&&(dp.risk=i)},setNewReqVerifyMethod:i=>{dp!==void 0&&(dp.verifyMethod=i)},setAccTitle:cg,getAccTitle:op,setAccDescription:cp,getAccDescription:up,addElement:i=>(IP[i]===void 0&&(IP[i]={name:i,type:fk.type,docRef:fk.docRef},Ut.info("Added new requirement: ",i)),fk={},IP[i]),getElements:()=>IP,setNewElementType:i=>{fk!==void 0&&(fk.type=i)},setNewElementDocRef:i=>{fk!==void 0&&(fk.docRef=i)},addRelationship:(i,a,f)=>{rgt.push({type:i,src:a,dst:f})},getRelationships:()=>rgt,clear:()=>{rgt=[],dp={},MP={},fk={},IP={},ap()}},Wqe=i=>`

  marker {
    fill: ${i.relationColor};
    stroke: ${i.relationColor};
  }

  marker.cross {
    stroke: ${i.lineColor};
  }

  svg {
    font-family: ${i.fontFamily};
    font-size: ${i.fontSize};
  }

  .reqBox {
    fill: ${i.requirementBackground};
    fill-opacity: 1.0;
    stroke: ${i.requirementBorderColor};
    stroke-width: ${i.requirementBorderSize};
  }
  
  .reqTitle, .reqLabel{
    fill:  ${i.requirementTextColor};
  }
  .reqLabelBox {
    fill: ${i.relationLabelBackground};
    fill-opacity: 1.0;
  }

  .req-title-line {
    stroke: ${i.requirementBorderColor};
    stroke-width: ${i.requirementBorderSize};
  }
  .relationshipLine {
    stroke: ${i.relationColor};
    stroke-width: 1;
  }
  .relationshipLabel {
    fill: ${i.relationLabelColor};
  }

`,igt={CONTAINS:"contains",ARROW:"arrow"},aRt={ReqMarkers:igt,insertLineEndings:(i,a)=>{let f=i.append("defs").append("marker").attr("id",igt.CONTAINS+"_line_ending").attr("refX",0).attr("refY",a.line_height/2).attr("markerWidth",a.line_height).attr("markerHeight",a.line_height).attr("orient","auto").append("g");f.append("circle").attr("cx",a.line_height/2).attr("cy",a.line_height/2).attr("r",a.line_height/2).attr("fill","none"),f.append("line").attr("x1",0).attr("x2",a.line_height).attr("y1",a.line_height/2).attr("y2",a.line_height/2).attr("stroke-width",1),f.append("line").attr("y1",0).attr("y2",a.line_height).attr("x1",a.line_height/2).attr("x2",a.line_height/2).attr("stroke-width",1),i.append("defs").append("marker").attr("id",igt.ARROW+"_line_ending").attr("refX",a.line_height).attr("refY",.5*a.line_height).attr("markerWidth",a.line_height).attr("markerHeight",a.line_height).attr("orient","auto").append("path").attr("d",`M0,0
      L${a.line_height},${a.line_height/2}
      M${a.line_height},${a.line_height/2}
      L0,${a.line_height}`).attr("stroke-width",1)}};let xh={},oRt=0;const cRt=(i,a)=>i.insert("rect","#"+a).attr("class","req reqBox").attr("x",0).attr("y",0).attr("width",xh.rect_min_width+"px").attr("height",xh.rect_min_height+"px"),uRt=(i,a,f)=>{let p=xh.rect_min_width/2,v=i.append("text").attr("class","req reqLabel reqTitle").attr("id",a).attr("x",p).attr("y",xh.rect_padding).attr("dominant-baseline","hanging"),m=0;f.forEach(L=>{m==0?v.append("tspan").attr("text-anchor","middle").attr("x",xh.rect_min_width/2).attr("dy",0).text(L):v.append("tspan").attr("text-anchor","middle").attr("x",xh.rect_min_width/2).attr("dy",xh.line_height*.75).text(L),m++});let b=1.5*xh.rect_padding,E=m*xh.line_height*.75,_=b+E;return i.append("line").attr("class","req-title-line").attr("x1","0").attr("x2",xh.rect_min_width).attr("y1",_).attr("y2",_),{titleNode:v,y:_}},lRt=(i,a,f,p)=>{let v=i.append("text").attr("class","req reqLabel").attr("id",a).attr("x",xh.rect_padding).attr("y",p).attr("dominant-baseline","hanging"),m=0;const b=30;let E=[];return f.forEach(_=>{let L=_.length;for(;L>b&&m<3;){let N=_.substring(0,b);_=_.substring(b,_.length),L=_.length,E[E.length]=N,m++}if(m==3){let N=E[E.length-1];E[E.length-1]=N.substring(0,N.length-4)+"..."}else E[E.length]=_;m=0}),E.forEach(_=>{v.append("tspan").attr("x",xh.rect_padding).attr("dy",xh.line_height).text(_)}),v},Kqe=(i,a,f,p)=>{const v=a.node().getTotalLength(),m=a.node().getPointAtLength(v*.5),b="rel"+oRt;oRt++;const _=i.append("text").attr("class","req relationshipLabel").attr("id",b).attr("x",m.x).attr("y",m.y).attr("text-anchor","middle").attr("dominant-baseline","middle").text(p).node().getBBox();i.insert("rect","#"+b).attr("class","req reqLabelBox").attr("x",m.x-_.width/2).attr("y",m.y-_.height/2).attr("width",_.width).attr("height",_.height).attr("fill","white").attr("fill-opacity","85%")},Yqe=function(i,a,f,p,v){const m=f.edge(oL(a.src),oL(a.dst)),b=Z7().x(function(_){return _.x}).y(function(_){return _.y}),E=i.insert("path","#"+p).attr("class","er relationshipLine").attr("d",b(m.points)).attr("fill","none");a.type==v.db.Relationships.CONTAINS?E.attr("marker-start","url("+Yr.getUrl(xh.arrowMarkerAbsolute)+"#"+a.type+"_line_ending)"):(E.attr("stroke-dasharray","10,7"),E.attr("marker-end","url("+Yr.getUrl(xh.arrowMarkerAbsolute)+"#"+aRt.ReqMarkers.ARROW+"_line_ending)")),Kqe(i,E,xh,`<<${a.type}>>`)},Xqe=(i,a,f)=>{Object.keys(i).forEach(p=>{let v=i[p];p=oL(p),Ut.info("Added new requirement: ",p);const m=f.append("g").attr("id",p),b="req-"+p,E=cRt(m,b);let _=uRt(m,p+"_title",[`<<${v.type}>>`,`${v.name}`]);lRt(m,p+"_body",[`Id: ${v.id}`,`Text: ${v.text}`,`Risk: ${v.risk}`,`Verification: ${v.verifyMethod}`],_.y);const L=E.node().getBBox();a.setNode(p,{width:L.width,height:L.height,shape:"rect",id:p})})},Qqe=(i,a,f)=>{Object.keys(i).forEach(p=>{let v=i[p];const m=oL(p),b=f.append("g").attr("id",m),E="element-"+m,_=cRt(b,E);let L=uRt(b,E+"_title",["<<Element>>",`${p}`]);lRt(b,E+"_body",[`Type: ${v.type||"Not Specified"}`,`Doc Ref: ${v.docRef||"None"}`],L.y);const N=_.node().getBBox();a.setNode(m,{width:N.width,height:N.height,shape:"rect",id:m})})},Zqe=(i,a)=>(i.forEach(function(f){let p=oL(f.src),v=oL(f.dst);a.setEdge(p,v,{relationship:f})}),i),Jqe=function(i,a){a.nodes().forEach(function(f){f!==void 0&&a.node(f)!==void 0&&(i.select("#"+f),i.select("#"+f).attr("transform","translate("+(a.node(f).x-a.node(f).width/2)+","+(a.node(f).y-a.node(f).height/2)+" )"))})},oL=i=>i.replace(/\s/g,"").replace(/\./g,"_"),tHe=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:Vqe,db:Uqe,renderer:{draw:(i,a,f,p)=>{xh=Le().requirement;const v=xh.securityLevel;let m;v==="sandbox"&&(m=yr("#i"+a));const E=yr(v==="sandbox"?m.nodes()[0].contentDocument.body:"body").select(`[id='${a}']`);aRt.insertLineEndings(E,xh);const _=new a1({multigraph:!1,compound:!1,directed:!0}).setGraph({rankdir:xh.layoutDirection,marginx:20,marginy:20,nodesep:100,edgesep:100,ranksep:100}).setDefaultEdgeLabel(function(){return{}});let L=p.db.getRequirements(),N=p.db.getElements(),B=p.db.getRelationships();Xqe(L,_,E),Qqe(N,_,E),Zqe(B,_),eL(_),Jqe(E,_),B.forEach(function(it){Yqe(E,it,_,a,p)});const j=xh.rect_padding,R=E.node().getBBox(),z=R.width+j*2,K=R.height+j*2;og(E,K,z,xh.useMaxWidth),E.attr("viewBox",`${R.x-j} ${R.y-j} ${z} ${K}`)}},styles:Wqe}},Symbol.toStringTag,{value:"Module"}));var sgt=function(){var i=function(we,_e,$t,re){for($t=$t||{},re=we.length;re--;$t[we[re]]=_e);return $t},a=[1,2],f=[1,3],p=[1,4],v=[2,4],m=[1,9],b=[1,11],E=[1,13],_=[1,14],L=[1,16],N=[1,17],B=[1,18],j=[1,24],R=[1,25],z=[1,26],K=[1,27],it=[1,28],st=[1,29],ut=[1,30],bt=[1,31],mt=[1,32],yt=[1,33],dt=[1,34],ht=[1,35],wt=[1,36],X=[1,37],pt=[1,38],U=[1,39],xt=[1,41],nt=[1,42],Ot=[1,43],Nt=[1,44],qt=[1,45],Ct=[1,46],Z=[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],Tt=[4,5,16,50,52,53],Ht=[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],It=[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],Ft=[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],ke=[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],pn=[68,69,70],Me=[1,120],ve={trace:function(){},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,DOTTED_ARROW:74,SOLID_CROSS:75,DOTTED_CROSS:76,SOLID_POINT:77,DOTTED_POINT:78,TXT:79,$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:"DOTTED_ARROW",75:"SOLID_CROSS",76:"DOTTED_CROSS",77:"SOLID_POINT",78:"DOTTED_POINT",79:"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],[56,1]],performAction:function(_e,$t,re,ie,Oe,oe,Ne){var me=oe.length-1;switch(Oe){case 3:return ie.apply(oe[me]),oe[me];case 4:case 9:this.$=[];break;case 5:case 10:oe[me-1].push(oe[me]),this.$=oe[me-1];break;case 6:case 7:case 11:case 12:this.$=oe[me];break;case 8:case 13:this.$=[];break;case 15:oe[me].type="createParticipant",this.$=oe[me];break;case 16:oe[me-1].unshift({type:"boxStart",boxData:ie.parseBoxData(oe[me-2])}),oe[me-1].push({type:"boxEnd",boxText:oe[me-2]}),this.$=oe[me-1];break;case 18:this.$={type:"sequenceIndex",sequenceIndex:Number(oe[me-2]),sequenceIndexStep:Number(oe[me-1]),sequenceVisible:!0,signalType:ie.LINETYPE.AUTONUMBER};break;case 19:this.$={type:"sequenceIndex",sequenceIndex:Number(oe[me-1]),sequenceIndexStep:1,sequenceVisible:!0,signalType:ie.LINETYPE.AUTONUMBER};break;case 20:this.$={type:"sequenceIndex",sequenceVisible:!1,signalType:ie.LINETYPE.AUTONUMBER};break;case 21:this.$={type:"sequenceIndex",sequenceVisible:!0,signalType:ie.LINETYPE.AUTONUMBER};break;case 22:this.$={type:"activeStart",signalType:ie.LINETYPE.ACTIVE_START,actor:oe[me-1]};break;case 23:this.$={type:"activeEnd",signalType:ie.LINETYPE.ACTIVE_END,actor:oe[me-1]};break;case 29:ie.setDiagramTitle(oe[me].substring(6)),this.$=oe[me].substring(6);break;case 30:ie.setDiagramTitle(oe[me].substring(7)),this.$=oe[me].substring(7);break;case 31:this.$=oe[me].trim(),ie.setAccTitle(this.$);break;case 32:case 33:this.$=oe[me].trim(),ie.setAccDescription(this.$);break;case 34:oe[me-1].unshift({type:"loopStart",loopText:ie.parseMessage(oe[me-2]),signalType:ie.LINETYPE.LOOP_START}),oe[me-1].push({type:"loopEnd",loopText:oe[me-2],signalType:ie.LINETYPE.LOOP_END}),this.$=oe[me-1];break;case 35:oe[me-1].unshift({type:"rectStart",color:ie.parseMessage(oe[me-2]),signalType:ie.LINETYPE.RECT_START}),oe[me-1].push({type:"rectEnd",color:ie.parseMessage(oe[me-2]),signalType:ie.LINETYPE.RECT_END}),this.$=oe[me-1];break;case 36:oe[me-1].unshift({type:"optStart",optText:ie.parseMessage(oe[me-2]),signalType:ie.LINETYPE.OPT_START}),oe[me-1].push({type:"optEnd",optText:ie.parseMessage(oe[me-2]),signalType:ie.LINETYPE.OPT_END}),this.$=oe[me-1];break;case 37:oe[me-1].unshift({type:"altStart",altText:ie.parseMessage(oe[me-2]),signalType:ie.LINETYPE.ALT_START}),oe[me-1].push({type:"altEnd",signalType:ie.LINETYPE.ALT_END}),this.$=oe[me-1];break;case 38:oe[me-1].unshift({type:"parStart",parText:ie.parseMessage(oe[me-2]),signalType:ie.LINETYPE.PAR_START}),oe[me-1].push({type:"parEnd",signalType:ie.LINETYPE.PAR_END}),this.$=oe[me-1];break;case 39:oe[me-1].unshift({type:"parStart",parText:ie.parseMessage(oe[me-2]),signalType:ie.LINETYPE.PAR_OVER_START}),oe[me-1].push({type:"parEnd",signalType:ie.LINETYPE.PAR_END}),this.$=oe[me-1];break;case 40:oe[me-1].unshift({type:"criticalStart",criticalText:ie.parseMessage(oe[me-2]),signalType:ie.LINETYPE.CRITICAL_START}),oe[me-1].push({type:"criticalEnd",signalType:ie.LINETYPE.CRITICAL_END}),this.$=oe[me-1];break;case 41:oe[me-1].unshift({type:"breakStart",breakText:ie.parseMessage(oe[me-2]),signalType:ie.LINETYPE.BREAK_START}),oe[me-1].push({type:"breakEnd",optText:ie.parseMessage(oe[me-2]),signalType:ie.LINETYPE.BREAK_END}),this.$=oe[me-1];break;case 43:this.$=oe[me-3].concat([{type:"option",optionText:ie.parseMessage(oe[me-1]),signalType:ie.LINETYPE.CRITICAL_OPTION},oe[me]]);break;case 45:this.$=oe[me-3].concat([{type:"and",parText:ie.parseMessage(oe[me-1]),signalType:ie.LINETYPE.PAR_AND},oe[me]]);break;case 47:this.$=oe[me-3].concat([{type:"else",altText:ie.parseMessage(oe[me-1]),signalType:ie.LINETYPE.ALT_ELSE},oe[me]]);break;case 48:oe[me-3].draw="participant",oe[me-3].type="addParticipant",oe[me-3].description=ie.parseMessage(oe[me-1]),this.$=oe[me-3];break;case 49:oe[me-1].draw="participant",oe[me-1].type="addParticipant",this.$=oe[me-1];break;case 50:oe[me-3].draw="actor",oe[me-3].type="addParticipant",oe[me-3].description=ie.parseMessage(oe[me-1]),this.$=oe[me-3];break;case 51:oe[me-1].draw="actor",oe[me-1].type="addParticipant",this.$=oe[me-1];break;case 52:oe[me-1].type="destroyParticipant",this.$=oe[me-1];break;case 53:this.$=[oe[me-1],{type:"addNote",placement:oe[me-2],actor:oe[me-1].actor,text:oe[me]}];break;case 54:oe[me-2]=[].concat(oe[me-1],oe[me-1]).slice(0,2),oe[me-2][0]=oe[me-2][0].actor,oe[me-2][1]=oe[me-2][1].actor,this.$=[oe[me-1],{type:"addNote",placement:ie.PLACEMENT.OVER,actor:oe[me-2].slice(0,2),text:oe[me]}];break;case 55:this.$=[oe[me-1],{type:"addLinks",actor:oe[me-1].actor,text:oe[me]}];break;case 56:this.$=[oe[me-1],{type:"addALink",actor:oe[me-1].actor,text:oe[me]}];break;case 57:this.$=[oe[me-1],{type:"addProperties",actor:oe[me-1].actor,text:oe[me]}];break;case 58:this.$=[oe[me-1],{type:"addDetails",actor:oe[me-1].actor,text:oe[me]}];break;case 61:this.$=[oe[me-2],oe[me]];break;case 62:this.$=oe[me];break;case 63:this.$=ie.PLACEMENT.LEFTOF;break;case 64:this.$=ie.PLACEMENT.RIGHTOF;break;case 65:this.$=[oe[me-4],oe[me-1],{type:"addMessage",from:oe[me-4].actor,to:oe[me-1].actor,signalType:oe[me-3],msg:oe[me],activate:!0},{type:"activeStart",signalType:ie.LINETYPE.ACTIVE_START,actor:oe[me-1]}];break;case 66:this.$=[oe[me-4],oe[me-1],{type:"addMessage",from:oe[me-4].actor,to:oe[me-1].actor,signalType:oe[me-3],msg:oe[me]},{type:"activeEnd",signalType:ie.LINETYPE.ACTIVE_END,actor:oe[me-4]}];break;case 67:this.$=[oe[me-3],oe[me-1],{type:"addMessage",from:oe[me-3].actor,to:oe[me-1].actor,signalType:oe[me-2],msg:oe[me]}];break;case 68:this.$={type:"addParticipant",actor:oe[me]};break;case 69:this.$=ie.LINETYPE.SOLID_OPEN;break;case 70:this.$=ie.LINETYPE.DOTTED_OPEN;break;case 71:this.$=ie.LINETYPE.SOLID;break;case 72:this.$=ie.LINETYPE.DOTTED;break;case 73:this.$=ie.LINETYPE.SOLID_CROSS;break;case 74:this.$=ie.LINETYPE.DOTTED_CROSS;break;case 75:this.$=ie.LINETYPE.SOLID_POINT;break;case 76:this.$=ie.LINETYPE.DOTTED_POINT;break;case 77:this.$=ie.parseMessage(oe[me].trim().substring(1));break}},table:[{3:1,4:a,5:f,6:p},{1:[3]},{3:5,4:a,5:f,6:p},{3:6,4:a,5:f,6:p},i([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],v,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:m,5:b,8:8,9:10,12:12,13:E,14:_,17:15,18:L,21:N,22:40,23:B,24:19,25:20,26:21,27:22,28:23,29:j,30:R,31:z,33:K,35:it,36:st,37:ut,38:bt,39:mt,41:yt,43:dt,44:ht,46:wt,50:X,52:pt,53:U,54:xt,59:nt,60:Ot,61:Nt,62:qt,70:Ct},i(Z,[2,5]),{9:47,12:12,13:E,14:_,17:15,18:L,21:N,22:40,23:B,24:19,25:20,26:21,27:22,28:23,29:j,30:R,31:z,33:K,35:it,36:st,37:ut,38:bt,39:mt,41:yt,43:dt,44:ht,46:wt,50:X,52:pt,53:U,54:xt,59:nt,60:Ot,61:Nt,62:qt,70:Ct},i(Z,[2,7]),i(Z,[2,8]),i(Z,[2,14]),{12:48,50:X,52:pt,53:U},{15:[1,49]},{5:[1,50]},{5:[1,53],19:[1,51],20:[1,52]},{22:54,70:Ct},{22:55,70:Ct},{5:[1,56]},{5:[1,57]},{5:[1,58]},{5:[1,59]},{5:[1,60]},i(Z,[2,29]),i(Z,[2,30]),{32:[1,61]},{34:[1,62]},i(Z,[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:Ct},{22:72,70:Ct},{22:73,70:Ct},{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]},{55:83,57:[1,84],65:[1,85],66:[1,86]},{22:87,70:Ct},{22:88,70:Ct},{22:89,70:Ct},{22:90,70:Ct},i([5,51,64,71,72,73,74,75,76,77,78,79],[2,68]),i(Z,[2,6]),i(Z,[2,15]),i(Tt,[2,9],{10:91}),i(Z,[2,17]),{5:[1,93],19:[1,92]},{5:[1,94]},i(Z,[2,21]),{5:[1,95]},{5:[1,96]},i(Z,[2,24]),i(Z,[2,25]),i(Z,[2,26]),i(Z,[2,27]),i(Z,[2,28]),i(Z,[2,31]),i(Z,[2,32]),i(Ht,v,{7:97}),i(Ht,v,{7:98}),i(Ht,v,{7:99}),i(It,v,{40:100,7:101}),i(Ft,v,{42:102,7:103}),i(Ft,v,{7:103,42:104}),i(ke,v,{45:105,7:106}),i(Ht,v,{7:107}),{5:[1,109],51:[1,108]},{5:[1,111],51:[1,110]},{5:[1,112]},{22:115,68:[1,113],69:[1,114],70:Ct},i(pn,[2,69]),i(pn,[2,70]),i(pn,[2,71]),i(pn,[2,72]),i(pn,[2,73]),i(pn,[2,74]),i(pn,[2,75]),i(pn,[2,76]),{22:116,70:Ct},{22:118,58:117,70:Ct},{70:[2,63]},{70:[2,64]},{56:119,79:Me},{56:121,79:Me},{56:122,79:Me},{56:123,79:Me},{4:[1,126],5:[1,128],11:125,12:127,16:[1,124],50:X,52:pt,53:U},{5:[1,129]},i(Z,[2,19]),i(Z,[2,20]),i(Z,[2,22]),i(Z,[2,23]),{4:m,5:b,8:8,9:10,12:12,13:E,14:_,16:[1,130],17:15,18:L,21:N,22:40,23:B,24:19,25:20,26:21,27:22,28:23,29:j,30:R,31:z,33:K,35:it,36:st,37:ut,38:bt,39:mt,41:yt,43:dt,44:ht,46:wt,50:X,52:pt,53:U,54:xt,59:nt,60:Ot,61:Nt,62:qt,70:Ct},{4:m,5:b,8:8,9:10,12:12,13:E,14:_,16:[1,131],17:15,18:L,21:N,22:40,23:B,24:19,25:20,26:21,27:22,28:23,29:j,30:R,31:z,33:K,35:it,36:st,37:ut,38:bt,39:mt,41:yt,43:dt,44:ht,46:wt,50:X,52:pt,53:U,54:xt,59:nt,60:Ot,61:Nt,62:qt,70:Ct},{4:m,5:b,8:8,9:10,12:12,13:E,14:_,16:[1,132],17:15,18:L,21:N,22:40,23:B,24:19,25:20,26:21,27:22,28:23,29:j,30:R,31:z,33:K,35:it,36:st,37:ut,38:bt,39:mt,41:yt,43:dt,44:ht,46:wt,50:X,52:pt,53:U,54:xt,59:nt,60:Ot,61:Nt,62:qt,70:Ct},{16:[1,133]},{4:m,5:b,8:8,9:10,12:12,13:E,14:_,16:[2,46],17:15,18:L,21:N,22:40,23:B,24:19,25:20,26:21,27:22,28:23,29:j,30:R,31:z,33:K,35:it,36:st,37:ut,38:bt,39:mt,41:yt,43:dt,44:ht,46:wt,49:[1,134],50:X,52:pt,53:U,54:xt,59:nt,60:Ot,61:Nt,62:qt,70:Ct},{16:[1,135]},{4:m,5:b,8:8,9:10,12:12,13:E,14:_,16:[2,44],17:15,18:L,21:N,22:40,23:B,24:19,25:20,26:21,27:22,28:23,29:j,30:R,31:z,33:K,35:it,36:st,37:ut,38:bt,39:mt,41:yt,43:dt,44:ht,46:wt,48:[1,136],50:X,52:pt,53:U,54:xt,59:nt,60:Ot,61:Nt,62:qt,70:Ct},{16:[1,137]},{16:[1,138]},{4:m,5:b,8:8,9:10,12:12,13:E,14:_,16:[2,42],17:15,18:L,21:N,22:40,23:B,24:19,25:20,26:21,27:22,28:23,29:j,30:R,31:z,33:K,35:it,36:st,37:ut,38:bt,39:mt,41:yt,43:dt,44:ht,46:wt,47:[1,139],50:X,52:pt,53:U,54:xt,59:nt,60:Ot,61:Nt,62:qt,70:Ct},{4:m,5:b,8:8,9:10,12:12,13:E,14:_,16:[1,140],17:15,18:L,21:N,22:40,23:B,24:19,25:20,26:21,27:22,28:23,29:j,30:R,31:z,33:K,35:it,36:st,37:ut,38:bt,39:mt,41:yt,43:dt,44:ht,46:wt,50:X,52:pt,53:U,54:xt,59:nt,60:Ot,61:Nt,62:qt,70:Ct},{15:[1,141]},i(Z,[2,49]),{15:[1,142]},i(Z,[2,51]),i(Z,[2,52]),{22:143,70:Ct},{22:144,70:Ct},{56:145,79:Me},{56:146,79:Me},{56:147,79:Me},{64:[1,148],79:[2,62]},{5:[2,55]},{5:[2,77]},{5:[2,56]},{5:[2,57]},{5:[2,58]},i(Z,[2,16]),i(Tt,[2,10]),{12:149,50:X,52:pt,53:U},i(Tt,[2,12]),i(Tt,[2,13]),i(Z,[2,18]),i(Z,[2,34]),i(Z,[2,35]),i(Z,[2,36]),i(Z,[2,37]),{15:[1,150]},i(Z,[2,38]),{15:[1,151]},i(Z,[2,39]),i(Z,[2,40]),{15:[1,152]},i(Z,[2,41]),{5:[1,153]},{5:[1,154]},{56:155,79:Me},{56:156,79:Me},{5:[2,67]},{5:[2,53]},{5:[2,54]},{22:157,70:Ct},i(Tt,[2,11]),i(It,v,{7:101,40:158}),i(Ft,v,{7:103,42:159}),i(ke,v,{7:106,45:160}),i(Z,[2,48]),i(Z,[2,50]),{5:[2,65]},{5:[2,66]},{79:[2,61]},{16:[2,47]},{16:[2,45]},{16:[2,43]}],defaultActions:{5:[2,1],6:[2,2],85:[2,63],86:[2,64],119:[2,55],120:[2,77],121:[2,56],122:[2,57],123:[2,58],145:[2,67],146:[2,53],147:[2,54],155:[2,65],156:[2,66],157:[2,61],158:[2,47],159:[2,45],160:[2,43]},parseError:function(_e,$t){if($t.recoverable)this.trace(_e);else{var re=new Error(_e);throw re.hash=$t,re}},parse:function(_e){var $t=this,re=[0],ie=[],Oe=[null],oe=[],Ne=this.table,me="",cn=0,li=0,ya=2,da=1,Oo=oe.slice.call(arguments,1),ds=Object.create(this.lexer),Dr={yy:{}};for(var nr in this.yy)Object.prototype.hasOwnProperty.call(this.yy,nr)&&(Dr.yy[nr]=this.yy[nr]);ds.setInput(_e,Dr.yy),Dr.yy.lexer=ds,Dr.yy.parser=this,typeof ds.yylloc>"u"&&(ds.yylloc={});var di=ds.yylloc;oe.push(di);var Ee=ds.options&&ds.options.ranges;typeof Dr.yy.parseError=="function"?this.parseError=Dr.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Yn(){var $s;return $s=ie.pop()||ds.lex()||da,typeof $s!="number"&&($s instanceof Array&&(ie=$s,$s=ie.pop()),$s=$t.symbols_[$s]||$s),$s}for(var He,Ti,gn,ks,qa={},La,Gs,No,vs;;){if(Ti=re[re.length-1],this.defaultActions[Ti]?gn=this.defaultActions[Ti]:((He===null||typeof He>"u")&&(He=Yn()),gn=Ne[Ti]&&Ne[Ti][He]),typeof gn>"u"||!gn.length||!gn[0]){var nu="";vs=[];for(La in Ne[Ti])this.terminals_[La]&&La>ya&&vs.push("'"+this.terminals_[La]+"'");ds.showPosition?nu="Parse error on line "+(cn+1)+`:
`+ds.showPosition()+`
Expecting `+vs.join(", ")+", got '"+(this.terminals_[He]||He)+"'":nu="Parse error on line "+(cn+1)+": Unexpected "+(He==da?"end of input":"'"+(this.terminals_[He]||He)+"'"),this.parseError(nu,{text:ds.match,token:this.terminals_[He]||He,line:ds.yylineno,loc:di,expected:vs})}if(gn[0]instanceof Array&&gn.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Ti+", token: "+He);switch(gn[0]){case 1:re.push(He),Oe.push(ds.yytext),oe.push(ds.yylloc),re.push(gn[1]),He=null,li=ds.yyleng,me=ds.yytext,cn=ds.yylineno,di=ds.yylloc;break;case 2:if(Gs=this.productions_[gn[1]][1],qa.$=Oe[Oe.length-Gs],qa._$={first_line:oe[oe.length-(Gs||1)].first_line,last_line:oe[oe.length-1].last_line,first_column:oe[oe.length-(Gs||1)].first_column,last_column:oe[oe.length-1].last_column},Ee&&(qa._$.range=[oe[oe.length-(Gs||1)].range[0],oe[oe.length-1].range[1]]),ks=this.performAction.apply(qa,[me,li,cn,Dr.yy,gn[1],Oe,oe].concat(Oo)),typeof ks<"u")return ks;Gs&&(re=re.slice(0,-1*Gs*2),Oe=Oe.slice(0,-1*Gs),oe=oe.slice(0,-1*Gs)),re.push(this.productions_[gn[1]][0]),Oe.push(qa.$),oe.push(qa._$),No=Ne[re[re.length-2]][re[re.length-1]],re.push(No);break;case 3:return!0}}return!0}},Ge=function(){var we={EOF:1,parseError:function($t,re){if(this.yy.parser)this.yy.parser.parseError($t,re);else throw new Error($t)},setInput:function(_e,$t){return this.yy=$t||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},input:function(){var _e=this._input[0];this.yytext+=_e,this.yyleng++,this.offset++,this.match+=_e,this.matched+=_e;var $t=_e.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),_e},unput:function(_e){var $t=_e.length,re=_e.split(/(?:\r\n?|\n)/g);this._input=_e+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-$t),this.offset-=$t;var ie=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),re.length-1&&(this.yylineno-=re.length-1);var Oe=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:re?(re.length===ie.length?this.yylloc.first_column:0)+ie[ie.length-re.length].length-re[0].length:this.yylloc.first_column-$t},this.options.ranges&&(this.yylloc.range=[Oe[0],Oe[0]+this.yyleng-$t]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject: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},less:function(_e){this.unput(this.match.slice(_e))},pastInput:function(){var _e=this.matched.substr(0,this.matched.length-this.match.length);return(_e.length>20?"...":"")+_e.substr(-20).replace(/\n/g,"")},upcomingInput: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,"")},showPosition:function(){var _e=this.pastInput(),$t=new Array(_e.length+1).join("-");return _e+this.upcomingInput()+`
`+$t+"^"},test_match:function(_e,$t){var re,ie,Oe;if(this.options.backtrack_lexer&&(Oe={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&&(Oe.yylloc.range=this.yylloc.range.slice(0))),ie=_e[0].match(/(?:\r\n?|\n).*/g),ie&&(this.yylineno+=ie.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:ie?ie[ie.length-1].length-ie[ie.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],re=this.performAction.call(this,this.yy,this,$t,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),re)return re;if(this._backtrack){for(var oe in Oe)this[oe]=Oe[oe];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var _e,$t,re,ie;this._more||(this.yytext="",this.match="");for(var Oe=this._currentRules(),oe=0;oe<Oe.length;oe++)if(re=this._input.match(this.rules[Oe[oe]]),re&&(!$t||re[0].length>$t[0].length)){if($t=re,ie=oe,this.options.backtrack_lexer){if(_e=this.test_match(re,Oe[oe]),_e!==!1)return _e;if(this._backtrack){$t=!1;continue}else return!1}else if(!this.options.flex)break}return $t?(_e=this.test_match($t,Oe[ie]),_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})},lex:function(){var $t=this.next();return $t||this.lex()},begin:function($t){this.conditionStack.push($t)},popState:function(){var $t=this.conditionStack.length-1;return $t>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function($t){return $t=this.conditionStack.length-1-Math.abs($t||0),$t>=0?this.conditionStack[$t]:"INITIAL"},pushState:function($t){this.begin($t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function($t,re,ie,Oe){switch(ie){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;case 8:return this.begin("ID"),50;case 9:return this.begin("ID"),52;case 10:return 13;case 11:return this.begin("ID"),53;case 12:return re.yytext=re.yytext.trim(),this.begin("ALIAS"),70;case 13:return this.popState(),this.popState(),this.begin("LINE"),51;case 14:return this.popState(),this.popState(),5;case 15:return this.begin("LINE"),36;case 16:return this.begin("LINE"),37;case 17:return this.begin("LINE"),38;case 18:return this.begin("LINE"),39;case 19:return this.begin("LINE"),49;case 20:return this.begin("LINE"),41;case 21:return this.begin("LINE"),43;case 22:return this.begin("LINE"),48;case 23:return this.begin("LINE"),44;case 24:return this.begin("LINE"),47;case 25:return this.begin("LINE"),46;case 26:return this.popState(),15;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;case 37:return this.begin("ID"),23;case 38:return 29;case 39:return 30;case 40:return this.begin("acc_title"),31;case 41:return this.popState(),"acc_title_value";case 42:return this.begin("acc_descr"),33;case 43:return this.popState(),"acc_descr_value";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 re.yytext=re.yytext.trim(),70;case 53:return 73;case 54:return 74;case 55:return 71;case 56:return 72;case 57:return 75;case 58:return 76;case 59:return 77;case 60:return 78;case 61:return 79;case 62:return 68;case 63:return 69;case 64:return 5;case 65:return"INVALID"}},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,/^(?:-[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],inclusive:!0}}};return we}();ve.lexer=Ge;function Ke(){this.yy={}}return Ke.prototype=ve,ve.Parser=Ke,new Ke}();sgt.parser=sgt;const eHe=sgt;let DP,I5={},agt={},ogt={},cL=[],Bb=[],SK=!1,cgt,D5,OP,uL;const nHe=function(i){cL.push({name:i.text,wrap:i.wrap===void 0&&kT()||!!i.wrap,fill:i.color,actorKeys:[]}),D5=cL.slice(-1)[0]},ugt=function(i,a,f,p){let v=D5;const m=I5[i];if(m){if(D5&&m.box&&D5!==m.box)throw new Error("A same participant should only be defined in one Box: "+m.name+" can't be in '"+m.box.name+"' and in '"+D5.name+"' at the same time.");if(v=m.box?m.box:D5,m.box=v,m&&a===m.name&&f==null)return}(f==null||f.text==null)&&(f={text:a,wrap:null,type:p}),(p==null||f.text==null)&&(f={text:a,wrap:null,type:p}),I5[i]={box:v,name:a,description:f.text,wrap:f.wrap===void 0&&kT()||!!f.wrap,prevActor:DP,links:{},properties:{},actorCnt:null,rectData:null,type:p||"participant"},DP&&I5[DP]&&(I5[DP].nextActor=i),D5&&D5.actorKeys.push(i),DP=i},rHe=i=>{let a,f=0;for(a=0;a<Bb.length;a++)Bb[a].type===PP.ACTIVE_START&&Bb[a].from.actor===i&&f++,Bb[a].type===PP.ACTIVE_END&&Bb[a].from.actor===i&&f--;return f},iHe=function(i,a,f,p){Bb.push({from:i,to:a,message:f.text,wrap:f.wrap===void 0&&kT()||!!f.wrap,answer:p})},Zh=function(i,a,f={text:void 0,wrap:void 0},p,v=!1){if(p===PP.ACTIVE_END&&rHe(i.actor)<1){let b=new Error("Trying to inactivate an inactive participant ("+i.actor+")");throw b.hash={text:"->>-",token:"->>-",line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["'ACTIVE_PARTICIPANT'"]},b}return Bb.push({from:i,to:a,message:f.text,wrap:f.wrap===void 0&&kT()||!!f.wrap,type:p,activate:v}),!0},sHe=function(){return cL.length>0},aHe=function(){return cL.some(i=>i.name)},oHe=function(){return Bb},cHe=function(){return cL},uHe=function(){return I5},lHe=function(){return agt},hHe=function(){return ogt},NP=function(i){return I5[i]},fHe=function(){return Object.keys(I5)},dHe=function(){SK=!0},gHe=function(){SK=!1},pHe=()=>SK,bHe=function(i){cgt=i},kT=()=>cgt!==void 0?cgt:Le().sequence.wrap,vHe=function(){I5={},agt={},ogt={},cL=[],Bb=[],SK=!1,ap()},wHe=function(i){const a=i.trim(),f={text:a.replace(/^:?(?:no)?wrap:/,"").trim(),wrap:a.match(/^:?wrap:/)!==null?!0:a.match(/^:?nowrap:/)!==null?!1:void 0};return Ut.debug("parseMessage:",f),f},mHe=function(i){const a=i.match(/^((?:rgba?|hsla?)\s*\(.*\)|\w*)(.*)$/);let f=a!=null&&a[1]?a[1].trim():"transparent",p=a!=null&&a[2]?a[2].trim():void 0;if(window&&window.CSS)window.CSS.supports("color",f)||(f="transparent",p=i.trim());else{const m=new Option().style;m.color=f,m.color!==f&&(f="transparent",p=i.trim())}return{color:f,text:p!==void 0?Dd(p.replace(/^:?(?:no)?wrap:/,""),Le()):void 0,wrap:p!==void 0?p.match(/^:?wrap:/)!==null?!0:p.match(/^:?nowrap:/)!==null?!1:void 0:void 0}},PP={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},yHe={FILLED:0,OPEN:1},xHe={LEFTOF:0,RIGHTOF:1,OVER:2},hRt=function(i,a,f){f.text,f.wrap===void 0&&kT()||f.wrap;const p=[].concat(i,i);Bb.push({from:p[0],to:p[1],message:f.text,wrap:f.wrap===void 0&&kT()||!!f.wrap,type:PP.NOTE,placement:a})},fRt=function(i,a){const f=NP(i);try{let p=Dd(a.text,Le());p=p.replace(/&amp;/g,"&"),p=p.replace(/&equals;/g,"=");const v=JSON.parse(p);lgt(f,v)}catch(p){Ut.error("error while parsing actor link text",p)}},kHe=function(i,a){const f=NP(i);try{const b={};let E=Dd(a.text,Le());var p=E.indexOf("@");E=E.replace(/&amp;/g,"&"),E=E.replace(/&equals;/g,"=");var v=E.slice(0,p-1).trim(),m=E.slice(p+1).trim();b[v]=m,lgt(f,b)}catch(b){Ut.error("error while parsing actor link text",b)}};function lgt(i,a){if(i.links==null)i.links=a;else for(let f in a)i.links[f]=a[f]}const dRt=function(i,a){const f=NP(i);try{let p=Dd(a.text,Le());const v=JSON.parse(p);gRt(f,v)}catch(p){Ut.error("error while parsing actor properties text",p)}};function gRt(i,a){if(i.properties==null)i.properties=a;else for(let f in a)i.properties[f]=a[f]}function EHe(){D5=void 0}const pRt=function(i,a){const f=NP(i),p=document.getElementById(a.text);try{const v=p.innerHTML,m=JSON.parse(v);m.properties&&gRt(f,m.properties),m.links&&lgt(f,m.links)}catch(v){Ut.error("error while parsing actor details text",v)}},THe=function(i,a){if(i!==void 0&&i.properties!==void 0)return i.properties[a]},bRt=function(i){if(Array.isArray(i))i.forEach(function(a){bRt(a)});else switch(i.type){case"sequenceIndex":Bb.push({from:void 0,to:void 0,message:{start:i.sequenceIndex,step:i.sequenceIndexStep,visible:i.sequenceVisible},wrap:!1,type:i.signalType});break;case"addParticipant":ugt(i.actor,i.actor,i.description,i.draw);break;case"createParticipant":if(I5[i.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");OP=i.actor,ugt(i.actor,i.actor,i.description,i.draw),agt[i.actor]=Bb.length;break;case"destroyParticipant":uL=i.actor,ogt[i.actor]=Bb.length;break;case"activeStart":Zh(i.actor,void 0,void 0,i.signalType);break;case"activeEnd":Zh(i.actor,void 0,void 0,i.signalType);break;case"addNote":hRt(i.actor,i.placement,i.text);break;case"addLinks":fRt(i.actor,i.text);break;case"addALink":kHe(i.actor,i.text);break;case"addProperties":dRt(i.actor,i.text);break;case"addDetails":pRt(i.actor,i.text);break;case"addMessage":if(OP){if(i.to!==OP)throw new Error("The created participant "+OP+" does not have an associated creating message after its declaration. Please check the sequence diagram.");OP=void 0}else if(uL){if(i.to!==uL&&i.from!==uL)throw new Error("The destroyed participant "+uL+" does not have an associated destroying message after its declaration. Please check the sequence diagram.");uL=void 0}Zh(i.from,i.to,i.msg,i.signalType,i.activate);break;case"boxStart":nHe(i.boxData);break;case"boxEnd":EHe();break;case"loopStart":Zh(void 0,void 0,i.loopText,i.signalType);break;case"loopEnd":Zh(void 0,void 0,void 0,i.signalType);break;case"rectStart":Zh(void 0,void 0,i.color,i.signalType);break;case"rectEnd":Zh(void 0,void 0,void 0,i.signalType);break;case"optStart":Zh(void 0,void 0,i.optText,i.signalType);break;case"optEnd":Zh(void 0,void 0,void 0,i.signalType);break;case"altStart":Zh(void 0,void 0,i.altText,i.signalType);break;case"else":Zh(void 0,void 0,i.altText,i.signalType);break;case"altEnd":Zh(void 0,void 0,void 0,i.signalType);break;case"setAccTitle":cg(i.text);break;case"parStart":Zh(void 0,void 0,i.parText,i.signalType);break;case"and":Zh(void 0,void 0,i.parText,i.signalType);break;case"parEnd":Zh(void 0,void 0,void 0,i.signalType);break;case"criticalStart":Zh(void 0,void 0,i.criticalText,i.signalType);break;case"option":Zh(void 0,void 0,i.optionText,i.signalType);break;case"criticalEnd":Zh(void 0,void 0,void 0,i.signalType);break;case"breakStart":Zh(void 0,void 0,i.breakText,i.signalType);break;case"breakEnd":Zh(void 0,void 0,void 0,i.signalType);break}},vRt={addActor:ugt,addMessage:iHe,addSignal:Zh,addLinks:fRt,addDetails:pRt,addProperties:dRt,autoWrap:kT,setWrap:bHe,enableSequenceNumbers:dHe,disableSequenceNumbers:gHe,showSequenceNumbers:pHe,getMessages:oHe,getActors:uHe,getCreatedActors:lHe,getDestroyedActors:hHe,getActor:NP,getActorKeys:fHe,getActorProperty:THe,getAccTitle:op,getBoxes:cHe,getDiagramTitle:Db,setDiagramTitle:Z2,getConfig:()=>Le().sequence,clear:vHe,parseMessage:wHe,parseBoxData:mHe,LINETYPE:PP,ARROWTYPE:yHe,PLACEMENT:xHe,addNote:hRt,setAccTitle:cg,apply:bRt,setAccDescription:cp,getAccDescription:up,hasAtLeastOneBox:sHe,hasAtLeastOneBoxWithTitle:aHe},CHe=i=>`.actor {
    stroke: ${i.actorBorder};
    fill: ${i.actorBkg};
  }

  text.actor > tspan {
    fill: ${i.actorTextColor};
    stroke: none;
  }

  .actor-line {
    stroke: ${i.actorLineColor};
  }

  .messageLine0 {
    stroke-width: 1.5;
    stroke-dasharray: none;
    stroke: ${i.signalColor};
  }

  .messageLine1 {
    stroke-width: 1.5;
    stroke-dasharray: 2, 2;
    stroke: ${i.signalColor};
  }

  #arrowhead path {
    fill: ${i.signalColor};
    stroke: ${i.signalColor};
  }

  .sequenceNumber {
    fill: ${i.sequenceNumberColor};
  }

  #sequencenumber {
    fill: ${i.signalColor};
  }

  #crosshead path {
    fill: ${i.signalColor};
    stroke: ${i.signalColor};
  }

  .messageText {
    fill: ${i.signalTextColor};
    stroke: none;
  }

  .labelBox {
    stroke: ${i.labelBoxBorderColor};
    fill: ${i.labelBoxBkgColor};
  }

  .labelText, .labelText > tspan {
    fill: ${i.labelTextColor};
    stroke: none;
  }

  .loopText, .loopText > tspan {
    fill: ${i.loopTextColor};
    stroke: none;
  }

  .loopLine {
    stroke-width: 2px;
    stroke-dasharray: 2, 2;
    stroke: ${i.labelBoxBorderColor};
    fill: ${i.labelBoxBorderColor};
  }

  .note {
    //stroke: #decc93;
    stroke: ${i.noteBorderColor};
    fill: ${i.noteBkgColor};
  }

  .noteText, .noteText > tspan {
    fill: ${i.noteTextColor};
    stroke: none;
  }

  .activation0 {
    fill: ${i.activationBkgColor};
    stroke: ${i.activationBorderColor};
  }

  .activation1 {
    fill: ${i.activationBkgColor};
    stroke: ${i.activationBorderColor};
  }

  .activation2 {
    fill: ${i.activationBkgColor};
    stroke: ${i.activationBorderColor};
  }

  .actorPopupMenu {
    position: absolute;
  }

  .actorPopupMenuPanel {
    position: absolute;
    fill: ${i.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: ${i.actorBorder};
    fill: ${i.actorBkg};
  }
  .actor-man circle, line {
    stroke: ${i.actorBorder};
    fill: ${i.actorBkg};
    stroke-width: 2px;
  }
`,ET=18*2,hgt=function(i,a){return HW(i,a)},wRt=(i,a)=>{WSe(()=>{const f=document.querySelectorAll(i);f.length!==0&&(f[0].addEventListener("mouseover",function(){LHe("actor"+a+"_popup")}),f[0].addEventListener("mouseout",function(){MHe("actor"+a+"_popup")}))})},_He=function(i,a,f,p,v){if(a.links===void 0||a.links===null||Object.keys(a.links).length===0)return{height:0,width:0};const m=a.links,b=a.actorCnt,E=a.rectData;var _="none";v&&(_="block !important");const L=i.append("g");L.attr("id","actor"+b+"_popup"),L.attr("class","actorPopupMenu"),L.attr("display",_),wRt("#actor"+b+"_popup",b);var N="";E.class!==void 0&&(N=" "+E.class);let B=E.width>f?E.width:f;const j=L.append("rect");if(j.attr("class","actorPopupMenuPanel"+N),j.attr("x",E.x),j.attr("y",E.height),j.attr("fill",E.fill),j.attr("stroke",E.stroke),j.attr("width",B),j.attr("height",E.height),j.attr("rx",E.rx),j.attr("ry",E.ry),m!=null){var R=20;for(let it in m){var z=L.append("a"),K=Q6(m[it]);z.attr("xlink:href",K),z.attr("target","_blank"),UHe(p)(it,z,E.x+10,E.height+R,B,20,{class:"actor"},p),R+=30}}return j.attr("height",R),{height:E.height+R,width:B}},SHe=function(i){return"var pu = document.getElementById('"+i+"'); if (pu != null) { pu.style.display = 'block'; }"},AHe=function(i){return"var pu = document.getElementById('"+i+"'); if (pu != null) { pu.style.display = 'none'; }"},LHe=function(i){var a=document.getElementById(i);a!=null&&(a.style.display="block")},MHe=function(i){var a=document.getElementById(i);a!=null&&(a.style.display="none")},lL=function(i,a){let f=0,p=0;const v=a.text.split(Yr.lineBreakRegex),[m,b]=$A(a.fontSize);let E=[],_=0,L=()=>a.y;if(a.valign!==void 0&&a.textMargin!==void 0&&a.textMargin>0)switch(a.valign){case"top":case"start":L=()=>Math.round(a.y+a.textMargin);break;case"middle":case"center":L=()=>Math.round(a.y+(f+p+a.textMargin)/2);break;case"bottom":case"end":L=()=>Math.round(a.y+(f+p+2*a.textMargin)-a.textMargin);break}if(a.anchor!==void 0&&a.textMargin!==void 0&&a.width!==void 0)switch(a.anchor){case"left":case"start":a.x=Math.round(a.x+a.textMargin),a.anchor="start",a.dominantBaseline="middle",a.alignmentBaseline="middle";break;case"middle":case"center":a.x=Math.round(a.x+a.width/2),a.anchor="middle",a.dominantBaseline="middle",a.alignmentBaseline="middle";break;case"right":case"end":a.x=Math.round(a.x+a.width-a.textMargin),a.anchor="end",a.dominantBaseline="middle",a.alignmentBaseline="middle";break}for(let[N,B]of v.entries()){a.textMargin!==void 0&&a.textMargin===0&&m!==void 0&&(_=N*m);const j=i.append("text");j.attr("x",a.x),j.attr("y",L()),a.anchor!==void 0&&j.attr("text-anchor",a.anchor).attr("dominant-baseline",a.dominantBaseline).attr("alignment-baseline",a.alignmentBaseline),a.fontFamily!==void 0&&j.style("font-family",a.fontFamily),b!==void 0&&j.style("font-size",b),a.fontWeight!==void 0&&j.style("font-weight",a.fontWeight),a.fill!==void 0&&j.attr("fill",a.fill),a.class!==void 0&&j.attr("class",a.class),a.dy!==void 0?j.attr("dy",a.dy):_!==0&&j.attr("dy",_);const R=B||RDt;if(a.tspan){const z=j.append("tspan");z.attr("x",a.x),a.fill!==void 0&&z.attr("fill",a.fill),z.text(R)}else j.text(R);a.valign!==void 0&&a.textMargin!==void 0&&a.textMargin>0&&(p+=(j._groups||j)[0][0].getBBox().height,f=p),E.push(j)}return E},mRt=function(i,a){function f(v,m,b,E,_){return v+","+m+" "+(v+b)+","+m+" "+(v+b)+","+(m+E-_)+" "+(v+b-_*1.2)+","+(m+E)+" "+v+","+(m+E)}const p=i.append("polygon");return p.attr("points",f(a.x,a.y,a.width,a.height,7)),p.attr("class","labelBox"),a.y=a.y+a.height/2,lL(i,a),p};let hm=-1;const yRt=(i,a,f,p)=>{i.select&&f.forEach(v=>{const m=a[v],b=i.select("#actor"+m.actorCnt);!p.mirrorActors&&m.stopy?b.attr("y2",m.stopy+m.height/2):p.mirrorActors&&b.attr("y2",m.stopy)})},IHe=function(i,a,f,p){const v=p?a.stopy:a.starty,m=a.x+a.width/2,b=v+5,E=i.append("g").lower();var _=E;p||(hm++,_.append("line").attr("id","actor"+hm).attr("x1",m).attr("y1",b).attr("x2",m).attr("y2",2e3).attr("class","actor-line").attr("class","200").attr("stroke-width","0.5px").attr("stroke","#999"),_=E.append("g"),a.actorCnt=hm,a.links!=null&&(_.attr("id","root-"+hm),wRt("#root-"+hm,hm)));const L=fT();var N="actor";a.properties!=null&&a.properties.class?N=a.properties.class:L.fill="#eaeaea",L.x=a.x,L.y=v,L.width=a.width,L.height=a.height,L.class=N,L.rx=3,L.ry=3;const B=hgt(_,L);if(a.rectData=L,a.properties!=null&&a.properties.icon){const R=a.properties.icon.trim();R.charAt(0)==="@"?pIe(_,L.x+L.width-20,L.y+10,R.substr(1)):gIe(_,L.x+L.width-20,L.y+10,R)}fgt(f)(a.description,_,L.x,L.y,L.width,L.height,{class:"actor"},f);let j=a.height;if(B.node){const R=B.node().getBBox();a.height=R.height,j=R.height}return j},DHe=function(i,a,f,p){const v=p?a.stopy:a.starty,m=a.x+a.width/2,b=v+80;i.lower(),p||(hm++,i.append("line").attr("id","actor"+hm).attr("x1",m).attr("y1",b).attr("x2",m).attr("y2",2e3).attr("class","actor-line").attr("class","200").attr("stroke-width","0.5px").attr("stroke","#999"),a.actorCnt=hm);const E=i.append("g");E.attr("class","actor-man");const _=fT();_.x=a.x,_.y=v,_.fill="#eaeaea",_.width=a.width,_.height=a.height,_.class="actor",_.rx=3,_.ry=3,E.append("line").attr("id","actor-man-torso"+hm).attr("x1",m).attr("y1",v+25).attr("x2",m).attr("y2",v+45),E.append("line").attr("id","actor-man-arms"+hm).attr("x1",m-ET/2).attr("y1",v+33).attr("x2",m+ET/2).attr("y2",v+33),E.append("line").attr("x1",m-ET/2).attr("y1",v+60).attr("x2",m).attr("y2",v+45),E.append("line").attr("x1",m).attr("y1",v+45).attr("x2",m+ET/2-2).attr("y2",v+60);const L=E.append("circle");L.attr("cx",a.x+a.width/2),L.attr("cy",v+10),L.attr("r",15),L.attr("width",a.width),L.attr("height",a.height);const N=E.node().getBBox();return a.height=N.height,fgt(f)(a.description,E,_.x,_.y+35,_.width,_.height,{class:"actor"},f),a.height},OHe=function(i,a,f,p){switch(a.type){case"actor":return DHe(i,a,f,p);case"participant":return IHe(i,a,f,p)}},NHe=function(i,a,f){const v=i.append("g");xRt(v,a),a.name&&fgt(f)(a.name,v,a.x,a.y+(a.textMaxHeight||0)/2,a.width,0,{class:"text"},f),v.lower()},PHe=function(i){return i.append("g")},FHe=function(i,a,f,p,v){const m=fT(),b=a.anchored;m.x=a.startx,m.y=a.starty,m.class="activation"+v%3,m.width=a.stopx-a.startx,m.height=f-a.starty,hgt(b,m)},BHe=function(i,a,f,p){const{boxMargin:v,boxTextMargin:m,labelBoxHeight:b,labelBoxWidth:E,messageFontFamily:_,messageFontSize:L,messageFontWeight:N}=p,B=i.append("g"),j=function(K,it,st,ut){return B.append("line").attr("x1",K).attr("y1",it).attr("x2",st).attr("y2",ut).attr("class","loopLine")};j(a.startx,a.starty,a.stopx,a.starty),j(a.stopx,a.starty,a.stopx,a.stopy),j(a.startx,a.stopy,a.stopx,a.stopy),j(a.startx,a.starty,a.startx,a.stopy),a.sections!==void 0&&a.sections.forEach(function(K){j(a.startx,K.y,a.stopx,K.y).style("stroke-dasharray","3, 3")});let R=Pdt();R.text=f,R.x=a.startx,R.y=a.starty,R.fontFamily=_,R.fontSize=L,R.fontWeight=N,R.anchor="middle",R.valign="middle",R.tspan=!1,R.width=E||50,R.height=b||20,R.textMargin=m,R.class="labelText",mRt(B,R),R=kRt(),R.text=a.title,R.x=a.startx+E/2+(a.stopx-a.startx)/2,R.y=a.starty+v+m,R.anchor="middle",R.valign="middle",R.textMargin=m,R.class="loopText",R.fontFamily=_,R.fontSize=L,R.fontWeight=N,R.wrap=!0;let z=lL(B,R);return a.sectionTitles!==void 0&&a.sectionTitles.forEach(function(K,it){if(K.message){R.text=K.message,R.x=a.startx+(a.stopx-a.startx)/2,R.y=a.sections[it].y+v+m,R.class="loopText",R.anchor="middle",R.valign="middle",R.tspan=!1,R.fontFamily=_,R.fontSize=L,R.fontWeight=N,R.wrap=a.wrap,z=lL(B,R);let st=Math.round(z.map(ut=>(ut._groups||ut)[0][0].getBBox().height).reduce((ut,bt)=>ut+bt));a.sections[it].height+=st-(v+m)}}),a.height=Math.round(a.stopy-a.starty),B},xRt=function(i,a){bNt(i,a)},RHe=function(i){i.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")},jHe=function(i){i.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")},$He=function(i){i.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")},zHe=function(i){i.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").append("path").attr("d","M 0 0 L 10 5 L 0 10 z")},qHe=function(i){i.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")},HHe=function(i){i.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)},GHe=function(i){i.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")},kRt=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}},VHe=function(){return{x:0,y:0,fill:"#EDF2AE",stroke:"#666",width:100,anchor:"start",height:100,rx:0,ry:0}},fgt=function(){function i(v,m,b,E,_,L,N){const B=m.append("text").attr("x",b+_/2).attr("y",E+L/2+5).style("text-anchor","middle").text(v);p(B,N)}function a(v,m,b,E,_,L,N,B){const{actorFontSize:j,actorFontFamily:R,actorFontWeight:z}=B,[K,it]=$A(j),st=v.split(Yr.lineBreakRegex);for(let ut=0;ut<st.length;ut++){const bt=ut*K-K*(st.length-1)/2,mt=m.append("text").attr("x",b+_/2).attr("y",E).style("text-anchor","middle").style("font-size",it).style("font-weight",z).style("font-family",R);mt.append("tspan").attr("x",b+_/2).attr("dy",bt).text(st[ut]),mt.attr("y",E+L/2).attr("dominant-baseline","central").attr("alignment-baseline","central"),p(mt,N)}}function f(v,m,b,E,_,L,N,B){const j=m.append("switch"),z=j.append("foreignObject").attr("x",b).attr("y",E).attr("width",_).attr("height",L).append("xhtml:div").style("display","table").style("height","100%").style("width","100%");z.append("div").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(v),a(v,j,b,E,_,L,N,B),p(z,N)}function p(v,m){for(const b in m)m.hasOwnProperty(b)&&v.attr(b,m[b])}return function(v){return v.textPlacement==="fo"?f:v.textPlacement==="old"?i:a}}(),UHe=function(){function i(v,m,b,E,_,L,N){const B=m.append("text").attr("x",b).attr("y",E).style("text-anchor","start").text(v);p(B,N)}function a(v,m,b,E,_,L,N,B){const{actorFontSize:j,actorFontFamily:R,actorFontWeight:z}=B,K=v.split(Yr.lineBreakRegex);for(let it=0;it<K.length;it++){const st=it*j-j*(K.length-1)/2,ut=m.append("text").attr("x",b).attr("y",E).style("text-anchor","start").style("font-size",j).style("font-weight",z).style("font-family",R);ut.append("tspan").attr("x",b).attr("dy",st).text(K[it]),ut.attr("y",E+L/2).attr("dominant-baseline","central").attr("alignment-baseline","central"),p(ut,N)}}function f(v,m,b,E,_,L,N,B){const j=m.append("switch"),z=j.append("foreignObject").attr("x",b).attr("y",E).attr("width",_).attr("height",L).append("xhtml:div").style("display","table").style("height","100%").style("width","100%");z.append("div").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(v),a(v,j,b,E,_,L,N,B),p(z,N)}function p(v,m){for(const b in m)m.hasOwnProperty(b)&&v.attr(b,m[b])}return function(v){return v.textPlacement==="fo"?f:v.textPlacement==="old"?i:a}}(),Jh={drawRect:hgt,drawText:lL,drawLabel:mRt,drawActor:OHe,drawBox:NHe,drawPopup:_He,anchorElement:PHe,drawActivation:FHe,drawLoop:BHe,drawBackgroundRect:xRt,insertArrowHead:zHe,insertArrowFilledHead:qHe,insertSequenceNumber:HHe,insertArrowCrossHead:GHe,insertDatabaseIcon:RHe,insertComputerIcon:jHe,insertClockIcon:$He,getTextObj:kRt,getNoteRect:VHe,popupMenu:SHe,popdownMenu:AHe,fixLifeLineHeights:yRt,sanitizeUrl:Q6};let fn={};const Pr={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],activations:[],models:{getHeight:function(){return Math.max.apply(null,this.actors.length===0?[0]:this.actors.map(i=>i.height||0))+(this.loops.length===0?0:this.loops.map(i=>i.height||0).reduce((i,a)=>i+a))+(this.messages.length===0?0:this.messages.map(i=>i.height||0).reduce((i,a)=>i+a))+(this.notes.length===0?0:this.notes.map(i=>i.height||0).reduce((i,a)=>i+a))},clear:function(){this.actors=[],this.boxes=[],this.loops=[],this.messages=[],this.notes=[]},addBox:function(i){this.boxes.push(i)},addActor:function(i){this.actors.push(i)},addLoop:function(i){this.loops.push(i)},addMessage:function(i){this.messages.push(i)},addNote:function(i){this.notes.push(i)},lastActor:function(){return this.actors[this.actors.length-1]},lastLoop:function(){return this.loops[this.loops.length-1]},lastMessage:function(){return this.messages[this.messages.length-1]},lastNote:function(){return this.notes[this.notes.length-1]},actors:[],boxes:[],loops:[],messages:[],notes:[]},init: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,TRt(Le())},updateVal:function(i,a,f,p){i[a]===void 0?i[a]=f:i[a]=p(f,i[a])},updateBounds:function(i,a,f,p){const v=this;let m=0;function b(E){return function(L){m++;const N=v.sequenceItems.length-m+1;v.updateVal(L,"starty",a-N*fn.boxMargin,Math.min),v.updateVal(L,"stopy",p+N*fn.boxMargin,Math.max),v.updateVal(Pr.data,"startx",i-N*fn.boxMargin,Math.min),v.updateVal(Pr.data,"stopx",f+N*fn.boxMargin,Math.max),E!=="activation"&&(v.updateVal(L,"startx",i-N*fn.boxMargin,Math.min),v.updateVal(L,"stopx",f+N*fn.boxMargin,Math.max),v.updateVal(Pr.data,"starty",a-N*fn.boxMargin,Math.min),v.updateVal(Pr.data,"stopy",p+N*fn.boxMargin,Math.max))}}this.sequenceItems.forEach(b()),this.activations.forEach(b("activation"))},insert:function(i,a,f,p){const v=Yr.getMin(i,f),m=Yr.getMax(i,f),b=Yr.getMin(a,p),E=Yr.getMax(a,p);this.updateVal(Pr.data,"startx",v,Math.min),this.updateVal(Pr.data,"starty",b,Math.min),this.updateVal(Pr.data,"stopx",m,Math.max),this.updateVal(Pr.data,"stopy",E,Math.max),this.updateBounds(v,b,m,E)},newActivation:function(i,a,f){const p=f[i.from.actor],v=AK(i.from.actor).length||0,m=p.x+p.width/2+(v-1)*fn.activationWidth/2;this.activations.push({startx:m,starty:this.verticalPos+2,stopx:m+fn.activationWidth,stopy:void 0,actor:i.from.actor,anchored:Jh.anchorElement(a)})},endActivation:function(i){const a=this.activations.map(function(f){return f.actor}).lastIndexOf(i.from.actor);return this.activations.splice(a,1)[0]},createLoop:function(i={message:void 0,wrap:!1,width:void 0},a){return{startx:void 0,starty:this.verticalPos,stopx:void 0,stopy:void 0,title:i.message,wrap:i.wrap,width:i.width,height:0,fill:a}},newLoop:function(i={message:void 0,wrap:!1,width:void 0},a){this.sequenceItems.push(this.createLoop(i,a))},endLoop:function(){return this.sequenceItems.pop()},isLoopOverlap:function(){return this.sequenceItems.length?this.sequenceItems[this.sequenceItems.length-1].overlap:!1},addSectionToLoop:function(i){const a=this.sequenceItems.pop();a.sections=a.sections||[],a.sectionTitles=a.sectionTitles||[],a.sections.push({y:Pr.getVerticalPos(),height:0}),a.sectionTitles.push(i),this.sequenceItems.push(a)},saveVerticalPos:function(){this.isLoopOverlap()&&(this.savedVerticalPos=this.verticalPos)},resetVerticalPos:function(){this.isLoopOverlap()&&(this.verticalPos=this.savedVerticalPos)},bumpVerticalPos:function(i){this.verticalPos=this.verticalPos+i,this.data.stopy=Yr.getMax(this.data.stopy,this.verticalPos)},getVerticalPos:function(){return this.verticalPos},getBounds:function(){return{bounds:this.data,models:this.models}}},WHe=function(i,a){Pr.bumpVerticalPos(fn.boxMargin),a.height=fn.boxMargin,a.starty=Pr.getVerticalPos();const f=fT();f.x=a.startx,f.y=a.starty,f.width=a.width||fn.width,f.class="note";const p=i.append("g"),v=Jh.drawRect(p,f),m=Pdt();m.x=a.startx,m.y=a.starty,m.width=f.width,m.dy="1em",m.text=a.message,m.class="noteText",m.fontFamily=fn.noteFontFamily,m.fontSize=fn.noteFontSize,m.fontWeight=fn.noteFontWeight,m.anchor=fn.noteAlign,m.textMargin=fn.noteMargin,m.valign="center";const b=lL(p,m),E=Math.round(b.map(_=>(_._groups||_)[0][0].getBBox().height).reduce((_,L)=>_+L));v.attr("height",E+2*fn.noteMargin),a.height+=E+2*fn.noteMargin,Pr.bumpVerticalPos(E+2*fn.noteMargin),a.stopy=a.starty+E+2*fn.noteMargin,a.stopx=a.startx+f.width,Pr.insert(a.startx,a.starty,a.stopx,a.stopy),Pr.models.addNote(a)},TT=i=>({fontFamily:i.messageFontFamily,fontSize:i.messageFontSize,fontWeight:i.messageFontWeight}),hL=i=>({fontFamily:i.noteFontFamily,fontSize:i.noteFontSize,fontWeight:i.noteFontWeight}),dgt=i=>({fontFamily:i.actorFontFamily,fontSize:i.actorFontSize,fontWeight:i.actorFontWeight});function KHe(i,a){Pr.bumpVerticalPos(10);const{startx:f,stopx:p,message:v}=a,m=Yr.splitBreaks(v).length,b=$a.calculateTextDimensions(v,TT(fn)),E=b.height/m;a.height+=E,Pr.bumpVerticalPos(E);let _,L=b.height-10;const N=b.width;if(f===p){_=Pr.getVerticalPos()+L,fn.rightAngles||(L+=fn.boxMargin,_=Pr.getVerticalPos()+L),L+=30;const B=Yr.getMax(N/2,fn.width/2);Pr.insert(f-B,Pr.getVerticalPos()-10+L,p+B,Pr.getVerticalPos()+30+L)}else L+=fn.boxMargin,_=Pr.getVerticalPos()+L,Pr.insert(f,_-10,p,_);return Pr.bumpVerticalPos(L),a.height+=L,a.stopy=a.starty+a.height,Pr.insert(a.fromBounds,a.starty,a.toBounds,a.stopy),_}const YHe=function(i,a,f,p){const{startx:v,stopx:m,starty:b,message:E,type:_,sequenceIndex:L,sequenceVisible:N}=a,B=$a.calculateTextDimensions(E,TT(fn)),j=Pdt();j.x=v,j.y=b+10,j.width=m-v,j.class="messageText",j.dy="1em",j.text=E,j.fontFamily=fn.messageFontFamily,j.fontSize=fn.messageFontSize,j.fontWeight=fn.messageFontWeight,j.anchor=fn.messageAlign,j.valign="center",j.textMargin=fn.wrapPadding,j.tspan=!1,lL(i,j);const R=B.width;let z;v===m?fn.rightAngles?z=i.append("path").attr("d",`M  ${v},${f} H ${v+Yr.getMax(fn.width/2,R/2)} V ${f+25} H ${v}`):z=i.append("path").attr("d","M "+v+","+f+" C "+(v+60)+","+(f-10)+" "+(v+60)+","+(f+30)+" "+v+","+(f+20)):(z=i.append("line"),z.attr("x1",v),z.attr("y1",f),z.attr("x2",m),z.attr("y2",f)),_===p.db.LINETYPE.DOTTED||_===p.db.LINETYPE.DOTTED_CROSS||_===p.db.LINETYPE.DOTTED_POINT||_===p.db.LINETYPE.DOTTED_OPEN?(z.style("stroke-dasharray","3, 3"),z.attr("class","messageLine1")):z.attr("class","messageLine0");let K="";fn.arrowMarkerAbsolute&&(K=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,K=K.replace(/\(/g,"\\("),K=K.replace(/\)/g,"\\)")),z.attr("stroke-width",2),z.attr("stroke","none"),z.style("fill","none"),(_===p.db.LINETYPE.SOLID||_===p.db.LINETYPE.DOTTED)&&z.attr("marker-end","url("+K+"#arrowhead)"),(_===p.db.LINETYPE.SOLID_POINT||_===p.db.LINETYPE.DOTTED_POINT)&&z.attr("marker-end","url("+K+"#filled-head)"),(_===p.db.LINETYPE.SOLID_CROSS||_===p.db.LINETYPE.DOTTED_CROSS)&&z.attr("marker-end","url("+K+"#crosshead)"),(N||fn.showSequenceNumbers)&&(z.attr("marker-start","url("+K+"#sequencenumber)"),i.append("text").attr("x",v).attr("y",f+4).attr("font-family","sans-serif").attr("font-size","12px").attr("text-anchor","middle").attr("class","sequenceNumber").text(L))},XHe=function(i,a,f,p,v,m,b){let E=0,_=0,L,N=0;for(const B of p){const j=a[B],R=j.box;L&&L!=R&&(b||Pr.models.addBox(L),_+=fn.boxMargin+L.margin),R&&R!=L&&(b||(R.x=E+_,R.y=v),_+=R.margin),j.width=j.width||fn.width,j.height=Yr.getMax(j.height||fn.height,fn.height),j.margin=j.margin||fn.actorMargin,N=Yr.getMax(N,j.height),f[j.name]&&(_+=j.width/2),j.x=E+_,j.starty=Pr.getVerticalPos(),Pr.insert(j.x,v,j.x+j.width,j.height),E+=j.width+_,j.box&&(j.box.width=E+R.margin-j.box.x),_=j.margin,L=j.box,Pr.models.addActor(j)}L&&!b&&Pr.models.addBox(L),Pr.bumpVerticalPos(N)},ggt=function(i,a,f,p){if(p){let v=0;Pr.bumpVerticalPos(fn.boxMargin*2);for(const m of f){const b=a[m];b.stopy||(b.stopy=Pr.getVerticalPos());const E=Jh.drawActor(i,b,fn,!0);v=Yr.getMax(v,E)}Pr.bumpVerticalPos(v+fn.boxMargin)}else for(const v of f){const m=a[v];Jh.drawActor(i,m,fn,!1)}},ERt=function(i,a,f,p){let v=0,m=0;for(const b of f){const E=a[b],_=tGe(E),L=Jh.drawPopup(i,E,_,fn,fn.forceMenus,p);L.height>v&&(v=L.height),L.width+E.x>m&&(m=L.width+E.x)}return{maxHeight:v,maxWidth:m}},TRt=function(i){Y1(fn,i),i.fontFamily&&(fn.actorFontFamily=fn.noteFontFamily=fn.messageFontFamily=i.fontFamily),i.fontSize&&(fn.actorFontSize=fn.noteFontSize=fn.messageFontSize=i.fontSize),i.fontWeight&&(fn.actorFontWeight=fn.noteFontWeight=fn.messageFontWeight=i.fontWeight)},AK=function(i){return Pr.activations.filter(function(a){return a.actor===i})},CRt=function(i,a){const f=a[i],p=AK(i),v=p.reduce(function(b,E){return Yr.getMin(b,E.startx)},f.x+f.width/2-1),m=p.reduce(function(b,E){return Yr.getMax(b,E.stopx)},f.x+f.width/2+1);return[v,m]};function y3(i,a,f,p,v){Pr.bumpVerticalPos(f);let m=p;if(a.id&&a.message&&i[a.id]){const b=i[a.id].width,E=TT(fn);a.message=$a.wrapLabel(`[${a.message}]`,b-2*fn.wrapPadding,E),a.width=b,a.wrap=!0;const _=$a.calculateTextDimensions(a.message,E),L=Yr.getMax(_.height,fn.labelBoxHeight);m=p+L,Ut.debug(`${L} - ${a.message}`)}v(a),Pr.bumpVerticalPos(m)}function QHe(i,a,f,p,v,m,b){function E(L,N){L.x<v[i.from].x?(Pr.insert(a.stopx-N,a.starty,a.startx,a.stopy+L.height/2+fn.noteMargin),a.stopx=a.stopx+N):(Pr.insert(a.startx,a.starty,a.stopx+N,a.stopy+L.height/2+fn.noteMargin),a.stopx=a.stopx-N)}function _(L,N){L.x<v[i.to].x?(Pr.insert(a.startx-N,a.starty,a.stopx,a.stopy+L.height/2+fn.noteMargin),a.startx=a.startx+N):(Pr.insert(a.stopx,a.starty,a.startx+N,a.stopy+L.height/2+fn.noteMargin),a.startx=a.startx-N)}if(m[i.to]==p){const L=v[i.to],N=L.type=="actor"?ET/2+3:L.width/2+3;E(L,N),L.starty=f-L.height/2,Pr.bumpVerticalPos(L.height/2)}else if(b[i.from]==p){const L=v[i.from];if(fn.mirrorActors){const N=L.type=="actor"?ET/2:L.width/2;_(L,N)}L.stopy=f-L.height/2,Pr.bumpVerticalPos(L.height/2)}else if(b[i.to]==p){const L=v[i.to];if(fn.mirrorActors){const N=L.type=="actor"?ET/2+3:L.width/2+3;E(L,N)}L.stopy=f-L.height/2,Pr.bumpVerticalPos(L.height/2)}}const ZHe=function(i,a,f,p){const{securityLevel:v,sequence:m}=Le();fn=m;let b;v==="sandbox"&&(b=yr("#i"+a));const E=yr(v==="sandbox"?b.nodes()[0].contentDocument.body:"body"),_=v==="sandbox"?b.nodes()[0].contentDocument:document;Pr.init(),Ut.debug(p.db);const L=v==="sandbox"?E.select(`[id="${a}"]`):yr(`[id="${a}"]`),N=p.db.getActors(),B=p.db.getCreatedActors(),j=p.db.getDestroyedActors(),R=p.db.getBoxes();let z=p.db.getActorKeys();const K=p.db.getMessages(),it=p.db.getDiagramTitle(),st=p.db.hasAtLeastOneBox(),ut=p.db.hasAtLeastOneBoxWithTitle(),bt=JHe(N,K,p);if(fn.height=eGe(N,bt,R),Jh.insertComputerIcon(L),Jh.insertDatabaseIcon(L),Jh.insertClockIcon(L),st&&(Pr.bumpVerticalPos(fn.boxMargin),ut&&Pr.bumpVerticalPos(R[0].textMaxHeight)),fn.hideUnusedParticipants===!0){const Ct=new Set;K.forEach(Z=>{Ct.add(Z.from),Ct.add(Z.to)}),z=z.filter(Z=>Ct.has(Z))}XHe(L,N,B,z,0,K,!1);const mt=iGe(K,N,bt,p);Jh.insertArrowHead(L),Jh.insertArrowCrossHead(L),Jh.insertArrowFilledHead(L),Jh.insertSequenceNumber(L);function yt(Ct,Z){const Tt=Pr.endActivation(Ct);Tt.starty+18>Z&&(Tt.starty=Z-6,Z+=12),Jh.drawActivation(L,Tt,Z,fn,AK(Ct.from.actor).length),Pr.insert(Tt.startx,Z-10,Tt.stopx,Z)}let dt=1,ht=1;const wt=[],X=[];K.forEach(function(Ct,Z){let Tt,Ht,It;switch(Ct.type){case p.db.LINETYPE.NOTE:Pr.resetVerticalPos(),Ht=Ct.noteModel,WHe(L,Ht);break;case p.db.LINETYPE.ACTIVE_START:Pr.newActivation(Ct,L,N);break;case p.db.LINETYPE.ACTIVE_END:yt(Ct,Pr.getVerticalPos());break;case p.db.LINETYPE.LOOP_START:y3(mt,Ct,fn.boxMargin,fn.boxMargin+fn.boxTextMargin,Ft=>Pr.newLoop(Ft));break;case p.db.LINETYPE.LOOP_END:Tt=Pr.endLoop(),Jh.drawLoop(L,Tt,"loop",fn),Pr.bumpVerticalPos(Tt.stopy-Pr.getVerticalPos()),Pr.models.addLoop(Tt);break;case p.db.LINETYPE.RECT_START:y3(mt,Ct,fn.boxMargin,fn.boxMargin,Ft=>Pr.newLoop(void 0,Ft.message));break;case p.db.LINETYPE.RECT_END:Tt=Pr.endLoop(),X.push(Tt),Pr.models.addLoop(Tt),Pr.bumpVerticalPos(Tt.stopy-Pr.getVerticalPos());break;case p.db.LINETYPE.OPT_START:y3(mt,Ct,fn.boxMargin,fn.boxMargin+fn.boxTextMargin,Ft=>Pr.newLoop(Ft));break;case p.db.LINETYPE.OPT_END:Tt=Pr.endLoop(),Jh.drawLoop(L,Tt,"opt",fn),Pr.bumpVerticalPos(Tt.stopy-Pr.getVerticalPos()),Pr.models.addLoop(Tt);break;case p.db.LINETYPE.ALT_START:y3(mt,Ct,fn.boxMargin,fn.boxMargin+fn.boxTextMargin,Ft=>Pr.newLoop(Ft));break;case p.db.LINETYPE.ALT_ELSE:y3(mt,Ct,fn.boxMargin+fn.boxTextMargin,fn.boxMargin,Ft=>Pr.addSectionToLoop(Ft));break;case p.db.LINETYPE.ALT_END:Tt=Pr.endLoop(),Jh.drawLoop(L,Tt,"alt",fn),Pr.bumpVerticalPos(Tt.stopy-Pr.getVerticalPos()),Pr.models.addLoop(Tt);break;case p.db.LINETYPE.PAR_START:case p.db.LINETYPE.PAR_OVER_START:y3(mt,Ct,fn.boxMargin,fn.boxMargin+fn.boxTextMargin,Ft=>Pr.newLoop(Ft)),Pr.saveVerticalPos();break;case p.db.LINETYPE.PAR_AND:y3(mt,Ct,fn.boxMargin+fn.boxTextMargin,fn.boxMargin,Ft=>Pr.addSectionToLoop(Ft));break;case p.db.LINETYPE.PAR_END:Tt=Pr.endLoop(),Jh.drawLoop(L,Tt,"par",fn),Pr.bumpVerticalPos(Tt.stopy-Pr.getVerticalPos()),Pr.models.addLoop(Tt);break;case p.db.LINETYPE.AUTONUMBER:dt=Ct.message.start||dt,ht=Ct.message.step||ht,Ct.message.visible?p.db.enableSequenceNumbers():p.db.disableSequenceNumbers();break;case p.db.LINETYPE.CRITICAL_START:y3(mt,Ct,fn.boxMargin,fn.boxMargin+fn.boxTextMargin,Ft=>Pr.newLoop(Ft));break;case p.db.LINETYPE.CRITICAL_OPTION:y3(mt,Ct,fn.boxMargin+fn.boxTextMargin,fn.boxMargin,Ft=>Pr.addSectionToLoop(Ft));break;case p.db.LINETYPE.CRITICAL_END:Tt=Pr.endLoop(),Jh.drawLoop(L,Tt,"critical",fn),Pr.bumpVerticalPos(Tt.stopy-Pr.getVerticalPos()),Pr.models.addLoop(Tt);break;case p.db.LINETYPE.BREAK_START:y3(mt,Ct,fn.boxMargin,fn.boxMargin+fn.boxTextMargin,Ft=>Pr.newLoop(Ft));break;case p.db.LINETYPE.BREAK_END:Tt=Pr.endLoop(),Jh.drawLoop(L,Tt,"break",fn),Pr.bumpVerticalPos(Tt.stopy-Pr.getVerticalPos()),Pr.models.addLoop(Tt);break;default:try{It=Ct.msgModel,It.starty=Pr.getVerticalPos(),It.sequenceIndex=dt,It.sequenceVisible=p.db.showSequenceNumbers();const Ft=KHe(L,It);QHe(Ct,It,Ft,Z,N,B,j),wt.push({messageModel:It,lineStartY:Ft}),Pr.models.addMessage(It)}catch(Ft){Ut.error("error while drawing message",Ft)}}[p.db.LINETYPE.SOLID_OPEN,p.db.LINETYPE.DOTTED_OPEN,p.db.LINETYPE.SOLID,p.db.LINETYPE.DOTTED,p.db.LINETYPE.SOLID_CROSS,p.db.LINETYPE.DOTTED_CROSS,p.db.LINETYPE.SOLID_POINT,p.db.LINETYPE.DOTTED_POINT].includes(Ct.type)&&(dt=dt+ht)}),Ut.debug("createdActors",B),Ut.debug("destroyedActors",j),ggt(L,N,z,!1),wt.forEach(Ct=>YHe(L,Ct.messageModel,Ct.lineStartY,p)),fn.mirrorActors&&ggt(L,N,z,!0),X.forEach(Ct=>Jh.drawBackgroundRect(L,Ct)),yRt(L,N,z,fn),Pr.models.boxes.forEach(function(Ct){Ct.height=Pr.getVerticalPos()-Ct.y,Pr.insert(Ct.x,Ct.y,Ct.x+Ct.width,Ct.height),Ct.startx=Ct.x,Ct.starty=Ct.y,Ct.stopx=Ct.startx+Ct.width,Ct.stopy=Ct.starty+Ct.height,Ct.stroke="rgb(0,0,0, 0.5)",Jh.drawBox(L,Ct,fn)}),st&&Pr.bumpVerticalPos(fn.boxMargin);const pt=ERt(L,N,z,_),{bounds:U}=Pr.getBounds();let xt=U.stopy-U.starty;xt<pt.maxHeight&&(xt=pt.maxHeight);let nt=xt+2*fn.diagramMarginY;fn.mirrorActors&&(nt=nt-fn.boxMargin+fn.bottomMarginAdj);let Ot=U.stopx-U.startx;Ot<pt.maxWidth&&(Ot=pt.maxWidth);const Nt=Ot+2*fn.diagramMarginX;it&&L.append("text").text(it).attr("x",(U.stopx-U.startx)/2-2*fn.diagramMarginX).attr("y",-25),og(L,nt,Nt,fn.useMaxWidth);const qt=it?40:0;L.attr("viewBox",U.startx-fn.diagramMarginX+" -"+(fn.diagramMarginY+qt)+" "+Nt+" "+(nt+qt)),Ut.debug("models:",Pr.models)};function JHe(i,a,f){const p={};return a.forEach(function(v){if(i[v.to]&&i[v.from]){const m=i[v.to];if(v.placement===f.db.PLACEMENT.LEFTOF&&!m.prevActor||v.placement===f.db.PLACEMENT.RIGHTOF&&!m.nextActor)return;const b=v.placement!==void 0,E=!b,_=b?hL(fn):TT(fn),L=v.wrap?$a.wrapLabel(v.message,fn.width-2*fn.wrapPadding,_):v.message,B=$a.calculateTextDimensions(L,_).width+2*fn.wrapPadding;E&&v.from===m.nextActor?p[v.to]=Yr.getMax(p[v.to]||0,B):E&&v.from===m.prevActor?p[v.from]=Yr.getMax(p[v.from]||0,B):E&&v.from===v.to?(p[v.from]=Yr.getMax(p[v.from]||0,B/2),p[v.to]=Yr.getMax(p[v.to]||0,B/2)):v.placement===f.db.PLACEMENT.RIGHTOF?p[v.from]=Yr.getMax(p[v.from]||0,B):v.placement===f.db.PLACEMENT.LEFTOF?p[m.prevActor]=Yr.getMax(p[m.prevActor]||0,B):v.placement===f.db.PLACEMENT.OVER&&(m.prevActor&&(p[m.prevActor]=Yr.getMax(p[m.prevActor]||0,B/2)),m.nextActor&&(p[v.from]=Yr.getMax(p[v.from]||0,B/2)))}}),Ut.debug("maxMessageWidthPerActor:",p),p}const tGe=function(i){let a=0;const f=dgt(fn);for(const p in i.links){const m=$a.calculateTextDimensions(p,f).width+2*fn.wrapPadding+2*fn.boxMargin;a<m&&(a=m)}return a};function eGe(i,a,f){let p=0;Object.keys(i).forEach(m=>{const b=i[m];b.wrap&&(b.description=$a.wrapLabel(b.description,fn.width-2*fn.wrapPadding,dgt(fn)));const E=$a.calculateTextDimensions(b.description,dgt(fn));b.width=b.wrap?fn.width:Yr.getMax(fn.width,E.width+2*fn.wrapPadding),b.height=b.wrap?Yr.getMax(E.height,fn.height):fn.height,p=Yr.getMax(p,b.height)});for(const m in a){const b=i[m];if(!b)continue;const E=i[b.nextActor];if(!E){const B=a[m]+fn.actorMargin-b.width/2;b.margin=Yr.getMax(B,fn.actorMargin);continue}const L=a[m]+fn.actorMargin-b.width/2-E.width/2;b.margin=Yr.getMax(L,fn.actorMargin)}let v=0;return f.forEach(m=>{const b=TT(fn);let E=m.actorKeys.reduce((N,B)=>N+=i[B].width+(i[B].margin||0),0);E-=2*fn.boxTextMargin,m.wrap&&(m.name=$a.wrapLabel(m.name,E-2*fn.wrapPadding,b));const _=$a.calculateTextDimensions(m.name,b);v=Yr.getMax(_.height,v);const L=Yr.getMax(E,_.width+2*fn.wrapPadding);if(m.margin=fn.boxTextMargin,E<L){const N=(L-E)/2;m.margin+=N}}),f.forEach(m=>m.textMaxHeight=v),Yr.getMax(p,fn.height)}const nGe=function(i,a,f){const p=a[i.from].x,v=a[i.to].x,m=i.wrap&&i.message;let b=$a.calculateTextDimensions(m?$a.wrapLabel(i.message,fn.width,hL(fn)):i.message,hL(fn));const E={width:m?fn.width:Yr.getMax(fn.width,b.width+2*fn.noteMargin),height:0,startx:a[i.from].x,stopx:0,starty:0,stopy:0,message:i.message};return i.placement===f.db.PLACEMENT.RIGHTOF?(E.width=m?Yr.getMax(fn.width,b.width):Yr.getMax(a[i.from].width/2+a[i.to].width/2,b.width+2*fn.noteMargin),E.startx=p+(a[i.from].width+fn.actorMargin)/2):i.placement===f.db.PLACEMENT.LEFTOF?(E.width=m?Yr.getMax(fn.width,b.width+2*fn.noteMargin):Yr.getMax(a[i.from].width/2+a[i.to].width/2,b.width+2*fn.noteMargin),E.startx=p-E.width+(a[i.from].width-fn.actorMargin)/2):i.to===i.from?(b=$a.calculateTextDimensions(m?$a.wrapLabel(i.message,Yr.getMax(fn.width,a[i.from].width),hL(fn)):i.message,hL(fn)),E.width=m?Yr.getMax(fn.width,a[i.from].width):Yr.getMax(a[i.from].width,fn.width,b.width+2*fn.noteMargin),E.startx=p+(a[i.from].width-E.width)/2):(E.width=Math.abs(p+a[i.from].width/2-(v+a[i.to].width/2))+fn.actorMargin,E.startx=p<v?p+a[i.from].width/2-fn.actorMargin/2:v+a[i.to].width/2-fn.actorMargin/2),m&&(E.message=$a.wrapLabel(i.message,E.width-2*fn.wrapPadding,hL(fn))),Ut.debug(`NM:[${E.startx},${E.stopx},${E.starty},${E.stopy}:${E.width},${E.height}=${i.message}]`),E},rGe=function(i,a,f){if(![f.db.LINETYPE.SOLID_OPEN,f.db.LINETYPE.DOTTED_OPEN,f.db.LINETYPE.SOLID,f.db.LINETYPE.DOTTED,f.db.LINETYPE.SOLID_CROSS,f.db.LINETYPE.DOTTED_CROSS,f.db.LINETYPE.SOLID_POINT,f.db.LINETYPE.DOTTED_POINT].includes(i.type))return{};const[p,v]=CRt(i.from,a),[m,b]=CRt(i.to,a),E=p<=m,_=E?v:p;let L=E?m:b;const N=Math.abs(m-b)>2,B=K=>E?-K:K;i.from===i.to?L=_:(i.activate&&!N&&(L+=B(fn.activationWidth/2-1)),[f.db.LINETYPE.SOLID_OPEN,f.db.LINETYPE.DOTTED_OPEN].includes(i.type)||(L+=B(3)));const j=[p,v,m,b],R=Math.abs(_-L);i.wrap&&i.message&&(i.message=$a.wrapLabel(i.message,Yr.getMax(R+2*fn.wrapPadding,fn.width),TT(fn)));const z=$a.calculateTextDimensions(i.message,TT(fn));return{width:Yr.getMax(i.wrap?0:z.width+2*fn.wrapPadding,R+2*fn.wrapPadding,fn.width),height:0,startx:_,stopx:L,starty:0,stopy:0,message:i.message,type:i.type,wrap:i.wrap,fromBounds:Math.min.apply(null,j),toBounds:Math.max.apply(null,j)}},iGe=function(i,a,f,p){const v={},m=[];let b,E,_;return i.forEach(function(L){switch(L.id=$a.random({length:10}),L.type){case p.db.LINETYPE.LOOP_START:case p.db.LINETYPE.ALT_START:case p.db.LINETYPE.OPT_START:case p.db.LINETYPE.PAR_START:case p.db.LINETYPE.PAR_OVER_START:case p.db.LINETYPE.CRITICAL_START:case p.db.LINETYPE.BREAK_START:m.push({id:L.id,msg:L.message,from:Number.MAX_SAFE_INTEGER,to:Number.MIN_SAFE_INTEGER,width:0});break;case p.db.LINETYPE.ALT_ELSE:case p.db.LINETYPE.PAR_AND:case p.db.LINETYPE.CRITICAL_OPTION:L.message&&(b=m.pop(),v[b.id]=b,v[L.id]=b,m.push(b));break;case p.db.LINETYPE.LOOP_END:case p.db.LINETYPE.ALT_END:case p.db.LINETYPE.OPT_END:case p.db.LINETYPE.PAR_END:case p.db.LINETYPE.CRITICAL_END:case p.db.LINETYPE.BREAK_END:b=m.pop(),v[b.id]=b;break;case p.db.LINETYPE.ACTIVE_START:{const B=a[L.from?L.from.actor:L.to.actor],j=AK(L.from?L.from.actor:L.to.actor).length,R=B.x+B.width/2+(j-1)*fn.activationWidth/2,z={startx:R,stopx:R+fn.activationWidth,actor:L.from.actor,enabled:!0};Pr.activations.push(z)}break;case p.db.LINETYPE.ACTIVE_END:{const B=Pr.activations.map(j=>j.actor).lastIndexOf(L.from.actor);delete Pr.activations.splice(B,1)[0]}break}L.placement!==void 0?(E=nGe(L,a,p),L.noteModel=E,m.forEach(B=>{b=B,b.from=Yr.getMin(b.from,E.startx),b.to=Yr.getMax(b.to,E.startx+E.width),b.width=Yr.getMax(b.width,Math.abs(b.from-b.to))-fn.labelBoxWidth})):(_=rGe(L,a,p),L.msgModel=_,_.startx&&_.stopx&&m.length>0&&m.forEach(B=>{if(b=B,_.startx===_.stopx){const j=a[L.from],R=a[L.to];b.from=Yr.getMin(j.x-_.width/2,j.x-j.width/2,b.from),b.to=Yr.getMax(R.x+_.width/2,R.x+j.width/2,b.to),b.width=Yr.getMax(b.width,Math.abs(b.to-b.from))-fn.labelBoxWidth}else b.from=Yr.getMin(_.startx,b.from),b.to=Yr.getMax(_.stopx,b.to),b.width=Yr.getMax(b.width,_.width)-fn.labelBoxWidth}))}),Pr.activations=[],Ut.debug("Loop type widths:",v),v},sGe=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:eHe,db:vRt,renderer:{bounds:Pr,drawActors:ggt,drawActorsPopup:ERt,setConf:TRt,draw:ZHe},styles:CHe,init:({wrap:i})=>{vRt.setWrap(i)}}},Symbol.toStringTag,{value:"Module"}));var pgt=function(){var i=function(_e,$t,re,ie){for(re=re||{},ie=_e.length;ie--;re[_e[ie]]=$t);return re},a=[1,16],f=[1,17],p=[1,18],v=[1,37],m=[1,38],b=[1,24],E=[1,22],_=[1,23],L=[1,29],N=[1,30],B=[1,31],j=[1,32],R=[1,33],z=[1,34],K=[1,25],it=[1,26],st=[1,27],ut=[1,28],bt=[1,42],mt=[1,39],yt=[1,40],dt=[1,41],ht=[1,43],wt=[1,9],X=[1,8,9],pt=[1,54],U=[1,55],xt=[1,56],nt=[1,57],Ot=[1,58],Nt=[1,59],qt=[1,60],Ct=[1,8,9,38],Z=[1,71],Tt=[1,8,9,12,13,21,36,38,41,58,59,60,61,62,63,64,69,71],Ht=[1,8,9,12,13,19,21,36,38,41,45,58,59,60,61,62,63,64,69,71,84,86,87,88,89],It=[13,84,86,87,88,89],Ft=[13,63,64,84,86,87,88,89],ke=[13,58,59,60,61,62,84,86,87,88,89],pn=[1,90],Me=[1,8,9,36,38,41],ve=[1,8,9,21],Ge={trace:function(){},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,cssClassStatement:27,noteStatement:28,direction:29,acc_title:30,acc_title_value:31,acc_descr:32,acc_descr_value:33,acc_descr_multiline_value:34,namespaceIdentifier:35,STRUCT_START:36,classStatements:37,STRUCT_STOP:38,NAMESPACE:39,classIdentifier:40,STYLE_SEPARATOR:41,members:42,CLASS:43,ANNOTATION_START:44,ANNOTATION_END:45,MEMBER:46,SEPARATOR:47,relation:48,NOTE_FOR:49,noteText:50,NOTE:51,direction_tb:52,direction_bt:53,direction_rl:54,direction_lr:55,relationType:56,lineType:57,AGGREGATION:58,EXTENSION:59,COMPOSITION:60,DEPENDENCY:61,LOLLIPOP:62,LINE:63,DOTTED_LINE:64,CALLBACK:65,LINK:66,LINK_TARGET:67,CLICK:68,CALLBACK_NAME:69,CALLBACK_ARGS:70,HREF:71,CSSCLASS:72,commentToken:73,textToken:74,graphCodeTokens:75,textNoTagsToken:76,TAGSTART:77,TAGEND:78,"==":79,"--":80,PCT:81,DEFAULT:82,SPACE:83,MINUS:84,keywords:85,UNICODE_TEXT:86,NUM:87,ALPHA:88,BQUOTE_STR:89,$accept:0,$end:1},terminals_:{2:"error",7:"CLASS_DIAGRAM",8:"NEWLINE",9:"EOF",12:"SQS",13:"STR",14:"SQE",19:"GENERICTYPE",21:"LABEL",30:"acc_title",31:"acc_title_value",32:"acc_descr",33:"acc_descr_value",34:"acc_descr_multiline_value",36:"STRUCT_START",38:"STRUCT_STOP",39:"NAMESPACE",41:"STYLE_SEPARATOR",43:"CLASS",44:"ANNOTATION_START",45:"ANNOTATION_END",46:"MEMBER",47:"SEPARATOR",49:"NOTE_FOR",51:"NOTE",52:"direction_tb",53:"direction_bt",54:"direction_rl",55:"direction_lr",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:"CSSCLASS",75:"graphCodeTokens",77:"TAGSTART",78:"TAGEND",79:"==",80:"--",81:"PCT",82:"DEFAULT",83:"SPACE",84:"MINUS",85:"keywords",86:"UNICODE_TEXT",87:"NUM",88:"ALPHA",89:"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,2],[10,2],[10,1],[22,4],[22,5],[35,2],[37,1],[37,2],[37,3],[23,1],[23,3],[23,4],[23,6],[40,2],[40,3],[25,4],[42,1],[42,2],[24,1],[24,2],[24,1],[24,1],[20,3],[20,4],[20,4],[20,5],[28,3],[28,2],[29,1],[29,1],[29,1],[29,1],[48,3],[48,2],[48,2],[48,1],[56,1],[56,1],[56,1],[56,1],[56,1],[57,1],[57,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],[73,1],[73,1],[74,1],[74,1],[74,1],[74,1],[74,1],[74,1],[74,1],[76,1],[76,1],[76,1],[76,1],[16,1],[16,1],[16,1],[16,1],[18,1],[50,1]],performAction:function($t,re,ie,Oe,oe,Ne,me){var cn=Ne.length-1;switch(oe){case 8:this.$=Ne[cn-1];break;case 9:case 11:case 12:this.$=Ne[cn];break;case 10:case 13:this.$=Ne[cn-1]+Ne[cn];break;case 14:case 15:this.$=Ne[cn-1]+"~"+Ne[cn]+"~";break;case 16:Oe.addRelation(Ne[cn]);break;case 17:Ne[cn-1].title=Oe.cleanupLabel(Ne[cn]),Oe.addRelation(Ne[cn-1]);break;case 26:this.$=Ne[cn].trim(),Oe.setAccTitle(this.$);break;case 27:case 28:this.$=Ne[cn].trim(),Oe.setAccDescription(this.$);break;case 29:Oe.addClassesToNamespace(Ne[cn-3],Ne[cn-1]);break;case 30:Oe.addClassesToNamespace(Ne[cn-4],Ne[cn-1]);break;case 31:this.$=Ne[cn],Oe.addNamespace(Ne[cn]);break;case 32:this.$=[Ne[cn]];break;case 33:this.$=[Ne[cn-1]];break;case 34:Ne[cn].unshift(Ne[cn-2]),this.$=Ne[cn];break;case 36:Oe.setCssClass(Ne[cn-2],Ne[cn]);break;case 37:Oe.addMembers(Ne[cn-3],Ne[cn-1]);break;case 38:Oe.setCssClass(Ne[cn-5],Ne[cn-3]),Oe.addMembers(Ne[cn-5],Ne[cn-1]);break;case 39:this.$=Ne[cn],Oe.addClass(Ne[cn]);break;case 40:this.$=Ne[cn-1],Oe.addClass(Ne[cn-1]),Oe.setClassLabel(Ne[cn-1],Ne[cn]);break;case 41:Oe.addAnnotation(Ne[cn],Ne[cn-2]);break;case 42:this.$=[Ne[cn]];break;case 43:Ne[cn].push(Ne[cn-1]),this.$=Ne[cn];break;case 44:break;case 45:Oe.addMember(Ne[cn-1],Oe.cleanupLabel(Ne[cn]));break;case 46:break;case 47:break;case 48:this.$={id1:Ne[cn-2],id2:Ne[cn],relation:Ne[cn-1],relationTitle1:"none",relationTitle2:"none"};break;case 49:this.$={id1:Ne[cn-3],id2:Ne[cn],relation:Ne[cn-1],relationTitle1:Ne[cn-2],relationTitle2:"none"};break;case 50:this.$={id1:Ne[cn-3],id2:Ne[cn],relation:Ne[cn-2],relationTitle1:"none",relationTitle2:Ne[cn-1]};break;case 51:this.$={id1:Ne[cn-4],id2:Ne[cn],relation:Ne[cn-2],relationTitle1:Ne[cn-3],relationTitle2:Ne[cn-1]};break;case 52:Oe.addNote(Ne[cn],Ne[cn-1]);break;case 53:Oe.addNote(Ne[cn]);break;case 54:Oe.setDirection("TB");break;case 55:Oe.setDirection("BT");break;case 56:Oe.setDirection("RL");break;case 57:Oe.setDirection("LR");break;case 58:this.$={type1:Ne[cn-2],type2:Ne[cn],lineType:Ne[cn-1]};break;case 59:this.$={type1:"none",type2:Ne[cn],lineType:Ne[cn-1]};break;case 60:this.$={type1:Ne[cn-1],type2:"none",lineType:Ne[cn]};break;case 61:this.$={type1:"none",type2:"none",lineType:Ne[cn]};break;case 62:this.$=Oe.relationType.AGGREGATION;break;case 63:this.$=Oe.relationType.EXTENSION;break;case 64:this.$=Oe.relationType.COMPOSITION;break;case 65:this.$=Oe.relationType.DEPENDENCY;break;case 66:this.$=Oe.relationType.LOLLIPOP;break;case 67:this.$=Oe.lineType.LINE;break;case 68:this.$=Oe.lineType.DOTTED_LINE;break;case 69:case 75:this.$=Ne[cn-2],Oe.setClickEvent(Ne[cn-1],Ne[cn]);break;case 70:case 76:this.$=Ne[cn-3],Oe.setClickEvent(Ne[cn-2],Ne[cn-1]),Oe.setTooltip(Ne[cn-2],Ne[cn]);break;case 71:this.$=Ne[cn-2],Oe.setLink(Ne[cn-1],Ne[cn]);break;case 72:this.$=Ne[cn-3],Oe.setLink(Ne[cn-2],Ne[cn-1],Ne[cn]);break;case 73:this.$=Ne[cn-3],Oe.setLink(Ne[cn-2],Ne[cn-1]),Oe.setTooltip(Ne[cn-2],Ne[cn]);break;case 74:this.$=Ne[cn-4],Oe.setLink(Ne[cn-3],Ne[cn-2],Ne[cn]),Oe.setTooltip(Ne[cn-3],Ne[cn-1]);break;case 77:this.$=Ne[cn-3],Oe.setClickEvent(Ne[cn-2],Ne[cn-1],Ne[cn]);break;case 78:this.$=Ne[cn-4],Oe.setClickEvent(Ne[cn-3],Ne[cn-2],Ne[cn-1]),Oe.setTooltip(Ne[cn-3],Ne[cn]);break;case 79:this.$=Ne[cn-3],Oe.setLink(Ne[cn-2],Ne[cn]);break;case 80:this.$=Ne[cn-4],Oe.setLink(Ne[cn-3],Ne[cn-1],Ne[cn]);break;case 81:this.$=Ne[cn-4],Oe.setLink(Ne[cn-3],Ne[cn-1]),Oe.setTooltip(Ne[cn-3],Ne[cn]);break;case 82:this.$=Ne[cn-5],Oe.setLink(Ne[cn-4],Ne[cn-2],Ne[cn]),Oe.setTooltip(Ne[cn-4],Ne[cn-1]);break;case 83:Oe.setCssClass(Ne[cn-1],Ne[cn]);break}},table:[{3:1,4:2,5:3,6:4,7:[1,6],10:5,16:35,17:19,18:36,20:7,22:8,23:9,24:10,25:11,26:12,27:13,28:14,29:15,30:a,32:f,34:p,35:20,39:v,40:21,43:m,44:b,46:E,47:_,49:L,51:N,52:B,53:j,54:R,55:z,65:K,66:it,68:st,72:ut,84:bt,86:mt,87:yt,88:dt,89:ht},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,3]},i(wt,[2,5],{8:[1,44]}),{8:[1,45]},i(X,[2,16],{21:[1,46]}),i(X,[2,18]),i(X,[2,19]),i(X,[2,20]),i(X,[2,21]),i(X,[2,22]),i(X,[2,23]),i(X,[2,24]),i(X,[2,25]),{31:[1,47]},{33:[1,48]},i(X,[2,28]),i(X,[2,44],{48:49,56:52,57:53,13:[1,50],21:[1,51],58:pt,59:U,60:xt,61:nt,62:Ot,63:Nt,64:qt}),{36:[1,61]},i(Ct,[2,35],{36:[1,63],41:[1,62]}),i(X,[2,46]),i(X,[2,47]),{16:64,84:bt,86:mt,87:yt,88:dt},{16:35,17:65,18:36,84:bt,86:mt,87:yt,88:dt,89:ht},{16:35,17:66,18:36,84:bt,86:mt,87:yt,88:dt,89:ht},{16:35,17:67,18:36,84:bt,86:mt,87:yt,88:dt,89:ht},{13:[1,68]},{16:35,17:69,18:36,84:bt,86:mt,87:yt,88:dt,89:ht},{13:Z,50:70},i(X,[2,54]),i(X,[2,55]),i(X,[2,56]),i(X,[2,57]),i(Tt,[2,11],{16:35,18:36,17:72,19:[1,73],84:bt,86:mt,87:yt,88:dt,89:ht}),i(Tt,[2,12],{19:[1,74]}),{15:75,16:76,84:bt,86:mt,87:yt,88:dt},{16:35,17:77,18:36,84:bt,86:mt,87:yt,88:dt,89:ht},i(Ht,[2,97]),i(Ht,[2,98]),i(Ht,[2,99]),i(Ht,[2,100]),i([1,8,9,12,13,19,21,36,38,41,58,59,60,61,62,63,64,69,71],[2,101]),i(wt,[2,6],{10:5,20:7,22:8,23:9,24:10,25:11,26:12,27:13,28:14,29:15,17:19,35:20,40:21,16:35,18:36,5:78,30:a,32:f,34:p,39:v,43:m,44:b,46:E,47:_,49:L,51:N,52:B,53:j,54:R,55:z,65:K,66:it,68:st,72:ut,84:bt,86:mt,87:yt,88:dt,89:ht}),{5:79,10:5,16:35,17:19,18:36,20:7,22:8,23:9,24:10,25:11,26:12,27:13,28:14,29:15,30:a,32:f,34:p,35:20,39:v,40:21,43:m,44:b,46:E,47:_,49:L,51:N,52:B,53:j,54:R,55:z,65:K,66:it,68:st,72:ut,84:bt,86:mt,87:yt,88:dt,89:ht},i(X,[2,17]),i(X,[2,26]),i(X,[2,27]),{13:[1,81],16:35,17:80,18:36,84:bt,86:mt,87:yt,88:dt,89:ht},{48:82,56:52,57:53,58:pt,59:U,60:xt,61:nt,62:Ot,63:Nt,64:qt},i(X,[2,45]),{57:83,63:Nt,64:qt},i(It,[2,61],{56:84,58:pt,59:U,60:xt,61:nt,62:Ot}),i(Ft,[2,62]),i(Ft,[2,63]),i(Ft,[2,64]),i(Ft,[2,65]),i(Ft,[2,66]),i(ke,[2,67]),i(ke,[2,68]),{8:[1,86],23:87,37:85,40:21,43:m},{16:88,84:bt,86:mt,87:yt,88:dt},{42:89,46:pn},{45:[1,91]},{13:[1,92]},{13:[1,93]},{69:[1,94],71:[1,95]},{16:96,84:bt,86:mt,87:yt,88:dt},{13:Z,50:97},i(X,[2,53]),i(X,[2,102]),i(Tt,[2,13]),i(Tt,[2,14]),i(Tt,[2,15]),{36:[2,31]},{15:98,16:76,36:[2,9],84:bt,86:mt,87:yt,88:dt},i(Me,[2,39],{11:99,12:[1,100]}),i(wt,[2,7]),{9:[1,101]},i(ve,[2,48]),{16:35,17:102,18:36,84:bt,86:mt,87:yt,88:dt,89:ht},{13:[1,104],16:35,17:103,18:36,84:bt,86:mt,87:yt,88:dt,89:ht},i(It,[2,60],{56:105,58:pt,59:U,60:xt,61:nt,62:Ot}),i(It,[2,59]),{38:[1,106]},{23:87,37:107,40:21,43:m},{8:[1,108],38:[2,32]},i(Ct,[2,36],{36:[1,109]}),{38:[1,110]},{38:[2,42],42:111,46:pn},{16:35,17:112,18:36,84:bt,86:mt,87:yt,88:dt,89:ht},i(X,[2,69],{13:[1,113]}),i(X,[2,71],{13:[1,115],67:[1,114]}),i(X,[2,75],{13:[1,116],70:[1,117]}),{13:[1,118]},i(X,[2,83]),i(X,[2,52]),{36:[2,10]},i(Me,[2,40]),{13:[1,119]},{1:[2,4]},i(ve,[2,50]),i(ve,[2,49]),{16:35,17:120,18:36,84:bt,86:mt,87:yt,88:dt,89:ht},i(It,[2,58]),i(X,[2,29]),{38:[1,121]},{23:87,37:122,38:[2,33],40:21,43:m},{42:123,46:pn},i(Ct,[2,37]),{38:[2,43]},i(X,[2,41]),i(X,[2,70]),i(X,[2,72]),i(X,[2,73],{67:[1,124]}),i(X,[2,76]),i(X,[2,77],{13:[1,125]}),i(X,[2,79],{13:[1,127],67:[1,126]}),{14:[1,128]},i(ve,[2,51]),i(X,[2,30]),{38:[2,34]},{38:[1,129]},i(X,[2,74]),i(X,[2,78]),i(X,[2,80]),i(X,[2,81],{67:[1,130]}),i(Me,[2,8]),i(Ct,[2,38]),i(X,[2,82])],defaultActions:{2:[2,1],3:[2,2],4:[2,3],75:[2,31],98:[2,10],101:[2,4],111:[2,43],122:[2,34]},parseError:function($t,re){if(re.recoverable)this.trace($t);else{var ie=new Error($t);throw ie.hash=re,ie}},parse:function($t){var re=this,ie=[0],Oe=[],oe=[null],Ne=[],me=this.table,cn="",li=0,ya=0,da=2,Oo=1,ds=Ne.slice.call(arguments,1),Dr=Object.create(this.lexer),nr={yy:{}};for(var di in this.yy)Object.prototype.hasOwnProperty.call(this.yy,di)&&(nr.yy[di]=this.yy[di]);Dr.setInput($t,nr.yy),nr.yy.lexer=Dr,nr.yy.parser=this,typeof Dr.yylloc>"u"&&(Dr.yylloc={});var Ee=Dr.yylloc;Ne.push(Ee);var Yn=Dr.options&&Dr.options.ranges;typeof nr.yy.parseError=="function"?this.parseError=nr.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function He(){var Lu;return Lu=Oe.pop()||Dr.lex()||Oo,typeof Lu!="number"&&(Lu instanceof Array&&(Oe=Lu,Lu=Oe.pop()),Lu=re.symbols_[Lu]||Lu),Lu}for(var Ti,gn,ks,qa,La={},Gs,No,vs,nu;;){if(gn=ie[ie.length-1],this.defaultActions[gn]?ks=this.defaultActions[gn]:((Ti===null||typeof Ti>"u")&&(Ti=He()),ks=me[gn]&&me[gn][Ti]),typeof ks>"u"||!ks.length||!ks[0]){var $s="";nu=[];for(Gs in me[gn])this.terminals_[Gs]&&Gs>da&&nu.push("'"+this.terminals_[Gs]+"'");Dr.showPosition?$s="Parse error on line "+(li+1)+`:
`+Dr.showPosition()+`
Expecting `+nu.join(", ")+", got '"+(this.terminals_[Ti]||Ti)+"'":$s="Parse error on line "+(li+1)+": Unexpected "+(Ti==Oo?"end of input":"'"+(this.terminals_[Ti]||Ti)+"'"),this.parseError($s,{text:Dr.match,token:this.terminals_[Ti]||Ti,line:Dr.yylineno,loc:Ee,expected:nu})}if(ks[0]instanceof Array&&ks.length>1)throw new Error("Parse Error: multiple actions possible at state: "+gn+", token: "+Ti);switch(ks[0]){case 1:ie.push(Ti),oe.push(Dr.yytext),Ne.push(Dr.yylloc),ie.push(ks[1]),Ti=null,ya=Dr.yyleng,cn=Dr.yytext,li=Dr.yylineno,Ee=Dr.yylloc;break;case 2:if(No=this.productions_[ks[1]][1],La.$=oe[oe.length-No],La._$={first_line:Ne[Ne.length-(No||1)].first_line,last_line:Ne[Ne.length-1].last_line,first_column:Ne[Ne.length-(No||1)].first_column,last_column:Ne[Ne.length-1].last_column},Yn&&(La._$.range=[Ne[Ne.length-(No||1)].range[0],Ne[Ne.length-1].range[1]]),qa=this.performAction.apply(La,[cn,ya,li,nr.yy,ks[1],oe,Ne].concat(ds)),typeof qa<"u")return qa;No&&(ie=ie.slice(0,-1*No*2),oe=oe.slice(0,-1*No),Ne=Ne.slice(0,-1*No)),ie.push(this.productions_[ks[1]][0]),oe.push(La.$),Ne.push(La._$),vs=me[ie[ie.length-2]][ie[ie.length-1]],ie.push(vs);break;case 3:return!0}}return!0}},Ke=function(){var _e={EOF:1,parseError:function(re,ie){if(this.yy.parser)this.yy.parser.parseError(re,ie);else throw new Error(re)},setInput:function($t,re){return this.yy=re||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},input:function(){var $t=this._input[0];this.yytext+=$t,this.yyleng++,this.offset++,this.match+=$t,this.matched+=$t;var re=$t.match(/(?:\r\n?|\n).*/g);return re?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),$t},unput:function($t){var re=$t.length,ie=$t.split(/(?:\r\n?|\n)/g);this._input=$t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-re),this.offset-=re;var Oe=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),ie.length-1&&(this.yylineno-=ie.length-1);var oe=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:ie?(ie.length===Oe.length?this.yylloc.first_column:0)+Oe[Oe.length-ie.length].length-ie[0].length:this.yylloc.first_column-re},this.options.ranges&&(this.yylloc.range=[oe[0],oe[0]+this.yyleng-re]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject: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},less:function($t){this.unput(this.match.slice($t))},pastInput:function(){var $t=this.matched.substr(0,this.matched.length-this.match.length);return($t.length>20?"...":"")+$t.substr(-20).replace(/\n/g,"")},upcomingInput: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,"")},showPosition:function(){var $t=this.pastInput(),re=new Array($t.length+1).join("-");return $t+this.upcomingInput()+`
`+re+"^"},test_match:function($t,re){var ie,Oe,oe;if(this.options.backtrack_lexer&&(oe={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&&(oe.yylloc.range=this.yylloc.range.slice(0))),Oe=$t[0].match(/(?:\r\n?|\n).*/g),Oe&&(this.yylineno+=Oe.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:Oe?Oe[Oe.length-1].length-Oe[Oe.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],ie=this.performAction.call(this,this.yy,this,re,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),ie)return ie;if(this._backtrack){for(var Ne in oe)this[Ne]=oe[Ne];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var $t,re,ie,Oe;this._more||(this.yytext="",this.match="");for(var oe=this._currentRules(),Ne=0;Ne<oe.length;Ne++)if(ie=this._input.match(this.rules[oe[Ne]]),ie&&(!re||ie[0].length>re[0].length)){if(re=ie,Oe=Ne,this.options.backtrack_lexer){if($t=this.test_match(ie,oe[Ne]),$t!==!1)return $t;if(this._backtrack){re=!1;continue}else return!1}else if(!this.options.flex)break}return re?($t=this.test_match(re,oe[Oe]),$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})},lex:function(){var re=this.next();return re||this.lex()},begin:function(re){this.conditionStack.push(re)},popState:function(){var re=this.conditionStack.length-1;return re>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(re){return re=this.conditionStack.length-1-Math.abs(re||0),re>=0?this.conditionStack[re]:"INITIAL"},pushState:function(re){this.begin(re)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(re,ie,Oe,oe){switch(Oe){case 0:return 52;case 1:return 53;case 2:return 54;case 3:return 55;case 4:break;case 5:break;case 6:return this.begin("acc_title"),30;case 7:return this.popState(),"acc_title_value";case 8:return this.begin("acc_descr"),32;case 9:return this.popState(),"acc_descr_value";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 69;case 22:this.popState();break;case 23:return 70;case 24:this.popState();break;case 25:return"STR";case 26:this.begin("string");break;case 27:return this.begin("namespace"),39;case 28:return this.popState(),8;case 29:break;case 30:return this.begin("namespace-body"),36;case 31:return this.popState(),38;case 32:return"EOF_IN_STRUCT";case 33:return 8;case 34:break;case 35:return"EDGE_STATE";case 36:return this.begin("class"),43;case 37:return this.popState(),8;case 38:break;case 39:return this.popState(),this.popState(),38;case 40:return this.begin("class-body"),36;case 41:return this.popState(),38;case 42:return"EOF_IN_STRUCT";case 43:return"EDGE_STATE";case 44:return"OPEN_IN_STRUCT";case 45:break;case 46:return"MEMBER";case 47:return 72;case 48:return 65;case 49:return 66;case 50:return 68;case 51:return 49;case 52:return 51;case 53:return 44;case 54:return 45;case 55:return 71;case 56:this.popState();break;case 57:return"GENERICTYPE";case 58:this.begin("generic");break;case 59:this.popState();break;case 60:return"BQUOTE_STR";case 61:this.begin("bqstring");break;case 62:return 67;case 63:return 67;case 64:return 67;case 65:return 67;case 66:return 59;case 67:return 59;case 68:return 61;case 69:return 61;case 70:return 60;case 71:return 58;case 72:return 62;case 73:return 63;case 74:return 64;case 75:return 21;case 76:return 41;case 77:return 84;case 78:return"DOT";case 79:return"PLUS";case 80:return 81;case 81:return"EQUALS";case 82:return"EQUALS";case 83:return 88;case 84:return 12;case 85:return 14;case 86:return"PUNCTUATION";case 87:return 87;case 88:return 86;case 89:return 83;case 90:return 9}},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]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:["])/,/^(?:[^"]*)/,/^(?:["])/,/^(?: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)/,/^(?:$)/],conditions:{"namespace-body":{rules:[26,31,32,33,34,35,36,47,48,49,50,51,52,53,54,55,58,61,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],inclusive:!1},namespace:{rules:[26,27,28,29,30,47,48,49,50,51,52,53,54,55,58,61,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],inclusive:!1},"class-body":{rules:[26,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,58,61,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],inclusive:!1},class:{rules:[26,37,38,39,40,47,48,49,50,51,52,53,54,55,58,61,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],inclusive:!1},acc_descr_multiline:{rules:[11,12,26,47,48,49,50,51,52,53,54,55,58,61,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],inclusive:!1},acc_descr:{rules:[9,26,47,48,49,50,51,52,53,54,55,58,61,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],inclusive:!1},acc_title:{rules:[7,26,47,48,49,50,51,52,53,54,55,58,61,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],inclusive:!1},callback_args:{rules:[22,23,26,47,48,49,50,51,52,53,54,55,58,61,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],inclusive:!1},callback_name:{rules:[19,20,21,26,47,48,49,50,51,52,53,54,55,58,61,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],inclusive:!1},href:{rules:[26,47,48,49,50,51,52,53,54,55,58,61,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],inclusive:!1},struct:{rules:[26,47,48,49,50,51,52,53,54,55,58,61,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],inclusive:!1},generic:{rules:[26,47,48,49,50,51,52,53,54,55,56,57,58,61,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],inclusive:!1},bqstring:{rules:[26,47,48,49,50,51,52,53,54,55,58,59,60,61,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],inclusive:!1},string:{rules:[24,25,26,47,48,49,50,51,52,53,54,55,58,61,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],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,8,10,13,14,15,16,17,18,26,27,36,47,48,49,50,51,52,53,54,55,58,61,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],inclusive:!0}}};return _e}();Ge.lexer=Ke;function we(){this.yy={}}return we.prototype=Ge,Ge.Parser=we,new we}();pgt.parser=pgt;const _Rt=pgt,SRt=["#","+","~","-",""];class ARt{constructor(a,f){this.memberType=f,this.visibility="",this.classifier="";const p=Dd(a,Le());this.parseMember(p)}getDisplayDetails(){let a=this.visibility+zN(this.id);this.memberType==="method"&&(a+=`(${zN(this.parameters.trim())})`,this.returnType&&(a+=" : "+zN(this.returnType))),a=a.trim();const f=this.parseClassifier();return{displayText:a,cssStyle:f}}parseMember(a){let f="";if(this.memberType==="method"){const p=/([#+~-])?(.+)\((.*)\)([\s$*])?(.*)([$*])?/,v=a.match(p);if(v){const m=v[1]?v[1].trim():"";if(SRt.includes(m)&&(this.visibility=m),this.id=v[2].trim(),this.parameters=v[3]?v[3].trim():"",f=v[4]?v[4].trim():"",this.returnType=v[5]?v[5].trim():"",f===""){const b=this.returnType.substring(this.returnType.length-1);b.match(/[$*]/)&&(f=b,this.returnType=this.returnType.substring(0,this.returnType.length-1))}}}else{const p=a.length,v=a.substring(0,1),m=a.substring(p-1);SRt.includes(v)&&(this.visibility=v),m.match(/[*?]/)&&(f=m),this.id=a.substring(this.visibility===""?0:1,f===""?p:p-1)}this.classifier=f}parseClassifier(){switch(this.classifier){case"*":return"font-style:italic;";case"$":return"text-decoration:underline;";default:return""}}}const LK="classId-";let bgt=[],Ql={},MK=[],LRt=0,dk={},vgt=0,FP=[];const CT=i=>Yr.sanitizeText(i,Le()),fL=function(i){const a=Yr.sanitizeText(i,Le());let f="",p=a;if(a.indexOf("~")>0){const v=a.split("~");p=CT(v[0]),f=CT(v[1])}return{className:p,type:f}},aGe=function(i,a){const f=Yr.sanitizeText(i,Le());a&&(a=CT(a));const{className:p}=fL(f);Ql[p].label=a},IK=function(i){const a=Yr.sanitizeText(i,Le()),{className:f,type:p}=fL(a);if(Object.hasOwn(Ql,f))return;const v=Yr.sanitizeText(f,Le());Ql[v]={id:v,type:p,label:v,cssClasses:[],methods:[],members:[],annotations:[],domId:LK+v+"-"+LRt},LRt++},MRt=function(i){const a=Yr.sanitizeText(i,Le());if(a in Ql)return Ql[a].domId;throw new Error("Class not found: "+a)},oGe=function(){bgt=[],Ql={},MK=[],FP=[],FP.push(DRt),dk={},vgt=0,ap()},cGe=function(i){return Ql[i]},uGe=function(){return Ql},lGe=function(){return bgt},hGe=function(){return MK},fGe=function(i){Ut.debug("Adding relation: "+JSON.stringify(i)),IK(i.id1),IK(i.id2),i.id1=fL(i.id1).className,i.id2=fL(i.id2).className,i.relationTitle1=Yr.sanitizeText(i.relationTitle1.trim(),Le()),i.relationTitle2=Yr.sanitizeText(i.relationTitle2.trim(),Le()),bgt.push(i)},dGe=function(i,a){const f=fL(i).className;Ql[f].annotations.push(a)},IRt=function(i,a){IK(i);const f=fL(i).className,p=Ql[f];if(typeof a=="string"){const v=a.trim();v.startsWith("<<")&&v.endsWith(">>")?p.annotations.push(CT(v.substring(2,v.length-2))):v.indexOf(")")>0?p.methods.push(new ARt(v,"method")):v&&p.members.push(new ARt(v,"attribute"))}},gGe=function(i,a){Array.isArray(a)&&(a.reverse(),a.forEach(f=>IRt(i,f)))},pGe=function(i,a){const f={id:`note${MK.length}`,class:a,text:i};MK.push(f)},bGe=function(i){return i.startsWith(":")&&(i=i.substring(1)),CT(i.trim())},wgt=function(i,a){i.split(",").forEach(function(f){let p=f;f[0].match(/\d/)&&(p=LK+p),Ql[p]!==void 0&&Ql[p].cssClasses.push(a)})},vGe=function(i,a){i.split(",").forEach(function(f){a!==void 0&&(Ql[f].tooltip=CT(a))})},wGe=function(i,a){return a?dk[a].classes[i].tooltip:Ql[i].tooltip},mGe=function(i,a,f){const p=Le();i.split(",").forEach(function(v){let m=v;v[0].match(/\d/)&&(m=LK+m),Ql[m]!==void 0&&(Ql[m].link=$a.formatUrl(a,p),p.securityLevel==="sandbox"?Ql[m].linkTarget="_top":typeof f=="string"?Ql[m].linkTarget=CT(f):Ql[m].linkTarget="_blank")}),wgt(i,"clickable")},yGe=function(i,a,f){i.split(",").forEach(function(p){xGe(p,a,f),Ql[p].haveCallback=!0}),wgt(i,"clickable")},xGe=function(i,a,f){const p=Yr.sanitizeText(i,Le());if(Le().securityLevel!=="loose"||a===void 0)return;const m=p;if(Ql[m]!==void 0){const b=MRt(m);let E=[];if(typeof f=="string"){E=f.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let _=0;_<E.length;_++){let L=E[_].trim();L.charAt(0)==='"'&&L.charAt(L.length-1)==='"'&&(L=L.substr(1,L.length-2)),E[_]=L}}E.length===0&&E.push(b),FP.push(function(){const _=document.querySelector(`[id="${b}"]`);_!==null&&_.addEventListener("click",function(){$a.runFunc(a,...E)},!1)})}},kGe=function(i){FP.forEach(function(a){a(i)})},EGe={LINE:0,DOTTED_LINE:1},TGe={AGGREGATION:0,EXTENSION:1,COMPOSITION:2,DEPENDENCY:3,LOLLIPOP:4},DRt=function(i){let a=yr(".mermaidTooltip");(a._groups||a)[0][0]===null&&(a=yr("body").append("div").attr("class","mermaidTooltip").style("opacity",0)),yr(i).select("svg").selectAll("g.node").on("mouseover",function(){const v=yr(this);if(v.attr("title")===null)return;const b=this.getBoundingClientRect();a.transition().duration(200).style("opacity",".9"),a.text(v.attr("title")).style("left",window.scrollX+b.left+(b.right-b.left)/2+"px").style("top",window.scrollY+b.top-14+document.body.scrollTop+"px"),a.html(a.html().replace(/&lt;br\/&gt;/g,"<br/>")),v.classed("hover",!0)}).on("mouseout",function(){a.transition().duration(500).style("opacity",0),yr(this).classed("hover",!1)})};FP.push(DRt);let ORt="TB";const DK={setAccTitle:cg,getAccTitle:op,getAccDescription:up,setAccDescription:cp,getConfig:()=>Le().class,addClass:IK,bindFunctions:kGe,clear:oGe,getClass:cGe,getClasses:uGe,getNotes:hGe,addAnnotation:dGe,addNote:pGe,getRelations:lGe,addRelation:fGe,getDirection:()=>ORt,setDirection:i=>{ORt=i},addMember:IRt,addMembers:gGe,cleanupLabel:bGe,lineType:EGe,relationType:TGe,setClickEvent:yGe,setCssClass:wgt,setLink:mGe,getTooltip:wGe,setTooltip:vGe,lookUpDomId:MRt,setDiagramTitle:Z2,getDiagramTitle:Db,setClassLabel:aGe,addNamespace:function(i){dk[i]===void 0&&(dk[i]={id:i,classes:{},children:{},domId:LK+i+"-"+vgt},vgt++)},addClassesToNamespace:function(i,a){dk[i]!==void 0&&a.map(f=>{Ql[f].parent=i,dk[i].classes[f]=Ql[f]})},getNamespace:function(i){return dk[i]},getNamespaces:function(){return dk}},NRt=i=>`g.classGroup text {
  fill: ${i.nodeBorder};
  fill: ${i.classText};
  stroke: none;
  font-family: ${i.fontFamily};
  font-size: 10px;

  .title {
    font-weight: bolder;
  }

}

.nodeLabel, .edgeLabel {
  color: ${i.classText};
}
.edgeLabel .label rect {
  fill: ${i.mainBkg};
}
.label text {
  fill: ${i.classText};
}
.edgeLabel .label span {
  background: ${i.mainBkg};
}

.classTitle {
  font-weight: bolder;
}
.node rect,
  .node circle,
  .node ellipse,
  .node polygon,
  .node path {
    fill: ${i.mainBkg};
    stroke: ${i.nodeBorder};
    stroke-width: 1px;
  }


.divider {
  stroke: ${i.nodeBorder};
  stroke-width: 1;
}

g.clickable {
  cursor: pointer;
}

g.classGroup rect {
  fill: ${i.mainBkg};
  stroke: ${i.nodeBorder};
}

g.classGroup line {
  stroke: ${i.nodeBorder};
  stroke-width: 1;
}

.classLabel .box {
  stroke: none;
  stroke-width: 0;
  fill: ${i.mainBkg};
  opacity: 0.5;
}

.classLabel .label {
  fill: ${i.nodeBorder};
  font-size: 10px;
}

.relation {
  stroke: ${i.lineColor};
  stroke-width: 1;
  fill: none;
}

.dashed-line{
  stroke-dasharray: 3;
}

.dotted-line{
  stroke-dasharray: 1 2;
}

#compositionStart, .composition {
  fill: ${i.lineColor} !important;
  stroke: ${i.lineColor} !important;
  stroke-width: 1;
}

#compositionEnd, .composition {
  fill: ${i.lineColor} !important;
  stroke: ${i.lineColor} !important;
  stroke-width: 1;
}

#dependencyStart, .dependency {
  fill: ${i.lineColor} !important;
  stroke: ${i.lineColor} !important;
  stroke-width: 1;
}

#dependencyStart, .dependency {
  fill: ${i.lineColor} !important;
  stroke: ${i.lineColor} !important;
  stroke-width: 1;
}

#extensionStart, .extension {
  fill: transparent !important;
  stroke: ${i.lineColor} !important;
  stroke-width: 1;
}

#extensionEnd, .extension {
  fill: transparent !important;
  stroke: ${i.lineColor} !important;
  stroke-width: 1;
}

#aggregationStart, .aggregation {
  fill: transparent !important;
  stroke: ${i.lineColor} !important;
  stroke-width: 1;
}

#aggregationEnd, .aggregation {
  fill: transparent !important;
  stroke: ${i.lineColor} !important;
  stroke-width: 1;
}

#lollipopStart, .lollipop {
  fill: ${i.mainBkg} !important;
  stroke: ${i.lineColor} !important;
  stroke-width: 1;
}

#lollipopEnd, .lollipop {
  fill: ${i.mainBkg} !important;
  stroke: ${i.lineColor} !important;
  stroke-width: 1;
}

.edgeTerminals {
  font-size: 11px;
}

.classTitleText {
  text-anchor: middle;
  font-size: 18px;
  fill: ${i.textColor};
}
`;let PRt=0;const CGe=function(i,a,f,p,v){const m=function(ut){switch(ut){case v.db.relationType.AGGREGATION:return"aggregation";case v.db.relationType.EXTENSION:return"extension";case v.db.relationType.COMPOSITION:return"composition";case v.db.relationType.DEPENDENCY:return"dependency";case v.db.relationType.LOLLIPOP:return"lollipop"}};a.points=a.points.filter(ut=>!Number.isNaN(ut.y));const b=a.points,E=Z7().x(function(ut){return ut.x}).y(function(ut){return ut.y}).curve(FN),_=i.append("path").attr("d",E(b)).attr("id","edge"+PRt).attr("class","relation");let L="";p.arrowMarkerAbsolute&&(L=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,L=L.replace(/\(/g,"\\("),L=L.replace(/\)/g,"\\)")),f.relation.lineType==1&&_.attr("class","relation dashed-line"),f.relation.lineType==10&&_.attr("class","relation dotted-line"),f.relation.type1!=="none"&&_.attr("marker-start","url("+L+"#"+m(f.relation.type1)+"Start)"),f.relation.type2!=="none"&&_.attr("marker-end","url("+L+"#"+m(f.relation.type2)+"End)");let N,B;const j=a.points.length;let R=$a.calcLabelPosition(a.points);N=R.x,B=R.y;let z,K,it,st;if(j%2!==0&&j>1){let ut=$a.calcCardinalityPosition(f.relation.type1!=="none",a.points,a.points[0]),bt=$a.calcCardinalityPosition(f.relation.type2!=="none",a.points,a.points[j-1]);Ut.debug("cardinality_1_point "+JSON.stringify(ut)),Ut.debug("cardinality_2_point "+JSON.stringify(bt)),z=ut.x,K=ut.y,it=bt.x,st=bt.y}if(f.title!==void 0){const ut=i.append("g").attr("class","classLabel"),bt=ut.append("text").attr("class","label").attr("x",N).attr("y",B).attr("fill","red").attr("text-anchor","middle").text(f.title);window.label=bt;const mt=bt.node().getBBox();ut.insert("rect",":first-child").attr("class","box").attr("x",mt.x-p.padding/2).attr("y",mt.y-p.padding/2).attr("width",mt.width+p.padding).attr("height",mt.height+p.padding)}Ut.info("Rendering relation "+JSON.stringify(f)),f.relationTitle1!==void 0&&f.relationTitle1!=="none"&&i.append("g").attr("class","cardinality").append("text").attr("class","type1").attr("x",z).attr("y",K).attr("fill","black").attr("font-size","6").text(f.relationTitle1),f.relationTitle2!==void 0&&f.relationTitle2!=="none"&&i.append("g").attr("class","cardinality").append("text").attr("class","type2").attr("x",it).attr("y",st).attr("fill","black").attr("font-size","6").text(f.relationTitle2),PRt++},_Ge=function(i,a,f,p){Ut.debug("Rendering class ",a,f);const v=a.id,m={id:v,label:a.id,width:0,height:0},b=i.append("g").attr("id",p.db.lookUpDomId(v)).attr("class","classGroup");let E;a.link?E=b.append("svg:a").attr("xlink:href",a.link).attr("target",a.linkTarget).append("text").attr("y",f.textHeight+f.padding).attr("x",0):E=b.append("text").attr("y",f.textHeight+f.padding).attr("x",0);let _=!0;a.annotations.forEach(function(bt){const mt=E.append("tspan").text("«"+bt+"»");_||mt.attr("dy",f.textHeight),_=!1});let L=FRt(a);const N=E.append("tspan").text(L).attr("class","title");_||N.attr("dy",f.textHeight);const B=E.node().getBBox().height;let j,R,z;if(a.members.length>0){j=b.append("line").attr("x1",0).attr("y1",f.padding+B+f.dividerMargin/2).attr("y2",f.padding+B+f.dividerMargin/2);const bt=b.append("text").attr("x",f.padding).attr("y",B+f.dividerMargin+f.textHeight).attr("fill","white").attr("class","classText");_=!0,a.members.forEach(function(mt){BRt(bt,mt,_,f),_=!1}),R=bt.node().getBBox()}if(a.methods.length>0){z=b.append("line").attr("x1",0).attr("y1",f.padding+B+f.dividerMargin+R.height).attr("y2",f.padding+B+f.dividerMargin+R.height);const bt=b.append("text").attr("x",f.padding).attr("y",B+2*f.dividerMargin+R.height+f.textHeight).attr("fill","white").attr("class","classText");_=!0,a.methods.forEach(function(mt){BRt(bt,mt,_,f),_=!1})}const K=b.node().getBBox();var it=" ";a.cssClasses.length>0&&(it=it+a.cssClasses.join(" "));const ut=b.insert("rect",":first-child").attr("x",0).attr("y",0).attr("width",K.width+2*f.padding).attr("height",K.height+f.padding+.5*f.dividerMargin).attr("class",it).node().getBBox().width;return E.node().childNodes.forEach(function(bt){bt.setAttribute("x",(ut-bt.getBBox().width)/2)}),a.tooltip&&E.insert("title").text(a.tooltip),j&&j.attr("x2",ut),z&&z.attr("x2",ut),m.width=ut,m.height=K.height+f.padding+.5*f.dividerMargin,m},FRt=function(i){let a=i.id;return i.type&&(a+="<"+zN(i.type)+">"),a},SGe=function(i,a,f,p){Ut.debug("Rendering note ",a,f);const v=a.id,m={id:v,text:a.text,width:0,height:0},b=i.append("g").attr("id",v).attr("class","classGroup");let E=b.append("text").attr("y",f.textHeight+f.padding).attr("x",0);const _=JSON.parse(`"${a.text}"`).split(`
`);_.forEach(function(j){Ut.debug(`Adding line: ${j}`),E.append("tspan").text(j).attr("class","title").attr("dy",f.textHeight)});const L=b.node().getBBox(),B=b.insert("rect",":first-child").attr("x",0).attr("y",0).attr("width",L.width+2*f.padding).attr("height",L.height+_.length*f.textHeight+f.padding+.5*f.dividerMargin).node().getBBox().width;return E.node().childNodes.forEach(function(j){j.setAttribute("x",(B-j.getBBox().width)/2)}),m.width=B,m.height=L.height+_.length*f.textHeight+f.padding+.5*f.dividerMargin,m},BRt=function(i,a,f,p){const{displayText:v,cssStyle:m}=a.getDisplayDetails(),b=i.append("tspan").attr("x",p.padding).text(v);m!==""&&b.attr("style",a.cssStyle),f||b.attr("dy",p.textHeight)},mgt={getClassTitleString:FRt,drawClass:_Ge,drawEdge:CGe,drawNote:SGe};let OK={};const NK=20,BP=function(i){const a=Object.entries(OK).find(f=>f[1].label===i);if(a)return a[0]},AGe=function(i){i.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"),i.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"),i.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"),i.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"),i.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"),i.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"),i.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"),i.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")},LGe=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:_Rt,db:DK,renderer:{draw:function(i,a,f,p){const v=Le().class;OK={},Ut.info("Rendering diagram "+i);const m=Le().securityLevel;let b;m==="sandbox"&&(b=yr("#i"+a));const E=yr(m==="sandbox"?b.nodes()[0].contentDocument.body:"body"),_=E.select(`[id='${a}']`);AGe(_);const L=new a1({multigraph:!0});L.setGraph({isMultiGraph:!0}),L.setDefaultEdgeLabel(function(){return{}});const N=p.db.getClasses(),B=Object.keys(N);for(const ut of B){const bt=N[ut],mt=mgt.drawClass(_,bt,v,p);OK[mt.id]=mt,L.setNode(mt.id,mt),Ut.info("Org height: "+mt.height)}p.db.getRelations().forEach(function(ut){Ut.info("tjoho"+BP(ut.id1)+BP(ut.id2)+JSON.stringify(ut)),L.setEdge(BP(ut.id1),BP(ut.id2),{relation:ut},ut.title||"DEFAULT")}),p.db.getNotes().forEach(function(ut){Ut.debug(`Adding note: ${JSON.stringify(ut)}`);const bt=mgt.drawNote(_,ut,v,p);OK[bt.id]=bt,L.setNode(bt.id,bt),ut.class&&ut.class in N&&L.setEdge(ut.id,BP(ut.class),{relation:{id1:ut.id,id2:ut.class,relation:{type1:"none",type2:"none",lineType:10}}},"DEFAULT")}),eL(L),L.nodes().forEach(function(ut){ut!==void 0&&L.node(ut)!==void 0&&(Ut.debug("Node "+ut+": "+JSON.stringify(L.node(ut))),E.select("#"+(p.db.lookUpDomId(ut)||ut)).attr("transform","translate("+(L.node(ut).x-L.node(ut).width/2)+","+(L.node(ut).y-L.node(ut).height/2)+" )"))}),L.edges().forEach(function(ut){ut!==void 0&&L.edge(ut)!==void 0&&(Ut.debug("Edge "+ut.v+" -> "+ut.w+": "+JSON.stringify(L.edge(ut))),mgt.drawEdge(_,L.edge(ut),L.edge(ut).relation,v,p))});const z=_.node().getBBox(),K=z.width+NK*2,it=z.height+NK*2;og(_,it,K,v.useMaxWidth);const st=`${z.x-NK} ${z.y-NK} ${K} ${it}`;Ut.debug(`viewBox ${st}`),_.attr("viewBox",st)}},styles:NRt,init:i=>{i.class||(i.class={}),i.class.arrowMarkerAbsolute=i.arrowMarkerAbsolute,DK.clear()}}},Symbol.toStringTag,{value:"Module"})),ygt=i=>Yr.sanitizeText(i,Le());let xgt={dividerMargin:10,padding:5,textHeight:10,curve:void 0};const MGe=function(i,a,f,p){const v=Object.keys(i);Ut.info("keys:",v),Ut.info(i),v.forEach(function(m){var L,N;const b=i[m],_={shape:"rect",id:b.id,domId:b.domId,labelText:ygt(b.id),labelStyle:"",style:"fill: none; stroke: black",padding:((L=Le().flowchart)==null?void 0:L.padding)??((N=Le().class)==null?void 0:N.padding)};a.setNode(b.id,_),RRt(b.classes,a,f,p,b.id),Ut.info("setNode",_)})},RRt=function(i,a,f,p,v){const m=Object.keys(i);Ut.info("keys:",m),Ut.info(i),m.filter(b=>i[b].parent==v).forEach(function(b){var z,K;const E=i[b],_=E.cssClasses.join(" "),L={labelStyle:"",style:""},N=E.label??E.id,B=0,j="class_box",R={labelStyle:L.labelStyle,shape:j,labelText:ygt(N),classData:E,rx:B,ry:B,class:_,style:L.style,id:E.id,domId:E.domId,tooltip:p.db.getTooltip(E.id,v)||"",haveCallback:E.haveCallback,link:E.link,width:E.type==="group"?500:void 0,type:E.type,padding:((z=Le().flowchart)==null?void 0:z.padding)??((K=Le().class)==null?void 0:K.padding)};a.setNode(E.id,R),v&&a.setParent(E.id,v),Ut.info("setNode",R)})},IGe=function(i,a,f,p){Ut.info(i),i.forEach(function(v,m){var K,it;const b=v,E="",_={labelStyle:"",style:""},L=b.text,N=0,B="note",j={labelStyle:_.labelStyle,shape:B,labelText:ygt(L),noteData:b,rx:N,ry:N,class:E,style:_.style,id:b.id,domId:b.id,tooltip:"",type:"note",padding:((K=Le().flowchart)==null?void 0:K.padding)??((it=Le().class)==null?void 0:it.padding)};if(a.setNode(b.id,j),Ut.info("setNode",j),!b.class||!(b.class in p))return;const R=f+m,z={id:`edgeNote${R}`,classes:"relation",pattern:"dotted",arrowhead:"none",startLabelRight:"",endLabelLeft:"",arrowTypeStart:"none",arrowTypeEnd:"none",style:"fill:none",labelStyle:"",curve:X2(xgt.curve,ig)};a.setEdge(b.id,b.class,z,R)})},DGe=function(i,a){const f=Le().flowchart;let p=0;i.forEach(function(v){var b;p++;const m={classes:"relation",pattern:v.relation.lineType==1?"dashed":"solid",id:"id"+p,arrowhead:v.type==="arrow_open"?"none":"normal",startLabelRight:v.relationTitle1==="none"?"":v.relationTitle1,endLabelLeft:v.relationTitle2==="none"?"":v.relationTitle2,arrowTypeStart:jRt(v.relation.type1),arrowTypeEnd:jRt(v.relation.type2),style:"fill:none",labelStyle:"",curve:X2(f==null?void 0:f.curve,ig)};if(Ut.info(m,v),v.style!==void 0){const E=em(v.style);m.style=E.style,m.labelStyle=E.labelStyle}v.text=v.title,v.text===void 0?v.style!==void 0&&(m.arrowheadStyle="fill: #333"):(m.arrowheadStyle="fill: #333",m.labelpos="c",((b=Le().flowchart)==null?void 0:b.htmlLabels)??Le().htmlLabels?(m.labelType="html",m.label='<span class="edgeLabel">'+v.text+"</span>"):(m.labelType="text",m.label=v.text.replace(Yr.lineBreakRegex,`
`),v.style===void 0&&(m.style=m.style||"stroke: #333; stroke-width: 1.5px;fill:none"),m.labelStyle=m.labelStyle.replace("color:","fill:"))),a.setEdge(v.id1,v.id2,m,p)})},OGe=function(i){xgt={...xgt,...i}},NGe=async function(i,a,f,p){Ut.info("Drawing class - ",a);const v=Le().flowchart??Le().class,m=Le().securityLevel;Ut.info("config:",v);const b=(v==null?void 0:v.nodeSpacing)??50,E=(v==null?void 0:v.rankSpacing)??50,_=new a1({multigraph:!0,compound:!0}).setGraph({rankdir:p.db.getDirection(),nodesep:b,ranksep:E,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}}),L=p.db.getNamespaces(),N=p.db.getClasses(),B=p.db.getRelations(),j=p.db.getNotes();Ut.info(B),MGe(L,_,a,p),RRt(N,_,a,p),DGe(B,_),IGe(j,_,B.length+1,N);let R;m==="sandbox"&&(R=yr("#i"+a));const z=yr(m==="sandbox"?R.nodes()[0].contentDocument.body:"body"),K=z.select(`[id="${a}"]`),it=z.select("#"+a+" g");if(await I0t(it,_,["aggregation","extension","composition","dependency","lollipop"],"classDiagram",a),$a.insertTitle(K,"classTitleText",(v==null?void 0:v.titleTopMargin)??5,p.db.getDiagramTitle()),cT(_,K,v==null?void 0:v.diagramPadding,v==null?void 0:v.useMaxWidth),!(v!=null&&v.htmlLabels)){const st=m==="sandbox"?R.nodes()[0].contentDocument:document,ut=st.querySelectorAll('[id="'+a+'"] .edgeLabel .label');for(const bt of ut){const mt=bt.getBBox(),yt=st.createElementNS("http://www.w3.org/2000/svg","rect");yt.setAttribute("rx",0),yt.setAttribute("ry",0),yt.setAttribute("width",mt.width),yt.setAttribute("height",mt.height),bt.insertBefore(yt,bt.firstChild)}}};function jRt(i){let a;switch(i){case 0:a="aggregation";break;case 1:a="extension";break;case 2:a="composition";break;case 3:a="dependency";break;case 4:a="lollipop";break;default:a="none"}return a}const PGe=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:_Rt,db:DK,renderer:{setConf:OGe,draw:NGe},styles:NRt,init:i=>{i.class||(i.class={}),i.class.arrowMarkerAbsolute=i.arrowMarkerAbsolute,DK.clear()}}},Symbol.toStringTag,{value:"Module"}));var kgt=function(){var i=function(Ct,Z,Tt,Ht){for(Tt=Tt||{},Ht=Ct.length;Ht--;Tt[Ct[Ht]]=Z);return Tt},a=[1,2],f=[1,3],p=[1,4],v=[2,4],m=[1,9],b=[1,11],E=[1,15],_=[1,16],L=[1,17],N=[1,18],B=[1,30],j=[1,19],R=[1,20],z=[1,21],K=[1,22],it=[1,23],st=[1,25],ut=[1,26],bt=[1,27],mt=[1,28],yt=[1,29],dt=[1,32],ht=[1,33],wt=[1,34],X=[1,35],pt=[1,31],U=[1,4,5,15,16,18,20,21,23,24,25,26,27,28,32,34,36,37,41,44,45,46,47,50],xt=[1,4,5,13,14,15,16,18,20,21,23,24,25,26,27,28,32,34,36,37,41,44,45,46,47,50],nt=[4,5,15,16,18,20,21,23,24,25,26,27,28,32,34,36,37,41,44,45,46,47,50],Ot={trace:function(){},yy:{},symbols_:{error:2,start:3,SPACE:4,NL:5,SD:6,document:7,line:8,statement:9,classDefStatement:10,cssClassStatement:11,idStatement:12,DESCR:13,"-->":14,HIDE_EMPTY:15,scale:16,WIDTH:17,COMPOSIT_STATE:18,STRUCT_START:19,STRUCT_STOP:20,STATE_DESCR:21,AS:22,ID:23,FORK:24,JOIN:25,CHOICE:26,CONCURRENT:27,note:28,notePosition:29,NOTE_TEXT:30,direction:31,acc_title:32,acc_title_value:33,acc_descr:34,acc_descr_value:35,acc_descr_multiline_value:36,classDef:37,CLASSDEF_ID:38,CLASSDEF_STYLEOPTS:39,DEFAULT:40,class:41,CLASSENTITY_IDS:42,STYLECLASS:43,direction_tb:44,direction_bt:45,direction_rl:46,direction_lr:47,eol:48,";":49,EDGE_STATE:50,STYLE_SEPARATOR:51,left_of:52,right_of:53,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NL",6:"SD",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",30:"NOTE_TEXT",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:"class",42:"CLASSENTITY_IDS",43:"STYLECLASS",44:"direction_tb",45:"direction_bt",46:"direction_rl",47:"direction_lr",49:";",50:"EDGE_STATE",51:"STYLE_SEPARATOR",52:"left_of",53:"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,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],[31,1],[31,1],[31,1],[31,1],[48,1],[48,1],[12,1],[12,1],[12,3],[12,3],[29,1],[29,1]],performAction:function(Z,Tt,Ht,It,Ft,ke,pn){var Me=ke.length-1;switch(Ft){case 3:return It.setRootDoc(ke[Me]),ke[Me];case 4:this.$=[];break;case 5:ke[Me]!="nl"&&(ke[Me-1].push(ke[Me]),this.$=ke[Me-1]);break;case 6:case 7:this.$=ke[Me];break;case 8:this.$="nl";break;case 11:this.$=ke[Me];break;case 12:const we=ke[Me-1];we.description=It.trimColon(ke[Me]),this.$=we;break;case 13:this.$={stmt:"relation",state1:ke[Me-2],state2:ke[Me]};break;case 14:const _e=It.trimColon(ke[Me]);this.$={stmt:"relation",state1:ke[Me-3],state2:ke[Me-1],description:_e};break;case 18:this.$={stmt:"state",id:ke[Me-3],type:"default",description:"",doc:ke[Me-1]};break;case 19:var ve=ke[Me],Ge=ke[Me-2].trim();if(ke[Me].match(":")){var Ke=ke[Me].split(":");ve=Ke[0],Ge=[Ge,Ke[1]]}this.$={stmt:"state",id:ve,type:"default",description:Ge};break;case 20:this.$={stmt:"state",id:ke[Me-3],type:"default",description:ke[Me-5],doc:ke[Me-1]};break;case 21:this.$={stmt:"state",id:ke[Me],type:"fork"};break;case 22:this.$={stmt:"state",id:ke[Me],type:"join"};break;case 23:this.$={stmt:"state",id:ke[Me],type:"choice"};break;case 24:this.$={stmt:"state",id:It.getDividerId(),type:"divider"};break;case 25:this.$={stmt:"state",id:ke[Me-1].trim(),note:{position:ke[Me-2].trim(),text:ke[Me].trim()}};break;case 28:this.$=ke[Me].trim(),It.setAccTitle(this.$);break;case 29:case 30:this.$=ke[Me].trim(),It.setAccDescription(this.$);break;case 31:case 32:this.$={stmt:"classDef",id:ke[Me-1].trim(),classes:ke[Me].trim()};break;case 33:this.$={stmt:"applyClass",id:ke[Me-1].trim(),styleClass:ke[Me].trim()};break;case 34:It.setDirection("TB"),this.$={stmt:"dir",value:"TB"};break;case 35:It.setDirection("BT"),this.$={stmt:"dir",value:"BT"};break;case 36:It.setDirection("RL"),this.$={stmt:"dir",value:"RL"};break;case 37:It.setDirection("LR"),this.$={stmt:"dir",value:"LR"};break;case 40:case 41:this.$={stmt:"state",id:ke[Me].trim(),type:"default",description:""};break;case 42:this.$={stmt:"state",id:ke[Me-2].trim(),classes:[ke[Me].trim()],type:"default",description:""};break;case 43:this.$={stmt:"state",id:ke[Me-2].trim(),classes:[ke[Me].trim()],type:"default",description:""};break}},table:[{3:1,4:a,5:f,6:p},{1:[3]},{3:5,4:a,5:f,6:p},{3:6,4:a,5:f,6:p},i([1,4,5,15,16,18,21,23,24,25,26,27,28,32,34,36,37,41,44,45,46,47,50],v,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:m,5:b,8:8,9:10,10:12,11:13,12:14,15:E,16:_,18:L,21:N,23:B,24:j,25:R,26:z,27:K,28:it,31:24,32:st,34:ut,36:bt,37:mt,41:yt,44:dt,45:ht,46:wt,47:X,50:pt},i(U,[2,5]),{9:36,10:12,11:13,12:14,15:E,16:_,18:L,21:N,23:B,24:j,25:R,26:z,27:K,28:it,31:24,32:st,34:ut,36:bt,37:mt,41:yt,44:dt,45:ht,46:wt,47:X,50:pt},i(U,[2,7]),i(U,[2,8]),i(U,[2,9]),i(U,[2,10]),i(U,[2,11],{13:[1,37],14:[1,38]}),i(U,[2,15]),{17:[1,39]},i(U,[2,17],{19:[1,40]}),{22:[1,41]},i(U,[2,21]),i(U,[2,22]),i(U,[2,23]),i(U,[2,24]),{29:42,30:[1,43],52:[1,44],53:[1,45]},i(U,[2,27]),{33:[1,46]},{35:[1,47]},i(U,[2,30]),{38:[1,48],40:[1,49]},{42:[1,50]},i(xt,[2,40],{51:[1,51]}),i(xt,[2,41],{51:[1,52]}),i(U,[2,34]),i(U,[2,35]),i(U,[2,36]),i(U,[2,37]),i(U,[2,6]),i(U,[2,12]),{12:53,23:B,50:pt},i(U,[2,16]),i(nt,v,{7:54}),{23:[1,55]},{23:[1,56]},{22:[1,57]},{23:[2,44]},{23:[2,45]},i(U,[2,28]),i(U,[2,29]),{39:[1,58]},{39:[1,59]},{43:[1,60]},{23:[1,61]},{23:[1,62]},i(U,[2,13],{13:[1,63]}),{4:m,5:b,8:8,9:10,10:12,11:13,12:14,15:E,16:_,18:L,20:[1,64],21:N,23:B,24:j,25:R,26:z,27:K,28:it,31:24,32:st,34:ut,36:bt,37:mt,41:yt,44:dt,45:ht,46:wt,47:X,50:pt},i(U,[2,19],{19:[1,65]}),{30:[1,66]},{23:[1,67]},i(U,[2,31]),i(U,[2,32]),i(U,[2,33]),i(xt,[2,42]),i(xt,[2,43]),i(U,[2,14]),i(U,[2,18]),i(nt,v,{7:68}),i(U,[2,25]),i(U,[2,26]),{4:m,5:b,8:8,9:10,10:12,11:13,12:14,15:E,16:_,18:L,20:[1,69],21:N,23:B,24:j,25:R,26:z,27:K,28:it,31:24,32:st,34:ut,36:bt,37:mt,41:yt,44:dt,45:ht,46:wt,47:X,50:pt},i(U,[2,20])],defaultActions:{5:[2,1],6:[2,2],44:[2,44],45:[2,45]},parseError:function(Z,Tt){if(Tt.recoverable)this.trace(Z);else{var Ht=new Error(Z);throw Ht.hash=Tt,Ht}},parse:function(Z){var Tt=this,Ht=[0],It=[],Ft=[null],ke=[],pn=this.table,Me="",ve=0,Ge=0,Ke=2,we=1,_e=ke.slice.call(arguments,1),$t=Object.create(this.lexer),re={yy:{}};for(var ie in this.yy)Object.prototype.hasOwnProperty.call(this.yy,ie)&&(re.yy[ie]=this.yy[ie]);$t.setInput(Z,re.yy),re.yy.lexer=$t,re.yy.parser=this,typeof $t.yylloc>"u"&&($t.yylloc={});var Oe=$t.yylloc;ke.push(Oe);var oe=$t.options&&$t.options.ranges;typeof re.yy.parseError=="function"?this.parseError=re.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Ne(){var Ee;return Ee=It.pop()||$t.lex()||we,typeof Ee!="number"&&(Ee instanceof Array&&(It=Ee,Ee=It.pop()),Ee=Tt.symbols_[Ee]||Ee),Ee}for(var me,cn,li,ya,da={},Oo,ds,Dr,nr;;){if(cn=Ht[Ht.length-1],this.defaultActions[cn]?li=this.defaultActions[cn]:((me===null||typeof me>"u")&&(me=Ne()),li=pn[cn]&&pn[cn][me]),typeof li>"u"||!li.length||!li[0]){var di="";nr=[];for(Oo in pn[cn])this.terminals_[Oo]&&Oo>Ke&&nr.push("'"+this.terminals_[Oo]+"'");$t.showPosition?di="Parse error on line "+(ve+1)+`:
`+$t.showPosition()+`
Expecting `+nr.join(", ")+", got '"+(this.terminals_[me]||me)+"'":di="Parse error on line "+(ve+1)+": Unexpected "+(me==we?"end of input":"'"+(this.terminals_[me]||me)+"'"),this.parseError(di,{text:$t.match,token:this.terminals_[me]||me,line:$t.yylineno,loc:Oe,expected:nr})}if(li[0]instanceof Array&&li.length>1)throw new Error("Parse Error: multiple actions possible at state: "+cn+", token: "+me);switch(li[0]){case 1:Ht.push(me),Ft.push($t.yytext),ke.push($t.yylloc),Ht.push(li[1]),me=null,Ge=$t.yyleng,Me=$t.yytext,ve=$t.yylineno,Oe=$t.yylloc;break;case 2:if(ds=this.productions_[li[1]][1],da.$=Ft[Ft.length-ds],da._$={first_line:ke[ke.length-(ds||1)].first_line,last_line:ke[ke.length-1].last_line,first_column:ke[ke.length-(ds||1)].first_column,last_column:ke[ke.length-1].last_column},oe&&(da._$.range=[ke[ke.length-(ds||1)].range[0],ke[ke.length-1].range[1]]),ya=this.performAction.apply(da,[Me,Ge,ve,re.yy,li[1],Ft,ke].concat(_e)),typeof ya<"u")return ya;ds&&(Ht=Ht.slice(0,-1*ds*2),Ft=Ft.slice(0,-1*ds),ke=ke.slice(0,-1*ds)),Ht.push(this.productions_[li[1]][0]),Ft.push(da.$),ke.push(da._$),Dr=pn[Ht[Ht.length-2]][Ht[Ht.length-1]],Ht.push(Dr);break;case 3:return!0}}return!0}},Nt=function(){var Ct={EOF:1,parseError:function(Tt,Ht){if(this.yy.parser)this.yy.parser.parseError(Tt,Ht);else throw new Error(Tt)},setInput:function(Z,Tt){return this.yy=Tt||this.yy||{},this._input=Z,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},input:function(){var Z=this._input[0];this.yytext+=Z,this.yyleng++,this.offset++,this.match+=Z,this.matched+=Z;var Tt=Z.match(/(?:\r\n?|\n).*/g);return Tt?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),Z},unput:function(Z){var Tt=Z.length,Ht=Z.split(/(?:\r\n?|\n)/g);this._input=Z+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-Tt),this.offset-=Tt;var It=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),Ht.length-1&&(this.yylineno-=Ht.length-1);var Ft=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:Ht?(Ht.length===It.length?this.yylloc.first_column:0)+It[It.length-Ht.length].length-Ht[0].length:this.yylloc.first_column-Tt},this.options.ranges&&(this.yylloc.range=[Ft[0],Ft[0]+this.yyleng-Tt]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject: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},less:function(Z){this.unput(this.match.slice(Z))},pastInput:function(){var Z=this.matched.substr(0,this.matched.length-this.match.length);return(Z.length>20?"...":"")+Z.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var Z=this.match;return Z.length<20&&(Z+=this._input.substr(0,20-Z.length)),(Z.substr(0,20)+(Z.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var Z=this.pastInput(),Tt=new Array(Z.length+1).join("-");return Z+this.upcomingInput()+`
`+Tt+"^"},test_match:function(Z,Tt){var Ht,It,Ft;if(this.options.backtrack_lexer&&(Ft={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&&(Ft.yylloc.range=this.yylloc.range.slice(0))),It=Z[0].match(/(?:\r\n?|\n).*/g),It&&(this.yylineno+=It.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:It?It[It.length-1].length-It[It.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+Z[0].length},this.yytext+=Z[0],this.match+=Z[0],this.matches=Z,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(Z[0].length),this.matched+=Z[0],Ht=this.performAction.call(this,this.yy,this,Tt,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),Ht)return Ht;if(this._backtrack){for(var ke in Ft)this[ke]=Ft[ke];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var Z,Tt,Ht,It;this._more||(this.yytext="",this.match="");for(var Ft=this._currentRules(),ke=0;ke<Ft.length;ke++)if(Ht=this._input.match(this.rules[Ft[ke]]),Ht&&(!Tt||Ht[0].length>Tt[0].length)){if(Tt=Ht,It=ke,this.options.backtrack_lexer){if(Z=this.test_match(Ht,Ft[ke]),Z!==!1)return Z;if(this._backtrack){Tt=!1;continue}else return!1}else if(!this.options.flex)break}return Tt?(Z=this.test_match(Tt,Ft[It]),Z!==!1?Z:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text.
`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var Tt=this.next();return Tt||this.lex()},begin:function(Tt){this.conditionStack.push(Tt)},popState:function(){var Tt=this.conditionStack.length-1;return Tt>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(Tt){return Tt=this.conditionStack.length-1-Math.abs(Tt||0),Tt>=0?this.conditionStack[Tt]:"INITIAL"},pushState:function(Tt){this.begin(Tt)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(Tt,Ht,It,Ft){switch(It){case 0:return 40;case 1:return 44;case 2:return 45;case 3:return 46;case 4:return 47;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"),16;case 13:return 17;case 14:this.popState();break;case 15:return this.begin("acc_title"),32;case 16:return this.popState(),"acc_title_value";case 17:return this.begin("acc_descr"),34;case 18:return this.popState(),"acc_descr_value";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"),37;case 23:return this.popState(),this.pushState("CLASSDEFID"),"DEFAULT_CLASSDEF_ID";case 24:return this.popState(),this.pushState("CLASSDEFID"),38;case 25:return this.popState(),39;case 26:return this.pushState("CLASS"),41;case 27:return this.popState(),this.pushState("CLASS_STYLE"),42;case 28:return this.popState(),43;case 29:return this.pushState("SCALE"),16;case 30:return 17;case 31:this.popState();break;case 32:this.pushState("STATE");break;case 33:return this.popState(),Ht.yytext=Ht.yytext.slice(0,-8).trim(),24;case 34:return this.popState(),Ht.yytext=Ht.yytext.slice(0,-8).trim(),25;case 35:return this.popState(),Ht.yytext=Ht.yytext.slice(0,-10).trim(),26;case 36:return this.popState(),Ht.yytext=Ht.yytext.slice(0,-8).trim(),24;case 37:return this.popState(),Ht.yytext=Ht.yytext.slice(0,-8).trim(),25;case 38:return this.popState(),Ht.yytext=Ht.yytext.slice(0,-10).trim(),26;case 39:return 44;case 40:return 45;case 41:return 46;case 42:return 47;case 43:this.pushState("STATE_STRING");break;case 44:return this.pushState("STATE_ID"),"AS";case 45:return this.popState(),"ID";case 46:this.popState();break;case 47:return"STATE_DESCR";case 48:return 18;case 49:this.popState();break;case 50:return this.popState(),this.pushState("struct"),19;case 51:break;case 52:return this.popState(),20;case 53:break;case 54:return this.begin("NOTE"),28;case 55:return this.popState(),this.pushState("NOTE_ID"),52;case 56:return this.popState(),this.pushState("NOTE_ID"),53;case 57:this.popState(),this.pushState("FLOATING_NOTE");break;case 58:return this.popState(),this.pushState("FLOATING_NOTE_ID"),"AS";case 59:break;case 60:return"NOTE_TEXT";case 61:return this.popState(),"ID";case 62:return this.popState(),this.pushState("NOTE_TEXT"),23;case 63:return this.popState(),Ht.yytext=Ht.yytext.substr(2).trim(),30;case 64:return this.popState(),Ht.yytext=Ht.yytext.slice(0,-8).trim(),30;case 65:return 6;case 66:return 6;case 67:return 15;case 68:return 50;case 69:return 23;case 70:return Ht.yytext=Ht.yytext.trim(),13;case 71:return 14;case 72:return 27;case 73:return 51;case 74:return 5;case 75:return"INVALID"}},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,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:state\s+)/i,/^(?:.*<<fork>>)/i,/^(?:.*<<join>>)/i,/^(?:.*<<choice>>)/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,32,39,40,41,42,51,52,53,54,68,69,70,71,72],inclusive:!1},FLOATING_NOTE_ID:{rules:[61],inclusive:!1},FLOATING_NOTE:{rules:[58,59,60],inclusive:!1},NOTE_TEXT:{rules:[63,64],inclusive:!1},NOTE_ID:{rules:[62],inclusive:!1},NOTE:{rules:[55,56,57],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,30,31],inclusive:!1},ALIAS:{rules:[],inclusive:!1},STATE_ID:{rules:[45],inclusive:!1},STATE_STRING:{rules:[46,47],inclusive:!1},FORK_STATE:{rules:[],inclusive:!1},STATE:{rules:[9,10,33,34,35,36,37,38,43,44,48,49,50],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,50,54,65,66,67,68,69,70,71,73,74,75],inclusive:!0}}};return Ct}();Ot.lexer=Nt;function qt(){this.yy={}}return qt.prototype=Ot,Ot.Parser=qt,new qt}();kgt.parser=kgt;const $Rt=kgt,FGe="LR",BGe="TB",PK="state",Egt="relation",RGe="classDef",jGe="applyClass",RP="default",zRt="divider",Tgt="[*]",qRt="start",HRt=Tgt,GRt="end",VRt="color",URt="fill",$Ge="bgFill",zGe=",";function WRt(){return{}}let KRt=FGe,FK=[],jP=WRt();const YRt=()=>({relations:[],states:{},documents:{}});let BK={root:YRt()},k0=BK.root,$P=0,XRt=0;const qGe={LINE:0,DOTTED_LINE:1},HGe={AGGREGATION:0,EXTENSION:1,COMPOSITION:2,DEPENDENCY:3},RK=i=>JSON.parse(JSON.stringify(i)),GGe=i=>{Ut.info("Setting root doc",i),FK=i},VGe=()=>FK,jK=(i,a,f)=>{if(a.stmt===Egt)jK(i,a.state1,!0),jK(i,a.state2,!1);else if(a.stmt===PK&&(a.id==="[*]"?(a.id=f?i.id+"_start":i.id+"_end",a.start=f):a.id=a.id.trim()),a.doc){const p=[];let v=[],m;for(m=0;m<a.doc.length;m++)if(a.doc[m].type===zRt){const b=RK(a.doc[m]);b.doc=RK(v),p.push(b),v=[]}else v.push(a.doc[m]);if(p.length>0&&v.length>0){const b={stmt:PK,id:HDt(),type:"divider",doc:RK(v)};p.push(RK(b)),a.doc=p}a.doc.forEach(b=>jK(a,b,!0))}},UGe=()=>(jK({id:"root"},{id:"root",doc:FK},!0),{id:"root",doc:FK}),WGe=i=>{let a;i.doc?a=i.doc:a=i,Ut.info(a),QRt(!0),Ut.info("Extract",a),a.forEach(f=>{switch(f.stmt){case PK:_T(f.id.trim(),f.type,f.doc,f.description,f.note,f.classes,f.styles,f.textStyles);break;case Egt:ZRt(f.state1,f.state2,f.description);break;case RGe:JRt(f.id.trim(),f.classes);break;case jGe:Agt(f.id.trim(),f.styleClass);break}})},_T=function(i,a=RP,f=null,p=null,v=null,m=null,b=null,E=null){const _=i==null?void 0:i.trim();k0.states[_]===void 0?(Ut.info("Adding state ",_,p),k0.states[_]={id:_,descriptions:[],type:a,doc:f,note:v,classes:[],styles:[],textStyles:[]}):(k0.states[_].doc||(k0.states[_].doc=f),k0.states[_].type||(k0.states[_].type=a)),p&&(Ut.info("Setting state description",_,p),typeof p=="string"&&Sgt(_,p.trim()),typeof p=="object"&&p.forEach(L=>Sgt(_,L.trim()))),v&&(k0.states[_].note=v,k0.states[_].note.text=Yr.sanitizeText(k0.states[_].note.text,Le())),m&&(Ut.info("Setting state classes",_,m),(typeof m=="string"?[m]:m).forEach(N=>Agt(_,N.trim()))),b&&(Ut.info("Setting state styles",_,b),(typeof b=="string"?[b]:b).forEach(N=>rVe(_,N.trim()))),E&&(Ut.info("Setting state styles",_,b),(typeof E=="string"?[E]:E).forEach(N=>iVe(_,N.trim())))},QRt=function(i){BK={root:YRt()},k0=BK.root,$P=0,jP=WRt(),i||ap()},zP=function(i){return k0.states[i]},KGe=function(){return k0.states},YGe=function(){Ut.info("Documents = ",BK)},XGe=function(){return k0.relations};function Cgt(i=""){let a=i;return i===Tgt&&($P++,a=`${qRt}${$P}`),a}function _gt(i="",a=RP){return i===Tgt?qRt:a}function QGe(i=""){let a=i;return i===HRt&&($P++,a=`${GRt}${$P}`),a}function ZGe(i="",a=RP){return i===HRt?GRt:a}function JGe(i,a,f){let p=Cgt(i.id.trim()),v=_gt(i.id.trim(),i.type),m=Cgt(a.id.trim()),b=_gt(a.id.trim(),a.type);_T(p,v,i.doc,i.description,i.note,i.classes,i.styles,i.textStyles),_T(m,b,a.doc,a.description,a.note,a.classes,a.styles,a.textStyles),k0.relations.push({id1:p,id2:m,relationTitle:Yr.sanitizeText(f,Le())})}const ZRt=function(i,a,f){if(typeof i=="object")JGe(i,a,f);else{const p=Cgt(i.trim()),v=_gt(i),m=QGe(a.trim()),b=ZGe(a);_T(p,v),_T(m,b),k0.relations.push({id1:p,id2:m,title:Yr.sanitizeText(f,Le())})}},Sgt=function(i,a){const f=k0.states[i],p=a.startsWith(":")?a.replace(":","").trim():a;f.descriptions.push(Yr.sanitizeText(p,Le()))},tVe=function(i){return i.substring(0,1)===":"?i.substr(2).trim():i.trim()},eVe=()=>(XRt++,"divider-id-"+XRt),JRt=function(i,a=""){jP[i]===void 0&&(jP[i]={id:i,styles:[],textStyles:[]});const f=jP[i];a!=null&&a.split(zGe).forEach(p=>{const v=p.replace(/([^;]*);/,"$1").trim();if(p.match(VRt)){const b=v.replace(URt,$Ge).replace(VRt,URt);f.textStyles.push(b)}f.styles.push(v)})},nVe=function(){return jP},Agt=function(i,a){i.split(",").forEach(function(f){let p=zP(f);if(p===void 0){const v=f.trim();_T(v),p=zP(v)}p.classes.push(a)})},rVe=function(i,a){const f=zP(i);f!==void 0&&f.textStyles.push(a)},iVe=function(i,a){const f=zP(i);f!==void 0&&f.textStyles.push(a)},O5={getConfig:()=>Le().state,addState:_T,clear:QRt,getState:zP,getStates:KGe,getRelations:XGe,getClasses:nVe,getDirection:()=>KRt,addRelation:ZRt,getDividerId:eVe,setDirection:i=>{KRt=i},cleanupLabel:tVe,lineType:qGe,relationType:HGe,logDocuments:YGe,getRootDoc:VGe,setRootDoc:GGe,getRootDocV2:UGe,extract:WGe,trimColon:i=>i&&i[0]===":"?i.substr(1).trim():i.trim(),getAccTitle:op,setAccTitle:cg,getAccDescription:up,setAccDescription:cp,addStyleClass:JRt,setCssClass:Agt,addDescription:Sgt,setDiagramTitle:Z2,getDiagramTitle:Db},tjt=i=>`
defs #statediagram-barbEnd {
    fill: ${i.transitionColor};
    stroke: ${i.transitionColor};
  }
g.stateGroup text {
  fill: ${i.nodeBorder};
  stroke: none;
  font-size: 10px;
}
g.stateGroup text {
  fill: ${i.textColor};
  stroke: none;
  font-size: 10px;

}
g.stateGroup .state-title {
  font-weight: bolder;
  fill: ${i.stateLabelColor};
}

g.stateGroup rect {
  fill: ${i.mainBkg};
  stroke: ${i.nodeBorder};
}

g.stateGroup line {
  stroke: ${i.lineColor};
  stroke-width: 1;
}

.transition {
  stroke: ${i.transitionColor};
  stroke-width: 1;
  fill: none;
}

.stateGroup .composit {
  fill: ${i.background};
  border-bottom: 1px
}

.stateGroup .alt-composit {
  fill: #e0e0e0;
  border-bottom: 1px
}

.state-note {
  stroke: ${i.noteBorderColor};
  fill: ${i.noteBkgColor};

  text {
    fill: ${i.noteTextColor};
    stroke: none;
    font-size: 10px;
  }
}

.stateLabel .box {
  stroke: none;
  stroke-width: 0;
  fill: ${i.mainBkg};
  opacity: 0.5;
}

.edgeLabel .label rect {
  fill: ${i.labelBackgroundColor};
  opacity: 0.5;
}
.edgeLabel .label text {
  fill: ${i.transitionLabelColor||i.tertiaryTextColor};
}
.label div .edgeLabel {
  color: ${i.transitionLabelColor||i.tertiaryTextColor};
}

.stateLabel text {
  fill: ${i.stateLabelColor};
  font-size: 10px;
  font-weight: bold;
}

.node circle.state-start {
  fill: ${i.specialStateColor};
  stroke: ${i.specialStateColor};
}

.node .fork-join {
  fill: ${i.specialStateColor};
  stroke: ${i.specialStateColor};
}

.node circle.state-end {
  fill: ${i.innerEndBackground};
  stroke: ${i.background};
  stroke-width: 1.5
}
.end-state-inner {
  fill: ${i.compositeBackground||i.background};
  // stroke: ${i.background};
  stroke-width: 1.5
}

.node rect {
  fill: ${i.stateBkg||i.mainBkg};
  stroke: ${i.stateBorder||i.nodeBorder};
  stroke-width: 1px;
}
.node polygon {
  fill: ${i.mainBkg};
  stroke: ${i.stateBorder||i.nodeBorder};;
  stroke-width: 1px;
}
#statediagram-barbEnd {
  fill: ${i.lineColor};
}

.statediagram-cluster rect {
  fill: ${i.compositeTitleBackground};
  stroke: ${i.stateBorder||i.nodeBorder};
  stroke-width: 1px;
}

.cluster-label, .nodeLabel {
  color: ${i.stateLabelColor};
}

.statediagram-cluster rect.outer {
  rx: 5px;
  ry: 5px;
}
.statediagram-state .divider {
  stroke: ${i.stateBorder||i.nodeBorder};
}

.statediagram-state .title-state {
  rx: 5px;
  ry: 5px;
}
.statediagram-cluster.statediagram-cluster .inner {
  fill: ${i.compositeBackground||i.background};
}
.statediagram-cluster.statediagram-cluster-alt .inner {
  fill: ${i.altBackground?i.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: ${i.altBackground?i.altBackground:"#efefef"};
}

.note-edge {
  stroke-dasharray: 5;
}

.statediagram-note rect {
  fill: ${i.noteBkgColor};
  stroke: ${i.noteBorderColor};
  stroke-width: 1px;
  rx: 0;
  ry: 0;
}
.statediagram-note rect {
  fill: ${i.noteBkgColor};
  stroke: ${i.noteBorderColor};
  stroke-width: 1px;
  rx: 0;
  ry: 0;
}

.statediagram-note text {
  fill: ${i.noteTextColor};
}

.statediagram-note .nodeLabel {
  color: ${i.noteTextColor};
}
.statediagram .edgeLabel {
  color: red; // ${i.noteTextColor};
}

#dependencyStart, #dependencyEnd {
  fill: ${i.lineColor};
  stroke: ${i.lineColor};
  stroke-width: 1;
}

.statediagramTitleText {
  text-anchor: middle;
  font-size: 18px;
  fill: ${i.textColor};
}
`,Lgt={},sVe=(i,a)=>{Lgt[i]=a},aVe=i=>Lgt[i],ejt=()=>Object.keys(Lgt),oVe={get:aVe,set:sVe,keys:ejt,size:()=>ejt().length},cVe=i=>i.append("circle").attr("class","start-state").attr("r",Le().state.sizeUnit).attr("cx",Le().state.padding+Le().state.sizeUnit).attr("cy",Le().state.padding+Le().state.sizeUnit),uVe=i=>i.append("line").style("stroke","grey").style("stroke-dasharray","3").attr("x1",Le().state.textHeight).attr("class","divider").attr("x2",Le().state.textHeight*2).attr("y1",0).attr("y2",0),lVe=(i,a)=>{const f=i.append("text").attr("x",2*Le().state.padding).attr("y",Le().state.textHeight+2*Le().state.padding).attr("font-size",Le().state.fontSize).attr("class","state-title").text(a.id),p=f.node().getBBox();return i.insert("rect",":first-child").attr("x",Le().state.padding).attr("y",Le().state.padding).attr("width",p.width+2*Le().state.padding).attr("height",p.height+2*Le().state.padding).attr("rx",Le().state.radius),f},hVe=(i,a)=>{const f=function(j,R,z){const K=j.append("tspan").attr("x",2*Le().state.padding).text(R);z||K.attr("dy",Le().state.textHeight)},v=i.append("text").attr("x",2*Le().state.padding).attr("y",Le().state.textHeight+1.3*Le().state.padding).attr("font-size",Le().state.fontSize).attr("class","state-title").text(a.descriptions[0]).node().getBBox(),m=v.height,b=i.append("text").attr("x",Le().state.padding).attr("y",m+Le().state.padding*.4+Le().state.dividerMargin+Le().state.textHeight).attr("class","state-description");let E=!0,_=!0;a.descriptions.forEach(function(j){E||(f(b,j,_),_=!1),E=!1});const L=i.append("line").attr("x1",Le().state.padding).attr("y1",Le().state.padding+m+Le().state.dividerMargin/2).attr("y2",Le().state.padding+m+Le().state.dividerMargin/2).attr("class","descr-divider"),N=b.node().getBBox(),B=Math.max(N.width,v.width);return L.attr("x2",B+3*Le().state.padding),i.insert("rect",":first-child").attr("x",Le().state.padding).attr("y",Le().state.padding).attr("width",B+2*Le().state.padding).attr("height",N.height+m+2*Le().state.padding).attr("rx",Le().state.radius),i},fVe=(i,a,f)=>{const p=Le().state.padding,v=2*Le().state.padding,m=i.node().getBBox(),b=m.width,E=m.x,_=i.append("text").attr("x",0).attr("y",Le().state.titleShift).attr("font-size",Le().state.fontSize).attr("class","state-title").text(a.id),N=_.node().getBBox().width+v;let B=Math.max(N,b);B===b&&(B=B+v);let j;const R=i.node().getBBox();a.doc,j=E-p,N>b&&(j=(b-B)/2+p),Math.abs(E-R.x)<p&&N>b&&(j=E-(N-b)/2);const z=1-Le().state.textHeight;return i.insert("rect",":first-child").attr("x",j).attr("y",z).attr("class",f?"alt-composit":"composit").attr("width",B).attr("height",R.height+Le().state.textHeight+Le().state.titleShift+1).attr("rx","0"),_.attr("x",j+p),N<=b&&_.attr("x",E+(B-v)/2-N/2+p),i.insert("rect",":first-child").attr("x",j).attr("y",Le().state.titleShift-Le().state.textHeight-Le().state.padding).attr("width",B).attr("height",Le().state.textHeight*3).attr("rx",Le().state.radius),i.insert("rect",":first-child").attr("x",j).attr("y",Le().state.titleShift-Le().state.textHeight-Le().state.padding).attr("width",B).attr("height",R.height+3+2*Le().state.textHeight).attr("rx",Le().state.radius),i},dVe=i=>(i.append("circle").attr("class","end-state-outer").attr("r",Le().state.sizeUnit+Le().state.miniPadding).attr("cx",Le().state.padding+Le().state.sizeUnit+Le().state.miniPadding).attr("cy",Le().state.padding+Le().state.sizeUnit+Le().state.miniPadding),i.append("circle").attr("class","end-state-inner").attr("r",Le().state.sizeUnit).attr("cx",Le().state.padding+Le().state.sizeUnit+2).attr("cy",Le().state.padding+Le().state.sizeUnit+2)),gVe=(i,a)=>{let f=Le().state.forkWidth,p=Le().state.forkHeight;if(a.parentId){let v=f;f=p,p=v}return i.append("rect").style("stroke","black").style("fill","black").attr("width",f).attr("height",p).attr("x",Le().state.padding).attr("y",Le().state.padding)},pVe=(i,a,f,p)=>{let v=0;const m=p.append("text");m.style("text-anchor","start"),m.attr("class","noteText");let b=i.replace(/\r\n/g,"<br/>");b=b.replace(/\n/g,"<br/>");const E=b.split(Yr.lineBreakRegex);let _=1.25*Le().state.noteMargin;for(const L of E){const N=L.trim();if(N.length>0){const B=m.append("tspan");if(B.text(N),_===0){const j=B.node().getBBox();_+=j.height}v+=_,B.attr("x",a+Le().state.noteMargin),B.attr("y",f+v+1.25*Le().state.noteMargin)}}return{textWidth:m.node().getBBox().width,textHeight:v}},bVe=(i,a)=>{a.attr("class","state-note");const f=a.append("rect").attr("x",0).attr("y",Le().state.padding),p=a.append("g"),{textWidth:v,textHeight:m}=pVe(i,0,0,p);return f.attr("height",m+2*Le().state.noteMargin),f.attr("width",v+Le().state.noteMargin*2),f},njt=function(i,a){const f=a.id,p={id:f,label:a.id,width:0,height:0},v=i.append("g").attr("id",f).attr("class","stateGroup");a.type==="start"&&cVe(v),a.type==="end"&&dVe(v),(a.type==="fork"||a.type==="join")&&gVe(v,a),a.type==="note"&&bVe(a.note.text,v),a.type==="divider"&&uVe(v),a.type==="default"&&a.descriptions.length===0&&lVe(v,a),a.type==="default"&&a.descriptions.length>0&&hVe(v,a);const m=v.node().getBBox();return p.width=m.width+2*Le().state.padding,p.height=m.height+2*Le().state.padding,oVe.set(f,p),p};let rjt=0;const vVe=function(i,a,f){const p=function(_){switch(_){case O5.relationType.AGGREGATION:return"aggregation";case O5.relationType.EXTENSION:return"extension";case O5.relationType.COMPOSITION:return"composition";case O5.relationType.DEPENDENCY:return"dependency"}};a.points=a.points.filter(_=>!Number.isNaN(_.y));const v=a.points,m=Z7().x(function(_){return _.x}).y(function(_){return _.y}).curve(FN),b=i.append("path").attr("d",m(v)).attr("id","edge"+rjt).attr("class","transition");let E="";if(Le().state.arrowMarkerAbsolute&&(E=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,E=E.replace(/\(/g,"\\("),E=E.replace(/\)/g,"\\)")),b.attr("marker-end","url("+E+"#"+p(O5.relationType.DEPENDENCY)+"End)"),f.title!==void 0){const _=i.append("g").attr("class","stateLabel"),{x:L,y:N}=$a.calcLabelPosition(a.points),B=Yr.getRows(f.title);let j=0;const R=[];let z=0,K=0;for(let ut=0;ut<=B.length;ut++){const bt=_.append("text").attr("text-anchor","middle").text(B[ut]).attr("x",L).attr("y",N+j),mt=bt.node().getBBox();z=Math.max(z,mt.width),K=Math.min(K,mt.x),Ut.info(mt.x,L,N+j),j===0&&(j=bt.node().getBBox().height,Ut.info("Title height",j,N)),R.push(bt)}let it=j*B.length;if(B.length>1){const ut=(B.length-1)*j*.5;R.forEach((bt,mt)=>bt.attr("y",N+mt*j-ut)),it=j*B.length}const st=_.node().getBBox();_.insert("rect",":first-child").attr("class","box").attr("x",L-z/2-Le().state.padding/2).attr("y",N-it/2-Le().state.padding/2-3.5).attr("width",z+Le().state.padding).attr("height",it+Le().state.padding),Ut.info(st)}rjt++};let Rb;const Mgt={},wVe=function(){},mVe=function(i){i.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")},yVe=function(i,a,f,p){Rb=Le().state;const v=Le().securityLevel;let m;v==="sandbox"&&(m=yr("#i"+a));const b=yr(v==="sandbox"?m.nodes()[0].contentDocument.body:"body"),E=v==="sandbox"?m.nodes()[0].contentDocument:document;Ut.debug("Rendering diagram "+i);const _=b.select(`[id='${a}']`);mVe(_);const L=p.db.getRootDoc();ijt(L,_,void 0,!1,b,E,p);const N=Rb.padding,B=_.node().getBBox(),j=B.width+N*2,R=B.height+N*2,z=j*1.75;og(_,R,z,Rb.useMaxWidth),_.attr("viewBox",`${B.x-Rb.padding}  ${B.y-Rb.padding} `+j+" "+R)},xVe=i=>i?i.length*Rb.fontSizeFactor:1,ijt=(i,a,f,p,v,m,b)=>{const E=new a1({compound:!0,multigraph:!0});let _,L=!0;for(_=0;_<i.length;_++)if(i[_].stmt==="relation"){L=!1;break}f?E.setGraph({rankdir:"LR",multigraph:!0,compound:!0,ranker:"tight-tree",ranksep:L?1:Rb.edgeLengthFactor,nodeSep:L?1:50,isMultiGraph:!0}):E.setGraph({rankdir:"TB",multigraph:!0,compound:!0,ranksep:L?1:Rb.edgeLengthFactor,nodeSep:L?1:50,ranker:"tight-tree",isMultiGraph:!0}),E.setDefaultEdgeLabel(function(){return{}}),b.db.extract(i);const N=b.db.getStates(),B=b.db.getRelations(),j=Object.keys(N);for(const st of j){const ut=N[st];f&&(ut.parentId=f);let bt;if(ut.doc){let mt=a.append("g").attr("id",ut.id).attr("class","stateGroup");bt=ijt(ut.doc,mt,ut.id,!p,v,m,b);{mt=fVe(mt,ut,p);let yt=mt.node().getBBox();bt.width=yt.width,bt.height=yt.height+Rb.padding/2,Mgt[ut.id]={y:Rb.compositTitleSize}}}else bt=njt(a,ut);if(ut.note){const mt={descriptions:[],id:ut.id+"-note",note:ut.note,type:"note"},yt=njt(a,mt);ut.note.position==="left of"?(E.setNode(bt.id+"-note",yt),E.setNode(bt.id,bt)):(E.setNode(bt.id,bt),E.setNode(bt.id+"-note",yt)),E.setParent(bt.id,bt.id+"-group"),E.setParent(bt.id+"-note",bt.id+"-group")}else E.setNode(bt.id,bt)}Ut.debug("Count=",E.nodeCount(),E);let R=0;B.forEach(function(st){R++,Ut.debug("Setting edge",st),E.setEdge(st.id1,st.id2,{relation:st,width:xVe(st.title),height:Rb.labelHeight*Yr.getRows(st.title).length,labelpos:"c"},"id"+R)}),eL(E),Ut.debug("Graph after layout",E.nodes());const z=a.node();E.nodes().forEach(function(st){st!==void 0&&E.node(st)!==void 0?(Ut.warn("Node "+st+": "+JSON.stringify(E.node(st))),v.select("#"+z.id+" #"+st).attr("transform","translate("+(E.node(st).x-E.node(st).width/2)+","+(E.node(st).y+(Mgt[st]?Mgt[st].y:0)-E.node(st).height/2)+" )"),v.select("#"+z.id+" #"+st).attr("data-x-shift",E.node(st).x-E.node(st).width/2),m.querySelectorAll("#"+z.id+" #"+st+" .divider").forEach(bt=>{const mt=bt.parentElement;let yt=0,dt=0;mt&&(mt.parentElement&&(yt=mt.parentElement.getBBox().width),dt=parseInt(mt.getAttribute("data-x-shift"),10),Number.isNaN(dt)&&(dt=0)),bt.setAttribute("x1",0-dt+8),bt.setAttribute("x2",yt-dt-8)})):Ut.debug("No Node "+st+": "+JSON.stringify(E.node(st)))});let K=z.getBBox();E.edges().forEach(function(st){st!==void 0&&E.edge(st)!==void 0&&(Ut.debug("Edge "+st.v+" -> "+st.w+": "+JSON.stringify(E.edge(st))),vVe(a,E.edge(st),E.edge(st).relation))}),K=z.getBBox();const it={id:f||"root",label:f||"root",width:0,height:0};return it.width=K.width+2*Rb.padding,it.height=K.height+2*Rb.padding,Ut.debug("Doc rendered",it,E),it},kVe=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:$Rt,db:O5,renderer:{setConf:wVe,draw:yVe},styles:tjt,init:i=>{i.state||(i.state={}),i.state.arrowMarkerAbsolute=i.arrowMarkerAbsolute,O5.clear()}}},Symbol.toStringTag,{value:"Module"})),$K="rect",Igt="rectWithTitle",EVe="start",TVe="end",CVe="divider",_Ve="roundedWithTitle",SVe="note",AVe="noteGroup",dL="statediagram",LVe=`${dL}-state`,sjt="transition",MVe="note",IVe=`${sjt} note-edge`,DVe=`${dL}-${MVe}`,OVe=`${dL}-cluster`,NVe=`${dL}-cluster-alt`,ajt="parent",ojt="note",PVe="state",Dgt="----",FVe=`${Dgt}${ojt}`,cjt=`${Dgt}${ajt}`,ujt="fill:none",ljt="fill: #333",hjt="c",fjt="text",djt="normal";let zK={},gk=0;const BVe=function(i){const a=Object.keys(i);for(const f of a)i[f]},RVe=function(i,a){return a.db.extract(a.db.getRootDocV2()),a.db.getClasses()};function jVe(i){return i==null?"":i.classes?i.classes.join(" "):""}function Ogt(i="",a=0,f="",p=Dgt){const v=f!==null&&f.length>0?`${p}${f}`:"";return`${PVe}-${i}${v}-${a}`}const qP=(i,a,f,p,v,m)=>{const b=f.id,E=jVe(p[b]);if(b!=="root"){let _=$K;f.start===!0&&(_=EVe),f.start===!1&&(_=TVe),f.type!==RP&&(_=f.type),zK[b]||(zK[b]={id:b,shape:_,description:Yr.sanitizeText(b,Le()),classes:`${E} ${LVe}`});const L=zK[b];f.description&&(Array.isArray(L.description)?(L.shape=Igt,L.description.push(f.description)):L.description.length>0?(L.shape=Igt,L.description===b?L.description=[f.description]:L.description=[L.description,f.description]):(L.shape=$K,L.description=f.description),L.description=Yr.sanitizeTextOrArray(L.description,Le())),L.description.length===1&&L.shape===Igt&&(L.shape=$K),!L.type&&f.doc&&(Ut.info("Setting cluster for ",b,Ngt(f)),L.type="group",L.dir=Ngt(f),L.shape=f.type===zRt?CVe:_Ve,L.classes=L.classes+" "+OVe+" "+(m?NVe:""));const N={labelStyle:"",shape:L.shape,labelText:L.description,classes:L.classes,style:"",id:b,dir:L.dir,domId:Ogt(b,gk),type:L.type,padding:15};if(N.centerLabel=!0,f.note){const B={labelStyle:"",shape:SVe,labelText:f.note.text,classes:DVe,style:"",id:b+FVe+"-"+gk,domId:Ogt(b,gk,ojt),type:L.type,padding:15},j={labelStyle:"",shape:AVe,labelText:f.note.text,classes:L.classes,style:"",id:b+cjt,domId:Ogt(b,gk,ajt),type:"group",padding:0};gk++;const R=b+cjt;i.setNode(R,j),i.setNode(B.id,B),i.setNode(b,N),i.setParent(b,R),i.setParent(B.id,R);let z=b,K=B.id;f.note.position==="left of"&&(z=B.id,K=b),i.setEdge(z,K,{arrowhead:"none",arrowType:"",style:ujt,labelStyle:"",classes:IVe,arrowheadStyle:ljt,labelpos:hjt,labelType:fjt,thickness:djt})}else i.setNode(b,N)}a&&a.id!=="root"&&(Ut.trace("Setting node ",b," to be child of its parent ",a.id),i.setParent(b,a.id)),f.doc&&(Ut.trace("Adding nodes children "),$Ve(i,f,f.doc,p,v,!m))},$Ve=(i,a,f,p,v,m)=>{Ut.trace("items",f),f.forEach(b=>{switch(b.stmt){case PK:qP(i,a,b,p,v,m);break;case RP:qP(i,a,b,p,v,m);break;case Egt:{qP(i,a,b.state1,p,v,m),qP(i,a,b.state2,p,v,m);const E={id:"edge"+gk,arrowhead:"normal",arrowTypeEnd:"arrow_barb",style:ujt,labelStyle:"",label:Yr.sanitizeText(b.description,Le()),arrowheadStyle:ljt,labelpos:hjt,labelType:fjt,thickness:djt,classes:sjt};i.setEdge(b.state1.id,b.state2.id,E,gk),gk++}break}})},Ngt=(i,a=BGe)=>{let f=a;if(i.doc)for(let p=0;p<i.doc.length;p++){const v=i.doc[p];v.stmt==="dir"&&(f=v.value)}return f},zVe=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:$Rt,db:O5,renderer:{setConf:BVe,getClasses:RVe,draw:async function(i,a,f,p){Ut.info("Drawing state diagram (v2)",a),zK={},p.db.getDirection();const{securityLevel:v,state:m}=Le(),b=m.nodeSpacing||50,E=m.rankSpacing||50;Ut.info(p.db.getRootDocV2()),p.db.extract(p.db.getRootDocV2()),Ut.info(p.db.getRootDocV2());const _=p.db.getStates(),L=new a1({multigraph:!0,compound:!0}).setGraph({rankdir:Ngt(p.db.getRootDocV2()),nodesep:b,ranksep:E,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}});qP(L,void 0,p.db.getRootDocV2(),_,p.db,!0);let N;v==="sandbox"&&(N=yr("#i"+a));const B=yr(v==="sandbox"?N.nodes()[0].contentDocument.body:"body"),j=B.select(`[id="${a}"]`),R=B.select("#"+a+" g");await I0t(R,L,["barb"],dL,a);const z=8;$a.insertTitle(j,"statediagramTitleText",m.titleTopMargin,p.db.getDiagramTitle());const K=j.node().getBBox(),it=K.width+z*2,st=K.height+z*2;j.attr("class",dL);const ut=j.node().getBBox();og(j,st,it,m.useMaxWidth);const bt=`${ut.x-z} ${ut.y-z} ${it} ${st}`;Ut.debug(`viewBox ${bt}`),j.attr("viewBox",bt);const mt=document.querySelectorAll('[id="'+a+'"] .edgeLabel .label');for(const yt of mt){const dt=yt.getBBox(),ht=document.createElementNS("http://www.w3.org/2000/svg",$K);ht.setAttribute("rx",0),ht.setAttribute("ry",0),ht.setAttribute("width",dt.width),ht.setAttribute("height",dt.height),yt.insertBefore(ht,yt.firstChild)}}},styles:tjt,init:i=>{i.state||(i.state={}),i.state.arrowMarkerAbsolute=i.arrowMarkerAbsolute,O5.clear()}}},Symbol.toStringTag,{value:"Module"}));var Pgt=function(){var i=function(B,j,R,z){for(R=R||{},z=B.length;z--;R[B[z]]=j);return R},a=[6,8,10,11,12,14,16,17,18],f=[1,9],p=[1,10],v=[1,11],m=[1,12],b=[1,13],E=[1,14],_={trace:function(){},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:function(j,R,z,K,it,st,ut){var bt=st.length-1;switch(it){case 1:return st[bt-1];case 2:this.$=[];break;case 3:st[bt-1].push(st[bt]),this.$=st[bt-1];break;case 4:case 5:this.$=st[bt];break;case 6:case 7:this.$=[];break;case 8:K.setDiagramTitle(st[bt].substr(6)),this.$=st[bt].substr(6);break;case 9:this.$=st[bt].trim(),K.setAccTitle(this.$);break;case 10:case 11:this.$=st[bt].trim(),K.setAccDescription(this.$);break;case 12:K.addSection(st[bt].substr(8)),this.$=st[bt].substr(8);break;case 13:K.addTask(st[bt-1],st[bt]),this.$="task";break}},table:[{3:1,4:[1,2]},{1:[3]},i(a,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:f,12:p,14:v,16:m,17:b,18:E},i(a,[2,7],{1:[2,1]}),i(a,[2,3]),{9:15,11:f,12:p,14:v,16:m,17:b,18:E},i(a,[2,5]),i(a,[2,6]),i(a,[2,8]),{13:[1,16]},{15:[1,17]},i(a,[2,11]),i(a,[2,12]),{19:[1,18]},i(a,[2,4]),i(a,[2,9]),i(a,[2,10]),i(a,[2,13])],defaultActions:{},parseError:function(j,R){if(R.recoverable)this.trace(j);else{var z=new Error(j);throw z.hash=R,z}},parse:function(j){var R=this,z=[0],K=[],it=[null],st=[],ut=this.table,bt="",mt=0,yt=0,dt=2,ht=1,wt=st.slice.call(arguments,1),X=Object.create(this.lexer),pt={yy:{}};for(var U in this.yy)Object.prototype.hasOwnProperty.call(this.yy,U)&&(pt.yy[U]=this.yy[U]);X.setInput(j,pt.yy),pt.yy.lexer=X,pt.yy.parser=this,typeof X.yylloc>"u"&&(X.yylloc={});var xt=X.yylloc;st.push(xt);var nt=X.options&&X.options.ranges;typeof pt.yy.parseError=="function"?this.parseError=pt.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Ot(){var Me;return Me=K.pop()||X.lex()||ht,typeof Me!="number"&&(Me instanceof Array&&(K=Me,Me=K.pop()),Me=R.symbols_[Me]||Me),Me}for(var Nt,qt,Ct,Z,Tt={},Ht,It,Ft,ke;;){if(qt=z[z.length-1],this.defaultActions[qt]?Ct=this.defaultActions[qt]:((Nt===null||typeof Nt>"u")&&(Nt=Ot()),Ct=ut[qt]&&ut[qt][Nt]),typeof Ct>"u"||!Ct.length||!Ct[0]){var pn="";ke=[];for(Ht in ut[qt])this.terminals_[Ht]&&Ht>dt&&ke.push("'"+this.terminals_[Ht]+"'");X.showPosition?pn="Parse error on line "+(mt+1)+`:
`+X.showPosition()+`
Expecting `+ke.join(", ")+", got '"+(this.terminals_[Nt]||Nt)+"'":pn="Parse error on line "+(mt+1)+": Unexpected "+(Nt==ht?"end of input":"'"+(this.terminals_[Nt]||Nt)+"'"),this.parseError(pn,{text:X.match,token:this.terminals_[Nt]||Nt,line:X.yylineno,loc:xt,expected:ke})}if(Ct[0]instanceof Array&&Ct.length>1)throw new Error("Parse Error: multiple actions possible at state: "+qt+", token: "+Nt);switch(Ct[0]){case 1:z.push(Nt),it.push(X.yytext),st.push(X.yylloc),z.push(Ct[1]),Nt=null,yt=X.yyleng,bt=X.yytext,mt=X.yylineno,xt=X.yylloc;break;case 2:if(It=this.productions_[Ct[1]][1],Tt.$=it[it.length-It],Tt._$={first_line:st[st.length-(It||1)].first_line,last_line:st[st.length-1].last_line,first_column:st[st.length-(It||1)].first_column,last_column:st[st.length-1].last_column},nt&&(Tt._$.range=[st[st.length-(It||1)].range[0],st[st.length-1].range[1]]),Z=this.performAction.apply(Tt,[bt,yt,mt,pt.yy,Ct[1],it,st].concat(wt)),typeof Z<"u")return Z;It&&(z=z.slice(0,-1*It*2),it=it.slice(0,-1*It),st=st.slice(0,-1*It)),z.push(this.productions_[Ct[1]][0]),it.push(Tt.$),st.push(Tt._$),Ft=ut[z[z.length-2]][z[z.length-1]],z.push(Ft);break;case 3:return!0}}return!0}},L=function(){var B={EOF:1,parseError:function(R,z){if(this.yy.parser)this.yy.parser.parseError(R,z);else throw new Error(R)},setInput:function(j,R){return this.yy=R||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},input:function(){var j=this._input[0];this.yytext+=j,this.yyleng++,this.offset++,this.match+=j,this.matched+=j;var R=j.match(/(?:\r\n?|\n).*/g);return R?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),j},unput:function(j){var R=j.length,z=j.split(/(?:\r\n?|\n)/g);this._input=j+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-R),this.offset-=R;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),z.length-1&&(this.yylineno-=z.length-1);var it=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===K.length?this.yylloc.first_column:0)+K[K.length-z.length].length-z[0].length:this.yylloc.first_column-R},this.options.ranges&&(this.yylloc.range=[it[0],it[0]+this.yyleng-R]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject: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},less:function(j){this.unput(this.match.slice(j))},pastInput:function(){var j=this.matched.substr(0,this.matched.length-this.match.length);return(j.length>20?"...":"")+j.substr(-20).replace(/\n/g,"")},upcomingInput: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,"")},showPosition:function(){var j=this.pastInput(),R=new Array(j.length+1).join("-");return j+this.upcomingInput()+`
`+R+"^"},test_match:function(j,R){var z,K,it;if(this.options.backtrack_lexer&&(it={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&&(it.yylloc.range=this.yylloc.range.slice(0))),K=j[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+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,R,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),z)return z;if(this._backtrack){for(var st in it)this[st]=it[st];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var j,R,z,K;this._more||(this.yytext="",this.match="");for(var it=this._currentRules(),st=0;st<it.length;st++)if(z=this._input.match(this.rules[it[st]]),z&&(!R||z[0].length>R[0].length)){if(R=z,K=st,this.options.backtrack_lexer){if(j=this.test_match(z,it[st]),j!==!1)return j;if(this._backtrack){R=!1;continue}else return!1}else if(!this.options.flex)break}return R?(j=this.test_match(R,it[K]),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})},lex:function(){var R=this.next();return R||this.lex()},begin:function(R){this.conditionStack.push(R)},popState:function(){var R=this.conditionStack.length-1;return R>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(R){return R=this.conditionStack.length-1-Math.abs(R||0),R>=0?this.conditionStack[R]:"INITIAL"},pushState:function(R){this.begin(R)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(R,z,K,it){switch(K){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;case 8:return this.popState(),"acc_title_value";case 9:return this.begin("acc_descr"),14;case 10:return this.popState(),"acc_descr_value";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"}},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 B}();_.lexer=L;function N(){this.yy={}}return N.prototype=_,_.Parser=N,new N}();Pgt.parser=Pgt;const qVe=Pgt;let gL="";const Fgt=[],HP=[],GP=[],HVe=function(){Fgt.length=0,HP.length=0,gL="",GP.length=0,ap()},GVe=function(i){gL=i,Fgt.push(i)},VVe=function(){return Fgt},UVe=function(){let i=gjt();const a=100;let f=0;for(;!i&&f<a;)i=gjt(),f++;return HP.push(...GP),HP},WVe=function(){const i=[];return HP.forEach(f=>{f.people&&i.push(...f.people)}),[...new Set(i)].sort()},KVe=function(i,a){const f=a.substr(1).split(":");let p=0,v=[];f.length===1?(p=Number(f[0]),v=[]):(p=Number(f[0]),v=f[1].split(","));const m=v.map(E=>E.trim()),b={section:gL,type:gL,people:m,task:i,score:p};GP.push(b)},YVe=function(i){const a={section:gL,type:gL,description:i,task:i,classes:[]};HP.push(a)},gjt=function(){const i=function(f){return GP[f].processed};let a=!0;for(const[f,p]of GP.entries())i(f),a=a&&p.processed;return a},pjt={getConfig:()=>Le().journey,clear:HVe,setDiagramTitle:Z2,getDiagramTitle:Db,setAccTitle:cg,getAccTitle:op,setAccDescription:cp,getAccDescription:up,addSection:GVe,getSections:VVe,getTasks:UVe,addTask:KVe,addTaskOrg:YVe,getActors:function(){return WVe()}},XVe=i=>`.label {
    font-family: 'trebuchet ms', verdana, arial, sans-serif;
    font-family: var(--mermaid-font-family);
    color: ${i.textColor};
  }
  .mouth {
    stroke: #666;
  }

  line {
    stroke: ${i.textColor}
  }

  .legend {
    fill: ${i.textColor};
  }

  .label text {
    fill: #333;
  }
  .label {
    color: ${i.textColor}
  }

  .face {
    ${i.faceColor?`fill: ${i.faceColor}`:"fill: #FFF8DC"};
    stroke: #999;
  }

  .node rect,
  .node circle,
  .node ellipse,
  .node polygon,
  .node path {
    fill: ${i.mainBkg};
    stroke: ${i.nodeBorder};
    stroke-width: 1px;
  }

  .node .label {
    text-align: center;
  }
  .node.clickable {
    cursor: pointer;
  }

  .arrowheadPath {
    fill: ${i.arrowheadColor};
  }

  .edgePath .path {
    stroke: ${i.lineColor};
    stroke-width: 1.5px;
  }

  .flowchart-link {
    stroke: ${i.lineColor};
    fill: none;
  }

  .edgeLabel {
    background-color: ${i.edgeLabelBackground};
    rect {
      opacity: 0.5;
    }
    text-align: center;
  }

  .cluster rect {
  }

  .cluster text {
    fill: ${i.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: ${i.tertiaryColor};
    border: 1px solid ${i.border2};
    border-radius: 2px;
    pointer-events: none;
    z-index: 100;
  }

  .task-type-0, .section-type-0  {
    ${i.fillType0?`fill: ${i.fillType0}`:""};
  }
  .task-type-1, .section-type-1  {
    ${i.fillType0?`fill: ${i.fillType1}`:""};
  }
  .task-type-2, .section-type-2  {
    ${i.fillType0?`fill: ${i.fillType2}`:""};
  }
  .task-type-3, .section-type-3  {
    ${i.fillType0?`fill: ${i.fillType3}`:""};
  }
  .task-type-4, .section-type-4  {
    ${i.fillType0?`fill: ${i.fillType4}`:""};
  }
  .task-type-5, .section-type-5  {
    ${i.fillType0?`fill: ${i.fillType5}`:""};
  }
  .task-type-6, .section-type-6  {
    ${i.fillType0?`fill: ${i.fillType6}`:""};
  }
  .task-type-7, .section-type-7  {
    ${i.fillType0?`fill: ${i.fillType7}`:""};
  }

  .actor-0 {
    ${i.actor0?`fill: ${i.actor0}`:""};
  }
  .actor-1 {
    ${i.actor1?`fill: ${i.actor1}`:""};
  }
  .actor-2 {
    ${i.actor2?`fill: ${i.actor2}`:""};
  }
  .actor-3 {
    ${i.actor3?`fill: ${i.actor3}`:""};
  }
  .actor-4 {
    ${i.actor4?`fill: ${i.actor4}`:""};
  }
  .actor-5 {
    ${i.actor5?`fill: ${i.actor5}`:""};
  }
`,Bgt=function(i,a){return HW(i,a)},QVe=function(i,a){const p=i.append("circle").attr("cx",a.cx).attr("cy",a.cy).attr("class","face").attr("r",15).attr("stroke-width",2).attr("overflow","visible"),v=i.append("g");v.append("circle").attr("cx",a.cx-15/3).attr("cy",a.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),v.append("circle").attr("cx",a.cx+15/3).attr("cy",a.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666");function m(_){const L=LA().startAngle(Math.PI/2).endAngle(3*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);_.append("path").attr("class","mouth").attr("d",L).attr("transform","translate("+a.cx+","+(a.cy+2)+")")}function b(_){const L=LA().startAngle(3*Math.PI/2).endAngle(5*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);_.append("path").attr("class","mouth").attr("d",L).attr("transform","translate("+a.cx+","+(a.cy+7)+")")}function E(_){_.append("line").attr("class","mouth").attr("stroke",2).attr("x1",a.cx-5).attr("y1",a.cy+7).attr("x2",a.cx+5).attr("y2",a.cy+7).attr("class","mouth").attr("stroke-width","1px").attr("stroke","#666")}return a.score>3?m(v):a.score<3?b(v):E(v),p},bjt=function(i,a){const f=i.append("circle");return f.attr("cx",a.cx),f.attr("cy",a.cy),f.attr("class","actor-"+a.pos),f.attr("fill",a.fill),f.attr("stroke",a.stroke),f.attr("r",a.r),f.class!==void 0&&f.attr("class",f.class),a.title!==void 0&&f.append("title").text(a.title),f},vjt=function(i,a){return dIe(i,a)},ZVe=function(i,a){function f(v,m,b,E,_){return v+","+m+" "+(v+b)+","+m+" "+(v+b)+","+(m+E-_)+" "+(v+b-_*1.2)+","+(m+E)+" "+v+","+(m+E)}const p=i.append("polygon");p.attr("points",f(a.x,a.y,50,20,7)),p.attr("class","labelBox"),a.y=a.y+a.labelMargin,a.x=a.x+.5*a.labelMargin,vjt(i,a)},JVe=function(i,a,f){const p=i.append("g"),v=fT();v.x=a.x,v.y=a.y,v.fill=a.fill,v.width=f.width*a.taskCount+f.diagramMarginX*(a.taskCount-1),v.height=f.height,v.class="journey-section section-type-"+a.num,v.rx=3,v.ry=3,Bgt(p,v),mjt(f)(a.text,p,v.x,v.y,v.width,v.height,{class:"journey-section section-type-"+a.num},f,a.colour)};let wjt=-1;const tUe=function(i,a,f){const p=a.x+f.width/2,v=i.append("g");wjt++;const m=300+5*30;v.append("line").attr("id","task"+wjt).attr("x1",p).attr("y1",a.y).attr("x2",p).attr("y2",m).attr("class","task-line").attr("stroke-width","1px").attr("stroke-dasharray","4 2").attr("stroke","#666"),QVe(v,{cx:p,cy:300+(5-a.score)*30,score:a.score});const b=fT();b.x=a.x,b.y=a.y,b.fill=a.fill,b.width=f.width,b.height=f.height,b.class="task task-type-"+a.num,b.rx=3,b.ry=3,Bgt(v,b);let E=a.x+14;a.people.forEach(_=>{const L=a.actors[_].color,N={cx:E,cy:a.y,r:7,fill:L,stroke:"#000",title:_,pos:a.actors[_].position};bjt(v,N),E+=10}),mjt(f)(a.task,v,b.x,b.y,b.width,b.height,{class:"task"},f,a.colour)},eUe=function(i,a){bNt(i,a)},mjt=function(){function i(v,m,b,E,_,L,N,B){const j=m.append("text").attr("x",b+_/2).attr("y",E+L/2+5).style("font-color",B).style("text-anchor","middle").text(v);p(j,N)}function a(v,m,b,E,_,L,N,B,j){const{taskFontSize:R,taskFontFamily:z}=B,K=v.split(/<br\s*\/?>/gi);for(let it=0;it<K.length;it++){const st=it*R-R*(K.length-1)/2,ut=m.append("text").attr("x",b+_/2).attr("y",E).attr("fill",j).style("text-anchor","middle").style("font-size",R).style("font-family",z);ut.append("tspan").attr("x",b+_/2).attr("dy",st).text(K[it]),ut.attr("y",E+L/2).attr("dominant-baseline","central").attr("alignment-baseline","central"),p(ut,N)}}function f(v,m,b,E,_,L,N,B){const j=m.append("switch"),z=j.append("foreignObject").attr("x",b).attr("y",E).attr("width",_).attr("height",L).attr("position","fixed").append("xhtml:div").style("display","table").style("height","100%").style("width","100%");z.append("div").attr("class","label").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(v),a(v,j,b,E,_,L,N,B),p(z,N)}function p(v,m){for(const b in m)b in m&&v.attr(b,m[b])}return function(v){return v.textPlacement==="fo"?f:v.textPlacement==="old"?i:a}}(),VP={drawRect:Bgt,drawCircle:bjt,drawSection:JVe,drawText:vjt,drawLabel:ZVe,drawTask:tUe,drawBackgroundRect:eUe,initGraphics:function(i){i.append("defs").append("marker").attr("id","arrowhead").attr("refX",5).attr("refY",2).attr("markerWidth",6).attr("markerHeight",4).attr("orient","auto").append("path").attr("d","M 0,0 V 4 L6,2 Z")}},nUe=function(i){Object.keys(i).forEach(function(f){qK[f]=i[f]})},N5={};function rUe(i){const a=Le().journey;let f=60;Object.keys(N5).forEach(p=>{const v=N5[p].color,m={cx:20,cy:f,r:7,fill:v,stroke:"#000",pos:N5[p].position};VP.drawCircle(i,m);const b={x:40,y:f+7,fill:"#666",text:p,textMargin:a.boxTextMargin|5};VP.drawText(i,b),f+=20})}const qK=Le().journey,ST=qK.leftMargin,iUe=function(i,a,f,p){const v=Le().journey,m=Le().securityLevel;let b;m==="sandbox"&&(b=yr("#i"+a));const E=yr(m==="sandbox"?b.nodes()[0].contentDocument.body:"body");rv.init();const _=E.select("#"+a);VP.initGraphics(_);const L=p.db.getTasks(),N=p.db.getDiagramTitle(),B=p.db.getActors();for(const st in N5)delete N5[st];let j=0;B.forEach(st=>{N5[st]={color:v.actorColours[j%v.actorColours.length],position:j},j++}),rUe(_),rv.insert(0,0,ST,Object.keys(N5).length*50),sUe(_,L,0);const R=rv.getBounds();N&&_.append("text").text(N).attr("x",ST).attr("font-size","4ex").attr("font-weight","bold").attr("y",25);const z=R.stopy-R.starty+2*v.diagramMarginY,K=ST+R.stopx+2*v.diagramMarginX;og(_,z,K,v.useMaxWidth),_.append("line").attr("x1",ST).attr("y1",v.height*4).attr("x2",K-ST-4).attr("y2",v.height*4).attr("stroke-width",4).attr("stroke","black").attr("marker-end","url(#arrowhead)");const it=N?70:0;_.attr("viewBox",`${R.startx} -25 ${K} ${z+it}`),_.attr("preserveAspectRatio","xMinYMin meet"),_.attr("height",z+it+25)},rv={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],init:function(){this.sequenceItems=[],this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0},updateVal:function(i,a,f,p){i[a]===void 0?i[a]=f:i[a]=p(f,i[a])},updateBounds:function(i,a,f,p){const v=Le().journey,m=this;let b=0;function E(_){return function(N){b++;const B=m.sequenceItems.length-b+1;m.updateVal(N,"starty",a-B*v.boxMargin,Math.min),m.updateVal(N,"stopy",p+B*v.boxMargin,Math.max),m.updateVal(rv.data,"startx",i-B*v.boxMargin,Math.min),m.updateVal(rv.data,"stopx",f+B*v.boxMargin,Math.max),_!=="activation"&&(m.updateVal(N,"startx",i-B*v.boxMargin,Math.min),m.updateVal(N,"stopx",f+B*v.boxMargin,Math.max),m.updateVal(rv.data,"starty",a-B*v.boxMargin,Math.min),m.updateVal(rv.data,"stopy",p+B*v.boxMargin,Math.max))}}this.sequenceItems.forEach(E())},insert:function(i,a,f,p){const v=Math.min(i,f),m=Math.max(i,f),b=Math.min(a,p),E=Math.max(a,p);this.updateVal(rv.data,"startx",v,Math.min),this.updateVal(rv.data,"starty",b,Math.min),this.updateVal(rv.data,"stopx",m,Math.max),this.updateVal(rv.data,"stopy",E,Math.max),this.updateBounds(v,b,m,E)},bumpVerticalPos:function(i){this.verticalPos=this.verticalPos+i,this.data.stopy=this.verticalPos},getVerticalPos:function(){return this.verticalPos},getBounds:function(){return this.data}},Rgt=qK.sectionFills,yjt=qK.sectionColours,sUe=function(i,a,f){const p=Le().journey;let v="";const m=p.height*2+p.diagramMarginY,b=f+m;let E=0,_="#CCC",L="black",N=0;for(const[B,j]of a.entries()){if(v!==j.section){_=Rgt[E%Rgt.length],N=E%Rgt.length,L=yjt[E%yjt.length];let z=0;const K=j.section;for(let st=B;st<a.length&&a[st].section==K;st++)z=z+1;const it={x:B*p.taskMargin+B*p.width+ST,y:50,text:j.section,fill:_,num:N,colour:L,taskCount:z};VP.drawSection(i,it,p),v=j.section,E++}const R=j.people.reduce((z,K)=>(N5[K]&&(z[K]=N5[K]),z),{});j.x=B*p.taskMargin+B*p.width+ST,j.y=b,j.width=p.diagramMarginX,j.height=p.diagramMarginY,j.colour=L,j.fill=_,j.num=N,j.actors=R,VP.drawTask(i,j,p),rv.insert(j.x,j.y,j.x+j.width+p.taskMargin,300+5*30)}},xjt={setConf:nUe,draw:iUe},aUe=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:qVe,db:pjt,renderer:xjt,styles:XVe,init:i=>{xjt.setConf(i.journey),pjt.clear()}}},Symbol.toStringTag,{value:"Module"})),oUe=(i,a,f)=>{const{parentById:p}=f,v=new Set;let m=i;for(;m;){if(v.add(m),m===a)return m;m=p[m]}for(m=a;m;){if(v.has(m))return m;m=p[m]}return"root"};function HK(i){throw new Error('Could not dynamically require "'+i+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}var kjt={exports:{}};(function(i,a){(function(f){i.exports=f()})(function(){return function(){function f(p,v,m){function b(L,N){if(!v[L]){if(!p[L]){var B=typeof HK=="function"&&HK;if(!N&&B)return B(L,!0);if(E)return E(L,!0);var j=new Error("Cannot find module '"+L+"'");throw j.code="MODULE_NOT_FOUND",j}var R=v[L]={exports:{}};p[L][0].call(R.exports,function(z){var K=p[L][1][z];return b(K||z)},R,R.exports,f,p,v,m)}return v[L].exports}for(var E=typeof HK=="function"&&HK,_=0;_<m.length;_++)b(m[_]);return b}return f}()({1:[function(f,p,v){Object.defineProperty(v,"__esModule",{value:!0});var m=function(){function L(N,B){for(var j=0;j<B.length;j++){var R=B[j];R.enumerable=R.enumerable||!1,R.configurable=!0,"value"in R&&(R.writable=!0),Object.defineProperty(N,R.key,R)}}return function(N,B,j){return B&&L(N.prototype,B),j&&L(N,j),N}}();function b(L,N){if(!(L instanceof N))throw new TypeError("Cannot call a class as a function")}var E=function(){function L(){var N=this,B=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},j=B.defaultLayoutOptions,R=j===void 0?{}:j,z=B.algorithms,K=z===void 0?["layered","stress","mrtree","radial","force","disco","sporeOverlap","sporeCompaction","rectpacking"]:z,it=B.workerFactory,st=B.workerUrl;if(b(this,L),this.defaultLayoutOptions=R,this.initialized=!1,typeof st>"u"&&typeof it>"u")throw new Error("Cannot construct an ELK without both 'workerUrl' and 'workerFactory'.");var ut=it;typeof st<"u"&&typeof it>"u"&&(ut=function(yt){return new Worker(yt)});var bt=ut(st);if(typeof bt.postMessage!="function")throw new TypeError("Created worker does not provide the required 'postMessage' function.");this.worker=new _(bt),this.worker.postMessage({cmd:"register",algorithms:K}).then(function(mt){return N.initialized=!0}).catch(console.err)}return m(L,[{key:"layout",value:function(B){var j=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},R=j.layoutOptions,z=R===void 0?this.defaultLayoutOptions:R,K=j.logging,it=K===void 0?!1:K,st=j.measureExecutionTime,ut=st===void 0?!1:st;return B?this.worker.postMessage({cmd:"layout",graph:B,layoutOptions:z,options:{logging:it,measureExecutionTime:ut}}):Promise.reject(new Error("Missing mandatory parameter 'graph'."))}},{key:"knownLayoutAlgorithms",value:function(){return this.worker.postMessage({cmd:"algorithms"})}},{key:"knownLayoutOptions",value:function(){return this.worker.postMessage({cmd:"options"})}},{key:"knownLayoutCategories",value:function(){return this.worker.postMessage({cmd:"categories"})}},{key:"terminateWorker",value:function(){this.worker.terminate()}}]),L}();v.default=E;var _=function(){function L(N){var B=this;if(b(this,L),N===void 0)throw new Error("Missing mandatory parameter 'worker'.");this.resolvers={},this.worker=N,this.worker.onmessage=function(j){setTimeout(function(){B.receive(B,j)},0)}}return m(L,[{key:"postMessage",value:function(B){var j=this.id||0;this.id=j+1,B.id=j;var R=this;return new Promise(function(z,K){R.resolvers[j]=function(it,st){it?(R.convertGwtStyleError(it),K(it)):z(st)},R.worker.postMessage(B)})}},{key:"receive",value:function(B,j){var R=j.data,z=B.resolvers[R.id];z&&(delete B.resolvers[R.id],R.error?z(R.error):z(null,R.data))}},{key:"terminate",value:function(){this.worker.terminate&&this.worker.terminate()}},{key:"convertGwtStyleError",value:function(B){if(B){var j=B.__java$exception;j&&(j.cause&&j.cause.backingJsObject&&(B.cause=j.cause.backingJsObject,this.convertGwtStyleError(B.cause)),delete B.__java$exception)}}}]),L}()},{}],2:[function(f,p,v){(function(m){(function(){var b;typeof window<"u"?b=window:typeof m<"u"?b=m:typeof self<"u"&&(b=self);var E;function _(){}function L(){}function N(){}function B(){}function j(){}function R(){}function z(){}function K(){}function it(){}function st(){}function ut(){}function bt(){}function mt(){}function yt(){}function dt(){}function ht(){}function wt(){}function X(){}function pt(){}function U(){}function xt(){}function nt(){}function Ot(){}function Nt(){}function qt(){}function Ct(){}function Z(){}function Tt(){}function Ht(){}function It(){}function Ft(){}function ke(){}function pn(){}function Me(){}function ve(){}function Ge(){}function Ke(){}function we(){}function _e(){}function $t(){}function re(){}function ie(){}function Oe(){}function oe(){}function Ne(){}function me(){}function cn(){}function li(){}function ya(){}function da(){}function Oo(){}function ds(){}function Dr(){}function nr(){}function di(){}function Ee(){}function Yn(){}function He(){}function Ti(){}function gn(){}function ks(){}function qa(){}function La(){}function Gs(){}function No(){}function vs(){}function nu(){}function $s(){}function Lu(){}function fm(){}function av(){}function Uu(){}function Zl(){}function Pa(){}function Al(){}function ua(){}function bc(){}function Cc(){}function ga(){}function Ma(){}function Ha(){}function Ll(){}function _c(){}function ov(){}function Jl(){}function Z1(){}function Fd(){}function J1(){}function Bd(){}function E0(){}function Bi(){}function on(){}function kr(){}function Ei(){}function Jo(){}function vc(){}function tf(){}function Oc(){}function ef(){}function nf(){}function Xi(){}function Es(){}function xa(){}function xi(){}function Wc(){}function Ce(){}function gp(){}function Be(){}function Ff(){}function dg(){}function dm(){}function pk(){}function x3(){}function Ml(){}function T0(){}function cv(){}function F5(){}function jb(){}function B5(){}function l1(){}function td(){}function ed(){}function R5(){}function uv(){}function j5(){}function pp(){}function $5(){}function k3(){}function gm(){}function gg(){}function wL(){}function bl(){}function WP(){}function Sc(){}function QK(){}function $b(){}function ZK(){}function IT(){}function JK(){}function KP(){}function Bf(){}function pm(){}function mL(){}function YP(){}function bp(){}function bm(){}function tY(){}function zb(){}function eY(){}function nY(){}function z5(){}function DT(){}function XP(){}function bk(){}function rY(){}function vk(){}function iY(){}function sY(){}function aY(){}function oY(){}function cY(){}function uY(){}function lY(){}function hY(){}function fY(){}function dY(){}function gY(){}function yL(){}function pY(){}function bY(){}function OT(){}function QP(){}function q5(){}function vY(){}function wY(){}function mY(){}function yY(){}function xY(){}function NT(){}function xL(){}function ZP(){}function E3(){}function T3(){}function kY(){}function rf(){}function H5(){}function EY(){}function wk(){}function Rd(){}function TY(){}function CY(){}function _Y(){}function SY(){}function PT(){}function kL(){}function JP(){}function EL(){}function G5(){}function AY(){}function tF(){}function eF(){}function LY(){}function MY(){}function IY(){}function DY(){}function OY(){}function NY(){}function jd(){}function lv(){}function PY(){}function nF(){}function rF(){}function FY(){}function C3(){}function mk(){}function TL(){}function vm(){}function yk(){}function BY(){}function FT(){}function nd(){}function iF(){}function CL(){}function xk(){}function _L(){}function sF(){}function RY(){}function SL(){}function jY(){}function $Y(){}function aF(){}function V5(){}function oF(){}function U5(){}function zY(){}function AL(){}function qY(){}function HY(){}function GY(){}function VY(){}function cF(){}function UY(){}function WY(){}function KY(){}function uF(){}function YY(){}function XY(){}function QY(){}function lF(){}function ZY(){}function JY(){}function hF(){}function fF(){}function dF(){}function tX(){}function eX(){}function kk(){}function W5(){}function BT(){}function nX(){}function LL(){}function RT(){}function ML(){}function gF(){}function pF(){}function rX(){}function iX(){}function sX(){}function bF(){}function vF(){}function aX(){}function oX(){}function cX(){}function uX(){}function lX(){}function wF(){}function hX(){}function fX(){}function dX(){}function gX(){}function mF(){}function jT(){}function pX(){}function bX(){}function yF(){}function vX(){}function wX(){}function mX(){}function yX(){}function xX(){}function kX(){}function xF(){}function EX(){}function kF(){}function TX(){}function CX(){}function _X(){}function $T(){}function SX(){}function zT(){}function AX(){}function EF(){}function TF(){}function CF(){}function _F(){}function hv(){}function SF(){}function AF(){}function LF(){}function MF(){}function LX(){}function K5(){}function qT(){}function _3(){}function MX(){}function IX(){}function HT(){}function DX(){}function OX(){}function NX(){}function PX(){}function FX(){}function BX(){}function RX(){}function jX(){}function $X(){}function zX(){}function qX(){}function IL(){}function IF(){}function HX(){}function GX(){}function VX(){}function DF(){}function UX(){}function WX(){}function KX(){}function YX(){}function XX(){}function QX(){}function OF(){}function NF(){}function ZX(){}function PF(){}function FF(){}function JX(){}function tQ(){}function eQ(){}function DL(){}function nQ(){}function Ek(){}function rQ(){}function iQ(){}function sQ(){}function BF(){}function aQ(){}function oQ(){}function cQ(){}function uQ(){}function lQ(){}function hQ(){}function fQ(){}function dQ(){}function gQ(){}function pQ(){}function bQ(){}function vQ(){}function Y5(){}function RF(){}function wQ(){}function mQ(){}function yQ(){}function jF(){}function xQ(){}function GT(){}function kQ(){}function EQ(){}function TQ(){}function CQ(){}function _Q(){}function SQ(){}function AQ(){}function LQ(){}function MQ(){}function IQ(){}function X5(){}function DQ(){}function OQ(){}function NQ(){}function PQ(){}function FQ(){}function BQ(){}function RQ(){}function jQ(){}function VT(){}function $Q(){}function zQ(){}function qQ(){}function HQ(){}function GQ(){}function VQ(){}function UQ(){}function WQ(){}function Q5(){}function $F(){}function KQ(){}function OL(){}function YQ(){}function XQ(){}function QQ(){}function ZQ(){}function JQ(){}function tZ(){}function eZ(){}function zF(){}function nZ(){}function qF(){}function rZ(){}function HF(){}function GF(){}function VF(){}function iZ(){}function sZ(){}function UT(){}function NL(){}function WT(){}function aZ(){}function oZ(){}function PL(){}function cZ(){}function uZ(){}function UF(){}function lZ(){}function hZ(){}function fZ(){}function dZ(){}function gZ(){}function pZ(){}function bZ(){}function vZ(){}function wZ(){}function mZ(){}function pg(){}function yZ(){}function wm(){}function WF(){}function xZ(){}function kZ(){}function EZ(){}function TZ(){}function CZ(){}function _Z(){}function SZ(){}function AZ(){}function LZ(){}function Ac(){}function MZ(){}function KT(){}function tc(){}function Kc(){}function zi(){}function FL(){}function IZ(){}function DZ(){}function OZ(){}function Z5(){}function mm(){}function Ue(){}function NZ(){}function PZ(){}function FZ(){}function BZ(){}function RZ(){}function KF(){}function jZ(){}function $Z(){}function BL(){}function zZ(){}function Wu(){}function Mu(){}function qZ(){}function HZ(){}function GZ(){}function ym(){}function fv(){}function vp(){}function rd(){}function J5(){}function YT(){}function Tk(){}function YF(){}function VZ(){}function Ck(){}function XF(){}function UZ(){}function XT(){}function tx(){}function ex(){}function wp(){}function QF(){}function _k(){}function ZF(){}function JF(){}function nx(){}function qb(){}function C0(){}function mp(){}function S3(){}function Sk(){}function QT(){}function tB(){}function WZ(){}function eB(){}function nB(){}function rB(){}function Ak(){}function iB(){}function sB(){}function KZ(){}function Lk(){}function Mk(){}function xm(){}function RL(){}function YZ(){}function XZ(){}function QZ(){}function ZZ(){}function JZ(){}function tJ(){}function eJ(){}function nJ(){}function aB(){}function rJ(){}function iJ(){}function sJ(){}function oB(){}function Ik(){}function ZT(){}function cB(){}function aJ(){}function uB(){}function lB(){}function oJ(){}function JT(){}function km(){}function hB(){}function fB(){}function cJ(){}function uJ(){}function t9(){}function dB(){}function gB(){}function uc(){}function lJ(){}function pB(){}function e9(){}function hJ(){}function fJ(){}function n9(){}function bB(){}function r9(){}function i9(){}function Rf(){}function jL(){}function $L(){}function rx(){}function dJ(){}function gJ(){}function pJ(){}function bJ(){}function Em(){}function vB(){}function ix(){}function h1(){}function wB(){}function mB(){}function yB(){}function xB(){}function kB(){}function EB(){}function jf(){}function hu(){}function vJ(){}function wJ(){}function mJ(){}function fu(){}function s9(){}function TB(){}function CB(){}function sx(){}function yJ(){}function Dk(){}function xJ(){}function _B(){}function kJ(){}function EJ(){}function a9(){}function SB(){}function zL(){}function o9(){}function TJ(){}function CJ(){}function qL(){}function c9(){}function f1(){}function Ok(){}function _J(){}function Nk(){}function HL(){}function Hb(){}function u9(){}function GL(){}function $f(){}function l9(){}function d1(){}function g1(){}function SJ(){}function AJ(){}function A3(){}function Pk(){}function Fk(){}function h9(){}function LJ(){}function ax(){}function VL(){}function AB(){}function MJ(){}function f9(){I9()}function IJ(){Sit()}function LB(){i_()}function UL(){Kz()}function DJ(){P4t()}function d9(){Zf()}function OJ(){U3t()}function NJ(){JI()}function PJ(){wM()}function FJ(){vM()}function BJ(){GM()}function MB(){yGt()}function RJ(){Xx()}function jJ(){LR()}function $J(){IJt()}function IB(){Gee()}function zJ(){ute()}function qJ(){_Qt()}function g9(){J8()}function HJ(){Zp()}function GJ(){Vee()}function VJ(){mZt()}function UJ(){Axt()}function WJ(){Dse()}function KJ(){SQt()}function DB(){Te()}function YJ(){CQt()}function OB(){Uee()}function XJ(){Yne()}function WL(){LQt()}function QJ(){gte()}function NB(){xGt()}function ZJ(){b5t()}function PB(){ay()}function JJ(){mne()}function FB(){rD()}function BB(){nat()}function RB(){ust()}function KL(){hw()}function L3(){fyt()}function p9(){AQt()}function id(){$ue()}function jB(){d5t()}function Bk(){Kst()}function YL(){O$()}function ttt(){eq()}function yp(){ci()}function $B(){bz()}function zB(){y3t()}function qB(){yq()}function th(){pKt()}function XL(){hit()}function HB(){txt()}function Rk(t){On(t)}function b9(t){this.a=t}function jk(t){this.a=t}function GB(t){this.a=t}function ox(t){this.a=t}function dv(t){this.a=t}function $k(t){this.a=t}function VB(t){this.a=t}function ett(t){this.a=t}function QL(t){this.a=t}function M3(t){this.a=t}function ZL(t){this.a=t}function v9(t){this.a=t}function ntt(t){this.a=t}function w9(t){this.a=t}function m9(t){this.a=t}function cx(t){this.a=t}function JL(t){this.a=t}function tM(t){this.a=t}function rtt(t){this.a=t}function itt(t){this.a=t}function stt(t){this.a=t}function UB(t){this.b=t}function att(t){this.c=t}function ott(t){this.a=t}function ctt(t){this.a=t}function utt(t){this.a=t}function ltt(t){this.a=t}function htt(t){this.a=t}function ftt(t){this.a=t}function dtt(t){this.a=t}function gtt(t){this.a=t}function ux(t){this.a=t}function ptt(t){this.a=t}function zk(t){this.a=t}function kh(t){this.a=t}function btt(t){this.a=t}function lx(t){this.a=t}function qk(t){this.a=t}function y9(t){this.a=t}function Hk(t){this.a=t}function bg(){this.a=[]}function vtt(t,e){t.a=e}function ept(t,e){t.a=e}function npt(t,e){t.b=e}function rpt(t,e){t.b=e}function ipt(t,e){t.b=e}function eM(t,e){t.j=e}function spt(t,e){t.g=e}function apt(t,e){t.i=e}function wtt(t,e){t.c=e}function p1(t,e){t.d=e}function mtt(t,e){t.d=e}function opt(t,e){t.c=e}function _0(t,e){t.k=e}function ytt(t,e){t.c=e}function WB(t,e){t.c=e}function KB(t,e){t.a=e}function xtt(t,e){t.a=e}function cpt(t,e){t.f=e}function upt(t,e){t.a=e}function gv(t,e){t.b=e}function nM(t,e){t.d=e}function x9(t,e){t.i=e}function YB(t,e){t.o=e}function lpt(t,e){t.r=e}function hpt(t,e){t.a=e}function XB(t,e){t.b=e}function pv(t,e){t.e=e}function ktt(t,e){t.f=e}function k9(t,e){t.g=e}function hx(t,e){t.e=e}function fpt(t,e){t.f=e}function Gk(t,e){t.f=e}function Ett(t,e){t.n=e}function vg(t,e){t.a=e}function dpt(t,e){t.a=e}function I3(t,e){t.c=e}function Ttt(t,e){t.c=e}function Ctt(t,e){t.d=e}function QB(t,e){t.e=e}function ZB(t,e){t.g=e}function _tt(t,e){t.a=e}function Vk(t,e){t.c=e}function E9(t,e){t.d=e}function gpt(t,e){t.e=e}function Stt(t,e){t.f=e}function Att(t,e){t.j=e}function Ltt(t,e){t.a=e}function ppt(t,e){t.b=e}function wc(t,e){t.a=e}function JB(t){t.b=t.a}function Mtt(t){t.c=t.d.d}function fx(t){this.d=t}function wg(t){this.a=t}function Tm(t){this.a=t}function rM(t){this.a=t}function b1(t){this.a=t}function dx(t){this.a=t}function Itt(t){this.a=t}function tR(t){this.a=t}function D3(t){this.a=t}function iM(t){this.a=t}function Cm(t){this.a=t}function eR(t){this.a=t}function v1(t){this.a=t}function y(t){this.a=t}function g(t){this.a=t}function x(t){this.b=t}function T(t){this.b=t}function A(t){this.b=t}function D(t){this.a=t}function O(t){this.a=t}function $(t){this.a=t}function q(t){this.c=t}function S(t){this.c=t}function G(t){this.c=t}function W(t){this.a=t}function et(t){this.a=t}function at(t){this.a=t}function lt(t){this.a=t}function ft(t){this.a=t}function At(t){this.a=t}function kt(t){this.a=t}function Mt(t){this.a=t}function Dt(t){this.a=t}function jt(t){this.a=t}function Zt(t){this.a=t}function Kt(t){this.a=t}function zt(t){this.a=t}function ee(t){this.a=t}function Vt(t){this.a=t}function fe(t){this.a=t}function ge(t){this.a=t}function ne(t){this.a=t}function Pe(t){this.a=t}function pe(t){this.a=t}function bn(t){this.a=t}function ze(t){this.a=t}function Ve(t){this.a=t}function En(t){this.a=t}function Dn(t){this.a=t}function Kn(t){this.a=t}function Sn(t){this.a=t}function Wn(t){this.a=t}function rr(t){this.a=t}function vr(t){this.a=t}function ur(t){this.a=t}function tr(t){this.a=t}function wn(t){this.a=t}function gr(t){this.a=t}function fr(t){this.a=t}function Jr(t){this.a=t}function wi(t){this.a=t}function Ks(t){this.a=t}function ka(t){this.a=t}function Ci(t){this.a=t}function hi(t){this.a=t}function gs(t){this.a=t}function qi(t){this.a=t}function Si(t){this.a=t}function Ui(t){this.a=t}function Ga(t){this.e=t}function Ys(t){this.a=t}function zs(t){this.a=t}function Er(t){this.a=t}function Qt(t){this.a=t}function jn(t){this.a=t}function _r(t){this.a=t}function ir(t){this.a=t}function sr(t){this.a=t}function Ia(t){this.a=t}function $r(t){this.a=t}function Ki(t){this.a=t}function Po(t){this.a=t}function Nc(t){this.a=t}function Za(t){this.a=t}function mc(t){this.a=t}function Ea(t){this.a=t}function Ja(t){this.a=t}function vl(t){this.a=t}function zf(t){this.a=t}function xp(t){this.a=t}function kp(t){this.a=t}function qf(t){this.a=t}function mg(t){this.a=t}function sd(t){this.a=t}function bv(t){this.a=t}function _m(t){this.a=t}function gx(t){this.a=t}function O3(t){this.a=t}function px(t){this.a=t}function T9(t){this.a=t}function N3(t){this.a=t}function $d(t){this.a=t}function w1(t){this.a=t}function zd(t){this.a=t}function C9(t){this.a=t}function Gb(t){this.a=t}function nR(t){this.a=t}function Dtt(t){this.a=t}function Ott(t){this.a=t}function Ntt(t){this.a=t}function Ptt(t){this.a=t}function Ftt(t){this.a=t}function Btt(t){this.a=t}function Rtt(t){this.a=t}function Uk(t){this.a=t}function sM(t){this.a=t}function _9(t){this.a=t}function rR(t){this.a=t}function iR(t){this.a=t}function jtt(t){this.a=t}function Ep(t){this.a=t}function aM(t){this.a=t}function sR(t){this.a=t}function Wk(t){this.c=t}function Tp(t){this.b=t}function $tt(t){this.a=t}function l$t(t){this.a=t}function h$t(t){this.a=t}function f$t(t){this.a=t}function d$t(t){this.a=t}function g$t(t){this.a=t}function p$t(t){this.a=t}function b$t(t){this.a=t}function v$t(t){this.a=t}function w$t(t){this.a=t}function m$t(t){this.a=t}function y$t(t){this.a=t}function x$t(t){this.a=t}function k$t(t){this.a=t}function E$t(t){this.a=t}function T$t(t){this.a=t}function C$t(t){this.a=t}function _$t(t){this.a=t}function S$t(t){this.a=t}function A$t(t){this.a=t}function L$t(t){this.a=t}function M$t(t){this.a=t}function I$t(t){this.a=t}function D$t(t){this.a=t}function Cp(t){this.a=t}function bx(t){this.a=t}function O$t(t){this.a=t}function N$t(t){this.a=t}function P$t(t){this.a=t}function F$t(t){this.a=t}function B$t(t){this.a=t}function R$t(t){this.a=t}function j$t(t){this.a=t}function $$t(t){this.a=t}function z$t(t){this.a=t}function q$t(t){this.a=t}function H$t(t){this.a=t}function G$t(t){this.a=t}function V$t(t){this.a=t}function U$t(t){this.a=t}function W$t(t){this.a=t}function K$t(t){this.a=t}function aR(t){this.a=t}function Y$t(t){this.a=t}function X$t(t){this.a=t}function Q$t(t){this.a=t}function Z$t(t){this.a=t}function J$t(t){this.a=t}function tzt(t){this.a=t}function ezt(t){this.a=t}function nzt(t){this.a=t}function rzt(t){this.a=t}function izt(t){this.a=t}function szt(t){this.a=t}function azt(t){this.a=t}function ozt(t){this.a=t}function czt(t){this.a=t}function uzt(t){this.a=t}function lzt(t){this.a=t}function hzt(t){this.a=t}function fzt(t){this.a=t}function dzt(t){this.a=t}function gzt(t){this.a=t}function pzt(t){this.a=t}function bzt(t){this.a=t}function vzt(t){this.a=t}function wzt(t){this.a=t}function mzt(t){this.a=t}function yzt(t){this.a=t}function xzt(t){this.a=t}function kzt(t){this.a=t}function bpt(t){this.a=t}function Gi(t){this.b=t}function Ezt(t){this.f=t}function vpt(t){this.a=t}function Tzt(t){this.a=t}function Czt(t){this.a=t}function _zt(t){this.a=t}function Szt(t){this.a=t}function Azt(t){this.a=t}function Lzt(t){this.a=t}function Mzt(t){this.a=t}function Izt(t){this.a=t}function oM(t){this.a=t}function Dzt(t){this.a=t}function Ozt(t){this.b=t}function wpt(t){this.c=t}function oR(t){this.e=t}function Nzt(t){this.a=t}function cR(t){this.a=t}function uR(t){this.a=t}function ztt(t){this.a=t}function Pzt(t){this.a=t}function Fzt(t){this.d=t}function mpt(t){this.a=t}function ypt(t){this.a=t}function vv(t){this.e=t}function KWe(){this.a=0}function P3(){pUt(this)}function le(){Yet(this)}function Cr(){Yu(this)}function qtt(){mXt(this)}function Bzt(){}function wv(){this.c=tLt}function YWe(t,e){e.Wb(t)}function Rzt(t,e){t.b+=e}function jzt(t){t.b=new set}function rt(t){return t.e}function XWe(t){return t.a}function QWe(t){return t.a}function ZWe(t){return t.a}function JWe(t){return t.a}function tKe(t){return t.a}function eKe(){return null}function nKe(){return null}function rKe(){abt(),g5n()}function iKe(t){t.b.tf(t.e)}function S9(t,e){t.b=e-t.b}function A9(t,e){t.a=e-t.a}function $zt(t,e){e.ad(t.a)}function sKe(t,e){Fs(e,t)}function aKe(t,e,n){t.Od(n,e)}function cM(t,e){t.e=e,e.b=t}function xpt(t){hd(),this.a=t}function zzt(t){hd(),this.a=t}function qzt(t){hd(),this.a=t}function kpt(t){Gm(),this.a=t}function Hzt(t){T8(),kut.be(t)}function Vb(){ZUt.call(this)}function Ept(){ZUt.call(this)}function Tpt(){Vb.call(this)}function Htt(){Vb.call(this)}function Gzt(){Vb.call(this)}function uM(){Vb.call(this)}function Iu(){Vb.call(this)}function L9(){Vb.call(this)}function Or(){Vb.call(this)}function eh(){Vb.call(this)}function Vzt(){Vb.call(this)}function lc(){Vb.call(this)}function Uzt(){Vb.call(this)}function Wzt(){this.a=this}function lR(){this.Bb|=256}function Kzt(){this.b=new XVt}function Cpt(){Cpt=Z,new Cr}function _pt(){Tpt.call(this)}function Yzt(t,e){t.length=e}function hR(t,e){ue(t.a,e)}function oKe(t,e){B4t(t.c,e)}function cKe(t,e){Ns(t.b,e)}function uKe(t,e){qz(t.a,e)}function lKe(t,e){Fit(t.a,e)}function Kk(t,e){mi(t.e,e)}function vx(t){iq(t.c,t.b)}function hKe(t,e){t.kc().Nb(e)}function Spt(t){this.a=uln(t)}function qs(){this.a=new Cr}function Xzt(){this.a=new Cr}function fR(){this.a=new le}function Gtt(){this.a=new le}function Apt(){this.a=new le}function Eh(){this.a=new av}function Ub(){this.a=new SJt}function Lpt(){this.a=new F5}function Mpt(){this.a=new fGt}function Qzt(){this.a=new tZt}function Ipt(){this.a=new bQt}function Dpt(){this.a=new $Wt}function Zzt(){this.a=new le}function Opt(){this.a=new le}function Jzt(){this.a=new le}function tqt(){this.a=new le}function eqt(){this.d=new le}function nqt(){this.a=new qs}function rqt(){this.a=new Cr}function iqt(){this.b=new Cr}function sqt(){this.b=new le}function Npt(){this.e=new le}function aqt(){this.d=new le}function oqt(){this.a=new HJ}function cqt(){le.call(this)}function Ppt(){fR.call(this)}function uqt(){xj.call(this)}function lqt(){Opt.call(this)}function Vtt(){M9.call(this)}function M9(){Bzt.call(this)}function wx(){Bzt.call(this)}function Fpt(){wx.call(this)}function hqt(){WXt.call(this)}function fqt(){WXt.call(this)}function dqt(){Hpt.call(this)}function gqt(){Hpt.call(this)}function pqt(){Hpt.call(this)}function bqt(){Gpt.call(this)}function Du(){Qi.call(this)}function Bpt(){ym.call(this)}function Rpt(){ym.call(this)}function vqt(){Oqt.call(this)}function wqt(){Oqt.call(this)}function mqt(){Cr.call(this)}function yqt(){Cr.call(this)}function xqt(){Cr.call(this)}function kqt(){qs.call(this)}function Utt(){zee.call(this)}function Eqt(){lR.call(this)}function Wtt(){g2t.call(this)}function Ktt(){g2t.call(this)}function jpt(){Cr.call(this)}function Ytt(){Cr.call(this)}function Tqt(){Cr.call(this)}function $pt(){_k.call(this)}function Cqt(){_k.call(this)}function _qt(){$pt.call(this)}function Sqt(){VL.call(this)}function Aqt(t){fee.call(this,t)}function Lqt(t){fee.call(this,t)}function zpt(t){QL.call(this,t)}function qpt(t){nGt.call(this,t)}function fKe(t){qpt.call(this,t)}function dKe(t){nGt.call(this,t)}function Yk(){this.a=new Qi}function Hpt(){this.a=new qs}function Gpt(){this.a=new Cr}function Mqt(){this.a=new le}function Iqt(){this.j=new le}function Vpt(){this.a=new VF}function Dqt(){this.a=new SHt}function Oqt(){this.a=new QF}function Xtt(){Xtt=Z,but=new Qqt}function Qtt(){Qtt=Z,put=new Xqt}function I9(){I9=Z,gut=new L}function dR(){dR=Z,mut=new XUt}function gKe(t){qpt.call(this,t)}function pKe(t){qpt.call(this,t)}function Nqt(t){Lrt.call(this,t)}function Pqt(t){Lrt.call(this,t)}function Fqt(t){cKt.call(this,t)}function Ztt(t){P0n.call(this,t)}function mv(t){Mm.call(this,t)}function D9(t){CR.call(this,t)}function Upt(t){CR.call(this,t)}function Bqt(t){CR.call(this,t)}function Go(t){kYt.call(this,t)}function Rqt(t){Go.call(this,t)}function mx(){Hk.call(this,{})}function gR(t){u8(),this.a=t}function O9(t){t.b=null,t.c=0}function bKe(t,e){t.e=e,jce(t,e)}function vKe(t,e){t.a=e,xgn(t)}function Jtt(t,e,n){t.a[e.g]=n}function wKe(t,e,n){B1n(n,t,e)}function mKe(t,e){GQe(e.i,t.n)}function jqt(t,e){Vcn(t).td(e)}function yKe(t,e){return t*t/e}function $qt(t,e){return t.g-e.g}function xKe(t){return new y9(t)}function kKe(t){return new Hm(t)}function pR(t){Go.call(this,t)}function mo(t){Go.call(this,t)}function zqt(t){Go.call(this,t)}function tet(t){kYt.call(this,t)}function eet(t){lyt(),this.a=t}function qqt(t){gKt(),this.a=t}function Sm(t){Ont(),this.f=t}function net(t){Ont(),this.f=t}function Xk(t){Go.call(this,t)}function Pn(t){Go.call(this,t)}function Fo(t){Go.call(this,t)}function Hqt(t){Go.call(this,t)}function yx(t){Go.call(this,t)}function je(t){return On(t),t}function Xt(t){return On(t),t}function lM(t){return On(t),t}function Wpt(t){return On(t),t}function EKe(t){return On(t),t}function N9(t){return t.b==t.c}function Am(t){return!!t&&t.b}function TKe(t){return!!t&&t.k}function CKe(t){return!!t&&t.j}function wl(t){On(t),this.a=t}function Kpt(t){return l2(t),t}function P9(t){awt(t,t.length)}function yg(t){Go.call(this,t)}function ad(t){Go.call(this,t)}function ret(t){Go.call(this,t)}function F3(t){Go.call(this,t)}function F9(t){Go.call(this,t)}function Fr(t){Go.call(this,t)}function iet(t){D2t.call(this,t,0)}function set(){$wt.call(this,12,3)}function Ypt(){Ypt=Z,X8t=new pt}function Gqt(){Gqt=Z,Y8t=new _}function bR(){bR=Z,sS=new mt}function Vqt(){Vqt=Z,yge=new dt}function Uqt(){throw rt(new Or)}function Xpt(){throw rt(new Or)}function Wqt(){throw rt(new Or)}function _Ke(){throw rt(new Or)}function SKe(){throw rt(new Or)}function AKe(){throw rt(new Or)}function aet(){this.a=Br(Ar(Ka))}function xx(t){hd(),this.a=Ar(t)}function Kqt(t,e){t.Td(e),e.Sd(t)}function LKe(t,e){t.a.ec().Mc(e)}function MKe(t,e,n){t.c.lf(e,n)}function Qpt(t){mo.call(this,t)}function od(t){Pn.call(this,t)}function xg(){dx.call(this,"")}function B9(){dx.call(this,"")}function _p(){dx.call(this,"")}function Lm(){dx.call(this,"")}function Zpt(t){mo.call(this,t)}function Qk(t){T.call(this,t)}function oet(t){fj.call(this,t)}function Yqt(t){Qk.call(this,t)}function Xqt(){w9.call(this,null)}function Qqt(){w9.call(this,null)}function vR(){vR=Z,T8()}function Zqt(){Zqt=Z,Mge=ldn()}function Jqt(t){return t.a?t.b:0}function IKe(t){return t.a?t.b:0}function DKe(t,e){return t.a-e.a}function OKe(t,e){return t.a-e.a}function NKe(t,e){return t.a-e.a}function wR(t,e){return Mmt(t,e)}function ot(t,e){return mQt(t,e)}function PKe(t,e){return e in t.a}function tHt(t,e){return t.f=e,t}function FKe(t,e){return t.b=e,t}function eHt(t,e){return t.c=e,t}function BKe(t,e){return t.g=e,t}function Jpt(t,e){return t.a=e,t}function tbt(t,e){return t.f=e,t}function RKe(t,e){return t.k=e,t}function ebt(t,e){return t.a=e,t}function jKe(t,e){return t.e=e,t}function nbt(t,e){return t.e=e,t}function $Ke(t,e){return t.f=e,t}function zKe(t,e){t.b=!0,t.d=e}function qKe(t,e){t.b=new yo(e)}function HKe(t,e,n){e.td(t.a[n])}function GKe(t,e,n){e.we(t.a[n])}function VKe(t,e){return t.b-e.b}function UKe(t,e){return t.g-e.g}function WKe(t,e){return t.s-e.s}function KKe(t,e){return t?0:e-1}function nHt(t,e){return t?0:e-1}function YKe(t,e){return t?e-1:0}function XKe(t,e){return e.Yf(t)}function yv(t,e){return t.b=e,t}function mR(t,e){return t.a=e,t}function xv(t,e){return t.c=e,t}function kv(t,e){return t.d=e,t}function Ev(t,e){return t.e=e,t}function rbt(t,e){return t.f=e,t}function R9(t,e){return t.a=e,t}function Zk(t,e){return t.b=e,t}function Jk(t,e){return t.c=e,t}function Ze(t,e){return t.c=e,t}function kn(t,e){return t.b=e,t}function Je(t,e){return t.d=e,t}function tn(t,e){return t.e=e,t}function QKe(t,e){return t.f=e,t}function en(t,e){return t.g=e,t}function nn(t,e){return t.a=e,t}function rn(t,e){return t.i=e,t}function sn(t,e){return t.j=e,t}function rHt(t,e){return t.k=e,t}function ZKe(t,e){return t.j=e,t}function JKe(t,e){Zp(),Uo(e,t)}function tYe(t,e,n){Ktn(t.a,e,n)}function iHt(t){xXt.call(this,t)}function ibt(t){xXt.call(this,t)}function yR(t){bnt.call(this,t)}function sHt(t){vln.call(this,t)}function Sp(t){Kv.call(this,t)}function aHt(t){irt.call(this,t)}function oHt(t){irt.call(this,t)}function cHt(){u2t.call(this,"")}function Ta(){this.a=0,this.b=0}function uHt(){this.b=0,this.a=0}function lHt(t,e){t.b=0,ty(t,e)}function eYe(t,e){t.c=e,t.b=!0}function hHt(t,e){return t.c._b(e)}function Hf(t){return t.e&&t.e()}function cet(t){return t?t.d:null}function fHt(t,e){return Rre(t.b,e)}function nYe(t){return t?t.g:null}function rYe(t){return t?t.i:null}function Ap(t){return L0(t),t.o}function Tv(){Tv=Z,A4e=x1n()}function dHt(){dHt=Z,ta=Odn()}function t8(){t8=Z,JAt=E1n()}function gHt(){gHt=Z,f5e=k1n()}function sbt(){sbt=Z,pc=wgn()}function abt(){abt=Z,Tb=z8()}function pHt(){throw rt(new Or)}function bHt(){throw rt(new Or)}function vHt(){throw rt(new Or)}function wHt(){throw rt(new Or)}function mHt(){throw rt(new Or)}function yHt(){throw rt(new Or)}function xR(t){this.a=new kx(t)}function obt(t){phe(),S5n(this,t)}function Lp(t){this.a=new Bnt(t)}function B3(t,e){for(;t.ye(e););}function cbt(t,e){for(;t.sd(e););}function R3(t,e){return t.a+=e,t}function uet(t,e){return t.a+=e,t}function kg(t,e){return t.a+=e,t}function Cv(t,e){return t.a+=e,t}function j9(t){return $p(t),t.a}function kR(t){return t.b!=t.d.c}function xHt(t){return t.l|t.m<<22}function ubt(t,e){return t.d[e.p]}function kHt(t,e){return ovn(t,e)}function lbt(t,e,n){t.splice(e,n)}function EHt(t){t.c?aue(t):oue(t)}function ER(t){this.a=0,this.b=t}function THt(){this.a=new dD(f_t)}function CHt(){this.b=new dD(ZCt)}function _Ht(){this.b=new dD(zht)}function SHt(){this.b=new dD(zht)}function AHt(){throw rt(new Or)}function LHt(){throw rt(new Or)}function MHt(){throw rt(new Or)}function IHt(){throw rt(new Or)}function DHt(){throw rt(new Or)}function OHt(){throw rt(new Or)}function NHt(){throw rt(new Or)}function PHt(){throw rt(new Or)}function FHt(){throw rt(new Or)}function BHt(){throw rt(new Or)}function iYe(){throw rt(new lc)}function sYe(){throw rt(new lc)}function hM(t){this.a=new RHt(t)}function RHt(t){bon(this,t,bdn())}function fM(t){return!t||sXt(t)}function dM(t){return U1[t]!=-1}function aYe(){zH!=0&&(zH=0),qH=-1}function jHt(){dut==null&&(dut=[])}function oYe(t,e){Hst(Wt(t.a),e)}function cYe(t,e){Hst(Wt(t.a),e)}function gM(t,e){W3.call(this,t,e)}function e8(t,e){gM.call(this,t,e)}function hbt(t,e){this.b=t,this.c=e}function $Ht(t,e){this.b=t,this.a=e}function zHt(t,e){this.a=t,this.b=e}function qHt(t,e){this.a=t,this.b=e}function HHt(t,e){this.a=t,this.b=e}function GHt(t,e){this.a=t,this.b=e}function VHt(t,e){this.a=t,this.b=e}function UHt(t,e){this.a=t,this.b=e}function WHt(t,e){this.a=t,this.b=e}function KHt(t,e){this.a=t,this.b=e}function YHt(t,e){this.b=t,this.a=e}function XHt(t,e){this.b=t,this.a=e}function QHt(t,e){this.b=t,this.a=e}function ZHt(t,e){this.b=t,this.a=e}function Gr(t,e){this.f=t,this.g=e}function n8(t,e){this.e=t,this.d=e}function _v(t,e){this.g=t,this.i=e}function het(t,e){this.a=t,this.b=e}function JHt(t,e){this.a=t,this.f=e}function tGt(t,e){this.b=t,this.c=e}function uYe(t,e){this.a=t,this.b=e}function eGt(t,e){this.a=t,this.b=e}function fet(t,e){this.a=t,this.b=e}function nGt(t){x2t(t.dc()),this.c=t}function TR(t){this.b=u(Ar(t),83)}function rGt(t){this.a=u(Ar(t),83)}function Mm(t){this.a=u(Ar(t),15)}function iGt(t){this.a=u(Ar(t),15)}function CR(t){this.b=u(Ar(t),47)}function _R(){this.q=new b.Date}function qd(){qd=Z,hEt=new Tt}function r8(){r8=Z,ZE=new Nt}function $9(t){return t.f.c+t.g.c}function pM(t,e){return t.b.Hc(e)}function sGt(t,e){return t.b.Ic(e)}function aGt(t,e){return t.b.Qc(e)}function oGt(t,e){return t.b.Hc(e)}function cGt(t,e){return t.c.uc(e)}function S0(t,e){return t.a._b(e)}function uGt(t,e){return yi(t.c,e)}function lGt(t,e){return kl(t.b,e)}function hGt(t,e){return t>e&&e<A_}function lYe(t,e){return t.Gc(e),t}function hYe(t,e){return Ua(t,e),t}function fYe(t){return tXt(),t?mge:wge}function kx(t){Xne.call(this,t,0)}function fGt(){Bnt.call(this,null)}function fbt(){jrt.call(this,null)}function Ex(t){this.c=t,Vte(this)}function Qi(){EUt(this),_h(this)}function us(t,e){$p(t),t.a.Nb(e)}function dGt(t,e){return t.Gc(e),t}function dYe(t,e){return t.a.f=e,t}function gGt(t,e){return t.a.d=e,t}function pGt(t,e){return t.a.g=e,t}function bGt(t,e){return t.a.j=e,t}function sf(t,e){return t.a.a=e,t}function af(t,e){return t.a.d=e,t}function of(t,e){return t.a.e=e,t}function cf(t,e){return t.a.g=e,t}function bM(t,e){return t.a.f=e,t}function gYe(t){return t.b=!1,t}function i8(){i8=Z,EEt=new QVt}function SR(){SR=Z,Dge=new ZVt}function s8(){s8=Z,LEt=new Oe}function vGt(){vGt=Z,Dbe=new pm}function AR(){AR=Z,Rut=new uWt}function Wb(){Wb=Z,JE=new gn}function z9(){z9=Z,Nbe=new mL}function wGt(){wGt=Z,qge=new No}function dbt(){dbt=Z,xbe=new uv}function vM(){vM=Z,Bbe=new Ta}function mGt(){mGt=Z,kbe=new wL}function gbt(){gbt=Z,Ebe=new gYt}function pbt(){pbt=Z,_7t=new gm}function wM(){wM=Z,Rbe=new OT}function yGt(){yGt=Z,qbe=new lv}function q9(){q9=Z,Kbe=new SX}function LR(){LR=Z,z4=new RX}function xGt(){xGt=Z,bye=new Hs}function MR(){MR=Z,qht=new EGt}function IR(){IR=Z,Hht=new EWt}function H9(){H9=Z,jO=new dXt}function DR(){DR=Z,Rwe=new $Z}function kGt(){Hee(),this.c=new set}function EGt(){Gr.call(this,h1e,0)}function Sv(t,e){p2(t.c.b,e.c,e)}function G9(t,e){p2(t.c.c,e.b,e)}function pYe(t,e,n){xo(t.d,e.f,n)}function bYe(t,e,n,r){Uhn(t,r,e,n)}function vYe(t,e,n,r){g2n(r,t,e,n)}function wYe(t,e,n,r){I4n(r,t,e,n)}function OR(t,e){return t.a=e.g,t}function TGt(t,e){return e1n(t.a,e)}function mYe(t){return t.b?t.b:t.a}function yYe(t){return(t.c+t.a)/2}function Im(){Im=Z,_4e=new GZ}function CGt(){CGt=Z,N4e=new VZ}function _Gt(){_Gt=Z,W4e=new yqt}function SGt(){SGt=Z,K4e=new xqt}function Mp(){Mp=Z,Uh=new jpt}function bbt(){bbt=Z,ZAt=new Tqt}function V9(){V9=Z,Sft=new LUt}function Eg(){Eg=Z,hN=new MUt}function det(){det=Z,c5e=new pJ}function to(){to=Z,l5e=new bJ}function NR(){NR=Z,nU=new Cr}function vbt(){vbt=Z,uLt=new le}function Ip(){Ip=Z,Ab=new MJ}function xYe(t){b.clearTimeout(t)}function wbt(t){this.a=u(Ar(t),224)}function PR(t){return u(t,42).cd()}function mM(t){return t.b<t.d.gc()}function AGt(t,e){return Mnt(t.a,e)}function LGt(t,e){return yc(t,e)>0}function get(t,e){return yc(t,e)<0}function U9(t,e){return t.a.get(e)}function kYe(t,e){return e.split(t)}function MGt(t,e){return kl(t.e,e)}function mbt(t){return On(t),!1}function FR(t){_n.call(this,t,21)}function EYe(t,e){oQt.call(this,t,e)}function BR(t,e){Gr.call(this,t,e)}function pet(t,e){Gr.call(this,t,e)}function ybt(t){Xnt(),cKt.call(this,t)}function xbt(t,e){hYt(t,t.length,e)}function yM(t,e){$Yt(t,t.length,e)}function TYe(t,e,n){e.ud(t.a.Ge(n))}function CYe(t,e,n){e.we(t.a.Fe(n))}function _Ye(t,e,n){e.td(t.a.Kb(n))}function SYe(t,e,n){t.Mb(n)&&e.td(n)}function W9(t,e,n){t.splice(e,0,n)}function AYe(t,e){return Nu(t.e,e)}function RR(t,e){this.d=t,this.e=e}function IGt(t,e){this.b=t,this.a=e}function DGt(t,e){this.b=t,this.a=e}function kbt(t,e){this.b=t,this.a=e}function OGt(t,e){this.a=t,this.b=e}function NGt(t,e){this.a=t,this.b=e}function PGt(t,e){this.a=t,this.b=e}function FGt(t,e){this.a=t,this.b=e}function Tx(t,e){this.a=t,this.b=e}function Ebt(t,e){this.b=t,this.a=e}function Tbt(t,e){this.b=t,this.a=e}function jR(t,e){Gr.call(this,t,e)}function $R(t,e){Gr.call(this,t,e)}function Cbt(t,e){Gr.call(this,t,e)}function _bt(t,e){Gr.call(this,t,e)}function j3(t,e){Gr.call(this,t,e)}function bet(t,e){Gr.call(this,t,e)}function vet(t,e){Gr.call(this,t,e)}function wet(t,e){Gr.call(this,t,e)}function zR(t,e){Gr.call(this,t,e)}function Sbt(t,e){Gr.call(this,t,e)}function met(t,e){Gr.call(this,t,e)}function xM(t,e){Gr.call(this,t,e)}function qR(t,e){Gr.call(this,t,e)}function yet(t,e){Gr.call(this,t,e)}function K9(t,e){Gr.call(this,t,e)}function Abt(t,e){Gr.call(this,t,e)}function ws(t,e){Gr.call(this,t,e)}function HR(t,e){Gr.call(this,t,e)}function BGt(t,e){this.a=t,this.b=e}function RGt(t,e){this.a=t,this.b=e}function jGt(t,e){this.a=t,this.b=e}function $Gt(t,e){this.a=t,this.b=e}function zGt(t,e){this.a=t,this.b=e}function qGt(t,e){this.a=t,this.b=e}function HGt(t,e){this.a=t,this.b=e}function GGt(t,e){this.a=t,this.b=e}function VGt(t,e){this.a=t,this.b=e}function Lbt(t,e){this.b=t,this.a=e}function UGt(t,e){this.b=t,this.a=e}function WGt(t,e){this.b=t,this.a=e}function KGt(t,e){this.b=t,this.a=e}function a8(t,e){this.c=t,this.d=e}function YGt(t,e){this.e=t,this.d=e}function XGt(t,e){this.a=t,this.b=e}function QGt(t,e){this.b=e,this.c=t}function GR(t,e){Gr.call(this,t,e)}function kM(t,e){Gr.call(this,t,e)}function xet(t,e){Gr.call(this,t,e)}function Y9(t,e){Gr.call(this,t,e)}function Mbt(t,e){Gr.call(this,t,e)}function ket(t,e){Gr.call(this,t,e)}function Eet(t,e){Gr.call(this,t,e)}function EM(t,e){Gr.call(this,t,e)}function Ibt(t,e){Gr.call(this,t,e)}function Tet(t,e){Gr.call(this,t,e)}function X9(t,e){Gr.call(this,t,e)}function Dbt(t,e){Gr.call(this,t,e)}function Q9(t,e){Gr.call(this,t,e)}function Z9(t,e){Gr.call(this,t,e)}function Dm(t,e){Gr.call(this,t,e)}function Cet(t,e){Gr.call(this,t,e)}function _et(t,e){Gr.call(this,t,e)}function Obt(t,e){Gr.call(this,t,e)}function J9(t,e){Gr.call(this,t,e)}function Aet(t,e){Gr.call(this,t,e)}function VR(t,e){Gr.call(this,t,e)}function TM(t,e){Gr.call(this,t,e)}function CM(t,e){Gr.call(this,t,e)}function Cx(t,e){Gr.call(this,t,e)}function Let(t,e){Gr.call(this,t,e)}function Nbt(t,e){Gr.call(this,t,e)}function Met(t,e){Gr.call(this,t,e)}function Iet(t,e){Gr.call(this,t,e)}function Pbt(t,e){Gr.call(this,t,e)}function Det(t,e){Gr.call(this,t,e)}function Oet(t,e){Gr.call(this,t,e)}function Net(t,e){Gr.call(this,t,e)}function Pet(t,e){Gr.call(this,t,e)}function Fbt(t,e){Gr.call(this,t,e)}function ZGt(t,e){this.b=t,this.a=e}function JGt(t,e){this.a=t,this.b=e}function tVt(t,e){this.a=t,this.b=e}function eVt(t,e){this.a=t,this.b=e}function nVt(t,e){this.a=t,this.b=e}function Bbt(t,e){Gr.call(this,t,e)}function Rbt(t,e){Gr.call(this,t,e)}function rVt(t,e){this.b=t,this.d=e}function jbt(t,e){Gr.call(this,t,e)}function $bt(t,e){Gr.call(this,t,e)}function iVt(t,e){this.a=t,this.b=e}function sVt(t,e){this.a=t,this.b=e}function UR(t,e){Gr.call(this,t,e)}function tC(t,e){Gr.call(this,t,e)}function zbt(t,e){Gr.call(this,t,e)}function qbt(t,e){Gr.call(this,t,e)}function Hbt(t,e){Gr.call(this,t,e)}function Fet(t,e){Gr.call(this,t,e)}function Gbt(t,e){Gr.call(this,t,e)}function Bet(t,e){Gr.call(this,t,e)}function WR(t,e){Gr.call(this,t,e)}function Ret(t,e){Gr.call(this,t,e)}function jet(t,e){Gr.call(this,t,e)}function _M(t,e){Gr.call(this,t,e)}function $et(t,e){Gr.call(this,t,e)}function Vbt(t,e){Gr.call(this,t,e)}function SM(t,e){Gr.call(this,t,e)}function Ubt(t,e){Gr.call(this,t,e)}function LYe(t,e){return Nu(t.c,e)}function MYe(t,e){return Nu(e.b,t)}function IYe(t,e){return-t.b.Je(e)}function Wbt(t,e){return Nu(t.g,e)}function AM(t,e){Gr.call(this,t,e)}function _x(t,e){Gr.call(this,t,e)}function aVt(t,e){this.a=t,this.b=e}function oVt(t,e){this.a=t,this.b=e}function $e(t,e){this.a=t,this.b=e}function eC(t,e){Gr.call(this,t,e)}function nC(t,e){Gr.call(this,t,e)}function LM(t,e){Gr.call(this,t,e)}function zet(t,e){Gr.call(this,t,e)}function KR(t,e){Gr.call(this,t,e)}function rC(t,e){Gr.call(this,t,e)}function qet(t,e){Gr.call(this,t,e)}function YR(t,e){Gr.call(this,t,e)}function $3(t,e){Gr.call(this,t,e)}function MM(t,e){Gr.call(this,t,e)}function iC(t,e){Gr.call(this,t,e)}function sC(t,e){Gr.call(this,t,e)}function IM(t,e){Gr.call(this,t,e)}function XR(t,e){Gr.call(this,t,e)}function z3(t,e){Gr.call(this,t,e)}function QR(t,e){Gr.call(this,t,e)}function cVt(t,e){this.a=t,this.b=e}function uVt(t,e){this.a=t,this.b=e}function lVt(t,e){this.a=t,this.b=e}function hVt(t,e){this.a=t,this.b=e}function fVt(t,e){this.a=t,this.b=e}function dVt(t,e){this.a=t,this.b=e}function la(t,e){this.a=t,this.b=e}function ZR(t,e){Gr.call(this,t,e)}function gVt(t,e){this.a=t,this.b=e}function pVt(t,e){this.a=t,this.b=e}function bVt(t,e){this.a=t,this.b=e}function vVt(t,e){this.a=t,this.b=e}function wVt(t,e){this.a=t,this.b=e}function mVt(t,e){this.a=t,this.b=e}function yVt(t,e){this.b=t,this.a=e}function xVt(t,e){this.b=t,this.a=e}function kVt(t,e){this.b=t,this.a=e}function EVt(t,e){this.b=t,this.a=e}function TVt(t,e){this.a=t,this.b=e}function CVt(t,e){this.a=t,this.b=e}function DYe(t,e){c2n(t.a,u(e,56))}function _Vt(t,e){yan(t.a,u(e,11))}function OYe(t,e){return g8(),e!=t}function SVt(){return Zqt(),new Mge}function AVt(){prt(),this.b=new qs}function LVt(){hq(),this.a=new qs}function MVt(){jwt(),Kvt.call(this)}function Sx(t,e){Gr.call(this,t,e)}function IVt(t,e){this.a=t,this.b=e}function DVt(t,e){this.a=t,this.b=e}function JR(t,e){this.a=t,this.b=e}function OVt(t,e){this.a=t,this.b=e}function NVt(t,e){this.a=t,this.b=e}function PVt(t,e){this.a=t,this.b=e}function FVt(t,e){this.d=t,this.b=e}function Kbt(t,e){this.d=t,this.e=e}function BVt(t,e){this.f=t,this.c=e}function DM(t,e){this.b=t,this.c=e}function Ybt(t,e){this.i=t,this.g=e}function RVt(t,e){this.e=t,this.a=e}function jVt(t,e){this.a=t,this.b=e}function Xbt(t,e){t.i=null,ez(t,e)}function NYe(t,e){t&&ki(cN,t,e)}function $Vt(t,e){return Wit(t.a,e)}function tj(t){return VI(t.c,t.b)}function ec(t){return t?t.dd():null}function Gt(t){return t??null}function Om(t){return typeof t===u6}function Nm(t){return typeof t===Lxt}function ea(t){return typeof t===Oat}function Dp(t,e){return t.Hd().Xb(e)}function ej(t,e){return Xon(t.Kc(),e)}function Av(t,e){return yc(t,e)==0}function PYe(t,e){return yc(t,e)>=0}function aC(t,e){return yc(t,e)!=0}function FYe(t){return""+(On(t),t)}function OM(t,e){return t.substr(e)}function zVt(t){return al(t),t.d.gc()}function Het(t){return Dpn(t,t.c),t}function nj(t){return mC(t==null),t}function oC(t,e){return t.a+=""+e,t}function fo(t,e){return t.a+=""+e,t}function cC(t,e){return t.a+=""+e,t}function hc(t,e){return t.a+=""+e,t}function Vr(t,e){return t.a+=""+e,t}function Qbt(t,e){return t.a+=""+e,t}function qVt(t,e){hs(t,e,t.a,t.a.a)}function Kb(t,e){hs(t,e,t.c.b,t.c)}function BYe(t,e,n){Qse(e,Fst(t,n))}function RYe(t,e,n){Qse(e,Fst(t,n))}function jYe(t,e){Ian(new er(t),e)}function HVt(t,e){t.q.setTime(Vv(e))}function GVt(t,e){rwt.call(this,t,e)}function VVt(t,e){rwt.call(this,t,e)}function Get(t,e){rwt.call(this,t,e)}function UVt(t){Yu(this),VC(this,t)}function Zbt(t){return An(t,0),null}function Gf(t){return t.a=0,t.b=0,t}function WVt(t,e){return t.a=e.g+1,t}function $Ye(t,e){return t.j[e.p]==2}function Jbt(t){return ken(u(t,79))}function KVt(){KVt=Z,Tpe=Wr(Jit())}function YVt(){YVt=Z,zbe=Wr(Ice())}function XVt(){this.b=new kx(Qm(12))}function QVt(){this.b=0,this.a=!1}function ZVt(){this.b=0,this.a=!1}function uC(t){this.a=t,f9.call(this)}function JVt(t){this.a=t,f9.call(this)}function mn(t,e){Os.call(this,t,e)}function Vet(t,e){jm.call(this,t,e)}function q3(t,e){Ybt.call(this,t,e)}function Uet(t,e){U8.call(this,t,e)}function tUt(t,e){NM.call(this,t,e)}function ri(t,e){NR(),ki(nU,t,e)}function Wet(t,e){return Dl(t.a,0,e)}function eUt(t,e){return t.a.a.a.cc(e)}function nUt(t,e){return Gt(t)===Gt(e)}function zYe(t,e){return Ls(t.a,e.a)}function qYe(t,e){return du(t.a,e.a)}function HYe(t,e){return BYt(t.a,e.a)}function cd(t,e){return t.indexOf(e)}function Lv(t,e){return t==e?0:t?1:-1}function rj(t){return t<10?"0"+t:""+t}function GYe(t){return Ar(t),new uC(t)}function rUt(t){return ru(t.l,t.m,t.h)}function o8(t){return ps((On(t),t))}function VYe(t){return ps((On(t),t))}function iUt(t,e){return du(t.g,e.g)}function Bo(t){return typeof t===Lxt}function UYe(t){return t==_w||t==Dy}function WYe(t){return t==_w||t==Iy}function t2t(t){return Ro(t.b.b,t,0)}function sUt(t){this.a=SVt(),this.b=t}function aUt(t){this.a=SVt(),this.b=t}function KYe(t,e){return ue(t.a,e),e}function YYe(t,e){return ue(t.c,e),t}function oUt(t,e){return Rl(t.a,e),t}function XYe(t,e){return lf(),e.a+=t}function QYe(t,e){return lf(),e.a+=t}function ZYe(t,e){return lf(),e.c+=t}function e2t(t,e){D8(t,0,t.length,e)}function A0(){kt.call(this,new n2)}function cUt(){Fj.call(this,0,0,0,0)}function Ax(){ih.call(this,0,0,0,0)}function yo(t){this.a=t.a,this.b=t.b}function Op(t){return t==jh||t==kf}function c8(t){return t==Z0||t==Q0}function uUt(t){return t==t5||t==J4}function H3(t){return t!=H1&&t!=yb}function ml(t){return t.Lg()&&t.Mg()}function lUt(t){return Zj(u(t,118))}function ij(t){return Rl(new Hs,t)}function hUt(t,e){return new U8(e,t)}function JYe(t,e){return new U8(e,t)}function n2t(t,e,n){W$(t,e),K$(t,n)}function sj(t,e,n){Qv(t,e),Xv(t,n)}function m1(t,e,n){yu(t,e),xu(t,n)}function aj(t,e,n){F8(t,e),R8(t,n)}function oj(t,e,n){B8(t,e),j8(t,n)}function Ket(t,e){Z8(t,e),$8(t,t.D)}function r2t(t){BVt.call(this,t,!0)}function fUt(t,e,n){U2t.call(this,t,e,n)}function Np(t){Jp(),tcn.call(this,t)}function dUt(){BR.call(this,"Head",1)}function gUt(){BR.call(this,"Tail",3)}function Yet(t){t.c=Pt(Xn,Ie,1,0,5,1)}function pUt(t){t.a=Pt(Xn,Ie,1,8,5,1)}function bUt(t){mu(t.xf(),new ur(t))}function G3(t){return t!=null?Hi(t):0}function tXe(t,e){return Zm(e,k1(t))}function eXe(t,e){return Zm(e,k1(t))}function nXe(t,e){return t[t.length]=e}function rXe(t,e){return t[t.length]=e}function i2t(t){return ntn(t.b.Kc(),t.a)}function iXe(t,e){return tz(Knt(t.d),e)}function sXe(t,e){return tz(Knt(t.g),e)}function aXe(t,e){return tz(Knt(t.j),e)}function eo(t,e){Os.call(this,t.b,e)}function Mv(t){Fj.call(this,t,t,t,t)}function s2t(t){return t.b&&bat(t),t.a}function a2t(t){return t.b&&bat(t),t.c}function oXe(t,e){R1||(t.b=e)}function Xet(t,e,n){return Ji(t,e,n),n}function vUt(t,e,n){Ji(t.c[e.g],e.g,n)}function cXe(t,e,n){u(t.c,69).Xh(e,n)}function uXe(t,e,n){m1(n,n.i+t,n.j+e)}function lXe(t,e){Mr(Lc(t.a),IQt(e))}function hXe(t,e){Mr(il(t.a),DQt(e))}function lC(t){gi(),vv.call(this,t)}function fXe(t){return t==null?0:Hi(t)}function wUt(){wUt=Z,yht=new e_(pft)}function Nr(){Nr=Z,new mUt,new le}function mUt(){new Cr,new Cr,new Cr}function o2t(){o2t=Z,Cpt(),Q8t=new Cr}function y1(){y1=Z,b.Math.log(2)}function nh(){nh=Z,f0=(CGt(),N4e)}function dXe(){throw rt(new yg(sge))}function gXe(){throw rt(new yg(sge))}function pXe(){throw rt(new yg(age))}function bXe(){throw rt(new yg(age))}function yUt(t){this.a=t,Cvt.call(this,t)}function Qet(t){this.a=t,TR.call(this,t)}function Zet(t){this.a=t,TR.call(this,t)}function Xs(t,e){Lnt(t.c,t.c.length,e)}function Vo(t){return t.a<t.c.c.length}function c2t(t){return t.a<t.c.a.length}function xUt(t,e){return t.a?t.b:e.De()}function du(t,e){return t<e?-1:t>e?1:0}function kUt(t,e){return yc(t,e)>0?t:e}function ru(t,e,n){return{l:t,m:e,h:n}}function vXe(t,e){t.a!=null&&_Vt(e,t.a)}function EUt(t){t.a=new Ht,t.c=new Ht}function cj(t){this.b=t,this.a=new le}function TUt(t){this.b=new Ce,this.a=t}function u2t(t){evt.call(this),this.a=t}function CUt(){BR.call(this,"Range",2)}function _Ut(){r4t(),this.a=new dD(C7t)}function wXe(t,e){Ar(e),Y3(t).Jc(new st)}function mXe(t,e){return Ol(),e.n.b+=t}function yXe(t,e,n){return ki(t.g,n,e)}function xXe(t,e,n){return ki(t.k,n,e)}function kXe(t,e){return ki(t.a,e.a,e)}function V3(t,e,n){return E3t(e,n,t.c)}function l2t(t){return new $e(t.c,t.d)}function EXe(t){return new $e(t.c,t.d)}function nc(t){return new $e(t.a,t.b)}function SUt(t,e){return U3n(t.a,e,null)}function TXe(t){Da(t,null),sa(t,null)}function AUt(t){vrt(t,null),wrt(t,null)}function LUt(){NM.call(this,null,null)}function MUt(){bj.call(this,null,null)}function h2t(t){this.a=t,Cr.call(this)}function CXe(t){this.b=(vn(),new q(t))}function uj(t){t.j=Pt(lEt,te,310,0,0,1)}function _Xe(t,e,n){t.c.Vc(e,u(n,133))}function SXe(t,e,n){t.c.ji(e,u(n,133))}function IUt(t,e){xr(t),t.Gc(u(e,15))}function hC(t,e){return c3n(t.c,t.b,e)}function AXe(t,e){return new JUt(t.Kc(),e)}function Jet(t,e){return Scn(t.Kc(),e)!=-1}function f2t(t,e){return t.a.Bc(e)!=null}function lj(t){return t.Ob()?t.Pb():null}function DUt(t){return Ah(t,0,t.length)}function Et(t,e){return t!=null&&rst(t,e)}function LXe(t,e){t.q.setHours(e),y_(t,e)}function OUt(t,e){t.c&&(Fvt(e),sQt(e))}function MXe(t,e,n){u(t.Kb(n),164).Nb(e)}function IXe(t,e,n){return j3n(t,e,n),n}function NUt(t,e,n){t.a=e^1502,t.b=n^fot}function tnt(t,e,n){return t.a[e.g][n.g]}function x1(t,e){return t.a[e.c.p][e.p]}function DXe(t,e){return t.e[e.c.p][e.p]}function OXe(t,e){return t.c[e.c.p][e.p]}function NXe(t,e){return t.j[e.p]=Hbn(e)}function PXe(t,e){return pmt(t.f,e.tg())}function FXe(t,e){return pmt(t.b,e.tg())}function BXe(t,e){return t.a<fvt(e)?-1:1}function RXe(t,e,n){return n?e!=0:e!=t-1}function jXe(t,e,n){return t.a=e,t.b=n,t}function ud(t,e){return t.a*=e,t.b*=e,t}function fC(t,e,n){return Ji(t.g,e,n),n}function $Xe(t,e,n,r){Ji(t.a[e.g],n.g,r)}function zXe(t,e){Fm(e,t.a.a.a,t.a.a.b)}function PUt(t){t.a=u(In(t.b.a,4),126)}function FUt(t){t.a=u(In(t.b.a,4),126)}function qXe(t){tI(t,Ode),Xst(t,H4n(t))}function u8(){u8=Z,WH=new gR(null)}function d2t(){d2t=Z,d2t(),Oge=new ie}function g2t(){this.Bb|=256,this.Bb|=512}function er(t){this.i=t,this.f=this.i.j}function Ss(t,e,n){WM.call(this,t,e,n)}function hj(t,e,n){Ss.call(this,t,e,n)}function Ou(t,e,n){Ss.call(this,t,e,n)}function BUt(t,e,n){hj.call(this,t,e,n)}function p2t(t,e,n){WM.call(this,t,e,n)}function U3(t,e,n){WM.call(this,t,e,n)}function b2t(t,e,n){Sj.call(this,t,e,n)}function RUt(t,e,n){Sj.call(this,t,e,n)}function jUt(t,e,n){b2t.call(this,t,e,n)}function $Ut(t,e,n){p2t.call(this,t,e,n)}function W3(t,e){this.a=t,TR.call(this,e)}function zUt(t,e){this.a=t,iet.call(this,e)}function qUt(t,e){this.a=t,iet.call(this,e)}function HUt(t,e){this.a=t,iet.call(this,e)}function v2t(t){this.a=t,att.call(this,t.d)}function Pp(t){this.c=t,this.a=this.c.a}function w2t(t,e){this.a=e,iet.call(this,t)}function GUt(t,e){this.a=e,Lrt.call(this,t)}function VUt(t,e){this.a=t,Lrt.call(this,e)}function HXe(t,e){return ewt(Nnt(t.c)).Xb(e)}function m2t(t,e){return iln(t,new _p,e).a}function lr(t,e){return Ar(e),new UUt(t,e)}function UUt(t,e){this.a=e,CR.call(this,t)}function y2t(t){this.b=t,this.a=this.b.a.e}function WUt(t){t.b.Qb(),--t.d.f.d,Rj(t.d)}function KUt(t){w9.call(this,u(Ar(t),35))}function YUt(t){w9.call(this,u(Ar(t),35))}function XUt(){Gr.call(this,"INSTANCE",0)}function x2t(t){if(!t)throw rt(new uM)}function k2t(t){if(!t)throw rt(new Iu)}function E2t(t){if(!t)throw rt(new lc)}function QUt(){QUt=Z,det(),u5e=new HB}function Fn(){Fn=Z,I2=!1,YE=!0}function Th(t){dx.call(this,(On(t),t))}function Il(t){dx.call(this,(On(t),t))}function fj(t){T.call(this,t),this.a=t}function T2t(t){A.call(this,t),this.a=t}function C2t(t){Qk.call(this,t),this.a=t}function ZUt(){uj(this),n$(this),this._d()}function JUt(t,e){this.a=e,CR.call(this,t)}function tWt(t,e){return new Kae(t.a,t.b,e)}function dj(t,e){return t.lastIndexOf(e)}function _2t(t,e,n){return t.indexOf(e,n)}function dC(t){return t==null?Tu:$o(t)}function GXe(t){return t==null?null:t.name}function S2t(t){return t.a!=null?t.a:null}function VXe(t){return kR(t.a)?FQt(t):null}function ent(t,e){return IC(t.a,e)!=null}function Nu(t,e){return!!e&&t.b[e.g]==e}function Iv(t){return t.$H||(t.$H=++ixn)}function UXe(t){return t.l+t.m*f6+t.h*x2}function eWt(t,e){return ue(e.a,t.a),t.a}function nWt(t,e){return ue(e.b,t.a),t.a}function Dv(t,e){return ue(e.a,t.a),t.a}function Ov(t){return Qn(t.a!=null),t.a}function nnt(t){kt.call(this,new Emt(t))}function A2t(t,e){L3t.call(this,t,e,null)}function gC(t){this.a=t,x.call(this,t)}function gj(){gj=Z,ZH=new Os(Ofe,0)}function pj(t,e){return++t.b,ue(t.a,e)}function L2t(t,e){return++t.b,vu(t.a,e)}function WXe(t,e){return Ls(t.n.a,e.n.a)}function KXe(t,e){return Ls(t.c.d,e.c.d)}function YXe(t,e){return Ls(t.c.c,e.c.c)}function gu(t,e){return u(Ai(t.b,e),15)}function XXe(t,e){return t.n.b=(On(e),e)}function QXe(t,e){return t.n.b=(On(e),e)}function pC(t){return Vo(t.a)||Vo(t.b)}function ZXe(t,e,n){return LZt(t,e,n,t.b)}function M2t(t,e,n){return LZt(t,e,n,t.c)}function I2t(t,e,n){u(wI(t,e),21).Fc(n)}function JXe(t,e,n){Fit(t.a,n),qz(t.a,e)}function NM(t,e){V9(),this.a=t,this.b=e}function bj(t,e){Eg(),this.b=t,this.c=e}function rnt(t,e){Ont(),this.f=e,this.d=t}function D2t(t,e){bmt(e,t),this.d=t,this.c=e}function Tg(t){var e;e=t.a,t.a=t.b,t.b=e}function tQe(t){return lf(),!!t&&!t.dc()}function eQe(t){return new Wm(3,t)}function O2t(t,e){return new JWt(t,t.gc(),e)}function nQe(t){return dR(),Ur((TQt(),gge),t)}function Lx(t){this.d=t,er.call(this,t)}function Mx(t){this.c=t,er.call(this,t)}function PM(t){this.c=t,Lx.call(this,t)}function rWt(){q9(),this.b=new w1(this)}function Hd(t){return Bl(t,my),new Yc(t)}function iWt(t){return T8(),parseInt(t)||-1}function Dl(t,e,n){return t.substr(e,n-e)}function l8(t,e,n){return _2t(t,Eu(e),n)}function int(t){return dwt(t.c,t.c.length)}function rQe(t){return t.f!=null?t.f:""+t.g}function snt(t){return t.f!=null?t.f:""+t.g}function ant(t){return Qn(t.b!=0),t.a.a.c}function vj(t){return Qn(t.b!=0),t.c.b.c}function FM(t){Et(t,150)&&u(t,150).Gh()}function wj(t){return t.b=u(PXt(t.a),42)}function N2t(t){i8(),this.b=t,this.a=!0}function sWt(t){SR(),this.b=t,this.a=!0}function aWt(t){t.d=new cWt(t),t.e=new Cr}function oWt(t){if(!t)throw rt(new eh)}function P2t(t){if(!t)throw rt(new uM)}function Pm(t){if(!t)throw rt(new Iu)}function iQe(t){if(!t)throw rt(new Htt)}function Qn(t){if(!t)throw rt(new lc)}function cWt(t){_vt.call(this,t,null,null)}function uWt(){Gr.call(this,"POLYOMINO",0)}function lWt(t,e,n,r){twt.call(this,t,e,n,r)}function sQe(t,e){return Zp(),ln(t,e.e,e)}function aQe(t,e,n){return DR(),n.qg(t,e)}function Vs(t,e){return!!t.q&&kl(t.q,e)}function oQe(t,e){return t>0?e*e/t:e*e*100}function cQe(t,e){return t>0?e/(t*t):e*100}function uQe(t,e,n){return ue(e,rie(t,n))}function lQe(t,e,n){O$(),t.Xe(e)&&n.td(t)}function h8(t,e,n){var r;r=t.Zc(e),r.Rb(n)}function Fm(t,e,n){return t.a+=e,t.b+=n,t}function hQe(t,e,n){return t.a*=e,t.b*=n,t}function BM(t,e,n){return t.a-=e,t.b-=n,t}function F2t(t,e){return t.a=e.a,t.b=e.b,t}function mj(t){return t.a=-t.a,t.b=-t.b,t}function hWt(t){this.c=t,this.a=1,this.b=1}function fWt(t){this.c=t,yu(t,0),xu(t,0)}function dWt(t){Qi.call(this),zC(this,t)}function gWt(t){Iat(),jzt(this),this.mf(t)}function pWt(t,e){V9(),NM.call(this,t,e)}function B2t(t,e){Eg(),bj.call(this,t,e)}function bWt(t,e){Eg(),bj.call(this,t,e)}function vWt(t,e){Eg(),B2t.call(this,t,e)}function yl(t,e,n){Tl.call(this,t,e,n,2)}function ont(t,e){nh(),Pj.call(this,t,e)}function wWt(t,e){nh(),ont.call(this,t,e)}function R2t(t,e){nh(),ont.call(this,t,e)}function mWt(t,e){nh(),R2t.call(this,t,e)}function j2t(t,e){nh(),Pj.call(this,t,e)}function yWt(t,e){nh(),j2t.call(this,t,e)}function xWt(t,e){nh(),Pj.call(this,t,e)}function fQe(t,e){return t.c.Fc(u(e,133))}function $2t(t,e,n){return Eq(mI(t,e),n)}function dQe(t,e,n){return e.Qk(t.e,t.c,n)}function gQe(t,e,n){return e.Rk(t.e,t.c,n)}function cnt(t,e){return Kp(t.e,u(e,49))}function pQe(t,e,n){JC(il(t.a),e,DQt(n))}function bQe(t,e,n){JC(Lc(t.a),e,IQt(n))}function z2t(t,e){e.$modCount=t.$modCount}function bC(){bC=Z,$S=new Gi("root")}function f8(){f8=Z,lN=new vqt,new wqt}function kWt(){this.a=new Hv,this.b=new Hv}function q2t(){zee.call(this),this.Bb|=Ya}function EWt(){Gr.call(this,"GROW_TREE",0)}function vQe(t){return t==null?null:P4n(t)}function wQe(t){return t==null?null:H0n(t)}function mQe(t){return t==null?null:$o(t)}function yQe(t){return t==null?null:$o(t)}function L0(t){t.o==null&&vbn(t)}function Re(t){return mC(t==null||Om(t)),t}function ye(t){return mC(t==null||Nm(t)),t}function Br(t){return mC(t==null||ea(t)),t}function H2t(t){this.q=new b.Date(Vv(t))}function RM(t,e){this.c=t,n8.call(this,t,e)}function yj(t,e){this.a=t,RM.call(this,t,e)}function xQe(t,e){this.d=t,Mtt(this),this.b=e}function G2t(t,e){jrt.call(this,t),this.a=e}function V2t(t,e){jrt.call(this,t),this.a=e}function kQe(t){w3t.call(this,0,0),this.f=t}function U2t(t,e,n){I$.call(this,t,e,n,null)}function TWt(t,e,n){I$.call(this,t,e,n,null)}function EQe(t,e,n){return t.ue(e,n)<=0?n:e}function TQe(t,e,n){return t.ue(e,n)<=0?e:n}function CQe(t,e){return u(Wv(t.b,e),149)}function _Qe(t,e){return u(Wv(t.c,e),229)}function unt(t){return u(Fe(t.a,t.b),287)}function CWt(t){return new $e(t.c,t.d+t.a)}function _Wt(t){return Ol(),uUt(u(t,197))}function Bm(){Bm=Z,t7t=un((_l(),V2))}function SQe(t,e){e.a?fvn(t,e):ent(t.a,e.b)}function SWt(t,e){R1||ue(t.a,e)}function AQe(t,e){return vM(),V8(e.d.i,t)}function LQe(t,e){return Xx(),new Lue(e,t)}function ld(t,e){return tI(e,Yxt),t.f=e,t}function W2t(t,e,n){return n=zl(t,e,3,n),n}function K2t(t,e,n){return n=zl(t,e,6,n),n}function Y2t(t,e,n){return n=zl(t,e,9,n),n}function jM(t,e,n){++t.j,t.Ki(),Brt(t,e,n)}function AWt(t,e,n){++t.j,t.Hi(e,t.oi(e,n))}function LWt(t,e,n){var r;r=t.Zc(e),r.Rb(n)}function MWt(t,e,n){return uxt(t.c,t.b,e,n)}function X2t(t,e){return(e&vi)%t.d.length}function Os(t,e){Gi.call(this,t),this.a=e}function Q2t(t,e){wpt.call(this,t),this.a=e}function lnt(t,e){wpt.call(this,t),this.a=e}function IWt(t,e){this.c=t,Kv.call(this,e)}function DWt(t,e){this.a=t,Ozt.call(this,e)}function $M(t,e){this.a=t,Ozt.call(this,e)}function OWt(t){this.a=(Bl(t,my),new Yc(t))}function NWt(t){this.a=(Bl(t,my),new Yc(t))}function zM(t){return!t.a&&(t.a=new ut),t.a}function PWt(t){return t>8?0:t+1}function MQe(t,e){return Fn(),t==e?0:t?1:-1}function Z2t(t,e,n){return Nx(t,u(e,22),n)}function IQe(t,e,n){return t.apply(e,n)}function FWt(t,e,n){return t.a+=Ah(e,0,n),t}function J2t(t,e){var n;return n=t.e,t.e=e,n}function DQe(t,e){var n;n=t[hot],n.call(t,e)}function OQe(t,e){var n;n=t[hot],n.call(t,e)}function Rm(t,e){t.a.Vc(t.b,e),++t.b,t.c=-1}function BWt(t){Yu(t.e),t.d.b=t.d,t.d.a=t.d}function qM(t){t.b?qM(t.b):t.f.c.zc(t.e,t.d)}function NQe(t,e,n){Wb(),vtt(t,e.Ce(t.a,n))}function PQe(t,e){return cet(mie(t.a,e,!0))}function FQe(t,e){return cet(yie(t.a,e,!0))}function uf(t,e){return wR(new Array(e),t)}function hnt(t){return String.fromCharCode(t)}function BQe(t){return t==null?null:t.message}function RWt(){this.a=new le,this.b=new le}function jWt(){this.a=new F5,this.b=new Kzt}function $Wt(){this.b=new Ta,this.c=new le}function tvt(){this.d=new Ta,this.e=new Ta}function evt(){this.n=new Ta,this.o=new Ta}function xj(){this.n=new wx,this.i=new Ax}function zWt(){this.a=new jJ,this.b=new zX}function qWt(){this.a=new le,this.d=new le}function HWt(){this.b=new qs,this.a=new qs}function GWt(){this.b=new Cr,this.a=new Cr}function VWt(){this.b=new CHt,this.a=new NQ}function UWt(){xj.call(this),this.a=new Ta}function vC(t){ccn.call(this,t,(P$(),Aut))}function nvt(t,e,n,r){Fj.call(this,t,e,n,r)}function RQe(t,e,n){n!=null&&Z$(e,gst(t,n))}function jQe(t,e,n){n!=null&&J$(e,gst(t,n))}function rvt(t,e,n){return n=zl(t,e,11,n),n}function Li(t,e){return t.a+=e.a,t.b+=e.b,t}function na(t,e){return t.a-=e.a,t.b-=e.b,t}function $Qe(t,e){return t.n.a=(On(e),e+10)}function zQe(t,e){return t.n.a=(On(e),e+10)}function qQe(t,e){return e==t||fE(cq(e),t)}function WWt(t,e){return ki(t.a,e,"")==null}function HQe(t,e){return vM(),!V8(e.d.i,t)}function GQe(t,e){Op(t.f)?obn(t,e):Vdn(t,e)}function VQe(t,e){var n;return n=e.Hh(t.a),n}function jm(t,e){mo.call(this,X_+t+S2+e)}function Ix(t,e,n,r){he.call(this,t,e,n,r)}function ivt(t,e,n,r){he.call(this,t,e,n,r)}function KWt(t,e,n,r){ivt.call(this,t,e,n,r)}function YWt(t,e,n,r){Uj.call(this,t,e,n,r)}function fnt(t,e,n,r){Uj.call(this,t,e,n,r)}function svt(t,e,n,r){Uj.call(this,t,e,n,r)}function XWt(t,e,n,r){fnt.call(this,t,e,n,r)}function avt(t,e,n,r){fnt.call(this,t,e,n,r)}function Cn(t,e,n,r){svt.call(this,t,e,n,r)}function QWt(t,e,n,r){avt.call(this,t,e,n,r)}function ZWt(t,e,n,r){iwt.call(this,t,e,n,r)}function JWt(t,e,n){this.a=t,D2t.call(this,e,n)}function tKt(t,e,n){this.c=e,this.b=n,this.a=t}function UQe(t,e,n){return t.d=u(e.Kb(n),164)}function ovt(t,e){return t.Aj().Nh().Kh(t,e)}function cvt(t,e){return t.Aj().Nh().Ih(t,e)}function eKt(t,e){return On(t),Gt(t)===Gt(e)}function hn(t,e){return On(t),Gt(t)===Gt(e)}function dnt(t,e){return cet(mie(t.a,e,!1))}function gnt(t,e){return cet(yie(t.a,e,!1))}function WQe(t,e){return t.b.sd(new NGt(t,e))}function KQe(t,e){return t.b.sd(new PGt(t,e))}function nKt(t,e){return t.b.sd(new FGt(t,e))}function uvt(t,e,n){return t.lastIndexOf(e,n)}function YQe(t,e,n){return Ls(t[e.b],t[n.b])}function XQe(t,e){return Jt(e,(Te(),_O),t)}function QQe(t,e){return du(e.a.d.p,t.a.d.p)}function ZQe(t,e){return du(t.a.d.p,e.a.d.p)}function JQe(t,e){return Ls(t.c-t.s,e.c-e.s)}function rKt(t){return t.c?Ro(t.c.a,t,0):-1}function tZe(t){return t<100?null:new Sp(t)}function Dx(t){return t==G2||t==h0||t==Vc}function iKt(t,e){return Et(e,15)&&lue(t.c,e)}function eZe(t,e){R1||e&&(t.d=e)}function pnt(t,e){var n;return n=e,!!Dyt(t,n)}function lvt(t,e){this.c=t,qnt.call(this,t,e)}function sKt(t){this.c=t,Get.call(this,Iq,0)}function aKt(t,e){atn.call(this,t,t.length,e)}function nZe(t,e,n){return u(t.c,69).lk(e,n)}function kj(t,e,n){return u(t.c,69).mk(e,n)}function rZe(t,e,n){return dQe(t,u(e,332),n)}function hvt(t,e,n){return gQe(t,u(e,332),n)}function iZe(t,e,n){return iae(t,u(e,332),n)}function oKt(t,e,n){return n0n(t,u(e,332),n)}function wC(t,e){return e==null?null:ny(t.b,e)}function fvt(t){return Nm(t)?(On(t),t):t.ke()}function Ej(t){return!isNaN(t)&&!isFinite(t)}function cKt(t){hd(),this.a=(vn(),new Qk(t))}function HM(t){g8(),this.d=t,this.a=new P3}function rh(t,e,n){this.a=t,this.b=e,this.c=n}function uKt(t,e,n){this.a=t,this.b=e,this.c=n}function lKt(t,e,n){this.d=t,this.b=n,this.a=e}function bnt(t){EUt(this),_h(this),Ua(this,t)}function Pu(t){Yet(this),Svt(this.c,0,t.Pc())}function hKt(t){El(t.a),cte(t.c,t.b),t.b=null}function fKt(t){this.a=t,qd(),ku(Date.now())}function dKt(){dKt=Z,IEt=new _,YH=new _}function vnt(){vnt=Z,kEt=new It,Ige=new Ft}function gKt(){gKt=Z,j4e=Pt(Xn,Ie,1,0,5,1)}function pKt(){pKt=Z,r5e=Pt(Xn,Ie,1,0,5,1)}function dvt(){dvt=Z,i5e=Pt(Xn,Ie,1,0,5,1)}function hd(){hd=Z,new xpt((vn(),vn(),io))}function sZe(t){return P$(),Ur((mte(),Nge),t)}function aZe(t){return I1(),Ur((RJt(),$ge),t)}function oZe(t){return Nz(),Ur((VZt(),Uge),t)}function cZe(t){return $$(),Ur((UZt(),Wge),t)}function uZe(t){return gq(),Ur((Dne(),Kge),t)}function lZe(t){return Kf(),Ur((PJt(),Qge),t)}function hZe(t){return Xu(),Ur((FJt(),Jge),t)}function fZe(t){return wu(),Ur((BJt(),epe),t)}function dZe(t){return Lq(),Ur((KVt(),Tpe),t)}function gZe(t){return tw(),Ur((xte(),_pe),t)}function pZe(t){return n6(),Ur((kte(),Ape),t)}function bZe(t){return s_(),Ur((Ete(),Ipe),t)}function vZe(t){return AR(),Ur((EZt(),Dpe),t)}function wZe(t){return z$(),Ur((WZt(),Ype),t)}function mZe(t){return jC(),Ur((jJt(),bbe),t)}function yZe(t){return Wa(),Ur((Jte(),ybe),t)}function xZe(t){return K8(),Ur((yte(),Cbe),t)}function kZe(t){return ew(),Ur(($Jt(),Ibe),t)}function gvt(t,e){if(!t)throw rt(new Pn(e))}function EZe(t){return Gn(),Ur((yee(),Pbe),t)}function pvt(t){Fj.call(this,t.d,t.c,t.a,t.b)}function wnt(t){Fj.call(this,t.d,t.c,t.a,t.b)}function bvt(t,e,n){this.b=t,this.c=e,this.a=n}function Tj(t,e,n){this.b=t,this.a=e,this.c=n}function bKt(t,e,n){this.a=t,this.b=e,this.c=n}function vvt(t,e,n){this.a=t,this.b=e,this.c=n}function vKt(t,e,n){this.a=t,this.b=e,this.c=n}function wvt(t,e,n){this.a=t,this.b=e,this.c=n}function wKt(t,e,n){this.b=t,this.a=e,this.c=n}function Cj(t,e,n){this.e=e,this.b=t,this.d=n}function TZe(t,e,n){return Wb(),t.a.Od(e,n),e}function mnt(t){var e;return e=new Uu,e.e=t,e}function mvt(t){var e;return e=new eqt,e.b=t,e}function GM(){GM=Z,cG=new _Y,uG=new SY}function lf(){lf=Z,Ybe=new bX,Xbe=new yF}function CZe(t){return dz(),Ur((Cte(),Gbe),t)}function _Ze(t){return M1(),Ur((Ste(),Jbe),t)}function SZe(t){return fq(),Ur((xne(),o2e),t)}function AZe(t){return i6(),Ur((Eee(),c2e),t)}function LZe(t){return D$(),Ur((JZt(),u2e),t)}function MZe(t){return Yx(),Ur((zJt(),l2e),t)}function IZe(t){return g4(),Ur((Kte(),e2e),t)}function DZe(t){return Jv(),Ur((GJt(),a2e),t)}function OZe(t){return X$(),Ur((qJt(),h2e),t)}function NZe(t){return v2(),Ur((Ute(),f2e),t)}function PZe(t){return TI(),Ur((YZt(),d2e),t)}function FZe(t){return u2(),Ur((HJt(),p2e),t)}function BZe(t){return nq(),Ur((See(),b2e),t)}function RZe(t){return bI(),Ur((XZt(),v2e),t)}function jZe(t){return nD(),Ur((Cee(),w2e),t)}function $Ze(t){return gE(),Ur((Tee(),m2e),t)}function zZe(t){return oo(),Ur((Wne(),y2e),t)}function qZe(t){return W8(),Ur((UJt(),x2e),t)}function HZe(t){return B0(),Ur((VJt(),E2e),t)}function GZe(t){return x$(),Ur((tJt(),T2e),t)}function VZe(t){return hh(),Ur((Yte(),C2e),t)}function UZe(t){return Zz(),Ur((_ee(),$we),t)}function WZe(t){return YC(),Ur((WJt(),zwe),t)}function KZe(t){return sy(),Ur((Ate(),qwe),t)}function YZe(t){return so(),Ur((XJt(),Kwe),t)}function XZe(t){return w4(),Ur((yne(),Gwe),t)}function QZe(t){return j0(),Ur((YJt(),Vwe),t)}function ZZe(t){return yI(),Ur((ZZt(),Uwe),t)}function JZe(t){return uz(),Ur((KJt(),Ywe),t)}function tJe(t){return a_(),Ur((Wte(),Hwe),t)}function eJe(t){return lI(),Ur((QZt(),Xwe),t)}function nJe(t){return tE(),Ur((ZJt(),Qwe),t)}function rJe(t){return oz(),Ur((JJt(),Zwe),t)}function iJe(t){return gz(),Ur((QJt(),Jwe),t)}function sJe(t){return Zv(),Ur((tte(),fme),t)}function aJe(t){return BC(),Ur((nJt(),vme),t)}function oJe(t){return dd(),Ur((rJt(),Tme),t)}function cJe(t){return E1(),Ur((iJt(),_me),t)}function uJe(t){return Vf(),Ur((eJt(),zme),t)}function lJe(t){return qv(),Ur((sJt(),Kme),t)}function hJe(t){return uE(),Ur((Tte(),Yme),t)}function fJe(t){return f_(),Ur((Aee(),Qme),t)}function dJe(t){return d$(),Ur((cJt(),hye),t)}function gJe(t){return iz(),Ur((oJt(),vye),t)}function pJe(t){return v$(),Ur((aJt(),fye),t)}function bJe(t){return Cz(),Ur((ete(),mye),t)}function vJe(t){return N$(),Ur((uJt(),yye),t)}function wJe(t){return RI(),Ur((nte(),xye),t)}function mJe(t){return Gz(),Ur((_te(),Fye),t)}function yJe(t){return cz(),Ur((ite(),Bye),t)}function xJe(t){return Tz(),Ur((rte(),Rye),t)}function kJe(t){return yE(),Ur((Zte(),i3e),t)}function EJe(t){return GI(),Ur((ste(),s3e),t)}function TJe(t){return MR(),Ur((xZt(),a3e),t)}function CJe(t){return IR(),Ur((yZt(),c3e),t)}function _Je(t){return hI(),Ur((hJt(),u3e),t)}function SJe(t){return iD(),Ur((Xte(),l3e),t)}function AJe(t){return H9(),Ur((kZt(),_3e),t)}function LJe(t){return NI(),Ur((lJt(),S3e),t)}function MJe(t){return Xf(),Ur((Qte(),O3e),t)}function IJe(t){return jg(),Ur((kne(),P3e),t)}function DJe(t){return Qd(),Ur((kee(),F3e),t)}function OJe(t){return cy(),Ur((xee(),q3e),t)}function NJe(t){return ro(),Ur((YVt(),zbe),t)}function PJe(t){return q8(),Ur((KZt(),$be),t)}function FJe(t){return ao(),Ur((tee(),r4e),t)}function BJe(t){return A1(),Ur((ote(),i4e),t)}function RJe(t){return q0(),Ur((Ite(),s4e),t)}function jJe(t){return tq(),Ur((Mee(),a4e),t)}function $Je(t){return $0(),Ur((ate(),c4e),t)}function zJe(t){return jl(),Ur((Mte(),l4e),t)}function qJe(t){return fy(),Ur((Ine(),h4e),t)}function HJe(t){return c4(),Ur((eee(),f4e),t)}function GJe(t){return oa(),Ur((bee(),d4e),t)}function VJe(t){return Qu(),Ur((Lee(),g4e),t)}function UJe(t){return _l(),Ur((Ote(),y4e),t)}function WJe(t){return cl(),Ur((Kne(),x4e),t)}function KJe(t){return be(),Ur((nee(),p4e),t)}function YJe(t){return Az(),Ur((Dte(),k4e),t)}function XJe(t){return Cl(),Ur((Lte(),C4e),t)}function QJe(t){return vE(),Ur((Ene(),R4e),t)}function ZJe(t,e){return On(t),t+(On(e),e)}function JJe(t,e){return qd(),Mr(Wt(t.a),e)}function ttn(t,e){return qd(),Mr(Wt(t.a),e)}function ynt(t,e){this.c=t,this.a=e,this.b=e-t}function mKt(t,e,n){this.a=t,this.b=e,this.c=n}function yvt(t,e,n){this.a=t,this.b=e,this.c=n}function xvt(t,e,n){this.a=t,this.b=e,this.c=n}function yKt(t,e,n){this.a=t,this.b=e,this.c=n}function xKt(t,e,n){this.a=t,this.b=e,this.c=n}function Cg(t,e,n){this.e=t,this.a=e,this.c=n}function kKt(t,e,n){nh(),Owt.call(this,t,e,n)}function xnt(t,e,n){nh(),vwt.call(this,t,e,n)}function kvt(t,e,n){nh(),vwt.call(this,t,e,n)}function Evt(t,e,n){nh(),vwt.call(this,t,e,n)}function EKt(t,e,n){nh(),xnt.call(this,t,e,n)}function Tvt(t,e,n){nh(),xnt.call(this,t,e,n)}function TKt(t,e,n){nh(),Tvt.call(this,t,e,n)}function CKt(t,e,n){nh(),kvt.call(this,t,e,n)}function _Kt(t,e,n){nh(),Evt.call(this,t,e,n)}function VM(t,e){return Ar(t),Ar(e),new WHt(t,e)}function Ox(t,e){return Ar(t),Ar(e),new jKt(t,e)}function etn(t,e){return Ar(t),Ar(e),new $Kt(t,e)}function ntn(t,e){return Ar(t),Ar(e),new YHt(t,e)}function u(t,e){return mC(t==null||rst(t,e)),t}function d8(t){var e;return e=new le,Xrt(e,t),e}function rtn(t){var e;return e=new qs,Xrt(e,t),e}function SKt(t){var e;return e=new Mpt,lit(e,t),e}function UM(t){var e;return e=new Qi,lit(e,t),e}function itn(t){return!t.e&&(t.e=new le),t.e}function stn(t){return!t.c&&(t.c=new xm),t.c}function ue(t,e){return t.c[t.c.length]=e,!0}function AKt(t,e){this.c=t,this.b=e,this.a=!1}function Cvt(t){this.d=t,Mtt(this),this.b=Qtn(t.d)}function LKt(){this.a=";,;",this.b="",this.c=""}function atn(t,e,n){MYt.call(this,e,n),this.a=t}function MKt(t,e,n){this.b=t,GVt.call(this,e,n)}function _vt(t,e,n){this.c=t,RR.call(this,e,n)}function Svt(t,e,n){Y4t(n,0,t,e,n.length,!1)}function Gd(t,e,n,r,s){t.b=e,t.c=n,t.d=r,t.a=s}function otn(t,e){e&&(t.b=e,t.a=($p(e),e.a))}function Avt(t,e,n,r,s){t.d=e,t.c=n,t.a=r,t.b=s}function Lvt(t){var e,n;e=t.b,n=t.c,t.b=n,t.c=e}function Mvt(t){var e,n;n=t.d,e=t.a,t.d=e,t.a=n}function Ivt(t){return Vp(den(Bo(t)?Sh(t):t))}function ctn(t,e){return du(UKt(t.d),UKt(e.d))}function utn(t,e){return e==(be(),Bn)?t.c:t.d}function g8(){g8=Z,XCt=(be(),Bn),gV=Hn}function IKt(){this.b=Xt(ye(De((Zf(),Vut))))}function DKt(t){return Wb(),Pt(Xn,Ie,1,t,5,1)}function ltn(t){return new $e(t.c+t.b,t.d+t.a)}function htn(t,e){return LR(),du(t.d.p,e.d.p)}function knt(t){return Qn(t.b!=0),ch(t,t.a.a)}function ftn(t){return Qn(t.b!=0),ch(t,t.c.b)}function Dvt(t,e){if(!t)throw rt(new zqt(e))}function _j(t,e){if(!t)throw rt(new Pn(e))}function Ovt(t,e,n){a8.call(this,t,e),this.b=n}function WM(t,e,n){Kbt.call(this,t,e),this.c=n}function OKt(t,e,n){lee.call(this,e,n),this.d=t}function Nvt(t){dvt(),_k.call(this),this.th(t)}function NKt(t,e,n){this.a=t,q3.call(this,e,n)}function PKt(t,e,n){this.a=t,q3.call(this,e,n)}function Sj(t,e,n){Kbt.call(this,t,e),this.c=n}function FKt(){L8(),Ien.call(this,(Mp(),Uh))}function BKt(t){return t!=null&&!Hit(t,iA,sA)}function dtn(t,e){return(Ure(t)<<4|Ure(e))&ms}function gtn(t,e){return Qj(),hst(t,e),new lXt(t,e)}function Yb(t,e){var n;t.n&&(n=e,ue(t.f,n))}function p8(t,e,n){var r;r=new Hm(n),Wf(t,e,r)}function ptn(t,e){var n;return n=t.c,Zmt(t,e),n}function Pvt(t,e){return e<0?t.g=-1:t.g=e,t}function Aj(t,e){return Jan(t),t.a*=e,t.b*=e,t}function RKt(t,e,n,r,s){t.c=e,t.d=n,t.b=r,t.a=s}function ni(t,e){return hs(t,e,t.c.b,t.c),!0}function Fvt(t){t.a.b=t.b,t.b.a=t.a,t.a=t.b=null}function Ent(t){this.b=t,this.a=Pv(this.b.a).Ed()}function jKt(t,e){this.b=t,this.a=e,f9.call(this)}function $Kt(t,e){this.a=t,this.b=e,f9.call(this)}function zKt(t,e){MYt.call(this,e,1040),this.a=t}function KM(t){return t==0||isNaN(t)?t:t<0?-1:1}function btn(t){return jx(),Zd(t)==ts(Xp(t))}function vtn(t){return jx(),Xp(t)==ts(Zd(t))}function Nv(t,e){return l_(t,new a8(e.a,e.b))}function wtn(t){return!Va(t)&&t.c.i.c==t.d.i.c}function Lj(t){var e;return e=t.n,t.a.b+e.d+e.a}function qKt(t){var e;return e=t.n,t.e.b+e.d+e.a}function Bvt(t){var e;return e=t.n,t.e.a+e.b+e.c}function HKt(t){return gi(),new Vd(0,t)}function mtn(t){return t.a?t.a:rrt(t)}function mC(t){if(!t)throw rt(new Xk(null))}function GKt(){GKt=Z,Lft=(vn(),new D(iut))}function Mj(){Mj=Z,new N3t((Xtt(),but),(Qtt(),put))}function VKt(){VKt=Z,sEt=Pt(ja,te,19,256,0,1)}function Tnt(t,e,n,r){u3t.call(this,t,e,n,r,0,0)}function ytn(t,e,n){return ki(t.b,u(n.b,17),e)}function xtn(t,e,n){return ki(t.b,u(n.b,17),e)}function ktn(t,e){return ue(t,new $e(e.a,e.b))}function Etn(t,e){return t.c<e.c?-1:t.c==e.c?0:1}function Cnt(t){return t.e.c.length+t.g.c.length}function UKt(t){return t.e.c.length-t.g.c.length}function WKt(t){return t.b.c.length-t.e.c.length}function Ttn(t){return Ol(),(be(),uu).Hc(t.j)}function KKt(t){dvt(),Nvt.call(this,t),this.a=-1}function Ij(t,e){DM.call(this,t,e),this.a=this}function Yi(t,e){var n;return n=Unt(t,e),n.i=2,n}function Dj(t,e){var n;return++t.j,n=t.Ti(e),n}function bi(t,e,n){return t.a=-1,I2t(t,e.g,n),t}function Ctn(t,e,n){b4n(t.a,t.b,t.c,u(e,202),n)}function _tn(t,e){tyt(t,e==null?null:(On(e),e))}function Stn(t,e){Qmt(t,e==null?null:(On(e),e))}function Atn(t,e){Qmt(t,e==null?null:(On(e),e))}function _nt(t,e,n){return new tKt(Den(t).Ie(),n,e)}function Xb(t,e,n,r,s,o){return Zse(t,e,n,r,s,0,o)}function YKt(){YKt=Z,nEt=Pt(E6,te,217,256,0,1)}function XKt(){XKt=Z,aEt=Pt(Tw,te,162,256,0,1)}function QKt(){QKt=Z,uEt=Pt(Cw,te,184,256,0,1)}function ZKt(){ZKt=Z,iEt=Pt(aS,te,172,128,0,1)}function Rvt(){Gd(this,!1,!1,!1,!1)}function Snt(t){Gm(),this.a=(vn(),new D(Ar(t)))}function Oj(t){for(Ar(t);t.Ob();)t.Pb(),t.Qb()}function Ltn(t){t.a.cd(),u(t.a.dd(),14).gc(),Xpt()}function jvt(t){this.c=t,this.b=this.c.d.vc().Kc()}function JKt(t){this.c=t,this.a=new Ex(this.c.a)}function yC(t){this.a=new kx(t.gc()),Ua(this,t)}function $vt(t){kt.call(this,new n2),Ua(this,t)}function tYt(t,e){return t.a+=Ah(e,0,e.length),t}function Fe(t,e){return An(e,t.c.length),t.c[e]}function eYt(t,e){return An(e,t.a.length),t.a[e]}function Tn(t,e){Wb(),jrt.call(this,t),this.a=e}function Mtn(t,e){return g2(Oa(g2(t.a).a,e.a))}function Itn(t,e){return On(t),SI(t,(On(e),e))}function Dtn(t,e){return On(e),SI(e,(On(t),t))}function Otn(t,e){return Ji(e,0,zvt(e[0],g2(1)))}function zvt(t,e){return Mtn(u(t,162),u(e,162))}function nYt(t){return t.c-u(Fe(t.a,t.b),287).b}function rYt(t){return t.q?t.q:(vn(),vn(),a0)}function iYt(t){return t.e.Hd().gc()*t.c.Hd().gc()}function Ntn(t,e,n){return du(e.d[t.g],n.d[t.g])}function Ptn(t,e,n){return du(t.d[e.p],t.d[n.p])}function Ftn(t,e,n){return du(t.d[e.p],t.d[n.p])}function Btn(t,e,n){return du(t.d[e.p],t.d[n.p])}function Rtn(t,e,n){return du(t.d[e.p],t.d[n.p])}function qvt(t,e,n){return b.Math.min(n/t,1/e)}function sYt(t,e){return t?0:b.Math.max(0,e-1)}function jtn(t,e){var n;for(n=0;n<e;++n)t[n]=-1}function aYt(t){var e;return e=tae(t),e?aYt(e):t}function $tn(t,e){return t.a==null&&pue(t),t.a[e]}function xl(t){return t.c?t.c.f:t.e.b}function Fu(t){return t.c?t.c.g:t.e.a}function Nj(t){Kv.call(this,t.gc()),rs(this,t)}function Pj(t,e){nh(),oR.call(this,e),this.a=t}function xC(t,e,n){this.a=t,Ss.call(this,e,n,2)}function Fj(t,e,n,r){Avt(this,t,e,n,r)}function Vd(t,e){gi(),vv.call(this,t),this.a=e}function oYt(t){this.b=new Qi,this.a=t,this.c=-1}function cYt(){this.d=new $e(0,0),this.e=new qs}function uYt(t){D2t.call(this,0,0),this.a=t,this.b=0}function lYt(t){this.a=t,this.c=new Cr,Icn(this)}function Hvt(t){if(t.e.c!=t.b)throw rt(new eh)}function Gvt(t){if(t.c.e!=t.a)throw rt(new eh)}function Sr(t){return Bo(t)?t|0:xHt(t)}function Bj(t,e){return gi(),new fwt(t,e)}function Ant(t,e){return t==null?e==null:hn(t,e)}function ztn(t,e){return t==null?e==null:Oz(t,e)}function Nx(t,e,n){return pf(t.a,e),cwt(t,e.g,n)}function Lnt(t,e,n){yre(0,e,t.length),D8(t,0,e,n)}function $m(t,e,n){Um(e,t.c.length),W9(t.c,e,n)}function hYt(t,e,n){var r;for(r=0;r<e;++r)t[r]=n}function ji(t,e){var n;return n=un(t),_yt(n,e),n}function qtn(t,e){return!t&&(t=[]),t[t.length]=e,t}function Htn(t,e){return t.a.get(e)!==void 0}function fYt(t,e){return von(new Oo,new Kt(t),e)}function Gtn(t){return t==null?WH:new gR(On(t))}function Mnt(t,e){return Et(e,22)&&Nu(t,u(e,22))}function dYt(t,e){return Et(e,22)&&Wan(t,u(e,22))}function Vvt(t){return ol(t,26)*L_+ol(t,27)*M_}function Uvt(t){return Array.isArray(t)&&t.im===Ct}function Rj(t){t.b?Rj(t.b):t.d.dc()&&t.f.c.Bc(t.e)}function Int(t,e){Li(t.c,e),t.b.c+=e.a,t.b.d+=e.b}function Vtn(t,e){Int(t,na(new $e(e.a,e.b),t.c))}function Dnt(t,e){this.b=new Qi,this.a=t,this.c=e}function gYt(){this.b=new Sc,this.c=new VXt(this)}function Wvt(){this.d=new Lu,this.e=new GXt(this)}function Kvt(){jwt(),this.f=new Qi,this.e=new Qi}function pYt(){Ol(),this.k=new Cr,this.d=new qs}function Ont(){Ont=Z,S4e=new eo((ci(),hl),0)}function bYt(){bYt=Z,fge=new uYt(Pt(Xn,Ie,1,0,5,1))}function Utn(t,e,n){cce(n,t,1),ue(e,new $Gt(n,t))}function Wtn(t,e,n){c_(n,t,1),ue(e,new WGt(n,t))}function Ktn(t,e,n){return Ns(t,new Tx(e.a,n.a))}function Ytn(t,e,n){return-du(t.f[e.p],t.f[n.p])}function jj(t,e,n){var r;t&&(r=t.i,r.c=e,r.b=n)}function $j(t,e,n){var r;t&&(r=t.i,r.d=e,r.a=n)}function Ku(t,e,n){return t.a=-1,I2t(t,e.g+1,n),t}function Yvt(t,e,n){return n=zl(t,u(e,49),7,n),n}function Xvt(t,e,n){return n=zl(t,u(e,49),3,n),n}function vYt(t,e,n){this.a=t,hj.call(this,e,n,22)}function wYt(t,e,n){this.a=t,hj.call(this,e,n,14)}function mYt(t,e,n,r){nh(),JQt.call(this,t,e,n,r)}function yYt(t,e,n,r){nh(),JQt.call(this,t,e,n,r)}function Xtn(t,e){e.Bb&dc&&!t.a.o&&(t.a.o=e)}function xYt(t){return t!=null&&znt(t)&&t.im!==Ct}function Qvt(t){return!Array.isArray(t)&&t.im===Ct}function Qtn(t){return Et(t,15)?u(t,15).Yc():t.Kc()}function Zvt(t){return t.Qc(Pt(Xn,Ie,1,t.gc(),5,1))}function kC(t,e){return hhn(mI(t,e))?e.Qh():null}function Jvt(t){t?H3t(t,(qd(),hEt)):qd()}function ar(t){this.a=(bYt(),fge),this.d=u(Ar(t),47)}function twt(t,e,n,r){this.a=t,I$.call(this,t,e,n,r)}function Qb(t){Ip(),this.a=0,this.b=t-1,this.c=1}function kYt(t){uj(this),this.g=t,n$(this),this._d()}function Pv(t){return t.c?t.c:t.c=t.Id()}function Nnt(t){return t.d?t.d:t.d=t.Jd()}function ewt(t){var e;return e=t.c,e||(t.c=t.Dd())}function EYt(t){var e;return e=t.f,e||(t.f=t.Dc())}function Px(t){var e;return e=t.i,e||(t.i=t.bc())}function TYt(t){return gi(),new hrt(10,t,0)}function EC(t){return Bo(t)?""+t:uue(t)}function zj(t){if(t.e.j!=t.d)throw rt(new eh)}function M0(t,e){return Vp(Mae(Bo(t)?Sh(t):t,e))}function Fp(t,e){return Vp(h5t(Bo(t)?Sh(t):t,e))}function zm(t,e){return Vp(J0n(Bo(t)?Sh(t):t,e))}function Ztn(t,e){return MQe((On(t),t),(On(e),e))}function Pnt(t,e){return Ls((On(t),t),(On(e),e))}function CYt(t,e){return Ar(e),t.a.Ad(e)&&!t.b.Ad(e)}function Jtn(t,e){return ru(t.l&e.l,t.m&e.m,t.h&e.h)}function ten(t,e){return ru(t.l|e.l,t.m|e.m,t.h|e.h)}function een(t,e){return ru(t.l^e.l,t.m^e.m,t.h^e.h)}function qj(t,e){return qI(t,(On(e),new Dt(e)))}function Hj(t,e){return qI(t,(On(e),new jt(e)))}function _Yt(t){return Bu(),u(t,11).e.c.length!=0}function SYt(t){return Bu(),u(t,11).g.c.length!=0}function nen(t,e){return Xx(),Ls(e.a.o.a,t.a.o.a)}function AYt(t,e,n){return j4n(t,u(e,11),u(n,11))}function ren(t){return t.e?wmt(t.e):null}function nwt(t){t.d||(t.d=t.b.Kc(),t.c=t.b.gc())}function ien(t,e,n){t.a.Mb(n)&&(t.b=!0,e.td(n))}function b8(t,e){if(t<0||t>=e)throw rt(new _pt)}function sen(t,e,n){return Ji(e,0,zvt(e[0],n[0])),e}function aen(t,e,n){e.Ye(n,Xt(ye(Jn(t.b,n)))*t.a)}function LYt(t,e,n){return y4(),H8(t,e)&&H8(t,n)}function TC(t){return Qu(),!t.Hc(tg)&&!t.Hc(xb)}function Gj(t){return new $e(t.c+t.b/2,t.d+t.a/2)}function Fnt(t,e){return e.kh()?Kp(t.b,u(e,49)):e}function rwt(t,e){this.e=t,this.d=e&64?e|bd:e}function MYt(t,e){this.c=0,this.d=t,this.b=e|64|bd}function Vj(t){this.b=new Yc(11),this.a=(X3(),t)}function Bnt(t){this.b=null,this.a=(X3(),t||mEt)}function IYt(t){this.a=tse(t.a),this.b=new Pu(t.b)}function DYt(t){this.b=t,Lx.call(this,t),PUt(this)}function OYt(t){this.b=t,PM.call(this,t),FUt(this)}function qm(t,e,n){this.a=t,Ix.call(this,e,n,5,6)}function iwt(t,e,n,r){this.b=t,Ss.call(this,e,n,r)}function Qs(t,e,n,r,s){qrt.call(this,t,e,n,r,s,-1)}function CC(t,e,n,r,s){gI.call(this,t,e,n,r,s,-1)}function he(t,e,n,r){Ss.call(this,t,e,n),this.b=r}function Uj(t,e,n,r){WM.call(this,t,e,n),this.b=r}function NYt(t){BVt.call(this,t,!1),this.a=!1}function PYt(t,e){this.b=t,att.call(this,t.b),this.a=e}function FYt(t,e){Gm(),uYe.call(this,t,yz(new wl(e)))}function Wj(t,e){return gi(),new wwt(t,e,0)}function Rnt(t,e){return gi(),new wwt(6,t,e)}function oen(t,e){return hn(t.substr(0,e.length),e)}function kl(t,e){return ea(e)?art(t,e):!!Ao(t.f,e)}function pa(t,e){for(On(e);t.Ob();)e.td(t.Pb())}function K3(t,e,n){Jp(),this.e=t,this.d=e,this.a=n}function _g(t,e,n,r){var s;s=t.i,s.i=e,s.a=n,s.b=r}function swt(t){var e;for(e=t;e.f;)e=e.f;return e}function Fx(t){var e;return e=KC(t),Qn(e!=null),e}function cen(t){var e;return e=Wun(t),Qn(e!=null),e}function v8(t,e){var n;return n=t.a.gc(),bmt(e,n),n-e}function awt(t,e){var n;for(n=0;n<e;++n)t[n]=!1}function uen(t,e,n,r){var s;for(s=e;s<n;++s)t[s]=r}function Rt(t,e,n,r){yre(e,n,t.length),uen(t,e,n,r)}function len(t,e,n){b8(n,t.a.c.length),ah(t.a,n,e)}function owt(t,e,n){this.c=t,this.a=e,vn(),this.b=n}function cwt(t,e,n){var r;return r=t.b[e],t.b[e]=n,r}function Ns(t,e){var n;return n=t.a.zc(e,t),n==null}function hen(t){if(!t)throw rt(new lc);return t.d}function uwt(t,e){if(t==null)throw rt(new yx(e))}function lwt(t,e){return e?Ua(t,e):!1}function Ud(t,e,n){return sun(t,e.g,n),pf(t.c,e),t}function fen(t){return T4(t,(ao(),jh)),t.d=!0,t}function jnt(t){return!t.j&&Att(t,Iwn(t.g,t.b)),t.j}function _C(t){Pm(t.b!=-1),Ag(t.c,t.a=t.b),t.b=-1}function Yu(t){t.f=new sUt(t),t.g=new aUt(t),a$(t)}function $nt(t){return new Tn(null,ven(t,t.length))}function Bp(t){return new ar(new w2t(t.a.length,t.a))}function den(t){return ru(~t.l&ul,~t.m&ul,~t.h&W0)}function znt(t){return typeof t===CD||typeof t===Nat}function gen(t){return t==ss?nO:t==Ts?"-INF":""+t}function pen(t){return t==ss?nO:t==Ts?"-INF":""+t}function ben(t,e){return t>0?b.Math.log(t/e):-100}function BYt(t,e){return yc(t,e)<0?-1:yc(t,e)>0?1:0}function hwt(t,e,n){return Ale(t,u(e,46),u(n,167))}function RYt(t,e){return u(ewt(Pv(t.a)).Xb(e),42).cd()}function ven(t,e){return $an(e,t.length),new zKt(t,e)}function qnt(t,e){this.d=t,er.call(this,t),this.e=e}function Fv(t){this.d=(On(t),t),this.a=0,this.c=Iq}function fwt(t,e){vv.call(this,1),this.a=t,this.b=e}function jYt(t,e){return t.c?jYt(t.c,e):ue(t.b,e),t}function wen(t,e,n){var r;return r=Xm(t,e),_rt(t,e,n),r}function dwt(t,e){var n;return n=t.slice(0,e),Mmt(n,t)}function $Yt(t,e,n){var r;for(r=0;r<e;++r)Ji(t,r,n)}function zYt(t,e,n,r,s){for(;e<n;)r[s++]=ba(t,e++)}function men(t,e){return Ls(t.c.c+t.c.b,e.c.c+e.c.b)}function YM(t,e){return pz(t.a,e,(Fn(),I2))==null}function XM(t,e){hs(t.d,e,t.b.b,t.b),++t.a,t.c=null}function QM(t,e){IUt(t,Et(e,153)?e:u(e,1937).gl())}function Bv(t,e){us(pu(t.Oc(),new HT),new Ftt(e))}function w8(t,e,n,r,s){Cst(t,u(Ai(e.k,n),15),n,r,s)}function Kj(t){t.s=NaN,t.c=NaN,Koe(t,t.e),Koe(t,t.j)}function qYt(t){t.a=null,t.e=null,Yu(t.b),t.d=0,++t.c}function Hnt(t){return b.Math.abs(t.d.e-t.e.e)-t.a}function yen(t,e,n){return u(t.c._c(e,u(n,133)),42)}function xen(){return dR(),ct(ot(dge,1),ae,538,0,[mut])}function ken(t){return jx(),ts(Zd(t))==ts(Xp(t))}function HYt(t){tvt.call(this),this.a=t,ue(t.a,this)}function Gnt(t,e){this.d=Kun(t),this.c=e,this.a=.5*e}function GYt(){n2.call(this),this.a=!0,this.b=!0}function Zn(t){return(t.i==null&&pd(t),t.i).length}function VYt(t){return Et(t,99)&&(u(t,18).Bb&dc)!=0}function Een(t,e){++t.j,Sst(t,t.i,e),hpn(t,u(e,332))}function Vnt(t,e){return e=t.nk(null,e),fae(t,null,e)}function rs(t,e){return t.hi()&&(e=gQt(t,e)),t.Wh(e)}function P(t,e,n){var r;return r=Unt(t,e),Nee(n,r),r}function Unt(t,e){var n;return n=new kyt,n.j=t,n.d=e,n}function Ar(t){if(t==null)throw rt(new L9);return t}function Wnt(t){var e;return e=t.j,e||(t.j=new ltt(t))}function UYt(t){var e;return e=t.f,e||(t.f=new v2t(t))}function gwt(t){var e;return e=t.k,e||(t.k=new M3(t))}function Yj(t){var e;return e=t.k,e||(t.k=new M3(t))}function SC(t){var e;return e=t.g,e||(t.g=new QL(t))}function Ten(t){var e;return e=t.i,e||(t.i=new ntt(t))}function Knt(t){var e;return e=t.d,e||(t.d=new cx(t))}function WYt(t){return Ar(t),Et(t,475)?u(t,475):$o(t)}function pwt(t){return Et(t,607)?t:new nQt(t)}function KYt(t,e){return oI(e,t.c.b.c.gc()),new UHt(t,e)}function YYt(t,e,n){return gi(),new GQt(t,e,n)}function Ji(t,e,n){return iQe(n==null||dmn(t,n)),t[e]=n}function bwt(t,e){var n;return n=t.a.gc(),oI(e,n),n-1-e}function m8(t,e){return t.a+=String.fromCharCode(e),t}function Rp(t,e){return t.a+=String.fromCharCode(e),t}function Ynt(t,e){for(On(e);t.c<t.d;)t.ze(e,t.c++)}function Jn(t,e){return ea(e)?Fc(t,e):ec(Ao(t.f,e))}function Cen(t,e){return jx(),t==Zd(e)?Xp(e):Zd(e)}function _en(t,e){Bx(t,new Hm(e.f!=null?e.f:""+e.g))}function Sen(t,e){Bx(t,new Hm(e.f!=null?e.f:""+e.g))}function XYt(t){this.b=new le,this.a=new le,this.c=t}function Ch(t){this.c=new Ta,this.a=new le,this.b=t}function QYt(t){tvt.call(this),this.a=new Ta,this.c=t}function Hm(t){if(t==null)throw rt(new L9);this.a=t}function ZYt(t){Cpt(),this.b=new le,this.a=t,T3n(this,t)}function JYt(t){this.c=t,this.a=new Qi,this.b=new Qi}function tXt(){tXt=Z,wge=new qk(!1),mge=new qk(!0)}function Gm(){Gm=Z,hd(),vut=new ort((vn(),vn(),io))}function Xnt(){Xnt=Z,hd(),K8t=new ybt((vn(),vn(),UH))}function jp(){jp=Z,Ln=lpn(),dn(),t3&&v1n()}function Aen(t,e){return Xx(),u(go(t,e.d),15).Fc(e)}function Len(t,e,n,r){return n==0||(n-r)/n<t.e||e>=t.g}function Qnt(t,e,n){var r;return r=cit(t,e,n),z5t(t,r)}function Bx(t,e){var n;n=t.a.length,Xm(t,n),_rt(t,n,e)}function eXt(t,e){var n;n=console[t],n.call(console,e)}function nXt(t,e){var n;++t.j,n=t.Vi(),t.Ii(t.oi(n,e))}function Men(t,e,n){u(e.b,65),mu(e.a,new yvt(t,n,e))}function vwt(t,e,n){oR.call(this,e),this.a=t,this.b=n}function wwt(t,e,n){vv.call(this,t),this.a=e,this.b=n}function mwt(t,e,n){this.a=t,wpt.call(this,e),this.b=n}function rXt(t,e,n){this.a=t,Ywt.call(this,8,e,null,n)}function Ien(t){this.a=(On(Kr),Kr),this.b=t,new jpt}function iXt(t){this.c=t,this.b=this.c.a,this.a=this.c.e}function ywt(t){this.c=t,this.b=t.a.d.a,z2t(t.a.e,this)}function El(t){Pm(t.c!=-1),t.d.$c(t.c),t.b=t.c,t.c=-1}function AC(t){return b.Math.sqrt(t.a*t.a+t.b*t.b)}function Rv(t,e){return b8(e,t.a.c.length),Fe(t.a,e)}function fd(t,e){return Gt(t)===Gt(e)||t!=null&&yi(t,e)}function Den(t){return 0>=t?new fbt:won(t-1)}function Oen(t){return n3?art(n3,t):!1}function sXt(t){return t?t.dc():!t.Kc().Ob()}function Fa(t){return!t.a&&t.c?t.c.b:t.a}function Nen(t){return!t.a&&(t.a=new Ss(kb,t,4)),t.a}function jv(t){return!t.d&&(t.d=new Ss(ho,t,1)),t.d}function On(t){if(t==null)throw rt(new L9);return t}function LC(t){t.c?t.c.He():(t.d=!0,j2n(t))}function $p(t){t.c?$p(t.c):(d2(t),t.d=!0)}function aXt(t){Twt(t.a),t.b=Pt(Xn,Ie,1,t.b.length,5,1)}function Pen(t,e){return du(e.j.c.length,t.j.c.length)}function Fen(t,e){t.c<0||t.b.b<t.c?Kb(t.b,e):t.a._e(e)}function Ben(t,e){var n;n=t.Yg(e),n>=0?t.Bh(n):Q4t(t,e)}function oXt(t){var e,n;return e=t.c.i.c,n=t.d.i.c,e==n}function Ren(t){if(t.p!=4)throw rt(new Iu);return t.e}function jen(t){if(t.p!=3)throw rt(new Iu);return t.e}function $en(t){if(t.p!=6)throw rt(new Iu);return t.f}function zen(t){if(t.p!=6)throw rt(new Iu);return t.k}function qen(t){if(t.p!=3)throw rt(new Iu);return t.j}function Hen(t){if(t.p!=4)throw rt(new Iu);return t.j}function xwt(t){return!t.b&&(t.b=new cR(new Ytt)),t.b}function $v(t){return t.c==-2&&Vk(t,o0n(t.g,t.b)),t.c}function y8(t,e){var n;return n=Unt("",t),n.n=e,n.i=1,n}function Gen(t,e){Int(u(e.b,65),t),mu(e.a,new Jr(t))}function Ven(t,e){Mr((!t.a&&(t.a=new $M(t,t)),t.a),e)}function cXt(t,e){this.b=t,qnt.call(this,t,e),PUt(this)}function uXt(t,e){this.b=t,lvt.call(this,t,e),FUt(this)}function kwt(t,e,n,r){_v.call(this,t,e),this.d=n,this.a=r}function Xj(t,e,n,r){_v.call(this,t,n),this.a=e,this.f=r}function lXt(t,e){CXe.call(this,mon(Ar(t),Ar(e))),this.a=e}function hXt(){L4t.call(this,L2,(gHt(),f5e)),d3n(this)}function fXt(){L4t.call(this,Ph,(t8(),JAt)),kyn(this)}function dXt(){Gr.call(this,"DELAUNAY_TRIANGULATION",0)}function Uen(t){return String.fromCharCode.apply(null,t)}function ki(t,e,n){return ea(e)?xo(t,e,n):su(t.f,e,n)}function Ewt(t){return vn(),t?t.ve():(X3(),X3(),xEt)}function Wen(t,e,n){return Qx(),n.pg(t,u(e.cd(),146))}function gXt(t,e){return Mj(),new N3t(new YUt(t),new KUt(e))}function Ken(t){return Bl(t,Bat),q$(Oa(Oa(5,t),t/10|0))}function Qj(){Qj=Z,hge=new Ztt(ct(ot(M2,1),Dq,42,0,[]))}function pXt(t){return!t.d&&(t.d=new T(t.c.Cc())),t.d}function x8(t){return!t.a&&(t.a=new Yqt(t.c.vc())),t.a}function bXt(t){return!t.b&&(t.b=new Qk(t.c.ec())),t.b}function Wd(t,e){for(;e-- >0;)t=t<<1|(t<0?1:0);return t}function Pc(t,e){return Gt(t)===Gt(e)||t!=null&&yi(t,e)}function Yen(t,e){return Fn(),u(e.b,19).a<t}function Xen(t,e){return Fn(),u(e.a,19).a<t}function go(t,e){return Mnt(t.a,e)?t.b[u(e,22).g]:null}function Qen(t,e,n,r){t.a=Dl(t.a,0,e)+(""+r)+OM(t.a,n)}function vXt(t,e){t.u.Hc((Qu(),tg))&&epn(t,e),Bsn(t,e)}function ba(t,e){return Rr(e,t.length),t.charCodeAt(e)}function wXt(){Go.call(this,"There is no more element.")}function MC(t){this.d=t,this.a=this.d.b,this.b=this.d.c}function mXt(t){t.b=!1,t.c=!1,t.d=!1,t.a=!1}function si(t,e,n,r){return wne(t,e,n,!1),xz(t,r),t}function Zen(t){return t.j.c=Pt(Xn,Ie,1,0,5,1),t.a=-1,t}function Jen(t){return!t.c&&(t.c=new Cn(br,t,5,8)),t.c}function tnn(t){return!t.b&&(t.b=new Cn(br,t,4,7)),t.b}function Zj(t){return!t.n&&(t.n=new he(qo,t,1,7)),t.n}function Znt(t){return!t.c&&(t.c=new he(fl,t,9,9)),t.c}function k8(t){return t.e==UE&&gpt(t,whn(t.g,t.b)),t.e}function ZM(t){return t.f==UE&&Stt(t,s1n(t.g,t.b)),t.f}function Y3(t){var e;return e=t.b,!e&&(t.b=e=new ZL(t)),e}function Twt(t){var e;for(e=t.Kc();e.Ob();)e.Pb(),e.Qb()}function E8(t){if(al(t.d),t.d.d!=t.c)throw rt(new eh)}function Cwt(t,e){this.b=t,this.c=e,this.a=new Ex(this.b)}function Jnt(t,e,n){this.a=Nxt,this.d=t,this.b=e,this.c=n}function yXt(t,e){this.d=(On(t),t),this.a=16449,this.c=e}function enn(t,e){Zre(t,Xt(R0(e,"x")),Xt(R0(e,"y")))}function nnn(t,e){Zre(t,Xt(R0(e,"x")),Xt(R0(e,"y")))}function Ri(t,e){return d2(t),new Tn(t,new Lmt(e,t.a))}function pu(t,e){return d2(t),new Tn(t,new vmt(e,t.a))}function Jj(t,e){return d2(t),new G2t(t,new LJt(e,t.a))}function t$(t,e){return d2(t),new V2t(t,new MJt(e,t.a))}function rnn(t,e){return new KXt(u(Ar(t),62),u(Ar(e),62))}function inn(t,e){return pbt(),Ls((On(t),t),(On(e),e))}function snn(){return AR(),ct(ot(r7t,1),ae,481,0,[Rut])}function ann(){return MR(),ct(ot(K_t,1),ae,482,0,[qht])}function onn(){return IR(),ct(ot(o3e,1),ae,551,0,[Hht])}function cnn(){return H9(),ct(ot(pSt,1),ae,530,0,[jO])}function xXt(t){this.a=new le,this.e=Pt(Tr,te,48,t,0,2)}function trt(t,e,n,r){this.a=t,this.e=e,this.d=n,this.c=r}function e$(t,e,n,r){this.a=t,this.c=e,this.b=n,this.d=r}function _wt(t,e,n,r){this.c=t,this.b=e,this.a=n,this.d=r}function kXt(t,e,n,r){this.c=t,this.b=e,this.d=n,this.a=r}function ih(t,e,n,r){this.c=t,this.d=e,this.b=n,this.a=r}function EXt(t,e,n,r){this.a=t,this.d=e,this.c=n,this.b=r}function Rx(t,e,n,r){Gr.call(this,t,e),this.a=n,this.b=r}function TXt(t,e,n,r){this.a=t,this.c=e,this.d=n,this.b=r}function unn(t,e,n){myn(t.a,n),bcn(n),Upn(t.b,n),Byn(e,n)}function ert(t,e,n){var r,s;return r=Ext(t),s=e.Kh(n,r),s}function CXt(t,e){var n,r;return n=t/e,r=ps(n),n>r&&++r,r}function I0(t){var e,n;return n=(e=new wv,e),P8(n,t),n}function nrt(t){var e,n;return n=(e=new wv,e),D4t(n,t),n}function lnn(t,e){var n;return n=Jn(t.f,e),uyt(e,n),null}function rrt(t){var e;return e=xon(t),e||null}function _Xt(t){return!t.b&&(t.b=new he(Ws,t,12,3)),t.b}function hnn(t){return t!=null&&pM(rU,t.toLowerCase())}function fnn(t,e){return Ls(Fu(t)*xl(t),Fu(e)*xl(e))}function dnn(t,e){return Ls(Fu(t)*xl(t),Fu(e)*xl(e))}function gnn(t,e){return Ls(t.d.c+t.d.b/2,e.d.c+e.d.b/2)}function pnn(t,e){return Ls(t.g.c+t.g.b/2,e.g.c+e.g.b/2)}function SXt(t,e,n){n.a?xu(t,e.b-t.f/2):yu(t,e.a-t.g/2)}function AXt(t,e,n,r){this.a=t,this.b=e,this.c=n,this.d=r}function LXt(t,e,n,r){this.a=t,this.b=e,this.c=n,this.d=r}function Zb(t,e,n,r){this.e=t,this.a=e,this.c=n,this.d=r}function MXt(t,e,n,r){this.a=t,this.c=e,this.d=n,this.b=r}function IXt(t,e,n,r){nh(),EJt.call(this,e,n,r),this.a=t}function DXt(t,e,n,r){nh(),EJt.call(this,e,n,r),this.a=t}function OXt(t,e){this.a=t,xQe.call(this,t,u(t.d,15).Zc(e))}function irt(t){this.f=t,this.c=this.f.e,t.f>0&&Vse(this)}function NXt(t,e,n,r){this.b=t,this.c=r,Get.call(this,e,n)}function PXt(t){return Qn(t.b<t.d.gc()),t.d.Xb(t.c=t.b++)}function _h(t){t.a.a=t.c,t.c.b=t.a,t.a.b=t.c.a=null,t.b=0}function Swt(t,e){return t.b=e.b,t.c=e.c,t.d=e.d,t.a=e.a,t}function n$(t){return t.n&&(t.e!==efe&&t._d(),t.j=null),t}function FXt(t){return mC(t==null||znt(t)&&t.im!==Ct),t}function BXt(t){this.b=new le,As(this.b,this.b),this.a=t}function jx(){jx=Z,nG=new le,qut=new Cr,zut=new le}function vn(){vn=Z,io=new Ot,a0=new qt,UH=new nt}function X3(){X3=Z,mEt=new Me,yEt=new Me,xEt=new ve}function Awt(){Awt=Z,Hge=new vs,Vge=new Wvt,Gge=new nu}function bnn(){DEt==256&&(IEt=YH,YH=new _,DEt=0),++DEt}function $x(t){var e;return e=t.f,e||(t.f=new n8(t,t.c))}function vnn(t){return uw(t)&&je(Re(qe(t,(Te(),P2))))}function wnn(t,e){return ln(t,u(Q(e,(Te(),b7)),19),e)}function RXt(t,e){return a4(t.j,e.s,e.c)+a4(e.e,t.s,t.c)}function jXt(t,e){t.e&&!t.e.a&&(Rzt(t.e,e),jXt(t.e,e))}function $Xt(t,e){t.d&&!t.d.a&&(Rzt(t.d,e),$Xt(t.d,e))}function mnn(t,e){return-Ls(Fu(t)*xl(t),Fu(e)*xl(e))}function ynn(t){return u(t.cd(),146).tg()+":"+$o(t.dd())}function xnn(t){lf();var e;e=u(t.g,10),e.n.a=t.d.c+e.d.b}function knn(t,e,n){return q9(),dln(u(Jn(t.e,e),522),n)}function Enn(t,e){return sl(t),sl(e),$qt(u(t,22),u(e,22))}function Tnn(t,e,n){t.i=0,t.e=0,e!=n&&ore(t,e,n)}function Cnn(t,e,n){t.i=0,t.e=0,e!=n&&cre(t,e,n)}function Jb(t,e,n){var r,s;r=fvt(n),s=new y9(r),Wf(t,e,s)}function srt(t,e,n,r,s,o){gI.call(this,t,e,n,r,s,o?-2:-1)}function zXt(t,e,n,r){Kbt.call(this,e,n),this.b=t,this.a=r}function Lwt(t,e){new Qi,this.a=new Du,this.b=t,this.c=e}function _nn(t,e){return u(Q(t,(se(),I6)),15).Fc(e),e}function r$(t,e){if(t==null)throw rt(new yx(e));return t}function Mi(t){return!t.q&&(t.q=new he(Vh,t,11,10)),t.q}function Wt(t){return!t.s&&(t.s=new he(Au,t,21,17)),t.s}function i$(t){return!t.a&&(t.a=new he(ns,t,10,11)),t.a}function s$(t){return Et(t,14)?new yC(u(t,14)):rtn(t.Kc())}function Snn(t){return new zUt(t,t.e.Hd().gc()*t.c.Hd().gc())}function Ann(t){return new qUt(t,t.e.Hd().gc()*t.c.Hd().gc())}function Mwt(t){return t&&t.hashCode?t.hashCode():Iv(t)}function art(t,e){return e==null?!!Ao(t.f,null):Htn(t.g,e)}function Lnn(t){return Ar(t),use(new ar(lr(t.a.Kc(),new z)))}function JM(t){return vn(),Et(t,54)?new oet(t):new fj(t)}function qXt(t,e,n){return t.f?t.f.Ne(e,n):!1}function Mnn(t,e){return t.a=Dl(t.a,0,e)+""+OM(t.a,e+1),t}function Inn(t,e){var n;return n=f2t(t.a,e),n&&(e.d=null),n}function a$(t){var e,n;n=t,e=n.$modCount|0,n.$modCount=e+1}function Iwt(t){this.b=t,this.c=t,t.e=null,t.c=null,this.a=1}function HXt(t){this.b=t,this.a=new Lp(u(Ar(new Wc),62))}function GXt(t){this.c=t,this.b=new Lp(u(Ar(new $s),62))}function VXt(t){this.c=t,this.b=new Lp(u(Ar(new WP),62))}function UXt(){this.a=new Opt,this.b=new lqt,this.d=new KP}function zv(){this.a=new Du,this.b=(Bl(3,my),new Yc(3))}function WXt(){this.b=new qs,this.d=new Qi,this.e=new Ppt}function o$(t){this.c=t.c,this.d=t.d,this.b=t.b,this.a=t.a}function KXt(t,e){fKe.call(this,new Bnt(t)),this.a=t,this.b=e}function YXt(){Dst(this,new qB),this.wb=(jp(),Ln),t8()}function Dnn(t){wr(t,"No crossing minimization",1),or(t)}function Onn(t){vR(),b.setTimeout(function(){throw t},0)}function So(t){return t.u||(rl(t),t.u=new DWt(t,t)),t.u}function bu(t){var e;return e=u(In(t,16),26),e||t.zh()}function XXt(t,e){return Et(e,146)&&hn(t.b,u(e,146).tg())}function Nnn(t,e){return t.a?e.Wg().Kc():u(e.Wg(),69).Zh()}function Pnn(t){return t.k==(Gn(),Ds)&&Vs(t,(se(),mS))}function ort(t){this.a=(vn(),Et(t,54)?new oet(t):new fj(t))}function T8(){T8=Z;var t,e;e=!nhn(),t=new bt,kut=e?new U:t}function crt(t,e){var n;return n=Ap(t.gm),e==null?n:n+": "+e}function QXt(t,e){var n;return n=t.b.Qc(e),qZt(n,t.b.gc()),n}function tI(t,e){if(t==null)throw rt(new yx(e));return t}function Ao(t,e){return kre(t,e,vrn(t,e==null?0:t.b.se(e)))}function Fnn(t,e,n){return n>=0&&hn(t.substr(n,e.length),e)}function zp(t,e,n,r,s,o,h){return new Art(t.e,e,n,r,s,o,h)}function ZXt(t,e,n,r,s,o){this.a=t,eit.call(this,e,n,r,s,o)}function JXt(t,e,n,r,s,o){this.a=t,eit.call(this,e,n,r,s,o)}function tQt(t,e){this.g=t,this.d=ct(ot(o0,1),zg,10,0,[e])}function Sg(t,e){this.e=t,this.a=Xn,this.b=Eue(e),this.c=e}function eQt(t,e){xj.call(this),Rmt(this),this.a=t,this.c=e}function eI(t,e,n,r){Ji(t.c[e.g],n.g,r),Ji(t.c[n.g],e.g,r)}function urt(t,e,n,r){Ji(t.c[e.g],e.g,n),Ji(t.b[e.g],e.g,r)}function Bnn(){return lI(),ct(ot(zCt,1),ae,376,0,[bht,DO])}function Rnn(){return bI(),ct(ot(OTt,1),ae,479,0,[DTt,FG])}function jnn(){return TI(),ct(ot(MTt,1),ae,419,0,[NG,LTt])}function $nn(){return D$(),ct(ot(kTt,1),ae,422,0,[xTt,vlt])}function znn(){return x$(),ct(ot(UTt,1),ae,420,0,[Dlt,VTt])}function qnn(){return yI(),ct(ot(BCt,1),ae,421,0,[dht,ght])}function Hnn(){return BC(),ct(ot(bme,1),ae,523,0,[NS,OS])}function Gnn(){return Vf(),ct(ot($me,1),ae,520,0,[Uy,pb])}function Vnn(){return dd(),ct(ot(Eme,1),ae,516,0,[Rw,Kg])}function Unn(){return E1(),ct(ot(Cme,1),ae,515,0,[j2,z1])}function Wnn(){return qv(),ct(ot(Wme,1),ae,455,0,[bb,e5])}function Knn(){return v$(),ct(ot(h_t,1),ae,425,0,[Iht,l_t])}function Ynn(){return d$(),ct(ot(u_t,1),ae,480,0,[Mht,c_t])}function Xnn(){return iz(),ct(ot(f_t,1),ae,495,0,[TV,E7])}function Qnn(){return N$(),ct(ot(g_t,1),ae,426,0,[d_t,Pht])}function Znn(){return NI(),ct(ot(vSt,1),ae,429,0,[OV,bSt])}function Jnn(){return hI(),ct(ot(Y_t,1),ae,430,0,[Ght,IV])}function trn(){return Nz(),ct(ot(NEt,1),ae,428,0,[Iut,OEt])}function ern(){return $$(),ct(ot(FEt,1),ae,427,0,[PEt,Dut])}function nrn(){return z$(),ct(ot(l7t,1),ae,424,0,[Hut,rG])}function rrn(){return q8(),ct(ot(jbe,1),ae,511,0,[pO,nlt])}function c$(t,e,n,r){return n>=0?t.jh(e,n,r):t.Sg(null,n,r)}function lrt(t){return t.b.b==0?t.a.$e():knt(t.b)}function irn(t){if(t.p!=5)throw rt(new Iu);return Sr(t.f)}function srn(t){if(t.p!=5)throw rt(new Iu);return Sr(t.k)}function Dwt(t){return Gt(t.a)===Gt((hit(),_ft))&&a3n(t),t.a}function nQt(t){this.a=u(Ar(t),271),this.b=(vn(),new C2t(t))}function rQt(t,e){hpt(this,new $e(t.a,t.b)),XB(this,UM(e))}function qv(){qv=Z,bb=new $bt(d6,0),e5=new $bt(g6,1)}function dd(){dd=Z,Rw=new Rbt(g6,0),Kg=new Rbt(d6,1)}function Hv(){pKe.call(this,new kx(Qm(12))),x2t(!0),this.a=2}function hrt(t,e,n){gi(),vv.call(this,t),this.b=e,this.a=n}function Owt(t,e,n){nh(),oR.call(this,e),this.a=t,this.b=n}function iQt(t){xj.call(this),Rmt(this),this.a=t,this.c=!0}function sQt(t){var e;e=t.c.d.b,t.b=e,t.a=t.c.d,e.a=t.c.d.b=t}function u$(t){var e;fon(t.a),bUt(t.a),e=new tr(t.a),c3t(e)}function arn(t,e){gue(t,!0),mu(t.e.wf(),new bvt(t,!0,e))}function l$(t,e){return RZt(e),uon(t,Pt(Tr,Xr,25,e,15,1),e)}function orn(t,e){return jx(),t==ts(Zd(e))||t==ts(Xp(e))}function Fc(t,e){return e==null?ec(Ao(t.f,null)):U9(t.g,e)}function crn(t){return t.b==0?null:(Qn(t.b!=0),ch(t,t.a.a))}function ps(t){return Math.max(Math.min(t,vi),-2147483648)|0}function urn(t,e){var n=xut[t.charCodeAt(0)];return n??t}function h$(t,e){return r$(t,"set1"),r$(e,"set2"),new eGt(t,e)}function lrn(t,e){var n;return n=ion(t.f,e),Li(mj(n),t.f.d)}function IC(t,e){var n,r;return n=e,r=new $t,nhe(t,n,r),r.d}function frt(t,e,n,r){var s;s=new UWt,e.a[n.g]=s,Nx(t.b,r,s)}function Nwt(t,e,n){var r;r=t.Yg(e),r>=0?t.sh(r,n):E5t(t,e,n)}function Q3(t,e,n){g$(),t&&ki(Eft,t,e),t&&ki(cN,t,n)}function aQt(t,e,n){this.i=new le,this.b=t,this.g=e,this.a=n}function f$(t,e,n){this.c=new le,this.e=t,this.f=e,this.b=n}function Pwt(t,e,n){this.a=new le,this.e=t,this.f=e,this.c=n}function oQt(t,e){uj(this),this.f=e,this.g=t,n$(this),this._d()}function nI(t,e){var n;n=t.q.getHours(),t.q.setDate(e),y_(t,n)}function cQt(t,e){var n;for(Ar(e),n=t.a;n;n=n.c)e.Od(n.g,n.i)}function uQt(t){var e;return e=new xR(Qm(t.length)),_yt(e,t),e}function hrn(t){function e(){}return e.prototype=t||{},new e}function frn(t,e){return Rne(t,e)?(Fee(t),!0):!1}function D0(t,e){if(e==null)throw rt(new L9);return uhn(t,e)}function drn(t){if(t.qe())return null;var e=t.n;return $H[e]}function rI(t){return t.Db>>16!=3?null:u(t.Cb,33)}function k1(t){return t.Db>>16!=9?null:u(t.Cb,33)}function lQt(t){return t.Db>>16!=6?null:u(t.Cb,79)}function hQt(t){return t.Db>>16!=7?null:u(t.Cb,235)}function fQt(t){return t.Db>>16!=7?null:u(t.Cb,160)}function ts(t){return t.Db>>16!=11?null:u(t.Cb,33)}function dQt(t,e){var n;return n=t.Yg(e),n>=0?t.lh(n):zst(t,e)}function gQt(t,e){var n;return n=new $vt(e),pae(n,t),new Pu(n)}function Fwt(t){var e;return e=t.d,e=t.si(t.f),Mr(t,e),e.Ob()}function pQt(t,e){return t.b+=e.b,t.c+=e.c,t.d+=e.d,t.a+=e.a,t}function drt(t,e){return b.Math.abs(t)<b.Math.abs(e)?t:e}function grn(t){return!t.a&&(t.a=new he(ns,t,10,11)),t.a.i>0}function bQt(){this.a=new A0,this.e=new qs,this.g=0,this.i=0}function vQt(t){this.a=t,this.b=Pt(dme,te,1944,t.e.length,0,2)}function grt(t,e,n){var r;r=ire(t,e,n),t.b=new rz(r.c.length)}function E1(){E1=Z,j2=new Bbt(yot,0),z1=new Bbt("UP",1)}function d$(){d$=Z,Mht=new zbt(I1e,0),c_t=new zbt("FAN",1)}function g$(){g$=Z,Eft=new Cr,cN=new Cr,NYe(Lge,new XT)}function prn(t){if(t.p!=0)throw rt(new Iu);return aC(t.f,0)}function brn(t){if(t.p!=0)throw rt(new Iu);return aC(t.k,0)}function wQt(t){return t.Db>>16!=3?null:u(t.Cb,147)}function C8(t){return t.Db>>16!=6?null:u(t.Cb,235)}function Vm(t){return t.Db>>16!=17?null:u(t.Cb,26)}function mQt(t,e){var n=t.a=t.a||[];return n[e]||(n[e]=t.le(e))}function vrn(t,e){var n;return n=t.a.get(e),n??new Array}function wrn(t,e){var n;n=t.q.getHours(),t.q.setMonth(e),y_(t,n)}function xo(t,e,n){return e==null?su(t.f,null,n):nw(t.g,e,n)}function DC(t,e,n,r,s,o){return new F0(t.e,e,t.aj(),n,r,s,o)}function iI(t,e,n){return t.a=Dl(t.a,0,e)+(""+n)+OM(t.a,e),t}function mrn(t,e,n){return ue(t.a,(Qj(),hst(e,n),new _v(e,n))),t}function Bwt(t){return E2t(t.c),t.e=t.a=t.c,t.c=t.c.c,++t.d,t.a.f}function yQt(t){return E2t(t.e),t.c=t.a=t.e,t.e=t.e.e,--t.d,t.a.f}function sa(t,e){t.d&&vu(t.d.e,t),t.d=e,t.d&&ue(t.d.e,t)}function Da(t,e){t.c&&vu(t.c.g,t),t.c=e,t.c&&ue(t.c.g,t)}function ko(t,e){t.c&&vu(t.c.a,t),t.c=e,t.c&&ue(t.c.a,t)}function Uo(t,e){t.i&&vu(t.i.j,t),t.i=e,t.i&&ue(t.i.j,t)}function xQt(t,e,n){this.a=e,this.c=t,this.b=(Ar(n),new Pu(n))}function kQt(t,e,n){this.a=e,this.c=t,this.b=(Ar(n),new Pu(n))}function EQt(t,e){this.a=t,this.c=nc(this.a),this.b=new o$(e)}function yrn(t){var e;return d2(t),e=new qs,Ri(t,new Ve(e))}function Um(t,e){if(t<0||t>e)throw rt(new mo(qxt+t+Hxt+e))}function Rwt(t,e){return dYt(t.a,e)?cwt(t,u(e,22).g,null):null}function xrn(t){return Iit(),Fn(),u(t.a,81).d.e!=0}function TQt(){TQt=Z,gge=Wr((dR(),ct(ot(dge,1),ae,538,0,[mut])))}function CQt(){CQt=Z,tme=Ku(new Hs,(Wa(),Io),(ro(),bO))}function jwt(){jwt=Z,eme=Ku(new Hs,(Wa(),Io),(ro(),bO))}function _Qt(){_Qt=Z,rme=Ku(new Hs,(Wa(),Io),(ro(),bO))}function SQt(){SQt=Z,wme=bi(new Hs,(Wa(),Io),(ro(),fS))}function Ol(){Ol=Z,xme=bi(new Hs,(Wa(),Io),(ro(),fS))}function AQt(){AQt=Z,kme=bi(new Hs,(Wa(),Io),(ro(),fS))}function prt(){prt=Z,Sme=bi(new Hs,(Wa(),Io),(ro(),fS))}function LQt(){LQt=Z,dye=Ku(new Hs,(uE(),FS),(f_(),xht))}function t2(t,e,n,r){this.c=t,this.d=r,vrt(this,e),wrt(this,n)}function zx(t){this.c=new Qi,this.b=t.b,this.d=t.c,this.a=t.a}function brt(t){this.a=b.Math.cos(t),this.b=b.Math.sin(t)}function vrt(t,e){t.a&&vu(t.a.k,t),t.a=e,t.a&&ue(t.a.k,t)}function wrt(t,e){t.b&&vu(t.b.f,t),t.b=e,t.b&&ue(t.b.f,t)}function MQt(t,e){Men(t,t.b,t.c),u(t.b.b,65),e&&u(e.b,65).b}function krn(t,e){e3t(t,e),Et(t.Cb,88)&&hy(rl(u(t.Cb,88)),2)}function mrt(t,e){Et(t.Cb,88)&&hy(rl(u(t.Cb,88)),4),Xc(t,e)}function p$(t,e){Et(t.Cb,179)&&(u(t.Cb,179).tb=null),Xc(t,e)}function Bc(t,e){return to(),Yrt(e)?new Ij(e,t):new DM(e,t)}function Ern(t,e){var n,r;n=e.c,r=n!=null,r&&Bx(t,new Hm(e.c))}function IQt(t){var e,n;return n=(t8(),e=new wv,e),P8(n,t),n}function DQt(t){var e,n;return n=(t8(),e=new wv,e),P8(n,t),n}function OQt(t,e){var n;return n=new Ch(t),e.c[e.c.length]=n,n}function NQt(t,e){var n;return n=u(ny($x(t.a),e),14),n?n.gc():0}function PQt(t){var e;return d2(t),e=(X3(),X3(),yEt),G$(t,e)}function FQt(t){for(var e;;)if(e=t.Pb(),!t.Ob())return e}function $wt(t,e){dKe.call(this,new kx(Qm(t))),Bl(e,Yhe),this.a=e}function Kd(t,e,n){Hre(e,n,t.gc()),this.c=t,this.a=e,this.b=n-e}function BQt(t,e,n){var r;Hre(e,n,t.c.length),r=n-e,lbt(t.c,e,r)}function Trn(t,e){NUt(t,Sr(Ps(Fp(e,24),Pq)),Sr(Ps(e,Pq)))}function An(t,e){if(t<0||t>=e)throw rt(new mo(qxt+t+Hxt+e))}function Rr(t,e){if(t<0||t>=e)throw rt(new Zpt(qxt+t+Hxt+e))}function _n(t,e){this.b=(On(t),t),this.a=e&yy?e:e|64|bd}function RQt(t){pUt(this),Yzt(this.a,Tyt(b.Math.max(8,t))<<1)}function T1(t){return Ko(ct(ot(Us,1),te,8,0,[t.i.n,t.n,t.a]))}function Crn(){return I1(),ct(ot(ll,1),ae,132,0,[MEt,Gl,Ly])}function _rn(){return Kf(),ct(ot(My,1),ae,232,0,[sc,tu,ac])}function Srn(){return Xu(),ct(ot(Zge,1),ae,461,0,[Sd,cb,mf])}function Arn(){return wu(),ct(ot(tpe,1),ae,462,0,[e1,ub,yf])}function Lrn(){return ew(),ct(ot(A7t,1),ae,423,0,[$4,S7t,Jut])}function Mrn(){return jC(),ct(ot(T7t,1),ae,379,0,[Wut,Uut,Kut])}function Irn(){return YC(),ct(ot(SCt,1),ae,378,0,[oht,_Ct,uV])}function Drn(){return Yx(),ct(ot(TTt,1),ae,314,0,[S6,wO,ETt])}function Orn(){return X$(),ct(ot(_Tt,1),ae,337,0,[CTt,OG,wlt])}function Nrn(){return u2(),ct(ot(g2e,1),ae,450,0,[xlt,u7,G4])}function Prn(){return Jv(),ct(ot(clt,1),ae,361,0,[Aw,hb,Sw])}function Frn(){return B0(),ct(ot(k2e,1),ae,303,0,[yO,U4,A6])}function Brn(){return W8(),ct(ot(Ilt,1),ae,292,0,[Llt,Mlt,mO])}function Rrn(){return so(),ct(ot(Wwe,1),ae,452,0,[MS,Ju,eu])}function jrn(){return j0(),ct(ot(FCt,1),ae,339,0,[gb,PCt,fht])}function $rn(){return uz(),ct(ot($Ct,1),ae,375,0,[RCt,pht,jCt])}function zrn(){return gz(),ct(ot(WCt,1),ae,377,0,[mht,x7,Vy])}function qrn(){return tE(),ct(ot(HCt,1),ae,336,0,[vht,qCt,IS])}function Hrn(){return oz(),ct(ot(UCt,1),ae,338,0,[VCt,wht,GCt])}function Grn(){return Zv(),ct(ot(hme,1),ae,454,0,[OO,DS,dV])}function Vrn(){return Cz(),ct(ot(wye,1),ae,442,0,[Nht,Dht,Oht])}function Urn(){return RI(),ct(ot(v_t,1),ae,380,0,[CV,p_t,b_t])}function Wrn(){return Tz(),ct(ot(P_t,1),ae,381,0,[N_t,$ht,O_t])}function Krn(){return cz(),ct(ot(I_t,1),ae,293,0,[jht,M_t,L_t])}function Yrn(){return GI(),ct(ot(zht,1),ae,437,0,[AV,LV,MV])}function Xrn(){return $0(),ct(ot(TAt,1),ae,334,0,[HV,Zg,YS])}function Qrn(){return A1(),ct(ot(fAt,1),ae,272,0,[_7,Yy,S7])}function Zrn(t,e){return mbn(t,e,Et(e,99)&&(u(e,18).Bb&Ya)!=0)}function Jrn(t,e,n){var r;return r=E_(t,e,!1),r.b<=e&&r.a<=n}function jQt(t,e,n){var r;r=new CQ,r.b=e,r.a=n,++e.b,ue(t.d,r)}function tin(t,e){var n;return n=(On(t),t).g,P2t(!!n),On(e),n(e)}function zwt(t,e){var n,r;return r=v8(t,e),n=t.a.Zc(r),new tGt(t,n)}function ein(t){return t.Db>>16!=6?null:u(Gst(t),235)}function nin(t){if(t.p!=2)throw rt(new Iu);return Sr(t.f)&ms}function rin(t){if(t.p!=2)throw rt(new Iu);return Sr(t.k)&ms}function iin(t){return t.a==(L8(),oU)&&_tt(t,Pbn(t.g,t.b)),t.a}function qx(t){return t.d==(L8(),oU)&&E9(t,Awn(t.g,t.b)),t.d}function J(t){return Qn(t.a<t.c.c.length),t.b=t.a++,t.c.c[t.b]}function sin(t,e){t.b=t.b|e.b,t.c=t.c|e.c,t.d=t.d|e.d,t.a=t.a|e.a}function Ps(t,e){return Vp(Jtn(Bo(t)?Sh(t):t,Bo(e)?Sh(e):e))}function C1(t,e){return Vp(ten(Bo(t)?Sh(t):t,Bo(e)?Sh(e):e))}function yrt(t,e){return Vp(een(Bo(t)?Sh(t):t,Bo(e)?Sh(e):e))}function ain(t){return Oa(M0(ku(ol(t,32)),32),ku(ol(t,32)))}function Gv(t){return Ar(t),Et(t,14)?new Pu(u(t,14)):d8(t.Kc())}function oin(t,e){return $C(),t.c==e.c?Ls(e.d,t.d):Ls(t.c,e.c)}function cin(t,e){return $C(),t.c==e.c?Ls(t.d,e.d):Ls(t.c,e.c)}function uin(t,e){return $C(),t.c==e.c?Ls(t.d,e.d):Ls(e.c,t.c)}function lin(t,e){return $C(),t.c==e.c?Ls(e.d,t.d):Ls(e.c,t.c)}function hin(t,e){var n;n=Xt(ye(t.a.We((ci(),qV)))),She(t,e,n)}function fin(t,e){var n;n=u(Jn(t.g,e),57),mu(e.d,new HGt(t,n))}function din(t,e){var n,r;return n=Cse(t),r=Cse(e),n<r?-1:n>r?1:0}function $Qt(t,e){var n,r;return n=Grt(e),r=n,u(Jn(t.c,r),19).a}function zQt(t,e){var n;for(n=t+"";n.length<e;)n="0"+n;return n}function b$(t){return t.c==null||t.c.length==0?"n_"+t.g:"n_"+t.c}function qwt(t){return t.c==null||t.c.length==0?"n_"+t.b:"n_"+t.c}function Hwt(t,e){return t&&t.equals?t.equals(e):Gt(t)===Gt(e)}function Gwt(t,e){return e==0?!!t.o&&t.o.f!=0:est(t,e)}function hf(t,e,n){var r;t.n&&e&&n&&(r=new qZ,ue(t.e,r))}function xrt(t,e,n){var r;r=t.d[e.p],t.d[e.p]=t.d[n.p],t.d[n.p]=r}function qQt(t,e,n){this.d=t,this.j=e,this.e=n,this.o=-1,this.p=3}function HQt(t,e,n){this.d=t,this.k=e,this.f=n,this.o=-1,this.p=5}function GQt(t,e,n){vv.call(this,25),this.b=t,this.a=e,this.c=n}function Nl(t){gi(),vv.call(this,t),this.c=!1,this.a=!1}function VQt(t,e,n,r,s,o){zmt.call(this,t,e,n,r,s),o&&(this.o=-2)}function UQt(t,e,n,r,s,o){qmt.call(this,t,e,n,r,s),o&&(this.o=-2)}function WQt(t,e,n,r,s,o){fmt.call(this,t,e,n,r,s),o&&(this.o=-2)}function KQt(t,e,n,r,s,o){Vmt.call(this,t,e,n,r,s),o&&(this.o=-2)}function YQt(t,e,n,r,s,o){dmt.call(this,t,e,n,r,s),o&&(this.o=-2)}function XQt(t,e,n,r,s,o){Hmt.call(this,t,e,n,r,s),o&&(this.o=-2)}function QQt(t,e,n,r,s,o){Gmt.call(this,t,e,n,r,s),o&&(this.o=-2)}function ZQt(t,e,n,r,s,o){gmt.call(this,t,e,n,r,s),o&&(this.o=-2)}function JQt(t,e,n,r){oR.call(this,n),this.b=t,this.c=e,this.d=r}function Vwt(t,e){this.a=new le,this.d=new le,this.f=t,this.c=e}function tZt(){this.c=new _Ut,this.a=new UXt,this.b=new iqt,vGt()}function eZt(){Qx(),this.b=new Cr,this.a=new Cr,this.c=new le}function nZt(t,e){this.g=t,this.d=(L8(),oU),this.a=oU,this.b=e}function rZt(t,e){this.f=t,this.a=(L8(),aU),this.c=aU,this.b=e}function Uwt(t,e){!t.c&&(t.c=new is(t,0)),kq(t.c,(Di(),oA),e)}function v$(){v$=Z,Iht=new qbt("DFS",0),l_t=new qbt("BFS",1)}function gin(t,e,n){var r;return r=u(t.Zb().xc(e),14),!!r&&r.Hc(n)}function iZt(t,e,n){var r;return r=u(t.Zb().xc(e),14),!!r&&r.Mc(n)}function sZt(t,e,n,r){return t.a+=""+Dl(e==null?Tu:$o(e),n,r),t}function rc(t,e,n,r,s,o){return wne(t,e,n,o),Xyt(t,r),Qyt(t,s),t}function krt(t){return Qn(t.b.b!=t.d.a),t.c=t.b=t.b.b,--t.a,t.c.c}function OC(t){for(;t.d>0&&t.a[--t.d]==0;);t.a[t.d++]==0&&(t.e=0)}function aZt(t){return t.a?t.e.length==0?t.a.a:t.a.a+(""+t.e):t.c}function pin(t){return!!t.a&&il(t.a.a).i!=0&&!(t.b&&cst(t.b))}function bin(t){return!!t.u&&Lc(t.u.a).i!=0&&!(t.n&&ost(t.n))}function oZt(t){return _nt(t.e.Hd().gc()*t.c.Hd().gc(),16,new ox(t))}function vin(t,e){return BYt(ku(t.q.getTime()),ku(e.q.getTime()))}function gd(t){return u(D1(t,Pt(tlt,Fot,17,t.c.length,0,1)),474)}function sI(t){return u(D1(t,Pt(o0,zg,10,t.c.length,0,1)),193)}function win(t){return Ol(),!Va(t)&&!(!Va(t)&&t.c.i.c==t.d.i.c)}function cZt(t,e,n){var r;r=(Ar(t),new Pu(t)),Kfn(new xQt(r,e,n))}function aI(t,e,n){var r;r=(Ar(t),new Pu(t)),Yfn(new kQt(r,e,n))}function uZt(t,e){var n;return n=1-e,t.a[n]=nz(t.a[n],n),nz(t,e)}function lZt(t,e){var n;t.e=new Vpt,n=gy(e),Xs(n,t.c),rue(t,n,0)}function aa(t,e,n,r){var s;s=new WF,s.a=e,s.b=n,s.c=r,ni(t.a,s)}function xe(t,e,n,r){var s;s=new WF,s.a=e,s.b=n,s.c=r,ni(t.b,s)}function ff(t){var e,n,r;return e=new GYt,n=uat(e,t),r4n(e),r=n,r}function Wwt(){var t,e,n;return e=(n=(t=new wv,t),n),ue(uLt,e),e}function w$(t){return t.j.c=Pt(Xn,Ie,1,0,5,1),Twt(t.c),Zen(t.a),t}function Z3(t){return q9(),Et(t.g,10)?u(t.g,10):null}function min(t){return Y3(t).dc()?!1:(wXe(t,new ht),!0)}function yin(t){if(!("stack"in t))try{throw t}catch{}return t}function oI(t,e){if(t<0||t>=e)throw rt(new mo(Ogn(t,e)));return t}function hZt(t,e,n){if(t<0||e<t||e>n)throw rt(new mo(ign(t,e,n)))}function Ert(t,e){if(Ns(t.a,e),e.d)throw rt(new Go(vfe));e.d=t}function Trt(t,e){if(e.$modCount!=t.$modCount)throw rt(new eh)}function fZt(t,e){return Et(e,42)?dst(t.a,u(e,42)):!1}function dZt(t,e){return Et(e,42)?dst(t.a,u(e,42)):!1}function gZt(t,e){return Et(e,42)?dst(t.a,u(e,42)):!1}function xin(t,e){return t.a<=t.b?(e.ud(t.a++),!0):!1}function Vv(t){var e;return Bo(t)?(e=t,e==-0?0:e):Man(t)}function m$(t){var e;return $p(t),e=new Ke,B3(t.a,new bn(e)),e}function pZt(t){var e;return $p(t),e=new Ge,B3(t.a,new pe(e)),e}function ha(t,e){this.a=t,fx.call(this,t),Um(e,t.gc()),this.b=e}function Kwt(t){this.e=t,this.b=this.e.a.entries(),this.a=new Array}function kin(t){return _nt(t.e.Hd().gc()*t.c.Hd().gc(),273,new GB(t))}function y$(t){return new Yc((Bl(t,Bat),q$(Oa(Oa(5,t),t/10|0))))}function bZt(t){return u(D1(t,Pt(Fbe,Kfe,11,t.c.length,0,1)),1943)}function Ein(t,e,n){return n.f.c.length>0?hwt(t.a,e,n):hwt(t.b,e,n)}function Tin(t,e,n){t.d&&vu(t.d.e,t),t.d=e,t.d&&$m(t.d.e,n,t)}function Crt(t,e){v5n(e,t),Mvt(t.d),Mvt(u(Q(t,(Te(),nV)),207))}function NC(t,e){b5n(e,t),Lvt(t.d),Lvt(u(Q(t,(Te(),nV)),207))}function Uv(t,e){var n,r;return n=D0(t,e),r=null,n&&(r=n.fe()),r}function _8(t,e){var n,r;return n=Xm(t,e),r=null,n&&(r=n.ie()),r}function PC(t,e){var n,r;return n=D0(t,e),r=null,n&&(r=n.ie()),r}function O0(t,e){var n,r;return n=D0(t,e),r=null,n&&(r=j4t(n)),r}function Cin(t,e,n){var r;return r=oE(n),vq(t.g,r,e),vq(t.i,e,n),e}function _in(t,e,n){var r;r=thn();try{return IQe(t,e,n)}finally{Bin(r)}}function vZt(t){var e;e=t.Wg(),this.a=Et(e,69)?u(e,69).Zh():e.Kc()}function Hs(){Iqt.call(this),this.j.c=Pt(Xn,Ie,1,0,5,1),this.a=-1}function Ywt(t,e,n,r){this.d=t,this.n=e,this.g=n,this.o=r,this.p=-1}function wZt(t,e,n,r){this.e=r,this.d=null,this.c=t,this.a=e,this.b=n}function Xwt(t,e,n){this.d=new sR(this),this.e=t,this.i=e,this.f=n}function x$(){x$=Z,Dlt=new Obt(NE,0),VTt=new Obt("TOP_LEFT",1)}function mZt(){mZt=Z,YCt=gXt(de(1),de(4)),KCt=gXt(de(1),de(2))}function yZt(){yZt=Z,c3e=Wr((IR(),ct(ot(o3e,1),ae,551,0,[Hht])))}function xZt(){xZt=Z,a3e=Wr((MR(),ct(ot(K_t,1),ae,482,0,[qht])))}function kZt(){kZt=Z,_3e=Wr((H9(),ct(ot(pSt,1),ae,530,0,[jO])))}function EZt(){EZt=Z,Dpe=Wr((AR(),ct(ot(r7t,1),ae,481,0,[Rut])))}function Sin(){return tw(),ct(ot(Cpe,1),ae,406,0,[aO,sO,Fut,But])}function Ain(){return P$(),ct(ot(KH,1),ae,297,0,[Aut,_Et,SEt,AEt])}function Lin(){return s_(),ct(ot(Mpe,1),ae,394,0,[hO,JH,tG,fO])}function Min(){return n6(),ct(ot(Spe,1),ae,323,0,[cO,oO,uO,lO])}function Iin(){return K8(),ct(ot(Tbe,1),ae,405,0,[_w,Dy,Iy,j4])}function Din(){return dz(),ct(ot(Hbe,1),ae,360,0,[alt,_G,SG,vO])}function TZt(t,e,n,r){return Et(n,54)?new lWt(t,e,n,r):new twt(t,e,n,r)}function Oin(){return M1(),ct(ot(Zbe,1),ae,411,0,[_6,i7,s7,olt])}function Nin(t){var e;return t.j==(be(),mr)&&(e=Uoe(t),Nu(e,Hn))}function Pin(t,e){var n;n=e.a,Da(n,e.c.d),sa(n,e.d.d),Jm(n.a,t.n)}function CZt(t,e){return u(Ov(qj(u(Ai(t.k,e),15).Oc(),z4)),113)}function _Zt(t,e){return u(Ov(Hj(u(Ai(t.k,e),15).Oc(),z4)),113)}function Fin(t){return new _n(Oon(u(t.a.dd(),14).gc(),t.a.cd()),16)}function S8(t){return Et(t,14)?u(t,14).dc():!t.Kc().Ob()}function Hx(t){return q9(),Et(t.g,145)?u(t.g,145):null}function SZt(t){if(t.e.g!=t.b)throw rt(new eh);return!!t.c&&t.d>0}function ti(t){return Qn(t.b!=t.d.c),t.c=t.b,t.b=t.b.a,++t.a,t.c.c}function Qwt(t,e){On(e),Ji(t.a,t.c,e),t.c=t.c+1&t.a.length-1,Ase(t)}function qp(t,e){On(e),t.b=t.b-1&t.a.length-1,Ji(t.a,t.b,e),Ase(t)}function AZt(t,e){var n;for(n=t.j.c.length;n<e;n++)ue(t.j,t.rg())}function LZt(t,e,n,r){var s;return s=r[e.g][n.g],Xt(ye(Q(t.a,s)))}function Zwt(t,e,n,r,s){this.i=t,this.a=e,this.e=n,this.j=r,this.f=s}function MZt(t,e,n,r,s){this.a=t,this.e=e,this.f=n,this.b=r,this.g=s}function Bin(t){t&&Oan((Ypt(),X8t)),--zH,t&&qH!=-1&&(xYe(qH),qH=-1)}function Rin(){return sy(),ct(ot(uht,1),ae,197,0,[lV,cht,t5,J4])}function jin(){return uE(),ct(ot(ZCt,1),ae,393,0,[vV,PS,PO,FS])}function $in(){return Gz(),ct(ot(A_t,1),ae,340,0,[Rht,__t,S_t,C_t])}function zin(){return _l(),ct(ot(tA,1),ae,374,0,[nN,V2,eN,Xy])}function qin(){return jl(),ct(ot(u4e,1),ae,285,0,[ZO,u0,wb,QO])}function Hin(){return q0(),ct(ot(pft,1),ae,218,0,[gft,XO,A7,H6])}function Gin(){return Az(),ct(ot(OAt,1),ae,311,0,[wft,MAt,DAt,IAt])}function Vin(){return Cl(),ct(ot(T4e,1),ae,396,0,[Yl,PAt,NAt,FAt])}function Uin(t){return g$(),kl(Eft,t)?u(Jn(Eft,t),331).ug():null}function sh(t,e,n){return e<0?zst(t,n):u(n,66).Nj().Sj(t,t.yh(),e)}function Win(t,e,n){var r;return r=oE(n),vq(t.d,r,e),ki(t.e,e,n),e}function Kin(t,e,n){var r;return r=oE(n),vq(t.j,r,e),ki(t.k,e,n),e}function IZt(t){var e,n;return e=(Tv(),n=new fv,n),t&&Xst(e,t),e}function Jwt(t){var e;return e=t.ri(t.i),t.i>0&&Ic(t.g,0,e,0,t.i),e}function DZt(t,e){NR();var n;return n=u(Jn(nU,t),55),!n||n.wj(e)}function Yin(t){if(t.p!=1)throw rt(new Iu);return Sr(t.f)<<24>>24}function Xin(t){if(t.p!=1)throw rt(new Iu);return Sr(t.k)<<24>>24}function Qin(t){if(t.p!=7)throw rt(new Iu);return Sr(t.k)<<16>>16}function Zin(t){if(t.p!=7)throw rt(new Iu);return Sr(t.f)<<16>>16}function N0(t){var e;for(e=0;t.Ob();)t.Pb(),e=Oa(e,1);return q$(e)}function OZt(t,e){var n;return n=new Lm,t.xd(n),n.a+="..",e.yd(n),n.a}function Jin(t,e,n){var r;r=u(Jn(t.g,n),57),ue(t.a.c,new la(e,r))}function tsn(t,e,n){return Pnt(ye(ec(Ao(t.f,e))),ye(ec(Ao(t.f,n))))}function k$(t,e,n){return mq(t,e,n,Et(e,99)&&(u(e,18).Bb&Ya)!=0)}function esn(t,e,n){return EE(t,e,n,Et(e,99)&&(u(e,18).Bb&Ya)!=0)}function nsn(t,e,n){return Cbn(t,e,n,Et(e,99)&&(u(e,18).Bb&Ya)!=0)}function tmt(t,e){return t==(Gn(),Ds)&&e==Ds?4:t==Ds||e==Ds?8:32}function NZt(t,e){return Gt(e)===Gt(t)?"(this Map)":e==null?Tu:$o(e)}function rsn(t,e){return u(e==null?ec(Ao(t.f,null)):U9(t.g,e),281)}function PZt(t,e,n){var r;return r=oE(n),ki(t.b,r,e),ki(t.c,e,n),e}function FZt(t,e){var n;for(n=e;n;)Fm(t,n.i,n.j),n=ts(n);return t}function emt(t,e){var n;return n=JM(d8(new Vrt(t,e))),Oj(new Vrt(t,e)),n}function Yd(t,e){to();var n;return n=u(t,66).Mj(),B0n(n,e),n.Ok(e)}function isn(t,e,n,r,s){var o;o=Mbn(s,n,r),ue(e,Agn(s,o)),m0n(t,s,e)}function BZt(t,e,n){t.i=0,t.e=0,e!=n&&(cre(t,e,n),ore(t,e,n))}function nmt(t,e){var n;n=t.q.getHours(),t.q.setFullYear(e+nb),y_(t,n)}function ssn(t,e,n){if(n){var r=n.ee();t.a[e]=r(n)}else delete t.a[e]}function _rt(t,e,n){if(n){var r=n.ee();n=r(n)}else n=void 0;t.a[e]=n}function RZt(t){if(t<0)throw rt(new Hqt("Negative array size: "+t))}function Lc(t){return t.n||(rl(t),t.n=new vYt(t,ho,t),So(t)),t.n}function FC(t){return Qn(t.a<t.c.a.length),t.b=t.a,Vte(t),t.c.b[t.b]}function rmt(t){t.b!=t.c&&(t.a=Pt(Xn,Ie,1,8,5,1),t.b=0,t.c=0)}function jZt(t){this.b=new Cr,this.c=new Cr,this.d=new Cr,this.a=t}function Wm(t,e){gi(),vv.call(this,t),this.a=e,this.c=-1,this.b=-1}function Km(t,e,n,r){qQt.call(this,1,n,r),this.c=t,this.b=e}function Srt(t,e,n,r){HQt.call(this,1,n,r),this.c=t,this.b=e}function Art(t,e,n,r,s,o,h){eit.call(this,e,r,s,o,h),this.c=t,this.a=n}function e2(t,e,n){this.e=t,this.a=Xn,this.b=Eue(e),this.c=e,this.d=n}function Lrt(t){this.e=t,this.c=this.e.a,this.b=this.e.g,this.d=this.e.i}function $Zt(t){this.c=t,this.a=u(Lh(t),148),this.b=this.a.Aj().Nh()}function imt(t){this.d=t,this.b=this.d.a.entries(),this.a=this.b.next()}function n2(){Cr.call(this),aWt(this),this.d.b=this.d,this.d.a=this.d}function zZt(t,e){tvt.call(this),this.a=t,this.b=e,ue(this.a.b,this)}function asn(t,e){var n;return n=e!=null?Fc(t,e):ec(Ao(t.f,e)),nj(n)}function osn(t,e){var n;return n=e!=null?Fc(t,e):ec(Ao(t.f,e)),nj(n)}function qZt(t,e){var n;for(n=0;n<e;++n)Ji(t,n,new $(u(t[n],42)))}function csn(t,e){var n;for(n=t.d-1;n>=0&&t.a[n]===e[n];n--);return n<0}function HZt(t,e){J8();var n;return n=t.j.g-e.j.g,n!=0?n:0}function GZt(t,e){return On(e),t.a!=null?Gtn(e.Kb(t.a)):WH}function E$(t){var e;return t?new $vt(t):(e=new A0,lit(e,t),e)}function Pl(t,e){var n;return e.b.Kb(Fte(t,e.c.Ee(),(n=new Dn(e),n)))}function T$(t){E4t(),NUt(this,Sr(Ps(Fp(t,24),Pq)),Sr(Ps(t,Pq)))}function VZt(){VZt=Z,Uge=Wr((Nz(),ct(ot(NEt,1),ae,428,0,[Iut,OEt])))}function UZt(){UZt=Z,Wge=Wr(($$(),ct(ot(FEt,1),ae,427,0,[PEt,Dut])))}function WZt(){WZt=Z,Ype=Wr((z$(),ct(ot(l7t,1),ae,424,0,[Hut,rG])))}function KZt(){KZt=Z,$be=Wr((q8(),ct(ot(jbe,1),ae,511,0,[pO,nlt])))}function YZt(){YZt=Z,d2e=Wr((TI(),ct(ot(MTt,1),ae,419,0,[NG,LTt])))}function XZt(){XZt=Z,v2e=Wr((bI(),ct(ot(OTt,1),ae,479,0,[DTt,FG])))}function QZt(){QZt=Z,Xwe=Wr((lI(),ct(ot(zCt,1),ae,376,0,[bht,DO])))}function ZZt(){ZZt=Z,Uwe=Wr((yI(),ct(ot(BCt,1),ae,421,0,[dht,ght])))}function JZt(){JZt=Z,u2e=Wr((D$(),ct(ot(kTt,1),ae,422,0,[xTt,vlt])))}function tJt(){tJt=Z,T2e=Wr((x$(),ct(ot(UTt,1),ae,420,0,[Dlt,VTt])))}function eJt(){eJt=Z,zme=Wr((Vf(),ct(ot($me,1),ae,520,0,[Uy,pb])))}function nJt(){nJt=Z,vme=Wr((BC(),ct(ot(bme,1),ae,523,0,[NS,OS])))}function rJt(){rJt=Z,Tme=Wr((dd(),ct(ot(Eme,1),ae,516,0,[Rw,Kg])))}function iJt(){iJt=Z,_me=Wr((E1(),ct(ot(Cme,1),ae,515,0,[j2,z1])))}function sJt(){sJt=Z,Kme=Wr((qv(),ct(ot(Wme,1),ae,455,0,[bb,e5])))}function aJt(){aJt=Z,fye=Wr((v$(),ct(ot(h_t,1),ae,425,0,[Iht,l_t])))}function oJt(){oJt=Z,vye=Wr((iz(),ct(ot(f_t,1),ae,495,0,[TV,E7])))}function cJt(){cJt=Z,hye=Wr((d$(),ct(ot(u_t,1),ae,480,0,[Mht,c_t])))}function uJt(){uJt=Z,yye=Wr((N$(),ct(ot(g_t,1),ae,426,0,[d_t,Pht])))}function lJt(){lJt=Z,S3e=Wr((NI(),ct(ot(vSt,1),ae,429,0,[OV,bSt])))}function hJt(){hJt=Z,u3e=Wr((hI(),ct(ot(Y_t,1),ae,430,0,[Ght,IV])))}function BC(){BC=Z,NS=new Fbt("UPPER",0),OS=new Fbt("LOWER",1)}function usn(t,e){var n;n=new mx,Jb(n,"x",e.a),Jb(n,"y",e.b),Bx(t,n)}function lsn(t,e){var n;n=new mx,Jb(n,"x",e.a),Jb(n,"y",e.b),Bx(t,n)}function hsn(t,e){var n,r;r=!1;do n=Jne(t,e),r=r|n;while(n);return r}function smt(t,e){var n,r;for(n=e,r=0;n>0;)r+=t.a[n],n-=n&-n;return r}function fJt(t,e){var n;for(n=e;n;)Fm(t,-n.i,-n.j),n=ts(n);return t}function va(t,e){var n,r;for(On(e),r=t.Kc();r.Ob();)n=r.Pb(),e.td(n)}function dJt(t,e){var n;return n=e.cd(),new _v(n,t.e.pc(n,u(e.dd(),14)))}function hs(t,e,n,r){var s;s=new Ht,s.c=e,s.b=n,s.a=r,r.b=n.a=s,++t.b}function ah(t,e,n){var r;return r=(An(e,t.c.length),t.c[e]),t.c[e]=n,r}function fsn(t,e,n){return u(e==null?su(t.f,null,n):nw(t.g,e,n),281)}function Mrt(t){return t.c&&t.d?qwt(t.c)+"->"+qwt(t.d):"e_"+Iv(t)}function A8(t,e){return(d2(t),j9(new Tn(t,new Lmt(e,t.a)))).sd(JE)}function dsn(){return Wa(),ct(ot(C7t,1),ae,356,0,[Ad,lb,ou,qc,Io])}function gsn(){return be(),ct(ot(Xa,1),xc,61,0,[Zo,Nn,Hn,mr,Bn])}function psn(t){return vR(),function(){return _in(t,this,arguments)}}function bsn(){return Date.now?Date.now():new Date().getTime()}function Va(t){return!t.c||!t.d?!1:!!t.c.i&&t.c.i==t.d.i}function gJt(t){if(!t.c.Sb())throw rt(new lc);return t.a=!0,t.c.Ub()}function cI(t){t.i=0,yM(t.b,null),yM(t.c,null),t.a=null,t.e=null,++t.g}function amt(t){EYe.call(this,t==null?Tu:$o(t),Et(t,78)?u(t,78):null)}function pJt(t){$he(),jzt(this),this.a=new Qi,Oyt(this,t),ni(this.a,t)}function bJt(){Yet(this),this.b=new $e(ss,ss),this.a=new $e(Ts,Ts)}function vJt(t,e){this.c=0,this.b=e,VVt.call(this,t,17493),this.a=this.c}function Irt(t){C$(),!R1&&(this.c=t,this.e=!0,this.a=new le)}function C$(){C$=Z,R1=!0,Fge=!1,Bge=!1,jge=!1,Rge=!1}function omt(t,e){return Et(e,149)?hn(t.c,u(e,149).c):!1}function cmt(t,e){var n;return n=0,t&&(n+=t.f.a/2),e&&(n+=e.f.a/2),n}function Drt(t,e){var n;return n=u(Wv(t.d,e),23),n||u(Wv(t.e,e),23)}function wJt(t){this.b=t,er.call(this,t),this.a=u(In(this.b.a,4),126)}function mJt(t){this.b=t,Mx.call(this,t),this.a=u(In(this.b.a,4),126)}function rl(t){return t.t||(t.t=new Lzt(t),JC(new qqt(t),0,t.t)),t.t}function vsn(){return ao(),ct(ot(WS,1),ae,103,0,[c0,kf,jh,Q0,Z0])}function wsn(){return c4(),ct(ot(QS,1),ae,249,0,[mb,JO,CAt,XS,_At])}function msn(){return Xf(),ct(ot(Qg,1),ae,175,0,[qn,Js,Id,$2,Xg])}function ysn(){return iD(),ct(ot(J_t,1),ae,316,0,[X_t,Vht,Z_t,Uht,Q_t])}function xsn(){return a_(),ct(ot(LCt,1),ae,315,0,[ACt,lht,hht,AS,LS])}function ksn(){return v2(),ct(ot(ATt,1),ae,335,0,[mlt,STt,ylt,pS,gS])}function Esn(){return yE(),ct(ot(r3e,1),ae,355,0,[n5,R6,qS,zS,HS])}function Tsn(){return g4(),ct(ot(t2e,1),ae,363,0,[LG,IG,DG,MG,AG])}function Csn(){return hh(),ct(ot(s9t,1),ae,163,0,[CO,yS,fb,xS,Fy])}function L8(){L8=Z;var t,e;aU=(t8(),e=new lR,e),oU=(t=new Utt,t)}function yJt(t){var e;return t.c||(e=t.r,Et(e,88)&&(t.c=u(e,26))),t.c}function _sn(t){return t.e=3,t.d=t.Yb(),t.e!=2?(t.e=0,!0):!1}function Ort(t){var e,n,r;return e=t&ul,n=t>>22&ul,r=t<0?W0:0,ru(e,n,r)}function Ssn(t){var e,n,r,s;for(n=t,r=0,s=n.length;r<s;++r)e=n[r],LC(e)}function Asn(t,e){var n,r;n=u(Tun(t.c,e),14),n&&(r=n.gc(),n.$b(),t.d-=r)}function xJt(t,e){var n,r;return n=e.cd(),r=Dyt(t,n),!!r&&Pc(r.e,e.dd())}function Gx(t,e){return e==0||t.e==0?t:e>0?wie(t,e):$ce(t,-e)}function umt(t,e){return e==0||t.e==0?t:e>0?$ce(t,e):wie(t,-e)}function Lr(t){if(zr(t))return t.c=t.a,t.a.Pb();throw rt(new lc)}function kJt(t){var e,n;return e=t.c.i,n=t.d.i,e.k==(Gn(),xs)&&n.k==xs}function Nrt(t){var e;return e=new zv,Lo(e,t),Jt(e,(Te(),_o),null),e}function Prt(t,e,n){var r;return r=t.Yg(e),r>=0?t._g(r,n,!0):lw(t,e,n)}function lmt(t,e,n,r){var s;for(s=0;s<Nut;s++)$j(t.a[e.g][s],n,r[e.g])}function hmt(t,e,n,r){var s;for(s=0;s<QH;s++)jj(t.a[s][e.g],n,r[e.g])}function fmt(t,e,n,r,s){qQt.call(this,e,r,s),this.c=t,this.a=n}function dmt(t,e,n,r,s){HQt.call(this,e,r,s),this.c=t,this.a=n}function gmt(t,e,n,r,s){TJt.call(this,e,r,s),this.c=t,this.a=n}function df(t,e,n,r,s){TJt.call(this,e,r,s),this.c=t,this.b=n}function EJt(t,e,n){oR.call(this,n),this.b=t,this.c=e,this.d=(Uit(),Aft)}function TJt(t,e,n){this.d=t,this.k=e?1:0,this.f=n?1:0,this.o=-1,this.p=0}function CJt(t,e,n){var r;r=new h2t(t.a),VC(r,t.a.a),su(r.f,e,n),t.a.a=r}function uI(t,e){t.qi(t.i+1),fC(t,t.i,t.oi(t.i,e)),t.bi(t.i++,e),t.ci()}function RC(t){var e,n;++t.j,e=t.g,n=t.i,t.g=null,t.i=0,t.di(n,e),t.ci()}function _1(t){var e,n;return Ar(t),e=Ken(t.length),n=new Yc(e),_yt(n,t),n}function Vx(t){var e;return e=(Ar(t),t?new Pu(t):d8(t.Kc())),Bst(e),yz(e)}function Ag(t,e){var n;return n=(An(e,t.c.length),t.c[e]),lbt(t.c,e,1),n}function Ai(t,e){var n;return n=u(t.c.xc(e),14),!n&&(n=t.ic(e)),t.pc(e,n)}function pmt(t,e){var n,r;return n=(On(t),t),r=(On(e),e),n==r?0:n<r?-1:1}function _Jt(t){var e;return e=t.e+t.f,isNaN(e)&&Ej(t.d)?t.d:e}function P0(t,e){return t.a?Vr(t.a,t.b):t.a=new Il(t.d),cC(t.a,e),t}function bmt(t,e){if(t<0||t>e)throw rt(new mo(U4t(t,e,"index")));return t}function Frt(t,e,n,r){var s;return s=Pt(Tr,Xr,25,e,15,1),$dn(s,t,e,n,r),s}function Lsn(t,e){var n;n=t.q.getHours()+(e/60|0),t.q.setMinutes(e),y_(t,n)}function Msn(t,e){return b.Math.min(Hp(e.a,t.d.d.c),Hp(e.b,t.d.d.c))}function Ux(t,e){return ea(e)?e==null?u5t(t.f,null):Pne(t.g,e):u5t(t.f,e)}function S1(t){this.c=t,this.a=new S(this.c.a),this.b=new S(this.c.b)}function _$(){this.e=new le,this.c=new le,this.d=new le,this.b=new le}function SJt(){this.g=new Apt,this.b=new Apt,this.a=new le,this.k=new le}function AJt(t,e,n){this.a=t,this.c=e,this.d=n,ue(e.e,this),ue(n.b,this)}function LJt(t,e){GVt.call(this,e.rd(),e.qd()&-6),On(t),this.a=t,this.b=e}function MJt(t,e){VVt.call(this,e.rd(),e.qd()&-6),On(t),this.a=t,this.b=e}function vmt(t,e){Get.call(this,e.rd(),e.qd()&-6),On(t),this.a=t,this.b=e}function S$(t,e,n){this.a=t,this.b=e,this.c=n,ue(t.t,this),ue(e.i,this)}function A$(){this.b=new Qi,this.a=new Qi,this.b=new Qi,this.a=new Qi}function L$(){L$=Z,GS=new Gi("org.eclipse.elk.labels.labelManager")}function IJt(){IJt=Z,bTt=new Os("separateLayerConnections",(dz(),alt))}function Vf(){Vf=Z,Uy=new jbt("REGULAR",0),pb=new jbt("CRITICAL",1)}function lI(){lI=Z,bht=new Pbt("STACKED",0),DO=new Pbt("SEQUENCED",1)}function hI(){hI=Z,Ght=new Vbt("FIXED",0),IV=new Vbt("CENTER_NODE",1)}function Isn(t,e){var n;return n=P3n(t,e),t.b=new rz(n.c.length),Wyn(t,n)}function Dsn(t,e,n){var r;return++t.e,--t.f,r=u(t.d[e].$c(n),133),r.dd()}function DJt(t){var e;return t.a||(e=t.r,Et(e,148)&&(t.a=u(e,148))),t.a}function wmt(t){if(t.a){if(t.e)return wmt(t.e)}else return t;return null}function Osn(t,e){return t.p<e.p?1:t.p>e.p?-1:0}function M$(t,e){return On(e),t.c<t.d?(t.ze(e,t.c++),!0):!1}function OJt(t,e){return kl(t.a,e)?(Ux(t.a,e),!0):!1}function Nsn(t){var e,n;return e=t.cd(),n=u(t.dd(),14),VM(n.Nc(),new ett(e))}function Psn(t){var e;return e=u(dwt(t.b,t.b.length),9),new rh(t.a,e,t.c)}function Fsn(t){var e;return d2(t),e=new MKt(t,t.a.e,t.a.d|4),new G2t(t,e)}function NJt(t){var e;for($p(t),e=0;t.a.sd(new ks);)e=Oa(e,1);return e}function mmt(t,e,n){var r,s;for(r=0,s=0;s<e.length;s++)r+=t.$f(e[s],r,n)}function Bsn(t,e){var n;t.C&&(n=u(go(t.b,e),124).n,n.d=t.C.d,n.a=t.C.a)}function Wx(t,e,n){return oI(e,t.e.Hd().gc()),oI(n,t.c.Hd().gc()),t.a[e][n]}function Lg(t,e){Jp(),this.e=t,this.d=1,this.a=ct(ot(Tr,1),Xr,25,15,[e])}function I$(t,e,n,r){this.f=t,this.e=e,this.d=n,this.b=r,this.c=r?r.d:null}function ymt(t){var e,n,r,s;s=t.d,e=t.a,n=t.b,r=t.c,t.d=n,t.a=r,t.b=s,t.c=e}function Rsn(t,e,n,r){ale(t,e,n,EE(t,e,r,Et(e,99)&&(u(e,18).Bb&Ya)!=0))}function jsn(t,e){wr(e,"Label management",1),nj(Q(t,(L$(),GS))),or(e)}function Yc(t){Yet(this),_j(t>=0,"Initial capacity must not be negative")}function PJt(){PJt=Z,Qge=Wr((Kf(),ct(ot(My,1),ae,232,0,[sc,tu,ac])))}function FJt(){FJt=Z,Jge=Wr((Xu(),ct(ot(Zge,1),ae,461,0,[Sd,cb,mf])))}function BJt(){BJt=Z,epe=Wr((wu(),ct(ot(tpe,1),ae,462,0,[e1,ub,yf])))}function RJt(){RJt=Z,$ge=Wr((I1(),ct(ot(ll,1),ae,132,0,[MEt,Gl,Ly])))}function jJt(){jJt=Z,bbe=Wr((jC(),ct(ot(T7t,1),ae,379,0,[Wut,Uut,Kut])))}function $Jt(){$Jt=Z,Ibe=Wr((ew(),ct(ot(A7t,1),ae,423,0,[$4,S7t,Jut])))}function zJt(){zJt=Z,l2e=Wr((Yx(),ct(ot(TTt,1),ae,314,0,[S6,wO,ETt])))}function qJt(){qJt=Z,h2e=Wr((X$(),ct(ot(_Tt,1),ae,337,0,[CTt,OG,wlt])))}function HJt(){HJt=Z,p2e=Wr((u2(),ct(ot(g2e,1),ae,450,0,[xlt,u7,G4])))}function GJt(){GJt=Z,a2e=Wr((Jv(),ct(ot(clt,1),ae,361,0,[Aw,hb,Sw])))}function VJt(){VJt=Z,E2e=Wr((B0(),ct(ot(k2e,1),ae,303,0,[yO,U4,A6])))}function UJt(){UJt=Z,x2e=Wr((W8(),ct(ot(Ilt,1),ae,292,0,[Llt,Mlt,mO])))}function WJt(){WJt=Z,zwe=Wr((YC(),ct(ot(SCt,1),ae,378,0,[oht,_Ct,uV])))}function KJt(){KJt=Z,Ywe=Wr((uz(),ct(ot($Ct,1),ae,375,0,[RCt,pht,jCt])))}function YJt(){YJt=Z,Vwe=Wr((j0(),ct(ot(FCt,1),ae,339,0,[gb,PCt,fht])))}function XJt(){XJt=Z,Kwe=Wr((so(),ct(ot(Wwe,1),ae,452,0,[MS,Ju,eu])))}function QJt(){QJt=Z,Jwe=Wr((gz(),ct(ot(WCt,1),ae,377,0,[mht,x7,Vy])))}function ZJt(){ZJt=Z,Qwe=Wr((tE(),ct(ot(HCt,1),ae,336,0,[vht,qCt,IS])))}function JJt(){JJt=Z,Zwe=Wr((oz(),ct(ot(UCt,1),ae,338,0,[VCt,wht,GCt])))}function tte(){tte=Z,fme=Wr((Zv(),ct(ot(hme,1),ae,454,0,[OO,DS,dV])))}function ete(){ete=Z,mye=Wr((Cz(),ct(ot(wye,1),ae,442,0,[Nht,Dht,Oht])))}function nte(){nte=Z,xye=Wr((RI(),ct(ot(v_t,1),ae,380,0,[CV,p_t,b_t])))}function rte(){rte=Z,Rye=Wr((Tz(),ct(ot(P_t,1),ae,381,0,[N_t,$ht,O_t])))}function ite(){ite=Z,Bye=Wr((cz(),ct(ot(I_t,1),ae,293,0,[jht,M_t,L_t])))}function ste(){ste=Z,s3e=Wr((GI(),ct(ot(zht,1),ae,437,0,[AV,LV,MV])))}function ate(){ate=Z,c4e=Wr(($0(),ct(ot(TAt,1),ae,334,0,[HV,Zg,YS])))}function ote(){ote=Z,i4e=Wr((A1(),ct(ot(fAt,1),ae,272,0,[_7,Yy,S7])))}function $sn(){return oa(),ct(ot(SAt,1),ae,98,0,[yb,H1,L7,G2,h0,Vc])}function r2(t,e){return!t.o&&(t.o=new Tl((Zc(),Eb),$w,t,0)),Wit(t.o,e)}function zsn(t){return!t.g&&(t.g=new Tk),!t.g.d&&(t.g.d=new _zt(t)),t.g.d}function qsn(t){return!t.g&&(t.g=new Tk),!t.g.a&&(t.g.a=new Szt(t)),t.g.a}function Hsn(t){return!t.g&&(t.g=new Tk),!t.g.b&&(t.g.b=new Czt(t)),t.g.b}function fI(t){return!t.g&&(t.g=new Tk),!t.g.c&&(t.g.c=new Azt(t)),t.g.c}function Gsn(t,e,n){var r,s;for(s=new U8(e,t),r=0;r<n;++r)$z(s);return s}function Brt(t,e,n){var r,s;if(n!=null)for(r=0;r<e;++r)s=n[r],t.fi(r,s)}function Rrt(t,e,n,r){var s;return s=Pt(Tr,Xr,25,e+1,15,1),_mn(s,t,e,n,r),s}function Pt(t,e,n,r,s,o){var h;return h=mse(s,r),s!=10&&ct(ot(t,o),e,n,s,h),h}function Vsn(t,e,n,r){return n&&(r=n.gh(e,Vi(n.Tg(),t.c.Lj()),null,r)),r}function Usn(t,e,n,r){return n&&(r=n.ih(e,Vi(n.Tg(),t.c.Lj()),null,r)),r}function xmt(t,e,n){u(t.b,65),u(t.b,65),u(t.b,65),mu(t.a,new bKt(n,e,t))}function kmt(t,e,n){if(t<0||e>n||e<t)throw rt(new Zpt(Fq+t+zxt+e+jxt+n))}function M8(t){if(!t)throw rt(new Fo("Unable to add element to queue"))}function jrt(t){t?(this.c=t,this.b=null):(this.c=null,this.b=new le)}function $rt(t,e){RR.call(this,t,e),this.a=Pt(exn,Dq,436,2,0,1),this.b=!0}function Emt(t){Xne.call(this,t,0),aWt(this),this.d.b=this.d,this.d.a=this.d}function zrt(t){var e;return e=t.b,e.b==0?null:u(Qf(e,0),188).b}function cte(t,e){var n;return n=new $t,n.c=!0,n.d=e.dd(),nhe(t,e.cd(),n)}function Wsn(t,e){var n;n=t.q.getHours()+(e/3600|0),t.q.setSeconds(e),y_(t,n)}function Tmt(t,e,n){var r;r=t.b[n.c.p][n.p],r.b+=e.b,r.c+=e.c,r.a+=e.a,++r.a}function Hp(t,e){var n,r;return n=t.a-e.a,r=t.b-e.b,b.Math.sqrt(n*n+r*r)}function D$(){D$=Z,xTt=new Mbt("QUADRATIC",0),vlt=new Mbt("SCANLINE",1)}function ute(){ute=Z,nme=Ku(bi(new Hs,(Wa(),Ad),(ro(),rlt)),Io,bO)}function Ksn(){return cy(),ct(ot(nft,1),ae,291,0,[eft,VO,GO,tft,qO,HO])}function Ysn(){return Qd(),ct(ot(kSt,1),ae,248,0,[Zht,$O,zO,FV,NV,PV])}function Xsn(){return i6(),ct(ot(c7,1),ae,227,0,[o7,dS,a7,Oy,H4,q4])}function Qsn(){return gE(),ct(ot(GTt,1),ae,275,0,[bS,$Tt,HTt,qTt,zTt,jTt])}function Zsn(){return nD(),ct(ot(RTt,1),ae,274,0,[BG,PTt,BTt,NTt,FTt,Slt])}function Jsn(){return Zz(),ct(ot(CCt,1),ae,313,0,[aht,ECt,sht,kCt,TCt,cV])}function tan(){return nq(),ct(ot(ITt,1),ae,276,0,[Elt,klt,Clt,Tlt,_lt,PG])}function ean(){return f_(),ct(ot(Xme,1),ae,327,0,[wV,kht,Tht,Eht,Cht,xht])}function nan(){return Qu(),ct(ot(GV,1),ae,273,0,[xb,tg,tN,JS,ZS,G6])}function ran(){return tq(),ct(ot(wAt,1),ae,312,0,[bft,pAt,vAt,dAt,bAt,gAt])}function ian(){return Gn(),ct(ot(elt,1),ae,267,0,[Ds,Zs,xs,Hc,Sl,j1])}function lte(t){Pm(!!t.c),Trt(t.e,t),t.c.Qb(),t.c=null,t.b=gyt(t),z2t(t.e,t)}function hte(t){return Trt(t.c.a.e,t),Qn(t.b!=t.c.a.d),t.a=t.b,t.b=t.b.a,t.a}function Cmt(t){var e;return!t.a&&t.b!=-1&&(e=t.c.Tg(),t.a=yn(e,t.b)),t.a}function Mr(t,e){return t.hi()&&t.Hc(e)?!1:(t.Yh(e),!0)}function Uf(t,e){return tI(e,"Horizontal alignment cannot be null"),t.b=e,t}function fte(t,e,n){gi();var r;return r=tb(t,e),n&&r&&Oen(t)&&(r=null),r}function Mg(t,e,n){var r,s;for(s=t.Kc();s.Ob();)r=u(s.Pb(),37),w_(r,e,n)}function _mt(t,e){var n,r;for(r=e.Kc();r.Ob();)n=u(r.Pb(),37),Nue(t,n,0,0)}function Smt(t,e,n){var r;t.d[e.g]=n,r=t.g.c,r[e.g]=b.Math.max(r[e.g],n+1)}function dI(t,e){var n,r,s;return s=t.r,r=t.d,n=E_(t,e,!0),n.b!=s||n.a!=r}function dte(t,e){return MGt(t.e,e)||p2(t.e,e,new Gie(e)),u(Wv(t.e,e),113)}function i2(t,e,n,r){return On(t),On(e),On(n),On(r),new owt(t,e,new re)}function Tl(t,e,n,r){this.rj(),this.a=e,this.b=t,this.c=new iwt(this,e,n,r)}function qrt(t,e,n,r,s,o){Ywt.call(this,e,r,s,o),this.c=t,this.b=n}function gI(t,e,n,r,s,o){Ywt.call(this,e,r,s,o),this.c=t,this.a=n}function san(t,e,n){var r,s,o;r=D0(t,n),s=null,r&&(s=j4t(r)),o=s,zie(e,n,o)}function aan(t,e,n){var r,s,o;r=D0(t,n),s=null,r&&(s=j4t(r)),o=s,zie(e,n,o)}function pI(t,e,n){var r,s;return s=(r=wE(t.b,e),r),s?Eq(mI(t,s),n):null}function I8(t,e){var n;return n=t.Yg(e),n>=0?t._g(n,!0,!0):lw(t,e,!0)}function oan(t,e){return Ls(Xt(ye(Q(t,(se(),Dw)))),Xt(ye(Q(e,Dw))))}function gte(){gte=Z,gye=aw(aw(OR(new Hs,(uE(),PS)),(f_(),wV)),kht)}function can(t,e,n){var r;return r=ire(t,e,n),t.b=new rz(r.c.length),N5t(t,r)}function uan(t){if(t.b<=0)throw rt(new lc);return--t.b,t.a-=t.c.c,de(t.a)}function lan(t){var e;if(!t.a)throw rt(new wXt);return e=t.a,t.a=ts(t.a),e}function han(t){for(;!t.a;)if(!nKt(t.c,new ze(t)))return!1;return!0}function Kx(t){var e;return Ar(t),Et(t,198)?(e=u(t,198),e):new stt(t)}function fan(t){O$(),u(t.We((ci(),Ky)),174).Fc((Qu(),tN)),t.Ye(hft,null)}function O$(){O$=Z,M3e=new wZ,D3e=new mZ,I3e=Xcn((ci(),hft),M3e,vb,D3e)}function N$(){N$=Z,d_t=new Gbt("LEAF_NUMBER",0),Pht=new Gbt("NODE_SIZE",1)}function dan(t,e,n){t.a=e,t.c=n,t.b.a.$b(),_h(t.d),t.e.a.c=Pt(Xn,Ie,1,0,5,1)}function Hrt(t){t.a=Pt(Tr,Xr,25,t.b+1,15,1),t.c=Pt(Tr,Xr,25,t.b,15,1),t.d=0}function gan(t,e){t.a.ue(e.d,t.b)>0&&(ue(t.c,new Ovt(e.c,e.d,t.d)),t.b=e.d)}function Amt(t,e){if(t.g==null||e>=t.i)throw rt(new Vet(e,t.i));return t.g[e]}function pte(t,e,n){if(Q8(t,n),n!=null&&!t.wj(n))throw rt(new Htt);return n}function bte(t){var e;if(t.Ek())for(e=t.i-1;e>=0;--e)St(t,e);return Jwt(t)}function pan(t){var e,n;if(!t.b)return null;for(n=t.b;e=n.a[0];)n=e;return n}function ban(t,e){var n,r;return RZt(e),n=(r=t.slice(0,e),Mmt(r,t)),n.length=e,n}function D8(t,e,n,r){var s;r=(X3(),r||mEt),s=t.slice(e,n),W4t(s,t,e,n,-e,r)}function oh(t,e,n,r,s){return e<0?lw(t,n,r):u(n,66).Nj().Pj(t,t.yh(),e,r,s)}function van(t){return Et(t,172)?""+u(t,172).a:t==null?null:$o(t)}function wan(t){return Et(t,172)?""+u(t,172).a:t==null?null:$o(t)}function vte(t,e){if(e.a)throw rt(new Go(vfe));Ns(t.a,e),e.a=t,!t.j&&(t.j=e)}function Lmt(t,e){Get.call(this,e.rd(),e.qd()&-16449),On(t),this.a=t,this.c=e}function wte(t,e){var n,r;return r=e/t.c.Hd().gc()|0,n=e%t.c.Hd().gc(),Wx(t,r,n)}function Xu(){Xu=Z,Sd=new vet(d6,0),cb=new vet(NE,1),mf=new vet(g6,2)}function P$(){P$=Z,Aut=new BR("All",0),_Et=new dUt,SEt=new CUt,AEt=new gUt}function mte(){mte=Z,Nge=Wr((P$(),ct(ot(KH,1),ae,297,0,[Aut,_Et,SEt,AEt])))}function yte(){yte=Z,Cbe=Wr((K8(),ct(ot(Tbe,1),ae,405,0,[_w,Dy,Iy,j4])))}function xte(){xte=Z,_pe=Wr((tw(),ct(ot(Cpe,1),ae,406,0,[aO,sO,Fut,But])))}function kte(){kte=Z,Ape=Wr((n6(),ct(ot(Spe,1),ae,323,0,[cO,oO,uO,lO])))}function Ete(){Ete=Z,Ipe=Wr((s_(),ct(ot(Mpe,1),ae,394,0,[hO,JH,tG,fO])))}function Tte(){Tte=Z,Yme=Wr((uE(),ct(ot(ZCt,1),ae,393,0,[vV,PS,PO,FS])))}function Cte(){Cte=Z,Gbe=Wr((dz(),ct(ot(Hbe,1),ae,360,0,[alt,_G,SG,vO])))}function _te(){_te=Z,Fye=Wr((Gz(),ct(ot(A_t,1),ae,340,0,[Rht,__t,S_t,C_t])))}function Ste(){Ste=Z,Jbe=Wr((M1(),ct(ot(Zbe,1),ae,411,0,[_6,i7,s7,olt])))}function Ate(){Ate=Z,qwe=Wr((sy(),ct(ot(uht,1),ae,197,0,[lV,cht,t5,J4])))}function Lte(){Lte=Z,C4e=Wr((Cl(),ct(ot(T4e,1),ae,396,0,[Yl,PAt,NAt,FAt])))}function Mte(){Mte=Z,l4e=Wr((jl(),ct(ot(u4e,1),ae,285,0,[ZO,u0,wb,QO])))}function Ite(){Ite=Z,s4e=Wr((q0(),ct(ot(pft,1),ae,218,0,[gft,XO,A7,H6])))}function Dte(){Dte=Z,k4e=Wr((Az(),ct(ot(OAt,1),ae,311,0,[wft,MAt,DAt,IAt])))}function Ote(){Ote=Z,y4e=Wr((_l(),ct(ot(tA,1),ae,374,0,[nN,V2,eN,Xy])))}function Nte(){Nte=Z,yq(),vLt=ss,S5e=Ts,wLt=new D3(ss),A5e=new D3(Ts)}function bI(){bI=Z,DTt=new Dbt(K0,0),FG=new Dbt("IMPROVE_STRAIGHTNESS",1)}function man(t,e){return g8(),ue(t,new la(e,de(e.e.c.length+e.g.c.length)))}function yan(t,e){return g8(),ue(t,new la(e,de(e.e.c.length+e.g.c.length)))}function Mmt(t,e){return xI(e)!=10&&ct(sl(e),e.hm,e.__elementTypeId$,xI(e),t),t}function vu(t,e){var n;return n=Ro(t,e,0),n==-1?!1:(Ag(t,n),!0)}function Pte(t,e){var n;return n=u(Ux(t.e,e),387),n?(Fvt(n),n.e):null}function O8(t){var e;return Bo(t)&&(e=0-t,!isNaN(e))?e:Vp(Y8(t))}function Ro(t,e,n){for(;n<t.c.length;++n)if(Pc(e,t.c[n]))return n;return-1}function Fte(t,e,n){var r;return $p(t),r=new Ti,r.a=e,t.a.Nb(new DGt(r,n)),r.a}function xan(t){var e;return $p(t),e=Pt(ia,vo,25,0,15,1),B3(t.a,new Pe(e)),e}function Grt(t){var e,n;return n=u(Fe(t.j,0),11),e=u(Q(n,(se(),_i)),11),e}function Imt(t){var e;if(!sit(t))throw rt(new lc);return t.e=1,e=t.d,t.d=null,e}function Vrt(t,e){var n;this.f=t,this.b=e,n=u(Jn(t.b,e),283),this.c=n?n.b:null}function Bte(){lf(),this.b=new Cr,this.f=new Cr,this.g=new Cr,this.e=new Cr}function Rte(t,e){this.a=Pt(o0,zg,10,t.a.c.length,0,1),D1(t.a,this.a),this.b=e}function vI(t){var e;for(e=t.p+1;e<t.c.a.c.length;++e)--u(Fe(t.c.a,e),10).p}function Urt(t){var e;e=t.Ai(),e!=null&&t.d!=-1&&u(e,92).Ng(t),t.i&&t.i.Fi()}function F$(t){uj(this),this.g=t?crt(t,t.$d()):null,this.f=t,n$(this),this._d()}function F0(t,e,n,r,s,o,h){eit.call(this,e,r,s,o,h),this.c=t,this.b=n}function Ym(t,e,n,r,s){return On(t),On(e),On(n),On(r),On(s),new owt(t,e,r)}function wI(t,e){if(e<0)throw rt(new mo(q1e+e));return AZt(t,e+1),Fe(t.j,e)}function jte(t,e,n,r){if(!t)throw rt(new Pn(v_(e,ct(ot(Xn,1),Ie,1,5,[n,r]))))}function B$(t,e){return Pc(e,Fe(t.f,0))||Pc(e,Fe(t.f,1))||Pc(e,Fe(t.f,2))}function kan(t,e){Dx(u(u(t.f,33).We((ci(),US)),98))&&kln(Znt(u(t.f,33)),e)}function mI(t,e){var n,r;return n=u(e,675),r=n.Oh(),!r&&n.Rh(r=new RVt(t,e)),r}function Eo(t,e){var n,r;return n=u(e,677),r=n.pk(),!r&&n.tk(r=new nZt(t,e)),r}function il(t){return t.b||(t.b=new wYt(t,ho,t),!t.a&&(t.a=new $M(t,t))),t.b}function jC(){jC=Z,Wut=new met("XY",0),Uut=new met("X",1),Kut=new met("Y",2)}function wu(){wu=Z,e1=new wet("TOP",0),ub=new wet(NE,1),yf=new wet(Xxt,2)}function B0(){B0=Z,yO=new _et(K0,0),U4=new _et("TOP",1),A6=new _et(Xxt,2)}function yI(){yI=Z,dht=new Nbt("INPUT_ORDER",0),ght=new Nbt("PORT_DEGREE",1)}function N8(){N8=Z,Z8t=ru(ul,ul,524287),xge=ru(0,0,ID),J8t=Ort(1),Ort(2),tEt=Ort(0)}function Dmt(t,e,n){t.a.c=Pt(Xn,Ie,1,0,5,1),f3n(t,e,n),t.a.c.length==0||Gwn(t,e)}function R$(t){var e,n;return n=t.length,e=Pt(mh,vd,25,n,15,1),zYt(t,0,n,e,0),e}function Omt(t){var e;return t.dh()||(e=Zn(t.Tg())-t.Ah(),t.ph().bk(e)),t.Pg()}function Nmt(t){var e;return e=s2(In(t,32)),e==null&&(iu(t),e=s2(In(t,32))),e}function Wrt(t,e){var n;return n=Vi(t.d,e),n>=0?jz(t,n,!0,!0):lw(t,e,!0)}function Pmt(t,e){q9();var n,r;return n=Hx(t),r=Hx(e),!!n&&!!r&&!Qie(n.k,r.k)}function Ean(t,e){yu(t,e==null||Ej((On(e),e))||isNaN((On(e),e))?0:(On(e),e))}function Tan(t,e){xu(t,e==null||Ej((On(e),e))||isNaN((On(e),e))?0:(On(e),e))}function Can(t,e){Qv(t,e==null||Ej((On(e),e))||isNaN((On(e),e))?0:(On(e),e))}function _an(t,e){Xv(t,e==null||Ej((On(e),e))||isNaN((On(e),e))?0:(On(e),e))}function $te(t){(this.q?this.q:(vn(),vn(),a0)).Ac(t.q?t.q:(vn(),vn(),a0))}function San(t,e){return Et(e,99)&&u(e,18).Bb&Ya?new Uet(e,t):new U8(e,t)}function Aan(t,e){return Et(e,99)&&u(e,18).Bb&Ya?new Uet(e,t):new U8(e,t)}function zte(t,e){e7t=new gp,Lpe=e,cS=t,u(cS.b,65),xmt(cS,e7t,null),Nle(cS)}function Krt(t,e,n){var r;return r=t.g[e],fC(t,e,t.oi(e,n)),t.gi(e,n,r),t.ci(),r}function j$(t,e){var n;return n=t.Xc(e),n>=0?(t.$c(n),!0):!1}function Yrt(t){var e;return t.d!=t.r&&(e=Lh(t),t.e=!!e&&e.Cj()==k0e,t.d=e),t.e}function Xrt(t,e){var n;for(Ar(t),Ar(e),n=!1;e.Ob();)n=n|t.Fc(e.Pb());return n}function Wv(t,e){var n;return n=u(Jn(t.e,e),387),n?(OUt(t,n),n.e):null}function qte(t){var e,n;return e=t/60|0,n=t%60,n==0?""+e:""+e+":"+(""+n)}function Wo(t,e){var n,r;return d2(t),r=new vmt(e,t.a),n=new sKt(r),new Tn(t,n)}function Xm(t,e){var n=t.a[e],r=(pit(),Eut)[typeof n];return r?r(n):jyt(typeof n)}function Lan(t){switch(t.g){case 0:return vi;case 1:return-1;default:return 0}}function Man(t){return n4t(t,(N8(),tEt))<0?-UXe(Y8(t)):t.l+t.m*f6+t.h*x2}function xI(t){return t.__elementTypeCategory$==null?10:t.__elementTypeCategory$}function Qrt(t){var e;return e=t.b.c.length==0?null:Fe(t.b,0),e!=null&&oit(t,0),e}function Hte(t,e){for(;e[0]<t.length&&cd(` 	\r
`,Eu(ba(t,e[0])))>=0;)++e[0]}function kI(t,e){this.e=e,this.a=Fne(t),this.a<54?this.f=Vv(t):this.c=KI(t)}function Gte(t,e,n,r){gi(),vv.call(this,26),this.c=t,this.a=e,this.d=n,this.b=r}function Xd(t,e,n){var r,s;for(r=10,s=0;s<n-1;s++)e<r&&(t.a+="0"),r*=10;t.a+=e}function Ian(t,e){var n;for(n=0;t.e!=t.i.gc();)Ctn(e,dr(t),de(n)),n!=vi&&++n}function Fmt(t,e){var n;for(++t.d,++t.c[e],n=e+1;n<t.a.length;)++t.a[n],n+=n&-n}function Dan(t,e){var n,r,s;s=e.c.i,n=u(Jn(t.f,s),57),r=n.d.c-n.e.c,ayt(e.a,r,0)}function EI(t){var e,n;return e=t+128,n=(YKt(),nEt)[e],!n&&(n=nEt[e]=new Itt(t)),n}function Ur(t,e){var n;return On(e),n=t[":"+e],Ban(!!n,ct(ot(Xn,1),Ie,1,5,[e])),n}function Oan(t){var e,n;if(t.b){n=null;do e=t.b,t.b=null,n=zae(e,n);while(t.b);t.b=n}}function Nan(t){var e,n;if(t.a){n=null;do e=t.a,t.a=null,n=zae(e,n);while(t.a);t.a=n}}function Vte(t){var e;for(++t.a,e=t.c.a.length;t.a<e;++t.a)if(t.c.b[t.a])return}function Pan(t,e){var n,r;for(r=e.c,n=r+1;n<=e.f;n++)t.a[n]>t.a[r]&&(r=n);return r}function Fan(t,e){var n;return n=rw(t.e.c,e.e.c),n==0?Ls(t.e.d,e.e.d):n}function J3(t,e){return e.e==0||t.e==0?QE:(bE(),Zst(t,e))}function Ban(t,e){if(!t)throw rt(new Pn($2n("Enum constant undefined: %s",e)))}function $C(){$C=Z,Abe=new gg,Lbe=new k3,_be=new QK,Sbe=new $b,Mbe=new ZK}function $$(){$$=Z,PEt=new _bt("BY_SIZE",0),Dut=new _bt("BY_SIZE_AND_SHAPE",1)}function z$(){z$=Z,Hut=new Sbt("EADES",0),rG=new Sbt("FRUCHTERMAN_REINGOLD",1)}function TI(){TI=Z,NG=new Ibt("READING_DIRECTION",0),LTt=new Ibt("ROTATION",1)}function Ute(){Ute=Z,f2e=Wr((v2(),ct(ot(ATt,1),ae,335,0,[mlt,STt,ylt,pS,gS])))}function Wte(){Wte=Z,Hwe=Wr((a_(),ct(ot(LCt,1),ae,315,0,[ACt,lht,hht,AS,LS])))}function Kte(){Kte=Z,e2e=Wr((g4(),ct(ot(t2e,1),ae,363,0,[LG,IG,DG,MG,AG])))}function Yte(){Yte=Z,C2e=Wr((hh(),ct(ot(s9t,1),ae,163,0,[CO,yS,fb,xS,Fy])))}function Xte(){Xte=Z,l3e=Wr((iD(),ct(ot(J_t,1),ae,316,0,[X_t,Vht,Z_t,Uht,Q_t])))}function Qte(){Qte=Z,O3e=Wr((Xf(),ct(ot(Qg,1),ae,175,0,[qn,Js,Id,$2,Xg])))}function Zte(){Zte=Z,i3e=Wr((yE(),ct(ot(r3e,1),ae,355,0,[n5,R6,qS,zS,HS])))}function Jte(){Jte=Z,ybe=Wr((Wa(),ct(ot(C7t,1),ae,356,0,[Ad,lb,ou,qc,Io])))}function tee(){tee=Z,r4e=Wr((ao(),ct(ot(WS,1),ae,103,0,[c0,kf,jh,Q0,Z0])))}function eee(){eee=Z,f4e=Wr((c4(),ct(ot(QS,1),ae,249,0,[mb,JO,CAt,XS,_At])))}function nee(){nee=Z,p4e=Wr((be(),ct(ot(Xa,1),xc,61,0,[Zo,Nn,Hn,mr,Bn])))}function Zrt(t,e){var n;return n=u(Jn(t.a,e),134),n||(n=new xa,ki(t.a,e,n)),n}function ree(t){var e;return e=u(Q(t,(se(),Lw)),305),e?e.a==t:!1}function iee(t){var e;return e=u(Q(t,(se(),Lw)),305),e?e.i==t:!1}function see(t,e){return On(e),nwt(t),t.d.Ob()?(e.td(t.d.Pb()),!0):!1}function q$(t){return yc(t,vi)>0?vi:yc(t,_a)<0?_a:Sr(t)}function Qm(t){return t<3?(Bl(t,Jhe),t+1):t<A_?ps(t/.75+1):vi}function yn(t,e){var n;return n=(t.i==null&&pd(t),t.i),e>=0&&e<n.length?n[e]:null}function Wf(t,e,n){var r;if(e==null)throw rt(new L9);return r=D0(t,e),ssn(t,e,n),r}function aee(t){return t.a>=-.01&&t.a<=P1&&(t.a=0),t.b>=-.01&&t.b<=P1&&(t.b=0),t}function oee(t,e){return e==(vnt(),vnt(),Ige)?t.toLocaleLowerCase():t.toLowerCase()}function Bmt(t){return(t.i&2?"interface ":t.i&1?"":"class ")+(L0(t),t.o)}function To(t){var e,n;n=(e=new Wtt,e),Mr((!t.q&&(t.q=new he(Vh,t,11,10)),t.q),n)}function Ran(t,e){var n;return n=e>0?e-1:e,rHt(ZKe(Dee(Pvt(new Yk,n),t.n),t.j),t.k)}function jan(t,e,n,r){var s;t.j=-1,a5t(t,$4t(t,e,n),(to(),s=u(e,66).Mj(),s.Ok(r)))}function cee(t){this.g=t,this.f=new le,this.a=b.Math.min(this.g.c.c,this.g.d.c)}function uee(t){this.b=new le,this.a=new le,this.c=new le,this.d=new le,this.e=t}function lee(t,e){this.a=new Cr,this.e=new Cr,this.b=(YC(),uV),this.c=t,this.b=e}function hee(t,e,n){xj.call(this),Rmt(this),this.a=t,this.c=n,this.b=e.d,this.f=e.e}function fee(t){this.d=t,this.c=t.c.vc().Kc(),this.b=null,this.a=null,this.e=(dR(),mut)}function Kv(t){if(t<0)throw rt(new Pn("Illegal Capacity: "+t));this.g=this.ri(t)}function $an(t,e){if(0>t||t>e)throw rt(new Qpt("fromIndex: 0, toIndex: "+t+jxt+e))}function zan(t){var e;if(t.a==t.b.a)throw rt(new lc);return e=t.a,t.c=e,t.a=t.a.e,e}function H$(t){var e;Pm(!!t.c),e=t.c.a,ch(t.d,t.c),t.b==t.c?t.b=e:--t.a,t.c=null}function G$(t,e){var n;return d2(t),n=new NXt(t,t.a.rd(),t.a.qd()|4,e),new Tn(t,n)}function qan(t,e){var n,r;return n=u(ny(t.d,e),14),n?(r=e,t.e.pc(r,n)):null}function V$(t,e){var n,r;for(r=t.Kc();r.Ob();)n=u(r.Pb(),70),Jt(n,(se(),D6),e)}function Han(t){var e;return e=Xt(ye(Q(t,(Te(),Ug)))),e<0&&(e=0,Jt(t,Ug,e)),e}function Gan(t,e,n){var r;r=b.Math.max(0,t.b/2-.5),c_(n,r,1),ue(e,new RGt(n,r))}function Van(t,e,n){var r;return r=t.a.e[u(e.a,10).p]-t.a.e[u(n.a,10).p],ps(KM(r))}function dee(t,e,n,r,s,o){var h;h=Nrt(r),Da(h,s),sa(h,o),ln(t.a,r,new Tj(h,e,n.f))}function gee(t,e){var n;if(n=gD(t.Tg(),e),!n)throw rt(new Pn(ab+e+Fct));return n}function Zm(t,e){var n;for(n=t;ts(n);)if(n=ts(n),n==e)return!0;return!1}function Uan(t,e){var n,r,s;for(r=e.a.cd(),n=u(e.a.dd(),14).gc(),s=0;s<n;s++)t.td(r)}function mu(t,e){var n,r,s,o;for(On(e),r=t.c,s=0,o=r.length;s<o;++s)n=r[s],e.td(n)}function ch(t,e){var n;return n=e.c,e.a.b=e.b,e.b.a=e.a,e.a=e.b=null,e.c=null,--t.b,n}function Wan(t,e){return e&&t.b[e.g]==e?(Ji(t.b,e.g,null),--t.c,!0):!1}function pee(t,e){return!!GC(t,e,Sr(Ca(e0,Wd(Sr(Ca(e==null?0:Hi(e),n0)),15))))}function Kan(t,e){Dx(u(Q(u(t.e,10),(Te(),os)),98))&&(vn(),Xs(u(t.e,10).j,e))}function Rmt(t){t.b=(Xu(),cb),t.f=(wu(),ub),t.d=(Bl(2,my),new Yc(2)),t.e=new Ta}function Kf(){Kf=Z,sc=new bet("BEGIN",0),tu=new bet(NE,1),ac=new bet("END",2)}function A1(){A1=Z,_7=new zet(NE,0),Yy=new zet("HEAD",1),S7=new zet("TAIL",2)}function Yan(){return vE(),ct(ot(eU,1),ae,237,0,[kft,JV,tU,ZV,xft,QV,XV,yft])}function Xan(){return jg(),ct(ot(N3e,1),ae,277,0,[mSt,Aa,gc,T7,Do,cs,j6,q1])}function Qan(){return fq(),ct(ot(yTt,1),ae,270,0,[llt,dlt,ult,blt,flt,hlt,plt,glt])}function Zan(){return w4(),ct(ot(NCt,1),ae,260,0,[hV,MO,IO,ICt,DCt,MCt,OCt,fV])}function bee(){bee=Z,d4e=Wr((oa(),ct(ot(SAt,1),ae,98,0,[yb,H1,L7,G2,h0,Vc])))}function vee(){vee=Z,QH=(Kf(),ct(ot(My,1),ae,232,0,[sc,tu,ac])).length,Nut=QH}function U$(t){this.b=(Ar(t),new Pu(t)),this.a=new le,this.d=new le,this.e=new Ta}function Jan(t){var e;return e=b.Math.sqrt(t.a*t.a+t.b*t.b),e>0&&(t.a/=e,t.b/=e),t}function Fl(t){var e;return t.w?t.w:(e=ein(t),e&&!e.kh()&&(t.w=e),e)}function ton(t){var e;return t==null?null:(e=u(t,190),e0n(e,e.length))}function St(t,e){if(t.g==null||e>=t.i)throw rt(new Vet(e,t.i));return t.li(e,t.g[e])}function eon(t){var e,n;for(e=t.a.d.j,n=t.c.d.j;e!=n;)pf(t.b,e),e=kz(e);pf(t.b,e)}function non(t){var e;for(e=0;e<t.c.length;e++)(An(e,t.c.length),u(t.c[e],11)).p=e}function ron(t,e,n){var r,s,o;for(s=e[n],r=0;r<s.length;r++)o=s[r],t.e[o.c.p][o.p]=r}function Jrt(t,e){var n,r,s,o;for(r=t.d,s=0,o=r.length;s<o;++s)n=r[s],x1(t.g,n).a=e}function Jm(t,e){var n,r;for(r=ei(t,0);r.b!=r.d.c;)n=u(ti(r),8),Li(n,e);return t}function ion(t,e){var n;return n=na(nc(u(Jn(t.g,e),8)),l2t(u(Jn(t.f,e),460).b)),n}function Yv(t){var e;return Trt(t.e,t),Qn(t.b),t.c=t.a,e=u(t.a.Pb(),42),t.b=gyt(t),e}function s2(t){var e;return mC(t==null||Array.isArray(t)&&(e=xI(t),!(e>=14&&e<=16))),t}function wee(t,e,n){var r=function(){return t.apply(r,arguments)};return e.apply(r,n),r}function mee(t,e,n){var r,s;r=e;do s=Xt(t.p[r.p])+n,t.p[r.p]=s,r=t.a[r.p];while(r!=e)}function P8(t,e){var n,r;r=t.a,n=Fun(t,e,null),r!=e&&!t.e&&(n=_E(t,e,n)),n&&n.Fi()}function jmt(t,e){return y1(),gf(eb),b.Math.abs(t-e)<=eb||t==e||isNaN(t)&&isNaN(e)}function $mt(t,e){return y1(),gf(eb),b.Math.abs(t-e)<=eb||t==e||isNaN(t)&&isNaN(e)}function son(t,e){return Zp(),du(t.b.c.length-t.e.c.length,e.b.c.length-e.e.c.length)}function t4(t,e){return rYe(HC(t,e,Sr(Ca(e0,Wd(Sr(Ca(e==null?0:Hi(e),n0)),15)))))}function yee(){yee=Z,Pbe=Wr((Gn(),ct(ot(elt,1),ae,267,0,[Ds,Zs,xs,Hc,Sl,j1])))}function xee(){xee=Z,q3e=Wr((cy(),ct(ot(nft,1),ae,291,0,[eft,VO,GO,tft,qO,HO])))}function kee(){kee=Z,F3e=Wr((Qd(),ct(ot(kSt,1),ae,248,0,[Zht,$O,zO,FV,NV,PV])))}function Eee(){Eee=Z,c2e=Wr((i6(),ct(ot(c7,1),ae,227,0,[o7,dS,a7,Oy,H4,q4])))}function Tee(){Tee=Z,m2e=Wr((gE(),ct(ot(GTt,1),ae,275,0,[bS,$Tt,HTt,qTt,zTt,jTt])))}function Cee(){Cee=Z,w2e=Wr((nD(),ct(ot(RTt,1),ae,274,0,[BG,PTt,BTt,NTt,FTt,Slt])))}function _ee(){_ee=Z,$we=Wr((Zz(),ct(ot(CCt,1),ae,313,0,[aht,ECt,sht,kCt,TCt,cV])))}function See(){See=Z,b2e=Wr((nq(),ct(ot(ITt,1),ae,276,0,[Elt,klt,Clt,Tlt,_lt,PG])))}function Aee(){Aee=Z,Qme=Wr((f_(),ct(ot(Xme,1),ae,327,0,[wV,kht,Tht,Eht,Cht,xht])))}function Lee(){Lee=Z,g4e=Wr((Qu(),ct(ot(GV,1),ae,273,0,[xb,tg,tN,JS,ZS,G6])))}function Mee(){Mee=Z,a4e=Wr((tq(),ct(ot(wAt,1),ae,312,0,[bft,pAt,vAt,dAt,bAt,gAt])))}function aon(){return fy(),ct(ot(lo,1),ae,93,0,[Ef,J0,Tf,_f,l0,zh,Ul,Cf,$h])}function W$(t,e){var n;n=t.a,t.a=e,t.Db&4&&!(t.Db&1)&&mi(t,new Km(t,0,n,t.a))}function K$(t,e){var n;n=t.b,t.b=e,t.Db&4&&!(t.Db&1)&&mi(t,new Km(t,1,n,t.b))}function F8(t,e){var n;n=t.b,t.b=e,t.Db&4&&!(t.Db&1)&&mi(t,new Km(t,3,n,t.b))}function Xv(t,e){var n;n=t.f,t.f=e,t.Db&4&&!(t.Db&1)&&mi(t,new Km(t,3,n,t.f))}function Qv(t,e){var n;n=t.g,t.g=e,t.Db&4&&!(t.Db&1)&&mi(t,new Km(t,4,n,t.g))}function yu(t,e){var n;n=t.i,t.i=e,t.Db&4&&!(t.Db&1)&&mi(t,new Km(t,5,n,t.i))}function xu(t,e){var n;n=t.j,t.j=e,t.Db&4&&!(t.Db&1)&&mi(t,new Km(t,6,n,t.j))}function B8(t,e){var n;n=t.j,t.j=e,t.Db&4&&!(t.Db&1)&&mi(t,new Km(t,1,n,t.j))}function R8(t,e){var n;n=t.c,t.c=e,t.Db&4&&!(t.Db&1)&&mi(t,new Km(t,4,n,t.c))}function j8(t,e){var n;n=t.k,t.k=e,t.Db&4&&!(t.Db&1)&&mi(t,new Km(t,2,n,t.k))}function tit(t,e){var n;n=t.d,t.d=e,t.Db&4&&!(t.Db&1)&&mi(t,new Srt(t,2,n,t.d))}function Ig(t,e){var n;n=t.s,t.s=e,t.Db&4&&!(t.Db&1)&&mi(t,new Srt(t,4,n,t.s))}function ty(t,e){var n;n=t.t,t.t=e,t.Db&4&&!(t.Db&1)&&mi(t,new Srt(t,5,n,t.t))}function $8(t,e){var n;n=t.F,t.F=e,t.Db&4&&!(t.Db&1)&&mi(t,new Qs(t,1,5,n,e))}function CI(t,e){var n;return n=u(Jn((NR(),nU),t),55),n?n.xj(e):Pt(Xn,Ie,1,e,5,1)}function R0(t,e){var n,r;return n=e in t.a,n&&(r=D0(t,e).he(),r)?r.a:null}function oon(t,e){var n,r,s;return n=(r=(Tv(),s=new YT,s),e&&A5t(r,e),r),Ymt(n,t),n}function Iee(t,e,n){if(Q8(t,n),!t.Bk()&&n!=null&&!t.wj(n))throw rt(new Htt);return n}function Dee(t,e){return t.n=e,t.n?(t.f=new le,t.e=new le):(t.f=null,t.e=null),t}function jr(t,e,n,r,s,o){var h;return h=Unt(t,e),Nee(n,h),h.i=s?8:0,h.f=r,h.e=s,h.g=o,h}function zmt(t,e,n,r,s){this.d=e,this.k=r,this.f=s,this.o=-1,this.p=1,this.c=t,this.a=n}function qmt(t,e,n,r,s){this.d=e,this.k=r,this.f=s,this.o=-1,this.p=2,this.c=t,this.a=n}function Hmt(t,e,n,r,s){this.d=e,this.k=r,this.f=s,this.o=-1,this.p=6,this.c=t,this.a=n}function Gmt(t,e,n,r,s){this.d=e,this.k=r,this.f=s,this.o=-1,this.p=7,this.c=t,this.a=n}function Vmt(t,e,n,r,s){this.d=e,this.j=r,this.e=s,this.o=-1,this.p=4,this.c=t,this.a=n}function Oee(t,e){var n,r,s,o;for(r=e,s=0,o=r.length;s<o;++s)n=r[s],vte(t.a,n);return t}function L1(t){var e,n,r,s;for(n=t,r=0,s=n.length;r<s;++r)e=n[r],Ar(e);return new JVt(t)}function con(t){var e=/function(?:\s+([\w$]+))?\s*\(/,n=e.exec(t);return n&&n[1]||Rat}function Nee(t,e){if(t){e.n=t;var n=drn(e);if(!n){$H[t]=[e];return}n.gm=e}}function uon(t,e,n){var r,s;return s=t.length,r=b.Math.min(n,s),Y4t(t,0,e,0,r,!0),e}function Pee(t,e,n){var r,s;for(s=e.Kc();s.Ob();)r=u(s.Pb(),79),Ns(t,u(n.Kb(r),33))}function lon(){jHt();for(var t=dut,e=0;e<arguments.length;e++)t.push(arguments[e])}function zC(t,e){var n,r,s,o;for(r=e,s=0,o=r.length;s<o;++s)n=r[s],hs(t,n,t.c.b,t.c)}function Y$(t,e){t.b=b.Math.max(t.b,e.d),t.e+=e.r+(t.a.c.length==0?0:t.c),ue(t.a,e)}function Fee(t){Pm(t.c>=0),ohn(t.d,t.c)<0&&(t.a=t.a-1&t.d.a.length-1,t.b=t.d.c),t.c=-1}function Umt(t){return t.a<54?t.f<0?-1:t.f>0?1:0:(!t.c&&(t.c=jI(t.f)),t.c).e}function gf(t){if(!(t>=0))throw rt(new Pn("tolerance ("+t+") must be >= 0"));return t}function z8(){return Xht||(Xht=new kue,s4(Xht,ct(ot(R4,1),Ie,130,0,[new yp]))),Xht}function so(){so=Z,MS=new Met(O_,0),Ju=new Met("INPUT",1),eu=new Met("OUTPUT",2)}function X$(){X$=Z,CTt=new Eet("ARD",0),OG=new Eet("MSD",1),wlt=new Eet("MANUAL",2)}function Zv(){Zv=Z,OO=new Pet("BARYCENTER",0),DS=new Pet(a1e,1),dV=new Pet(o1e,2)}function _I(t,e){var n;if(n=t.gc(),e<0||e>n)throw rt(new jm(e,n));return new lvt(t,e)}function Bee(t,e){var n;return Et(e,42)?t.c.Mc(e):(n=Wit(t,e),Iz(t,e),n)}function po(t,e,n){return f2(t,e),Xc(t,n),Ig(t,0),ty(t,1),Pg(t,!0),Ng(t,!0),t}function Bl(t,e){if(t<0)throw rt(new Pn(e+" cannot be negative but was: "+t));return t}function Ree(t,e){var n,r;for(n=0,r=t.gc();n<r;++n)if(Pc(e,t.Xb(n)))return n;return-1}function Q$(t){var e,n;for(n=t.c.Cc().Kc();n.Ob();)e=u(n.Pb(),14),e.$b();t.c.$b(),t.d=0}function hon(t){var e,n,r,s;for(n=t.a,r=0,s=n.length;r<s;++r)e=n[r],$Yt(e,e.length,null)}function Wmt(t){var e,n;if(t==0)return 32;for(n=0,e=1;!(e&t);e<<=1)++n;return n}function fon(t){var e,n;for(n=new S(Tse(t));n.a<n.c.c.length;)e=u(J(n),680),e.Gf()}function jee(t){dbt(),this.g=new Cr,this.f=new Cr,this.b=new Cr,this.c=new Hv,this.i=t}function Kmt(){this.f=new Ta,this.d=new Fpt,this.c=new Ta,this.a=new le,this.b=new le}function $ee(t,e,n,r){this.rj(),this.a=e,this.b=t,this.c=null,this.c=new ZWt(this,e,n,r)}function eit(t,e,n,r,s){this.d=t,this.n=e,this.g=n,this.o=r,this.p=-1,s||(this.o=-2-r-1)}function zee(){g2t.call(this),this.n=-1,this.g=null,this.i=null,this.j=null,this.Bb|=wf}function don(){return cl(),ct(ot(LAt,1),ae,259,0,[M7,iN,VV,eA,UV,KV,WV,vft,rN])}function gon(){return gq(),ct(ot(ZEt,1),ae,250,0,[QEt,WEt,KEt,UEt,Out,XEt,YEt,VEt,GEt])}function qee(){qee=Z,kge=ct(ot(Tr,1),Xr,25,15,[0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15])}function Hee(){Hee=Z,ime=bi(bi(bi(new Hs,(Wa(),Ad),(ro(),hS)),lb,r7),ou,n7)}function Gee(){Gee=Z,sme=bi(bi(bi(new Hs,(Wa(),Ad),(ro(),hS)),lb,r7),ou,n7)}function Vee(){Vee=Z,ame=bi(bi(bi(new Hs,(Wa(),Ad),(ro(),hS)),lb,r7),ou,n7)}function Uee(){Uee=Z,ume=Ku(bi(bi(new Hs,(Wa(),ou),(ro(),wG)),qc,dG),Io,vG)}function Yx(){Yx=Z,S6=new ket("LAYER_SWEEP",0),wO=new ket(jot,1),ETt=new ket(K0,2)}function pon(t,e){var n,r;return n=t.c,r=e.e[t.p],r>0?u(Fe(n.a,r-1),10):null}function qC(t,e){var n;n=t.k,t.k=e,t.Db&4&&!(t.Db&1)&&mi(t,new Qs(t,1,2,n,t.k))}function Z$(t,e){var n;n=t.f,t.f=e,t.Db&4&&!(t.Db&1)&&mi(t,new Qs(t,1,8,n,t.f))}function J$(t,e){var n;n=t.i,t.i=e,t.Db&4&&!(t.Db&1)&&mi(t,new Qs(t,1,7,n,t.i))}function Ymt(t,e){var n;n=t.a,t.a=e,t.Db&4&&!(t.Db&1)&&mi(t,new Qs(t,1,8,n,t.a))}function Xmt(t,e){var n;n=t.b,t.b=e,t.Db&4&&!(t.Db&1)&&mi(t,new Qs(t,1,0,n,t.b))}function Qmt(t,e){var n;n=t.b,t.b=e,t.Db&4&&!(t.Db&1)&&mi(t,new Qs(t,1,0,n,t.b))}function Zmt(t,e){var n;n=t.c,t.c=e,t.Db&4&&!(t.Db&1)&&mi(t,new Qs(t,1,1,n,t.c))}function Jmt(t,e){var n;n=t.c,t.c=e,t.Db&4&&!(t.Db&1)&&mi(t,new Qs(t,1,1,n,t.c))}function nit(t,e){var n;n=t.c,t.c=e,t.Db&4&&!(t.Db&1)&&mi(t,new Qs(t,1,4,n,t.c))}function tyt(t,e){var n;n=t.d,t.d=e,t.Db&4&&!(t.Db&1)&&mi(t,new Qs(t,1,1,n,t.d))}function rit(t,e){var n;n=t.D,t.D=e,t.Db&4&&!(t.Db&1)&&mi(t,new Qs(t,1,2,n,t.D))}function iit(t,e){t.r>0&&t.c<t.r&&(t.c+=e,t.i&&t.i.d>0&&t.g!=0&&iit(t.i,e/t.r*t.i.d))}function bon(t,e,n){var r;t.b=e,t.a=n,r=(t.a&512)==512?new Sqt:new VL,t.c=Dvn(r,t.b,t.a)}function Wee(t,e){return V0(t.e,e)?(to(),Yrt(e)?new Ij(e,t):new DM(e,t)):new jVt(e,t)}function tz(t,e){return nYe(GC(t.a,e,Sr(Ca(e0,Wd(Sr(Ca(e==null?0:Hi(e),n0)),15)))))}function von(t,e,n){return Ym(t,new fe(e),new Yn,new ge(n),ct(ot(ll,1),ae,132,0,[]))}function won(t){var e,n;return 0>t?new fbt:(e=t+1,n=new vJt(e,t),new V2t(null,n))}function mon(t,e){vn();var n;return n=new kx(1),ea(t)?xo(n,t,e):su(n.f,t,e),new q(n)}function yon(t,e){var n,r;return n=t.o+t.p,r=e.o+e.p,n<r?-1:n==r?0:1}function xon(t){var e;return e=Q(t,(se(),_i)),Et(e,160)?aie(u(e,160)):null}function Kee(t){var e;return t=b.Math.max(t,2),e=Tyt(t),t>e?(e<<=1,e>0?e:A_):e}function sit(t){switch(k2t(t.e!=3),t.e){case 2:return!1;case 0:return!0}return _sn(t)}function Yee(t,e){var n;return Et(e,8)?(n=u(e,8),t.a==n.a&&t.b==n.b):!1}function ait(t,e,n){var r,s,o;return o=e>>5,s=e&31,r=Ps(zm(t.n[n][o],Sr(M0(s,1))),3),r}function kon(t,e){var n,r;for(r=e.vc().Kc();r.Ob();)n=u(r.Pb(),42),Yz(t,n.cd(),n.dd())}function Eon(t,e){var n;n=new gp,u(e.b,65),u(e.b,65),u(e.b,65),mu(e.a,new xvt(t,n,e))}function eyt(t,e){var n;n=t.b,t.b=e,t.Db&4&&!(t.Db&1)&&mi(t,new Qs(t,1,21,n,t.b))}function nyt(t,e){var n;n=t.d,t.d=e,t.Db&4&&!(t.Db&1)&&mi(t,new Qs(t,1,11,n,t.d))}function ez(t,e){var n;n=t.j,t.j=e,t.Db&4&&!(t.Db&1)&&mi(t,new Qs(t,1,13,n,t.j))}function Xee(t,e,n){var r,s,o;for(o=t.a.length-1,s=t.b,r=0;r<n;s=s+1&o,++r)Ji(e,r,t.a[s])}function pf(t,e){var n;return On(e),n=e.g,t.b[n]?!1:(Ji(t.b,n,e),++t.c,!0)}function Qee(t,e){var n;return n=e==null?-1:Ro(t.b,e,0),n<0?!1:(oit(t,n),!0)}function oit(t,e){var n;n=Ag(t.b,t.b.c.length-1),e<t.b.c.length&&(ah(t.b,e,n),hoe(t,e))}function Ton(t,e){(C$(),R1?null:e.c).length==0&&SWt(e,new oe),xo(t.a,R1?null:e.c,e)}function Con(t,e){wr(e,"Hierarchical port constraint processing",1),Ohn(t),N5n(t),or(e)}function _on(t,e){var n,r;for(r=e.Kc();r.Ob();)n=u(r.Pb(),266),t.b=!0,Ns(t.e,n),n.b=t}function nz(t,e){var n,r;return n=1-e,r=t.a[n],t.a[n]=r.a[e],r.a[e]=t,t.b=!0,r.b=!1,r}function Son(t,e){var n,r;return n=u(Q(t,(Te(),Hy)),8),r=u(Q(e,Hy),8),Ls(n.b,r.b)}function Zee(t){Wvt.call(this),this.b=Xt(ye(Q(t,(Te(),xf)))),this.a=u(Q(t,X0),218)}function Jee(t,e,n){Xwt.call(this,t,e,n),this.a=new Cr,this.b=new Cr,this.d=new g$t(this)}function tne(t){this.e=t,this.d=new xR(Qm(Px(this.e).gc())),this.c=this.e.a,this.b=this.e.c}function rz(t){this.b=t,this.a=Pt(Tr,Xr,25,t+1,15,1),this.c=Pt(Tr,Xr,25,t,15,1),this.d=0}function cit(t,e,n){var r;return r=new le,I5t(t,e,r,n,!0,!0),t.b=new rz(r.c.length),r}function ene(t,e){var n;return n=u(Jn(t.c,e),458),n||(n=new aqt,n.c=e,ki(t.c,n.c,n)),n}function uit(t,e){var n=t.a,r=0;for(var s in n)n.hasOwnProperty(s)&&(e[r++]=s);return e}function ryt(t){var e;return t.b==null?(Eg(),Eg(),hN):(e=t.Lk()?t.Kk():t.Jk(),e)}function nne(t){var e,n;for(n=new er(t);n.e!=n.i.gc();)e=u(dr(n),33),yu(e,0),xu(e,0)}function Gp(){Gp=Z,C6=new Gi(l6t),aG=new Gi(zfe),lS=new Gi(qfe),dO=new Gi(Hfe)}function q8(){q8=Z,pO=new Abt("TO_INTERNAL_LTR",0),nlt=new Abt("TO_INPUT_DIRECTION",1)}function iz(){iz=Z,TV=new Hbt("P1_NODE_PLACEMENT",0),E7=new Hbt("P2_EDGE_ROUTING",1)}function Jv(){Jv=Z,Aw=new xet("START",0),hb=new xet("MIDDLE",1),Sw=new xet("END",2)}function Xx(){Xx=Z,slt=new Os("edgelabelcenterednessanalysis.includelabel",(Fn(),I2))}function Aon(t,e){us(Ri(new Tn(null,new _n(new Tm(t.b),1)),new cVt(t,e)),new lVt(t,e))}function rne(){this.c=new ER(0),this.b=new ER(L1e),this.d=new ER(A1e),this.a=new ER(Mot)}function iyt(t){var e,n;for(n=t.c.a.ec().Kc();n.Ob();)e=u(n.Pb(),214),cpt(e,new Cae(e.e))}function ine(t){var e,n;for(n=t.c.a.ec().Kc();n.Ob();)e=u(n.Pb(),214),xtt(e,new IYt(e.f))}function Xc(t,e){var n;n=t.zb,t.zb=e,t.Db&4&&!(t.Db&1)&&mi(t,new Qs(t,1,1,n,t.zb))}function sz(t,e){var n;n=t.xb,t.xb=e,t.Db&4&&!(t.Db&1)&&mi(t,new Qs(t,1,3,n,t.xb))}function az(t,e){var n;n=t.yb,t.yb=e,t.Db&4&&!(t.Db&1)&&mi(t,new Qs(t,1,2,n,t.yb))}function es(t,e){var n,r;n=(r=new Utt,r),n.n=e,Mr((!t.s&&(t.s=new he(Au,t,21,17)),t.s),n)}function Pi(t,e){var n,r;r=(n=new q2t,n),r.n=e,Mr((!t.s&&(t.s=new he(Au,t,21,17)),t.s),r)}function e4(t,e){var n,r;for(n=t.Pc(),D8(n,0,n.length,e),r=0;r<n.length;r++)t._c(r,n[r])}function Ua(t,e){var n,r,s;for(On(e),n=!1,s=e.Kc();s.Ob();)r=s.Pb(),n=n|t.Fc(r);return n}function sne(t){var e,n,r;for(e=0,r=t.Kc();r.Ob();)n=r.Pb(),e+=n!=null?Hi(n):0,e=~~e;return e}function ane(t){var e;return t==0?"UTC":(t<0?(t=-t,e="UTC+"):e="UTC-",e+qte(t))}function lit(t,e){var n;return Et(e,14)?(n=u(e,14),t.Gc(n)):Xrt(t,u(Ar(e),20).Kc())}function one(t,e,n){lee.call(this,e,n),this.d=Pt(o0,zg,10,t.a.c.length,0,1),D1(t.a,this.d)}function Lon(t){t.a=null,t.e=null,t.b.c=Pt(Xn,Ie,1,0,5,1),t.f.c=Pt(Xn,Ie,1,0,5,1),t.c=null}function cne(t,e){e?t.B==null&&(t.B=t.D,t.D=null):t.B!=null&&(t.D=t.B,t.B=null)}function une(t,e){return Xt(ye(Ov(qI(pu(new Tn(null,new _n(t.c.b,16)),new rR(t)),e))))}function syt(t,e){return Xt(ye(Ov(qI(pu(new Tn(null,new _n(t.c.b,16)),new _9(t)),e))))}function Mon(t,e){wr(e,s1e,1),us(Wo(new Tn(null,new _n(t.b,16)),new iY),new sY),or(e)}function Ion(t,e){var n,r;return n=u(qe(t,(ay(),_V)),19),r=u(qe(e,_V),19),du(n.a,r.a)}function ayt(t,e,n){var r,s;for(s=ei(t,0);s.b!=s.d.c;)r=u(ti(s),8),r.a+=e,r.b+=n;return t}function HC(t,e,n){var r;for(r=t.b[n&t.f];r;r=r.b)if(n==r.a&&fd(e,r.g))return r;return null}function GC(t,e,n){var r;for(r=t.c[n&t.f];r;r=r.d)if(n==r.f&&fd(e,r.i))return r;return null}function Don(t,e,n){var r,s,o;for(r=0,s=0;s<n;s++)o=e[s],t[s]=o<<1|r,r=o>>>31;r!=0&&(t[n]=r)}function Oon(t,e){vn();var n,r;for(r=new le,n=0;n<t;++n)r.c[r.c.length]=e;return new oet(r)}function lne(t){var e;return e=pZt(t),Av(e.a,0)?(i8(),i8(),EEt):(i8(),new N2t(e.b))}function hne(t){var e;return e=pZt(t),Av(e.a,0)?(i8(),i8(),EEt):(i8(),new N2t(e.c))}function Non(t){var e;return e=m$(t),Av(e.a,0)?(SR(),SR(),Dge):(SR(),new sWt(e.b))}function Pon(t){return t.b.c.i.k==(Gn(),xs)?u(Q(t.b.c.i,(se(),_i)),11):t.b.c}function fne(t){return t.b.d.i.k==(Gn(),xs)?u(Q(t.b.d.i,(se(),_i)),11):t.b.d}function ls(t,e,n,r,s,o,h,d,w,k,C,M,F){return ioe(t,e,n,r,s,o,h,d,w,k,C,M,F),Rit(t,!1),t}function uh(t,e,n,r,s,o,h){Gr.call(this,t,e),this.d=n,this.e=r,this.c=s,this.b=o,this.a=_1(h)}function Fon(t,e){typeof window===CD&&typeof window.$gwt===CD&&(window.$gwt[t]=e)}function Bon(t,e){return K8(),t==_w&&e==Dy||t==Dy&&e==_w||t==j4&&e==Iy||t==Iy&&e==j4}function Ron(t,e){return K8(),t==_w&&e==Iy||t==_w&&e==j4||t==Dy&&e==j4||t==Dy&&e==Iy}function dne(t,e){return y1(),gf(P1),b.Math.abs(0-e)<=P1||e==0||isNaN(0)&&isNaN(e)?0:t/e}function jon(){return oo(),ct(ot(Alt,1),ae,256,0,[RG,bh,vS,jG,f7,V4,wS,l7,h7,$G])}function hit(){hit=Z,aA=new kqt,_ft=ct(ot(Au,1),P4,170,0,[]),s5e=ct(ot(Vh,1),O8t,59,0,[])}function oz(){oz=Z,VCt=new Oet("NO",0),wht=new Oet("GREEDY",1),GCt=new Oet("LOOK_BACK",2)}function Bu(){Bu=Z,N7t=new bm,D7t=new bp,O7t=new tY,I7t=new zb,P7t=new eY,F7t=new nY}function $on(t){var e,n,r;for(r=0,n=new S(t.b);n.a<n.c.c.length;)e=u(J(n),29),e.p=r,++r}function zon(t,e){var n;return n=C4t(t),t5t(new $e(n.c,n.d),new $e(n.b,n.a),t.rf(),e,t.Hf())}function Rc(t,e){var n;return t.b?null:(n=Ran(t,t.g),ni(t.a,n),n.i=t,t.d=e,n)}function qon(t,e,n){wr(n,"DFS Treeifying phase",1),Qln(t,e),W2n(t,e),t.a=null,t.b=null,or(n)}function gne(t,e,n){this.g=t,this.d=e,this.e=n,this.a=new le,$gn(this),vn(),Xs(this.a,null)}function oyt(t){this.i=t.gc(),this.i>0&&(this.g=this.ri(this.i+(this.i/8|0)+1),t.Qc(this.g))}function is(t,e){Sj.call(this,a5e,t,e),this.b=this,this.a=au(t.Tg(),yn(this.e.Tg(),this.c))}function VC(t,e){var n,r;for(On(e),r=e.vc().Kc();r.Ob();)n=u(r.Pb(),42),t.zc(n.cd(),n.dd())}function Hon(t,e,n){var r;for(r=n.Kc();r.Ob();)if(!k$(t,e,r.Pb()))return!1;return!0}function Gon(t,e,n,r,s){var o;return n&&(o=Vi(e.Tg(),t.c),s=n.gh(e,-1-(o==-1?r:o),null,s)),s}function Von(t,e,n,r,s){var o;return n&&(o=Vi(e.Tg(),t.c),s=n.ih(e,-1-(o==-1?r:o),null,s)),s}function pne(t){var e;if(t.b==-2){if(t.e==0)e=-1;else for(e=0;t.a[e]==0;e++);t.b=e}return t.b}function bne(t){switch(t.g){case 2:return be(),Bn;case 4:return be(),Hn;default:return t}}function vne(t){switch(t.g){case 1:return be(),mr;case 3:return be(),Nn;default:return t}}function Uon(t){var e,n,r;return t.j==(be(),Nn)&&(e=Uoe(t),n=Nu(e,Hn),r=Nu(e,Bn),r||r&&n)}function Won(t){var e,n;return e=u(t.e&&t.e(),9),n=u(dwt(e,e.length),9),new rh(e,n,e.length)}function Kon(t,e){wr(e,s1e,1),c3t(gYe(new tr((z9(),new trt(t,!1,!1,new YP))))),or(e)}function SI(t,e){return Fn(),ea(t)?pmt(t,Br(e)):Nm(t)?Pnt(t,ye(e)):Om(t)?Ztn(t,Re(e)):t.wd(e)}function cyt(t,e){e.q=t,t.d=b.Math.max(t.d,e.r),t.b+=e.d+(t.a.c.length==0?0:t.c),ue(t.a,e)}function H8(t,e){var n,r,s,o;return s=t.c,n=t.c+t.b,o=t.d,r=t.d+t.a,e.a>s&&e.a<n&&e.b>o&&e.b<r}function wne(t,e,n,r){Et(t.Cb,179)&&(u(t.Cb,179).tb=null),Xc(t,n),e&&cpn(t,e),r&&t.xk(!0)}function uyt(t,e){var n;n=u(e,183),Jb(n,"x",t.i),Jb(n,"y",t.j),Jb(n,zct,t.g),Jb(n,$ct,t.f)}function lyt(){lyt=Z,lme=aw(WVt(bi(bi(new Hs,(Wa(),ou),(ro(),wG)),qc,dG),Io),vG)}function mne(){mne=Z,gme=aw(WVt(bi(bi(new Hs,(Wa(),ou),(ro(),wG)),qc,dG),Io),vG)}function cz(){cz=Z,jht=new Ret(K0,0),M_t=new Ret("POLAR_COORDINATE",1),L_t=new Ret("ID",2)}function uz(){uz=Z,RCt=new Iet("EQUALLY",0),pht=new Iet(Rq,1),jCt=new Iet("NORTH_SOUTH",2)}function yne(){yne=Z,Gwe=Wr((w4(),ct(ot(NCt,1),ae,260,0,[hV,MO,IO,ICt,DCt,MCt,OCt,fV])))}function xne(){xne=Z,o2e=Wr((fq(),ct(ot(yTt,1),ae,270,0,[llt,dlt,ult,blt,flt,hlt,plt,glt])))}function kne(){kne=Z,P3e=Wr((jg(),ct(ot(N3e,1),ae,277,0,[mSt,Aa,gc,T7,Do,cs,j6,q1])))}function Ene(){Ene=Z,R4e=Wr((vE(),ct(ot(eU,1),ae,237,0,[kft,JV,tU,ZV,xft,QV,XV,yft])))}function G8(){G8=Z,uS=new Os("debugSVG",(Fn(),!1)),n7t=new Os("overlapsExisted",!0)}function Tne(t,e){return Ym(new zt(t),new ee(e),new Vt(e),new ds,ct(ot(ll,1),ae,132,0,[]))}function Yon(){var t;return Lut||(Lut=new Xzt,t=new Irt(""),oXe(t,(s8(),LEt)),Ton(Lut,t)),Lut}function Xon(t,e){var n;for(Ar(e);t.Ob();)if(n=t.Pb(),!dyt(u(n,10)))return!1;return!0}function Cne(t,e){var n;return n=sat(z8(),t),n?(bo(e,(ci(),C7),n),!0):!1}function Rl(t,e){var n;for(n=0;n<e.j.c.length;n++)u(wI(t,n),21).Gc(u(wI(e,n),14));return t}function Qon(t,e){var n,r;for(r=new S(e.b);r.a<r.c.c.length;)n=u(J(r),29),t.a[n.p]=x0n(n)}function UC(t,e){var n,r;for(On(e),r=t.vc().Kc();r.Ob();)n=u(r.Pb(),42),e.Od(n.cd(),n.dd())}function lz(t,e){var n;Et(e,83)?(u(t.c,76).Xj(),n=u(e,83),kon(t,n)):u(t.c,76).Wb(e)}function a2(t){return Et(t,152)?Vx(u(t,152)):Et(t,131)?u(t,131).a:Et(t,54)?new mv(t):new Mm(t)}function Zon(t,e){return e<t.b.gc()?u(t.b.Xb(e),10):e==t.b.gc()?t.a:u(Fe(t.e,e-t.b.gc()-1),10)}function _ne(t,e){t.a=Oa(t.a,1),t.c=b.Math.min(t.c,e),t.b=b.Math.max(t.b,e),t.d=Oa(t.d,e)}function Jon(t,e){var n;wr(e,"Edge and layer constraint edge reversal",1),n=nwn(t),w4n(n),or(e)}function Sne(t){var e;t.d==null?(++t.e,t.f=0,Fre(null)):(++t.e,e=t.d,t.d=null,t.f=0,Fre(e))}function Vp(t){var e;return e=t.h,e==0?t.l+t.m*f6:e==W0?t.l+t.m*f6-x2:t}function Ane(t){return Bm(),t.A.Hc((_l(),Xy))&&!t.B.Hc((cl(),iN))?lie(t):null}function tcn(t){if(On(t),t.length==0)throw rt(new od("Zero length BigInteger"));dwn(this,t)}function n4(t){if(!t)throw rt(new Fo("no calls to next() since the last call to remove()"))}function ku(t){return DD<t&&t<x2?t<0?b.Math.ceil(t):b.Math.floor(t):Vp(y2n(t))}function ecn(t,e){var n,r,s;for(n=t.c.Ee(),s=e.Kc();s.Ob();)r=s.Pb(),t.a.Od(n,r);return t.b.Kb(n)}function mi(t,e){var n,r,s;if(n=t.Jg(),n!=null&&t.Mg())for(r=0,s=n.length;r<s;++r)n[r].ui(e)}function V8(t,e){var n,r;for(n=t,r=Fa(n).e;r;){if(n=r,n==e)return!0;r=Fa(n).e}return!1}function ncn(t,e,n){var r,s;return r=t.a.f[e.p],s=t.a.f[n.p],r<s?-1:r==s?0:1}function o2(t,e,n){var r,s;return s=u(wC(t.d,e),19),r=u(wC(t.b,n),19),!s||!r?null:Wx(t,s.a,r.a)}function rcn(t,e){var n,r;for(r=new er(t);r.e!=r.i.gc();)n=u(dr(r),33),m1(n,n.i+e.b,n.j+e.d)}function icn(t,e){var n,r;for(r=new S(e);r.a<r.c.c.length;)n=u(J(r),70),ue(t.d,n),g0n(t,n)}function scn(t,e){var n,r;r=new le,n=e;do r.c[r.c.length]=n,n=u(Jn(t.k,n),17);while(n);return r}function In(t,e){var n;return t.Db&e?(n=bst(t,e),n==-1?t.Eb:s2(t.Eb)[n]):null}function ic(t,e){var n,r;return n=(r=new XL,r),n.G=e,!t.rb&&(t.rb=new qm(t,i1,t)),Mr(t.rb,n),n}function ai(t,e){var n,r;return n=(r=new lR,r),n.G=e,!t.rb&&(t.rb=new qm(t,i1,t)),Mr(t.rb,n),n}function hyt(t,e){switch(e){case 1:return!!t.n&&t.n.i!=0;case 2:return t.k!=null}return Gwt(t,e)}function Lne(t){switch(t.a.g){case 1:return new LVt;case 3:return new Sse;default:return new id}}function hz(t){var e;if(t.g>1||t.Ob())return++t.a,t.g=0,e=t.i,t.Ob(),e;throw rt(new lc)}function acn(t){wUt();var e;return AGt(yht,t)||(e=new SQ,e.a=t,Z2t(yht,t,e)),u(go(yht,t),635)}function Sh(t){var e,n,r,s;return s=t,r=0,s<0&&(s+=x2,r=W0),n=ps(s/f6),e=ps(s-n*f6),ru(e,n,r)}function AI(t){var e,n,r;for(r=0,n=new Ex(t.a);n.a<n.c.a.length;)e=FC(n),t.b.Hc(e)&&++r;return r}function ocn(t){var e,n,r;for(e=1,r=t.Kc();r.Ob();)n=r.Pb(),e=31*e+(n==null?0:Hi(n)),e=~~e;return e}function ccn(t,e){var n;this.c=t,n=new le,z3t(t,n,e,t.b,null,!1,null,!1),this.a=new ha(n,0)}function U8(t,e){this.b=t,this.e=e,this.d=e.j,this.f=(to(),u(t,66).Oj()),this.k=au(e.e.Tg(),t)}function c2(t,e,n){this.b=(On(t),t),this.d=(On(e),e),this.e=(On(n),n),this.c=this.d+(""+this.e)}function Mne(){this.a=u(De((Zf(),iG)),19).a,this.c=Xt(ye(De(sG))),this.b=Xt(ye(De(Gut)))}function Ine(){Ine=Z,h4e=Wr((fy(),ct(ot(lo,1),ae,93,0,[Ef,J0,Tf,_f,l0,zh,Ul,Cf,$h])))}function Dne(){Dne=Z,Kge=Wr((gq(),ct(ot(ZEt,1),ae,250,0,[QEt,WEt,KEt,UEt,Out,XEt,YEt,VEt,GEt])))}function tw(){tw=Z,aO=new zR("UP",0),sO=new zR(yot,1),Fut=new zR(d6,2),But=new zR(g6,3)}function fyt(){fyt=Z,n_t=(d$(),Mht),eye=new mn(Fkt,n_t),e_t=(v$(),Iht),tye=new mn(Bkt,e_t)}function W8(){W8=Z,Llt=new Cet("ONE_SIDED",0),Mlt=new Cet("TWO_SIDED",1),mO=new Cet("OFF",2)}function One(t){t.r=new qs,t.w=new qs,t.t=new le,t.i=new le,t.d=new qs,t.a=new Ax,t.c=new Cr}function LI(t){this.n=new le,this.e=new Qi,this.j=new Qi,this.k=new le,this.f=new le,this.p=t}function Nne(t,e){t.c&&(Bue(t,e,!0),us(new Tn(null,new _n(e,16)),new $tt(t))),Bue(t,e,!1)}function ucn(t,e,n){return t==(Zv(),dV)?new tQ:ol(e,1)!=0?new ibt(n.length):new iHt(n.length)}function Lo(t,e){var n;return e&&(n=e.Ve(),n.dc()||(t.q?VC(t.q,n):t.q=new UVt(n))),t}function Pne(t,e){var n;return n=t.a.get(e),n===void 0?++t.d:(OQe(t.a,e),--t.c,a$(t.b)),n}function lcn(t,e){var n,r,s;return n=e.p-t.p,n==0?(r=t.f.a*t.f.b,s=e.f.a*e.f.b,Ls(r,s)):n}function hcn(t,e){var n,r;return n=t.f.c.length,r=e.f.c.length,n<r?-1:n==r?0:1}function fcn(t){return t.b.c.length!=0&&u(Fe(t.b,0),70).a?u(Fe(t.b,0),70).a:rrt(t)}function dcn(t){var e;if(t){if(e=t,e.dc())throw rt(new lc);return e.Xb(e.gc()-1)}return FQt(t.Kc())}function Fne(t){var e;return yc(t,0)<0&&(t=Ivt(t)),e=Sr(Fp(t,32)),64-(e!=0?lD(e):lD(Sr(t))+32)}function dyt(t){var e;return e=u(Q(t,(se(),oc)),61),t.k==(Gn(),xs)&&(e==(be(),Bn)||e==Hn)}function gcn(t,e,n){var r,s;s=u(Q(t,(Te(),_o)),74),s&&(r=new Du,Ait(r,0,s),Jm(r,n),Ua(e,r))}function fz(t,e,n){var r,s,o,h;h=Fa(t),r=h.d,s=h.c,o=t.n,e&&(o.a=o.a-r.b-s.a),n&&(o.b=o.b-r.d-s.b)}function pcn(t,e){var n,r;return n=t.j,r=e.j,n!=r?n.g-r.g:t.p==e.p?0:n==(be(),Nn)?t.p-e.p:e.p-t.p}function bcn(t){var e,n;for(z4n(t),n=new S(t.d);n.a<n.c.c.length;)e=u(J(n),101),e.i&&X0n(e)}function WC(t,e,n,r,s){Ji(t.c[e.g],n.g,r),Ji(t.c[n.g],e.g,r),Ji(t.b[e.g],n.g,s),Ji(t.b[n.g],e.g,s)}function vcn(t,e,n,r){u(n.b,65),u(n.b,65),u(r.b,65),u(r.b,65),u(r.b,65),mu(r.a,new yvt(t,e,r))}function wcn(t,e){t.d==(ao(),jh)||t.d==Z0?u(e.a,57).c.Fc(u(e.b,57)):u(e.b,57).c.Fc(u(e.a,57))}function fit(t,e,n,r){return n==1?(!t.n&&(t.n=new he(qo,t,1,7)),Ba(t.n,e,r)):O4t(t,e,n,r)}function MI(t,e){var n,r;return r=(n=new RL,n),Xc(r,e),Mr((!t.A&&(t.A=new Ou(lu,t,7)),t.A),r),r}function mcn(t,e,n){var r,s,o,h;return o=null,h=e,s=Uv(h,Gct),r=new gVt(t,n),o=(R1n(r.a,r.b,s),s),o}function dit(t){var e;return(!t.a||!(t.Bb&1)&&t.a.kh())&&(e=Lh(t),Et(e,148)&&(t.a=u(e,148))),t.a}function II(t,e){var n,r;for(On(e),r=e.Kc();r.Ob();)if(n=r.Pb(),!t.Hc(n))return!1;return!0}function ycn(t,e){var n,r,s;return n=t.l+e.l,r=t.m+e.m+(n>>22),s=t.h+e.h+(r>>22),ru(n&ul,r&ul,s&W0)}function Bne(t,e){var n,r,s;return n=t.l-e.l,r=t.m-e.m+(n>>22),s=t.h-e.h+(r>>22),ru(n&ul,r&ul,s&W0)}function DI(t){var e;return t<128?(e=(ZKt(),iEt)[t],!e&&(e=iEt[t]=new tR(t)),e):new tR(t)}function Wi(t){var e;return Et(t,78)?t:(e=t&&t.__java$exception,e||(e=new _re(t),Hzt(e)),e)}function OI(t){if(Et(t,186))return u(t,118);if(t)return null;throw rt(new yx(Dde))}function Rne(t,e){if(e==null)return!1;for(;t.a!=t.b;)if(yi(e,mz(t)))return!0;return!1}function gyt(t){return t.a.Ob()?!0:t.a!=t.d?!1:(t.a=new Kwt(t.e.f),t.a.Ob())}function As(t,e){var n,r;return n=e.Pc(),r=n.length,r==0?!1:(Svt(t.c,t.c.length,n),!0)}function xcn(t,e,n){var r,s;for(s=e.vc().Kc();s.Ob();)r=u(s.Pb(),42),t.yc(r.cd(),r.dd(),n);return t}function jne(t,e){var n,r;for(r=new S(t.b);r.a<r.c.c.length;)n=u(J(r),70),Jt(n,(se(),D6),e)}function kcn(t,e,n){var r,s;for(s=new S(t.b);s.a<s.c.c.length;)r=u(J(s),33),m1(r,r.i+e,r.j+n)}function $ne(t,e){if(!t)throw rt(new Pn(v_("value already present: %s",ct(ot(Xn,1),Ie,1,5,[e]))))}function zne(t,e){return!t||!e||t==e?!1:Eie(t.d.c,e.d.c+e.d.b)&&Eie(e.d.c,t.d.c+t.d.b)}function Ecn(){return C$(),R1?new Irt(null):Goe(Yon(),"com.google.common.base.Strings")}function qne(t,e){var n;return n=Hd(e.a.gc()),us(G$(new Tn(null,new _n(e,1)),t.i),new oVt(t,n)),n}function Hne(t){var e,n;return n=(e=new RL,e),Xc(n,"T"),Mr((!t.d&&(t.d=new Ou(lu,t,11)),t.d),n),n}function pyt(t){var e,n,r,s;for(e=1,n=0,s=t.gc();n<s;++n)r=t.ki(n),e=31*e+(r==null?0:Hi(r));return e}function Gne(t,e,n,r){var s;return oI(e,t.e.Hd().gc()),oI(n,t.c.Hd().gc()),s=t.a[e][n],Ji(t.a[e],n,r),s}function ct(t,e,n,r,s){return s.gm=t,s.hm=e,s.im=Ct,s.__elementTypeId$=n,s.__elementTypeCategory$=r,s}function Tcn(t,e,n,r,s){return y4(),b.Math.min(the(t,e,n,r,s),the(n,r,t,e,mj(new $e(s.a,s.b))))}function dz(){dz=Z,alt=new HR(K0,0),_G=new HR(c1e,1),SG=new HR(u1e,2),vO=new HR("BOTH",3)}function M1(){M1=Z,_6=new GR(NE,0),i7=new GR(d6,1),s7=new GR(g6,2),olt=new GR("TOP",3)}function K8(){K8=Z,_w=new qR("Q1",0),Dy=new qR("Q4",1),Iy=new qR("Q2",2),j4=new qR("Q3",3)}function gz(){gz=Z,mht=new Net("OFF",0),x7=new Net("SINGLE_EDGE",1),Vy=new Net("MULTI_EDGE",2)}function NI(){NI=Z,OV=new Ubt("MINIMUM_SPANNING_TREE",0),bSt=new Ubt("MAXIMUM_SPANNING_TREE",1)}function Qx(){Qx=Z,L3e=new dZ,A3e=new hZ}function byt(t){var e,n,r;for(e=new Qi,r=ei(t.d,0);r.b!=r.d.c;)n=u(ti(r),188),ni(e,n.c);return e}function git(t){var e,n,r,s;for(s=new le,r=t.Kc();r.Ob();)n=u(r.Pb(),33),e=gy(n),As(s,e);return s}function Ccn(t){var e;dw(t,!0),e=$g,Vs(t,(Te(),w7))&&(e+=u(Q(t,w7),19).a),Jt(t,w7,de(e))}function Vne(t,e,n){var r;Yu(t.a),mu(n.i,new $$t(t)),r=new cj(u(Jn(t.a,e.b),65)),Die(t,r,e),n.f=r}function _cn(t,e){var n,r;return n=t.c,r=e.e[t.p],r<n.a.c.length-1?u(Fe(n.a,r+1),10):null}function Scn(t,e){var n,r;for(r$(e,"predicate"),r=0;t.Ob();r++)if(n=t.Pb(),e.Lb(n))return r;return-1}function Zx(t,e){var n,r;if(r=0,t<64&&t<=e)for(e=e<64?e:63,n=t;n<=e;n++)r=C1(r,M0(1,n));return r}function vyt(t){vn();var e,n,r;for(r=0,n=t.Kc();n.Ob();)e=n.Pb(),r=r+(e!=null?Hi(e):0),r=r|0;return r}function wyt(t){var e,n;return n=(Tv(),e=new rd,e),t&&Mr((!t.a&&(t.a=new he(Zi,t,6,6)),t.a),n),n}function Acn(t){var e;return e=new yt,e.a=t,e.b=Pcn(t),e.c=Pt(Ae,te,2,2,6,1),e.c[0]=ane(t),e.c[1]=ane(t),e}function myt(t,e){switch(e){case 0:!t.o&&(t.o=new Tl((Zc(),Eb),$w,t,0)),t.o.c.$b();return}Nst(t,e)}function PI(t,e,n){switch(n.g){case 2:t.b=e;break;case 1:t.c=e;break;case 4:t.d=e;break;case 3:t.a=e}}function Une(t){switch(t.g){case 1:return wb;case 2:return u0;case 3:return QO;default:return ZO}}function Lcn(t){switch(u(Q(t,(Te(),cu)),163).g){case 2:case 4:return!0;default:return!1}}function Wne(){Wne=Z,y2e=Wr((oo(),ct(ot(Alt,1),ae,256,0,[RG,bh,vS,jG,f7,V4,wS,l7,h7,$G])))}function Kne(){Kne=Z,x4e=Wr((cl(),ct(ot(LAt,1),ae,259,0,[M7,iN,VV,eA,UV,KV,WV,vft,rN])))}function Yne(){Yne=Z,pye=bi(aw(aw(OR(bi(new Hs,(uE(),PS),(f_(),wV)),PO),Eht),Tht),FS,Cht)}function u2(){u2=Z,xlt=new Tet(K0,0),u7=new Tet("INCOMING_ONLY",1),G4=new Tet("OUTGOING_ONLY",2)}function pit(){pit=Z,Eut={boolean:fYe,number:xKe,string:kKe,object:coe,function:coe,undefined:eKe}}function Xne(t,e){_j(t>=0,"Negative initial capacity"),_j(e>=0,"Non-positive load factor"),Yu(this)}function bit(t,e,n){return t>=128?!1:t<64?aC(Ps(M0(1,t),n),0):aC(Ps(M0(1,t-64),e),0)}function Mcn(t,e){return!t||!e||t==e?!1:rw(t.b.c,e.b.c+e.b.b)<0&&rw(e.b.c,t.b.c+t.b.b)<0}function Qne(t){var e,n,r;return n=t.n,r=t.o,e=t.d,new ih(n.a-e.b,n.b-e.d,r.a+(e.b+e.c),r.b+(e.d+e.a))}function Icn(t){var e,n,r,s;for(n=t.a,r=0,s=n.length;r<s;++r)e=n[r],rre(t,e,(be(),mr)),rre(t,e,Nn)}function Dcn(t){var e,n,r,s;for(e=(t.j==null&&(t.j=(T8(),s=kut.ce(t),G1n(s))),t.j),n=0,r=e.length;n<r;++n);}function Y8(t){var e,n,r;return e=~t.l+1&ul,n=~t.m+(e==0?1:0)&ul,r=~t.h+(e==0&&n==0?1:0)&W0,ru(e,n,r)}function Ocn(t,e){var n,r;return n=u(u(Jn(t.g,e.a),46).a,65),r=u(u(Jn(t.g,e.b),46).a,65),ule(n,r)}function yyt(t,e,n){var r;if(r=t.gc(),e>r)throw rt(new jm(e,r));return t.hi()&&(n=gQt(t,n)),t.Vh(e,n)}function FI(t,e,n){return n==null?(!t.q&&(t.q=new Cr),Ux(t.q,e)):(!t.q&&(t.q=new Cr),ki(t.q,e,n)),t}function Jt(t,e,n){return n==null?(!t.q&&(t.q=new Cr),Ux(t.q,e)):(!t.q&&(t.q=new Cr),ki(t.q,e,n)),t}function Zne(t){var e,n;return n=new _$,Lo(n,t),Jt(n,(Gp(),C6),t),e=new Cr,Pmn(t,n,e),o4n(t,n,e),n}function Ncn(t){y4();var e,n,r;for(n=Pt(Us,te,8,2,0,1),r=0,e=0;e<2;e++)r+=.5,n[e]=pfn(r,t);return n}function Jne(t,e){var n,r,s,o;for(n=!1,r=t.a[e].length,o=0;o<r-1;o++)s=o+1,n=n|Zln(t,e,o,s);return n}function X8(t,e,n,r,s){var o,h;for(h=n;h<=s;h++)for(o=e;o<=r;o++)l4(t,o,h)||bq(t,o,h,!0,!1)}function tre(t,e){this.b=t,q3.call(this,(u(St(Wt((jp(),Ln).o),10),18),e.i),e.g),this.a=(hit(),_ft)}function xyt(t,e){this.c=t,this.d=e,this.b=this.d/this.c.c.Hd().gc()|0,this.a=this.d%this.c.c.Hd().gc()}function kyt(){this.o=null,this.k=null,this.j=null,this.d=null,this.b=null,this.n=null,this.a=null}function Eyt(t,e,n){this.q=new b.Date,this.q.setFullYear(t+nb,e,n),this.q.setHours(0,0,0,0),y_(this,0)}function j0(){j0=Z,gb=new Let(K0,0),PCt=new Let("NODES_AND_EDGES",1),fht=new Let("PREFER_EDGES",2)}function Pcn(t){var e;return t==0?"Etc/GMT":(t<0?(t=-t,e="Etc/GMT-"):e="Etc/GMT+",e+qte(t))}function Tyt(t){var e;if(t<0)return _a;if(t==0)return 0;for(e=A_;!(e&t);e>>=1);return e}function ere(t){var e,n;return n=lD(t.h),n==32?(e=lD(t.m),e==32?lD(t.l)+32:e+20-10):n-12}function KC(t){var e;return e=t.a[t.b],e==null?null:(Ji(t.a,t.b,null),t.b=t.b+1&t.a.length-1,e)}function nre(t){var e,n;return e=t.t-t.k[t.o.p]*t.d+t.j[t.o.p]>t.f,n=t.u+t.e[t.o.p]*t.d>t.f*t.s*t.d,e||n}function pz(t,e,n){var r,s;return r=new $rt(e,n),s=new $t,t.b=Wce(t,t.b,r,s),s.b||++t.c,t.b.b=!1,s.d}function rre(t,e,n){var r,s,o,h;for(h=QC(e,n),o=0,s=h.Kc();s.Ob();)r=u(s.Pb(),11),ki(t.c,r,de(o++))}function Up(t){var e,n;for(n=new S(t.a.b);n.a<n.c.c.length;)e=u(J(n),81),e.g.c=-e.g.c-e.g.b;uq(t)}function Wp(t){var e,n;for(n=new S(t.a.b);n.a<n.c.c.length;)e=u(J(n),57),e.d.c=-e.d.c-e.d.b;S5t(t)}function Cyt(t){var e;return(!t.c||!(t.Bb&1)&&t.c.Db&64)&&(e=Lh(t),Et(e,88)&&(t.c=u(e,26))),t.c}function vit(t){var e,n,r;e=~t.l+1&ul,n=~t.m+(e==0?1:0)&ul,r=~t.h+(e==0&&n==0?1:0)&W0,t.l=e,t.m=n,t.h=r}function Ko(t){var e,n,r,s,o;for(e=new Ta,r=t,s=0,o=r.length;s<o;++s)n=r[s],e.a+=n.a,e.b+=n.b;return e}function _yt(t,e){vn();var n,r,s,o,h;for(h=!1,r=e,s=0,o=r.length;s<o;++s)n=r[s],h=h|t.Fc(n);return h}function r4(t){y4();var e,n;for(n=-17976931348623157e292,e=0;e<t.length;e++)t[e]>n&&(n=t[e]);return n}function ire(t,e,n){var r;return r=new le,I5t(t,e,r,(be(),Hn),!0,!1),I5t(t,n,r,Bn,!1,!1),r}function wit(t,e,n){var r,s,o,h;return o=null,h=e,s=Uv(h,"labels"),r=new TVt(t,n),o=(Jpn(r.a,r.b,s),s),o}function Fcn(t,e,n,r){var s;return s=w5t(t,e,n,r),!s&&(s=Bun(t,n,r),s&&!E4(t,e,s))?null:s}function Bcn(t,e,n,r){var s;return s=m5t(t,e,n,r),!s&&(s=Pit(t,n,r),s&&!E4(t,e,s))?null:s}function sre(t,e){var n;for(n=0;n<t.a.a.length;n++)if(!u(eYt(t.a,n),169).Lb(e))return!1;return!0}function Rcn(t,e,n){if(Ar(e),n.Ob())for(Qbt(e,WYt(n.Pb()));n.Ob();)Qbt(e,t.a),Qbt(e,WYt(n.Pb()));return e}function Syt(t){vn();var e,n,r;for(r=1,n=t.Kc();n.Ob();)e=n.Pb(),r=31*r+(e!=null?Hi(e):0),r=r|0;return r}function jcn(t,e,n,r,s){var o;return o=h5t(t,e),n&&vit(o),s&&(t=xfn(t,e),r?ob=Y8(t):ob=ru(t.l,t.m,t.h)),o}function $cn(t,e){var n;try{e.Vd()}catch(r){if(r=Wi(r),Et(r,78))n=r,t.c[t.c.length]=n;else throw rt(r)}}function are(t,e,n){var r,s;return Et(e,144)&&n?(r=u(e,144),s=n,t.a[r.b][s.b]+t.a[s.b][r.b]):0}function Ayt(t,e){switch(e){case 7:return!!t.e&&t.e.i!=0;case 8:return!!t.d&&t.d.i!=0}return f3t(t,e)}function zcn(t,e){switch(e.g){case 0:Et(t.b,631)||(t.b=new Mne);break;case 1:Et(t.b,632)||(t.b=new IKt)}}function qcn(t,e){for(;t.g==null&&!t.c?Fwt(t):t.g==null||t.i!=0&&u(t.g[t.i-1],47).Ob();)DYe(e,aq(t))}function ore(t,e,n){t.g=Pst(t,e,(be(),Hn),t.b),t.d=Pst(t,n,Hn,t.b),!(t.g.c==0||t.d.c==0)&&_ae(t)}function cre(t,e,n){t.g=Pst(t,e,(be(),Bn),t.j),t.d=Pst(t,n,Bn,t.j),!(t.g.c==0||t.d.c==0)&&_ae(t)}function Hcn(t,e,n){return!j9(Ri(new Tn(null,new _n(t.c,16)),new Zt(new uVt(e,n)))).sd((Wb(),JE))}function mit(t){var e;return $p(t),e=new Ti,t.a.sd(e)?(u8(),new gR(On(e.a))):(u8(),u8(),WH)}function Lyt(t){var e;return t.b<=0?!1:(e=cd("MLydhHmsSDkK",Eu(ba(t.c,0))),e>1||e>=0&&t.b<3)}function BI(t){var e,n,r;for(e=new Du,r=ei(t,0);r.b!=r.d.c;)n=u(ti(r),8),h8(e,0,new yo(n));return e}function l2(t){var e,n;for(n=new S(t.a.b);n.a<n.c.c.length;)e=u(J(n),81),e.f.$b();vKe(t.b,t),Nce(t)}function Hi(t){return ea(t)?Bg(t):Nm(t)?o8(t):Om(t)?(On(t),t?1231:1237):Qvt(t)?t.Hb():Uvt(t)?Iv(t):Mwt(t)}function sl(t){return ea(t)?Ae:Nm(t)?ca:Om(t)?Bs:Qvt(t)||Uvt(t)?t.gm:t.gm||Array.isArray(t)&&ot(bge,1)||bge}function ure(t){switch(t.g){case 0:return new lZ;default:throw rt(new Pn(pH+(t.f!=null?t.f:""+t.g)))}}function lre(t){switch(t.g){case 0:return new uZ;default:throw rt(new Pn(pH+(t.f!=null?t.f:""+t.g)))}}function Myt(t,e,n){switch(e){case 0:!t.o&&(t.o=new Tl((Zc(),Eb),$w,t,0)),lz(t.o,n);return}jst(t,e,n)}function yit(t,e,n){this.g=t,this.e=new Ta,this.f=new Ta,this.d=new Qi,this.b=new Qi,this.a=e,this.c=n}function xit(t,e,n,r){this.b=new le,this.n=new le,this.i=r,this.j=n,this.s=t,this.t=e,this.r=0,this.d=0}function h2(t){this.e=t,this.d=new imt(this.e.g),this.a=this.d,this.b=gyt(this),this.$modCount=t.$modCount}function Gcn(t){for(;!t.d||!t.d.Ob();)if(t.b&&!N9(t.b))t.d=u(Fx(t.b),47);else return null;return t.d}function Vcn(t){return ue(t.c,(Qx(),L3e)),$mt(t.a,Xt(ye(De((Vit(),oV)))))?new FZ:new U$t(t)}function Iyt(t){switch(t.g){case 1:return A1e;default:case 2:return 0;case 3:return Mot;case 4:return L1e}}function Ucn(){gi();var t;return Dft||(t=eQe(tb("M",!0)),t=Bj(tb("M",!1),t),Dft=t,Dft)}function Dyt(t,e){var n,r,s;for(s=t.b;s;){if(n=t.a.ue(e,s.d),n==0)return s;r=n<0?0:1,s=s.a[r]}return null}function Wcn(t,e,n){var r,s;r=(Fn(),!!Jbt(n)),s=u(e.xc(r),15),s||(s=new le,e.zc(r,s)),s.Fc(n)}function Kcn(t,e){var n,r;return n=u(qe(t,(Kst(),RO)),19).a,r=u(qe(e,RO),19).a,n==r||n<r?-1:n>r?1:0}function Oyt(t,e){return Lce(t,e)?(ln(t.b,u(Q(e,(se(),Ny)),21),e),ni(t.a,e),!0):!1}function Ycn(t){var e,n;e=u(Q(t,(se(),Zu)),10),e&&(n=e.c,vu(n.a,e),n.a.c.length==0&&vu(Fa(e).b,n))}function hre(t){return R1?Pt(Pge,dfe,572,0,0,1):u(D1(t.a,Pt(Pge,dfe,572,t.a.c.length,0,1)),842)}function Xcn(t,e,n,r){return Qj(),new Ztt(ct(ot(M2,1),Dq,42,0,[(hst(t,e),new _v(t,e)),(hst(n,r),new _v(n,r))]))}function i4(t,e,n){var r,s;return s=(r=new Wtt,r),po(s,e,n),Mr((!t.q&&(t.q=new he(Vh,t,11,10)),t.q),s),s}function kit(t){var e,n,r,s;for(s=kYe(P4e,t),n=s.length,r=Pt(Ae,te,2,n,6,1),e=0;e<n;++e)r[e]=s[e];return r}function s4(t,e){var n,r,s,o,h;for(r=e,s=0,o=r.length;s<o;++s)n=r[s],h=new JYt(t),n.Qe(h),tyn(h);Yu(t.f)}function Eit(t,e){var n;return e===t?!0:Et(e,224)?(n=u(e,224),yi(t.Zb(),n.Zb())):!1}function Nyt(t,e){var n;e*2+1>=t.b.c.length||(Nyt(t,2*e+1),n=2*e+2,n<t.b.c.length&&Nyt(t,n),hoe(t,e))}function fre(t,e,n){var r,s;this.g=t,this.c=e,this.a=this,this.d=this,s=Kee(n),r=Pt(pge,LD,330,s,0,1),this.b=r}function Pyt(t,e,n){var r;for(r=n-1;r>=0&&t[r]===e[r];r--);return r<0?0:get(Ps(t[r],co),Ps(e[r],co))?-1:1}function Qcn(t,e){var n,r;for(r=ei(t,0);r.b!=r.d.c;)n=u(ti(r),214),n.e.length>0&&(e.td(n),n.i&&Vun(n))}function Tit(t,e){var n,r;return r=u(In(t.a,4),126),n=Pt(Tft,Jct,415,e,0,1),r!=null&&Ic(r,0,n,0,r.length),n}function dre(t,e){var n;return n=new eat((t.f&256)!=0,t.i,t.a,t.d,(t.f&16)!=0,t.j,t.g,e),t.e!=null||(n.c=t),n}function Zcn(t,e){var n,r;for(r=t.Zb().Cc().Kc();r.Ob();)if(n=u(r.Pb(),14),n.Hc(e))return!0;return!1}function Cit(t,e,n,r,s){var o,h;for(h=n;h<=s;h++)for(o=e;o<=r;o++)if(l4(t,o,h))return!0;return!1}function gre(t,e,n){var r,s,o,h;for(On(n),h=!1,o=t.Zc(e),s=n.Kc();s.Ob();)r=s.Pb(),o.Rb(r),h=!0;return h}function Jcn(t,e){var n;return t===e?!0:Et(e,83)?(n=u(e,83),F4t(Pv(t),n.vc())):!1}function pre(t,e,n){var r,s;for(s=n.Kc();s.Ob();)if(r=u(s.Pb(),42),t.re(e,r.dd()))return!0;return!1}function bre(t,e,n){return t.d[e.p][n.p]||(Yhn(t,e,n),t.d[e.p][n.p]=!0,t.d[n.p][e.p]=!0),t.a[e.p][n.p]}function Q8(t,e){if(!t.ai()&&e==null)throw rt(new Pn("The 'no null' constraint is violated"));return e}function Z8(t,e){t.D==null&&t.B!=null&&(t.D=t.B,t.B=null),rit(t,e==null?null:(On(e),e)),t.C&&t.yk(null)}function tun(t,e){var n;return!t||t==e||!Vs(e,(se(),Iw))?!1:(n=u(Q(e,(se(),Iw)),10),n!=t)}function _it(t){switch(t.i){case 2:return!0;case 1:return!1;case-1:++t.c;default:return t.pl()}}function vre(t){switch(t.i){case-2:return!0;case-1:return!1;case 1:--t.c;default:return t.ql()}}function wre(t){oQt.call(this,"The given string does not match the expected format for individual spacings.",t)}function Cl(){Cl=Z,Yl=new ZR("ELK",0),PAt=new ZR("JSON",1),NAt=new ZR("DOT",2),FAt=new ZR("SVG",3)}function RI(){RI=Z,CV=new Bet(K0,0),p_t=new Bet("RADIAL_COMPACTION",1),b_t=new Bet("WEDGE_COMPACTION",2)}function I1(){I1=Z,MEt=new pet("CONCURRENT",0),Gl=new pet("IDENTITY_FINISH",1),Ly=new pet("UNORDERED",2)}function Sit(){Sit=Z,s7t=(AR(),Rut),i7t=new mn(t6t,s7t),Ope=new Gi(e6t),Npe=new Gi(n6t),Ppe=new Gi(r6t)}function J8(){J8=Z,wTt=new U5,mTt=new zY,Wbe=new AL,Ube=new qY,Vbe=new HY,vTt=(On(Vbe),new pn)}function tE(){tE=Z,vht=new Det("CONSERVATIVE",0),qCt=new Det("CONSERVATIVE_SOFT",1),IS=new Det("SLOPPY",2)}function bz(){bz=Z,EAt=new Mv(15),o4e=new eo((ci(),q2),EAt),KS=z6,mAt=G3e,yAt=z2,kAt=a5,xAt=jV}function Ait(t,e,n){var r,s,o;for(r=new Qi,o=ei(n,0);o.b!=o.d.c;)s=u(ti(o),8),ni(r,new yo(s));gre(t,e,r)}function eun(t){var e,n,r;for(e=0,r=Pt(Us,te,8,t.b,0,1),n=ei(t,0);n.b!=n.d.c;)r[e++]=u(ti(n),8);return r}function Fyt(t){var e;return e=(!t.a&&(t.a=new he(eg,t,9,5)),t.a),e.i!=0?mYe(u(St(e,0),678)):null}function nun(t,e){var n;return n=Oa(t,e),get(yrt(t,e),0)|PYe(yrt(t,n),0)?n:Oa(Iq,yrt(zm(n,63),1))}function run(t,e){var n;n=De((Vit(),oV))!=null&&e.wg()!=null?Xt(ye(e.wg()))/Xt(ye(De(oV))):1,ki(t.b,e,n)}function iun(t,e){var n,r;return n=u(t.d.Bc(e),14),n?(r=t.e.hc(),r.Gc(n),t.e.d-=n.gc(),n.$b(),r):null}function Byt(t,e){var n,r;if(r=t.c[e],r!=0)for(t.c[e]=0,t.d-=r,n=e+1;n<t.a.length;)t.a[n]-=r,n+=n&-n}function mre(t){var e;if(e=t.a.c.length,e>0)return b8(e-1,t.a.c.length),Ag(t.a,e-1);throw rt(new Vzt)}function sun(t,e,n){if(e<0)throw rt(new mo(q1e+e));e<t.j.c.length?ah(t.j,e,n):(AZt(t,e),ue(t.j,n))}function yre(t,e,n){if(t>e)throw rt(new Pn(Fq+t+gfe+e));if(t<0||e>n)throw rt(new Qpt(Fq+t+zxt+e+jxt+n))}function xre(t){if(!t.a||!(t.a.i&8))throw rt(new Fo("Enumeration class expected for layout option "+t.f))}function ey(t){var e;++t.j,t.i==0?t.g=null:t.i<t.g.length&&(e=t.g,t.g=t.ri(t.i),Ic(e,0,t.g,0,t.i))}function aun(t,e){var n,r;for(n=t.a.length-1,t.c=t.c-1&n;e!=t.c;)r=e+1&n,Ji(t.a,e,t.a[r]),e=r;Ji(t.a,t.c,null)}function oun(t,e){var n,r;for(n=t.a.length-1;e!=t.b;)r=e-1&n,Ji(t.a,e,t.a[r]),e=r;Ji(t.a,t.b,null),t.b=t.b+1&n}function Ryt(t,e,n){var r,s;return Um(e,t.c.length),r=n.Pc(),s=r.length,s==0?!1:(Svt(t.c,e,r),!0)}function cun(t){var e,n;if(t==null)return null;for(e=0,n=t.length;e<n;e++)if(!BKt(t[e]))return t[e];return null}function kre(t,e,n){var r,s,o,h;for(s=n,o=0,h=s.length;o<h;++o)if(r=s[o],t.b.re(e,r.cd()))return r;return null}function vz(t){var e,n,r,s,o;for(o=1,n=t,r=0,s=n.length;r<s;++r)e=n[r],o=31*o+(e!=null?Hi(e):0),o=o|0;return o}function Wr(t){var e,n,r,s,o;for(e={},r=t,s=0,o=r.length;s<o;++s)n=r[s],e[":"+(n.f!=null?n.f:""+n.g)]=n;return e}function uun(t){var e;for(Ar(t),gvt(!0,"numberToAdvance must be nonnegative"),e=0;e<0&&zr(t);e++)Lr(t);return e}function Ere(t){var e,n,r;for(r=0,n=new ar(lr(t.a.Kc(),new z));zr(n);)e=u(Lr(n),17),e.c.i==e.d.i||++r;return r}function Tre(t,e){var n,r,s;n=t,s=0;do{if(n==e)return s;if(r=n.e,!r)throw rt(new uM);n=Fa(r),++s}while(!0)}function Cre(t,e){var n,r,s;for(s=e-t.f,r=new S(t.d);r.a<r.c.c.length;)n=u(J(r),443),vie(n,n.e,n.f+s);t.f=e}function Lit(t,e,n){return b.Math.abs(e-t)<hH||b.Math.abs(n-t)<hH?!0:e-t>hH?t-n>hH:n-t>hH}function Mit(t,e){return!t||e&&!t.j||Et(t,124)&&u(t,124).a.b==0?0:t.Re()}function wz(t,e){return!t||e&&!t.k||Et(t,124)&&u(t,124).a.a==0?0:t.Se()}function jI(t){return Jp(),t<0?t!=-1?new D3t(-1,-t):_ut:t<=10?wEt[ps(t)]:new D3t(1,t)}function jyt(t){throw pit(),rt(new Rqt("Unexpected typeof result '"+t+"'; please report this bug to the GWT team"))}function _re(t){Gqt(),uj(this),n$(this),this.e=t,jce(this,t),this.g=t==null?Tu:$o(t),this.a="",this.b=t,this.a=""}function $yt(){this.a=new oZ,this.f=new O$t(this),this.b=new N$t(this),this.i=new P$t(this),this.e=new F$t(this)}function Sre(){gKe.call(this,new Emt(Qm(16))),Bl(2,Yhe),this.b=2,this.a=new kwt(null,null,0,null),cM(this.a,this.a)}function YC(){YC=Z,oht=new Aet("DUMMY_NODE_OVER",0),_Ct=new Aet("DUMMY_NODE_UNDER",1),uV=new Aet("EQUAL",2)}function Iit(){Iit=Z,Xut=uQt(ct(ot(WS,1),ae,103,0,[(ao(),jh),kf])),Qut=uQt(ct(ot(WS,1),ae,103,0,[Z0,Q0]))}function Dit(t){return(be(),_u).Hc(t.j)?Xt(ye(Q(t,(se(),g7)))):Ko(ct(ot(Us,1),te,8,0,[t.i.n,t.n,t.a])).b}function lun(t){var e,n,r,s;for(r=t.b.a,n=r.a.ec().Kc();n.Ob();)e=u(n.Pb(),561),s=new mce(e,t.e,t.f),ue(t.g,s)}function f2(t,e){var n,r,s;r=t.nk(e,null),s=null,e&&(s=(t8(),n=new wv,n),P8(s,t.r)),r=O1(t,s,r),r&&r.Fi()}function hun(t,e){var n,r;for(r=ol(t.d,1)!=0,n=!0;n;)n=!1,n=e.c.Tf(e.e,r),n=n|pD(t,e,r,!1),r=!r;iyt(t)}function zyt(t,e){var n,r,s;return r=!1,n=e.q.d,e.d<t.b&&(s=Mce(e.q,t.b),e.q.d>s&&(Jse(e.q,s),r=n!=e.q.d)),r}function Are(t,e){var n,r,s,o,h,d,w,k;return w=e.i,k=e.j,r=t.f,s=r.i,o=r.j,h=w-s,d=k-o,n=b.Math.sqrt(h*h+d*d),n}function qyt(t,e){var n,r;return r=Dz(t),r||(n=(Tat(),toe(e)),r=new Fzt(n),Mr(r.Vk(),t)),r}function $I(t,e){var n,r;return n=u(t.c.Bc(e),14),n?(r=t.hc(),r.Gc(n),t.d-=n.gc(),n.$b(),t.mc(r)):t.jc()}function Lre(t,e){var n;for(n=0;n<e.length;n++)if(t==(Rr(n,e.length),e.charCodeAt(n)))return!0;return!1}function Mre(t,e){var n;for(n=0;n<e.length;n++)if(t==(Rr(n,e.length),e.charCodeAt(n)))return!0;return!1}function fun(t){var e,n;if(t==null)return!1;for(e=0,n=t.length;e<n;e++)if(!BKt(t[e]))return!1;return!0}function Ire(t){var e;if(t.c!=0)return t.c;for(e=0;e<t.a.length;e++)t.c=t.c*33+(t.a[e]&-1);return t.c=t.c*t.e,t.c}function mz(t){var e;return Qn(t.a!=t.b),e=t.d.a[t.a],oWt(t.b==t.d.c&&e!=null),t.c=t.a,t.a=t.a+1&t.d.a.length-1,e}function dun(t){var e;if(!(t.c.c<0?t.a>=t.c.b:t.a<=t.c.b))throw rt(new lc);return e=t.a,t.a+=t.c.c,++t.b,de(e)}function gun(t){var e;return e=new cee(t),aI(t.a,Mbe,new wl(ct(ot(gO,1),Ie,369,0,[e]))),e.d&&ue(e.f,e.d),e.f}function Oit(t){var e;return e=new u2t(t.a),Lo(e,t),Jt(e,(se(),_i),t),e.o.a=t.g,e.o.b=t.f,e.n.a=t.i,e.n.b=t.j,e}function pun(t,e,n,r){var s,o;for(o=t.Kc();o.Ob();)s=u(o.Pb(),70),s.n.a=e.a+(r.a-s.o.a)/2,s.n.b=e.b,e.b+=s.o.b+n}function bun(t,e,n){var r,s;for(s=e.a.a.ec().Kc();s.Ob();)if(r=u(s.Pb(),57),qXt(t,r,n))return!0;return!1}function vun(t){var e,n;for(n=new S(t.r);n.a<n.c.c.length;)if(e=u(J(n),10),t.n[e.p]<=0)return e;return null}function Dre(t){var e,n,r,s;for(s=new qs,r=new S(t);r.a<r.c.c.length;)n=u(J(r),33),e=_vn(n),Ua(s,e);return s}function wun(t){var e;return e=ij(ume),u(Q(t,(se(),Gc)),21).Hc((oo(),f7))&&bi(e,(Wa(),ou),(ro(),xG)),e}function mun(t,e,n){var r;r=new Boe(t,e),ln(t.r,e.Hf(),r),n&&!TC(t.u)&&(r.c=new iQt(t.d),mu(e.wf(),new wn(r)))}function yc(t,e){var n;return Bo(t)&&Bo(e)&&(n=t-e,!isNaN(n))?n:n4t(Bo(t)?Sh(t):t,Bo(e)?Sh(e):e)}function yun(t,e){return e<t.length&&(Rr(e,t.length),t.charCodeAt(e)!=63)&&(Rr(e,t.length),t.charCodeAt(e)!=35)}function Ore(t,e,n,r){var s,o;t.a=e,o=r?0:1,t.f=(s=new Fae(t.c,t.a,n,o),new due(n,t.a,s,t.e,t.b,t.c==(Zv(),DS)))}function Hyt(t,e,n){var r,s;return s=t.a,t.a=e,t.Db&4&&!(t.Db&1)&&(r=new Qs(t,1,1,s,e),n?n.Ei(r):n=r),n}function Nre(t,e,n){var r,s;return s=t.b,t.b=e,t.Db&4&&!(t.Db&1)&&(r=new Qs(t,1,3,s,e),n?n.Ei(r):n=r),n}function Pre(t,e,n){var r,s;return s=t.f,t.f=e,t.Db&4&&!(t.Db&1)&&(r=new Qs(t,1,0,s,e),n?n.Ei(r):n=r),n}function Kp(t,e){var n,r,s,o;return o=(s=t?Dz(t):null,aoe((r=e,s&&s.Xk(),r))),o==e&&(n=Dz(t),n&&n.Xk()),o}function Gyt(t,e){var n,r,s;for(s=1,n=t,r=e>=0?e:-e;r>0;)r%2==0?(n*=n,r=r/2|0):(s*=n,r-=1);return e<0?1/s:s}function xun(t,e){var n,r,s;for(s=1,n=t,r=e>=0?e:-e;r>0;)r%2==0?(n*=n,r=r/2|0):(s*=n,r-=1);return e<0?1/s:s}function Fre(t){var e,n;if(t!=null)for(n=0;n<t.length;++n)e=t[n],e&&(u(e.g,367),e.i)}function kun(t){var e,n,r;for(r=0,n=new S(t.a);n.a<n.c.c.length;)e=u(J(n),187),r=b.Math.max(r,e.g);return r}function Eun(t){var e,n,r;for(r=new S(t.b);r.a<r.c.c.length;)n=u(J(r),214),e=n.c.Rf()?n.f:n.a,e&&qyn(e,n.j)}function $0(){$0=Z,HV=new qet("INHERIT",0),Zg=new qet("INCLUDE_CHILDREN",1),YS=new qet("SEPARATE_CHILDREN",2)}function Vyt(t,e){switch(e){case 1:!t.n&&(t.n=new he(qo,t,1,7)),xr(t.n);return;case 2:qC(t,null);return}myt(t,e)}function yz(t){var e;switch(t.gc()){case 0:return vut;case 1:return new Snt(Ar(t.Xb(0)));default:return e=t,new ort(e)}}function Bre(t){switch(hd(),t.gc()){case 0:return Xnt(),K8t;case 1:return new xx(t.Kc().Pb());default:return new ybt(t)}}function Dg(t){switch(hd(),t.c){case 0:return Xnt(),K8t;case 1:return new xx(poe(new Ex(t)));default:return new Fqt(t)}}function ny(t,e){Ar(t);try{return t.xc(e)}catch(n){if(n=Wi(n),Et(n,205)||Et(n,173))return null;throw rt(n)}}function Tun(t,e){Ar(t);try{return t.Bc(e)}catch(n){if(n=Wi(n),Et(n,205)||Et(n,173))return null;throw rt(n)}}function Uyt(t,e){Ar(t);try{return t.Hc(e)}catch(n){if(n=Wi(n),Et(n,205)||Et(n,173))return!1;throw rt(n)}}function Cun(t,e){Ar(t);try{return t.Mc(e)}catch(n){if(n=Wi(n),Et(n,205)||Et(n,173))return!1;throw rt(n)}}function Rre(t,e){Ar(t);try{return t._b(e)}catch(n){if(n=Wi(n),Et(n,205)||Et(n,173))return!1;throw rt(n)}}function jre(t,e){var n;t.a.c.length>0&&(n=u(Fe(t.a,t.a.c.length-1),570),Oyt(n,e))||ue(t.a,new pJt(e))}function _un(t){lf();var e,n;e=t.d.c-t.e.c,n=u(t.g,145),mu(n.b,new C9(e)),mu(n.c,new Gb(e)),va(n.i,new nR(e))}function $re(t){var e;return e=new _p,e.a+="VerticalSegment ",hc(e,t.e),e.a+=" ",Vr(e,m2t(new aet,new S(t.k))),e.a}function Sun(t){var e;return e=u(Wv(t.c.c,""),229),e||(e=new zx(Jk(Zk(new wm,""),"Other")),p2(t.c.c,"",e)),e}function XC(t){var e;return t.Db&64?bf(t):(e=new Th(bf(t)),e.a+=" (name: ",fo(e,t.zb),e.a+=")",e.a)}function Wyt(t,e,n){var r,s;return s=t.sb,t.sb=e,t.Db&4&&!(t.Db&1)&&(r=new Qs(t,1,4,s,e),n?n.Ei(r):n=r),n}function Nit(t,e){var n,r,s;for(n=0,s=Yo(t,e).Kc();s.Ob();)r=u(s.Pb(),11),n+=Q(r,(se(),Zu))!=null?1:0;return n}function a4(t,e,n){var r,s,o;for(r=0,o=ei(t,0);o.b!=o.d.c&&(s=Xt(ye(ti(o))),!(s>n));)s>=e&&++r;return r}function Aun(t,e,n){var r,s;return r=new F0(t.e,3,13,null,(s=e.c,s||(dn(),V1)),Fg(t,e),!1),n?n.Ei(r):n=r,n}function Lun(t,e,n){var r,s;return r=new F0(t.e,4,13,(s=e.c,s||(dn(),V1)),null,Fg(t,e),!1),n?n.Ei(r):n=r,n}function Kyt(t,e,n){var r,s;return s=t.r,t.r=e,t.Db&4&&!(t.Db&1)&&(r=new Qs(t,1,8,s,t.r),n?n.Ei(r):n=r),n}function Og(t,e){var n,r;return n=u(e,676),r=n.vk(),!r&&n.wk(r=Et(e,88)?new FVt(t,u(e,26)):new rZt(t,u(e,148))),r}function zI(t,e,n){var r;t.qi(t.i+1),r=t.oi(e,n),e!=t.i&&Ic(t.g,e,t.g,e+1,t.i-e),Ji(t.g,e,r),++t.i,t.bi(e,n),t.ci()}function Mun(t,e){var n;return e.a&&(n=e.a.a.length,t.a?Vr(t.a,t.b):t.a=new Il(t.d),sZt(t.a,e.a,e.d.length,n)),t}function Iun(t,e){var n,r,s,o;if(e.vi(t.a),o=u(In(t.a,8),1936),o!=null)for(n=o,r=0,s=n.length;r<s;++r)null.jm()}function qI(t,e){var n;return n=new Ti,t.a.sd(n)?(u8(),new gR(On(Fte(t,n.a,e)))):($p(t),u8(),u8(),WH)}function QC(t,e){switch(e.g){case 2:case 1:return Yo(t,e);case 3:case 4:return a2(Yo(t,e))}return vn(),vn(),io}function yi(t,e){return ea(t)?hn(t,e):Nm(t)?eKt(t,e):Om(t)?(On(t),Gt(t)===Gt(e)):Qvt(t)?t.Fb(e):Uvt(t)?nUt(t,e):Hwt(t,e)}function Dun(t){return t?t.i&1?t==dl?Bs:t==Tr?ja:t==r3?XE:t==ia?ca:t==Lb?Tw:t==f5?Cw:t==Hu?E6:aS:t:null}function Oun(t,e,n,r,s){e==0||r==0||(e==1?s[r]=P3t(s,n,r,t[0]):r==1?s[e]=P3t(s,t,e,n[0]):Ppn(t,n,s,e,r))}function zre(t,e){var n;t.c.length!=0&&(n=u(D1(t,Pt(o0,zg,10,t.c.length,0,1)),193),e2t(n,new wk),Aoe(n,e))}function qre(t,e){var n;t.c.length!=0&&(n=u(D1(t,Pt(o0,zg,10,t.c.length,0,1)),193),e2t(n,new Rd),Aoe(n,e))}function Yyt(t,e,n,r){switch(e){case 1:return!t.n&&(t.n=new he(qo,t,1,7)),t.n;case 2:return t.k}return V3t(t,e,n,r)}function ao(){ao=Z,c0=new LM(O_,0),kf=new LM(g6,1),jh=new LM(d6,2),Q0=new LM(yot,3),Z0=new LM("UP",4)}function ew(){ew=Z,$4=new yet(K0,0),S7t=new yet("INSIDE_PORT_SIDE_GROUPS",1),Jut=new yet("FORCE_MODEL_ORDER",2)}function Hre(t,e,n){if(t<0||e>n)throw rt(new mo(Fq+t+zxt+e+", size: "+n));if(t>e)throw rt(new Pn(Fq+t+gfe+e))}function lh(t,e,n){if(e<0)Q4t(t,n);else{if(!n.Ij())throw rt(new Pn(ab+n.ne()+W_));u(n,66).Nj().Vj(t,t.yh(),e)}}function Nun(t,e,n,r,s,o,h,d){var w;for(w=n;o<h;)w>=r||e<n&&d.ue(t[e],t[w])<=0?Ji(s,o++,t[e++]):Ji(s,o++,t[w++])}function Gre(t,e,n,r,s,o){this.e=new le,this.f=(so(),MS),ue(this.e,t),this.d=e,this.a=n,this.b=r,this.f=s,this.c=o}function Vre(t,e){var n,r;for(r=new er(t);r.e!=r.i.gc();)if(n=u(dr(r),26),Gt(e)===Gt(n))return!0;return!1}function Pun(t){Lq();var e,n,r,s;for(n=Jit(),r=0,s=n.length;r<s;++r)if(e=n[r],Ro(e.a,t,0)!=-1)return e;return Put}function Ure(t){return t>=65&&t<=70?t-65+10:t>=97&&t<=102?t-97+10:t>=48&&t<=57?t-48:0}function Wre(t){var e;return t.Db&64?bf(t):(e=new Th(bf(t)),e.a+=" (source: ",fo(e,t.d),e.a+=")",e.a)}function Fun(t,e,n){var r,s;return s=t.a,t.a=e,t.Db&4&&!(t.Db&1)&&(r=new Qs(t,1,5,s,t.a),n?v4t(n,r):n=r),n}function Ng(t,e){var n;n=(t.Bb&256)!=0,e?t.Bb|=256:t.Bb&=-257,t.Db&4&&!(t.Db&1)&&mi(t,new df(t,1,2,n,e))}function Xyt(t,e){var n;n=(t.Bb&256)!=0,e?t.Bb|=256:t.Bb&=-257,t.Db&4&&!(t.Db&1)&&mi(t,new df(t,1,8,n,e))}function xz(t,e){var n;n=(t.Bb&256)!=0,e?t.Bb|=256:t.Bb&=-257,t.Db&4&&!(t.Db&1)&&mi(t,new df(t,1,8,n,e))}function Pg(t,e){var n;n=(t.Bb&512)!=0,e?t.Bb|=512:t.Bb&=-513,t.Db&4&&!(t.Db&1)&&mi(t,new df(t,1,3,n,e))}function Qyt(t,e){var n;n=(t.Bb&512)!=0,e?t.Bb|=512:t.Bb&=-513,t.Db&4&&!(t.Db&1)&&mi(t,new df(t,1,9,n,e))}function ZC(t,e){var n;return t.b==-1&&t.a&&(n=t.a.Gj(),t.b=n?t.c.Xg(t.a.aj(),n):Vi(t.c.Tg(),t.a)),t.c.Og(t.b,e)}function de(t){var e,n;return t>-129&&t<128?(e=t+128,n=(VKt(),sEt)[e],!n&&(n=sEt[e]=new iM(t)),n):new iM(t)}function eE(t){var e,n;return t>-129&&t<128?(e=t+128,n=(QKt(),uEt)[e],!n&&(n=uEt[e]=new eR(t)),n):new eR(t)}function Zyt(t){var e,n;return e=t.k,e==(Gn(),xs)?(n=u(Q(t,(se(),oc)),61),n==(be(),Nn)||n==mr):!1}function Bun(t,e,n){var r,s,o;return o=(s=wE(t.b,e),s),o&&(r=u(Eq(mI(t,o),""),26),r)?w5t(t,r,e,n):null}function Pit(t,e,n){var r,s,o;return o=(s=wE(t.b,e),s),o&&(r=u(Eq(mI(t,o),""),26),r)?m5t(t,r,e,n):null}function Kre(t,e){var n,r;for(r=new er(t);r.e!=r.i.gc();)if(n=u(dr(r),138),Gt(e)===Gt(n))return!0;return!1}function JC(t,e,n){var r;if(r=t.gc(),e>r)throw rt(new jm(e,r));if(t.hi()&&t.Hc(n))throw rt(new Pn(XD));t.Xh(e,n)}function Run(t,e){var n;if(n=t4(t.i,e),n==null)throw rt(new ad("Node did not exist in input."));return uyt(e,n),null}function jun(t,e){var n;if(n=gD(t,e),Et(n,322))return u(n,34);throw rt(new Pn(ab+e+"' is not a valid attribute"))}function $un(t,e,n){var r,s;for(s=Et(e,99)&&u(e,18).Bb&Ya?new Uet(e,t):new U8(e,t),r=0;r<n;++r)$z(s);return s}function zun(t){var e,n,r;for(r=0,n=t.length,e=0;e<n;e++)t[e]==32||t[e]==13||t[e]==10||t[e]==9||(t[r++]=t[e]);return r}function qun(t){var e,n,r;for(e=new le,r=new S(t.b);r.a<r.c.c.length;)n=u(J(r),594),As(e,u(n.jf(),14));return e}function Hun(t){var e,n,r;for(e=u(Q(t,(fc(),JCt)),15),r=e.Kc();r.Ob();)n=u(r.Pb(),188),ni(n.b.d,n),ni(n.c.b,n)}function Gun(t){switch(u(Q(t,(se(),O2)),303).g){case 1:Jt(t,O2,(B0(),A6));break;case 2:Jt(t,O2,(B0(),U4))}}function Vun(t){var e;t.g&&(e=t.c.Rf()?t.f:t.a,D5t(e.a,t.o,!0),D5t(e.a,t.o,!1),Jt(t.o,(Te(),os),(oa(),G2)))}function Uun(t){var e;if(!t.a)throw rt(new Fo("Cannot offset an unassigned cut."));e=t.c-t.b,t.b+=e,$Xt(t,e),jXt(t,e)}function Wun(t){var e;return e=t.a[t.c-1&t.a.length-1],e==null?null:(t.c=t.c-1&t.a.length-1,Ji(t.a,t.c,null),e)}function Yre(t){var e,n;for(n=t.p.a.ec().Kc();n.Ob();)if(e=u(n.Pb(),213),e.f&&t.b[e.c]<-1e-10)return e;return null}function Jyt(t,e){switch(t.b.g){case 0:case 1:return e;case 2:case 3:return new ih(e.d,0,e.a,e.b);default:return null}}function Xre(t){switch(t.g){case 2:return kf;case 1:return jh;case 4:return Q0;case 3:return Z0;default:return c0}}function t3t(t){switch(t.g){case 1:return Bn;case 2:return Nn;case 3:return Hn;case 4:return mr;default:return Zo}}function HI(t){switch(t.g){case 1:return mr;case 2:return Bn;case 3:return Nn;case 4:return Hn;default:return Zo}}function kz(t){switch(t.g){case 1:return Hn;case 2:return mr;case 3:return Bn;case 4:return Nn;default:return Zo}}function Kun(t){switch(t){case 0:return new pqt;case 1:return new dqt;case 2:return new gqt;default:throw rt(new uM)}}function Ls(t,e){return t<e?-1:t>e?1:t==e?t==0?Ls(1/t,1/e):0:isNaN(t)?isNaN(e)?0:1:-1}function Yun(t,e){wr(e,"Sort end labels",1),us(Ri(Wo(new Tn(null,new _n(t.b,16)),new QP),new q5),new vY),or(e)}function t_(t,e,n){var r,s;return t.ej()?(s=t.fj(),r=qst(t,e,n),t.$i(t.Zi(7,de(n),r,e,s)),r):qst(t,e,n)}function Fit(t,e){var n,r,s;t.d==null?(++t.e,--t.f):(s=e.cd(),n=e.Sh(),r=(n&vi)%t.d.length,Dsn(t,r,fce(t,r,n,s)))}function nE(t,e){var n;n=(t.Bb&wf)!=0,e?t.Bb|=wf:t.Bb&=-1025,t.Db&4&&!(t.Db&1)&&mi(t,new df(t,1,10,n,e))}function rE(t,e){var n;n=(t.Bb&yy)!=0,e?t.Bb|=yy:t.Bb&=-4097,t.Db&4&&!(t.Db&1)&&mi(t,new df(t,1,12,n,e))}function iE(t,e){var n;n=(t.Bb&zu)!=0,e?t.Bb|=zu:t.Bb&=-8193,t.Db&4&&!(t.Db&1)&&mi(t,new df(t,1,15,n,e))}function sE(t,e){var n;n=(t.Bb&Ay)!=0,e?t.Bb|=Ay:t.Bb&=-2049,t.Db&4&&!(t.Db&1)&&mi(t,new df(t,1,11,n,e))}function Xun(t,e){var n;return n=Ls(t.b.c,e.b.c),n!=0||(n=Ls(t.a.a,e.a.a),n!=0)?n:Ls(t.a.b,e.a.b)}function Qun(t,e){var n;if(n=Jn(t.k,e),n==null)throw rt(new ad("Port did not exist in input."));return uyt(e,n),null}function Zun(t){var e,n;for(n=vce(Fl(t)).Kc();n.Ob();)if(e=Br(n.Pb()),m_(t,e))return asn((_Gt(),W4e),e);return null}function Jun(t,e){var n,r,s,o,h;for(h=au(t.e.Tg(),e),o=0,n=u(t.g,119),s=0;s<t.i;++s)r=n[s],h.rl(r.ak())&&++o;return o}function tln(t,e,n){var r,s;return r=u(e.We(t.a),35),s=u(n.We(t.a),35),r!=null&&s!=null?SI(r,s):r!=null?-1:s!=null?1:0}function Qre(t,e,n){var r,s;if(t.c)A4t(t.c,e,n);else for(s=new S(t.b);s.a<s.c.c.length;)r=u(J(s),157),Qre(r,e,n)}function Bit(t,e){var n,r;for(r=new S(e);r.a<r.c.c.length;)n=u(J(r),46),vu(t.b.b,n.b),Inn(u(n.a,189),u(n.b,81))}function eln(t){var e,n;for(n=Rp(new _p,91),e=!0;t.Ob();)e||(n.a+=Ka),e=!1,hc(n,t.Pb());return(n.a+="]",n).a}function aE(t,e){var n;n=(t.Bb&bd)!=0,e?t.Bb|=bd:t.Bb&=-16385,t.Db&4&&!(t.Db&1)&&mi(t,new df(t,1,16,n,e))}function Rit(t,e){var n;n=(t.Bb&dc)!=0,e?t.Bb|=dc:t.Bb&=-32769,t.Db&4&&!(t.Db&1)&&mi(t,new df(t,1,18,n,e))}function e3t(t,e){var n;n=(t.Bb&dc)!=0,e?t.Bb|=dc:t.Bb&=-32769,t.Db&4&&!(t.Db&1)&&mi(t,new df(t,1,18,n,e))}function n3t(t,e){var n;n=(t.Bb&Ya)!=0,e?t.Bb|=Ya:t.Bb&=-65537,t.Db&4&&!(t.Db&1)&&mi(t,new df(t,1,20,n,e))}function r3t(t){var e;return e=Pt(mh,vd,25,2,15,1),t-=Ya,e[0]=(t>>10)+OD&ms,e[1]=(t&1023)+56320&ms,Ah(e,0,e.length)}function Ez(t){var e,n;return n=u(Q(t,(Te(),Vl)),103),n==(ao(),c0)?(e=Xt(ye(Q(t,UG))),e>=1?kf:Q0):n}function nln(t){switch(u(Q(t,(Te(),X0)),218).g){case 1:return new BX;case 3:return new qX;default:return new FX}}function d2(t){if(t.c)d2(t.c);else if(t.d)throw rt(new Fo("Stream already terminated, can't be modified or used"))}function jit(t){var e;return t.Db&64?bf(t):(e=new Th(bf(t)),e.a+=" (identifier: ",fo(e,t.k),e.a+=")",e.a)}function Zre(t,e,n){var r,s;return r=(Tv(),s=new vp,s),W$(r,e),K$(r,n),t&&Mr((!t.a&&(t.a=new Ss(Hh,t,5)),t.a),r),r}function $it(t,e,n,r){var s,o;return On(r),On(n),s=t.xc(e),o=s==null?n:dGt(u(s,15),u(n,14)),o==null?t.Bc(e):t.zc(e,o),o}function un(t){var e,n,r,s;return n=(e=u(Hf((r=t.gm,s=r.f,s==Hr?r:s)),9),new rh(e,u(uf(e,e.length),9),0)),pf(n,t),n}function rln(t,e,n){var r,s;for(s=t.a.ec().Kc();s.Ob();)if(r=u(s.Pb(),10),II(n,u(Fe(e,r.p),14)))return r;return null}function iln(t,e,n){var r;try{Rcn(t,e,n)}catch(s){throw s=Wi(s),Et(s,597)?(r=s,rt(new amt(r))):rt(s)}return e}function Yp(t,e){var n;return Bo(t)&&Bo(e)&&(n=t-e,DD<n&&n<x2)?n:Vp(Bne(Bo(t)?Sh(t):t,Bo(e)?Sh(e):e))}function Oa(t,e){var n;return Bo(t)&&Bo(e)&&(n=t+e,DD<n&&n<x2)?n:Vp(ycn(Bo(t)?Sh(t):t,Bo(e)?Sh(e):e))}function Ca(t,e){var n;return Bo(t)&&Bo(e)&&(n=t*e,DD<n&&n<x2)?n:Vp(zyn(Bo(t)?Sh(t):t,Bo(e)?Sh(e):e))}function Yo(t,e){var n;return t.i||X4t(t),n=u(go(t.g,e),46),n?new Kd(t.j,u(n.a,19).a,u(n.b,19).a):(vn(),vn(),io)}function nw(t,e,n){var r;return r=t.a.get(e),t.a.set(e,n===void 0?null:n),r===void 0?(++t.c,a$(t.b)):++t.d,r}function sln(t,e,n){t.n=Xb(Lb,[te,aot],[364,25],14,[n,ps(b.Math.ceil(e/32))],2),t.o=e,t.p=n,t.j=e-1>>1,t.k=n-1>>1}function zit(){E4t();var t,e,n;n=txn+++Date.now(),t=ps(b.Math.floor(n*PD))&Pq,e=ps(n-t*Rxt),this.a=t^1502,this.b=e^fot}function z0(t){var e,n,r;for(e=new le,r=new S(t.j);r.a<r.c.c.length;)n=u(J(r),11),ue(e,n.b);return Ar(e),new uC(e)}function jo(t){var e,n,r;for(e=new le,r=new S(t.j);r.a<r.c.c.length;)n=u(J(r),11),ue(e,n.e);return Ar(e),new uC(e)}function Ms(t){var e,n,r;for(e=new le,r=new S(t.j);r.a<r.c.c.length;)n=u(J(r),11),ue(e,n.g);return Ar(e),new uC(e)}function aln(t){var e,n;for(n=rbn(Fl(Vm(t))).Kc();n.Ob();)if(e=Br(n.Pb()),m_(t,e))return osn((SGt(),K4e),e);return null}function oln(t){var e,n,r;for(n=0,r=t.length;n<r;n++)if(t[n]==null)throw rt(new yx("at index "+n));return e=t,new wl(e)}function cln(t,e){var n;if(n=gD(t.Tg(),e),Et(n,99))return u(n,18);throw rt(new Pn(ab+e+"' is not a valid reference"))}function uln(t){var e;return e=ly(t),e>34028234663852886e22?ss:e<-34028234663852886e22?Ts:e}function Jre(t){return t-=t>>1&1431655765,t=(t>>2&858993459)+(t&858993459),t=(t>>4)+t&252645135,t+=t>>8,t+=t>>16,t&63}function tie(t){var e,n,r,s;for(e=new NWt(t.Hd().gc()),s=0,r=Kx(t.Hd().Kc());r.Ob();)n=r.Pb(),mrn(e,n,de(s++));return G0n(e.a)}function lln(t,e){var n,r,s;for(s=new Cr,r=e.vc().Kc();r.Ob();)n=u(r.Pb(),42),ki(s,n.cd(),ecn(t,u(n.dd(),15)));return s}function i3t(t,e){t.n.c.length==0&&ue(t.n,new f$(t.s,t.t,t.i)),ue(t.b,e),$3t(u(Fe(t.n,t.n.c.length-1),211),e),lle(t,e)}function o4(t){return(t.c!=t.b.b||t.i!=t.g.b)&&(t.a.c=Pt(Xn,Ie,1,0,5,1),As(t.a,t.b),As(t.a,t.g),t.c=t.b.b,t.i=t.g.b),t.a}function qit(t,e){var n,r,s;for(s=0,r=u(e.Kb(t),20).Kc();r.Ob();)n=u(r.Pb(),17),je(Re(Q(n,(se(),$1))))||++s;return s}function hln(t,e){var n,r,s;r=Z3(e),s=Xt(ye(iy(r,(Te(),xf)))),n=b.Math.max(0,s/2-.5),c_(e,n,1),ue(t,new UGt(e,n))}function hh(){hh=Z,CO=new CM(K0,0),yS=new CM("FIRST",1),fb=new CM(c1e,2),xS=new CM("LAST",3),Fy=new CM(u1e,4)}function q0(){q0=Z,gft=new KR(O_,0),XO=new KR("POLYLINE",1),A7=new KR("ORTHOGONAL",2),H6=new KR("SPLINES",3)}function Tz(){Tz=Z,N_t=new jet("ASPECT_RATIO_DRIVEN",0),$ht=new jet("MAX_SCALE_DRIVEN",1),O_t=new jet("AREA_DRIVEN",2)}function GI(){GI=Z,AV=new $et("P1_STRUCTURE",0),LV=new $et("P2_PROCESSING_ORDER",1),MV=new $et("P3_EXECUTION",2)}function Cz(){Cz=Z,Nht=new Fet("OVERLAP_REMOVAL",0),Dht=new Fet("COMPACTION",1),Oht=new Fet("GRAPH_SIZE_CALCULATION",2)}function rw(t,e){return y1(),gf(eb),b.Math.abs(t-e)<=eb||t==e||isNaN(t)&&isNaN(e)?0:t<e?-1:t>e?1:Lv(isNaN(t),isNaN(e))}function eie(t,e){var n,r;for(n=ei(t,0);n.b!=n.d.c;){if(r=lM(ye(ti(n))),r==e)return;if(r>e){krt(n);break}}XM(n,e)}function an(t,e){var n,r,s,o,h;if(n=e.f,p2(t.c.d,n,e),e.g!=null)for(s=e.g,o=0,h=s.length;o<h;++o)r=s[o],p2(t.c.e,r,e)}function fln(t,e,n,r){var s,o,h;for(s=e+1;s<n;++s)for(o=s;o>e&&r.ue(t[o-1],t[o])>0;--o)h=t[o],Ji(t,o,t[o-1]),Ji(t,o-1,h)}function fh(t,e,n,r){if(e<0)E5t(t,n,r);else{if(!n.Ij())throw rt(new Pn(ab+n.ne()+W_));u(n,66).Nj().Tj(t,t.yh(),e,r)}}function _z(t,e){if(e==t.d)return t.e;if(e==t.e)return t.d;throw rt(new Pn("Node "+e+" not part of edge "+t))}function dln(t,e){switch(e.g){case 2:return t.b;case 1:return t.c;case 4:return t.d;case 3:return t.a;default:return!1}}function nie(t,e){switch(e.g){case 2:return t.b;case 1:return t.c;case 4:return t.d;case 3:return t.a;default:return!1}}function s3t(t,e,n,r){switch(e){case 3:return t.f;case 4:return t.g;case 5:return t.i;case 6:return t.j}return Yyt(t,e,n,r)}function gln(t){return t.k!=(Gn(),Ds)?!1:A8(new Tn(null,new Fv(new ar(lr(Ms(t).a.Kc(),new z)))),new LF)}function pln(t){return t.e==null?t:(!t.c&&(t.c=new eat((t.f&256)!=0,t.i,t.a,t.d,(t.f&16)!=0,t.j,t.g,null)),t.c)}function bln(t,e){return t.h==ID&&t.m==0&&t.l==0?(e&&(ob=ru(0,0,0)),rUt((N8(),J8t))):(e&&(ob=ru(t.l,t.m,t.h)),ru(0,0,0))}function $o(t){var e;return Array.isArray(t)&&t.im===Ct?Ap(sl(t))+"@"+(e=Hi(t)>>>0,e.toString(16)):t.toString()}function e_(t){var e;this.a=(e=u(t.e&&t.e(),9),new rh(e,u(uf(e,e.length),9),0)),this.b=Pt(Xn,Ie,1,this.a.a.length,5,1)}function vln(t){var e,n,r;for(this.a=new A0,r=new S(t);r.a<r.c.c.length;)n=u(J(r),14),e=new cYt,_on(e,n),Ns(this.a,e)}function wln(t){Bm();var e,n,r,s;for(e=t.o.b,r=u(u(Ai(t.r,(be(),mr)),21),84).Kc();r.Ob();)n=u(r.Pb(),111),s=n.e,s.b+=e}function al(t){var e;if(t.b){if(al(t.b),t.b.d!=t.c)throw rt(new eh)}else t.d.dc()&&(e=u(t.f.c.xc(t.e),14),e&&(t.d=e))}function mln(t){var e;return t==null?!0:(e=t.length,e>0&&(Rr(e-1,t.length),t.charCodeAt(e-1)==58)&&!Hit(t,iA,sA))}function Hit(t,e,n){var r,s;for(r=0,s=t.length;r<s;r++)if(bit((Rr(r,t.length),t.charCodeAt(r)),e,n))return!0;return!1}function yln(t,e){var n,r;for(r=t.e.a.ec().Kc();r.Ob();)if(n=u(r.Pb(),266),T0n(e,n.d)||Ign(e,n.d))return!0;return!1}function xln(t,e){var n,r,s;for(r=awn(t,e),s=r[r.length-1]/2,n=0;n<r.length;n++)if(r[n]>=s)return e.c+n;return e.c+e.b.gc()}function kln(t,e){f8();var n,r,s,o;for(r=bte(t),s=e,D8(r,0,r.length,s),n=0;n<r.length;n++)o=i1n(t,r[n],n),n!=o&&t_(t,n,o)}function a3t(t,e){var n,r,s,o,h,d;for(r=0,n=0,o=e,h=0,d=o.length;h<d;++h)s=o[h],s>0&&(r+=s,++n);return n>1&&(r+=t.d*(n-1)),r}function o3t(t){var e,n,r;for(r=new xg,r.a+="[",e=0,n=t.gc();e<n;)fo(r,dC(t.ki(e))),++e<n&&(r.a+=Ka);return r.a+="]",r.a}function Eln(t){var e,n,r,s,o;return o=T4t(t),n=fM(t.c),r=!n,r&&(s=new bg,Wf(o,"knownLayouters",s),e=new xzt(s),va(t.c,e)),o}function Tln(t,e){var n,r,s;for(On(e),n=!1,r=new S(t);r.a<r.c.c.length;)s=J(r),ry(e,s,!1)&&(_C(r),n=!0);return n}function c3t(t){var e,n,r;for(r=Xt(ye(t.a.We((ci(),qV)))),n=new S(t.a.xf());n.a<n.c.c.length;)e=u(J(n),680),She(t,e,r)}function Git(t,e){var n,r;for(r=new S(e);r.a<r.c.c.length;)n=u(J(r),46),ue(t.b.b,u(n.b,81)),Ert(u(n.a,189),u(n.b,81))}function Cln(t,e,n){var r,s;for(s=t.a.b,r=s.c.length;r<n;r++)$m(s,0,new Ch(t.a));ko(e,u(Fe(s,s.c.length-n),29)),t.b[e.p]=n}function _ln(t,e,n){var r;r=n,!r&&(r=Pvt(new Yk,0)),wr(r,Vfe,2),rse(t.b,e,Rc(r,1)),o3n(t,e,Rc(r,1)),J4n(e,Rc(r,1)),or(r)}function Sln(t,e,n,r,s){Ol(),vf(of(af(sf(cf(new Eh,0),s.d.e-t),e),s.d)),vf(of(af(sf(cf(new Eh,0),n-s.a.e),s.a),r))}function u3t(t,e,n,r,s,o){this.a=t,this.c=e,this.b=n,this.f=r,this.d=s,this.e=o,this.c>0&&this.b>0&&qvt(this.c,this.b,this.a)}function l3t(t){Vit(),this.c=_1(ct(ot(wxn,1),Ie,831,0,[Rwe])),this.b=new Cr,this.a=t,ki(this.b,oV,1),mu(jwe,new V$t(this))}function rie(t,e){var n;return t.d?kl(t.b,e)?u(Jn(t.b,e),51):(n=e.Kf(),ki(t.b,e,n),n):e.Kf()}function h3t(t,e){var n;return Gt(t)===Gt(e)?!0:Et(e,91)?(n=u(e,91),t.e==n.e&&t.d==n.d&&csn(t,n.a)):!1}function Jx(t){switch(be(),t.g){case 4:return Nn;case 1:return Hn;case 3:return mr;case 2:return Bn;default:return Zo}}function f3t(t,e){switch(e){case 3:return t.f!=0;case 4:return t.g!=0;case 5:return t.i!=0;case 6:return t.j!=0}return hyt(t,e)}function Aln(t){switch(t.g){case 0:return new rZ;case 1:return new HF;default:throw rt(new Pn(xct+(t.f!=null?t.f:""+t.g)))}}function iie(t){switch(t.g){case 0:return new qF;case 1:return new GF;default:throw rt(new Pn(Bot+(t.f!=null?t.f:""+t.g)))}}function sie(t){switch(t.g){case 0:return new Gpt;case 1:return new bqt;default:throw rt(new Pn(pH+(t.f!=null?t.f:""+t.g)))}}function Lln(t){switch(t.g){case 1:return new ZQ;case 2:return new kWt;default:throw rt(new Pn(xct+(t.f!=null?t.f:""+t.g)))}}function Mln(t){var e,n;if(t.b)return t.b;for(n=R1?null:t.d;n;){if(e=R1?null:n.b,e)return e;n=R1?null:n.d}return s8(),LEt}function Iln(t){var e,n,r;return t.e==0?0:(e=t.d<<5,n=t.a[t.d-1],t.e<0&&(r=pne(t),r==t.d-1&&(--n,n=n|0)),e-=lD(n),e)}function Dln(t){var e,n,r;return t<VH.length?VH[t]:(n=t>>5,e=t&31,r=Pt(Tr,Xr,25,n+1,15,1),r[n]=1<<e,new K3(1,n+1,r))}function aie(t){var e,n,r;return n=t.zg(),n?(e=t.Ug(),Et(e,160)&&(r=aie(u(e,160)),r!=null)?r+"."+n:n):null}function ry(t,e,n){var r,s;for(s=t.Kc();s.Ob();)if(r=s.Pb(),Gt(e)===Gt(r)||e!=null&&yi(e,r))return n&&s.Qb(),!0;return!1}function d3t(t,e,n){var r,s;if(++t.j,n.dc())return!1;for(s=n.Kc();s.Ob();)r=s.Pb(),t.Hi(e,t.oi(e,r)),++e;return!0}function Oln(t,e,n,r){var s,o;if(o=n-e,o<3)for(;o<3;)t*=10,++o;else{for(s=1;o>3;)s*=10,--o;t=(t+(s>>1))/s|0}return r.i=t,!0}function Nln(t){return Iit(),Fn(),!!(nie(u(t.a,81).j,u(t.b,103))||u(t.a,81).d.e!=0&&nie(u(t.a,81).j,u(t.b,103)))}function Pln(t){O$(),u(t.We((ci(),vb)),174).Hc((cl(),WV))&&(u(t.We(Ky),174).Fc((Qu(),G6)),u(t.We(vb),174).Mc(WV))}function oie(t,e){var n,r;if(e){for(n=0;n<t.i;++n)if(r=u(t.g[n],366),r.Di(e))return!1;return Mr(t,e)}else return!1}function g3t(t){var e,n,r,s;for(e=new bg,s=new A(t.b.Kc());s.b.Ob();)r=u(s.b.Pb(),686),n=Q0n(r),wen(e,e.a.length,n);return e.a}function p3t(t){var e;return!t.c&&(t.c=new ov),Xs(t.d,new Z1),Bwn(t),e=Cvn(t),us(new Tn(null,new _n(t.d,16)),new gr(t)),e}function Sz(t){var e;return t.Db&64?XC(t):(e=new Th(XC(t)),e.a+=" (instanceClassName: ",fo(e,t.D),e.a+=")",e.a)}function Fln(t,e){var n,r,s,o;e&&(s=R0(e,"x"),n=new bzt(t),F8(n.a,(On(s),s)),o=R0(e,"y"),r=new vzt(t),R8(r.a,(On(o),o)))}function Bln(t,e){var n,r,s,o;e&&(s=R0(e,"x"),n=new fzt(t),B8(n.a,(On(s),s)),o=R0(e,"y"),r=new gzt(t),j8(r.a,(On(o),o)))}function Vi(t,e){var n,r,s;if(n=(t.i==null&&pd(t),t.i),r=e.aj(),r!=-1){for(s=n.length;r<s;++r)if(n[r]==e)return r}return-1}function Rln(t){var e,n,r,s,o;for(n=u(t.g,674),r=t.i-1;r>=0;--r)for(e=n[r],s=0;s<r;++s)if(o=n[s],sle(t,e,o)){r6(t,r);break}}function jln(t){var e=t.e;function n(r){return!r||r.length==0?"":"	"+r.join(`
	`)}return e&&(e.stack||n(t[jat]))}function b3t(t){Gm();var e;switch(e=t.Pc(),e.length){case 0:return vut;case 1:return new Snt(Ar(e[0]));default:return new ort(oln(e))}}function iw(t,e){switch(e.g){case 1:return Ox(t.j,(Bu(),D7t));case 2:return Ox(t.j,(Bu(),N7t));default:return vn(),vn(),io}}function v3t(t,e){switch(e){case 3:Xv(t,0);return;case 4:Qv(t,0);return;case 5:yu(t,0);return;case 6:xu(t,0);return}Vyt(t,e)}function Vit(){Vit=Z,DR(),oV=(Te(),Bw),jwe=_1(ct(ot(Qht,1),Nkt,146,0,[AO,xf,B6,Fw,Gy,tht,m7,y7,eht,_S,Q4,R2,Z4]))}function cie(t){var e,n;e=t.d==(i6(),a7),n=b4t(t),e&&!n||!e&&n?Jt(t.a,(Te(),Ld),(Qd(),zO)):Jt(t.a,(Te(),Ld),(Qd(),$O))}function $ln(t,e){var n;return n=u(Pl(t,i2(new _e,new we,new nr,ct(ot(ll,1),ae,132,0,[(I1(),Gl)]))),15),n.Qc(DKt(n.gc()))}function Az(){Az=Z,wft=new QR("SIMPLE",0),MAt=new QR("GROUP_DEC",1),DAt=new QR("GROUP_MIXED",2),IAt=new QR("GROUP_INC",3)}function Uit(){Uit=Z,Aft=new eB,eLt=new nB,nLt=new rB,rLt=new Ak,iLt=new iB,sLt=new sB,aLt=new KZ,oLt=new Lk,cLt=new Mk}function uie(t,e,n){vee(),uqt.call(this),this.a=Xb(Xge,[te,Kxt],[595,212],0,[QH,Nut],2),this.c=new Ax,this.g=t,this.f=e,this.d=n}function w3t(t,e){this.n=Xb(Lb,[te,aot],[364,25],14,[e,ps(b.Math.ceil(t/32))],2),this.o=t,this.p=e,this.j=t-1>>1,this.k=e-1>>1}function zln(t,e){wr(e,"End label post-processing",1),us(Ri(Wo(new Tn(null,new _n(t.b,16)),new hY),new fY),new dY),or(e)}function qln(t,e,n){var r,s;return r=Xt(t.p[e.i.p])+Xt(t.d[e.i.p])+e.n.b+e.a.b,s=Xt(t.p[n.i.p])+Xt(t.d[n.i.p])+n.n.b+n.a.b,s-r}function Hln(t,e,n){var r,s;for(r=Ps(n,co),s=0;yc(r,0)!=0&&s<e;s++)r=Oa(r,Ps(t[s],co)),t[s]=Sr(r),r=Fp(r,32);return Sr(r)}function Lz(t){var e,n,r,s;for(s=0,n=0,r=t.length;n<r;n++)e=(Rr(n,t.length),t.charCodeAt(n)),e<64&&(s=C1(s,M0(1,e)));return s}function Gln(t){var e;return t==null?null:new Np((e=$c(t,!0),e.length>0&&(Rr(0,e.length),e.charCodeAt(0)==43)?e.substr(1):e))}function Vln(t){var e;return t==null?null:new Np((e=$c(t,!0),e.length>0&&(Rr(0,e.length),e.charCodeAt(0)==43)?e.substr(1):e))}function m3t(t,e){var n;return t.i>0&&(e.length<t.i&&(n=CI(sl(e).c,t.i),e=n),Ic(t.g,0,e,0,t.i)),e.length>t.i&&Ji(e,t.i,null),e}function Qc(t,e,n){var r,s,o;return t.ej()?(r=t.i,o=t.fj(),zI(t,r,e),s=t.Zi(3,null,e,r,o),n?n.Ei(s):n=s):zI(t,t.i,e),n}function Uln(t,e,n){var r,s;return r=new F0(t.e,4,10,(s=e.c,Et(s,88)?u(s,26):(dn(),Wh)),null,Fg(t,e),!1),n?n.Ei(r):n=r,n}function Wln(t,e,n){var r,s;return r=new F0(t.e,3,10,null,(s=e.c,Et(s,88)?u(s,26):(dn(),Wh)),Fg(t,e),!1),n?n.Ei(r):n=r,n}function lie(t){Bm();var e;return e=new yo(u(t.e.We((ci(),a5)),8)),t.B.Hc((cl(),M7))&&(e.a<=0&&(e.a=20),e.b<=0&&(e.b=20)),e}function hie(t){sy();var e;return(t.q?t.q:(vn(),vn(),a0))._b((Te(),Nw))?e=u(Q(t,Nw),197):e=u(Q(Fa(t),CS),197),e}function iy(t,e){var n,r;return r=null,Vs(t,(Te(),sV))&&(n=u(Q(t,sV),94),n.Xe(e)&&(r=n.We(e))),r==null&&(r=Q(Fa(t),e)),r}function fie(t,e){var n,r,s;return Et(e,42)?(n=u(e,42),r=n.cd(),s=ny(t.Rc(),r),fd(s,n.dd())&&(s!=null||t.Rc()._b(r))):!1}function Wit(t,e){var n,r,s;return t.f>0?(t.qj(),r=e==null?0:Hi(e),s=(r&vi)%t.d.length,n=fce(t,s,r,e),n!=-1):!1}function Yf(t,e){var n,r,s;return t.f>0&&(t.qj(),r=e==null?0:Hi(e),s=(r&vi)%t.d.length,n=r5t(t,s,r,e),n)?n.dd():null}function VI(t,e){var n,r,s,o;for(o=au(t.e.Tg(),e),n=u(t.g,119),s=0;s<t.i;++s)if(r=n[s],o.rl(r.ak()))return!1;return!0}function die(t){if(t.b==null){for(;t.a.Ob();)if(t.b=t.a.Pb(),!u(t.b,49).Zg())return!0;return t.b=null,!1}else return!0}function gie(t,e){t.mj();try{t.d.Vc(t.e++,e),t.f=t.d.j,t.g=-1}catch(n){throw n=Wi(n),Et(n,73)?rt(new eh):rt(n)}}function Mz(t,e){o2t();var n,r;return n=zM((bR(),bR(),sS)),r=null,e==n&&(r=u(Fc(Q8t,t),615)),r||(r=new ZYt(t),e==n&&xo(Q8t,t,r)),r}function pie(t,e){var n,r;t.a=Oa(t.a,1),t.c=b.Math.min(t.c,e),t.b=b.Math.max(t.b,e),t.d+=e,n=e-t.f,r=t.e+n,t.f=r-t.e-n,t.e=r}function Kln(t,e){var n;t.c=e,t.a=Iln(e),t.a<54&&(t.f=(n=e.d>1?C1(M0(e.a[1],32),Ps(e.a[0],co)):Ps(e.a[0],co),Vv(Ca(e.e,n))))}function UI(t,e){var n;return Bo(t)&&Bo(e)&&(n=t%e,DD<n&&n<x2)?n:Vp((dxt(Bo(t)?Sh(t):t,Bo(e)?Sh(e):e,!0),ob))}function n_(t,e){var n;g4n(e),n=u(Q(t,(Te(),ZG)),276),n&&Jt(t,ZG,Wfn(n)),Tg(t.c),Tg(t.f),ymt(t.d),ymt(u(Q(t,nV),207))}function bie(t){this.e=Pt(Tr,Xr,25,t.length,15,1),this.c=Pt(dl,i0,25,t.length,16,1),this.b=Pt(dl,i0,25,t.length,16,1),this.f=0}function Yln(t){var e,n;for(t.j=Pt(ia,vo,25,t.p.c.length,15,1),n=new S(t.p);n.a<n.c.c.length;)e=u(J(n),10),t.j[e.p]=e.o.b/t.i}function Kit(t){var e;t.c!=0&&(e=u(Fe(t.a,t.b),287),e.b==1?(++t.b,t.b<t.a.c.length&&JB(u(Fe(t.a,t.b),287))):--e.b,--t.c)}function Xln(t){var e;e=t.a;do e=u(Lr(new ar(lr(Ms(e).a.Kc(),new z))),17).d.i,e.k==(Gn(),Zs)&&ue(t.e,e);while(e.k==(Gn(),Zs))}function y3t(){y3t=Z,AAt=new Mv(15),v4e=new eo((ci(),q2),AAt),m4e=new eo(H2,15),w4e=new eo(fft,de(0)),b4e=new eo($6,BE)}function _l(){_l=Z,nN=new XR("PORTS",0),V2=new XR("PORT_LABELS",1),eN=new XR("NODE_LABELS",2),Xy=new XR("MINIMUM_SIZE",3)}function WI(t,e){var n,r;for(r=e.length,n=0;n<r;n+=2)jc(t,(Rr(n,e.length),e.charCodeAt(n)),(Rr(n+1,e.length),e.charCodeAt(n+1)))}function vie(t,e,n){var r,s,o,h;for(o=e-t.e,h=n-t.f,s=new S(t.a);s.a<s.c.c.length;)r=u(J(s),187),YI(r,r.s+o,r.t+h);t.e=e,t.f=n}function Qln(t,e){var n,r,s,o;for(o=e.b.b,t.a=new Qi,t.b=Pt(Tr,Xr,25,o,15,1),n=0,s=ei(e.b,0);s.b!=s.d.c;)r=u(ti(s),86),r.g=n++}function wie(t,e){var n,r,s,o;return n=e>>5,e&=31,s=t.d+n+(e==0?0:1),r=Pt(Tr,Xr,25,s,15,1),Kdn(r,t.a,n,e),o=new K3(t.e,s,r),OC(o),o}function x3t(t,e,n){var r,s;r=u(Fc(O7,e),117),s=u(Fc(hA,e),117),n?(xo(O7,t,r),xo(hA,t,s)):(xo(hA,t,r),xo(O7,t,s))}function mie(t,e,n){var r,s,o;for(s=null,o=t.b;o;){if(r=t.a.ue(e,o.d),n&&r==0)return o;r>=0?o=o.a[1]:(s=o,o=o.a[0])}return s}function yie(t,e,n){var r,s,o;for(s=null,o=t.b;o;){if(r=t.a.ue(e,o.d),n&&r==0)return o;r<=0?o=o.a[0]:(s=o,o=o.a[1])}return s}function Zln(t,e,n,r){var s,o,h;return s=!1,O3n(t.f,n,r)&&(Ehn(t.f,t.a[e][n],t.a[e][r]),o=t.a[e],h=o[r],o[r]=o[n],o[n]=h,s=!0),s}function k3t(t,e,n,r,s){var o,h,d;for(h=s;e.b!=e.c;)o=u(Fx(e),10),d=u(Yo(o,r).Xb(0),11),t.d[d.p]=h++,n.c[n.c.length]=d;return h}function E3t(t,e,n){var r,s,o,h,d;return h=t.k,d=e.k,r=n[h.g][d.g],s=ye(iy(t,r)),o=ye(iy(e,r)),b.Math.max((On(s),s),(On(o),o))}function Jln(t,e,n){var r,s,o,h;for(r=n/t.c.length,s=0,h=new S(t);h.a<h.c.c.length;)o=u(J(h),200),Cre(o,o.f+r*s),D1n(o,e,r),++s}function xie(t,e,n){var r,s,o,h;for(s=u(Jn(t.b,n),177),r=0,h=new S(e.j);h.a<h.c.c.length;)o=u(J(h),113),s[o.d.p]&&++r;return r}function kie(t){var e,n;return e=u(In(t.a,4),126),e!=null?(n=Pt(Tft,Jct,415,e.length,0,1),Ic(e,0,n,0,e.length),n):j4e}function thn(){var t;return zH!=0&&(t=bsn(),t-vge>2e3&&(vge=t,qH=b.setTimeout(aYe,10))),zH++==0?(Nan((Ypt(),X8t)),!0):!1}function ehn(t,e){var n,r,s;for(r=new ar(lr(Ms(t).a.Kc(),new z));zr(r);)if(n=u(Lr(r),17),s=n.d.i,s.c==e)return!1;return!0}function T3t(t,e){var n,r;if(Et(e,245)){r=u(e,245);try{return n=t.vd(r),n==0}catch(s){if(s=Wi(s),!Et(s,205))throw rt(s)}}return!1}function nhn(){return Error.stackTraceLimit>0?(b.Error.stackTraceLimit=Error.stackTraceLimit=64,!0):"stack"in new Error}function rhn(t,e){return y1(),y1(),gf(eb),(b.Math.abs(t-e)<=eb||t==e||isNaN(t)&&isNaN(e)?0:t<e?-1:t>e?1:Lv(isNaN(t),isNaN(e)))>0}function C3t(t,e){return y1(),y1(),gf(eb),(b.Math.abs(t-e)<=eb||t==e||isNaN(t)&&isNaN(e)?0:t<e?-1:t>e?1:Lv(isNaN(t),isNaN(e)))<0}function Eie(t,e){return y1(),y1(),gf(eb),(b.Math.abs(t-e)<=eb||t==e||isNaN(t)&&isNaN(e)?0:t<e?-1:t>e?1:Lv(isNaN(t),isNaN(e)))<=0}function Yit(t,e){for(var n=0;!e[n]||e[n]=="";)n++;for(var r=e[n++];n<e.length;n++)!e[n]||e[n]==""||(r+=t+e[n]);return r}function Ah(t,e,n){var r,s,o,h;for(o=e+n,kmt(e,o,t.length),h="",s=e;s<o;)r=b.Math.min(s+1e4,o),h+=Uen(t.slice(s,r)),s=r;return h}function Tie(t){var e,n,r,s,o;if(t==null)return null;for(o=new le,n=kit(t),r=0,s=n.length;r<s;++r)e=n[r],ue(o,$c(e,!0));return o}function Cie(t){var e,n,r,s,o;if(t==null)return null;for(o=new le,n=kit(t),r=0,s=n.length;r<s;++r)e=n[r],ue(o,$c(e,!0));return o}function _ie(t){var e,n,r,s,o;if(t==null)return null;for(o=new le,n=kit(t),r=0,s=n.length;r<s;++r)e=n[r],ue(o,$c(e,!0));return o}function Sie(t,e){var n,r,s;if(t.c)Qv(t.c,e);else for(n=e-Fu(t),s=new S(t.d);s.a<s.c.c.length;)r=u(J(s),157),Sie(r,Fu(r)+n)}function Aie(t,e){var n,r,s;if(t.c)Xv(t.c,e);else for(n=e-xl(t),s=new S(t.a);s.a<s.c.c.length;)r=u(J(s),157),Aie(r,xl(r)+n)}function ihn(t,e){var n,r,s,o;for(s=new Yc(e.gc()),r=e.Kc();r.Ob();)n=r.Pb(),o=uat(t,u(n,56)),o&&(s.c[s.c.length]=o);return s}function Iz(t,e){var n,r,s;return t.qj(),r=e==null?0:Hi(e),s=(r&vi)%t.d.length,n=r5t(t,s,r,e),n?(Bee(t,n),n.dd()):null}function sw(t){var e,n;for(n=$ae(t),e=null;t.c==2;)fi(t),e||(e=(gi(),gi(),new lC(2)),m2(e,n),n=e),n.$l($ae(t));return n}function oE(t){var e,n,r;if(r=null,e=Cd in t.a,n=!e,n)throw rt(new ad("Every element must have an id."));return r=s6(D0(t,Cd)),r}function Dz(t){var e,n,r;if(r=t.Zg(),!r)for(e=0,n=t.eh();n;n=n.eh()){if(++e>oot)return n.fh();if(r=n.Zg(),r||n==t)break}return r}function _3t(t){return g$(),Et(t,156)?u(Jn(cN,Lge),288).vg(t):kl(cN,sl(t))?u(Jn(cN,sl(t)),288).vg(t):null}function shn(t){if(Oz(qE,t))return Fn(),YE;if(Oz(Oct,t))return Fn(),I2;throw rt(new Pn("Expecting true or false"))}function ahn(t,e){if(e.c==t)return e.d;if(e.d==t)return e.c;throw rt(new Pn("Input edge is not connected to the input port."))}function Lie(t,e){return t.e>e.e?1:t.e<e.e?-1:t.d>e.d?t.e:t.d<e.d?-e.e:t.e*Pyt(t.a,e.a,t.d)}function Mie(t){return t>=48&&t<48+b.Math.min(10,10)?t-48:t>=97&&t<97?t-97+10:t>=65&&t<65?t-65+10:-1}function Iie(t,e){var n;return Gt(e)===Gt(t)?!0:!Et(e,21)||(n=u(e,21),n.gc()!=t.gc())?!1:t.Ic(n)}function ohn(t,e){var n,r,s,o;return r=t.a.length-1,n=e-t.b&r,o=t.c-e&r,s=t.c-t.b&r,oWt(n<s),n>=o?(aun(t,e),-1):(oun(t,e),1)}function chn(t,e){var n,r;for(n=(Rr(e,t.length),t.charCodeAt(e)),r=e+1;r<t.length&&(Rr(r,t.length),t.charCodeAt(r)==n);)++r;return r-e}function S3t(t){switch(t.g){case 12:case 13:case 14:case 15:case 16:case 17:case 18:case 19:case 20:return!0;default:return!1}}function uhn(t,e){var n=t.a,r;e=String(e),n.hasOwnProperty(e)&&(r=n[e]);var s=(pit(),Eut)[typeof r],o=s?s(r):jyt(typeof r);return o}function aw(t,e){if(t.a<0)throw rt(new Fo("Did not call before(...) or after(...) before calling add(...)."));return I2t(t,t.a,e),t}function lhn(t,e,n,r){var s,o;e.c.length!=0&&(s=Kbn(n,r),o=Wgn(e),us(G$(new Tn(null,new _n(o,1)),new $Q),new EXt(t,n,s,r)))}function t6(t,e,n){var r;t.Db&e?n==null?Opn(t,e):(r=bst(t,e),r==-1?t.Eb=n:Ji(s2(t.Eb),r,n)):n!=null&&ivn(t,e,n)}function iu(t){var e,n;return t.Db&32||(n=(e=u(In(t,16),26),Zn(e||t.zh())-Zn(t.zh())),n!=0&&t6(t,32,Pt(Xn,Ie,1,n,5,1))),t}function hhn(t){var e;return t.b||eYe(t,(e=VQe(t.e,t.a),!e||!hn(Oct,Yf((!e.b&&(e.b=new yl((dn(),Qa),cc,e)),e.b),"qualified")))),t.c}function fhn(t,e,n){var r,s,o;return r=u(St(il(t.a),e),87),o=(s=r.c,s||(dn(),V1)),(o.kh()?Kp(t.b,u(o,49)):o)==n?wq(r):P8(r,n),o}function dhn(t,e){(!e&&console.groupCollapsed!=null?console.groupCollapsed:console.group??console.log).call(console,t)}function ghn(t,e,n,r){r==t,u(n.b,65),u(n.b,65),u(r.b,65),u(r.b,65).c.b,xmt(r,e,t)}function phn(t){var e,n;for(e=new S(t.g);e.a<e.c.c.length;)u(J(e),562);n=new Fce(t.g,Xt(t.a),t.c),k4n(n),t.g=n.b,t.d=n.a}function A3t(t,e,n){e.b=b.Math.max(e.b,-n.a),e.c=b.Math.max(e.c,n.a-t.a),e.d=b.Math.max(e.d,-n.b),e.a=b.Math.max(e.a,n.b-t.b)}function bhn(t,e){return t.e<e.e?-1:t.e>e.e?1:t.f<e.f?-1:t.f>e.f?1:Hi(t)-Hi(e)}function Oz(t,e){return On(t),e==null?!1:hn(t,e)?!0:t.length==e.length&&hn(t.toLowerCase(),e.toLowerCase())}function vhn(t,e){var n,r,s,o;for(r=0,s=e.gc();r<s;++r)n=e.il(r),Et(n,99)&&u(n,18).Bb&dc&&(o=e.jl(r),o!=null&&uat(t,u(o,56)))}function Die(t,e,n){var r,s,o;for(o=new S(n.a);o.a<o.c.c.length;)s=u(J(o),221),r=new cj(u(Jn(t.a,s.b),65)),ue(e.a,r),Die(t,r,s)}function g2(t){var e,n;return yc(t,-129)>0&&yc(t,128)<0?(e=Sr(t)+128,n=(XKt(),aEt)[e],!n&&(n=aEt[e]=new Cm(t)),n):new Cm(t)}function Oie(t,e){var n,r;return n=e.Hh(t.a),n&&(r=Br(Yf((!n.b&&(n.b=new yl((dn(),Qa),cc,n)),n.b),oi)),r!=null)?r:e.ne()}function whn(t,e){var n,r;return n=e.Hh(t.a),n&&(r=Br(Yf((!n.b&&(n.b=new yl((dn(),Qa),cc,n)),n.b),oi)),r!=null)?r:e.ne()}function mhn(t,e){prt();var n,r;for(r=new ar(lr(z0(t).a.Kc(),new z));zr(r);)if(n=u(Lr(r),17),n.d.i==e||n.c.i==e)return n;return null}function L3t(t,e,n){this.c=t,this.f=new le,this.e=new Ta,this.j=new Rvt,this.n=new Rvt,this.b=e,this.g=new ih(e.c,e.d,e.b,e.a),this.a=n}function Xit(t){var e,n,r,s;for(this.a=new A0,this.d=new qs,this.e=0,n=t,r=0,s=n.length;r<s;++r)e=n[r],!this.f&&(this.f=e),Ert(this,e)}function Nie(t){Jp(),t.length==0?(this.e=0,this.d=1,this.a=ct(ot(Tr,1),Xr,25,15,[0])):(this.e=1,this.d=t.length,this.a=t,OC(this))}function r_(t,e,n){uqt.call(this),this.a=Pt(Xge,Kxt,212,(Kf(),ct(ot(My,1),ae,232,0,[sc,tu,ac])).length,0,1),this.b=t,this.d=e,this.c=n}function Pie(t){this.d=new le,this.e=new n2,this.c=Pt(Tr,Xr,25,(be(),ct(ot(Xa,1),xc,61,0,[Zo,Nn,Hn,mr,Bn])).length,15,1),this.b=t}function yhn(t){var e,n,r,s,o,h;for(h=u(Q(t,(se(),_i)),11),Jt(h,g7,t.i.n.b),e=gd(t.e),r=e,s=0,o=r.length;s<o;++s)n=r[s],sa(n,h)}function xhn(t){var e,n,r,s,o,h;for(n=u(Q(t,(se(),_i)),11),Jt(n,g7,t.i.n.b),e=gd(t.g),s=e,o=0,h=s.length;o<h;++o)r=s[o],Da(r,n)}function khn(t){var e,n;return Vs(t.d.i,(Te(),b7))?(e=u(Q(t.c.i,b7),19),n=u(Q(t.d.i,b7),19),du(e.a,n.a)>0):!1}function Fie(t){var e;Gt(qe(t,(ci(),r5)))===Gt(($0(),HV))&&(ts(t)?(e=u(qe(ts(t),r5),334),bo(t,r5,e)):bo(t,r5,YS))}function Ehn(t,e,n){var r,s;Ist(t.e,e,n,(be(),Bn)),Ist(t.i,e,n,Hn),t.a&&(s=u(Q(e,(se(),_i)),11),r=u(Q(n,_i),11),xrt(t.g,s,r))}function Bie(t,e,n){var r,s,o;r=e.c.p,o=e.p,t.b[r][o]=new tQt(t,e),n&&(t.a[r][o]=new Wk(e),s=u(Q(e,(se(),Iw)),10),s&&ln(t.d,s,e))}function Rie(t,e){var n,r,s;if(ue(nG,t),e.Fc(t),n=u(Jn(qut,t),21),n)for(s=n.Kc();s.Ob();)r=u(s.Pb(),33),Ro(nG,r,0)!=-1||Rie(r,e)}function Thn(t,e,n){var r;(Fge?(Mln(t),!0):Bge||jge?(s8(),!0):Rge&&(s8(),!1))&&(r=new fKt(e),r.b=n,S0n(t,r))}function Qit(t,e){var n;n=!t.A.Hc((_l(),V2))||t.q==(oa(),Vc),t.u.Hc((Qu(),tg))?n?U4n(t,e):ghe(t,e):t.u.Hc(xb)&&(n?h4n(t,e):Ahe(t,e))}function cE(t,e){var n,r;if(++t.j,e!=null&&(n=(r=t.a.Cb,Et(r,97)?u(r,97).Jg():null),mpn(e,n))){t6(t.a,4,n);return}t6(t.a,4,u(e,126))}function jie(t,e,n){return new ih(b.Math.min(t.a,e.a)-n/2,b.Math.min(t.b,e.b)-n/2,b.Math.abs(t.a-e.a)+n,b.Math.abs(t.b-e.b)+n)}function Chn(t,e){var n,r;return n=du(t.a.c.p,e.a.c.p),n!=0?n:(r=du(t.a.d.i.p,e.a.d.i.p),r!=0?r:du(e.a.d.p,t.a.d.p))}function _hn(t,e,n){var r,s,o,h;return o=e.j,h=n.j,o!=h?o.g-h.g:(r=t.f[e.p],s=t.f[n.p],r==0&&s==0?0:r==0?-1:s==0?1:Ls(r,s))}function $ie(t,e,n){var r,s,o;if(!n[e.d])for(n[e.d]=!0,s=new S(o4(e));s.a<s.c.c.length;)r=u(J(s),213),o=_z(r,e),$ie(t,o,n)}function M3t(t,e,n){var r;switch(r=n[t.g][e],t.g){case 1:case 3:return new $e(0,r);case 2:case 4:return new $e(r,0);default:return null}}function Shn(t,e,n){var r,s;s=u(lrt(e.f),209);try{s.Ze(t,n),Fen(e.f,s)}catch(o){throw o=Wi(o),Et(o,102)?(r=o,rt(r)):rt(o)}}function zie(t,e,n){var r,s,o,h,d,w;return r=null,d=bxt(z8(),e),o=null,d&&(s=null,w=gxt(d,n),h=null,w!=null&&(h=t.Ye(d,w)),s=h,o=s),r=o,r}function Ahn(t,e,n,r){var s,o,h;return s=new F0(t.e,1,13,(h=e.c,h||(dn(),V1)),(o=n.c,o||(dn(),V1)),Fg(t,e),!1),r?r.Ei(s):r=s,r}function Zit(t,e,n,r){var s;if(s=t.length,e>=s)return s;for(e=e>0?e:0;e<s&&!bit((Rr(e,t.length),t.charCodeAt(e)),n,r);e++);return e}function D1(t,e){var n,r;for(r=t.c.length,e.length<r&&(e=wR(new Array(r),e)),n=0;n<r;++n)Ji(e,n,t.c[n]);return e.length>r&&Ji(e,r,null),e}function qie(t,e){var n,r;for(r=t.a.length,e.length<r&&(e=wR(new Array(r),e)),n=0;n<r;++n)Ji(e,n,t.a[n]);return e.length>r&&Ji(e,r,null),e}function p2(t,e,n){var r,s,o;return s=u(Jn(t.e,e),387),s?(o=J2t(s,n),OUt(t,s),o):(r=new _vt(t,e,n),ki(t.e,e,r),sQt(r),null)}function Lhn(t){var e;if(t==null)return null;if(e=Ebn($c(t,!0)),e==null)throw rt(new ret("Invalid hexBinary value: '"+t+"'"));return e}function KI(t){return Jp(),yc(t,0)<0?yc(t,-1)!=0?new g4t(-1,O8(t)):_ut:yc(t,10)<=0?wEt[Sr(t)]:new g4t(1,t)}function Jit(){return Lq(),ct(ot(Epe,1),ae,159,0,[xpe,ype,kpe,fpe,hpe,dpe,bpe,ppe,gpe,mpe,wpe,vpe,upe,cpe,lpe,ape,spe,ope,rpe,npe,ipe,Put])}function Hie(t){var e;this.d=new le,this.j=new Ta,this.g=new Ta,e=t.g.b,this.f=u(Q(Fa(e),(Te(),Vl)),103),this.e=Xt(ye(Fz(e,Gy)))}function Gie(t){this.b=new le,this.e=new le,this.d=t,this.a=!j9(Ri(new Tn(null,new Fv(new S1(t.b))),new Zt(new MF))).sd((Wb(),JE))}function Xf(){Xf=Z,qn=new AM("PARENTS",0),Js=new AM("NODES",1),Id=new AM("EDGES",2),$2=new AM("PORTS",3),Xg=new AM("LABELS",4)}function c4(){c4=Z,mb=new MM("DISTRIBUTED",0),JO=new MM("JUSTIFIED",1),CAt=new MM("BEGIN",2),XS=new MM(NE,3),_At=new MM("END",4)}function Mhn(t){var e;switch(e=t.yi(null),e){case 10:return 0;case 15:return 1;case 14:return 2;case 11:return 3;case 21:return 4}return-1}function tst(t){switch(t.g){case 1:return ao(),Z0;case 4:return ao(),jh;case 2:return ao(),kf;case 3:return ao(),Q0}return ao(),c0}function Ihn(t,e,n){var r;switch(r=n.q.getFullYear()-nb+nb,r<0&&(r=-r),e){case 1:t.a+=r;break;case 2:Xd(t,r%100,2);break;default:Xd(t,r,e)}}function ei(t,e){var n,r;if(Um(e,t.b),e>=t.b>>1)for(r=t.c,n=t.b;n>e;--n)r=r.b;else for(r=t.a.a,n=0;n<e;++n)r=r.a;return new lKt(t,e,r)}function Nz(){Nz=Z,Iut=new Cbt("NUM_OF_EXTERNAL_SIDES_THAN_NUM_OF_EXTENSIONS_LAST",0),OEt=new Cbt("CORNER_CASES_THAN_SINGLE_SIDE_LAST",1)}function Dhn(t){var e,n,r,s;for(r=kgn(t),Xs(r,Rbe),s=t.d,s.c=Pt(Xn,Ie,1,0,5,1),n=new S(r);n.a<n.c.c.length;)e=u(J(n),456),As(s,e.b)}function Vie(t){var e,n,r;for(r=(!t.o&&(t.o=new Tl((Zc(),Eb),$w,t,0)),t.o),n=r.c.Kc();n.e!=n.i.gc();)e=u(n.nj(),42),e.dd();return fI(r)}function Ohn(t){var e;Dx(u(Q(t,(Te(),os)),98))&&(e=t.b,Moe((An(0,e.c.length),u(e.c[0],29))),Moe(u(Fe(e,e.c.length-1),29)))}function Uie(t,e){var n,r,s,o;for(n=0,s=new S(e.a);s.a<s.c.c.length;)r=u(J(s),10),o=r.o.a+r.d.c+r.d.b+t.j,n=b.Math.max(n,o);return n}function Pz(t){var e,n,r,s;for(s=0,n=0,r=t.length;n<r;n++)e=(Rr(n,t.length),t.charCodeAt(n)),e>=64&&e<128&&(s=C1(s,M0(1,e-64)));return s}function Fz(t,e){var n,r;return r=null,Vs(t,(ci(),q6))&&(n=u(Q(t,q6),94),n.Xe(e)&&(r=n.We(e))),r==null&&Fa(t)&&(r=Q(Fa(t),e)),r}function Wie(t,e){var n,r,s;s=e.d.i,r=s.k,!(r==(Gn(),Ds)||r==j1)&&(n=new ar(lr(Ms(s).a.Kc(),new z)),zr(n)&&ki(t.k,e,u(Lr(n),17)))}function est(t,e){var n,r,s;return r=yn(t.Tg(),e),n=e-t.Ah(),n<0?(s=t.Yg(r),s>=0?t.lh(s):zst(t,r)):n<0?zst(t,r):u(r,66).Nj().Sj(t,t.yh(),n)}function De(t){var e;if(Et(t.a,4)){if(e=_3t(t.a),e==null)throw rt(new Fo(G1e+t.b+"'. "+H1e+(L0(uN),uN.k)+a8t));return e}else return t.a}function Nhn(t){var e;if(t==null)return null;if(e=t5n($c(t,!0)),e==null)throw rt(new ret("Invalid base64Binary value: '"+t+"'"));return e}function dr(t){var e;try{return e=t.i.Xb(t.e),t.mj(),t.g=t.e++,e}catch(n){throw n=Wi(n),Et(n,73)?(t.mj(),rt(new lc)):rt(n)}}function nst(t){var e;try{return e=t.c.ki(t.e),t.mj(),t.g=t.e++,e}catch(n){throw n=Wi(n),Et(n,73)?(t.mj(),rt(new lc)):rt(n)}}function i_(){i_=Z,c7t=(ci(),iAt),$ut=FSt,Fpe=$6,o7t=q2,$pe=(Kz(),$Et),jpe=REt,zpe=qEt,Rpe=BEt,Bpe=(Sit(),i7t),jut=Ope,a7t=Npe,eG=Ppe}function Bz(t){switch(pbt(),this.c=new le,this.d=t,t.g){case 0:case 2:this.a=Ewt(_7t),this.b=ss;break;case 3:case 1:this.a=_7t,this.b=Ts}}function Kie(t,e,n){var r,s;if(t.c)yu(t.c,t.c.i+e),xu(t.c,t.c.j+n);else for(s=new S(t.b);s.a<s.c.c.length;)r=u(J(s),157),Kie(r,e,n)}function Phn(t,e){var n,r;if(t.j.length!=e.j.length)return!1;for(n=0,r=t.j.length;n<r;n++)if(!hn(t.j[n],e.j[n]))return!1;return!0}function Rz(t,e,n){var r;e.a.length>0&&(ue(t.b,new AKt(e.a,n)),r=e.a.length,0<r?e.a=e.a.substr(0,0):0>r&&(e.a+=DUt(Pt(mh,vd,25,-r,15,1))))}function Yie(t,e){var n,r,s;for(n=t.o,s=u(u(Ai(t.r,e),21),84).Kc();s.Ob();)r=u(s.Pb(),111),r.e.a=Bfn(r,n.a),r.e.b=n.b*Xt(ye(r.b.We(ZH)))}function Fhn(t,e){var n,r,s,o;return s=t.k,n=Xt(ye(Q(t,(se(),Dw)))),o=e.k,r=Xt(ye(Q(e,Dw))),o!=(Gn(),xs)?-1:s!=xs?1:n==r?0:n<r?-1:1}function Bhn(t,e){var n,r;return n=u(u(Jn(t.g,e.a),46).a,65),r=u(u(Jn(t.g,e.b),46).a,65),Hp(e.a,e.b)-Hp(e.a,l2t(n.b))-Hp(e.b,l2t(r.b))}function Rhn(t,e){var n;return n=u(Q(t,(Te(),_o)),74),Jet(e,Dbe)?n?_h(n):(n=new Du,Jt(t,_o,n)):n&&Jt(t,_o,null),n}function Xie(t){var e;return e=new _p,e.a+="n",t.k!=(Gn(),Ds)&&Vr(Vr((e.a+="(",e),snt(t.k).toLowerCase()),")"),Vr((e.a+="_",e),ZI(t)),e.a}function jhn(t,e){wr(e,"Self-Loop post-processing",1),us(Ri(Ri(Wo(new Tn(null,new _n(t.b,16)),new XY),new QY),new lF),new ZY),or(e)}function e6(t,e,n,r){var s;return n>=0?t.hh(e,n,r):(t.eh()&&(r=(s=t.Vg(),s>=0?t.Qg(r):t.eh().ih(t,-1-s,null,r))),t.Sg(e,n,r))}function I3t(t,e){switch(e){case 7:!t.e&&(t.e=new Cn(Ws,t,7,4)),xr(t.e);return;case 8:!t.d&&(t.d=new Cn(Ws,t,8,5)),xr(t.d);return}v3t(t,e)}function Qf(t,e){var n;n=t.Zc(e);try{return n.Pb()}catch(r){throw r=Wi(r),Et(r,109)?rt(new mo("Can't get element "+e)):rt(r)}}function D3t(t,e){this.e=t,e<cot?(this.d=1,this.a=ct(ot(Tr,1),Xr,25,15,[e|0])):(this.d=2,this.a=ct(ot(Tr,1),Xr,25,15,[e%cot|0,e/cot|0]))}function Qie(t,e){vn();var n,r,s,o;for(n=t,o=e,Et(t,21)&&!Et(e,21)&&(n=e,o=t),s=n.Kc();s.Ob();)if(r=s.Pb(),o.Hc(r))return!1;return!0}function Ba(t,e,n){var r,s,o,h;return r=t.Xc(e),r!=-1&&(t.ej()?(o=t.fj(),h=r6(t,r),s=t.Zi(4,h,null,r,o),n?n.Ei(s):n=s):r6(t,r)),n}function $hn(t,e,n){var r,s,o,h;return r=t.Xc(e),r!=-1&&(t.ej()?(o=t.fj(),h=Dj(t,r),s=t.Zi(4,h,null,r,o),n?n.Ei(s):n=s):Dj(t,r)),n}function Zie(t,e){var n;switch(n=u(go(t.b,e),124).n,e.g){case 1:t.t>=0&&(n.d=t.t);break;case 3:t.t>=0&&(n.a=t.t)}t.C&&(n.b=t.C.b,n.c=t.C.c)}function n6(){n6=Z,cO=new $R(Rq,0),oO=new $R(xot,1),uO=new $R(kot,2),lO=new $R(Eot,3),cO.a=!1,oO.a=!0,uO.a=!1,lO.a=!0}function s_(){s_=Z,hO=new jR(Rq,0),JH=new jR(xot,1),tG=new jR(kot,2),fO=new jR(Eot,3),hO.a=!1,JH.a=!0,tG.a=!1,fO.a=!0}function zhn(t){var e;e=t.a;do e=u(Lr(new ar(lr(jo(e).a.Kc(),new z))),17).c.i,e.k==(Gn(),Zs)&&t.b.Fc(e);while(e.k==(Gn(),Zs));t.b=a2(t.b)}function qhn(t){var e,n,r;for(r=t.c.a,t.p=(Ar(r),new Pu(r)),n=new S(r);n.a<n.c.c.length;)e=u(J(n),10),e.p=Cgn(e).a;vn(),Xs(t.p,new nQ)}function Jie(t){var e,n,r,s;if(r=0,s=gy(t),s.c.length==0)return 1;for(n=new S(s);n.a<n.c.c.length;)e=u(J(n),33),r+=Jie(e);return r}function Hhn(t,e){var n,r,s;for(s=0,r=u(u(Ai(t.r,e),21),84).Kc();r.Ob();)n=u(r.Pb(),111),s+=n.d.b+n.b.rf().a+n.d.c,r.Ob()&&(s+=t.w);return s}function Ghn(t,e){var n,r,s;for(s=0,r=u(u(Ai(t.r,e),21),84).Kc();r.Ob();)n=u(r.Pb(),111),s+=n.d.d+n.b.rf().b+n.d.a,r.Ob()&&(s+=t.w);return s}function Vhn(t,e,n,r){if(e.a<r.a)return!0;if(e.a==r.a){if(e.b<r.b)return!0;if(e.b==r.b&&t.b>n.b)return!0}return!1}function rst(t,e){return ea(t)?!!lge[e]:t.hm?!!t.hm[e]:Nm(t)?!!uge[e]:Om(t)?!!cge[e]:!1}function bo(t,e,n){return n==null?(!t.o&&(t.o=new Tl((Zc(),Eb),$w,t,0)),Iz(t.o,e)):(!t.o&&(t.o=new Tl((Zc(),Eb),$w,t,0)),Yz(t.o,e,n)),t}function Uhn(t,e,n,r){var s,o;o=e.Xe((ci(),s5))?u(e.We(s5),21):t.j,s=Pun(o),s!=(Lq(),Put)&&(n&&!S3t(s)||B4t(Tbn(t,s,r),e))}function jz(t,e,n,r){var s,o,h;return o=yn(t.Tg(),e),s=e-t.Ah(),s<0?(h=t.Yg(o),h>=0?t._g(h,n,!0):lw(t,o,n)):u(o,66).Nj().Pj(t,t.yh(),s,n,r)}function Whn(t,e,n,r){var s,o,h;n.mh(e)&&(to(),Yrt(e)?(s=u(n.ah(e),153),vhn(t,s)):(o=(h=e,h?u(r,49).xh(h):null),o&&YWe(n.ah(e),o)))}function Khn(t){switch(t.g){case 1:return tw(),aO;case 3:return tw(),sO;case 2:return tw(),But;case 4:return tw(),Fut;default:return null}}function O3t(t){switch(typeof t){case Oat:return Bg(t);case Lxt:return ps(t);case u6:return Fn(),t?1231:1237;default:return t==null?0:Iv(t)}}function Yhn(t,e,n){if(t.e)switch(t.b){case 1:Tnn(t.c,e,n);break;case 0:Cnn(t.c,e,n)}else BZt(t.c,e,n);t.a[e.p][n.p]=t.c.i,t.a[n.p][e.p]=t.c.e}function tse(t){var e,n;if(t==null)return null;for(n=Pt(o0,te,193,t.length,0,2),e=0;e<n.length;e++)n[e]=u(ban(t[e],t[e].length),193);return n}function $z(t){var e;if(_it(t))return zj(t),t.Lk()&&(e=d_(t.e,t.b,t.c,t.a,t.j),t.j=e),t.g=t.a,++t.a,++t.c,t.i=0,t.j;throw rt(new lc)}function Xhn(t,e){var n,r,s,o;return o=t.o,n=t.p,o<n?o*=o:n*=n,r=o+n,o=e.o,n=e.p,o<n?o*=o:n*=n,s=o+n,r<s?-1:r==s?0:1}function Fg(t,e){var n,r,s;if(s=Ose(t,e),s>=0)return s;if(t.Fk()){for(r=0;r<t.i;++r)if(n=t.Gk(u(t.g[r],56)),Gt(n)===Gt(e))return r}return-1}function u4(t,e,n){var r,s;if(s=t.gc(),e>=s)throw rt(new jm(e,s));if(t.hi()&&(r=t.Xc(n),r>=0&&r!=e))throw rt(new Pn(XD));return t.mi(e,n)}function N3t(t,e){if(this.a=u(Ar(t),245),this.b=u(Ar(e),245),t.vd(e)>0||t==(Qtt(),put)||e==(Xtt(),but))throw rt(new Pn("Invalid range: "+OZt(t,e)))}function ese(t){var e,n;for(this.b=new le,this.c=t,this.a=!1,n=new S(t.a);n.a<n.c.c.length;)e=u(J(n),10),this.a=this.a|e.k==(Gn(),Ds)}function Qhn(t,e){var n,r,s;for(n=Dv(new Ub,t),s=new S(e);s.a<s.c.c.length;)r=u(J(s),121),vf(of(af(cf(sf(new Eh,0),0),n),r));return n}function nse(t,e,n){var r,s,o;for(s=new ar(lr((e?jo(t):Ms(t)).a.Kc(),new z));zr(s);)r=u(Lr(s),17),o=e?r.c.i:r.d.i,o.k==(Gn(),Sl)&&ko(o,n)}function sy(){sy=Z,lV=new VR(K0,0),cht=new VR("PORT_POSITION",1),t5=new VR("NODE_SIZE_WHERE_SPACE_PERMITS",2),J4=new VR("NODE_SIZE",3)}function Qd(){Qd=Z,Zht=new eC("AUTOMATIC",0),$O=new eC(d6,1),zO=new eC(g6,2),FV=new eC("TOP",3),NV=new eC(Xxt,4),PV=new eC(NE,5)}function P3t(t,e,n,r){bE();var s,o;for(s=0,o=0;o<n;o++)s=Oa(Ca(Ps(e[o],co),Ps(r,co)),Ps(Sr(s),co)),t[o]=Sr(s),s=zm(s,32);return Sr(s)}function F3t(t,e,n){var r,s;for(s=0,r=0;r<Nut;r++)s=b.Math.max(s,Mit(t.a[e.g][r],n));return e==(Kf(),tu)&&t.b&&(s=b.Math.max(s,t.b.b)),s}function zz(t,e){var n,r;if(P2t(e>0),(e&-e)==e)return ps(e*ol(t,31)*4656612873077393e-25);do n=ol(t,31),r=n%e;while(n-r+(e-1)<0);return ps(r)}function Bg(t){dKt();var e,n,r;return n=":"+t,r=YH[n],r!=null?ps((On(r),r)):(r=IEt[n],e=r==null?z2n(t):ps((On(r),r)),bnn(),YH[n]=e,e)}function rse(t,e,n){wr(n,"Compound graph preprocessor",1),t.a=new Hv,uhe(t,e,null),Ayn(t,e),l2n(t),Jt(e,(se(),XTt),t.a),t.a=null,Yu(t.b),or(n)}function Zhn(t,e,n){switch(n.g){case 1:t.a=e.a/2,t.b=0;break;case 2:t.a=e.a,t.b=e.b/2;break;case 3:t.a=e.a/2,t.b=e.b;break;case 4:t.a=0,t.b=e.b/2}}function Jhn(t){var e,n,r;for(r=u(Ai(t.a,(g4(),IG)),15).Kc();r.Ob();)n=u(r.Pb(),101),e=W3t(n),w8(t,n,e[0],(Jv(),Sw),0),w8(t,n,e[1],Aw,1)}function tfn(t){var e,n,r;for(r=u(Ai(t.a,(g4(),DG)),15).Kc();r.Ob();)n=u(r.Pb(),101),e=W3t(n),w8(t,n,e[0],(Jv(),Sw),0),w8(t,n,e[1],Aw,1)}function ist(t){switch(t.g){case 0:return null;case 1:return new rne;case 2:return new Vpt;default:throw rt(new Pn(xct+(t.f!=null?t.f:""+t.g)))}}function YI(t,e,n){var r,s;for(kcn(t,e-t.s,n-t.t),s=new S(t.n);s.a<s.c.c.length;)r=u(J(s),211),hx(r,r.e+e-t.s),fpt(r,r.f+n-t.t);t.s=e,t.t=n}function efn(t){var e,n,r,s,o;for(n=0,s=new S(t.a);s.a<s.c.c.length;)r=u(J(s),121),r.d=n++;return e=D0n(t),o=null,e.c.length>1&&(o=Qhn(t,e)),o}function sst(t){var e;return t.f&&t.f.kh()&&(e=u(t.f,49),t.f=u(Kp(t,e),82),t.f!=e&&t.Db&4&&!(t.Db&1)&&mi(t,new Qs(t,9,8,e,t.f))),t.f}function ast(t){var e;return t.i&&t.i.kh()&&(e=u(t.i,49),t.i=u(Kp(t,e),82),t.i!=e&&t.Db&4&&!(t.Db&1)&&mi(t,new Qs(t,9,7,e,t.i))),t.i}function no(t){var e;return t.b&&t.b.Db&64&&(e=t.b,t.b=u(Kp(t,e),18),t.b!=e&&t.Db&4&&!(t.Db&1)&&mi(t,new Qs(t,9,21,e,t.b))),t.b}function qz(t,e){var n,r,s;t.d==null?(++t.e,++t.f):(r=e.Sh(),v2n(t,t.f+1),s=(r&vi)%t.d.length,n=t.d[s],!n&&(n=t.d[s]=t.uj()),n.Fc(e),++t.f)}function B3t(t,e,n){var r;return e.Kj()?!1:e.Zj()!=-2?(r=e.zj(),r==null?n==null:yi(r,n)):e.Hj()==t.e.Tg()&&n==null}function Hz(){var t;Bl(16,Jhe),t=Kee(16),this.b=Pt(wut,LD,317,t,0,1),this.c=Pt(wut,LD,317,t,0,1),this.a=null,this.e=null,this.i=0,this.f=t-1,this.g=0}function H0(t){evt.call(this),this.k=(Gn(),Ds),this.j=(Bl(6,my),new Yc(6)),this.b=(Bl(2,my),new Yc(2)),this.d=new Vtt,this.f=new Fpt,this.a=t}function nfn(t){var e,n;t.c.length<=1||(e=eue(t,(be(),mr)),Hae(t,u(e.a,19).a,u(e.b,19).a),n=eue(t,Bn),Hae(t,u(n.a,19).a,u(n.b,19).a))}function a_(){a_=Z,ACt=new TM("SIMPLE",0),lht=new TM(jot,1),hht=new TM("LINEAR_SEGMENTS",2),AS=new TM("BRANDES_KOEPF",3),LS=new TM(C1e,4)}function R3t(t,e,n){Dx(u(Q(e,(Te(),os)),98))||(Dmt(t,e,Rg(e,n)),Dmt(t,e,Rg(e,(be(),mr))),Dmt(t,e,Rg(e,Nn)),vn(),Xs(e.j,new aM(t)))}function ise(t,e,n,r){var s,o,h;for(s=u(Ai(r?t.a:t.b,e),21),h=s.Kc();h.Ob();)if(o=u(h.Pb(),33),dq(t,n,o))return!0;return!1}function ost(t){var e,n;for(n=new er(t);n.e!=n.i.gc();)if(e=u(dr(n),87),e.e||(!e.d&&(e.d=new Ss(ho,e,1)),e.d).i!=0)return!0;return!1}function cst(t){var e,n;for(n=new er(t);n.e!=n.i.gc();)if(e=u(dr(n),87),e.e||(!e.d&&(e.d=new Ss(ho,e,1)),e.d).i!=0)return!0;return!1}function rfn(t){var e,n,r;for(e=0,r=new S(t.c.a);r.a<r.c.c.length;)n=u(J(r),10),e+=N0(new ar(lr(Ms(n).a.Kc(),new z)));return e/t.c.a.c.length}function sse(t){var e,n;for(t.c||h3n(t),n=new Du,e=new S(t.a),J(e);e.a<e.c.c.length;)ni(n,u(J(e),407).a);return Qn(n.b!=0),ch(n,n.c.b),n}function ust(){ust=Z,gSt=(nat(),lSt),dSt=new Mv(8),new eo((ci(),q2),dSt),new eo(H2,8),C3e=cSt,hSt=v3e,fSt=w3e,T3e=new eo(UO,(Fn(),!1))}function j3t(t,e,n,r){switch(e){case 7:return!t.e&&(t.e=new Cn(Ws,t,7,4)),t.e;case 8:return!t.d&&(t.d=new Cn(Ws,t,8,5)),t.d}return s3t(t,e,n,r)}function lst(t){var e;return t.a&&t.a.kh()&&(e=u(t.a,49),t.a=u(Kp(t,e),138),t.a!=e&&t.Db&4&&!(t.Db&1)&&mi(t,new Qs(t,9,5,e,t.a))),t.a}function b2(t){return t<48||t>102?-1:t<=57?t-48:t<65?-1:t<=70?t-65+10:t<97?-1:t-97+10}function hst(t,e){if(t==null)throw rt(new yx("null key in entry: null="+e));if(e==null)throw rt(new yx("null value in entry: "+t+"=null"))}function ifn(t,e){for(var n,r;t.Ob();)if(!e.Ob()||(n=t.Pb(),r=e.Pb(),!(Gt(n)===Gt(r)||n!=null&&yi(n,r))))return!1;return!e.Ob()}function ase(t,e){var n;return n=ct(ot(ia,1),vo,25,15,[Mit(t.a[0],e),Mit(t.a[1],e),Mit(t.a[2],e)]),t.d&&(n[0]=b.Math.max(n[0],n[2]),n[2]=n[0]),n}function ose(t,e){var n;return n=ct(ot(ia,1),vo,25,15,[wz(t.a[0],e),wz(t.a[1],e),wz(t.a[2],e)]),t.d&&(n[0]=b.Math.max(n[0],n[2]),n[2]=n[0]),n}function v2(){v2=Z,mlt=new EM("GREEDY",0),STt=new EM(h1e,1),ylt=new EM(jot,2),pS=new EM("MODEL_ORDER",3),gS=new EM("GREEDY_MODEL_ORDER",4)}function cse(t,e){var n,r,s;for(t.b[e.g]=1,r=ei(e.d,0);r.b!=r.d.c;)n=u(ti(r),188),s=n.c,t.b[s.g]==1?ni(t.a,n):t.b[s.g]==2?t.b[s.g]=1:cse(t,s)}function sfn(t,e){var n,r,s;for(s=new Yc(e.gc()),r=e.Kc();r.Ob();)n=u(r.Pb(),286),n.c==n.f?pE(t,n,n.c):rgn(t,n)||(s.c[s.c.length]=n);return s}function afn(t,e,n){var r,s,o,h,d;for(d=t.r+e,t.r+=e,t.d+=n,r=n/t.n.c.length,s=0,h=new S(t.n);h.a<h.c.c.length;)o=u(J(h),211),pbn(o,d,r,s),++s}function ofn(t){var e,n,r;for(O9(t.b.a),t.a=Pt(XH,Ie,57,t.c.c.a.b.c.length,0,1),e=0,r=new S(t.c.c.a.b);r.a<r.c.c.length;)n=u(J(r),57),n.f=e++}function cfn(t){var e,n,r;for(O9(t.b.a),t.a=Pt(Yut,Ie,81,t.c.a.a.b.c.length,0,1),e=0,r=new S(t.c.a.a.b);r.a<r.c.c.length;)n=u(J(r),81),n.i=e++}function ufn(t,e,n){var r;wr(n,"Shrinking tree compaction",1),je(Re(Q(e,(G8(),uS))))?(Eon(t,e.f),zte(e.f,(r=e.c,r))):zte(e.f,e.c),or(n)}function use(t){var e;if(e=uun(t),!zr(t))throw rt(new mo("position (0) must be less than the number of elements that remained ("+e+")"));return Lr(t)}function lse(t,e,n){var r;try{return l4(t,e+t.j,n+t.k)}catch(s){throw s=Wi(s),Et(s,73)?(r=s,rt(new mo(r.g+$q+e+Ka+n+")."))):rt(s)}}function lfn(t,e,n){var r;try{return dse(t,e+t.j,n+t.k)}catch(s){throw s=Wi(s),Et(s,73)?(r=s,rt(new mo(r.g+$q+e+Ka+n+")."))):rt(s)}}function hfn(t,e,n){var r;try{return gse(t,e+t.j,n+t.k)}catch(s){throw s=Wi(s),Et(s,73)?(r=s,rt(new mo(r.g+$q+e+Ka+n+")."))):rt(s)}}function hse(t){switch(t.g){case 1:return be(),Bn;case 4:return be(),Nn;case 3:return be(),Hn;case 2:return be(),mr;default:return be(),Zo}}function ffn(t,e,n){e.k==(Gn(),Ds)&&n.k==Zs&&(t.d=Nit(e,(be(),mr)),t.b=Nit(e,Nn)),n.k==Ds&&e.k==Zs&&(t.d=Nit(n,(be(),Nn)),t.b=Nit(n,mr))}function fst(t,e){var n,r,s;for(s=Yo(t,e),r=s.Kc();r.Ob();)if(n=u(r.Pb(),11),Q(n,(se(),Zu))!=null||pC(new S1(n.b)))return!0;return!1}function $3t(t,e){return yu(e,t.e+t.d+(t.c.c.length==0?0:t.b)),xu(e,t.f),t.a=b.Math.max(t.a,e.f),t.d+=e.g+(t.c.c.length==0?0:t.b),ue(t.c,e),!0}function dfn(t,e,n){var r,s,o,h;for(h=0,r=n/t.a.c.length,o=new S(t.a);o.a<o.c.c.length;)s=u(J(o),187),YI(s,s.s,s.t+h*r),afn(s,t.d-s.r+e,r),++h}function gfn(t){var e,n,r,s,o;for(r=new S(t.b);r.a<r.c.c.length;)for(n=u(J(r),29),e=0,o=new S(n.a);o.a<o.c.c.length;)s=u(J(o),10),s.p=e++}function pfn(t,e){var n,r,s,o,h,d;for(s=e.length-1,h=0,d=0,r=0;r<=s;r++)o=e[r],n=N0n(s,r)*Gyt(1-t,s-r)*Gyt(t,r),h+=o.a*n,d+=o.b*n;return new $e(h,d)}function fse(t,e){var n,r,s,o,h;for(n=e.gc(),t.qi(t.i+n),o=e.Kc(),h=t.i,t.i+=n,r=h;r<t.i;++r)s=o.Pb(),fC(t,r,t.oi(r,s)),t.bi(r,s),t.ci();return n!=0}function bfn(t,e,n){var r,s,o;return t.ej()?(r=t.Vi(),o=t.fj(),++t.j,t.Hi(r,t.oi(r,e)),s=t.Zi(3,null,e,r,o),n?n.Ei(s):n=s):AWt(t,t.Vi(),e),n}function vfn(t,e,n){var r,s,o;return r=u(St(Lc(t.a),e),87),o=(s=r.c,Et(s,88)?u(s,26):(dn(),Wh)),(o.Db&64?Kp(t.b,o):o)==n?wq(r):P8(r,n),o}function z3t(t,e,n,r,s,o,h,d){var w,k;r&&(w=r.a[0],w&&z3t(t,e,n,w,s,o,h,d),Vfn(t,n,r.d,s,o,h,d)&&e.Fc(r),k=r.a[1],k&&z3t(t,e,n,k,s,o,h,d))}function wfn(t,e){var n;return t.a||(n=Pt(ia,vo,25,0,15,1),B3(t.b.a,new ne(n)),n.sort(wee(xt.prototype.te,xt,[])),t.a=new aKt(n,t.d)),M$(t.a,e)}function l4(t,e,n){try{return Av(ait(t,e,n),1)}catch(r){throw r=Wi(r),Et(r,320)?rt(new mo(Tot+t.o+"*"+t.p+Cot+e+Ka+n+_ot)):rt(r)}}function dse(t,e,n){try{return Av(ait(t,e,n),0)}catch(r){throw r=Wi(r),Et(r,320)?rt(new mo(Tot+t.o+"*"+t.p+Cot+e+Ka+n+_ot)):rt(r)}}function gse(t,e,n){try{return Av(ait(t,e,n),2)}catch(r){throw r=Wi(r),Et(r,320)?rt(new mo(Tot+t.o+"*"+t.p+Cot+e+Ka+n+_ot)):rt(r)}}function pse(t,e){if(t.g==-1)throw rt(new Iu);t.mj();try{t.d._c(t.g,e),t.f=t.d.j}catch(n){throw n=Wi(n),Et(n,73)?rt(new eh):rt(n)}}function mfn(t,e,n){wr(n,"Linear segments node placement",1),t.b=u(Q(e,(se(),Y4)),304),O5n(t,e),byn(t,e),Dyn(t,e),f5n(t),t.a=null,t.b=null,or(n)}function XI(t,e){var n,r,s,o;for(o=t.gc(),e.length<o&&(e=wR(new Array(o),e)),s=e,r=t.Kc(),n=0;n<o;++n)Ji(s,n,r.Pb());return e.length>o&&Ji(e,o,null),e}function yfn(t,e){var n,r;if(r=t.gc(),e==null){for(n=0;n<r;n++)if(t.Xb(n)==null)return n}else for(n=0;n<r;n++)if(yi(e,t.Xb(n)))return n;return-1}function dst(t,e){var n,r,s;return n=e.cd(),s=e.dd(),r=t.xc(n),!(!(Gt(s)===Gt(r)||s!=null&&yi(s,r))||r==null&&!t._b(n))}function xfn(t,e){var n,r,s;return e<=22?(n=t.l&(1<<e)-1,r=s=0):e<=44?(n=t.l,r=t.m&(1<<e-22)-1,s=0):(n=t.l,r=t.m,s=t.h&(1<<e-44)-1),ru(n,r,s)}function kfn(t,e){switch(e.g){case 1:return t.f.n.d+t.t;case 3:return t.f.n.a+t.t;case 2:return t.f.n.c+t.s;case 4:return t.f.n.b+t.s;default:return 0}}function Efn(t,e){var n,r;switch(r=e.c,n=e.a,t.b.g){case 0:n.d=t.e-r.a-r.d;break;case 1:n.d+=t.e;break;case 2:n.c=t.e-r.a-r.d;break;case 3:n.c=t.e+r.d}}function q3t(t,e,n,r){var s,o;this.a=e,this.c=r,s=t.a,rpt(this,new $e(-s.c,-s.d)),Li(this.b,n),o=r/2,e.a?BM(this.b,0,o):BM(this.b,o,0),ue(t.c,this)}function Gz(){Gz=Z,Rht=new WR(K0,0),__t=new WR(f1e,1),S_t=new WR("EDGE_LENGTH_BY_POSITION",2),C_t=new WR("CROSSING_MINIMIZATION_BY_POSITION",3)}function gst(t,e){var n,r;if(n=u(t4(t.g,e),33),n)return n;if(r=u(t4(t.j,e),118),r)return r;throw rt(new ad("Referenced shape does not exist: "+e))}function Tfn(t,e){if(t.c==e)return t.d;if(t.d==e)return t.c;throw rt(new Pn("Node 'one' must be either source or target of edge 'edge'."))}function Cfn(t,e){if(t.c.i==e)return t.d.i;if(t.d.i==e)return t.c.i;throw rt(new Pn("Node "+e+" is neither source nor target of edge "+t))}function _fn(t,e){var n;switch(e.g){case 2:case 4:n=t.a,t.c.d.n.b<n.d.n.b&&(n=t.c),_g(t,e,(M1(),olt),n);break;case 1:case 3:_g(t,e,(M1(),_6),null)}}function pst(t,e,n,r,s,o){var h,d,w,k,C;for(h=L1n(e,n,o),d=n==(be(),Nn)||n==Bn?-1:1,k=t[n.g],C=0;C<k.length;C++)w=k[C],w>0&&(w+=s),k[C]=h,h+=d*(w+r)}function bse(t){var e,n,r;for(r=t.f,t.n=Pt(ia,vo,25,r,15,1),t.d=Pt(ia,vo,25,r,15,1),e=0;e<r;e++)n=u(Fe(t.c.b,e),29),t.n[e]=Uie(t,n),t.d[e]=Sce(t,n)}function bst(t,e){var n,r,s;for(s=0,r=2;r<e;r<<=1)t.Db&r&&++s;if(s==0){for(n=e<<=1;n<=128;n<<=1)if(t.Db&n)return 0;return-1}else return s}function vse(t,e){var n,r,s,o,h;for(h=au(t.e.Tg(),e),o=null,n=u(t.g,119),s=0;s<t.i;++s)r=n[s],h.rl(r.ak())&&(!o&&(o=new tx),Mr(o,r));o&&Lhe(t,o)}function wse(t){var e,n,r;if(!t)return null;if(t.dc())return"";for(r=new xg,n=t.Kc();n.Ob();)e=n.Pb(),fo(r,Br(e)),r.a+=" ";return Wet(r,r.a.length-1)}function H3t(t,e,n){var r,s,o,h,d;for(Dcn(t),s=(t.k==null&&(t.k=Pt(yut,te,78,0,0,1)),t.k),o=0,h=s.length;o<h;++o)r=s[o],H3t(r);d=t.f,d&&H3t(d)}function mse(t,e){var n=new Array(e),r;switch(t){case 14:case 15:r=0;break;case 16:r=!1;break;default:return n}for(var s=0;s<e;++s)n[s]=r;return n}function ow(t){var e,n,r;for(n=new S(t.a.b);n.a<n.c.c.length;)e=u(J(n),57),e.c.$b();Op(t.d)?r=t.a.c:r=t.a.d,mu(r,new vr(t)),t.c.Me(t),Gce(t)}function yse(t){var e,n,r,s;for(n=new S(t.e.c);n.a<n.c.c.length;){for(e=u(J(n),282),s=new S(e.b);s.a<s.c.c.length;)r=u(J(s),447),axt(r);foe(e)}}function Vz(t){var e,n,r,s,o;for(r=0,o=0,s=0,n=new S(t.a);n.a<n.c.c.length;)e=u(J(n),187),o=b.Math.max(o,e.r),r+=e.d+(s>0?t.c:0),++s;t.b=r,t.d=o}function Sfn(t,e){var n,r,s,o,h;for(r=0,s=0,n=0,h=new S(e);h.a<h.c.c.length;)o=u(J(h),200),r=b.Math.max(r,o.e),s+=o.b+(n>0?t.g:0),++n;t.c=s,t.d=r}function xse(t,e){var n;return n=ct(ot(ia,1),vo,25,15,[F3t(t,(Kf(),sc),e),F3t(t,tu,e),F3t(t,ac,e)]),t.f&&(n[0]=b.Math.max(n[0],n[2]),n[2]=n[0]),n}function Afn(t,e,n){var r;try{bq(t,e+t.j,n+t.k,!1,!0)}catch(s){throw s=Wi(s),Et(s,73)?(r=s,rt(new mo(r.g+$q+e+Ka+n+")."))):rt(s)}}function Lfn(t,e,n){var r;try{bq(t,e+t.j,n+t.k,!0,!1)}catch(s){throw s=Wi(s),Et(s,73)?(r=s,rt(new mo(r.g+$q+e+Ka+n+")."))):rt(s)}}function kse(t){var e;Vs(t,(Te(),Ow))&&(e=u(Q(t,Ow),21),e.Hc((fy(),Ef))?(e.Mc(Ef),e.Fc(Tf)):e.Hc(Tf)&&(e.Mc(Tf),e.Fc(Ef)))}function Ese(t){var e;Vs(t,(Te(),Ow))&&(e=u(Q(t,Ow),21),e.Hc((fy(),_f))?(e.Mc(_f),e.Fc(zh)):e.Hc(zh)&&(e.Mc(zh),e.Fc(_f)))}function Mfn(t,e,n){wr(n,"Self-Loop ordering",1),us(pu(Ri(Ri(Wo(new Tn(null,new _n(e.b,16)),new cF),new UY),new WY),new KY),new _m(t)),or(n)}function QI(t,e,n,r){var s,o;for(s=e;s<t.c.length;s++)if(o=(An(s,t.c.length),u(t.c[s],11)),n.Mb(o))r.c[r.c.length]=o;else return s;return t.c.length}function vst(t,e,n,r){var s,o,h,d;return t.a==null&&O0n(t,e),h=e.b.j.c.length,o=n.d.p,d=r.d.p,s=d-1,s<0&&(s=h-1),o<=s?t.a[s]-t.a[o]:t.a[h-1]-t.a[o]+t.a[s]}function Ifn(t){var e,n;if(!t.b)for(t.b=y$(u(t.f,33).Ag().i),n=new er(u(t.f,33).Ag());n.e!=n.i.gc();)e=u(dr(n),137),ue(t.b,new net(e));return t.b}function Dfn(t){var e,n;if(!t.e)for(t.e=y$(Znt(u(t.f,33)).i),n=new er(Znt(u(t.f,33)));n.e!=n.i.gc();)e=u(dr(n),118),ue(t.e,new Ezt(e));return t.e}function Tse(t){var e,n;if(!t.a)for(t.a=y$(i$(u(t.f,33)).i),n=new er(i$(u(t.f,33)));n.e!=n.i.gc();)e=u(dr(n),33),ue(t.a,new rnt(t,e));return t.a}function cw(t){var e;if(!t.C&&(t.D!=null||t.B!=null))if(e=J3n(t),e)t.yk(e);else try{t.yk(null)}catch(n){if(n=Wi(n),!Et(n,60))throw rt(n)}return t.C}function Ofn(t){switch(t.q.g){case 5:Kse(t,(be(),Nn)),Kse(t,mr);break;case 4:$le(t,(be(),Nn)),$le(t,mr);break;default:Yae(t,(be(),Nn)),Yae(t,mr)}}function Nfn(t){switch(t.q.g){case 5:Yse(t,(be(),Hn)),Yse(t,Bn);break;case 4:zle(t,(be(),Hn)),zle(t,Bn);break;default:Xae(t,(be(),Hn)),Xae(t,Bn)}}function h4(t,e){var n,r,s;for(s=new Ta,r=t.Kc();r.Ob();)n=u(r.Pb(),37),w_(n,s.a,0),s.a+=n.f.a+e,s.b=b.Math.max(s.b,n.f.b);return s.b>0&&(s.b+=e),s}function Uz(t,e){var n,r,s;for(s=new Ta,r=t.Kc();r.Ob();)n=u(r.Pb(),37),w_(n,0,s.b),s.b+=n.f.b+e,s.a=b.Math.max(s.a,n.f.a);return s.a>0&&(s.a+=e),s}function Cse(t){var e,n,r;for(r=vi,n=new S(t.a);n.a<n.c.c.length;)e=u(J(n),10),Vs(e,(se(),Tc))&&(r=b.Math.min(r,u(Q(e,Tc),19).a));return r}function _se(t,e){var n,r;if(e.length==0)return 0;for(n=Qnt(t.a,e[0],(be(),Bn)),n+=Qnt(t.a,e[e.length-1],Hn),r=0;r<e.length;r++)n+=v0n(t,r,e);return n}function Sse(){b_(),this.c=new le,this.i=new le,this.e=new A0,this.f=new A0,this.g=new A0,this.j=new le,this.a=new le,this.b=new Cr,this.k=new Cr}function wst(t,e){var n,r;return t.Db>>16==6?t.Cb.ih(t,5,r1,e):(r=no(u(yn((n=u(In(t,16),26),n||t.zh()),t.Db>>16),18)),t.Cb.ih(t,r.n,r.f,e))}function Pfn(t){T8();var e=t.e;if(e&&e.stack){var n=e.stack,r=e+`
`;return n.substring(0,r.length)==r&&(n=n.substring(r.length)),n.split(`
`)}return[]}function Ffn(t){var e;return e=(qee(),kge),e[t>>>28]|e[t>>24&15]<<4|e[t>>20&15]<<8|e[t>>16&15]<<12|e[t>>12&15]<<16|e[t>>8&15]<<20|e[t>>4&15]<<24|e[t&15]<<28}function Ase(t){var e,n,r;t.b==t.c&&(r=t.a.length,n=Tyt(b.Math.max(8,r))<<1,t.b!=0?(e=uf(t.a,n),Xee(t,e,r),t.a=e,t.b=0):Yzt(t.a,n),t.c=r)}function Bfn(t,e){var n;return n=t.b,n.Xe((ci(),hl))?n.Hf()==(be(),Bn)?-n.rf().a-Xt(ye(n.We(hl))):e+Xt(ye(n.We(hl))):n.Hf()==(be(),Bn)?-n.rf().a:e}function ZI(t){var e;return t.b.c.length!=0&&u(Fe(t.b,0),70).a?u(Fe(t.b,0),70).a:(e=rrt(t),e??""+(t.c?Ro(t.c.a,t,0):-1))}function Wz(t){var e;return t.f.c.length!=0&&u(Fe(t.f,0),70).a?u(Fe(t.f,0),70).a:(e=rrt(t),e??""+(t.i?Ro(t.i.j,t,0):-1))}function Rfn(t,e){var n,r;if(e<0||e>=t.gc())return null;for(n=e;n<t.gc();++n)if(r=u(t.Xb(n),128),n==t.gc()-1||!r.o)return new la(de(n),r);return null}function jfn(t,e,n){var r,s,o,h,d;for(o=t.c,d=n?e:t,r=n?t:e,s=d.p+1;s<r.p;++s)if(h=u(Fe(o.a,s),10),!(h.k==(Gn(),j1)||d1n(h)))return!1;return!0}function G3t(t){var e,n,r,s,o;for(o=0,s=Ts,r=0,n=new S(t.a);n.a<n.c.c.length;)e=u(J(n),187),o+=e.r+(r>0?t.c:0),s=b.Math.max(s,e.d),++r;t.e=o,t.b=s}function $fn(t){var e,n;if(!t.b)for(t.b=y$(u(t.f,118).Ag().i),n=new er(u(t.f,118).Ag());n.e!=n.i.gc();)e=u(dr(n),137),ue(t.b,new net(e));return t.b}function zfn(t,e){var n,r,s;if(e.dc())return f8(),f8(),lN;for(n=new IWt(t,e.gc()),s=new er(t);s.e!=s.i.gc();)r=dr(s),e.Hc(r)&&Mr(n,r);return n}function V3t(t,e,n,r){return e==0?r?(!t.o&&(t.o=new Tl((Zc(),Eb),$w,t,0)),t.o):(!t.o&&(t.o=new Tl((Zc(),Eb),$w,t,0)),fI(t.o)):jz(t,e,n,r)}function mst(t){var e,n;if(t.rb)for(e=0,n=t.rb.i;e<n;++e)FM(St(t.rb,e));if(t.vb)for(e=0,n=t.vb.i;e<n;++e)FM(St(t.vb,e));kC((Ru(),ma),t),t.Bb|=1}function Fi(t,e,n,r,s,o,h,d,w,k,C,M,F,H){return ioe(t,e,r,null,s,o,h,d,w,k,F,!0,H),e3t(t,C),Et(t.Cb,88)&&hy(rl(u(t.Cb,88)),2),n&&eyt(t,n),n3t(t,M),t}function qfn(t){var e,n;if(t==null)return null;n=0;try{n=$l(t,_a,vi)&ms}catch(r){if(r=Wi(r),Et(r,127))e=R$(t),n=e[0];else throw rt(r)}return DI(n)}function Hfn(t){var e,n;if(t==null)return null;n=0;try{n=$l(t,_a,vi)&ms}catch(r){if(r=Wi(r),Et(r,127))e=R$(t),n=e[0];else throw rt(r)}return DI(n)}function Gfn(t,e){var n,r,s;return s=t.h-e.h,s<0||(n=t.l-e.l,r=t.m-e.m+(n>>22),s+=r>>22,s<0)?!1:(t.l=n&ul,t.m=r&ul,t.h=s&W0,!0)}function Vfn(t,e,n,r,s,o,h){var d,w;return!(e.Ae()&&(w=t.a.ue(n,r),w<0||!s&&w==0)||e.Be()&&(d=t.a.ue(n,o),d>0||!h&&d==0))}function Ufn(t,e){J8();var n;if(n=t.j.g-e.j.g,n!=0)return 0;switch(t.j.g){case 2:return qit(e,mTt)-qit(t,mTt);case 4:return qit(t,wTt)-qit(e,wTt)}return 0}function Wfn(t){switch(t.g){case 0:return klt;case 1:return Elt;case 2:return Tlt;case 3:return Clt;case 4:return PG;case 5:return _lt;default:return null}}function Co(t,e,n){var r,s;return r=(s=new Ktt,f2(s,e),Xc(s,n),Mr((!t.c&&(t.c=new he(zw,t,12,10)),t.c),s),s),Ig(r,0),ty(r,1),Pg(r,!0),Ng(r,!0),r}function r6(t,e){var n,r;if(e>=t.i)throw rt(new Vet(e,t.i));return++t.j,n=t.g[e],r=t.i-e-1,r>0&&Ic(t.g,e+1,t.g,e,r),Ji(t.g,--t.i,null),t.fi(e,n),t.ci(),n}function Lse(t,e){var n,r;return t.Db>>16==17?t.Cb.ih(t,21,Gh,e):(r=no(u(yn((n=u(In(t,16),26),n||t.zh()),t.Db>>16),18)),t.Cb.ih(t,r.n,r.f,e))}function Kfn(t){var e,n,r,s;for(vn(),Xs(t.c,t.a),s=new S(t.c);s.a<s.c.c.length;)for(r=J(s),n=new S(t.b);n.a<n.c.c.length;)e=u(J(n),679),e.Ke(r)}function Yfn(t){var e,n,r,s;for(vn(),Xs(t.c,t.a),s=new S(t.c);s.a<s.c.c.length;)for(r=J(s),n=new S(t.b);n.a<n.c.c.length;)e=u(J(n),369),e.Ke(r)}function Xfn(t){var e,n,r,s,o;for(s=vi,o=null,r=new S(t.d);r.a<r.c.c.length;)n=u(J(r),213),n.d.j^n.e.j&&(e=n.e.e-n.d.e-n.a,e<s&&(s=e,o=n));return o}function U3t(){U3t=Z,ube=new mn(h6t,(Fn(),!1)),abe=new mn(f6t,100),v7t=(jC(),Wut),obe=new mn(d6t,v7t),cbe=new mn(g6t,yd),lbe=new mn(p6t,de(vi))}function Mse(t,e,n){var r,s,o,h,d,w,k,C;for(k=0,s=t.a[e],o=0,h=s.length;o<h;++o)for(r=s[o],C=QC(r,n),w=C.Kc();w.Ob();)d=u(w.Pb(),11),ki(t.f,d,de(k++))}function Qfn(t,e,n){var r,s,o,h;if(n)for(s=n.a.length,r=new Qb(s),h=(r.b-r.a)*r.c<0?(Ip(),Ab):new Pp(r);h.Ob();)o=u(h.Pb(),19),ln(t,e,s6(Xm(n,o.a)))}function Zfn(t,e,n){var r,s,o,h;if(n)for(s=n.a.length,r=new Qb(s),h=(r.b-r.a)*r.c<0?(Ip(),Ab):new Pp(r);h.Ob();)o=u(h.Pb(),19),ln(t,e,s6(Xm(n,o.a)))}function W3t(t){Zp();var e;return e=u(XI(Px(t.k),Pt(Xa,xc,61,2,0,1)),122),D8(e,0,e.length,null),e[0]==(be(),Nn)&&e[1]==Bn&&(Ji(e,0,Bn),Ji(e,1,Nn)),e}function Ise(t,e,n){var r,s,o;return s=B2n(t,e,n),o=N5t(t,s),Hrt(t.b),xrt(t,e,n),vn(),Xs(s,new p$t(t)),r=N5t(t,s),Hrt(t.b),xrt(t,n,e),new la(de(o),de(r))}function Dse(){Dse=Z,mme=bi(new Hs,(Wa(),Io),(ro(),fS)),pV=new Os("linearSegments.inputPrio",de(0)),bV=new Os("linearSegments.outputPrio",de(0))}function uE(){uE=Z,vV=new UR("P1_TREEIFICATION",0),PS=new UR("P2_NODE_ORDERING",1),PO=new UR("P3_NODE_PLACEMENT",2),FS=new UR("P4_EDGE_ROUTING",3)}function ay(){ay=Z,Nye=(ci(),z6),Pye=H2,Mye=z2,Iye=a5,Dye=vb,Lye=s5,k_t=YO,Oye=Ky,Fht=(b5t(),kye),Bht=Eye,E_t=Tye,_V=Cye,SV=_ye,BO=Sye,T_t=Aye}function jl(){jl=Z,ZO=new YR("UNKNOWN",0),u0=new YR("ABOVE",1),wb=new YR("BELOW",2),QO=new YR("INLINE",3),new Os("org.eclipse.elk.labelSide",ZO)}function Ose(t,e){var n;if(t.ni()&&e!=null){for(n=0;n<t.i;++n)if(yi(e,t.g[n]))return n}else for(n=0;n<t.i;++n)if(Gt(t.g[n])===Gt(e))return n;return-1}function Jfn(t,e,n){var r,s;return e.c==(so(),eu)&&n.c==Ju?-1:e.c==Ju&&n.c==eu?1:(r=Tre(e.a,t.a),s=Tre(n.a,t.a),e.c==eu?s-r:r-s)}function oy(t,e,n){if(n&&(e<0||e>n.a.c.length))throw rt(new Pn("index must be >= 0 and <= layer node count"));t.c&&vu(t.c.a,t),t.c=n,n&&$m(n.a,e,t)}function Nse(t,e){var n,r,s;for(r=new ar(lr(z0(t).a.Kc(),new z));zr(r);)return n=u(Lr(r),17),s=u(e.Kb(n),10),new jk(Ar(s.n.b+s.o.b/2));return I9(),I9(),gut}function Pse(t,e){this.c=new Cr,this.a=t,this.b=e,this.d=u(Q(t,(se(),Y4)),304),Gt(Q(t,(Te(),iCt)))===Gt((bI(),FG))?this.e=new fqt:this.e=new hqt}function t1n(t,e){var n,r,s,o;for(o=0,r=new S(t);r.a<r.c.c.length;)n=u(J(r),33),o+=b.Math.pow(n.g*n.f-e,2);return s=b.Math.sqrt(o/(t.c.length-1)),s}function o_(t,e){var n,r;return r=null,t.Xe((ci(),q6))&&(n=u(t.We(q6),94),n.Xe(e)&&(r=n.We(e))),r==null&&t.yf()&&(r=t.yf().We(e)),r==null&&(r=De(e)),r}function yst(t,e){var n,r;n=t.Zc(e);try{return r=n.Pb(),n.Qb(),r}catch(s){throw s=Wi(s),Et(s,109)?rt(new mo("Can't remove element "+e)):rt(s)}}function e1n(t,e){var n,r,s;if(r=new _R,s=new Eyt(r.q.getFullYear()-nb,r.q.getMonth(),r.q.getDate()),n=nyn(t,e,s),n==0||n<e.length)throw rt(new Pn(e));return s}function K3t(t,e){var n,r,s;for(On(e),P2t(e!=t),s=t.b.c.length,r=e.Kc();r.Ob();)n=r.Pb(),ue(t.b,On(n));return s!=t.b.c.length?(Nyt(t,0),!0):!1}function JI(){JI=Z,x7t=(ci(),RV),new eo(rft,(Fn(),!0)),fbe=z2,dbe=a5,gbe=vb,hbe=s5,E7t=YO,pbe=Ky,y7t=(U3t(),ube),w7t=obe,m7t=cbe,k7t=lbe,oG=abe}function n1n(t,e){if(e==t.c)return t.d;if(e==t.d)return t.c;throw rt(new Pn("'port' must be either the source port or target port of the edge."))}function r1n(t,e,n){var r,s;switch(s=t.o,r=t.d,e.g){case 1:return-r.d-n;case 3:return s.b+r.a+n;case 2:return s.a+r.c+n;case 4:return-r.b-n;default:return 0}}function Y3t(t,e,n,r){var s,o,h,d;for(ko(e,u(r.Xb(0),29)),d=r.bd(1,r.gc()),o=u(n.Kb(e),20).Kc();o.Ob();)s=u(o.Pb(),17),h=s.c.i==e?s.d.i:s.c.i,Y3t(t,h,n,d)}function Fse(t){var e;return e=new Cr,Vs(t,(se(),jlt))?u(Q(t,jlt),83):(us(Ri(new Tn(null,new _n(t.j,16)),new iX),new px(e)),Jt(t,jlt,e),e)}function X3t(t,e){var n,r;return t.Db>>16==6?t.Cb.ih(t,6,Ws,e):(r=no(u(yn((n=u(In(t,16),26),n||(Zc(),YV)),t.Db>>16),18)),t.Cb.ih(t,r.n,r.f,e))}function Q3t(t,e){var n,r;return t.Db>>16==7?t.Cb.ih(t,1,sN,e):(r=no(u(yn((n=u(In(t,16),26),n||(Zc(),RAt)),t.Db>>16),18)),t.Cb.ih(t,r.n,r.f,e))}function Z3t(t,e){var n,r;return t.Db>>16==9?t.Cb.ih(t,9,ns,e):(r=no(u(yn((n=u(In(t,16),26),n||(Zc(),$At)),t.Db>>16),18)),t.Cb.ih(t,r.n,r.f,e))}function Bse(t,e){var n,r;return t.Db>>16==5?t.Cb.ih(t,9,iU,e):(r=no(u(yn((n=u(In(t,16),26),n||(dn(),tp)),t.Db>>16),18)),t.Cb.ih(t,r.n,r.f,e))}function J3t(t,e){var n,r;return t.Db>>16==3?t.Cb.ih(t,0,oN,e):(r=no(u(yn((n=u(In(t,16),26),n||(dn(),Jg)),t.Db>>16),18)),t.Cb.ih(t,r.n,r.f,e))}function Rse(t,e){var n,r;return t.Db>>16==7?t.Cb.ih(t,6,r1,e):(r=no(u(yn((n=u(In(t,16),26),n||(dn(),np)),t.Db>>16),18)),t.Cb.ih(t,r.n,r.f,e))}function jse(){this.a=new XF,this.g=new Hz,this.j=new Hz,this.b=new Cr,this.d=new Hz,this.i=new Hz,this.k=new Cr,this.c=new Cr,this.e=new Cr,this.f=new Cr}function i1n(t,e,n){var r,s,o;for(n<0&&(n=0),o=t.i,s=n;s<o;s++)if(r=St(t,s),e==null){if(r==null)return s}else if(Gt(e)===Gt(r)||yi(e,r))return s;return-1}function s1n(t,e){var n,r;return n=e.Hh(t.a),n?(r=Br(Yf((!n.b&&(n.b=new yl((dn(),Qa),cc,n)),n.b),OH)),hn(tO,r)?kC(t,Fl(e.Hj())):r):null}function lE(t,e){var n,r;if(e){if(e==t)return!0;for(n=0,r=u(e,49).eh();r&&r!=e;r=r.eh()){if(++n>oot)return lE(t,r);if(r==t)return!0}}return!1}function a1n(t){switch(gj(),t.q.g){case 5:Eoe(t,(be(),Nn)),Eoe(t,mr);break;case 4:wce(t,(be(),Nn)),wce(t,mr);break;default:whe(t,(be(),Nn)),whe(t,mr)}}function o1n(t){switch(gj(),t.q.g){case 5:Roe(t,(be(),Hn)),Roe(t,Bn);break;case 4:Yie(t,(be(),Hn)),Yie(t,Bn);break;default:mhe(t,(be(),Hn)),mhe(t,Bn)}}function c1n(t){var e,n;e=u(Q(t,(Zf(),rbe)),19),e?(n=e.a,n==0?Jt(t,(Gp(),aG),new zit):Jt(t,(Gp(),aG),new T$(n))):Jt(t,(Gp(),aG),new T$(1))}function u1n(t,e){var n;switch(n=t.i,e.g){case 1:return-(t.n.b+t.o.b);case 2:return t.n.a-n.o.a;case 3:return t.n.b-n.o.b;case 4:return-(t.n.a+t.o.a)}return 0}function l1n(t,e){switch(t.g){case 0:return e==(hh(),fb)?_G:SG;case 1:return e==(hh(),fb)?_G:vO;case 2:return e==(hh(),fb)?vO:SG;default:return vO}}function tD(t,e){var n,r,s;for(vu(t.a,e),t.e-=e.r+(t.a.c.length==0?0:t.c),s=jkt,r=new S(t.a);r.a<r.c.c.length;)n=u(J(r),187),s=b.Math.max(s,n.d);t.b=s}function t4t(t,e){var n,r;return t.Db>>16==3?t.Cb.ih(t,12,ns,e):(r=no(u(yn((n=u(In(t,16),26),n||(Zc(),BAt)),t.Db>>16),18)),t.Cb.ih(t,r.n,r.f,e))}function e4t(t,e){var n,r;return t.Db>>16==11?t.Cb.ih(t,10,ns,e):(r=no(u(yn((n=u(In(t,16),26),n||(Zc(),jAt)),t.Db>>16),18)),t.Cb.ih(t,r.n,r.f,e))}function $se(t,e){var n,r;return t.Db>>16==10?t.Cb.ih(t,11,Gh,e):(r=no(u(yn((n=u(In(t,16),26),n||(dn(),ep)),t.Db>>16),18)),t.Cb.ih(t,r.n,r.f,e))}function zse(t,e){var n,r;return t.Db>>16==10?t.Cb.ih(t,12,Vh,e):(r=no(u(yn((n=u(In(t,16),26),n||(dn(),e3)),t.Db>>16),18)),t.Cb.ih(t,r.n,r.f,e))}function Lh(t){var e;return!(t.Bb&1)&&t.r&&t.r.kh()&&(e=u(t.r,49),t.r=u(Kp(t,e),138),t.r!=e&&t.Db&4&&!(t.Db&1)&&mi(t,new Qs(t,9,8,e,t.r))),t.r}function xst(t,e,n){var r;return r=ct(ot(ia,1),vo,25,15,[_4t(t,(Kf(),sc),e,n),_4t(t,tu,e,n),_4t(t,ac,e,n)]),t.f&&(r[0]=b.Math.max(r[0],r[2]),r[2]=r[0]),r}function h1n(t,e){var n,r,s;if(s=sfn(t,e),s.c.length!=0)for(Xs(s,new FY),n=s.c.length,r=0;r<n;r++)pE(t,(An(r,s.c.length),u(s.c[r],286)),Ivn(t,s,r))}function f1n(t){var e,n,r,s;for(s=u(Ai(t.a,(g4(),AG)),15).Kc();s.Ob();)for(r=u(s.Pb(),101),n=Px(r.k).Kc();n.Ob();)e=u(n.Pb(),61),w8(t,r,e,(Jv(),hb),1)}function d1n(t){var e,n;if(t.k==(Gn(),Zs)){for(n=new ar(lr(z0(t).a.Kc(),new z));zr(n);)if(e=u(Lr(n),17),!Va(e)&&t.c==c4t(e,t).c)return!0}return!1}function g1n(t){var e,n;if(t.k==(Gn(),Zs)){for(n=new ar(lr(z0(t).a.Kc(),new z));zr(n);)if(e=u(Lr(n),17),!Va(e)&&e.c.i.c==e.d.i.c)return!0}return!1}function p1n(t,e){var n,r,s,o;for(wr(e,"Dull edge routing",1),o=ei(t.b,0);o.b!=o.d.c;)for(s=u(ti(o),86),r=ei(s.d,0);r.b!=r.d.c;)n=u(ti(r),188),_h(n.a)}function b1n(t,e){var n,r,s,o,h;if(e)for(s=e.a.length,n=new Qb(s),h=(n.b-n.a)*n.c<0?(Ip(),Ab):new Pp(n);h.Ob();)o=u(h.Pb(),19),r=_8(e,o.a),r&&hce(t,r)}function v1n(){vbt();var t,e;for(F5n((jp(),Ln)),A5n(Ln),mst(Ln),tLt=(dn(),V1),e=new S(uLt);e.a<e.c.c.length;)t=u(J(e),241),_E(t,V1,null);return!0}function n4t(t,e){var n,r,s,o,h,d,w,k;return w=t.h>>19,k=e.h>>19,w!=k?k-w:(s=t.h,d=e.h,s!=d?s-d:(r=t.m,h=e.m,r!=h?r-h:(n=t.l,o=e.l,n-o)))}function Kz(){Kz=Z,HEt=(gq(),Out),qEt=new mn(Gxt,HEt),zEt=($$(),Dut),$Et=new mn(Vxt,zEt),jEt=(Nz(),Iut),REt=new mn(Uxt,jEt),BEt=new mn(Wxt,(Fn(),!0))}function c_(t,e,n){var r,s;r=e*n,Et(t.g,145)?(s=Hx(t),s.f.d?s.f.a||(t.d.a+=r+P1):(t.d.d-=r+P1,t.d.a+=r+P1)):Et(t.g,10)&&(t.d.d-=r,t.d.a+=2*r)}function qse(t,e,n){var r,s,o,h,d;for(s=t[n.g],d=new S(e.d);d.a<d.c.c.length;)h=u(J(d),101),o=h.i,o&&o.i==n&&(r=h.d[n.g],s[r]=b.Math.max(s[r],o.j.b))}function w1n(t,e){var n,r,s,o,h;for(r=0,s=0,n=0,h=new S(e.d);h.a<h.c.c.length;)o=u(J(h),443),Vz(o),r=b.Math.max(r,o.b),s+=o.d+(n>0?t.g:0),++n;e.b=r,e.e=s}function Hse(t){var e,n,r;if(r=t.b,hGt(t.i,r.length)){for(n=r.length*2,t.b=Pt(wut,LD,317,n,0,1),t.c=Pt(wut,LD,317,n,0,1),t.f=n-1,t.i=0,e=t.a;e;e=e.c)oD(t,e,e);++t.g}}function m1n(t,e,n,r){var s,o,h,d;for(s=0;s<e.o;s++)for(o=s-e.j+n,h=0;h<e.p;h++)d=h-e.k+r,l4(e,s,h)?hfn(t,o,d)||Afn(t,o,d):gse(e,s,h)&&(lse(t,o,d)||Lfn(t,o,d))}function y1n(t,e,n){var r;r=e.c.i,r.k==(Gn(),Zs)?(Jt(t,(se(),n1),u(Q(r,n1),11)),Jt(t,Rh,u(Q(r,Rh),11))):(Jt(t,(se(),n1),e.c),Jt(t,Rh,n.d))}function hE(t,e,n){y4();var r,s,o,h,d,w;return h=e/2,o=n/2,r=b.Math.abs(t.a),s=b.Math.abs(t.b),d=1,w=1,r>h&&(d=h/r),s>o&&(w=o/s),ud(t,b.Math.min(d,w)),t}function x1n(){yq();var t,e;try{if(e=u(f4t((Mp(),Uh),GE),2014),e)return e}catch(n){if(n=Wi(n),Et(n,102))t=n,Jvt((Nr(),t));else throw rt(n)}return new J5}function k1n(){Nte();var t,e;try{if(e=u(f4t((Mp(),Uh),L2),2024),e)return e}catch(n){if(n=Wi(n),Et(n,102))t=n,Jvt((Nr(),t));else throw rt(n)}return new Em}function E1n(){yq();var t,e;try{if(e=u(f4t((Mp(),Uh),Ph),1941),e)return e}catch(n){if(n=Wi(n),Et(n,102))t=n,Jvt((Nr(),t));else throw rt(n)}return new YZ}function T1n(t,e,n){var r,s;return s=t.e,t.e=e,t.Db&4&&!(t.Db&1)&&(r=new Qs(t,1,4,s,e),n?n.Ei(r):n=r),s!=e&&(e?n=_E(t,oq(t,e),n):n=_E(t,t.a,n)),n}function Gse(){_R.call(this),this.e=-1,this.a=!1,this.p=_a,this.k=-1,this.c=-1,this.b=-1,this.g=!1,this.f=-1,this.j=-1,this.n=-1,this.i=-1,this.d=-1,this.o=_a}function C1n(t,e){var n,r,s;if(r=t.b.d.d,t.a||(r+=t.b.d.a),s=e.b.d.d,e.a||(s+=e.b.d.a),n=Ls(r,s),n==0){if(!t.a&&e.a)return-1;if(!e.a&&t.a)return 1}return n}function _1n(t,e){var n,r,s;if(r=t.b.b.d,t.a||(r+=t.b.b.a),s=e.b.b.d,e.a||(s+=e.b.b.a),n=Ls(r,s),n==0){if(!t.a&&e.a)return-1;if(!e.a&&t.a)return 1}return n}function S1n(t,e){var n,r,s;if(r=t.b.g.d,t.a||(r+=t.b.g.a),s=e.b.g.d,e.a||(s+=e.b.g.a),n=Ls(r,s),n==0){if(!t.a&&e.a)return-1;if(!e.a&&t.a)return 1}return n}function r4t(){r4t=Z,vbe=Ku(bi(bi(bi(new Hs,(Wa(),qc),(ro(),iTt)),qc,sTt),Io,aTt),Io,W7t),mbe=bi(bi(new Hs,qc,$7t),qc,K7t),wbe=Ku(new Hs,Io,X7t)}function A1n(t){var e,n,r,s,o;for(e=u(Q(t,(se(),mS)),83),o=t.n,r=e.Cc().Kc();r.Ob();)n=u(r.Pb(),306),s=n.i,s.c+=o.a,s.d+=o.b,n.c?aue(n):oue(n);Jt(t,mS,null)}function L1n(t,e,n){var r,s;switch(s=t.b,r=s.d,e.g){case 1:return-r.d-n;case 2:return s.o.a+r.c+n;case 3:return s.o.b+r.a+n;case 4:return-r.b-n;default:return-1}}function M1n(t){var e,n,r,s,o;if(r=0,s=FE,t.b)for(e=0;e<360;e++)n=e*.017453292519943295,W5t(t,t.d,0,0,I4,n),o=t.b.ig(t.d),o<s&&(r=n,s=o);W5t(t,t.d,0,0,I4,r)}function I1n(t,e){var n,r,s,o;for(o=new Cr,e.e=null,e.f=null,r=new S(e.i);r.a<r.c.c.length;)n=u(J(r),65),s=u(Jn(t.g,n.a),46),n.a=Gj(n.b),ki(o,n.a,s);t.g=o}function D1n(t,e,n){var r,s,o,h,d,w;for(s=e-t.e,o=s/t.d.c.length,h=0,w=new S(t.d);w.a<w.c.c.length;)d=u(J(w),443),r=t.b-d.b+n,vie(d,d.e+h*o,d.f),dfn(d,o,r),++h}function Vse(t){var e;if(t.f.qj(),t.b!=-1){if(++t.b,e=t.f.d[t.a],t.b<e.i)return;++t.a}for(;t.a<t.f.d.length;++t.a)if(e=t.f.d[t.a],e&&e.i!=0){t.b=0;return}t.b=-1}function O1n(t,e){var n,r,s;for(s=e.c.length,n=Dgn(t,s==0?"":(An(0,e.c.length),Br(e.c[0]))),r=1;r<s&&n;++r)n=u(n,49).oh((An(r,e.c.length),Br(e.c[r])));return n}function Use(t,e){var n,r;for(r=new S(e);r.a<r.c.c.length;)n=u(J(r),10),t.c[n.c.p][n.p].a=Vvt(t.i),t.c[n.c.p][n.p].d=Xt(t.c[n.c.p][n.p].a),t.c[n.c.p][n.p].b=1}function N1n(t,e){var n,r,s,o;for(o=0,r=new S(t);r.a<r.c.c.length;)n=u(J(r),157),o+=b.Math.pow(Fu(n)*xl(n)-e,2);return s=b.Math.sqrt(o/(t.c.length-1)),s}function Wse(t,e,n,r){var s,o,h;return o=own(t,e,n,r),h=z5t(t,o),Ist(t,e,n,r),Hrt(t.b),vn(),Xs(o,new b$t(t)),s=z5t(t,o),Ist(t,n,e,r),Hrt(t.b),new la(de(h),de(s))}function P1n(t,e,n){var r,s;for(wr(n,"Interactive node placement",1),t.a=u(Q(e,(se(),Y4)),304),s=new S(e.b);s.a<s.c.c.length;)r=u(J(s),29),mvn(t,r);or(n)}function F1n(t,e){var n;wr(e,"General Compactor",1),e.n&&t&&hf(e,ff(t),(Cl(),Yl)),n=Lln(u(qe(t,(ay(),Bht)),380)),n.hg(t),e.n&&t&&hf(e,ff(t),(Cl(),Yl))}function B1n(t,e,n){var r,s;for(oj(t,t.j+e,t.k+n),s=new er((!t.a&&(t.a=new Ss(Hh,t,5)),t.a));s.e!=s.i.gc();)r=u(dr(s),469),n2t(r,r.a+e,r.b+n);aj(t,t.b+e,t.c+n)}function i4t(t,e,n,r){switch(n){case 7:return!t.e&&(t.e=new Cn(Ws,t,7,4)),Qc(t.e,e,r);case 8:return!t.d&&(t.d=new Cn(Ws,t,8,5)),Qc(t.d,e,r)}return Ast(t,e,n,r)}function s4t(t,e,n,r){switch(n){case 7:return!t.e&&(t.e=new Cn(Ws,t,7,4)),Ba(t.e,e,r);case 8:return!t.d&&(t.d=new Cn(Ws,t,8,5)),Ba(t.d,e,r)}return fit(t,e,n,r)}function R1n(t,e,n){var r,s,o,h,d;if(n)for(o=n.a.length,r=new Qb(o),d=(r.b-r.a)*r.c<0?(Ip(),Ab):new Pp(r);d.Ob();)h=u(d.Pb(),19),s=_8(n,h.a),s&&koe(t,s,e)}function Yz(t,e,n){var r,s,o,h,d;return t.qj(),o=e==null?0:Hi(e),t.f>0&&(h=(o&vi)%t.d.length,s=r5t(t,h,o,e),s)?(d=s.ed(n),d):(r=t.tj(o,e,n),t.c.Fc(r),null)}function a4t(t,e){var n,r,s,o;switch(Og(t,e)._k()){case 3:case 2:{for(n=k4(e),s=0,o=n.i;s<o;++s)if(r=u(St(n,s),34),$v(Eo(t,r))==5)return r;break}}return null}function j1n(t){var e,n,r,s,o;if(hGt(t.f,t.b.length))for(r=Pt(pge,LD,330,t.b.length*2,0,1),t.b=r,s=r.length-1,n=t.a;n!=t;n=n.Rd())o=u(n,330),e=o.d&s,o.a=r[e],r[e]=o}function Kse(t,e){var n,r,s,o;for(o=0,s=u(u(Ai(t.r,e),21),84).Kc();s.Ob();)r=u(s.Pb(),111),o=b.Math.max(o,r.e.a+r.b.rf().a);n=u(go(t.b,e),124),n.n.b=0,n.a.a=o}function Yse(t,e){var n,r,s,o;for(n=0,o=u(u(Ai(t.r,e),21),84).Kc();o.Ob();)s=u(o.Pb(),111),n=b.Math.max(n,s.e.b+s.b.rf().b);r=u(go(t.b,e),124),r.n.d=0,r.a.b=n}function $1n(t){var e,n;return n=u(Q(t,(se(),Gc)),21),e=ij(Pme),n.Hc((oo(),V4))&&Rl(e,Rme),n.Hc(wS)&&Rl(e,jme),n.Hc(l7)&&Rl(e,Fme),n.Hc(h7)&&Rl(e,Bme),e}function z1n(t,e){var n;wr(e,"Delaunay triangulation",1),n=new le,mu(t.i,new R$t(n)),je(Re(Q(t,(G8(),uS)))),t.e?Ua(t.e,Nhe(n)):t.e=Nhe(n),or(e)}function o4t(t){if(t<0)throw rt(new Pn("The input must be positive"));return t<ySt.length?Vv(ySt[t]):b.Math.sqrt(I4*t)*(xun(t,t)/Gyt(2.718281828459045,t))}function fE(t,e){var n;if(t.ni()&&e!=null){for(n=0;n<t.i;++n)if(yi(e,t.g[n]))return!0}else for(n=0;n<t.i;++n)if(Gt(t.g[n])===Gt(e))return!0;return!1}function q1n(t,e){if(e==null){for(;t.a.Ob();)if(u(t.a.Pb(),42).dd()==null)return!0}else for(;t.a.Ob();)if(yi(e,u(t.a.Pb(),42).dd()))return!0;return!1}function H1n(t,e){var n,r,s;return e===t?!0:Et(e,664)?(s=u(e,1947),Iie((r=t.g,r||(t.g=new v9(t))),(n=s.g,n||(s.g=new v9(s))))):!1}function G1n(t){var e,n,r,s;for(e="Sz",n="ez",s=b.Math.min(t.length,5),r=s-1;r>=0;r--)if(hn(t[r].d,e)||hn(t[r].d,n)){t.length>=r+1&&t.splice(0,r+1);break}return t}function eD(t,e){var n;return Bo(t)&&Bo(e)&&(n=t/e,DD<n&&n<x2)?n<0?b.Math.ceil(n):b.Math.floor(n):Vp(dxt(Bo(t)?Sh(t):t,Bo(e)?Sh(e):e,!1))}function c4t(t,e){if(e==t.c.i)return t.d.i;if(e==t.d.i)return t.c.i;throw rt(new Pn("'node' must either be the source node or target node of the edge."))}function V1n(t){var e,n,r,s;if(s=u(Q(t,(se(),YTt)),37),s){for(r=new Ta,e=Fa(t.c.i);e!=s;)n=e.e,e=Fa(n),Fm(Li(Li(r,n.n),e.c),e.d.b,e.d.d);return r}return Bbe}function U1n(t){var e;e=u(Q(t,(se(),d7)),403),us(Wo(new Tn(null,new _n(e.d,16)),new JY),new gx(t)),us(Ri(new Tn(null,new _n(e.d,16)),new hF),new O3(t))}function kst(t,e){var n,r,s,o;for(s=e?Ms(t):jo(t),r=new ar(lr(s.a.Kc(),new z));zr(r);)if(n=u(Lr(r),17),o=c4t(n,t),o.k==(Gn(),Zs)&&o.c!=t.c)return o;return null}function W1n(t){var e,n,r;for(n=new S(t.p);n.a<n.c.c.length;)e=u(J(n),10),e.k==(Gn(),Ds)&&(r=e.o.b,t.i=b.Math.min(t.i,r),t.g=b.Math.max(t.g,r))}function Xse(t,e,n){var r,s,o;for(o=new S(e);o.a<o.c.c.length;)r=u(J(o),10),t.c[r.c.p][r.p].e=!1;for(s=new S(e);s.a<s.c.c.length;)r=u(J(s),10),mxt(t,r,n)}function Est(t,e,n){var r,s;r=a4(e.j,n.s,n.c)+a4(n.e,e.s,e.c),s=a4(n.j,e.s,e.c)+a4(e.e,n.s,n.c),r==s?r>0&&(t.b+=2,t.a+=r):(t.b+=1,t.a+=b.Math.min(r,s))}function Qse(t,e){var n,r;if(r=!1,ea(e)&&(r=!0,Bx(t,new Hm(Br(e)))),r||Et(e,236)&&(r=!0,Bx(t,(n=fvt(u(e,236)),new y9(n)))),!r)throw rt(new tet(x8t))}function K1n(t,e,n,r){var s,o,h;return s=new F0(t.e,1,10,(h=e.c,Et(h,88)?u(h,26):(dn(),Wh)),(o=n.c,Et(o,88)?u(o,26):(dn(),Wh)),Fg(t,e),!1),r?r.Ei(s):r=s,r}function u4t(t){var e,n;switch(u(Q(Fa(t),(Te(),X9t)),420).g){case 0:return e=t.n,n=t.o,new $e(e.a+n.a/2,e.b+n.b/2);case 1:return new yo(t.n);default:return null}}function nD(){nD=Z,BG=new Q9(K0,0),PTt=new Q9("LEFTUP",1),BTt=new Q9("RIGHTUP",2),NTt=new Q9("LEFTDOWN",3),FTt=new Q9("RIGHTDOWN",4),Slt=new Q9("BALANCED",5)}function Y1n(t,e,n){var r,s,o;if(r=Ls(t.a[e.p],t.a[n.p]),r==0){if(s=u(Q(e,(se(),I6)),15),o=u(Q(n,I6),15),s.Hc(n))return-1;if(o.Hc(e))return 1}return r}function X1n(t){switch(t.g){case 1:return new tZ;case 2:return new eZ;case 3:return new JQ;case 0:return null;default:throw rt(new Pn(xct+(t.f!=null?t.f:""+t.g)))}}function l4t(t,e,n){switch(e){case 1:!t.n&&(t.n=new he(qo,t,1,7)),xr(t.n),!t.n&&(t.n=new he(qo,t,1,7)),rs(t.n,u(n,14));return;case 2:qC(t,Br(n));return}Myt(t,e,n)}function h4t(t,e,n){switch(e){case 3:Xv(t,Xt(ye(n)));return;case 4:Qv(t,Xt(ye(n)));return;case 5:yu(t,Xt(ye(n)));return;case 6:xu(t,Xt(ye(n)));return}l4t(t,e,n)}function Xz(t,e,n){var r,s,o;o=(r=new Ktt,r),s=O1(o,e,null),s&&s.Fi(),Xc(o,n),Mr((!t.c&&(t.c=new he(zw,t,12,10)),t.c),o),Ig(o,0),ty(o,1),Pg(o,!0),Ng(o,!0)}function f4t(t,e){var n,r,s;return n=U9(t.g,e),Et(n,235)?(s=u(n,235),s.Qh()==null,s.Nh()):Et(n,498)?(r=u(n,1938),s=r.b,s):null}function Q1n(t,e,n,r){var s,o;return Ar(e),Ar(n),o=u(wC(t.d,e),19),jte(!!o,"Row %s not in %s",e,t.e),s=u(wC(t.b,n),19),jte(!!s,"Column %s not in %s",n,t.c),Gne(t,o.a,s.a,r)}function Zse(t,e,n,r,s,o,h){var d,w,k,C,M;if(C=s[o],k=o==h-1,d=k?r:0,M=mse(d,C),r!=10&&ct(ot(t,h-o),e[o],n[o],d,M),!k)for(++o,w=0;w<C;++w)M[w]=Zse(t,e,n,r,s,o,h);return M}function u_(t){if(t.g==-1)throw rt(new Iu);t.mj();try{t.i.$c(t.g),t.f=t.i.j,t.g<t.e&&--t.e,t.g=-1}catch(e){throw e=Wi(e),Et(e,73)?rt(new eh):rt(e)}}function l_(t,e){return t.b.a=b.Math.min(t.b.a,e.c),t.b.b=b.Math.min(t.b.b,e.d),t.a.a=b.Math.max(t.a.a,e.c),t.a.b=b.Math.max(t.a.b,e.d),t.c[t.c.length]=e,!0}function Z1n(t){var e,n,r,s;for(s=-1,r=0,n=new S(t);n.a<n.c.c.length;){if(e=u(J(n),243),e.c==(so(),Ju)){s=r==0?0:r-1;break}else r==t.c.length-1&&(s=r);r+=1}return s}function J1n(t){var e,n,r,s;for(s=0,e=0,r=new S(t.c);r.a<r.c.c.length;)n=u(J(r),33),yu(n,t.e+s),xu(n,t.f),s+=n.g+t.b,e=b.Math.max(e,n.f+t.b);t.d=s-t.b,t.a=e-t.b}function f4(t){var e,n,r;for(n=new S(t.a.b);n.a<n.c.c.length;)e=u(J(n),57),r=e.d.c,e.d.c=e.d.d,e.d.d=r,r=e.d.b,e.d.b=e.d.a,e.d.a=r,r=e.b.a,e.b.a=e.b.b,e.b.b=r;S5t(t)}function d4(t){var e,n,r;for(n=new S(t.a.b);n.a<n.c.c.length;)e=u(J(n),81),r=e.g.c,e.g.c=e.g.d,e.g.d=r,r=e.g.b,e.g.b=e.g.a,e.g.a=r,r=e.e.a,e.e.a=e.e.b,e.e.b=r;uq(t)}function tdn(t){var e,n,r,s,o;for(o=Px(t.k),n=(be(),ct(ot(Xa,1),xc,61,0,[Zo,Nn,Hn,mr,Bn])),r=0,s=n.length;r<s;++r)if(e=n[r],e!=Zo&&!o.Hc(e))return e;return null}function Tst(t,e){var n,r;return r=u(S2t(mit(Ri(new Tn(null,new _n(e.j,16)),new VX))),11),r&&(n=u(Fe(r.e,0),17),n)?u(Q(n,(se(),Tc)),19).a:Lan(t.b)}function edn(t,e){var n,r,s,o;for(o=new S(e.a);o.a<o.c.c.length;)for(s=u(J(o),10),P9(t.d),r=new ar(lr(Ms(s).a.Kc(),new z));zr(r);)n=u(Lr(r),17),Woe(t,s,n.d.i)}function ndn(t,e){var n,r;for(vu(t.b,e),r=new S(t.n);r.a<r.c.c.length;)if(n=u(J(r),211),Ro(n.c,e,0)!=-1){vu(n.c,e),J1n(n),n.c.c.length==0&&vu(t.n,n);break}gyn(t)}function Jse(t,e){var n,r,s,o,h;for(h=t.f,s=0,o=0,r=new S(t.a);r.a<r.c.c.length;)n=u(J(r),187),YI(n,t.e,h),dI(n,e),o=b.Math.max(o,n.r),h+=n.d+t.c,s=h;t.d=o,t.b=s}function tae(t){var e,n;return n=fD(t),S8(n)?null:(e=(Ar(n),u(use(new ar(lr(n.a.Kc(),new z))),79)),Mo(u(St((!e.b&&(e.b=new Cn(br,e,4,7)),e.b),0),82)))}function Qz(t){var e;return t.o||(e=t.Lj(),e?t.o=new mwt(t,t,null):t.rk()?t.o=new Q2t(t,null):$v(Eo((Ru(),ma),t))==1?t.o=new $Zt(t):t.o=new lnt(t,null)),t.o}function rdn(t,e,n,r){var s,o,h,d,w;n.mh(e)&&(s=(h=e,h?u(r,49).xh(h):null),s&&(w=n.ah(e),d=e.t,d>1||d==-1?(o=u(w,15),s.Wb(ihn(t,o))):s.Wb(uat(t,u(w,56)))))}function idn(t,e,n,r){jHt();var s=dut;function o(){for(var h=0;h<s.length;h++)s[h]()}if(t)try{j5e(o)()}catch(h){t(e,h)}else j5e(o)()}function sdn(t){var e,n,r,s,o;for(r=new h2(new wg(t.b).a);r.b;)n=Yv(r),e=u(n.cd(),10),o=u(u(n.dd(),46).a,10),s=u(u(n.dd(),46).b,8),Li(Gf(e.n),Li(nc(o.n),s))}function adn(t){switch(u(Q(t.b,(Te(),H9t)),375).g){case 1:us(pu(Wo(new Tn(null,new _n(t.d,16)),new _F),new hv),new SF);break;case 2:Yvn(t);break;case 0:Mgn(t)}}function odn(t,e,n){var r;wr(n,"Straight Line Edge Routing",1),n.n&&e&&hf(n,ff(e),(Cl(),Yl)),r=u(qe(e,(bC(),$S)),33),_le(t,r),n.n&&e&&hf(n,ff(e),(Cl(),Yl))}function cy(){cy=Z,eft=new nC("V_TOP",0),VO=new nC("V_CENTER",1),GO=new nC("V_BOTTOM",2),tft=new nC("H_LEFT",3),qO=new nC("H_CENTER",4),HO=new nC("H_RIGHT",5)}function d4t(t){var e;return t.Db&64?Sz(t):(e=new Th(Sz(t)),e.a+=" (abstract: ",kg(e,(t.Bb&256)!=0),e.a+=", interface: ",kg(e,(t.Bb&512)!=0),e.a+=")",e.a)}function cdn(t,e,n,r){var s,o,h,d;return ml(t.e)&&(s=e.ak(),d=e.dd(),o=n.dd(),h=zp(t,1,s,d,o,s.$j()?EE(t,s,o,Et(s,99)&&(u(s,18).Bb&Ya)!=0):-1,!0),r?r.Ei(h):r=h),r}function udn(t){var e;t.c==null&&(e=Gt(t.b)===Gt(Y8t)?null:t.b,t.d=e==null?Tu:xYt(e)?GXe(FXt(e)):ea(e)?Dxt:Ap(sl(e)),t.a=t.a+": "+(xYt(e)?BQe(FXt(e)):e+""),t.c="("+t.d+") "+t.a)}function g4t(t,e){this.e=t,Av(Ps(e,-4294967296),0)?(this.d=1,this.a=ct(ot(Tr,1),Xr,25,15,[Sr(e)])):(this.d=2,this.a=ct(ot(Tr,1),Xr,25,15,[Sr(e),Sr(Fp(e,32))]))}function ldn(){function t(){try{return new Map().entries().next().done}catch{return!1}}return typeof Map===Nat&&Map.prototype.entries&&t()?Map:N4n()}function hdn(t,e){var n,r,s,o;for(o=new ha(t.e,0),n=0;o.b<o.d.gc();){if(r=Xt((Qn(o.b<o.d.gc()),ye(o.d.Xb(o.c=o.b++)))),s=r-e,s>wct)return n;s>-1e-6&&++n}return n}function p4t(t,e){var n;e!=t.b?(n=null,t.b&&(n=c$(t.b,t,-4,n)),e&&(n=e6(e,t,-4,n)),n=Nre(t,e,n),n&&n.Fi()):t.Db&4&&!(t.Db&1)&&mi(t,new Qs(t,1,3,e,e))}function eae(t,e){var n;e!=t.f?(n=null,t.f&&(n=c$(t.f,t,-1,n)),e&&(n=e6(e,t,-1,n)),n=Pre(t,e,n),n&&n.Fi()):t.Db&4&&!(t.Db&1)&&mi(t,new Qs(t,1,0,e,e))}function nae(t){var e,n,r;if(t==null)return null;if(n=u(t,15),n.dc())return"";for(r=new xg,e=n.Kc();e.Ob();)fo(r,(Di(),Br(e.Pb()))),r.a+=" ";return Wet(r,r.a.length-1)}function rae(t){var e,n,r;if(t==null)return null;if(n=u(t,15),n.dc())return"";for(r=new xg,e=n.Kc();e.Ob();)fo(r,(Di(),Br(e.Pb()))),r.a+=" ";return Wet(r,r.a.length-1)}function fdn(t,e,n){var r,s;return r=t.c[e.c.p][e.p],s=t.c[n.c.p][n.p],r.a!=null&&s.a!=null?Pnt(r.a,s.a):r.a!=null?-1:s.a!=null?1:0}function ddn(t,e){var n,r,s,o,h,d;if(e)for(o=e.a.length,n=new Qb(o),d=(n.b-n.a)*n.c<0?(Ip(),Ab):new Pp(n);d.Ob();)h=u(d.Pb(),19),s=_8(e,h.a),r=new izt(t),nnn(r.a,s)}function gdn(t,e){var n,r,s,o,h,d;if(e)for(o=e.a.length,n=new Qb(o),d=(n.b-n.a)*n.c<0?(Ip(),Ab):new Pp(n);d.Ob();)h=u(d.Pb(),19),s=_8(e,h.a),r=new Y$t(t),enn(r.a,s)}function pdn(t){var e;if(t!=null&&t.length>0&&ba(t,t.length-1)==33)try{return e=toe(Dl(t,0,t.length-1)),e.e==null}catch(n){if(n=Wi(n),!Et(n,32))throw rt(n)}return!1}function iae(t,e,n){var r,s,o;return r=e.ak(),o=e.dd(),s=r.$j()?zp(t,3,r,null,o,EE(t,r,o,Et(r,99)&&(u(r,18).Bb&Ya)!=0),!0):zp(t,1,r,r.zj(),o,-1,!0),n?n.Ei(s):n=s,n}function bdn(){var t,e,n;for(e=0,t=0;t<1;t++){if(n=o5t((Rr(t,1),"X".charCodeAt(t))),n==0)throw rt(new Fr("Unknown Option: "+"X".substr(t)));e|=n}return e}function vdn(t,e,n){var r,s,o;switch(r=Fa(e),s=Ez(r),o=new Mc,Uo(o,e),n.g){case 1:Fs(o,HI(Jx(s)));break;case 2:Fs(o,Jx(s))}return Jt(o,(Te(),zy),ye(Q(t,zy))),o}function b4t(t){var e,n;return e=u(Lr(new ar(lr(jo(t.a).a.Kc(),new z))),17),n=u(Lr(new ar(lr(Ms(t.a).a.Kc(),new z))),17),je(Re(Q(e,(se(),$1))))||je(Re(Q(n,$1)))}function g4(){g4=Z,LG=new kM("ONE_SIDE",0),IG=new kM("TWO_SIDES_CORNER",1),DG=new kM("TWO_SIDES_OPPOSING",2),MG=new kM("THREE_SIDES",3),AG=new kM("FOUR_SIDES",4)}function Cst(t,e,n,r,s){var o,h;o=u(Pl(Ri(e.Oc(),new OX),i2(new _e,new we,new nr,ct(ot(ll,1),ae,132,0,[(I1(),Gl)]))),15),h=u(o2(t.b,n,r),15),s==0?h.Wc(0,o):h.Gc(o)}function wdn(t,e){var n,r,s,o,h;for(o=new S(e.a);o.a<o.c.c.length;)for(s=u(J(o),10),r=new ar(lr(jo(s).a.Kc(),new z));zr(r);)n=u(Lr(r),17),h=n.c.i.p,t.n[h]=t.n[h]-1}function mdn(t,e){var n,r,s,o,h;for(o=new S(e.d);o.a<o.c.c.length;)for(s=u(J(o),101),h=u(Jn(t.c,s),112).o,r=new Ex(s.b);r.a<r.c.a.length;)n=u(FC(r),61),Smt(s,n,h)}function ydn(t){var e,n;for(n=new S(t.e.b);n.a<n.c.c.length;)e=u(J(n),29),X3n(t,e);us(Ri(Wo(Wo(new Tn(null,new _n(t.e.b,16)),new vQ),new jF),new xQ),new M$t(t))}function v4t(t,e){return e?t.Di(e)?!1:t.i?t.i.Ei(e):Et(e,143)?(t.i=u(e,143),!0):(t.i=new ex,t.i.Ei(e)):!1}function xdn(t){if(t=$c(t,!0),hn(qE,t)||hn("1",t))return Fn(),YE;if(hn(Oct,t)||hn("0",t))return Fn(),I2;throw rt(new ret("Invalid boolean value: '"+t+"'"))}function w4t(t,e,n){var r,s,o;for(s=t.vc().Kc();s.Ob();)if(r=u(s.Pb(),42),o=r.cd(),Gt(e)===Gt(o)||e!=null&&yi(e,o))return n&&(r=new RR(r.cd(),r.dd()),s.Qb()),r;return null}function kdn(t){Bm();var e,n,r;t.B.Hc((cl(),VV))&&(r=t.f.i,e=new o$(t.a.c),n=new wx,n.b=e.c-r.c,n.d=e.d-r.d,n.c=r.c+r.b-(e.c+e.b),n.a=r.d+r.a-(e.d+e.a),t.e.Ff(n))}function sae(t,e,n,r){var s,o,h;for(h=b.Math.min(n,dle(u(t.b,65),e,n,r)),o=new S(t.a);o.a<o.c.c.length;)s=u(J(o),221),s!=e&&(h=b.Math.min(h,sae(s,e,h,r)));return h}function m4t(t){var e,n,r,s;for(s=Pt(o0,te,193,t.b.c.length,0,2),r=new ha(t.b,0);r.b<r.d.gc();)e=(Qn(r.b<r.d.gc()),u(r.d.Xb(r.c=r.b++),29)),n=r.b-1,s[n]=sI(e.a);return s}function _st(t,e,n,r,s){var o,h,d,w;for(h=jKe(ebt(mvt(Khn(n)),r),r1n(t,n,s)),w=Rg(t,n).Kc();w.Ob();)d=u(w.Pb(),11),e[d.p]&&(o=e[d.p].i,ue(h.d,new Dnt(o,Jyt(h,o))));p3t(h)}function y4t(t,e){this.f=new Cr,this.b=new Cr,this.j=new Cr,this.a=t,this.c=e,this.c>0&&Mse(this,this.c-1,(be(),Hn)),this.c<this.a.length-1&&Mse(this,this.c+1,(be(),Bn))}function x4t(t){t.length>0&&t[0].length>0&&(this.c=je(Re(Q(Fa(t[0][0]),(se(),ZTt))))),this.a=Pt(ome,te,2018,t.length,0,2),this.b=Pt(cme,te,2019,t.length,0,2),this.d=new Sre}function Edn(t){return t.c.length==0?!1:(An(0,t.c.length),u(t.c[0],17)).c.i.k==(Gn(),Zs)?!0:A8(pu(new Tn(null,new _n(t,16)),new cQ),new uQ)}function Tdn(t,e,n){return wr(n,"Tree layout",1),w$(t.b),Ud(t.b,(uE(),vV),vV),Ud(t.b,PS,PS),Ud(t.b,PO,PO),Ud(t.b,FS,FS),t.a=Tq(t.b,e),J2n(t,e,Rc(n,1)),or(n),e}function aae(t,e){var n,r,s,o,h,d,w;for(d=gy(e),o=e.f,w=e.g,h=b.Math.sqrt(o*o+w*w),s=0,r=new S(d);r.a<r.c.c.length;)n=u(J(r),33),s+=aae(t,n);return b.Math.max(s,h)}function oa(){oa=Z,yb=new iC(O_,0),H1=new iC("FREE",1),L7=new iC("FIXED_SIDE",2),G2=new iC("FIXED_ORDER",3),h0=new iC("FIXED_RATIO",4),Vc=new iC("FIXED_POS",5)}function Cdn(t,e){var n,r,s;if(n=e.Hh(t.a),n){for(s=Br(Yf((!n.b&&(n.b=new yl((dn(),Qa),cc,n)),n.b),Fh)),r=1;r<(Ru(),dLt).length;++r)if(hn(dLt[r],s))return r}return 0}function _dn(t){var e,n,r,s,o;if(t==null)return Tu;for(o=new c2(Ka,"[","]"),n=t,r=0,s=n.length;r<s;++r)e=n[r],P0(o,""+e);return o.a?o.e.length==0?o.a.a:o.a.a+(""+o.e):o.c}function Sdn(t){var e,n,r,s,o;if(t==null)return Tu;for(o=new c2(Ka,"[","]"),n=t,r=0,s=n.length;r<s;++r)e=n[r],P0(o,""+e);return o.a?o.e.length==0?o.a.a:o.a.a+(""+o.e):o.c}function oae(t){var e,n,r;for(r=new c2(Ka,"{","}"),n=t.vc().Kc();n.Ob();)e=u(n.Pb(),42),P0(r,NZt(t,e.cd())+"="+NZt(t,e.dd()));return r.a?r.e.length==0?r.a.a:r.a.a+(""+r.e):r.c}function Adn(t){for(var e,n,r,s;!N9(t.o);)n=u(Fx(t.o),46),r=u(n.a,121),e=u(n.b,213),s=_z(e,r),e.e==r?(pj(s.g,e),r.e=s.e+e.a):(pj(s.b,e),r.e=s.e-e.a),ue(t.e.a,r)}function k4t(t,e){var n,r,s;for(n=null,s=u(e.Kb(t),20).Kc();s.Ob();)if(r=u(s.Pb(),17),!n)n=r.c.i==t?r.d.i:r.c.i;else if((r.c.i==t?r.d.i:r.c.i)!=n)return!1;return!0}function cae(t,e){var n,r,s,o,h;for(n=Ace(t,!1,e),s=new S(n);s.a<s.c.c.length;)r=u(J(s),129),r.d==0?(vrt(r,null),wrt(r,null)):(o=r.a,h=r.b,vrt(r,h),wrt(r,o))}function Ldn(t){var e,n;return e=new Hs,Rl(e,qme),n=u(Q(t,(se(),Gc)),21),n.Hc((oo(),wS))&&Rl(e,Ume),n.Hc(l7)&&Rl(e,Hme),n.Hc(V4)&&Rl(e,Vme),n.Hc(h7)&&Rl(e,Gme),e}function Mdn(t){var e,n,r,s;for(Zyn(t),n=new ar(lr(z0(t).a.Kc(),new z));zr(n);)e=u(Lr(n),17),r=e.c.i==t,s=r?e.d:e.c,r?sa(e,null):Da(e,null),Jt(e,(se(),n9t),s),jpn(t,s.i)}function Idn(t,e,n,r){var s,o;switch(o=e.i,s=n[o.g][t.d[o.g]],o.g){case 1:s-=r+e.j.b,e.g.b=s;break;case 3:s+=r,e.g.b=s;break;case 4:s-=r+e.j.a,e.g.a=s;break;case 2:s+=r,e.g.a=s}}function Ddn(t){var e,n,r;for(n=new er((!t.a&&(t.a=new he(ns,t,10,11)),t.a));n.e!=n.i.gc();)if(e=u(dr(n),33),r=fD(e),!zr(new ar(lr(r.a.Kc(),new z))))return e;return null}function Odn(){var t;return F4e?u(wE((Mp(),Uh),GE),2016):(t=u(Et(Fc((Mp(),Uh),GE),555)?Fc(Uh,GE):new Qoe,555),F4e=!0,B3n(t),V5n(t),mst(t),xo(Uh,GE,t),t)}function Sst(t,e,n){var r,s;if(t.j==0)return n;if(s=u(Iee(t,e,n),72),r=n.ak(),!r.Ij()||!t.a.rl(r))throw rt(new Go("Invalid entry feature '"+r.Hj().zb+"."+r.ne()+"'"));return s}function Ndn(t,e){var n,r,s,o,h,d,w,k;for(d=t.a,w=0,k=d.length;w<k;++w)for(h=d[w],r=h,s=0,o=r.length;s<o;++s)if(n=r[s],Gt(e)===Gt(n)||e!=null&&yi(e,n))return!0;return!1}function Pdn(t){var e,n,r;return yc(t,0)>=0?(n=eD(t,Nq),r=UI(t,Nq)):(e=zm(t,1),n=eD(e,5e8),r=UI(e,5e8),r=Oa(M0(r,1),Ps(t,1))),C1(M0(r,32),Ps(n,co))}function uae(t,e,n){var r,s;switch(r=(Qn(e.b!=0),u(ch(e,e.a.a),8)),n.g){case 0:r.b=0;break;case 2:r.b=t.f;break;case 3:r.a=0;break;default:r.a=t.g}return s=ei(e,0),XM(s,r),e}function lae(t,e,n,r){var s,o,h,d,w;switch(w=t.b,o=e.d,h=o.j,d=M3t(h,w.d[h.g],n),s=Li(nc(o.n),o.a),o.j.g){case 1:case 3:d.a+=s.a;break;case 2:case 4:d.b+=s.b}hs(r,d,r.c.b,r.c)}function Fdn(t,e,n){var r,s,o,h;for(h=Ro(t.e,e,0),o=new Npt,o.b=n,r=new ha(t.e,h);r.b<r.d.gc();)s=(Qn(r.b<r.d.gc()),u(r.d.Xb(r.c=r.b++),10)),s.p=n,ue(o.e,s),El(r);return o}function Bdn(t,e,n,r){var s,o,h,d,w;for(s=null,o=0,d=new S(e);d.a<d.c.c.length;)h=u(J(d),33),w=h.i+h.g,t<h.j+h.f+r&&(s?n.i-w<n.i-o&&(s=h):s=h,o=s.i+s.g);return s?o+r:0}function Rdn(t,e,n,r){var s,o,h,d,w;for(o=null,s=0,d=new S(e);d.a<d.c.c.length;)h=u(J(d),33),w=h.j+h.f,t<h.i+h.g+r&&(o?n.j-w<n.j-s&&(o=h):o=h,s=o.j+o.f);return o?s+r:0}function jdn(t){var e,n,r;for(e=!1,r=t.b.c.length,n=0;n<r;n++)Lyt(u(Fe(t.b,n),434))?!e&&n+1<r&&Lyt(u(Fe(t.b,n+1),434))&&(e=!0,u(Fe(t.b,n),434).a=!0):e=!1}function $dn(t,e,n,r,s){var o,h;for(o=0,h=0;h<s;h++)o=Oa(o,Yp(Ps(e[h],co),Ps(r[h],co))),t[h]=Sr(o),o=Fp(o,32);for(;h<n;h++)o=Oa(o,Ps(e[h],co)),t[h]=Sr(o),o=Fp(o,32)}function zdn(t,e){bE();var n,r;for(r=(Jp(),GH),n=t;e>1;e>>=1)e&1&&(r=J3(r,n)),n.d==1?n=J3(n,n):n=new Nie(Hue(n.a,n.d,Pt(Tr,Xr,25,n.d<<1,15,1)));return r=J3(r,n),r}function E4t(){E4t=Z;var t,e,n,r;for(TEt=Pt(ia,vo,25,25,15,1),CEt=Pt(ia,vo,25,33,15,1),r=152587890625e-16,e=32;e>=0;e--)CEt[e]=r,r*=.5;for(n=1,t=24;t>=0;t--)TEt[t]=n,n*=.5}function qdn(t){var e,n;if(je(Re(qe(t,(Te(),$y))))){for(n=new ar(lr(G0(t).a.Kc(),new z));zr(n);)if(e=u(Lr(n),79),uw(e)&&je(Re(qe(e,P2))))return!0}return!1}function hae(t,e){var n,r,s;Ns(t.f,e)&&(e.b=t,r=e.c,Ro(t.j,r,0)!=-1||ue(t.j,r),s=e.d,Ro(t.j,s,0)!=-1||ue(t.j,s),n=e.a.b,n.c.length!=0&&(!t.i&&(t.i=new Hie(t)),icn(t.i,n)))}function Hdn(t){var e,n,r,s,o;return n=t.c.d,r=n.j,s=t.d.d,o=s.j,r==o?n.p<s.p?0:1:kz(r)==o?0:t3t(r)==o?1:(e=t.b,Nu(e.b,kz(r))?0:1)}function Zz(){Zz=Z,aht=new J9(C1e,0),ECt=new J9("LONGEST_PATH",1),sht=new J9("COFFMAN_GRAHAM",2),kCt=new J9(jot,3),TCt=new J9("STRETCH_WIDTH",4),cV=new J9("MIN_WIDTH",5)}function w2(t){var e;this.d=new Cr,this.c=t.c,this.e=t.d,this.b=t.b,this.f=new oYt(t.e),this.a=t.a,t.f?this.g=t.f:this.g=(e=u(Hf(eU),9),new rh(e,u(uf(e,e.length),9),0))}function Jz(t,e){var n,r,s,o,h,d;s=t,h=PC(s,"layoutOptions"),!h&&(h=PC(s,Ede)),h&&(d=h,r=null,d&&(r=(o=uit(d,Pt(Ae,te,2,0,6,1)),new fet(d,o))),r&&(n=new kVt(d,e),va(r,n)))}function Mo(t){if(Et(t,239))return u(t,33);if(Et(t,186))return k1(u(t,118));throw rt(t?new yg("Only support nodes and ports."):new yx(Dde))}function Gdn(t,e,n,r){return(e>=0&&hn(t.substr(e,3),"GMT")||e>=0&&hn(t.substr(e,3),"UTC"))&&(n[0]=e+3),X5t(t,n,r)}function Vdn(t,e){var n,r,s,o,h;for(o=t.g.a,h=t.g.b,r=new S(t.d);r.a<r.c.c.length;)n=u(J(r),70),s=n.n,s.a=o,t.i==(be(),Nn)?s.b=h+t.j.b-n.o.b:s.b=h,Li(s,e),o+=n.o.a+t.e}function wr(t,e,n){if(t.b)throw rt(new Fo("The task is already done."));return t.p!=null?!1:(t.p=e,t.r=n,t.k&&(t.o=(qd(),Ca(ku(Date.now()),$g))),!0)}function T4t(t){var e,n,r,s,o,h,d;return d=new mx,n=t.tg(),s=n!=null,s&&p8(d,Cd,t.tg()),r=t.ne(),o=r!=null,o&&p8(d,oi,t.ne()),e=t.sg(),h=e!=null,h&&p8(d,"description",t.sg()),d}function fae(t,e,n){var r,s,o;return o=t.q,t.q=e,t.Db&4&&!(t.Db&1)&&(s=new Qs(t,1,9,o,e),n?n.Ei(s):n=s),e?(r=e.c,r!=t.r&&(n=t.nk(r,n))):t.r&&(n=t.nk(null,n)),n}function Udn(t,e,n){var r,s,o,h,d;for(n=(d=e,e6(d,t.e,-1-t.c,n)),h=xwt(t.a),o=(r=new h2(new wg(h.a).a),new uR(r));o.a.b;)s=u(Yv(o.a).cd(),87),n=_E(s,oq(s,t.a),n);return n}function Wdn(t,e,n){var r,s,o,h,d;for(n=(d=e,c$(d,t.e,-1-t.c,n)),h=xwt(t.a),o=(r=new h2(new wg(h.a).a),new uR(r));o.a.b;)s=u(Yv(o.a).cd(),87),n=_E(s,oq(s,t.a),n);return n}function Kdn(t,e,n,r){var s,o,h;if(r==0)Ic(e,0,t,n,t.length-n);else for(h=32-r,t[t.length-1]=0,o=t.length-1;o>n;o--)t[o]|=e[o-n-1]>>>h,t[o-1]=e[o-n-1]<<r;for(s=0;s<n;s++)t[s]=0}function Ydn(t){var e,n,r,s,o;for(e=0,n=0,o=t.Kc();o.Ob();)r=u(o.Pb(),111),e=b.Math.max(e,r.d.b),n=b.Math.max(n,r.d.c);for(s=t.Kc();s.Ob();)r=u(s.Pb(),111),r.d.b=e,r.d.c=n}function Xdn(t){var e,n,r,s,o;for(n=0,e=0,o=t.Kc();o.Ob();)r=u(o.Pb(),111),n=b.Math.max(n,r.d.d),e=b.Math.max(e,r.d.a);for(s=t.Kc();s.Ob();)r=u(s.Pb(),111),r.d.d=n,r.d.a=e}function dae(t,e){var n,r,s,o;for(o=new le,s=0,r=e.Kc();r.Ob();){for(n=de(u(r.Pb(),19).a+s);n.a<t.f&&!$tn(t,n.a);)n=de(n.a+1),++s;if(n.a>=t.f)break;o.c[o.c.length]=n}return o}function C4t(t){var e,n,r,s;for(e=null,s=new S(t.wf());s.a<s.c.c.length;)r=u(J(s),181),n=new ih(r.qf().a,r.qf().b,r.rf().a,r.rf().b),e?h_(e,n):e=n;return!e&&(e=new Ax),e}function Ast(t,e,n,r){var s,o;return n==1?(!t.n&&(t.n=new he(qo,t,1,7)),Qc(t.n,e,r)):(o=u(yn((s=u(In(t,16),26),s||t.zh()),n),66),o.Nj().Qj(t,iu(t),n-Zn(t.zh()),e,r))}function Lst(t,e,n){var r,s,o,h,d;for(r=n.gc(),t.qi(t.i+r),d=t.i-e,d>0&&Ic(t.g,e,t.g,e+r,d),h=n.Kc(),t.i+=r,s=0;s<r;++s)o=h.Pb(),fC(t,e,t.oi(e,o)),t.bi(e,o),t.ci(),++e;return r!=0}function O1(t,e,n){var r;return e!=t.q?(t.q&&(n=c$(t.q,t,-10,n)),e&&(n=e6(e,t,-10,n)),n=fae(t,e,n)):t.Db&4&&!(t.Db&1)&&(r=new Qs(t,1,9,e,e),n?n.Ei(r):n=r),n}function Mst(t,e,n,r){return gvt((n&bd)==0,"flatMap does not support SUBSIZED characteristic"),gvt((n&4)==0,"flatMap does not support SORTED characteristic"),Ar(t),Ar(e),new wZt(t,n,r,e)}function Qdn(t,e){uwt(e,"Cannot suppress a null exception."),_j(e!=t,"Exception can not suppress itself."),!t.i&&(t.k==null?t.k=ct(ot(yut,1),te,78,0,[e]):t.k[t.k.length]=e)}function p4(t,e,n,r){var s,o,h,d,w,k;for(h=n.length,o=0,s=-1,k=oee(t.substr(e),(vnt(),kEt)),d=0;d<h;++d)w=n[d].length,w>o&&oen(k,oee(n[d],kEt))&&(s=d,o=w);return s>=0&&(r[0]=e+o),s}function Zdn(t,e){var n;if(n=iUt(t.b.Hf(),e.b.Hf()),n!=0)return n;switch(t.b.Hf().g){case 1:case 2:return du(t.b.sf(),e.b.sf());case 3:case 4:return du(e.b.sf(),t.b.sf())}return 0}function Jdn(t){var e,n,r;for(r=t.e.c.length,t.a=Xb(Tr,[te,Xr],[48,25],15,[r,r],2),n=new S(t.c);n.a<n.c.c.length;)e=u(J(n),282),t.a[e.c.b][e.d.b]+=u(Q(e,(Zf(),t7)),19).a}function t0n(t,e,n){wr(n,"Grow Tree",1),t.b=e.f,je(Re(Q(e,(G8(),uS))))?(t.c=new gp,MQt(t,null)):t.c=new gp,t.a=!1,Oce(t,e.f),Jt(e,n7t,(Fn(),!!t.a)),or(n)}function e0n(t,e){var n,r,s,o,h;if(t==null)return null;for(h=Pt(mh,vd,25,2*e,15,1),r=0,s=0;r<e;++r)n=t[r]>>4&15,o=t[r]&15,h[s++]=zAt[n],h[s++]=zAt[o];return Ah(h,0,h.length)}function n0n(t,e,n){var r,s,o;return r=e.ak(),o=e.dd(),s=r.$j()?zp(t,4,r,o,null,EE(t,r,o,Et(r,99)&&(u(r,18).Bb&Ya)!=0),!0):zp(t,r.Kj()?2:1,r,o,r.zj(),-1,!0),n?n.Ei(s):n=s,n}function Eu(t){var e,n;return t>=Ya?(e=OD+(t-Ya>>10&1023)&ms,n=56320+(t-Ya&1023)&ms,String.fromCharCode(e)+(""+String.fromCharCode(n))):String.fromCharCode(t&ms)}function r0n(t,e){Bm();var n,r,s,o;return s=u(u(Ai(t.r,e),21),84),s.gc()>=2?(r=u(s.Kc().Pb(),111),n=t.u.Hc((Qu(),JS)),o=t.u.Hc(G6),!r.a&&!n&&(s.gc()==2||o)):!1}function gae(t,e,n,r,s){var o,h,d;for(o=Qce(t,e,n,r,s),d=!1;!o;)sq(t,s,!0),d=!0,o=Qce(t,e,n,r,s);d&&sq(t,s,!1),h=git(s),h.c.length!=0&&(t.d&&t.d.lg(h),gae(t,s,n,r,h))}function tq(){tq=Z,bft=new rC(K0,0),pAt=new rC("DIRECTED",1),vAt=new rC("UNDIRECTED",2),dAt=new rC("ASSOCIATION",3),bAt=new rC("GENERALIZATION",4),gAt=new rC("DEPENDENCY",5)}function i0n(t,e){var n;if(!k1(t))throw rt(new Fo(ude));switch(n=k1(t),e.g){case 1:return-(t.j+t.f);case 2:return t.i-n.g;case 3:return t.j-n.f;case 4:return-(t.i+t.g)}return 0}function dE(t,e){var n,r;for(On(e),r=t.b.c.length,ue(t.b,e);r>0;){if(n=r,r=(r-1)/2|0,t.a.ue(Fe(t.b,r),e)<=0)return ah(t.b,n,e),!0;ah(t.b,n,Fe(t.b,r))}return ah(t.b,r,e),!0}function _4t(t,e,n,r){var s,o;if(s=0,n)s=wz(t.a[n.g][e.g],r);else for(o=0;o<QH;o++)s=b.Math.max(s,wz(t.a[o][e.g],r));return e==(Kf(),tu)&&t.b&&(s=b.Math.max(s,t.b.a)),s}function s0n(t,e){var n,r,s,o,h,d;return s=t.i,o=e.i,!s||!o||s.i!=o.i||s.i==(be(),Hn)||s.i==(be(),Bn)?!1:(h=s.g.a,n=h+s.j.a,d=o.g.a,r=d+o.j.a,h<=r&&n>=d)}function S4t(t,e,n,r){var s;if(s=!1,ea(r)&&(s=!0,p8(e,n,Br(r))),s||Om(r)&&(s=!0,S4t(t,e,n,r)),s||Et(r,236)&&(s=!0,Jb(e,n,u(r,236))),!s)throw rt(new tet(x8t))}function a0n(t,e){var n,r,s;if(n=e.Hh(t.a),n&&(s=Yf((!n.b&&(n.b=new yl((dn(),Qa),cc,n)),n.b),Nh),s!=null)){for(r=1;r<(Ru(),hLt).length;++r)if(hn(hLt[r],s))return r}return 0}function o0n(t,e){var n,r,s;if(n=e.Hh(t.a),n&&(s=Yf((!n.b&&(n.b=new yl((dn(),Qa),cc,n)),n.b),Nh),s!=null)){for(r=1;r<(Ru(),fLt).length;++r)if(hn(fLt[r],s))return r}return 0}function pae(t,e){var n,r,s,o;if(On(e),o=t.a.gc(),o<e.gc())for(n=t.a.ec().Kc();n.Ob();)r=n.Pb(),e.Hc(r)&&n.Qb();else for(s=e.Kc();s.Ob();)r=s.Pb(),t.a.Bc(r)!=null;return o!=t.a.gc()}function bae(t){var e,n;switch(n=nc(Ko(ct(ot(Us,1),te,8,0,[t.i.n,t.n,t.a]))),e=t.i.d,t.j.g){case 1:n.b-=e.d;break;case 2:n.a+=e.c;break;case 3:n.b+=e.a;break;case 4:n.a-=e.b}return n}function c0n(t){var e;for(e=(Xx(),u(Lr(new ar(lr(jo(t).a.Kc(),new z))),17).c.i);e.k==(Gn(),Zs);)Jt(e,(se(),EO),(Fn(),!0)),e=u(Lr(new ar(lr(jo(e).a.Kc(),new z))),17).c.i}function Ist(t,e,n,r){var s,o,h,d;for(d=QC(e,r),h=d.Kc();h.Ob();)s=u(h.Pb(),11),t.d[s.p]=t.d[s.p]+t.c[n.p];for(d=QC(n,r),o=d.Kc();o.Ob();)s=u(o.Pb(),11),t.d[s.p]=t.d[s.p]-t.c[e.p]}function A4t(t,e,n){var r,s;for(s=new er((!t.a&&(t.a=new he(ns,t,10,11)),t.a));s.e!=s.i.gc();)r=u(dr(s),33),m1(r,r.i+e,r.j+n);va((!t.b&&(t.b=new he(Ws,t,12,3)),t.b),new hVt(e,n))}function u0n(t,e,n,r){var s,o;for(o=e,s=o.d==null||t.a.ue(n.d,o.d)>0?1:0;o.a[s]!=n;)o=o.a[s],s=t.a.ue(n.d,o.d)>0?1:0;o.a[s]=r,r.b=n.b,r.a[0]=n.a[0],r.a[1]=n.a[1],n.a[0]=null,n.a[1]=null}function l0n(t){Qu();var e,n;return e=ji(tg,ct(ot(GV,1),ae,273,0,[xb])),!(AI(h$(e,t))>1||(n=ji(JS,ct(ot(GV,1),ae,273,0,[ZS,G6])),AI(h$(n,t))>1))}function L4t(t,e){var n;n=Fc((Mp(),Uh),t),Et(n,498)?xo(Uh,t,new NVt(this,e)):xo(Uh,t,this),Dst(this,e),e==(t8(),JAt)?(this.wb=u(this,1939),u(e,1941)):this.wb=(jp(),Ln)}function h0n(t){var e,n,r;if(t==null)return null;for(e=null,n=0;n<rA.length;++n)try{return TGt(rA[n],t)}catch(s){if(s=Wi(s),Et(s,32))r=s,e=r;else throw rt(s)}throw rt(new F$(e))}function vae(){vae=Z,Sge=ct(ot(Ae,1),te,2,6,["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]),Age=ct(ot(Ae,1),te,2,6,["Jan","Feb","Mar","Apr",l6,"Jun","Jul","Aug","Sep","Oct","Nov","Dec"])}function wae(t){var e,n,r;e=hn(typeof e,pot)?null:new qa,e&&(s8(),n=(r=900,r>=$g?"error":r>=900?"warn":r>=800?"info":"log"),eXt(n,t.a),t.b&&L5t(e,n,t.b,"Exception: ",!0))}function Q(t,e){var n,r;return r=(!t.q&&(t.q=new Cr),Jn(t.q,e)),r??(n=e.wg(),Et(n,4)&&(n==null?(!t.q&&(t.q=new Cr),Ux(t.q,e)):(!t.q&&(t.q=new Cr),ki(t.q,e,n))),n)}function Wa(){Wa=Z,Ad=new xM("P1_CYCLE_BREAKING",0),lb=new xM("P2_LAYERING",1),ou=new xM("P3_NODE_ORDERING",2),qc=new xM("P4_NODE_PLACEMENT",3),Io=new xM("P5_EDGE_ROUTING",4)}function mae(t,e){var n,r,s,o,h;for(s=e==1?Qut:Xut,r=s.a.ec().Kc();r.Ob();)for(n=u(r.Pb(),103),h=u(Ai(t.f.c,n),21).Kc();h.Ob();)o=u(h.Pb(),46),vu(t.b.b,o.b),vu(t.b.a,u(o.b,81).d)}function f0n(t,e){$C();var n;if(t.c==e.c){if(t.b==e.b||Bon(t.b,e.b)){if(n=UYe(t.b)?1:-1,t.a&&!e.a)return n;if(!t.a&&e.a)return-n}return du(t.b.g,e.b.g)}else return Ls(t.c,e.c)}function d0n(t,e){var n;wr(e,"Hierarchical port position processing",1),n=t.b,n.c.length>0&&Rue((An(0,n.c.length),u(n.c[0],29)),t),n.c.length>1&&Rue(u(Fe(n,n.c.length-1),29),t),or(e)}function yae(t,e){var n,r,s;if(I4t(t,e))return!0;for(r=new S(e);r.a<r.c.c.length;)if(n=u(J(r),33),s=tae(n),dq(t,n,s)||Are(t,n)-t.g<=t.a)return!0;return!1}function rD(){rD=Z,DV=(nat(),lSt),Yht=E3e,Kht=k3e,rSt=m3e,Wht=x3e,nSt=new Mv(8),f3e=new eo((ci(),q2),nSt),d3e=new eo(H2,8),g3e=cSt,tSt=p3e,eSt=b3e,h3e=new eo(UO,(Fn(),!1))}function eq(){eq=Z,SSt=new Mv(15),$3e=new eo((ci(),q2),SSt),z3e=new eo(H2,15),ASt=new eo(zV,de(0)),TSt=RSt,R3e=z2,j3e=vb,ESt=new eo($6,V1e),CSt=RV,_St=a5,Jht=V3e,B3e=BV}function Zd(t){if((!t.b&&(t.b=new Cn(br,t,4,7)),t.b).i!=1||(!t.c&&(t.c=new Cn(br,t,5,8)),t.c).i!=1)throw rt(new Pn(Uct));return Mo(u(St((!t.b&&(t.b=new Cn(br,t,4,7)),t.b),0),82))}function xae(t){if((!t.b&&(t.b=new Cn(br,t,4,7)),t.b).i!=1||(!t.c&&(t.c=new Cn(br,t,5,8)),t.c).i!=1)throw rt(new Pn(Uct));return OI(u(St((!t.b&&(t.b=new Cn(br,t,4,7)),t.b),0),82))}function kae(t){if((!t.b&&(t.b=new Cn(br,t,4,7)),t.b).i!=1||(!t.c&&(t.c=new Cn(br,t,5,8)),t.c).i!=1)throw rt(new Pn(Uct));return OI(u(St((!t.c&&(t.c=new Cn(br,t,5,8)),t.c),0),82))}function Xp(t){if((!t.b&&(t.b=new Cn(br,t,4,7)),t.b).i!=1||(!t.c&&(t.c=new Cn(br,t,5,8)),t.c).i!=1)throw rt(new Pn(Uct));return Mo(u(St((!t.c&&(t.c=new Cn(br,t,5,8)),t.c),0),82))}function M4t(t,e,n){var r,s,o;if(++t.j,s=t.Vi(),e>=s||e<0)throw rt(new mo(Wct+e+S2+s));if(n>=s||n<0)throw rt(new mo(Kct+n+S2+s));return e!=n?r=(o=t.Ti(n),t.Hi(e,o),o):r=t.Oi(n),r}function Eae(t){var e,n,r;if(r=t,t)for(e=0,n=t.Ug();n;n=n.Ug()){if(++e>oot)return Eae(n);if(r=n,n==t)throw rt(new Fo("There is a cycle in the containment hierarchy of "+t))}return r}function Qp(t){var e,n,r;for(r=new c2(Ka,"[","]"),n=t.Kc();n.Ob();)e=n.Pb(),P0(r,Gt(e)===Gt(t)?"(this Collection)":e==null?Tu:$o(e));return r.a?r.e.length==0?r.a.a:r.a.a+(""+r.e):r.c}function I4t(t,e){var n,r;if(r=!1,e.gc()<2)return!1;for(n=0;n<e.gc();n++)n<e.gc()-1?r=r|dq(t,u(e.Xb(n),33),u(e.Xb(n+1),33)):r=r|dq(t,u(e.Xb(n),33),u(e.Xb(0),33));return r}function Tae(t,e){var n;e!=t.a?(n=null,t.a&&(n=u(t.a,49).ih(t,4,r1,n)),e&&(n=u(e,49).gh(t,4,r1,n)),n=Hyt(t,e,n),n&&n.Fi()):t.Db&4&&!(t.Db&1)&&mi(t,new Qs(t,1,1,e,e))}function D4t(t,e){var n;e!=t.e?(t.e&&OJt(xwt(t.e),t),e&&(!e.b&&(e.b=new cR(new Ytt)),WWt(e.b,t)),n=T1n(t,e,null),n&&n.Fi()):t.Db&4&&!(t.Db&1)&&mi(t,new Qs(t,1,4,e,e))}function uy(t){var e,n,r;for(n=t.length,r=0;r<n&&(Rr(r,t.length),t.charCodeAt(r)<=32);)++r;for(e=n;e>r&&(Rr(e-1,t.length),t.charCodeAt(e-1)<=32);)--e;return r>0||e<n?t.substr(r,e-r):t}function g0n(t,e){var n;n=e.o,Op(t.f)?(t.j.a=b.Math.max(t.j.a,n.a),t.j.b+=n.b,t.d.c.length>1&&(t.j.b+=t.e)):(t.j.a+=n.a,t.j.b=b.Math.max(t.j.b,n.b),t.d.c.length>1&&(t.j.a+=t.e))}function Zp(){Zp=Z,r2e=ct(ot(Xa,1),xc,61,0,[(be(),Nn),Hn,mr]),n2e=ct(ot(Xa,1),xc,61,0,[Hn,mr,Bn]),i2e=ct(ot(Xa,1),xc,61,0,[mr,Bn,Nn]),s2e=ct(ot(Xa,1),xc,61,0,[Bn,Nn,Hn])}function p0n(t,e,n,r){var s,o,h,d,w,k,C;if(h=t.c.d,d=t.d.d,h.j!=d.j)for(C=t.b,s=h.j,w=null;s!=d.j;)w=e==0?kz(s):t3t(s),o=M3t(s,C.d[s.g],n),k=M3t(w,C.d[w.g],n),ni(r,Li(o,k)),s=w}function b0n(t,e,n,r){var s,o,h,d,w;return h=Ise(t.a,e,n),d=u(h.a,19).a,o=u(h.b,19).a,r&&(w=u(Q(e,(se(),Zu)),10),s=u(Q(n,Zu),10),w&&s&&(BZt(t.b,w,s),d+=t.b.i,o+=t.b.e)),d>o}function Cae(t){var e,n,r,s,o,h,d,w,k;for(this.a=tse(t),this.b=new le,n=t,r=0,s=n.length;r<s;++r)for(e=n[r],o=new le,ue(this.b,o),d=e,w=0,k=d.length;w<k;++w)h=d[w],ue(o,new Pu(h.j))}function v0n(t,e,n){var r,s,o;return o=0,r=n[e],e<n.length-1&&(s=n[e+1],t.b[e]?(o=q5n(t.d,r,s),o+=Qnt(t.a,r,(be(),Hn)),o+=Qnt(t.a,s,Bn)):o=can(t.a,r,s)),t.c[e]&&(o+=Isn(t.a,r)),o}function w0n(t,e,n,r,s){var o,h,d,w;for(w=null,d=new S(r);d.a<d.c.c.length;)if(h=u(J(d),441),h!=n&&Ro(h.e,s,0)!=-1){w=h;break}o=Nrt(s),Da(o,n.b),sa(o,w.b),ln(t.a,s,new Tj(o,e,n.f))}function _ae(t){for(;t.g.c!=0&&t.d.c!=0;)unt(t.g).c>unt(t.d).c?(t.i+=t.g.c,Kit(t.d)):unt(t.d).c>unt(t.g).c?(t.e+=t.d.c,Kit(t.g)):(t.i+=nYt(t.g),t.e+=nYt(t.d),Kit(t.g),Kit(t.d))}function m0n(t,e,n){var r,s,o,h;for(o=e.q,h=e.r,new t2((Vf(),pb),e,o,1),new t2(pb,o,h,1),s=new S(n);s.a<s.c.c.length;)r=u(J(s),112),r!=o&&r!=e&&r!=h&&(lxt(t.a,r,e),lxt(t.a,r,h))}function Sae(t,e,n,r){t.a.d=b.Math.min(e,n),t.a.a=b.Math.max(e,r)-t.a.d,e<n?(t.b=.5*(e+n),t.g=mct*t.b+.9*e,t.f=mct*t.b+.9*n):(t.b=.5*(e+r),t.g=mct*t.b+.9*r,t.f=mct*t.b+.9*e)}function y0n(){$H={},!Array.isArray&&(Array.isArray=function(e){return Object.prototype.toString.call(e)==="[object Array]"});function t(){return new Date().getTime()}!Date.now&&(Date.now=t)}function Aae(t,e){var n,r;r=u(Q(e,(Te(),os)),98),Jt(e,(se(),r9t),r),n=e.e,n&&(us(new Tn(null,new _n(n.a,16)),new gs(t)),us(Wo(new Tn(null,new _n(n.b,16)),new R5),new qi(t)))}function x0n(t){var e,n,r,s;if(c8(u(Q(t.b,(Te(),Vl)),103)))return 0;for(e=0,r=new S(t.a);r.a<r.c.c.length;)n=u(J(r),10),n.k==(Gn(),Ds)&&(s=n.o.a,e=b.Math.max(e,s));return e}function k0n(t){switch(u(Q(t,(Te(),cu)),163).g){case 1:Jt(t,cu,(hh(),xS));break;case 2:Jt(t,cu,(hh(),Fy));break;case 3:Jt(t,cu,(hh(),yS));break;case 4:Jt(t,cu,(hh(),fb))}}function gE(){gE=Z,bS=new Z9(K0,0),$Tt=new Z9(d6,1),HTt=new Z9(g6,2),qTt=new Z9("LEFT_RIGHT_CONSTRAINT_LOCKING",3),zTt=new Z9("LEFT_RIGHT_CONNECTION_LOCKING",4),jTt=new Z9(f1e,5)}function Lae(t,e,n){var r,s,o,h,d,w,k;d=n.a/2,o=n.b/2,r=b.Math.abs(e.a-t.a),s=b.Math.abs(e.b-t.b),w=1,k=1,r>d&&(w=d/r),s>o&&(k=o/s),h=b.Math.min(w,k),t.a+=h*(e.a-t.a),t.b+=h*(e.b-t.b)}function E0n(t,e,n,r,s){var o,h;for(h=!1,o=u(Fe(n.b,0),33);Rmn(t,e,o,r,s)&&(h=!0,ndn(n,o),n.b.c.length!=0);)o=u(Fe(n.b,0),33);return n.b.c.length==0&&tD(n.j,n),h&&Vz(e.q),h}function T0n(t,e){y4();var n,r,s,o;if(e.b<2)return!1;for(o=ei(e,0),n=u(ti(o),8),r=n;o.b!=o.d.c;){if(s=u(ti(o),8),Qst(t,r,s))return!0;r=s}return!!Qst(t,r,n)}function O4t(t,e,n,r){var s,o;return n==0?(!t.o&&(t.o=new Tl((Zc(),Eb),$w,t,0)),kj(t.o,e,r)):(o=u(yn((s=u(In(t,16),26),s||t.zh()),n),66),o.Nj().Rj(t,iu(t),n-Zn(t.zh()),e,r))}function Dst(t,e){var n;e!=t.sb?(n=null,t.sb&&(n=u(t.sb,49).ih(t,1,nA,n)),e&&(n=u(e,49).gh(t,1,nA,n)),n=Wyt(t,e,n),n&&n.Fi()):t.Db&4&&!(t.Db&1)&&mi(t,new Qs(t,1,4,e,e))}function C0n(t,e){var n,r,s,o;if(e)s=R0(e,"x"),n=new ezt(t),F8(n.a,(On(s),s)),o=R0(e,"y"),r=new nzt(t),R8(r.a,(On(o),o));else throw rt(new ad("All edge sections need an end point."))}function _0n(t,e){var n,r,s,o;if(e)s=R0(e,"x"),n=new Z$t(t),B8(n.a,(On(s),s)),o=R0(e,"y"),r=new J$t(t),j8(r.a,(On(o),o));else throw rt(new ad("All edge sections need a start point."))}function S0n(t,e){var n,r,s,o,h,d,w;for(r=hre(t),o=0,d=r.length;o<d;++o)wae(e);for(w=!R1&&t.e?R1?null:t.d:null;w;){for(n=hre(w),s=0,h=n.length;s<h;++s)wae(e);w=!R1&&w.e?R1?null:w.d:null}}function Gn(){Gn=Z,Ds=new K9("NORMAL",0),Zs=new K9("LONG_EDGE",1),xs=new K9("EXTERNAL_PORT",2),Hc=new K9("NORTH_SOUTH_PORT",3),Sl=new K9("LABEL",4),j1=new K9("BREAKING_POINT",5)}function A0n(t){var e,n,r,s;if(e=!1,Vs(t,(se(),mS)))for(n=u(Q(t,mS),83),s=new S(t.j);s.a<s.c.c.length;)r=u(J(s),11),Ibn(r)&&(e||(Ugn(Fa(t)),e=!0),Dhn(u(n.xc(r),306)))}function L0n(t,e,n){var r;wr(n,"Self-Loop routing",1),r=nln(e),nj(Q(e,(L$(),GS))),us(pu(Ri(Ri(Wo(new Tn(null,new _n(e.b,16)),new kk),new W5),new BT),new nX),new BGt(t,r)),or(n)}function M0n(t){var e,n,r,s,o,h,d,w,k;return k=T4t(t),n=t.e,o=n!=null,o&&p8(k,mH,t.e),d=t.k,h=!!d,h&&p8(k,"type",snt(t.k)),r=fM(t.j),s=!r,s&&(w=new bg,Wf(k,Vct,w),e=new kzt(w),va(t.j,e)),k}function I0n(t){var e,n,r,s;for(s=Rp((Bl(t.gc(),"size"),new Lm),123),r=!0,n=Pv(t).Kc();n.Ob();)e=u(n.Pb(),42),r||(s.a+=Ka),r=!1,hc(Rp(hc(s,e.cd()),61),e.dd());return(s.a+="}",s).a}function Mae(t,e){var n,r,s;return e&=63,e<22?(n=t.l<<e,r=t.m<<e|t.l>>22-e,s=t.h<<e|t.m>>22-e):e<44?(n=0,r=t.l<<e-22,s=t.m<<e-22|t.l>>44-e):(n=0,r=0,s=t.l<<e-44),ru(n&ul,r&ul,s&W0)}function ly(t){if(eEt==null&&(eEt=new RegExp("^\\s*[+-]?(NaN|Infinity|((\\d+\\.?\\d*)|(\\.\\d+))([eE][+-]?\\d+)?[dDfF]?)\\s*$")),!eEt.test(t))throw rt(new od(vw+t+'"'));return parseFloat(t)}function D0n(t){var e,n,r,s;for(e=new le,n=Pt(dl,i0,25,t.a.c.length,16,1),awt(n,n.length),s=new S(t.a);s.a<s.c.c.length;)r=u(J(s),121),n[r.d]||(e.c[e.c.length]=r,$ie(t,r,n));return e}function O0n(t,e){var n,r,s,o;for(o=e.b.j,t.a=Pt(Tr,Xr,25,o.c.length,15,1),s=0,r=0;r<o.c.length;r++)n=(An(r,o.c.length),u(o.c[r],11)),n.e.c.length==0&&n.g.c.length==0?s+=1:s+=3,t.a[r]=s}function nq(){nq=Z,Elt=new X9("ALWAYS_UP",0),klt=new X9("ALWAYS_DOWN",1),Clt=new X9("DIRECTION_UP",2),Tlt=new X9("DIRECTION_DOWN",3),_lt=new X9("SMART_UP",4),PG=new X9("SMART_DOWN",5)}function N0n(t,e){if(t<0||e<0)throw rt(new Pn("k and n must be positive"));if(e>t)throw rt(new Pn("k must be smaller than n"));return e==0||e==t?1:t==0?0:o4t(t)/(o4t(e)*o4t(t-e))}function N4t(t,e){var n,r,s,o;for(n=new r2t(t);n.g==null&&!n.c?Fwt(n):n.g==null||n.i!=0&&u(n.g[n.i-1],47).Ob();)if(o=u(aq(n),56),Et(o,160))for(r=u(o,160),s=0;s<e.length;s++)e[s].og(r)}function Ost(t){var e;return t.Db&64?jit(t):(e=new Th(jit(t)),e.a+=" (height: ",R3(e,t.f),e.a+=", width: ",R3(e,t.g),e.a+=", x: ",R3(e,t.i),e.a+=", y: ",R3(e,t.j),e.a+=")",e.a)}function P0n(t){var e,n,r,s,o,h,d;for(e=new n2,r=t,s=0,o=r.length;s<o;++s)if(n=r[s],h=Ar(n.cd()),d=p2(e,h,Ar(n.dd())),d!=null)throw rt(new Pn("duplicate key: "+h));this.b=(vn(),new q(e))}function F0n(t){var e,n,r,s,o;if(t==null)return Tu;for(o=new c2(Ka,"[","]"),n=t,r=0,s=n.length;r<s;++r)e=n[r],P0(o,String.fromCharCode(e));return o.a?o.e.length==0?o.a.a:o.a.a+(""+o.e):o.c}function P4t(){P4t=Z,u7t=(z$(),rG),Hpe=new mn(qq,u7t),de(1),qpe=new mn(c6t,de(300)),de(0),Upe=new mn(u6t,de(0)),Wpe=new mn(Iot,yd),Gpe=new mn(Dot,5),Kpe=rG,Vpe=Hut}function Iae(t,e){var n,r,s,o,h;for(s=e==1?Qut:Xut,r=s.a.ec().Kc();r.Ob();)for(n=u(r.Pb(),103),h=u(Ai(t.f.c,n),21).Kc();h.Ob();)o=u(h.Pb(),46),ue(t.b.b,u(o.b,81)),ue(t.b.a,u(o.b,81).d)}function B0n(t,e){var n;if(e!=null&&!t.c.Yj().wj(e))throw n=Et(e,56)?u(e,56).Tg().zb:Ap(sl(e)),rt(new Xk(ab+t.c.ne()+"'s type '"+t.c.Yj().ne()+"' does not permit a value of type '"+n+"'"))}function R0n(t,e,n){var r,s;for(s=new ha(t.b,0);s.b<s.d.gc();)r=(Qn(s.b<s.d.gc()),u(s.d.Xb(s.c=s.b++),70)),Gt(Q(r,(se(),e9t)))===Gt(e)&&(z4t(r.n,Fa(t.c.i),n),El(s),ue(e.b,r))}function j0n(t,e){if(e.a)switch(u(Q(e.b,(se(),r9t)),98).g){case 0:case 1:adn(e);case 2:us(new Tn(null,new _n(e.d,16)),new uF),$pn(t.a,e)}else us(new Tn(null,new _n(e.d,16)),new uF)}function Dae(t){var e,n;return n=b.Math.sqrt((t.k==null&&(t.k=syt(t,new ZX)),Xt(t.k)/(t.b*(t.g==null&&(t.g=une(t,new NF)),Xt(t.g))))),e=Sr(ku(b.Math.round(n))),e=b.Math.min(e,t.f),e}function Mc(){Bu(),evt.call(this),this.j=(be(),Zo),this.a=new Ta,new Vtt,this.f=(Bl(2,my),new Yc(2)),this.e=(Bl(4,my),new Yc(4)),this.g=(Bl(4,my),new Yc(4)),this.b=new VGt(this.e,this.g)}function $0n(t,e){var n,r;return!(je(Re(Q(e,(se(),$1))))||(r=e.c.i,t==(hh(),yS)&&r.k==(Gn(),Sl))||(n=u(Q(r,(Te(),cu)),163),n==fb))}function z0n(t,e){var n,r;return!(je(Re(Q(e,(se(),$1))))||(r=e.d.i,t==(hh(),xS)&&r.k==(Gn(),Sl))||(n=u(Q(r,(Te(),cu)),163),n==Fy))}function q0n(t,e){var n,r,s,o,h,d,w;for(h=t.d,w=t.o,d=new ih(-h.b,-h.d,h.b+w.a+h.c,h.d+w.b+h.a),r=e,s=0,o=r.length;s<o;++s)n=r[s],n&&h_(d,n.i);h.b=-d.c,h.d=-d.d,h.c=d.b-h.b-w.a,h.a=d.a-h.d-w.b}function iD(){iD=Z,X_t=new SM("CENTER_DISTANCE",0),Vht=new SM("CIRCLE_UNDERLAP",1),Z_t=new SM("RECTANGLE_UNDERLAP",2),Uht=new SM("INVERTED_OVERLAP",3),Q_t=new SM("MINIMUM_ROOT_DISTANCE",4)}function H0n(t){P5t();var e,n,r,s,o;if(t==null)return null;for(r=t.length,s=r*2,e=Pt(mh,vd,25,s,15,1),n=0;n<r;n++)o=t[n],o<0&&(o+=256),e[n*2]=uU[o>>4],e[n*2+1]=uU[o&15];return Ah(e,0,e.length)}function G0n(t){Qj();var e,n,r;switch(r=t.c.length,r){case 0:return hge;case 1:return e=u(poe(new S(t)),42),gtn(e.cd(),e.dd());default:return n=u(D1(t,Pt(M2,Dq,42,t.c.length,0,1)),165),new Ztt(n)}}function V0n(t){var e,n,r,s,o,h;for(e=new P3,n=new P3,qp(e,t),qp(n,t);n.b!=n.c;)for(s=u(Fx(n),37),h=new S(s.a);h.a<h.c.c.length;)o=u(J(h),10),o.e&&(r=o.e,qp(e,r),qp(n,r));return e}function Rg(t,e){switch(e.g){case 1:return Ox(t.j,(Bu(),O7t));case 2:return Ox(t.j,(Bu(),I7t));case 3:return Ox(t.j,(Bu(),P7t));case 4:return Ox(t.j,(Bu(),F7t));default:return vn(),vn(),io}}function U0n(t,e){var n,r,s;n=utn(e,t.e),r=u(Jn(t.g.f,n),19).a,s=t.a.c.length-1,t.a.c.length!=0&&u(Fe(t.a,s),287).c==r?(++u(Fe(t.a,s),287).a,++u(Fe(t.a,s),287).b):ue(t.a,new hWt(r))}function W0n(t,e,n){var r,s;return r=Jvn(t,e,n),r!=0?r:Vs(e,(se(),Tc))&&Vs(n,Tc)?(s=du(u(Q(e,Tc),19).a,u(Q(n,Tc),19).a),s<0?vD(t,e,n):s>0&&vD(t,n,e),s):Spn(t,e,n)}function Oae(t,e,n){var r,s,o,h;if(e.b!=0){for(r=new Qi,h=ei(e,0);h.b!=h.d.c;)o=u(ti(h),86),Ua(r,byt(o)),s=o.e,s.a=u(Q(o,(fc(),Lht)),19).a,s.b=u(Q(o,t_t),19).a;Oae(t,r,Rc(n,r.b/t.a|0))}}function Nae(t,e){var n,r,s,o,h;if(t.e<=e||Jrn(t,t.g,e))return t.g;for(o=t.r,r=t.g,h=t.r,s=(o-r)/2+r;r+1<o;)n=E_(t,s,!1),n.b<=s&&n.a<=e?(h=s,o=s):r=s,s=(o-r)/2+r;return h}function K0n(t,e,n){var r;r=Jce(t,e,!0),wr(n,"Recursive Graph Layout",r),N4t(e,ct(ot(wSt,1),Ie,527,0,[new YL])),r2(e,(ci(),C7))||N4t(e,ct(ot(wSt,1),Ie,527,0,[new yZ])),Txt(t,e,null,n),or(n)}function or(t){var e;if(t.p==null)throw rt(new Fo("The task has not begun yet."));t.b||(t.k&&(e=(qd(),Ca(ku(Date.now()),$g)),t.q=Vv(Yp(e,t.o))*1e-9),t.c<t.r&&iit(t,t.r-t.c),t.b=!0)}function sD(t){var e,n,r;for(r=new Du,ni(r,new $e(t.j,t.k)),n=new er((!t.a&&(t.a=new Ss(Hh,t,5)),t.a));n.e!=n.i.gc();)e=u(dr(n),469),ni(r,new $e(e.a,e.b));return ni(r,new $e(t.b,t.c)),r}function Y0n(t,e,n,r,s){var o,h,d,w,k,C;if(s)for(w=s.a.length,o=new Qb(w),C=(o.b-o.a)*o.c<0?(Ip(),Ab):new Pp(o);C.Ob();)k=u(C.Pb(),19),d=_8(s,k.a),h=new AXt(t,e,n,r),smn(h.a,h.b,h.c,h.d,d)}function F4t(t,e){var n;if(Gt(t)===Gt(e))return!0;if(Et(e,21)){n=u(e,21);try{return t.gc()==n.gc()&&t.Ic(n)}catch(r){if(r=Wi(r),Et(r,173)||Et(r,205))return!1;throw rt(r)}}return!1}function B4t(t,e){var n;ue(t.d,e),n=e.rf(),t.c?(t.e.a=b.Math.max(t.e.a,n.a),t.e.b+=n.b,t.d.c.length>1&&(t.e.b+=t.a)):(t.e.a+=n.a,t.e.b=b.Math.max(t.e.b,n.b),t.d.c.length>1&&(t.e.a+=t.a))}function X0n(t){var e,n,r,s;switch(s=t.i,e=s.b,r=s.j,n=s.g,s.a.g){case 0:n.a=(t.g.b.o.a-r.a)/2;break;case 1:n.a=e.d.n.a+e.d.a.a;break;case 2:n.a=e.d.n.a+e.d.a.a-r.a;break;case 3:n.b=e.d.n.b+e.d.a.b}}function Pae(t,e,n,r,s){if(r<e||s<n)throw rt(new Pn("The highx must be bigger then lowx and the highy must be bigger then lowy"));return t.a<e?t.a=e:t.a>r&&(t.a=r),t.b<n?t.b=n:t.b>s&&(t.b=s),t}function Q0n(t){if(Et(t,149))return _2n(u(t,149));if(Et(t,229))return Eln(u(t,229));if(Et(t,23))return M0n(u(t,23));throw rt(new Pn(k8t+Qp(new wl(ct(ot(Xn,1),Ie,1,5,[t])))))}function Z0n(t,e,n,r,s){var o,h,d;for(o=!0,h=0;h<r;h++)o=o&n[h]==0;if(s==0)Ic(n,r,t,0,e),h=e;else{for(d=32-s,o=o&n[h]<<d==0,h=0;h<e-1;h++)t[h]=n[h+r]>>>s|n[h+r+1]<<d;t[h]=n[h+r]>>>s,++h}return o}function R4t(t,e,n,r){var s,o,h;if(e.k==(Gn(),Zs)){for(o=new ar(lr(jo(e).a.Kc(),new z));zr(o);)if(s=u(Lr(o),17),h=s.c.i.k,h==Zs&&t.c.a[s.c.i.c.p]==r&&t.c.a[e.c.p]==n)return!0}return!1}function J0n(t,e){var n,r,s,o;return e&=63,n=t.h&W0,e<22?(o=n>>>e,s=t.m>>e|n<<22-e,r=t.l>>e|t.m<<22-e):e<44?(o=0,s=n>>>e-22,r=t.m>>e-22|t.h<<44-e):(o=0,s=0,r=n>>>e-44),ru(r&ul,s&ul,o&W0)}function Fae(t,e,n,r){var s;this.b=r,this.e=t==(Zv(),DS),s=e[n],this.d=Xb(dl,[te,i0],[177,25],16,[s.length,s.length],2),this.a=Xb(Tr,[te,Xr],[48,25],15,[s.length,s.length],2),this.c=new y4t(e,n)}function tgn(t){var e,n,r;for(t.k=new $wt((be(),ct(ot(Xa,1),xc,61,0,[Zo,Nn,Hn,mr,Bn])).length,t.j.c.length),r=new S(t.j);r.a<r.c.c.length;)n=u(J(r),113),e=n.d.j,ln(t.k,e,n);t.e=f2n(Px(t.k))}function Bae(t,e){var n,r,s;Ns(t.d,e),n=new VT,ki(t.c,e,n),n.f=Dit(e.c),n.a=Dit(e.d),n.d=(b_(),s=e.c.i.k,s==(Gn(),Ds)||s==j1),n.e=(r=e.d.i.k,r==Ds||r==j1),n.b=e.c.j==(be(),Bn),n.c=e.d.j==Hn}function egn(t){var e,n,r,s,o;for(o=vi,s=vi,r=new S(o4(t));r.a<r.c.c.length;)n=u(J(r),213),e=n.e.e-n.d.e,n.e==t&&e<s?s=e:e<o&&(o=e);return s==vi&&(s=-1),o==vi&&(o=-1),new la(de(s),de(o))}function ngn(t,e){var n,r,s;return s=FE,r=(s_(),hO),s=b.Math.abs(t.b),n=b.Math.abs(e.f-t.b),n<s&&(s=n,r=tG),n=b.Math.abs(t.a),n<s&&(s=n,r=fO),n=b.Math.abs(e.g-t.a),n<s&&(s=n,r=JH),r}function rgn(t,e){var n,r,s,o;for(n=e.a.o.a,o=new Kd(Fa(e.a).b,e.c,e.f+1),s=new fx(o);s.b<s.d.gc();)if(r=(Qn(s.b<s.d.gc()),u(s.d.Xb(s.c=s.b++),29)),r.c.a>=n)return pE(t,e,r.p),!0;return!1}function Rae(t){var e;return t.Db&64?Ost(t):(e=new Il(h8t),!t.a||Vr(Vr((e.a+=' "',e),t.a),'"'),Vr(Cv(Vr(Cv(Vr(Cv(Vr(Cv((e.a+=" (",e),t.i),","),t.j)," | "),t.g),","),t.f),")"),e.a)}function jae(t,e,n){var r,s,o,h,d;for(d=au(t.e.Tg(),e),s=u(t.g,119),r=0,h=0;h<t.i;++h)if(o=s[h],d.rl(o.ak())){if(r==n)return dy(t,h),to(),u(e,66).Oj()?o:o.dd();++r}throw rt(new mo(X_+n+S2+r))}function $ae(t){var e,n,r;if(e=t.c,e==2||e==7||e==1)return gi(),gi(),fA;for(r=Cxt(t),n=null;(e=t.c)!=2&&e!=7&&e!=1;)n||(n=(gi(),gi(),new lC(1)),m2(n,r),r=n),m2(n,Cxt(t));return r}function ign(t,e,n){return t<0||t>n?U4t(t,n,"start index"):e<0||e>n?U4t(e,n,"end index"):v_("end index (%s) must not be less than start index (%s)",ct(ot(Xn,1),Ie,1,5,[de(e),de(t)]))}function zae(t,e){var n,r,s,o;for(r=0,s=t.length;r<s;r++){o=t[r];try{o[1]?o[0].jm()&&(e=qtn(e,o)):o[0].jm()}catch(h){if(h=Wi(h),Et(h,78))n=h,vR(),Onn(Et(n,477)?u(n,477).ae():n);else throw rt(h)}}return e}function pE(t,e,n){var r,s,o;for(n!=e.c+e.b.gc()&&pyn(e.a,Zon(e,n-e.c)),o=e.a.c.p,t.a[o]=b.Math.max(t.a[o],e.a.o.a),s=u(Q(e.a,(se(),TO)),15).Kc();s.Ob();)r=u(s.Pb(),70),Jt(r,slt,(Fn(),!0))}function sgn(t,e){var n,r,s;s=N2n(e),Jt(e,(se(),Flt),s),s&&(r=vi,Ao(t.f,s)&&(r=u(ec(Ao(t.f,s)),19).a),n=u(Fe(e.g,0),17),je(Re(Q(n,$1)))||ki(t,s,de(b.Math.min(u(Q(n,Tc),19).a,r))))}function qae(t,e,n){var r,s,o,h,d;for(e.p=-1,d=iw(e,(so(),eu)).Kc();d.Ob();)for(h=u(d.Pb(),11),s=new S(h.g);s.a<s.c.c.length;)r=u(J(s),17),o=r.d.i,e!=o&&(o.p<0?n.Fc(r):o.p>0&&qae(t,o,n));e.p=0}function Xe(t){var e;this.c=new Qi,this.f=t.e,this.e=t.d,this.i=t.g,this.d=t.c,this.b=t.b,this.k=t.j,this.a=t.a,t.i?this.j=t.i:this.j=(e=u(Hf(Qg),9),new rh(e,u(uf(e,e.length),9),0)),this.g=t.f}function agn(t){var e,n,r,s;for(e=Rp(Vr(new Il("Predicates."),"and"),40),n=!0,s=new fx(t);s.b<s.d.gc();)r=(Qn(s.b<s.d.gc()),s.d.Xb(s.c=s.b++)),n||(e.a+=","),e.a+=""+r,n=!1;return(e.a+=")",e).a}function Hae(t,e,n){var r,s,o;if(!(n<=e+2))for(s=(n-e)/2|0,r=0;r<s;++r)o=(An(e+r,t.c.length),u(t.c[e+r],11)),ah(t,e+r,(An(n-r-1,t.c.length),u(t.c[n-r-1],11))),An(n-r-1,t.c.length),t.c[n-r-1]=o}function ogn(t,e,n){var r,s,o,h,d,w,k,C;o=t.d.p,d=o.e,w=o.r,t.g=new HM(w),h=t.d.o.c.p,r=h>0?d[h-1]:Pt(o0,zg,10,0,0,1),s=d[h],k=h<d.length-1?d[h+1]:Pt(o0,zg,10,0,0,1),C=e==n-1,C?grt(t.g,s,k):grt(t.g,r,s)}function Gae(t){var e;this.j=new le,this.f=new qs,this.b=(e=u(Hf(Xa),9),new rh(e,u(uf(e,e.length),9),0)),this.d=Pt(Tr,Xr,25,(be(),ct(ot(Xa,1),xc,61,0,[Zo,Nn,Hn,mr,Bn])).length,15,1),this.g=t}function Vae(t,e){var n,r,s;if(e.c.length!=0){for(n=yae(t,e),s=!1;!n;)sq(t,e,!0),s=!0,n=yae(t,e);s&&sq(t,e,!1),r=git(e),t.b&&t.b.lg(r),t.a=Are(t,(An(0,e.c.length),u(e.c[0],33))),Vae(t,r)}}function Nst(t,e){var n,r,s;if(r=yn(t.Tg(),e),n=e-t.Ah(),n<0)if(r)if(r.Ij())s=t.Yg(r),s>=0?t.Bh(s):Q4t(t,r);else throw rt(new Pn(ab+r.ne()+W_));else throw rt(new Pn(yde+e+xde));else lh(t,n,r)}function j4t(t){var e,n;if(n=null,e=!1,Et(t,204)&&(e=!0,n=u(t,204).a),e||Et(t,258)&&(e=!0,n=""+u(t,258).a),e||Et(t,483)&&(e=!0,n=""+u(t,483).a),!e)throw rt(new tet(x8t));return n}function Uae(t,e){var n,r;if(t.f){for(;e.Ob();)if(n=u(e.Pb(),72),r=n.ak(),Et(r,99)&&u(r,18).Bb&dc&&(!t.e||r.Gj()!=I7||r.aj()!=0)&&n.dd()!=null)return e.Ub(),!0;return!1}else return e.Ob()}function Wae(t,e){var n,r;if(t.f){for(;e.Sb();)if(n=u(e.Ub(),72),r=n.ak(),Et(r,99)&&u(r,18).Bb&dc&&(!t.e||r.Gj()!=I7||r.aj()!=0)&&n.dd()!=null)return e.Pb(),!0;return!1}else return e.Sb()}function $4t(t,e,n){var r,s,o,h,d,w;for(w=au(t.e.Tg(),e),r=0,d=t.i,s=u(t.g,119),h=0;h<t.i;++h)if(o=s[h],w.rl(o.ak())){if(n==r)return h;++r,d=h+1}if(n==r)return d;throw rt(new mo(X_+n+S2+r))}function cgn(t,e){var n,r,s,o;if(t.f.c.length==0)return null;for(o=new Ax,r=new S(t.f);r.a<r.c.c.length;)n=u(J(r),70),s=n.o,o.b=b.Math.max(o.b,s.a),o.a+=s.b;return o.a+=(t.f.c.length-1)*e,o}function ugn(t,e,n){var r,s,o;for(s=new ar(lr(z0(n).a.Kc(),new z));zr(s);)r=u(Lr(s),17),!Va(r)&&!(!Va(r)&&r.c.i.c==r.d.i.c)&&(o=_ce(t,r,n,new cqt),o.c.length>1&&(e.c[e.c.length]=o))}function lgn(t){var e,n,r,s;for(n=new Qi,Ua(n,t.o),r=new Ppt;n.b!=0;)e=u(n.b==0?null:(Qn(n.b!=0),ch(n,n.a.a)),508),s=_he(t,e,!0),s&&ue(r.a,e);for(;r.a.c.length!=0;)e=u(mre(r),508),_he(t,e,!1)}function jg(){jg=Z,mSt=new _x(O_,0),Aa=new _x("BOOLEAN",1),gc=new _x("INT",2),T7=new _x("STRING",3),Do=new _x("DOUBLE",4),cs=new _x("ENUM",5),j6=new _x("ENUMSET",6),q1=new _x("OBJECT",7)}function h_(t,e){var n,r,s,o,h;r=b.Math.min(t.c,e.c),o=b.Math.min(t.d,e.d),s=b.Math.max(t.c+t.b,e.c+e.b),h=b.Math.max(t.d+t.a,e.d+e.a),s<r&&(n=r,r=s,s=n),h<o&&(n=o,o=h,h=n),RKt(t,r,o,s-r,h-o)}function Ru(){Ru=Z,fLt=ct(ot(Ae,1),te,2,6,[F8t,JD,IH,B0e,DH,nut,mH]),hLt=ct(ot(Ae,1),te,2,6,[F8t,"empty",JD,ZD,"elementOnly"]),dLt=ct(ot(Ae,1),te,2,6,[F8t,"preserve","replace",t1]),ma=new FKt}function z4t(t,e,n){var r,s,o;if(e!=n){r=e;do Li(t,r.c),s=r.e,s&&(o=r.d,Fm(t,o.b,o.d),Li(t,s.n),r=Fa(s));while(s);r=n;do na(t,r.c),s=r.e,s&&(o=r.d,BM(t,o.b,o.d),na(t,s.n),r=Fa(s));while(s)}}function Pst(t,e,n,r){var s,o,h,d,w;if(r.f.c+r.g.c==0)for(h=t.a[t.c],d=0,w=h.length;d<w;++d)o=h[d],ki(r,o,new gne(t,o,n));return s=u(ec(Ao(r.f,e)),663),s.b=0,s.c=s.f,s.c==0||JB(u(Fe(s.a,s.b),287)),s}function i6(){i6=Z,o7=new Y9("MEDIAN_LAYER",0),dS=new Y9("TAIL_LAYER",1),a7=new Y9("HEAD_LAYER",2),Oy=new Y9("SPACE_EFFICIENT_LAYER",3),H4=new Y9("WIDEST_LAYER",4),q4=new Y9("CENTER_LAYER",5)}function hgn(t){switch(t.g){case 0:case 1:case 2:return be(),Nn;case 3:case 4:case 5:return be(),mr;case 6:case 7:case 8:return be(),Bn;case 9:case 10:case 11:return be(),Hn;default:return be(),Zo}}function fgn(t,e){var n;return t.c.length==0?!1:(n=hie((An(0,t.c.length),u(t.c[0],17)).c.i),Ol(),n==(sy(),t5)||n==J4?!0:A8(pu(new Tn(null,new _n(t,16)),new lQ),new E$t(e)))}function q4t(t,e,n){var r,s,o;if(!t.b[e.g]){for(t.b[e.g]=!0,r=n,!r&&(r=new A$),ni(r.b,e),o=t.a[e.g].Kc();o.Ob();)s=u(o.Pb(),188),s.b!=e&&q4t(t,s.b,r),s.c!=e&&q4t(t,s.c,r),ni(r.a,s);return r}return null}function f_(){f_=Z,wV=new tC("ROOT_PROC",0),kht=new tC("FAN_PROC",1),Tht=new tC("NEIGHBORS_PROC",2),Eht=new tC("LEVEL_HEIGHT",3),Cht=new tC("NODE_POSITION_PROC",4),xht=new tC("DETREEIFYING_PROC",5)}function Fst(t,e){if(Et(e,239))return sXe(t,u(e,33));if(Et(e,186))return aXe(t,u(e,118));if(Et(e,439))return iXe(t,u(e,202));throw rt(new Pn(k8t+Qp(new wl(ct(ot(Xn,1),Ie,1,5,[e])))))}function Kae(t,e,n){var r,s;if(this.f=t,r=u(Jn(t.b,e),283),s=r?r.a:0,bmt(n,s),n>=(s/2|0))for(this.e=r?r.c:null,this.d=s;n++<s;)yQt(this);else for(this.c=r?r.b:null;n-- >0;)Bwt(this);this.b=e,this.a=null}function dgn(t,e){var n,r;e.a?F2n(t,e):(n=u(gnt(t.b,e.b),57),n&&n==t.a[e.b.f]&&n.a&&n.a!=e.b.a&&n.c.Fc(e.b),r=u(dnt(t.b,e.b),57),r&&t.a[r.f]==e.b&&r.a&&r.a!=e.b.a&&e.b.c.Fc(r),ent(t.b,e.b))}function Yae(t,e){var n,r;if(n=u(go(t.b,e),124),u(u(Ai(t.r,e),21),84).dc()){n.n.b=0,n.n.c=0;return}n.n.b=t.C.b,n.n.c=t.C.c,t.A.Hc((_l(),V2))&&mue(t,e),r=Hhn(t,e),Jst(t,e)==(c4(),mb)&&(r+=2*t.w),n.a.a=r}function Xae(t,e){var n,r;if(n=u(go(t.b,e),124),u(u(Ai(t.r,e),21),84).dc()){n.n.d=0,n.n.a=0;return}n.n.d=t.C.d,n.n.a=t.C.a,t.A.Hc((_l(),V2))&&yue(t,e),r=Ghn(t,e),Jst(t,e)==(c4(),mb)&&(r+=2*t.w),n.a.b=r}function ggn(t,e){var n,r,s,o;for(o=new le,r=new S(e);r.a<r.c.c.length;)n=u(J(r),65),ue(o,new Tbt(n,!0)),ue(o,new Tbt(n,!1));s=new HXt(t),O9(s.a.a),cZt(o,t.b,new wl(ct(ot(zge,1),Ie,679,0,[s])))}function Qae(t,e,n,r){var s,o,h,d,w,k,C,M,F,H,V,Y,tt;return w=t.a,H=t.b,k=e.a,V=e.b,C=n.a,Y=n.b,M=r.a,tt=r.b,o=w*V-H*k,h=C*tt-Y*M,s=(w-k)*(Y-tt)-(H-V)*(C-M),d=(o*(C-M)-h*(w-k))/s,F=(o*(Y-tt)-h*(H-V))/s,new $e(d,F)}function H4t(t,e){var n,r,s;if(!t.d[e.p]){for(t.d[e.p]=!0,t.a[e.p]=!0,r=new ar(lr(Ms(e).a.Kc(),new z));zr(r);)n=u(Lr(r),17),!Va(n)&&(s=n.d.i,t.a[s.p]?ue(t.b,n):H4t(t,s));t.a[e.p]=!1}}function Zae(t,e,n){var r;switch(r=0,u(Q(e,(Te(),cu)),163).g){case 2:r=2*-n+t.a,++t.a;break;case 1:r=-n;break;case 3:r=n;break;case 4:r=2*n+t.b,++t.b}return Vs(e,(se(),Tc))&&(r+=u(Q(e,Tc),19).a),r}function Jae(t,e,n){var r,s,o;for(n.zc(e,t),ue(t.n,e),o=t.p.eg(e),e.j==t.p.fg()?eie(t.e,o):eie(t.j,o),Kj(t),s=Bp(L1(ct(ot(B1,1),Ie,20,0,[new Ys(e),new Er(e)])));zr(s);)r=u(Lr(s),11),n._b(r)||Jae(t,r,n)}function G4t(t){var e,n,r;return n=u(qe(t,(ci(),z2)),21),n.Hc((_l(),Xy))?(r=u(qe(t,vb),21),e=new yo(u(qe(t,a5),8)),r.Hc((cl(),M7))&&(e.a<=0&&(e.a=20),e.b<=0&&(e.b=20)),e):new Ta}function V4t(t){var e,n,r;if(!t.b){for(r=new Sk,n=new Mx(k_(t));n.e!=n.i.gc();)e=u(nst(n),18),e.Bb&dc&&Mr(r,e);ey(r),t.b=new q3((u(St(Wt((jp(),Ln).o),8),18),r.i),r.g),rl(t).b&=-9}return t.b}function pgn(t,e){var n,r,s,o,h,d,w,k;w=u(XI(Px(e.k),Pt(Xa,xc,61,2,0,1)),122),k=e.g,n=_Zt(e,w[0]),s=CZt(e,w[1]),r=vst(t,k,n,s),o=_Zt(e,w[1]),d=CZt(e,w[0]),h=vst(t,k,o,d),r<=h?(e.a=n,e.c=s):(e.a=o,e.c=d)}function bgn(t,e,n){var r,s,o;for(wr(n,"Processor set neighbors",1),t.a=e.b.b==0?1:e.b.b,s=null,r=ei(e.b,0);!s&&r.b!=r.d.c;)o=u(ti(r),86),je(Re(Q(o,(fc(),Wy))))&&(s=o);s&&sue(t,new Cp(s),n),or(n)}function toe(t){Tat();var e,n,r,s;return r=cd(t,Eu(35)),e=r==-1?t:t.substr(0,r),n=r==-1?null:t.substr(r+1),s=rsn(QAt,e),s?n!=null&&(s=dre(s,(On(n),n))):(s=D5n(e),fsn(QAt,e,s),n!=null&&(s=dre(s,n))),s}function Bst(t){var e;vn();var n,r,s,o,h,d;if(Et(t,54))for(o=0,s=t.gc()-1;o<s;++o,--s)e=t.Xb(o),t._c(o,t.Xb(s)),t._c(s,e);else for(n=t.Yc(),h=t.Zc(t.gc());n.Tb()<h.Vb();)r=n.Pb(),d=h.Ub(),n.Wb(d),h.Wb(r)}function vgn(t,e){var n,r,s;wr(e,"End label pre-processing",1),n=Xt(ye(Q(t,(Te(),B6)))),r=Xt(ye(Q(t,Gy))),s=c8(u(Q(t,Vl),103)),us(Wo(new Tn(null,new _n(t.b,16)),new yL),new vKt(n,r,s)),or(e)}function Rst(t,e){var n,r,s,o,h,d;for(d=0,o=new P3,qp(o,e);o.b!=o.c;)for(h=u(Fx(o),214),d+=_se(h.d,h.e),s=new S(h.b);s.a<s.c.c.length;)r=u(J(s),37),n=u(Fe(t.b,r.p),214),n.s||(d+=Rst(t,n));return d}function eoe(t,e,n){var r,s;One(this),e==(qv(),bb)?Ns(this.r,t.c):Ns(this.w,t.c),n==bb?Ns(this.r,t.d):Ns(this.w,t.d),Bae(this,t),r=Dit(t.c),s=Dit(t.d),Sae(this,r,s,s),this.o=(b_(),b.Math.abs(r-s)<.2)}function noe(t,e,n){var r,s,o,h,d,w;if(d=u(In(t.a,8),1936),d!=null)for(s=d,o=0,h=s.length;o<h;++o)null.jm();r=n,t.a.Db&1||(w=new rXt(t,n,e),r.ui(w)),Et(r,672)?u(r,672).wi(t.a):r.ti()==t.a&&r.vi(null)}function wgn(){var t;return L5e?u(wE((Mp(),Uh),L2),1945):(D4n(),t=u(Et(Fc((Mp(),Uh),L2),586)?Fc(Uh,L2):new hXt,586),L5e=!0,p5n(t),H5n(t),ki((bbt(),ZAt),t,new ix),mst(t),xo(Uh,L2,t),t)}function mgn(t,e,n,r){var s;return s=p4(t,n,ct(ot(Ae,1),te,2,6,[Qat,Zat,Jat,tot,eot,not,rot]),e),s<0&&(s=p4(t,n,ct(ot(Ae,1),te,2,6,["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]),e)),s<0?!1:(r.d=s,!0)}function ygn(t,e,n,r){var s;return s=p4(t,n,ct(ot(Ae,1),te,2,6,[Qat,Zat,Jat,tot,eot,not,rot]),e),s<0&&(s=p4(t,n,ct(ot(Ae,1),te,2,6,["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]),e)),s<0?!1:(r.d=s,!0)}function xgn(t){var e,n,r;for(Sbn(t),r=new le,n=new S(t.a.a.b);n.a<n.c.c.length;)e=u(J(n),81),ue(r,new Lbt(e,!0)),ue(r,new Lbt(e,!1));cfn(t.c),aI(r,t.b,new wl(ct(ot(gO,1),Ie,369,0,[t.c]))),qpn(t)}function kgn(t){var e,n,r,s;for(n=new Cr,s=new S(t.d);s.a<s.c.c.length;)r=u(J(s),181),e=u(r.We((se(),M6)),17),Ao(n.f,e)||ki(n,e,new BXt(e)),ue(u(ec(Ao(n.f,e)),456).b,r);return new Pu(new b1(n))}function Egn(t,e){var n,r,s,o,h;for(r=new RQt(t.j.c.length),n=null,o=new S(t.j);o.a<o.c.c.length;)s=u(J(o),11),s.j!=n&&(r.b==r.c||pce(r,n,e),rmt(r),n=s.j),h=Joe(s),h&&Qwt(r,h);r.b==r.c||pce(r,n,e)}function Tgn(t,e){var n,r,s;for(r=new ha(t.b,0);r.b<r.d.gc();)n=(Qn(r.b<r.d.gc()),u(r.d.Xb(r.c=r.b++),70)),s=u(Q(n,(Te(),Md)),272),s==(A1(),Yy)&&(El(r),ue(e.b,n),Vs(n,(se(),M6))||Jt(n,M6,t))}function Cgn(t){var e,n,r,s,o;for(e=N0(new ar(lr(Ms(t).a.Kc(),new z))),s=new ar(lr(jo(t).a.Kc(),new z));zr(s);)r=u(Lr(s),17),n=r.c.i,o=N0(new ar(lr(Ms(n).a.Kc(),new z))),e=b.Math.max(e,o);return de(e)}function _gn(t,e,n){var r,s,o,h;for(wr(n,"Processor arrange node",1),s=null,o=new Qi,r=ei(e.b,0);!s&&r.b!=r.d.c;)h=u(ti(r),86),je(Re(Q(h,(fc(),Wy))))&&(s=h);hs(o,s,o.c.b,o.c),fhe(t,o,Rc(n,1)),or(n)}function roe(t,e,n){var r,s,o;r=u(qe(t,(ci(),BV)),21),s=0,o=0,e.a>n.a&&(r.Hc((cy(),qO))?s=(e.a-n.a)/2:r.Hc(HO)&&(s=e.a-n.a)),e.b>n.b&&(r.Hc((cy(),VO))?o=(e.b-n.b)/2:r.Hc(GO)&&(o=e.b-n.b)),A4t(t,s,o)}function ioe(t,e,n,r,s,o,h,d,w,k,C,M,F){Et(t.Cb,88)&&hy(rl(u(t.Cb,88)),4),Xc(t,n),t.f=h,rE(t,d),sE(t,w),nE(t,k),iE(t,C),Pg(t,M),aE(t,F),Ng(t,!0),Ig(t,s),t.ok(o),f2(t,e),r!=null&&(t.i=null,ez(t,r))}function soe(t){var e,n;if(t.f){for(;t.n>0;){if(e=u(t.k.Xb(t.n-1),72),n=e.ak(),Et(n,99)&&u(n,18).Bb&dc&&(!t.e||n.Gj()!=I7||n.aj()!=0)&&e.dd()!=null)return!0;--t.n}return!1}else return t.n>0}function U4t(t,e,n){if(t<0)return v_(Hhe,ct(ot(Xn,1),Ie,1,5,[n,de(t)]));if(e<0)throw rt(new Pn(Ghe+e));return v_("%s (%s) must not be greater than size (%s)",ct(ot(Xn,1),Ie,1,5,[n,de(t),de(e)]))}function W4t(t,e,n,r,s,o){var h,d,w,k;if(h=r-n,h<7){fln(e,n,r,o);return}if(w=n+s,d=r+s,k=w+(d-w>>1),W4t(e,t,w,k,-s,o),W4t(e,t,k,d,-s,o),o.ue(t[k-1],t[k])<=0){for(;n<r;)Ji(e,n++,t[w++]);return}Nun(t,w,k,d,e,n,r,o)}function aD(t,e){var n,r,s;for(s=new le,r=new S(t.c.a.b);r.a<r.c.c.length;)n=u(J(r),57),e.Lb(n)&&(ue(s,new kbt(n,!0)),ue(s,new kbt(n,!1)));ofn(t.e),cZt(s,t.d,new wl(ct(ot(zge,1),Ie,679,0,[t.e])))}function Sgn(t,e){var n,r,s,o,h,d,w;for(w=e.d,s=e.b.j,d=new S(w);d.a<d.c.c.length;)for(h=u(J(d),101),o=Pt(dl,i0,25,s.c.length,16,1),ki(t.b,h,o),n=h.a.d.p-1,r=h.c.d.p;n!=r;)n=(n+1)%s.c.length,o[n]=!0}function Agn(t,e){for(t.r=new LI(t.p),lpt(t.r,t),Ua(t.r.j,t.j),_h(t.j),ni(t.j,e),ni(t.r.e,e),Kj(t),Kj(t.r);t.f.c.length!=0;)AUt(u(Fe(t.f,0),129));for(;t.k.c.length!=0;)AUt(u(Fe(t.k,0),129));return t.r}function jst(t,e,n){var r,s,o;if(s=yn(t.Tg(),e),r=e-t.Ah(),r<0)if(s)if(s.Ij())o=t.Yg(s),o>=0?t.sh(o,n):E5t(t,s,n);else throw rt(new Pn(ab+s.ne()+W_));else throw rt(new Pn(yde+e+xde));else fh(t,r,s,n)}function aoe(t){var e,n,r,s;if(n=u(t,49).qh(),n)try{if(r=null,e=wE((Mp(),Uh),que(pln(n))),e&&(s=e.rh(),s&&(r=s.Wk(EKe(n.e)))),r&&r!=t)return aoe(r)}catch(o){if(o=Wi(o),!Et(o,60))throw rt(o)}return t}function su(t,e,n){var r,s,o,h;if(h=e==null?0:t.b.se(e),s=(r=t.a.get(h),r??new Array),s.length==0)t.a.set(h,s);else if(o=kre(t,e,s),o)return o.ed(n);return Ji(s,s.length,new RR(e,n)),++t.c,a$(t.b),null}function ooe(t,e){var n,r;return w$(t.a),Ud(t.a,(iz(),TV),TV),Ud(t.a,E7,E7),r=new Hs,bi(r,E7,(Cz(),Nht)),Gt(qe(e,(ay(),Bht)))!==Gt((RI(),CV))&&bi(r,E7,Dht),bi(r,E7,Oht),oUt(t.a,r),n=Tq(t.a,e),n}function coe(t){if(!t)return Vqt(),yge;var e=t.valueOf?t.valueOf():t;if(e!==t){var n=Eut[typeof e];return n?n(e):jyt(typeof e)}else return t instanceof Array||t instanceof b.Array?new lx(t):new Hk(t)}function uoe(t,e,n){var r,s,o;switch(o=t.o,r=u(go(t.p,n),244),s=r.i,s.b=uD(r),s.a=cD(r),s.b=b.Math.max(s.b,o.a),s.b>o.a&&!e&&(s.b=o.a),s.c=-(s.b-o.a)/2,n.g){case 1:s.d=-s.a;break;case 3:s.d=o.b}fat(r),dat(r)}function loe(t,e,n){var r,s,o;switch(o=t.o,r=u(go(t.p,n),244),s=r.i,s.b=uD(r),s.a=cD(r),s.a=b.Math.max(s.a,o.b),s.a>o.b&&!e&&(s.a=o.b),s.d=-(s.a-o.b)/2,n.g){case 4:s.c=-s.b;break;case 2:s.c=o.a}fat(r),dat(r)}function Lgn(t,e){var n,r,s,o,h;if(!e.dc()){if(s=u(e.Xb(0),128),e.gc()==1){Bce(t,s,s,1,0,e);return}for(n=1;n<e.gc();)(s.j||!s.o)&&(o=Rfn(e,n),o&&(r=u(o.a,19).a,h=u(o.b,128),Bce(t,s,h,n,r,e),n=r+1,s=h))}}function Mgn(t){var e,n,r,s,o,h;for(h=new Pu(t.d),Xs(h,new LX),e=(fq(),ct(ot(yTt,1),ae,270,0,[llt,dlt,ult,blt,flt,hlt,plt,glt])),n=0,o=new S(h);o.a<o.c.c.length;)s=u(J(o),101),r=e[n%e.length],_pn(s,r),++n}function Ign(t,e){y4();var n,r,s,o;if(e.b<2)return!1;for(o=ei(e,0),n=u(ti(o),8),r=n;o.b!=o.d.c;){if(s=u(ti(o),8),!(H8(t,r)&&H8(t,s)))return!1;r=s}return!!(H8(t,r)&&H8(t,n))}function K4t(t,e){var n,r,s,o,h,d,w,k,C,M;return C=null,M=t,h=R0(M,"x"),n=new azt(e),Ean(n.a,h),d=R0(M,"y"),r=new ozt(e),Tan(r.a,d),w=R0(M,zct),s=new czt(e),Can(s.a,w),k=R0(M,$ct),o=new uzt(e),C=(_an(o.a,k),k),C}function hy(t,e){bue(t,e),t.b&1&&(t.a.a=null),t.b&2&&(t.a.f=null),t.b&4&&(t.a.g=null,t.a.i=null),t.b&16&&(t.a.d=null,t.a.e=null),t.b&8&&(t.a.b=null),t.b&32&&(t.a.j=null,t.a.c=null)}function Dgn(t,e){var n,r,s;if(s=0,e.length>0)try{s=$l(e,_a,vi)}catch(o){throw o=Wi(o),Et(o,127)?(r=o,rt(new F$(r))):rt(o)}return n=(!t.a&&(t.a=new ztt(t)),t.a),s<n.i&&s>=0?u(St(n,s),56):null}function Ogn(t,e){if(t<0)return v_(Hhe,ct(ot(Xn,1),Ie,1,5,["index",de(t)]));if(e<0)throw rt(new Pn(Ghe+e));return v_("%s (%s) must be less than size (%s)",ct(ot(Xn,1),Ie,1,5,["index",de(t),de(e)]))}function Ngn(t){var e,n,r,s,o;if(t==null)return Tu;for(o=new c2(Ka,"[","]"),n=t,r=0,s=n.length;r<s;++r)e=n[r],o.a?Vr(o.a,o.b):o.a=new Il(o.d),cC(o.a,""+e);return o.a?o.e.length==0?o.a.a:o.a.a+(""+o.e):o.c}function Pgn(t){var e,n,r,s,o;if(t==null)return Tu;for(o=new c2(Ka,"[","]"),n=t,r=0,s=n.length;r<s;++r)e=n[r],o.a?Vr(o.a,o.b):o.a=new Il(o.d),cC(o.a,""+e);return o.a?o.e.length==0?o.a.a:o.a.a+(""+o.e):o.c}function Fgn(t){var e,n,r,s,o;if(t==null)return Tu;for(o=new c2(Ka,"[","]"),n=t,r=0,s=n.length;r<s;++r)e=n[r],o.a?Vr(o.a,o.b):o.a=new Il(o.d),cC(o.a,""+e);return o.a?o.e.length==0?o.a.a:o.a.a+(""+o.e):o.c}function Bgn(t){var e,n,r,s,o;if(t==null)return Tu;for(o=new c2(Ka,"[","]"),n=t,r=0,s=n.length;r<s;++r)e=n[r],o.a?Vr(o.a,o.b):o.a=new Il(o.d),cC(o.a,""+e);return o.a?o.e.length==0?o.a.a:o.a.a+(""+o.e):o.c}function hoe(t,e){var n,r,s,o,h,d;for(n=t.b.c.length,s=Fe(t.b,e);e*2+1<n&&(r=(o=2*e+1,h=o+1,d=o,h<n&&t.a.ue(Fe(t.b,h),Fe(t.b,o))<0&&(d=h),d),!(t.a.ue(s,Fe(t.b,r))<0));)ah(t.b,e,Fe(t.b,r)),e=r;ah(t.b,e,s)}function Y4t(t,e,n,r,s,o){var h,d,w,k,C;for(Gt(t)===Gt(n)&&(t=t.slice(e,e+s),e=0),w=n,d=e,k=e+s;d<k;)h=b.Math.min(d+1e4,k),s=h-d,C=t.slice(d,h),C.splice(0,0,r,o?s:0),Array.prototype.splice.apply(w,C),d=h,r+=s}function $st(t,e,n){var r,s;return r=n.d,s=n.e,t.g[r.d]<=t.i[e.d]&&t.i[e.d]<=t.i[r.d]&&t.g[s.d]<=t.i[e.d]&&t.i[e.d]<=t.i[s.d]?!(t.i[r.d]<t.i[s.d]):t.i[r.d]<t.i[s.d]}function foe(t){var e,n,r,s,o,h,d;if(r=t.a.c.length,r>0)for(h=t.c.d,d=t.d.d,s=ud(na(new $e(d.a,d.b),h),1/(r+1)),o=new $e(h.a,h.b),n=new S(t.a);n.a<n.c.c.length;)e=u(J(n),559),e.d.a=o.a,e.d.b=o.b,Li(o,s)}function doe(t,e,n){var r,s,o,h,d,w;for(w=ss,o=new S(Cce(t.b));o.a<o.c.c.length;)for(s=u(J(o),168),d=new S(Cce(e.b));d.a<d.c.c.length;)h=u(J(d),168),r=Tcn(s.a,s.b,h.a,h.b,n),w=b.Math.min(w,r);return w}function Fs(t,e){if(!e)throw rt(new L9);if(t.j=e,!t.d)switch(t.j.g){case 1:t.a.a=t.o.a/2,t.a.b=0;break;case 2:t.a.a=t.o.a,t.a.b=t.o.b/2;break;case 3:t.a.a=t.o.a/2,t.a.b=t.o.b;break;case 4:t.a.a=0,t.a.b=t.o.b/2}}function Rgn(t,e){var n,r,s;return Et(e.g,10)&&u(e.g,10).k==(Gn(),xs)?ss:(s=Hx(e),s?b.Math.max(0,t.b/2-.5):(n=Z3(e),n?(r=Xt(ye(iy(n,(Te(),Bw)))),b.Math.max(0,r/2-.5)):ss))}function jgn(t,e){var n,r,s;return Et(e.g,10)&&u(e.g,10).k==(Gn(),xs)?ss:(s=Hx(e),s?b.Math.max(0,t.b/2-.5):(n=Z3(e),n?(r=Xt(ye(iy(n,(Te(),Bw)))),b.Math.max(0,r/2-.5)):ss))}function $gn(t){var e,n,r,s,o,h;for(h=QC(t.d,t.e),o=h.Kc();o.Ob();)for(s=u(o.Pb(),11),r=t.e==(be(),Bn)?s.e:s.g,n=new S(r);n.a<n.c.c.length;)e=u(J(n),17),!Va(e)&&e.c.i.c!=e.d.i.c&&(U0n(t,e),++t.f,++t.c)}function goe(t,e){var n,r;if(e.dc())return vn(),vn(),io;for(r=new le,ue(r,de(_a)),n=1;n<t.f;++n)t.a==null&&pue(t),t.a[n]&&ue(r,de(n));return r.c.length==1?(vn(),vn(),io):(ue(r,de(vi)),zmn(e,r))}function zgn(t,e){var n,r,s,o,h,d,w;h=e.c.i.k!=(Gn(),Ds),w=h?e.d:e.c,n=n1n(e,w).i,s=u(Jn(t.k,w),121),r=t.i[n.p].a,rKt(w.i)<(n.c?Ro(n.c.a,n,0):-1)?(o=s,d=r):(o=r,d=s),vf(of(af(cf(sf(new Eh,0),4),o),d))}function qgn(t,e,n){var r,s,o,h,d,w;if(n)for(s=n.a.length,r=new Qb(s),d=(r.b-r.a)*r.c<0?(Ip(),Ab):new Pp(r);d.Ob();)h=u(d.Pb(),19),w=gst(t,s6(Xm(n,h.a))),w&&(o=(!e.b&&(e.b=new Cn(br,e,4,7)),e.b),Mr(o,w))}function Hgn(t,e,n){var r,s,o,h,d,w;if(n)for(s=n.a.length,r=new Qb(s),d=(r.b-r.a)*r.c<0?(Ip(),Ab):new Pp(r);d.Ob();)h=u(d.Pb(),19),w=gst(t,s6(Xm(n,h.a))),w&&(o=(!e.c&&(e.c=new Cn(br,e,5,8)),e.c),Mr(o,w))}function oD(t,e,n){var r,s;r=e.a&t.f,e.b=t.b[r],t.b[r]=e,s=e.f&t.f,e.d=t.c[s],t.c[s]=e,n?(e.e=n.e,e.e?e.e.c=e:t.a=e,e.c=n.c,e.c?e.c.e=e:t.e=e):(e.e=t.e,e.c=null,t.e?t.e.c=e:t.a=e,t.e=e),++t.i,++t.g}function poe(t){var e,n,r;if(e=t.Pb(),!t.Ob())return e;for(r=hc(Vr(new _p,"expected one element but was: <"),e),n=0;n<4&&t.Ob();n++)hc((r.a+=Ka,r),t.Pb());throw t.Ob()&&(r.a+=", ..."),r.a+=">",rt(new Pn(r.a))}function Ggn(t,e){var n;e.d?e.d.b=e.b:t.a=e.b,e.b?e.b.d=e.d:t.e=e.d,!e.e&&!e.c?(n=u(Ux(t.b,e.a),283),n.a=0,++t.c):(n=u(Jn(t.b,e.a),283),--n.a,e.e?e.e.c=e.c:n.b=e.c,e.c?e.c.e=e.e:n.c=e.e),--t.d}function Vgn(t){var e,n;return n=-t.a,e=ct(ot(mh,1),vd,25,15,[43,48,48,48,48]),n<0&&(e[0]=45,n=-n),e[1]=e[1]+((n/60|0)/10|0)&ms,e[2]=e[2]+(n/60|0)%10&ms,e[3]=e[3]+(n%60/10|0)&ms,e[4]=e[4]+n%10&ms,Ah(e,0,e.length)}function boe(t,e,n){var r,s;for(r=e.d,s=n.d;r.a-s.a==0&&r.b-s.b==0;)r.a+=ol(t,26)*L_+ol(t,27)*M_-.5,r.b+=ol(t,26)*L_+ol(t,27)*M_-.5,s.a+=ol(t,26)*L_+ol(t,27)*M_-.5,s.b+=ol(t,26)*L_+ol(t,27)*M_-.5}function X4t(t){var e,n,r,s;for(t.g=new e_(u(Ar(Xa),290)),r=0,n=(be(),Nn),e=0;e<t.j.c.length;e++)s=u(Fe(t.j,e),11),s.j!=n&&(r!=e&&Nx(t.g,n,new la(de(r),de(e))),n=s.j,r=e);Nx(t.g,n,new la(de(r),de(e)))}function Ugn(t){var e,n,r,s,o,h,d;for(r=0,n=new S(t.b);n.a<n.c.c.length;)for(e=u(J(n),29),o=new S(e.a);o.a<o.c.c.length;)for(s=u(J(o),10),s.p=r++,d=new S(s.j);d.a<d.c.c.length;)h=u(J(d),11),h.p=r++}function voe(t,e,n,r,s){var o,h,d,w,k;if(e)for(d=e.Kc();d.Ob();)for(h=u(d.Pb(),10),k=j5t(h,(so(),eu),n).Kc();k.Ob();)w=u(k.Pb(),11),o=u(ec(Ao(s.f,w)),112),o||(o=new LI(t.d),r.c[r.c.length]=o,Jae(o,w,s))}function Q4t(t,e){var n,r,s;if(s=E4((Ru(),ma),t.Tg(),e),s)to(),u(s,66).Oj()||(s=qx(Eo(ma,s))),r=(n=t.Yg(s),u(n>=0?t._g(n,!0,!0):lw(t,s,!0),153)),u(r,215).ol(e);else throw rt(new Pn(ab+e.ne()+W_))}function Z4t(t){var e,n;return t>-0x800000000000&&t<0x800000000000?t==0?0:(e=t<0,e&&(t=-t),n=ps(b.Math.floor(b.Math.log(t)/.6931471805599453)),(!e||t!=b.Math.pow(2,n))&&++n,n):Fne(ku(t))}function Wgn(t){var e,n,r,s,o,h,d;for(o=new A0,n=new S(t);n.a<n.c.c.length;)e=u(J(n),129),h=e.a,d=e.b,!(o.a._b(h)||o.a._b(d))&&(s=h,r=d,h.e.b+h.j.b>2&&d.e.b+d.j.b<=2&&(s=d,r=h),o.a.zc(s,o),s.q=r);return o}function woe(t,e){var n,r,s;return r=new H0(t),Lo(r,e),Jt(r,(se(),GG),e),Jt(r,(Te(),os),(oa(),Vc)),Jt(r,Ld,(Qd(),PV)),_0(r,(Gn(),xs)),n=new Mc,Uo(n,r),Fs(n,(be(),Bn)),s=new Mc,Uo(s,r),Fs(s,Hn),r}function moe(t){switch(t.g){case 0:return new eet((Zv(),OO));case 1:return new OB;case 2:return new JJ;default:throw rt(new Pn("No implementation is available for the crossing minimizer "+(t.f!=null?t.f:""+t.g)))}}function yoe(t,e){var n,r,s,o,h;for(t.c[e.p]=!0,ue(t.a,e),h=new S(e.j);h.a<h.c.c.length;)for(o=u(J(h),11),r=new S1(o.b);Vo(r.a)||Vo(r.b);)n=u(Vo(r.a)?J(r.a):J(r.b),17),s=ahn(o,n).i,t.c[s.p]||yoe(t,s)}function xoe(t){var e,n,r,s,o,h,d;for(h=0,n=new er((!t.a&&(t.a=new he(ns,t,10,11)),t.a));n.e!=n.i.gc();)e=u(dr(n),33),d=e.g,s=e.f,r=b.Math.sqrt(d*d+s*s),h=b.Math.max(r,h),o=xoe(e),h=b.Math.max(o,h);return h}function Qu(){Qu=Z,xb=new sC("OUTSIDE",0),tg=new sC("INSIDE",1),tN=new sC("NEXT_TO_PORT_IF_POSSIBLE",2),JS=new sC("ALWAYS_SAME_SIDE",3),ZS=new sC("ALWAYS_OTHER_SAME_SIDE",4),G6=new sC("SPACE_EFFICIENT",5)}function koe(t,e,n){var r,s,o,h,d,w;return r=Cin(t,(s=(Tv(),o=new Bpt,o),n&&C5t(s,n),s),e),qC(r,O0(e,Cd)),Jz(e,r),lbn(e,r),K4t(e,r),h=e,d=Uv(h,"ports"),w=new CVt(t,r),Xbn(w.a,w.b,d),wit(t,e,r),mcn(t,e,r),r}function Kgn(t){var e,n;return n=-t.a,e=ct(ot(mh,1),vd,25,15,[43,48,48,58,48,48]),n<0&&(e[0]=45,n=-n),e[1]=e[1]+((n/60|0)/10|0)&ms,e[2]=e[2]+(n/60|0)%10&ms,e[4]=e[4]+(n%60/10|0)&ms,e[5]=e[5]+n%10&ms,Ah(e,0,e.length)}function Ygn(t){var e;return e=ct(ot(mh,1),vd,25,15,[71,77,84,45,48,48,58,48,48]),t<=0&&(e[3]=43,t=-t),e[4]=e[4]+((t/60|0)/10|0)&ms,e[5]=e[5]+(t/60|0)%10&ms,e[7]=e[7]+(t%60/10|0)&ms,e[8]=e[8]+t%10&ms,Ah(e,0,e.length)}function Xgn(t){var e,n,r,s,o;if(t==null)return Tu;for(o=new c2(Ka,"[","]"),n=t,r=0,s=n.length;r<s;++r)e=n[r],o.a?Vr(o.a,o.b):o.a=new Il(o.d),cC(o.a,""+EC(e));return o.a?o.e.length==0?o.a.a:o.a.a+(""+o.e):o.c}function J4t(t,e){var n,r,s;for(s=vi,r=new S(o4(e));r.a<r.c.c.length;)n=u(J(r),213),n.f&&!t.c[n.c]&&(t.c[n.c]=!0,s=b.Math.min(s,J4t(t,_z(n,e))));return t.i[e.d]=t.j,t.g[e.d]=b.Math.min(s,t.j++),t.g[e.d]}function Eoe(t,e){var n,r,s;for(s=u(u(Ai(t.r,e),21),84).Kc();s.Ob();)r=u(s.Pb(),111),r.e.b=(n=r.b,n.Xe((ci(),hl))?n.Hf()==(be(),Nn)?-n.rf().b-Xt(ye(n.We(hl))):Xt(ye(n.We(hl))):n.Hf()==(be(),Nn)?-n.rf().b:0)}function Qgn(t){var e,n,r,s,o,h,d;for(n=a2t(t.e),o=ud(BM(nc(s2t(t.e)),t.d*t.a,t.c*t.b),-.5),e=n.a-o.a,s=n.b-o.b,d=0;d<t.c;d++){for(r=e,h=0;h<t.d;h++)yln(t.e,new ih(r,s,t.a,t.b))&&bq(t,h,d,!1,!0),r+=t.a;s+=t.b}}function Zgn(t){var e,n,r;if(je(Re(qe(t,(ci(),WO))))){for(r=new le,n=new ar(lr(G0(t).a.Kc(),new z));zr(n);)e=u(Lr(n),79),uw(e)&&je(Re(qe(e,sft)))&&(r.c[r.c.length]=e);return r}else return vn(),vn(),io}function s6(t){var e,n;if(n=!1,Et(t,204))return n=!0,u(t,204).a;if(!n&&Et(t,258)&&(e=u(t,258).a%1==0,e))return n=!0,de(VYe(u(t,258).a));throw rt(new ad("Id must be a string or an integer: '"+t+"'."))}function Jgn(t,e){var n,r,s,o,h,d;for(o=null,s=new NYt((!t.a&&(t.a=new ztt(t)),t.a));i5t(s);)if(n=u(aq(s),56),r=(h=n.Tg(),d=(k4(h),h.o),!d||!n.mh(d)?null:cvt(dit(d),n.ah(d))),r!=null&&hn(r,e)){o=n;break}return o}function Toe(t,e,n){var r,s,o,h,d;if(Bl(n,"occurrences"),n==0)return d=u(ny($x(t.a),e),14),d?d.gc():0;if(h=u(ny($x(t.a),e),14),!h)return 0;if(o=h.gc(),n>=o)h.$b();else for(s=h.Kc(),r=0;r<n;r++)s.Pb(),s.Qb();return o}function tpn(t,e,n){var r,s,o,h;return Bl(n,"oldCount"),Bl(0,"newCount"),r=u(ny($x(t.a),e),14),(r?r.gc():0)==n?(Bl(0,"count"),s=(o=u(ny($x(t.a),e),14),o?o.gc():0),h=-s,h>0?Xpt():h<0&&Toe(t,e,-h),!0):!1}function cD(t){var e,n,r,s,o,h,d;if(d=0,t.b==0){for(h=ase(t,!0),e=0,r=h,s=0,o=r.length;s<o;++s)n=r[s],n>0&&(d+=n,++e);e>1&&(d+=t.c*(e-1))}else d=Jqt(lne(Jj(Ri($nt(t.a),new Al),new ua)));return d>0?d+t.n.d+t.n.a:0}function uD(t){var e,n,r,s,o,h,d;if(d=0,t.b==0)d=Jqt(lne(Jj(Ri($nt(t.a),new Zl),new Pa)));else{for(h=ose(t,!0),e=0,r=h,s=0,o=r.length;s<o;++s)n=r[s],n>0&&(d+=n,++e);e>1&&(d+=t.c*(e-1))}return d>0?d+t.n.b+t.n.c:0}function epn(t,e){var n,r,s,o;for(o=u(go(t.b,e),124),n=o.a,s=u(u(Ai(t.r,e),21),84).Kc();s.Ob();)r=u(s.Pb(),111),r.c&&(n.a=b.Math.max(n.a,Bvt(r.c)));if(n.a>0)switch(e.g){case 2:o.n.c=t.s;break;case 4:o.n.b=t.s}}function npn(t,e){var n,r,s;return n=u(Q(e,(Zf(),t7)),19).a-u(Q(t,t7),19).a,n==0?(r=na(nc(u(Q(t,(Gp(),dO)),8)),u(Q(t,lS),8)),s=na(nc(u(Q(e,dO),8)),u(Q(e,lS),8)),Ls(r.a*r.b,s.a*s.b)):n}function rpn(t,e){var n,r,s;return n=u(Q(e,(hw(),EV)),19).a-u(Q(t,EV),19).a,n==0?(r=na(nc(u(Q(t,(fc(),FO)),8)),u(Q(t,BS),8)),s=na(nc(u(Q(e,FO),8)),u(Q(e,BS),8)),Ls(r.a*r.b,s.a*s.b)):n}function Coe(t){var e,n;return n=new _p,n.a+="e_",e=fcn(t),e!=null&&(n.a+=""+e),t.c&&t.d&&(Vr((n.a+=" ",n),Wz(t.c)),Vr(hc((n.a+="[",n),t.c.i),"]"),Vr((n.a+=Pot,n),Wz(t.d)),Vr(hc((n.a+="[",n),t.d.i),"]")),n.a}function _oe(t){switch(t.g){case 0:return new WL;case 1:return new QJ;case 2:return new XJ;case 3:return new NB;default:throw rt(new Pn("No implementation is available for the layout phase "+(t.f!=null?t.f:""+t.g)))}}function t5t(t,e,n,r,s){var o;switch(o=0,s.g){case 1:o=b.Math.max(0,e.b+t.b-(n.b+r));break;case 3:o=b.Math.max(0,-t.b-r);break;case 2:o=b.Math.max(0,-t.a-r);break;case 4:o=b.Math.max(0,e.a+t.a-(n.a+r))}return o}function ipn(t,e,n){var r,s,o,h,d;if(n)for(s=n.a.length,r=new Qb(s),d=(r.b-r.a)*r.c<0?(Ip(),Ab):new Pp(r);d.Ob();)h=u(d.Pb(),19),o=_8(n,h.a),p8t in o.a||Vct in o.a?pwn(t,o,e):x5n(t,o,e),qXe(u(Jn(t.b,oE(o)),79))}function e5t(t){var e,n;switch(t.b){case-1:return!0;case 0:return n=t.t,n>1||n==-1?(t.b=-1,!0):(e=Lh(t),e&&(to(),e.Cj()==k0e)?(t.b=-1,!0):(t.b=1,!1));default:case 1:return!1}}function spn(t,e){var n,r,s,o,h;for(r=(!e.s&&(e.s=new he(Au,e,21,17)),e.s),o=null,s=0,h=r.i;s<h;++s)switch(n=u(St(r,s),170),$v(Eo(t,n))){case 2:case 3:!o&&(o=new le),o.c[o.c.length]=n}return o||(vn(),vn(),io)}function n5t(t,e){var n,r,s,o;if(fi(t),t.c!=0||t.a!=123)throw rt(new Fr(qr((Nr(),Gde))));if(o=e==112,r=t.d,n=l8(t.i,125,r),n<0)throw rt(new Fr(qr((Nr(),Vde))));return s=Dl(t.i,r,n),t.d=n+1,fte(s,o,(t.e&512)==512)}function apn(t){var e;if(e=u(Q(t,(Te(),ES)),314),e==(Yx(),S6))throw rt(new F9("The hierarchy aware processor "+e+" in child node "+t+" is only allowed if the root node specifies the same hierarchical processor."))}function opn(t,e){lf();var n,r,s,o,h,d;for(n=null,h=e.Kc();h.Ob();)o=u(h.Pb(),128),!o.o&&(r=EXe(o.a),s=ltn(o.a),d=new x_(r,s,null,u(o.d.a.ec().Kc().Pb(),17)),ue(d.c,o.a),t.c[t.c.length]=d,n&&ue(n.d,d),n=d)}function cpn(t,e){var n,r,s;if(!e)rit(t,null),$8(t,null);else if(e.i&4)for(r="[]",n=e.c;;n=n.c){if(!(n.i&4)){s=Wpt((L0(n),n.o+r)),rit(t,s),$8(t,s);break}r+="[]"}else s=Wpt((L0(e),e.o)),rit(t,s),$8(t,s);t.yk(e)}function d_(t,e,n,r,s){var o,h,d,w;return w=cnt(t,u(s,56)),Gt(w)!==Gt(s)?(d=u(t.g[n],72),o=Yd(e,w),fC(t,n,Sst(t,n,o)),ml(t.e)&&(h=zp(t,9,o.ak(),s,w,r,!1),v4t(h,new F0(t.e,9,t.c,d,o,r,!1)),Urt(h)),w):s}function upn(t,e,n){var r,s,o,h,d,w;for(r=u(Ai(t.c,e),15),s=u(Ai(t.c,n),15),o=r.Zc(r.gc()),h=s.Zc(s.gc());o.Sb()&&h.Sb();)if(d=u(o.Ub(),19),w=u(h.Ub(),19),d!=w)return du(d.a,w.a);return!o.Ob()&&!h.Ob()?0:o.Ob()?1:-1}function Soe(t,e){var n,r,s;try{return s=tin(t.a,e),s}catch(o){if(o=Wi(o),Et(o,32)){try{if(r=$l(e,_a,vi),n=Hf(t.a),r>=0&&r<n.length)return n[r]}catch(h){if(h=Wi(h),!Et(h,127))throw rt(h)}return null}else throw rt(o)}}function zst(t,e){var n,r,s;if(s=E4((Ru(),ma),t.Tg(),e),s)return to(),u(s,66).Oj()||(s=qx(Eo(ma,s))),r=(n=t.Yg(s),u(n>=0?t._g(n,!0,!0):lw(t,s,!0),153)),u(r,215).ll(e);throw rt(new Pn(ab+e.ne()+Fct))}function lpn(){vbt();var t;return o5e?u(wE((Mp(),Uh),Ph),1939):(ri(M2,new Rf),V3n(),t=u(Et(Fc((Mp(),Uh),Ph),547)?Fc(Uh,Ph):new fXt,547),o5e=!0,z5n(t),U5n(t),ki((bbt(),ZAt),t,new XZ),xo(Uh,Ph,t),t)}function hpn(t,e){var n,r,s,o;t.j=-1,ml(t.e)?(n=t.i,o=t.i!=0,uI(t,e),r=new F0(t.e,3,t.c,null,e,n,o),s=e.Qk(t.e,t.c,null),s=iae(t,e,s),s?(s.Ei(r),s.Fi()):mi(t.e,r)):(uI(t,e),s=e.Qk(t.e,t.c,null),s&&s.Fi())}function rq(t,e){var n,r,s;if(s=0,r=e[0],r>=t.length)return-1;for(n=(Rr(r,t.length),t.charCodeAt(r));n>=48&&n<=57&&(s=s*10+(n-48),++r,!(r>=t.length));)n=(Rr(r,t.length),t.charCodeAt(r));return r>e[0]?e[0]=r:s=-1,s}function fpn(t){var e,n,r,s,o;return s=u(t.a,19).a,o=u(t.b,19).a,n=s,r=o,e=b.Math.max(b.Math.abs(s),b.Math.abs(o)),s<=0&&s==o?(n=0,r=o-1):s==-e&&o!=e?(n=o,r=s,o>=0&&++n):(n=-o,r=s),new la(de(n),de(r))}function dpn(t,e,n,r){var s,o,h,d,w,k;for(s=0;s<e.o;s++)for(o=s-e.j+n,h=0;h<e.p;h++)if(d=h-e.k+r,w=o,k=d,w+=t.j,k+=t.k,w>=0&&k>=0&&w<t.o&&k<t.p&&(!dse(e,s,h)&&lse(t,o,d)||l4(e,s,h)&&!lfn(t,o,d)))return!0;return!1}function gpn(t,e,n){var r,s,o,h,d;h=t.c,d=t.d,o=Ko(ct(ot(Us,1),te,8,0,[h.i.n,h.n,h.a])).b,s=(o+Ko(ct(ot(Us,1),te,8,0,[d.i.n,d.n,d.a])).b)/2,r=null,h.j==(be(),Hn)?r=new $e(e+h.i.c.c.a+n,s):r=new $e(e-n,s),h8(t.a,0,r)}function uw(t){var e,n,r,s;for(e=null,r=Bp(L1(ct(ot(B1,1),Ie,20,0,[(!t.b&&(t.b=new Cn(br,t,4,7)),t.b),(!t.c&&(t.c=new Cn(br,t,5,8)),t.c)])));zr(r);)if(n=u(Lr(r),82),s=Mo(n),!e)e=s;else if(e!=s)return!1;return!0}function qst(t,e,n){var r;if(++t.j,e>=t.i)throw rt(new mo(Wct+e+S2+t.i));if(n>=t.i)throw rt(new mo(Kct+n+S2+t.i));return r=t.g[n],e!=n&&(e<n?Ic(t.g,e,t.g,e+1,n-e):Ic(t.g,n+1,t.g,n,e-n),Ji(t.g,e,r),t.ei(e,r,n),t.ci()),r}function ln(t,e,n){var r;if(r=u(t.c.xc(e),14),r)return r.Fc(n)?(++t.d,!0):!1;if(r=t.ic(e),r.Fc(n))return++t.d,t.c.zc(e,r),!0;throw rt(new amt("New Collection violated the Collection spec"))}function lD(t){var e,n,r;return t<0?0:t==0?32:(r=-(t>>16),e=r>>16&16,n=16-e,t=t>>e,r=t-256,e=r>>16&8,n+=e,t<<=e,r=t-yy,e=r>>16&4,n+=e,t<<=e,r=t-bd,e=r>>16&2,n+=e,t<<=e,r=t>>14,e=r&~(r>>1),n+2-e)}function ppn(t){jx();var e,n,r,s;for(nG=new le,qut=new Cr,zut=new le,e=(!t.a&&(t.a=new he(ns,t,10,11)),t.a),W4n(e),s=new er(e);s.e!=s.i.gc();)r=u(dr(s),33),Ro(nG,r,0)==-1&&(n=new le,ue(zut,n),Rie(r,n));return zut}function bpn(t,e,n){var r,s,o,h;t.a=n.b.d,Et(e,352)?(s=m4(u(e,79),!1,!1),o=sD(s),r=new ka(t),va(o,r),yD(o,s),e.We((ci(),i5))!=null&&va(u(e.We(i5),74),r)):(h=u(e,470),h.Hg(h.Dg()+t.a.a),h.Ig(h.Eg()+t.a.b))}function Aoe(t,e){var n,r,s,o,h,d,w,k;for(k=Xt(ye(Q(e,(Te(),_S)))),w=t[0].n.a+t[0].o.a+t[0].d.c+k,d=1;d<t.length;d++)r=t[d].n,s=t[d].o,n=t[d].d,o=r.a-n.b-w,o<0&&(r.a-=o),h=e.f,h.a=b.Math.max(h.a,r.a+s.a),w=r.a+s.a+n.c+k}function vpn(t,e){var n,r,s,o,h,d;return r=u(u(Jn(t.g,e.a),46).a,65),s=u(u(Jn(t.g,e.b),46).a,65),o=r.b,h=s.b,n=Pyn(o,h),n>=0?n:(d=AC(na(new $e(h.c+h.b/2,h.d+h.a/2),new $e(o.c+o.b/2,o.d+o.a/2))),-(Xue(o,h)-1)*d)}function wpn(t,e,n){var r;us(new Tn(null,(!n.a&&(n.a=new he(Zi,n,6,6)),new _n(n.a,16))),new fVt(t,e)),us(new Tn(null,(!n.n&&(n.n=new he(qo,n,1,7)),new _n(n.n,16))),new dVt(t,e)),r=u(qe(n,(ci(),i5)),74),r&&ayt(r,t,e)}function lw(t,e,n){var r,s,o;if(o=E4((Ru(),ma),t.Tg(),e),o)return to(),u(o,66).Oj()||(o=qx(Eo(ma,o))),s=(r=t.Yg(o),u(r>=0?t._g(r,!0,!0):lw(t,o,!0),153)),u(s,215).hl(e,n);throw rt(new Pn(ab+e.ne()+Fct))}function r5t(t,e,n,r){var s,o,h,d,w;if(s=t.d[e],s){if(o=s.g,w=s.i,r!=null){for(d=0;d<w;++d)if(h=u(o[d],133),h.Sh()==n&&yi(r,h.cd()))return h}else for(d=0;d<w;++d)if(h=u(o[d],133),Gt(h.cd())===Gt(r))return h}return null}function hD(t,e){var n;if(e<0)throw rt(new pR("Negative exponent"));if(e==0)return GH;if(e==1||h3t(t,GH)||h3t(t,QE))return t;if(!Zoe(t,0)){for(n=1;!Zoe(t,n);)++n;return J3(Dln(n*e),hD(umt(t,n),e))}return zdn(t,e)}function mpn(t,e){var n,r,s;if(Gt(t)===Gt(e))return!0;if(t==null||e==null||t.length!=e.length)return!1;for(n=0;n<t.length;++n)if(r=t[n],s=e[n],!(Gt(r)===Gt(s)||r!=null&&yi(r,s)))return!1;return!0}function Loe(t){gbt();var e,n,r;for(this.b=Ebe,this.c=(ao(),c0),this.f=(mGt(),kbe),this.a=t,nbt(this,new bl),uq(this),r=new S(t.b);r.a<r.c.c.length;)n=u(J(r),81),n.d||(e=new Xit(ct(ot(Yut,1),Ie,81,0,[n])),ue(t.a,e))}function ypn(t,e,n){var r,s,o,h,d,w;if(!t||t.c.length==0)return null;for(o=new eQt(e,!n),s=new S(t);s.a<s.c.c.length;)r=u(J(s),70),B4t(o,(z9(),new Ga(r)));return h=o.i,h.a=(w=o.n,o.e.b+w.d+w.a),h.b=(d=o.n,o.e.a+d.b+d.c),o}function Moe(t){var e,n,r,s,o,h,d;for(d=sI(t.a),e2t(d,new rf),n=null,s=d,o=0,h=s.length;o<h&&(r=s[o],r.k==(Gn(),xs));++o)e=u(Q(r,(se(),oc)),61),!(e!=(be(),Bn)&&e!=Hn)&&(n&&u(Q(n,I6),15).Fc(r),n=r)}function xpn(t,e,n){var r,s,o,h,d,w,k;w=(An(e,t.c.length),u(t.c[e],329)),Ag(t,e),w.b/2>=n&&(r=e,k=(w.c+w.a)/2,h=k-n,w.c<=k-n&&(s=new ynt(w.c,h),$m(t,r++,s)),d=k+n,d<=w.a&&(o=new ynt(d,w.a),Um(r,t.c.length),W9(t.c,r,o)))}function i5t(t){var e;if(!t.c&&t.g==null)t.d=t.si(t.f),Mr(t,t.d),e=t.d;else{if(t.g==null)return!0;if(t.i==0)return!1;e=u(t.g[t.i-1],47)}return e==t.b&&null.km>=null.jm()?(aq(t),i5t(t)):e.Ob()}function kpn(t,e,n){var r,s,o,h,d;if(d=n,!d&&(d=Pvt(new Yk,0)),wr(d,Vfe,1),Xle(t.c,e),h=F3n(t.a,e),h.gc()==1)Dle(u(h.Xb(0),37),d);else for(o=1/h.gc(),s=h.Kc();s.Ob();)r=u(s.Pb(),37),Dle(r,Rc(d,o));MKe(t.a,h,e),Fvn(e),or(d)}function Ioe(t){if(this.a=t,t.c.i.k==(Gn(),xs))this.c=t.c,this.d=u(Q(t.c.i,(se(),oc)),61);else if(t.d.i.k==xs)this.c=t.d,this.d=u(Q(t.d.i,(se(),oc)),61);else throw rt(new Pn("Edge "+t+" is not an external edge."))}function Doe(t,e){var n,r,s;s=t.b,t.b=e,t.Db&4&&!(t.Db&1)&&mi(t,new Qs(t,1,3,s,t.b)),e?e!=t&&(Xc(t,e.zb),tit(t,e.d),n=(r=e.c,r??e.zb),nit(t,n==null||hn(n,e.zb)?null:n)):(Xc(t,null),tit(t,0),nit(t,null))}function Ooe(t){var e,n;if(t.f){for(;t.n<t.o;){if(e=u(t.j?t.j.pi(t.n):t.k.Xb(t.n),72),n=e.ak(),Et(n,99)&&u(n,18).Bb&dc&&(!t.e||n.Gj()!=I7||n.aj()!=0)&&e.dd()!=null)return!0;++t.n}return!1}else return t.n<t.o}function Noe(t,e){var n;this.e=(Gm(),Ar(t),Gm(),b3t(t)),this.c=(Ar(e),b3t(e)),x2t(this.e.Hd().dc()==this.c.Hd().dc()),this.d=tie(this.e),this.b=tie(this.c),n=Xb(Xn,[te,Ie],[5,1],5,[this.e.Hd().gc(),this.c.Hd().gc()],2),this.a=n,hon(this)}function Poe(t){!xut&&(xut=n5n());var e=t.replace(/[\x00-\x1f\xad\u0600-\u0603\u06dd\u070f\u17b4\u17b5\u200b-\u200f\u2028-\u202e\u2060-\u2064\u206a-\u206f\ufeff\ufff9-\ufffb"\\]/g,function(n){return urn(n)});return'"'+e+'"'}function Foe(t){Awt();var e,n;for(this.b=Hge,this.c=Vge,this.g=(wGt(),qge),this.d=(ao(),c0),this.a=t,S5t(this),n=new S(t.b);n.a<n.c.c.length;)e=u(J(n),57),!e.a&&eWt(Oee(new Ipt,ct(ot(XH,1),Ie,57,0,[e])),t),e.e=new o$(e.d)}function Epn(t){var e,n,r,s,o,h;for(s=t.e.c.length,r=Pt(ph,xy,15,s,0,1),h=new S(t.e);h.a<h.c.c.length;)o=u(J(h),144),r[o.b]=new Qi;for(n=new S(t.c);n.a<n.c.c.length;)e=u(J(n),282),r[e.c.b].Fc(e),r[e.d.b].Fc(e);return r}function Tpn(t){var e,n,r,s,o,h,d;for(d=Hd(t.c.length),s=new S(t);s.a<s.c.c.length;){for(r=u(J(s),10),h=new qs,o=Ms(r),n=new ar(lr(o.a.Kc(),new z));zr(n);)e=u(Lr(n),17),e.c.i==e.d.i||Ns(h,e.d.i);d.c[d.c.length]=h}return d}function Cpn(t,e){var n,r,s,o,h;if(n=u(In(t.a,4),126),h=n==null?0:n.length,e>=h)throw rt(new jm(e,h));return s=n[e],h==1?r=null:(r=Pt(Tft,Jct,415,h-1,0,1),Ic(n,0,r,0,e),o=h-e-1,o>0&&Ic(n,e+1,r,e,o)),cE(t,r),noe(t,e,s),s}function a6(){a6=Z,W6=u(St(Wt((sbt(),pc).qb),6),34),U6=u(St(Wt(pc.qb),3),34),Mft=u(St(Wt(pc.qb),4),34),Ift=u(St(Wt(pc.qb),5),18),Qz(W6),Qz(U6),Qz(Mft),Qz(Ift),h5e=new wl(ct(ot(Au,1),P4,170,0,[W6,U6]))}function Boe(t,e){var n;this.d=new M9,this.b=e,this.e=new yo(e.qf()),n=t.u.Hc((Qu(),tN)),t.u.Hc(tg)?t.D?this.a=n&&!e.If():this.a=!0:t.u.Hc(xb)?n?this.a=!(e.zf().Kc().Ob()||e.Bf().Kc().Ob()):this.a=!1:this.a=!1}function Roe(t,e){var n,r,s,o;for(n=t.o.a,o=u(u(Ai(t.r,e),21),84).Kc();o.Ob();)s=u(o.Pb(),111),s.e.a=(r=s.b,r.Xe((ci(),hl))?r.Hf()==(be(),Bn)?-r.rf().a-Xt(ye(r.We(hl))):n+Xt(ye(r.We(hl))):r.Hf()==(be(),Bn)?-r.rf().a:n)}function joe(t,e){var n,r,s,o;n=u(Q(t,(Te(),Vl)),103),o=u(qe(e,v7),61),s=u(Q(t,os),98),s!=(oa(),H1)&&s!=yb?o==(be(),Zo)&&(o=nxt(e,n),o==Zo&&(o=Jx(n))):(r=Ile(e),r>0?o=Jx(n):o=HI(Jx(n))),bo(e,v7,o)}function _pn(t,e){var n,r,s,o,h;for(h=t.j,e.a!=e.b&&Xs(h,new K5),s=h.c.length/2|0,r=0;r<s;r++)o=(An(r,h.c.length),u(h.c[r],113)),o.c&&Fs(o.d,e.a);for(n=s;n<h.c.length;n++)o=(An(n,h.c.length),u(h.c[n],113)),o.c&&Fs(o.d,e.b)}function Spn(t,e,n){var r,s,o;return r=t.c[e.c.p][e.p],s=t.c[n.c.p][n.p],r.a!=null&&s.a!=null?(o=Pnt(r.a,s.a),o<0?vD(t,e,n):o>0&&vD(t,n,e),o):r.a!=null?(vD(t,e,n),-1):s.a!=null?(vD(t,n,e),1):0}function $oe(t,e){var n,r,s,o;t.ej()?(n=t.Vi(),o=t.fj(),++t.j,t.Hi(n,t.oi(n,e)),r=t.Zi(3,null,e,n,o),t.bj()?(s=t.cj(e,null),s?(s.Ei(r),s.Fi()):t.$i(r)):t.$i(r)):(nXt(t,e),t.bj()&&(s=t.cj(e,null),s&&s.Fi()))}function iq(t,e){var n,r,s,o,h;for(h=au(t.e.Tg(),e),s=new tx,n=u(t.g,119),o=t.i;--o>=0;)r=n[o],h.rl(r.ak())&&Mr(s,r);!Lhe(t,s)&&ml(t.e)&&Kk(t,e.$j()?zp(t,6,e,(vn(),io),null,-1,!1):zp(t,e.Kj()?2:1,e,null,null,-1,!1))}function bE(){bE=Z;var t,e;for(T6=Pt(B4,te,91,32,0,1),oS=Pt(B4,te,91,32,0,1),t=1,e=0;e<=18;e++)T6[e]=KI(t),oS[e]=KI(M0(t,e)),t=Ca(t,5);for(;e<oS.length;e++)T6[e]=J3(T6[e-1],T6[1]),oS[e]=J3(oS[e-1],(Jp(),Sut))}function Apn(t,e){var n,r,s,o,h;return t.a==(gE(),bS)?!0:(o=e.a.c,n=e.a.c+e.a.b,!(e.j&&(r=e.A,h=r.c.c.a-r.o.a/2,s=o-(r.n.a+r.o.a),s>h)||e.q&&(r=e.C,h=r.c.c.a-r.o.a/2,s=r.n.a-n,s>h)))}function Lpn(t,e){var n;wr(e,"Partition preprocessing",1),n=u(Pl(Ri(Wo(Ri(new Tn(null,new _n(t.a,16)),new $Y),new aF),new V5),i2(new _e,new we,new nr,ct(ot(ll,1),ae,132,0,[(I1(),Gl)]))),15),us(n.Oc(),new oF),or(e)}function zoe(t){prt();var e,n,r,s,o,h,d;for(n=new n2,s=new S(t.e.b);s.a<s.c.c.length;)for(r=u(J(s),29),h=new S(r.a);h.a<h.c.c.length;)o=u(J(h),10),d=t.g[o.p],e=u(Wv(n,d),15),e||(e=new le,p2(n,d,e)),e.Fc(o);return n}function Mpn(t,e){var n,r,s,o,h;for(s=e.b.b,t.a=Pt(ph,xy,15,s,0,1),t.b=Pt(dl,i0,25,s,16,1),h=ei(e.b,0);h.b!=h.d.c;)o=u(ti(h),86),t.a[o.g]=new Qi;for(r=ei(e.a,0);r.b!=r.d.c;)n=u(ti(r),188),t.a[n.b.g].Fc(n),t.a[n.c.g].Fc(n)}function qoe(t){var e;return t.Db&64?bf(t):(e=new Th(bf(t)),e.a+=" (startX: ",R3(e,t.j),e.a+=", startY: ",R3(e,t.k),e.a+=", endX: ",R3(e,t.b),e.a+=", endY: ",R3(e,t.c),e.a+=", identifier: ",fo(e,t.d),e.a+=")",e.a)}function s5t(t){var e;return t.Db&64?XC(t):(e=new Th(XC(t)),e.a+=" (ordered: ",kg(e,(t.Bb&256)!=0),e.a+=", unique: ",kg(e,(t.Bb&512)!=0),e.a+=", lowerBound: ",uet(e,t.s),e.a+=", upperBound: ",uet(e,t.t),e.a+=")",e.a)}function Hoe(t,e,n,r,s,o,h,d){var w;return Et(t.Cb,88)&&hy(rl(u(t.Cb,88)),4),Xc(t,n),t.f=r,rE(t,s),sE(t,o),nE(t,h),iE(t,!1),Pg(t,!0),aE(t,d),Ng(t,!0),Ig(t,0),t.b=0,ty(t,1),w=O1(t,e,null),w&&w.Fi(),Rit(t,!1),t}function Goe(t,e){var n,r,s,o;return n=u(Fc(t.a,e),512),n||(r=new Irt(e),s=(C$(),R1?null:r.c),o=Dl(s,0,b.Math.max(0,dj(s,Eu(46)))),eZe(r,Goe(t,o)),(R1?null:r.c).length==0&&SWt(r,new oe),xo(t.a,R1?null:r.c,r),r)}function Ipn(t,e){var n;t.b=e,t.g=new le,n=Fpn(t.b),t.e=n,t.f=n,t.c=je(Re(Q(t.b,(Kz(),BEt)))),t.a=ye(Q(t.b,(ci(),$6))),t.a==null&&(t.a=1),Xt(t.a)>1?t.e*=Xt(t.a):t.f/=Xt(t.a),lun(t),phn(t),Qvn(t),Jt(t.b,(i_(),eG),t.g)}function Voe(t,e,n){var r,s,o,h,d,w;for(r=0,w=n,e||(r=n*(t.c.length-1),w*=-1),o=new S(t);o.a<o.c.c.length;){for(s=u(J(o),10),Jt(s,(Te(),Ld),(Qd(),PV)),s.o.a=r,d=Rg(s,(be(),Hn)).Kc();d.Ob();)h=u(d.Pb(),11),h.n.a=r;r+=w}}function a5t(t,e,n){var r,s,o;t.ej()?(o=t.fj(),zI(t,e,n),r=t.Zi(3,null,n,e,o),t.bj()?(s=t.cj(n,null),t.ij()&&(s=t.jj(n,s)),s?(s.Ei(r),s.Fi()):t.$i(r)):t.$i(r)):(zI(t,e,n),t.bj()&&(s=t.cj(n,null),s&&s.Fi()))}function o6(t,e,n){var r,s,o,h,d,w;return d=t.Gk(n),d!=n?(h=t.g[e],w=d,fC(t,e,t.oi(e,w)),o=h,t.gi(e,w,o),t.rk()&&(r=n,s=t.dj(r,null),!u(d,49).eh()&&(s=t.cj(w,s)),s&&s.Fi()),ml(t.e)&&Kk(t,t.Zi(9,n,d,e,!1)),d):n}function Dpn(t,e){var n,r,s,o;for(r=new S(t.a.a);r.a<r.c.c.length;)n=u(J(r),189),n.g=!0;for(o=new S(t.a.b);o.a<o.c.c.length;)s=u(J(o),81),s.k=je(Re(t.e.Kb(new la(s,e)))),s.d.g=s.d.g&je(Re(t.e.Kb(new la(s,e))));return t}function Uoe(t){var e,n,r,s,o;if(n=(e=u(Hf(Xa),9),new rh(e,u(uf(e,e.length),9),0)),o=u(Q(t,(se(),Zu)),10),o)for(s=new S(o.j);s.a<s.c.c.length;)r=u(J(s),11),Gt(Q(r,_i))===Gt(t)&&pC(new S1(r.b))&&pf(n,r.j);return n}function Woe(t,e,n){var r,s,o,h,d;if(!t.d[n.p]){for(s=new ar(lr(Ms(n).a.Kc(),new z));zr(s);){for(r=u(Lr(s),17),d=r.d.i,h=new ar(lr(jo(d).a.Kc(),new z));zr(h);)o=u(Lr(h),17),o.c.i==e&&(t.a[o.p]=!0);Woe(t,e,d)}t.d[n.p]=!0}}function Opn(t,e){var n,r,s,o,h,d,w;if(r=Jre(t.Db&254),r==1)t.Eb=null;else if(o=s2(t.Eb),r==2)s=bst(t,e),t.Eb=o[s==0?1:0];else{for(h=Pt(Xn,Ie,1,r-1,5,1),n=2,d=0,w=0;n<=128;n<<=1)n==e?++d:t.Db&n&&(h[w++]=o[d++]);t.Eb=h}t.Db&=~e}function Npn(t,e){var n,r,s,o,h;for(r=(!e.s&&(e.s=new he(Au,e,21,17)),e.s),o=null,s=0,h=r.i;s<h;++s)switch(n=u(St(r,s),170),$v(Eo(t,n))){case 4:case 5:case 6:{!o&&(o=new le),o.c[o.c.length]=n;break}}return o||(vn(),vn(),io)}function o5t(t){var e;switch(e=0,t){case 105:e=2;break;case 109:e=8;break;case 115:e=4;break;case 120:e=16;break;case 117:e=32;break;case 119:e=64;break;case 70:e=256;break;case 72:e=128;break;case 88:e=512;break;case 44:e=wf}return e}function Ppn(t,e,n,r,s){var o,h,d,w;if(Gt(t)===Gt(e)&&r==s){Hue(t,r,n);return}for(d=0;d<r;d++){for(h=0,o=t[d],w=0;w<s;w++)h=Oa(Oa(Ca(Ps(o,co),Ps(e[w],co)),Ps(n[d+w],co)),Ps(Sr(h),co)),n[d+w]=Sr(h),h=zm(h,32);n[d+s]=Sr(h)}}function Fpn(t){var e,n,r,s,o,h,d,w,k,C,M;for(C=0,k=0,s=t.a,d=s.a.gc(),r=s.a.ec().Kc();r.Ob();)n=u(r.Pb(),561),e=(n.b&&bat(n),n.a),M=e.a,h=e.b,C+=M+h,k+=M*h;return w=b.Math.sqrt(400*d*k-4*k+C*C)+C,o=2*(100*d-1),o==0?w:w/o}function Koe(t,e){e.b!=0&&(isNaN(t.s)?t.s=Xt((Qn(e.b!=0),ye(e.a.a.c))):t.s=b.Math.min(t.s,Xt((Qn(e.b!=0),ye(e.a.a.c)))),isNaN(t.c)?t.c=Xt((Qn(e.b!=0),ye(e.c.b.c))):t.c=b.Math.max(t.c,Xt((Qn(e.b!=0),ye(e.c.b.c)))))}function g_(t){var e,n,r,s;for(e=null,r=Bp(L1(ct(ot(B1,1),Ie,20,0,[(!t.b&&(t.b=new Cn(br,t,4,7)),t.b),(!t.c&&(t.c=new Cn(br,t,5,8)),t.c)])));zr(r);)if(n=u(Lr(r),82),s=Mo(n),!e)e=ts(s);else if(e!=ts(s))return!0;return!1}function Hst(t,e){var n,r,s,o;t.ej()?(n=t.i,o=t.fj(),uI(t,e),r=t.Zi(3,null,e,n,o),t.bj()?(s=t.cj(e,null),t.ij()&&(s=t.jj(e,s)),s?(s.Ei(r),s.Fi()):t.$i(r)):t.$i(r)):(uI(t,e),t.bj()&&(s=t.cj(e,null),s&&s.Fi()))}function Yoe(t,e,n){var r,s,o;t.ej()?(o=t.fj(),++t.j,t.Hi(e,t.oi(e,n)),r=t.Zi(3,null,n,e,o),t.bj()?(s=t.cj(n,null),s?(s.Ei(r),s.Fi()):t.$i(r)):t.$i(r)):(++t.j,t.Hi(e,t.oi(e,n)),t.bj()&&(s=t.cj(n,null),s&&s.Fi()))}function Bpn(t){var e,n,r,s;for(s=t.length,e=null,r=0;r<s;r++)n=(Rr(r,t.length),t.charCodeAt(r)),cd(".*+?{[()|\\^$",Eu(n))>=0?(e||(e=new B9,r>0&&fo(e,t.substr(0,r))),e.a+="\\",m8(e,n&ms)):e&&m8(e,n&ms);return e?e.a:t}function Rpn(t){var e;if(!t.a)throw rt(new Fo("IDataType class expected for layout option "+t.f));if(e=Uin(t.a),e==null)throw rt(new Fo("Couldn't create new instance of property '"+t.f+"'. "+H1e+(L0(uN),uN.k)+a8t));return u(e,414)}function Gst(t){var e,n,r,s,o;return o=t.eh(),o&&o.kh()&&(s=Kp(t,o),s!=o)?(n=t.Vg(),r=(e=t.Vg(),e>=0?t.Qg(null):t.eh().ih(t,-1-e,null,null)),t.Rg(u(s,49),n),r&&r.Fi(),t.Lg()&&t.Mg()&&n>-1&&mi(t,new Qs(t,9,n,o,s)),s):o}function Xoe(t){var e,n,r,s,o,h,d,w;for(h=0,o=t.f.e,r=0;r<o.c.length;++r)for(d=(An(r,o.c.length),u(o.c[r],144)),s=r+1;s<o.c.length;++s)w=(An(s,o.c.length),u(o.c[s],144)),n=Hp(d.d,w.d),e=n-t.a[d.b][w.b],h+=t.i[d.b][w.b]*e*e;return h}function jpn(t,e){var n;if(!Vs(e,(Te(),cu))&&(n=l1n(u(Q(e,bTt),360),u(Q(t,cu),163)),Jt(e,bTt,n),!zr(new ar(lr(z0(e).a.Kc(),new z)))))switch(n.g){case 1:Jt(e,cu,(hh(),yS));break;case 2:Jt(e,cu,(hh(),xS))}}function $pn(t,e){var n;Xvn(t),t.a=(n=new set,us(new Tn(null,new _n(e.d,16)),new Btt(n)),n),avn(t,u(Q(e.b,(Te(),Wlt)),376)),Jhn(t),Vpn(t),f1n(t),tfn(t),Yyn(t,e),us(Wo(new Tn(null,oZt(Ten(t.b).a)),new _3),new MX),e.a=!1,t.a=null}function Qoe(){L4t.call(this,GE,(Tv(),A4e)),this.p=null,this.a=null,this.f=null,this.n=null,this.g=null,this.c=null,this.i=null,this.j=null,this.d=null,this.b=null,this.e=null,this.k=null,this.o=null,this.s=null,this.q=!1,this.r=!1}function vE(){vE=Z,kft=new Sx(d1e,0),JV=new Sx("INSIDE_SELF_LOOPS",1),tU=new Sx("MULTI_EDGES",2),ZV=new Sx("EDGE_LABELS",3),xft=new Sx("PORTS",4),QV=new Sx("COMPOUND",5),XV=new Sx("CLUSTERS",6),yft=new Sx("DISCONNECTED",7)}function Zoe(t,e){var n,r,s;if(e==0)return(t.a[0]&1)!=0;if(e<0)throw rt(new pR("Negative bit address"));if(s=e>>5,s>=t.d)return t.e<0;if(n=t.a[s],e=1<<(e&31),t.e<0){if(r=pne(t),s<r)return!1;r==s?n=-n:n=~n}return(n&e)!=0}function zpn(t,e,n,r){var s;u(n.b,65),u(n.b,65),u(r.b,65),u(r.b,65),s=na(nc(u(n.b,65).c),u(r.b,65).c),Aj(s,doe(u(n.b,65),u(r.b,65),s)),u(r.b,65),u(r.b,65),u(r.b,65).c.a+s.a,u(r.b,65).c.b+s.b,u(r.b,65),mu(r.a,new xvt(t,e,r))}function c5t(t,e){var n,r,s,o,h,d,w;if(o=e.e,o){for(n=Gst(o),r=u(t.g,674),h=0;h<t.i;++h)if(w=r[h],lst(w)==n&&(s=(!w.d&&(w.d=new Ss(ho,w,1)),w.d),d=u(n.ah(aat(o,o.Cb,o.Db>>16)),15).Xc(o),d<s.i))return c5t(t,u(St(s,d),87))}return e}function I(t,e,n){var r=$H,s,o=r[t],h=o instanceof Array?o[0]:null;o&&!h?l=o:(l=(s=e&&e.prototype,!s&&(s=$H[e]),hrn(s)),l.hm=n,!e&&(l.im=Ct),r[t]=l);for(var d=3;d<arguments.length;++d)arguments[d].prototype=l;h&&(l.gm=h)}function zr(t){for(var e;!u(Ar(t.a),47).Ob();){if(t.d=Gcn(t),!t.d)return!1;if(t.a=u(t.d.Pb(),47),Et(t.a,39)){if(e=u(t.a,39),t.a=e.a,!t.b&&(t.b=new P3),qp(t.b,t.d),e.b)for(;!N9(e.b);)qp(t.b,u(cen(e.b),47));t.d=e.d}}return!0}function u5t(t,e){var n,r,s,o,h;for(o=e==null?0:t.b.se(e),r=(n=t.a.get(o),n??new Array),h=0;h<r.length;h++)if(s=r[h],t.b.re(e,s.cd()))return r.length==1?(r.length=0,DQe(t.a,o)):r.splice(h,1),--t.c,a$(t.b),s.dd();return null}function l5t(t,e){var n,r,s,o;for(s=1,e.j=!0,o=null,r=new S(o4(e));r.a<r.c.c.length;)n=u(J(r),213),t.c[n.c]||(t.c[n.c]=!0,o=_z(n,e),n.f?s+=l5t(t,o):!o.j&&n.a==n.e.e-n.d.e&&(n.f=!0,Ns(t.p,n),s+=l5t(t,o)));return s}function qpn(t){var e,n,r;for(n=new S(t.a.a.b);n.a<n.c.c.length;)e=u(J(n),81),r=(On(0),0),r>0&&(!(Op(t.a.c)&&e.n.d)&&!(c8(t.a.c)&&e.n.b)&&(e.g.d+=b.Math.max(0,r/2-.5)),!(Op(t.a.c)&&e.n.a)&&!(c8(t.a.c)&&e.n.c)&&(e.g.a-=r-1))}function Joe(t){var e,n,r,s,o;if(s=new le,o=Uue(t,s),e=u(Q(t,(se(),Zu)),10),e)for(r=new S(e.j);r.a<r.c.c.length;)n=u(J(r),11),Gt(Q(n,_i))===Gt(t)&&(o=b.Math.max(o,Uue(n,s)));return s.c.length==0||Jt(t,W4,o),o!=-1?s:null}function tce(t,e,n){var r,s,o,h,d,w;o=u(Fe(e.e,0),17).c,r=o.i,s=r.k,w=u(Fe(n.g,0),17).d,h=w.i,d=h.k,s==(Gn(),Zs)?Jt(t,(se(),n1),u(Q(r,n1),11)):Jt(t,(se(),n1),o),d==Zs?Jt(t,(se(),Rh),u(Q(h,Rh),11)):Jt(t,(se(),Rh),w)}function ece(t,e){var n,r,s,o;for(o=Sr(Ca(e0,Wd(Sr(Ca(e==null?0:Hi(e),n0)),15))),n=o&t.b.length-1,s=null,r=t.b[n];r;s=r,r=r.a)if(r.d==o&&fd(r.i,e))return s?s.a=r.a:t.b[n]=r.a,Kqt(r.c,r.f),cM(r.b,r.e),--t.f,++t.e,!0;return!1}function h5t(t,e){var n,r,s,o,h;return e&=63,n=t.h,r=(n&ID)!=0,r&&(n|=-1048576),e<22?(h=n>>e,o=t.m>>e|n<<22-e,s=t.l>>e|t.m<<22-e):e<44?(h=r?W0:0,o=n>>e-22,s=t.m>>e-22|n<<44-e):(h=r?W0:0,o=r?ul:0,s=n>>e-44),ru(s&ul,o&ul,h&W0)}function Vst(t){var e,n,r,s,o,h;for(this.c=new le,this.d=t,r=ss,s=ss,e=Ts,n=Ts,h=ei(t,0);h.b!=h.d.c;)o=u(ti(h),8),r=b.Math.min(r,o.a),s=b.Math.min(s,o.b),e=b.Math.max(e,o.a),n=b.Math.max(n,o.b);this.a=new ih(r,s,e-r,n-s)}function nce(t,e){var n,r,s,o,h,d;for(o=new S(t.b);o.a<o.c.c.length;)for(s=u(J(o),29),d=new S(s.a);d.a<d.c.c.length;)for(h=u(J(d),10),h.k==(Gn(),Sl)&&c6(h,e),r=new ar(lr(Ms(h).a.Kc(),new z));zr(r);)n=u(Lr(r),17),jne(n,e)}function f5t(t){var e,n,r;this.c=t,r=u(Q(t,(Te(),Vl)),103),e=Xt(ye(Q(t,UG))),n=Xt(ye(Q(t,pCt))),r==(ao(),jh)||r==kf||r==c0?this.b=e*n:this.b=1/(e*n),this.j=Xt(ye(Q(t,Z4))),this.e=Xt(ye(Q(t,Bw))),this.f=t.b.c.length}function Hpn(t){var e,n;for(t.e=Pt(Tr,Xr,25,t.p.c.length,15,1),t.k=Pt(Tr,Xr,25,t.p.c.length,15,1),n=new S(t.p);n.a<n.c.c.length;)e=u(J(n),10),t.e[e.p]=N0(new ar(lr(jo(e).a.Kc(),new z))),t.k[e.p]=N0(new ar(lr(Ms(e).a.Kc(),new z)))}function Gpn(t){var e,n,r,s,o,h;for(s=0,t.q=new le,e=new qs,h=new S(t.p);h.a<h.c.c.length;){for(o=u(J(h),10),o.p=s,r=new ar(lr(Ms(o).a.Kc(),new z));zr(r);)n=u(Lr(r),17),Ns(e,n.d.i);e.a.Bc(o)!=null,ue(t.q,new yC(e)),e.a.$b(),++s}}function hw(){hw=Z,s_t=new Mv(20),oye=new eo((ci(),q2),s_t),o_t=new eo(H2,20),nye=new eo($6,BE),EV=new eo(zV,de(1)),uye=new eo(dft,(Fn(),!0)),r_t=UO,iye=z2,sye=a5,aye=vb,rye=s5,i_t=YO,cye=Ky,lye=(fyt(),eye),a_t=tye}function rce(t,e){var n,r,s,o,h,d,w,k,C;if(t.a.f>0&&Et(e,42)&&(t.a.qj(),k=u(e,42),w=k.cd(),o=w==null?0:Hi(w),h=X2t(t.a,o),n=t.a.d[h],n)){for(r=u(n.g,367),C=n.i,d=0;d<C;++d)if(s=r[d],s.Sh()==o&&s.Fb(k))return rce(t,k),!0}return!1}function Vpn(t){var e,n,r,s;for(s=u(Ai(t.a,(g4(),MG)),15).Kc();s.Ob();)r=u(s.Pb(),101),n=(e=Px(r.k),e.Hc((be(),Nn))?e.Hc(Hn)?e.Hc(mr)?e.Hc(Bn)?null:r2e:s2e:i2e:n2e),w8(t,r,n[0],(Jv(),Sw),0),w8(t,r,n[1],hb,1),w8(t,r,n[2],Aw,1)}function Upn(t,e){var n,r;n=ywn(e),wvn(t,e,n),cae(t.a,u(Q(Fa(e.b),(se(),O6)),230)),Vwn(t),mdn(t,e),r=Pt(Tr,Xr,25,e.b.j.c.length,15,1),Sat(t,e,(be(),Nn),r,n),Sat(t,e,Hn,r,n),Sat(t,e,mr,r,n),Sat(t,e,Bn,r,n),t.a=null,t.c=null,t.b=null}function d5t(){d5t=Z,F_t=(Tz(),$ht),Gye=new mn(Wkt,F_t),qye=new mn(Kkt,(Fn(),!0)),de(-1),jye=new mn(Ykt,de(-1)),de(-1),$ye=new mn(Xkt,de(-1)),Hye=new mn(Qkt,!1),Vye=new mn(Zkt,!0),zye=new mn(Cct,!1),Uye=new mn(Jkt,-1)}function g5t(t,e,n){switch(e){case 7:!t.e&&(t.e=new Cn(Ws,t,7,4)),xr(t.e),!t.e&&(t.e=new Cn(Ws,t,7,4)),rs(t.e,u(n,14));return;case 8:!t.d&&(t.d=new Cn(Ws,t,8,5)),xr(t.d),!t.d&&(t.d=new Cn(Ws,t,8,5)),rs(t.d,u(n,14));return}h4t(t,e,n)}function p5t(t,e){var n,r,s,o,h;if(Gt(e)===Gt(t))return!0;if(!Et(e,15)||(h=u(e,15),t.gc()!=h.gc()))return!1;for(o=h.Kc(),r=t.Kc();r.Ob();)if(n=r.Pb(),s=o.Pb(),!(Gt(n)===Gt(s)||n!=null&&yi(n,s)))return!1;return!0}function Wpn(t,e){var n,r,s,o;for(o=u(Pl(Wo(Wo(new Tn(null,new _n(e.b,16)),new kL),new JP),i2(new _e,new we,new nr,ct(ot(ll,1),ae,132,0,[(I1(),Gl)]))),15),o.Jc(new EL),n=0,s=o.Kc();s.Ob();)r=u(s.Pb(),11),r.p==-1&&v5t(t,r,n++)}function ice(t){switch(t.g){case 0:return new p9;case 1:return new KJ;case 2:return new WJ;case 3:return new AVt;case 4:return new pYt;default:throw rt(new Pn("No implementation is available for the node placer "+(t.f!=null?t.f:""+t.g)))}}function sce(t){switch(t.g){case 0:return new Kvt;case 1:return new YJ;case 2:return new zJ;case 3:return new qJ;case 4:return new MVt;default:throw rt(new Pn("No implementation is available for the cycle breaker "+(t.f!=null?t.f:""+t.g)))}}function b5t(){b5t=Z,Cye=new mn(zkt,de(0)),_ye=new mn(qkt,0),w_t=(RI(),CV),Eye=new mn(kct,w_t),de(0),kye=new mn(Ect,de(1)),y_t=(cz(),jht),Sye=new mn(Hkt,y_t),x_t=(N$(),Pht),Aye=new mn(Gkt,x_t),m_t=(Gz(),Rht),Tye=new mn(Vkt,m_t)}function Kpn(t,e,n){var r;r=null,e&&(r=e.d),l_(t,new a8(e.n.a-r.b+n.a,e.n.b-r.d+n.b)),l_(t,new a8(e.n.a-r.b+n.a,e.n.b+e.o.b+r.a+n.b)),l_(t,new a8(e.n.a+e.o.a+r.c+n.a,e.n.b-r.d+n.b)),l_(t,new a8(e.n.a+e.o.a+r.c+n.a,e.n.b+e.o.b+r.a+n.b))}function v5t(t,e,n){var r,s,o;for(e.p=n,o=Bp(L1(ct(ot(B1,1),Ie,20,0,[new Ys(e),new Er(e)])));zr(o);)r=u(Lr(o),11),r.p==-1&&v5t(t,r,n);if(e.i.k==(Gn(),Zs))for(s=new S(e.i.j);s.a<s.c.c.length;)r=u(J(s),11),r!=e&&r.p==-1&&v5t(t,r,n)}function ace(t){var e,n,r,s,o;if(s=u(Pl(yrn(PQt(t)),i2(new _e,new we,new nr,ct(ot(ll,1),ae,132,0,[(I1(),Gl)]))),15),r=FE,s.gc()>=2)for(n=s.Kc(),e=ye(n.Pb());n.Ob();)o=e,e=ye(n.Pb()),r=b.Math.min(r,(On(e),e-(On(o),o)));return r}function Ypn(t,e){var n,r,s,o,h;r=new Qi,hs(r,e,r.c.b,r.c);do for(n=(Qn(r.b!=0),u(ch(r,r.a.a),86)),t.b[n.g]=1,o=ei(n.d,0);o.b!=o.d.c;)s=u(ti(o),188),h=s.c,t.b[h.g]==1?ni(t.a,s):t.b[h.g]==2?t.b[h.g]=1:hs(r,h,r.c.b,r.c);while(r.b!=0)}function Xpn(t,e){var n,r,s;if(Gt(e)===Gt(Ar(t)))return!0;if(!Et(e,15)||(r=u(e,15),s=t.gc(),s!=r.gc()))return!1;if(Et(r,54)){for(n=0;n<s;n++)if(!fd(t.Xb(n),r.Xb(n)))return!1;return!0}else return ifn(t.Kc(),r.Kc())}function oce(t,e){var n,r;if(t.c.length!=0){if(t.c.length==2)c6((An(0,t.c.length),u(t.c[0],10)),(jl(),u0)),c6((An(1,t.c.length),u(t.c[1],10)),wb);else for(r=new S(t);r.a<r.c.c.length;)n=u(J(r),10),c6(n,e);t.c=Pt(Xn,Ie,1,0,5,1)}}function Qpn(t){var e,n;if(t.c.length!=2)throw rt(new Fo("Order only allowed for two paths."));e=(An(0,t.c.length),u(t.c[0],17)),n=(An(1,t.c.length),u(t.c[1],17)),e.d.i!=n.c.i&&(t.c=Pt(Xn,Ie,1,0,5,1),t.c[t.c.length]=n,t.c[t.c.length]=e)}function Zpn(t,e){var n,r,s,o,h,d;for(r=new n2,h=E$(new wl(t.g)),o=h.a.ec().Kc();o.Ob();){if(s=u(o.Pb(),10),!s){Yb(e,"There are no classes in a balanced layout.");break}d=t.j[s.p],n=u(Wv(r,d),15),n||(n=new le,p2(r,d,n)),n.Fc(s)}return r}function Jpn(t,e,n){var r,s,o,h,d,w,k;if(n)for(o=n.a.length,r=new Qb(o),d=(r.b-r.a)*r.c<0?(Ip(),Ab):new Pp(r);d.Ob();)h=u(d.Pb(),19),w=_8(n,h.a),w&&(k=oon(O0(w,Hct),e),ki(t.f,k,w),s=Cd in w.a,s&&qC(k,O0(w,Cd)),Jz(w,k),K4t(w,k))}function tbn(t,e){var n,r,s,o,h;for(wr(e,"Port side processing",1),h=new S(t.a);h.a<h.c.c.length;)s=u(J(h),10),ble(s);for(r=new S(t.b);r.a<r.c.c.length;)for(n=u(J(r),29),o=new S(n.a);o.a<o.c.c.length;)s=u(J(o),10),ble(s);or(e)}function cce(t,e,n){var r,s,o,h,d;if(s=t.f,!s&&(s=u(t.a.a.ec().Kc().Pb(),57)),c_(s,e,n),t.a.a.gc()!=1)for(r=e*n,h=t.a.a.ec().Kc();h.Ob();)o=u(h.Pb(),57),o!=s&&(d=Hx(o),d.f.d?(o.d.d+=r+P1,o.d.a-=r+P1):d.f.a&&(o.d.a-=r+P1))}function Ust(t,e,n,r,s){var o,h,d,w,k,C,M,F,H;return h=n-t,d=r-e,o=b.Math.atan2(h,d),w=o+Mot,k=o-Mot,C=s*b.Math.sin(w)+t,F=s*b.Math.cos(w)+e,M=s*b.Math.sin(k)+t,H=s*b.Math.cos(k)+e,_1(ct(ot(Us,1),te,8,0,[new $e(C,F),new $e(M,H)]))}function ebn(t,e,n,r){var s,o,h,d,w,k,C,M;s=n,C=e,o=C;do o=t.a[o.p],d=(M=t.g[o.p],Xt(t.p[M.p])+Xt(t.d[o.p])-o.d.d),w=pon(o,r),w&&(h=(k=t.g[w.p],Xt(t.p[k.p])+Xt(t.d[w.p])+w.o.b+w.d.a),s=b.Math.min(s,d-(h+V3(t.k,o,w))));while(C!=o);return s}function nbn(t,e,n,r){var s,o,h,d,w,k,C,M;s=n,C=e,o=C;do o=t.a[o.p],h=(M=t.g[o.p],Xt(t.p[M.p])+Xt(t.d[o.p])+o.o.b+o.d.a),w=_cn(o,r),w&&(d=(k=t.g[w.p],Xt(t.p[k.p])+Xt(t.d[w.p])-w.d.d),s=b.Math.min(s,d-(h+V3(t.k,o,w))));while(C!=o);return s}function qe(t,e){var n,r;return r=(!t.o&&(t.o=new Tl((Zc(),Eb),$w,t,0)),Yf(t.o,e)),r??(n=e.wg(),Et(n,4)&&(n==null?(!t.o&&(t.o=new Tl((Zc(),Eb),$w,t,0)),Iz(t.o,e)):(!t.o&&(t.o=new Tl((Zc(),Eb),$w,t,0)),Yz(t.o,e,n))),n)}function fy(){fy=Z,Ef=new $3("H_LEFT",0),J0=new $3("H_CENTER",1),Tf=new $3("H_RIGHT",2),_f=new $3("V_TOP",3),l0=new $3("V_CENTER",4),zh=new $3("V_BOTTOM",5),Ul=new $3("INSIDE",6),Cf=new $3("OUTSIDE",7),$h=new $3("H_PRIORITY",8)}function rbn(t){var e,n,r,s,o,h,d;if(e=t.Hh(Ph),e&&(d=Br(Yf((!e.b&&(e.b=new yl((dn(),Qa),cc,e)),e.b),"settingDelegates")),d!=null)){for(n=new le,s=py(d,"\\w+"),o=0,h=s.length;o<h;++o)r=s[o],n.c[n.c.length]=r;return n}return vn(),vn(),io}function ibn(t,e){var n,r,s,o,h,d,w;if(!e.f)throw rt(new Pn("The input edge is not a tree edge."));for(o=null,s=vi,r=new S(t.d);r.a<r.c.c.length;)n=u(J(r),213),d=n.d,w=n.e,$st(t,d,e)&&!$st(t,w,e)&&(h=w.e-d.e-n.a,h<s&&(s=h,o=n));return o}function sbn(t){var e,n,r,s,o,h;if(!(t.f.e.c.length<=1)){e=0,s=Xoe(t),n=ss;do{for(e>0&&(s=n),h=new S(t.f.e);h.a<h.c.c.length;)o=u(J(h),144),!je(Re(Q(o,(JI(),y7t))))&&(r=gmn(t,o),Li(Gf(o.d),r));n=Xoe(t)}while(!Len(t,e++,s,n))}}function abn(t,e){var n,r,s;for(wr(e,"Layer constraint preprocessing",1),n=new le,s=new ha(t.a,0);s.b<s.d.gc();)r=(Qn(s.b<s.d.gc()),u(s.d.Xb(s.c=s.b++),10)),Lcn(r)&&(Mdn(r),n.c[n.c.length]=r,El(s));n.c.length==0||Jt(t,(se(),Nlt),n),or(e)}function obn(t,e){var n,r,s,o,h;for(o=t.g.a,h=t.g.b,r=new S(t.d);r.a<r.c.c.length;)n=u(J(r),70),s=n.n,t.a==(M1(),i7)||t.i==(be(),Hn)?s.a=o:t.a==s7||t.i==(be(),Bn)?s.a=o+t.j.a-n.o.a:s.a=o+(t.j.a-n.o.a)/2,s.b=h,Li(s,e),h+=n.o.b+t.e}function cbn(t,e,n){var r,s,o,h;for(wr(n,"Processor set coordinates",1),t.a=e.b.b==0?1:e.b.b,o=null,r=ei(e.b,0);!o&&r.b!=r.d.c;)h=u(ti(r),86),je(Re(Q(h,(fc(),Wy))))&&(o=h,s=h.e,s.a=u(Q(h,Lht),19).a,s.b=0);Oae(t,byt(o),Rc(n,1)),or(n)}function ubn(t,e,n){var r,s,o;for(wr(n,"Processor determine the height for each level",1),t.a=e.b.b==0?1:e.b.b,s=null,r=ei(e.b,0);!s&&r.b!=r.d.c;)o=u(ti(r),86),je(Re(Q(o,(fc(),Wy))))&&(s=o);s&&Xce(t,_1(ct(ot(bxn,1),i6t,86,0,[s])),n),or(n)}function lbn(t,e){var n,r,s,o,h,d,w,k,C,M;k=t,w=PC(k,"individualSpacings"),w&&(r=r2(e,(ci(),q6)),h=!r,h&&(s=new Wu,bo(e,q6,s)),d=u(qe(e,q6),373),M=w,o=null,M&&(o=(C=uit(M,Pt(Ae,te,2,0,6,1)),new fet(M,C))),o&&(n=new EVt(M,d),va(o,n)))}function hbn(t,e){var n,r,s,o,h,d,w,k,C,M,F;return w=null,M=t,C=null,(Mde in M.a||Ide in M.a||wH in M.a)&&(k=null,F=wyt(e),h=PC(M,Mde),n=new szt(F),Bln(n.a,h),d=PC(M,Ide),r=new pzt(F),Fln(r.a,d),o=Uv(M,wH),s=new wzt(F),k=(gdn(s.a,o),o),C=k),w=C,w}function fbn(t,e){var n,r,s;if(e===t)return!0;if(Et(e,543)){if(s=u(e,835),t.a.d!=s.a.d||Y3(t).gc()!=Y3(s).gc())return!1;for(r=Y3(s).Kc();r.Ob();)if(n=u(r.Pb(),416),NQt(t,n.a.cd())!=u(n.a.dd(),14).gc())return!1;return!0}return!1}function dbn(t){var e,n,r,s;return r=u(t.a,19).a,s=u(t.b,19).a,e=r,n=s,r==0&&s==0?n-=1:r==-1&&s<=0?(e=0,n-=2):r<=0&&s>0?(e-=1,n-=1):r>=0&&s<0?(e+=1,n+=1):r>0&&s>=0?(e-=1,n+=1):(e+=1,n-=1),new la(de(e),de(n))}function gbn(t,e){return t.c<e.c?-1:t.c>e.c?1:t.b<e.b?-1:t.b>e.b?1:t.a!=e.a?Hi(t.a)-Hi(e.a):t.d==(BC(),NS)&&e.d==OS?-1:t.d==OS&&e.d==NS?1:0}function uce(t,e){var n,r,s,o,h;return o=e.a,o.c.i==e.b?h=o.d:h=o.c,o.c.i==e.b?r=o.c:r=o.d,s=qln(t.a,h,r),s>0&&s<FE?(n=ebn(t.a,r.i,s,t.c),mee(t.a,r.i,-n),n>0):s<0&&-s<FE?(n=nbn(t.a,r.i,-s,t.c),mee(t.a,r.i,n),n>0):!1}function pbn(t,e,n,r){var s,o,h,d,w,k,C,M;for(s=(e-t.d)/t.c.c.length,o=0,t.a+=n,t.d=e,M=new S(t.c);M.a<M.c.c.length;)C=u(J(M),33),k=C.g,w=C.f,yu(C,C.i+o*s),xu(C,C.j+r*n),Qv(C,C.g+s),Xv(C,t.a),++o,d=C.g,h=C.f,roe(C,new $e(d,h),new $e(k,w))}function bbn(t){var e,n,r,s,o,h,d;if(t==null)return null;for(d=t.length,s=(d+1)/2|0,h=Pt(Hu,N4,25,s,15,1),d%2!=0&&(h[--s]=R5t((Rr(d-1,t.length),t.charCodeAt(d-1)))),n=0,r=0;n<s;++n)e=R5t(ba(t,r++)),o=R5t(ba(t,r++)),h[n]=(e<<4|o)<<24>>24;return h}function vbn(t){if(t.pe()){var e=t.c;e.qe()?t.o="["+e.n:e.pe()?t.o="["+e.ne():t.o="[L"+e.ne()+";",t.b=e.me()+"[]",t.k=e.oe()+"[]";return}var n=t.j,r=t.d;r=r.split("/"),t.o=Yit(".",[n,Yit("$",r)]),t.b=Yit(".",[n,Yit(".",r)]),t.k=r[r.length-1]}function wbn(t,e){var n,r,s,o,h;for(h=null,o=new S(t.e.a);o.a<o.c.c.length;)if(s=u(J(o),121),s.b.a.c.length==s.g.a.c.length){for(r=s.e,h=egn(s),n=s.e-u(h.a,19).a+1;n<s.e+u(h.b,19).a;n++)e[n]<e[r]&&(r=n);e[r]<e[s.e]&&(--e[s.e],++e[r],s.e=r)}}function Wst(t){var e,n,r,s,o,h,d,w;for(s=ss,r=Ts,n=new S(t.e.b);n.a<n.c.c.length;)for(e=u(J(n),29),h=new S(e.a);h.a<h.c.c.length;)o=u(J(h),10),w=Xt(t.p[o.p]),d=w+Xt(t.b[t.g[o.p].p]),s=b.Math.min(s,w),r=b.Math.max(r,d);return r-s}function w5t(t,e,n,r){var s,o,h,d,w;for(s=V5t(t,e),d=0,w=s.gc();d<w;++d)if(o=u(s.Xb(d),170),hn(r,k8(Eo(t,o)))){if(h=ZM(Eo(t,o)),n==null){if(h==null)return o}else if(hn(n,h))return o}return null}function m5t(t,e,n,r){var s,o,h,d,w;for(s=oat(t,e),d=0,w=s.gc();d<w;++d)if(o=u(s.Xb(d),170),hn(r,k8(Eo(t,o)))){if(h=ZM(Eo(t,o)),n==null){if(h==null)return o}else if(hn(n,h))return o}return null}function mbn(t,e,n){var r,s,o,h,d,w;if(h=new tx,d=au(t.e.Tg(),e),r=u(t.g,119),to(),u(e,66).Oj())for(o=0;o<t.i;++o)s=r[o],d.rl(s.ak())&&Mr(h,s);else for(o=0;o<t.i;++o)s=r[o],d.rl(s.ak())&&(w=s.dd(),Mr(h,n?d_(t,e,o,h.i,w):w));return Jwt(h)}function ybn(t,e){var n,r,s,o,h;for(n=new e_(c7),s=(i6(),ct(ot(c7,1),ae,227,0,[o7,dS,a7,Oy,H4,q4])),o=0,h=s.length;o<h;++o)r=s[o],Z2t(n,r,new le);return us(pu(Ri(Wo(new Tn(null,new _n(t.b,16)),new nF),new rF),new mg(e)),new sd(n)),n}function sq(t,e,n){var r,s,o,h,d,w,k,C,M,F;for(o=e.Kc();o.Ob();)s=u(o.Pb(),33),C=s.i+s.g/2,F=s.j+s.f/2,w=t.f,h=w.i+w.g/2,d=w.j+w.f/2,k=C-h,M=F-d,r=b.Math.sqrt(k*k+M*M),k*=t.e/r,M*=t.e/r,n?(C-=k,F-=M):(C+=k,F+=M),yu(s,C-s.g/2),xu(s,F-s.f/2)}function b4(t){var e,n,r;if(!t.c&&t.b!=null){for(e=t.b.length-4;e>=0;e-=2)for(n=0;n<=e;n+=2)(t.b[n]>t.b[n+2]||t.b[n]===t.b[n+2]&&t.b[n+1]>t.b[n+3])&&(r=t.b[n+2],t.b[n+2]=t.b[n],t.b[n]=r,r=t.b[n+3],t.b[n+3]=t.b[n+1],t.b[n+1]=r);t.c=!0}}function lce(t,e){var n,r,s,o,h,d,w,k;for(h=e==1?Qut:Xut,o=h.a.ec().Kc();o.Ob();)for(s=u(o.Pb(),103),w=u(Ai(t.f.c,s),21).Kc();w.Ob();)switch(d=u(w.Pb(),46),r=u(d.b,81),k=u(d.a,189),n=k.c,s.g){case 2:case 1:r.g.d+=n;break;case 4:case 3:r.g.c+=n}}function xbn(t,e){var n,r,s,o,h,d,w,k,C;for(k=-1,C=0,h=t,d=0,w=h.length;d<w;++d){for(o=h[d],n=new OKt(k==-1?t[0]:t[k],e,(YC(),uV)),r=0;r<o.length;r++)for(s=r+1;s<o.length;s++)Vs(o[r],(se(),Tc))&&Vs(o[s],Tc)&&Ihe(n,o[r],o[s])>0&&++C;++k}return C}function bf(t){var e,n;return n=new Il(Ap(t.gm)),n.a+="@",Vr(n,(e=Hi(t)>>>0,e.toString(16))),t.kh()?(n.a+=" (eProxyURI: ",hc(n,t.qh()),t.$g()&&(n.a+=" eClass: ",hc(n,t.$g())),n.a+=")"):t.$g()&&(n.a+=" (eClass: ",hc(n,t.$g()),n.a+=")"),n.a}function p_(t){var e,n,r,s;if(t.e)throw rt(new Fo((L0(Mut),bot+Mut.k+vot)));for(t.d==(ao(),c0)&&_q(t,jh),n=new S(t.a.a);n.a<n.c.c.length;)e=u(J(n),307),e.g=e.i;for(s=new S(t.a.b);s.a<s.c.c.length;)r=u(J(s),57),r.i=Ts;return t.b.Le(t),t}function kbn(t,e){var n,r,s,o,h;if(e<2*t.b)throw rt(new Pn("The knot vector must have at least two time the dimension elements."));for(t.f=1,s=0;s<t.b;s++)ue(t.e,0);for(h=e+1-2*t.b,n=h,o=1;o<h;o++)ue(t.e,o/n);if(t.d)for(r=0;r<t.b;r++)ue(t.e,1)}function hce(t,e){var n,r,s,o,h,d,w,k,C;if(k=e,C=u(tz(Knt(t.i),k),33),!C)throw s=O0(k,Cd),d="Unable to find elk node for json object '"+s,w=d+"' Panic!",rt(new ad(w));o=Uv(k,"edges"),n=new pVt(t,C),ipn(n.a,n.b,o),h=Uv(k,Gct),r=new Q$t(t),b1n(r.a,h)}function fce(t,e,n,r){var s,o,h,d,w;if(r!=null){if(s=t.d[e],s){for(o=s.g,w=s.i,d=0;d<w;++d)if(h=u(o[d],133),h.Sh()==n&&yi(r,h.cd()))return d}}else if(s=t.d[e],s){for(o=s.g,w=s.i,d=0;d<w;++d)if(h=u(o[d],133),Gt(h.cd())===Gt(r))return d}return-1}function wE(t,e){var n,r,s;return n=e==null?ec(Ao(t.f,null)):U9(t.g,e),Et(n,235)?(s=u(n,235),s.Qh()==null,s):Et(n,498)?(r=u(n,1938),s=r.a,s&&(s.yb==null||(e==null?su(t.f,null,s):nw(t.g,e,s))),s):null}function Ebn(t){P5t();var e,n,r,s,o,h,d;if(t==null||(s=t.length,s%2!=0))return null;for(e=R$(t),o=s/2|0,n=Pt(Hu,N4,25,o,15,1),r=0;r<o;r++){if(h=lA[e[r*2]],h==-1||(d=lA[e[r*2+1]],d==-1))return null;n[r]=(h<<4|d)<<24>>24}return n}function Tbn(t,e,n){var r,s,o;if(s=u(go(t.i,e),306),!s)if(s=new hee(t.d,e,n),Nx(t.i,e,s),S3t(e))$Xe(t.a,e.c,e.b,s);else switch(o=hgn(e),r=u(go(t.p,o),244),o.g){case 1:case 3:s.j=!0,Jtt(r,e.b,s);break;case 4:case 2:s.k=!0,Jtt(r,e.c,s)}return s}function Cbn(t,e,n,r){var s,o,h,d,w,k;if(d=new tx,w=au(t.e.Tg(),e),s=u(t.g,119),to(),u(e,66).Oj())for(h=0;h<t.i;++h)o=s[h],w.rl(o.ak())&&Mr(d,o);else for(h=0;h<t.i;++h)o=s[h],w.rl(o.ak())&&(k=o.dd(),Mr(d,r?d_(t,e,h,d.i,k):k));return m3t(d,n)}function dce(t,e){var n,r,s,o,h,d,w,k;if(s=t.b[e.p],s>=0)return s;for(o=1,d=new S(e.j);d.a<d.c.c.length;)for(h=u(J(d),11),r=new S(h.g);r.a<r.c.c.length;)n=u(J(r),17),k=n.d.i,e!=k&&(w=dce(t,k),o=b.Math.max(o,w+1));return Cln(t,e,o),o}function gce(t,e,n){var r,s,o;for(r=1;r<t.c.length;r++){for(o=(An(r,t.c.length),u(t.c[r],10)),s=r;s>0&&e.ue((An(s-1,t.c.length),u(t.c[s-1],10)),o)>0;)ah(t,s,(An(s-1,t.c.length),u(t.c[s-1],10))),--s;An(s,t.c.length),t.c[s]=o}n.a=new Cr,n.b=new Cr}function _bn(t,e,n){var r,s,o,h,d,w,k,C;for(C=(r=u(e.e&&e.e(),9),new rh(r,u(uf(r,r.length),9),0)),w=py(n,"[\\[\\]\\s,]+"),o=w,h=0,d=o.length;h<d;++h)if(s=o[h],uy(s).length!=0){if(k=Soe(t,s),k==null)return null;pf(C,u(k,22))}return C}function Sbn(t){var e,n,r;for(n=new S(t.a.a.b);n.a<n.c.c.length;)e=u(J(n),81),r=(On(0),0),r>0&&(!(Op(t.a.c)&&e.n.d)&&!(c8(t.a.c)&&e.n.b)&&(e.g.d-=b.Math.max(0,r/2-.5)),!(Op(t.a.c)&&e.n.a)&&!(c8(t.a.c)&&e.n.c)&&(e.g.a+=b.Math.max(0,r-1)))}function pce(t,e,n){var r,s;if((t.c-t.b&t.a.length-1)==2)e==(be(),Nn)||e==Hn?(V$(u(KC(t),15),(jl(),u0)),V$(u(KC(t),15),wb)):(V$(u(KC(t),15),(jl(),wb)),V$(u(KC(t),15),u0));else for(s=new MC(t);s.a!=s.b;)r=u(mz(s),15),V$(r,n)}function Abn(t,e){var n,r,s,o,h,d,w;for(s=d8(new vpt(t)),d=new ha(s,s.c.length),o=d8(new vpt(e)),w=new ha(o,o.c.length),h=null;d.b>0&&w.b>0&&(n=(Qn(d.b>0),u(d.a.Xb(d.c=--d.b),33)),r=(Qn(w.b>0),u(w.a.Xb(w.c=--w.b),33)),n==r);)h=n;return h}function ol(t,e){var n,r,s,o,h,d;return o=t.a*fot+t.b*1502,d=t.b*fot+11,n=b.Math.floor(d*PD),o+=n,d-=n*Rxt,o%=Rxt,t.a=o,t.b=d,e<=24?b.Math.floor(t.a*TEt[e]):(s=t.a*(1<<e-24),h=b.Math.floor(t.b*CEt[e]),r=s+h,r>=2147483648&&(r-=cot),r)}function bce(t,e,n){var r,s,o,h;$Qt(t,e)>$Qt(t,n)?(r=Yo(n,(be(),Hn)),t.d=r.dc()?0:Cnt(u(r.Xb(0),11)),h=Yo(e,Bn),t.b=h.dc()?0:Cnt(u(h.Xb(0),11))):(s=Yo(n,(be(),Bn)),t.d=s.dc()?0:Cnt(u(s.Xb(0),11)),o=Yo(e,Hn),t.b=o.dc()?0:Cnt(u(o.Xb(0),11)))}function vce(t){var e,n,r,s,o,h,d;if(t&&(e=t.Hh(Ph),e&&(h=Br(Yf((!e.b&&(e.b=new yl((dn(),Qa),cc,e)),e.b),"conversionDelegates")),h!=null))){for(d=new le,r=py(h,"\\w+"),s=0,o=r.length;s<o;++s)n=r[s],d.c[d.c.length]=n;return d}return vn(),vn(),io}function wce(t,e){var n,r,s,o;for(n=t.o.a,o=u(u(Ai(t.r,e),21),84).Kc();o.Ob();)s=u(o.Pb(),111),s.e.a=n*Xt(ye(s.b.We(ZH))),s.e.b=(r=s.b,r.Xe((ci(),hl))?r.Hf()==(be(),Nn)?-r.rf().b-Xt(ye(r.We(hl))):Xt(ye(r.We(hl))):r.Hf()==(be(),Nn)?-r.rf().b:0)}function Lbn(t){var e,n,r,s,o,h,d,w;e=!0,s=null,o=null;t:for(w=new S(t.a);w.a<w.c.c.length;)for(d=u(J(w),10),r=new ar(lr(jo(d).a.Kc(),new z));zr(r);){if(n=u(Lr(r),17),s&&s!=d){e=!1;break t}if(s=d,h=n.c.i,o&&o!=h){e=!1;break t}o=h}return e}function Mbn(t,e,n){var r,s,o,h,d,w;for(o=-1,d=-1,h=0;h<e.c.length&&(s=(An(h,e.c.length),u(e.c[h],329)),!(s.c>t.c));h++)s.a>=t.s&&(o<0&&(o=h),d=h);return w=(t.s+t.c)/2,o>=0&&(r=hwn(t,e,o,d),w=yYe((An(r,e.c.length),u(e.c[r],329))),xpn(e,r,n)),w}function Kst(){Kst=Z,Wye=new eo((ci(),$6),1.3),R_t=RSt,V_t=new Mv(15),t3e=new eo(q2,V_t),n3e=new eo(H2,15),Kye=BV,Qye=z2,Zye=a5,Jye=vb,Xye=s5,q_t=YO,e3e=Ky,G_t=(d5t(),Gye),z_t=qye,H_t=Hye,U_t=Vye,j_t=zye,$_t=RV,Yye=$St,RO=$ye,B_t=jye,W_t=Uye}function Ir(t,e,n){var r,s,o,h,d,w,k;for(h=(o=new JF,o),tyt(h,(On(e),e)),k=(!h.b&&(h.b=new yl((dn(),Qa),cc,h)),h.b),w=1;w<n.length;w+=2)Yz(k,n[w-1],n[w]);for(r=(!t.Ab&&(t.Ab=new he(Zr,t,0,3)),t.Ab),d=0;d<0;++d)s=Nen(u(St(r,r.i-1),590)),r=s;Mr(r,h)}function mce(t,e,n){var r,s,o;for(kQe.call(this,new le),this.a=e,this.b=n,this.e=t,r=(t.b&&bat(t),t.a),this.d=CXt(r.a,this.a),this.c=CXt(r.b,this.b),sln(this,this.d,this.c),Qgn(this),o=this.e.e.a.ec().Kc();o.Ob();)s=u(o.Pb(),266),s.c.c.length>0&&i3n(this,s)}function y5t(t,e,n,r,s,o){var h,d,w;if(!s[e.b]){for(s[e.b]=!0,h=r,!h&&(h=new _$),ue(h.e,e),w=o[e.b].Kc();w.Ob();)d=u(w.Pb(),282),!(d.d==n||d.c==n)&&(d.c!=e&&y5t(t,d.c,e,h,s,o),d.d!=e&&y5t(t,d.d,e,h,s,o),ue(h.c,d),As(h.d,d.b));return h}return null}function Ibn(t){var e,n,r,s,o,h,d;for(e=0,s=new S(t.e);s.a<s.c.c.length;)r=u(J(s),17),n=A8(new Tn(null,new _n(r.b,16)),new wY),n&&++e;for(h=new S(t.g);h.a<h.c.c.length;)o=u(J(h),17),d=A8(new Tn(null,new _n(o.b,16)),new mY),d&&++e;return e>=2}function Dbn(t,e){var n,r,s,o;for(wr(e,"Self-Loop pre-processing",1),r=new S(t.a);r.a<r.c.c.length;)n=u(J(r),10),gln(n)&&(s=(o=new Pie(n),Jt(n,(se(),d7),o),Xwn(o),o),us(pu(Wo(new Tn(null,new _n(s.d,16)),new dF),new tX),new eX),V2n(s));or(e)}function Obn(t,e,n,r,s){var o,h,d,w,k,C;for(o=t.c.d.j,h=u(Qf(n,0),8),C=1;C<n.b;C++)k=u(Qf(n,C),8),hs(r,h,r.c.b,r.c),d=ud(Li(new yo(h),k),.5),w=ud(new brt(Iyt(o)),s),Li(d,w),hs(r,d,r.c.b,r.c),h=k,o=e==0?kz(o):t3t(o);ni(r,(Qn(n.b!=0),u(n.c.b.c,8)))}function Nbn(t){fy();var e,n,r;return n=ji(Ul,ct(ot(lo,1),ae,93,0,[Cf])),!(AI(h$(n,t))>1||(e=ji(Ef,ct(ot(lo,1),ae,93,0,[J0,Tf])),AI(h$(e,t))>1)||(r=ji(_f,ct(ot(lo,1),ae,93,0,[l0,zh])),AI(h$(r,t))>1))}function Pbn(t,e){var n,r,s;return n=e.Hh(t.a),n&&(s=Br(Yf((!n.b&&(n.b=new yl((dn(),Qa),cc,n)),n.b),"affiliation")),s!=null)?(r=dj(s,Eu(35)),r==-1?Pit(t,kC(t,Fl(e.Hj())),s):r==0?Pit(t,null,s.substr(1)):Pit(t,s.substr(0,r),s.substr(r+1))):null}function Fbn(t){var e,n,r;try{return t==null?Tu:$o(t)}catch(s){if(s=Wi(s),Et(s,102))return e=s,r=Ap(sl(t))+"@"+(n=(qd(),O3t(t)>>>0),n.toString(16)),Thn(Ecn(),(s8(),"Exception during lenientFormat for "+r),e),"<"+r+" threw "+Ap(e.gm)+">";throw rt(s)}}function yce(t){switch(t.g){case 0:return new GJ;case 1:return new IB;case 2:return new kGt;case 3:return new DL;case 4:return new HWt;case 5:return new VJ;default:throw rt(new Pn("No implementation is available for the layerer "+(t.f!=null?t.f:""+t.g)))}}function x5t(t,e,n){var r,s,o;for(o=new S(t.t);o.a<o.c.c.length;)r=u(J(o),268),r.b.s<0&&r.c>0&&(r.b.n-=r.c,r.b.n<=0&&r.b.u>0&&ni(e,r.b));for(s=new S(t.i);s.a<s.c.c.length;)r=u(J(s),268),r.a.s<0&&r.c>0&&(r.a.u-=r.c,r.a.u<=0&&r.a.n>0&&ni(n,r.a))}function aq(t){var e,n,r,s,o;if(t.g==null&&(t.d=t.si(t.f),Mr(t,t.d),t.c))return o=t.f,o;if(e=u(t.g[t.i-1],47),s=e.Pb(),t.e=e,n=t.si(s),n.Ob())t.d=n,Mr(t,n);else for(t.d=null;!e.Ob()&&(Ji(t.g,--t.i,null),t.i!=0);)r=u(t.g[t.i-1],47),e=r;return s}function Bbn(t,e){var n,r,s,o,h,d;if(r=e,s=r.ak(),V0(t.e,s)){if(s.hi()&&k$(t,s,r.dd()))return!1}else for(d=au(t.e.Tg(),s),n=u(t.g,119),o=0;o<t.i;++o)if(h=n[o],d.rl(h.ak()))return yi(h,r)?!1:(u(u4(t,o,e),72),!0);return Mr(t,e)}function Rbn(t,e,n,r){var s,o,h,d;for(s=new H0(t),_0(s,(Gn(),Sl)),Jt(s,(se(),_i),e),Jt(s,TO,r),Jt(s,(Te(),os),(oa(),Vc)),Jt(s,n1,e.c),Jt(s,Rh,e.d),Uce(e,s),d=b.Math.floor(n/2),h=new S(s.j);h.a<h.c.c.length;)o=u(J(h),11),o.n.b=d;return s}function jbn(t,e){var n,r,s,o,h,d,w,k,C;for(w=Hd(t.c-t.b&t.a.length-1),k=null,C=null,o=new MC(t);o.a!=o.b;)s=u(mz(o),10),n=(d=u(Q(s,(se(),n1)),11),d?d.i:null),r=(h=u(Q(s,Rh),11),h?h.i:null),(k!=n||C!=r)&&(oce(w,e),k=n,C=r),w.c[w.c.length]=s;oce(w,e)}function xce(t){var e,n,r,s,o,h,d;for(e=0,r=new S(t.a);r.a<r.c.c.length;)for(n=u(J(r),10),o=new ar(lr(Ms(n).a.Kc(),new z));zr(o);)s=u(Lr(o),17),t==s.d.i.c&&s.c.j==(be(),Bn)&&(h=T1(s.c).b,d=T1(s.d).b,e=b.Math.max(e,b.Math.abs(d-h)));return e}function $bn(t,e,n){var r,s,o;wr(n,"Remove overlaps",1),n.n&&e&&hf(n,ff(e),(Cl(),Yl)),r=u(qe(e,(bC(),$S)),33),t.f=r,t.a=ist(u(qe(e,(ay(),BO)),293)),s=ye(qe(e,(ci(),H2))),k9(t,(On(s),s)),o=gy(r),hhe(t,e,o,n),n.n&&e&&hf(n,ff(e),(Cl(),Yl))}function k5t(t,e,n){switch(n.g){case 1:return new $e(e.a,b.Math.min(t.d.b,e.b));case 2:return new $e(b.Math.max(t.c.a,e.a),e.b);case 3:return new $e(e.a,b.Math.max(t.c.b,e.b));case 4:return new $e(b.Math.min(e.a,t.d.a),e.b)}return new $e(e.a,e.b)}function zbn(t,e,n,r){var s,o,h,d,w,k,C,M,F;for(M=r?(be(),Bn):(be(),Hn),s=!1,w=e[n],k=0,C=w.length;k<C;++k)d=w[k],!Dx(u(Q(d,(Te(),os)),98))&&(h=d.e,F=!Yo(d,M).dc()&&!!h,F&&(o=m4t(h),t.b=new y4t(o,r?0:o.length-1)),s=s|jwn(t,d,M,F));return s}function fD(t){var e,n,r;for(e=Hd(1+(!t.c&&(t.c=new he(fl,t,9,9)),t.c).i),ue(e,(!t.d&&(t.d=new Cn(Ws,t,8,5)),t.d)),r=new er((!t.c&&(t.c=new he(fl,t,9,9)),t.c));r.e!=r.i.gc();)n=u(dr(r),118),ue(e,(!n.d&&(n.d=new Cn(Ws,n,8,5)),n.d));return Ar(e),new uC(e)}function G0(t){var e,n,r;for(e=Hd(1+(!t.c&&(t.c=new he(fl,t,9,9)),t.c).i),ue(e,(!t.e&&(t.e=new Cn(Ws,t,7,4)),t.e)),r=new er((!t.c&&(t.c=new he(fl,t,9,9)),t.c));r.e!=r.i.gc();)n=u(dr(r),118),ue(e,(!n.e&&(n.e=new Cn(Ws,n,7,4)),n.e));return Ar(e),new uC(e)}function qbn(t){var e,n,r,s;if(t==null)return null;if(r=$c(t,!0),s=nO.length,hn(r.substr(r.length-s,s),nO)){if(n=r.length,n==4){if(e=(Rr(0,r.length),r.charCodeAt(0)),e==43)return vLt;if(e==45)return S5e}else if(n==3)return vLt}return ly(r)}function Hbn(t){var e,n,r,s;for(e=0,n=0,s=new S(t.j);s.a<s.c.c.length;)if(r=u(J(s),11),e=Sr(Oa(e,NJt(Ri(new Tn(null,new _n(r.e,16)),new mQ)))),n=Sr(Oa(n,NJt(Ri(new Tn(null,new _n(r.g,16)),new yQ)))),e>1||n>1)return 2;return e+n==1?2:0}function kce(t,e,n){var r,s,o,h,d;for(wr(n,"ELK Force",1),je(Re(qe(e,(Zf(),d7t))))||u$((r=new rr((Im(),new Sm(e))),r)),d=Zne(e),c1n(d),zcn(t,u(Q(d,f7t),424)),h=hle(t.a,d),o=h.Kc();o.Ob();)s=u(o.Pb(),231),Ewn(t.b,s,Rc(n,1/h.gc()));d=The(h),xhe(d),or(n)}function Gbn(t,e){var n,r,s,o,h;if(wr(e,"Breaking Point Processor",1),l4n(t),je(Re(Q(t,(Te(),yCt))))){for(s=new S(t.b);s.a<s.c.c.length;)for(r=u(J(s),29),n=0,h=new S(r.a);h.a<h.c.c.length;)o=u(J(h),10),o.p=n++;fyn(t),Vce(t,!0),Vce(t,!1)}or(e)}function Vbn(t,e,n){var r,s,o,h,d,w;for(d=t.c,h=(n.q?n.q:(vn(),vn(),a0)).vc().Kc();h.Ob();)o=u(h.Pb(),42),r=!j9(Ri(new Tn(null,new _n(d,16)),new Zt(new aVt(e,o)))).sd((Wb(),JE)),r&&(w=o.dd(),Et(w,4)&&(s=_3t(w),s!=null&&(w=s)),e.Ye(u(o.cd(),146),w))}function oq(t,e){var n,r,s,o,h;if(e){for(o=Et(t.Cb,88)||Et(t.Cb,99),h=!o&&Et(t.Cb,322),r=new er((!e.a&&(e.a=new xC(e,ho,e)),e.a));r.e!=r.i.gc();)if(n=u(dr(r),87),s=wq(n),o?Et(s,88):h?Et(s,148):s)return s;return o?(dn(),Wh):(dn(),V1)}else return null}function Ubn(t,e){var n,r,s,o,h,d;for(wr(e,"Constraints Postprocessor",1),h=0,o=new S(t.b);o.a<o.c.c.length;){for(s=u(J(o),29),d=0,r=new S(s.a);r.a<r.c.c.length;)n=u(J(r),10),n.k==(Gn(),Ds)&&(Jt(n,(Te(),tV),de(h)),Jt(n,XG,de(d)),++d);++h}or(e)}function Wbn(t,e,n,r){var s,o,h,d,w,k,C;for(w=new $e(n,r),na(w,u(Q(e,(fc(),BS)),8)),C=ei(e.b,0);C.b!=C.d.c;)k=u(ti(C),86),Li(k.e,w),ni(t.b,k);for(d=ei(e.a,0);d.b!=d.d.c;){for(h=u(ti(d),188),o=ei(h.a,0);o.b!=o.d.c;)s=u(ti(o),8),Li(s,w);ni(t.a,h)}}function E5t(t,e,n){var r,s,o;if(o=E4((Ru(),ma),t.Tg(),e),o){if(to(),!u(o,66).Oj()&&(o=qx(Eo(ma,o)),!o))throw rt(new Pn(ab+e.ne()+W_));s=(r=t.Yg(o),u(r>=0?t._g(r,!0,!0):lw(t,o,!0),153)),u(s,215).ml(e,n)}else throw rt(new Pn(ab+e.ne()+W_))}function Kbn(t,e){var n,r,s,o,h;for(n=new le,s=Wo(new Tn(null,new _n(t,16)),new zQ),o=Wo(new Tn(null,new _n(t,16)),new qQ),h=xan(Fsn(Jj(S2n(ct(ot(rxn,1),Ie,833,0,[s,o])),new HQ))),r=1;r<h.length;r++)h[r]-h[r-1]>=2*e&&ue(n,new ynt(h[r-1]+e,h[r]-e));return n}function Ybn(t,e,n){wr(n,"Eades radial",1),n.n&&e&&hf(n,ff(e),(Cl(),Yl)),t.d=u(qe(e,(bC(),$S)),33),t.c=Xt(ye(qe(e,(ay(),SV)))),t.e=ist(u(qe(e,BO),293)),t.a=Aln(u(qe(e,T_t),426)),t.b=X1n(u(qe(e,E_t),340)),M1n(t),n.n&&e&&hf(n,ff(e),(Cl(),Yl))}function Xbn(t,e,n){var r,s,o,h,d,w,k,C;if(n)for(o=n.a.length,r=new Qb(o),d=(r.b-r.a)*r.c<0?(Ip(),Ab):new Pp(r);d.Ob();)h=u(d.Pb(),19),s=_8(n,h.a),s&&(w=Kin(t,(k=(Tv(),C=new Rpt,C),e&&T5t(k,e),k),s),qC(w,O0(s,Cd)),Jz(s,w),K4t(s,w),wit(t,s,w))}function cq(t){var e,n,r,s,o,h;if(!t.j){if(h=new QT,e=aA,o=e.a.zc(t,e),o==null){for(r=new er(So(t));r.e!=r.i.gc();)n=u(dr(r),26),s=cq(n),rs(h,s),Mr(h,n);e.a.Bc(t)!=null}ey(h),t.j=new q3((u(St(Wt((jp(),Ln).o),11),18),h.i),h.g),rl(t).b&=-33}return t.j}function Qbn(t){var e,n,r,s;if(t==null)return null;if(r=$c(t,!0),s=nO.length,hn(r.substr(r.length-s,s),nO)){if(n=r.length,n==4){if(e=(Rr(0,r.length),r.charCodeAt(0)),e==43)return wLt;if(e==45)return A5e}else if(n==3)return wLt}return new Spt(r)}function Zbn(t){var e,n,r;return n=t.l,n&n-1||(r=t.m,r&r-1)||(e=t.h,e&e-1)||e==0&&r==0&&n==0?-1:e==0&&r==0&&n!=0?Wmt(n):e==0&&r!=0&&n==0?Wmt(r)+22:e!=0&&r==0&&n==0?Wmt(e)+44:-1}function Jbn(t,e){var n,r,s,o,h;for(wr(e,"Edge joining",1),n=je(Re(Q(t,(Te(),nht)))),s=new S(t.b);s.a<s.c.c.length;)for(r=u(J(s),29),h=new ha(r.a,0);h.b<h.d.gc();)o=(Qn(h.b<h.d.gc()),u(h.d.Xb(h.c=h.b++),10)),o.k==(Gn(),Zs)&&(_at(o,n),El(h));or(e)}function t2n(t,e,n){var r,s;if(w$(t.b),Ud(t.b,(GI(),AV),(H9(),jO)),Ud(t.b,LV,e.g),Ud(t.b,MV,e.a),t.a=Tq(t.b,e),wr(n,"Compaction by shrinking a tree",t.a.c.length),e.i.c.length>1)for(s=new S(t.a);s.a<s.c.c.length;)r=u(J(s),51),r.pf(e,Rc(n,1));or(n)}function v4(t,e){var n,r,s,o,h;for(s=e.a&t.f,o=null,r=t.b[s];;r=r.b){if(r==e){o?o.b=e.b:t.b[s]=e.b;break}o=r}for(h=e.f&t.f,o=null,n=t.c[h];;n=n.d){if(n==e){o?o.d=e.d:t.c[h]=e.d;break}o=n}e.e?e.e.c=e.c:t.a=e.c,e.c?e.c.e=e.e:t.e=e.e,--t.i,++t.g}function e2n(t){var e,n,r,s,o,h,d,w,k,C;for(n=t.o,e=t.p,h=vi,s=_a,d=vi,o=_a,k=0;k<n;++k)for(C=0;C<e;++C)l4(t,k,C)&&(h=b.Math.min(h,k),s=b.Math.max(s,k),d=b.Math.min(d,C),o=b.Math.max(o,C));return w=s-h+1,r=o-d+1,new TXt(de(h),de(d),de(w),de(r))}function Yst(t,e){var n,r,s,o;for(o=new ha(t,0),n=(Qn(o.b<o.d.gc()),u(o.d.Xb(o.c=o.b++),140));o.b<o.d.gc();)r=(Qn(o.b<o.d.gc()),u(o.d.Xb(o.c=o.b++),140)),s=new Ovt(r.c,n.d,e),Qn(o.b>0),o.a.Xb(o.c=--o.b),Rm(o,s),Qn(o.b<o.d.gc()),o.d.Xb(o.c=o.b++),s.a=!1,n=r}function Ece(t){var e,n,r,s,o,h;for(s=u(Q(t,(se(),zG)),11),h=new S(t.j);h.a<h.c.c.length;){for(o=u(J(h),11),r=new S(o.g);r.a<r.c.c.length;)return e=u(J(r),17),sa(e,s),o;for(n=new S(o.e);n.a<n.c.c.length;)return e=u(J(n),17),Da(e,s),o}return null}function n2n(t,e,n){var r,s;r=ku(n.q.getTime()),yc(r,0)<0?(s=$g-Sr(UI(O8(r),$g)),s==$g&&(s=0)):s=Sr(UI(r,$g)),e==1?(s=b.Math.min((s+50)/100|0,9),Rp(t,48+s&ms)):e==2?(s=b.Math.min((s+5)/10|0,99),Xd(t,s,2)):(Xd(t,s,3),e>3&&Xd(t,0,e-3))}function r2n(t){var e,n,r,s;return Gt(Q(t,(Te(),jy)))===Gt(($0(),Zg))?!t.e&&Gt(Q(t,_O))!==Gt((W8(),mO)):(r=u(Q(t,Glt),292),s=je(Re(Q(t,Vlt)))||Gt(Q(t,ES))===Gt((Yx(),wO)),e=u(Q(t,B9t),19).a,n=t.a.c.length,!s&&r!=(W8(),mO)&&(e==0||e>n))}function i2n(t){var e,n;for(n=0;n<t.c.length&&!(WKt((An(n,t.c.length),u(t.c[n],113)))>0);n++);if(n>0&&n<t.c.length-1)return n;for(e=0;e<t.c.length&&!(WKt((An(e,t.c.length),u(t.c[e],113)))>0);e++);return e>0&&n<t.c.length-1?e:t.c.length/2|0}function Tce(t,e){var n,r;if(e!=t.Cb||t.Db>>16!=6&&e){if(lE(t,e))throw rt(new Pn(K_+qoe(t)));r=null,t.Cb&&(r=(n=t.Db>>16,n>=0?X3t(t,r):t.Cb.ih(t,-1-n,null,r))),e&&(r=e6(e,t,6,r)),r=K2t(t,e,r),r&&r.Fi()}else t.Db&4&&!(t.Db&1)&&mi(t,new Qs(t,1,6,e,e))}function T5t(t,e){var n,r;if(e!=t.Cb||t.Db>>16!=9&&e){if(lE(t,e))throw rt(new Pn(K_+Tue(t)));r=null,t.Cb&&(r=(n=t.Db>>16,n>=0?Z3t(t,r):t.Cb.ih(t,-1-n,null,r))),e&&(r=e6(e,t,9,r)),r=Y2t(t,e,r),r&&r.Fi()}else t.Db&4&&!(t.Db&1)&&mi(t,new Qs(t,1,9,e,e))}function Xst(t,e){var n,r;if(e!=t.Cb||t.Db>>16!=3&&e){if(lE(t,e))throw rt(new Pn(K_+Ele(t)));r=null,t.Cb&&(r=(n=t.Db>>16,n>=0?t4t(t,r):t.Cb.ih(t,-1-n,null,r))),e&&(r=e6(e,t,12,r)),r=W2t(t,e,r),r&&r.Fi()}else t.Db&4&&!(t.Db&1)&&mi(t,new Qs(t,1,3,e,e))}function mE(t){var e,n,r,s,o;if(r=Lh(t),o=t.j,o==null&&r)return t.$j()?null:r.zj();if(Et(r,148)){if(n=r.Aj(),n&&(s=n.Nh(),s!=t.i)){if(e=u(r,148),e.Ej())try{t.g=s.Kh(e,o)}catch(h){if(h=Wi(h),Et(h,78))t.g=null;else throw rt(h)}t.i=s}return t.g}return null}function Cce(t){var e;return e=new le,ue(e,new Tx(new $e(t.c,t.d),new $e(t.c+t.b,t.d))),ue(e,new Tx(new $e(t.c,t.d),new $e(t.c,t.d+t.a))),ue(e,new Tx(new $e(t.c+t.b,t.d+t.a),new $e(t.c+t.b,t.d))),ue(e,new Tx(new $e(t.c+t.b,t.d+t.a),new $e(t.c,t.d+t.a))),e}function _ce(t,e,n,r){var s,o,h;if(h=c4t(e,n),r.c[r.c.length]=e,t.j[h.p]==-1||t.j[h.p]==2||t.a[e.p])return r;for(t.j[h.p]=-1,o=new ar(lr(z0(h).a.Kc(),new z));zr(o);)if(s=u(Lr(o),17),!(!(!Va(s)&&!(!Va(s)&&s.c.i.c==s.d.i.c))||s==e))return _ce(t,s,h,r);return r}function s2n(t,e,n){var r,s,o;for(o=e.a.ec().Kc();o.Ob();)s=u(o.Pb(),79),r=u(Jn(t.b,s),266),!r&&(ts(Zd(s))==ts(Xp(s))?yvn(t,s,n):Zd(s)==ts(Xp(s))?Jn(t.c,s)==null&&Jn(t.b,Xp(s))!=null&&she(t,s,n,!1):Jn(t.d,s)==null&&Jn(t.b,Zd(s))!=null&&she(t,s,n,!0))}function a2n(t,e){var n,r,s,o,h,d,w;for(s=t.Kc();s.Ob();)for(r=u(s.Pb(),10),d=new Mc,Uo(d,r),Fs(d,(be(),Hn)),Jt(d,(se(),VG),(Fn(),!0)),h=e.Kc();h.Ob();)o=u(h.Pb(),10),w=new Mc,Uo(w,o),Fs(w,Bn),Jt(w,VG,!0),n=new zv,Jt(n,VG,!0),Da(n,d),sa(n,w)}function o2n(t,e,n,r){var s,o,h,d;s=xie(t,e,n),o=xie(t,n,e),h=u(Jn(t.c,e),112),d=u(Jn(t.c,n),112),s<o?new t2((Vf(),Uy),h,d,o-s):o<s?new t2((Vf(),Uy),d,h,s-o):(s!=0||!(!e.i||!n.i)&&r[e.i.c][n.i.c])&&(new t2((Vf(),Uy),h,d,0),new t2(Uy,d,h,0))}function Sce(t,e){var n,r,s,o,h,d,w;for(s=0,h=new S(e.a);h.a<h.c.c.length;)for(o=u(J(h),10),s+=o.o.b+o.d.a+o.d.d+t.e,r=new ar(lr(jo(o).a.Kc(),new z));zr(r);)n=u(Lr(r),17),n.c.i.k==(Gn(),Hc)&&(w=n.c.i,d=u(Q(w,(se(),_i)),10),s+=d.o.b+d.d.a+d.d.d);return s}function Ace(t,e,n){var r,s,o,h,d,w,k;for(o=new le,k=new Qi,h=new Qi,Xmn(t,k,h,e),a4n(t,k,h,e,n),w=new S(t);w.a<w.c.c.length;)for(d=u(J(w),112),s=new S(d.k);s.a<s.c.c.length;)r=u(J(s),129),(!e||r.c==(Vf(),pb))&&d.g>r.b.g&&(o.c[o.c.length]=r);return o}function yE(){yE=Z,n5=new _M("CANDIDATE_POSITION_LAST_PLACED_RIGHT",0),R6=new _M("CANDIDATE_POSITION_LAST_PLACED_BELOW",1),qS=new _M("CANDIDATE_POSITION_WHOLE_DRAWING_RIGHT",2),zS=new _M("CANDIDATE_POSITION_WHOLE_DRAWING_BELOW",3),HS=new _M("WHOLE_DRAWING",4)}function c2n(t,e){if(Et(e,239))return Run(t,u(e,33));if(Et(e,186))return Qun(t,u(e,118));if(Et(e,354))return lnn(t,u(e,137));if(Et(e,352))return Nmn(t,u(e,79));if(e)return null;throw rt(new Pn(k8t+Qp(new wl(ct(ot(Xn,1),Ie,1,5,[e])))))}function u2n(t){var e,n,r,s,o,h,d;for(o=new Qi,s=new S(t.d.a);s.a<s.c.c.length;)r=u(J(s),121),r.b.a.c.length==0&&hs(o,r,o.c.b,o.c);if(o.b>1)for(e=Dv((n=new Ub,++t.b,n),t.d),d=ei(o,0);d.b!=d.d.c;)h=u(ti(d),121),vf(of(af(cf(sf(new Eh,1),0),e),h))}function C5t(t,e){var n,r;if(e!=t.Cb||t.Db>>16!=11&&e){if(lE(t,e))throw rt(new Pn(K_+H5t(t)));r=null,t.Cb&&(r=(n=t.Db>>16,n>=0?e4t(t,r):t.Cb.ih(t,-1-n,null,r))),e&&(r=e6(e,t,10,r)),r=rvt(t,e,r),r&&r.Fi()}else t.Db&4&&!(t.Db&1)&&mi(t,new Qs(t,1,11,e,e))}function l2n(t){var e,n,r,s;for(r=new h2(new wg(t.b).a);r.b;)n=Yv(r),s=u(n.cd(),11),e=u(n.dd(),10),Jt(e,(se(),_i),s),Jt(s,Zu,e),Jt(s,kO,(Fn(),!0)),Fs(s,u(Q(e,oc),61)),Q(e,oc),Jt(s.i,(Te(),os),(oa(),L7)),u(Q(Fa(s.i),Gc),21).Fc((oo(),f7))}function h2n(t,e,n){var r,s,o,h,d,w;if(o=0,h=0,t.c)for(w=new S(t.d.i.j);w.a<w.c.c.length;)d=u(J(w),11),o+=d.e.c.length;else o=1;if(t.d)for(w=new S(t.c.i.j);w.a<w.c.c.length;)d=u(J(w),11),h+=d.g.c.length;else h=1;return s=ps(KM(h-o)),r=(n+e)/2+(n-e)*(.4*s),r}function f2n(t){g4();var e,n;if(t.Hc((be(),Zo)))throw rt(new Pn("Port sides must not contain UNDEFINED"));switch(t.gc()){case 1:return LG;case 2:return e=t.Hc(Hn)&&t.Hc(Bn),n=t.Hc(Nn)&&t.Hc(mr),e||n?DG:IG;case 3:return MG;case 4:return AG;default:return null}}function d2n(t,e,n){var r,s,o,h,d;for(wr(n,"Breaking Point Removing",1),t.a=u(Q(e,(Te(),X0)),218),o=new S(e.b);o.a<o.c.c.length;)for(s=u(J(o),29),d=new S(Gv(s.a));d.a<d.c.c.length;)h=u(J(d),10),ree(h)&&(r=u(Q(h,(se(),Lw)),305),!r.d&&Che(t,r));or(n)}function Qst(t,e,n){return y4(),H8(t,e)&&H8(t,n)?!1:Aat(new $e(t.c,t.d),new $e(t.c+t.b,t.d),e,n)||Aat(new $e(t.c+t.b,t.d),new $e(t.c+t.b,t.d+t.a),e,n)||Aat(new $e(t.c+t.b,t.d+t.a),new $e(t.c,t.d+t.a),e,n)||Aat(new $e(t.c,t.d+t.a),new $e(t.c,t.d),e,n)}function _5t(t,e){var n,r,s,o;if(!t.dc()){for(n=0,r=t.gc();n<r;++n)if(o=Br(t.Xb(n)),o==null?e==null:hn(o.substr(0,3),"!##")?e!=null&&(s=e.length,!hn(o.substr(o.length-s,s),e)||o.length!=e.length+3)&&!hn(L2,e):hn(o,iut)&&!hn(L2,e)||hn(o,e))return!0}return!1}function g2n(t,e,n,r){var s,o,h,d,w,k;for(h=t.j.c.length,w=Pt(axn,Kxt,306,h,0,1),d=0;d<h;d++)o=u(Fe(t.j,d),11),o.p=d,w[d]=ypn(Joe(o),n,r);for(R2n(t,w,n,e,r),k=new Cr,s=0;s<w.length;s++)w[s]&&ki(k,u(Fe(t.j,s),11),w[s]);k.f.c+k.g.c!=0&&(Jt(t,(se(),mS),k),q0n(t,w))}function p2n(t,e,n){var r,s,o;for(s=new S(t.a.b);s.a<s.c.c.length;)if(r=u(J(s),57),o=Z3(r),o&&o.k==(Gn(),xs))switch(u(Q(o,(se(),oc)),61).g){case 4:o.n.a=e.a;break;case 2:o.n.a=n.a-(o.o.a+o.d.c);break;case 1:o.n.b=e.b;break;case 3:o.n.b=n.b-(o.o.b+o.d.a)}}function w4(){w4=Z,hV=new Cx(K0,0),MO=new Cx("NIKOLOV",1),IO=new Cx("NIKOLOV_PIXEL",2),ICt=new Cx("NIKOLOV_IMPROVED",3),DCt=new Cx("NIKOLOV_IMPROVED_PIXEL",4),MCt=new Cx("DUMMYNODE_PERCENTAGE",5),OCt=new Cx("NODECOUNT_PERCENTAGE",6),fV=new Cx("NO_BOUNDARY",7)}function b2n(t,e,n){var r,s,o,h,d;return s=u(qe(e,(eq(),ASt)),19),!s&&(s=de(0)),o=u(qe(n,ASt),19),!o&&(o=de(0)),s.a>o.a?-1:s.a<o.a?1:t.a&&(r=Ls(e.j,n.j),r!=0||(r=Ls(e.i,n.i),r!=0))?r:(h=e.g*e.f,d=n.g*n.f,Ls(h,d))}function v2n(t,e){var n,r,s,o,h,d,w,k,C,M;if(++t.e,w=t.d==null?0:t.d.length,e>w){for(C=t.d,t.d=Pt(HAt,I8t,63,2*w+4,0,1),o=0;o<w;++o)if(k=C[o],k)for(r=k.g,M=k.i,d=0;d<M;++d)s=u(r[d],133),h=X2t(t,s.Sh()),n=t.d[h],!n&&(n=t.d[h]=t.uj()),n.Fc(s);return!0}else return!1}function w2n(t,e,n){var r,s,o,h,d,w;if(s=n,o=s.ak(),V0(t.e,o)){if(o.hi()){for(r=u(t.g,119),h=0;h<t.i;++h)if(d=r[h],yi(d,s)&&h!=e)throw rt(new Pn(XD))}}else for(w=au(t.e.Tg(),o),r=u(t.g,119),h=0;h<t.i;++h)if(d=r[h],w.rl(d.ak()))throw rt(new Pn(eO));JC(t,e,n)}function Lce(t,e){var n,r,s,o,h,d;for(n=u(Q(e,(se(),Ny)),21),h=u(Ai((Iat(),Ni),n),21),d=u(Ai(Qr,n),21),o=h.Kc();o.Ob();)if(r=u(o.Pb(),21),!u(Ai(t.b,r),15).dc())return!1;for(s=d.Kc();s.Ob();)if(r=u(s.Pb(),21),!u(Ai(t.b,r),15).dc())return!1;return!0}function m2n(t,e){var n,r,s,o,h,d;for(wr(e,"Partition postprocessing",1),r=new S(t.b);r.a<r.c.c.length;)for(n=u(J(r),29),o=new S(n.a);o.a<o.c.c.length;)for(s=u(J(o),10),d=new S(s.j);d.a<d.c.c.length;)h=u(J(d),11),je(Re(Q(h,(se(),VG))))&&_C(d);or(e)}function Mce(t,e){var n,r,s,o,h,d,w,k,C;if(t.a.c.length==1)return Nae(u(Fe(t.a,0),187),e);for(h=kun(t),w=0,k=t.d,o=h,C=t.d,d=(k-o)/2+o;o+1<k;){for(w=0,r=new S(t.a);r.a<r.c.c.length;)n=u(J(r),187),w+=(s=E_(n,d,!1),s.a);w<e?(C=d,k=d):o=d,d=(k-o)/2+o}return C}function y2n(t){var e,n,r,s,o;return isNaN(t)?(N8(),tEt):t<-9223372036854776e3?(N8(),xge):t>=9223372036854776e3?(N8(),Z8t):(s=!1,t<0&&(s=!0,t=-t),r=0,t>=x2&&(r=ps(t/x2),t-=r*x2),n=0,t>=f6&&(n=ps(t/f6),t-=n*f6),e=ps(t),o=ru(e,n,r),s&&vit(o),o)}function x2n(t,e){var n,r,s,o;for(n=!e||!t.u.Hc((Qu(),tg)),o=0,s=new S(t.e.Cf());s.a<s.c.c.length;){if(r=u(J(s),838),r.Hf()==(be(),Zo))throw rt(new Pn("Label and node size calculator can only be used with ports that have port sides assigned."));r.vf(o++),mun(t,r,n)}}function k2n(t,e){var n,r,s,o,h;return s=e.Hh(t.a),s&&(r=(!s.b&&(s.b=new yl((dn(),Qa),cc,s)),s.b),n=Br(Yf(r,Sa)),n!=null&&(o=n.lastIndexOf("#"),h=o==-1?$2t(t,e.Aj(),n):o==0?pI(t,null,n.substr(1)):pI(t,n.substr(0,o),n.substr(o+1)),Et(h,148)))?u(h,148):null}function E2n(t,e){var n,r,s,o,h;return r=e.Hh(t.a),r&&(n=(!r.b&&(r.b=new yl((dn(),Qa),cc,r)),r.b),o=Br(Yf(n,rut)),o!=null&&(s=o.lastIndexOf("#"),h=s==-1?$2t(t,e.Aj(),o):s==0?pI(t,null,o.substr(1)):pI(t,o.substr(0,s),o.substr(s+1)),Et(h,148)))?u(h,148):null}function S5t(t){var e,n,r,s,o;for(n=new S(t.a.a);n.a<n.c.c.length;){for(e=u(J(n),307),e.j=null,o=e.a.a.ec().Kc();o.Ob();)r=u(o.Pb(),57),Gf(r.b),(!e.j||r.d.c<e.j.d.c)&&(e.j=r);for(s=e.a.a.ec().Kc();s.Ob();)r=u(s.Pb(),57),r.b.a=r.d.c-e.j.d.c,r.b.b=r.d.d-e.j.d.d}return t}function uq(t){var e,n,r,s,o;for(n=new S(t.a.a);n.a<n.c.c.length;){for(e=u(J(n),189),e.f=null,o=e.a.a.ec().Kc();o.Ob();)r=u(o.Pb(),81),Gf(r.e),(!e.f||r.g.c<e.f.g.c)&&(e.f=r);for(s=e.a.a.ec().Kc();s.Ob();)r=u(s.Pb(),81),r.e.a=r.g.c-e.f.g.c,r.e.b=r.g.d-e.f.g.d}return t}function T2n(t){var e,n,r;return n=u(t.a,19).a,r=u(t.b,19).a,e=b.Math.max(b.Math.abs(n),b.Math.abs(r)),n<e&&r==-e?new la(de(n+1),de(r)):n==e&&r<e?new la(de(n),de(r+1)):n>=-e&&r==e?new la(de(n-1),de(r)):new la(de(n),de(r-1))}function Ice(){return ro(),ct(ot(hxn,1),ae,77,0,[U7t,H7t,hS,rlt,hTt,gG,TG,r7,uTt,tTt,oTt,n7,lTt,Q7t,fTt,B7t,wG,ilt,fG,xG,gTt,yG,R7t,cTt,pTt,kG,dTt,dG,K7t,sTt,iTt,CG,z7t,hG,bG,$7t,e7,nTt,Z7t,aTt,fS,G7t,q7t,rTt,J7t,vG,EG,j7t,mG,eTt,pG,Y7t,W7t,bO,lG,X7t,V7t])}function C2n(t,e,n){t.d=0,t.b=0,e.k==(Gn(),Hc)&&n.k==Hc&&u(Q(e,(se(),_i)),10)==u(Q(n,_i),10)&&(Grt(e).j==(be(),Nn)?bce(t,e,n):bce(t,n,e)),e.k==Hc&&n.k==Zs?Grt(e).j==(be(),Nn)?t.d=1:t.b=1:n.k==Hc&&e.k==Zs&&(Grt(n).j==(be(),Nn)?t.b=1:t.d=1),ffn(t,e,n)}function _2n(t){var e,n,r,s,o,h,d,w,k,C,M;return M=T4t(t),e=t.a,w=e!=null,w&&p8(M,"category",t.a),s=fM(new Tm(t.d)),h=!s,h&&(k=new bg,Wf(M,"knownOptions",k),n=new mzt(k),va(new Tm(t.d),n)),o=fM(t.g),d=!o,d&&(C=new bg,Wf(M,"supportedFeatures",C),r=new yzt(C),va(t.g,r)),M}function S2n(t){var e,n,r,s,o,h,d,w,k;for(r=!1,e=336,n=0,o=new OWt(t.length),d=t,w=0,k=d.length;w<k;++w)h=d[w],r=r|(d2(h),!1),s=($p(h),h.a),ue(o.a,Ar(s)),e&=s.qd(),n=nun(n,s.rd());return u(u(jYt(new Tn(null,Mst(new _n((Gm(),b3t(o.a)),16),new X,e,n)),new btt(t)),670),833)}function A2n(t,e){var n;t.d&&(e.c!=t.e.c||Ron(t.e.b,e.b))&&(ue(t.f,t.d),t.a=t.d.c+t.d.b,t.d=null,t.e=null),WYe(e.b)?t.c=e:t.b=e,(e.b==(K8(),_w)&&!e.a||e.b==Iy&&e.a||e.b==j4&&e.a||e.b==Dy&&!e.a)&&t.c&&t.b&&(n=new ih(t.a,t.c.d,e.c-t.a,t.b.d-t.c.d),t.d=n,t.e=e)}function dD(t){var e;if(Iqt.call(this),this.i=new vZ,this.g=t,this.f=u(t.e&&t.e(),9).length,this.f==0)throw rt(new Pn("There must be at least one phase in the phase enumeration."));this.c=(e=u(Hf(this.g),9),new rh(e,u(uf(e,e.length),9),0)),this.a=new Hs,this.b=new Cr}function A5t(t,e){var n,r;if(e!=t.Cb||t.Db>>16!=7&&e){if(lE(t,e))throw rt(new Pn(K_+Rae(t)));r=null,t.Cb&&(r=(n=t.Db>>16,n>=0?Q3t(t,r):t.Cb.ih(t,-1-n,null,r))),e&&(r=u(e,49).gh(t,1,sN,r)),r=Yvt(t,e,r),r&&r.Fi()}else t.Db&4&&!(t.Db&1)&&mi(t,new Qs(t,1,7,e,e))}function Dce(t,e){var n,r;if(e!=t.Cb||t.Db>>16!=3&&e){if(lE(t,e))throw rt(new Pn(K_+Wre(t)));r=null,t.Cb&&(r=(n=t.Db>>16,n>=0?J3t(t,r):t.Cb.ih(t,-1-n,null,r))),e&&(r=u(e,49).gh(t,0,oN,r)),r=Xvt(t,e,r),r&&r.Fi()}else t.Db&4&&!(t.Db&1)&&mi(t,new Qs(t,1,3,e,e))}function Zst(t,e){bE();var n,r,s,o,h,d,w,k,C;return e.d>t.d&&(d=t,t=e,e=d),e.d<63?vvn(t,e):(h=(t.d&-2)<<4,k=umt(t,h),C=umt(e,h),r=gat(t,Gx(k,h)),s=gat(e,Gx(C,h)),w=Zst(k,C),n=Zst(r,s),o=Zst(gat(k,r),gat(s,C)),o=kat(kat(o,w),n),o=Gx(o,h),w=Gx(w,h<<1),kat(kat(w,o),n))}function L2n(t,e,n){var r,s,o,h,d;for(h=QC(t,n),d=Pt(o0,zg,10,e.length,0,1),r=0,o=h.Kc();o.Ob();)s=u(o.Pb(),11),je(Re(Q(s,(se(),kO))))&&(d[r++]=u(Q(s,Zu),10));if(r<e.length)throw rt(new Fo("Expected "+e.length+" hierarchical ports, but found only "+r+"."));return d}function M2n(t,e){var n,r,s,o,h,d;if(!t.tb){for(o=(!t.rb&&(t.rb=new qm(t,i1,t)),t.rb),d=new kx(o.i),s=new er(o);s.e!=s.i.gc();)r=u(dr(s),138),h=r.ne(),n=u(h==null?su(d.f,null,r):nw(d.g,h,r),138),n&&(h==null?su(d.f,null,n):nw(d.g,h,n));t.tb=d}return u(Fc(t.tb,e),138)}function gD(t,e){var n,r,s,o,h;if((t.i==null&&pd(t),t.i).length,!t.p){for(h=new kx((3*t.g.i/2|0)+1),s=new Mx(t.g);s.e!=s.i.gc();)r=u(nst(s),170),o=r.ne(),n=u(o==null?su(h.f,null,r):nw(h.g,o,r),170),n&&(o==null?su(h.f,null,n):nw(h.g,o,n));t.p=h}return u(Fc(t.p,e),170)}function L5t(t,e,n,r,s){var o,h,d,w,k;for(dhn(r+crt(n,n.$d()),s),eXt(e,jln(n)),o=n.f,o&&L5t(t,e,o,"Caused by: ",!1),d=(n.k==null&&(n.k=Pt(yut,te,78,0,0,1)),n.k),w=0,k=d.length;w<k;++w)h=d[w],L5t(t,e,h,"Suppressed: ",!1);console.groupEnd!=null&&console.groupEnd.call(console)}function pD(t,e,n,r){var s,o,h,d,w;for(w=e.e,d=w.length,h=e.q._f(w,n?0:d-1,n),s=w[n?0:d-1],h=h|vue(t,s,n,r),o=n?1:d-2;n?o<d:o>=0;o+=n?1:-1)h=h|e.c.Sf(w,o,n,r&&!je(Re(Q(e.j,(se(),Mw))))&&!je(Re(Q(e.j,(se(),K4))))),h=h|e.q._f(w,o,n),h=h|vue(t,w[o],n,r);return Ns(t.c,e),h}function lq(t,e,n){var r,s,o,h,d,w,k,C,M,F;for(C=bZt(t.j),M=0,F=C.length;M<F;++M){if(k=C[M],n==(so(),Ju)||n==MS)for(w=gd(k.g),s=w,o=0,h=s.length;o<h;++o)r=s[o],z0n(e,r)&&dw(r,!0);if(n==eu||n==MS)for(d=gd(k.e),s=d,o=0,h=s.length;o<h;++o)r=s[o],$0n(e,r)&&dw(r,!0)}}function I2n(t){var e,n;switch(e=null,n=null,tdn(t).g){case 1:e=(be(),Hn),n=Bn;break;case 2:e=(be(),mr),n=Nn;break;case 3:e=(be(),Bn),n=Hn;break;case 4:e=(be(),Nn),n=mr}KB(t,u(Ov(Hj(u(Ai(t.k,e),15).Oc(),z4)),113)),WB(t,u(Ov(qj(u(Ai(t.k,n),15).Oc(),z4)),113))}function D2n(t){var e,n,r,s,o,h;if(s=u(Fe(t.j,0),11),s.e.c.length+s.g.c.length==0)t.n.a=0;else{for(h=0,r=Bp(L1(ct(ot(B1,1),Ie,20,0,[new Ys(s),new Er(s)])));zr(r);)n=u(Lr(r),11),h+=n.i.n.a+n.n.a+n.a.a;e=u(Q(t,(Te(),Pw)),8),o=e?e.a:0,t.n.a=h/(s.e.c.length+s.g.c.length)-o}}function Oce(t,e){var n,r,s;for(r=new S(e.a);r.a<r.c.c.length;)n=u(J(r),221),Int(u(n.b,65),na(nc(u(e.b,65).c),u(e.b,65).a)),s=Xue(u(e.b,65).b,u(n.b,65).b),s>1&&(t.a=!0),Vtn(u(n.b,65),Li(nc(u(e.b,65).c),ud(na(nc(u(n.b,65).a),u(e.b,65).a),s))),MQt(t,e),Oce(t,n)}function Nce(t){var e,n,r,s,o,h,d;for(o=new S(t.a.a);o.a<o.c.c.length;)r=u(J(o),189),r.e=0,r.d.a.$b();for(s=new S(t.a.a);s.a<s.c.c.length;)for(r=u(J(s),189),n=r.a.a.ec().Kc();n.Ob();)for(e=u(n.Pb(),81),d=e.f.Kc();d.Ob();)h=u(d.Pb(),81),h.d!=r&&(Ns(r.d,h),++h.d.e)}function O2n(t){var e,n,r,s,o,h,d,w;for(w=t.j.c.length,n=0,e=w,s=2*w,d=new S(t.j);d.a<d.c.c.length;)switch(h=u(J(d),11),h.j.g){case 2:case 4:h.p=-1;break;case 1:case 3:r=h.e.c.length,o=h.g.c.length,r>0&&o>0?h.p=e++:r>0?h.p=n++:o>0?h.p=s++:h.p=n++}vn(),Xs(t.j,new _L)}function N2n(t){var e,n;n=null,e=u(Fe(t.g,0),17);do{if(n=e.d.i,Vs(n,(se(),Rh)))return u(Q(n,Rh),11).i;if(n.k!=(Gn(),Ds)&&zr(new ar(lr(Ms(n).a.Kc(),new z))))e=u(Lr(new ar(lr(Ms(n).a.Kc(),new z))),17);else if(n.k!=Ds)return null}while(n&&n.k!=(Gn(),Ds));return n}function P2n(t,e){var n,r,s,o,h,d,w,k,C;for(d=e.j,h=e.g,w=u(Fe(d,d.c.length-1),113),C=(An(0,d.c.length),u(d.c[0],113)),k=vst(t,h,w,C),o=1;o<d.c.length;o++)n=(An(o-1,d.c.length),u(d.c[o-1],113)),s=(An(o,d.c.length),u(d.c[o],113)),r=vst(t,h,n,s),r>k&&(w=n,C=s,k=r);e.a=C,e.c=w}function F2n(t,e){var n,r;if(r=YM(t.b,e.b),!r)throw rt(new Fo("Invalid hitboxes for scanline constraint calculation."));(zne(e.b,u(FQe(t.b,e.b),57))||zne(e.b,u(PQe(t.b,e.b),57)))&&(qd(),e.b+""),t.a[e.b.f]=u(gnt(t.b,e.b),57),n=u(dnt(t.b,e.b),57),n&&(t.a[n.f]=e.b)}function vf(t){if(!t.a.d||!t.a.e)throw rt(new Fo((L0(Yge),Yge.k+" must have a source and target "+(L0(JEt),JEt.k)+" specified.")));if(t.a.d==t.a.e)throw rt(new Fo("Network simplex does not support self-loops: "+t.a+" "+t.a.d+" "+t.a.e));return pj(t.a.d.g,t.a),pj(t.a.e.b,t.a),t.a}function B2n(t,e,n){var r,s,o,h,d,w,k;for(k=new Lp(new w$t(t)),h=ct(ot(Fbe,1),Kfe,11,0,[e,n]),d=0,w=h.length;d<w;++d)for(o=h[d],pz(k.a,o,(Fn(),I2))==null,s=new S1(o.b);Vo(s.a)||Vo(s.b);)r=u(Vo(s.a)?J(s.a):J(s.b),17),r.c==r.d||YM(k,o==r.c?r.d:r.c);return Ar(k),new Pu(k)}function Pce(t,e,n){var r,s,o,h,d,w;if(r=0,e.b!=0&&n.b!=0){o=ei(e,0),h=ei(n,0),d=Xt(ye(ti(o))),w=Xt(ye(ti(h))),s=!0;do{if(d>w-t.b&&d<w+t.b)return-1;d>w-t.a&&d<w+t.a&&++r,d<=w&&o.b!=o.d.c?d=Xt(ye(ti(o))):w<=d&&h.b!=h.d.c?w=Xt(ye(ti(h))):s=!1}while(s)}return r}function R2n(t,e,n,r,s){var o,h,d,w;for(w=(o=u(Hf(Xa),9),new rh(o,u(uf(o,o.length),9),0)),d=new S(t.j);d.a<d.c.c.length;)h=u(J(d),11),e[h.p]&&(Q4n(h,e[h.p],r),pf(w,h.j));s?(_st(t,e,(be(),Hn),2*n,r),_st(t,e,Bn,2*n,r)):(_st(t,e,(be(),Nn),2*n,r),_st(t,e,mr,2*n,r))}function j2n(t){var e,n,r,s,o;if(o=new le,mu(t.b,new Kn(o)),t.b.c=Pt(Xn,Ie,1,0,5,1),o.c.length!=0){for(e=(An(0,o.c.length),u(o.c[0],78)),n=1,r=o.c.length;n<r;++n)s=(An(n,o.c.length),u(o.c[n],78)),s!=e&&Qdn(e,s);if(Et(e,60))throw rt(u(e,60));if(Et(e,289))throw rt(u(e,289))}}function $2n(t,e){var n,r,s,o;for(t=t==null?Tu:(On(t),t),n=new Lm,o=0,r=0;r<e.length&&(s=t.indexOf("%s",o),s!=-1);)Vr(n,t.substr(o,s-o)),hc(n,e[r++]),o=s+2;if(Vr(n,t.substr(o)),r<e.length){for(n.a+=" [",hc(n,e[r++]);r<e.length;)n.a+=Ka,hc(n,e[r++]);n.a+="]"}return n.a}function z2n(t){var e,n,r,s;for(e=0,r=t.length,s=r-4,n=0;n<s;)e=(Rr(n+3,t.length),t.charCodeAt(n+3)+(Rr(n+2,t.length),31*(t.charCodeAt(n+2)+(Rr(n+1,t.length),31*(t.charCodeAt(n+1)+(Rr(n,t.length),31*(t.charCodeAt(n)+31*e))))))),e=e|0,n+=4;for(;n<r;)e=e*31+ba(t,n++);return e=e|0,e}function q2n(t){var e,n;for(n=new ar(lr(Ms(t).a.Kc(),new z));zr(n);)if(e=u(Lr(n),17),e.d.i.k!=(Gn(),Sl))throw rt(new F3(Rot+ZI(t)+"' has its layer constraint set to LAST, but has at least one outgoing edge that  does not go to a LAST_SEPARATE node. That must not happen."))}function H2n(t,e,n,r){var s,o,h,d,w,k,C,M,F;for(w=0,C=new S(t.a);C.a<C.c.c.length;){for(k=u(J(C),10),d=0,o=new ar(lr(jo(k).a.Kc(),new z));zr(o);)s=u(Lr(o),17),M=T1(s.c).b,F=T1(s.d).b,d=b.Math.max(d,b.Math.abs(F-M));w=b.Math.max(w,d)}return h=r*b.Math.min(1,e/n)*w,h}function M5t(t){var e;return e=new B9,t&256&&(e.a+="F"),t&128&&(e.a+="H"),t&512&&(e.a+="X"),t&2&&(e.a+="i"),t&8&&(e.a+="m"),t&4&&(e.a+="s"),t&32&&(e.a+="u"),t&64&&(e.a+="w"),t&16&&(e.a+="x"),t&wf&&(e.a+=","),Wpt(e.a)}function G2n(t,e){var n,r,s,o;for(wr(e,"Resize child graph to fit parent.",1),r=new S(t.b);r.a<r.c.c.length;)n=u(J(r),29),As(t.a,n.a),n.a.c=Pt(Xn,Ie,1,0,5,1);for(o=new S(t.a);o.a<o.c.c.length;)s=u(J(o),10),ko(s,null);t.b.c=Pt(Xn,Ie,1,0,5,1),dvn(t),t.e&&Jwn(t.e,t),or(e)}function V2n(t){var e,n,r,s,o,h,d,w,k;if(r=t.b,o=r.e,h=Dx(u(Q(r,(Te(),os)),98)),n=!!o&&u(Q(o,(se(),Gc)),21).Hc((oo(),bh)),!(h||n))for(k=(d=new b1(t.e).a.vc().Kc(),new v1(d));k.a.Ob();)w=(e=u(k.a.Pb(),42),u(e.dd(),113)),w.a&&(s=w.d,Uo(s,null),w.c=!0,t.a=!0)}function U2n(t){var e,n,r,s,o,h,d,w,k,C,M,F,H;for(F=-1,H=0,k=t,C=0,M=k.length;C<M;++C){for(w=k[C],o=w,h=0,d=o.length;h<d;++h)for(s=o[h],e=new XGt(F==-1?t[0]:t[F],Fse(s)),n=0;n<s.j.c.length;n++)for(r=n+1;r<s.j.c.length;r++)AYt(e,u(Fe(s.j,n),11),u(Fe(s.j,r),11))>0&&++H;++F}return H}function W2n(t,e){var n,r,s,o,h;for(h=u(Q(e,(hw(),a_t)),425),o=ei(e.b,0);o.b!=o.d.c;)if(s=u(ti(o),86),t.b[s.g]==0){switch(h.g){case 0:cse(t,s);break;case 1:Ypn(t,s)}t.b[s.g]=2}for(r=ei(t.a,0);r.b!=r.d.c;)n=u(ti(r),188),ry(n.b.d,n,!0),ry(n.c.b,n,!0);Jt(e,(fc(),JCt),t.a)}function au(t,e){to();var n,r,s,o;return e?e==(Di(),_5e)||(e==g5e||e==U2||e==d5e)&&t!=bLt?new xxt(t,e):(r=u(e,677),n=r.pk(),n||(k8(Eo((Ru(),ma),e)),n=r.pk()),o=(!n.i&&(n.i=new Cr),n.i),s=u(ec(Ao(o.f,t)),1942),!s&&ki(o,t,s=new xxt(t,e)),s):l5e}function K2n(t,e){var n,r,s,o,h,d,w,k,C;for(w=u(Q(t,(se(),_i)),11),k=Ko(ct(ot(Us,1),te,8,0,[w.i.n,w.n,w.a])).a,C=t.i.n.b,n=gd(t.e),s=n,o=0,h=s.length;o<h;++o)r=s[o],sa(r,w),Kb(r.a,new $e(k,C)),e&&(d=u(Q(r,(Te(),_o)),74),d||(d=new Du,Jt(r,_o,d)),ni(d,new $e(k,C)))}function Y2n(t,e){var n,r,s,o,h,d,w,k,C;for(s=u(Q(t,(se(),_i)),11),k=Ko(ct(ot(Us,1),te,8,0,[s.i.n,s.n,s.a])).a,C=t.i.n.b,n=gd(t.g),h=n,d=0,w=h.length;d<w;++d)o=h[d],Da(o,s),qVt(o.a,new $e(k,C)),e&&(r=u(Q(o,(Te(),_o)),74),r||(r=new Du,Jt(o,_o,r)),ni(r,new $e(k,C)))}function X2n(t,e){var n,r,s,o,h,d;for(t.b=new le,t.d=u(Q(e,(se(),O6)),230),t.e=ain(t.d),o=new Qi,s=_1(ct(ot(Obe,1),Ufe,37,0,[e])),h=0;h<s.c.length;)r=(An(h,s.c.length),u(s.c[h],37)),r.p=h++,n=new Kle(r,t.a,t.b),As(s,n.b),ue(t.b,n),n.s&&(d=ei(o,0),XM(d,n));return t.c=new qs,o}function Q2n(t,e){var n,r,s,o,h,d;for(h=u(u(Ai(t.r,e),21),84).Kc();h.Ob();)o=u(h.Pb(),111),n=o.c?Bvt(o.c):0,n>0?o.a?(d=o.b.rf().a,n>d&&(s=(n-d)/2,o.d.b=s,o.d.c=s)):o.d.c=t.s+n:TC(t.u)&&(r=C4t(o.b),r.c<0&&(o.d.b=-r.c),r.c+r.b>o.b.rf().a&&(o.d.c=r.c+r.b-o.b.rf().a))}function Z2n(t,e){var n,r,s,o;for(wr(e,"Semi-Interactive Crossing Minimization Processor",1),n=!1,s=new S(t.b);s.a<s.c.c.length;)r=u(J(s),29),o=qI(G$(Ri(Ri(new Tn(null,new _n(r.a,16)),new RT),new ML),new gF),new pF),n=n|o.a!=null;n&&Jt(t,(se(),ZTt),(Fn(),!0)),or(e)}function J2n(t,e,n){var r,s,o,h,d;if(s=n,!s&&(s=new Yk),wr(s,"Layout",t.a.c.length),je(Re(Q(e,(hw(),r_t)))))for(qd(),r=0;r<t.a.c.length;r++)d=(r<10?"0":"")+r++,""+d+Ap(sl(u(Fe(t.a,r),51)));for(h=new S(t.a);h.a<h.c.c.length;)o=u(J(h),51),o.pf(e,Rc(s,1));or(s)}function tvn(t){var e,n;if(e=u(t.a,19).a,n=u(t.b,19).a,e>=0){if(e==n)return new la(de(-e-1),de(-e-1));if(e==-n)return new la(de(-e),de(n+1))}return b.Math.abs(e)>b.Math.abs(n)?e<0?new la(de(-e),de(n)):new la(de(-e),de(n+1)):new la(de(e+1),de(n))}function evn(t){var e,n;n=u(Q(t,(Te(),cu)),163),e=u(Q(t,(se(),O2)),303),n==(hh(),fb)?(Jt(t,cu,CO),Jt(t,O2,(B0(),U4))):n==Fy?(Jt(t,cu,CO),Jt(t,O2,(B0(),A6))):e==(B0(),U4)?(Jt(t,cu,fb),Jt(t,O2,yO)):e==A6&&(Jt(t,cu,Fy),Jt(t,O2,yO))}function hq(){hq=Z,NO=new AQ,Pme=bi(new Hs,(Wa(),ou),(ro(),fG)),Rme=Ku(bi(new Hs,ou,yG),Io,mG),jme=aw(aw(OR(Ku(bi(new Hs,Ad,TG),Io,EG),qc),kG),CG),Fme=Ku(bi(bi(bi(new Hs,lb,gG),qc,bG),qc,e7),Io,pG),Bme=Ku(bi(bi(new Hs,qc,e7),qc,hG),Io,lG)}function b_(){b_=Z,qme=bi(Ku(new Hs,(Wa(),Io),(ro(),Y7t)),ou,fG),Ume=aw(aw(OR(Ku(bi(new Hs,Ad,TG),Io,EG),qc),kG),CG),Hme=Ku(bi(bi(bi(new Hs,lb,gG),qc,bG),qc,e7),Io,pG),Vme=bi(bi(new Hs,ou,yG),Io,mG),Gme=Ku(bi(bi(new Hs,qc,e7),qc,hG),Io,lG)}function nvn(t,e,n,r,s){var o,h;(!Va(e)&&e.c.i.c==e.d.i.c||!Yee(Ko(ct(ot(Us,1),te,8,0,[s.i.n,s.n,s.a])),n))&&!Va(e)&&(e.c==s?h8(e.a,0,new yo(n)):ni(e.a,new yo(n)),r&&!S0(t.a,n)&&(h=u(Q(e,(Te(),_o)),74),h||(h=new Du,Jt(e,_o,h)),o=new yo(n),hs(h,o,h.c.b,h.c),Ns(t.a,o)))}function rvn(t){var e,n;for(n=new ar(lr(jo(t).a.Kc(),new z));zr(n);)if(e=u(Lr(n),17),e.c.i.k!=(Gn(),Sl))throw rt(new F3(Rot+ZI(t)+"' has its layer constraint set to FIRST, but has at least one incoming edge that  does not come from a FIRST_SEPARATE node. That must not happen."))}function ivn(t,e,n){var r,s,o,h,d,w,k;if(s=Jre(t.Db&254),s==0)t.Eb=n;else{if(s==1)d=Pt(Xn,Ie,1,2,5,1),o=bst(t,e),o==0?(d[0]=n,d[1]=t.Eb):(d[0]=t.Eb,d[1]=n);else for(d=Pt(Xn,Ie,1,s+1,5,1),h=s2(t.Eb),r=2,w=0,k=0;r<=128;r<<=1)r==e?d[k++]=n:t.Db&r&&(d[k++]=h[w++]);t.Eb=d}t.Db|=e}function Fce(t,e,n){var r,s,o,h;for(this.b=new le,s=0,r=0,h=new S(t);h.a<h.c.c.length;)o=u(J(h),167),n&&ryn(o),ue(this.b,o),s+=o.o,r+=o.p;this.b.c.length>0&&(o=u(Fe(this.b,0),167),s+=o.o,r+=o.p),s*=2,r*=2,e>1?s=ps(b.Math.ceil(s*e)):r=ps(b.Math.ceil(r/e)),this.a=new w3t(s,r)}function Bce(t,e,n,r,s,o){var h,d,w,k,C,M,F,H,V,Y,tt,gt;for(C=r,e.j&&e.o?(H=u(Jn(t.f,e.A),57),Y=H.d.c+H.d.b,--C):Y=e.a.c+e.a.b,M=s,n.q&&n.o?(H=u(Jn(t.f,n.C),57),k=H.d.c,++M):k=n.a.c,tt=k-Y,w=b.Math.max(2,M-C),d=tt/w,V=Y+d,F=C;F<M;++F)h=u(o.Xb(F),128),gt=h.a.b,h.a.c=V-gt/2,V+=d}function I5t(t,e,n,r,s,o){var h,d,w,k,C,M;for(k=n.c.length,o&&(t.c=Pt(Tr,Xr,25,e.length,15,1)),h=s?0:e.length-1;s?h<e.length:h>=0;h+=s?1:-1){for(d=e[h],w=r==(be(),Hn)?s?Yo(d,r):a2(Yo(d,r)):s?a2(Yo(d,r)):Yo(d,r),o&&(t.c[d.p]=w.gc()),M=w.Kc();M.Ob();)C=u(M.Pb(),11),t.d[C.p]=k++;As(n,w)}}function Rce(t,e,n){var r,s,o,h,d,w,k,C;for(o=Xt(ye(t.b.Kc().Pb())),k=Xt(ye(dcn(e.b))),r=ud(nc(t.a),k-n),s=ud(nc(e.a),n-o),C=Li(r,s),ud(C,1/(k-o)),this.a=C,this.b=new le,d=!0,h=t.b.Kc(),h.Pb();h.Ob();)w=Xt(ye(h.Pb())),d&&w-n>wct&&(this.b.Fc(n),d=!1),this.b.Fc(w);d&&this.b.Fc(n)}function svn(t){var e,n,r,s;if(bwn(t,t.n),t.d.c.length>0){for(P9(t.c);l5t(t,u(J(new S(t.e.a)),121))<t.e.a.c.length;){for(e=Xfn(t),s=e.e.e-e.d.e-e.a,e.e.j&&(s=-s),r=new S(t.e.a);r.a<r.c.c.length;)n=u(J(r),121),n.j&&(n.e+=s);P9(t.c)}P9(t.c),J4t(t,u(J(new S(t.e.a)),121)),Vle(t)}}function avn(t,e){var n,r,s,o,h;for(s=u(Ai(t.a,(g4(),LG)),15).Kc();s.Ob();)switch(r=u(s.Pb(),101),n=u(Fe(r.j,0),113).d.j,o=new Pu(r.j),Xs(o,new DX),e.g){case 1:Cst(t,o,n,(Jv(),hb),1);break;case 0:h=i2n(o),Cst(t,new Kd(o,0,h),n,(Jv(),hb),0),Cst(t,new Kd(o,h,o.c.length),n,hb,1)}}function ovn(t,e){Qx();var n,r;if(n=Drt(z8(),e.tg()),n){if(r=n.j,Et(t,239))return grn(u(t,33))?Nu(r,(Xf(),Js))||Nu(r,qn):Nu(r,(Xf(),Js));if(Et(t,352))return Nu(r,(Xf(),Id));if(Et(t,186))return Nu(r,(Xf(),$2));if(Et(t,354))return Nu(r,(Xf(),Xg))}return!0}function cvn(t,e,n){var r,s,o,h,d,w;if(s=n,o=s.ak(),V0(t.e,o)){if(o.hi()){for(r=u(t.g,119),h=0;h<t.i;++h)if(d=r[h],yi(d,s)&&h!=e)throw rt(new Pn(XD))}}else for(w=au(t.e.Tg(),o),r=u(t.g,119),h=0;h<t.i;++h)if(d=r[h],w.rl(d.ak())&&h!=e)throw rt(new Pn(eO));return u(u4(t,e,n),72)}function jce(t,e){if(e instanceof Object)try{if(e.__java$exception=t,navigator.userAgent.toLowerCase().indexOf("msie")!=-1&&$doc.documentMode<9)return;var n=t;Object.defineProperties(e,{cause:{get:function(){var r=n.Zd();return r&&r.Xd()}},suppressed:{get:function(){return n.Yd()}}})}catch{}}function $ce(t,e){var n,r,s,o,h;if(r=e>>5,e&=31,r>=t.d)return t.e<0?(Jp(),_ut):(Jp(),QE);if(o=t.d-r,s=Pt(Tr,Xr,25,o+1,15,1),Z0n(s,o,t.a,r,e),t.e<0){for(n=0;n<r&&t.a[n]==0;n++);if(n<r||e>0&&t.a[n]<<32-e){for(n=0;n<o&&s[n]==-1;n++)s[n]=0;n==o&&++o,++s[n]}}return h=new K3(t.e,o,s),OC(h),h}function zce(t){var e,n,r,s;return s=k1(t),n=new wi(s),r=new Ks(s),e=new le,As(e,(!t.d&&(t.d=new Cn(Ws,t,8,5)),t.d)),As(e,(!t.e&&(t.e=new Cn(Ws,t,7,4)),t.e)),u(Pl(pu(Ri(new Tn(null,new _n(e,16)),n),r),Ym(new cn,new li,new di,new Ee,ct(ot(ll,1),ae,132,0,[(I1(),Ly),Gl]))),21)}function qce(t,e,n,r){var s,o,h,d,w;if(d=(to(),u(e,66).Oj()),V0(t.e,e)){if(e.hi()&&mq(t,e,r,Et(e,99)&&(u(e,18).Bb&Ya)!=0))throw rt(new Pn(XD))}else for(w=au(t.e.Tg(),e),s=u(t.g,119),h=0;h<t.i;++h)if(o=s[h],w.rl(o.ak()))throw rt(new Pn(eO));JC(t,$4t(t,e,n),d?u(r,72):Yd(e,r))}function V0(t,e){to();var n,r,s;return e.$j()?!0:e.Zj()==-2?e==(a6(),W6)||e==U6||e==Mft||e==Ift?!0:(s=t.Tg(),Vi(s,e)>=0?!1:(n=E4((Ru(),ma),s,e),n?(r=n.Zj(),(r>1||r==-1)&&$v(Eo(ma,n))!=3):!0)):!1}function uvn(t,e,n,r){var s,o,h,d,w;return d=Mo(u(St((!e.b&&(e.b=new Cn(br,e,4,7)),e.b),0),82)),w=Mo(u(St((!e.c&&(e.c=new Cn(br,e,5,8)),e.c),0),82)),ts(d)==ts(w)||Zm(w,d)?null:(h=rI(e),h==n?r:(o=u(Jn(t.a,h),10),o&&(s=o.e,s)?s:null))}function lvn(t,e){var n;switch(n=u(Q(t,(Te(),ZG)),276),wr(e,"Label side selection ("+n+")",1),n.g){case 0:nce(t,(jl(),u0));break;case 1:nce(t,(jl(),wb));break;case 2:vle(t,(jl(),u0));break;case 3:vle(t,(jl(),wb));break;case 4:Zce(t,(jl(),u0));break;case 5:Zce(t,(jl(),wb))}or(e)}function D5t(t,e,n){var r,s,o,h,d,w;if(r=YKe(n,t.length),h=t[r],h[0].k==(Gn(),xs))for(o=nHt(n,h.length),w=e.j,s=0;s<w.c.length;s++)d=(An(s,w.c.length),u(w.c[s],11)),(n?d.j==(be(),Hn):d.j==(be(),Bn))&&je(Re(Q(d,(se(),kO))))&&(ah(w,s,u(Q(h[o],(se(),_i)),11)),o+=n?1:-1)}function hvn(t,e){var n,r,s,o,h;h=new le,n=e;do o=u(Jn(t.b,n),128),o.B=n.c,o.D=n.d,h.c[h.c.length]=o,n=u(Jn(t.k,n),17);while(n);return r=(An(0,h.c.length),u(h.c[0],128)),r.j=!0,r.A=u(r.d.a.ec().Kc().Pb(),17).c.i,s=u(Fe(h,h.c.length-1),128),s.q=!0,s.C=u(s.d.a.ec().Kc().Pb(),17).d.i,h}function Hce(t){if(t.g==null)switch(t.p){case 0:t.g=prn(t)?(Fn(),YE):(Fn(),I2);break;case 1:t.g=EI(Yin(t));break;case 2:t.g=DI(nin(t));break;case 3:t.g=jen(t);break;case 4:t.g=new D3(Ren(t));break;case 6:t.g=g2($en(t));break;case 5:t.g=de(irn(t));break;case 7:t.g=eE(Zin(t))}return t.g}function O5t(t){if(t.n==null)switch(t.p){case 0:t.n=brn(t)?(Fn(),YE):(Fn(),I2);break;case 1:t.n=EI(Xin(t));break;case 2:t.n=DI(rin(t));break;case 3:t.n=qen(t);break;case 4:t.n=new D3(Hen(t));break;case 6:t.n=g2(zen(t));break;case 5:t.n=de(srn(t));break;case 7:t.n=eE(Qin(t))}return t.n}function Gce(t){var e,n,r,s,o,h,d;for(o=new S(t.a.a);o.a<o.c.c.length;)r=u(J(o),307),r.g=0,r.i=0,r.e.a.$b();for(s=new S(t.a.a);s.a<s.c.c.length;)for(r=u(J(s),307),n=r.a.a.ec().Kc();n.Ob();)for(e=u(n.Pb(),57),d=e.c.Kc();d.Ob();)h=u(d.Pb(),57),h.a!=r&&(Ns(r.e,h),++h.a.g,++h.a.i)}function fvn(t,e){var n,r,s,o,h,d;if(d=YM(t.a,e.b),!d)throw rt(new Fo("Invalid hitboxes for scanline overlap calculation."));for(h=!1,o=(r=new vC(new gC(new y(t.a.a).a).b),new g(r));mM(o.a.a);)if(s=(n=wj(o.a),u(n.cd(),65)),Mcn(e.b,s))tYe(t.b.a,e.b,s),h=!0;else if(h)break}function dvn(t){var e,n,r,s,o;s=u(Q(t,(Te(),F2)),21),o=u(Q(t,iV),21),n=new $e(t.f.a+t.d.b+t.d.c,t.f.b+t.d.d+t.d.a),e=new yo(n),s.Hc((_l(),Xy))&&(r=u(Q(t,p7),8),o.Hc((cl(),M7))&&(r.a<=0&&(r.a=20),r.b<=0&&(r.b=20)),e.a=b.Math.max(n.a,r.a),e.b=b.Math.max(n.b,r.b)),ayn(t,n,e)}function Vce(t,e){var n,r,s,o,h,d,w,k,C,M,F;s=e?new KX:new YX,o=!1;do for(o=!1,k=e?a2(t.b):t.b,w=k.Kc();w.Ob();)for(d=u(w.Pb(),29),F=Gv(d.a),e||new mv(F),M=new S(F);M.a<M.c.c.length;)C=u(J(M),10),s.Mb(C)&&(r=C,n=u(Q(C,(se(),Lw)),305),h=e?n.b:n.k,o=fue(r,h,e,!1));while(o)}function gvn(t,e,n){var r,s,o,h,d;for(wr(n,"Longest path layering",1),t.a=e,d=t.a.a,t.b=Pt(Tr,Xr,25,d.c.length,15,1),r=0,h=new S(d);h.a<h.c.c.length;)s=u(J(h),10),s.p=r,t.b[r]=-1,++r;for(o=new S(d);o.a<o.c.c.length;)s=u(J(o),10),dce(t,s);d.c=Pt(Xn,Ie,1,0,5,1),t.a=null,t.b=null,or(n)}function pvn(t,e){var n,r,s;e.a?(YM(t.b,e.b),t.a[e.b.i]=u(gnt(t.b,e.b),81),n=u(dnt(t.b,e.b),81),n&&(t.a[n.i]=e.b)):(r=u(gnt(t.b,e.b),81),r&&r==t.a[e.b.i]&&r.d&&r.d!=e.b.d&&r.f.Fc(e.b),s=u(dnt(t.b,e.b),81),s&&t.a[s.i]==e.b&&s.d&&s.d!=e.b.d&&e.b.f.Fc(s),ent(t.b,e.b))}function Uce(t,e){var n,r,s,o,h,d;return o=t.d,d=Xt(ye(Q(t,(Te(),Ug)))),d<0&&(d=0,Jt(t,Ug,d)),e.o.b=d,h=b.Math.floor(d/2),r=new Mc,Fs(r,(be(),Bn)),Uo(r,e),r.n.b=h,s=new Mc,Fs(s,Hn),Uo(s,e),s.n.b=h,sa(t,r),n=new zv,Lo(n,t),Jt(n,_o,null),Da(n,s),sa(n,o),xmn(e,t,n),Tgn(t,n),n}function bvn(t){var e,n;return n=u(Q(t,(se(),Gc)),21),e=new Hs,n.Hc((oo(),vS))&&(Rl(e,Ime),Rl(e,QCt)),(n.Hc(f7)||je(Re(Q(t,(Te(),Ylt)))))&&(Rl(e,QCt),n.Hc(V4)&&Rl(e,Ome)),n.Hc(bh)&&Rl(e,Mme),n.Hc(wS)&&Rl(e,Nme),n.Hc(jG)&&Rl(e,Dme),n.Hc(l7)&&Rl(e,Ame),n.Hc(h7)&&Rl(e,Lme),e}function vvn(t,e){var n,r,s,o,h,d,w,k,C,M,F;return r=t.d,o=e.d,d=r+o,w=t.e!=e.e?-1:1,d==2?(C=Ca(Ps(t.a[0],co),Ps(e.a[0],co)),F=Sr(C),M=Sr(zm(C,32)),M==0?new Lg(w,F):new K3(w,2,ct(ot(Tr,1),Xr,25,15,[F,M]))):(n=t.a,s=e.a,h=Pt(Tr,Xr,25,d,15,1),Oun(n,r,s,o,h),k=new K3(w,d,h),OC(k),k)}function Wce(t,e,n,r){var s,o;if(e){if(s=t.a.ue(n.d,e.d),s==0)return r.d=J2t(e,n.e),r.b=!0,e;o=s<0?0:1,e.a[o]=Wce(t,e.a[o],n,r),Am(e.a[o])&&(Am(e.a[1-o])?(e.b=!0,e.a[0].b=!1,e.a[1].b=!1):Am(e.a[o].a[o])?e=nz(e,1-o):Am(e.a[o].a[1-o])&&(e=uZt(e,1-o)))}else return n;return e}function Kce(t,e,n){var r,s,o,h;s=t.i,r=t.n,hmt(t,(Kf(),sc),s.c+r.b,n),hmt(t,ac,s.c+s.b-r.c-n[2],n),h=s.b-r.b-r.c,n[0]>0&&(n[0]+=t.d,h-=n[0]),n[2]>0&&(n[2]+=t.d,h-=n[2]),o=b.Math.max(0,h),n[1]=b.Math.max(n[1],h),hmt(t,tu,s.c+r.b+n[0]-(n[1]-h)/2,n),e==tu&&(t.c.b=o,t.c.c=s.c+r.b+(o-h)/2)}function Yce(){this.c=Pt(ia,vo,25,(be(),ct(ot(Xa,1),xc,61,0,[Zo,Nn,Hn,mr,Bn])).length,15,1),this.b=Pt(ia,vo,25,ct(ot(Xa,1),xc,61,0,[Zo,Nn,Hn,mr,Bn]).length,15,1),this.a=Pt(ia,vo,25,ct(ot(Xa,1),xc,61,0,[Zo,Nn,Hn,mr,Bn]).length,15,1),xbt(this.c,ss),xbt(this.b,Ts),xbt(this.a,Ts)}function jc(t,e,n){var r,s,o,h;if(e<=n?(s=e,o=n):(s=n,o=e),r=0,t.b==null)t.b=Pt(Tr,Xr,25,2,15,1),t.b[0]=s,t.b[1]=o,t.c=!0;else{if(r=t.b.length,t.b[r-1]+1==s){t.b[r-1]=o;return}h=Pt(Tr,Xr,25,r+2,15,1),Ic(t.b,0,h,0,r),t.b=h,t.b[r-1]>=s&&(t.c=!1,t.a=!1),t.b[r++]=s,t.b[r]=o,t.c||b4(t)}}function wvn(t,e,n){var r,s,o,h,d,w,k;for(k=e.d,t.a=new Yc(k.c.length),t.c=new Cr,d=new S(k);d.a<d.c.c.length;)h=u(J(d),101),o=new LI(null),ue(t.a,o),ki(t.c,h,o);for(t.b=new Cr,Sgn(t,e),r=0;r<k.c.length-1;r++)for(w=u(Fe(e.d,r),101),s=r+1;s<k.c.length;s++)o2n(t,w,u(Fe(e.d,s),101),n)}function Xce(t,e,n){var r,s,o,h,d,w;if(!S8(e)){for(w=Rc(n,(Et(e,14)?u(e,14).gc():N0(e.Kc()))/t.a|0),wr(w,M1e,1),d=new WQ,h=0,o=e.Kc();o.Ob();)r=u(o.Pb(),86),d=L1(ct(ot(B1,1),Ie,20,0,[d,new Cp(r)])),h<r.f.b&&(h=r.f.b);for(s=e.Kc();s.Ob();)r=u(s.Pb(),86),Jt(r,(fc(),xV),h);or(w),Xce(t,d,n)}}function mvn(t,e){var n,r,s,o,h,d,w;for(n=Ts,d=(Gn(),Ds),s=new S(e.a);s.a<s.c.c.length;)r=u(J(s),10),o=r.k,o!=Ds&&(h=ye(Q(r,(se(),t9t))),h==null?(n=b.Math.max(n,0),r.n.b=n+M2t(t.a,o,d)):r.n.b=(On(h),h)),w=M2t(t.a,o,d),r.n.b<n+w+r.d.d&&(r.n.b=n+w+r.d.d),n=r.n.b+r.o.b+r.d.a,d=o}function yvn(t,e,n){var r,s,o,h,d,w,k,C,M;for(o=m4(e,!1,!1),k=sD(o),M=Xt(ye(qe(e,(i_(),$ut)))),s=Rhe(k,M+t.a),C=new Vst(s),Lo(C,e),ki(t.b,e,C),n.c[n.c.length]=C,w=(!e.n&&(e.n=new he(qo,e,1,7)),e.n),d=new er(w);d.e!=d.i.gc();)h=u(dr(d),137),r=bD(t,h,!0,0,0),n.c[n.c.length]=r;return C}function Qce(t,e,n,r,s){var o,h,d,w,k,C;if(t.d&&t.d.lg(s),o=u(s.Xb(0),33),ise(t,n,o,!1)||(h=u(s.Xb(s.gc()-1),33),ise(t,r,h,!0))||I4t(t,s))return!0;for(C=s.Kc();C.Ob();)for(k=u(C.Pb(),33),w=e.Kc();w.Ob();)if(d=u(w.Pb(),33),dq(t,k,d))return!0;return!1}function xvn(t,e,n){var r,s,o,h,d,w,k,C,M,F;F=e.c.length,M=(k=t.Yg(n),u(k>=0?t._g(k,!1,!0):lw(t,n,!1),58));t:for(o=M.Kc();o.Ob();){for(s=u(o.Pb(),56),C=0;C<F;++C)if(h=(An(C,e.c.length),u(e.c[C],72)),w=h.dd(),d=h.ak(),r=s.bh(d,!1),w==null?r!=null:!yi(w,r))continue t;return s}return null}function kvn(t,e,n,r){var s,o,h,d;for(s=u(Rg(e,(be(),Bn)).Kc().Pb(),11),o=u(Rg(e,Hn).Kc().Pb(),11),d=new S(t.j);d.a<d.c.c.length;){for(h=u(J(d),11);h.e.c.length!=0;)sa(u(Fe(h.e,0),17),s);for(;h.g.c.length!=0;)Da(u(Fe(h.g,0),17),o)}n||Jt(e,(se(),n1),null),r||Jt(e,(se(),Rh),null)}function m4(t,e,n){var r,s;if((!t.a&&(t.a=new he(Zi,t,6,6)),t.a).i==0)return wyt(t);if(r=u(St((!t.a&&(t.a=new he(Zi,t,6,6)),t.a),0),202),e&&(xr((!r.a&&(r.a=new Ss(Hh,r,5)),r.a)),B8(r,0),j8(r,0),F8(r,0),R8(r,0)),n)for(s=(!t.a&&(t.a=new he(Zi,t,6,6)),t.a);s.i>1;)dy(s,s.i-1);return r}function Evn(t,e){var n,r,s,o,h,d,w;for(wr(e,"Comment post-processing",1),o=new S(t.b);o.a<o.c.c.length;){for(s=u(J(o),29),r=new le,d=new S(s.a);d.a<d.c.c.length;)h=u(J(d),10),w=u(Q(h,(se(),N6)),15),n=u(Q(h,L6),15),(w||n)&&(T4n(h,w,n),w&&As(r,w),n&&As(r,n));As(s.a,r)}or(e)}function Zce(t,e){var n,r,s,o,h,d,w;for(n=new P3,o=new S(t.b);o.a<o.c.c.length;){for(s=u(J(o),29),w=!0,r=0,d=new S(s.a);d.a<d.c.c.length;)switch(h=u(J(d),10),h.k.g){case 4:++r;case 1:Qwt(n,h);break;case 0:Egn(h,e);default:n.b==n.c||zue(n,r,w,!1,e),w=!1,r=0}n.b==n.c||zue(n,r,w,!0,e)}}function Tvn(t,e){var n,r,s,o,h,d,w;for(s=new le,n=0;n<=t.i;n++)r=new Ch(e),r.p=t.i-n,s.c[s.c.length]=r;for(d=new S(t.o);d.a<d.c.c.length;)h=u(J(d),10),ko(h,u(Fe(s,t.i-t.f[h.p]),29));for(o=new S(s);o.a<o.c.c.length;)w=u(J(o),29),w.a.c.length==0&&_C(o);e.b.c=Pt(Xn,Ie,1,0,5,1),As(e.b,s)}function N5t(t,e){var n,r,s,o,h,d;for(n=0,d=new S(e);d.a<d.c.c.length;){for(h=u(J(d),11),Byt(t.b,t.d[h.p]),s=new S1(h.b);Vo(s.a)||Vo(s.b);)r=u(Vo(s.a)?J(s.a):J(s.b),17),o=ubt(t,h==r.c?r.d:r.c),o>t.d[h.p]&&(n+=smt(t.b,o),qp(t.a,de(o)));for(;!N9(t.a);)Fmt(t.b,u(Fx(t.a),19).a)}return n}function Jce(t,e,n){var r,s,o,h;for(o=(!e.a&&(e.a=new he(ns,e,10,11)),e.a).i,s=new er((!e.a&&(e.a=new he(ns,e,10,11)),e.a));s.e!=s.i.gc();)r=u(dr(s),33),(!r.a&&(r.a=new he(ns,r,10,11)),r.a).i==0||(o+=Jce(t,r,!1));if(n)for(h=ts(e);h;)o+=(!h.a&&(h.a=new he(ns,h,10,11)),h.a).i,h=ts(h);return o}function dy(t,e){var n,r,s,o;return t.ej()?(r=null,s=t.fj(),t.ij()&&(r=t.kj(t.pi(e),null)),n=t.Zi(4,o=r6(t,e),null,e,s),t.bj()&&o!=null&&(r=t.dj(o,r)),r?(r.Ei(n),r.Fi()):t.$i(n),o):(o=r6(t,e),t.bj()&&o!=null&&(r=t.dj(o,null),r&&r.Fi()),o)}function Cvn(t){var e,n,r,s,o,h,d,w,k,C;for(k=t.a,e=new qs,w=0,r=new S(t.d);r.a<r.c.c.length;){for(n=u(J(r),222),C=0,e4(n.b,new Ll),h=ei(n.b,0);h.b!=h.d.c;)o=u(ti(h),222),e.a._b(o)&&(s=n.c,d=o.c,C<d.d+d.a+k&&C+s.a+k>d.d&&(C=d.d+d.a+k));n.c.d=C,e.a.zc(n,e),w=b.Math.max(w,n.c.d+n.c.a)}return w}function oo(){oo=Z,RG=new Dm("COMMENTS",0),bh=new Dm("EXTERNAL_PORTS",1),vS=new Dm("HYPEREDGES",2),jG=new Dm("HYPERNODES",3),f7=new Dm("NON_FREE_PORTS",4),V4=new Dm("NORTH_SOUTH_PORTS",5),wS=new Dm(d1e,6),l7=new Dm("CENTER_LABELS",7),h7=new Dm("END_LABELS",8),$G=new Dm("PARTITIONS",9)}function gy(t){var e,n,r,s,o;for(s=new le,e=new yC((!t.a&&(t.a=new he(ns,t,10,11)),t.a)),r=new ar(lr(G0(t).a.Kc(),new z));zr(r);)n=u(Lr(r),79),Et(St((!n.b&&(n.b=new Cn(br,n,4,7)),n.b),0),186)||(o=Mo(u(St((!n.c&&(n.c=new Cn(br,n,5,8)),n.c),0),82)),e.a._b(o)||(s.c[s.c.length]=o));return s}function _vn(t){var e,n,r,s,o,h;for(o=new qs,e=new yC((!t.a&&(t.a=new he(ns,t,10,11)),t.a)),s=new ar(lr(G0(t).a.Kc(),new z));zr(s);)r=u(Lr(s),79),Et(St((!r.b&&(r.b=new Cn(br,r,4,7)),r.b),0),186)||(h=Mo(u(St((!r.c&&(r.c=new Cn(br,r,5,8)),r.c),0),82)),e.a._b(h)||(n=o.a.zc(h,o),n==null));return o}function Svn(t,e,n,r,s){return r<0?(r=p4(t,s,ct(ot(Ae,1),te,2,6,[$at,zat,qat,Hat,l6,Gat,Vat,Uat,Wat,Kat,Yat,Xat]),e),r<0&&(r=p4(t,s,ct(ot(Ae,1),te,2,6,["Jan","Feb","Mar","Apr",l6,"Jun","Jul","Aug","Sep","Oct","Nov","Dec"]),e)),r<0?!1:(n.k=r,!0)):r>0?(n.k=r-1,!0):!1}function Avn(t,e,n,r,s){return r<0?(r=p4(t,s,ct(ot(Ae,1),te,2,6,[$at,zat,qat,Hat,l6,Gat,Vat,Uat,Wat,Kat,Yat,Xat]),e),r<0&&(r=p4(t,s,ct(ot(Ae,1),te,2,6,["Jan","Feb","Mar","Apr",l6,"Jun","Jul","Aug","Sep","Oct","Nov","Dec"]),e)),r<0?!1:(n.k=r,!0)):r>0?(n.k=r-1,!0):!1}function Lvn(t,e,n,r,s,o){var h,d,w,k;if(d=32,r<0){if(e[0]>=t.length||(d=ba(t,e[0]),d!=43&&d!=45)||(++e[0],r=rq(t,e),r<0))return!1;d==45&&(r=-r)}return d==32&&e[0]-n==2&&s.b==2&&(w=new _R,k=w.q.getFullYear()-nb+nb-80,h=k%100,o.a=r==h,r+=(k/100|0)*100+(r<h?100:0)),o.p=r,!0}function tue(t,e){var n,r,s,o,h;ts(t)&&(h=u(Q(e,(Te(),F2)),174),Gt(qe(t,os))===Gt((oa(),yb))&&bo(t,os,H1),r=(Im(),new Sm(ts(t))),o=new rnt(ts(t)?new Sm(ts(t)):null,t),s=lhe(r,o,!1,!0),pf(h,(_l(),Xy)),n=u(Q(e,p7),8),n.a=b.Math.max(s.a,n.a),n.b=b.Math.max(s.b,n.b))}function Mvn(t,e,n){var r,s,o,h,d,w;for(h=u(Q(t,(se(),Nlt)),15).Kc();h.Ob();){switch(o=u(h.Pb(),10),u(Q(o,(Te(),cu)),163).g){case 2:ko(o,e);break;case 4:ko(o,n)}for(s=new ar(lr(z0(o).a.Kc(),new z));zr(s);)r=u(Lr(s),17),!(r.c&&r.d)&&(d=!r.d,w=u(Q(r,n9t),11),d?sa(r,w):Da(r,w))}}function fq(){fq=Z,llt=new Rx(Rq,0,(be(),Nn),Nn),dlt=new Rx(kot,1,mr,mr),ult=new Rx(xot,2,Hn,Hn),blt=new Rx(Eot,3,Bn,Bn),flt=new Rx("NORTH_WEST_CORNER",4,Bn,Nn),hlt=new Rx("NORTH_EAST_CORNER",5,Nn,Hn),plt=new Rx("SOUTH_WEST_CORNER",6,mr,Bn),glt=new Rx("SOUTH_EAST_CORNER",7,Hn,mr)}function y4(){y4=Z,ySt=ct(ot(Lb,1),aot,25,14,[1,1,2,6,24,120,720,5040,40320,362880,3628800,39916800,479001600,6227020800,87178291200,1307674368e3,{l:3506176,m:794077,h:1},{l:884736,m:916411,h:20},{l:3342336,m:3912489,h:363},{l:589824,m:3034138,h:6914},{l:3407872,m:1962506,h:138294}]),b.Math.pow(2,-65)}function eue(t,e){var n,r,s,o,h;if(t.c.length==0)return new la(de(0),de(0));for(n=(An(0,t.c.length),u(t.c[0],11)).j,h=0,o=e.g,r=e.g+1;h<t.c.length-1&&n.g<o;)++h,n=(An(h,t.c.length),u(t.c[h],11)).j;for(s=h;s<t.c.length-1&&n.g<r;)++s,n=(An(h,t.c.length),u(t.c[h],11)).j;return new la(de(h),de(s))}function Ivn(t,e,n){var r,s,o,h,d,w,k,C,M,F;for(o=e.c.length,h=(An(n,e.c.length),u(e.c[n],286)),d=h.a.o.a,M=h.c,F=0,k=h.c;k<=h.f;k++){if(d<=t.a[k])return k;for(C=t.a[k],w=null,s=n+1;s<o;s++)r=(An(s,e.c.length),u(e.c[s],286)),r.c<=k&&r.f>=k&&(w=r);w&&(C=b.Math.max(C,w.a.o.a)),C>F&&(M=k,F=C)}return M}function Dvn(t,e,n){var r,s,o;if(t.e=n,t.d=0,t.b=0,t.f=1,t.i=e,(t.e&16)==16&&(t.i=wwn(t.i)),t.j=t.i.length,fi(t),o=sw(t),t.d!=t.j)throw rt(new Fr(qr((Nr(),Pde))));if(t.g){for(r=0;r<t.g.a.c.length;r++)if(s=u(Rv(t.g,r),584),t.f<=s.a)throw rt(new Fr(qr((Nr(),Fde))));t.g.a.c=Pt(Xn,Ie,1,0,5,1)}return o}function Ovn(t,e){var n,r,s;if(e==null){for(r=(!t.a&&(t.a=new he(eg,t,9,5)),new er(t.a));r.e!=r.i.gc();)if(n=u(dr(r),678),s=n.c,(s??n.zb)==null)return n}else for(r=(!t.a&&(t.a=new he(eg,t,9,5)),new er(t.a));r.e!=r.i.gc();)if(n=u(dr(r),678),hn(e,(s=n.c,s??n.zb)))return n;return null}function Jst(t,e){var n;switch(n=null,e.g){case 1:t.e.Xe((ci(),oft))&&(n=u(t.e.We(oft),249));break;case 3:t.e.Xe((ci(),cft))&&(n=u(t.e.We(cft),249));break;case 2:t.e.Xe((ci(),aft))&&(n=u(t.e.We(aft),249));break;case 4:t.e.Xe((ci(),uft))&&(n=u(t.e.We(uft),249))}return!n&&(n=u(t.e.We((ci(),QSt)),249)),n}function nue(t,e,n){var r,s,o,h,d,w,k,C,M;for(e.p=1,o=e.c,M=iw(e,(so(),eu)).Kc();M.Ob();)for(C=u(M.Pb(),11),s=new S(C.g);s.a<s.c.c.length;)r=u(J(s),17),k=r.d.i,e!=k&&(h=k.c,h.p<=o.p&&(d=o.p+1,d==n.b.c.length?(w=new Ch(n),w.p=d,ue(n.b,w),ko(k,w)):(w=u(Fe(n.b,d),29),ko(k,w)),nue(t,k,n)))}function rue(t,e,n){var r,s,o,h,d,w;for(s=n,o=0,d=new S(e);d.a<d.c.c.length;)h=u(J(d),33),bo(h,(ay(),_V),de(s++)),w=gy(h),r=b.Math.atan2(h.j+h.f/2,h.i+h.g/2),r+=r<0?I4:0,r<.7853981633974483||r>F1e?Xs(w,t.b):r<=F1e&&r>B1e?Xs(w,t.d):r<=B1e&&r>R1e?Xs(w,t.c):r<=R1e&&Xs(w,t.a),o=rue(t,w,o);return s}function Jp(){Jp=Z;var t;for(GH=new Lg(1,1),Sut=new Lg(1,10),QE=new Lg(0,0),_ut=new Lg(-1,1),wEt=ct(ot(B4,1),te,91,0,[QE,GH,new Lg(1,2),new Lg(1,3),new Lg(1,4),new Lg(1,5),new Lg(1,6),new Lg(1,7),new Lg(1,8),new Lg(1,9),Sut]),VH=Pt(B4,te,91,32,0,1),t=0;t<VH.length;t++)VH[t]=KI(M0(1,t))}function Nvn(t,e,n,r,s,o){var h,d,w,k;for(d=!j9(Ri(t.Oc(),new Zt(new PY))).sd((Wb(),JE)),h=t,o==(ao(),Z0)&&(h=Et(h,152)?Vx(u(h,152)):Et(h,131)?u(h,131).a:Et(h,54)?new mv(h):new Mm(h)),k=h.Kc();k.Ob();)w=u(k.Pb(),70),w.n.a=e.a,d?w.n.b=e.b+(r.b-w.o.b)/2:s?w.n.b=e.b:w.n.b=e.b+r.b-w.o.b,e.a+=w.o.a+n}function iue(t,e,n,r){var s,o,h,d,w,k;for(s=(r.c+r.a)/2,_h(e.j),ni(e.j,s),_h(n.e),ni(n.e,s),k=new uHt,d=new S(t.f);d.a<d.c.c.length;)o=u(J(d),129),w=o.a,Est(k,e,w),Est(k,n,w);for(h=new S(t.k);h.a<h.c.c.length;)o=u(J(h),129),w=o.b,Est(k,e,w),Est(k,n,w);return k.b+=2,k.a+=RXt(e,t.q),k.a+=RXt(t.q,n),k}function sue(t,e,n){var r,s,o,h,d;if(!S8(e)){for(d=Rc(n,(Et(e,14)?u(e,14).gc():N0(e.Kc()))/t.a|0),wr(d,M1e,1),h=new $F,o=null,s=e.Kc();s.Ob();)r=u(s.Pb(),86),h=L1(ct(ot(B1,1),Ie,20,0,[h,new Cp(r)])),o&&(Jt(o,(fc(),Jme),r),Jt(r,Sht,o),zrt(r)==zrt(o)&&(Jt(o,Aht,r),Jt(r,yV,o))),o=r;or(d),sue(t,h,n)}}function aue(t){var e,n,r,s,o,h,d;for(n=t.i,e=t.n,d=n.d,t.f==(wu(),ub)?d+=(n.a-t.e.b)/2:t.f==yf&&(d+=n.a-t.e.b),s=new S(t.d);s.a<s.c.c.length;){switch(r=u(J(s),181),h=r.rf(),o=new Ta,o.b=d,d+=h.b+t.a,t.b.g){case 0:o.a=n.c+e.b;break;case 1:o.a=n.c+e.b+(n.b-h.a)/2;break;case 2:o.a=n.c+n.b-e.c-h.a}r.tf(o)}}function oue(t){var e,n,r,s,o,h,d;for(n=t.i,e=t.n,d=n.c,t.b==(Xu(),cb)?d+=(n.b-t.e.a)/2:t.b==mf&&(d+=n.b-t.e.a),s=new S(t.d);s.a<s.c.c.length;){switch(r=u(J(s),181),h=r.rf(),o=new Ta,o.a=d,d+=h.a+t.a,t.f.g){case 0:o.b=n.d+e.d;break;case 1:o.b=n.d+e.d+(n.a-h.b)/2;break;case 2:o.b=n.d+n.a-e.a-h.b}r.tf(o)}}function Pvn(t,e,n){var r,s,o,h,d,w,k,C,M,F,H,V;C=n.a.c,h=n.a.c+n.a.b,o=u(Jn(n.c,e),459),H=o.f,V=o.a,w=new $e(C,H),M=new $e(h,V),s=C,n.p||(s+=t.c),s+=n.F+n.v*t.b,k=new $e(s,H),F=new $e(s,V),zC(e.a,ct(ot(Us,1),te,8,0,[w,k])),d=n.d.a.gc()>1,d&&(r=new $e(s,n.b),ni(e.a,r)),zC(e.a,ct(ot(Us,1),te,8,0,[F,M]))}function cue(t){Sv(t,new w2(Ev(yv(kv(xv(new pg,vH),"ELK Randomizer"),'Distributes the nodes randomly on the plane, leading to very obfuscating layouts. Can be useful to demonstrate the power of "real" layout algorithms.'),new zZ))),xe(t,vH,ww,AAt),xe(t,vH,ky,15),xe(t,vH,Hq,de(0)),xe(t,vH,b6,BE)}function P5t(){P5t=Z;var t,e,n,r,s,o;for(lA=Pt(Hu,N4,25,255,15,1),uU=Pt(mh,vd,25,16,15,1),e=0;e<255;e++)lA[e]=-1;for(n=57;n>=48;n--)lA[n]=n-48<<24>>24;for(r=70;r>=65;r--)lA[r]=r-65+10<<24>>24;for(s=102;s>=97;s--)lA[s]=s-97+10<<24>>24;for(o=0;o<10;o++)uU[o]=48+o&ms;for(t=10;t<=15;t++)uU[t]=65+t-10&ms}function dq(t,e,n){var r,s,o,h,d,w,k,C;return d=e.i-t.g/2,w=n.i-t.g/2,k=e.j-t.g/2,C=n.j-t.g/2,o=e.g+t.g/2,h=n.g+t.g/2,r=e.f+t.g/2,s=n.f+t.g/2,d<w+h&&w<d&&k<C+s&&C<k||w<d+o&&d<w&&C<k+r&&k<C||d<w+h&&w<d&&k<C&&C<k+r?!0:w<d+o&&d<w&&k<C+s&&C<k}function Fvn(t){var e,n,r,s,o;s=u(Q(t,(Te(),F2)),21),o=u(Q(t,iV),21),n=new $e(t.f.a+t.d.b+t.d.c,t.f.b+t.d.d+t.d.a),e=new yo(n),s.Hc((_l(),Xy))&&(r=u(Q(t,p7),8),o.Hc((cl(),M7))&&(r.a<=0&&(r.a=20),r.b<=0&&(r.b=20)),e.a=b.Math.max(n.a,r.a),e.b=b.Math.max(n.b,r.b)),je(Re(Q(t,Zlt)))||syn(t,n,e)}function Bvn(t,e){var n,r,s,o;for(o=Yo(e,(be(),mr)).Kc();o.Ob();)r=u(o.Pb(),11),n=u(Q(r,(se(),Zu)),10),n&&vf(of(af(cf(sf(new Eh,0),.1),t.i[e.p].d),t.i[n.p].a));for(s=Yo(e,Nn).Kc();s.Ob();)r=u(s.Pb(),11),n=u(Q(r,(se(),Zu)),10),n&&vf(of(af(cf(sf(new Eh,0),.1),t.i[n.p].d),t.i[e.p].a))}function tat(t){var e,n,r,s,o,h;if(!t.c){if(h=new nx,e=aA,o=e.a.zc(t,e),o==null){for(r=new er(Lc(t));r.e!=r.i.gc();)n=u(dr(r),87),s=wq(n),Et(s,88)&&rs(h,tat(u(s,26))),Mr(h,n);e.a.Bc(t)!=null,e.a.gc()==0}Rln(h),ey(h),t.c=new q3((u(St(Wt((jp(),Ln).o),15),18),h.i),h.g),rl(t).b&=-33}return t.c}function F5t(t){var e;if(t.c!=10)throw rt(new Fr(qr((Nr(),kH))));switch(e=t.a,e){case 110:e=10;break;case 114:e=13;break;case 116:e=9;break;case 92:case 124:case 46:case 94:case 45:case 63:case 42:case 43:case 123:case 125:case 40:case 41:case 91:case 93:break;default:throw rt(new Fr(qr((Nr(),gh))))}return e}function uue(t){var e,n,r,s,o;if(t.l==0&&t.m==0&&t.h==0)return"0";if(t.h==ID&&t.m==0&&t.l==0)return"-9223372036854775808";if(t.h>>19)return"-"+uue(Y8(t));for(n=t,r="";!(n.l==0&&n.m==0&&n.h==0);){if(s=Ort(Nq),n=dxt(n,s,!0),e=""+xHt(ob),!(n.l==0&&n.m==0&&n.h==0))for(o=9-e.length;o>0;o--)e="0"+e;r=e+r}return r}function Rvn(){if(!Object.create||!Object.getOwnPropertyNames)return!1;var t="__proto__",e=Object.create(null);if(e[t]!==void 0)return!1;var n=Object.getOwnPropertyNames(e);return!(n.length!=0||(e[t]=42,e[t]!==42)||Object.getOwnPropertyNames(e).length==0)}function jvn(t){var e,n,r,s,o,h,d;for(e=!1,n=0,s=new S(t.d.b);s.a<s.c.c.length;)for(r=u(J(s),29),r.p=n++,h=new S(r.a);h.a<h.c.c.length;)o=u(J(h),10),!e&&!S8(z0(o))&&(e=!0);d=ji((ao(),c0),ct(ot(WS,1),ae,103,0,[jh,kf])),e||(pf(d,Z0),pf(d,Q0)),t.a=new uee(d),Yu(t.f),Yu(t.b),Yu(t.e),Yu(t.g)}function $vn(t,e,n){var r,s,o,h,d,w,k,C,M;for(r=n.c,s=n.d,d=T1(e.c),w=T1(e.d),r==e.c?(d=k5t(t,d,s),w=bae(e.d)):(d=bae(e.c),w=k5t(t,w,s)),k=new yR(e.a),hs(k,d,k.a,k.a.a),hs(k,w,k.c.b,k.c),h=e.c==r,M=new tqt,o=0;o<k.b-1;++o)C=new la(u(Qf(k,o),8),u(Qf(k,o+1),8)),h&&o==0||!h&&o==k.b-2?M.b=C:ue(M.a,C);return M}function zvn(t,e){var n,r,s,o;if(o=t.j.g-e.j.g,o!=0)return o;if(n=u(Q(t,(Te(),Wg)),19),r=u(Q(e,Wg),19),n&&r&&(s=n.a-r.a,s!=0))return s;switch(t.j.g){case 1:return Ls(t.n.a,e.n.a);case 2:return Ls(t.n.b,e.n.b);case 3:return Ls(e.n.a,t.n.a);case 4:return Ls(e.n.b,t.n.b);default:throw rt(new Fo(b6t))}}function B5t(t,e,n,r){var s,o,h,d,w;if(N0((GM(),new ar(lr(z0(e).a.Kc(),new z))))>=t.a||!k4t(e,n))return-1;if(S8(u(r.Kb(e),20)))return 1;for(s=0,h=u(r.Kb(e),20).Kc();h.Ob();)if(o=u(h.Pb(),17),w=o.c.i==e?o.d.i:o.c.i,d=B5t(t,w,n,r),d==-1||(s=b.Math.max(s,d),s>t.c-1))return-1;return s+1}function lue(t,e){var n,r,s,o,h,d;if(Gt(e)===Gt(t))return!0;if(!Et(e,15)||(r=u(e,15),d=t.gc(),r.gc()!=d))return!1;if(h=r.Kc(),t.ni()){for(n=0;n<d;++n)if(s=t.ki(n),o=h.Pb(),s==null?o!=null:!yi(s,o))return!1}else for(n=0;n<d;++n)if(s=t.ki(n),o=h.Pb(),Gt(s)!==Gt(o))return!1;return!0}function hue(t,e){var n,r,s,o,h,d;if(t.f>0){if(t.qj(),e!=null){for(o=0;o<t.d.length;++o)if(n=t.d[o],n){for(r=u(n.g,367),d=n.i,h=0;h<d;++h)if(s=r[h],yi(e,s.dd()))return!0}}else for(o=0;o<t.d.length;++o)if(n=t.d[o],n){for(r=u(n.g,367),d=n.i,h=0;h<d;++h)if(s=r[h],Gt(e)===Gt(s.dd()))return!0}}return!1}function qvn(t,e,n){var r,s,o,h;wr(n,"Orthogonally routing hierarchical port edges",1),t.a=0,r=Myn(e),N3n(e,r),p3n(t,e,r),O4n(e),s=u(Q(e,(Te(),os)),98),o=e.b,che((An(0,o.c.length),u(o.c[0],29)),s,e),che(u(Fe(o,o.c.length-1),29),s,e),h=e.b,yle((An(0,h.c.length),u(h.c[0],29))),yle(u(Fe(h,h.c.length-1),29)),or(n)}function R5t(t){switch(t){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return t-48<<24>>24;case 97:case 98:case 99:case 100:case 101:case 102:return t-97+10<<24>>24;case 65:case 66:case 67:case 68:case 69:case 70:return t-65+10<<24>>24;default:throw rt(new od("Invalid hexadecimal"))}}function Hvn(t,e,n){var r,s,o,h;for(wr(n,"Processor order nodes",2),t.a=Xt(ye(Q(e,(hw(),o_t)))),s=new Qi,h=ei(e.b,0);h.b!=h.d.c;)o=u(ti(h),86),je(Re(Q(o,(fc(),Wy))))&&hs(s,o,s.c.b,s.c);r=(Qn(s.b!=0),u(s.a.a.c,86)),Mle(t,r),!n.b&&iit(n,1),q5t(t,r,0-Xt(ye(Q(r,(fc(),xV))))/2,0),!n.b&&iit(n,1),or(n)}function gq(){gq=Z,QEt=new j3("SPIRAL",0),WEt=new j3("LINE_BY_LINE",1),KEt=new j3("MANHATTAN",2),UEt=new j3("JITTER",3),Out=new j3("QUADRANTS_LINE_BY_LINE",4),XEt=new j3("QUADRANTS_MANHATTAN",5),YEt=new j3("QUADRANTS_JITTER",6),VEt=new j3("COMBINE_LINE_BY_LINE_MANHATTAN",7),GEt=new j3("COMBINE_JITTER_MANHATTAN",8)}function fue(t,e,n,r){var s,o,h,d,w,k;for(w=kst(t,n),k=kst(e,n),s=!1;w&&k&&(r||jfn(w,k,n));)h=kst(w,n),d=kst(k,n),vI(e),vI(t),o=w.c,_at(w,!1),_at(k,!1),n?(oy(e,k.p,o),e.p=k.p,oy(t,w.p+1,o),t.p=w.p):(oy(t,w.p,o),t.p=w.p,oy(e,k.p+1,o),e.p=k.p),ko(w,null),ko(k,null),w=h,k=d,s=!0;return s}function Gvn(t,e,n,r){var s,o,h,d,w;for(s=!1,o=!1,d=new S(r.j);d.a<d.c.c.length;)h=u(J(d),11),Gt(Q(h,(se(),_i)))===Gt(n)&&(h.g.c.length==0?h.e.c.length==0||(s=!0):o=!0);return w=0,s&&s^o?w=n.j==(be(),Nn)?-t.e[r.c.p][r.p]:e-t.e[r.c.p][r.p]:o&&s^o?w=t.e[r.c.p][r.p]+1:s&&o&&(w=n.j==(be(),Nn)?0:e/2),w}function eat(t,e,n,r,s,o,h,d){var w,k,C;for(w=0,e!=null&&(w^=Bg(e.toLowerCase())),n!=null&&(w^=Bg(n)),r!=null&&(w^=Bg(r)),h!=null&&(w^=Bg(h)),d!=null&&(w^=Bg(d)),k=0,C=o.length;k<C;k++)w^=Bg(o[k]);t?w|=256:w&=-257,s?w|=16:w&=-17,this.f=w,this.i=e==null?null:(On(e),e),this.a=n,this.d=r,this.j=o,this.g=h,this.e=d}function j5t(t,e,n){var r,s;switch(s=null,e.g){case 1:s=(Bu(),D7t);break;case 2:s=(Bu(),N7t)}switch(r=null,n.g){case 1:r=(Bu(),O7t);break;case 2:r=(Bu(),I7t);break;case 3:r=(Bu(),P7t);break;case 4:r=(Bu(),F7t)}return s&&r?Ox(t.j,new b9(new wl(ct(ot(Y5n,1),Ie,169,0,[u(Ar(s),169),u(Ar(r),169)])))):(vn(),vn(),io)}function Vvn(t){var e,n,r;switch(e=u(Q(t,(Te(),p7)),8),Jt(t,p7,new $e(e.b,e.a)),u(Q(t,Ld),248).g){case 1:Jt(t,Ld,(Qd(),FV));break;case 2:Jt(t,Ld,(Qd(),NV));break;case 3:Jt(t,Ld,(Qd(),$O));break;case 4:Jt(t,Ld,(Qd(),zO))}(t.q?t.q:(vn(),vn(),a0))._b(Hy)&&(n=u(Q(t,Hy),8),r=n.a,n.a=n.b,n.b=r)}function due(t,e,n,r,s,o){if(this.b=n,this.d=s,t>=e.length)throw rt(new mo("Greedy SwitchDecider: Free layer not in graph."));this.c=e[t],this.e=new HM(r),cit(this.e,this.c,(be(),Bn)),this.i=new HM(r),cit(this.i,this.c,Hn),this.f=new lYt(this.c),this.a=!o&&s.i&&!s.s&&this.c[0].k==(Gn(),xs),this.a&&ogn(this,t,e.length)}function gue(t,e){var n,r,s,o,h,d;o=!t.B.Hc((cl(),rN)),h=t.B.Hc(vft),t.a=new uie(h,o,t.c),t.n&&Swt(t.a.n,t.n),Jtt(t.g,(Kf(),tu),t.a),e||(r=new r_(1,o,t.c),r.n.a=t.k,Nx(t.p,(be(),Nn),r),s=new r_(1,o,t.c),s.n.d=t.k,Nx(t.p,mr,s),d=new r_(0,o,t.c),d.n.c=t.k,Nx(t.p,Bn,d),n=new r_(0,o,t.c),n.n.b=t.k,Nx(t.p,Hn,n))}function Uvn(t){var e,n,r;switch(e=u(Q(t.d,(Te(),X0)),218),e.g){case 2:n=k5n(t);break;case 3:n=(r=new le,us(Ri(pu(Wo(Wo(new Tn(null,new _n(t.d.b,16)),new CX),new _X),new $T),new pX),new Ptt(r)),r);break;default:throw rt(new Fo("Compaction not supported for "+e+" edges."))}Gyn(t,n),va(new Tm(t.g),new Ott(t))}function Wvn(t,e){var n;return n=new xa,e&&Lo(n,u(Jn(t.a,sN),94)),Et(e,470)&&Lo(n,u(Jn(t.a,aN),94)),Et(e,354)?(Lo(n,u(Jn(t.a,qo),94)),n):(Et(e,82)&&Lo(n,u(Jn(t.a,br),94)),Et(e,239)?(Lo(n,u(Jn(t.a,ns),94)),n):Et(e,186)?(Lo(n,u(Jn(t.a,fl),94)),n):(Et(e,352)&&Lo(n,u(Jn(t.a,Ws),94)),n))}function Zf(){Zf=Z,t7=new eo((ci(),zV),de(1)),sG=new eo(H2,80),sbe=new eo(sAt,5),Xpe=new eo($6,BE),rbe=new eo(fft,de(1)),ibe=new eo(dft,(Fn(),!0)),g7t=new Mv(50),ebe=new eo(q2,g7t),h7t=RV,p7t=US,Qpe=new eo(rft,!1),d7t=YO,tbe=vb,Jpe=z2,Zpe=s5,nbe=Ky,f7t=(P4t(),Hpe),Vut=Wpe,iG=qpe,Gut=Gpe,b7t=Upe}function Kvn(t){var e,n,r,s,o,h,d,w;for(w=new bJt,d=new S(t.a);d.a<d.c.c.length;)if(h=u(J(d),10),h.k!=(Gn(),xs)){for(Kpn(w,h,new Ta),o=new ar(lr(Ms(h).a.Kc(),new z));zr(o);)if(s=u(Lr(o),17),!(s.c.i.k==xs||s.d.i.k==xs))for(r=ei(s.a,0);r.b!=r.d.c;)n=u(ti(r),8),e=n,l_(w,new a8(e.a,e.b))}return w}function nat(){nat=Z,lSt=new Gi(_ct),uSt=(H9(),jO),cSt=new mn(Lct,uSt),oSt=(NI(),OV),E3e=new mn(t8t,oSt),aSt=(iD(),Vht),k3e=new mn(e8t,aSt),m3e=new mn(Sct,null),sSt=(hI(),IV),x3e=new mn(Act,sSt),iSt=(MR(),qht),p3e=new mn(n8t,iSt),b3e=new mn(r8t,(Fn(),!1)),v3e=new mn(i8t,de(64)),w3e=new mn(s8t,!0),y3e=Ght}function pue(t){var e,n,r,s,o,h;if(t.a==null)if(t.a=Pt(dl,i0,25,t.c.b.c.length,16,1),t.a[0]=!1,Vs(t.c,(Te(),iht)))for(r=u(Q(t.c,iht),15),n=r.Kc();n.Ob();)e=u(n.Pb(),19).a,e>0&&e<t.a.length&&(t.a[e]=!1);else for(h=new S(t.c.b),h.a<h.c.c.length&&J(h),s=1;h.a<h.c.c.length;)o=u(J(h),29),t.a[s++]=Lbn(o)}function bue(t,e){var n,r,s,o;switch(s=t.b,e){case 1:{t.b|=1,t.b|=4,t.b|=8;break}case 2:{t.b|=2,t.b|=4,t.b|=8;break}case 4:{t.b|=1,t.b|=2,t.b|=4,t.b|=8;break}case 3:{t.b|=16,t.b|=8;break}case 0:{t.b|=32,t.b|=16,t.b|=8,t.b|=1,t.b|=2,t.b|=4;break}}if(t.b!=s&&t.c)for(r=new er(t.c);r.e!=r.i.gc();)o=u(dr(r),473),n=rl(o),hy(n,e)}function vue(t,e,n,r){var s,o,h,d,w,k,C,M,F,H,V;for(s=!1,h=e,d=0,w=h.length;d<w;++d)o=h[d],je((Fn(),!!o.e))&&!u(Fe(t.b,o.e.p),214).s&&(s=s|(k=o.e,C=u(Fe(t.b,k.p),214),M=C.e,F=nHt(n,M.length),H=M[F][0],H.k==(Gn(),xs)?M[F]=L2n(o,M[F],n?(be(),Bn):(be(),Hn)):C.c.Tf(M,n),V=pD(t,C,n,r),D5t(C.e,C.o,n),V));return s}function wue(t,e){var n,r,s,o,h;for(o=(!e.a&&(e.a=new he(ns,e,10,11)),e.a).i,s=new er((!e.a&&(e.a=new he(ns,e,10,11)),e.a));s.e!=s.i.gc();)r=u(dr(s),33),Gt(qe(r,(ci(),r5)))!==Gt(($0(),YS))&&(h=u(qe(e,C7),149),n=u(qe(r,C7),149),(h==n||h&&omt(h,n))&&(!r.a&&(r.a=new he(ns,r,10,11)),r.a).i!=0&&(o+=wue(t,r)));return o}function Yvn(t){var e,n,r,s,o,h,d;for(r=0,d=0,h=new S(t.d);h.a<h.c.c.length;)o=u(J(h),101),s=u(Pl(Ri(new Tn(null,new _n(o.j,16)),new qT),i2(new _e,new we,new nr,ct(ot(ll,1),ae,132,0,[(I1(),Gl)]))),15),n=null,r<=d?(n=(be(),Nn),r+=s.gc()):d<r&&(n=(be(),mr),d+=s.gc()),e=n,us(pu(s.Oc(),new AF),new Rtt(e))}function Xvn(t){var e,n,r,s,o,h,d,w;for(t.b=new Noe(new wl((be(),ct(ot(Xa,1),xc,61,0,[Zo,Nn,Hn,mr,Bn]))),new wl((Jv(),ct(ot(clt,1),ae,361,0,[Aw,hb,Sw])))),h=ct(ot(Xa,1),xc,61,0,[Zo,Nn,Hn,mr,Bn]),d=0,w=h.length;d<w;++d)for(o=h[d],n=ct(ot(clt,1),ae,361,0,[Aw,hb,Sw]),r=0,s=n.length;r<s;++r)e=n[r],Q1n(t.b,o,e,new le)}function mue(t,e){var n,r,s,o,h,d,w,k,C,M;if(h=u(u(Ai(t.r,e),21),84),d=t.u.Hc((Qu(),xb)),n=t.u.Hc(JS),r=t.u.Hc(ZS),k=t.u.Hc(G6),M=t.B.Hc((cl(),KV)),C=!n&&!r&&(k||h.gc()==2),Q2n(t,e),s=null,w=null,d){for(o=h.Kc(),s=u(o.Pb(),111),w=s;o.Ob();)w=u(o.Pb(),111);s.d.b=0,w.d.c=0,C&&!s.a&&(s.d.c=0)}M&&(Ydn(h),d&&(s.d.b=0,w.d.c=0))}function yue(t,e){var n,r,s,o,h,d,w,k,C,M;if(h=u(u(Ai(t.r,e),21),84),d=t.u.Hc((Qu(),xb)),n=t.u.Hc(JS),r=t.u.Hc(ZS),w=t.u.Hc(G6),M=t.B.Hc((cl(),KV)),k=!n&&!r&&(w||h.gc()==2),fmn(t,e),C=null,s=null,d){for(o=h.Kc(),C=u(o.Pb(),111),s=C;o.Ob();)s=u(o.Pb(),111);C.d.d=0,s.d.a=0,k&&!C.a&&(C.d.a=0)}M&&(Xdn(h),d&&(C.d.d=0,s.d.a=0))}function xue(t,e,n){var r,s,o,h,d,w,k,C;if(s=e.k,e.p>=0)return!1;if(e.p=n.b,ue(n.e,e),s==(Gn(),Zs)||s==Hc){for(h=new S(e.j);h.a<h.c.c.length;)for(o=u(J(h),11),C=(r=new S(new Er(o).a.g),new Qt(r));Vo(C.a);)if(k=u(J(C.a),17).d,d=k.i,w=d.k,e.c!=d.c&&(w==Zs||w==Hc)&&xue(t,d,n))return!0}return!0}function pq(t){var e;return t.Db&64?s5t(t):(e=new Th(s5t(t)),e.a+=" (changeable: ",kg(e,(t.Bb&wf)!=0),e.a+=", volatile: ",kg(e,(t.Bb&Ay)!=0),e.a+=", transient: ",kg(e,(t.Bb&yy)!=0),e.a+=", defaultValueLiteral: ",fo(e,t.j),e.a+=", unsettable: ",kg(e,(t.Bb&zu)!=0),e.a+=", derived: ",kg(e,(t.Bb&bd)!=0),e.a+=")",e.a)}function Qvn(t){var e,n,r,s,o,h,d,w,k,C,M,F;for(s=e2n(t.d),h=u(Q(t.b,(i_(),o7t)),116),d=h.b+h.c,w=h.d+h.a,C=s.d.a*t.e+d,k=s.b.a*t.f+w,ipt(t.b,new $e(C,k)),F=new S(t.g);F.a<F.c.c.length;)M=u(J(F),562),e=M.g-s.a.a,n=M.i-s.c.a,r=Li(hQe(new $e(e,n),M.a,M.b),ud(BM(nc(s2t(M.e)),M.d*M.a,M.c*M.b),-.5)),o=a2t(M.e),zKe(M.e,na(r,o))}function Zvn(t,e,n,r){var s,o,h,d,w;for(w=Pt(ia,te,104,(be(),ct(ot(Xa,1),xc,61,0,[Zo,Nn,Hn,mr,Bn])).length,0,2),o=ct(ot(Xa,1),xc,61,0,[Zo,Nn,Hn,mr,Bn]),h=0,d=o.length;h<d;++h)s=o[h],w[s.g]=Pt(ia,vo,25,t.c[s.g],15,1);return qse(w,t,Nn),qse(w,t,mr),pst(w,t,Nn,e,n,r),pst(w,t,Hn,e,n,r),pst(w,t,mr,e,n,r),pst(w,t,Bn,e,n,r),w}function Jvn(t,e,n){if(kl(t.a,e)){if(S0(u(Jn(t.a,e),53),n))return 1}else ki(t.a,e,new qs);if(kl(t.a,n)){if(S0(u(Jn(t.a,n),53),e))return-1}else ki(t.a,n,new qs);if(kl(t.b,e)){if(S0(u(Jn(t.b,e),53),n))return-1}else ki(t.b,e,new qs);if(kl(t.b,n)){if(S0(u(Jn(t.b,n),53),e))return 1}else ki(t.b,n,new qs);return 0}function $5t(t,e,n,r){var s,o,h,d,w,k;if(n==null){for(s=u(t.g,119),d=0;d<t.i;++d)if(h=s[d],h.ak()==e)return Ba(t,h,r)}return o=(to(),u(e,66).Oj()?u(n,72):Yd(e,n)),ml(t.e)?(k=!VI(t,e),r=Qc(t,o,r),w=e.$j()?zp(t,3,e,null,n,EE(t,e,n,Et(e,99)&&(u(e,18).Bb&Ya)!=0),k):zp(t,1,e,e.zj(),n,-1,k),r?r.Ei(w):r=w):r=Qc(t,o,r),r}function twn(t){var e,n,r,s,o,h;t.q==(oa(),h0)||t.q==Vc||(s=t.f.n.d+Lj(u(go(t.b,(be(),Nn)),124))+t.c,e=t.f.n.a+Lj(u(go(t.b,mr),124))+t.c,r=u(go(t.b,Hn),124),h=u(go(t.b,Bn),124),o=b.Math.max(0,r.n.d-s),o=b.Math.max(o,h.n.d-s),n=b.Math.max(0,r.n.a-e),n=b.Math.max(n,h.n.a-e),r.n.d=o,h.n.d=o,r.n.a=n,h.n.a=n)}function ewn(t,e){var n,r,s,o,h,d,w,k,C,M,F;for(wr(e,"Restoring reversed edges",1),w=new S(t.b);w.a<w.c.c.length;)for(d=u(J(w),29),C=new S(d.a);C.a<C.c.c.length;)for(k=u(J(C),10),F=new S(k.j);F.a<F.c.c.length;)for(M=u(J(F),11),h=gd(M.g),r=h,s=0,o=r.length;s<o;++s)n=r[s],je(Re(Q(n,(se(),$1))))&&dw(n,!1);or(e)}function kue(){this.b=new n2,this.d=new n2,this.e=new n2,this.c=new n2,this.a=new Cr,this.f=new Cr,Q3(Us,new xZ,new kZ),Q3(xSt,new tc,new Kc),Q3(L7t,new zi,new FL),Q3(M7t,new DZ,new OZ),Q3(E4e,new Z5,new mm),Q3(X5n,new EZ,new TZ),Q3(J5n,new CZ,new _Z),Q3(Q5n,new SZ,new AZ),Q3(Z5n,new LZ,new Ac),Q3(nxn,new MZ,new KT)}function Eue(t){var e,n,r,s,o,h;return o=0,e=Lh(t),e.Bj()&&(o|=4),t.Bb&zu&&(o|=2),Et(t,99)?(n=u(t,18),s=no(n),n.Bb&dc&&(o|=32),s&&(Zn(Vm(s)),o|=8,h=s.t,(h>1||h==-1)&&(o|=16),s.Bb&dc&&(o|=64)),n.Bb&Ya&&(o|=Ay),o|=wf):Et(e,457)?o|=512:(r=e.Bj(),r&&r.i&1&&(o|=256)),t.Bb&512&&(o|=128),o}function v_(t,e){var n,r,s,o,h;for(t=t==null?Tu:(On(t),t),s=0;s<e.length;s++)e[s]=Fbn(e[s]);for(n=new Lm,h=0,r=0;r<e.length&&(o=t.indexOf("%s",h),o!=-1);)n.a+=""+Dl(t==null?Tu:(On(t),t),h,o),hc(n,e[r++]),h=o+2;if(sZt(n,t,h,t.length),r<e.length){for(n.a+=" [",hc(n,e[r++]);r<e.length;)n.a+=Ka,hc(n,e[r++]);n.a+="]"}return n.a}function nwn(t){var e,n,r,s,o;for(o=new Yc(t.a.c.length),s=new S(t.a);s.a<s.c.c.length;){switch(r=u(J(s),10),n=u(Q(r,(Te(),cu)),163),e=null,n.g){case 1:case 2:e=(u2(),G4);break;case 3:case 4:e=(u2(),u7)}e?(Jt(r,(se(),HG),(u2(),G4)),e==u7?lq(r,n,(so(),Ju)):e==G4&&lq(r,n,(so(),eu))):o.c[o.c.length]=r}return o}function z5t(t,e){var n,r,s,o,h,d,w;for(n=0,w=new S(e);w.a<w.c.c.length;){for(d=u(J(w),11),Byt(t.b,t.d[d.p]),h=0,s=new S1(d.b);Vo(s.a)||Vo(s.b);)r=u(Vo(s.a)?J(s.a):J(s.b),17),oXt(r)?(o=ubt(t,d==r.c?r.d:r.c),o>t.d[d.p]&&(n+=smt(t.b,o),qp(t.a,de(o)))):++h;for(n+=t.b.d*h;!N9(t.a);)Fmt(t.b,u(Fx(t.a),19).a)}return n}function rwn(t,e){var n;return t.f==Lft?(n=$v(Eo((Ru(),ma),e)),t.e?n==4&&e!=(a6(),W6)&&e!=(a6(),U6)&&e!=(a6(),Mft)&&e!=(a6(),Ift):n==2):t.d&&(t.d.Hc(e)||t.d.Hc(qx(Eo((Ru(),ma),e)))||t.d.Hc(E4((Ru(),ma),t.b,e)))?!0:t.f&&_5t((Ru(),t.f),ZM(Eo(ma,e)))?(n=$v(Eo(ma,e)),t.e?n==4:n==2):!1}function iwn(t,e,n,r){var s,o,h,d,w,k,C,M;return h=u(qe(n,(ci(),z6)),8),w=h.a,C=h.b+t,s=b.Math.atan2(C,w),s<0&&(s+=I4),s+=e,s>I4&&(s-=I4),d=u(qe(r,z6),8),k=d.a,M=d.b+t,o=b.Math.atan2(M,k),o<0&&(o+=I4),o+=e,o>I4&&(o-=I4),y1(),gf(1e-10),b.Math.abs(s-o)<=1e-10||s==o||isNaN(s)&&isNaN(o)?0:s<o?-1:s>o?1:Lv(isNaN(s),isNaN(o))}function rat(t){var e,n,r,s,o,h,d;for(d=new Cr,r=new S(t.a.b);r.a<r.c.c.length;)e=u(J(r),57),ki(d,e,new le);for(s=new S(t.a.b);s.a<s.c.c.length;)for(e=u(J(s),57),e.i=Ts,h=e.c.Kc();h.Ob();)o=u(h.Pb(),57),u(ec(Ao(d.f,o)),15).Fc(e);for(n=new S(t.a.b);n.a<n.c.c.length;)e=u(J(n),57),e.c.$b(),e.c=u(ec(Ao(d.f,e)),15);Gce(t)}function iat(t){var e,n,r,s,o,h,d;for(d=new Cr,r=new S(t.a.b);r.a<r.c.c.length;)e=u(J(r),81),ki(d,e,new le);for(s=new S(t.a.b);s.a<s.c.c.length;)for(e=u(J(s),81),e.o=Ts,h=e.f.Kc();h.Ob();)o=u(h.Pb(),81),u(ec(Ao(d.f,o)),15).Fc(e);for(n=new S(t.a.b);n.a<n.c.c.length;)e=u(J(n),81),e.f.$b(),e.f=u(ec(Ao(d.f,e)),15);Nce(t)}function swn(t,e,n,r){var s,o;for(m1n(t,e,n,r),spt(e,t.j-e.j+n),apt(e,t.k-e.k+r),o=new S(e.f);o.a<o.c.c.length;)switch(s=u(J(o),324),s.a.g){case 0:X8(t,e.g+s.b.a,0,e.g+s.c.a,e.i-1);break;case 1:X8(t,e.g+e.o,e.i+s.b.a,t.o-1,e.i+s.c.a);break;case 2:X8(t,e.g+s.b.a,e.i+e.p,e.g+s.c.a,t.p-1);break;default:X8(t,0,e.i+s.b.a,e.g-1,e.i+s.c.a)}}function bq(t,e,n,r,s){var o,h,d;try{if(e>=t.o)throw rt(new _pt);d=e>>5,h=e&31,o=M0(1,Sr(M0(h,1))),s?t.n[n][d]=C1(t.n[n][d],o):t.n[n][d]=Ps(t.n[n][d],Ivt(o)),o=M0(o,1),r?t.n[n][d]=C1(t.n[n][d],o):t.n[n][d]=Ps(t.n[n][d],Ivt(o))}catch(w){throw w=Wi(w),Et(w,320)?rt(new mo(Tot+t.o+"*"+t.p+Cot+e+Ka+n+_ot)):rt(w)}}function q5t(t,e,n,r){var s,o,h;e&&(o=Xt(ye(Q(e,(fc(),Yg))))+r,h=n+Xt(ye(Q(e,xV)))/2,Jt(e,Lht,de(Sr(ku(b.Math.round(o))))),Jt(e,t_t,de(Sr(ku(b.Math.round(h))))),e.d.b==0||q5t(t,u(lj((s=ei(new Cp(e).a.d,0),new bx(s))),86),n+Xt(ye(Q(e,xV)))+t.a,r+Xt(ye(Q(e,k7)))),Q(e,Aht)!=null&&q5t(t,u(Q(e,Aht),86),n,r))}function awn(t,e){var n,r,s,o,h,d,w,k,C,M,F;for(w=Fa(e.a),s=Xt(ye(Q(w,(Te(),R2))))*2,C=Xt(ye(Q(w,Z4))),k=b.Math.max(s,C),o=Pt(ia,vo,25,e.f-e.c+1,15,1),r=-k,n=0,d=e.b.Kc();d.Ob();)h=u(d.Pb(),10),r+=t.a[h.c.p]+k,o[n++]=r;for(r+=t.a[e.a.c.p]+k,o[n++]=r,F=new S(e.e);F.a<F.c.c.length;)M=u(J(F),10),r+=t.a[M.c.p]+k,o[n++]=r;return o}function own(t,e,n,r){var s,o,h,d,w,k,C,M,F;for(F=new Lp(new v$t(t)),d=ct(ot(o0,1),zg,10,0,[e,n]),w=0,k=d.length;w<k;++w)for(h=d[w],M=QC(h,r).Kc();M.Ob();)for(C=u(M.Pb(),11),o=new S1(C.b);Vo(o.a)||Vo(o.b);)s=u(Vo(o.a)?J(o.a):J(o.b),17),Va(s)||(pz(F.a,C,(Fn(),I2))==null,oXt(s)&&YM(F,C==s.c?s.d:s.c));return Ar(F),new Pu(F)}function cwn(t,e){var n,r,s,o;if(o=u(qe(t,(ci(),o5)),61).g-u(qe(e,o5),61).g,o!=0)return o;if(n=u(qe(t,lft),19),r=u(qe(e,lft),19),n&&r&&(s=n.a-r.a,s!=0))return s;switch(u(qe(t,o5),61).g){case 1:return Ls(t.i,e.i);case 2:return Ls(t.j,e.j);case 3:return Ls(e.i,t.i);case 4:return Ls(e.j,t.j);default:throw rt(new Fo(b6t))}}function H5t(t){var e,n,r;return t.Db&64?Ost(t):(e=new Il(f8t),n=t.k,n?Vr(Vr((e.a+=' "',e),n),'"'):(!t.n&&(t.n=new he(qo,t,1,7)),t.n.i>0&&(r=(!t.n&&(t.n=new he(qo,t,1,7)),u(St(t.n,0),137)).a,!r||Vr(Vr((e.a+=' "',e),r),'"'))),Vr(Cv(Vr(Cv(Vr(Cv(Vr(Cv((e.a+=" (",e),t.i),","),t.j)," | "),t.g),","),t.f),")"),e.a)}function Tue(t){var e,n,r;return t.Db&64?Ost(t):(e=new Il(d8t),n=t.k,n?Vr(Vr((e.a+=' "',e),n),'"'):(!t.n&&(t.n=new he(qo,t,1,7)),t.n.i>0&&(r=(!t.n&&(t.n=new he(qo,t,1,7)),u(St(t.n,0),137)).a,!r||Vr(Vr((e.a+=' "',e),r),'"'))),Vr(Cv(Vr(Cv(Vr(Cv(Vr(Cv((e.a+=" (",e),t.i),","),t.j)," | "),t.g),","),t.f),")"),e.a)}function sat(t,e){var n,r,s,o,h,d,w;if(e==null||e.length==0)return null;if(s=u(Fc(t.a,e),149),!s){for(r=(d=new b1(t.b).a.vc().Kc(),new v1(d));r.a.Ob();)if(n=(o=u(r.a.Pb(),42),u(o.dd(),149)),h=n.c,w=e.length,hn(h.substr(h.length-w,w),e)&&(e.length==h.length||ba(h,h.length-e.length-1)==46)){if(s)return null;s=n}s&&xo(t.a,e,s)}return s}function uwn(t,e){var n,r,s,o;return n=new Jl,r=u(Pl(pu(new Tn(null,new _n(t.f,16)),n),Ym(new cn,new li,new di,new Ee,ct(ot(ll,1),ae,132,0,[(I1(),Ly),Gl]))),21),s=r.gc(),r=u(Pl(pu(new Tn(null,new _n(e.f,16)),n),Ym(new cn,new li,new di,new Ee,ct(ot(ll,1),ae,132,0,[Ly,Gl]))),21),o=r.gc(),s<o?-1:s==o?0:1}function Cue(t){var e,n,r;Vs(t,(Te(),Ow))&&(r=u(Q(t,Ow),21),!r.dc()&&(n=(e=u(Hf(lo),9),new rh(e,u(uf(e,e.length),9),0)),r.Hc((fy(),Ul))?pf(n,Ul):pf(n,Cf),r.Hc($h)||pf(n,$h),r.Hc(Ef)?pf(n,_f):r.Hc(J0)?pf(n,l0):r.Hc(Tf)&&pf(n,zh),r.Hc(_f)?pf(n,Ef):r.Hc(l0)?pf(n,J0):r.Hc(zh)&&pf(n,Tf),Jt(t,Ow,n)))}function lwn(t){var e,n,r,s,o,h,d;for(s=u(Q(t,(se(),Iw)),10),r=t.j,n=(An(0,r.c.length),u(r.c[0],11)),h=new S(s.j);h.a<h.c.c.length;)if(o=u(J(h),11),Gt(o)===Gt(Q(n,_i))){o.j==(be(),Nn)&&t.p>s.p?(Fs(o,mr),o.d&&(d=o.o.b,e=o.a.b,o.a.b=d-e)):o.j==mr&&s.p>t.p&&(Fs(o,Nn),o.d&&(d=o.o.b,e=o.a.b,o.a.b=-(d-e)));break}return s}function hwn(t,e,n,r){var s,o,h,d,w,k,C,M,F,H,V;if(o=n,n<r)for(F=(H=new LI(t.p),V=new LI(t.p),Ua(H.e,t.e),H.q=t.q,H.r=V,Kj(H),Ua(V.j,t.j),V.r=H,Kj(V),new la(H,V)),M=u(F.a,112),C=u(F.b,112),s=(An(o,e.c.length),u(e.c[o],329)),h=iue(t,M,C,s),k=n+1;k<=r;k++)d=(An(k,e.c.length),u(e.c[k],329)),w=iue(t,M,C,d),Vhn(d,w,s,h)&&(s=d,h=w);return o}function bD(t,e,n,r,s){var o,h,d,w,k,C,M;if(!(Et(e,239)||Et(e,354)||Et(e,186)))throw rt(new Pn("Method only works for ElkNode-, ElkLabel and ElkPort-objects."));return h=t.a/2,w=e.i+r-h,C=e.j+s-h,k=w+e.g+t.a,M=C+e.f+t.a,o=new Du,ni(o,new $e(w,C)),ni(o,new $e(w,M)),ni(o,new $e(k,M)),ni(o,new $e(k,C)),d=new Vst(o),Lo(d,e),n&&ki(t.b,e,d),d}function w_(t,e,n){var r,s,o,h,d,w,k,C,M,F;for(o=new $e(e,n),C=new S(t.a);C.a<C.c.c.length;)for(k=u(J(C),10),Li(k.n,o),F=new S(k.j);F.a<F.c.c.length;)for(M=u(J(F),11),s=new S(M.g);s.a<s.c.c.length;)for(r=u(J(s),17),Jm(r.a,o),h=u(Q(r,(Te(),_o)),74),h&&Jm(h,o),w=new S(r.b);w.a<w.c.c.length;)d=u(J(w),70),Li(d.n,o)}function fwn(t,e,n){var r,s,o,h,d,w,k,C,M,F;for(o=new $e(e,n),C=new S(t.a);C.a<C.c.c.length;)for(k=u(J(C),10),Li(k.n,o),F=new S(k.j);F.a<F.c.c.length;)for(M=u(J(F),11),s=new S(M.g);s.a<s.c.c.length;)for(r=u(J(s),17),Jm(r.a,o),h=u(Q(r,(Te(),_o)),74),h&&Jm(h,o),w=new S(r.b);w.a<w.c.c.length;)d=u(J(w),70),Li(d.n,o)}function _ue(t){if((!t.b&&(t.b=new Cn(br,t,4,7)),t.b).i==0)throw rt(new F9("Edges must have a source."));if((!t.c&&(t.c=new Cn(br,t,5,8)),t.c).i==0)throw rt(new F9("Edges must have a target."));if(!t.b&&(t.b=new Cn(br,t,4,7)),!(t.b.i<=1&&(!t.c&&(t.c=new Cn(br,t,5,8)),t.c.i<=1)))throw rt(new F9("Hyperedges are not supported."))}function Sue(t,e){var n,r,s,o,h,d,w,k,C,M;for(M=0,o=new P3,qp(o,e);o.b!=o.c;)for(w=u(Fx(o),214),k=0,C=u(Q(e.j,(Te(),db)),339),h=Xt(ye(Q(e.j,YG))),d=Xt(ye(Q(e.j,P9t))),C!=(j0(),gb)&&(k+=h*xbn(w.e,C),k+=d*U2n(w.e)),M+=_se(w.d,w.e)+k,s=new S(w.b);s.a<s.c.c.length;)r=u(J(s),37),n=u(Fe(t.b,r.p),214),n.s||(M+=Rst(t,n));return M}function dwn(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt;for(H=e.length,w=H,Rr(0,e.length),e.charCodeAt(0)==45?(M=-1,F=1,--H):(M=1,F=0),o=(wat(),_ge)[10],s=H/o|0,tt=H%o,tt!=0&&++s,d=Pt(Tr,Xr,25,s,15,1),n=Cge[8],h=0,V=F+(tt==0?o:tt),Y=F;Y<w;Y=V,V=Y+o)r=$l(e.substr(Y,V-Y),_a,vi),k=(bE(),P3t(d,d,h,n)),k+=Hln(d,h,r),d[h++]=k;C=h,t.e=M,t.d=C,t.a=d,OC(t)}function Aue(t,e,n,r,s,o,h){if(t.c=r.qf().a,t.d=r.qf().b,s&&(t.c+=s.qf().a,t.d+=s.qf().b),t.b=e.rf().a,t.a=e.rf().b,!s)n?t.c-=h+e.rf().a:t.c+=r.rf().a+h;else switch(s.Hf().g){case 0:case 2:t.c+=s.rf().a+h+o.a+h;break;case 4:t.c-=h+o.a+h+e.rf().a;break;case 1:t.c+=s.rf().a+h,t.d-=h+o.b+h+e.rf().b;break;case 3:t.c+=s.rf().a+h,t.d+=s.rf().b+h+o.b+h}}function Lue(t,e){var n,r;for(this.b=new le,this.e=new le,this.a=t,this.d=e,zhn(this),Xln(this),this.b.dc()?this.c=t.c.p:this.c=u(this.b.Xb(0),10).c.p,this.e.c.length==0?this.f=t.c.p:this.f=u(Fe(this.e,this.e.c.length-1),10).c.p,r=u(Q(t,(se(),TO)),15).Kc();r.Ob();)if(n=u(r.Pb(),70),Vs(n,(Te(),QG))){this.d=u(Q(n,QG),227);break}}function xE(t,e,n){var r,s,o,h,d,w,k,C;for(r=u(Jn(t.a,e),53),o=u(Jn(t.a,n),53),s=u(Jn(t.e,e),53),h=u(Jn(t.e,n),53),r.a.zc(n,r),h.a.zc(e,h),C=o.a.ec().Kc();C.Ob();)k=u(C.Pb(),10),r.a.zc(k,r),Ns(u(Jn(t.e,k),53),e),Ua(u(Jn(t.e,k),53),s);for(w=s.a.ec().Kc();w.Ob();)d=u(w.Pb(),10),h.a.zc(d,h),Ns(u(Jn(t.a,d),53),n),Ua(u(Jn(t.a,d),53),o)}function vD(t,e,n){var r,s,o,h,d,w,k,C;for(r=u(Jn(t.a,e),53),o=u(Jn(t.a,n),53),s=u(Jn(t.b,e),53),h=u(Jn(t.b,n),53),r.a.zc(n,r),h.a.zc(e,h),C=o.a.ec().Kc();C.Ob();)k=u(C.Pb(),10),r.a.zc(k,r),Ns(u(Jn(t.b,k),53),e),Ua(u(Jn(t.b,k),53),s);for(w=s.a.ec().Kc();w.Ob();)d=u(w.Pb(),10),h.a.zc(d,h),Ns(u(Jn(t.a,d),53),n),Ua(u(Jn(t.a,d),53),o)}function gwn(t,e){var n,r,s;switch(wr(e,"Breaking Point Insertion",1),r=new f5t(t),u(Q(t,(Te(),rht)),337).g){case 2:s=new PF;case 0:s=new DF;break;default:s=new FF}if(n=s.Vf(t,r),je(Re(Q(t,mCt)))&&(n=s3n(t,n)),!s.Wf()&&Vs(t,aV))switch(u(Q(t,aV),338).g){case 2:n=goe(r,n);break;case 1:n=dae(r,n)}if(n.dc()){or(e);return}s5n(t,n),or(e)}function pwn(t,e,n){var r,s,o,h,d,w,k,C,M,F;if(C=null,F=e,M=PZt(t,IZt(n),F),qC(M,O0(F,Cd)),h=Uv(F,p8t),r=new bVt(t,M),qgn(r.a,r.b,h),d=Uv(F,Vct),s=new vVt(t,M),Hgn(s.a,s.b,d),(!M.b&&(M.b=new Cn(br,M,4,7)),M.b).i==0||(!M.c&&(M.c=new Cn(br,M,5,8)),M.c).i==0)throw o=O0(F,Cd),w=Sde+o,k=w+VE,rt(new ad(k));return Jz(F,M),h5n(t,F,M),C=wit(t,F,M),C}function bwn(t,e){var n,r,s,o,h,d,w;for(s=Pt(Tr,Xr,25,t.e.a.c.length,15,1),h=new S(t.e.a);h.a<h.c.c.length;)o=u(J(h),121),s[o.d]+=o.b.a.c.length;for(d=UM(e);d.b!=0;)for(o=u(d.b==0?null:(Qn(d.b!=0),ch(d,d.a.a)),121),r=Kx(new S(o.g.a));r.Ob();)n=u(r.Pb(),213),w=n.e,w.e=b.Math.max(w.e,o.e+n.a),--s[w.d],s[w.d]==0&&hs(d,w,d.c.b,d.c)}function Mue(t){var e,n,r,s,o,h,d,w,k,C,M;for(n=_a,s=vi,d=new S(t.e.a);d.a<d.c.c.length;)o=u(J(d),121),s=b.Math.min(s,o.e),n=b.Math.max(n,o.e);for(e=Pt(Tr,Xr,25,n-s+1,15,1),h=new S(t.e.a);h.a<h.c.c.length;)o=u(J(h),121),o.e-=s,++e[o.e];if(r=0,t.k!=null)for(k=t.k,C=0,M=k.length;C<M&&(w=k[C],e[r++]+=w,e.length!=r);++C);return e}function Iue(t){switch(t.d){case 9:case 8:return!0;case 3:case 5:case 4:case 6:return!1;case 7:return u(O5t(t),19).a==t.o;case 1:case 2:{if(t.o==-2)return!1;switch(t.p){case 0:case 1:case 2:case 6:case 5:case 7:return Av(t.k,t.f);case 3:case 4:return t.j==t.e;default:return t.n==null?t.g==null:yi(t.n,t.g)}}default:return!1}}function Due(t){Sv(t,new w2(Ev(yv(kv(xv(new pg,V_),"ELK Fixed"),"Keeps the current layout as it is, without any automatic modification. Optional coordinates can be given for nodes and edge bend points."),new BL))),xe(t,V_,ww,EAt),xe(t,V_,uH,De(KS)),xe(t,V_,c8t,De(mAt)),xe(t,V_,L4,De(yAt)),xe(t,V_,w6,De(kAt)),xe(t,V_,fct,De(xAt))}function vq(t,e,n){var r,s,o,h,d;if(r=Sr(Ca(e0,Wd(Sr(Ca(e==null?0:Hi(e),n0)),15))),d=Sr(Ca(e0,Wd(Sr(Ca(n==null?0:Hi(n),n0)),15))),o=HC(t,e,r),o&&d==o.f&&fd(n,o.i))return n;if(h=GC(t,n,d),h)throw rt(new Pn("value already present: "+n));return s=new Xj(e,r,n,d),o?(v4(t,o),oD(t,s,o),o.e=null,o.c=null,o.i):(oD(t,s,null),Hse(t),null)}function vwn(t,e,n){var r,s,o,h,d,w,k,C,M,F,H,V;C=n.a.c,h=n.a.c+n.a.b,o=u(Jn(n.c,e),459),H=o.f,V=o.a,o.b?w=new $e(h,H):w=new $e(C,H),o.c?M=new $e(C,V):M=new $e(h,V),s=C,n.p||(s+=t.c),s+=n.F+n.v*t.b,k=new $e(s,H),F=new $e(s,V),zC(e.a,ct(ot(Us,1),te,8,0,[w,k])),d=n.d.a.gc()>1,d&&(r=new $e(s,n.b),ni(e.a,r)),zC(e.a,ct(ot(Us,1),te,8,0,[F,M]))}function aat(t,e,n){var r,s,o,h,d,w;if(e)if(n<=-1){if(r=yn(e.Tg(),-1-n),Et(r,99))return u(r,18);for(h=u(e.ah(r),153),d=0,w=h.gc();d<w;++d)if(Gt(h.jl(d))===Gt(t)&&(s=h.il(d),Et(s,99)&&(o=u(s,18),o.Bb&dc)))return o;throw rt(new Fo("The containment feature could not be located"))}else return no(u(yn(t.Tg(),n),18));else return null}function wwn(t){var e,n,r,s,o;for(r=t.length,e=new B9,o=0;o<r;)if(n=ba(t,o++),!(n==9||n==10||n==12||n==13||n==32)){if(n==35){for(;o<r&&(n=ba(t,o++),!(n==13||n==10)););continue}n==92&&o<r?(s=(Rr(o,t.length),t.charCodeAt(o)))==35||s==9||s==10||s==12||s==13||s==32?(m8(e,s&ms),++o):(e.a+="\\",m8(e,s&ms),++o):m8(e,n&ms)}return e.a}function mwn(t,e){var n,r,s;for(r=new S(e);r.a<r.c.c.length;)if(n=u(J(r),33),ln(t.a,n,n),ln(t.b,n,n),s=gy(n),s.c.length!=0)for(t.d&&t.d.lg(s),ln(t.a,n,(An(0,s.c.length),u(s.c[0],33))),ln(t.b,n,u(Fe(s,s.c.length-1),33));git(s).c.length!=0;)s=git(s),t.d&&t.d.lg(s),ln(t.a,n,(An(0,s.c.length),u(s.c[0],33))),ln(t.b,n,u(Fe(s,s.c.length-1),33))}function ywn(t){var e,n,r,s,o,h,d,w,k,C;for(n=0,d=new S(t.d);d.a<d.c.c.length;)h=u(J(d),101),h.i&&(h.i.c=n++);for(e=Xb(dl,[te,i0],[177,25],16,[n,n],2),C=t.d,s=0;s<C.c.length;s++)if(w=(An(s,C.c.length),u(C.c[s],101)),w.i)for(o=s+1;o<C.c.length;o++)k=(An(o,C.c.length),u(C.c[o],101)),k.i&&(r=s0n(w,k),e[w.i.c][k.i.c]=r,e[k.i.c][w.i.c]=r);return e}function G5t(t,e,n,r){var s,o,h;return h=new JHt(e,n),t.a?r?(s=u(Jn(t.b,e),283),++s.a,h.d=r.d,h.e=r.e,h.b=r,h.c=r,r.e?r.e.c=h:u(Jn(t.b,e),283).b=h,r.d?r.d.b=h:t.a=h,r.d=h,r.e=h):(t.e.b=h,h.d=t.e,t.e=h,s=u(Jn(t.b,e),283),s?(++s.a,o=s.c,o.c=h,h.e=o,s.c=h):(ki(t.b,e,s=new Iwt(h)),++t.c)):(t.a=t.e=h,ki(t.b,e,new Iwt(h)),++t.c),++t.d,h}function py(t,e){var n,r,s,o,h,d,w,k;for(n=new RegExp(e,"g"),w=Pt(Ae,te,2,0,6,1),r=0,k=t,o=null;;)if(d=n.exec(k),d==null||k==""){w[r]=k;break}else h=d.index,w[r]=k.substr(0,h),k=Dl(k,h+d[0].length,k.length),n.lastIndex=0,o==k&&(w[r]=k.substr(0,1),k=k.substr(1)),o=k,++r;if(t.length>0){for(s=w.length;s>0&&w[s-1]=="";)--s;s<w.length&&(w.length=s)}return w}function V5t(t,e){var n,r,s,o,h,d,w,k,C,M;for(M=So(e),k=null,s=!1,d=0,C=Lc(M.a).i;d<C;++d)h=u(ED(M,d,(o=u(St(Lc(M.a),d),87),w=o.c,Et(w,88)?u(w,26):(dn(),Wh))),26),n=V5t(t,h),n.dc()||(k?(s||(s=!0,k=new Nj(k)),k.Gc(n)):k=n);return r=spn(t,e),r.dc()?k||(vn(),vn(),io):k?(s||(k=new Nj(k)),k.Gc(r),k):r}function oat(t,e){var n,r,s,o,h,d,w,k,C,M;for(M=So(e),k=null,r=!1,d=0,C=Lc(M.a).i;d<C;++d)o=u(ED(M,d,(s=u(St(Lc(M.a),d),87),w=s.c,Et(w,88)?u(w,26):(dn(),Wh))),26),n=oat(t,o),n.dc()||(k?(r||(r=!0,k=new Nj(k)),k.Gc(n)):k=n);return h=Npn(t,e),h.dc()?k||(vn(),vn(),io):k?(r||(k=new Nj(k)),k.Gc(h),k):h}function wD(t,e,n){var r,s,o,h,d,w;if(Et(e,72))return Ba(t,e,n);for(d=null,o=null,r=u(t.g,119),h=0;h<t.i;++h)if(s=r[h],yi(e,s.dd())&&(o=s.ak(),Et(o,99)&&u(o,18).Bb&dc)){d=s;break}return d&&(ml(t.e)&&(w=o.$j()?zp(t,4,o,e,null,EE(t,o,e,Et(o,99)&&(u(o,18).Bb&Ya)!=0),!0):zp(t,o.Kj()?2:1,o,e,o.zj(),-1,!0),n?n.Ei(w):n=w),n=wD(t,d,n)),n}function xwn(t){var e,n,r,s;r=t.o,Bm(),t.A.dc()||yi(t.A,t7t)?s=r.a:(s=uD(t.f),t.A.Hc((_l(),eN))&&!t.B.Hc((cl(),eA))&&(s=b.Math.max(s,uD(u(go(t.p,(be(),Nn)),244))),s=b.Math.max(s,uD(u(go(t.p,mr),244)))),e=Ane(t),e&&(s=b.Math.max(s,e.a))),je(Re(t.e.yf().We((ci(),jV))))?r.a=b.Math.max(r.a,s):r.a=s,n=t.f.i,n.c=0,n.b=s,fat(t.f)}function kwn(t,e){var n,r,s,o,h,d,w,k,C;if(n=e.Hh(t.a),n&&(w=Br(Yf((!n.b&&(n.b=new yl((dn(),Qa),cc,n)),n.b),"memberTypes")),w!=null)){for(k=new le,o=py(w,"\\w"),h=0,d=o.length;h<d;++h)s=o[h],r=s.lastIndexOf("#"),C=r==-1?$2t(t,e.Aj(),s):r==0?pI(t,null,s.substr(1)):pI(t,s.substr(0,r),s.substr(r+1)),Et(C,148)&&ue(k,u(C,148));return k}return vn(),vn(),io}function Ewn(t,e,n){var r,s,o,h,d,w,k,C;for(wr(n,$fe,1),t.bf(e),o=0;t.df(o);){for(C=new S(e.e);C.a<C.c.c.length;)for(w=u(J(C),144),d=Bp(L1(ct(ot(B1,1),Ie,20,0,[e.e,e.d,e.b])));zr(d);)h=u(Lr(d),357),h!=w&&(s=t.af(h,w),s&&Li(w.a,s));for(k=new S(e.e);k.a<k.c.c.length;)w=u(J(k),144),r=w.a,Pae(r,-t.d,-t.d,t.d,t.d),Li(w.d,r),Gf(r);t.cf(),++o}or(n)}function Twn(t,e,n){var r,s,o,h;if(h=au(t.e.Tg(),e),r=u(t.g,119),to(),u(e,66).Oj()){for(o=0;o<t.i;++o)if(s=r[o],h.rl(s.ak())&&yi(s,n))return dy(t,o),!0}else if(n!=null){for(o=0;o<t.i;++o)if(s=r[o],h.rl(s.ak())&&yi(n,s.dd()))return dy(t,o),!0}else for(o=0;o<t.i;++o)if(s=r[o],h.rl(s.ak())&&s.dd()==null)return dy(t,o),!0;return!1}function Cwn(t,e){var n,r,s,o,h;for(t.c==null||t.c.length<e.c.length?t.c=Pt(dl,i0,25,e.c.length,16,1):P9(t.c),t.a=new le,r=0,h=new S(e);h.a<h.c.c.length;)s=u(J(h),10),s.p=r++;for(n=new Qi,o=new S(e);o.a<o.c.c.length;)s=u(J(o),10),t.c[s.p]||(yoe(t,s),n.b==0||(Qn(n.b!=0),u(n.a.a.c,15)).gc()<t.a.c.length?qVt(n,t.a):Kb(n,t.a),t.a=new le);return n}function _wn(t,e,n,r){var s,o,h,d,w,k,C,M,F,H,V;for(h=u(St(e,0),33),yu(h,0),xu(h,0),F=new le,F.c[F.c.length]=h,d=h,o=new Tnt(t.a,h.g,h.f,(yE(),HS)),H=1;H<e.i;H++)V=u(St(e,H),33),w=vat(t,n5,V,d,o,F,n),k=vat(t,R6,V,d,o,F,n),C=vat(t,qS,V,d,o,F,n),M=vat(t,zS,V,d,o,F,n),s=jyn(t,w,k,C,M,V,d,r),yu(V,s.d),xu(V,s.e),Gk(s,HS),o=s,d=V,F.c[F.c.length]=V;return o}function Oue(t){Sv(t,new w2(Ev(yv(kv(xv(new pg,$E),"ELK SPOrE Overlap Removal"),'A node overlap removal algorithm proposed by Nachmanson et al. in "Node overlap removal by growing a tree".'),new cZ))),xe(t,$E,_ct,De(gSt)),xe(t,$E,ww,dSt),xe(t,$E,ky,8),xe(t,$E,Lct,De(C3e)),xe(t,$E,i8t,De(hSt)),xe(t,$E,s8t,De(fSt)),xe(t,$E,KD,(Fn(),!1))}function Nue(t,e,n,r){var s,o,h,d,w,k,C,M,F,H;for(h=Fm(e.c,n,r),M=new S(e.a);M.a<M.c.c.length;){for(C=u(J(M),10),Li(C.n,h),H=new S(C.j);H.a<H.c.c.length;)for(F=u(J(H),11),o=new S(F.g);o.a<o.c.c.length;)for(s=u(J(o),17),Jm(s.a,h),d=u(Q(s,(Te(),_o)),74),d&&Jm(d,h),k=new S(s.b);k.a<k.c.c.length;)w=u(J(k),70),Li(w.n,h);ue(t.a,C),C.a=t}}function Swn(t,e){var n,r,s,o,h;if(wr(e,"Node and Port Label Placement and Node Sizing",1),bUt((z9(),new trt(t,!0,!0,new NY))),u(Q(t,(se(),Gc)),21).Hc((oo(),bh)))for(o=u(Q(t,(Te(),qy)),21),s=o.Hc((Qu(),tN)),h=je(Re(Q(t,lCt))),r=new S(t.b);r.a<r.c.c.length;)n=u(J(r),29),us(Ri(new Tn(null,new _n(n.a,16)),new jd),new wKt(o,s,h));or(e)}function Awn(t,e){var n,r,s,o,h,d;if(n=e.Hh(t.a),n&&(d=Br(Yf((!n.b&&(n.b=new yl((dn(),Qa),cc,n)),n.b),mH)),d!=null))switch(s=dj(d,Eu(35)),r=e.Hj(),s==-1?(h=kC(t,Fl(r)),o=d):s==0?(h=null,o=d.substr(1)):(h=d.substr(0,s),o=d.substr(s+1)),$v(Eo(t,e))){case 2:case 3:return Fcn(t,r,h,o);case 0:case 4:case 5:case 6:return Bcn(t,r,h,o)}return null}function U5t(t,e,n){var r,s,o,h,d;if(h=(to(),u(e,66).Oj()),V0(t.e,e)){if(e.hi()&&mq(t,e,n,Et(e,99)&&(u(e,18).Bb&Ya)!=0))return!1}else for(d=au(t.e.Tg(),e),r=u(t.g,119),o=0;o<t.i;++o)if(s=r[o],d.rl(s.ak()))return(h?yi(s,n):n==null?s.dd()==null:yi(n,s.dd()))?!1:(u(u4(t,o,h?u(n,72):Yd(e,n)),72),!0);return Mr(t,h?u(n,72):Yd(e,n))}function mD(t){var e,n,r,s,o,h,d,w;if(t.d)throw rt(new Fo((L0(Zut),bot+Zut.k+vot)));for(t.c==(ao(),c0)&&T4(t,jh),n=new S(t.a.a);n.a<n.c.c.length;)e=u(J(n),189),e.e=0;for(h=new S(t.a.b);h.a<h.c.c.length;)for(o=u(J(h),81),o.o=Ts,s=o.f.Kc();s.Ob();)r=u(s.Pb(),81),++r.d.e;for(x4n(t),w=new S(t.a.b);w.a<w.c.c.length;)d=u(J(w),81),d.k=!0;return t}function Lwn(t,e){var n,r,s,o,h,d,w,k;for(d=new Gae(t),n=new Qi,hs(n,e,n.c.b,n.c);n.b!=0;){for(r=u(n.b==0?null:(Qn(n.b!=0),ch(n,n.a.a)),113),r.d.p=1,h=new S(r.e);h.a<h.c.c.length;)s=u(J(h),409),hae(d,s),k=s.d,k.d.p==0&&hs(n,k,n.c.b,n.c);for(o=new S(r.b);o.a<o.c.c.length;)s=u(J(o),409),hae(d,s),w=s.c,w.d.p==0&&hs(n,w,n.c.b,n.c)}return d}function Pue(t){var e,n,r,s,o;if(r=Xt(ye(qe(t,(ci(),Q3e)))),r!=1)for(sj(t,r*t.g,r*t.f),n=GYe(etn((!t.c&&(t.c=new he(fl,t,9,9)),t.c),new NZ)),o=Bp(L1(ct(ot(B1,1),Ie,20,0,[(!t.n&&(t.n=new he(qo,t,1,7)),t.n),(!t.c&&(t.c=new he(fl,t,9,9)),t.c),n])));zr(o);)s=u(Lr(o),470),s.Gg(r*s.Dg(),r*s.Eg()),s.Fg(r*s.Cg(),r*s.Bg()),e=u(s.We(JSt),8),e&&(e.a*=r,e.b*=r)}function Mwn(t,e,n,r,s){var o,h,d,w,k,C,M,F;for(h=new S(t.b);h.a<h.c.c.length;)for(o=u(J(h),29),F=sI(o.a),k=F,C=0,M=k.length;C<M;++C)switch(w=k[C],u(Q(w,(Te(),cu)),163).g){case 1:rvn(w),ko(w,e),nse(w,!0,r);break;case 3:q2n(w),ko(w,n),nse(w,!1,s)}for(d=new ha(t.b,0);d.b<d.d.gc();)(Qn(d.b<d.d.gc()),u(d.d.Xb(d.c=d.b++),29)).a.c.length==0&&El(d)}function Iwn(t,e){var n,r,s,o,h,d,w;if(n=e.Hh(t.a),n&&(w=Br(Yf((!n.b&&(n.b=new yl((dn(),Qa),cc,n)),n.b),B8t)),w!=null)){for(r=new le,o=py(w,"\\w"),h=0,d=o.length;h<d;++h)s=o[h],hn(s,"##other")?ue(r,"!##"+kC(t,Fl(e.Hj()))):hn(s,"##local")?r.c[r.c.length]=null:hn(s,tO)?ue(r,kC(t,Fl(e.Hj()))):r.c[r.c.length]=s;return r}return vn(),vn(),io}function Dwn(t,e){var n,r,s,o;return n=new tf,r=u(Pl(pu(new Tn(null,new _n(t.f,16)),n),Ym(new cn,new li,new di,new Ee,ct(ot(ll,1),ae,132,0,[(I1(),Ly),Gl]))),21),s=r.gc(),r=u(Pl(pu(new Tn(null,new _n(e.f,16)),n),Ym(new cn,new li,new di,new Ee,ct(ot(ll,1),ae,132,0,[Ly,Gl]))),21),o=r.gc(),s=s==1?1:0,o=o==1?1:0,s<o?-1:s==o?0:1}function Own(t){var e,n,r,s,o,h,d,w,k,C,M,F;for(d=t.i,s=je(Re(Q(d,(Te(),$y)))),C=0,r=0,k=new S(t.g);k.a<k.c.c.length;)w=u(J(k),17),h=Va(w),o=h&&s&&je(Re(Q(w,P2))),F=w.d.i,h&&o?++r:h&&!o?++C:Fa(F).e==d?++r:++C;for(n=new S(t.e);n.a<n.c.c.length;)e=u(J(n),17),h=Va(e),o=h&&s&&je(Re(Q(e,P2))),M=e.c.i,h&&o?++C:h&&!o?++r:Fa(M).e==d?++C:++r;return C-r}function x4(t,e,n,r){this.e=t,this.k=u(Q(t,(se(),Y4)),304),this.g=Pt(o0,zg,10,e,0,1),this.b=Pt(ca,te,333,e,7,1),this.a=Pt(o0,zg,10,e,0,1),this.d=Pt(ca,te,333,e,7,1),this.j=Pt(o0,zg,10,e,0,1),this.i=Pt(ca,te,333,e,7,1),this.p=Pt(ca,te,333,e,7,1),this.n=Pt(Bs,te,476,e,8,1),yM(this.n,(Fn(),!1)),this.f=Pt(Bs,te,476,e,8,1),yM(this.f,!0),this.o=n,this.c=r}function Fue(t,e){var n,r,s,o,h,d;if(!e.dc())if(u(e.Xb(0),286).d==(i6(),Oy))h1n(t,e);else for(r=e.Kc();r.Ob();){switch(n=u(r.Pb(),286),n.d.g){case 5:pE(t,n,xln(t,n));break;case 0:pE(t,n,(h=n.f-n.c+1,d=(h-1)/2|0,n.c+d));break;case 4:pE(t,n,Pan(t,n));break;case 2:cie(n),pE(t,n,(o=b4t(n),o?n.c:n.f));break;case 1:cie(n),pE(t,n,(s=b4t(n),s?n.f:n.c))}c0n(n.a)}}function Nwn(t,e){var n,r,s,o,h,d,w;if(!e.e){for(e.e=!0,r=e.d.a.ec().Kc();r.Ob();){if(n=u(r.Pb(),17),e.o&&e.d.a.gc()<=1){h=e.a.c,d=e.a.c+e.a.b,w=new $e(h+(d-h)/2,e.b),ni(u(e.d.a.ec().Kc().Pb(),17).a,w);continue}if(s=u(Jn(e.c,n),459),s.b||s.c){vwn(t,n,e);continue}o=t.d==(tE(),IS)&&(s.d||s.e)&&Apn(t,e)&&e.d.a.gc()<=1,o?t4n(n,e):Pvn(t,n,e)}e.k&&va(e.d,new E3)}}function W5t(t,e,n,r,s,o){var h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t;for(F=o,d=(r+s)/2+F,tt=n*b.Math.cos(d),gt=n*b.Math.sin(d),Lt=tt-e.g/2,_t=gt-e.f/2,yu(e,Lt),xu(e,_t),M=t.a.jg(e),Y=2*b.Math.acos(n/n+t.c),Y<s-r?(H=Y/M,h=(r+s-Y)/2):(H=(s-r)/M,h=r),V=gy(e),t.e&&(t.e.kg(t.d),t.e.lg(V)),k=new S(V);k.a<k.c.c.length;)w=u(J(k),33),C=t.a.jg(w),W5t(t,w,n+t.c,h,h+H*C,o),h+=H*C}function Pwn(t,e,n){var r;switch(r=n.q.getMonth(),e){case 5:Vr(t,ct(ot(Ae,1),te,2,6,["J","F","M","A","M","J","J","A","S","O","N","D"])[r]);break;case 4:Vr(t,ct(ot(Ae,1),te,2,6,[$at,zat,qat,Hat,l6,Gat,Vat,Uat,Wat,Kat,Yat,Xat])[r]);break;case 3:Vr(t,ct(ot(Ae,1),te,2,6,["Jan","Feb","Mar","Apr",l6,"Jun","Jul","Aug","Sep","Oct","Nov","Dec"])[r]);break;default:Xd(t,r+1,e)}}function cat(t,e){var n,r,s,o,h;if(wr(e,"Network simplex",1),t.e.a.c.length<1){or(e);return}for(o=new S(t.e.a);o.a<o.c.c.length;)s=u(J(o),121),s.e=0;for(h=t.e.a.c.length>=40,h&&kmn(t),_yn(t),svn(t),n=Yre(t),r=0;n&&r<t.f;)Rwn(t,n,ibn(t,n)),n=Yre(t),++r;h&&Adn(t),t.a?wbn(t,Mue(t)):Mue(t),t.b=null,t.d=null,t.p=null,t.c=null,t.g=null,t.i=null,t.n=null,t.o=null,or(e)}function Fwn(t,e,n,r){var s,o,h,d,w,k,C,M,F;for(w=new $e(n,r),na(w,u(Q(e,(Gp(),lS)),8)),F=new S(e.e);F.a<F.c.c.length;)M=u(J(F),144),Li(M.d,w),ue(t.e,M);for(d=new S(e.c);d.a<d.c.c.length;){for(h=u(J(d),282),o=new S(h.a);o.a<o.c.c.length;)s=u(J(o),559),Li(s.d,w);ue(t.c,h)}for(C=new S(e.d);C.a<C.c.c.length;)k=u(J(C),447),Li(k.d,w),ue(t.d,k)}function K5t(t,e){var n,r,s,o,h,d,w,k;for(w=new S(e.j);w.a<w.c.c.length;)for(d=u(J(w),11),s=new S1(d.b);Vo(s.a)||Vo(s.b);)r=u(Vo(s.a)?J(s.a):J(s.b),17),n=r.c==d?r.d:r.c,o=n.i,e!=o&&(k=u(Q(r,(Te(),w7)),19).a,k<0&&(k=0),h=o.p,t.b[h]==0&&(r.d==n?(t.a[h]-=k+1,t.a[h]<=0&&t.c[h]>0&&ni(t.f,o)):(t.c[h]-=k+1,t.c[h]<=0&&t.a[h]>0&&ni(t.e,o))))}function Bwn(t){var e,n,r,s,o,h,d,w,k;for(d=new Lp(u(Ar(new Fd),62)),k=Ts,n=new S(t.d);n.a<n.c.c.length;){for(e=u(J(n),222),k=e.c.c;d.a.c!=0&&(w=u(hen(pan(d.a)),222),w.c.c+w.c.b<k);)IC(d.a,w)!=null;for(h=(s=new vC(new gC(new y(d.a).a).b),new g(s));mM(h.a.a);)o=(r=wj(h.a),u(r.cd(),222)),ni(o.b,e),ni(e.b,o);pz(d.a,e,(Fn(),I2))==null}}function Bue(t,e,n){var r,s,o,h,d,w,k,C,M;for(o=new Yc(e.c.length),k=new S(e);k.a<k.c.c.length;)h=u(J(k),10),ue(o,t.b[h.c.p][h.p]);for(Uyn(t,o,n),M=null;M=W3n(o);)Bmn(t,u(M.a,233),u(M.b,233),o);for(e.c=Pt(Xn,Ie,1,0,5,1),s=new S(o);s.a<s.c.c.length;)for(r=u(J(s),233),d=r.d,w=0,C=d.length;w<C;++w)h=d[w],e.c[e.c.length]=h,t.a[h.c.p][h.p].a=x1(r.g,r.d[0]).a}function Y5t(t,e){var n,r,s,o;if(0<(Et(t,14)?u(t,14).gc():N0(t.Kc()))){if(s=e,1<s){for(--s,o=new FQ,r=t.Kc();r.Ob();)n=u(r.Pb(),86),o=L1(ct(ot(B1,1),Ie,20,0,[o,new Cp(n)]));return Y5t(o,s)}if(s<0){for(o=new BQ,r=t.Kc();r.Ob();)n=u(r.Pb(),86),o=L1(ct(ot(B1,1),Ie,20,0,[o,new Cp(n)]));if(0<(Et(o,14)?u(o,14).gc():N0(o.Kc())))return Y5t(o,s)}}return u(lj(t.Kc()),86)}function cl(){cl=Z,M7=new z3("DEFAULT_MINIMUM_SIZE",0),iN=new z3("MINIMUM_SIZE_ACCOUNTS_FOR_PADDING",1),VV=new z3("COMPUTE_PADDING",2),eA=new z3("OUTSIDE_NODE_LABELS_OVERHANG",3),UV=new z3("PORTS_OVERHANG",4),KV=new z3("UNIFORM_PORT_SPACING",5),WV=new z3("SPACE_EFFICIENT_PORT_LABELS",6),vft=new z3("FORCE_TABULAR_NODE_LABELS",7),rN=new z3("ASYMMETRICAL",8)}function uat(t,e){var n,r,s,o,h,d,w,k;if(e){if(n=(o=e.Tg(),o?Fl(o).Nh().Jh(o):null),n){for(p2(t,e,n),s=e.Tg(),w=0,k=(s.i==null&&pd(s),s.i).length;w<k;++w)d=(r=(s.i==null&&pd(s),s.i),w>=0&&w<r.length?r[w]:null),d.Ij()&&!d.Jj()&&(Et(d,322)?Whn(t,u(d,34),e,n):(h=u(d,18),h.Bb&dc&&rdn(t,h,e,n)));e.kh()&&u(n,49).vh(u(e,49).qh())}return n}else return null}function Rwn(t,e,n){var r,s,o;if(!e.f)throw rt(new Pn("Given leave edge is no tree edge."));if(n.f)throw rt(new Pn("Given enter edge is a tree edge already."));for(e.f=!1,f2t(t.p,e),n.f=!0,Ns(t.p,n),r=n.e.e-n.d.e-n.a,$st(t,n.e,e)||(r=-r),o=new S(t.e.a);o.a<o.c.c.length;)s=u(J(o),121),$st(t,s,e)||(s.e+=r);t.j=1,P9(t.c),J4t(t,u(J(new S(t.e.a)),121)),Vle(t)}function Rue(t,e){var n,r,s,o,h,d;if(d=u(Q(e,(Te(),os)),98),d==(oa(),h0)||d==Vc)for(s=new $e(e.f.a+e.d.b+e.d.c,e.f.b+e.d.d+e.d.a).b,h=new S(t.a);h.a<h.c.c.length;)o=u(J(h),10),o.k==(Gn(),xs)&&(n=u(Q(o,(se(),oc)),61),!(n!=(be(),Hn)&&n!=Bn)&&(r=Xt(ye(Q(o,Dw))),d==h0&&(r*=s),o.n.b=r-u(Q(o,Pw),8).b,fz(o,!1,!0)))}function jue(t,e,n,r){var s,o,h,d,w,k,C,M,F,H;if(ron(t,e,n),o=e[n],H=r?(be(),Bn):(be(),Hn),RXe(e.length,n,r)){for(s=e[r?n-1:n+1],mmt(t,s,r?(so(),eu):(so(),Ju)),w=o,C=0,F=w.length;C<F;++C)h=w[C],R3t(t,h,H);for(mmt(t,o,r?(so(),Ju):(so(),eu)),d=s,k=0,M=d.length;k<M;++k)h=d[k],h.e||R3t(t,h,HI(H))}else for(d=o,k=0,M=d.length;k<M;++k)h=d[k],R3t(t,h,H);return!1}function jwn(t,e,n,r){var s,o,h,d,w,k,C;w=Yo(e,n),(n==(be(),mr)||n==Bn)&&(w=Et(w,152)?Vx(u(w,152)):Et(w,131)?u(w,131).a:Et(w,54)?new mv(w):new Mm(w)),h=!1;do for(s=!1,o=0;o<w.gc()-1;o++)k=u(w.Xb(o),11),d=u(w.Xb(o+1),11),b0n(t,k,d,r)&&(h=!0,xrt(t.a,u(w.Xb(o),11),u(w.Xb(o+1),11)),C=u(w.Xb(o+1),11),w._c(o+1,u(w.Xb(o),11)),w._c(o,C),s=!0);while(s);return h}function $wn(t,e,n){var r,s,o,h,d,w,k,C,M,F,H,V;if(ml(t.e)){if(e!=n&&(s=u(t.g,119),H=s[n],h=H.ak(),V0(t.e,h))){for(V=au(t.e.Tg(),h),w=-1,d=-1,r=0,k=0,M=e>n?e:n;k<=M;++k)k==n?d=r++:(o=s[k],C=V.rl(o.ak()),k==e&&(w=k==M&&!C?r-1:r),C&&++r);return F=u(t_(t,e,n),72),d!=w&&Kk(t,new gI(t.e,7,h,de(d),H.dd(),w)),F}}else return u(qst(t,e,n),72);return u(t_(t,e,n),72)}function zwn(t,e){var n,r,s,o,h,d,w;for(wr(e,"Port order processing",1),w=u(Q(t,(Te(),hCt)),421),r=new S(t.b);r.a<r.c.c.length;)for(n=u(J(r),29),o=new S(n.a);o.a<o.c.c.length;)s=u(J(o),10),h=u(Q(s,os),98),d=s.j,h==(oa(),G2)||h==h0||h==Vc?(vn(),Xs(d,vTt)):h!=H1&&h!=yb&&(vn(),Xs(d,Wbe),nfn(d),w==(yI(),ght)&&Xs(d,Ube)),s.i=!0,X4t(s);or(e)}function qwn(t){var e,n,r,s,o,h,d,w;for(w=new Cr,e=new Gtt,h=t.Kc();h.Ob();)s=u(h.Pb(),10),d=Dv(bM(new Ub,s),e),su(w.f,s,d);for(o=t.Kc();o.Ob();)for(s=u(o.Pb(),10),r=new ar(lr(Ms(s).a.Kc(),new z));zr(r);)n=u(Lr(r),17),!Va(n)&&vf(of(af(sf(cf(new Eh,b.Math.max(1,u(Q(n,(Te(),fCt)),19).a)),1),u(Jn(w,n.c.i),121)),u(Jn(w,n.d.i),121)));return e}function $ue(){$ue=Z,Ime=bi(new Hs,(Wa(),qc),(ro(),nTt)),QCt=bi(new Hs,ou,fG),Ome=Ku(bi(new Hs,ou,yG),Io,mG),Mme=Ku(bi(bi(new Hs,ou,Q7t),qc,Z7t),Io,J7t),Nme=aw(aw(OR(Ku(bi(new Hs,Ad,TG),Io,EG),qc),kG),CG),Dme=Ku(new Hs,Io,rTt),Ame=Ku(bi(bi(bi(new Hs,lb,gG),qc,bG),qc,e7),Io,pG),Lme=Ku(bi(bi(new Hs,qc,e7),qc,hG),Io,lG)}function Hwn(t,e,n,r,s,o){var h,d,w,k,C,M,F;for(k=ere(e)-ere(t),h=Mae(e,k),w=ru(0,0,0);k>=0&&(d=Gfn(t,h),!(d&&(k<22?w.l|=1<<k:k<44?w.m|=1<<k-22:w.h|=1<<k-44,t.l==0&&t.m==0&&t.h==0)));)C=h.m,M=h.h,F=h.l,h.h=M>>>1,h.m=C>>>1|(M&1)<<21,h.l=F>>>1|(C&1)<<21,--k;return n&&vit(w),o&&(r?(ob=Y8(t),s&&(ob=Bne(ob,(N8(),J8t)))):ob=ru(t.l,t.m,t.h)),w}function Gwn(t,e){var n,r,s,o,h,d,w,k,C,M;for(k=t.e[e.c.p][e.p]+1,w=e.c.a.c.length+1,d=new S(t.a);d.a<d.c.c.length;){for(h=u(J(d),11),M=0,o=0,s=Bp(L1(ct(ot(B1,1),Ie,20,0,[new Ys(h),new Er(h)])));zr(s);)r=u(Lr(s),11),r.i.c==e.c&&(M+=DXe(t,r.i)+1,++o);n=M/o,C=h.j,C==(be(),Hn)?n<k?t.f[h.p]=t.c-n:t.f[h.p]=t.b+(w-n):C==Bn&&(n<k?t.f[h.p]=t.b+n:t.f[h.p]=t.c-(w-n))}}function $l(t,e,n){var r,s,o,h,d;if(t==null)throw rt(new od(Tu));for(o=t.length,h=o>0&&(Rr(0,t.length),t.charCodeAt(0)==45||(Rr(0,t.length),t.charCodeAt(0)==43))?1:0,r=h;r<o;r++)if(Mie((Rr(r,t.length),t.charCodeAt(r)))==-1)throw rt(new od(vw+t+'"'));if(d=parseInt(t,10),s=d<e,isNaN(d))throw rt(new od(vw+t+'"'));if(s||d>n)throw rt(new od(vw+t+'"'));return d}function Vwn(t){var e,n,r,s,o,h,d;for(h=new Qi,o=new S(t.a);o.a<o.c.c.length;)s=u(J(o),112),nM(s,s.f.c.length),x9(s,s.k.c.length),s.i==0&&(s.o=0,hs(h,s,h.c.b,h.c));for(;h.b!=0;)for(s=u(h.b==0?null:(Qn(h.b!=0),ch(h,h.a.a)),112),r=s.o+1,n=new S(s.f);n.a<n.c.c.length;)e=u(J(n),129),d=e.a,YB(d,b.Math.max(d.o,r)),x9(d,d.i-1),d.i==0&&hs(h,d,h.c.b,h.c)}function Uwn(t){var e,n,r,s,o,h,d,w;for(h=new S(t);h.a<h.c.c.length;){for(o=u(J(h),79),r=Mo(u(St((!o.b&&(o.b=new Cn(br,o,4,7)),o.b),0),82)),d=r.i,w=r.j,s=u(St((!o.a&&(o.a=new he(Zi,o,6,6)),o.a),0),202),oj(s,s.j+d,s.k+w),aj(s,s.b+d,s.c+w),n=new er((!s.a&&(s.a=new Ss(Hh,s,5)),s.a));n.e!=n.i.gc();)e=u(dr(n),469),n2t(e,e.a+d,e.b+w);ayt(u(qe(o,(ci(),i5)),74),d,w)}}function kE(t){var e;switch(t){case 100:return C4(iS,!0);case 68:return C4(iS,!1);case 119:return C4(out,!0);case 87:return C4(out,!1);case 115:return C4(cut,!0);case 83:return C4(cut,!1);case 99:return C4(uut,!0);case 67:return C4(uut,!1);case 105:return C4(lut,!0);case 73:return C4(lut,!1);default:throw rt(new Go((e=t,tge+e.toString(16))))}}function Wwn(t){var e,n,r,s,o;switch(s=u(Fe(t.a,0),10),e=new H0(t),ue(t.a,e),e.o.a=b.Math.max(1,s.o.a),e.o.b=b.Math.max(1,s.o.b),e.n.a=s.n.a,e.n.b=s.n.b,u(Q(s,(se(),oc)),61).g){case 4:e.n.a+=2;break;case 1:e.n.b+=2;break;case 2:e.n.a-=2;break;case 3:e.n.b-=2}return r=new Mc,Uo(r,e),n=new zv,o=u(Fe(s.j,0),11),Da(n,o),sa(n,r),Li(Gf(r.n),o.n),Li(Gf(r.a),o.a),e}function zue(t,e,n,r,s){n&&(!r||(t.c-t.b&t.a.length-1)>1)&&e==1&&u(t.a[t.b],10).k==(Gn(),Sl)?c6(u(t.a[t.b],10),(jl(),u0)):r&&(!n||(t.c-t.b&t.a.length-1)>1)&&e==1&&u(t.a[t.c-1&t.a.length-1],10).k==(Gn(),Sl)?c6(u(t.a[t.c-1&t.a.length-1],10),(jl(),wb)):(t.c-t.b&t.a.length-1)==2?(c6(u(KC(t),10),(jl(),u0)),c6(u(KC(t),10),wb)):jbn(t,s),rmt(t)}function Kwn(t,e,n){var r,s,o,h,d;for(o=0,s=new er((!t.a&&(t.a=new he(ns,t,10,11)),t.a));s.e!=s.i.gc();)r=u(dr(s),33),h="",(!r.n&&(r.n=new he(qo,r,1,7)),r.n).i==0||(h=u(St((!r.n&&(r.n=new he(qo,r,1,7)),r.n),0),137).a),d=new yit(o++,e,h),Lo(d,r),Jt(d,(fc(),jS),r),d.e.b=r.j+r.f/2,d.f.a=b.Math.max(r.g,1),d.e.a=r.i+r.g/2,d.f.b=b.Math.max(r.f,1),ni(e.b,d),su(n.f,r,d)}function Ywn(t){var e,n,r,s,o;r=u(Q(t,(se(),_i)),33),o=u(qe(r,(Te(),F2)),174).Hc((_l(),V2)),t.e||(s=u(Q(t,Gc),21),e=new $e(t.f.a+t.d.b+t.d.c,t.f.b+t.d.d+t.d.a),s.Hc((oo(),bh))?(bo(r,os,(oa(),Vc)),gw(r,e.a,e.b,!1,!0)):je(Re(qe(r,Zlt)))||gw(r,e.a,e.b,!0,!0)),o?bo(r,F2,un(V2)):bo(r,F2,(n=u(Hf(tA),9),new rh(n,u(uf(n,n.length),9),0)))}function X5t(t,e,n){var r,s,o,h;if(e[0]>=t.length)return n.o=0,!0;switch(ba(t,e[0])){case 43:s=1;break;case 45:s=-1;break;default:return n.o=0,!0}if(++e[0],o=e[0],h=rq(t,e),h==0&&e[0]==o)return!1;if(e[0]<t.length&&ba(t,e[0])==58){if(r=h*60,++e[0],o=e[0],h=rq(t,e),h==0&&e[0]==o)return!1;r+=h}else r=h,r<24&&e[0]-o<=2?r*=60:r=r%100+(r/100|0)*60;return r*=s,n.o=-r,!0}function Xwn(t){var e,n,r,s,o,h,d,w,k;for(h=new le,r=new ar(lr(Ms(t.b).a.Kc(),new z));zr(r);)n=u(Lr(r),17),Va(n)&&ue(h,new AJt(n,dte(t,n.c),dte(t,n.d)));for(k=(o=new b1(t.e).a.vc().Kc(),new v1(o));k.a.Ob();)d=(e=u(k.a.Pb(),42),u(e.dd(),113)),d.d.p=0;for(w=(s=new b1(t.e).a.vc().Kc(),new v1(s));w.a.Ob();)d=(e=u(w.a.Pb(),42),u(e.dd(),113)),d.d.p==0&&ue(t.d,Lwn(t,d))}function Qwn(t){var e,n,r,s,o,h,d;for(o=k1(t),s=new er((!t.e&&(t.e=new Cn(Ws,t,7,4)),t.e));s.e!=s.i.gc();)if(r=u(dr(s),79),d=Mo(u(St((!r.c&&(r.c=new Cn(br,r,5,8)),r.c),0),82)),!Zm(d,o))return!0;for(n=new er((!t.d&&(t.d=new Cn(Ws,t,8,5)),t.d));n.e!=n.i.gc();)if(e=u(dr(n),79),h=Mo(u(St((!e.b&&(e.b=new Cn(br,e,4,7)),e.b),0),82)),!Zm(h,o))return!0;return!1}function Zwn(t){var e,n,r,s,o,h,d,w;for(w=new Du,e=ei(t,0),d=null,n=u(ti(e),8),s=u(ti(e),8);e.b!=e.d.c;)d=n,n=s,s=u(ti(e),8),o=aee(na(new $e(d.a,d.b),n)),h=aee(na(new $e(s.a,s.b),n)),r=10,r=b.Math.min(r,b.Math.abs(o.a+o.b)/2),r=b.Math.min(r,b.Math.abs(h.a+h.b)/2),o.a=KM(o.a)*r,o.b=KM(o.b)*r,h.a=KM(h.a)*r,h.b=KM(h.b)*r,ni(w,Li(o,n)),ni(w,Li(h,n));return w}function zl(t,e,n,r){var s,o,h,d,w;return h=t.eh(),w=t.Zg(),s=null,w?e&&!(aat(t,e,n).Bb&Ya)?(r=Ba(w.Vk(),t,r),t.uh(null),s=e.fh()):w=null:(h&&(w=h.fh()),e&&(s=e.fh())),w!=s&&w&&w.Zk(t),d=t.Vg(),t.Rg(e,n),w!=s&&s&&s.Yk(t),t.Lg()&&t.Mg()&&(h&&d>=0&&d!=n&&(o=new Qs(t,1,d,h,null),r?r.Ei(o):r=o),n>=0&&(o=new Qs(t,1,n,d==n?h:null,e),r?r.Ei(o):r=o)),r}function que(t){var e,n,r;if(t.b==null){if(r=new xg,t.i!=null&&(fo(r,t.i),r.a+=":"),t.f&256){for(t.f&256&&t.a!=null&&(hnn(t.i)||(r.a+="//"),fo(r,t.a)),t.d!=null&&(r.a+="/",fo(r,t.d)),t.f&16&&(r.a+="/"),e=0,n=t.j.length;e<n;e++)e!=0&&(r.a+="/"),fo(r,t.j[e]);t.g!=null&&(r.a+="?",fo(r,t.g))}else fo(r,t.a);t.e!=null&&(r.a+="#",fo(r,t.e)),t.b=r.a}return t.b}function Jwn(t,e){var n,r,s,o,h,d;for(s=new S(e.a);s.a<s.c.c.length;)r=u(J(s),10),o=Q(r,(se(),_i)),Et(o,11)&&(h=u(o,11),d=ole(e,r,h.o.a,h.o.b),h.n.a=d.a,h.n.b=d.b,Fs(h,u(Q(r,oc),61)));n=new $e(e.f.a+e.d.b+e.d.c,e.f.b+e.d.d+e.d.a),u(Q(e,(se(),Gc)),21).Hc((oo(),bh))?(Jt(t,(Te(),os),(oa(),Vc)),u(Q(Fa(t),Gc),21).Fc(f7),Gle(t,n,!1)):Gle(t,n,!0)}function tmn(t,e,n){var r,s,o,h,d,w;if(wr(n,"Minimize Crossings "+t.a,1),r=e.b.c.length==0||!j9(Ri(new Tn(null,new _n(e.b,16)),new Zt(new Ek))).sd((Wb(),JE)),w=e.b.c.length==1&&u(Fe(e.b,0),29).a.c.length==1,o=Gt(Q(e,(Te(),jy)))===Gt(($0(),Zg)),r||w&&!o){or(n);return}s=X2n(t,e),h=(d=u(Qf(s,0),214),d.c.Rf()?d.c.Lf()?new f$t(t):new d$t(t):new h$t(t)),Qcn(s,h),Eun(t),or(n)}function emn(t,e,n,r){var s,o,h,d,w;if(w=Sr(Ca(e0,Wd(Sr(Ca(e==null?0:Hi(e),n0)),15))),s=Sr(Ca(e0,Wd(Sr(Ca(n==null?0:Hi(n),n0)),15))),d=GC(t,e,w),h=HC(t,n,s),d&&s==d.a&&fd(n,d.g))return n;if(h&&!r)throw rt(new Pn("key already present: "+n));return d&&v4(t,d),h&&v4(t,h),o=new Xj(n,s,e,w),oD(t,o,h),h&&(h.e=null,h.c=null),d&&(d.e=null,d.c=null),Hse(t),d?d.g:null}function Hue(t,e,n){var r,s,o,h,d;for(o=0;o<e;o++){for(r=0,d=o+1;d<e;d++)r=Oa(Oa(Ca(Ps(t[o],co),Ps(t[d],co)),Ps(n[o+d],co)),Ps(Sr(r),co)),n[o+d]=Sr(r),r=zm(r,32);n[o+e]=Sr(r)}for(Don(n,n,e<<1),r=0,s=0,h=0;s<e;++s,h++)r=Oa(Oa(Ca(Ps(t[s],co),Ps(t[s],co)),Ps(n[h],co)),Ps(Sr(r),co)),n[h]=Sr(r),r=zm(r,32),++h,r=Oa(r,Ps(n[h],co)),n[h]=Sr(r),r=zm(r,32);return n}function Gue(t,e,n){var r,s,o,h,d,w,k,C;if(!S8(e)){for(w=Xt(ye(iy(n.c,(Te(),_S)))),k=u(iy(n.c,LO),142),!k&&(k=new M9),r=n.a,s=null,d=e.Kc();d.Ob();)h=u(d.Pb(),11),C=0,s?(C=w,C+=s.o.b):C=k.d,o=Dv(bM(new Ub,h),t.f),ki(t.k,h,o),vf(of(af(sf(cf(new Eh,0),ps(b.Math.ceil(C))),r),o)),s=h,r=o;vf(of(af(sf(cf(new Eh,0),ps(b.Math.ceil(k.a+s.o.b))),r),n.d))}}function nmn(t,e,n,r,s,o,h,d){var w,k,C,M,F,H;return H=!1,F=o-n.s,C=n.t-e.f+(k=E_(n,F,!1),k.a),r.g+d>F?!1:(M=(w=E_(r,F,!1),w.a),C+d+M<=e.b&&(dI(n,o-n.s),n.c=!0,dI(r,o-n.s),YI(r,n.s,n.t+n.d+d),r.k=!0,cyt(n.q,r),H=!0,s&&(Y$(e,r),r.j=e,t.c.length>h&&(tD((An(h,t.c.length),u(t.c[h],200)),r),(An(h,t.c.length),u(t.c[h],200)).a.c.length==0&&Ag(t,h)))),H)}function rmn(t,e){var n,r,s,o,h,d;if(wr(e,"Partition midprocessing",1),s=new Hv,us(Ri(new Tn(null,new _n(t.a,16)),new RY),new bv(s)),s.d!=0){for(d=u(Pl(PQt((o=s.i,new Tn(null,(o||(s.i=new W3(s,s.c))).Nc()))),i2(new _e,new we,new nr,ct(ot(ll,1),ae,132,0,[(I1(),Gl)]))),15),r=d.Kc(),n=u(r.Pb(),19);r.Ob();)h=u(r.Pb(),19),a2n(u(Ai(s,n),21),u(Ai(s,h),21)),n=h;or(e)}}function Vue(t,e,n){var r,s,o,h,d,w,k,C;if(e.p==0){for(e.p=1,h=n,h||(s=new le,o=(r=u(Hf(Xa),9),new rh(r,u(uf(r,r.length),9),0)),h=new la(s,o)),u(h.a,15).Fc(e),e.k==(Gn(),xs)&&u(h.b,21).Fc(u(Q(e,(se(),oc)),61)),w=new S(e.j);w.a<w.c.c.length;)for(d=u(J(w),11),C=Bp(L1(ct(ot(B1,1),Ie,20,0,[new Ys(d),new Er(d)])));zr(C);)k=u(Lr(C),11),Vue(t,k.i,h);return h}return null}function m_(t,e){var n,r,s,o,h;if(t.Ab){if(t.Ab){if(h=t.Ab.i,h>0){if(s=u(t.Ab.g,1934),e==null){for(o=0;o<h;++o)if(n=s[o],n.d==null)return n}else for(o=0;o<h;++o)if(n=s[o],hn(e,n.d))return n}}else if(e==null){for(r=new er(t.Ab);r.e!=r.i.gc();)if(n=u(dr(r),590),n.d==null)return n}else for(r=new er(t.Ab);r.e!=r.i.gc();)if(n=u(dr(r),590),hn(e,n.d))return n}return null}function imn(t,e){var n,r,s,o,h,d,w,k;if(k=Re(Q(e,(hw(),uye))),k==null||(On(k),k)){for(Mpn(t,e),s=new le,w=ei(e.b,0);w.b!=w.d.c;)h=u(ti(w),86),n=q4t(t,h,null),n&&(Lo(n,e),s.c[s.c.length]=n);if(t.a=null,t.b=null,s.c.length>1)for(r=new S(s);r.a<r.c.c.length;)for(n=u(J(r),135),o=0,d=ei(n.b,0);d.b!=d.d.c;)h=u(ti(d),86),h.g=o++;return s}return _1(ct(ot(pxn,1),i6t,135,0,[e]))}function smn(t,e,n,r,s){var o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt;H=Win(t,wyt(e),s),nyt(H,O0(s,Cd)),E=null,V=s,Y=PC(V,_de),tt=new X$t(H),_0n(tt.a,Y),gt=PC(V,"endPoint"),Lt=new tzt(H),C0n(Lt.a,gt),_t=Uv(V,wH),Bt=new rzt(H),ddn(Bt.a,_t),M=O0(s,w8t),o=new wVt(t,H),RQe(o.a,o.b,M),F=O0(s,v8t),h=new mVt(t,H),jQe(h.a,h.b,F),k=Uv(s,y8t),d=new yVt(n,H),Qfn(d.b,d.a,k),C=Uv(s,m8t),w=new xVt(r,H),Zfn(w.b,w.a,C)}function Q5t(t,e,n){var r,s,o,h,d;switch(d=null,e.g){case 1:for(s=new S(t.j);s.a<s.c.c.length;)if(r=u(J(s),11),je(Re(Q(r,(se(),Plt)))))return r;d=new Mc,Jt(d,(se(),Plt),(Fn(),!0));break;case 2:for(h=new S(t.j);h.a<h.c.c.length;)if(o=u(J(h),11),je(Re(Q(o,(se(),Blt)))))return o;d=new Mc,Jt(d,(se(),Blt),(Fn(),!0))}return d&&(Uo(d,t),Fs(d,n),Zhn(d.n,t.o,n)),d}function Uue(t,e){var n,r,s,o,h,d;for(d=-1,h=new Qi,r=new S1(t.b);Vo(r.a)||Vo(r.b);){for(n=u(Vo(r.a)?J(r.a):J(r.b),17),d=b.Math.max(d,Xt(ye(Q(n,(Te(),Ug))))),n.c==t?us(Ri(new Tn(null,new _n(n.b,16)),new pY),new Nc(h)):us(Ri(new Tn(null,new _n(n.b,16)),new bY),new Za(h)),o=ei(h,0);o.b!=o.d.c;)s=u(ti(o),70),Vs(s,(se(),M6))||Jt(s,M6,n);As(e,h),_h(h)}return d}function amn(t,e,n,r,s){var o,h,d,w;o=new H0(t),_0(o,(Gn(),Hc)),Jt(o,(Te(),os),(oa(),Vc)),Jt(o,(se(),_i),e.c.i),h=new Mc,Jt(h,_i,e.c),Fs(h,s),Uo(h,o),Jt(e.c,Zu,o),d=new H0(t),_0(d,Hc),Jt(d,os,Vc),Jt(d,_i,e.d.i),w=new Mc,Jt(w,_i,e.d),Fs(w,s),Uo(w,d),Jt(e.d,Zu,d),Da(e,h),sa(e,w),Um(0,n.c.length),W9(n.c,0,o),r.c[r.c.length]=d,Jt(o,qG,de(1)),Jt(d,qG,de(1))}function fw(t,e,n,r,s){var o,h,d,w,k;d=s?r.b:r.a,!S0(t.a,r)&&(k=d>n.s&&d<n.c,w=!1,n.e.b!=0&&n.j.b!=0&&(w=w|(b.Math.abs(d-Xt(ye(ant(n.e))))<yd&&b.Math.abs(d-Xt(ye(ant(n.j))))<yd),w=w|(b.Math.abs(d-Xt(ye(vj(n.e))))<yd&&b.Math.abs(d-Xt(ye(vj(n.j))))<yd)),(k||w)&&(h=u(Q(e,(Te(),_o)),74),h||(h=new Du,Jt(e,_o,h)),o=new yo(r),hs(h,o,h.c.b,h.c),Ns(t.a,o)))}function omn(t,e,n,r){var s,o,h,d,w,k,C;if(dpn(t,e,n,r))return!0;for(h=new S(e.f);h.a<h.c.c.length;){switch(o=u(J(h),324),d=!1,w=t.j-e.j+n,k=w+e.o,C=t.k-e.k+r,s=C+e.p,o.a.g){case 0:d=Cit(t,w+o.b.a,0,w+o.c.a,C-1);break;case 1:d=Cit(t,k,C+o.b.a,t.o-1,C+o.c.a);break;case 2:d=Cit(t,w+o.b.a,s,w+o.c.a,t.p-1);break;default:d=Cit(t,0,C+o.b.a,w-1,C+o.c.a)}if(d)return!0}return!1}function cmn(t,e){var n,r,s,o,h,d,w,k,C;for(h=new S(e.b);h.a<h.c.c.length;)for(o=u(J(h),29),k=new S(o.a);k.a<k.c.c.length;){for(w=u(J(k),10),C=new le,d=0,r=new ar(lr(jo(w).a.Kc(),new z));zr(r);)n=u(Lr(r),17),!(Va(n)||!Va(n)&&n.c.i.c==n.d.i.c)&&(s=u(Q(n,(Te(),F6)),19).a,s>d&&(d=s,C.c=Pt(Xn,Ie,1,0,5,1)),s==d&&ue(C,new la(n.c.i,n)));vn(),Xs(C,t.c),$m(t.b,w.p,C)}}function umn(t,e){var n,r,s,o,h,d,w,k,C;for(h=new S(e.b);h.a<h.c.c.length;)for(o=u(J(h),29),k=new S(o.a);k.a<k.c.c.length;){for(w=u(J(k),10),C=new le,d=0,r=new ar(lr(Ms(w).a.Kc(),new z));zr(r);)n=u(Lr(r),17),!(Va(n)||!Va(n)&&n.c.i.c==n.d.i.c)&&(s=u(Q(n,(Te(),F6)),19).a,s>d&&(d=s,C.c=Pt(Xn,Ie,1,0,5,1)),s==d&&ue(C,new la(n.d.i,n)));vn(),Xs(C,t.c),$m(t.f,w.p,C)}}function Wue(t){Sv(t,new w2(Ev(yv(kv(xv(new pg,xw),"ELK Box"),"Algorithm for packing of unconnected boxes, i.e. graphs without edges."),new IZ))),xe(t,xw,ww,SSt),xe(t,xw,ky,15),xe(t,xw,jD,de(0)),xe(t,xw,gH,De(TSt)),xe(t,xw,L4,De(R3e)),xe(t,xw,v6,De(j3e)),xe(t,xw,b6,V1e),xe(t,xw,$D,De(CSt)),xe(t,xw,w6,De(_St)),xe(t,xw,o8t,De(Jht)),xe(t,xw,cH,De(B3e))}function Kue(t,e){var n,r,s,o,h,d,w,k,C;if(s=t.i,h=s.o.a,o=s.o.b,h<=0&&o<=0)return be(),Zo;switch(k=t.n.a,C=t.n.b,d=t.o.a,n=t.o.b,e.g){case 2:case 1:if(k<0)return be(),Bn;if(k+d>h)return be(),Hn;break;case 4:case 3:if(C<0)return be(),Nn;if(C+n>o)return be(),mr}return w=(k+d/2)/h,r=(C+n/2)/o,w+r<=1&&w-r<=0?(be(),Bn):w+r>=1&&w-r>=0?(be(),Hn):r<.5?(be(),Nn):(be(),mr)}function lmn(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y;for(n=!1,C=Xt(ye(Q(e,(Te(),Bw)))),V=eb*C,s=new S(e.b);s.a<s.c.c.length;)for(r=u(J(s),29),k=new S(r.a),o=u(J(k),10),M=swt(t.a[o.p]);k.a<k.c.c.length;)d=u(J(k),10),F=swt(t.a[d.p]),M!=F&&(H=V3(t.b,o,d),h=o.n.b+o.o.b+o.d.a+M.a+H,w=d.n.b-d.d.d+F.a,h>w+V&&(Y=M.g+F.g,F.a=(F.g*F.a+M.g*M.a)/Y,F.g=Y,M.f=F,n=!0)),o=d,M=F;return n}function Yue(t,e,n,r,s,o,h){var d,w,k,C,M,F;for(F=new Ax,k=e.Kc();k.Ob();)for(d=u(k.Pb(),839),M=new S(d.wf());M.a<M.c.c.length;)C=u(J(M),181),Gt(C.We((ci(),ift)))===Gt((A1(),S7))&&(Aue(F,C,!1,r,s,o,h),h_(t,F));for(w=n.Kc();w.Ob();)for(d=u(w.Pb(),839),M=new S(d.wf());M.a<M.c.c.length;)C=u(J(M),181),Gt(C.We((ci(),ift)))===Gt((A1(),Yy))&&(Aue(F,C,!0,r,s,o,h),h_(t,F))}function hmn(t,e,n){var r,s,o,h,d,w,k;for(h=new er((!t.a&&(t.a=new he(ns,t,10,11)),t.a));h.e!=h.i.gc();)for(o=u(dr(h),33),s=new ar(lr(G0(o).a.Kc(),new z));zr(s);)r=u(Lr(s),79),!g_(r)&&!g_(r)&&!uw(r)&&(w=u(ec(Ao(n.f,o)),86),k=u(Jn(n,Mo(u(St((!r.c&&(r.c=new Cn(br,r,5,8)),r.c),0),82))),86),w&&k&&(d=new Lwt(w,k),Jt(d,(fc(),jS),r),Lo(d,r),ni(w.d,d),ni(k.b,d),ni(e.a,d)))}function fmn(t,e){var n,r,s,o,h,d,w,k;for(w=u(u(Ai(t.r,e),21),84).Kc();w.Ob();)d=u(w.Pb(),111),s=d.c?qKt(d.c):0,s>0?d.a?(k=d.b.rf().b,s>k&&(t.v||d.c.d.c.length==1?(h=(s-k)/2,d.d.d=h,d.d.a=h):(n=u(Fe(d.c.d,0),181).rf().b,r=(n-k)/2,d.d.d=b.Math.max(0,r),d.d.a=s-r-k))):d.d.a=t.t+s:TC(t.u)&&(o=C4t(d.b),o.d<0&&(d.d.d=-o.d),o.d+o.a>d.b.rf().b&&(d.d.a=o.d+o.a-d.b.rf().b))}function dmn(t,e){var n;switch(xI(t)){case 6:return ea(e);case 7:return Nm(e);case 8:return Om(e);case 3:return Array.isArray(e)&&(n=xI(e),!(n>=14&&n<=16));case 11:return e!=null&&typeof e===Nat;case 12:return e!=null&&(typeof e===CD||typeof e==Nat);case 0:return rst(e,t.__elementTypeId$);case 2:return znt(e)&&e.im!==Ct;case 1:return znt(e)&&e.im!==Ct||rst(e,t.__elementTypeId$);default:return!0}}function Xue(t,e){var n,r,s,o;return r=b.Math.min(b.Math.abs(t.c-(e.c+e.b)),b.Math.abs(t.c+t.b-e.c)),o=b.Math.min(b.Math.abs(t.d-(e.d+e.a)),b.Math.abs(t.d+t.a-e.d)),n=b.Math.abs(t.c+t.b/2-(e.c+e.b/2)),n>t.b/2+e.b/2||(s=b.Math.abs(t.d+t.a/2-(e.d+e.a/2)),s>t.a/2+e.a/2)?1:n==0&&s==0?0:n==0?o/s+1:s==0?r/n+1:b.Math.min(r/n,o/s)+1}function Que(t,e){var n,r,s,o,h,d;return s=Umt(t),d=Umt(e),s==d?t.e==e.e&&t.a<54&&e.a<54?t.f<e.f?-1:t.f>e.f?1:0:(r=t.e-e.e,n=(t.d>0?t.d:b.Math.floor((t.a-1)*cfe)+1)-(e.d>0?e.d:b.Math.floor((e.a-1)*cfe)+1),n>r+1?s:n<r-1?-s:(o=(!t.c&&(t.c=jI(t.f)),t.c),h=(!e.c&&(e.c=jI(e.f)),e.c),r<0?o=J3(o,mle(-r)):r>0&&(h=J3(h,mle(r))),Lie(o,h))):s<d?-1:1}function gmn(t,e){var n,r,s,o,h,d,w;for(o=0,d=0,w=0,s=new S(t.f.e);s.a<s.c.c.length;)r=u(J(s),144),e!=r&&(h=t.i[e.b][r.b],o+=h,n=Hp(e.d,r.d),n>0&&t.d!=(jC(),Kut)&&(d+=h*(r.d.a+t.a[e.b][r.b]*(e.d.a-r.d.a)/n)),n>0&&t.d!=(jC(),Uut)&&(w+=h*(r.d.b+t.a[e.b][r.b]*(e.d.b-r.d.b)/n)));switch(t.d.g){case 1:return new $e(d/o,e.d.b);case 2:return new $e(e.d.a,w/o);default:return new $e(d/o,w/o)}}function Zue(t,e){J8();var n,r,s,o,h;if(h=u(Q(t.i,(Te(),os)),98),o=t.j.g-e.j.g,o!=0||!(h==(oa(),G2)||h==h0||h==Vc))return 0;if(h==(oa(),G2)&&(n=u(Q(t,Wg),19),r=u(Q(e,Wg),19),n&&r&&(s=n.a-r.a,s!=0)))return s;switch(t.j.g){case 1:return Ls(t.n.a,e.n.a);case 2:return Ls(t.n.b,e.n.b);case 3:return Ls(e.n.a,t.n.a);case 4:return Ls(e.n.b,t.n.b);default:throw rt(new Fo(b6t))}}function Jue(t){var e,n,r,s,o,h;for(n=(!t.a&&(t.a=new Ss(Hh,t,5)),t.a).i+2,h=new Yc(n),ue(h,new $e(t.j,t.k)),us(new Tn(null,(!t.a&&(t.a=new Ss(Hh,t,5)),new _n(t.a,16))),new W$t(h)),ue(h,new $e(t.b,t.c)),e=1;e<h.c.length-1;)r=(An(e-1,h.c.length),u(h.c[e-1],8)),s=(An(e,h.c.length),u(h.c[e],8)),o=(An(e+1,h.c.length),u(h.c[e+1],8)),r.a==s.a&&s.a==o.a||r.b==s.b&&s.b==o.b?Ag(h,e):++e;return h}function tle(t,e){var n,r,s,o,h,d,w;for(n=nWt(bGt(gGt(pGt(new Dpt,e),new o$(e.e)),Xbe),t.a),e.j.c.length==0||vte(u(Fe(e.j,0),57).a,n),w=new qtt,ki(t.e,n,w),h=new qs,d=new qs,o=new S(e.k);o.a<o.c.c.length;)s=u(J(o),17),Ns(h,s.c),Ns(d,s.d);r=h.a.gc()-d.a.gc(),r<0?(PI(w,!0,(ao(),jh)),PI(w,!1,kf)):r>0&&(PI(w,!1,(ao(),jh)),PI(w,!0,kf)),mu(e.g,new GGt(t,n)),ki(t.g,e,n)}function ele(){ele=Z;var t;for(oEt=ct(ot(Tr,1),Xr,25,15,[-1,-1,30,19,15,13,11,11,10,9,9,8,8,8,8,7,7,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5]),Tut=Pt(Tr,Xr,25,37,15,1),Ege=ct(ot(Tr,1),Xr,25,15,[-1,-1,63,40,32,28,25,23,21,20,19,19,18,18,17,17,16,16,16,15,15,15,15,14,14,14,14,14,14,13,13,13,13,13,13,13,13]),cEt=Pt(Lb,aot,25,37,14,1),t=2;t<=36;t++)Tut[t]=ps(b.Math.pow(t,oEt[t])),cEt[t]=eD(Iq,Tut[t])}function pmn(t){var e;if((!t.a&&(t.a=new he(Zi,t,6,6)),t.a).i!=1)throw rt(new Pn(lde+(!t.a&&(t.a=new he(Zi,t,6,6)),t.a).i));return e=new Du,OI(u(St((!t.b&&(t.b=new Cn(br,t,4,7)),t.b),0),82))&&Ua(e,Bhe(t,OI(u(St((!t.b&&(t.b=new Cn(br,t,4,7)),t.b),0),82)),!1)),OI(u(St((!t.c&&(t.c=new Cn(br,t,5,8)),t.c),0),82))&&Ua(e,Bhe(t,OI(u(St((!t.c&&(t.c=new Cn(br,t,5,8)),t.c),0),82)),!0)),e}function nle(t,e){var n,r,s,o,h;for(e.d?s=t.a.c==(dd(),Rw)?jo(e.b):Ms(e.b):s=t.a.c==(dd(),Kg)?jo(e.b):Ms(e.b),o=!1,r=new ar(lr(s.a.Kc(),new z));zr(r);)if(n=u(Lr(r),17),h=je(t.a.f[t.a.g[e.b.p].p]),!(!h&&!Va(n)&&n.c.i.c==n.d.i.c)&&!(je(t.a.n[t.a.g[e.b.p].p])||je(t.a.n[t.a.g[e.b.p].p]))&&(o=!0,S0(t.b,t.a.g[Cfn(n,e.b).p])))return e.c=!0,e.a=n,e;return e.c=o,e.a=null,e}function bmn(t,e,n,r,s){var o,h,d,w,k,C,M;for(vn(),Xs(t,new jZ),d=new ha(t,0),M=new le,o=0;d.b<d.d.gc();)h=(Qn(d.b<d.d.gc()),u(d.d.Xb(d.c=d.b++),157)),M.c.length!=0&&Fu(h)*xl(h)>o*2?(C=new U$(M),k=Fu(h)/xl(h),w=Mat(C,e,new wx,n,r,s,k),Li(Gf(C.e),w),M.c=Pt(Xn,Ie,1,0,5,1),o=0,M.c[M.c.length]=C,M.c[M.c.length]=h,o=Fu(C)*xl(C)+Fu(h)*xl(h)):(M.c[M.c.length]=h,o+=Fu(h)*xl(h));return M}function Z5t(t,e,n){var r,s,o,h,d,w,k;if(r=n.gc(),r==0)return!1;if(t.ej())if(w=t.fj(),d3t(t,e,n),h=r==1?t.Zi(3,null,n.Kc().Pb(),e,w):t.Zi(5,null,n,e,w),t.bj()){for(d=r<100?null:new Sp(r),o=e+r,s=e;s<o;++s)k=t.Oi(s),d=t.cj(k,d),d=d;d?(d.Ei(h),d.Fi()):t.$i(h)}else t.$i(h);else if(d3t(t,e,n),t.bj()){for(d=r<100?null:new Sp(r),o=e+r,s=e;s<o;++s)d=t.cj(t.Oi(s),d);d&&d.Fi()}return!0}function rle(t,e,n){var r,s,o,h,d;return t.ej()?(s=null,o=t.fj(),r=t.Zi(1,d=(h=t.Ui(e,t.oi(e,n)),h),n,e,o),t.bj()&&!(t.ni()&&d?yi(d,n):Gt(d)===Gt(n))&&(d&&(s=t.dj(d,s)),s=t.cj(n,s)),s?(s.Ei(r),s.Fi()):t.$i(r),d):(d=(h=t.Ui(e,t.oi(e,n)),h),t.bj()&&!(t.ni()&&d?yi(d,n):Gt(d)===Gt(n))&&(s=null,d&&(s=t.dj(d,null)),s=t.cj(n,s),s&&s.Fi()),d)}function J5t(t,e){var n,r,s,o,h,d,w,k,C;if(t.e=e,t.f=u(Q(e,(Gp(),aG)),230),Jdn(e),t.d=b.Math.max(e.e.c.length*16+e.c.c.length,256),!je(Re(Q(e,(Zf(),h7t)))))for(C=t.e.e.c.length,w=new S(e.e);w.a<w.c.c.length;)d=u(J(w),144),k=d.d,k.a=Vvt(t.f)*C,k.b=Vvt(t.f)*C;for(n=e.b,o=new S(e.c);o.a<o.c.c.length;)if(s=u(J(o),282),r=u(Q(s,b7t),19).a,r>0){for(h=0;h<r;h++)ue(n,new HYt(s));foe(s)}}function c6(t,e){var n,r,s,o,h,d;if(t.k==(Gn(),Sl)&&(n=j9(Ri(u(Q(t,(se(),TO)),15).Oc(),new Zt(new TL))).sd((Wb(),JE))?e:(jl(),QO),Jt(t,D6,n),n!=(jl(),wb)))for(r=u(Q(t,_i),17),d=Xt(ye(Q(r,(Te(),Ug)))),h=0,n==u0?h=t.o.b-b.Math.ceil(d/2):n==QO&&(t.o.b-=Xt(ye(Q(Fa(t),B6))),h=(t.o.b-b.Math.ceil(d))/2),o=new S(t.j);o.a<o.c.c.length;)s=u(J(o),11),s.n.b=h}function txt(){txt=Z,det(),R5e=new AB,ct(ot(V6,2),te,368,0,[ct(ot(V6,1),FH,592,0,[new hM(G0e)])]),ct(ot(V6,2),te,368,0,[ct(ot(V6,1),FH,592,0,[new hM(z8t)])]),ct(ot(V6,2),te,368,0,[ct(ot(V6,1),FH,592,0,[new hM(V0e)]),ct(ot(V6,1),FH,592,0,[new hM(z8t)])]),new Np("-1"),ct(ot(V6,2),te,368,0,[ct(ot(V6,1),FH,592,0,[new hM("\\c+")])]),new Np("0"),new Np("0"),new Np("1"),new Np("0"),new Np(Q0e)}function wq(t){var e,n;return t.c&&t.c.kh()&&(n=u(t.c,49),t.c=u(Kp(t,n),138),t.c!=n&&(t.Db&4&&!(t.Db&1)&&mi(t,new Qs(t,9,2,n,t.c)),Et(t.Cb,399)?t.Db>>16==-15&&t.Cb.nh()&&Urt(new qrt(t.Cb,9,13,n,t.c,Fg(il(u(t.Cb,59)),t))):Et(t.Cb,88)&&t.Db>>16==-23&&t.Cb.nh()&&(e=t.c,Et(e,88)||(e=(dn(),Wh)),Et(n,88)||(n=(dn(),Wh)),Urt(new qrt(t.Cb,9,10,n,e,Fg(Lc(u(t.Cb,26)),t)))))),t.c}function vmn(t,e){var n,r,s,o,h,d,w,k,C,M;for(wr(e,"Hypernodes processing",1),s=new S(t.b);s.a<s.c.c.length;)for(r=u(J(s),29),d=new S(r.a);d.a<d.c.c.length;)if(h=u(J(d),10),je(Re(Q(h,(Te(),JG))))&&h.j.c.length<=2){for(M=0,C=0,n=0,o=0,k=new S(h.j);k.a<k.c.c.length;)switch(w=u(J(k),11),w.j.g){case 1:++M;break;case 2:++C;break;case 3:++n;break;case 4:++o}M==0&&n==0&&y5n(t,h,o<=C)}or(e)}function wmn(t,e){var n,r,s,o,h,d,w,k,C;for(wr(e,"Layer constraint edge reversal",1),h=new S(t.b);h.a<h.c.c.length;){for(o=u(J(h),29),C=-1,n=new le,k=sI(o.a),s=0;s<k.length;s++)r=u(Q(k[s],(se(),O2)),303),C==-1?r!=(B0(),U4)&&(C=s):r==(B0(),U4)&&(ko(k[s],null),oy(k[s],C++,o)),r==(B0(),A6)&&ue(n,k[s]);for(w=new S(n);w.a<w.c.c.length;)d=u(J(w),10),ko(d,null),ko(d,o)}or(e)}function mmn(t,e,n){var r,s,o,h,d,w,k,C,M;for(wr(n,"Hyperedge merging",1),Wpn(t,e),w=new ha(e.b,0);w.b<w.d.gc();)if(d=(Qn(w.b<w.d.gc()),u(w.d.Xb(w.c=w.b++),29)),C=d.a,C.c.length!=0)for(r=null,s=null,o=null,h=null,k=0;k<C.c.length;k++)r=(An(k,C.c.length),u(C.c[k],10)),s=r.k,s==(Gn(),Zs)&&h==Zs&&(M=dyn(r,o),M.a&&(kvn(r,o,M.b,M.c),An(k,C.c.length),lbt(C.c,k,1),--k,r=o,s=h)),o=r,h=s;or(n)}function ymn(t,e){var n,r,s;r=ol(t.d,1)!=0,!je(Re(Q(e.j,(se(),Mw))))&&!je(Re(Q(e.j,K4)))||Gt(Q(e.j,(Te(),db)))===Gt((j0(),gb))?e.c.Tf(e.e,r):r=je(Re(Q(e.j,Mw))),pD(t,e,r,!0),je(Re(Q(e.j,K4)))&&Jt(e.j,K4,(Fn(),!1)),je(Re(Q(e.j,Mw)))&&(Jt(e.j,Mw,(Fn(),!1)),Jt(e.j,K4,!0)),n=Sue(t,e);do{if(iyt(t),n==0)return 0;r=!r,s=n,pD(t,e,r,!1),n=Sue(t,e)}while(s>n);return s}function ile(t,e){var n,r,s;r=ol(t.d,1)!=0,!je(Re(Q(e.j,(se(),Mw))))&&!je(Re(Q(e.j,K4)))||Gt(Q(e.j,(Te(),db)))===Gt((j0(),gb))?e.c.Tf(e.e,r):r=je(Re(Q(e.j,Mw))),pD(t,e,r,!0),je(Re(Q(e.j,K4)))&&Jt(e.j,K4,(Fn(),!1)),je(Re(Q(e.j,Mw)))&&(Jt(e.j,Mw,(Fn(),!1)),Jt(e.j,K4,!0)),n=Rst(t,e);do{if(iyt(t),n==0)return 0;r=!r,s=n,pD(t,e,r,!1),n=Rst(t,e)}while(s>n);return s}function sle(t,e,n){var r,s,o,h,d,w,k,C,M,F,H,V;if(e==n)return!0;if(e=c5t(t,e),n=c5t(t,n),r=lst(e),r){if(C=lst(n),C!=r)return C?(w=r.Dj(),V=C.Dj(),w==V&&w!=null):!1;if(h=(!e.d&&(e.d=new Ss(ho,e,1)),e.d),o=h.i,F=(!n.d&&(n.d=new Ss(ho,n,1)),n.d),o==F.i){for(k=0;k<o;++k)if(s=u(St(h,k),87),M=u(St(F,k),87),!sle(t,s,M))return!1}return!0}else return d=e.e,H=n.e,d==H}function ale(t,e,n,r){var s,o,h,d,w,k,C,M;if(V0(t.e,e)){for(M=au(t.e.Tg(),e),o=u(t.g,119),C=null,w=-1,d=-1,s=0,k=0;k<t.i;++k)h=o[k],M.rl(h.ak())&&(s==n&&(w=k),s==r&&(d=k,C=h.dd()),++s);if(w==-1)throw rt(new mo(Wct+n+S2+s));if(d==-1)throw rt(new mo(Kct+r+S2+s));return t_(t,w,d),ml(t.e)&&Kk(t,zp(t,7,e,de(r),C,n,!0)),C}else throw rt(new Pn("The feature must be many-valued to support move"))}function ole(t,e,n,r){var s,o,h,d,w;switch(w=new yo(e.n),w.a+=e.o.a/2,w.b+=e.o.b/2,d=Xt(ye(Q(e,(Te(),zy)))),o=t.f,h=t.d,s=t.c,u(Q(e,(se(),oc)),61).g){case 1:w.a+=h.b+s.a-n/2,w.b=-r-d,e.n.b=-(h.d+d+s.b);break;case 2:w.a=o.a+h.b+h.c+d,w.b+=h.d+s.b-r/2,e.n.a=o.a+h.c+d-s.a;break;case 3:w.a+=h.b+s.a-n/2,w.b=o.b+h.d+h.a+d,e.n.b=o.b+h.a+d-s.b;break;case 4:w.a=-n-d,w.b+=h.d+s.b-r/2,e.n.a=-(h.b+d+s.a)}return w}function cle(t){var e,n,r,s,o,h;return r=new Kmt,Lo(r,t),Gt(Q(r,(Te(),Vl)))===Gt((ao(),c0))&&Jt(r,Vl,Ez(r)),Q(r,(L$(),GS))==null&&(h=u(Eae(t),160),Jt(r,GS,nj(h.We(GS)))),Jt(r,(se(),_i),t),Jt(r,Gc,(e=u(Hf(Alt),9),new rh(e,u(uf(e,e.length),9),0))),s=c4n((ts(t)&&(Im(),new Sm(ts(t))),Im(),new rnt(ts(t)?new Sm(ts(t)):null,t)),kf),o=u(Q(r,aCt),116),n=r.d,pQt(n,o),pQt(n,s),r}function xmn(t,e,n){var r,s;r=e.c.i,s=n.d.i,r.k==(Gn(),Zs)?(Jt(t,(se(),n1),u(Q(r,n1),11)),Jt(t,Rh,u(Q(r,Rh),11)),Jt(t,Py,Re(Q(r,Py)))):r.k==Sl?(Jt(t,(se(),n1),u(Q(r,n1),11)),Jt(t,Rh,u(Q(r,Rh),11)),Jt(t,Py,(Fn(),!0))):s.k==Sl?(Jt(t,(se(),n1),u(Q(s,n1),11)),Jt(t,Rh,u(Q(s,Rh),11)),Jt(t,Py,(Fn(),!0))):(Jt(t,(se(),n1),e.c),Jt(t,Rh,n.d))}function kmn(t){var e,n,r,s,o,h,d;for(t.o=new P3,r=new Qi,h=new S(t.e.a);h.a<h.c.c.length;)o=u(J(h),121),o4(o).c.length==1&&hs(r,o,r.c.b,r.c);for(;r.b!=0;)o=u(r.b==0?null:(Qn(r.b!=0),ch(r,r.a.a)),121),o4(o).c.length!=0&&(e=u(Fe(o4(o),0),213),n=o.g.a.c.length>0,d=_z(e,o),L2t(n?d.b:d.g,e),o4(d).c.length==1&&hs(r,d,r.c.b,r.c),s=new la(o,e),qp(t.o,s),vu(t.e.a,o))}function ule(t,e){var n,r,s,o,h,d,w;return r=b.Math.abs(Gj(t.b).a-Gj(e.b).a),d=b.Math.abs(Gj(t.b).b-Gj(e.b).b),s=0,w=0,n=1,h=1,r>t.b.b/2+e.b.b/2&&(s=b.Math.min(b.Math.abs(t.b.c-(e.b.c+e.b.b)),b.Math.abs(t.b.c+t.b.b-e.b.c)),n=1-s/r),d>t.b.a/2+e.b.a/2&&(w=b.Math.min(b.Math.abs(t.b.d-(e.b.d+e.b.a)),b.Math.abs(t.b.d+t.b.a-e.b.d)),h=1-w/d),o=b.Math.min(n,h),(1-o)*b.Math.sqrt(r*r+d*d)}function Emn(t){var e,n,r,s;for(Lat(t,t.e,t.f,(qv(),bb),!0,t.c,t.i),Lat(t,t.e,t.f,bb,!1,t.c,t.i),Lat(t,t.e,t.f,e5,!0,t.c,t.i),Lat(t,t.e,t.f,e5,!1,t.c,t.i),Cmn(t,t.c,t.e,t.f,t.i),r=new ha(t.i,0);r.b<r.d.gc();)for(e=(Qn(r.b<r.d.gc()),u(r.d.Xb(r.c=r.b++),128)),s=new ha(t.i,r.b);s.b<s.d.gc();)n=(Qn(s.b<s.d.gc()),u(s.d.Xb(s.c=s.b++),128)),r3n(e,n);C5n(t.i,u(Q(t.d,(se(),O6)),230)),$3n(t.i)}function lat(t,e){var n,r;if(e!=null){if(r=cw(t),r)if(r.i&1){if(r==dl)return Om(e);if(r==Tr)return Et(e,19);if(r==r3)return Et(e,155);if(r==Hu)return Et(e,217);if(r==mh)return Et(e,172);if(r==ia)return Nm(e);if(r==f5)return Et(e,184);if(r==Lb)return Et(e,162)}else return NR(),n=u(Jn(nU,r),55),!n||n.wj(e);else if(Et(e,56))return t.uk(u(e,56))}return!1}function ext(){ext=Z;var t,e,n,r,s,o,h,d,w;for(U1=Pt(Hu,N4,25,255,15,1),rp=Pt(mh,vd,25,64,15,1),e=0;e<255;e++)U1[e]=-1;for(n=90;n>=65;n--)U1[n]=n-65<<24>>24;for(r=122;r>=97;r--)U1[r]=r-97+26<<24>>24;for(s=57;s>=48;s--)U1[s]=s-48+52<<24>>24;for(U1[43]=62,U1[47]=63,o=0;o<=25;o++)rp[o]=65+o&ms;for(h=26,w=0;h<=51;++h,w++)rp[h]=97+w&ms;for(t=52,d=0;t<=61;++t,d++)rp[t]=48+d&ms;rp[62]=43,rp[63]=47}function Tmn(t,e){var n,r,s,o,h,d,w,k,C,M,F,H;if(t.dc())return new Ta;for(k=0,M=0,s=t.Kc();s.Ob();)r=u(s.Pb(),37),o=r.f,k=b.Math.max(k,o.a),M+=o.a*o.b;for(k=b.Math.max(k,b.Math.sqrt(M)*Xt(ye(Q(u(t.Kc().Pb(),37),(Te(),UG))))),F=0,H=0,w=0,n=e,d=t.Kc();d.Ob();)h=u(d.Pb(),37),C=h.f,F+C.a>k&&(F=0,H+=w+e,w=0),w_(h,F,H),n=b.Math.max(n,F+C.a),w=b.Math.max(w,C.b),F+=C.a+e;return new $e(n+e,H+w+e)}function Cmn(t,e,n,r,s){var o,h,d,w,k,C,M;for(h=new S(e);h.a<h.c.c.length;){if(o=u(J(h),17),w=o.c,n.a._b(w))k=(qv(),bb);else if(r.a._b(w))k=(qv(),e5);else throw rt(new Pn("Source port must be in one of the port sets."));if(C=o.d,n.a._b(C))M=(qv(),bb);else if(r.a._b(C))M=(qv(),e5);else throw rt(new Pn("Target port must be in one of the port sets."));d=new eoe(o,k,M),ki(t.b,o,d),s.c[s.c.length]=d}}function nxt(t,e){var n,r,s,o,h,d,w;if(!k1(t))throw rt(new Fo(ude));if(r=k1(t),o=r.g,s=r.f,o<=0&&s<=0)return be(),Zo;switch(d=t.i,w=t.j,e.g){case 2:case 1:if(d<0)return be(),Bn;if(d+t.g>o)return be(),Hn;break;case 4:case 3:if(w<0)return be(),Nn;if(w+t.f>s)return be(),mr}return h=(d+t.g/2)/o,n=(w+t.f/2)/s,h+n<=1&&h-n<=0?(be(),Bn):h+n>=1&&h-n>=0?(be(),Hn):n<.5?(be(),Nn):(be(),mr)}function _mn(t,e,n,r,s){var o,h;if(o=Oa(Ps(e[0],co),Ps(r[0],co)),t[0]=Sr(o),o=Fp(o,32),n>=s){for(h=1;h<s;h++)o=Oa(o,Oa(Ps(e[h],co),Ps(r[h],co))),t[h]=Sr(o),o=Fp(o,32);for(;h<n;h++)o=Oa(o,Ps(e[h],co)),t[h]=Sr(o),o=Fp(o,32)}else{for(h=1;h<n;h++)o=Oa(o,Oa(Ps(e[h],co),Ps(r[h],co))),t[h]=Sr(o),o=Fp(o,32);for(;h<s;h++)o=Oa(o,Ps(r[h],co)),t[h]=Sr(o),o=Fp(o,32)}yc(o,0)!=0&&(t[h]=Sr(o))}function by(t){gi();var e,n,r,s,o,h;if(t.e!=4&&t.e!=5)throw rt(new Pn("Token#complementRanges(): must be RANGE: "+t.e));for(o=t,b4(o),T_(o),r=o.b.length+2,o.b[0]==0&&(r-=2),n=o.b[o.b.length-1],n==WE&&(r-=2),s=new Nl(4),s.b=Pt(Tr,Xr,25,r,15,1),h=0,o.b[0]>0&&(s.b[h++]=0,s.b[h++]=o.b[0]-1),e=1;e<o.b.length-2;e+=2)s.b[h++]=o.b[e]+1,s.b[h++]=o.b[e+1]-1;return n!=WE&&(s.b[h++]=n+1,s.b[h]=WE),s.a=!0,s}function hat(t,e,n){var r,s,o,h,d,w,k,C;if(r=n.gc(),r==0)return!1;if(t.ej())if(k=t.fj(),Lst(t,e,n),h=r==1?t.Zi(3,null,n.Kc().Pb(),e,k):t.Zi(5,null,n,e,k),t.bj()){for(d=r<100?null:new Sp(r),o=e+r,s=e;s<o;++s)C=t.g[s],d=t.cj(C,d),d=t.jj(C,d);d?(d.Ei(h),d.Fi()):t.$i(h)}else t.$i(h);else if(Lst(t,e,n),t.bj()){for(d=r<100?null:new Sp(r),o=e+r,s=e;s<o;++s)w=t.g[s],d=t.cj(w,d);d&&d.Fi()}return!0}function rxt(t,e,n,r){var s,o,h,d,w;for(h=new S(t.k);h.a<h.c.c.length;)s=u(J(h),129),(!r||s.c==(Vf(),pb))&&(w=s.b,w.g<0&&s.d>0&&(nM(w,w.d-s.d),s.c==(Vf(),pb)&&upt(w,w.a-s.d),w.d<=0&&w.i>0&&hs(e,w,e.c.b,e.c)));for(o=new S(t.f);o.a<o.c.c.length;)s=u(J(o),129),(!r||s.c==(Vf(),pb))&&(d=s.a,d.g<0&&s.d>0&&(x9(d,d.i-s.d),s.c==(Vf(),pb)&&gv(d,d.b-s.d),d.i<=0&&d.d>0&&hs(n,d,n.c.b,n.c)))}function Smn(t,e,n){var r,s,o,h,d,w,k,C;for(wr(n,"Processor compute fanout",1),Yu(t.b),Yu(t.a),d=null,o=ei(e.b,0);!d&&o.b!=o.d.c;)k=u(ti(o),86),je(Re(Q(k,(fc(),Wy))))&&(d=k);for(w=new Qi,hs(w,d,w.c.b,w.c),yhe(t,w),C=ei(e.b,0);C.b!=C.d.c;)k=u(ti(C),86),h=Br(Q(k,(fc(),RS))),s=Fc(t.b,h)!=null?u(Fc(t.b,h),19).a:0,Jt(k,mV,de(s)),r=1+(Fc(t.a,h)!=null?u(Fc(t.a,h),19).a:0),Jt(k,Zme,de(r));or(n)}function Amn(t,e,n,r,s){var o,h,d,w,k,C,M,F,H,V;for(F=hdn(t,n),w=0;w<e;w++){for(Rm(s,n),H=new le,V=(Qn(r.b<r.d.gc()),u(r.d.Xb(r.c=r.b++),407)),C=F+w;C<t.b;C++)d=V,V=(Qn(r.b<r.d.gc()),u(r.d.Xb(r.c=r.b++),407)),ue(H,new Rce(d,V,n));for(M=F+w;M<t.b;M++)Qn(r.b>0),r.a.Xb(r.c=--r.b),M>F+w&&El(r);for(h=new S(H);h.a<h.c.c.length;)o=u(J(h),407),Rm(r,o);if(w<e-1)for(k=F+w;k<t.b;k++)Qn(r.b>0),r.a.Xb(r.c=--r.b)}}function Lmn(){gi();var t,e,n,r,s,o;if(Oft)return Oft;for(t=new Nl(4),vy(t,tb(hut,!0)),__(t,tb("M",!0)),__(t,tb("C",!0)),o=new Nl(4),r=0;r<11;r++)jc(o,r,r);return e=new Nl(4),vy(e,tb("M",!0)),jc(e,4448,4607),jc(e,65438,65439),s=new lC(2),m2(s,t),m2(s,fA),n=new lC(2),n.$l(Bj(o,tb("L",!0))),n.$l(e),n=new Wm(3,n),n=new fwt(s,n),Oft=n,Oft}function Mmn(t){var e,n;if(e=Br(qe(t,(ci(),VS))),!Cne(e,t)&&!r2(t,C7)&&((!t.a&&(t.a=new he(ns,t,10,11)),t.a).i!=0||je(Re(qe(t,WO)))))if(e==null||uy(e).length==0){if(!Cne(Vn,t))throw n=Vr(Vr(new Il("Unable to load default layout algorithm "),Vn)," for unconfigured node "),Cq(t,n),rt(new F3(n.a))}else throw n=Vr(Vr(new Il("Layout algorithm '"),e),"' not found for "),Cq(t,n),rt(new F3(n.a))}function fat(t){var e,n,r,s,o,h,d,w,k,C,M,F,H;if(n=t.i,e=t.n,t.b==0)for(H=n.c+e.b,F=n.b-e.b-e.c,h=t.a,w=0,C=h.length;w<C;++w)s=h[w],jj(s,H,F);else r=ose(t,!1),jj(t.a[0],n.c+e.b,r[0]),jj(t.a[2],n.c+n.b-e.c-r[2],r[2]),M=n.b-e.b-e.c,r[0]>0&&(M-=r[0]+t.c,r[0]+=t.c),r[2]>0&&(M-=r[2]+t.c),r[1]=b.Math.max(r[1],M),jj(t.a[1],n.c+e.b+r[0]-(r[1]-M)/2,r[1]);for(o=t.a,d=0,k=o.length;d<k;++d)s=o[d],Et(s,326)&&u(s,326).Te()}function Imn(t){var e,n,r,s,o,h,d,w,k,C,M;for(M=new _Q,M.d=0,h=new S(t.b);h.a<h.c.c.length;)o=u(J(h),29),M.d+=o.a.c.length;for(r=0,s=0,M.a=Pt(Tr,Xr,25,t.b.c.length,15,1),k=0,C=0,M.e=Pt(Tr,Xr,25,M.d,15,1),n=new S(t.b);n.a<n.c.c.length;)for(e=u(J(n),29),e.p=r++,M.a[e.p]=s++,C=0,w=new S(e.a);w.a<w.c.c.length;)d=u(J(w),10),d.p=k++,M.e[d.p]=C++;return M.c=new I$t(M),M.b=Hd(M.d),cmn(M,t),M.f=Hd(M.d),umn(M,t),M}function lle(t,e){var n,r,s,o;for(o=u(Fe(t.n,t.n.c.length-1),211).d,t.p=b.Math.min(t.p,e.g),t.r=b.Math.max(t.r,o),t.g=b.Math.max(t.g,e.g+(t.b.c.length==1?0:t.i)),t.o=b.Math.min(t.o,e.f),t.e+=e.f+(t.b.c.length==1?0:t.i),t.f=b.Math.max(t.f,e.f),s=t.n.c.length>0?(t.n.c.length-1)*t.i:0,r=new S(t.n);r.a<r.c.c.length;)n=u(J(r),211),s+=n.a;t.d=s,t.a=t.e/t.b.c.length-t.i*((t.b.c.length-1)/t.b.c.length),G3t(t.j)}function hle(t,e){var n,r,s,o,h,d,w,k,C,M;if(C=Re(Q(e,(Zf(),ibe))),C==null||(On(C),C)){for(M=Pt(dl,i0,25,e.e.c.length,16,1),h=Epn(e),s=new Qi,k=new S(e.e);k.a<k.c.c.length;)d=u(J(k),144),n=y5t(t,d,null,null,M,h),n&&(Lo(n,e),hs(s,n,s.c.b,s.c));if(s.b>1)for(r=ei(s,0);r.b!=r.d.c;)for(n=u(ti(r),231),o=0,w=new S(n.e);w.a<w.c.c.length;)d=u(J(w),144),d.b=o++;return s}return _1(ct(ot(cxn,1),i6t,231,0,[e]))}function pd(t){var e,n,r,s,o,h,d;if(!t.g){if(d=new qb,e=aA,h=e.a.zc(t,e),h==null){for(r=new er(So(t));r.e!=r.i.gc();)n=u(dr(r),26),rs(d,pd(n));e.a.Bc(t)!=null,e.a.gc()==0}for(s=d.i,o=(!t.s&&(t.s=new he(Au,t,21,17)),new er(t.s));o.e!=o.i.gc();++s)Ett(u(dr(o),449),s);rs(d,(!t.s&&(t.s=new he(Au,t,21,17)),t.s)),ey(d),t.g=new tre(t,d),t.i=u(d.g,247),t.i==null&&(t.i=_ft),t.p=null,rl(t).b&=-5}return t.g}function dat(t){var e,n,r,s,o,h,d,w,k,C,M,F,H,V;if(r=t.i,n=t.n,t.b==0)e=ase(t,!1),$j(t.a[0],r.d+n.d,e[0]),$j(t.a[2],r.d+r.a-n.a-e[2],e[2]),F=r.a-n.d-n.a,M=F,e[0]>0&&(e[0]+=t.c,M-=e[0]),e[2]>0&&(M-=e[2]+t.c),e[1]=b.Math.max(e[1],M),$j(t.a[1],r.d+n.d+e[0]-(e[1]-M)/2,e[1]);else for(V=r.d+n.d,H=r.a-n.d-n.a,h=t.a,w=0,C=h.length;w<C;++w)s=h[w],$j(s,V,H);for(o=t.a,d=0,k=o.length;d<k;++d)s=o[d],Et(s,326)&&u(s,326).Ue()}function Dmn(t){var e,n,r,s,o,h,d,w,k,C;for(C=Pt(Tr,Xr,25,t.b.c.length+1,15,1),k=new qs,r=0,o=new S(t.b);o.a<o.c.c.length;){for(s=u(J(o),29),C[r++]=k.a.gc(),w=new S(s.a);w.a<w.c.c.length;)for(h=u(J(w),10),n=new ar(lr(Ms(h).a.Kc(),new z));zr(n);)e=u(Lr(n),17),k.a.zc(e,k);for(d=new S(s.a);d.a<d.c.c.length;)for(h=u(J(d),10),n=new ar(lr(jo(h).a.Kc(),new z));zr(n);)e=u(Lr(n),17),k.a.Bc(e)!=null}return C}function mq(t,e,n,r){var s,o,h,d,w;if(w=au(t.e.Tg(),e),s=u(t.g,119),to(),u(e,66).Oj()){for(h=0;h<t.i;++h)if(o=s[h],w.rl(o.ak())&&yi(o,n))return!0}else if(n!=null){for(d=0;d<t.i;++d)if(o=s[d],w.rl(o.ak())&&yi(n,o.dd()))return!0;if(r){for(h=0;h<t.i;++h)if(o=s[h],w.rl(o.ak())&&Gt(n)===Gt(cnt(t,u(o.dd(),56))))return!0}}else for(h=0;h<t.i;++h)if(o=s[h],w.rl(o.ak())&&o.dd()==null)return!1;return!1}function fle(t,e,n,r){var s,o,h,d,w,k;if(k=au(t.e.Tg(),e),h=u(t.g,119),V0(t.e,e)){if(e.hi()&&(o=EE(t,e,r,Et(e,99)&&(u(e,18).Bb&Ya)!=0),o>=0&&o!=n))throw rt(new Pn(XD));for(s=0,w=0;w<t.i;++w)if(d=h[w],k.rl(d.ak())){if(s==n)return u(u4(t,w,(to(),u(e,66).Oj()?u(r,72):Yd(e,r))),72);++s}throw rt(new mo(X_+n+S2+s))}else{for(w=0;w<t.i;++w)if(d=h[w],k.rl(d.ak()))return to(),u(e,66).Oj()?d:d.dd();return null}}function dle(t,e,n,r){var s,o,h,d;for(d=n,h=new S(e.a);h.a<h.c.c.length;){if(o=u(J(h),221),s=u(o.b,65),rw(t.b.c,s.b.c+s.b.b)<=0&&rw(s.b.c,t.b.c+t.b.b)<=0&&rw(t.b.d,s.b.d+s.b.a)<=0&&rw(s.b.d,t.b.d+t.b.a)<=0){if(rw(s.b.c,t.b.c+t.b.b)==0&&r.a<0||rw(s.b.c+s.b.b,t.b.c)==0&&r.a>0||rw(s.b.d,t.b.d+t.b.a)==0&&r.b<0||rw(s.b.d+s.b.a,t.b.d)==0&&r.b>0){d=0;break}}else d=b.Math.min(d,doe(t,s,r));d=b.Math.min(d,dle(t,o,d,r))}return d}function yD(t,e){var n,r,s,o,h,d,w;if(t.b<2)throw rt(new Pn("The vector chain must contain at least a source and a target point."));for(s=(Qn(t.b!=0),u(t.a.a.c,8)),oj(e,s.a,s.b),w=new Lx((!e.a&&(e.a=new Ss(Hh,e,5)),e.a)),h=ei(t,1);h.a<t.b-1;)d=u(ti(h),8),w.e!=w.i.gc()?n=u(dr(w),469):(n=(Tv(),r=new vp,r),gie(w,n)),n2t(n,d.a,d.b);for(;w.e!=w.i.gc();)dr(w),u_(w);o=(Qn(t.b!=0),u(t.c.b.c,8)),aj(e,o.a,o.b)}function gle(t,e){var n,r,s,o,h,d,w,k,C;for(n=0,s=new S((An(0,t.c.length),u(t.c[0],101)).g.b.j);s.a<s.c.c.length;)r=u(J(s),11),r.p=n++;for(e==(be(),Nn)?Xs(t,new NX):Xs(t,new PX),d=0,C=t.c.length-1;d<C;)h=(An(d,t.c.length),u(t.c[d],101)),k=(An(C,t.c.length),u(t.c[C],101)),o=e==Nn?h.c:h.a,w=e==Nn?k.a:k.c,_g(h,e,(M1(),s7),o),_g(k,e,i7,w),++d,--C;d==C&&_g((An(d,t.c.length),u(t.c[d],101)),e,(M1(),_6),null)}function Omn(t,e,n){var r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt;return M=t.a.i+t.a.g/2,F=t.a.i+t.a.g/2,V=e.i+e.g/2,tt=e.j+e.f/2,d=new $e(V,tt),k=u(qe(e,(ci(),z6)),8),k.a=k.a+M,k.b=k.b+F,o=(d.b-k.b)/(d.a-k.a),r=d.b-o*d.a,Y=n.i+n.g/2,gt=n.j+n.f/2,w=new $e(Y,gt),C=u(qe(n,z6),8),C.a=C.a+M,C.b=C.b+F,h=(w.b-C.b)/(w.a-C.a),s=w.b-h*w.a,H=(r-s)/(h-o),k.a<H&&d.a<H||H<k.a&&H<d.a?!1:!(C.a<H&&w.a<H||H<C.a&&H<w.a)}function Nmn(t,e){var n,r,s,o,h,d,w,k,C,M,F,H;if(F=u(Jn(t.c,e),183),!F)throw rt(new ad("Edge did not exist in input."));return k=oE(F),o=fM((!e.a&&(e.a=new he(Zi,e,6,6)),e.a)),d=!o,d&&(H=new bg,n=new yKt(t,k,H),jYe((!e.a&&(e.a=new he(Zi,e,6,6)),e.a),n),Wf(F,b8t,H)),s=r2(e,(ci(),i5)),s&&(C=u(qe(e,i5),74),h=!C||sXt(C),w=!h,w&&(M=new bg,r=new dzt(M),va(C,r),Wf(F,"junctionPoints",M))),p8(F,"container",rI(e).k),null}function ixt(t,e,n){var r,s,o,h,d,w,k,C;this.a=t,this.b=e,this.c=n,this.e=_1(ct(ot(sxn,1),Ie,168,0,[new Tx(t,e),new Tx(e,n),new Tx(n,t)])),this.f=_1(ct(ot(Us,1),te,8,0,[t,e,n])),this.d=(r=na(nc(this.b),this.a),s=na(nc(this.c),this.a),o=na(nc(this.c),this.b),h=r.a*(this.a.a+this.b.a)+r.b*(this.a.b+this.b.b),d=s.a*(this.a.a+this.c.a)+s.b*(this.a.b+this.c.b),w=2*(r.a*o.b-r.b*o.a),k=(s.b*h-r.b*d)/w,C=(r.a*d-s.a*h)/w,new $e(k,C))}function ple(t,e,n,r){var s,o,h,d,w,k,C,M,F,H,V;if(F=new Hm(t.p),Wf(e,oi,F),n&&!(t.f?JM(t.f):null).a.dc())for(C=new bg,Wf(e,"logs",C),d=0,V=new A((t.f?JM(t.f):null).b.Kc());V.b.Ob();)H=Br(V.b.Pb()),M=new Hm(H),Xm(C,d),_rt(C,d,M),++d;if(r&&(k=new y9(t.q),Wf(e,"executionTime",k)),!JM(t.a).a.dc())for(h=new bg,Wf(e,Gct,h),d=0,o=new A(JM(t.a).b.Kc());o.b.Ob();)s=u(o.b.Pb(),1949),w=new mx,Xm(h,d),_rt(h,d,w),ple(s,w,n,r),++d}function dw(t,e){var n,r,s,o,h,d;for(o=t.c,h=t.d,Da(t,null),sa(t,null),e&&je(Re(Q(h,(se(),Plt))))?Da(t,Q5t(h.i,(so(),eu),(be(),Hn))):Da(t,h),e&&je(Re(Q(o,(se(),Blt))))?sa(t,Q5t(o.i,(so(),Ju),(be(),Bn))):sa(t,o),r=new S(t.b);r.a<r.c.c.length;)n=u(J(r),70),s=u(Q(n,(Te(),Md)),272),s==(A1(),S7)?Jt(n,Md,Yy):s==Yy&&Jt(n,Md,S7);d=je(Re(Q(t,(se(),$1)))),Jt(t,$1,(Fn(),!d)),t.a=BI(t.a)}function Pmn(t,e,n){var r,s,o,h,d,w;for(r=0,o=new er((!t.a&&(t.a=new he(ns,t,10,11)),t.a));o.e!=o.i.gc();)s=u(dr(o),33),h="",(!s.n&&(s.n=new he(qo,s,1,7)),s.n).i==0||(h=u(St((!s.n&&(s.n=new he(qo,s,1,7)),s.n),0),137).a),d=new QYt(h),Lo(d,s),Jt(d,(Gp(),C6),s),d.b=r++,d.d.a=s.i+s.g/2,d.d.b=s.j+s.f/2,d.e.a=b.Math.max(s.g,1),d.e.b=b.Math.max(s.f,1),ue(e.e,d),su(n.f,s,d),w=u(qe(s,(Zf(),p7t)),98),w==(oa(),yb)&&(w=H1)}function Fmn(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt;n=Dv(new Ub,t.f),k=t.i[e.c.i.p],H=t.i[e.d.i.p],w=e.c,F=e.d,d=w.a.b,M=F.a.b,k.b||(d+=w.n.b),H.b||(M+=F.n.b),C=ps(b.Math.max(0,d-M)),h=ps(b.Math.max(0,M-d)),V=(Y=b.Math.max(1,u(Q(e,(Te(),F6)),19).a),tt=tmt(e.c.i.k,e.d.i.k),Y*tt),s=vf(of(af(sf(cf(new Eh,V),h),n),u(Jn(t.k,e.c),121))),o=vf(of(af(sf(cf(new Eh,V),C),n),u(Jn(t.k,e.d),121))),r=new JGt(s,o),t.c[e.p]=r}function Bmn(t,e,n,r){var s,o,h,d,w,k;for(h=new qle(t,e,n),w=new ha(r,0),s=!1;w.b<w.d.gc();)d=(Qn(w.b<w.d.gc()),u(w.d.Xb(w.c=w.b++),233)),d==e||d==n?El(w):!s&&Xt(x1(d.g,d.d[0]).a)>Xt(x1(h.g,h.d[0]).a)?(Qn(w.b>0),w.a.Xb(w.c=--w.b),Rm(w,h),s=!0):d.e&&d.e.gc()>0&&(o=(!d.e&&(d.e=new le),d.e).Mc(e),k=(!d.e&&(d.e=new le),d.e).Mc(n),(o||k)&&((!d.e&&(d.e=new le),d.e).Fc(h),++h.c));s||(r.c[r.c.length]=h)}function ble(t){var e,n,r;if(H3(u(Q(t,(Te(),os)),98)))for(n=new S(t.j);n.a<n.c.c.length;)e=u(J(n),11),e.j==(be(),Zo)&&(r=u(Q(e,(se(),Zu)),10),r?Fs(e,u(Q(r,oc),61)):e.e.c.length-e.g.c.length<0?Fs(e,Hn):Fs(e,Bn));else{for(n=new S(t.j);n.a<n.c.c.length;)e=u(J(n),11),r=u(Q(e,(se(),Zu)),10),r?Fs(e,u(Q(r,oc),61)):e.e.c.length-e.g.c.length<0?Fs(e,(be(),Hn)):Fs(e,(be(),Bn));Jt(t,os,(oa(),L7))}}function xD(t){var e,n,r;switch(t){case 91:case 93:case 45:case 94:case 44:case 92:r="\\"+String.fromCharCode(t&ms);break;case 12:r="\\f";break;case 10:r="\\n";break;case 13:r="\\r";break;case 9:r="\\t";break;case 27:r="\\e";break;default:t<32?(n=(e=t>>>0,"0"+e.toString(16)),r="\\x"+Dl(n,n.length-2,n.length)):t>=Ya?(n=(e=t>>>0,"0"+e.toString(16)),r="\\v"+Dl(n,n.length-6,n.length)):r=""+String.fromCharCode(t&ms)}return r}function gat(t,e){var n,r,s,o,h,d,w,k,C,M;if(h=t.e,w=e.e,w==0)return t;if(h==0)return e.e==0?e:new K3(-e.e,e.d,e.a);if(o=t.d,d=e.d,o+d==2)return n=Ps(t.a[0],co),r=Ps(e.a[0],co),h<0&&(n=O8(n)),w<0&&(r=O8(r)),KI(Yp(n,r));if(s=o!=d?o>d?1:-1:Pyt(t.a,e.a,o),s==-1)M=-w,C=h==w?Frt(e.a,d,t.a,o):Rrt(e.a,d,t.a,o);else if(M=h,h==w){if(s==0)return Jp(),QE;C=Frt(t.a,o,e.a,d)}else C=Rrt(t.a,o,e.a,d);return k=new K3(M,C.length,C),OC(k),k}function sxt(t){var e,n,r,s,o,h;for(this.e=new le,this.a=new le,n=t.b-1;n<3;n++)h8(t,0,u(Qf(t,0),8));if(t.b<4)throw rt(new Pn("At (least dimension + 1) control points are necessary!"));for(this.b=3,this.d=!0,this.c=!1,kbn(this,t.b+this.b-1),h=new le,o=new S(this.e),e=0;e<this.b-1;e++)ue(h,ye(J(o)));for(s=ei(t,0);s.b!=s.d.c;)r=u(ti(s),8),ue(h,ye(J(o))),ue(this.a,new rQt(r,h)),An(0,h.c.length),h.c.splice(0,1)}function vle(t,e){var n,r,s,o,h,d,w,k,C;for(o=new S(t.b);o.a<o.c.c.length;)for(s=u(J(o),29),d=new S(s.a);d.a<d.c.c.length;)for(h=u(J(d),10),h.k==(Gn(),Sl)&&(w=(k=u(Lr(new ar(lr(jo(h).a.Kc(),new z))),17),C=u(Lr(new ar(lr(Ms(h).a.Kc(),new z))),17),!je(Re(Q(k,(se(),$1))))||!je(Re(Q(C,$1)))?e:Une(e)),c6(h,w)),r=new ar(lr(Ms(h).a.Kc(),new z));zr(r);)n=u(Lr(r),17),w=je(Re(Q(n,(se(),$1))))?Une(e):e,jne(n,w)}function Rmn(t,e,n,r,s){var o,h,d;if(n.f>=e.o&&n.f<=e.f||e.a*.5<=n.f&&e.a*1.5>=n.f){if(h=u(Fe(e.n,e.n.c.length-1),211),h.e+h.d+n.g+s<=r&&(o=u(Fe(e.n,e.n.c.length-1),211),o.f-t.f+n.f<=t.b||t.a.c.length==1))return i3t(e,n),!0;if(e.s+n.g<=r&&(e.t+e.d+n.f+s<=t.b||t.a.c.length==1))return ue(e.b,n),d=u(Fe(e.n,e.n.c.length-1),211),ue(e.n,new f$(e.s,d.f+d.a+e.i,e.i)),$3t(u(Fe(e.n,e.n.c.length-1),211),n),lle(e,n),!0}return!1}function wle(t,e,n){var r,s,o,h;return t.ej()?(s=null,o=t.fj(),r=t.Zi(1,h=Krt(t,e,n),n,e,o),t.bj()&&!(t.ni()&&h!=null?yi(h,n):Gt(h)===Gt(n))?(h!=null&&(s=t.dj(h,s)),s=t.cj(n,s),t.ij()&&(s=t.lj(h,n,s)),s?(s.Ei(r),s.Fi()):t.$i(r)):(t.ij()&&(s=t.lj(h,n,s)),s?(s.Ei(r),s.Fi()):t.$i(r)),h):(h=Krt(t,e,n),t.bj()&&!(t.ni()&&h!=null?yi(h,n):Gt(h)===Gt(n))&&(s=null,h!=null&&(s=t.dj(h,null)),s=t.cj(n,s),s&&s.Fi()),h)}function y_(t,e){var n,r,s,o,h,d,w,k;e%=24,t.q.getHours()!=e&&(r=new b.Date(t.q.getTime()),r.setDate(r.getDate()+1),d=t.q.getTimezoneOffset()-r.getTimezoneOffset(),d>0&&(w=d/60|0,k=d%60,s=t.q.getDate(),n=t.q.getHours(),n+w>=24&&++s,o=new b.Date(t.q.getFullYear(),t.q.getMonth(),s,e+w,t.q.getMinutes()+k,t.q.getSeconds(),t.q.getMilliseconds()),t.q.setTime(o.getTime()))),h=t.q.getTime(),t.q.setTime(h+36e5),t.q.getHours()!=e&&t.q.setTime(h)}function jmn(t,e){var n,r,s,o,h;if(wr(e,"Path-Like Graph Wrapping",1),t.b.c.length==0){or(e);return}if(s=new f5t(t),h=(s.i==null&&(s.i=syt(s,new OF)),Xt(s.i)*s.f),n=h/(s.i==null&&(s.i=syt(s,new OF)),Xt(s.i)),s.b>n){or(e);return}switch(u(Q(t,(Te(),rht)),337).g){case 2:o=new PF;break;case 0:o=new DF;break;default:o=new FF}if(r=o.Vf(t,s),!o.Wf())switch(u(Q(t,aV),338).g){case 2:r=goe(s,r);break;case 1:r=dae(s,r)}Fyn(t,s,r),or(e)}function $mn(t,e){var n,r,s,o;if(Trn(t.d,t.e),t.c.a.$b(),Xt(ye(Q(e.j,(Te(),YG))))!=0||Xt(ye(Q(e.j,YG)))!=0)for(n=FE,Gt(Q(e.j,db))!==Gt((j0(),gb))&&Jt(e.j,(se(),Mw),(Fn(),!0)),o=u(Q(e.j,SS),19).a,s=0;s<o&&(r=ymn(t,e),!(r<n&&(n=r,ine(t),n==0)));s++);else for(n=vi,Gt(Q(e.j,db))!==Gt((j0(),gb))&&Jt(e.j,(se(),Mw),(Fn(),!0)),o=u(Q(e.j,SS),19).a,s=0;s<o&&(r=ile(t,e),!(r<n&&(n=r,ine(t),n==0)));s++);}function zmn(t,e){var n,r,s,o,h,d,w,k;for(h=new le,d=0,n=0,w=0;d<e.c.length-1&&n<t.gc();){for(r=u(t.Xb(n),19).a+w;(An(d+1,e.c.length),u(e.c[d+1],19)).a<r;)++d;for(k=0,o=r-(An(d,e.c.length),u(e.c[d],19)).a,s=(An(d+1,e.c.length),u(e.c[d+1],19)).a-r,o>s&&++k,ue(h,(An(d+k,e.c.length),u(e.c[d+k],19))),w+=(An(d+k,e.c.length),u(e.c[d+k],19)).a-r,++n;n<t.gc()&&u(t.Xb(n),19).a+w<=(An(d+k,e.c.length),u(e.c[d+k],19)).a;)++n;d+=1+k}return h}function pat(t){var e,n,r,s,o,h,d;if(!t.d){if(d=new S3,e=aA,o=e.a.zc(t,e),o==null){for(r=new er(So(t));r.e!=r.i.gc();)n=u(dr(r),26),rs(d,pat(n));e.a.Bc(t)!=null,e.a.gc()==0}for(h=d.i,s=(!t.q&&(t.q=new he(Vh,t,11,10)),new er(t.q));s.e!=s.i.gc();++h)u(dr(s),399);rs(d,(!t.q&&(t.q=new he(Vh,t,11,10)),t.q)),ey(d),t.d=new q3((u(St(Wt((jp(),Ln).o),9),18),d.i),d.g),t.e=u(d.g,673),t.e==null&&(t.e=s5e),rl(t).b&=-17}return t.d}function EE(t,e,n,r){var s,o,h,d,w,k;if(k=au(t.e.Tg(),e),w=0,s=u(t.g,119),to(),u(e,66).Oj()){for(h=0;h<t.i;++h)if(o=s[h],k.rl(o.ak())){if(yi(o,n))return w;++w}}else if(n!=null){for(d=0;d<t.i;++d)if(o=s[d],k.rl(o.ak())){if(yi(n,o.dd()))return w;++w}if(r){for(w=0,h=0;h<t.i;++h)if(o=s[h],k.rl(o.ak())){if(Gt(n)===Gt(cnt(t,u(o.dd(),56))))return w;++w}}}else for(h=0;h<t.i;++h)if(o=s[h],k.rl(o.ak())){if(o.dd()==null)return w;++w}return-1}function qmn(t,e,n,r,s){var o,h,d,w,k,C,M,F,H;for(vn(),Xs(t,new RZ),h=UM(t),H=new le,F=new le,d=null,w=0;h.b!=0;)o=u(h.b==0?null:(Qn(h.b!=0),ch(h,h.a.a)),157),!d||Fu(d)*xl(d)/2<Fu(o)*xl(o)?(d=o,H.c[H.c.length]=o):(w+=Fu(o)*xl(o),F.c[F.c.length]=o,F.c.length>1&&(w>Fu(d)*xl(d)/2||h.b==0)&&(M=new U$(F),C=Fu(d)/xl(d),k=Mat(M,e,new wx,n,r,s,C),Li(Gf(M.e),k),d=M,H.c[H.c.length]=M,w=0,F.c=Pt(Xn,Ie,1,0,5,1)));return As(H,F),H}function Hmn(t,e,n,r){var s,o,h,d,w,k,C,M,F,H,V,Y;if(n.mh(e)&&(C=(H=e,H?u(r,49).xh(H):null),C))if(Y=n.bh(e,t.a),V=e.t,V>1||V==-1)if(M=u(Y,69),F=u(C,69),M.dc())F.$b();else for(h=!!no(e),o=0,d=t.a?M.Kc():M.Zh();d.Ob();)k=u(d.Pb(),56),s=u(Wv(t,k),56),s?(h?(w=F.Xc(s),w==-1?F.Xh(o,s):o!=w&&F.ji(o,s)):F.Xh(o,s),++o):t.b&&!h&&(F.Xh(o,k),++o);else Y==null?C.Wb(null):(s=Wv(t,Y),s==null?t.b&&!no(e)&&C.Wb(Y):C.Wb(s))}function Gmn(t,e){var n,r,s,o,h,d,w,k;for(n=new CY,s=new ar(lr(jo(e).a.Kc(),new z));zr(s);)if(r=u(Lr(s),17),!Va(r)&&(d=r.c.i,k4t(d,uG))){if(k=B5t(t,d,uG,cG),k==-1)continue;n.b=b.Math.max(n.b,k),!n.a&&(n.a=new le),ue(n.a,d)}for(h=new ar(lr(Ms(e).a.Kc(),new z));zr(h);)if(o=u(Lr(h),17),!Va(o)&&(w=o.d.i,k4t(w,cG))){if(k=B5t(t,w,cG,uG),k==-1)continue;n.d=b.Math.max(n.d,k),!n.c&&(n.c=new le),ue(n.c,w)}return n}function mle(t){bE();var e,n,r,s;if(e=ps(t),t<oS.length)return oS[e];if(t<=50)return hD((Jp(),Sut),e);if(t<=$g)return Gx(hD(T6[1],e),e);if(t>1e6)throw rt(new pR("power of ten too big"));if(t<=vi)return Gx(hD(T6[1],e),e);for(r=hD(T6[1],vi),s=r,n=ku(t-vi),e=ps(t%vi);yc(n,vi)>0;)s=J3(s,r),n=Yp(n,vi);for(s=J3(s,hD(T6[1],e)),s=Gx(s,vi),n=ku(t-vi);yc(n,vi)>0;)s=Gx(s,vi),n=Yp(n,vi);return s=Gx(s,e),s}function Vmn(t,e){var n,r,s,o,h,d,w,k,C;for(wr(e,"Hierarchical port dummy size processing",1),w=new le,C=new le,r=Xt(ye(Q(t,(Te(),Q4)))),n=r*2,o=new S(t.b);o.a<o.c.c.length;){for(s=u(J(o),29),w.c=Pt(Xn,Ie,1,0,5,1),C.c=Pt(Xn,Ie,1,0,5,1),d=new S(s.a);d.a<d.c.c.length;)h=u(J(d),10),h.k==(Gn(),xs)&&(k=u(Q(h,(se(),oc)),61),k==(be(),Nn)?w.c[w.c.length]=h:k==mr&&(C.c[C.c.length]=h));Voe(w,!0,n),Voe(C,!1,n)}or(e)}function Umn(t,e){var n,r,s,o,h,d,w;wr(e,"Layer constraint postprocessing",1),w=t.b,w.c.length!=0&&(r=(An(0,w.c.length),u(w.c[0],29)),h=u(Fe(w,w.c.length-1),29),n=new Ch(t),o=new Ch(t),Mwn(t,r,h,n,o),n.a.c.length==0||(Um(0,w.c.length),W9(w.c,0,n)),o.a.c.length==0||(w.c[w.c.length]=o)),Vs(t,(se(),Nlt))&&(s=new Ch(t),d=new Ch(t),Mvn(t,s,d),s.a.c.length==0||(Um(0,w.c.length),W9(w.c,0,s)),d.a.c.length==0||(w.c[w.c.length]=d)),or(e)}function yle(t){var e,n,r,s,o,h,d,w,k,C;for(w=new S(t.a);w.a<w.c.c.length;)if(d=u(J(w),10),d.k==(Gn(),xs)&&(s=u(Q(d,(se(),oc)),61),s==(be(),Hn)||s==Bn))for(r=new ar(lr(z0(d).a.Kc(),new z));zr(r);)n=u(Lr(r),17),e=n.a,e.b!=0&&(k=n.c,k.i==d&&(o=(Qn(e.b!=0),u(e.a.a.c,8)),o.b=Ko(ct(ot(Us,1),te,8,0,[k.i.n,k.n,k.a])).b),C=n.d,C.i==d&&(h=(Qn(e.b!=0),u(e.c.b.c,8)),h.b=Ko(ct(ot(Us,1),te,8,0,[C.i.n,C.n,C.a])).b))}function Wmn(t,e){var n,r,s,o,h,d,w;for(wr(e,"Sort By Input Model "+Q(t,(Te(),db)),1),s=0,r=new S(t.b);r.a<r.c.c.length;){for(n=u(J(r),29),w=s==0?0:s-1,d=u(Fe(t.b,w),29),h=new S(n.a);h.a<h.c.c.length;)o=u(J(h),10),Gt(Q(o,os))!==Gt((oa(),G2))&&Gt(Q(o,os))!==Gt(Vc)&&(vn(),Xs(o.j,new Rte(d,Fse(o))),Yb(e,"Node "+o+" ports: "+o.j));vn(),Xs(n.a,new one(d,u(Q(t,db),339),u(Q(t,F9t),378))),Yb(e,"Layer "+s+": "+n),++s}or(e)}function Kmn(t,e){var n,r,s,o;if(o=cle(e),us(new Tn(null,(!e.c&&(e.c=new he(fl,e,9,9)),new _n(e.c,16))),new jn(o)),s=u(Q(o,(se(),Gc)),21),Y3n(e,s),s.Hc((oo(),bh)))for(r=new er((!e.c&&(e.c=new he(fl,e,9,9)),e.c));r.e!=r.i.gc();)n=u(dr(r),118),_4n(t,e,o,n);return u(qe(e,(Te(),F2)),174).gc()!=0&&tue(e,o),je(Re(Q(o,cCt)))&&s.Fc($G),Vs(o,SO)&&jqt(new l3t(Xt(ye(Q(o,SO)))),o),Gt(qe(e,jy))===Gt(($0(),Zg))?j5n(t,e,o):a5n(t,e,o),o}function x_(t,e,n,r){var s,o,h;if(this.j=new le,this.k=new le,this.b=new le,this.c=new le,this.e=new Ax,this.i=new Du,this.f=new qtt,this.d=new le,this.g=new le,ue(this.b,t),ue(this.b,e),this.e.c=b.Math.min(t.a,e.a),this.e.d=b.Math.min(t.b,e.b),this.e.b=b.Math.abs(t.a-e.a),this.e.a=b.Math.abs(t.b-e.b),s=u(Q(r,(Te(),_o)),74),s)for(h=ei(s,0);h.b!=h.d.c;)o=u(ti(h),8),jmt(o.a,t.a)&&ni(this.i,o);n&&ue(this.j,n),ue(this.k,r)}function Ymn(t,e,n){var r,s,o,h,d,w,k,C,M,F;for(C=new Vj(new Ci(n)),d=Pt(dl,i0,25,t.f.e.c.length,16,1),awt(d,d.length),n[e.b]=0,k=new S(t.f.e);k.a<k.c.c.length;)w=u(J(k),144),w.b!=e.b&&(n[w.b]=vi),M8(dE(C,w));for(;C.b.c.length!=0;)for(M=u(Qrt(C),144),d[M.b]=!0,o=tWt(new het(t.b,M),0);o.c;)s=u(Bwt(o),282),F=Tfn(s,M),!d[F.b]&&(Vs(s,(JI(),oG))?h=Xt(ye(Q(s,oG))):h=t.c,r=n[M.b]+h,r<n[F.b]&&(n[F.b]=r,Qee(C,F),M8(dE(C,F))))}function xle(t,e,n){var r,s,o,h,d,w,k,C,M;for(s=!0,h=new S(t.b);h.a<h.c.c.length;){for(o=u(J(h),29),k=Ts,C=null,w=new S(o.a);w.a<w.c.c.length;)if(d=u(J(w),10),M=Xt(e.p[d.p])+Xt(e.d[d.p])-d.d.d,r=Xt(e.p[d.p])+Xt(e.d[d.p])+d.o.b+d.d.a,M>k&&r>k)C=d,k=Xt(e.p[d.p])+Xt(e.d[d.p])+d.o.b+d.d.a;else{s=!1,n.n&&Yb(n,"bk node placement breaks on "+d+" which should have been after "+C);break}if(!s)break}return n.n&&Yb(n,e+" is feasible: "+s),s}function Xmn(t,e,n,r){var s,o,h,d,w,k,C;for(d=-1,C=new S(t);C.a<C.c.c.length;)k=u(J(C),112),k.g=d--,s=Sr(m$(t$(Ri(new Tn(null,new _n(k.f,16)),new LQ),new MQ)).d),o=Sr(m$(t$(Ri(new Tn(null,new _n(k.k,16)),new IQ),new X5)).d),h=s,w=o,r||(h=Sr(m$(t$(new Tn(null,new _n(k.f,16)),new DQ)).d),w=Sr(m$(t$(new Tn(null,new _n(k.k,16)),new OQ)).d)),k.d=h,k.a=s,k.i=w,k.b=o,w==0?hs(n,k,n.c.b,n.c):h==0&&hs(e,k,e.c.b,e.c)}function Qmn(t,e,n,r){var s,o,h,d,w,k,C;if(n.d.i!=e.i){for(s=new H0(t),_0(s,(Gn(),Zs)),Jt(s,(se(),_i),n),Jt(s,(Te(),os),(oa(),Vc)),r.c[r.c.length]=s,h=new Mc,Uo(h,s),Fs(h,(be(),Bn)),d=new Mc,Uo(d,s),Fs(d,Hn),C=n.d,sa(n,h),o=new zv,Lo(o,n),Jt(o,_o,null),Da(o,d),sa(o,C),k=new ha(n.b,0);k.b<k.d.gc();)w=(Qn(k.b<k.d.gc()),u(k.d.Xb(k.c=k.b++),70)),Gt(Q(w,Md))===Gt((A1(),Yy))&&(Jt(w,M6,n),El(k),ue(o.b,w));tce(s,h,d)}}function Zmn(t,e,n,r){var s,o,h,d,w,k,C;if(n.c.i!=e.i)for(s=new H0(t),_0(s,(Gn(),Zs)),Jt(s,(se(),_i),n),Jt(s,(Te(),os),(oa(),Vc)),r.c[r.c.length]=s,h=new Mc,Uo(h,s),Fs(h,(be(),Bn)),d=new Mc,Uo(d,s),Fs(d,Hn),sa(n,h),o=new zv,Lo(o,n),Jt(o,_o,null),Da(o,d),sa(o,e),tce(s,h,d),k=new ha(n.b,0);k.b<k.d.gc();)w=(Qn(k.b<k.d.gc()),u(k.d.Xb(k.c=k.b++),70)),C=u(Q(w,Md),272),C==(A1(),Yy)&&(Vs(w,M6)||Jt(w,M6,n),El(k),ue(o.b,w))}function Jmn(t,e,n,r,s){var o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t;for(F=new le,gt=E$(r),tt=e*t.a,M=0,V=0,o=new qs,h=new qs,d=new le,Lt=0,_t=0,H=0,Y=0,k=0,C=0;gt.a.gc()!=0;)w=rln(gt,s,h),w&&(gt.a.Bc(w)!=null,d.c[d.c.length]=w,o.a.zc(w,o),V=t.f[w.p],Lt+=t.e[w.p]-V*t.b,M=t.c[w.p],_t+=M*t.b,C+=V*t.b,Y+=t.e[w.p]),(!w||gt.a.gc()==0||Lt>=tt&&t.e[w.p]>V*t.b||_t>=n*tt)&&(F.c[F.c.length]=d,d=new le,Ua(h,o),o.a.$b(),k-=C,H=b.Math.max(H,k*t.b+Y),k+=_t,Lt=_t,_t=0,C=0,Y=0);return new la(H,F)}function tyn(t){var e,n,r,s,o,h,d,w,k,C,M,F,H;for(n=(k=new b1(t.c.b).a.vc().Kc(),new v1(k));n.a.Ob();)e=(d=u(n.a.Pb(),42),u(d.dd(),149)),s=e.a,s==null&&(s=""),r=_Qe(t.c,s),!r&&s.length==0&&(r=Sun(t)),r&&!ry(r.c,e,!1)&&ni(r.c,e);for(h=ei(t.a,0);h.b!=h.d.c;)o=u(ti(h),478),C=Drt(t.c,o.a),H=Drt(t.c,o.b),C&&H&&ni(C.c,new la(H,o.c));for(_h(t.a),F=ei(t.b,0);F.b!=F.d.c;)M=u(ti(F),478),e=CQe(t.c,M.a),w=Drt(t.c,M.b),e&&w&&pYe(e,w,M.c);_h(t.b)}function eyn(t,e,n){var r,s,o,h,d,w,k,C,M,F,H;o=new Hk(t),h=new jse,s=(cI(h.g),cI(h.j),Yu(h.b),cI(h.d),cI(h.i),Yu(h.k),Yu(h.c),Yu(h.e),H=koe(h,o,null),hce(h,o),H),e&&(k=new Hk(e),d=hyn(k),N4t(s,ct(ot(wSt,1),Ie,527,0,[d]))),F=!1,M=!1,n&&(k=new Hk(n),xH in k.a&&(F=D0(k,xH).ge().a),Nde in k.a&&(M=D0(k,Nde).ge().a)),C=rHt(Dee(new Yk,F),M),K0n(new gZ,s,C),xH in o.a&&Wf(o,xH,null),(F||M)&&(w=new mx,ple(C,w,F,M),Wf(o,xH,w)),r=new lzt(h),qcn(new r2t(s),r)}function nyn(t,e,n){var r,s,o,h,d,w,k,C,M;for(h=new Gse,k=ct(ot(Tr,1),Xr,25,15,[0]),s=-1,o=0,r=0,w=0;w<t.b.c.length;++w)if(C=u(Fe(t.b,w),434),C.b>0){if(s<0&&C.a&&(s=w,o=k[0],r=0),s>=0){if(d=C.b,w==s&&(d-=r++,d==0))return 0;if(!khe(e,k,C,d,h)){w=s-1,k[0]=o;continue}}else if(s=-1,!khe(e,k,C,0,h))return 0}else{if(s=-1,ba(C.c,0)==32){if(M=k[0],Hte(e,k),k[0]>M)continue}else if(Fnn(e,C.c,k[0])){k[0]+=C.c.length;continue}return 0}return F4n(h,n)?k[0]:0}function k_(t){var e,n,r,s,o,h,d,w;if(!t.f){if(w=new C0,d=new C0,e=aA,h=e.a.zc(t,e),h==null){for(o=new er(So(t));o.e!=o.i.gc();)s=u(dr(o),26),rs(w,k_(s));e.a.Bc(t)!=null,e.a.gc()==0}for(r=(!t.s&&(t.s=new he(Au,t,21,17)),new er(t.s));r.e!=r.i.gc();)n=u(dr(r),170),Et(n,99)&&Mr(d,u(n,18));ey(d),t.r=new PKt(t,(u(St(Wt((jp(),Ln).o),6),18),d.i),d.g),rs(w,t.r),ey(w),t.f=new q3((u(St(Wt(Ln.o),5),18),w.i),w.g),rl(t).b&=-3}return t.f}function ryn(t){var e,n,r,s,o,h,d,w,k,C,M,F,H,V;for(h=t.o,r=Pt(Tr,Xr,25,h,15,1),s=Pt(Tr,Xr,25,h,15,1),n=t.p,e=Pt(Tr,Xr,25,n,15,1),o=Pt(Tr,Xr,25,n,15,1),k=0;k<h;k++){for(M=0;M<n&&!l4(t,k,M);)++M;r[k]=M}for(C=0;C<h;C++){for(M=n-1;M>=0&&!l4(t,C,M);)--M;s[C]=M}for(H=0;H<n;H++){for(d=0;d<h&&!l4(t,d,H);)++d;e[H]=d}for(V=0;V<n;V++){for(d=h-1;d>=0&&!l4(t,d,V);)--d;o[V]=d}for(w=0;w<h;w++)for(F=0;F<n;F++)w<o[F]&&w>e[F]&&F<s[w]&&F>r[w]&&bq(t,w,F,!1,!0)}function axt(t){var e,n,r,s,o,h,d,w;n=je(Re(Q(t,(Zf(),Qpe)))),o=t.a.c.d,d=t.a.d.d,n?(h=ud(na(new $e(d.a,d.b),o),.5),w=ud(nc(t.e),.5),e=na(Li(new $e(o.a,o.b),h),w),F2t(t.d,e)):(s=Xt(ye(Q(t.a,sbe))),r=t.d,o.a>=d.a?o.b>=d.b?(r.a=d.a+(o.a-d.a)/2+s,r.b=d.b+(o.b-d.b)/2-s-t.e.b):(r.a=d.a+(o.a-d.a)/2+s,r.b=o.b+(d.b-o.b)/2+s):o.b>=d.b?(r.a=o.a+(d.a-o.a)/2+s,r.b=d.b+(o.b-d.b)/2+s):(r.a=o.a+(d.a-o.a)/2+s,r.b=o.b+(d.b-o.b)/2-s-t.e.b))}function $c(t,e){var n,r,s,o,h,d,w;if(t==null)return null;if(o=t.length,o==0)return"";for(w=Pt(mh,vd,25,o,15,1),kmt(0,o,t.length),kmt(0,o,w.length),zYt(t,0,o,w,0),n=null,d=e,s=0,h=0;s<o;s++)r=w[s],qhe(),r<=32&&vt[r]&2?d?(!n&&(n=new Th(t)),Mnn(n,s-h++)):(d=e,r!=32&&(!n&&(n=new Th(t)),Qen(n,s-h,s-h+1,String.fromCharCode(32)))):d=!1;return d?n?(o=n.a.length,o>0?Dl(n.a,0,o-1):""):t.substr(0,o-1):n?n.a:t}function kle(t){Sv(t,new w2(Ev(yv(kv(xv(new pg,T2),"ELK DisCo"),"Layouter for arranging unconnected subgraphs. The subgraphs themselves are, by default, not laid out."),new dg))),xe(t,T2,Aot,De(c7t)),xe(t,T2,Lot,De($ut)),xe(t,T2,b6,De(Fpe)),xe(t,T2,ww,De(o7t)),xe(t,T2,Vxt,De($pe)),xe(t,T2,Uxt,De(jpe)),xe(t,T2,Gxt,De(zpe)),xe(t,T2,Wxt,De(Rpe)),xe(t,T2,t6t,De(Bpe)),xe(t,T2,e6t,De(jut)),xe(t,T2,n6t,De(a7t)),xe(t,T2,r6t,De(eG))}function oxt(t,e,n,r){var s,o,h,d,w,k,C,M,F;if(o=new H0(t),_0(o,(Gn(),Hc)),Jt(o,(Te(),os),(oa(),Vc)),s=0,e){for(h=new Mc,Jt(h,(se(),_i),e),Jt(o,_i,e.i),Fs(h,(be(),Bn)),Uo(h,o),F=gd(e.e),k=F,C=0,M=k.length;C<M;++C)w=k[C],sa(w,h);Jt(e,Zu,o),++s}if(n){for(d=new Mc,Jt(o,(se(),_i),n.i),Jt(d,_i,n),Fs(d,(be(),Hn)),Uo(d,o),F=gd(n.g),k=F,C=0,M=k.length;C<M;++C)w=k[C],Da(w,d);Jt(n,Zu,o),++s}return Jt(o,(se(),qG),de(s)),r.c[r.c.length]=o,o}function yq(){yq=Z,zAt=ct(ot(mh,1),vd,25,15,[48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70]),P4e=new RegExp(`[ 	
\r\f]+`);try{rA=ct(ot(kxn,1),Ie,2015,0,[new oM((o2t(),Mz("yyyy-MM-dd'T'HH:mm:ss'.'SSSZ",zM((bR(),bR(),sS))))),new oM(Mz("yyyy-MM-dd'T'HH:mm:ss'.'SSS",zM(sS))),new oM(Mz("yyyy-MM-dd'T'HH:mm:ss",zM(sS))),new oM(Mz("yyyy-MM-dd'T'HH:mm",zM(sS))),new oM(Mz("yyyy-MM-dd",zM(sS)))])}catch(t){if(t=Wi(t),!Et(t,78))throw rt(t)}}function iyn(t){var e,n,r,s;if(r=Dat((!t.c&&(t.c=jI(t.f)),t.c),0),t.e==0||t.a==0&&t.f!=-1&&t.e<0)return r;if(e=Umt(t)<0?1:0,n=t.e,s=(r.length+1+b.Math.abs(ps(t.e)),new Lm),e==1&&(s.a+="-"),t.e>0)if(n-=r.length-e,n>=0){for(s.a+="0.";n>D2.length;n-=D2.length)tYt(s,D2);FWt(s,D2,ps(n)),Vr(s,r.substr(e))}else n=e-n,Vr(s,Dl(r,e,ps(n))),s.a+=".",Vr(s,OM(r,ps(n)));else{for(Vr(s,r.substr(e));n<-D2.length;n+=D2.length)tYt(s,D2);FWt(s,D2,ps(-n))}return s.a}function cxt(t,e,n,r){var s,o,h,d,w,k,C,M,F;return w=na(new $e(n.a,n.b),t),k=w.a*e.b-w.b*e.a,C=e.a*r.b-e.b*r.a,M=(w.a*r.b-w.b*r.a)/C,F=k/C,C==0?k==0?(s=Li(new $e(n.a,n.b),ud(new $e(r.a,r.b),.5)),o=Hp(t,s),h=Hp(Li(new $e(t.a,t.b),e),s),d=b.Math.sqrt(r.a*r.a+r.b*r.b)*.5,o<h&&o<=d?new $e(t.a,t.b):h<=d?Li(new $e(t.a,t.b),e):null):null:M>=0&&M<=1&&F>=0&&F<=1?Li(new $e(t.a,t.b),ud(new $e(e.a,e.b),M)):null}function syn(t,e,n){var r,s,o,h,d;if(r=u(Q(t,(Te(),Hlt)),21),n.a>e.a&&(r.Hc((cy(),qO))?t.c.a+=(n.a-e.a)/2:r.Hc(HO)&&(t.c.a+=n.a-e.a)),n.b>e.b&&(r.Hc((cy(),VO))?t.c.b+=(n.b-e.b)/2:r.Hc(GO)&&(t.c.b+=n.b-e.b)),u(Q(t,(se(),Gc)),21).Hc((oo(),bh))&&(n.a>e.a||n.b>e.b))for(d=new S(t.a);d.a<d.c.c.length;)h=u(J(d),10),h.k==(Gn(),xs)&&(s=u(Q(h,oc),61),s==(be(),Hn)?h.n.a+=n.a-e.a:s==mr&&(h.n.b+=n.b-e.b));o=t.d,t.f.a=n.a-o.b-o.c,t.f.b=n.b-o.d-o.a}function ayn(t,e,n){var r,s,o,h,d;if(r=u(Q(t,(Te(),Hlt)),21),n.a>e.a&&(r.Hc((cy(),qO))?t.c.a+=(n.a-e.a)/2:r.Hc(HO)&&(t.c.a+=n.a-e.a)),n.b>e.b&&(r.Hc((cy(),VO))?t.c.b+=(n.b-e.b)/2:r.Hc(GO)&&(t.c.b+=n.b-e.b)),u(Q(t,(se(),Gc)),21).Hc((oo(),bh))&&(n.a>e.a||n.b>e.b))for(h=new S(t.a);h.a<h.c.c.length;)o=u(J(h),10),o.k==(Gn(),xs)&&(s=u(Q(o,oc),61),s==(be(),Hn)?o.n.a+=n.a-e.a:s==mr&&(o.n.b+=n.b-e.b));d=t.d,t.f.a=n.a-d.b-d.c,t.f.b=n.b-d.d-d.a}function oyn(t){var e,n,r,s,o,h,d,w,k,C,M,F;for(e=zoe(t),C=(d=new Tm(e).a.vc().Kc(),new rM(d));C.a.Ob();){for(k=(s=u(C.a.Pb(),42),u(s.cd(),10)),M=0,F=0,M=k.d.d,F=k.o.b+k.d.a,t.d[k.p]=0,n=k;(o=t.a[n.p])!=k;)r=mhn(n,o),w=0,t.c==(dd(),Kg)?w=r.d.n.b+r.d.a.b-r.c.n.b-r.c.a.b:w=r.c.n.b+r.c.a.b-r.d.n.b-r.d.a.b,h=Xt(t.d[n.p])+w,t.d[o.p]=h,M=b.Math.max(M,o.d.d-h),F=b.Math.max(F,h+o.o.b+o.d.a),n=o;n=k;do t.d[n.p]=Xt(t.d[n.p])+M,n=t.a[n.p];while(n!=k);t.b[k.p]=M+F}}function bat(t){var e,n,r,s,o,h,d,w,k,C,M,F;for(t.b=!1,M=ss,w=Ts,F=ss,k=Ts,r=t.e.a.ec().Kc();r.Ob();)for(n=u(r.Pb(),266),s=n.a,M=b.Math.min(M,s.c),w=b.Math.max(w,s.c+s.b),F=b.Math.min(F,s.d),k=b.Math.max(k,s.d+s.a),h=new S(n.c);h.a<h.c.c.length;)o=u(J(h),395),e=o.a,e.a?(C=s.d+o.b.b,d=C+o.c,F=b.Math.min(F,C),k=b.Math.max(k,d)):(C=s.c+o.b.a,d=C+o.c,M=b.Math.min(M,C),w=b.Math.max(w,d));t.a=new $e(w-M,k-F),t.c=new $e(M+t.d.a,F+t.d.b)}function cyn(t,e,n){var r,s,o,h,d,w,k,C,M;for(M=new le,C=new Vwt(0,n),o=0,Y$(C,new xit(0,0,C,n)),s=0,k=new er(t);k.e!=k.i.gc();)w=u(dr(k),33),r=u(Fe(C.a,C.a.c.length-1),187),d=s+w.g+(u(Fe(C.a,0),187).b.c.length==0?0:n),d>e&&(s=0,o+=C.b+n,M.c[M.c.length]=C,C=new Vwt(o,n),r=new xit(0,C.f,C,n),Y$(C,r),s=0),r.b.c.length==0||w.f>=r.o&&w.f<=r.f||r.a*.5<=w.f&&r.a*1.5>=w.f?i3t(r,w):(h=new xit(r.s+r.r+n,C.f,C,n),Y$(C,h),i3t(h,w)),s=w.i+w.g;return M.c[M.c.length]=C,M}function k4(t){var e,n,r,s,o,h,d,w;if(!t.a){if(t.o=null,w=new Mzt(t),e=new mp,n=aA,d=n.a.zc(t,n),d==null){for(h=new er(So(t));h.e!=h.i.gc();)o=u(dr(h),26),rs(w,k4(o));n.a.Bc(t)!=null,n.a.gc()==0}for(s=(!t.s&&(t.s=new he(Au,t,21,17)),new er(t.s));s.e!=s.i.gc();)r=u(dr(s),170),Et(r,322)&&Mr(e,u(r,34));ey(e),t.k=new NKt(t,(u(St(Wt((jp(),Ln).o),7),18),e.i),e.g),rs(w,t.k),ey(w),t.a=new q3((u(St(Wt(Ln.o),4),18),w.i),w.g),rl(t).b&=-2}return t.a}function uyn(t,e,n,r,s,o,h){var d,w,k,C,M,F;return M=!1,w=Mce(n.q,e.f+e.b-n.q.f),F=s-(n.q.e+w-h),F<r.g||(k=o==t.c.length-1&&F>=(An(o,t.c.length),u(t.c[o],200)).e,C=(d=E_(r,F,!1),d.a),C>e.b&&!k)?!1:((k||C<=e.b)&&(k&&C>e.b?(n.d=C,dI(n,Nae(n,C))):(Jse(n.q,w),n.c=!0),dI(r,s-(n.s+n.r)),YI(r,n.q.e+n.q.d,e.f),Y$(e,r),t.c.length>o&&(tD((An(o,t.c.length),u(t.c[o],200)),r),(An(o,t.c.length),u(t.c[o],200)).a.c.length==0&&Ag(t,o)),M=!0),M)}function uxt(t,e,n,r){var s,o,h,d,w,k,C;if(C=au(t.e.Tg(),e),s=0,o=u(t.g,119),w=null,to(),u(e,66).Oj()){for(d=0;d<t.i;++d)if(h=o[d],C.rl(h.ak())){if(yi(h,n)){w=h;break}++s}}else if(n!=null){for(d=0;d<t.i;++d)if(h=o[d],C.rl(h.ak())){if(yi(n,h.dd())){w=h;break}++s}}else for(d=0;d<t.i;++d)if(h=o[d],C.rl(h.ak())){if(h.dd()==null){w=h;break}++s}return w&&(ml(t.e)&&(k=e.$j()?new Art(t.e,4,e,n,null,s,!0):zp(t,e.Kj()?2:1,e,n,e.zj(),-1,!0),r?r.Ei(k):r=k),r=wD(t,w,r)),r}function vat(t,e,n,r,s,o,h){var d,w,k,C,M,F,H,V,Y;switch(V=0,Y=0,w=s.c,d=s.b,C=n.f,H=n.g,e.g){case 0:V=r.i+r.g+h,t.c?Y=Rdn(V,o,r,h):Y=r.j,F=b.Math.max(w,V+H),k=b.Math.max(d,Y+C);break;case 1:Y=r.j+r.f+h,t.c?V=Bdn(Y,o,r,h):V=r.i,F=b.Math.max(w,V+H),k=b.Math.max(d,Y+C);break;case 2:V=w+h,Y=0,F=w+h+H,k=b.Math.max(d,C);break;case 3:V=0,Y=d+h,F=b.Math.max(w,H),k=d+h+C;break;default:throw rt(new Pn("IllegalPlacementOption."))}return M=new u3t(t.a,F,k,e,V,Y),M}function lyn(t){var e,n,r,s,o,h,d,w,k,C,M,F;if(d=t.d,M=u(Q(t,(se(),N6)),15),e=u(Q(t,L6),15),!(!M&&!e)){if(o=Xt(ye(iy(t,(Te(),Jlt)))),h=Xt(ye(iy(t,dCt))),F=0,M){for(k=0,s=M.Kc();s.Ob();)r=u(s.Pb(),10),k=b.Math.max(k,r.o.b),F+=r.o.a;F+=o*(M.gc()-1),d.d+=k+h}if(n=0,e){for(k=0,s=e.Kc();s.Ob();)r=u(s.Pb(),10),k=b.Math.max(k,r.o.b),n+=r.o.a;n+=o*(e.gc()-1),d.a+=k+h}w=b.Math.max(F,n),w>t.o.a&&(C=(w-t.o.a)/2,d.b=b.Math.max(d.b,C),d.c=b.Math.max(d.c,C))}}function hyn(t){var e,n,r,s,o,h,d,w;for(o=new eZt,YYe(o,(Qx(),A3e)),r=(s=uit(t,Pt(Ae,te,2,0,6,1)),new fx(new wl(new fet(t,s).b)));r.b<r.d.gc();)n=(Qn(r.b<r.d.gc()),Br(r.d.Xb(r.c=r.b++))),h=bxt(Tb,n),h&&(e=D0(t,n),e.je()?d=e.je().a:e.ge()?d=""+e.ge().a:e.he()?d=""+e.he().a:d=e.Ib(),w=gxt(h,d),w!=null&&((Nu(h.j,(Xf(),Js))||Nu(h.j,qn))&&FI(Zrt(o,ns),h,w),Nu(h.j,Id)&&FI(Zrt(o,Ws),h,w),Nu(h.j,$2)&&FI(Zrt(o,fl),h,w),Nu(h.j,Xg)&&FI(Zrt(o,qo),h,w)));return o}function xq(t,e,n,r){var s,o,h,d,w,k;if(w=au(t.e.Tg(),e),o=u(t.g,119),V0(t.e,e)){for(s=0,d=0;d<t.i;++d)if(h=o[d],w.rl(h.ak())){if(s==n)return to(),u(e,66).Oj()?h:(k=h.dd(),k!=null&&r&&Et(e,99)&&u(e,18).Bb&Ya&&(k=d_(t,e,d,s,k)),k);++s}throw rt(new mo(X_+n+S2+s))}else{for(s=0,d=0;d<t.i;++d){if(h=o[d],w.rl(h.ak()))return to(),u(e,66).Oj()?h:(k=h.dd(),k!=null&&r&&Et(e,99)&&u(e,18).Bb&Ya&&(k=d_(t,e,d,s,k)),k);++s}return e.zj()}}function kD(t,e,n){var r,s,o,h,d,w,k,C;if(s=u(t.g,119),V0(t.e,e))return to(),u(e,66).Oj()?new Ij(e,t):new DM(e,t);for(k=au(t.e.Tg(),e),r=0,d=0;d<t.i;++d){if(o=s[d],h=o.ak(),k.rl(h)){if(to(),u(e,66).Oj())return o;if(h==(a6(),W6)||h==U6){for(w=new Il($o(o.dd()));++d<t.i;)o=s[d],h=o.ak(),(h==W6||h==U6)&&Vr(w,$o(o.dd()));return ovt(u(e.Yj(),148),w.a)}else return C=o.dd(),C!=null&&n&&Et(e,99)&&u(e,18).Bb&Ya&&(C=d_(t,e,d,r,C)),C}++r}return e.zj()}function E_(t,e,n){var r,s,o,h,d,w,k,C,M,F;for(o=0,h=t.t,s=0,r=0,w=0,F=0,M=0,n&&(t.n.c=Pt(Xn,Ie,1,0,5,1),ue(t.n,new f$(t.s,t.t,t.i))),d=0,C=new S(t.b);C.a<C.c.c.length;)k=u(J(C),33),o+k.g+(d>0?t.i:0)>e&&w>0&&(o=0,h+=w+t.i,s=b.Math.max(s,F),r+=w+t.i,w=0,F=0,n&&(++M,ue(t.n,new f$(t.s,h,t.i))),d=0),F+=k.g+(d>0?t.i:0),w=b.Math.max(w,k.f),n&&$3t(u(Fe(t.n,M),211),k),o+=k.g+(d>0?t.i:0),++d;return s=b.Math.max(s,F),r+=w,n&&(t.r=s,t.d=r,G3t(t.j)),new ih(t.s,t.t,s,r)}function Ic(t,e,n,r,s){qd();var o,h,d,w,k,C,M,F,H;if(uwt(t,"src"),uwt(n,"dest"),F=sl(t),w=sl(n),Dvt((F.i&4)!=0,"srcType is not an array"),Dvt((w.i&4)!=0,"destType is not an array"),M=F.c,h=w.c,Dvt(M.i&1?M==h:(h.i&1)==0,"Array types don't match"),H=t.length,k=n.length,e<0||r<0||s<0||e+s>H||r+s>k)throw rt(new Tpt);if(!(M.i&1)&&F!=w)if(C=s2(t),o=s2(n),Gt(t)===Gt(n)&&e<r)for(e+=s,d=r+s;d-- >r;)Ji(o,d,C[--e]);else for(d=r+s;r<d;)Ji(o,r++,C[e++]);else s>0&&Y4t(t,e,n,r,s,!0)}function wat(){wat=Z,Cge=ct(ot(Tr,1),Xr,25,15,[_a,1162261467,A_,1220703125,362797056,1977326743,A_,387420489,Nq,214358881,429981696,815730721,1475789056,170859375,268435456,410338673,612220032,893871739,128e7,1801088541,113379904,148035889,191102976,244140625,308915776,387420489,481890304,594823321,729e6,887503681,A_,1291467969,1544804416,1838265625,60466176]),_ge=ct(ot(Tr,1),Xr,25,15,[-1,-1,31,19,15,13,11,11,10,9,9,8,8,8,8,7,7,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5])}function fyn(t){var e,n,r,s,o,h,d,w;for(s=new S(t.b);s.a<s.c.c.length;)for(r=u(J(s),29),h=new S(Gv(r.a));h.a<h.c.c.length;)if(o=u(J(h),10),iee(o)&&(n=u(Q(o,(se(),Lw)),305),!n.g&&n.d))for(e=n,w=n.d;w;)fue(w.i,w.k,!1,!0),vI(e.a),vI(w.i),vI(w.k),vI(w.b),sa(w.c,e.c.d),sa(e.c,null),ko(e.a,null),ko(w.i,null),ko(w.k,null),ko(w.b,null),d=new Zwt(e.i,w.a,e.e,w.j,w.f),d.k=e.k,d.n=e.n,d.b=e.b,d.c=w.c,d.g=e.g,d.d=w.d,Jt(e.i,Lw,d),Jt(w.a,Lw,d),w=w.d,e=d}function vy(t,e){var n,r,s,o,h;if(h=u(e,136),b4(t),b4(h),h.b!=null){if(t.c=!0,t.b==null){t.b=Pt(Tr,Xr,25,h.b.length,15,1),Ic(h.b,0,t.b,0,h.b.length);return}for(o=Pt(Tr,Xr,25,t.b.length+h.b.length,15,1),n=0,r=0,s=0;n<t.b.length||r<h.b.length;)n>=t.b.length?(o[s++]=h.b[r++],o[s++]=h.b[r++]):r>=h.b.length?(o[s++]=t.b[n++],o[s++]=t.b[n++]):h.b[r]<t.b[n]||h.b[r]===t.b[n]&&h.b[r+1]<t.b[n+1]?(o[s++]=h.b[r++],o[s++]=h.b[r++]):(o[s++]=t.b[n++],o[s++]=t.b[n++]);t.b=o}}function dyn(t,e){var n,r,s,o,h,d,w,k,C,M;return n=je(Re(Q(t,(se(),Py)))),d=je(Re(Q(e,Py))),r=u(Q(t,n1),11),w=u(Q(e,n1),11),s=u(Q(t,Rh),11),k=u(Q(e,Rh),11),C=!!r&&r==w,M=!!s&&s==k,!n&&!d?new wvt(u(J(new S(t.j)),11).p==u(J(new S(e.j)),11).p,C,M):(o=(!je(Re(Q(t,Py)))||je(Re(Q(t,EO))))&&(!je(Re(Q(e,Py)))||je(Re(Q(e,EO)))),h=(!je(Re(Q(t,Py)))||!je(Re(Q(t,EO))))&&(!je(Re(Q(e,Py)))||!je(Re(Q(e,EO)))),new wvt(C&&o||M&&h,C,M))}function gyn(t){var e,n,r,s,o,h,d,w;for(r=0,n=0,w=new Qi,e=0,d=new S(t.n);d.a<d.c.c.length;)h=u(J(d),211),h.c.c.length==0?hs(w,h,w.c.b,w.c):(r=b.Math.max(r,h.d),n+=h.a+(e>0?t.i:0)),++e;for(Tln(t.n,w),t.d=n,t.r=r,t.g=0,t.f=0,t.e=0,t.o=ss,t.p=ss,o=new S(t.b);o.a<o.c.c.length;)s=u(J(o),33),t.p=b.Math.min(t.p,s.g),t.g=b.Math.max(t.g,s.g),t.f=b.Math.max(t.f,s.f),t.o=b.Math.min(t.o,s.f),t.e+=s.f+t.i;t.a=t.e/t.b.c.length-t.i*((t.b.c.length-1)/t.b.c.length),G3t(t.j)}function Ele(t){var e,n,r,s;return t.Db&64?jit(t):(e=new Il(l8t),r=t.k,r?Vr(Vr((e.a+=' "',e),r),'"'):(!t.n&&(t.n=new he(qo,t,1,7)),t.n.i>0&&(s=(!t.n&&(t.n=new he(qo,t,1,7)),u(St(t.n,0),137)).a,!s||Vr(Vr((e.a+=' "',e),s),'"'))),n=(!t.b&&(t.b=new Cn(br,t,4,7)),!(t.b.i<=1&&(!t.c&&(t.c=new Cn(br,t,5,8)),t.c.i<=1))),n?e.a+=" [":e.a+=" ",Vr(e,m2t(new aet,new er(t.b))),n&&(e.a+="]"),e.a+=Pot,n&&(e.a+="["),Vr(e,m2t(new aet,new er(t.c))),n&&(e.a+="]"),e.a)}function mat(t,e){var n,r,s,o,h,d,w;if(t.a){if(d=t.a.ne(),w=null,d!=null?e.a+=""+d:(h=t.a.Dj(),h!=null&&(o=cd(h,Eu(91)),o!=-1?(w=h.substr(o),e.a+=""+Dl(h==null?Tu:(On(h),h),0,o)):e.a+=""+h)),t.d&&t.d.i!=0){for(s=!0,e.a+="<",r=new er(t.d);r.e!=r.i.gc();)n=u(dr(r),87),s?s=!1:e.a+=Ka,mat(n,e);e.a+=">"}w!=null&&(e.a+=""+w)}else t.e?(d=t.e.zb,d!=null&&(e.a+=""+d)):(e.a+="?",t.b?(e.a+=" super ",mat(t.b,e)):t.f&&(e.a+=" extends ",mat(t.f,e)))}function pyn(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce,Se,We,Qe,Rn;for(Yt=t.c,ce=e.c,n=Ro(Yt.a,t,0),r=Ro(ce.a,e,0),_t=u(iw(t,(so(),Ju)).Kc().Pb(),11),Qe=u(iw(t,eu).Kc().Pb(),11),Bt=u(iw(e,Ju).Kc().Pb(),11),Rn=u(iw(e,eu).Kc().Pb(),11),gt=gd(_t.e),Se=gd(Qe.g),Lt=gd(Bt.e),We=gd(Rn.g),oy(t,r,ce),h=Lt,C=0,V=h.length;C<V;++C)s=h[C],sa(s,_t);for(d=We,M=0,Y=d.length;M<Y;++M)s=d[M],Da(s,Qe);for(oy(e,n,Yt),w=gt,F=0,tt=w.length;F<tt;++F)s=w[F],sa(s,Bt);for(o=Se,k=0,H=o.length;k<H;++k)s=o[k],Da(s,Rn)}function Tle(t,e,n,r){var s,o,h,d,w,k,C;if(o=Ez(r),d=je(Re(Q(r,(Te(),nCt)))),(d||je(Re(Q(t,JG))))&&!H3(u(Q(t,os),98)))s=Jx(o),w=Q5t(t,n,n==(so(),eu)?s:HI(s));else switch(w=new Mc,Uo(w,t),e?(C=w.n,C.a=e.a-t.n.a,C.b=e.b-t.n.b,Pae(C,0,0,t.o.a,t.o.b),Fs(w,Kue(w,o))):(s=Jx(o),Fs(w,n==(so(),eu)?s:HI(s))),h=u(Q(r,(se(),Gc)),21),k=w.j,o.g){case 2:case 1:(k==(be(),Nn)||k==mr)&&h.Fc((oo(),V4));break;case 4:case 3:(k==(be(),Hn)||k==Bn)&&h.Fc((oo(),V4))}return w}function lxt(t,e,n){var r,s,o,h,d,w,k,C;return b.Math.abs(e.s-e.c)<yd||b.Math.abs(n.s-n.c)<yd?0:(r=Pce(t,e.j,n.e),s=Pce(t,n.j,e.e),o=r==-1||s==-1,h=0,o?(r==-1&&(new t2((Vf(),pb),n,e,1),++h),s==-1&&(new t2((Vf(),pb),e,n,1),++h)):(d=a4(e.j,n.s,n.c),d+=a4(n.e,e.s,e.c),w=a4(n.j,e.s,e.c),w+=a4(e.e,n.s,n.c),k=r+16*d,C=s+16*w,k<C?new t2((Vf(),Uy),e,n,C-k):k>C?new t2((Vf(),Uy),n,e,k-C):k>0&&C>0&&(new t2((Vf(),Uy),e,n,0),new t2(Uy,n,e,0))),h)}function Cle(t,e){var n,r,s,o,h,d;for(h=new h2(new wg(t.f.b).a);h.b;){if(o=Yv(h),s=u(o.cd(),594),e==1){if(s.gf()!=(ao(),Z0)&&s.gf()!=Q0)continue}else if(s.gf()!=(ao(),jh)&&s.gf()!=kf)continue;switch(r=u(u(o.dd(),46).b,81),d=u(u(o.dd(),46).a,189),n=d.c,s.gf().g){case 2:r.g.c=t.e.a,r.g.b=b.Math.max(1,r.g.b+n);break;case 1:r.g.c=r.g.c+n,r.g.b=b.Math.max(1,r.g.b-n);break;case 4:r.g.d=t.e.b,r.g.a=b.Math.max(1,r.g.a+n);break;case 3:r.g.d=r.g.d+n,r.g.a=b.Math.max(1,r.g.a-n)}}}function byn(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y;for(d=Pt(Tr,Xr,25,e.b.c.length,15,1),k=Pt(elt,ae,267,e.b.c.length,0,1),w=Pt(o0,zg,10,e.b.c.length,0,1),M=t.a,F=0,H=M.length;F<H;++F){for(C=M[F],Y=0,h=new S(C.e);h.a<h.c.c.length;)s=u(J(h),10),r=t2t(s.c),++d[r],V=Xt(ye(Q(e,(Te(),xf)))),d[r]>0&&w[r]&&(V=V3(t.b,w[r],s)),Y=b.Math.max(Y,s.c.c.b+V);for(o=new S(C.e);o.a<o.c.c.length;)s=u(J(o),10),s.n.b=Y+s.d.d,n=s.c,n.c.b=Y+s.d.d+s.o.b+s.d.a,k[Ro(n.b.b,n,0)]=s.k,w[Ro(n.b.b,n,0)]=s}}function _le(t,e){var n,r,s,o,h,d,w,k,C,M,F;for(r=new ar(lr(G0(e).a.Kc(),new z));zr(r);)n=u(Lr(r),79),Et(St((!n.b&&(n.b=new Cn(br,n,4,7)),n.b),0),186)||(w=Mo(u(St((!n.c&&(n.c=new Cn(br,n,5,8)),n.c),0),82)),g_(n)||(h=e.i+e.g/2,d=e.j+e.f/2,C=w.i+w.g/2,M=w.j+w.f/2,F=new Ta,F.a=C-h,F.b=M-d,o=new $e(F.a,F.b),hE(o,e.g,e.f),F.a-=o.a,F.b-=o.b,h=C-F.a,d=M-F.b,k=new $e(F.a,F.b),hE(k,w.g,w.f),F.a-=k.a,F.b-=k.b,C=h+F.a,M=d+F.b,s=m4(n,!0,!0),B8(s,h),j8(s,d),F8(s,C),R8(s,M),_le(t,w)))}function Sle(t){Sv(t,new w2(Ev(yv(kv(xv(new pg,mw),"ELK SPOrE Compaction"),"ShrinkTree is a compaction algorithm that maintains the topology of a layout. The relocation of diagram elements is based on contracting a spanning tree."),new PL))),xe(t,mw,_ct,De(DV)),xe(t,mw,t8t,De(Yht)),xe(t,mw,e8t,De(Kht)),xe(t,mw,Sct,De(rSt)),xe(t,mw,Act,De(Wht)),xe(t,mw,ww,nSt),xe(t,mw,ky,8),xe(t,mw,Lct,De(g3e)),xe(t,mw,n8t,De(tSt)),xe(t,mw,r8t,De(eSt)),xe(t,mw,KD,(Fn(),!1))}function vyn(t,e){var n,r,s,o,h,d,w,k,C,M;for(wr(e,"Simple node placement",1),M=u(Q(t,(se(),Y4)),304),d=0,o=new S(t.b);o.a<o.c.c.length;){for(r=u(J(o),29),h=r.c,h.b=0,n=null,k=new S(r.a);k.a<k.c.c.length;)w=u(J(k),10),n&&(h.b+=E3t(w,n,M.c)),h.b+=w.d.d+w.o.b+w.d.a,n=w;d=b.Math.max(d,h.b)}for(s=new S(t.b);s.a<s.c.c.length;)for(r=u(J(s),29),h=r.c,C=(d-h.b)/2,n=null,k=new S(r.a);k.a<k.c.c.length;)w=u(J(k),10),n&&(C+=E3t(w,n,M.c)),C+=w.d.d,w.n.b=C,C+=w.o.b+w.d.a,n=w;or(e)}function wyn(t,e,n,r){var s,o,h,d,w,k,C,M;if(r.gc()==0)return!1;if(w=(to(),u(e,66).Oj()),h=w?r:new Kv(r.gc()),V0(t.e,e)){if(e.hi())for(C=r.Kc();C.Ob();)k=C.Pb(),mq(t,e,k,Et(e,99)&&(u(e,18).Bb&Ya)!=0)||(o=Yd(e,k),h.Fc(o));else if(!w)for(C=r.Kc();C.Ob();)k=C.Pb(),o=Yd(e,k),h.Fc(o)}else{for(M=au(t.e.Tg(),e),s=u(t.g,119),d=0;d<t.i;++d)if(o=s[d],M.rl(o.ak()))throw rt(new Pn(eO));if(r.gc()>1)throw rt(new Pn(eO));w||(o=Yd(e,r.Kc().Pb()),h.Fc(o))}return yyt(t,$4t(t,e,n),h)}function myn(t,e){var n,r,s,o;for(non(e.b.j),us(pu(new Tn(null,new _n(e.d,16)),new jX),new $X),o=new S(e.d);o.a<o.c.c.length;){switch(s=u(J(o),101),s.e.g){case 0:n=u(Fe(s.j,0),113).d.j,KB(s,u(Ov(Hj(u(Ai(s.k,n),15).Oc(),z4)),113)),WB(s,u(Ov(qj(u(Ai(s.k,n),15).Oc(),z4)),113));break;case 1:r=W3t(s),KB(s,u(Ov(Hj(u(Ai(s.k,r[0]),15).Oc(),z4)),113)),WB(s,u(Ov(qj(u(Ai(s.k,r[1]),15).Oc(),z4)),113));break;case 2:pgn(t,s);break;case 3:I2n(s);break;case 4:P2n(t,s)}eon(s)}t.a=null}function yat(t,e,n){var r,s,o,h,d,w,k,C;return r=t.a.o==(E1(),z1)?ss:Ts,d=nle(t,new rVt(e,n)),!d.a&&d.c?(ni(t.d,d),r):d.a?(s=d.a.c,w=d.a.d,n?(k=t.a.c==(dd(),Rw)?w:s,o=t.a.c==Rw?s:w,h=t.a.g[o.i.p],C=Xt(t.a.p[h.p])+Xt(t.a.d[o.i.p])+o.n.b+o.a.b-Xt(t.a.d[k.i.p])-k.n.b-k.a.b):(k=t.a.c==(dd(),Kg)?w:s,o=t.a.c==Kg?s:w,C=Xt(t.a.p[t.a.g[o.i.p].p])+Xt(t.a.d[o.i.p])+o.n.b+o.a.b-Xt(t.a.d[k.i.p])-k.n.b-k.a.b),t.a.n[t.a.g[s.i.p].p]=(Fn(),!0),t.a.n[t.a.g[w.i.p].p]=!0,C):r}function kq(t,e,n){var r,s,o,h,d,w,k,C;if(V0(t.e,e))w=(to(),u(e,66).Oj()?new Ij(e,t):new DM(e,t)),iq(w.c,w.b),hC(w,u(n,14));else{for(C=au(t.e.Tg(),e),r=u(t.g,119),h=0;h<t.i;++h)if(s=r[h],o=s.ak(),C.rl(o)){if(o==(a6(),W6)||o==U6){for(k=B3t(t,e,n),d=h,k?dy(t,h):++h;h<t.i;)s=r[h],o=s.ak(),o==W6||o==U6?dy(t,h):++h;k||u(u4(t,d,Yd(e,n)),72)}else B3t(t,e,n)?dy(t,h):u(u4(t,h,(to(),u(e,66).Oj()?u(n,72):Yd(e,n))),72);return}B3t(t,e,n)||Mr(t,(to(),u(e,66).Oj()?u(n,72):Yd(e,n)))}}function Ale(t,e,n){var r,s,o,h,d,w,k,C;return yi(n,t.b)||(t.b=n,o=new Es,h=u(Pl(pu(new Tn(null,new _n(n.f,16)),o),Ym(new cn,new li,new di,new Ee,ct(ot(ll,1),ae,132,0,[(I1(),Ly),Gl]))),21),t.e=!0,t.f=!0,t.c=!0,t.d=!0,s=h.Hc((n6(),cO)),r=h.Hc(uO),s&&!r&&(t.f=!1),!s&&r&&(t.d=!1),s=h.Hc(oO),r=h.Hc(lO),s&&!r&&(t.c=!1),!s&&r&&(t.e=!1)),C=u(t.a.Ce(e,n),46),w=u(C.a,19).a,k=u(C.b,19).a,d=!1,w<0?t.c||(d=!0):t.e||(d=!0),k<0?t.d||(d=!0):t.f||(d=!0),d?Ale(t,C,n):C}function yyn(t){var e,n,r,s;s=t.o,Bm(),t.A.dc()||yi(t.A,t7t)?e=s.b:(e=cD(t.f),t.A.Hc((_l(),eN))&&!t.B.Hc((cl(),eA))&&(e=b.Math.max(e,cD(u(go(t.p,(be(),Hn)),244))),e=b.Math.max(e,cD(u(go(t.p,Bn),244)))),n=Ane(t),n&&(e=b.Math.max(e,n.b)),t.A.Hc(nN)&&(t.q==(oa(),h0)||t.q==Vc)&&(e=b.Math.max(e,Lj(u(go(t.b,(be(),Hn)),124))),e=b.Math.max(e,Lj(u(go(t.b,Bn),124))))),je(Re(t.e.yf().We((ci(),jV))))?s.b=b.Math.max(s.b,e):s.b=e,r=t.f.i,r.d=0,r.a=e,dat(t.f)}function Lle(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y;for(M=0;M<e.length;M++){for(d=t.Kc();d.Ob();)o=u(d.Pb(),225),o.Of(M,e);for(F=0;F<e[M].length;F++){for(w=t.Kc();w.Ob();)o=u(w.Pb(),225),o.Pf(M,F,e);for(Y=e[M][F].j,H=0;H<Y.c.length;H++){for(k=t.Kc();k.Ob();)o=u(k.Pb(),225),o.Qf(M,F,H,e);for(V=(An(H,Y.c.length),u(Y.c[H],11)),n=0,s=new S1(V.b);Vo(s.a)||Vo(s.b);)for(r=u(Vo(s.a)?J(s.a):J(s.b),17),C=t.Kc();C.Ob();)o=u(C.Pb(),225),o.Nf(M,F,H,n++,r,e)}}}for(h=t.Kc();h.Ob();)o=u(h.Pb(),225),o.Mf()}function xyn(t,e){var n,r,s,o,h,d,w;for(t.b=Xt(ye(Q(e,(Te(),Q4)))),t.c=Xt(ye(Q(e,R2))),t.d=u(Q(e,Klt),336),t.a=u(Q(e,KG),275),gfn(e),d=u(Pl(Ri(Ri(Wo(Wo(new Tn(null,new _n(e.b,16)),new xY),new NT),new xL),new ZP),i2(new _e,new we,new nr,ct(ot(ll,1),ae,132,0,[(I1(),Gl)]))),15),s=d.Kc();s.Ob();)n=u(s.Pb(),17),h=u(Q(n,(se(),N2)),15),h.Jc(new mc(t)),Jt(n,N2,null);for(r=d.Kc();r.Ob();)n=u(r.Pb(),17),w=u(Q(n,(se(),i9t)),17),o=u(Q(n,X4),15),L5n(t,o,w),Jt(n,X4,null)}function kyn(t){t.b=null,t.a=null,t.o=null,t.q=null,t.v=null,t.w=null,t.B=null,t.p=null,t.Q=null,t.R=null,t.S=null,t.T=null,t.U=null,t.V=null,t.W=null,t.bb=null,t.eb=null,t.ab=null,t.H=null,t.db=null,t.c=null,t.d=null,t.f=null,t.n=null,t.r=null,t.s=null,t.u=null,t.G=null,t.J=null,t.e=null,t.j=null,t.i=null,t.g=null,t.k=null,t.t=null,t.F=null,t.I=null,t.L=null,t.M=null,t.O=null,t.P=null,t.$=null,t.N=null,t.Z=null,t.cb=null,t.K=null,t.D=null,t.A=null,t.C=null,t._=null,t.fb=null,t.X=null,t.Y=null,t.gb=!1,t.hb=!1}function xat(t){var e,n,r,s,o,h,d,w,k;return!(t.k!=(Gn(),Ds)||t.j.c.length<=1||(o=u(Q(t,(Te(),os)),98),o==(oa(),Vc))||(s=(sy(),(t.q?t.q:(vn(),vn(),a0))._b(Nw)?r=u(Q(t,Nw),197):r=u(Q(Fa(t),CS),197),r),s==lV)||!(s==t5||s==J4)&&(h=Xt(ye(iy(t,_S))),e=u(Q(t,LO),142),!e&&(e=new nvt(h,h,h,h)),k=Yo(t,(be(),Bn)),w=e.d+e.a+(k.gc()-1)*h,w>t.o.b||(n=Yo(t,Hn),d=e.d+e.a+(n.gc()-1)*h,d>t.o.b)))}function kat(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V;if(h=t.e,w=e.e,h==0)return e;if(w==0)return t;if(o=t.d,d=e.d,o+d==2)return n=Ps(t.a[0],co),r=Ps(e.a[0],co),h==w?(C=Oa(n,r),V=Sr(C),H=Sr(zm(C,32)),H==0?new Lg(h,V):new K3(h,2,ct(ot(Tr,1),Xr,25,15,[V,H]))):KI(h<0?Yp(r,n):Yp(n,r));if(h==w)F=h,M=o>=d?Rrt(t.a,o,e.a,d):Rrt(e.a,d,t.a,o);else{if(s=o!=d?o>d?1:-1:Pyt(t.a,e.a,o),s==0)return Jp(),QE;s==1?(F=h,M=Frt(t.a,o,e.a,d)):(F=w,M=Frt(e.a,d,t.a,o))}return k=new K3(F,M.length,M),OC(k),k}function Eat(t,e,n,r,s,o,h){var d,w,k,C,M,F,H;return M=je(Re(Q(e,(Te(),rCt)))),F=null,o==(so(),Ju)&&r.c.i==n?F=r.c:o==eu&&r.d.i==n&&(F=r.d),k=h,!k||!M||F?(C=(be(),Zo),F?C=F.j:H3(u(Q(n,os),98))&&(C=o==Ju?Bn:Hn),w=Eyn(t,e,n,o,C,r),d=Nrt((Fa(n),r)),o==Ju?(Da(d,u(Fe(w.j,0),11)),sa(d,s)):(Da(d,s),sa(d,u(Fe(w.j,0),11))),k=new Gre(r,d,w,u(Q(w,(se(),_i)),11),o,!F)):(ue(k.e,r),H=b.Math.max(Xt(ye(Q(k.d,Ug))),Xt(ye(Q(r,Ug)))),Jt(k.d,Ug,H)),ln(t.a,r,new Tj(k.d,e,o)),k}function Eq(t,e){var n,r,s,o,h,d,w,k,C,M;if(C=null,t.d&&(C=u(Fc(t.d,e),138)),!C){if(o=t.a.Mh(),M=o.i,!t.d||$9(t.d)!=M){for(w=new Cr,t.d&&VC(w,t.d),k=w.f.c+w.g.c,d=k;d<M;++d)r=u(St(o,d),138),s=Og(t.e,r).ne(),n=u(s==null?su(w.f,null,r):nw(w.g,s,r),138),n&&n!=r&&(s==null?su(w.f,null,n):nw(w.g,s,n));if(w.f.c+w.g.c!=M)for(h=0;h<k;++h)r=u(St(o,h),138),s=Og(t.e,r).ne(),n=u(s==null?su(w.f,null,r):nw(w.g,s,r),138),n&&n!=r&&(s==null?su(w.f,null,n):nw(w.g,s,n));t.d=w}C=u(Fc(t.d,e),138)}return C}function Eyn(t,e,n,r,s,o){var h,d,w,k,C,M;return h=null,k=r==(so(),Ju)?o.c:o.d,w=Ez(e),k.i==n?(h=u(Jn(t.b,k),10),h||(h=TD(k,u(Q(n,(Te(),os)),98),s,Own(k),null,k.n,k.o,w,e),Jt(h,(se(),_i),k),ki(t.b,k,h))):(h=TD((C=new xa,M=Xt(ye(Q(e,(Te(),xf))))/2,FI(C,zy,M),C),u(Q(n,os),98),s,r==Ju?-1:1,null,new Ta,new $e(0,0),w,e),d=vdn(h,n,r),Jt(h,(se(),_i),d),ki(t.b,d,h)),u(Q(e,(se(),Gc)),21).Fc((oo(),bh)),H3(u(Q(e,(Te(),os)),98))?Jt(e,os,(oa(),L7)):Jt(e,os,(oa(),H1)),h}function Tyn(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt;wr(e,"Orthogonal edge routing",1),k=Xt(ye(Q(t,(Te(),Z4)))),n=Xt(ye(Q(t,Q4))),r=Xt(ye(Q(t,R2))),F=new Gnt(0,n),tt=0,h=new ha(t.b,0),d=null,C=null,w=null,M=null;do C=h.b<h.d.gc()?(Qn(h.b<h.d.gc()),u(h.d.Xb(h.c=h.b++),29)):null,M=C?C.a:null,d&&(fxt(d,tt),tt+=d.c.a),Y=d?tt+r:tt,V=vxt(F,t,w,M,Y),s=!d||ej(w,(hq(),NO)),o=!C||ej(M,(hq(),NO)),V>0?(H=(V-1)*n,d&&(H+=r),C&&(H+=r),H<k&&!s&&!o&&(H=k),tt+=H):!s&&!o&&(tt+=k),d=C,w=M;while(C);t.f.a=tt,or(e)}function Tat(){Tat=Z;var t;QAt=new mqt,G4e=Pt(Ae,te,2,0,6,1),q4e=C1(Zx(33,58),Zx(1,26)),H4e=C1(Zx(97,122),Zx(65,90)),UAt=Zx(48,57),$4e=C1(q4e,0),z4e=C1(H4e,UAt),WAt=C1(C1(0,Zx(1,6)),Zx(33,38)),KAt=C1(C1(UAt,Zx(65,70)),Zx(97,102)),V4e=C1($4e,Pz("-_.!~*'()")),U4e=C1(z4e,Lz("-_.!~*'()")),Pz(u0e),Lz(u0e),C1(V4e,Pz(";:@&=+$,")),C1(U4e,Lz(";:@&=+$,")),YAt=Pz(":/?#"),XAt=Lz(":/?#"),iA=Pz("/?#"),sA=Lz("/?#"),t=new qs,t.a.zc("jar",t),t.a.zc("zip",t),t.a.zc("archive",t),rU=(vn(),new Qk(t))}function Mle(t,e){var n,r,s,o,h,d,w,k,C,M;if(Jt(e,(fc(),k7),0),w=u(Q(e,yV),86),e.d.b==0)w?(C=Xt(ye(Q(w,Yg)))+t.a+cmt(w,e),Jt(e,Yg,C)):Jt(e,Yg,0);else{for(r=(o=ei(new Cp(e).a.d,0),new bx(o));kR(r.a);)n=u(ti(r.a),188).c,Mle(t,n);d=u(lj((h=ei(new Cp(e).a.d,0),new bx(h))),86),M=u(VXe((s=ei(new Cp(e).a.d,0),new bx(s))),86),k=(Xt(ye(Q(M,Yg)))+Xt(ye(Q(d,Yg))))/2,w?(C=Xt(ye(Q(w,Yg)))+t.a+cmt(w,e),Jt(e,Yg,C),Jt(e,k7,Xt(ye(Q(e,Yg)))-k),D3n(t,e)):Jt(e,Yg,k)}}function TE(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V;d=0,V=0,w=l$(t.f,t.f.length),o=t.d,h=t.i,r=t.a,s=t.b;do{for(H=0,C=new S(t.p);C.a<C.c.c.length;)k=u(J(C),10),F=Yle(t,k),n=!0,(t.q==(w4(),MO)||t.q==IO)&&(n=je(Re(F.b))),u(F.a,19).a<0&&n?(++H,w=l$(t.f,t.f.length),t.d=t.d+u(F.a,19).a,V+=o-t.d,o=t.d+u(F.a,19).a,h=t.i,r=Gv(t.a),s=Gv(t.b)):(t.f=l$(w,w.length),t.d=o,t.a=(Ar(r),r?new Pu(r):d8(new S(r))),t.b=(Ar(s),s?new Pu(s):d8(new S(s))),t.i=h);++d,M=H!=0&&je(Re(e.Kb(new la(de(V),de(d)))))}while(M)}function Cyn(t,e,n,r){var s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce,Se,We,Qe;return h=t.f,F=e.f,d=h==(yE(),R6)||h==zS,H=F==R6||F==zS,w=h==n5||h==qS,V=F==n5||F==qS,k=h==n5||h==R6,Y=F==n5||F==R6,d&&H?t.f==zS?t:e:w&&V?t.f==qS?t:e:k&&Y?(h==n5?(M=t,C=e):(M=e,C=t),o=(tt=n.j+n.f,gt=M.e+r.f,Lt=b.Math.max(tt,gt),_t=Lt-b.Math.min(n.j,M.e),Bt=M.d+r.g-n.i,Bt*_t),s=(Yt=n.i+n.g,ce=C.d+r.g,Se=b.Math.max(Yt,ce),We=Se-b.Math.min(n.i,C.d),Qe=C.e+r.f-n.j,We*Qe),o<=s?t.f==n5?t:e:t.f==R6?t:e):t}function _yn(t){var e,n,r,s,o,h,d,w,k,C,M;for(C=t.e.a.c.length,h=new S(t.e.a);h.a<h.c.c.length;)o=u(J(h),121),o.j=!1;for(t.i=Pt(Tr,Xr,25,C,15,1),t.g=Pt(Tr,Xr,25,C,15,1),t.n=new le,s=0,M=new le,w=new S(t.e.a);w.a<w.c.c.length;)d=u(J(w),121),d.d=s++,d.b.a.c.length==0&&ue(t.n,d),As(M,d.g);for(e=0,r=new S(M);r.a<r.c.c.length;)n=u(J(r),213),n.c=e++,n.f=!1;k=M.c.length,t.b==null||t.b.length<k?(t.b=Pt(ia,vo,25,k,15,1),t.c=Pt(dl,i0,25,k,16,1)):P9(t.c),t.d=M,t.p=new nnt(Qm(t.d.c.length)),t.j=1}function Syn(t,e){var n,r,s,o,h,d,w,k,C;if(!(e.e.c.length<=1)){for(t.f=e,t.d=u(Q(t.f,(JI(),w7t)),379),t.g=u(Q(t.f,k7t),19).a,t.e=Xt(ye(Q(t.f,m7t))),t.c=Xt(ye(Q(t.f,oG))),qYt(t.b),s=new S(t.f.c);s.a<s.c.c.length;)r=u(J(s),282),G5t(t.b,r.c,r,null),G5t(t.b,r.d,r,null);for(d=t.f.e.c.length,t.a=Xb(ia,[te,vo],[104,25],15,[d,d],2),k=new S(t.f.e);k.a<k.c.c.length;)w=u(J(k),144),Ymn(t,w,t.a[w.b]);for(t.i=Xb(ia,[te,vo],[104,25],15,[d,d],2),o=0;o<d;++o)for(h=0;h<d;++h)n=t.a[o][h],C=1/(n*n),t.i[o][h]=C}}function T_(t){var e,n,r,s;if(!(t.b==null||t.b.length<=2)&&!t.a){for(e=0,s=0;s<t.b.length;){for(e!=s?(t.b[e]=t.b[s++],t.b[e+1]=t.b[s++]):s+=2,n=t.b[e+1];s<t.b.length&&!(n+1<t.b[s]);)if(n+1==t.b[s])t.b[e+1]=t.b[s+1],n=t.b[e+1],s+=2;else if(n>=t.b[s+1])s+=2;else if(n<t.b[s+1])t.b[e+1]=t.b[s+1],n=t.b[e+1],s+=2;else throw rt(new Go("Token#compactRanges(): Internel Error: ["+t.b[e]+","+t.b[e+1]+"] ["+t.b[s]+","+t.b[s+1]+"]"));e+=2}e!=t.b.length&&(r=Pt(Tr,Xr,25,e,15,1),Ic(t.b,0,r,0,e),t.b=r),t.a=!0}}function Ayn(t,e){var n,r,s,o,h,d,w;for(h=Px(t.a).Kc();h.Ob();){if(o=u(h.Pb(),17),o.b.c.length>0)for(r=new Pu(u(Ai(t.a,o),21)),vn(),Xs(r,new Si(e)),s=new ha(o.b,0);s.b<s.d.gc();){switch(n=(Qn(s.b<s.d.gc()),u(s.d.Xb(s.c=s.b++),70)),d=-1,u(Q(n,(Te(),Md)),272).g){case 1:d=r.c.length-1;break;case 0:d=Z1n(r);break;case 2:d=0}d!=-1&&(w=(An(d,r.c.length),u(r.c[d],243)),ue(w.b.b,n),u(Q(Fa(w.b.c.i),(se(),Gc)),21).Fc((oo(),h7)),u(Q(Fa(w.b.c.i),Gc),21).Fc(l7),El(s),Jt(n,e9t,o))}Da(o,null),sa(o,null)}}function Lyn(t,e){var n,r,s,o;return n=new Bd,r=u(Pl(pu(new Tn(null,new _n(t.f,16)),n),Ym(new cn,new li,new di,new Ee,ct(ot(ll,1),ae,132,0,[(I1(),Ly),Gl]))),21),s=r.gc(),s=s==2?1:0,s==1&&Av(UI(u(Pl(Ri(r.Lc(),new E0),Tne(g2(0),new Dr)),162).a,2),0)&&(s=0),r=u(Pl(pu(new Tn(null,new _n(e.f,16)),n),Ym(new cn,new li,new di,new Ee,ct(ot(ll,1),ae,132,0,[Ly,Gl]))),21),o=r.gc(),o=o==2?1:0,o==1&&Av(UI(u(Pl(Ri(r.Lc(),new Bi),Tne(g2(0),new Dr)),162).a,2),0)&&(o=0),s<o?-1:s==o?0:1}function Myn(t){var e,n,r,s,o,h,d,w,k,C,M,F,H;if(k=new le,!Vs(t,(se(),Olt)))return k;for(r=u(Q(t,Olt),15).Kc();r.Ob();)e=u(r.Pb(),10),Hyn(e,t),k.c[k.c.length]=e;for(o=new S(t.b);o.a<o.c.c.length;)for(s=u(J(o),29),d=new S(s.a);d.a<d.c.c.length;)h=u(J(d),10),h.k==(Gn(),xs)&&(w=u(Q(h,GG),10),w&&(C=new Mc,Uo(C,h),M=u(Q(h,oc),61),Fs(C,M),F=u(Fe(w.j,0),11),H=new zv,Da(H,C),sa(H,F)));for(n=new S(k);n.a<n.c.c.length;)e=u(J(n),10),ko(e,u(Fe(t.b,t.b.c.length-1),29));return k}function Ile(t){var e,n,r,s,o,h,d,w,k,C,M,F;for(e=k1(t),o=je(Re(qe(e,(Te(),$y)))),C=0,s=0,k=new er((!t.e&&(t.e=new Cn(Ws,t,7,4)),t.e));k.e!=k.i.gc();)w=u(dr(k),79),d=uw(w),h=d&&o&&je(Re(qe(w,P2))),F=Mo(u(St((!w.c&&(w.c=new Cn(br,w,5,8)),w.c),0),82)),d&&h?++s:d&&!h?++C:ts(F)==e||F==e?++s:++C;for(r=new er((!t.d&&(t.d=new Cn(Ws,t,8,5)),t.d));r.e!=r.i.gc();)n=u(dr(r),79),d=uw(n),h=d&&o&&je(Re(qe(n,P2))),M=Mo(u(St((!n.b&&(n.b=new Cn(br,n,4,7)),n.b),0),82)),d&&h?++C:d&&!h?++s:ts(M)==e||M==e?++C:++s;return C-s}function Iyn(t,e){var n,r,s,o,h,d,w,k,C,M,F,H;if(wr(e,"Edge splitting",1),t.b.c.length<=2){or(e);return}for(o=new ha(t.b,0),h=(Qn(o.b<o.d.gc()),u(o.d.Xb(o.c=o.b++),29));o.b<o.d.gc();)for(s=h,h=(Qn(o.b<o.d.gc()),u(o.d.Xb(o.c=o.b++),29)),w=new S(s.a);w.a<w.c.c.length;)for(d=u(J(w),10),C=new S(d.j);C.a<C.c.c.length;)for(k=u(J(C),11),r=new S(k.g);r.a<r.c.c.length;)n=u(J(r),17),F=n.d,M=F.i.c,M!=s&&M!=h&&Uce(n,(H=new H0(t),_0(H,(Gn(),Zs)),Jt(H,(se(),_i),n),Jt(H,(Te(),os),(oa(),Vc)),ko(H,h),H));or(e)}function Dle(t,e){var n,r,s,o,h,d,w,k,C,M,F,H;if(d=e.p!=null&&!e.b,d||wr(e,$fe,1),n=u(Q(t,(se(),Rlt)),15),h=1/n.gc(),e.n)for(Yb(e,"ELK Layered uses the following "+n.gc()+" modules:"),H=0,F=n.Kc();F.Ob();)C=u(F.Pb(),51),r=(H<10?"0":"")+H++,Yb(e,"   Slot "+r+": "+Ap(sl(C)));for(M=n.Kc();M.Ob();)C=u(M.Pb(),51),C.pf(t,Rc(e,h));for(o=new S(t.b);o.a<o.c.c.length;)s=u(J(o),29),As(t.a,s.a),s.a.c=Pt(Xn,Ie,1,0,5,1);for(k=new S(t.a);k.a<k.c.c.length;)w=u(J(k),10),ko(w,null);t.b.c=Pt(Xn,Ie,1,0,5,1),d||or(e)}function Dyn(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce,Se;r=Xt(ye(Q(e,(Te(),sCt)))),Yt=u(Q(e,SS),19).a,F=4,s=3,ce=20/Yt,H=!1,w=0,h=vi;do{for(o=w!=1,M=w!=0,Se=0,tt=t.a,Lt=0,Bt=tt.length;Lt<Bt;++Lt)V=tt[Lt],V.f=null,m4n(t,V,o,M,r),Se+=b.Math.abs(V.a);do d=lmn(t,e);while(d);for(Y=t.a,gt=0,_t=Y.length;gt<_t;++gt)if(V=Y[gt],n=swt(V).a,n!=0)for(C=new S(V.e);C.a<C.c.c.length;)k=u(J(C),10),k.n.b+=n;w==0||w==1?(--F,F<=0&&(Se<h||-F>Yt)?(w=2,h=vi):w==0?(w=1,h=Se):(w=0,h=Se)):(H=Se>=h||h-Se<ce,h=Se,H&&--s)}while(!(H&&s<=0))}function Cat(t,e,n){var r,s,o,h,d,w,k,C,M,F,H,V;for(V=new Cr,o=t.a.ec().Kc();o.Ob();)r=u(o.Pb(),168),ki(V,r,n.Je(r));for(h=(Ar(t),t?new Pu(t):d8(t.a.ec().Kc())),Xs(h,new Wn(V)),d=E$(h),w=new cj(e),H=new Cr,su(H.f,e,w);d.a.gc()!=0;){for(k=null,C=null,M=null,s=d.a.ec().Kc();s.Ob();)if(r=u(s.Pb(),168),Xt(ye(ec(Ao(V.f,r))))<=ss){if(kl(H,r.a)&&!kl(H,r.b)){C=r.b,M=r.a,k=r;break}if(kl(H,r.b)&&!kl(H,r.a)){C=r.a,M=r.b,k=r;break}}if(!k)break;F=new cj(C),ue(u(ec(Ao(H.f,M)),221).a,F),su(H.f,C,F),d.a.Bc(k)!=null}return w}function Oyn(t,e,n){var r,s,o,h,d,w,k,C,M,F,H;for(wr(n,"Depth-first cycle removal",1),M=e.a,C=M.c.length,t.c=new le,t.d=Pt(dl,i0,25,C,16,1),t.a=Pt(dl,i0,25,C,16,1),t.b=new le,h=0,k=new S(M);k.a<k.c.c.length;)w=u(J(k),10),w.p=h,S8(jo(w))&&ue(t.c,w),++h;for(H=new S(t.c);H.a<H.c.c.length;)F=u(J(H),10),H4t(t,F);for(o=0;o<C;o++)t.d[o]||(d=(An(o,M.c.length),u(M.c[o],10)),H4t(t,d));for(s=new S(t.b);s.a<s.c.c.length;)r=u(J(s),17),dw(r,!0),Jt(e,(se(),xO),(Fn(),!0));t.c=null,t.d=null,t.a=null,t.b=null,or(n)}function Nyn(t,e){var n,r,s,o,h,d,w;for(t.a.c=Pt(Xn,Ie,1,0,5,1),r=ei(e.b,0);r.b!=r.d.c;)n=u(ti(r),86),n.b.b==0&&(Jt(n,(fc(),Wy),(Fn(),!0)),ue(t.a,n));switch(t.a.c.length){case 0:s=new yit(0,e,"DUMMY_ROOT"),Jt(s,(fc(),Wy),(Fn(),!0)),Jt(s,_ht,!0),ni(e.b,s);break;case 1:break;default:for(o=new yit(0,e,"SUPER_ROOT"),d=new S(t.a);d.a<d.c.c.length;)h=u(J(d),86),w=new Lwt(o,h),Jt(w,(fc(),_ht),(Fn(),!0)),ni(o.a.a,w),ni(o.d,w),ni(h.b,w),Jt(h,Wy,!1);Jt(o,(fc(),Wy),(Fn(),!0)),Jt(o,_ht,!0),ni(e.b,o)}}function Pyn(t,e){y4();var n,r,s,o,h,d;return o=e.c-(t.c+t.b),s=t.c-(e.c+e.b),h=t.d-(e.d+e.a),n=e.d-(t.d+t.a),r=b.Math.max(s,o),d=b.Math.max(h,n),y1(),gf(Ed),(b.Math.abs(r)<=Ed||r==0||isNaN(r)&&isNaN(0)?0:r<0?-1:r>0?1:Lv(isNaN(r),isNaN(0)))>=0^(gf(Ed),(b.Math.abs(d)<=Ed||d==0||isNaN(d)&&isNaN(0)?0:d<0?-1:d>0?1:Lv(isNaN(d),isNaN(0)))>=0)?b.Math.max(d,r):(gf(Ed),(b.Math.abs(r)<=Ed||r==0||isNaN(r)&&isNaN(0)?0:r<0?-1:r>0?1:Lv(isNaN(r),isNaN(0)))>0?b.Math.sqrt(d*d+r*r):-b.Math.sqrt(d*d+r*r))}function m2(t,e){var n,r,s,o,h,d;if(e){if(!t.a&&(t.a=new fR),t.e==2){hR(t.a,e);return}if(e.e==1){for(s=0;s<e.em();s++)m2(t,e.am(s));return}if(d=t.a.a.c.length,d==0){hR(t.a,e);return}if(h=u(Rv(t.a,d-1),117),!((h.e==0||h.e==10)&&(e.e==0||e.e==10))){hR(t.a,e);return}o=e.e==0?2:e.bm().length,h.e==0?(n=new B9,r=h._l(),r>=Ya?fo(n,r3t(r)):m8(n,r&ms),h=new hrt(10,null,0),len(t.a,h,d-1)):(n=(h.bm().length+o,new B9),fo(n,h.bm())),e.e==0?(r=e._l(),r>=Ya?fo(n,r3t(r)):m8(n,r&ms)):fo(n,e.bm()),u(h,521).b=n.a}}function Ole(t){var e,n,r,s,o;return t.g!=null?t.g:t.a<32?(t.g=K4n(ku(t.f),ps(t.e)),t.g):(s=Dat((!t.c&&(t.c=jI(t.f)),t.c),0),t.e==0?s:(e=(!t.c&&(t.c=jI(t.f)),t.c).e<0?2:1,n=s.length,r=-t.e+n-e,o=new _p,o.a+=""+s,t.e>0&&r>=-6?r>=0?iI(o,n-ps(t.e),String.fromCharCode(46)):(o.a=Dl(o.a,0,e-1)+"0."+OM(o.a,e-1),iI(o,e+1,Ah(D2,0,-ps(r)-1))):(n-e>=1&&(iI(o,e,String.fromCharCode(46)),++n),iI(o,n,String.fromCharCode(69)),r>0&&iI(o,++n,String.fromCharCode(43)),iI(o,++n,""+EC(ku(r)))),t.g=o.a,t.g))}function Fyn(t,e,n){var r,s,o,h,d,w,k,C,M,F,H,V,Y,tt;if(!n.dc()){for(d=0,F=0,r=n.Kc(),V=u(r.Pb(),19).a;d<e.f;){if(d==V&&(F=0,r.Ob()?V=u(r.Pb(),19).a:V=e.f+1),d!=F){for(tt=u(Fe(t.b,d),29),H=u(Fe(t.b,F),29),Y=Gv(tt.a),M=new S(Y);M.a<M.c.c.length;)if(C=u(J(M),10),oy(C,H.a.c.length,H),F==0)for(h=Gv(jo(C)),o=new S(h);o.a<o.c.c.length;)s=u(J(o),17),dw(s,!0),Jt(t,(se(),xO),(Fn(),!0)),jle(t,s,1)}++F,++d}for(w=new ha(t.b,0);w.b<w.d.gc();)k=(Qn(w.b<w.d.gc()),u(w.d.Xb(w.c=w.b++),29)),k.a.c.length==0&&El(w)}}function Byn(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t;for(h=e.b,C=h.o,w=h.d,r=Xt(ye(Fz(h,(Te(),xf)))),s=Xt(ye(Fz(h,B6))),k=Xt(ye(Fz(h,eht))),d=new Vtt,Avt(d,w.d,w.c,w.a,w.b),F=Zvn(e,r,s,k),gt=new S(e.d);gt.a<gt.c.c.length;){for(tt=u(J(gt),101),V=tt.f.a.ec().Kc();V.Ob();)H=u(V.Pb(),409),o=H.a,M=Hdn(H),n=(Lt=new Du,lae(H,H.c,F,Lt),p0n(H,M,F,Lt),lae(H,H.d,F,Lt),Lt),n=t.Uf(H,M,n),_h(o.a),Ua(o.a,n),us(new Tn(null,new _n(n,16)),new KGt(C,d));Y=tt.i,Y&&(Idn(tt,Y,F,s),_t=new yo(Y.g),A3t(C,d,_t),Li(_t,Y.j),A3t(C,d,_t))}Avt(w,d.d,d.c,d.a,d.b)}function Ryn(t,e,n){var r,s,o;if(s=u(Q(e,(Te(),KG)),275),s!=(gE(),bS)){switch(wr(n,"Horizontal Compaction",1),t.a=e,o=new Bte,r=new Foe((o.d=e,o.c=u(Q(o.d,X0),218),jvn(o),M3n(o),Uvn(o),o.a)),BKe(r,t.b),u(Q(e,N9t),422).g){case 1:eHt(r,new Zee(t.a));break;default:eHt(r,(Awt(),Gge))}switch(s.g){case 1:p_(r);break;case 2:p_(_q(r,(ao(),kf)));break;case 3:p_(tHt(_q(p_(r),(ao(),kf)),new jT));break;case 4:p_(tHt(_q(p_(r),(ao(),kf)),new zd(o)));break;case 5:p_(FKe(r,Kbe))}_q(r,(ao(),jh)),r.e=!0,d4n(o),or(n)}}function jyn(t,e,n,r,s,o,h,d){var w,k,C,M;switch(w=_1(ct(ot(vxn,1),Ie,220,0,[e,n,r,s])),M=null,t.b.g){case 1:M=_1(ct(ot(D_t,1),Ie,526,0,[new WT,new UT,new NL]));break;case 0:M=_1(ct(ot(D_t,1),Ie,526,0,[new NL,new UT,new WT]));break;case 2:M=_1(ct(ot(D_t,1),Ie,526,0,[new UT,new WT,new NL]))}for(C=new S(M);C.a<C.c.c.length;)k=u(J(C),526),w.c.length>1&&(w=k.mg(w,t.a,d));return w.c.length==1?u(Fe(w,w.c.length-1),220):w.c.length==2?Cyn((An(0,w.c.length),u(w.c[0],220)),(An(1,w.c.length),u(w.c[1],220)),h,o):null}function Nle(t){var e,n,r,s,o,h;for(mu(t.a,new xi),n=new S(t.a);n.a<n.c.c.length;)e=u(J(n),221),r=na(nc(u(t.b,65).c),u(e.b,65).c),Lpe?(h=u(t.b,65).b,o=u(e.b,65).b,b.Math.abs(r.a)>=b.Math.abs(r.b)?(r.b=0,o.d+o.a>h.d&&o.d<h.d+h.a&&Aj(r,b.Math.max(h.c-(o.c+o.b),o.c-(h.c+h.b)))):(r.a=0,o.c+o.b>h.c&&o.c<h.c+h.b&&Aj(r,b.Math.max(h.d-(o.d+o.a),o.d-(h.d+h.a))))):Aj(r,ule(u(t.b,65),u(e.b,65))),s=b.Math.sqrt(r.a*r.a+r.b*r.b),s=sae(cS,e,s,r),Aj(r,s),Int(u(e.b,65),r),mu(e.a,new Jr(r)),u(cS.b,65),xmt(cS,e7t,e)}function $yn(t){var e,n,r,s,o,h,d,w,k,C,M,F,H,V;for(t.f=new Gtt,k=0,s=0,h=new S(t.e.b);h.a<h.c.c.length;)for(o=u(J(h),29),w=new S(o.a);w.a<w.c.c.length;){for(d=u(J(w),10),d.p=k++,r=new ar(lr(Ms(d).a.Kc(),new z));zr(r);)n=u(Lr(r),17),n.p=s++;for(e=xat(d),F=new S(d.j);F.a<F.c.c.length;)M=u(J(F),11),e&&(V=M.a.b,V!=b.Math.floor(V)&&(C=V-Vv(ku(b.Math.round(V))),M.a.b-=C)),H=M.n.b+M.a.b,H!=b.Math.floor(H)&&(C=H-Vv(ku(b.Math.round(H))),M.n.b-=C)}t.g=k,t.b=s,t.i=Pt(gxn,Ie,401,k,0,1),t.c=Pt(dxn,Ie,649,s,0,1),t.d.a.$b()}function xr(t){var e,n,r,s,o,h,d,w,k;if(t.ej())if(w=t.fj(),t.i>0){if(e=new Ybt(t.i,t.g),n=t.i,o=n<100?null:new Sp(n),t.ij())for(r=0;r<t.i;++r)h=t.g[r],o=t.kj(h,o);if(RC(t),s=n==1?t.Zi(4,St(e,0),null,0,w):t.Zi(6,e,null,-1,w),t.bj()){for(r=new Mx(e);r.e!=r.i.gc();)o=t.dj(nst(r),o);o?(o.Ei(s),o.Fi()):t.$i(s)}else o?(o.Ei(s),o.Fi()):t.$i(s)}else RC(t),t.$i(t.Zi(6,(vn(),io),null,-1,w));else if(t.bj())if(t.i>0){for(d=t.g,k=t.i,RC(t),o=k<100?null:new Sp(k),r=0;r<k;++r)h=d[r],o=t.dj(h,o);o&&o.Fi()}else RC(t);else RC(t)}function hxt(t,e,n){var r,s,o,h,d,w,k,C,M,F;for(One(this),n==(qv(),bb)?Ns(this.r,t):Ns(this.w,t),C=ss,k=Ts,h=e.a.ec().Kc();h.Ob();)s=u(h.Pb(),46),d=u(s.a,455),r=u(s.b,17),w=r.c,w==t&&(w=r.d),d==bb?Ns(this.r,w):Ns(this.w,w),F=(be(),_u).Hc(w.j)?Xt(ye(Q(w,(se(),g7)))):Ko(ct(ot(Us,1),te,8,0,[w.i.n,w.n,w.a])).b,C=b.Math.min(C,F),k=b.Math.max(k,F);for(M=(be(),_u).Hc(t.j)?Xt(ye(Q(t,(se(),g7)))):Ko(ct(ot(Us,1),te,8,0,[t.i.n,t.n,t.a])).b,Sae(this,M,C,k),o=e.a.ec().Kc();o.Ob();)s=u(o.Pb(),46),Bae(this,u(s.b,17));this.o=!1}function zyn(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce,Se,We,Qe,Rn,zn,hr;return n=t.l&8191,r=t.l>>13|(t.m&15)<<9,s=t.m>>4&8191,o=t.m>>17|(t.h&255)<<5,h=(t.h&1048320)>>8,d=e.l&8191,w=e.l>>13|(e.m&15)<<9,k=e.m>>4&8191,C=e.m>>17|(e.h&255)<<5,M=(e.h&1048320)>>8,We=n*d,Qe=r*d,Rn=s*d,zn=o*d,hr=h*d,w!=0&&(Qe+=n*w,Rn+=r*w,zn+=s*w,hr+=o*w),k!=0&&(Rn+=n*k,zn+=r*k,hr+=s*k),C!=0&&(zn+=n*C,hr+=r*C),M!=0&&(hr+=n*M),H=We&ul,V=(Qe&511)<<13,F=H+V,tt=We>>22,gt=Qe>>9,Lt=(Rn&262143)<<4,_t=(zn&31)<<17,Y=tt+gt+Lt+_t,Yt=Rn>>18,ce=zn>>5,Se=(hr&4095)<<8,Bt=Yt+ce+Se,Y+=F>>22,F&=ul,Bt+=Y>>22,Y&=ul,Bt&=W0,ru(F,Y,Bt)}function Ple(t){var e,n,r,s,o,h,d;if(d=u(Fe(t.j,0),11),d.g.c.length!=0&&d.e.c.length!=0)throw rt(new Fo("Interactive layout does not support NORTH/SOUTH ports with incoming _and_ outgoing edges."));if(d.g.c.length!=0){for(o=ss,n=new S(d.g);n.a<n.c.c.length;)e=u(J(n),17),h=e.d.i,r=u(Q(h,(Te(),eV)),142),o=b.Math.min(o,h.n.a-r.b);return new jk(Ar(o))}if(d.e.c.length!=0){for(s=Ts,n=new S(d.e);n.a<n.c.c.length;)e=u(J(n),17),h=e.c.i,r=u(Q(h,(Te(),eV)),142),s=b.Math.max(s,h.n.a+h.o.a+r.c);return new jk(Ar(s))}return I9(),I9(),gut}function Fle(t,e){var n,r,s,o,h,d,w;if(t.Fk()){if(t.i>4)if(t.wj(e)){if(t.rk()){if(s=u(e,49),r=s.Ug(),w=r==t.e&&(t.Dk()?s.Og(s.Vg(),t.zk())==t.Ak():-1-s.Vg()==t.aj()),t.Ek()&&!w&&!r&&s.Zg()){for(o=0;o<t.i;++o)if(n=t.Gk(u(t.g[o],56)),Gt(n)===Gt(e))return!0}return w}else if(t.Dk()&&!t.Ck()){if(h=u(e,56).ah(no(u(t.ak(),18))),Gt(h)===Gt(t.e))return!0;if(h==null||!u(h,56).kh())return!1}}else return!1;if(d=fE(t,e),t.Ek()&&!d){for(o=0;o<t.i;++o)if(s=t.Gk(u(t.g[o],56)),Gt(s)===Gt(e))return!0}return d}else return fE(t,e)}function qyn(t,e){var n,r,s,o,h,d,w,k,C,M,F;for(C=new le,F=new qs,h=e.b,s=0;s<h.c.length;s++){for(k=(An(s,h.c.length),u(h.c[s],29)).a,C.c=Pt(Xn,Ie,1,0,5,1),o=0;o<k.c.length;o++)d=t.a[s][o],d.p=o,d.k==(Gn(),Hc)&&(C.c[C.c.length]=d),ah(u(Fe(e.b,s),29).a,o,d),d.j.c=Pt(Xn,Ie,1,0,5,1),As(d.j,u(u(Fe(t.b,s),15).Xb(o),14)),Dx(u(Q(d,(Te(),os)),98))||Jt(d,os,(oa(),G2));for(r=new S(C);r.a<r.c.c.length;)n=u(J(r),10),M=lwn(n),F.a.zc(M,F),F.a.zc(n,F)}for(w=F.a.ec().Kc();w.Ob();)d=u(w.Pb(),10),vn(),Xs(d.j,(J8(),vTt)),d.i=!0,X4t(d)}function Hyn(t,e){var n,r,s,o,h,d,w,k,C,M;if(C=u(Q(t,(se(),oc)),61),r=u(Fe(t.j,0),11),C==(be(),Nn)?Fs(r,mr):C==mr&&Fs(r,Nn),u(Q(e,(Te(),F2)),174).Hc((_l(),V2))){if(w=Xt(ye(Q(t,m7))),k=Xt(ye(Q(t,y7))),h=Xt(ye(Q(t,Gy))),d=u(Q(e,qy),21),d.Hc((Qu(),tg)))for(n=k,M=t.o.a/2-r.n.a,o=new S(r.f);o.a<o.c.c.length;)s=u(J(o),70),s.n.b=n,s.n.a=M-s.o.a/2,n+=s.o.b+h;else if(d.Hc(xb))for(o=new S(r.f);o.a<o.c.c.length;)s=u(J(o),70),s.n.a=w+t.o.a-r.n.a;hin(new tr((z9(),new trt(e,!1,!1,new YP))),new Cj(null,t,!1))}}function Gyn(t,e){var n,r,s,o,h,d,w,k,C;if(e.c.length!=0){for(vn(),Lnt(e.c,e.c.length,null),s=new S(e),r=u(J(s),145);s.a<s.c.c.length;)n=u(J(s),145),jmt(r.e.c,n.e.c)&&!(C3t(CWt(r.e).b,n.e.d)||C3t(CWt(n.e).b,r.e.d))?r=(As(r.k,n.k),As(r.b,n.b),As(r.c,n.c),Ua(r.i,n.i),As(r.d,n.d),As(r.j,n.j),o=b.Math.min(r.e.c,n.e.c),h=b.Math.min(r.e.d,n.e.d),d=b.Math.max(r.e.c+r.e.b,n.e.c+n.e.b),w=d-o,k=b.Math.max(r.e.d+r.e.a,n.e.d+n.e.a),C=k-h,RKt(r.e,o,h,w,C),sin(r.f,n.f),!r.a&&(r.a=n.a),As(r.g,n.g),ue(r.g,n),r):(tle(t,r),r=n);tle(t,r)}}function Vyn(t,e,n,r){var s,o,h,d,w,k;if(d=t.j,d==(be(),Zo)&&e!=(oa(),H1)&&e!=(oa(),yb)&&(d=Kue(t,n),Fs(t,d),!(t.q?t.q:(vn(),vn(),a0))._b((Te(),zy))&&d!=Zo&&(t.n.a!=0||t.n.b!=0)&&Jt(t,zy,u1n(t,d))),e==(oa(),h0)){switch(k=0,d.g){case 1:case 3:o=t.i.o.a,o>0&&(k=t.n.a/o);break;case 2:case 4:s=t.i.o.b,s>0&&(k=t.n.b/s)}Jt(t,(se(),Dw),k)}if(w=t.o,h=t.a,r)h.a=r.a,h.b=r.b,t.d=!0;else if(e!=H1&&e!=yb&&d!=Zo)switch(d.g){case 1:h.a=w.a/2;break;case 2:h.a=w.a,h.b=w.b/2;break;case 3:h.a=w.a/2,h.b=w.b;break;case 4:h.b=w.b/2}else h.a=w.a/2,h.b=w.b/2}function C_(t){var e,n,r,s,o,h,d,w,k,C;if(t.ej())if(C=t.Vi(),w=t.fj(),C>0)if(e=new oyt(t.Gi()),n=C,o=n<100?null:new Sp(n),jM(t,n,e.g),s=n==1?t.Zi(4,St(e,0),null,0,w):t.Zi(6,e,null,-1,w),t.bj()){for(r=new er(e);r.e!=r.i.gc();)o=t.dj(dr(r),o);o?(o.Ei(s),o.Fi()):t.$i(s)}else o?(o.Ei(s),o.Fi()):t.$i(s);else jM(t,t.Vi(),t.Wi()),t.$i(t.Zi(6,(vn(),io),null,-1,w));else if(t.bj())if(C=t.Vi(),C>0){for(d=t.Wi(),k=C,jM(t,C,d),o=k<100?null:new Sp(k),r=0;r<k;++r)h=d[r],o=t.dj(h,o);o&&o.Fi()}else jM(t,t.Vi(),t.Wi());else jM(t,t.Vi(),t.Wi())}function Uyn(t,e,n){var r,s,o,h,d,w,k,C,M,F,H;for(d=new S(e);d.a<d.c.c.length;)o=u(J(d),233),o.e=null,o.c=0;for(w=null,h=new S(e);h.a<h.c.c.length;)if(o=u(J(h),233),M=o.d[0],!(n&&M.k!=(Gn(),Ds))){for(H=u(Q(M,(se(),I6)),15).Kc();H.Ob();)F=u(H.Pb(),10),(!n||F.k==(Gn(),Ds))&&((!o.e&&(o.e=new le),o.e).Fc(t.b[F.c.p][F.p]),++t.b[F.c.p][F.p].c);if(!n&&M.k==(Gn(),Ds)){if(w)for(C=u(Ai(t.d,w),21).Kc();C.Ob();)for(k=u(C.Pb(),10),s=u(Ai(t.d,M),21).Kc();s.Ob();)r=u(s.Pb(),10),itn(t.b[k.c.p][k.p]).Fc(t.b[r.c.p][r.p]),++t.b[r.c.p][r.p].c;w=M}}}function Wyn(t,e){var n,r,s,o,h,d,w,k,C;for(n=0,C=new le,d=new S(e);d.a<d.c.c.length;){switch(h=u(J(d),11),Byt(t.b,t.d[h.p]),C.c=Pt(Xn,Ie,1,0,5,1),h.i.k.g){case 0:r=u(Q(h,(se(),Zu)),10),mu(r.j,new m$t(C));break;case 1:vXe(mit(Ri(new Tn(null,new _n(h.i.j,16)),new y$t(h))),new x$t(C));break;case 3:s=u(Q(h,(se(),_i)),11),ue(C,new la(s,de(h.e.c.length+h.g.c.length)))}for(k=new S(C);k.a<k.c.c.length;)w=u(J(k),46),o=ubt(t,u(w.a,11)),o>t.d[h.p]&&(n+=smt(t.b,o)*u(w.b,19).a,qp(t.a,de(o)));for(;!N9(t.a);)Fmt(t.b,u(Fx(t.a),19).a)}return n}function Kyn(t,e,n,r){var s,o,h,d,w,k,C,M,F,H,V,Y,tt;for(M=new yo(u(qe(t,(eq(),_St)),8)),M.a=b.Math.max(M.a-n.b-n.c,0),M.b=b.Math.max(M.b-n.d-n.a,0),s=ye(qe(t,ESt)),(s==null||(On(s),s<=0))&&(s=1.3),d=new le,V=new er((!t.a&&(t.a=new he(ns,t,10,11)),t.a));V.e!=V.i.gc();)H=u(dr(V),33),h=new fWt(H),d.c[d.c.length]=h;switch(F=u(qe(t,Jht),311),F.g){case 3:tt=bmn(d,e,M.a,M.b,(k=r,On(s),k));break;case 1:tt=qmn(d,e,M.a,M.b,(C=r,On(s),C));break;default:tt=Qyn(d,e,M.a,M.b,(w=r,On(s),w))}o=new U$(tt),Y=Mat(o,e,n,M.a,M.b,r,(On(s),s)),gw(t,Y.a,Y.b,!1,!0)}function Yyn(t,e){var n,r,s,o;n=e.b,o=new Pu(n.j),s=0,r=n.j,r.c=Pt(Xn,Ie,1,0,5,1),Bv(u(o2(t.b,(be(),Nn),(Jv(),Aw)),15),n),s=QI(o,s,new AX,r),Bv(u(o2(t.b,Nn,hb),15),n),s=QI(o,s,new zT,r),Bv(u(o2(t.b,Nn,Sw),15),n),Bv(u(o2(t.b,Hn,Aw),15),n),Bv(u(o2(t.b,Hn,hb),15),n),s=QI(o,s,new EF,r),Bv(u(o2(t.b,Hn,Sw),15),n),Bv(u(o2(t.b,mr,Aw),15),n),s=QI(o,s,new TF,r),Bv(u(o2(t.b,mr,hb),15),n),s=QI(o,s,new CF,r),Bv(u(o2(t.b,mr,Sw),15),n),Bv(u(o2(t.b,Bn,Aw),15),n),s=QI(o,s,new IX,r),Bv(u(o2(t.b,Bn,hb),15),n),Bv(u(o2(t.b,Bn,Sw),15),n)}function Xyn(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y;for(wr(e,"Layer size calculation",1),C=ss,k=Ts,s=!1,d=new S(t.b);d.a<d.c.c.length;)if(h=u(J(d),29),w=h.c,w.a=0,w.b=0,h.a.c.length!=0){for(s=!0,F=new S(h.a);F.a<F.c.c.length;)M=u(J(F),10),V=M.o,H=M.d,w.a=b.Math.max(w.a,V.a+H.b+H.c);r=u(Fe(h.a,0),10),Y=r.n.b-r.d.d,r.k==(Gn(),xs)&&(Y-=u(Q(t,(Te(),LO)),142).d),o=u(Fe(h.a,h.a.c.length-1),10),n=o.n.b+o.o.b+o.d.a,o.k==xs&&(n+=u(Q(t,(Te(),LO)),142).a),w.b=n-Y,C=b.Math.min(C,Y),k=b.Math.max(k,n)}s||(C=0,k=0),t.f.b=k-C,t.c.b-=C,or(e)}function fxt(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt;for(o=0,h=0,k=new S(t.a);k.a<k.c.c.length;)d=u(J(k),10),o=b.Math.max(o,d.d.b),h=b.Math.max(h,d.d.c);for(w=new S(t.a);w.a<w.c.c.length;){switch(d=u(J(w),10),n=u(Q(d,(Te(),Ld)),248),n.g){case 1:V=0;break;case 2:V=1;break;case 5:V=.5;break;default:for(r=0,M=0,H=new S(d.j);H.a<H.c.c.length;)F=u(J(H),11),F.e.c.length==0||++r,F.g.c.length==0||++M;r+M==0?V=.5:V=M/(r+M)}tt=t.c,C=d.o.a,gt=(tt.a-C)*V,V>.5?gt-=h*2*(V-.5):V<.5&&(gt+=o*2*(.5-V)),s=d.d.b,gt<s&&(gt=s),Y=d.d.c,gt>tt.a-Y-C&&(gt=tt.a-Y-C),d.n.a=e+gt}}function Qyn(t,e,n,r,s){var o,h,d,w,k,C,M,F,H,V,Y,tt;for(d=Pt(ia,vo,25,t.c.length,15,1),F=new Vj(new KF),K3t(F,t),k=0,Y=new le;F.b.c.length!=0;)if(h=u(F.b.c.length==0?null:Fe(F.b,0),157),k>1&&Fu(h)*xl(h)/2>d[0]){for(o=0;o<Y.c.length-1&&Fu(h)*xl(h)/2>d[o];)++o;V=new Kd(Y,0,o+1),M=new U$(V),C=Fu(h)/xl(h),w=Mat(M,e,new wx,n,r,s,C),Li(Gf(M.e),w),M8(dE(F,M)),H=new Kd(Y,o+1,Y.c.length),K3t(F,H),Y.c=Pt(Xn,Ie,1,0,5,1),k=0,hYt(d,d.length,0)}else tt=F.b.c.length==0?null:Fe(F.b,0),tt!=null&&oit(F,0),k>0&&(d[k]=d[k-1]),d[k]+=Fu(h)*xl(h),++k,Y.c[Y.c.length]=h;return Y}function Zyn(t){var e,n,r,s,o;if(r=u(Q(t,(Te(),cu)),163),r==(hh(),fb)){for(n=new ar(lr(jo(t).a.Kc(),new z));zr(n);)if(e=u(Lr(n),17),!kJt(e))throw rt(new F3(Rot+ZI(t)+"' has its layer constraint set to FIRST_SEPARATE, but has at least one incoming edge. FIRST_SEPARATE nodes must not have incoming edges."))}else if(r==Fy){for(o=new ar(lr(Ms(t).a.Kc(),new z));zr(o);)if(s=u(Lr(o),17),!kJt(s))throw rt(new F3(Rot+ZI(t)+"' has its layer constraint set to LAST_SEPARATE, but has at least one outgoing edge. LAST_SEPARATE nodes must not have outgoing edges."))}}function Jyn(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V;for(wr(e,"Label dummy removal",1),r=Xt(ye(Q(t,(Te(),B6)))),s=Xt(ye(Q(t,Gy))),k=u(Q(t,Vl),103),w=new S(t.b);w.a<w.c.c.length;)for(d=u(J(w),29),M=new ha(d.a,0);M.b<M.d.gc();)C=(Qn(M.b<M.d.gc()),u(M.d.Xb(M.c=M.b++),10)),C.k==(Gn(),Sl)&&(F=u(Q(C,(se(),_i)),17),V=Xt(ye(Q(F,Ug))),h=Gt(Q(C,D6))===Gt((jl(),wb)),n=new yo(C.n),h&&(n.b+=V+r),o=new $e(C.o.a,C.o.b-V-r),H=u(Q(C,TO),15),k==(ao(),Z0)||k==Q0?Nvn(H,n,s,o,h,k):pun(H,n,s,o),As(F.b,H),_at(C,Gt(Q(t,X0))===Gt((q0(),XO))),El(M));or(e)}function t3n(t,e,n,r){var s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt;for(w=new le,o=new S(e.a);o.a<o.c.c.length;)for(s=u(J(o),10),d=new S(s.j);d.a<d.c.c.length;){for(h=u(J(d),11),C=null,_t=gd(h.g),Bt=0,Yt=_t.length;Bt<Yt;++Bt)Lt=_t[Bt],V8(Lt.d.i,n)||(gt=Eat(t,e,n,Lt,Lt.c,(so(),eu),C),gt!=C&&(w.c[w.c.length]=gt),gt.c&&(C=gt));for(k=null,V=gd(h.e),Y=0,tt=V.length;Y<tt;++Y)H=V[Y],V8(H.c.i,n)||(gt=Eat(t,e,n,H,H.d,(so(),Ju),k),gt!=k&&(w.c[w.c.length]=gt),gt.c&&(k=gt))}for(F=new S(w);F.a<F.c.c.length;)M=u(J(F),441),Ro(e.a,M.a,0)!=-1||ue(e.a,M.a),M.c&&(r.c[r.c.length]=M)}function e3n(t,e,n){var r,s,o,h,d,w,k,C,M,F,H,V,Y,tt;for(wr(n,"Interactive cycle breaking",1),M=new le,H=new S(e.a);H.a<H.c.c.length;)for(F=u(J(H),10),F.p=1,V=u4t(F).a,C=iw(F,(so(),eu)).Kc();C.Ob();)for(k=u(C.Pb(),11),o=new S(k.g);o.a<o.c.c.length;)r=u(J(o),17),Y=r.d.i,Y!=F&&(tt=u4t(Y).a,tt<V&&(M.c[M.c.length]=r));for(h=new S(M);h.a<h.c.c.length;)r=u(J(h),17),dw(r,!0);for(M.c=Pt(Xn,Ie,1,0,5,1),w=new S(e.a);w.a<w.c.c.length;)d=u(J(w),10),d.p>0&&qae(t,d,M);for(s=new S(M);s.a<s.c.c.length;)r=u(J(s),17),dw(r,!0);M.c=Pt(Xn,Ie,1,0,5,1),or(n)}function Ble(t,e){var n,r,s,o,h,d,w,k,C;return k="",e.length==0?t.de(Nxt,Rat,-1,-1):(C=uy(e),hn(C.substr(0,3),"at ")&&(C=C.substr(3)),C=C.replace(/\[.*?\]/g,""),h=C.indexOf("("),h==-1?(h=C.indexOf("@"),h==-1?(k=C,C=""):(k=uy(C.substr(h+1)),C=uy(C.substr(0,h)))):(n=C.indexOf(")",h),k=C.substr(h+1,n-(h+1)),C=uy(C.substr(0,h))),h=cd(C,Eu(46)),h!=-1&&(C=C.substr(h+1)),(C.length==0||hn(C,"Anonymous function"))&&(C=Rat),d=dj(k,Eu(58)),s=uvt(k,Eu(58),d-1),w=-1,r=-1,o=Nxt,d!=-1&&s!=-1&&(o=k.substr(0,s),w=iWt(k.substr(s+1,d-(s+1))),r=iWt(k.substr(d+1))),t.de(o,C,w,r))}function dxt(t,e,n){var r,s,o,h,d,w;if(e.l==0&&e.m==0&&e.h==0)throw rt(new pR("divide by zero"));if(t.l==0&&t.m==0&&t.h==0)return n&&(ob=ru(0,0,0)),ru(0,0,0);if(e.h==ID&&e.m==0&&e.l==0)return bln(t,n);if(w=!1,e.h>>19&&(e=Y8(e),w=!w),h=Zbn(e),o=!1,s=!1,r=!1,t.h==ID&&t.m==0&&t.l==0)if(s=!0,o=!0,h==-1)t=rUt((N8(),Z8t)),r=!0,w=!w;else return d=h5t(t,h),w&&vit(d),n&&(ob=ru(0,0,0)),d;else t.h>>19&&(o=!0,t=Y8(t),r=!0,w=!w);return h!=-1?jcn(t,h,w,o,n):n4t(t,e)<0?(n&&(o?ob=Y8(t):ob=ru(t.l,t.m,t.h)),ru(0,0,0)):Hwn(r?t:ru(t.l,t.m,t.h),e,w,o,s,n)}function Tq(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V;if(t.e&&t.c.c<t.f)throw rt(new Fo("Expected "+t.f+" phases to be configured; only found "+t.c.c));for(C=u(Hf(t.g),9),H=Hd(t.f),o=C,d=0,k=o.length;d<k;++d)r=o[d],M=u(wI(t,r.g),246),M?ue(H,u(rie(t,M),123)):H.c[H.c.length]=null;for(V=new Hs,us(Ri(pu(Ri(new Tn(null,new _n(H,16)),new pZ),new z$t(e)),new bZ),new q$t(V)),Rl(V,t.a),n=new le,s=C,h=0,w=s.length;h<w;++h)r=s[h],As(n,qne(t,s$(u(wI(V,r.g),20)))),F=u(Fe(H,r.g),123),F&&(n.c[n.c.length]=F);return As(n,qne(t,s$(u(wI(V,C[C.length-1].g+1),20)))),n}function n3n(t,e,n){var r,s,o,h,d,w,k,C,M,F,H,V,Y,tt;for(wr(n,"Model order cycle breaking",1),t.a=0,t.b=0,H=new le,C=e.a.c.length,k=new S(e.a);k.a<k.c.c.length;)w=u(J(k),10),Vs(w,(se(),Tc))&&(C=b.Math.max(C,u(Q(w,Tc),19).a+1));for(Y=new S(e.a);Y.a<Y.c.c.length;)for(V=u(J(Y),10),h=Zae(t,V,C),F=iw(V,(so(),eu)).Kc();F.Ob();)for(M=u(F.Pb(),11),o=new S(M.g);o.a<o.c.c.length;)r=u(J(o),17),tt=r.d.i,d=Zae(t,tt,C),d<h&&(H.c[H.c.length]=r);for(s=new S(H);s.a<s.c.c.length;)r=u(J(s),17),dw(r,!0),Jt(e,(se(),xO),(Fn(),!0));H.c=Pt(Xn,Ie,1,0,5,1),or(n)}function r3n(t,e){var n,r,s,o,h,d,w;if(!(t.g>e.f||e.g>t.f)){for(n=0,r=0,h=t.w.a.ec().Kc();h.Ob();)s=u(h.Pb(),11),Lit(Ko(ct(ot(Us,1),te,8,0,[s.i.n,s.n,s.a])).b,e.g,e.f)&&++n;for(d=t.r.a.ec().Kc();d.Ob();)s=u(d.Pb(),11),Lit(Ko(ct(ot(Us,1),te,8,0,[s.i.n,s.n,s.a])).b,e.g,e.f)&&--n;for(w=e.w.a.ec().Kc();w.Ob();)s=u(w.Pb(),11),Lit(Ko(ct(ot(Us,1),te,8,0,[s.i.n,s.n,s.a])).b,t.g,t.f)&&++r;for(o=e.r.a.ec().Kc();o.Ob();)s=u(o.Pb(),11),Lit(Ko(ct(ot(Us,1),te,8,0,[s.i.n,s.n,s.a])).b,t.g,t.f)&&--r;n<r?new S$(t,e,r-n):r<n?new S$(e,t,n-r):(new S$(e,t,0),new S$(t,e,0))}}function i3n(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt;for(k=e.c,s=a2t(t.e),M=ud(BM(nc(s2t(t.e)),t.d*t.a,t.c*t.b),-.5),n=s.a-M.a,r=s.b-M.b,h=e.a,n=h.c-n,r=h.d-r,w=new S(k);w.a<w.c.c.length;){switch(d=u(J(w),395),F=d.b,H=n+F.a,tt=r+F.b,V=ps(H/t.a),gt=ps(tt/t.b),o=d.a,o.g){case 0:C=(n6(),cO);break;case 1:C=(n6(),oO);break;case 2:C=(n6(),uO);break;default:C=(n6(),lO)}o.a?(Lt=ps((tt+d.c)/t.b),ue(t.f,new vvt(C,de(gt),de(Lt))),o==(s_(),fO)?X8(t,0,gt,V,Lt):X8(t,V,gt,t.d-1,Lt)):(Y=ps((H+d.c)/t.a),ue(t.f,new vvt(C,de(V),de(Y))),o==(s_(),hO)?X8(t,V,0,Y,gt):X8(t,V,gt,Y,t.c-1))}}function s3n(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt;for(F=new le,s=new le,Y=null,d=e.Kc();d.Ob();)h=u(d.Pb(),19),o=new Tp(h.a),s.c[s.c.length]=o,Y&&(o.d=Y,Y.e=o),Y=o;for(_t=Dmn(t),C=0;C<s.c.length;++C){for(H=null,tt=wmt((An(0,s.c.length),u(s.c[0],652))),n=null,r=ss,M=1;M<t.b.c.length;++M)gt=tt?b.Math.abs(tt.b-M):b.Math.abs(M-H.b)+1,V=H?b.Math.abs(M-H.b):gt+1,V<gt?(k=H,w=V):(k=tt,w=gt),Lt=(Bt=Xt(ye(Q(t,(Te(),wCt)))),_t[M]+b.Math.pow(w,Bt)),Lt<r&&(r=Lt,n=k,n.c=M),tt&&M==tt.b&&(H=tt,tt=ren(tt));n&&(ue(F,de(n.c)),n.a=!0,Uun(n))}return vn(),Lnt(F.c,F.c.length,null),F}function a3n(t){var e,n,r,s,o,h,d,w,k,C;for(e=new qb,n=new qb,k=hn(ZD,(s=m_(t.b,Kr),s?Br(Yf((!s.b&&(s.b=new yl((dn(),Qa),cc,s)),s.b),Nh)):null)),w=0;w<t.i;++w)d=u(t.g[w],170),Et(d,99)?(h=u(d,18),h.Bb&dc?(!(h.Bb&bd)||!k&&(o=m_(h,Kr),(o?Br(Yf((!o.b&&(o.b=new yl((dn(),Qa),cc,o)),o.b),mH)):null)==null))&&Mr(e,h):(C=no(h),C&&C.Bb&dc||(!(h.Bb&bd)||!k&&(r=m_(h,Kr),(r?Br(Yf((!r.b&&(r.b=new yl((dn(),Qa),cc,r)),r.b),mH)):null)==null))&&Mr(n,h))):(to(),u(d,66).Oj()&&(d.Jj()||(Mr(e,d),Mr(n,d))));ey(e),ey(n),t.a=u(e.g,247),u(n.g,247)}function o3n(t,e,n){var r,s,o,h,d,w,k,C,M,F,H,V,Y,tt;for(k=V0n(e),Y=u(Q(e,(Te(),ES)),314),Y!=(Yx(),S6)&&va(k,new ed),tt=u(Q(e,_O),292),va(k,new hi(tt)),V=0,C=new le,o=new MC(k);o.a!=o.b;)s=u(mz(o),37),Xle(t.c,s),F=u(Q(s,(se(),Rlt)),15),V+=F.gc(),r=F.Kc(),ue(C,new la(s,r));for(wr(n,"Recursive hierarchical layout",V),H=u(u(Fe(C,C.c.length-1),46).b,47);H.Ob();)for(w=new S(C);w.a<w.c.c.length;)for(d=u(J(w),46),F=u(d.b,47),h=u(d.a,37);F.Ob();)if(M=u(F.Pb(),51),Et(M,507)){if(h.e)break;M.pf(h,Rc(n,1));break}else M.pf(h,Rc(n,1));or(n)}function Rle(t,e){var n,r,s,o,h,d,w,k,C,M;if(w=e.length-1,d=(Rr(w,e.length),e.charCodeAt(w)),d==93){if(h=cd(e,Eu(91)),h>=0)return s=cln(t,e.substr(1,h-1)),C=e.substr(h+1,w-(h+1)),r5n(t,C,s)}else{if(n=-1,rEt==null&&(rEt=new RegExp("\\d")),rEt.test(String.fromCharCode(d))&&(n=uvt(e,Eu(46),w-1),n>=0)){r=u(Prt(t,gee(t,e.substr(1,n-1)),!1),58),k=0;try{k=$l(e.substr(n+1),_a,vi)}catch(F){throw F=Wi(F),Et(F,127)?(o=F,rt(new F$(o))):rt(F)}if(k<r.gc())return M=r.Xb(k),Et(M,72)&&(M=u(M,72).dd()),u(M,56)}if(n<0)return u(Prt(t,gee(t,e.substr(1)),!1),56)}return null}function E4(t,e,n){var r,s,o,h,d,w,k,C,M;if(Vi(e,n)>=0)return n;switch($v(Eo(t,n))){case 2:{if(hn("",Og(t,n.Hj()).ne())){if(w=ZM(Eo(t,n)),d=k8(Eo(t,n)),C=w5t(t,e,w,d),C)return C;for(s=V5t(t,e),h=0,M=s.gc();h<M;++h)if(C=u(s.Xb(h),170),_5t(jnt(Eo(t,C)),w))return C}return null}case 4:{if(hn("",Og(t,n.Hj()).ne())){for(r=n;r;r=iin(Eo(t,r)))if(k=ZM(Eo(t,r)),d=k8(Eo(t,r)),C=m5t(t,e,k,d),C)return C;if(w=ZM(Eo(t,n)),hn(L2,w))return a4t(t,e);for(o=oat(t,e),h=0,M=o.gc();h<M;++h)if(C=u(o.Xb(h),170),_5t(jnt(Eo(t,C)),w))return C}return null}default:return null}}function c3n(t,e,n){var r,s,o,h,d,w,k,C;if(n.gc()==0)return!1;if(d=(to(),u(e,66).Oj()),o=d?n:new Kv(n.gc()),V0(t.e,e)){if(e.hi())for(k=n.Kc();k.Ob();)w=k.Pb(),mq(t,e,w,Et(e,99)&&(u(e,18).Bb&Ya)!=0)||(s=Yd(e,w),o.Hc(s)||o.Fc(s));else if(!d)for(k=n.Kc();k.Ob();)w=k.Pb(),s=Yd(e,w),o.Fc(s)}else{if(n.gc()>1)throw rt(new Pn(eO));for(C=au(t.e.Tg(),e),r=u(t.g,119),h=0;h<t.i;++h)if(s=r[h],C.rl(s.ak())){if(n.Hc(d?s:s.dd()))return!1;for(k=n.Kc();k.Ob();)w=k.Pb(),u(u4(t,h,d?u(w,72):Yd(e,w)),72);return!0}d||(s=Yd(e,n.Kc().Pb()),o.Fc(s))}return rs(t,o)}function u3n(t,e){var n,r,s,o,h,d,w,k,C;for(C=new Qi,d=(k=new b1(t.c).a.vc().Kc(),new v1(k));d.a.Ob();)o=(s=u(d.a.Pb(),42),u(s.dd(),458)),o.b==0&&hs(C,o,C.c.b,C.c);for(;C.b!=0;)for(o=u(C.b==0?null:(Qn(C.b!=0),ch(C,C.a.a)),458),o.a==null&&(o.a=0),r=new S(o.d);r.a<r.c.c.length;)n=u(J(r),654),n.b.a==null?n.b.a=Xt(o.a)+n.a:e.o==(E1(),j2)?n.b.a=b.Math.min(Xt(n.b.a),Xt(o.a)+n.a):n.b.a=b.Math.max(Xt(n.b.a),Xt(o.a)+n.a),--n.b.b,n.b.b==0&&ni(C,n.b);for(h=(w=new b1(t.c).a.vc().Kc(),new v1(w));h.a.Ob();)o=(s=u(h.a.Pb(),42),u(s.dd(),458)),e.i[o.c.p]=o.a}function fc(){fc=Z,jS=new Gi(l6t),new Os("DEPTH",de(0)),mV=new Os("FAN",de(0)),Zme=new Os(I1e,de(0)),Wy=new Os("ROOT",(Fn(),!1)),Sht=new Os("LEFTNEIGHBOR",null),Jme=new Os("RIGHTNEIGHBOR",null),yV=new Os("LEFTSIBLING",null),Aht=new Os("RIGHTSIBLING",null),_ht=new Os("DUMMY",!1),new Os("LEVEL",de(0)),JCt=new Os("REMOVABLE_EDGES",new Qi),Lht=new Os("XCOOR",de(0)),t_t=new Os("YCOOR",de(0)),xV=new Os("LEVELHEIGHT",0),RS=new Os("ID",""),kV=new Os("POSITION",de(0)),Yg=new Os("PRELIM",0),k7=new Os("MODIFIER",0),BS=new Gi(qfe),FO=new Gi(Hfe)}function l3n(t,e,n,r){var s,o,h,d,w,k,C,M,F,H,V;for(C=n+e.c.c.a,H=new S(e.j);H.a<H.c.c.length;){if(F=u(J(H),11),s=Ko(ct(ot(Us,1),te,8,0,[F.i.n,F.n,F.a])),e.k==(Gn(),Hc)&&(d=u(Q(F,(se(),_i)),11),s.a=Ko(ct(ot(Us,1),te,8,0,[d.i.n,d.n,d.a])).a,e.n.a=s.a),h=new $e(0,s.b),F.j==(be(),Hn))h.a=C;else if(F.j==Bn)h.a=n;else continue;if(V=b.Math.abs(s.a-h.a),!(V<=r&&!g1n(e)))for(o=F.g.c.length+F.e.c.length>1,k=new S1(F.b);Vo(k.a)||Vo(k.b);)w=u(Vo(k.a)?J(k.a):J(k.b),17),M=w.c==F?w.d:w.c,b.Math.abs(Ko(ct(ot(Us,1),te,8,0,[M.i.n,M.n,M.a])).b-h.b)>1&&nvn(t,w,h,o,F)}}function h3n(t){var e,n,r,s,o,h;if(s=new ha(t.e,0),r=new ha(t.a,0),t.d)for(n=0;n<t.b;n++)Qn(s.b<s.d.gc()),s.d.Xb(s.c=s.b++);else for(n=0;n<t.b-1;n++)Qn(s.b<s.d.gc()),s.d.Xb(s.c=s.b++),El(s);for(e=Xt((Qn(s.b<s.d.gc()),ye(s.d.Xb(s.c=s.b++))));t.f-e>wct;){for(o=e,h=0;b.Math.abs(e-o)<wct;)++h,e=Xt((Qn(s.b<s.d.gc()),ye(s.d.Xb(s.c=s.b++)))),Qn(r.b<r.d.gc()),r.d.Xb(r.c=r.b++);h<t.b&&(Qn(s.b>0),s.a.Xb(s.c=--s.b),Amn(t,t.b-h,o,r,s),Qn(s.b<s.d.gc()),s.d.Xb(s.c=s.b++)),Qn(r.b>0),r.a.Xb(r.c=--r.b)}if(!t.d)for(n=0;n<t.b-1;n++)Qn(s.b<s.d.gc()),s.d.Xb(s.c=s.b++),El(s);t.d=!0,t.c=!0}function Di(){Di=Z,bLt=(sbt(),pc).b,g5e=u(St(Wt(pc.b),0),34),U2=u(St(Wt(pc.b),1),34),d5e=u(St(Wt(pc.b),2),34),u5=pc.bb,u(St(Wt(pc.bb),0),34),u(St(Wt(pc.bb),1),34),l5=pc.fb,oA=u(St(Wt(pc.fb),0),34),u(St(Wt(pc.fb),1),34),u(St(Wt(pc.fb),2),18),Gw=pc.qb,_5e=u(St(Wt(pc.qb),0),34),u(St(Wt(pc.qb),1),18),u(St(Wt(pc.qb),2),18),gN=u(St(Wt(pc.qb),3),34),pN=u(St(Wt(pc.qb),4),34),uA=u(St(Wt(pc.qb),6),34),cA=u(St(Wt(pc.qb),5),18),p5e=pc.j,b5e=pc.k,v5e=pc.q,w5e=pc.w,m5e=pc.B,y5e=pc.A,x5e=pc.C,k5e=pc.D,E5e=pc._,T5e=pc.cb,C5e=pc.hb}function f3n(t,e,n){var r,s,o,h,d,w,k,C,M,F,H;t.c=0,t.b=0,r=2*e.c.a.c.length+1;t:for(M=n.Kc();M.Ob();){if(C=u(M.Pb(),11),d=C.j==(be(),Nn)||C.j==mr,H=0,d){if(F=u(Q(C,(se(),Zu)),10),!F)continue;H+=Gvn(t,r,C,F)}else{for(k=new S(C.g);k.a<k.c.c.length;)if(w=u(J(k),17),s=w.d,s.i.c==e.c){ue(t.a,C);continue t}else H+=t.g[s.p];for(h=new S(C.e);h.a<h.c.c.length;)if(o=u(J(h),17),s=o.c,s.i.c==e.c){ue(t.a,C);continue t}else H-=t.g[s.p]}C.e.c.length+C.g.c.length>0?(t.f[C.p]=H/(C.e.c.length+C.g.c.length),t.c=b.Math.min(t.c,t.f[C.p]),t.b=b.Math.max(t.b,t.f[C.p])):d&&(t.f[C.p]=H)}}function d3n(t){t.b=null,t.bb=null,t.fb=null,t.qb=null,t.a=null,t.c=null,t.d=null,t.e=null,t.f=null,t.n=null,t.M=null,t.L=null,t.Q=null,t.R=null,t.K=null,t.db=null,t.eb=null,t.g=null,t.i=null,t.j=null,t.k=null,t.gb=null,t.o=null,t.p=null,t.q=null,t.r=null,t.$=null,t.ib=null,t.S=null,t.T=null,t.t=null,t.s=null,t.u=null,t.v=null,t.w=null,t.B=null,t.A=null,t.C=null,t.D=null,t.F=null,t.G=null,t.H=null,t.I=null,t.J=null,t.P=null,t.Z=null,t.U=null,t.V=null,t.W=null,t.X=null,t.Y=null,t._=null,t.ab=null,t.cb=null,t.hb=null,t.nb=null,t.lb=null,t.mb=null,t.ob=null,t.pb=null,t.jb=null,t.kb=null,t.N=!1,t.O=!1}function g3n(t,e,n){var r,s,o,h;for(wr(n,"Graph transformation ("+t.a+")",1),h=Gv(e.a),o=new S(e.b);o.a<o.c.c.length;)s=u(J(o),29),As(h,s.a);if(r=u(Q(e,(Te(),j9t)),419),r==(TI(),NG))switch(u(Q(e,Vl),103).g){case 2:NC(e,h);break;case 3:n_(e,h);break;case 4:t.a==(q8(),pO)?(n_(e,h),Crt(e,h)):(Crt(e,h),n_(e,h))}else if(t.a==(q8(),pO))switch(u(Q(e,Vl),103).g){case 2:NC(e,h),Crt(e,h);break;case 3:n_(e,h),NC(e,h);break;case 4:NC(e,h),n_(e,h)}else switch(u(Q(e,Vl),103).g){case 2:NC(e,h),Crt(e,h);break;case 3:NC(e,h),n_(e,h);break;case 4:n_(e,h),NC(e,h)}or(n)}function p3n(t,e,n){var r,s,o,h,d,w,k,C,M,F,H,V,Y;for(k=new A0,C=new A0,V=new A0,Y=new A0,w=Xt(ye(Q(e,(Te(),Bw)))),o=Xt(ye(Q(e,xf))),d=new S(n);d.a<d.c.c.length;)if(h=u(J(d),10),M=u(Q(h,(se(),oc)),61),M==(be(),Nn))for(C.a.zc(h,C),s=new ar(lr(jo(h).a.Kc(),new z));zr(s);)r=u(Lr(s),17),Ns(k,r.c.i);else if(M==mr)for(Y.a.zc(h,Y),s=new ar(lr(jo(h).a.Kc(),new z));zr(s);)r=u(Lr(s),17),Ns(V,r.c.i);k.a.gc()!=0&&(F=new Gnt(2,o),H=vxt(F,e,k,C,-w-e.c.b),H>0&&(t.a=w+(H-1)*o,e.c.b+=t.a,e.f.b+=t.a)),V.a.gc()!=0&&(F=new Gnt(1,o),H=vxt(F,e,V,Y,e.f.b+w-e.c.b),H>0&&(e.f.b+=w+(H-1)*o))}function CE(t,e){var n,r,s,o;o=t.F,e==null?(t.F=null,Z8(t,null)):(t.F=(On(e),e),r=cd(e,Eu(60)),r!=-1?(s=e.substr(0,r),cd(e,Eu(46))==-1&&!hn(s,u6)&&!hn(s,Q_)&&!hn(s,TH)&&!hn(s,Z_)&&!hn(s,J_)&&!hn(s,tS)&&!hn(s,eS)&&!hn(s,nS)&&(s=E0e),n=dj(e,Eu(62)),n!=-1&&(s+=""+e.substr(n+1)),Z8(t,s)):(s=e,cd(e,Eu(46))==-1&&(r=cd(e,Eu(91)),r!=-1&&(s=e.substr(0,r)),!hn(s,u6)&&!hn(s,Q_)&&!hn(s,TH)&&!hn(s,Z_)&&!hn(s,J_)&&!hn(s,tS)&&!hn(s,eS)&&!hn(s,nS)?(s=E0e,r!=-1&&(s+=""+e.substr(r))):s=e),Z8(t,s),s==e&&(t.F=t.D))),t.Db&4&&!(t.Db&1)&&mi(t,new Qs(t,1,5,o,e))}function b3n(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t;if(Y=e.b.c.length,!(Y<3)){for(H=Pt(Tr,Xr,25,Y,15,1),M=0,C=new S(e.b);C.a<C.c.c.length;)k=u(J(C),29),H[M++]=k.a.c.length;for(F=new ha(e.b,2),r=1;r<Y-1;r++)for(n=(Qn(F.b<F.d.gc()),u(F.d.Xb(F.c=F.b++),29)),V=new S(n.a),o=0,d=0,w=0;w<H[r+1];w++)if(_t=u(J(V),10),w==H[r+1]-1||R4t(t,_t,r+1,r)){for(h=H[r]-1,R4t(t,_t,r+1,r)&&(h=t.c.e[u(u(u(Fe(t.c.b,_t.p),15).Xb(0),46).a,10).p]);d<=w;){if(Lt=u(Fe(n.a,d),10),!R4t(t,Lt,r+1,r))for(gt=u(Fe(t.c.b,Lt.p),15).Kc();gt.Ob();)tt=u(gt.Pb(),46),s=t.c.e[u(tt.a,10).p],(s<o||s>h)&&Ns(t.b,u(tt.b,17));++d}o=h}}}function gxt(t,e){var n;if(e==null||hn(e,Tu)||e.length==0&&t.k!=(jg(),j6))return null;switch(t.k.g){case 1:return Oz(e,qE)?(Fn(),YE):Oz(e,Oct)?(Fn(),I2):null;case 2:try{return de($l(e,_a,vi))}catch(r){if(r=Wi(r),Et(r,127))return null;throw rt(r)}case 4:try{return ly(e)}catch(r){if(r=Wi(r),Et(r,127))return null;throw rt(r)}case 3:return e;case 5:return xre(t),Soe(t,e);case 6:return xre(t),_bn(t,t.a,e);case 7:try{return n=Rpn(t),n.Jf(e),n}catch(r){if(r=Wi(r),Et(r,32))return null;throw rt(r)}default:throw rt(new Fo("Invalid type set for this layout option."))}}function v3n(t){$C();var e,n,r,s,o,h,d;for(d=new Zzt,n=new S(t);n.a<n.c.c.length;)e=u(J(n),140),(!d.b||e.c>=d.b.c)&&(d.b=e),(!d.c||e.c<=d.c.c)&&(d.d=d.c,d.c=e),(!d.e||e.d>=d.e.d)&&(d.e=e),(!d.f||e.d<=d.f.d)&&(d.f=e);return r=new Bz((K8(),_w)),aI(t,Lbe,new wl(ct(ot(gO,1),Ie,369,0,[r]))),h=new Bz(Dy),aI(t,Abe,new wl(ct(ot(gO,1),Ie,369,0,[h]))),s=new Bz(Iy),aI(t,Sbe,new wl(ct(ot(gO,1),Ie,369,0,[s]))),o=new Bz(j4),aI(t,_be,new wl(ct(ot(gO,1),Ie,369,0,[o]))),Yst(r.c,_w),Yst(s.c,Iy),Yst(o.c,j4),Yst(h.c,Dy),d.a.c=Pt(Xn,Ie,1,0,5,1),As(d.a,r.c),As(d.a,a2(s.c)),As(d.a,o.c),As(d.a,a2(h.c)),d}function pxt(t){var e;switch(t.d){case 1:{if(t.hj())return t.o!=-2;break}case 2:{if(t.hj())return t.o==-2;break}case 3:case 5:case 4:case 6:case 7:return t.o>-2;default:return!1}switch(e=t.gj(),t.p){case 0:return e!=null&&je(Re(e))!=aC(t.k,0);case 1:return e!=null&&u(e,217).a!=Sr(t.k)<<24>>24;case 2:return e!=null&&u(e,172).a!=(Sr(t.k)&ms);case 6:return e!=null&&aC(u(e,162).a,t.k);case 5:return e!=null&&u(e,19).a!=Sr(t.k);case 7:return e!=null&&u(e,184).a!=Sr(t.k)<<16>>16;case 3:return e!=null&&Xt(ye(e))!=t.j;case 4:return e!=null&&u(e,155).a!=t.j;default:return e==null?t.n!=null:!yi(e,t.n)}}function ED(t,e,n){var r,s,o,h;return t.Fk()&&t.Ek()&&(h=Fnt(t,u(n,56)),Gt(h)!==Gt(n))?(t.Oi(e),t.Ui(e,pte(t,e,h)),t.rk()&&(o=(s=u(n,49),t.Dk()?t.Bk()?s.ih(t.b,no(u(yn(bu(t.b),t.aj()),18)).n,u(yn(bu(t.b),t.aj()).Yj(),26).Bj(),null):s.ih(t.b,Vi(s.Tg(),no(u(yn(bu(t.b),t.aj()),18))),null,null):s.ih(t.b,-1-t.aj(),null,null)),!u(h,49).eh()&&(o=(r=u(h,49),t.Dk()?t.Bk()?r.gh(t.b,no(u(yn(bu(t.b),t.aj()),18)).n,u(yn(bu(t.b),t.aj()).Yj(),26).Bj(),o):r.gh(t.b,Vi(r.Tg(),no(u(yn(bu(t.b),t.aj()),18))),null,o):r.gh(t.b,-1-t.aj(),null,o))),o&&o.Fi()),ml(t.b)&&t.$i(t.Zi(9,n,h,e,!1)),h):n}function jle(t,e,n){var r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt;for(C=Xt(ye(Q(t,(Te(),Fw)))),r=Xt(ye(Q(t,gCt))),F=new Wu,Jt(F,Fw,C+r),k=e,gt=k.d,Y=k.c.i,Lt=k.d.i,tt=t2t(Y.c),_t=t2t(Lt.c),s=new le,M=tt;M<=_t;M++)d=new H0(t),_0(d,(Gn(),Zs)),Jt(d,(se(),_i),k),Jt(d,os,(oa(),Vc)),Jt(d,sV,F),H=u(Fe(t.b,M),29),M==tt?oy(d,H.a.c.length-n,H):ko(d,H),Bt=Xt(ye(Q(k,Ug))),Bt<0&&(Bt=0,Jt(k,Ug,Bt)),d.o.b=Bt,V=b.Math.floor(Bt/2),h=new Mc,Fs(h,(be(),Bn)),Uo(h,d),h.n.b=V,w=new Mc,Fs(w,Hn),Uo(w,d),w.n.b=V,sa(k,h),o=new zv,Lo(o,k),Jt(o,_o,null),Da(o,w),sa(o,gt),y1n(d,k,o),s.c[s.c.length]=o,k=o;return s}function _at(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t;for(w=u(Rg(t,(be(),Bn)).Kc().Pb(),11).e,H=u(Rg(t,Hn).Kc().Pb(),11).g,d=w.c.length,_t=T1(u(Fe(t.j,0),11));d-- >0;){for(Y=(An(0,w.c.length),u(w.c[0],17)),s=(An(0,H.c.length),u(H.c[0],17)),Lt=s.d.e,o=Ro(Lt,s,0),Tin(Y,s.d,o),Da(s,null),sa(s,null),V=Y.a,e&&ni(V,new yo(_t)),r=ei(s.a,0);r.b!=r.d.c;)n=u(ti(r),8),ni(V,new yo(n));for(gt=Y.b,F=new S(s.b);F.a<F.c.c.length;)M=u(J(F),70),gt.c[gt.c.length]=M;if(tt=u(Q(Y,(Te(),_o)),74),h=u(Q(s,_o),74),h)for(tt||(tt=new Du,Jt(Y,_o,tt)),C=ei(h,0);C.b!=C.d.c;)k=u(ti(C),8),ni(tt,new yo(k))}}function $le(t,e){var n,r,s,o,h,d,w,k,C,M,F,H;if(n=u(go(t.b,e),124),w=u(u(Ai(t.r,e),21),84),w.dc()){n.n.b=0,n.n.c=0;return}for(k=t.u.Hc((Qu(),tg)),h=0,d=w.Kc(),C=null,M=0,F=0;d.Ob();)r=u(d.Pb(),111),s=Xt(ye(r.b.We((gj(),ZH)))),o=r.b.rf().a,t.A.Hc((_l(),V2))&&mue(t,e),C?(H=F+C.d.c+t.w+r.d.b,h=b.Math.max(h,(y1(),gf(P1),b.Math.abs(M-s)<=P1||M==s||isNaN(M)&&isNaN(s)?0:H/(s-M)))):t.C&&t.C.b>0&&(h=b.Math.max(h,dne(t.C.b+r.d.b,s))),C=r,M=s,F=o;t.C&&t.C.c>0&&(H=F+t.C.c,k&&(H+=C.d.c),h=b.Math.max(h,(y1(),gf(P1),b.Math.abs(M-1)<=P1||M==1||isNaN(M)&&isNaN(1)?0:H/(1-M)))),n.n.b=0,n.a.a=h}function zle(t,e){var n,r,s,o,h,d,w,k,C,M,F,H;if(n=u(go(t.b,e),124),w=u(u(Ai(t.r,e),21),84),w.dc()){n.n.d=0,n.n.a=0;return}for(k=t.u.Hc((Qu(),tg)),h=0,t.A.Hc((_l(),V2))&&yue(t,e),d=w.Kc(),C=null,F=0,M=0;d.Ob();)r=u(d.Pb(),111),o=Xt(ye(r.b.We((gj(),ZH)))),s=r.b.rf().b,C?(H=M+C.d.a+t.w+r.d.d,h=b.Math.max(h,(y1(),gf(P1),b.Math.abs(F-o)<=P1||F==o||isNaN(F)&&isNaN(o)?0:H/(o-F)))):t.C&&t.C.d>0&&(h=b.Math.max(h,dne(t.C.d+r.d.d,o))),C=r,F=o,M=s;t.C&&t.C.a>0&&(H=M+t.C.a,k&&(H+=C.d.a),h=b.Math.max(h,(y1(),gf(P1),b.Math.abs(F-1)<=P1||F==1||isNaN(F)&&isNaN(1)?0:H/(1-F)))),n.n.d=0,n.a.b=h}function qle(t,e,n){var r,s,o,h,d,w;for(this.g=t,d=e.d.length,w=n.d.length,this.d=Pt(o0,zg,10,d+w,0,1),h=0;h<d;h++)this.d[h]=e.d[h];for(o=0;o<w;o++)this.d[d+o]=n.d[o];if(e.e){if(this.e=UM(e.e),this.e.Mc(n),n.e)for(s=n.e.Kc();s.Ob();)r=u(s.Pb(),233),r!=e&&(this.e.Hc(r)?--r.c:this.e.Fc(r))}else n.e&&(this.e=UM(n.e),this.e.Mc(e));this.f=e.f+n.f,this.a=e.a+n.a,this.a>0?Jrt(this,this.f/this.a):x1(e.g,e.d[0]).a!=null&&x1(n.g,n.d[0]).a!=null?Jrt(this,(Xt(x1(e.g,e.d[0]).a)+Xt(x1(n.g,n.d[0]).a))/2):x1(e.g,e.d[0]).a!=null?Jrt(this,x1(e.g,e.d[0]).a):x1(n.g,n.d[0]).a!=null&&Jrt(this,x1(n.g,n.d[0]).a)}function w3n(t,e){var n,r,s,o,h,d,w,k,C,M;for(t.a=new XYt(Won(WS)),r=new S(e.a);r.a<r.c.c.length;){for(n=u(J(r),841),d=new Xit(ct(ot(Yut,1),Ie,81,0,[])),ue(t.a.a,d),k=new S(n.d);k.a<k.c.c.length;)w=u(J(k),110),C=new A2t(t,w),wxt(C,u(Q(n.c,(se(),Ny)),21)),kl(t.g,n)||(ki(t.g,n,new $e(w.c,w.d)),ki(t.f,n,C)),ue(t.a.b,C),Ert(d,C);for(h=new S(n.b);h.a<h.c.c.length;)o=u(J(h),594),C=new A2t(t,o.kf()),ki(t.b,o,new la(d,C)),wxt(C,u(Q(n.c,(se(),Ny)),21)),o.hf()&&(M=new L3t(t,o.hf(),1),wxt(M,u(Q(n.c,Ny),21)),s=new Xit(ct(ot(Yut,1),Ie,81,0,[])),Ert(s,M),ln(t.c,o.gf(),new la(d,M)))}return t.a}function Hle(t){var e;this.a=t,e=(Gn(),ct(ot(elt,1),ae,267,0,[Ds,Zs,xs,Hc,Sl,j1])).length,this.b=Xb(Qht,[te,Nkt],[593,146],0,[e,e],2),this.c=Xb(Qht,[te,Nkt],[593,146],0,[e,e],2),urt(this,Ds,(Te(),Bw),Z4),WC(this,Ds,Zs,Fw,R2),eI(this,Ds,Hc,Fw),eI(this,Ds,xs,Fw),WC(this,Ds,Sl,Bw,Z4),urt(this,Zs,xf,Q4),eI(this,Zs,Hc,xf),eI(this,Zs,xs,xf),WC(this,Zs,Sl,Fw,R2),vUt(this,Hc,xf),eI(this,Hc,xs,xf),eI(this,Hc,Sl,tht),vUt(this,xs,_S),WC(this,xs,Sl,y7,m7),urt(this,Sl,xf,xf),urt(this,j1,xf,Q4),WC(this,j1,Ds,Fw,R2),WC(this,j1,Sl,Fw,R2),WC(this,j1,Zs,Fw,R2)}function m3n(t,e,n){var r,s,o,h,d,w,k,C,M,F,H,V,Y,tt;if(h=n.ak(),Et(h,99)&&u(h,18).Bb&Ya&&(F=u(n.dd(),49),Y=Kp(t.e,F),Y!=F)){if(C=Yd(h,Y),fC(t,e,Sst(t,e,C)),M=null,ml(t.e)&&(r=E4((Ru(),ma),t.e.Tg(),h),r!=yn(t.e.Tg(),t.c))){for(tt=au(t.e.Tg(),h),d=0,o=u(t.g,119),w=0;w<e;++w)s=o[w],tt.rl(s.ak())&&++d;M=new Art(t.e,9,r,F,Y,d,!1),M.Ei(new F0(t.e,9,t.c,n,C,e,!1))}return V=u(h,18),H=no(V),H?(M=F.ih(t.e,Vi(F.Tg(),H),null,M),M=u(Y,49).gh(t.e,Vi(Y.Tg(),H),null,M)):V.Bb&dc&&(k=-1-Vi(t.e.Tg(),V),M=F.ih(t.e,k,null,null),!u(Y,49).eh()&&(M=u(Y,49).gh(t.e,k,null,M))),M&&M.Fi(),C}return n}function y3n(t){var e,n,r,s,o,h,d,w;for(o=new S(t.a.b);o.a<o.c.c.length;)s=u(J(o),81),s.b.c=s.g.c,s.b.d=s.g.d;for(w=new $e(ss,ss),e=new $e(Ts,Ts),r=new S(t.a.b);r.a<r.c.c.length;)n=u(J(r),81),w.a=b.Math.min(w.a,n.g.c),w.b=b.Math.min(w.b,n.g.d),e.a=b.Math.max(e.a,n.g.c+n.g.b),e.b=b.Math.max(e.b,n.g.d+n.g.a);for(d=Yj(t.c).a.nc();d.Ob();)h=u(d.Pb(),46),n=u(h.b,81),w.a=b.Math.min(w.a,n.g.c),w.b=b.Math.min(w.b,n.g.d),e.a=b.Math.max(e.a,n.g.c+n.g.b),e.b=b.Math.max(e.b,n.g.d+n.g.a);t.d=mj(new $e(w.a,w.b)),t.e=na(new $e(e.a,e.b),w),t.a.a.c=Pt(Xn,Ie,1,0,5,1),t.a.b.c=Pt(Xn,Ie,1,0,5,1)}function x3n(t){var e,n,r;for(s4(Tb,ct(ot(R4,1),Ie,130,0,[new yp])),n=new lx(t),r=0;r<n.a.length;++r)e=Xm(n,r).je().a,hn(e,"layered")?s4(Tb,ct(ot(R4,1),Ie,130,0,[new UJ])):hn(e,"force")?s4(Tb,ct(ot(R4,1),Ie,130,0,[new DJ])):hn(e,"stress")?s4(Tb,ct(ot(R4,1),Ie,130,0,[new OJ])):hn(e,"mrtree")?s4(Tb,ct(ot(R4,1),Ie,130,0,[new L3])):hn(e,"radial")?s4(Tb,ct(ot(R4,1),Ie,130,0,[new ZJ])):hn(e,"disco")?s4(Tb,ct(ot(R4,1),Ie,130,0,[new UL,new IJ])):hn(e,"sporeOverlap")||hn(e,"sporeCompaction")?s4(Tb,ct(ot(R4,1),Ie,130,0,[new BB])):hn(e,"rectpacking")&&s4(Tb,ct(ot(R4,1),Ie,130,0,[new jB]))}function Gle(t,e,n){var r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt;if(F=new yo(t.o),gt=e.a/F.a,d=e.b/F.b,Y=e.a-F.a,o=e.b-F.b,n)for(s=Gt(Q(t,(Te(),os)))===Gt((oa(),Vc)),V=new S(t.j);V.a<V.c.c.length;)switch(H=u(J(V),11),H.j.g){case 1:s||(H.n.a*=gt);break;case 2:H.n.a+=Y,s||(H.n.b*=d);break;case 3:s||(H.n.a*=gt),H.n.b+=o;break;case 4:s||(H.n.b*=d)}for(k=new S(t.b);k.a<k.c.c.length;)w=u(J(k),70),C=w.n.a+w.o.a/2,M=w.n.b+w.o.b/2,tt=C/F.a,h=M/F.b,tt+h>=1&&(tt-h>0&&M>=0?(w.n.a+=Y,w.n.b+=o*h):tt-h<0&&C>=0&&(w.n.a+=Y*tt,w.n.b+=o));t.o.a=e.a,t.o.b=e.b,Jt(t,(Te(),F2),(_l(),r=u(Hf(tA),9),new rh(r,u(uf(r,r.length),9),0)))}function k3n(t,e,n,r,s,o){var h;if(!(e==null||!Hit(e,YAt,XAt)))throw rt(new Pn("invalid scheme: "+e));if(!t&&!(n!=null&&cd(n,Eu(35))==-1&&n.length>0&&(Rr(0,n.length),n.charCodeAt(0)!=47)))throw rt(new Pn("invalid opaquePart: "+n));if(t&&!(e!=null&&pM(rU,e.toLowerCase()))&&!(n==null||!Hit(n,iA,sA)))throw rt(new Pn(l0e+n));if(t&&e!=null&&pM(rU,e.toLowerCase())&&!pdn(n))throw rt(new Pn(l0e+n));if(!mln(r))throw rt(new Pn("invalid device: "+r));if(!fun(s))throw h=s==null?"invalid segments: null":"invalid segment: "+cun(s),rt(new Pn(h));if(!(o==null||cd(o,Eu(35))==-1))throw rt(new Pn("invalid query: "+o))}function E3n(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt;for(wr(e,"Calculate Graph Size",1),e.n&&t&&hf(e,ff(t),(Cl(),Yl)),d=FE,w=FE,o=jkt,h=jkt,M=new er((!t.a&&(t.a=new he(ns,t,10,11)),t.a));M.e!=M.i.gc();)k=u(dr(M),33),V=k.i,Y=k.j,gt=k.g,r=k.f,s=u(qe(k,(ci(),KO)),142),d=b.Math.min(d,V-s.b),w=b.Math.min(w,Y-s.d),o=b.Math.max(o,V+gt+s.c),h=b.Math.max(h,Y+r+s.a);for(H=u(qe(t,(ci(),q2)),116),F=new $e(d-H.b,w-H.d),C=new er((!t.a&&(t.a=new he(ns,t,10,11)),t.a));C.e!=C.i.gc();)k=u(dr(C),33),yu(k,k.i-F.a),xu(k,k.j-F.b);tt=o-d+(H.b+H.c),n=h-w+(H.d+H.a),Qv(t,tt),Xv(t,n),e.n&&t&&hf(e,ff(t),(Cl(),Yl))}function Vle(t){var e,n,r,s,o,h,d,w,k,C;for(r=new le,h=new S(t.e.a);h.a<h.c.c.length;){for(s=u(J(h),121),C=0,s.k.c=Pt(Xn,Ie,1,0,5,1),n=new S(o4(s));n.a<n.c.c.length;)e=u(J(n),213),e.f&&(ue(s.k,e),++C);C==1&&(r.c[r.c.length]=s)}for(o=new S(r);o.a<o.c.c.length;)for(s=u(J(o),121);s.k.c.length==1;){for(k=u(J(new S(s.k)),213),t.b[k.c]=k.g,d=k.d,w=k.e,n=new S(o4(s));n.a<n.c.c.length;)e=u(J(n),213),yi(e,k)||(e.f?d==e.d||w==e.e?t.b[k.c]-=t.b[e.c]-e.g:t.b[k.c]+=t.b[e.c]-e.g:s==d?e.d==s?t.b[k.c]+=e.g:t.b[k.c]-=e.g:e.d==s?t.b[k.c]-=e.g:t.b[k.c]+=e.g);vu(d.k,k),vu(w.k,k),d==s?s=k.e:s=k.d}}function bxt(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V;if(e==null||e.length==0)return null;if(o=u(Fc(t.f,e),23),!o){for(s=(H=new b1(t.d).a.vc().Kc(),new v1(H));s.a.Ob();)if(n=(h=u(s.a.Pb(),42),u(h.dd(),23)),d=n.f,V=e.length,hn(d.substr(d.length-V,V),e)&&(e.length==d.length||ba(d,d.length-e.length-1)==46)){if(o)return null;o=n}if(!o){for(r=(F=new b1(t.d).a.vc().Kc(),new v1(F));r.a.Ob();)if(n=(h=u(r.a.Pb(),42),u(h.dd(),23)),M=n.g,M!=null){for(w=M,k=0,C=w.length;k<C;++k)if(d=w[k],V=e.length,hn(d.substr(d.length-V,V),e)&&(e.length==d.length||ba(d,d.length-e.length-1)==46)){if(o)return null;o=n}}}o&&xo(t.f,e,o)}return o}function T3n(t,e){var n,r,s,o,h;for(n=new Lm,h=!1,o=0;o<e.length;o++){if(r=(Rr(o,e.length),e.charCodeAt(o)),r==32){for(Rz(t,n,0),n.a+=" ",Rz(t,n,0);o+1<e.length&&(Rr(o+1,e.length),e.charCodeAt(o+1)==32);)++o;continue}if(h){r==39?o+1<e.length&&(Rr(o+1,e.length),e.charCodeAt(o+1)==39)?(n.a+=String.fromCharCode(r),++o):h=!1:n.a+=String.fromCharCode(r);continue}if(cd("GyMLdkHmsSEcDahKzZv",Eu(r))>0){Rz(t,n,0),n.a+=String.fromCharCode(r),s=chn(e,o),Rz(t,n,s),o+=s-1;continue}r==39?o+1<e.length&&(Rr(o+1,e.length),e.charCodeAt(o+1)==39)?(n.a+="'",++o):h=!0:n.a+=String.fromCharCode(r)}Rz(t,n,0),jdn(t)}function C3n(t,e,n){var r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt;if(wr(n,"Network simplex layering",1),t.b=e,gt=u(Q(e,(Te(),SS)),19).a*4,tt=t.b.a,tt.c.length<1){or(n);return}for(o=Cwn(t,tt),Y=null,s=ei(o,0);s.b!=s.d.c;){for(r=u(ti(s),15),d=gt*ps(b.Math.sqrt(r.gc())),h=qwn(r),cat(Jpt(RKe(tbt(mnt(h),d),Y),!0),Rc(n,1)),F=t.b.b,V=new S(h.a);V.a<V.c.c.length;){for(H=u(J(V),121);F.c.length<=H.e;)$m(F,F.c.length,new Ch(t.b));C=u(H.f,10),ko(C,u(Fe(F,H.e),29))}if(o.b>1)for(Y=Pt(Tr,Xr,25,t.b.b.c.length,15,1),M=0,k=new S(t.b.b);k.a<k.c.c.length;)w=u(J(k),29),Y[M++]=w.a.c.length}tt.c=Pt(Xn,Ie,1,0,5,1),t.a=null,t.b=null,t.c=null,or(n)}function Ule(t){var e,n,r,s,o,h,d;for(e=0,o=new S(t.b.a);o.a<o.c.c.length;)r=u(J(o),189),r.b=0,r.c=0;for(Iae(t,0),Git(t,t.g),uq(t.c),Kpt(t.c),n=(ao(),jh),mD(Het(T4(mD(Het(T4(mD(T4(t.c,n)),Xre(n)))),n))),T4(t.c,jh),Bit(t,t.g),mae(t,0),Cle(t,0),lce(t,1),Iae(t,1),Git(t,t.d),uq(t.c),h=new S(t.b.a);h.a<h.c.c.length;)r=u(J(h),189),e+=b.Math.abs(r.c);for(d=new S(t.b.a);d.a<d.c.c.length;)r=u(J(d),189),r.b=0,r.c=0;for(n=Z0,mD(Het(T4(mD(Het(T4(mD(Kpt(T4(t.c,n))),Xre(n)))),n))),T4(t.c,jh),Bit(t,t.d),mae(t,1),Cle(t,1),lce(t,0),Kpt(t.c),s=new S(t.b.a);s.a<s.c.c.length;)r=u(J(s),189),e+=b.Math.abs(r.c);return e}function Wle(t,e){var n,r,s,o,h,d,w,k,C;if(k=e,!(k.b==null||t.b==null)){for(b4(t),T_(t),b4(k),T_(k),n=Pt(Tr,Xr,25,t.b.length+k.b.length,15,1),C=0,r=0,h=0;r<t.b.length&&h<k.b.length;)if(s=t.b[r],o=t.b[r+1],d=k.b[h],w=k.b[h+1],o<d)r+=2;else if(o>=d&&s<=w)d<=s&&o<=w?(n[C++]=s,n[C++]=o,r+=2):d<=s?(n[C++]=s,n[C++]=w,t.b[r]=w+1,h+=2):o<=w?(n[C++]=d,n[C++]=o,r+=2):(n[C++]=d,n[C++]=w,t.b[r]=w+1);else if(w<s)h+=2;else throw rt(new Go("Token#intersectRanges(): Internal Error: ["+t.b[r]+","+t.b[r+1]+"] & ["+k.b[h]+","+k.b[h+1]+"]"));for(;r<t.b.length;)n[C++]=t.b[r++],n[C++]=t.b[r++];t.b=Pt(Tr,Xr,25,C,15,1),Ic(n,0,t.b,0,C)}}function _3n(t){var e,n,r,s,o,h,d;for(e=new le,t.g=new le,t.d=new le,h=new h2(new wg(t.f.b).a);h.b;)o=Yv(h),ue(e,u(u(o.dd(),46).b,81)),Op(u(o.cd(),594).gf())?ue(t.d,u(o.dd(),46)):ue(t.g,u(o.dd(),46));for(Git(t,t.d),Git(t,t.g),t.c=new Loe(t.b),$Ke(t.c,(dbt(),xbe)),Bit(t,t.d),Bit(t,t.g),As(e,t.c.a.b),t.e=new $e(ss,ss),t.a=new $e(Ts,Ts),r=new S(e);r.a<r.c.c.length;)n=u(J(r),81),t.e.a=b.Math.min(t.e.a,n.g.c),t.e.b=b.Math.min(t.e.b,n.g.d),t.a.a=b.Math.max(t.a.a,n.g.c+n.g.b),t.a.b=b.Math.max(t.a.b,n.g.d+n.g.a);nbt(t.c,new pp),d=0;do s=Ule(t),++d;while((d<2||s>eb)&&d<10);nbt(t.c,new $5),Ule(t),fen(t.c),y3n(t.f)}function S3n(t,e,n){var r,s,o,h,d,w,k,C,M,F,H,V,Y,tt;if(je(Re(Q(n,(Te(),$y)))))for(d=new S(n.j);d.a<d.c.c.length;)for(h=u(J(d),11),F=gd(h.g),k=F,C=0,M=k.length;C<M;++C)w=k[C],o=w.d.i==n,s=o&&je(Re(Q(w,P2))),s&&(V=w.c,H=u(Jn(t.b,V),10),H||(H=TD(V,(oa(),H1),V.j,-1,null,null,V.o,u(Q(e,Vl),103),e),Jt(H,(se(),_i),V),ki(t.b,V,H),ue(e.a,H)),tt=w.d,Y=u(Jn(t.b,tt),10),Y||(Y=TD(tt,(oa(),H1),tt.j,1,null,null,tt.o,u(Q(e,Vl),103),e),Jt(Y,(se(),_i),tt),ki(t.b,tt,Y),ue(e.a,Y)),r=Nrt(w),Da(r,u(Fe(H.j,0),11)),sa(r,u(Fe(Y.j,0),11)),ln(t.a,w,new Tj(r,e,(so(),eu))),u(Q(e,(se(),Gc)),21).Fc((oo(),bh)))}function A3n(t,e,n){var r,s,o,h,d,w,k,C,M,F,H,V;for(wr(n,"Label dummy switching",1),r=u(Q(e,(Te(),QG)),227),$on(e),s=ybn(e,r),t.a=Pt(ia,vo,25,e.b.c.length,15,1),d=(i6(),ct(ot(c7,1),ae,227,0,[o7,dS,a7,Oy,H4,q4])),C=0,H=d.length;C<H;++C)if(o=d[C],(o==H4||o==q4||o==Oy)&&!u(Nu(s.a,o)?s.b[o.g]:null,15).dc()){Qon(t,e);break}for(w=ct(ot(c7,1),ae,227,0,[o7,dS,a7,Oy,H4,q4]),M=0,V=w.length;M<V;++M)o=w[M],o==H4||o==q4||o==Oy||Fue(t,u(Nu(s.a,o)?s.b[o.g]:null,15));for(h=ct(ot(c7,1),ae,227,0,[o7,dS,a7,Oy,H4,q4]),k=0,F=h.length;k<F;++k)o=h[k],(o==H4||o==q4||o==Oy)&&Fue(t,u(Nu(s.a,o)?s.b[o.g]:null,15));t.a=null,or(n)}function L3n(t,e){var n,r,s,o,h,d,w,k,C,M,F;switch(t.k.g){case 1:if(r=u(Q(t,(se(),_i)),17),n=u(Q(r,JTt),74),n?je(Re(Q(r,$1)))&&(n=BI(n)):n=new Du,k=u(Q(t,n1),11),k){if(C=Ko(ct(ot(Us,1),te,8,0,[k.i.n,k.n,k.a])),e<=C.a)return C.b;hs(n,C,n.a,n.a.a)}if(M=u(Q(t,Rh),11),M){if(F=Ko(ct(ot(Us,1),te,8,0,[M.i.n,M.n,M.a])),F.a<=e)return F.b;hs(n,F,n.c.b,n.c)}if(n.b>=2){for(w=ei(n,0),h=u(ti(w),8),d=u(ti(w),8);d.a<e&&w.b!=w.d.c;)h=d,d=u(ti(w),8);return h.b+(e-h.a)/(d.a-h.a)*(d.b-h.b)}break;case 3:switch(o=u(Q(u(Fe(t.j,0),11),(se(),_i)),11),s=o.i,o.j.g){case 1:return s.n.b;case 3:return s.n.b+s.o.b}}return u4t(t).b}function M3n(t){var e,n,r,s,o,h,d,w,k,C,M;for(h=new S(t.d.b);h.a<h.c.c.length;)for(o=u(J(h),29),w=new S(o.a);w.a<w.c.c.length;){if(d=u(J(w),10),je(Re(Q(d,(Te(),kS))))&&!S8(z0(d))){r=u(Lnn(z0(d)),17),C=r.c.i,C==d&&(C=r.d.i),M=new la(C,na(nc(d.n),C.n)),ki(t.b,d,M);continue}s=new ih(d.n.a-d.d.b,d.n.b-d.d.d,d.o.a+d.d.b+d.d.c,d.o.b+d.d.d+d.d.a),e=nWt(bGt(gGt(pGt(new Dpt,d),s),Ybe),t.a),eWt(dYe(Oee(new Ipt,ct(ot(XH,1),Ie,57,0,[e])),e),t.a),k=new qtt,ki(t.e,e,k),n=N0(new ar(lr(jo(d).a.Kc(),new z)))-N0(new ar(lr(Ms(d).a.Kc(),new z))),n<0?PI(k,!0,(ao(),jh)):n>0&&PI(k,!0,(ao(),kf)),d.k==(Gn(),xs)&&mXt(k),ki(t.f,d,e)}}function I3n(t,e,n){var r,s,o,h,d,w,k,C,M,F;switch(wr(n,"Node promotion heuristic",1),t.g=e,B4n(t),t.q=u(Q(e,(Te(),Xlt)),260),C=u(Q(t.g,tCt),19).a,o=new iF,t.q.g){case 2:case 1:TE(t,o);break;case 3:for(t.q=(w4(),fV),TE(t,o),w=0,d=new S(t.a);d.a<d.c.c.length;)h=u(J(d),19),w=b.Math.max(w,h.a);w>t.j&&(t.q=MO,TE(t,o));break;case 4:for(t.q=(w4(),fV),TE(t,o),k=0,s=new S(t.b);s.a<s.c.c.length;)r=ye(J(s)),k=b.Math.max(k,(On(r),r));k>t.k&&(t.q=IO,TE(t,o));break;case 6:F=ps(b.Math.ceil(t.f.length*C/100)),TE(t,new kp(F));break;case 5:M=ps(b.Math.ceil(t.d*C/100)),TE(t,new qf(M));break;default:TE(t,o)}Tvn(t,e),or(n)}function Kle(t,e,n){var r,s,o,h;this.j=t,this.e=m4t(t),this.o=this.j.e,this.i=!!this.o,this.p=this.i?u(Fe(n,Fa(this.o).p),214):null,s=u(Q(t,(se(),Gc)),21),this.g=s.Hc((oo(),bh)),this.b=new le,this.d=new bie(this.e),h=u(Q(this.j,O6),230),this.q=ucn(e,h,this.e),this.k=new vQt(this),o=_1(ct(ot(Qbe,1),Ie,225,0,[this,this.d,this.k,this.q])),e==(Zv(),OO)&&!je(Re(Q(t,(Te(),By))))?(r=new x4t(this.e),o.c[o.c.length]=r,this.c=new Xwt(r,h,u(this.q,402))):e==OO&&je(Re(Q(t,(Te(),By))))?(r=new x4t(this.e),o.c[o.c.length]=r,this.c=new Jee(r,h,u(this.q,402))):this.c=new QGt(e,this),ue(o,this.c),Lle(o,this.e),this.s=d5n(this.k)}function D3n(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt;for(M=u(lj((h=ei(new Cp(e).a.d,0),new bx(h))),86),V=M?u(Q(M,(fc(),Sht)),86):null,s=1;M&&V;){for(w=0,Bt=0,n=M,r=V,d=0;d<s;d++)n=zrt(n),r=zrt(r),Bt+=Xt(ye(Q(n,(fc(),k7)))),w+=Xt(ye(Q(r,k7)));if(_t=Xt(ye(Q(V,(fc(),Yg)))),Lt=Xt(ye(Q(M,Yg))),F=cmt(M,V),H=_t+w+t.a+F-Lt-Bt,0<H){for(k=e,C=0;k&&k!=r;)++C,k=u(Q(k,yV),86);if(k)for(gt=H/C,k=e;k!=r;)tt=Xt(ye(Q(k,Yg)))+H,Jt(k,Yg,tt),Y=Xt(ye(Q(k,k7)))+H,Jt(k,k7,Y),H-=gt,k=u(Q(k,yV),86);else return}++s,M.d.b==0?M=Y5t(new Cp(e),s):M=u(lj((o=ei(new Cp(M).a.d,0),new bx(o))),86),V=M?u(Q(M,Sht),86):null}}function Yle(t,e){var n,r,s,o,h,d,w,k,C,M;for(w=!0,s=0,k=t.f[e.p],C=e.o.b+t.n,n=t.c[e.p][2],ah(t.a,k,de(u(Fe(t.a,k),19).a-1+n)),ah(t.b,k,Xt(ye(Fe(t.b,k)))-C+n*t.e),++k,k>=t.i?(++t.i,ue(t.a,de(1)),ue(t.b,C)):(r=t.c[e.p][1],ah(t.a,k,de(u(Fe(t.a,k),19).a+1-r)),ah(t.b,k,Xt(ye(Fe(t.b,k)))+C-r*t.e)),(t.q==(w4(),MO)&&(u(Fe(t.a,k),19).a>t.j||u(Fe(t.a,k-1),19).a>t.j)||t.q==IO&&(Xt(ye(Fe(t.b,k)))>t.k||Xt(ye(Fe(t.b,k-1)))>t.k))&&(w=!1),h=new ar(lr(jo(e).a.Kc(),new z));zr(h);)o=u(Lr(h),17),d=o.c.i,t.f[d.p]==k&&(M=Yle(t,d),s=s+u(M.a,19).a,w=w&&je(Re(M.b)));return t.f[e.p]=k,s=s+t.c[e.p][0],new la(de(s),(Fn(),!!w))}function vxt(t,e,n,r,s){var o,h,d,w,k,C,M,F,H,V,Y,tt,gt;for(M=new Cr,h=new le,voe(t,n,t.d.fg(),h,M),voe(t,r,t.d.gg(),h,M),t.b=.2*(Y=ace(Wo(new Tn(null,new _n(h,16)),new GQ)),tt=ace(Wo(new Tn(null,new _n(h,16)),new VQ)),b.Math.min(Y,tt)),o=0,d=0;d<h.c.length-1;d++)for(w=(An(d,h.c.length),u(h.c[d],112)),V=d+1;V<h.c.length;V++)o+=lxt(t,w,(An(V,h.c.length),u(h.c[V],112)));for(F=u(Q(e,(se(),O6)),230),o>=2&&(gt=Ace(h,!0,F),!t.e&&(t.e=new D$t(t)),lhn(t.e,gt,h,t.b)),cae(h,F),K3n(h),H=-1,C=new S(h);C.a<C.c.c.length;)k=u(J(C),112),!(b.Math.abs(k.s-k.c)<yd)&&(H=b.Math.max(H,k.o),t.d.dg(k,s,t.c));return t.d.a.a.$b(),H+1}function Xle(t,e){var n,r,s,o,h;n=Xt(ye(Q(e,(Te(),xf)))),n<2&&Jt(e,xf,2),r=u(Q(e,Vl),103),r==(ao(),c0)&&Jt(e,Vl,Ez(e)),s=u(Q(e,Fwe),19),s.a==0?Jt(e,(se(),O6),new zit):Jt(e,(se(),O6),new T$(s.a)),o=Re(Q(e,TS)),o==null&&Jt(e,TS,(Fn(),Gt(Q(e,X0))===Gt((q0(),A7)))),us(new Tn(null,new _n(e.a,16)),new gs(t)),us(Wo(new Tn(null,new _n(e.b,16)),new R5),new qi(t)),h=new Hle(e),Jt(e,(se(),Y4),h),w$(t.a),Ud(t.a,(Wa(),Ad),u(Q(e,Ry),246)),Ud(t.a,lb,u(Q(e,eCt),246)),Ud(t.a,ou,u(Q(e,ES),246)),Ud(t.a,qc,u(Q(e,rV),246)),Ud(t.a,Io,acn(u(Q(e,X0),218))),oUt(t.a,_5n(e)),Jt(e,Rlt,Tq(t.a,e))}function O3n(t,e,n){var r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce;return F=t.c[e],H=t.c[n],V=u(Q(F,(se(),I6)),15),!!V&&V.gc()!=0&&V.Hc(H)||(Y=F.k!=(Gn(),Zs)&&H.k!=Zs,tt=u(Q(F,Iw),10),gt=u(Q(H,Iw),10),Lt=tt!=gt,_t=!!tt&&tt!=F||!!gt&&gt!=H,Bt=fst(F,(be(),Nn)),Yt=fst(H,mr),_t=_t|(fst(F,mr)||fst(H,Nn)),ce=_t&&Lt||Bt||Yt,Y&&ce)||F.k==(Gn(),Hc)&&H.k==Ds||H.k==(Gn(),Hc)&&F.k==Ds?!1:(C=t.c[e],o=t.c[n],s=Wse(t.e,C,o,(be(),Bn)),w=Wse(t.i,C,o,Hn),C2n(t.f,C,o),k=bre(t.b,C,o)+u(s.a,19).a+u(w.a,19).a+t.f.d,d=bre(t.b,o,C)+u(s.b,19).a+u(w.b,19).a+t.f.b,t.a&&(M=u(Q(C,_i),11),h=u(Q(o,_i),11),r=Ise(t.g,M,h),k+=u(r.a,19).a,d+=u(r.b,19).a),k>d)}function N3n(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y;for(n=u(Q(t,(Te(),os)),98),h=t.f,o=t.d,d=h.a+o.b+o.c,w=0-o.d-t.c.b,C=h.b+o.d+o.a-t.c.b,k=new le,M=new le,s=new S(e);s.a<s.c.c.length;){switch(r=u(J(s),10),n.g){case 1:case 2:case 3:D2n(r);break;case 4:F=u(Q(r,Pw),8),H=F?F.a:0,r.n.a=d*Xt(ye(Q(r,(se(),Dw))))-H,fz(r,!0,!1);break;case 5:V=u(Q(r,Pw),8),Y=V?V.a:0,r.n.a=Xt(ye(Q(r,(se(),Dw))))-Y,fz(r,!0,!1),h.a=b.Math.max(h.a,r.n.a+r.o.a/2)}switch(u(Q(r,(se(),oc)),61).g){case 1:r.n.b=w,k.c[k.c.length]=r;break;case 3:r.n.b=C,M.c[M.c.length]=r}}switch(n.g){case 1:case 2:zre(k,t),zre(M,t);break;case 3:qre(k,t),qre(M,t)}}function P3n(t,e){var n,r,s,o,h,d,w,k,C,M;for(C=new le,M=new P3,o=null,s=0,r=0;r<e.length;++r)switch(n=e[r],tun(o,n)&&(s=k3t(t,M,C,gV,s)),Vs(n,(se(),Iw))&&(o=u(Q(n,Iw),10)),n.k.g){case 0:for(w=i2t(Ox(Yo(n,(be(),Nn)),new BF));sit(w);)h=u(Imt(w),11),t.d[h.p]=s++,C.c[C.c.length]=h;for(s=k3t(t,M,C,gV,s),k=i2t(Ox(Yo(n,mr),new BF));sit(k);)h=u(Imt(k),11),t.d[h.p]=s++,C.c[C.c.length]=h;break;case 3:Yo(n,XCt).dc()||(h=u(Yo(n,XCt).Xb(0),11),t.d[h.p]=s++,C.c[C.c.length]=h),Yo(n,gV).dc()||qp(M,n);break;case 1:for(d=Yo(n,(be(),Bn)).Kc();d.Ob();)h=u(d.Pb(),11),t.d[h.p]=s++,C.c[C.c.length]=h;Yo(n,Hn).Jc(new ZGt(M,n))}return k3t(t,M,C,gV,s),C}function Qle(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt;for(k=ss,C=ss,d=Ts,w=Ts,F=new S(e.i);F.a<F.c.c.length;)M=u(J(F),65),s=u(u(Jn(t.g,M.a),46).b,33),m1(s,M.b.c,M.b.d),k=b.Math.min(k,s.i),C=b.Math.min(C,s.j),d=b.Math.max(d,s.i+s.g),w=b.Math.max(w,s.j+s.f);for(H=u(qe(t.c,(rD(),f3e)),116),gw(t.c,d-k+(H.b+H.c),w-C+(H.d+H.a),!0,!0),A4t(t.c,-k+H.b,-C+H.d),r=new er(_Xt(t.c));r.e!=r.i.gc();)n=u(dr(r),79),h=m4(n,!0,!0),V=Zd(n),tt=Xp(n),Y=new $e(V.i+V.g/2,V.j+V.f/2),o=new $e(tt.i+tt.g/2,tt.j+tt.f/2),gt=na(new $e(o.a,o.b),Y),hE(gt,V.g,V.f),Li(Y,gt),Lt=na(new $e(Y.a,Y.b),o),hE(Lt,tt.g,tt.f),Li(o,Lt),oj(h,Y.a,Y.b),aj(h,o.a,o.b)}function F3n(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V;if(t.c=t.d,V=Re(Q(e,(Te(),Bwe))),H=V==null||(On(V),V),o=u(Q(e,(se(),Gc)),21).Hc((oo(),bh)),s=u(Q(e,os),98),n=!(s==(oa(),G2)||s==h0||s==Vc),H&&(n||!o)){for(M=new S(e.a);M.a<M.c.c.length;)k=u(J(M),10),k.p=0;for(F=new le,C=new S(e.a);C.a<C.c.c.length;)if(k=u(J(C),10),r=Vue(t,k,null),r){for(w=new Kmt,Lo(w,e),Jt(w,Ny,u(r.b,21)),Swt(w.d,e.d),Jt(w,p7,null),d=u(r.a,15).Kc();d.Ob();)h=u(d.Pb(),10),ue(w.a,h),h.a=w;F.Fc(w)}o&&(Gt(Q(e,P6))===Gt((ew(),Jut))?t.c=t.b:t.c=t.a)}else F=new wl(ct(ot(Obe,1),Ufe,37,0,[e]));return Gt(Q(e,P6))!==Gt((ew(),$4))&&(vn(),F.ad(new JK)),F}function Zle(t){Sv(t,new w2(rbt(mR(Ev(yv(kv(xv(new pg,Hg),"ELK Mr. Tree"),"Tree-based algorithm provided by the Eclipse Layout Kernel. Computes a spanning tree of the input graph and arranges all nodes according to the resulting parent-children hierarchy. I pity the fool who doesn't use Mr. Tree Layout."),new YQ),D1e),un((vE(),yft))))),xe(t,Hg,ww,s_t),xe(t,Hg,ky,20),xe(t,Hg,b6,BE),xe(t,Hg,jD,de(1)),xe(t,Hg,P_,(Fn(),!0)),xe(t,Hg,KD,De(r_t)),xe(t,Hg,L4,De(iye)),xe(t,Hg,w6,De(sye)),xe(t,Hg,v6,De(aye)),xe(t,Hg,RE,De(rye)),xe(t,Hg,F_,De(i_t)),xe(t,Hg,jE,De(cye)),xe(t,Hg,Fkt,De(lye)),xe(t,Hg,Bkt,De(a_t))}function B3n(t){t.q||(t.q=!0,t.p=ic(t,0),t.a=ic(t,1),Pi(t.a,0),t.f=ic(t,2),Pi(t.f,1),es(t.f,2),t.n=ic(t,3),es(t.n,3),es(t.n,4),es(t.n,5),es(t.n,6),t.g=ic(t,4),Pi(t.g,7),es(t.g,8),t.c=ic(t,5),Pi(t.c,7),Pi(t.c,8),t.i=ic(t,6),Pi(t.i,9),Pi(t.i,10),Pi(t.i,11),Pi(t.i,12),es(t.i,13),t.j=ic(t,7),Pi(t.j,9),t.d=ic(t,8),Pi(t.d,3),Pi(t.d,4),Pi(t.d,5),Pi(t.d,6),es(t.d,7),es(t.d,8),es(t.d,9),es(t.d,10),t.b=ic(t,9),es(t.b,0),es(t.b,1),t.e=ic(t,10),es(t.e,1),es(t.e,2),es(t.e,3),es(t.e,4),Pi(t.e,5),Pi(t.e,6),Pi(t.e,7),Pi(t.e,8),Pi(t.e,9),Pi(t.e,10),es(t.e,11),t.k=ic(t,11),es(t.k,0),es(t.k,1),t.o=ai(t,12),t.s=ai(t,13))}function wxt(t,e){e.dc()&&Gd(t.j,!0,!0,!0,!0),yi(e,(be(),Sf))&&Gd(t.j,!0,!0,!0,!1),yi(e,vh)&&Gd(t.j,!1,!0,!0,!0),yi(e,Wl)&&Gd(t.j,!0,!0,!1,!0),yi(e,qh)&&Gd(t.j,!0,!1,!0,!0),yi(e,tl)&&Gd(t.j,!1,!0,!0,!1),yi(e,wh)&&Gd(t.j,!1,!0,!1,!0),yi(e,Kl)&&Gd(t.j,!0,!1,!1,!0),yi(e,Af)&&Gd(t.j,!0,!1,!0,!1),yi(e,_u)&&Gd(t.j,!0,!0,!0,!0),yi(e,uu)&&Gd(t.j,!0,!0,!0,!0),yi(e,_u)&&Gd(t.j,!0,!0,!0,!0),yi(e,Cu)&&Gd(t.j,!0,!0,!0,!0),yi(e,Su)&&Gd(t.j,!0,!0,!0,!0),yi(e,el)&&Gd(t.j,!0,!0,!0,!0),yi(e,Uc)&&Gd(t.j,!0,!0,!0,!0)}function R3n(t,e,n,r,s){var o,h,d,w,k,C,M,F,H,V,Y,tt;for(o=new le,k=new S(r);k.a<k.c.c.length;)if(d=u(J(k),441),h=null,d.f==(so(),eu))for(V=new S(d.e);V.a<V.c.c.length;)H=u(J(V),17),tt=H.d.i,Fa(tt)==e?dee(t,e,d,H,d.b,H.d):!n||V8(tt,n)?w0n(t,e,d,r,H):(F=Eat(t,e,n,H,d.b,eu,h),F!=h&&(o.c[o.c.length]=F),F.c&&(h=F));else for(M=new S(d.e);M.a<M.c.c.length;)if(C=u(J(M),17),Y=C.c.i,Fa(Y)==e)dee(t,e,d,C,C.c,d.b);else{if(!n||V8(Y,n))continue;F=Eat(t,e,n,C,d.b,Ju,h),F!=h&&(o.c[o.c.length]=F),F.c&&(h=F)}for(w=new S(o);w.a<w.c.c.length;)d=u(J(w),441),Ro(e.a,d.a,0)!=-1||ue(e.a,d.a),d.c&&(s.c[s.c.length]=d)}function j3n(t,e,n){var r,s,o,h,d,w,k,C,M,F;for(k=new le,w=new S(e.a);w.a<w.c.c.length;)for(h=u(J(w),10),F=Yo(h,(be(),Hn)).Kc();F.Ob();)for(M=u(F.Pb(),11),s=new S(M.g);s.a<s.c.c.length;)r=u(J(s),17),!(!Va(r)&&r.c.i.c==r.d.i.c||Va(r)||r.d.i.c!=n)&&(k.c[k.c.length]=r);for(d=a2(n.a).Kc();d.Ob();)for(h=u(d.Pb(),10),F=Yo(h,(be(),Bn)).Kc();F.Ob();)for(M=u(F.Pb(),11),s=new S(M.e);s.a<s.c.c.length;)if(r=u(J(s),17),!(!Va(r)&&r.c.i.c==r.d.i.c||Va(r)||r.c.i.c!=e)){for(C=new ha(k,k.c.length),o=(Qn(C.b>0),u(C.a.Xb(C.c=--C.b),17));o!=r&&C.b>0;)t.a[o.p]=!0,t.a[r.p]=!0,o=(Qn(C.b>0),u(C.a.Xb(C.c=--C.b),17));C.b>0&&El(C)}}function Jle(t,e,n){var r,s,o,h,d,w,k,C,M;if(t.a!=e.Aj())throw rt(new Pn(HE+e.ne()+kw));if(r=Og((Ru(),ma),e).$k(),r)return r.Aj().Nh().Ih(r,n);if(h=Og(ma,e).al(),h){if(n==null)return null;if(d=u(n,15),d.dc())return"";for(M=new xg,o=d.Kc();o.Ob();)s=o.Pb(),fo(M,h.Aj().Nh().Ih(h,s)),M.a+=" ";return Wet(M,M.a.length-1)}if(C=Og(ma,e).bl(),!C.dc()){for(k=C.Kc();k.Ob();)if(w=u(k.Pb(),148),w.wj(n))try{if(M=w.Aj().Nh().Ih(w,n),M!=null)return M}catch(F){if(F=Wi(F),!Et(F,102))throw rt(F)}throw rt(new Pn("Invalid value: '"+n+"' for datatype :"+e.ne()))}return u(e,834).Fj(),n==null?null:Et(n,172)?""+u(n,172).a:sl(n)==HH?SUt(rA[0],u(n,199)):$o(n)}function $3n(t){var e,n,r,s,o,h,d,w,k,C;for(k=new Qi,d=new Qi,o=new S(t);o.a<o.c.c.length;)r=u(J(o),128),r.v=0,r.n=r.i.c.length,r.u=r.t.c.length,r.n==0&&hs(k,r,k.c.b,k.c),r.u==0&&r.r.a.gc()==0&&hs(d,r,d.c.b,d.c);for(h=-1;k.b!=0;)for(r=u(yst(k,0),128),n=new S(r.t);n.a<n.c.c.length;)e=u(J(n),268),C=e.b,C.v=b.Math.max(C.v,r.v+1),h=b.Math.max(h,C.v),--C.n,C.n==0&&hs(k,C,k.c.b,k.c);if(h>-1){for(s=ei(d,0);s.b!=s.d.c;)r=u(ti(s),128),r.v=h;for(;d.b!=0;)for(r=u(yst(d,0),128),n=new S(r.i);n.a<n.c.c.length;)e=u(J(n),268),w=e.a,w.r.a.gc()==0&&(w.v=b.Math.min(w.v,r.v-1),--w.u,w.u==0&&hs(d,w,d.c.b,d.c))}}function the(t,e,n,r,s){var o,h,d,w;return w=ss,h=!1,d=cxt(t,na(new $e(e.a,e.b),t),Li(new $e(n.a,n.b),s),na(new $e(r.a,r.b),n)),o=!!d&&!(b.Math.abs(d.a-t.a)<=yw&&b.Math.abs(d.b-t.b)<=yw||b.Math.abs(d.a-e.a)<=yw&&b.Math.abs(d.b-e.b)<=yw),d=cxt(t,na(new $e(e.a,e.b),t),n,s),d&&((b.Math.abs(d.a-t.a)<=yw&&b.Math.abs(d.b-t.b)<=yw)==(b.Math.abs(d.a-e.a)<=yw&&b.Math.abs(d.b-e.b)<=yw)||o?w=b.Math.min(w,AC(na(d,n))):h=!0),d=cxt(t,na(new $e(e.a,e.b),t),r,s),d&&(h||(b.Math.abs(d.a-t.a)<=yw&&b.Math.abs(d.b-t.b)<=yw)==(b.Math.abs(d.a-e.a)<=yw&&b.Math.abs(d.b-e.b)<=yw)||o)&&(w=b.Math.min(w,AC(na(d,r)))),w}function ehe(t){Sv(t,new w2(mR(Ev(yv(kv(xv(new pg,rb),Gfe),"Minimizes the stress within a layout using stress majorization. Stress exists if the euclidean distance between a pair of nodes doesn't match their graph theoretic distance, that is, the shortest path between the two nodes. The method allows to specify individual edge lengths."),new l1),ql))),xe(t,rb,$D,De(x7t)),xe(t,rb,Gq,(Fn(),!0)),xe(t,rb,L4,De(fbe)),xe(t,rb,w6,De(dbe)),xe(t,rb,v6,De(gbe)),xe(t,rb,RE,De(hbe)),xe(t,rb,F_,De(E7t)),xe(t,rb,jE,De(pbe)),xe(t,rb,h6t,De(y7t)),xe(t,rb,d6t,De(w7t)),xe(t,rb,g6t,De(m7t)),xe(t,rb,p6t,De(k7t)),xe(t,rb,f6t,De(oG))}function z3n(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt;for(wr(e,"Interactive crossing minimization",1),h=0,o=new S(t.b);o.a<o.c.c.length;)r=u(J(o),29),r.p=h++;for(F=m4t(t),tt=new ibt(F.length),Lle(new wl(ct(ot(Qbe,1),Ie,225,0,[tt])),F),Y=0,h=0,s=new S(t.b);s.a<s.c.c.length;){for(r=u(J(s),29),n=0,M=0,C=new S(r.a);C.a<C.c.c.length;)for(w=u(J(C),10),w.n.a>0&&(n+=w.n.a+w.o.a/2,++M),V=new S(w.j);V.a<V.c.c.length;)H=u(J(V),11),H.p=Y++;for(M>0&&(n/=M),gt=Pt(ia,vo,25,r.a.c.length,15,1),d=0,k=new S(r.a);k.a<k.c.c.length;)w=u(J(k),10),w.p=d++,gt[w.p]=L3n(w,n),w.k==(Gn(),Zs)&&Jt(w,(se(),t9t),gt[w.p]);vn(),Xs(r.a,new l$t(gt)),jue(tt,F,h,!0),++h}or(e)}function __(t,e){var n,r,s,o,h,d,w,k,C;if(e.e==5){Wle(t,e);return}if(k=e,!(k.b==null||t.b==null)){for(b4(t),T_(t),b4(k),T_(k),n=Pt(Tr,Xr,25,t.b.length+k.b.length,15,1),C=0,r=0,h=0;r<t.b.length&&h<k.b.length;)if(s=t.b[r],o=t.b[r+1],d=k.b[h],w=k.b[h+1],o<d)n[C++]=t.b[r++],n[C++]=t.b[r++];else if(o>=d&&s<=w)d<=s&&o<=w?r+=2:d<=s?(t.b[r]=w+1,h+=2):o<=w?(n[C++]=s,n[C++]=d-1,r+=2):(n[C++]=s,n[C++]=d-1,t.b[r]=w+1,h+=2);else if(w<s)h+=2;else throw rt(new Go("Token#subtractRanges(): Internal Error: ["+t.b[r]+","+t.b[r+1]+"] - ["+k.b[h]+","+k.b[h+1]+"]"));for(;r<t.b.length;)n[C++]=t.b[r++],n[C++]=t.b[r++];t.b=Pt(Tr,Xr,25,C,15,1),Ic(n,0,t.b,0,C)}}function q3n(t){var e,n,r,s,o,h,d;if(!t.A.dc()){if(t.A.Hc((_l(),nN))&&(u(go(t.b,(be(),Nn)),124).k=!0,u(go(t.b,mr),124).k=!0,e=t.q!=(oa(),h0)&&t.q!=Vc,eM(u(go(t.b,Hn),124),e),eM(u(go(t.b,Bn),124),e),eM(t.g,e),t.A.Hc(V2)&&(u(go(t.b,Nn),124).j=!0,u(go(t.b,mr),124).j=!0,u(go(t.b,Hn),124).k=!0,u(go(t.b,Bn),124).k=!0,t.g.k=!0)),t.A.Hc(eN))for(t.a.j=!0,t.a.k=!0,t.g.j=!0,t.g.k=!0,d=t.B.Hc((cl(),eA)),s=Jit(),o=0,h=s.length;o<h;++o)r=s[o],n=u(go(t.i,r),306),n&&(S3t(r)?(n.j=!0,n.k=!0):(n.j=!d,n.k=!d));t.A.Hc(Xy)&&t.B.Hc((cl(),iN))&&(t.g.j=!0,t.g.j=!0,t.a.j||(t.a.j=!0,t.a.k=!0,t.a.e=!0))}}function H3n(t){var e,n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt;for(r=new S(t.e.b);r.a<r.c.c.length;)for(n=u(J(r),29),o=new S(n.a);o.a<o.c.c.length;)if(s=u(J(o),10),H=t.i[s.p],k=H.a.e,w=H.d.e,s.n.b=k,gt=w-k-s.o.b,e=xat(s),F=(sy(),(s.q?s.q:(vn(),vn(),a0))._b((Te(),Nw))?M=u(Q(s,Nw),197):M=u(Q(Fa(s),CS),197),M),e&&(F==t5||F==J4)&&(s.o.b+=gt),e&&(F==cht||F==t5||F==J4)){for(Y=new S(s.j);Y.a<Y.c.c.length;)V=u(J(Y),11),(be(),uu).Hc(V.j)&&(C=u(Jn(t.k,V),121),V.n.b=C.e-k);for(d=new S(s.b);d.a<d.c.c.length;)h=u(J(d),70),tt=u(Q(s,Ow),21),tt.Hc((fy(),zh))?h.n.b+=gt:tt.Hc(l0)&&(h.n.b+=gt/2);(F==t5||F==J4)&&Yo(s,(be(),mr)).Jc(new _$t(gt))}}function nhe(t,e,n){var r,s,o,h,d,w,k,C,M,F,H;if(!t.b)return!1;for(h=null,F=null,w=new $rt(null,null),s=1,w.a[1]=t.b,M=w;M.a[s];)k=s,d=F,F=M,M=M.a[s],r=t.a.ue(e,M.d),s=r<0?0:1,r==0&&(!n.c||Pc(M.e,n.d))&&(h=M),!(M&&M.b)&&!Am(M.a[s])&&(Am(M.a[1-s])?F=F.a[k]=nz(M,s):Am(M.a[1-s])||(H=F.a[1-k],H&&(!Am(H.a[1-k])&&!Am(H.a[k])?(F.b=!1,H.b=!0,M.b=!0):(o=d.a[1]==F?1:0,Am(H.a[k])?d.a[o]=uZt(F,k):Am(H.a[1-k])&&(d.a[o]=nz(F,k)),M.b=d.a[o].b=!0,d.a[o].a[0].b=!1,d.a[o].a[1].b=!1))));return h&&(n.b=!0,n.d=h.e,M!=h&&(C=new $rt(M.d,M.e),u0n(t,w,h,C),F==h&&(F=C)),F.a[F.a[1]==M?1:0]=M.a[M.a[0]?0:1],--t.c),t.b=w.a[1],t.b&&(t.b.b=!1),n.b}function G3n(t){var e,n,r,s,o,h,d,w,k,C,M,F;for(s=new S(t.a.a.b);s.a<s.c.c.length;)for(r=u(J(s),57),w=r.c.Kc();w.Ob();)d=u(w.Pb(),57),r.a!=d.a&&(Op(t.a.d)?M=t.a.g.Oe(r,d):M=t.a.g.Pe(r,d),o=r.b.a+r.d.b+M-d.b.a,o=b.Math.ceil(o),o=b.Math.max(0,o),Pmt(r,d)?(h=Dv(new Ub,t.d),k=ps(b.Math.ceil(d.b.a-r.b.a)),e=k-(d.b.a-r.b.a),C=Hx(r).a,n=r,C||(C=Hx(d).a,e=-e,n=d),C&&(n.b.a-=e,C.n.a-=e),vf(of(af(cf(sf(new Eh,b.Math.max(0,k)),1),h),t.c[r.a.d])),vf(of(af(cf(sf(new Eh,b.Math.max(0,-k)),1),h),t.c[d.a.d]))):(F=1,(Et(r.g,145)&&Et(d.g,10)||Et(d.g,145)&&Et(r.g,10))&&(F=2),vf(of(af(cf(sf(new Eh,ps(o)),F),t.c[r.a.d]),t.c[d.a.d]))))}function rhe(t,e,n){var r,s,o,h,d,w,k,C,M,F;if(n)for(r=-1,C=new ha(e,0);C.b<C.d.gc();){if(d=(Qn(C.b<C.d.gc()),u(C.d.Xb(C.c=C.b++),10)),M=t.c[d.c.p][d.p].a,M==null){for(h=r+1,o=new ha(e,C.b);o.b<o.d.gc();)if(F=OXe(t,(Qn(o.b<o.d.gc()),u(o.d.Xb(o.c=o.b++),10))).a,F!=null){h=(On(F),F);break}M=(r+h)/2,t.c[d.c.p][d.p].a=M,t.c[d.c.p][d.p].d=(On(M),M),t.c[d.c.p][d.p].b=1}r=(On(M),M)}else{for(s=0,k=new S(e);k.a<k.c.c.length;)d=u(J(k),10),t.c[d.c.p][d.p].a!=null&&(s=b.Math.max(s,Xt(t.c[d.c.p][d.p].a)));for(s+=2,w=new S(e);w.a<w.c.c.length;)d=u(J(w),10),t.c[d.c.p][d.p].a==null&&(M=ol(t.i,24)*PD*s-1,t.c[d.c.p][d.p].a=M,t.c[d.c.p][d.p].d=M,t.c[d.c.p][d.p].b=1)}}function V3n(){ri(Zy,new oB),ri(Zr,new fB),ri(Gh,new fJ),ri(i1,new jL),ri(Cft,new $L),ri(iU,new rx),ri(eg,new dJ),ri(nA,new gJ),ri(oN,new QZ),ri(mft,new ZZ),ri(kb,new JZ),ri(Vh,new tJ),ri(r1,new eJ),ri(zw,new nJ),ri(Jy,new aB),ri(Au,new rJ),ri(Qy,new iJ),ri(cc,new sJ),ri(ho,new Ik),ri(lu,new ZT),ri(Bs,new cB),ri(ot(Hu,1),new aJ),ri(E6,new uB),ri(aS,new lB),ri(HH,new oJ),ri(SLt,new JT),ri(ca,new km),ri(qAt,new hB),ri(VAt,new cJ),ri(gLt,new uJ),ri(sU,new t9),ri(XE,new dB),ri(ja,new gB),ri(U8t,new uc),ri(Tw,new lJ),ri(W8t,new pB),ri(lLt,new e9),ri(ALt,new hJ),ri(Cw,new n9),ri(Ae,new bB),ri(GAt,new r9),ri(LLt,new i9)}function U3n(t,e,n){var r,s,o,h,d,w,k,C,M;for(!n&&(n=Acn(e.q.getTimezoneOffset())),s=(e.q.getTimezoneOffset()-n.a)*6e4,d=new H2t(Oa(ku(e.q.getTime()),s)),w=d,d.q.getTimezoneOffset()!=e.q.getTimezoneOffset()&&(s>0?s-=864e5:s+=864e5,w=new H2t(Oa(ku(e.q.getTime()),s))),C=new Lm,k=t.a.length,o=0;o<k;)if(r=ba(t.a,o),r>=97&&r<=122||r>=65&&r<=90){for(h=o+1;h<k&&ba(t.a,h)==r;++h);$5n(C,r,h-o,d,w,n),o=h}else if(r==39){if(++o,o<k&&ba(t.a,o)==39){C.a+="'",++o;continue}for(M=!1;!M;){for(h=o;h<k&&ba(t.a,h)!=39;)++h;if(h>=k)throw rt(new Pn("Missing trailing '"));h+1<k&&ba(t.a,h+1)==39?++h:M=!0,Vr(C,Dl(t.a,o,h)),o=h+1}}else C.a+=String.fromCharCode(r),++o;return C.a}function W3n(t){var e,n,r,s,o,h,d,w;for(e=null,r=new S(t);r.a<r.c.c.length;)n=u(J(r),233),Xt(x1(n.g,n.d[0]).a),n.b=null,n.e&&n.e.gc()>0&&n.c==0&&(!e&&(e=new le),e.c[e.c.length]=n);if(e)for(;e.c.length!=0;){if(n=u(Ag(e,0),233),n.b&&n.b.c.length>0){for(o=(!n.b&&(n.b=new le),new S(n.b));o.a<o.c.c.length;)if(s=u(J(o),233),lM(x1(s.g,s.d[0]).a)==lM(x1(n.g,n.d[0]).a)){if(Ro(t,s,0)>Ro(t,n,0))return new la(s,n)}else if(Xt(x1(s.g,s.d[0]).a)>Xt(x1(n.g,n.d[0]).a))return new la(s,n)}for(d=(!n.e&&(n.e=new le),n.e).Kc();d.Ob();)h=u(d.Pb(),233),w=(!h.b&&(h.b=new le),h.b),Um(0,w.c.length),W9(w.c,0,n),h.c==w.c.length&&(e.c[e.c.length]=h)}return null}function ihe(t,e){var n,r,s,o,h,d,w,k,C;if(t==null)return Tu;if(w=e.a.zc(t,e),w!=null)return"[...]";for(n=new c2(Ka,"[","]"),s=t,o=0,h=s.length;o<h;++o)r=s[o],r!=null&&sl(r).i&4?Array.isArray(r)&&(C=xI(r),!(C>=14&&C<=16))?e.a._b(r)?(n.a?Vr(n.a,n.b):n.a=new Il(n.d),cC(n.a,"[...]")):(d=s2(r),k=new yC(e),P0(n,ihe(d,k))):Et(r,177)?P0(n,Bgn(u(r,177))):Et(r,190)?P0(n,_dn(u(r,190))):Et(r,195)?P0(n,F0n(u(r,195))):Et(r,2012)?P0(n,Sdn(u(r,2012))):Et(r,48)?P0(n,Fgn(u(r,48))):Et(r,364)?P0(n,Xgn(u(r,364))):Et(r,832)?P0(n,Pgn(u(r,832))):Et(r,104)&&P0(n,Ngn(u(r,104))):P0(n,r==null?Tu:$o(r));return n.a?n.e.length==0?n.a.a:n.a.a+(""+n.e):n.c}function she(t,e,n,r){var s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t;for(d=m4(e,!1,!1),gt=sD(d),r&&(gt=BI(gt)),_t=Xt(ye(qe(e,(i_(),$ut)))),tt=(Qn(gt.b!=0),u(gt.a.a.c,8)),M=u(Qf(gt,1),8),gt.b>2?(C=new le,As(C,new Kd(gt,1,gt.b)),o=Rhe(C,_t+t.a),Lt=new Vst(o),Lo(Lt,e),n.c[n.c.length]=Lt):r?Lt=u(Jn(t.b,Zd(e)),266):Lt=u(Jn(t.b,Xp(e)),266),w=Zd(e),r&&(w=Xp(e)),h=ngn(tt,w),k=_t+t.a,h.a?(k+=b.Math.abs(tt.b-M.b),Y=new $e(M.a,(M.b+tt.b)/2)):(k+=b.Math.abs(tt.a-M.a),Y=new $e((M.a+tt.a)/2,M.b)),r?ki(t.d,e,new q3t(Lt,h,Y,k)):ki(t.c,e,new q3t(Lt,h,Y,k)),ki(t.b,e,Lt),V=(!e.n&&(e.n=new he(qo,e,1,7)),e.n),H=new er(V);H.e!=H.i.gc();)F=u(dr(H),137),s=bD(t,F,!0,0,0),n.c[n.c.length]=s}function K3n(t){var e,n,r,s,o,h,d,w,k,C;for(k=new le,d=new le,h=new S(t);h.a<h.c.c.length;)s=u(J(h),112),nM(s,s.f.c.length),x9(s,s.k.c.length),s.d==0&&(k.c[k.c.length]=s),s.i==0&&s.e.b==0&&(d.c[d.c.length]=s);for(r=-1;k.c.length!=0;)for(s=u(Ag(k,0),112),n=new S(s.k);n.a<n.c.c.length;)e=u(J(n),129),C=e.b,YB(C,b.Math.max(C.o,s.o+1)),r=b.Math.max(r,C.o),nM(C,C.d-1),C.d==0&&(k.c[k.c.length]=C);if(r>-1){for(o=new S(d);o.a<o.c.c.length;)s=u(J(o),112),s.o=r;for(;d.c.length!=0;)for(s=u(Ag(d,0),112),n=new S(s.f);n.a<n.c.c.length;)e=u(J(n),129),w=e.a,!(w.e.b>0)&&(YB(w,b.Math.min(w.o,s.o-1)),x9(w,w.i-1),w.i==0&&(d.c[d.c.length]=w))}}function _E(t,e,n){var r,s,o,h,d,w,k;if(k=t.c,!e&&(e=tLt),t.c=e,t.Db&4&&!(t.Db&1)&&(w=new Qs(t,1,2,k,t.c),n?n.Ei(w):n=w),k!=e){if(Et(t.Cb,284))t.Db>>16==-10?n=u(t.Cb,284).nk(e,n):t.Db>>16==-15&&(!e&&(e=(dn(),V1)),!k&&(k=(dn(),V1)),t.Cb.nh()&&(w=new F0(t.Cb,1,13,k,e,Fg(il(u(t.Cb,59)),t),!1),n?n.Ei(w):n=w));else if(Et(t.Cb,88))t.Db>>16==-23&&(Et(e,88)||(e=(dn(),Wh)),Et(k,88)||(k=(dn(),Wh)),t.Cb.nh()&&(w=new F0(t.Cb,1,10,k,e,Fg(Lc(u(t.Cb,26)),t),!1),n?n.Ei(w):n=w));else if(Et(t.Cb,444))for(d=u(t.Cb,836),h=(!d.b&&(d.b=new cR(new Ytt)),d.b),o=(r=new h2(new wg(h.a).a),new uR(r));o.a.b;)s=u(Yv(o.a).cd(),87),n=_E(s,oq(s,d),n)}return n}function Y3n(t,e){var n,r,s,o,h,d,w,k,C,M,F;for(h=je(Re(qe(t,(Te(),$y)))),F=u(qe(t,qy),21),w=!1,k=!1,M=new er((!t.c&&(t.c=new he(fl,t,9,9)),t.c));M.e!=M.i.gc()&&(!w||!k);){for(o=u(dr(M),118),d=0,s=Bp(L1(ct(ot(B1,1),Ie,20,0,[(!o.d&&(o.d=new Cn(Ws,o,8,5)),o.d),(!o.e&&(o.e=new Cn(Ws,o,7,4)),o.e)])));zr(s)&&(r=u(Lr(s),79),C=h&&uw(r)&&je(Re(qe(r,P2))),n=Fle((!r.b&&(r.b=new Cn(br,r,4,7)),r.b),o)?t==ts(Mo(u(St((!r.c&&(r.c=new Cn(br,r,5,8)),r.c),0),82))):t==ts(Mo(u(St((!r.b&&(r.b=new Cn(br,r,4,7)),r.b),0),82))),!((C||n)&&(++d,d>1))););(d>0||F.Hc((Qu(),tg))&&(!o.n&&(o.n=new he(qo,o,1,7)),o.n).i>0)&&(w=!0),d>1&&(k=!0)}w&&e.Fc((oo(),bh)),k&&e.Fc((oo(),vS))}function ahe(t){var e,n,r,s,o,h,d,w,k,C,M,F;if(F=u(qe(t,(ci(),z2)),21),F.dc())return null;if(d=0,h=0,F.Hc((_l(),nN))){for(C=u(qe(t,US),98),r=2,n=2,s=2,o=2,e=ts(t)?u(qe(ts(t),jw),103):u(qe(t,jw),103),k=new er((!t.c&&(t.c=new he(fl,t,9,9)),t.c));k.e!=k.i.gc();)if(w=u(dr(k),118),M=u(qe(w,o5),61),M==(be(),Zo)&&(M=nxt(w,e),bo(w,o5,M)),C==(oa(),Vc))switch(M.g){case 1:r=b.Math.max(r,w.i+w.g);break;case 2:n=b.Math.max(n,w.j+w.f);break;case 3:s=b.Math.max(s,w.i+w.g);break;case 4:o=b.Math.max(o,w.j+w.f)}else switch(M.g){case 1:r+=w.g+2;break;case 2:n+=w.f+2;break;case 3:s+=w.g+2;break;case 4:o+=w.f+2}d=b.Math.max(r,s),h=b.Math.max(n,o)}return gw(t,d,h,!0,!0)}function Sat(t,e,n,r,s){var o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt;for(Lt=u(Pl(G$(Ri(new Tn(null,new _n(e.d,16)),new Uk(n)),new sM(n)),i2(new _e,new we,new nr,ct(ot(ll,1),ae,132,0,[(I1(),Gl)]))),15),M=vi,C=_a,w=new S(e.b.j);w.a<w.c.c.length;)d=u(J(w),11),d.j==n&&(M=b.Math.min(M,d.p),C=b.Math.max(C,d.p));if(M==vi)for(h=0;h<Lt.gc();h++)Smt(u(Lt.Xb(h),101),n,h);else for(_t=Pt(Tr,Xr,25,s.length,15,1),jtn(_t,_t.length),gt=Lt.Kc();gt.Ob();){for(tt=u(gt.Pb(),101),o=u(Jn(t.b,tt),177),k=0,Y=M;Y<=C;Y++)o[Y]&&(k=b.Math.max(k,r[Y]));if(tt.i){for(H=tt.i.c,Bt=new qs,F=0;F<s.length;F++)s[H][F]&&Ns(Bt,de(_t[F]));for(;S0(Bt,de(k));)++k}for(Smt(tt,n,k),V=M;V<=C;V++)o[V]&&(r[V]=k+1);tt.i&&(_t[tt.i.c]=k)}}function X3n(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y;for(s=null,r=new S(e.a);r.a<r.c.c.length;)n=u(J(r),10),xat(n)?o=(d=Dv(bM(new Ub,n),t.f),w=Dv(bM(new Ub,n),t.f),k=new _wt(n,!0,d,w),C=n.o.b,M=(sy(),(n.q?n.q:(vn(),vn(),a0))._b((Te(),Nw))?F=u(Q(n,Nw),197):F=u(Q(Fa(n),CS),197),F),H=1e4,M==J4&&(H=1),V=vf(of(af(sf(cf(new Eh,H),ps(b.Math.ceil(C))),d),w)),M==t5&&Ns(t.d,V),Gue(t,a2(Yo(n,(be(),Bn))),k),Gue(t,Yo(n,Hn),k),k):o=(Y=Dv(bM(new Ub,n),t.f),us(Ri(new Tn(null,new _n(n.j,16)),new hQ),new tVt(t,Y)),new _wt(n,!1,Y,Y)),t.i[n.p]=o,s&&(h=s.c.d.a+V3(t.n,s.c,n)+n.d.d,s.b||(h+=s.c.o.b),vf(of(af(cf(sf(new Eh,ps(b.Math.ceil(h))),0),s.d),o.a))),s=o}function Q3n(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y;for(wr(e,"Label dummy insertions",1),M=new le,h=Xt(ye(Q(t,(Te(),B6)))),k=Xt(ye(Q(t,Gy))),C=u(Q(t,Vl),103),H=new S(t.a);H.a<H.c.c.length;)for(F=u(J(H),10),o=new ar(lr(Ms(F).a.Kc(),new z));zr(o);)if(s=u(Lr(o),17),s.c.i!=s.d.i&&Jet(s.b,qbe)){for(Y=Han(s),V=Hd(s.b.c.length),n=Rbn(t,s,Y,V),M.c[M.c.length]=n,r=n.o,d=new ha(s.b,0);d.b<d.d.gc();)w=(Qn(d.b<d.d.gc()),u(d.d.Xb(d.c=d.b++),70)),Gt(Q(w,Md))===Gt((A1(),_7))&&(C==(ao(),Z0)||C==Q0?(r.a+=w.o.a+k,r.b=b.Math.max(r.b,w.o.b)):(r.a=b.Math.max(r.a,w.o.a),r.b+=w.o.b+k),V.c[V.c.length]=w,El(d));C==(ao(),Z0)||C==Q0?(r.a-=k,r.b+=h+Y):r.b+=h-k+Y}As(t.a,M),or(e)}function Z3n(t,e,n,r){var s,o,h,d,w,k,C,M,F,H;for(o=new Ioe(e),M=$vn(t,e,o),H=b.Math.max(Xt(ye(Q(e,(Te(),Ug)))),1),C=new S(M.a);C.a<C.c.c.length;)k=u(J(C),46),w=jie(u(k.a,8),u(k.b,8),H),E=!0,E=E&Nv(n,new $e(w.c,w.d)),E=E&Nv(n,Fm(new $e(w.c,w.d),w.b,0)),E=E&Nv(n,Fm(new $e(w.c,w.d),0,w.a)),E&Nv(n,Fm(new $e(w.c,w.d),w.b,w.a));switch(F=o.d,d=jie(u(M.b.a,8),u(M.b.b,8),H),F==(be(),Bn)||F==Hn?(r.c[F.g]=b.Math.min(r.c[F.g],d.d),r.b[F.g]=b.Math.max(r.b[F.g],d.d+d.a)):(r.c[F.g]=b.Math.min(r.c[F.g],d.c),r.b[F.g]=b.Math.max(r.b[F.g],d.c+d.b)),s=Ts,h=o.c.i.d,F.g){case 4:s=h.c;break;case 2:s=h.b;break;case 1:s=h.a;break;case 3:s=h.d}return r.a[F.g]=b.Math.max(r.a[F.g],s),o}function J3n(t){var e,n,r,s;if(n=t.D!=null?t.D:t.B,e=cd(n,Eu(91)),e!=-1){r=n.substr(0,e),s=new xg;do s.a+="[";while((e=l8(n,91,++e))!=-1);hn(r,u6)?s.a+="Z":hn(r,Q_)?s.a+="B":hn(r,TH)?s.a+="C":hn(r,Z_)?s.a+="D":hn(r,J_)?s.a+="F":hn(r,tS)?s.a+="I":hn(r,eS)?s.a+="J":hn(r,nS)?s.a+="S":(s.a+="L",s.a+=""+r,s.a+=";");try{return null}catch(o){if(o=Wi(o),!Et(o,60))throw rt(o)}}else if(cd(n,Eu(46))==-1){if(hn(n,u6))return dl;if(hn(n,Q_))return Hu;if(hn(n,TH))return mh;if(hn(n,Z_))return ia;if(hn(n,J_))return r3;if(hn(n,tS))return Tr;if(hn(n,eS))return Lb;if(hn(n,nS))return f5}return null}function ohe(t,e,n){var r,s,o,h,d,w,k,C;for(k=new H0(n),Lo(k,e),Jt(k,(se(),_i),e),k.o.a=e.g,k.o.b=e.f,k.n.a=e.i,k.n.b=e.j,ue(n.a,k),ki(t.a,e,k),((!e.a&&(e.a=new he(ns,e,10,11)),e.a).i!=0||je(Re(qe(e,(Te(),$y)))))&&Jt(k,KTt,(Fn(),!0)),w=u(Q(n,Gc),21),C=u(Q(k,(Te(),os)),98),C==(oa(),yb)?Jt(k,os,H1):C!=H1&&w.Fc((oo(),f7)),r=u(Q(n,Vl),103),d=new er((!e.c&&(e.c=new he(fl,e,9,9)),e.c));d.e!=d.i.gc();)h=u(dr(d),118),je(Re(qe(h,B2)))||A4n(t,h,k,w,r,C);for(o=new er((!e.n&&(e.n=new he(qo,e,1,7)),e.n));o.e!=o.i.gc();)s=u(dr(o),137),!je(Re(qe(s,B2)))&&s.a&&ue(k.b,Oit(s));return je(Re(Q(k,kS)))&&w.Fc((oo(),RG)),je(Re(Q(k,JG)))&&(w.Fc((oo(),jG)),w.Fc(vS),Jt(k,os,H1)),k}function t4n(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce,Se,We,Qe,Rn;d=u(Jn(e.c,t),459),Lt=e.a.c,w=e.a.c+e.a.b,Qe=d.f,Rn=d.a,h=Qe<Rn,Y=new $e(Lt,Qe),_t=new $e(w,Rn),s=(Lt+w)/2,tt=new $e(s,Qe),Bt=new $e(s,Rn),o=h2n(t,Qe,Rn),ce=T1(e.B),Se=new $e(s,o),We=T1(e.D),n=Ncn(ct(ot(Us,1),te,8,0,[ce,Se,We])),H=!1,gt=e.B.i,gt&&gt.c&&d.d&&(k=h&&gt.p<gt.c.a.c.length-1||!h&&gt.p>0,k?k&&(F=gt.p,h?++F:--F,M=u(Fe(gt.c.a,F),10),r=Qne(M),H=!(Qst(r,ce,n[0])||LYt(r,ce,n[0]))):H=!0),V=!1,Yt=e.D.i,Yt&&Yt.c&&d.e&&(C=h&&Yt.p>0||!h&&Yt.p<Yt.c.a.c.length-1,C?(F=Yt.p,h?--F:++F,M=u(Fe(Yt.c.a,F),10),r=Qne(M),V=!(Qst(r,n[0],We)||LYt(r,n[0],We))):V=!0),H&&V&&ni(t.a,Se),H||zC(t.a,ct(ot(Us,1),te,8,0,[Y,tt])),V||zC(t.a,ct(ot(Us,1),te,8,0,[Bt,_t]))}function Cq(t,e){var n,r,s,o,h,d,w,k;if(Et(t.Ug(),160)?(Cq(u(t.Ug(),160),e),e.a+=" > "):e.a+="Root ",n=t.Tg().zb,hn(n.substr(0,3),"Elk")?Vr(e,n.substr(3)):e.a+=""+n,s=t.zg(),s){Vr((e.a+=" ",e),s);return}if(Et(t,354)&&(k=u(t,137).a,k)){Vr((e.a+=" ",e),k);return}for(h=new er(t.Ag());h.e!=h.i.gc();)if(o=u(dr(h),137),k=o.a,k){Vr((e.a+=" ",e),k);return}if(Et(t,352)&&(r=u(t,79),!r.b&&(r.b=new Cn(br,r,4,7)),r.b.i!=0&&(!r.c&&(r.c=new Cn(br,r,5,8)),r.c.i!=0))){for(e.a+=" (",d=new Lx((!r.b&&(r.b=new Cn(br,r,4,7)),r.b));d.e!=d.i.gc();)d.e>0&&(e.a+=Ka),Cq(u(dr(d),160),e);for(e.a+=Pot,w=new Lx((!r.c&&(r.c=new Cn(br,r,5,8)),r.c));w.e!=w.i.gc();)w.e>0&&(e.a+=Ka),Cq(u(dr(w),160),e);e.a+=")"}}function e4n(t,e,n){var r,s,o,h,d,w,k,C,M,F,H;if(o=u(Q(t,(se(),_i)),79),!!o){for(r=t.a,s=new yo(n),Li(s,V1n(t)),V8(t.d.i,t.c.i)?(F=t.c,M=Ko(ct(ot(Us,1),te,8,0,[F.n,F.a])),na(M,n)):M=T1(t.c),hs(r,M,r.a,r.a.a),H=T1(t.d),Q(t,$lt)!=null&&Li(H,u(Q(t,$lt),8)),hs(r,H,r.c.b,r.c),Jm(r,s),h=m4(o,!0,!0),Z$(h,u(St((!o.b&&(o.b=new Cn(br,o,4,7)),o.b),0),82)),J$(h,u(St((!o.c&&(o.c=new Cn(br,o,5,8)),o.c),0),82)),yD(r,h),C=new S(t.b);C.a<C.c.c.length;)k=u(J(C),70),d=u(Q(k,_i),137),Qv(d,k.o.a),Xv(d,k.o.b),m1(d,k.n.a+s.a,k.n.b+s.b),bo(d,(Xx(),slt),Re(Q(k,slt)));w=u(Q(t,(Te(),_o)),74),w?(Jm(w,s),bo(o,_o,w)):bo(o,_o,null),e==(q0(),H6)?bo(o,X0,H6):bo(o,X0,null)}}function n4n(t,e,n,r){var s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt;for(H=e.c.length,F=0,M=new S(t.b);M.a<M.c.c.length;)if(C=u(J(M),29),gt=C.a,gt.c.length!=0){for(tt=new S(gt),k=0,Lt=null,s=u(J(tt),10),o=null;s;){if(o=u(Fe(e,s.p),257),o.c>=0){for(w=null,d=new ha(C.a,k+1);d.b<d.d.gc()&&(h=(Qn(d.b<d.d.gc()),u(d.d.Xb(d.c=d.b++),10)),w=u(Fe(e,h.p),257),!(w.d==o.d&&w.c<o.c));)w=null;w&&(Lt&&(ah(r,s.p,de(u(Fe(r,s.p),19).a-1)),u(Fe(n,Lt.p),15).Mc(o)),o=Fdn(o,s,H++),e.c[e.c.length]=o,ue(n,new le),Lt?(u(Fe(n,Lt.p),15).Fc(o),ue(r,de(1))):ue(r,de(0)))}V=null,tt.a<tt.c.c.length&&(V=u(J(tt),10),Y=u(Fe(e,V.p),257),u(Fe(n,s.p),15).Fc(Y),ah(r,V.p,de(u(Fe(r,V.p),19).a+1))),o.d=F,o.c=k++,Lt=s,s=V}++F}}function Aat(t,e,n,r){var s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t;return w=t,C=na(new $e(e.a,e.b),t),k=n,M=na(new $e(r.a,r.b),n),F=w.a,tt=w.b,V=k.a,Lt=k.b,H=C.a,gt=C.b,Y=M.a,_t=M.b,s=Y*gt-H*_t,y1(),gf(Ed),b.Math.abs(0-s)<=Ed||s==0||isNaN(0)&&isNaN(s)?!1:(h=1/s*((F-V)*gt-(tt-Lt)*H),d=1/s*-(-(F-V)*_t+(tt-Lt)*Y),o=(gf(Ed),(b.Math.abs(0-h)<=Ed||h==0||isNaN(0)&&isNaN(h)?0:0<h?-1:0>h?1:Lv(isNaN(0),isNaN(h)))<0&&(gf(Ed),(b.Math.abs(h-1)<=Ed||h==1||isNaN(h)&&isNaN(1)?0:h<1?-1:h>1?1:Lv(isNaN(h),isNaN(1)))<0)&&(gf(Ed),(b.Math.abs(0-d)<=Ed||d==0||isNaN(0)&&isNaN(d)?0:0<d?-1:0>d?1:Lv(isNaN(0),isNaN(d)))<0)&&(gf(Ed),(b.Math.abs(d-1)<=Ed||d==1||isNaN(d)&&isNaN(1)?0:d<1?-1:d>1?1:Lv(isNaN(d),isNaN(1)))<0)),o)}function r4n(t){var e,n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce;for(M=new ywt(new Mt(t));M.b!=M.c.a.d;)for(C=hte(M),d=u(C.d,56),e=u(C.e,56),h=d.Tg(),Y=0,Bt=(h.i==null&&pd(h),h.i).length;Y<Bt;++Y)if(k=(o=(h.i==null&&pd(h),h.i),Y>=0&&Y<o.length?o[Y]:null),k.Ij()&&!k.Jj()){if(Et(k,99))w=u(k,18),!(w.Bb&dc)&&(ce=no(w),!(ce&&ce.Bb&dc))&&Hmn(t,w,d,e);else if(to(),u(k,66).Oj()&&(n=(Yt=k,u(Yt?u(e,49).xh(Yt):null,153)),n))for(H=u(d.ah(k),153),r=n.gc(),tt=0,V=H.gc();tt<V;++tt)if(F=H.il(tt),Et(F,99)){if(_t=H.jl(tt),s=Wv(t,_t),s==null&&_t!=null){if(Lt=u(F,18),!t.b||Lt.Bb&dc||no(Lt))continue;s=_t}if(!n.dl(F,s)){for(gt=0;gt<r;++gt)if(n.il(gt)==F&&Gt(n.jl(gt))===Gt(s)){n.ii(n.gc()-1,gt),--r;break}}}else n.dl(H.il(tt),H.jl(tt))}}function i4n(t,e,n,r,s,o,h){var d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t;if(gt=cyn(e,n,t.g),s.n&&s.n&&o&&hf(s,ff(o),(Cl(),Yl)),t.b)for(tt=0;tt<gt.c.length;tt++)M=(An(tt,gt.c.length),u(gt.c[tt],200)),tt!=0&&(H=(An(tt-1,gt.c.length),u(gt.c[tt-1],200)),Cre(M,H.f+H.b+t.g)),w5n(tt,gt,n,t.g),w1n(t,M),s.n&&o&&hf(s,ff(o),(Cl(),Yl));else for(Y=new S(gt);Y.a<Y.c.c.length;)for(V=u(J(Y),200),C=new S(V.a);C.a<C.c.c.length;)k=u(J(C),187),Lt=new Pwt(k.s,k.t,t.g),cyt(Lt,k),ue(V.d,Lt);return Sfn(t,gt),s.n&&s.n&&o&&hf(s,ff(o),(Cl(),Yl)),_t=b.Math.max(t.d,r.a-(h.b+h.c)),F=b.Math.max(t.c,r.b-(h.d+h.a)),d=F-t.c,t.e&&t.f&&(w=_t/F,w<t.a?_t=F*t.a:d+=_t/t.a-F),t.e&&Jln(gt,_t,d),s.n&&s.n&&o&&hf(s,ff(o),(Cl(),Yl)),new Tnt(t.a,_t,t.c+d,(yE(),HS))}function s4n(t){var e,n,r,s,o,h,d,w,k,C,M;for(t.j=Pt(Tr,Xr,25,t.g,15,1),t.o=new le,us(Wo(new Tn(null,new _n(t.e.b,16)),new Y5),new S$t(t)),t.a=Pt(dl,i0,25,t.b,16,1),qI(new Tn(null,new _n(t.e.b,16)),new L$t(t)),r=(M=new le,us(Ri(Wo(new Tn(null,new _n(t.e.b,16)),new wQ),new A$t(t)),new eVt(t,M)),M),w=new S(r);w.a<w.c.c.length;)if(d=u(J(w),508),!(d.c.length<=1)){if(d.c.length==2){Qpn(d),xat((An(0,d.c.length),u(d.c[0],17)).d.i)||ue(t.o,d);continue}if(!(Edn(d)||fgn(d,new RF)))for(k=new S(d),s=null;k.a<k.c.c.length;)e=u(J(k),17),n=t.c[e.p],!s||k.a>=k.c.c.length?C=tmt((Gn(),Ds),Zs):C=tmt((Gn(),Zs),Zs),C*=2,o=n.a.g,n.a.g=b.Math.max(o,o+(C-o)),h=n.b.g,n.b.g=b.Math.max(h,h+(C-h)),s=e}}function a4n(t,e,n,r,s){var o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt;for(Yt=SKt(t),C=new le,d=t.c.length,M=d-1,F=d+1;Yt.a.c!=0;){for(;n.b!=0;)_t=(Qn(n.b!=0),u(ch(n,n.a.a),112)),IC(Yt.a,_t)!=null,_t.g=M--,rxt(_t,e,n,r);for(;e.b!=0;)Bt=(Qn(e.b!=0),u(ch(e,e.a.a),112)),IC(Yt.a,Bt)!=null,Bt.g=F++,rxt(Bt,e,n,r);for(k=_a,gt=(h=new vC(new gC(new y(Yt.a).a).b),new g(h));mM(gt.a.a);){if(tt=(o=wj(gt.a),u(o.cd(),112)),!r&&tt.b>0&&tt.a<=0){C.c=Pt(Xn,Ie,1,0,5,1),C.c[C.c.length]=tt;break}Y=tt.i-tt.d,Y>=k&&(Y>k&&(C.c=Pt(Xn,Ie,1,0,5,1),k=Y),C.c[C.c.length]=tt)}C.c.length!=0&&(w=u(Fe(C,zz(s,C.c.length)),112),IC(Yt.a,w)!=null,w.g=F++,rxt(w,e,n,r),C.c=Pt(Xn,Ie,1,0,5,1))}for(Lt=t.c.length+1,V=new S(t);V.a<V.c.c.length;)H=u(J(V),112),H.g<d&&(H.g=H.g+Lt)}function _q(t,e){var n;if(t.e)throw rt(new Fo((L0(Mut),bot+Mut.k+vot)));if(!AYe(t.a,e))throw rt(new Go(mfe+e+yfe));if(e==t.d)return t;switch(n=t.d,t.d=e,n.g){case 0:switch(e.g){case 2:ow(t);break;case 1:Wp(t),ow(t);break;case 4:f4(t),ow(t);break;case 3:f4(t),Wp(t),ow(t)}break;case 2:switch(e.g){case 1:Wp(t),rat(t);break;case 4:f4(t),ow(t);break;case 3:f4(t),Wp(t),ow(t)}break;case 1:switch(e.g){case 2:Wp(t),rat(t);break;case 4:Wp(t),f4(t),ow(t);break;case 3:Wp(t),f4(t),Wp(t),ow(t)}break;case 4:switch(e.g){case 2:f4(t),ow(t);break;case 1:f4(t),Wp(t),ow(t);break;case 3:Wp(t),rat(t)}break;case 3:switch(e.g){case 2:Wp(t),f4(t),ow(t);break;case 1:Wp(t),f4(t),Wp(t),ow(t);break;case 4:Wp(t),rat(t)}}return t}function T4(t,e){var n;if(t.d)throw rt(new Fo((L0(Zut),bot+Zut.k+vot)));if(!LYe(t.a,e))throw rt(new Go(mfe+e+yfe));if(e==t.c)return t;switch(n=t.c,t.c=e,n.g){case 0:switch(e.g){case 2:l2(t);break;case 1:Up(t),l2(t);break;case 4:d4(t),l2(t);break;case 3:d4(t),Up(t),l2(t)}break;case 2:switch(e.g){case 1:Up(t),iat(t);break;case 4:d4(t),l2(t);break;case 3:d4(t),Up(t),l2(t)}break;case 1:switch(e.g){case 2:Up(t),iat(t);break;case 4:Up(t),d4(t),l2(t);break;case 3:Up(t),d4(t),Up(t),l2(t)}break;case 4:switch(e.g){case 2:d4(t),l2(t);break;case 1:d4(t),Up(t),l2(t);break;case 3:Up(t),iat(t)}break;case 3:switch(e.g){case 2:Up(t),d4(t),l2(t);break;case 1:Up(t),d4(t),Up(t),l2(t);break;case 4:Up(t),iat(t)}}return t}function o4n(t,e,n){var r,s,o,h,d,w,k,C;for(w=new er((!t.a&&(t.a=new he(ns,t,10,11)),t.a));w.e!=w.i.gc();)for(d=u(dr(w),33),s=new ar(lr(G0(d).a.Kc(),new z));zr(s);){if(r=u(Lr(s),79),!r.b&&(r.b=new Cn(br,r,4,7)),!(r.b.i<=1&&(!r.c&&(r.c=new Cn(br,r,5,8)),r.c.i<=1)))throw rt(new F9("Graph must not contain hyperedges."));if(!g_(r)&&d!=Mo(u(St((!r.c&&(r.c=new Cn(br,r,5,8)),r.c),0),82)))for(k=new RWt,Lo(k,r),Jt(k,(Gp(),C6),r),wtt(k,u(ec(Ao(n.f,d)),144)),p1(k,u(Jn(n,Mo(u(St((!r.c&&(r.c=new Cn(br,r,5,8)),r.c),0),82))),144)),ue(e.c,k),h=new er((!r.n&&(r.n=new he(qo,r,1,7)),r.n));h.e!=h.i.gc();)o=u(dr(h),137),C=new zZt(k,o.a),Lo(C,o),Jt(C,C6,o),C.e.a=b.Math.max(o.g,1),C.e.b=b.Math.max(o.f,1),axt(C),ue(e.d,C)}}function c4n(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t;for(M=new yxt(t),arn(M,!(e==(ao(),Z0)||e==Q0)),C=M.a,F=new wx,s=(Kf(),ct(ot(My,1),ae,232,0,[sc,tu,ac])),h=0,w=s.length;h<w;++h)n=s[h],k=tnt(C,sc,n),k&&(F.d=b.Math.max(F.d,k.Re()));for(r=ct(ot(My,1),ae,232,0,[sc,tu,ac]),o=0,d=r.length;o<d;++o)n=r[o],k=tnt(C,ac,n),k&&(F.a=b.Math.max(F.a,k.Re()));for(Y=ct(ot(My,1),ae,232,0,[sc,tu,ac]),gt=0,_t=Y.length;gt<_t;++gt)H=Y[gt],k=tnt(C,H,sc),k&&(F.b=b.Math.max(F.b,k.Se()));for(V=ct(ot(My,1),ae,232,0,[sc,tu,ac]),tt=0,Lt=V.length;tt<Lt;++tt)H=V[tt],k=tnt(C,H,ac),k&&(F.c=b.Math.max(F.c,k.Se()));return F.d>0&&(F.d+=C.n.d,F.d+=C.d),F.a>0&&(F.a+=C.n.a,F.a+=C.d),F.b>0&&(F.b+=C.n.b,F.b+=C.d),F.c>0&&(F.c+=C.n.c,F.c+=C.d),F}function che(t,e,n){var r,s,o,h,d,w,k,C,M,F,H,V;for(F=n.d,M=n.c,o=new $e(n.f.a+n.d.b+n.d.c,n.f.b+n.d.d+n.d.a),h=o.b,k=new S(t.a);k.a<k.c.c.length;)if(d=u(J(k),10),d.k==(Gn(),xs)){switch(r=u(Q(d,(se(),oc)),61),s=u(Q(d,QTt),8),C=d.n,r.g){case 2:C.a=n.f.a+F.c-M.a;break;case 4:C.a=-M.a-F.b}switch(V=0,r.g){case 2:case 4:e==(oa(),h0)?(H=Xt(ye(Q(d,Dw))),C.b=o.b*H-u(Q(d,(Te(),Pw)),8).b,V=C.b+s.b,fz(d,!1,!0)):e==Vc&&(C.b=Xt(ye(Q(d,Dw)))-u(Q(d,(Te(),Pw)),8).b,V=C.b+s.b,fz(d,!1,!0))}h=b.Math.max(h,V)}for(n.f.b+=h-o.b,w=new S(t.a);w.a<w.c.c.length;)if(d=u(J(w),10),d.k==(Gn(),xs))switch(r=u(Q(d,(se(),oc)),61),C=d.n,r.g){case 1:C.b=-M.b-F.d;break;case 3:C.b=n.f.b+F.a-M.b}}function u4n(t){var e,n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce,Se,We;for(s=u(Q(t,(fc(),jS)),33),k=vi,C=vi,d=_a,w=_a,ce=ei(t.b,0);ce.b!=ce.d.c;)Bt=u(ti(ce),86),Y=Bt.e,tt=Bt.f,k=b.Math.min(k,Y.a-tt.a/2),C=b.Math.min(C,Y.b-tt.b/2),d=b.Math.max(d,Y.a+tt.a/2),w=b.Math.max(w,Y.b+tt.b/2);for(V=u(qe(s,(hw(),oye)),116),H=new $e(V.b-k,V.d-C),Yt=ei(t.b,0);Yt.b!=Yt.d.c;)Bt=u(ti(Yt),86),F=Q(Bt,jS),Et(F,239)&&(o=u(F,33),M=Li(Bt.e,H),m1(o,M.a-o.g/2,M.b-o.f/2));for(_t=ei(t.a,0);_t.b!=_t.d.c;)Lt=u(ti(_t),188),r=u(Q(Lt,jS),79),r&&(e=Lt.a,gt=new yo(Lt.b.e),hs(e,gt,e.a,e.a.a),Se=new yo(Lt.c.e),hs(e,Se,e.c.b,e.c),Lae(gt,u(Qf(e,1),8),Lt.b.f),Lae(Se,u(Qf(e,e.b-2),8),Lt.c.f),n=m4(r,!0,!0),yD(e,n));We=d-k+(V.b+V.c),h=w-C+(V.d+V.a),gw(s,We,h,!1,!1)}function l4n(t){var e,n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t;for(M=t.b,C=new ha(M,0),Rm(C,new Ch(t)),Lt=!1,h=1;C.b<C.d.gc();){for(k=(Qn(C.b<C.d.gc()),u(C.d.Xb(C.c=C.b++),29)),Y=(An(h,M.c.length),u(M.c[h],29)),tt=Gv(k.a),gt=tt.c.length,V=new S(tt);V.a<V.c.c.length;)F=u(J(V),10),ko(F,Y);if(Lt){for(H=zwt(new mv(tt),0);H.c.Sb();)for(F=u(gJt(H),10),o=new S(Gv(jo(F)));o.a<o.c.c.length;)s=u(J(o),17),dw(s,!0),Jt(t,(se(),xO),(Fn(),!0)),r=jle(t,s,gt),n=u(Q(F,Lw),305),_t=u(Fe(r,r.c.length-1),17),n.k=_t.c.i,n.n=_t,n.b=s.d.i,n.c=s;Lt=!1}else tt.c.length!=0&&(e=(An(0,tt.c.length),u(tt.c[0],10)),e.k==(Gn(),j1)&&(Lt=!0,h=-1));++h}for(d=new ha(t.b,0);d.b<d.d.gc();)w=(Qn(d.b<d.d.gc()),u(d.d.Xb(d.c=d.b++),29)),w.a.c.length==0&&El(d)}function h4n(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt;if(C=u(u(Ai(t.r,e),21),84),C.gc()<=2||e==(be(),Hn)||e==(be(),Bn)){Ahe(t,e);return}for(Y=t.u.Hc((Qu(),G6)),n=e==(be(),Nn)?(tw(),aO):(tw(),sO),gt=e==Nn?(wu(),yf):(wu(),e1),r=ebt(mvt(n),t.s),tt=e==Nn?ss:Ts,k=C.Kc();k.Ob();)d=u(k.Pb(),111),!(!d.c||d.c.d.c.length<=0)&&(V=d.b.rf(),H=d.e,M=d.c,F=M.i,F.b=(o=M.n,M.e.a+o.b+o.c),F.a=(h=M.n,M.e.b+h.d+h.a),Y?(F.c=H.a-(s=M.n,M.e.a+s.b+s.c)-t.s,Y=!1):F.c=H.a+V.a+t.s,tI(gt,Yxt),M.f=gt,Uf(M,(Xu(),mf)),ue(r.d,new Dnt(F,Jyt(r,F))),tt=e==Nn?b.Math.min(tt,H.b):b.Math.max(tt,H.b+d.b.rf().b));for(tt+=e==Nn?-t.t:t.t,p3t((r.e=tt,r)),w=C.Kc();w.Ob();)d=u(w.Pb(),111),!(!d.c||d.c.d.c.length<=0)&&(F=d.c.i,F.c-=d.e.a,F.d-=d.e.b)}function f4n(t,e,n){var r;if(wr(n,"StretchWidth layering",1),e.a.c.length==0){or(n);return}for(t.c=e,t.t=0,t.u=0,t.i=ss,t.g=Ts,t.d=Xt(ye(Q(e,(Te(),xf)))),qhn(t),Gpn(t),Hpn(t),W1n(t),Yln(t),t.i=b.Math.max(1,t.i),t.g=b.Math.max(1,t.g),t.d=t.d/t.i,t.f=t.g/t.i,t.s=rfn(t),r=new Ch(t.c),ue(t.c.b,r),t.r=Gv(t.p),t.n=l$(t.k,t.k.length);t.r.c.length!=0;)t.o=vun(t),!t.o||nre(t)&&t.b.a.gc()!=0?(wdn(t,r),r=new Ch(t.c),ue(t.c.b,r),Ua(t.a,t.b),t.b.a.$b(),t.t=t.u,t.u=0):nre(t)?(t.c.b.c=Pt(Xn,Ie,1,0,5,1),r=new Ch(t.c),ue(t.c.b,r),t.t=0,t.u=0,t.b.a.$b(),t.a.a.$b(),++t.f,t.r=Gv(t.p),t.n=l$(t.k,t.k.length)):(ko(t.o,r),vu(t.r,t.o),Ns(t.b,t.o),t.t=t.t-t.k[t.o.p]*t.d+t.j[t.o.p],t.u+=t.e[t.o.p]*t.d);e.a.c=Pt(Xn,Ie,1,0,5,1),Bst(e.b),or(n)}function d4n(t){var e,n,r,s;for(us(Ri(new Tn(null,new _n(t.a.b,16)),new vX),new wX),sdn(t),us(Ri(new Tn(null,new _n(t.a.b,16)),new mX),new yX),t.c==(q0(),H6)&&(us(Ri(Wo(new Tn(null,new _n(new Tm(t.f),1)),new xX),new kX),new Dtt(t)),us(Ri(pu(Wo(Wo(new Tn(null,new _n(t.d.b,16)),new xF),new EX),new kF),new TX),new Ntt(t))),s=new $e(ss,ss),e=new $e(Ts,Ts),r=new S(t.a.b);r.a<r.c.c.length;)n=u(J(r),57),s.a=b.Math.min(s.a,n.d.c),s.b=b.Math.min(s.b,n.d.d),e.a=b.Math.max(e.a,n.d.c+n.d.b),e.b=b.Math.max(e.b,n.d.d+n.d.a);Li(Gf(t.d.c),mj(new $e(s.a,s.b))),Li(Gf(t.d.f),na(new $e(e.a,e.b),s)),p2n(t,s,e),Yu(t.f),Yu(t.b),Yu(t.g),Yu(t.e),t.a.a.c=Pt(Xn,Ie,1,0,5,1),t.a.b.c=Pt(Xn,Ie,1,0,5,1),t.a=null,t.d=null}function uhe(t,e,n){var r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t;for(s=new le,Y=new S(e.a);Y.a<Y.c.c.length;)if(V=u(J(Y),10),H=V.e,H&&(r=uhe(t,H,V),As(s,r),S3n(t,H,V),u(Q(H,(se(),Gc)),21).Hc((oo(),bh))))for(Lt=u(Q(V,(Te(),os)),98),F=u(Q(V,qy),174).Hc((Qu(),tg)),gt=new S(V.j);gt.a<gt.c.c.length;)for(tt=u(J(gt),11),o=u(Jn(t.b,tt),10),o||(o=TD(tt,Lt,tt.j,-(tt.e.c.length-tt.g.c.length),null,new Ta,tt.o,u(Q(H,Vl),103),H),Jt(o,_i,tt),ki(t.b,tt,o),ue(H.a,o)),h=u(Fe(o.j,0),11),C=new S(tt.f);C.a<C.c.c.length;)k=u(J(C),70),d=new cHt,d.o.a=k.o.a,d.o.b=k.o.b,ue(h.f,d),F||(_t=tt.j,M=0,TC(u(Q(V,qy),21))&&(M=t5t(k.n,k.o,tt.o,0,_t)),Lt==(oa(),H1)||(be(),uu).Hc(_t)?d.o.a=M:d.o.b=M);return w=new le,R3n(t,e,n,s,w),n&&t3n(t,e,n,w),w}function mxt(t,e,n){var r,s,o,h,d,w,k,C,M;if(!t.c[e.c.p][e.p].e){for(t.c[e.c.p][e.p].e=!0,t.c[e.c.p][e.p].b=0,t.c[e.c.p][e.p].d=0,t.c[e.c.p][e.p].a=null,C=new S(e.j);C.a<C.c.c.length;)for(k=u(J(C),11),M=n?new Ys(k):new Er(k),w=M.Kc();w.Ob();)d=u(w.Pb(),11),h=d.i,h.c==e.c?h!=e&&(mxt(t,h,n),t.c[e.c.p][e.p].b+=t.c[h.c.p][h.p].b,t.c[e.c.p][e.p].d+=t.c[h.c.p][h.p].d):(t.c[e.c.p][e.p].d+=t.g[d.p],++t.c[e.c.p][e.p].b);if(o=u(Q(e,(se(),WTt)),15),o)for(s=o.Kc();s.Ob();)r=u(s.Pb(),10),e.c==r.c&&(mxt(t,r,n),t.c[e.c.p][e.p].b+=t.c[r.c.p][r.p].b,t.c[e.c.p][e.p].d+=t.c[r.c.p][r.p].d);t.c[e.c.p][e.p].b>0&&(t.c[e.c.p][e.p].d+=ol(t.i,24)*PD*.07000000029802322-.03500000014901161,t.c[e.c.p][e.p].a=t.c[e.c.p][e.p].d/t.c[e.c.p][e.p].b)}}function g4n(t){var e,n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt;for(V=new S(t);V.a<V.c.c.length;){for(H=u(J(V),10),Tg(H.n),Tg(H.o),ymt(H.f),Cue(H),Vvn(H),tt=new S(H.j);tt.a<tt.c.c.length;){for(Y=u(J(tt),11),Tg(Y.n),Tg(Y.a),Tg(Y.o),Fs(Y,hse(Y.j)),o=u(Q(Y,(Te(),Wg)),19),o&&Jt(Y,Wg,de(-o.a)),s=new S(Y.g);s.a<s.c.c.length;){for(r=u(J(s),17),n=ei(r.a,0);n.b!=n.d.c;)e=u(ti(n),8),Tg(e);if(w=u(Q(r,_o),74),w)for(d=ei(w,0);d.b!=d.d.c;)h=u(ti(d),8),Tg(h);for(M=new S(r.b);M.a<M.c.c.length;)k=u(J(M),70),Tg(k.n),Tg(k.o)}for(F=new S(Y.f);F.a<F.c.c.length;)k=u(J(F),70),Tg(k.n),Tg(k.o)}for(H.k==(Gn(),xs)&&(Jt(H,(se(),oc),hse(u(Q(H,oc),61))),evn(H)),C=new S(H.b);C.a<C.c.c.length;)k=u(J(C),70),Cue(k),Tg(k.o),Tg(k.n)}}function p4n(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce,Se;for(t.e=e,d=ppn(e),ce=new le,r=new S(d);r.a<r.c.c.length;){for(n=u(J(r),15),Se=new le,ce.c[ce.c.length]=Se,w=new qs,V=n.Kc();V.Ob();){for(H=u(V.Pb(),33),o=bD(t,H,!0,0,0),Se.c[Se.c.length]=o,Y=H.i,tt=H.j,F=(!H.n&&(H.n=new he(qo,H,1,7)),H.n),M=new er(F);M.e!=M.i.gc();)k=u(dr(M),137),s=bD(t,k,!1,Y,tt),Se.c[Se.c.length]=s;for(Yt=(!H.c&&(H.c=new he(fl,H,9,9)),H.c),Lt=new er(Yt);Lt.e!=Lt.i.gc();)for(gt=u(dr(Lt),118),h=bD(t,gt,!1,Y,tt),Se.c[Se.c.length]=h,_t=gt.i+Y,Bt=gt.j+tt,F=(!gt.n&&(gt.n=new he(qo,gt,1,7)),gt.n),C=new er(F);C.e!=C.i.gc();)k=u(dr(C),137),s=bD(t,k,!1,_t,Bt),Se.c[Se.c.length]=s;Ua(w,s$(L1(ct(ot(B1,1),Ie,20,0,[G0(H),fD(H)]))))}s2n(t,w,Se)}return t.f=new sHt(ce),Lo(t.f,e),t.f}function b4n(t,e,n,r,s){var o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce,Se,We,Qe,Rn,zn,hr;Rn=Jn(t.e,r),Rn==null&&(Rn=new mx,H=u(Rn,183),Lt=e+"_s",_t=Lt+s,F=new Hm(_t),Wf(H,Cd,F)),Qe=u(Rn,183),Bx(n,Qe),hr=new mx,Jb(hr,"x",r.j),Jb(hr,"y",r.k),Wf(Qe,_de,hr),Se=new mx,Jb(Se,"x",r.b),Jb(Se,"y",r.c),Wf(Qe,"endPoint",Se),M=fM((!r.a&&(r.a=new Ss(Hh,r,5)),r.a)),V=!M,V&&(ce=new bg,o=new hzt(ce),va((!r.a&&(r.a=new Ss(Hh,r,5)),r.a),o),Wf(Qe,wH,ce)),w=sst(r),Bt=!!w,Bt&&S4t(t.a,Qe,w8t,Fst(t,sst(r))),gt=ast(r),Yt=!!gt,Yt&&S4t(t.a,Qe,v8t,Fst(t,ast(r))),k=(!r.e&&(r.e=new Cn(Zi,r,10,9)),r.e).i==0,Y=!k,Y&&(We=new bg,h=new IVt(t,We),va((!r.e&&(r.e=new Cn(Zi,r,10,9)),r.e),h),Wf(Qe,y8t,We)),C=(!r.g&&(r.g=new Cn(Zi,r,9,10)),r.g).i==0,tt=!C,tt&&(zn=new bg,d=new DVt(t,zn),va((!r.g&&(r.g=new Cn(Zi,r,9,10)),r.g),d),Wf(Qe,m8t,zn))}function v4n(t){Bm();var e,n,r,s,o,h,d;for(r=t.f.n,h=gwt(t.r).a.nc();h.Ob();){if(o=u(h.Pb(),111),s=0,o.b.Xe((ci(),hl))&&(s=Xt(ye(o.b.We(hl))),s<0))switch(o.b.Hf().g){case 1:r.d=b.Math.max(r.d,-s);break;case 3:r.a=b.Math.max(r.a,-s);break;case 2:r.c=b.Math.max(r.c,-s);break;case 4:r.b=b.Math.max(r.b,-s)}if(TC(t.u))switch(e=zon(o.b,s),d=!u(t.e.We(vb),174).Hc((cl(),rN)),n=!1,o.b.Hf().g){case 1:n=e>r.d,r.d=b.Math.max(r.d,e),d&&n&&(r.d=b.Math.max(r.d,r.a),r.a=r.d+s);break;case 3:n=e>r.a,r.a=b.Math.max(r.a,e),d&&n&&(r.a=b.Math.max(r.a,r.d),r.d=r.a+s);break;case 2:n=e>r.c,r.c=b.Math.max(r.c,e),d&&n&&(r.c=b.Math.max(r.b,r.c),r.b=r.c+s);break;case 4:n=e>r.b,r.b=b.Math.max(r.b,e),d&&n&&(r.b=b.Math.max(r.b,r.c),r.c=r.b+s)}}}function w4n(t){var e,n,r,s,o,h,d,w,k,C,M;for(k=new S(t);k.a<k.c.c.length;){switch(w=u(J(k),10),h=u(Q(w,(Te(),cu)),163),o=null,h.g){case 1:case 2:o=(u2(),G4);break;case 3:case 4:o=(u2(),u7)}if(o)Jt(w,(se(),HG),(u2(),G4)),o==u7?lq(w,h,(so(),Ju)):o==G4&&lq(w,h,(so(),eu));else if(H3(u(Q(w,os),98))&&w.j.c.length!=0){for(e=!0,M=new S(w.j);M.a<M.c.c.length;){if(C=u(J(M),11),!(C.j==(be(),Hn)&&C.e.c.length-C.g.c.length>0||C.j==Bn&&C.e.c.length-C.g.c.length<0)){e=!1;break}for(s=new S(C.g);s.a<s.c.c.length;)if(n=u(J(s),17),d=u(Q(n.d.i,cu),163),d==(hh(),xS)||d==Fy){e=!1;break}for(r=new S(C.e);r.a<r.c.c.length;)if(n=u(J(r),17),d=u(Q(n.c.i,cu),163),d==(hh(),yS)||d==fb){e=!1;break}}e&&lq(w,h,(so(),MS))}}}function m4n(t,e,n,r,s){var o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce;for(ce=0,H=0,M=new S(e.e);M.a<M.c.c.length;){for(C=u(J(M),10),F=0,d=0,w=n?u(Q(C,pV),19).a:_a,gt=r?u(Q(C,bV),19).a:_a,k=b.Math.max(w,gt),_t=new S(C.j);_t.a<_t.c.c.length;){if(Lt=u(J(_t),11),Bt=C.n.b+Lt.n.b+Lt.a.b,r)for(h=new S(Lt.g);h.a<h.c.c.length;)o=u(J(h),17),Y=o.d,V=Y.i,e!=t.a[V.p]&&(tt=b.Math.max(u(Q(V,pV),19).a,u(Q(V,bV),19).a),Yt=u(Q(o,(Te(),F6)),19).a,Yt>=k&&Yt>=tt&&(F+=V.n.b+Y.n.b+Y.a.b-Bt,++d));if(n)for(h=new S(Lt.e);h.a<h.c.c.length;)o=u(J(h),17),Y=o.c,V=Y.i,e!=t.a[V.p]&&(tt=b.Math.max(u(Q(V,pV),19).a,u(Q(V,bV),19).a),Yt=u(Q(o,(Te(),F6)),19).a,Yt>=k&&Yt>=tt&&(F+=V.n.b+Y.n.b+Y.a.b-Bt,++d))}d>0&&(ce+=F/d,++H)}H>0?(e.a=s*ce/H,e.g=H):(e.a=0,e.g=0)}function y4n(t,e){var n,r,s,o,h,d,w,k,C,M,F;for(s=new S(t.a.b);s.a<s.c.c.length;)for(n=u(J(s),29),w=new S(n.a);w.a<w.c.c.length;)d=u(J(w),10),e.j[d.p]=d,e.i[d.p]=e.o==(E1(),z1)?Ts:ss;for(Yu(t.c),h=t.a.b,e.c==(dd(),Kg)&&(h=Et(h,152)?Vx(u(h,152)):Et(h,131)?u(h,131).a:Et(h,54)?new mv(h):new Mm(h)),dan(t.e,e,t.b),yM(e.p,null),o=h.Kc();o.Ob();)for(n=u(o.Pb(),29),k=n.a,e.o==(E1(),z1)&&(k=Et(k,152)?Vx(u(k,152)):Et(k,131)?u(k,131).a:Et(k,54)?new mv(k):new Mm(k)),F=k.Kc();F.Ob();)M=u(F.Pb(),10),e.g[M.p]==M&&Mhe(t,M,e);for(u3n(t,e),r=h.Kc();r.Ob();)for(n=u(r.Pb(),29),F=new S(n.a);F.a<F.c.c.length;)M=u(J(F),10),e.p[M.p]=e.p[e.g[M.p].p],M==e.g[M.p]&&(C=Xt(e.i[e.j[M.p].p]),(e.o==(E1(),z1)&&C>Ts||e.o==j2&&C<ss)&&(e.p[M.p]=Xt(e.p[M.p])+C));t.e.cg()}function lhe(t,e,n,r){var s,o,h,d,w;return d=new yxt(e),x2n(d,r),s=!0,t&&t.Xe((ci(),jw))&&(o=u(t.We((ci(),jw)),103),s=o==(ao(),c0)||o==jh||o==kf),gue(d,!1),mu(d.e.wf(),new bvt(d,!1,s)),frt(d,d.f,(Kf(),sc),(be(),Nn)),frt(d,d.f,ac,mr),frt(d,d.g,sc,Bn),frt(d,d.g,ac,Hn),Zie(d,Nn),Zie(d,mr),vXt(d,Hn),vXt(d,Bn),Bm(),h=d.A.Hc((_l(),Xy))&&d.B.Hc((cl(),iN))?lie(d):null,h&&qKe(d.a,h),v4n(d),Ofn(d),Nfn(d),q3n(d),xwn(d),a1n(d),Qit(d,Nn),Qit(d,mr),twn(d),yyn(d),n&&(wln(d),o1n(d),Qit(d,Hn),Qit(d,Bn),w=d.B.Hc((cl(),eA)),uoe(d,w,Nn),uoe(d,w,mr),loe(d,w,Hn),loe(d,w,Bn),us(new Tn(null,new _n(new b1(d.i),0)),new ga),us(Ri(new Tn(null,gwt(d.r).a.oc()),new Ma),new Ha),kdn(d),d.e.uf(d.o),us(new Tn(null,gwt(d.r).a.oc()),new _c)),d.o}function x4n(t){var e,n,r,s,o,h,d,w,k,C,M,F,H,V,Y;for(k=ss,r=new S(t.a.b);r.a<r.c.c.length;)e=u(J(r),81),k=b.Math.min(k,e.d.f.g.c+e.e.a);for(H=new Qi,h=new S(t.a.a);h.a<h.c.c.length;)o=u(J(h),189),o.i=k,o.e==0&&hs(H,o,H.c.b,H.c);for(;H.b!=0;){for(o=u(H.b==0?null:(Qn(H.b!=0),ch(H,H.a.a)),189),s=o.f.g.c,F=o.a.a.ec().Kc();F.Ob();)C=u(F.Pb(),81),Y=o.i+C.e.a,C.d.g||C.g.c<Y?C.o=Y:C.o=C.g.c;for(s-=o.f.o,o.b+=s,t.c==(ao(),kf)||t.c==Q0?o.c+=s:o.c-=s,M=o.a.a.ec().Kc();M.Ob();)for(C=u(M.Pb(),81),w=C.f.Kc();w.Ob();)d=u(w.Pb(),81),Op(t.c)?V=t.f.ef(C,d):V=t.f.ff(C,d),d.d.i=b.Math.max(d.d.i,C.o+C.g.b+V-d.e.a),d.k||(d.d.i=b.Math.max(d.d.i,d.g.c-d.e.a)),--d.d.e,d.d.e==0&&ni(H,d.d)}for(n=new S(t.a.b);n.a<n.c.c.length;)e=u(J(n),81),e.g.c=e.o}function k4n(t){var e,n,r,s,o,h,d,w;switch(d=t.b,e=t.a,u(Q(t,(Kz(),$Et)),427).g){case 0:Xs(d,new ft(new Ei));break;case 1:default:Xs(d,new ft(new Jo))}switch(u(Q(t,REt),428).g){case 1:Xs(d,new kr),Xs(d,new vc),Xs(d,new J1);break;case 0:default:Xs(d,new kr),Xs(d,new on)}switch(u(Q(t,qEt),250).g){case 0:w=new Xi;break;case 1:w=new ef;break;case 2:w=new nf;break;case 3:w=new Oc;break;case 5:w=new fr(new nf);break;case 4:w=new fr(new ef);break;case 7:w=new Ebt(new fr(new ef),new fr(new nf));break;case 8:w=new Ebt(new fr(new Oc),new fr(new nf));break;case 6:default:w=new fr(new Oc)}for(h=new S(d);h.a<h.c.c.length;){for(o=u(J(h),167),r=0,s=0,n=new la(de(r),de(s));omn(e,o,r,s);)n=u(w.Ce(n,o),46),r=u(n.a,19).a,s=u(n.b,19).a;swn(e,o,r,s)}}function E4n(t){var e,n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce,Se;for(o=t.f.b,F=o.a,C=o.b,V=t.e.g,H=t.e.f,sj(t.e,o.a,o.b),ce=F/V,Se=C/H,k=new er(Zj(t.e));k.e!=k.i.gc();)w=u(dr(k),137),yu(w,w.i*ce),xu(w,w.j*Se);for(Lt=new er(Znt(t.e));Lt.e!=Lt.i.gc();)gt=u(dr(Lt),118),Bt=gt.i,Yt=gt.j,Bt>0&&yu(gt,Bt*ce),Yt>0&&xu(gt,Yt*Se);for(UC(t.b,new cv),e=new le,d=new h2(new wg(t.c).a);d.b;)h=Yv(d),r=u(h.cd(),79),n=u(h.dd(),395).a,s=m4(r,!1,!1),M=uae(Zd(r),sD(s),n),yD(M,s),_t=xae(r),_t&&Ro(e,_t,0)==-1&&(e.c[e.c.length]=_t,SXt(_t,(Qn(M.b!=0),u(M.a.a.c,8)),n));for(tt=new h2(new wg(t.d).a);tt.b;)Y=Yv(tt),r=u(Y.cd(),79),n=u(Y.dd(),395).a,s=m4(r,!1,!1),M=uae(Xp(r),BI(sD(s)),n),M=BI(M),yD(M,s),_t=kae(r),_t&&Ro(e,_t,0)==-1&&(e.c[e.c.length]=_t,SXt(_t,(Qn(M.b!=0),u(M.c.b.c,8)),n))}function hhe(t,e,n,r){var s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce,Se;if(n.c.length!=0){for(H=new le,F=new S(n);F.a<F.c.c.length;)M=u(J(F),33),ue(H,new $e(M.i,M.j));for(r.n&&e&&hf(r,ff(e),(Cl(),Yl));I4t(t,n);)sq(t,n,!1);for(r.n&&e&&hf(r,ff(e),(Cl(),Yl)),h=0,d=0,s=null,n.c.length!=0&&(s=(An(0,n.c.length),u(n.c[0],33)),h=s.i-(An(0,H.c.length),u(H.c[0],8)).a,d=s.j-(An(0,H.c.length),u(H.c[0],8)).b),o=b.Math.sqrt(h*h+d*d),C=Dre(n);C.a.gc()!=0;){for(k=C.a.ec().Kc();k.Ob();)w=u(k.Pb(),33),V=t.f,Y=V.i+V.g/2,tt=V.j+V.f/2,gt=w.i+w.g/2,Lt=w.j+w.f/2,_t=gt-Y,Bt=Lt-tt,Yt=b.Math.sqrt(_t*_t+Bt*Bt),ce=_t/Yt,Se=Bt/Yt,yu(w,w.i+ce*o),xu(w,w.j+Se*o);r.n&&e&&hf(r,ff(e),(Cl(),Yl)),C=Dre(new Pu(C))}t.a&&t.a.lg(new Pu(C)),r.n&&e&&hf(r,ff(e),(Cl(),Yl)),hhe(t,e,new Pu(C),r)}}function T4n(t,e,n){var r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt;if(Y=t.n,tt=t.o,F=t.d,M=Xt(ye(iy(t,(Te(),Jlt)))),e){for(C=M*(e.gc()-1),H=0,w=e.Kc();w.Ob();)h=u(w.Pb(),10),C+=h.o.a,H=b.Math.max(H,h.o.b);for(gt=Y.a-(C-tt.a)/2,o=Y.b-F.d+H,r=tt.a/(e.gc()+1),s=r,d=e.Kc();d.Ob();)h=u(d.Pb(),10),h.n.a=gt,h.n.b=o-h.o.b,gt+=h.o.a+M,k=Ece(h),k.n.a=h.o.a/2-k.a.a,k.n.b=h.o.b,V=u(Q(h,(se(),zG)),11),V.e.c.length+V.g.c.length==1&&(V.n.a=s-V.a.a,V.n.b=0,Uo(V,t)),s+=r}if(n){for(C=M*(n.gc()-1),H=0,w=n.Kc();w.Ob();)h=u(w.Pb(),10),C+=h.o.a,H=b.Math.max(H,h.o.b);for(gt=Y.a-(C-tt.a)/2,o=Y.b+tt.b+F.a-H,r=tt.a/(n.gc()+1),s=r,d=n.Kc();d.Ob();)h=u(d.Pb(),10),h.n.a=gt,h.n.b=o,gt+=h.o.a+M,k=Ece(h),k.n.a=h.o.a/2-k.a.a,k.n.b=0,V=u(Q(h,(se(),zG)),11),V.e.c.length+V.g.c.length==1&&(V.n.a=s-V.a.a,V.n.b=tt.b,Uo(V,t)),s+=r}}function C4n(t,e){var n,r,s,o,h,d;if(u(Q(e,(se(),Gc)),21).Hc((oo(),bh))){for(d=new S(e.a);d.a<d.c.c.length;)o=u(J(d),10),o.k==(Gn(),Ds)&&(s=u(Q(o,(Te(),eV)),142),t.c=b.Math.min(t.c,o.n.a-s.b),t.a=b.Math.max(t.a,o.n.a+o.o.a+s.c),t.d=b.Math.min(t.d,o.n.b-s.d),t.b=b.Math.max(t.b,o.n.b+o.o.b+s.a));for(h=new S(e.a);h.a<h.c.c.length;)if(o=u(J(h),10),o.k!=(Gn(),Ds))switch(o.k.g){case 2:if(r=u(Q(o,(Te(),cu)),163),r==(hh(),fb)){o.n.a=t.c-10,Nse(o,new LY).Jb(new Ja(o));break}if(r==Fy){o.n.a=t.a+10,Nse(o,new MY).Jb(new vl(o));break}if(n=u(Q(o,O2),303),n==(B0(),U4)){Ple(o).Jb(new zf(o)),o.n.b=t.d-10;break}if(n==A6){Ple(o).Jb(new xp(o)),o.n.b=t.b+10;break}break;default:throw rt(new Pn("The node type "+o.k+" is not supported by the "+lxn))}}}function _4n(t,e,n,r){var s,o,h,d,w,k,C,M,F,H,V,Y,tt;for(w=new $e(r.i+r.g/2,r.j+r.f/2),H=Ile(r),V=u(qe(e,(Te(),os)),98),tt=u(qe(r,v7),61),$Vt(Vie(r),zy)||(r.i==0&&r.j==0?Y=0:Y=i0n(r,tt),bo(r,zy,Y)),k=new $e(e.g,e.f),s=TD(r,V,tt,H,k,w,new $e(r.g,r.f),u(Q(n,Vl),103),n),Jt(s,(se(),_i),r),o=u(Fe(s.j,0),11),ytt(o,Qwn(r)),Jt(s,qy,(Qu(),un(xb))),M=u(qe(e,qy),174).Hc(tg),d=new er((!r.n&&(r.n=new he(qo,r,1,7)),r.n));d.e!=d.i.gc();)if(h=u(dr(d),137),!je(Re(qe(h,B2)))&&h.a&&(F=Oit(h),ue(o.f,F),!M))switch(C=0,TC(u(qe(e,qy),21))&&(C=t5t(new $e(h.i,h.j),new $e(h.g,h.f),new $e(r.g,r.f),0,tt)),tt.g){case 2:case 4:F.o.a=C;break;case 1:case 3:F.o.b=C}Jt(s,m7,ye(qe(ts(e),m7))),Jt(s,y7,ye(qe(ts(e),y7))),Jt(s,Gy,ye(qe(ts(e),Gy))),ue(n.a,s),ki(t.a,r,s)}function fhe(t,e,n){var r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt;for(wr(n,"Processor arrange level",1),C=0,vn(),e4(e,new bpt((fc(),mV))),o=e.b,d=ei(e,e.b),k=!0;k&&d.b.b!=d.d.a;)gt=u(krt(d),86),u(Q(gt,mV),19).a==0?--o:k=!1;if(Yt=new Kd(e,0,o),h=new bnt(Yt),Yt=new Kd(e,o,e.b),w=new bnt(Yt),h.b==0)for(V=ei(w,0);V.b!=V.d.c;)H=u(ti(V),86),Jt(H,kV,de(C++));else for(M=h.b,Bt=ei(h,0);Bt.b!=Bt.d.c;){for(_t=u(ti(Bt),86),Jt(_t,kV,de(C++)),r=byt(_t),fhe(t,r,Rc(n,1/M|0)),e4(r,Ewt(new bpt(kV))),F=new Qi,Lt=ei(r,0);Lt.b!=Lt.d.c;)for(gt=u(ti(Lt),86),tt=ei(_t.d,0);tt.b!=tt.d.c;)Y=u(ti(tt),188),Y.c==gt&&hs(F,Y,F.c.b,F.c);for(_h(_t.d),Ua(_t.d,F),d=ei(w,w.b),s=_t.d.b,k=!0;0<s&&k&&d.b.b!=d.d.a;)gt=u(krt(d),86),u(Q(gt,mV),19).a==0?(Jt(gt,kV,de(C++)),--s,H$(d)):k=!1}or(n)}function S4n(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t;for(wr(e,"Inverted port preprocessing",1),C=t.b,k=new ha(C,0),n=null,_t=new le;k.b<k.d.gc();){for(Lt=n,n=(Qn(k.b<k.d.gc()),u(k.d.Xb(k.c=k.b++),29)),H=new S(_t);H.a<H.c.c.length;)M=u(J(H),10),ko(M,Lt);for(_t.c=Pt(Xn,Ie,1,0,5,1),V=new S(n.a);V.a<V.c.c.length;)if(M=u(J(V),10),M.k==(Gn(),Ds)&&H3(u(Q(M,(Te(),os)),98))){for(gt=j5t(M,(so(),Ju),(be(),Hn)).Kc();gt.Ob();)for(Y=u(gt.Pb(),11),w=Y.e,d=u(D1(w,Pt(tlt,Fot,17,w.c.length,0,1)),474),s=d,o=0,h=s.length;o<h;++o)r=s[o],Zmn(t,Y,r,_t);for(tt=j5t(M,eu,Bn).Kc();tt.Ob();)for(Y=u(tt.Pb(),11),w=Y.g,d=u(D1(w,Pt(tlt,Fot,17,w.c.length,0,1)),474),s=d,o=0,h=s.length;o<h;++o)r=s[o],Qmn(t,Y,r,_t)}}for(F=new S(_t);F.a<F.c.c.length;)M=u(J(F),10),ko(M,n);or(e)}function A4n(t,e,n,r,s,o){var h,d,w,k,C,M;for(k=new Mc,Lo(k,e),Fs(k,u(qe(e,(Te(),v7)),61)),Jt(k,(se(),_i),e),Uo(k,n),M=k.o,M.a=e.g,M.b=e.f,C=k.n,C.a=e.i,C.b=e.j,ki(t.a,e,k),h=A8(pu(Wo(new Tn(null,(!e.e&&(e.e=new Cn(Ws,e,7,4)),new _n(e.e,16))),new XP),new z5),new ir(e)),h||(h=A8(pu(Wo(new Tn(null,(!e.d&&(e.d=new Cn(Ws,e,8,5)),new _n(e.d,16))),new bk),new DT),new sr(e))),h||(h=A8(new Tn(null,(!e.e&&(e.e=new Cn(Ws,e,7,4)),new _n(e.e,16))),new rY)),Jt(k,kO,(Fn(),!!h)),Vyn(k,o,s,u(qe(e,Pw),8)),w=new er((!e.n&&(e.n=new he(qo,e,1,7)),e.n));w.e!=w.i.gc();)d=u(dr(w),137),!je(Re(qe(d,B2)))&&d.a&&ue(k.f,Oit(d));switch(s.g){case 2:case 1:(k.j==(be(),Nn)||k.j==mr)&&r.Fc((oo(),V4));break;case 4:case 3:(k.j==(be(),Hn)||k.j==Bn)&&r.Fc((oo(),V4))}return k}function Lat(t,e,n,r,s,o,h){var d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t;for(F=null,r==(qv(),bb)?F=e:r==e5&&(F=n),Y=F.a.ec().Kc();Y.Ob();){for(V=u(Y.Pb(),11),tt=Ko(ct(ot(Us,1),te,8,0,[V.i.n,V.n,V.a])).b,_t=new qs,d=new qs,k=new S1(V.b);Vo(k.a)||Vo(k.b);)if(w=u(Vo(k.a)?J(k.a):J(k.b),17),je(Re(Q(w,(se(),$1))))==s&&Ro(o,w,0)!=-1){if(w.d==V?gt=w.c:gt=w.d,Lt=Ko(ct(ot(Us,1),te,8,0,[gt.i.n,gt.n,gt.a])).b,b.Math.abs(Lt-tt)<.2)continue;Lt<tt?e.a._b(gt)?Ns(_t,new la(bb,w)):Ns(_t,new la(e5,w)):e.a._b(gt)?Ns(d,new la(bb,w)):Ns(d,new la(e5,w))}if(_t.a.gc()>1)for(H=new hxt(V,_t,r),va(_t,new iVt(t,H)),h.c[h.c.length]=H,M=_t.a.ec().Kc();M.Ob();)C=u(M.Pb(),46),vu(o,C.b);if(d.a.gc()>1)for(H=new hxt(V,d,r),va(d,new sVt(t,H)),h.c[h.c.length]=H,M=d.a.ec().Kc();M.Ob();)C=u(M.Pb(),46),vu(o,C.b)}}function dhe(t){Sv(t,new w2(mR(Ev(yv(kv(xv(new pg,Td),"ELK Radial"),'A radial layout provider which is based on the algorithm of Peter Eades published in "Drawing free trees.", published by International Institute for Advanced Study of Social Information Science, Fujitsu Limited in 1991. The radial layouter takes a tree and places the nodes in radial order around the root. The nodes of the same tree level are placed on the same radius.'),new nZ),Td))),xe(t,Td,uH,De(Nye)),xe(t,Td,ky,De(Pye)),xe(t,Td,L4,De(Mye)),xe(t,Td,w6,De(Iye)),xe(t,Td,v6,De(Dye)),xe(t,Td,RE,De(Lye)),xe(t,Td,F_,De(k_t)),xe(t,Td,jE,De(Oye)),xe(t,Td,Ect,De(Fht)),xe(t,Td,kct,De(Bht)),xe(t,Td,Vkt,De(E_t)),xe(t,Td,zkt,De(_V)),xe(t,Td,qkt,De(SV)),xe(t,Td,Hkt,De(BO)),xe(t,Td,Gkt,De(T_t))}function yxt(t){var e;if(this.r=rnn(new bc,new Cc),this.b=new e_(u(Ar(Xa),290)),this.p=new e_(u(Ar(Xa),290)),this.i=new e_(u(Ar(Epe),290)),this.e=t,this.o=new yo(t.rf()),this.D=t.Df()||je(Re(t.We((ci(),WO)))),this.A=u(t.We((ci(),z2)),21),this.B=u(t.We(vb),21),this.q=u(t.We(US),98),this.u=u(t.We(Ky),21),!l0n(this.u))throw rt(new F3("Invalid port label placement: "+this.u));if(this.v=je(Re(t.We(nAt))),this.j=u(t.We(s5),21),!Nbn(this.j))throw rt(new F3("Invalid node label placement: "+this.j));this.n=u(o_(t,HSt),116),this.k=Xt(ye(o_(t,qV))),this.d=Xt(ye(o_(t,aAt))),this.w=Xt(ye(o_(t,hAt))),this.s=Xt(ye(o_(t,oAt))),this.t=Xt(ye(o_(t,cAt))),this.C=u(o_(t,uAt),142),this.c=2*this.d,e=!this.B.Hc((cl(),rN)),this.f=new r_(0,e,0),this.g=new r_(1,e,0),Jtt(this.f,(Kf(),tu),this.g)}function L4n(t,e,n,r,s){var o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce,Se,We,Qe,Rn;for(_t=0,V=0,H=0,F=1,Lt=new er((!t.a&&(t.a=new he(ns,t,10,11)),t.a));Lt.e!=Lt.i.gc();)tt=u(dr(Lt),33),F+=N0(new ar(lr(G0(tt).a.Kc(),new z))),We=tt.g,V=b.Math.max(V,We),M=tt.f,H=b.Math.max(H,M),_t+=We*M;for(Y=(!t.a&&(t.a=new he(ns,t,10,11)),t.a).i,h=_t+2*r*r*F*Y,o=b.Math.sqrt(h),w=b.Math.max(o*n,V),d=b.Math.max(o/n,H),gt=new er((!t.a&&(t.a=new he(ns,t,10,11)),t.a));gt.e!=gt.i.gc();)tt=u(dr(gt),33),Qe=s.b+(ol(e,26)*L_+ol(e,27)*M_)*(w-tt.g),Rn=s.b+(ol(e,26)*L_+ol(e,27)*M_)*(d-tt.f),yu(tt,Qe),xu(tt,Rn);for(Se=w+(s.b+s.c),ce=d+(s.d+s.a),Yt=new er((!t.a&&(t.a=new he(ns,t,10,11)),t.a));Yt.e!=Yt.i.gc();)for(Bt=u(dr(Yt),33),C=new ar(lr(G0(Bt).a.Kc(),new z));zr(C);)k=u(Lr(C),79),g_(k)||M5n(k,e,Se,ce);Se+=s.b+s.c,ce+=s.d+s.a,gw(t,Se,ce,!1,!0)}function Sq(t){var e,n,r,s,o,h,d,w,k,C,M;if(t==null)throw rt(new od(Tu));if(k=t,o=t.length,w=!1,o>0&&(e=(Rr(0,t.length),t.charCodeAt(0)),(e==45||e==43)&&(t=t.substr(1),--o,w=e==45)),o==0)throw rt(new od(vw+k+'"'));for(;t.length>0&&(Rr(0,t.length),t.charCodeAt(0)==48);)t=t.substr(1),--o;if(o>(ele(),Ege)[10])throw rt(new od(vw+k+'"'));for(s=0;s<o;s++)if(Mie((Rr(s,t.length),t.charCodeAt(s)))==-1)throw rt(new od(vw+k+'"'));for(M=0,h=oEt[10],C=Tut[10],d=O8(cEt[10]),n=!0,r=o%h,r>0&&(M=-parseInt(t.substr(0,r),10),t=t.substr(r),o-=r,n=!1);o>=h;){if(r=parseInt(t.substr(0,h),10),t=t.substr(h),o-=h,n)n=!1;else{if(yc(M,d)<0)throw rt(new od(vw+k+'"'));M=Ca(M,C)}M=Yp(M,r)}if(yc(M,0)>0)throw rt(new od(vw+k+'"'));if(!w&&(M=O8(M),yc(M,0)<0))throw rt(new od(vw+k+'"'));return M}function xxt(t,e){GKt();var n,r,s,o,h,d,w;if(this.a=new h2t(this),this.b=t,this.c=e,this.f=jnt(Eo((Ru(),ma),e)),this.f.dc())if((d=a4t(ma,t))==e)for(this.e=!0,this.d=new le,this.f=new Ck,this.f.Fc(L2),u(Eq(mI(ma,Fl(t)),""),26)==t&&this.f.Fc(kC(ma,Fl(t))),s=oat(ma,t).Kc();s.Ob();)switch(r=u(s.Pb(),170),$v(Eo(ma,r))){case 4:{this.d.Fc(r);break}case 5:{this.f.Gc(jnt(Eo(ma,r)));break}}else if(to(),u(e,66).Oj())for(this.e=!0,this.f=null,this.d=new le,h=0,w=(t.i==null&&pd(t),t.i).length;h<w;++h)for(r=(n=(t.i==null&&pd(t),t.i),h>=0&&h<n.length?n[h]:null),o=qx(Eo(ma,r));o;o=qx(Eo(ma,o)))o==e&&this.d.Fc(r);else $v(Eo(ma,e))==1&&d?(this.f=null,this.d=(a6(),h5e)):(this.f=null,this.e=!0,this.d=(vn(),new D(e)));else this.e=$v(Eo(ma,e))==5,this.f.Fb(Lft)&&(this.f=Lft)}function ghe(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V;for(n=0,r=kfn(t,e),F=t.s,H=t.t,k=u(u(Ai(t.r,e),21),84).Kc();k.Ob();)if(w=u(k.Pb(),111),!(!w.c||w.c.d.c.length<=0)){switch(V=w.b.rf(),d=w.b.Xe((ci(),hl))?Xt(ye(w.b.We(hl))):0,C=w.c,M=C.i,M.b=(h=C.n,C.e.a+h.b+h.c),M.a=(o=C.n,C.e.b+o.d+o.a),e.g){case 1:M.c=w.a?(V.a-M.b)/2:V.a+F,M.d=V.b+d+r,Uf(C,(Xu(),cb)),ld(C,(wu(),e1));break;case 3:M.c=w.a?(V.a-M.b)/2:V.a+F,M.d=-d-r-M.a,Uf(C,(Xu(),cb)),ld(C,(wu(),yf));break;case 2:M.c=-d-r-M.b,w.a?(s=t.v?M.a:u(Fe(C.d,0),181).rf().b,M.d=(V.b-s)/2):M.d=V.b+H,Uf(C,(Xu(),mf)),ld(C,(wu(),ub));break;case 4:M.c=V.a+d+r,w.a?(s=t.v?M.a:u(Fe(C.d,0),181).rf().b,M.d=(V.b-s)/2):M.d=V.b+H,Uf(C,(Xu(),Sd)),ld(C,(wu(),ub))}(e==(be(),Nn)||e==mr)&&(n=b.Math.max(n,M.a))}n>0&&(u(go(t.b,e),124).a.b=n)}function M4n(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt;for(wr(e,"Comment pre-processing",1),n=0,w=new S(t.a);w.a<w.c.c.length;)if(d=u(J(w),10),je(Re(Q(d,(Te(),kS))))){for(++n,s=0,r=null,k=null,V=new S(d.j);V.a<V.c.c.length;)F=u(J(V),11),s+=F.e.c.length+F.g.c.length,F.e.c.length==1&&(r=u(Fe(F.e,0),17),k=r.c),F.g.c.length==1&&(r=u(Fe(F.g,0),17),k=r.d);if(s==1&&k.e.c.length+k.g.c.length==1&&!je(Re(Q(k.i,kS))))i5n(d,r,k,k.i),_C(w);else{for(gt=new le,H=new S(d.j);H.a<H.c.c.length;){for(F=u(J(H),11),M=new S(F.g);M.a<M.c.c.length;)C=u(J(M),17),C.d.g.c.length==0||(gt.c[gt.c.length]=C);for(h=new S(F.e);h.a<h.c.c.length;)o=u(J(h),17),o.c.e.c.length==0||(gt.c[gt.c.length]=o)}for(tt=new S(gt);tt.a<tt.c.c.length;)Y=u(J(tt),17),dw(Y,!0)}}e.n&&Yb(e,"Found "+n+" comment boxes"),or(e)}function I4n(t,e,n,r){var s,o,h,d,w,k,C,M,F,H,V,Y;if(F=Xt(ye(Q(t,(Te(),m7)))),H=Xt(ye(Q(t,y7))),M=Xt(ye(Q(t,Gy))),d=t.o,o=u(Fe(t.j,0),11),h=o.n,Y=cgn(o,M),!!Y){if(e.Hc((Qu(),tg)))switch(u(Q(t,(se(),oc)),61).g){case 1:Y.c=(d.a-Y.b)/2-h.a,Y.d=H;break;case 3:Y.c=(d.a-Y.b)/2-h.a,Y.d=-H-Y.a;break;case 2:n&&o.e.c.length==0&&o.g.c.length==0?(C=r?Y.a:u(Fe(o.f,0),70).o.b,Y.d=(d.b-C)/2-h.b):Y.d=d.b+H-h.b,Y.c=-F-Y.b;break;case 4:n&&o.e.c.length==0&&o.g.c.length==0?(C=r?Y.a:u(Fe(o.f,0),70).o.b,Y.d=(d.b-C)/2-h.b):Y.d=d.b+H-h.b,Y.c=F}else if(e.Hc(xb))switch(u(Q(t,(se(),oc)),61).g){case 1:case 3:Y.c=h.a+F;break;case 2:case 4:n&&!o.c?(C=r?Y.a:u(Fe(o.f,0),70).o.b,Y.d=(d.b-C)/2-h.b):Y.d=h.b+H}for(s=Y.d,k=new S(o.f);k.a<k.c.c.length;)w=u(J(k),70),V=w.n,V.a=Y.c,V.b=s,s+=w.o.b+M}}function D4n(){ri(fN,new wJ),ri(cU,new kJ),ri(dN,new Ok),ri(pLt,new SJ),ri(Ae,new Fk),ri(ot(Hu,1),new h9),ri(Bs,new LJ),ri(E6,new ax),ri(Ae,new h1),ri(Ae,new wB),ri(Ae,new mB),ri(ca,new yB),ri(Ae,new xB),ri(ph,new kB),ri(ph,new EB),ri(Ae,new jf),ri(XE,new hu),ri(Ae,new vJ),ri(Ae,new mJ),ri(Ae,new fu),ri(Ae,new s9),ri(Ae,new TB),ri(ot(Hu,1),new CB),ri(Ae,new sx),ri(Ae,new yJ),ri(ph,new Dk),ri(ph,new xJ),ri(Ae,new _B),ri(ja,new EJ),ri(Ae,new a9),ri(Tw,new SB),ri(Ae,new zL),ri(Ae,new o9),ri(Ae,new TJ),ri(Ae,new CJ),ri(ph,new qL),ri(ph,new c9),ri(Ae,new f1),ri(Ae,new _J),ri(Ae,new Nk),ri(Ae,new HL),ri(Ae,new Hb),ri(Ae,new u9),ri(Cw,new GL),ri(Ae,new $f),ri(Ae,new l9),ri(Ae,new d1),ri(Cw,new g1),ri(Tw,new AJ),ri(Ae,new A3),ri(ja,new Pk)}function kxt(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t;if(F=e.length,F>0&&(w=(Rr(0,e.length),e.charCodeAt(0)),w!=64)){if(w==37&&(M=e.lastIndexOf("%"),k=!1,M!=0&&(M==F-1||(k=(Rr(M+1,e.length),e.charCodeAt(M+1)==46))))){if(h=e.substr(1,M-1),_t=hn("%",h)?null:Ext(h),r=0,k)try{r=$l(e.substr(M+2),_a,vi)}catch(Bt){throw Bt=Wi(Bt),Et(Bt,127)?(d=Bt,rt(new F$(d))):rt(Bt)}for(tt=ryt(t.Wg());tt.Ob();)if(V=hz(tt),Et(V,510)&&(s=u(V,590),Lt=s.d,(_t==null?Lt==null:hn(_t,Lt))&&r--==0))return s;return null}if(C=e.lastIndexOf("."),H=C==-1?e:e.substr(0,C),n=0,C!=-1)try{n=$l(e.substr(C+1),_a,vi)}catch(Bt){if(Bt=Wi(Bt),Et(Bt,127))H=e;else throw rt(Bt)}for(H=hn("%",H)?null:Ext(H),Y=ryt(t.Wg());Y.Ob();)if(V=hz(Y),Et(V,191)&&(o=u(V,191),gt=o.ne(),(H==null?gt==null:hn(H,gt))&&n--==0))return o;return null}return Rle(t,e)}function O4n(t){var e,n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce,Se,We,Qe,Rn,zn;for(ce=new le,V=new S(t.b);V.a<V.c.c.length;)for(H=u(J(V),29),gt=new S(H.a);gt.a<gt.c.c.length;)if(Y=u(J(gt),10),Y.k==(Gn(),xs)&&Vs(Y,(se(),GG))){for(Lt=null,Bt=null,_t=null,Qe=new S(Y.j);Qe.a<Qe.c.c.length;)switch(We=u(J(Qe),11),We.j.g){case 4:Lt=We;break;case 2:Bt=We;break;default:_t=We}for(Yt=u(Fe(_t.g,0),17),C=new yR(Yt.a),k=new yo(_t.n),Li(k,Y.n),M=ei(C,0),XM(M,k),Se=BI(Yt.a),F=new yo(_t.n),Li(F,Y.n),hs(Se,F,Se.c.b,Se.c),Rn=u(Q(Y,GG),10),zn=u(Fe(Rn.j,0),11),w=u(D1(Lt.e,Pt(tlt,Fot,17,0,0,1)),474),r=w,o=0,d=r.length;o<d;++o)e=r[o],sa(e,zn),Ait(e.a,e.a.b,C);for(w=gd(Bt.g),n=w,s=0,h=n.length;s<h;++s)e=n[s],Da(e,zn),Ait(e.a,0,Se);Da(Yt,null),sa(Yt,null),ce.c[ce.c.length]=Y}for(tt=new S(ce);tt.a<tt.c.c.length;)Y=u(J(tt),10),ko(Y,null)}function phe(){phe=Z;var t,e,n;for(new kI(1,0),new kI(10,0),new kI(0,0),Tge=Pt(Cut,te,240,11,0,1),D2=Pt(mh,vd,25,100,15,1),fEt=ct(ot(ia,1),vo,25,15,[1,5,25,125,625,3125,15625,78125,390625,1953125,9765625,48828125,244140625,1220703125,6103515625,30517578125,152587890625,762939453125,3814697265625,19073486328125,95367431640625,476837158203125,0x878678326eac9]),dEt=Pt(Tr,Xr,25,fEt.length,15,1),gEt=ct(ot(ia,1),vo,25,15,[1,10,100,$g,1e4,oot,1e6,1e7,1e8,Nq,1e10,1e11,1e12,1e13,1e14,1e15,1e16]),pEt=Pt(Tr,Xr,25,gEt.length,15,1),bEt=Pt(Cut,te,240,11,0,1),t=0;t<bEt.length;t++)Tge[t]=new kI(t,0),bEt[t]=new kI(0,t),D2[t]=48;for(;t<D2.length;t++)D2[t]=48;for(n=0;n<dEt.length;n++)dEt[n]=Z4t(fEt[n]);for(e=0;e<pEt.length;e++)pEt[e]=Z4t(gEt[e]);bE()}function N4n(){function t(){this.obj=this.createObject()}return t.prototype.createObject=function(e){return Object.create(null)},t.prototype.get=function(e){return this.obj[e]},t.prototype.set=function(e,n){this.obj[e]=n},t.prototype[hot]=function(e){delete this.obj[e]},t.prototype.keys=function(){return Object.getOwnPropertyNames(this.obj)},t.prototype.entries=function(){var e=this.keys(),n=this,r=0;return{next:function(){if(r>=e.length)return{done:!0};var s=e[r++];return{value:[s,n.get(s)],done:!1}}}},Rvn()||(t.prototype.createObject=function(){return{}},t.prototype.get=function(e){return this.obj[":"+e]},t.prototype.set=function(e,n){this.obj[":"+e]=n},t.prototype[hot]=function(e){delete this.obj[":"+e]},t.prototype.keys=function(){var e=[];for(var n in this.obj)n.charCodeAt(0)==58&&e.push(n.substring(1));return e}),t}function P4n(t){ext();var e,n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt;if(t==null)return null;if(M=t.length*8,M==0)return"";for(d=M%24,H=M/24|0,F=d!=0?H+1:H,o=null,o=Pt(mh,vd,25,F*4,15,1),k=0,C=0,e=0,n=0,r=0,h=0,s=0,w=0;w<H;w++)e=t[s++],n=t[s++],r=t[s++],C=(n&15)<<24>>24,k=(e&3)<<24>>24,V=e&-128?(e>>2^192)<<24>>24:e>>2<<24>>24,Y=n&-128?(n>>4^240)<<24>>24:n>>4<<24>>24,tt=r&-128?(r>>6^252)<<24>>24:r>>6<<24>>24,o[h++]=rp[V],o[h++]=rp[Y|k<<4],o[h++]=rp[C<<2|tt],o[h++]=rp[r&63];return d==8?(e=t[s],k=(e&3)<<24>>24,V=e&-128?(e>>2^192)<<24>>24:e>>2<<24>>24,o[h++]=rp[V],o[h++]=rp[k<<4],o[h++]=61,o[h++]=61):d==16&&(e=t[s],n=t[s+1],C=(n&15)<<24>>24,k=(e&3)<<24>>24,V=e&-128?(e>>2^192)<<24>>24:e>>2<<24>>24,Y=n&-128?(n>>4^240)<<24>>24:n>>4<<24>>24,o[h++]=rp[V],o[h++]=rp[Y|k<<4],o[h++]=rp[C<<2],o[h++]=61),Ah(o,0,o.length)}function F4n(t,e){var n,r,s,o,h,d,w;if(t.e==0&&t.p>0&&(t.p=-(t.p-1)),t.p>_a&&nmt(e,t.p-nb),h=e.q.getDate(),nI(e,1),t.k>=0&&wrn(e,t.k),t.c>=0?nI(e,t.c):t.k>=0?(w=new Eyt(e.q.getFullYear()-nb,e.q.getMonth(),35),r=35-w.q.getDate(),nI(e,b.Math.min(r,h))):nI(e,h),t.f<0&&(t.f=e.q.getHours()),t.b>0&&t.f<12&&(t.f+=12),LXe(e,t.f==24&&t.g?0:t.f),t.j>=0&&Lsn(e,t.j),t.n>=0&&Wsn(e,t.n),t.i>=0&&HVt(e,Oa(Ca(eD(ku(e.q.getTime()),$g),$g),t.i)),t.a&&(s=new _R,nmt(s,s.q.getFullYear()-nb-80),get(ku(e.q.getTime()),ku(s.q.getTime()))&&nmt(e,s.q.getFullYear()-nb+100)),t.d>=0){if(t.c==-1)n=(7+t.d-e.q.getDay())%7,n>3&&(n-=7),d=e.q.getMonth(),nI(e,e.q.getDate()+n),e.q.getMonth()!=d&&nI(e,e.q.getDate()+(n>0?-7:7));else if(e.q.getDay()!=t.d)return!1}return t.o>_a&&(o=e.q.getTimezoneOffset(),HVt(e,Oa(ku(e.q.getTime()),(t.o-o)*60*$g))),!0}function bhe(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt;if(s=Q(e,(se(),_i)),!!Et(s,239)){for(V=u(s,33),Y=e.e,F=new yo(e.c),o=e.d,F.a+=o.b,F.b+=o.d,Bt=u(qe(V,(Te(),iV)),174),Nu(Bt,(cl(),VV))&&(H=u(qe(V,aCt),116),ept(H,o.a),mtt(H,o.d),npt(H,o.b),opt(H,o.c)),n=new le,C=new S(e.a);C.a<C.c.c.length;)for(w=u(J(C),10),Et(Q(w,_i),239)?q4n(w,F):Et(Q(w,_i),186)&&!Y&&(r=u(Q(w,_i),118),Lt=ole(e,w,r.g,r.f),m1(r,Lt.a,Lt.b)),gt=new S(w.j);gt.a<gt.c.c.length;)tt=u(J(gt),11),us(Ri(new Tn(null,new _n(tt.g,16)),new Ia(w)),new $r(n));if(Y)for(gt=new S(Y.j);gt.a<gt.c.c.length;)tt=u(J(gt),11),us(Ri(new Tn(null,new _n(tt.g,16)),new Ki(Y)),new Po(n));for(_t=u(qe(V,X0),218),d=new S(n);d.a<d.c.c.length;)h=u(J(d),17),e4n(h,_t,F);for(Ywn(e),k=new S(e.a);k.a<k.c.c.length;)w=u(J(k),10),M=w.e,M&&bhe(t,M)}}function vhe(t){Sv(t,new w2(rbt(mR(Ev(yv(kv(xv(new pg,ql),"ELK Force"),"Force-based algorithm provided by the Eclipse Layout Kernel. Implements methods that follow physical analogies by simulating forces that move the nodes into a balanced distribution. Currently the original Eades model and the Fruchterman - Reingold model are supported."),new B5),ql),ji((vE(),tU),ct(ot(eU,1),ae,237,0,[ZV]))))),xe(t,ql,jD,de(1)),xe(t,ql,ky,80),xe(t,ql,Oot,5),xe(t,ql,b6,BE),xe(t,ql,Hq,de(1)),xe(t,ql,P_,(Fn(),!0)),xe(t,ql,ww,g7t),xe(t,ql,$D,De(h7t)),xe(t,ql,Not,De(p7t)),xe(t,ql,Gq,!1),xe(t,ql,F_,De(d7t)),xe(t,ql,v6,De(tbe)),xe(t,ql,L4,De(Jpe)),xe(t,ql,RE,De(Zpe)),xe(t,ql,jE,De(nbe)),xe(t,ql,qq,De(f7t)),xe(t,ql,Iot,De(Vut)),xe(t,ql,c6t,De(iG)),xe(t,ql,Dot,De(Gut)),xe(t,ql,u6t,De(b7t))}function whe(t,e){var n,r,s,o,h,d,w,k,C,M,F,H;if(!u(u(Ai(t.r,e),21),84).dc()){if(h=u(go(t.b,e),124),w=h.i,d=h.n,C=Jst(t,e),r=w.b-d.b-d.c,s=h.a.a,o=w.c+d.b,H=t.w,(C==(c4(),mb)||C==JO)&&u(u(Ai(t.r,e),21),84).gc()==1&&(s=C==mb?s-2*t.w:s,C=XS),r<s&&!t.B.Hc((cl(),UV)))C==mb?(H+=(r-s)/(u(u(Ai(t.r,e),21),84).gc()+1),o+=H):H+=(r-s)/(u(u(Ai(t.r,e),21),84).gc()-1);else switch(r<s&&(s=C==mb?s-2*t.w:s,C=XS),C.g){case 3:o+=(r-s)/2;break;case 4:o+=r-s;break;case 0:n=(r-s)/(u(u(Ai(t.r,e),21),84).gc()+1),H+=b.Math.max(0,n),o+=H;break;case 1:n=(r-s)/(u(u(Ai(t.r,e),21),84).gc()-1),H+=b.Math.max(0,n)}for(F=u(u(Ai(t.r,e),21),84).Kc();F.Ob();)M=u(F.Pb(),111),M.e.a=o+M.d.b,M.e.b=(k=M.b,k.Xe((ci(),hl))?k.Hf()==(be(),Nn)?-k.rf().b-Xt(ye(k.We(hl))):Xt(ye(k.We(hl))):k.Hf()==(be(),Nn)?-k.rf().b:0),o+=M.d.b+M.b.rf().a+M.d.c+H}}function mhe(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V;if(!u(u(Ai(t.r,e),21),84).dc()){if(h=u(go(t.b,e),124),w=h.i,d=h.n,M=Jst(t,e),r=w.a-d.d-d.a,s=h.a.b,o=w.d+d.d,V=t.w,k=t.o.a,(M==(c4(),mb)||M==JO)&&u(u(Ai(t.r,e),21),84).gc()==1&&(s=M==mb?s-2*t.w:s,M=XS),r<s&&!t.B.Hc((cl(),UV)))M==mb?(V+=(r-s)/(u(u(Ai(t.r,e),21),84).gc()+1),o+=V):V+=(r-s)/(u(u(Ai(t.r,e),21),84).gc()-1);else switch(r<s&&(s=M==mb?s-2*t.w:s,M=XS),M.g){case 3:o+=(r-s)/2;break;case 4:o+=r-s;break;case 0:n=(r-s)/(u(u(Ai(t.r,e),21),84).gc()+1),V+=b.Math.max(0,n),o+=V;break;case 1:n=(r-s)/(u(u(Ai(t.r,e),21),84).gc()-1),V+=b.Math.max(0,n)}for(H=u(u(Ai(t.r,e),21),84).Kc();H.Ob();)F=u(H.Pb(),111),F.e.a=(C=F.b,C.Xe((ci(),hl))?C.Hf()==(be(),Bn)?-C.rf().a-Xt(ye(C.We(hl))):k+Xt(ye(C.We(hl))):C.Hf()==(be(),Bn)?-C.rf().a:k),F.e.b=o+F.d.d,o+=F.d.d+F.b.rf().b+F.d.a+V}}function B4n(t){var e,n,r,s,o,h,d,w,k,C,M,F,H,V,Y;for(t.n=Xt(ye(Q(t.g,(Te(),Bw)))),t.e=Xt(ye(Q(t.g,R2))),t.i=t.g.b.c.length,d=t.i-1,F=0,t.j=0,t.k=0,t.a=_1(Pt(ja,te,19,t.i,0,1)),t.b=_1(Pt(ca,te,333,t.i,7,1)),h=new S(t.g.b);h.a<h.c.c.length;){for(s=u(J(h),29),s.p=d,M=new S(s.a);M.a<M.c.c.length;)C=u(J(M),10),C.p=F,++F;--d}for(t.f=Pt(Tr,Xr,25,F,15,1),t.c=Xb(Tr,[te,Xr],[48,25],15,[F,3],2),t.o=new le,t.p=new le,e=0,t.d=0,o=new S(t.g.b);o.a<o.c.c.length;){for(s=u(J(o),29),d=s.p,r=0,Y=0,w=s.a.c.length,k=0,M=new S(s.a);M.a<M.c.c.length;)C=u(J(M),10),F=C.p,t.f[F]=C.c.p,k+=C.o.b+t.n,n=N0(new ar(lr(jo(C).a.Kc(),new z))),V=N0(new ar(lr(Ms(C).a.Kc(),new z))),t.c[F][0]=V-n,t.c[F][1]=n,t.c[F][2]=V,r+=n,Y+=V,n>0&&ue(t.p,C),ue(t.o,C);e-=r,H=w+e,k+=e*t.e,ah(t.a,d,de(H)),ah(t.b,d,k),t.j=b.Math.max(t.j,H),t.k=b.Math.max(t.k,k),t.d+=e,e+=Y}}function be(){be=Z;var t;Zo=new IM(O_,0),Nn=new IM(Rq,1),Hn=new IM(xot,2),mr=new IM(kot,3),Bn=new IM(Eot,4),G1=(vn(),new Qk((t=u(Hf(Xa),9),new rh(t,u(uf(t,t.length),9),0)))),Sf=Dg(ji(Nn,ct(ot(Xa,1),xc,61,0,[]))),vh=Dg(ji(Hn,ct(ot(Xa,1),xc,61,0,[]))),Wl=Dg(ji(mr,ct(ot(Xa,1),xc,61,0,[]))),qh=Dg(ji(Bn,ct(ot(Xa,1),xc,61,0,[]))),_u=Dg(ji(Nn,ct(ot(Xa,1),xc,61,0,[mr]))),uu=Dg(ji(Hn,ct(ot(Xa,1),xc,61,0,[Bn]))),Af=Dg(ji(Nn,ct(ot(Xa,1),xc,61,0,[Bn]))),tl=Dg(ji(Nn,ct(ot(Xa,1),xc,61,0,[Hn]))),Kl=Dg(ji(mr,ct(ot(Xa,1),xc,61,0,[Bn]))),wh=Dg(ji(Hn,ct(ot(Xa,1),xc,61,0,[mr]))),el=Dg(ji(Nn,ct(ot(Xa,1),xc,61,0,[Hn,Bn]))),Cu=Dg(ji(Hn,ct(ot(Xa,1),xc,61,0,[mr,Bn]))),Su=Dg(ji(Nn,ct(ot(Xa,1),xc,61,0,[mr,Bn]))),qu=Dg(ji(Nn,ct(ot(Xa,1),xc,61,0,[Hn,mr]))),Uc=Dg(ji(Nn,ct(ot(Xa,1),xc,61,0,[Hn,mr,Bn])))}function yhe(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t;if(e.b!=0){for(H=new Qi,d=null,V=null,r=ps(b.Math.floor(b.Math.log(e.b)*b.Math.LOG10E)+1),w=0,_t=ei(e,0);_t.b!=_t.d.c;)for(gt=u(ti(_t),86),Gt(V)!==Gt(Q(gt,(fc(),RS)))&&(V=Br(Q(gt,RS)),w=0),V!=null?d=V+zQt(w++,r):d=zQt(w++,r),Jt(gt,RS,d),tt=(s=ei(new Cp(gt).a.d,0),new bx(s));kR(tt.a);)Y=u(ti(tt.a),188).c,hs(H,Y,H.c.b,H.c),Jt(Y,RS,d);for(F=new Cr,h=0;h<d.length-r;h++)for(Lt=ei(e,0);Lt.b!=Lt.d.c;)gt=u(ti(Lt),86),k=Dl(Br(Q(gt,(fc(),RS))),0,h+1),n=(k==null?ec(Ao(F.f,null)):U9(F.g,k))!=null?u(k==null?ec(Ao(F.f,null)):U9(F.g,k),19).a+1:1,xo(F,k,de(n));for(M=new h2(new wg(F).a);M.b;)C=Yv(M),o=de(Jn(t.a,C.cd())!=null?u(Jn(t.a,C.cd()),19).a:0),xo(t.a,Br(C.cd()),de(u(C.dd(),19).a+o.a)),o=u(Jn(t.b,C.cd()),19),(!o||o.a<u(C.dd(),19).a)&&xo(t.b,Br(C.cd()),u(C.dd(),19));yhe(t,H)}}function R4n(t,e,n){var r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt;for(wr(n,"Interactive node layering",1),r=new le,H=new S(e.a);H.a<H.c.c.length;){for(M=u(J(H),10),k=M.n.a,w=k+M.o.a,w=b.Math.max(k+1,w),gt=new ha(r,0),s=null;gt.b<gt.d.gc();)if(Y=(Qn(gt.b<gt.d.gc()),u(gt.d.Xb(gt.c=gt.b++),569)),Y.c>=w){Qn(gt.b>0),gt.a.Xb(gt.c=--gt.b);break}else Y.a>k&&(s?(As(s.b,Y.b),s.a=b.Math.max(s.a,Y.a),El(gt)):(ue(Y.b,M),Y.c=b.Math.min(Y.c,k),Y.a=b.Math.max(Y.a,w),s=Y));s||(s=new sqt,s.c=k,s.a=w,Rm(gt,s),ue(s.b,M))}for(d=e.b,C=0,tt=new S(r);tt.a<tt.c.c.length;)for(Y=u(J(tt),569),o=new Ch(e),o.p=C++,d.c[d.c.length]=o,V=new S(Y.b);V.a<V.c.c.length;)M=u(J(V),10),ko(M,o),M.p=0;for(F=new S(e.a);F.a<F.c.c.length;)M=u(J(F),10),M.p==0&&nue(t,M,e);for(h=new ha(d,0);h.b<h.d.gc();)(Qn(h.b<h.d.gc()),u(h.d.Xb(h.c=h.b++),29)).a.c.length==0&&El(h);e.a.c=Pt(Xn,Ie,1,0,5,1),or(n)}function j4n(t,e,n){var r,s,o,h,d,w,k,C,M,F;if(e.e.c.length!=0&&n.e.c.length!=0){if(r=u(Fe(e.e,0),17).c.i,h=u(Fe(n.e,0),17).c.i,r==h)return du(u(Q(u(Fe(e.e,0),17),(se(),Tc)),19).a,u(Q(u(Fe(n.e,0),17),Tc),19).a);for(C=t.a,M=0,F=C.length;M<F;++M){if(k=C[M],k==r)return 1;if(k==h)return-1}}return e.g.c.length!=0&&n.g.c.length!=0?(o=u(Q(e,(se(),Flt)),10),w=u(Q(n,Flt),10),s=0,d=0,Vs(u(Fe(e.g,0),17),Tc)&&(s=u(Q(u(Fe(e.g,0),17),Tc),19).a),Vs(u(Fe(n.g,0),17),Tc)&&(d=u(Q(u(Fe(e.g,0),17),Tc),19).a),o&&o==w?je(Re(Q(u(Fe(e.g,0),17),$1)))&&!je(Re(Q(u(Fe(n.g,0),17),$1)))?1:!je(Re(Q(u(Fe(e.g,0),17),$1)))&&je(Re(Q(u(Fe(n.g,0),17),$1)))||s<d?-1:s>d?1:0:(t.b&&(t.b._b(o)&&(s=u(t.b.xc(o),19).a),t.b._b(w)&&(d=u(t.b.xc(w),19).a)),s<d?-1:s>d?1:0)):e.e.c.length!=0&&n.g.c.length!=0?1:-1}function $4n(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce,Se;for(wr(e,l1e,1),Y=new le,ce=new le,k=new S(t.b);k.a<k.c.c.length;)for(w=u(J(k),29),gt=-1,V=sI(w.a),M=V,F=0,H=M.length;F<H;++F)if(C=M[F],++gt,!!(C.k==(Gn(),Ds)&&H3(u(Q(C,(Te(),os)),98)))){for(Dx(u(Q(C,(Te(),os)),98))||O2n(C),Jt(C,(se(),Iw),C),Y.c=Pt(Xn,Ie,1,0,5,1),ce.c=Pt(Xn,Ie,1,0,5,1),n=new le,Bt=new Qi,lit(Bt,Rg(C,(be(),Nn))),Ohe(t,Bt,Y,ce,n),d=gt,Se=C,o=new S(Y);o.a<o.c.c.length;)r=u(J(o),10),oy(r,d,w),++gt,Jt(r,Iw,C),h=u(Fe(r.j,0),11),tt=u(Q(h,_i),11),je(Re(Q(tt,zlt)))||u(Q(r,I6),15).Fc(Se);for(_h(Bt),_t=Rg(C,mr).Kc();_t.Ob();)Lt=u(_t.Pb(),11),hs(Bt,Lt,Bt.a,Bt.a.a);for(Ohe(t,Bt,ce,null,n),Yt=C,s=new S(ce);s.a<s.c.c.length;)r=u(J(s),10),oy(r,++gt,w),Jt(r,Iw,C),h=u(Fe(r.j,0),11),tt=u(Q(h,_i),11),je(Re(Q(tt,zlt)))||u(Q(Yt,I6),15).Fc(r);n.c.length==0||Jt(C,WTt,n)}or(e)}function xhe(t){var e,n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce,Se,We,Qe,Rn,zn,hr,pi,Rs;for(M=u(Q(t,(Gp(),C6)),33),gt=vi,Lt=vi,Y=_a,tt=_a,Bt=new S(t.e);Bt.a<Bt.c.c.length;)_t=u(J(Bt),144),Qe=_t.d,Rn=_t.e,gt=b.Math.min(gt,Qe.a-Rn.a/2),Lt=b.Math.min(Lt,Qe.b-Rn.b/2),Y=b.Math.max(Y,Qe.a+Rn.a/2),tt=b.Math.max(tt,Qe.b+Rn.b/2);for(We=u(qe(M,(Zf(),ebe)),116),Se=new $e(We.b-gt,We.d-Lt),d=new S(t.e);d.a<d.c.c.length;)h=u(J(d),144),ce=Q(h,C6),Et(ce,239)&&(H=u(ce,33),Yt=Li(h.d,Se),m1(H,Yt.a-H.g/2,Yt.b-H.f/2));for(r=new S(t.c);r.a<r.c.c.length;)n=u(J(r),282),k=u(Q(n,C6),79),C=m4(k,!0,!0),zn=(pi=na(nc(n.d.d),n.c.d),hE(pi,n.c.e.a,n.c.e.b),Li(pi,n.c.d)),oj(C,zn.a,zn.b),e=(Rs=na(nc(n.c.d),n.d.d),hE(Rs,n.d.e.a,n.d.e.b),Li(Rs,n.d.d)),aj(C,e.a,e.b);for(o=new S(t.d);o.a<o.c.c.length;)s=u(J(o),447),F=u(Q(s,C6),137),V=Li(s.d,Se),m1(F,V.a,V.b);hr=Y-gt+(We.b+We.c),w=tt-Lt+(We.d+We.a),gw(M,hr,w,!1,!0)}function z4n(t){var e,n,r,s,o,h,d,w,k,C,M,F;for(n=null,w=null,s=u(Q(t.b,(Te(),Wlt)),376),s==(lI(),DO)&&(n=new le,w=new le),d=new S(t.d);d.a<d.c.c.length;)if(h=u(J(d),101),o=h.i,!!o)switch(h.e.g){case 0:e=u(FC(new Ex(h.b)),61),s==DO&&e==(be(),Nn)?n.c[n.c.length]=h:s==DO&&e==(be(),mr)?w.c[w.c.length]=h:_fn(h,e);break;case 1:k=h.a.d.j,C=h.c.d.j,k==(be(),Nn)?_g(h,Nn,(M1(),i7),h.a):C==Nn?_g(h,Nn,(M1(),s7),h.c):k==mr?_g(h,mr,(M1(),s7),h.a):C==mr&&_g(h,mr,(M1(),i7),h.c);break;case 2:case 3:r=h.b,Nu(r,(be(),Nn))?Nu(r,mr)?Nu(r,Bn)?Nu(r,Hn)||_g(h,Nn,(M1(),s7),h.c):_g(h,Nn,(M1(),i7),h.a):_g(h,Nn,(M1(),_6),null):_g(h,mr,(M1(),_6),null);break;case 4:M=h.a.d.j,F=h.a.d.j,M==(be(),Nn)||F==Nn?_g(h,mr,(M1(),_6),null):_g(h,Nn,(M1(),_6),null)}n&&(n.c.length==0||gle(n,(be(),Nn)),w.c.length==0||gle(w,(be(),mr)))}function q4n(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y;for(r=u(Q(t,(se(),_i)),33),V=u(Q(t,(Te(),XG)),19).a,o=u(Q(t,tV),19).a,bo(r,XG,de(V)),bo(r,tV,de(o)),yu(r,t.n.a+e.a),xu(r,t.n.b+e.b),(u(qe(r,F2),174).gc()!=0||t.e||Gt(Q(Fa(t),rV))===Gt((a_(),LS))&&uUt((sy(),(t.q?t.q:(vn(),vn(),a0))._b(Nw)?F=u(Q(t,Nw),197):F=u(Q(Fa(t),CS),197),F)))&&(Qv(r,t.o.a),Xv(r,t.o.b)),M=new S(t.j);M.a<M.c.c.length;)k=u(J(M),11),Y=Q(k,_i),Et(Y,186)&&(s=u(Y,118),m1(s,k.n.a,k.n.b),bo(s,v7,k.j));for(H=u(Q(t,Ow),174).gc()!=0,w=new S(t.b);w.a<w.c.c.length;)h=u(J(w),70),(H||u(Q(h,Ow),174).gc()!=0)&&(n=u(Q(h,_i),137),sj(n,h.o.a,h.o.b),m1(n,h.n.a,h.n.b));if(!TC(u(Q(t,qy),21)))for(C=new S(t.j);C.a<C.c.c.length;)for(k=u(J(C),11),d=new S(k.f);d.a<d.c.c.length;)h=u(J(d),70),n=u(Q(h,_i),137),Qv(n,h.o.a),Xv(n,h.o.b),m1(n,h.n.a,h.n.b)}function H4n(t){var e,n,r,s,o;switch(tI(t,Ode),(!t.b&&(t.b=new Cn(br,t,4,7)),t.b).i+(!t.c&&(t.c=new Cn(br,t,5,8)),t.c).i){case 0:throw rt(new Pn("The edge must have at least one source or target."));case 1:return(!t.b&&(t.b=new Cn(br,t,4,7)),t.b).i==0?ts(Mo(u(St((!t.c&&(t.c=new Cn(br,t,5,8)),t.c),0),82))):ts(Mo(u(St((!t.b&&(t.b=new Cn(br,t,4,7)),t.b),0),82)))}if((!t.b&&(t.b=new Cn(br,t,4,7)),t.b).i==1&&(!t.c&&(t.c=new Cn(br,t,5,8)),t.c).i==1){if(s=Mo(u(St((!t.b&&(t.b=new Cn(br,t,4,7)),t.b),0),82)),o=Mo(u(St((!t.c&&(t.c=new Cn(br,t,5,8)),t.c),0),82)),ts(s)==ts(o))return ts(s);if(s==ts(o))return s;if(o==ts(s))return o}for(r=Bp(L1(ct(ot(B1,1),Ie,20,0,[(!t.b&&(t.b=new Cn(br,t,4,7)),t.b),(!t.c&&(t.c=new Cn(br,t,5,8)),t.c)]))),e=Mo(u(Lr(r),82));zr(r);)if(n=Mo(u(Lr(r),82)),n!=e&&!Zm(n,e)){if(ts(n)==ts(e))e=ts(n);else if(e=Abn(e,n),!e)return null}return e}function G4n(t,e,n){var r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt;for(wr(n,"Polyline edge routing",1),tt=Xt(ye(Q(e,(Te(),q9t)))),H=Xt(ye(Q(e,Z4))),s=Xt(ye(Q(e,Q4))),r=b.Math.min(1,s/H),_t=0,w=0,e.b.c.length!=0&&(Bt=xce(u(Fe(e.b,0),29)),_t=.4*r*Bt),d=new ha(e.b,0);d.b<d.d.gc();){for(h=(Qn(d.b<d.d.gc()),u(d.d.Xb(d.c=d.b++),29)),o=ej(h,NO),o&&_t>0&&(_t-=H),fxt(h,_t),C=0,F=new S(h.a);F.a<F.c.c.length;){for(M=u(J(F),10),k=0,Y=new ar(lr(Ms(M).a.Kc(),new z));zr(Y);)V=u(Lr(Y),17),gt=T1(V.c).b,Lt=T1(V.d).b,h==V.d.i.c&&!Va(V)&&(gpn(V,_t,.4*r*b.Math.abs(gt-Lt)),V.c.j==(be(),Bn)&&(gt=0,Lt=0)),k=b.Math.max(k,b.Math.abs(Lt-gt));switch(M.k.g){case 0:case 4:case 1:case 3:case 5:l3n(t,M,_t,tt)}C=b.Math.max(C,k)}d.b<d.d.gc()&&(Bt=xce((Qn(d.b<d.d.gc()),u(d.d.Xb(d.c=d.b++),29))),C=b.Math.max(C,Bt),Qn(d.b>0),d.a.Xb(d.c=--d.b)),w=.4*r*C,!o&&d.b<d.d.gc()&&(w+=H),_t+=h.c.a+w}t.a.a.$b(),e.f.a=_t,or(n)}function V4n(t){var e,n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt;for(C=new Cr,w=new Hv,r=new S(t.a.a.b);r.a<r.c.c.length;)if(e=u(J(r),57),k=Z3(e),k)su(C.f,k,e);else if(Lt=Hx(e),Lt)for(o=new S(Lt.k);o.a<o.c.c.length;)s=u(J(o),17),ln(w,s,e);for(n=new S(t.a.a.b);n.a<n.c.c.length;)if(e=u(J(n),57),k=Z3(e),k){for(d=new ar(lr(Ms(k).a.Kc(),new z));zr(d);)if(h=u(Lr(d),17),!Va(h)&&(V=h.c,gt=h.d,!((be(),_u).Hc(h.c.j)&&_u.Hc(h.d.j)))){if(Y=u(Jn(C,h.d.i),57),vf(of(af(cf(sf(new Eh,0),100),t.c[e.a.d]),t.c[Y.a.d])),V.j==Bn&&SYt((Bu(),V))){for(F=u(Ai(w,h),21).Kc();F.Ob();)if(M=u(F.Pb(),57),M.d.c<e.d.c){if(H=t.c[M.a.d],tt=t.c[e.a.d],H==tt)continue;vf(of(af(cf(sf(new Eh,1),100),H),tt))}}if(gt.j==Hn&&_Yt((Bu(),gt))){for(F=u(Ai(w,h),21).Kc();F.Ob();)if(M=u(F.Pb(),57),M.d.c>e.d.c){if(H=t.c[e.a.d],tt=t.c[M.a.d],H==tt)continue;vf(of(af(cf(sf(new Eh,1),100),H),tt))}}}}}function Ext(t){Tat();var e,n,r,s,o,h,d,w;if(t==null)return null;if(s=cd(t,Eu(37)),s<0)return t;for(w=new Il(t.substr(0,s)),e=Pt(Hu,N4,25,4,15,1),d=0,r=0,h=t.length;s<h;s++)if(Rr(s,t.length),t.charCodeAt(s)==37&&t.length>s+2&&bit((Rr(s+1,t.length),t.charCodeAt(s+1)),WAt,KAt)&&bit((Rr(s+2,t.length),t.charCodeAt(s+2)),WAt,KAt))if(n=dtn((Rr(s+1,t.length),t.charCodeAt(s+1)),(Rr(s+2,t.length),t.charCodeAt(s+2))),s+=2,r>0?(n&192)==128?e[d++]=n<<24>>24:r=0:n>=128&&((n&224)==192?(e[d++]=n<<24>>24,r=2):(n&240)==224?(e[d++]=n<<24>>24,r=3):(n&248)==240&&(e[d++]=n<<24>>24,r=4)),r>0){if(d==r){switch(d){case 2:{Rp(w,((e[0]&31)<<6|e[1]&63)&ms);break}case 3:{Rp(w,((e[0]&15)<<12|(e[1]&63)<<6|e[2]&63)&ms);break}}d=0,r=0}}else{for(o=0;o<d;++o)Rp(w,e[o]&ms);d=0,w.a+=String.fromCharCode(n)}else{for(o=0;o<d;++o)Rp(w,e[o]&ms);d=0,Rp(w,(Rr(s,t.length),t.charCodeAt(s)))}return w.a}function khe(t,e,n,r,s){var o,h,d;if(Hte(t,e),h=e[0],o=ba(n.c,0),d=-1,Lyt(n))if(r>0){if(h+r>t.length)return!1;d=rq(t.substr(0,h+r),e)}else d=rq(t,e);switch(o){case 71:return d=p4(t,h,ct(ot(Ae,1),te,2,6,[nfe,rfe]),e),s.e=d,!0;case 77:return Svn(t,e,s,d,h);case 76:return Avn(t,e,s,d,h);case 69:return mgn(t,e,h,s);case 99:return ygn(t,e,h,s);case 97:return d=p4(t,h,ct(ot(Ae,1),te,2,6,["AM","PM"]),e),s.b=d,!0;case 121:return Lvn(t,e,h,d,n,s);case 100:return d<=0?!1:(s.c=d,!0);case 83:return d<0?!1:Oln(d,h,e[0],s);case 104:d==12&&(d=0);case 75:case 72:return d<0?!1:(s.f=d,s.g=!1,!0);case 107:return d<0?!1:(s.f=d,s.g=!0,!0);case 109:return d<0?!1:(s.j=d,!0);case 115:return d<0?!1:(s.n=d,!0);case 90:if(h<t.length&&(Rr(h,t.length),t.charCodeAt(h)==90))return++e[0],s.o=0,!0;case 122:case 118:return Gdn(t,h,e,s);default:return!1}}function U4n(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce;if(F=u(u(Ai(t.r,e),21),84),e==(be(),Hn)||e==Bn){ghe(t,e);return}for(o=e==Nn?(tw(),sO):(tw(),aO),Bt=e==Nn?(wu(),e1):(wu(),yf),n=u(go(t.b,e),124),r=n.i,s=r.c+r4(ct(ot(ia,1),vo,25,15,[n.n.b,t.C.b,t.k])),gt=r.c+r.b-r4(ct(ot(ia,1),vo,25,15,[n.n.c,t.C.c,t.k])),h=ebt(mvt(o),t.t),Lt=e==Nn?Ts:ss,M=F.Kc();M.Ob();)k=u(M.Pb(),111),!(!k.c||k.c.d.c.length<=0)&&(tt=k.b.rf(),Y=k.e,H=k.c,V=H.i,V.b=(w=H.n,H.e.a+w.b+w.c),V.a=(d=H.n,H.e.b+d.d+d.a),tI(Bt,Yxt),H.f=Bt,Uf(H,(Xu(),mf)),V.c=Y.a-(V.b-tt.a)/2,Yt=b.Math.min(s,Y.a),ce=b.Math.max(gt,Y.a+tt.a),V.c<Yt?V.c=Yt:V.c+V.b>ce&&(V.c=ce-V.b),ue(h.d,new Dnt(V,Jyt(h,V))),Lt=e==Nn?b.Math.max(Lt,Y.b+k.b.rf().b):b.Math.min(Lt,Y.b));for(Lt+=e==Nn?t.t:-t.t,_t=p3t((h.e=Lt,h)),_t>0&&(u(go(t.b,e),124).a.b=_t),C=F.Kc();C.Ob();)k=u(C.Pb(),111),!(!k.c||k.c.d.c.length<=0)&&(V=k.c.i,V.c-=k.e.a,V.d-=k.e.b)}function W4n(t){var e,n,r,s,o,h,d,w,k,C,M,F,H;for(e=new Cr,w=new er(t);w.e!=w.i.gc();){for(d=u(dr(w),33),n=new qs,ki(qut,d,n),H=new dm,s=u(Pl(new Tn(null,new Fv(new ar(lr(fD(d).a.Kc(),new z)))),fYt(H,i2(new _e,new we,new nr,ct(ot(ll,1),ae,132,0,[(I1(),Gl)])))),83),Pee(n,u(s.xc((Fn(),!0)),14),new pk),r=u(Pl(Ri(u(s.xc(!1),15).Lc(),new x3),i2(new _e,new we,new nr,ct(ot(ll,1),ae,132,0,[Gl]))),15),h=r.Kc();h.Ob();)o=u(h.Pb(),79),F=xae(o),F&&(k=u(ec(Ao(e.f,F)),21),k||(k=zce(F),su(e.f,F,k)),Ua(n,k));for(s=u(Pl(new Tn(null,new Fv(new ar(lr(G0(d).a.Kc(),new z)))),fYt(H,i2(new _e,new we,new nr,ct(ot(ll,1),ae,132,0,[Gl])))),83),Pee(n,u(s.xc(!0),14),new Ml),r=u(Pl(Ri(u(s.xc(!1),15).Lc(),new T0),i2(new _e,new we,new nr,ct(ot(ll,1),ae,132,0,[Gl]))),15),M=r.Kc();M.Ob();)C=u(M.Pb(),79),F=kae(C),F&&(k=u(ec(Ao(e.f,F)),21),k||(k=zce(F),su(e.f,F,k)),Ua(n,k))}}function K4n(t,e){wat();var n,r,s,o,h,d,w,k,C,M,F,H,V,Y;if(w=yc(t,0)<0,w&&(t=O8(t)),yc(t,0)==0)switch(e){case 0:return"0";case 1:return DE;case 2:return"0.00";case 3:return"0.000";case 4:return"0.0000";case 5:return"0.00000";case 6:return"0.000000";default:return H=new _p,e<0?H.a+="0E+":H.a+="0E",H.a+=e==_a?"2147483648":""+-e,H.a}C=18,M=Pt(mh,vd,25,C+1,15,1),n=C,Y=t;do k=Y,Y=eD(Y,10),M[--n]=Sr(Oa(48,Yp(k,Ca(Y,10))))&ms;while(yc(Y,0)!=0);if(s=Yp(Yp(Yp(C,n),e),1),e==0)return w&&(M[--n]=45),Ah(M,n,C-n);if(e>0&&yc(s,-6)>=0){if(yc(s,0)>=0){for(o=n+Sr(s),d=C-1;d>=o;d--)M[d+1]=M[d];return M[++o]=46,w&&(M[--n]=45),Ah(M,n,C-n+1)}for(h=2;get(h,Oa(O8(s),1));h++)M[--n]=48;return M[--n]=46,M[--n]=48,w&&(M[--n]=45),Ah(M,n,C-n)}return V=n+1,r=C,F=new Lm,w&&(F.a+="-"),r-V>=1?(Rp(F,M[n]),F.a+=".",F.a+=Ah(M,n+1,C-n-1)):F.a+=Ah(M,n,C-n),F.a+="E",yc(s,0)>0&&(F.a+="+"),F.a+=""+EC(s),F.a}function Y4n(t,e,n){var r,s,o,h,d,w,k,C,M,F,H;if(t.e.a.$b(),t.f.a.$b(),t.c.c=Pt(Xn,Ie,1,0,5,1),t.i.c=Pt(Xn,Ie,1,0,5,1),t.g.a.$b(),e)for(h=new S(e.a);h.a<h.c.c.length;)for(o=u(J(h),10),M=Rg(o,(be(),Hn)).Kc();M.Ob();)for(C=u(M.Pb(),11),Ns(t.e,C),s=new S(C.g);s.a<s.c.c.length;)r=u(J(s),17),!Va(r)&&(ue(t.c,r),Wie(t,r),d=r.c.i.k,(d==(Gn(),Ds)||d==Hc||d==xs||d==j1)&&ue(t.j,r),H=r.d,F=H.i.c,F==n?Ns(t.f,H):F==e?Ns(t.e,H):vu(t.c,r));if(n)for(h=new S(n.a);h.a<h.c.c.length;){for(o=u(J(h),10),k=new S(o.j);k.a<k.c.c.length;)for(w=u(J(k),11),s=new S(w.g);s.a<s.c.c.length;)r=u(J(s),17),Va(r)&&Ns(t.g,r);for(M=Rg(o,(be(),Bn)).Kc();M.Ob();)for(C=u(M.Pb(),11),Ns(t.f,C),s=new S(C.g);s.a<s.c.c.length;)r=u(J(s),17),!Va(r)&&(ue(t.c,r),Wie(t,r),d=r.c.i.k,(d==(Gn(),Ds)||d==Hc||d==xs||d==j1)&&ue(t.j,r),H=r.d,F=H.i.c,F==n?Ns(t.f,H):F==e?Ns(t.e,H):vu(t.c,r))}}function gw(t,e,n,r,s){var o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce;if(tt=new $e(t.g,t.f),Y=G4t(t),Y.a=b.Math.max(Y.a,e),Y.b=b.Math.max(Y.b,n),ce=Y.a/tt.a,C=Y.b/tt.b,Bt=Y.a-tt.a,w=Y.b-tt.b,r)for(h=ts(t)?u(qe(ts(t),(ci(),jw)),103):u(qe(t,(ci(),jw)),103),d=Gt(qe(t,(ci(),US)))===Gt((oa(),Vc)),Lt=new er((!t.c&&(t.c=new he(fl,t,9,9)),t.c));Lt.e!=Lt.i.gc();)switch(gt=u(dr(Lt),118),_t=u(qe(gt,o5),61),_t==(be(),Zo)&&(_t=nxt(gt,h),bo(gt,o5,_t)),_t.g){case 1:d||yu(gt,gt.i*ce);break;case 2:yu(gt,gt.i+Bt),d||xu(gt,gt.j*C);break;case 3:d||yu(gt,gt.i*ce),xu(gt,gt.j+w);break;case 4:d||xu(gt,gt.j*C)}if(sj(t,Y.a,Y.b),s)for(F=new er((!t.n&&(t.n=new he(qo,t,1,7)),t.n));F.e!=F.i.gc();)M=u(dr(F),137),H=M.i+M.g/2,V=M.j+M.f/2,Yt=H/tt.a,k=V/tt.b,Yt+k>=1&&(Yt-k>0&&V>=0?(yu(M,M.i+Bt),xu(M,M.j+w*k)):Yt-k<0&&H>=0&&(yu(M,M.i+Bt*Yt),xu(M,M.j+w)));return bo(t,(ci(),z2),(_l(),o=u(Hf(tA),9),new rh(o,u(uf(o,o.length),9),0))),new $e(ce,C)}function Ehe(t){var e,n,r,s,o,h,d,w,k,C,M,F,H,V;if(H=ts(Mo(u(St((!t.b&&(t.b=new Cn(br,t,4,7)),t.b),0),82))),V=ts(Mo(u(St((!t.c&&(t.c=new Cn(br,t,5,8)),t.c),0),82))),M=H==V,d=new Ta,e=u(qe(t,(bz(),mAt)),74),e&&e.b>=2){if((!t.a&&(t.a=new he(Zi,t,6,6)),t.a).i==0)n=(Tv(),s=new rd,s),Mr((!t.a&&(t.a=new he(Zi,t,6,6)),t.a),n);else if((!t.a&&(t.a=new he(Zi,t,6,6)),t.a).i>1)for(F=new Lx((!t.a&&(t.a=new he(Zi,t,6,6)),t.a));F.e!=F.i.gc();)u_(F);yD(e,u(St((!t.a&&(t.a=new he(Zi,t,6,6)),t.a),0),202))}if(M)for(r=new er((!t.a&&(t.a=new he(Zi,t,6,6)),t.a));r.e!=r.i.gc();)for(n=u(dr(r),202),k=new er((!n.a&&(n.a=new Ss(Hh,n,5)),n.a));k.e!=k.i.gc();)w=u(dr(k),469),d.a=b.Math.max(d.a,w.a),d.b=b.Math.max(d.b,w.b);for(h=new er((!t.n&&(t.n=new he(qo,t,1,7)),t.n));h.e!=h.i.gc();)o=u(dr(h),137),C=u(qe(o,KS),8),C&&m1(o,C.a,C.b),M&&(d.a=b.Math.max(d.a,o.i+o.g),d.b=b.Math.max(d.b,o.j+o.f));return d}function X4n(t,e,n){var r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce,Se,We;for(_t=e.c.length,s=new x4(t.a,n,null,null),We=Pt(ia,vo,25,_t,15,1),Y=Pt(ia,vo,25,_t,15,1),V=Pt(ia,vo,25,_t,15,1),tt=0,d=0;d<_t;d++)Y[d]=vi,V[d]=_a;for(w=0;w<_t;w++)for(r=(An(w,e.c.length),u(e.c[w],180)),We[w]=Wst(r),We[tt]>We[w]&&(tt=w),M=new S(t.a.b);M.a<M.c.c.length;)for(C=u(J(M),29),Lt=new S(C.a);Lt.a<Lt.c.c.length;)gt=u(J(Lt),10),ce=Xt(r.p[gt.p])+Xt(r.d[gt.p]),Y[w]=b.Math.min(Y[w],ce),V[w]=b.Math.max(V[w],ce+gt.o.b);for(Se=Pt(ia,vo,25,_t,15,1),k=0;k<_t;k++)(An(k,e.c.length),u(e.c[k],180)).o==(E1(),j2)?Se[k]=Y[tt]-Y[k]:Se[k]=V[tt]-V[k];for(o=Pt(ia,vo,25,_t,15,1),H=new S(t.a.b);H.a<H.c.c.length;)for(F=u(J(H),29),Yt=new S(F.a);Yt.a<Yt.c.c.length;){for(Bt=u(J(Yt),10),h=0;h<_t;h++)o[h]=Xt((An(h,e.c.length),u(e.c[h],180)).p[Bt.p])+Xt((An(h,e.c.length),u(e.c[h],180)).d[Bt.p])+Se[h];o.sort(wee(xt.prototype.te,xt,[])),s.p[Bt.p]=(o[1]+o[2])/2,s.d[Bt.p]=0}return s}function Q4n(t,e,n){var r,s,o,h,d;switch(r=e.i,o=t.i.o,s=t.i.d,d=t.n,h=Ko(ct(ot(Us,1),te,8,0,[d,t.a])),t.j.g){case 1:ld(e,(wu(),yf)),r.d=-s.d-n-r.a,u(u(Fe(e.d,0),181).We((se(),D6)),285)==(jl(),u0)?(Uf(e,(Xu(),mf)),r.c=h.a-Xt(ye(Q(t,W4)))-n-r.b):(Uf(e,(Xu(),Sd)),r.c=h.a+Xt(ye(Q(t,W4)))+n);break;case 2:Uf(e,(Xu(),Sd)),r.c=o.a+s.c+n,u(u(Fe(e.d,0),181).We((se(),D6)),285)==(jl(),u0)?(ld(e,(wu(),yf)),r.d=h.b-Xt(ye(Q(t,W4)))-n-r.a):(ld(e,(wu(),e1)),r.d=h.b+Xt(ye(Q(t,W4)))+n);break;case 3:ld(e,(wu(),e1)),r.d=o.b+s.a+n,u(u(Fe(e.d,0),181).We((se(),D6)),285)==(jl(),u0)?(Uf(e,(Xu(),mf)),r.c=h.a-Xt(ye(Q(t,W4)))-n-r.b):(Uf(e,(Xu(),Sd)),r.c=h.a+Xt(ye(Q(t,W4)))+n);break;case 4:Uf(e,(Xu(),mf)),r.c=-s.b-n-r.b,u(u(Fe(e.d,0),181).We((se(),D6)),285)==(jl(),u0)?(ld(e,(wu(),yf)),r.d=h.b-Xt(ye(Q(t,W4)))-n-r.a):(ld(e,(wu(),e1)),r.d=h.b+Xt(ye(Q(t,W4)))+n)}}function Z4n(t,e,n,r,s,o,h){var d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce,Se,We,Qe,Rn,zn,hr,pi,Rs;for(H=0,Rn=0,w=new S(t);w.a<w.c.c.length;)d=u(J(w),33),ahe(d),H=b.Math.max(H,d.g),Rn+=d.g*d.f;for(V=Rn/t.c.length,Qe=t1n(t,V),Rn+=t.c.length*Qe,H=b.Math.max(H,b.Math.sqrt(Rn*h))+n.b,pi=n.b,Rs=n.d,F=0,C=n.b+n.c,We=new Qi,ni(We,de(0)),ce=new Qi,k=new ha(t,0);k.b<k.d.gc();)d=(Qn(k.b<k.d.gc()),u(k.d.Xb(k.c=k.b++),33)),hr=d.g,M=d.f,pi+hr>H&&(o&&(Kb(ce,F),Kb(We,de(k.b-1))),pi=n.b,Rs+=F+e,F=0,C=b.Math.max(C,n.b+n.c+hr)),yu(d,pi),xu(d,Rs),C=b.Math.max(C,pi+hr+n.c),F=b.Math.max(F,M),pi+=hr+e;if(C=b.Math.max(C,r),zn=Rs+F+n.a,zn<s&&(F+=s-zn,zn=s),o)for(pi=n.b,k=new ha(t,0),Kb(We,de(t.c.length)),Se=ei(We,0),gt=u(ti(Se),19).a,Kb(ce,F),Yt=ei(ce,0),Bt=0;k.b<k.d.gc();)k.b==gt&&(pi=n.b,Bt=Xt(ye(ti(Yt))),gt=u(ti(Se),19).a),d=(Qn(k.b<k.d.gc()),u(k.d.Xb(k.c=k.b++),33)),Lt=d.f,Xv(d,Bt),Y=Bt,k.b==gt&&(tt=C-pi-n.c,_t=d.g,Qv(d,tt),roe(d,new $e(tt,Y),new $e(_t,Lt))),pi+=d.g+e;return new $e(C,zn)}function J4n(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce,Se,We,Qe;for(wr(e,"Compound graph postprocessor",1),n=je(Re(Q(t,(Te(),nht)))),d=u(Q(t,(se(),XTt)),224),C=new qs,gt=d.ec().Kc();gt.Ob();){for(tt=u(gt.Pb(),17),h=new Pu(d.cc(tt)),vn(),Xs(h,new Si(t)),Yt=Pon((An(0,h.c.length),u(h.c[0],243))),Se=fne(u(Fe(h,h.c.length-1),243)),_t=Yt.i,V8(Se.i,_t)?Lt=_t.e:Lt=Fa(_t),M=Rhn(tt,h),_h(tt.a),F=null,o=new S(h);o.a<o.c.c.length;)s=u(J(o),243),Y=new Ta,z4t(Y,s.a,Lt),H=s.b,r=new Du,Ait(r,0,H.a),Jm(r,Y),Bt=new yo(T1(H.c)),ce=new yo(T1(H.d)),Li(Bt,Y),Li(ce,Y),F&&(r.b==0?V=ce:V=(Qn(r.b!=0),u(r.a.a.c,8)),We=b.Math.abs(F.a-V.a)>yd,Qe=b.Math.abs(F.b-V.b)>yd,(!n&&We&&Qe||n&&(We||Qe))&&ni(tt.a,Bt)),Ua(tt.a,r),r.b==0?F=Bt:F=(Qn(r.b!=0),u(r.c.b.c,8)),gcn(H,M,Y),fne(s)==Se&&(Fa(Se.i)!=s.a&&(Y=new Ta,z4t(Y,Fa(Se.i),Lt)),Jt(tt,$lt,Y)),R0n(H,tt,Lt),C.a.zc(H,C);Da(tt,Yt),sa(tt,Se)}for(k=C.a.ec().Kc();k.Ob();)w=u(k.Pb(),17),Da(w,null),sa(w,null);or(e)}function The(t){var e,n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt;if(t.gc()==1)return u(t.Xb(0),231);if(t.gc()<=0)return new _$;for(s=t.Kc();s.Ob();){for(n=u(s.Pb(),231),V=0,C=vi,M=vi,w=_a,k=_a,H=new S(n.e);H.a<H.c.c.length;)F=u(J(H),144),V+=u(Q(F,(Zf(),t7)),19).a,C=b.Math.min(C,F.d.a-F.e.a/2),M=b.Math.min(M,F.d.b-F.e.b/2),w=b.Math.max(w,F.d.a+F.e.a/2),k=b.Math.max(k,F.d.b+F.e.b/2);Jt(n,(Zf(),t7),de(V)),Jt(n,(Gp(),lS),new $e(C,M)),Jt(n,dO,new $e(w,k))}for(vn(),t.ad(new jb),Y=new _$,Lo(Y,u(t.Xb(0),94)),d=0,Lt=0,o=t.Kc();o.Ob();)n=u(o.Pb(),231),tt=na(nc(u(Q(n,(Gp(),dO)),8)),u(Q(n,lS),8)),d=b.Math.max(d,tt.a),Lt+=tt.a*tt.b;for(d=b.Math.max(d,b.Math.sqrt(Lt)*Xt(ye(Q(Y,(Zf(),Xpe))))),gt=Xt(ye(Q(Y,sG))),_t=0,Bt=0,h=0,e=gt,r=t.Kc();r.Ob();)n=u(r.Pb(),231),tt=na(nc(u(Q(n,(Gp(),dO)),8)),u(Q(n,lS),8)),_t+tt.a>d&&(_t=0,Bt+=h+gt,h=0),Fwn(Y,n,_t,Bt),e=b.Math.max(e,_t+tt.a),h=b.Math.max(h,tt.b),_t+=tt.a+gt;return Y}function Che(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V;switch(C=new Du,t.a.g){case 3:F=u(Q(e.e,(se(),N2)),15),H=u(Q(e.j,N2),15),V=u(Q(e.f,N2),15),n=u(Q(e.e,X4),15),r=u(Q(e.j,X4),15),s=u(Q(e.f,X4),15),h=new le,As(h,F),H.Jc(new QX),As(h,Et(H,152)?Vx(u(H,152)):Et(H,131)?u(H,131).a:Et(H,54)?new mv(H):new Mm(H)),As(h,V),o=new le,As(o,n),As(o,Et(r,152)?Vx(u(r,152)):Et(r,131)?u(r,131).a:Et(r,54)?new mv(r):new Mm(r)),As(o,s),Jt(e.f,N2,h),Jt(e.f,X4,o),Jt(e.f,i9t,e.f),Jt(e.e,N2,null),Jt(e.e,X4,null),Jt(e.j,N2,null),Jt(e.j,X4,null);break;case 1:Ua(C,e.e.a),ni(C,e.i.n),Ua(C,a2(e.j.a)),ni(C,e.a.n),Ua(C,e.f.a);break;default:Ua(C,e.e.a),Ua(C,a2(e.j.a)),Ua(C,e.f.a)}_h(e.f.a),Ua(e.f.a,C),Da(e.f,e.e.c),d=u(Q(e.e,(Te(),_o)),74),k=u(Q(e.j,_o),74),w=u(Q(e.f,_o),74),(d||k||w)&&(M=new Du,lwt(M,w),lwt(M,k),lwt(M,d),Jt(e.f,_o,M)),Da(e.j,null),sa(e.j,null),Da(e.e,null),sa(e.e,null),ko(e.a,null),ko(e.i,null),e.g&&Che(t,e.g)}function t5n(t){ext();var e,n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt;if(t==null||(o=R$(t),V=zun(o),V%4!=0))return null;if(Y=V/4|0,Y==0)return Pt(Hu,N4,25,0,15,1);for(M=null,e=0,n=0,r=0,s=0,h=0,d=0,w=0,k=0,H=0,F=0,C=0,M=Pt(Hu,N4,25,Y*3,15,1);H<Y-1;H++){if(!dM(h=o[C++])||!dM(d=o[C++])||!dM(w=o[C++])||!dM(k=o[C++]))return null;e=U1[h],n=U1[d],r=U1[w],s=U1[k],M[F++]=(e<<2|n>>4)<<24>>24,M[F++]=((n&15)<<4|r>>2&15)<<24>>24,M[F++]=(r<<6|s)<<24>>24}return!dM(h=o[C++])||!dM(d=o[C++])?null:(e=U1[h],n=U1[d],w=o[C++],k=o[C++],U1[w]==-1||U1[k]==-1?w==61&&k==61?n&15?null:(tt=Pt(Hu,N4,25,H*3+1,15,1),Ic(M,0,tt,0,H*3),tt[F]=(e<<2|n>>4)<<24>>24,tt):w!=61&&k==61?(r=U1[w],r&3?null:(tt=Pt(Hu,N4,25,H*3+2,15,1),Ic(M,0,tt,0,H*3),tt[F++]=(e<<2|n>>4)<<24>>24,tt[F]=((n&15)<<4|r>>2&15)<<24>>24,tt)):null:(r=U1[w],s=U1[k],M[F++]=(e<<2|n>>4)<<24>>24,M[F++]=((n&15)<<4|r>>2&15)<<24>>24,M[F++]=(r<<6|s)<<24>>24,M))}function e5n(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt;for(wr(e,l1e,1),V=u(Q(t,(Te(),X0)),218),s=new S(t.b);s.a<s.c.c.length;)for(r=u(J(s),29),k=sI(r.a),h=k,d=0,w=h.length;d<w;++d)if(o=h[d],o.k==(Gn(),Hc)){if(V==(q0(),H6))for(M=new S(o.j);M.a<M.c.c.length;)C=u(J(M),11),C.e.c.length==0||yhn(C),C.g.c.length==0||xhn(C);else if(Et(Q(o,(se(),_i)),17))tt=u(Q(o,_i),17),gt=u(Rg(o,(be(),Bn)).Kc().Pb(),11),Lt=u(Rg(o,Hn).Kc().Pb(),11),_t=u(Q(gt,_i),11),Bt=u(Q(Lt,_i),11),Da(tt,Bt),sa(tt,_t),Yt=new yo(Lt.i.n),Yt.a=Ko(ct(ot(Us,1),te,8,0,[Bt.i.n,Bt.n,Bt.a])).a,ni(tt.a,Yt),Yt=new yo(gt.i.n),Yt.a=Ko(ct(ot(Us,1),te,8,0,[_t.i.n,_t.n,_t.a])).a,ni(tt.a,Yt);else{if(o.j.c.length>=2){for(Y=!0,F=new S(o.j),n=u(J(F),11),H=null;F.a<F.c.c.length;)if(H=n,n=u(J(F),11),!yi(Q(H,_i),Q(n,_i))){Y=!1;break}}else Y=!1;for(M=new S(o.j);M.a<M.c.c.length;)C=u(J(M),11),C.e.c.length==0||K2n(C,Y),C.g.c.length==0||Y2n(C,Y)}ko(o,null)}or(e)}function _he(t,e,n){var r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce,Se,We;return _t=t.c[(An(0,e.c.length),u(e.c[0],17)).p],Se=t.c[(An(1,e.c.length),u(e.c[1],17)).p],_t.a.e.e-_t.a.a-(_t.b.e.e-_t.b.a)==0&&Se.a.e.e-Se.a.a-(Se.b.e.e-Se.b.a)==0||(gt=_t.b.e.f,!Et(gt,10))?!1:(tt=u(gt,10),Yt=t.i[tt.p],ce=tt.c?Ro(tt.c.a,tt,0):-1,o=ss,ce>0&&(s=u(Fe(tt.c.a,ce-1),10),h=t.i[s.p],We=b.Math.ceil(V3(t.n,s,tt)),o=Yt.a.e-tt.d.d-(h.a.e+s.o.b+s.d.a)-We),k=ss,ce<tt.c.a.c.length-1&&(w=u(Fe(tt.c.a,ce+1),10),C=t.i[w.p],We=b.Math.ceil(V3(t.n,w,tt)),k=C.a.e-w.d.d-(Yt.a.e+tt.o.b+tt.d.a)-We),n&&(y1(),gf(Ed),b.Math.abs(o-k)<=Ed||o==k||isNaN(o)&&isNaN(k))?!0:(r=Hnt(_t.a),d=-Hnt(_t.b),M=-Hnt(Se.a),Lt=Hnt(Se.b),Y=_t.a.e.e-_t.a.a-(_t.b.e.e-_t.b.a)>0&&Se.a.e.e-Se.a.a-(Se.b.e.e-Se.b.a)<0,V=_t.a.e.e-_t.a.a-(_t.b.e.e-_t.b.a)<0&&Se.a.e.e-Se.a.a-(Se.b.e.e-Se.b.a)>0,H=_t.a.e.e+_t.b.a<Se.b.e.e+Se.a.a,F=_t.a.e.e+_t.b.a>Se.b.e.e+Se.a.a,Bt=0,!Y&&!V&&(F?o+M>0?Bt=M:k-r>0&&(Bt=r):H&&(o+d>0?Bt=d:k-Lt>0&&(Bt=Lt))),Yt.a.e+=Bt,Yt.b&&(Yt.d.e+=Bt),!1))}function She(t,e,n){var r,s,o,h,d,w,k,C,M,F;if(r=new ih(e.qf().a,e.qf().b,e.rf().a,e.rf().b),s=new Ax,t.c)for(h=new S(e.wf());h.a<h.c.c.length;)o=u(J(h),181),s.c=o.qf().a+e.qf().a,s.d=o.qf().b+e.qf().b,s.b=o.rf().a,s.a=o.rf().b,h_(r,s);for(k=new S(e.Cf());k.a<k.c.c.length;){if(w=u(J(k),838),C=w.qf().a+e.qf().a,M=w.qf().b+e.qf().b,t.e&&(s.c=C,s.d=M,s.b=w.rf().a,s.a=w.rf().b,h_(r,s)),t.d)for(h=new S(w.wf());h.a<h.c.c.length;)o=u(J(h),181),s.c=o.qf().a+C,s.d=o.qf().b+M,s.b=o.rf().a,s.a=o.rf().b,h_(r,s);if(t.b){if(F=new $e(-n,-n),u(e.We((ci(),Ky)),174).Hc((Qu(),xb)))for(h=new S(w.wf());h.a<h.c.c.length;)o=u(J(h),181),F.a+=o.rf().a+n,F.b+=o.rf().b+n;F.a=b.Math.max(F.a,0),F.b=b.Math.max(F.b,0),Yue(r,w.Bf(),w.zf(),e,w,F,n)}}t.b&&Yue(r,e.Bf(),e.zf(),e,null,null,n),d=new wnt(e.Af()),d.d=b.Math.max(0,e.qf().b-r.d),d.a=b.Math.max(0,r.d+r.a-(e.qf().b+e.rf().b)),d.b=b.Math.max(0,e.qf().a-r.c),d.c=b.Math.max(0,r.c+r.b-(e.qf().a+e.rf().a)),e.Ef(d)}function n5n(){var t=["\\u0000","\\u0001","\\u0002","\\u0003","\\u0004","\\u0005","\\u0006","\\u0007","\\b","\\t","\\n","\\u000B","\\f","\\r","\\u000E","\\u000F","\\u0010","\\u0011","\\u0012","\\u0013","\\u0014","\\u0015","\\u0016","\\u0017","\\u0018","\\u0019","\\u001A","\\u001B","\\u001C","\\u001D","\\u001E","\\u001F"];return t[34]='\\"',t[92]="\\\\",t[173]="\\u00ad",t[1536]="\\u0600",t[1537]="\\u0601",t[1538]="\\u0602",t[1539]="\\u0603",t[1757]="\\u06dd",t[1807]="\\u070f",t[6068]="\\u17b4",t[6069]="\\u17b5",t[8203]="\\u200b",t[8204]="\\u200c",t[8205]="\\u200d",t[8206]="\\u200e",t[8207]="\\u200f",t[8232]="\\u2028",t[8233]="\\u2029",t[8234]="\\u202a",t[8235]="\\u202b",t[8236]="\\u202c",t[8237]="\\u202d",t[8238]="\\u202e",t[8288]="\\u2060",t[8289]="\\u2061",t[8290]="\\u2062",t[8291]="\\u2063",t[8292]="\\u2064",t[8298]="\\u206a",t[8299]="\\u206b",t[8300]="\\u206c",t[8301]="\\u206d",t[8302]="\\u206e",t[8303]="\\u206f",t[65279]="\\ufeff",t[65529]="\\ufff9",t[65530]="\\ufffa",t[65531]="\\ufffb",t}function r5n(t,e,n){var r,s,o,h,d,w,k,C,M,F;for(w=new le,M=e.length,h=Cyt(n),k=0;k<M;++k){switch(C=_2t(e,Eu(61),k),r=jun(h,e.substr(k,C-k)),s=dit(r),o=s.Aj().Nh(),ba(e,++C)){case 39:{d=l8(e,39,++C),ue(w,new JR(r,ert(e.substr(C,d-C),o,s))),k=d+1;break}case 34:{d=l8(e,34,++C),ue(w,new JR(r,ert(e.substr(C,d-C),o,s))),k=d+1;break}case 91:{F=new le,ue(w,new JR(r,F));t:for(;;){switch(ba(e,++C)){case 39:{d=l8(e,39,++C),ue(F,ert(e.substr(C,d-C),o,s)),C=d+1;break}case 34:{d=l8(e,34,++C),ue(F,ert(e.substr(C,d-C),o,s)),C=d+1;break}case 110:{if(++C,e.indexOf("ull",C)==C)F.c[F.c.length]=null;else throw rt(new Go(mde));C+=3;break}}if(C<M)switch(Rr(C,e.length),e.charCodeAt(C)){case 44:break;case 93:break t;default:throw rt(new Go("Expecting , or ]"))}else break}k=C+1;break}case 110:{if(++C,e.indexOf("ull",C)==C)ue(w,new JR(r,null));else throw rt(new Go(mde));k=C+3;break}}if(k<M){if(Rr(k,e.length),e.charCodeAt(k)!=44)throw rt(new Go("Expecting ,"))}else break}return xvn(t,w,n)}function Ahe(t,e){var n,r,s,o,h,d,w,k,C,M,F;for(k=u(u(Ai(t.r,e),21),84),h=r0n(t,e),n=t.u.Hc((Qu(),ZS)),w=k.Kc();w.Ob();)if(d=u(w.Pb(),111),!(!d.c||d.c.d.c.length<=0)){switch(F=d.b.rf(),C=d.c,M=C.i,M.b=(o=C.n,C.e.a+o.b+o.c),M.a=(s=C.n,C.e.b+s.d+s.a),e.g){case 1:d.a?(M.c=(F.a-M.b)/2,Uf(C,(Xu(),cb))):h||n?(M.c=-M.b-t.s,Uf(C,(Xu(),mf))):(M.c=F.a+t.s,Uf(C,(Xu(),Sd))),M.d=-M.a-t.t,ld(C,(wu(),yf));break;case 3:d.a?(M.c=(F.a-M.b)/2,Uf(C,(Xu(),cb))):h||n?(M.c=-M.b-t.s,Uf(C,(Xu(),mf))):(M.c=F.a+t.s,Uf(C,(Xu(),Sd))),M.d=F.b+t.t,ld(C,(wu(),e1));break;case 2:d.a?(r=t.v?M.a:u(Fe(C.d,0),181).rf().b,M.d=(F.b-r)/2,ld(C,(wu(),ub))):h||n?(M.d=-M.a-t.t,ld(C,(wu(),yf))):(M.d=F.b+t.t,ld(C,(wu(),e1))),M.c=F.a+t.s,Uf(C,(Xu(),Sd));break;case 4:d.a?(r=t.v?M.a:u(Fe(C.d,0),181).rf().b,M.d=(F.b-r)/2,ld(C,(wu(),ub))):h||n?(M.d=-M.a-t.t,ld(C,(wu(),yf))):(M.d=F.b+t.t,ld(C,(wu(),e1))),M.c=-M.b-t.s,Uf(C,(Xu(),mf))}h=!1}}function tb(t,e){gi();var n,r,s,o,h,d,w,k,C,M,F,H,V;if($9(O7)==0){for(M=Pt(Exn,te,117,M5e.length,0,1),h=0;h<M.length;h++)M[h]=new Nl(4);for(r=new B9,o=0;o<mLt.length;o++){if(C=new Nl(4),o<84?(d=o*2,H=(Rr(d,fut.length),fut.charCodeAt(d)),F=(Rr(d+1,fut.length),fut.charCodeAt(d+1)),jc(C,H,F)):(d=(o-84)*2,jc(C,yLt[d],yLt[d+1])),w=mLt[o],hn(w,"Specials")&&jc(C,65520,65533),hn(w,rge)&&(jc(C,983040,1048573),jc(C,1048576,1114109)),xo(O7,w,C),xo(hA,w,by(C)),k=r.a.length,0<k?r.a=r.a.substr(0,0):0>k&&(r.a+=DUt(Pt(mh,vd,25,-k,15,1))),r.a+="Is",cd(w,Eu(32))>=0)for(s=0;s<w.length;s++)Rr(s,w.length),w.charCodeAt(s)!=32&&m8(r,(Rr(s,w.length),w.charCodeAt(s)));else r.a+=""+w;x3t(r.a,w,!0)}x3t(hut,"Cn",!1),x3t(G8t,"Cn",!0),n=new Nl(4),jc(n,0,WE),xo(O7,"ALL",n),xo(hA,"ALL",by(n)),!n3&&(n3=new Cr),xo(n3,hut,hut),!n3&&(n3=new Cr),xo(n3,G8t,G8t),!n3&&(n3=new Cr),xo(n3,"ALL","ALL")}return V=u(Fc(e?O7:hA,t),136),V}function i5n(t,e,n,r){var s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt;if(F=!1,M=!1,H3(u(Q(r,(Te(),os)),98))){h=!1,d=!1;t:for(V=new S(r.j);V.a<V.c.c.length;)for(H=u(J(V),11),tt=Bp(L1(ct(ot(B1,1),Ie,20,0,[new Ys(H),new Er(H)])));zr(tt);)if(Y=u(Lr(tt),11),!je(Re(Q(Y.i,kS)))){if(H.j==(be(),Nn)){h=!0;break t}if(H.j==mr){d=!0;break t}}F=d&&!h,M=h&&!d}if(!F&&!M&&r.b.c.length!=0){for(C=0,k=new S(r.b);k.a<k.c.c.length;)w=u(J(k),70),C+=w.n.b+w.o.b/2;C/=r.b.c.length,Lt=C>=r.o.b/2}else Lt=!M;Lt?(gt=u(Q(r,(se(),N6)),15),gt?F?o=gt:(s=u(Q(r,L6),15),s?gt.gc()<=s.gc()?o=gt:o=s:(o=new le,Jt(r,L6,o))):(o=new le,Jt(r,N6,o))):(s=u(Q(r,(se(),L6)),15),s?M?o=s:(gt=u(Q(r,N6),15),gt?s.gc()<=gt.gc()?o=s:o=gt:(o=new le,Jt(r,N6,o))):(o=new le,Jt(r,L6,o))),o.Fc(t),Jt(t,(se(),zG),n),e.d==n?(sa(e,null),n.e.c.length+n.g.c.length==0&&Uo(n,null),Ycn(n)):(Da(e,null),n.e.c.length+n.g.c.length==0&&Uo(n,null)),_h(e.a)}function s5n(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce,Se,We,Qe,Rn,zn,hr,pi;for(Lt=new ha(t.b,0),C=e.Kc(),V=0,k=u(C.Pb(),19).a,Yt=0,n=new qs,Se=new A0;Lt.b<Lt.d.gc();){for(gt=(Qn(Lt.b<Lt.d.gc()),u(Lt.d.Xb(Lt.c=Lt.b++),29)),Bt=new S(gt.a);Bt.a<Bt.c.c.length;){for(_t=u(J(Bt),10),H=new ar(lr(Ms(_t).a.Kc(),new z));zr(H);)M=u(Lr(H),17),Se.a.zc(M,Se);for(F=new ar(lr(jo(_t).a.Kc(),new z));zr(F);)M=u(Lr(F),17),Se.a.Bc(M)!=null}if(V+1==k){for(s=new Ch(t),Rm(Lt,s),o=new Ch(t),Rm(Lt,o),Qe=Se.a.ec().Kc();Qe.Ob();)We=u(Qe.Pb(),17),n.a._b(We)||(++Yt,n.a.zc(We,n)),h=new H0(t),Jt(h,(Te(),os),(oa(),L7)),ko(h,s),_0(h,(Gn(),j1)),Y=new Mc,Uo(Y,h),Fs(Y,(be(),Bn)),Rn=new Mc,Uo(Rn,h),Fs(Rn,Hn),r=new H0(t),Jt(r,os,L7),ko(r,o),_0(r,j1),tt=new Mc,Uo(tt,r),Fs(tt,Bn),zn=new Mc,Uo(zn,r),Fs(zn,Hn),ce=new zv,Da(ce,We.c),sa(ce,Y),pi=new zv,Da(pi,Rn),sa(pi,tt),Da(We,zn),d=new Zwt(h,r,ce,pi,We),Jt(h,(se(),Lw),d),Jt(r,Lw,d),hr=ce.c.i,hr.k==j1&&(w=u(Q(hr,Lw),305),w.d=d,d.g=w);if(C.Ob())k=u(C.Pb(),19).a;else break}++V}return de(Yt)}function a5n(t,e,n){var r,s,o,h,d,w,k,C,M,F,H,V,Y;for(M=0,s=new er((!e.a&&(e.a=new he(ns,e,10,11)),e.a));s.e!=s.i.gc();)r=u(dr(s),33),je(Re(qe(r,(Te(),B2))))||((Gt(qe(e,db))!==Gt((j0(),gb))||Gt(qe(e,Ry))===Gt((v2(),pS))||Gt(qe(e,Ry))===Gt((v2(),gS))||je(Re(qe(e,By)))||Gt(qe(e,P6))!==Gt((ew(),$4)))&&!je(Re(qe(r,qlt)))&&(bo(r,(se(),Tc),de(M)),++M),ohe(t,r,n));for(M=0,k=new er((!e.b&&(e.b=new he(Ws,e,12,3)),e.b));k.e!=k.i.gc();)d=u(dr(k),79),(Gt(qe(e,(Te(),db)))!==Gt((j0(),gb))||Gt(qe(e,Ry))===Gt((v2(),pS))||Gt(qe(e,Ry))===Gt((v2(),gS))||je(Re(qe(e,By)))||Gt(qe(e,P6))!==Gt((ew(),$4)))&&(bo(d,(se(),Tc),de(M)),++M),V=Zd(d),Y=Xp(d),C=je(Re(qe(V,$y))),H=!je(Re(qe(d,B2))),F=C&&uw(d)&&je(Re(qe(d,P2))),o=ts(V)==e&&ts(V)==ts(Y),h=(ts(V)==e&&Y==e)^(ts(Y)==e&&V==e),H&&!F&&(h||o)&&Sxt(t,d,e,n);if(ts(e))for(w=new er(_Xt(ts(e)));w.e!=w.i.gc();)d=u(dr(w),79),V=Zd(d),V==e&&uw(d)&&(F=je(Re(qe(V,(Te(),$y))))&&je(Re(qe(d,P2))),F&&Sxt(t,d,e,n))}function o5n(t,e,n){var r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce,Se,We,Qe,Rn,zn,hr,pi,Rs;for(wr(n,"MinWidth layering",1),H=e.b,Se=e.a,Rs=u(Q(e,(Te(),Z9t)),19).a,d=u(Q(e,J9t),19).a,t.b=Xt(ye(Q(e,xf))),t.d=ss,Bt=new S(Se);Bt.a<Bt.c.c.length;)Lt=u(J(Bt),10),Lt.k==(Gn(),Ds)&&(Rn=Lt.o.b,t.d=b.Math.min(t.d,Rn));for(t.d=b.Math.max(1,t.d),We=Se.c.length,t.c=Pt(Tr,Xr,25,We,15,1),t.f=Pt(Tr,Xr,25,We,15,1),t.e=Pt(ia,vo,25,We,15,1),k=0,t.a=0,Yt=new S(Se);Yt.a<Yt.c.c.length;)Lt=u(J(Yt),10),Lt.p=k++,t.c[Lt.p]=Ere(jo(Lt)),t.f[Lt.p]=Ere(Ms(Lt)),t.e[Lt.p]=Lt.o.b/t.d,t.a+=t.e[Lt.p];for(t.b/=t.d,t.a/=We,ce=Tpn(Se),Xs(Se,Ewt(new Ep(t))),Y=ss,V=vi,h=null,pi=Rs,hr=Rs,o=d,s=d,Rs<0&&(pi=u(YCt.a.zd(),19).a,hr=u(YCt.b.zd(),19).a),d<0&&(o=u(KCt.a.zd(),19).a,s=u(KCt.b.zd(),19).a),zn=pi;zn<=hr;zn++)for(r=o;r<=s;r++)Qe=Jmn(t,zn,r,Se,ce),gt=Xt(ye(Qe.a)),F=u(Qe.b,15),tt=F.gc(),(gt<Y||gt==Y&&tt<V)&&(Y=gt,V=tt,h=F);for(M=h.Kc();M.Ob();){for(C=u(M.Pb(),15),w=new Ch(e),_t=C.Kc();_t.Ob();)Lt=u(_t.Pb(),10),ko(Lt,w);H.c[H.c.length]=w}Bst(H),Se.c=Pt(Xn,Ie,1,0,5,1),or(n)}function c5n(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce,Se,We,Qe,Rn;for(t.b=e,t.a=u(Q(e,(Te(),U9t)),19).a,t.c=u(Q(e,K9t),19).a,t.c==0&&(t.c=vi),tt=new ha(e.b,0);tt.b<tt.d.gc();){for(Y=(Qn(tt.b<tt.d.gc()),u(tt.d.Xb(tt.c=tt.b++),29)),d=new le,C=-1,Bt=-1,_t=new S(Y.a);_t.a<_t.c.c.length;)Lt=u(J(_t),10),N0((GM(),new ar(lr(z0(Lt).a.Kc(),new z))))>=t.a&&(r=Gmn(t,Lt),C=b.Math.max(C,r.b),Bt=b.Math.max(Bt,r.d),ue(d,new la(Lt,r)));for(We=new le,k=0;k<C;++k)$m(We,0,(Qn(tt.b>0),tt.a.Xb(tt.c=--tt.b),Qe=new Ch(t.b),Rm(tt,Qe),Qn(tt.b<tt.d.gc()),tt.d.Xb(tt.c=tt.b++),Qe));for(h=new S(d);h.a<h.c.c.length;)if(s=u(J(h),46),H=u(s.b,571).a,!!H)for(F=new S(H);F.a<F.c.c.length;)M=u(J(F),10),Y3t(t,M,cG,We);for(n=new le,w=0;w<Bt;++w)ue(n,(Rn=new Ch(t.b),Rm(tt,Rn),Rn));for(o=new S(d);o.a<o.c.c.length;)if(s=u(J(o),46),Se=u(s.b,571).c,!!Se)for(ce=new S(Se);ce.a<ce.c.c.length;)Yt=u(J(ce),10),Y3t(t,Yt,uG,n)}for(gt=new ha(e.b,0);gt.b<gt.d.gc();)V=(Qn(gt.b<gt.d.gc()),u(gt.d.Xb(gt.c=gt.b++),29)),V.a.c.length==0&&El(gt)}function u5n(t,e,n){var r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce,Se,We,Qe,Rn,zn,hr;if(wr(n,"Spline edge routing",1),e.b.c.length==0){e.f.a=0,or(n);return}Lt=Xt(ye(Q(e,(Te(),Z4)))),d=Xt(ye(Q(e,R2))),h=Xt(ye(Q(e,Q4))),gt=u(Q(e,Klt),336),We=gt==(tE(),IS),Se=Xt(ye(Q(e,G9t))),t.d=e,t.j.c=Pt(Xn,Ie,1,0,5,1),t.a.c=Pt(Xn,Ie,1,0,5,1),Yu(t.k),w=u(Fe(e.b,0),29),C=ej(w.a,(hq(),NO)),V=u(Fe(e.b,e.b.c.length-1),29),M=ej(V.a,NO),Y=new S(e.b),tt=null,hr=0;do{for(_t=Y.a<Y.c.c.length?u(J(Y),29):null,Y4n(t,tt,_t),Emn(t),Qe=IKe(Non(t$(Ri(new Tn(null,new _n(t.i,16)),new jQ),new RQ))),zn=0,Bt=hr,F=!tt||C&&tt==w,H=!_t||M&&_t==V,Qe>0?(k=0,tt&&(k+=d),k+=(Qe-1)*h,_t&&(k+=d),We&&_t&&(k=b.Math.max(k,H2n(_t,h,Lt,Se))),k<Lt&&!F&&!H&&(zn=(Lt-k)/2,k=Lt),Bt+=k):!F&&!H&&(Bt+=Lt),_t&&fxt(_t,Bt),ce=new S(t.i);ce.a<ce.c.c.length;)Yt=u(J(ce),128),Yt.a.c=hr,Yt.a.b=Bt-hr,Yt.F=zn,Yt.p=!tt;As(t.a,t.i),hr=Bt,_t&&(hr+=_t.c.a),tt=_t,F=H}while(_t);for(s=new S(t.j);s.a<s.c.c.length;)r=u(J(s),17),o=scn(t,r),Jt(r,(se(),X4),o),Rn=hvn(t,r),Jt(r,N2,Rn);e.f.a=hr,t.d=null,or(n)}function Lhe(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt;if(Y=t.i!=0,_t=!1,gt=null,ml(t.e)){if(C=e.gc(),C>0){for(F=C<100?null:new Sp(C),k=new oyt(e),V=k.g,gt=Pt(Tr,Xr,25,C,15,1),r=0,Bt=new Kv(C),s=0;s<t.i;++s){d=t.g[s],H=d;t:for(Lt=0;Lt<2;++Lt){for(w=C;--w>=0;)if(H!=null?yi(H,V[w]):Gt(H)===Gt(V[w])){gt.length<=r&&(tt=gt,gt=Pt(Tr,Xr,25,2*gt.length,15,1),Ic(tt,0,gt,0,r)),gt[r++]=s,Mr(Bt,V[w]);break t}if(H=H,Gt(H)===Gt(d))break}}if(k=Bt,V=Bt.g,C=r,r>gt.length&&(tt=gt,gt=Pt(Tr,Xr,25,r,15,1),Ic(tt,0,gt,0,r)),r>0){for(_t=!0,o=0;o<r;++o)H=V[o],F=oKt(t,u(H,72),F);for(h=r;--h>=0;)r6(t,gt[h]);if(r!=C){for(s=C;--s>=r;)r6(k,s);tt=gt,gt=Pt(Tr,Xr,25,r,15,1),Ic(tt,0,gt,0,r)}e=k}}}else for(e=zfn(t,e),s=t.i;--s>=0;)e.Hc(t.g[s])&&(r6(t,s),_t=!0);if(_t){if(gt!=null){for(n=e.gc(),M=n==1?DC(t,4,e.Kc().Pb(),null,gt[0],Y):DC(t,6,e,gt,gt[0],Y),F=n<100?null:new Sp(n),s=e.Kc();s.Ob();)H=s.Pb(),F=hvt(t,u(H,72),F);F?(F.Ei(M),F.Fi()):mi(t.e,M)}else{for(F=tZe(e.gc()),s=e.Kc();s.Ob();)H=s.Pb(),F=hvt(t,u(H,72),F);F&&F.Fi()}return!0}else return!1}function l5n(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t;for(n=new ese(e),n.a||Wwn(e),k=Kvn(e),w=new Hv,tt=new Yce,Y=new S(e.a);Y.a<Y.c.c.length;)for(V=u(J(Y),10),s=new ar(lr(Ms(V).a.Kc(),new z));zr(s);)r=u(Lr(s),17),(r.c.i.k==(Gn(),xs)||r.d.i.k==xs)&&(C=Z3n(t,r,k,tt),ln(w,tst(C.d),C.a));for(h=new le,_t=u(Q(n.c,(se(),Ny)),21).Kc();_t.Ob();){switch(Lt=u(_t.Pb(),61),H=tt.c[Lt.g],F=tt.b[Lt.g],d=tt.a[Lt.g],o=null,gt=null,Lt.g){case 4:o=new ih(t.d.a,H,k.b.a-t.d.a,F-H),gt=new ih(t.d.a,H,d,F-H),Nv(k,new $e(o.c+o.b,o.d)),Nv(k,new $e(o.c+o.b,o.d+o.a));break;case 2:o=new ih(k.a.a,H,t.c.a-k.a.a,F-H),gt=new ih(t.c.a-d,H,d,F-H),Nv(k,new $e(o.c,o.d)),Nv(k,new $e(o.c,o.d+o.a));break;case 1:o=new ih(H,t.d.b,F-H,k.b.b-t.d.b),gt=new ih(H,t.d.b,F-H,d),Nv(k,new $e(o.c,o.d+o.a)),Nv(k,new $e(o.c+o.b,o.d+o.a));break;case 3:o=new ih(H,k.a.b,F-H,t.c.b-k.a.b),gt=new ih(H,t.c.b-d,F-H,d),Nv(k,new $e(o.c,o.d)),Nv(k,new $e(o.c+o.b,o.d))}o&&(M=new nqt,M.d=Lt,M.b=o,M.c=gt,M.a=s$(u(Ai(w,tst(Lt)),21)),h.c[h.c.length]=M)}return As(n.b,h),n.d=gun(v3n(k)),n}function Mhe(t,e,n){var r,s,o,h,d,w,k,C,M,F,H,V,Y;if(n.p[e.p]==null){d=!0,n.p[e.p]=0,h=e,Y=n.o==(E1(),j2)?Ts:ss;do s=t.b.e[h.p],o=h.c.a.c.length,n.o==j2&&s>0||n.o==z1&&s<o-1?(w=null,k=null,n.o==z1?w=u(Fe(h.c.a,s+1),10):w=u(Fe(h.c.a,s-1),10),k=n.g[w.p],Mhe(t,k,n),Y=t.e.bg(Y,e,h),n.j[e.p]==e&&(n.j[e.p]=n.j[k.p]),n.j[e.p]==n.j[k.p]?(V=V3(t.d,h,w),n.o==z1?(r=Xt(n.p[e.p]),M=Xt(n.p[k.p])+Xt(n.d[w.p])-w.d.d-V-h.d.a-h.o.b-Xt(n.d[h.p]),d?(d=!1,n.p[e.p]=b.Math.min(M,Y)):n.p[e.p]=b.Math.min(r,b.Math.min(M,Y))):(r=Xt(n.p[e.p]),M=Xt(n.p[k.p])+Xt(n.d[w.p])+w.o.b+w.d.a+V+h.d.d-Xt(n.d[h.p]),d?(d=!1,n.p[e.p]=b.Math.max(M,Y)):n.p[e.p]=b.Math.max(r,b.Math.max(M,Y)))):(V=Xt(ye(Q(t.a,(Te(),Bw)))),H=ene(t,n.j[e.p]),C=ene(t,n.j[k.p]),n.o==z1?(F=Xt(n.p[e.p])+Xt(n.d[h.p])+h.o.b+h.d.a+V-(Xt(n.p[k.p])+Xt(n.d[w.p])-w.d.d),jQt(H,C,F)):(F=Xt(n.p[e.p])+Xt(n.d[h.p])-h.d.d-Xt(n.p[k.p])-Xt(n.d[w.p])-w.o.b-w.d.a-V,jQt(H,C,F)))):Y=t.e.bg(Y,e,h),h=n.a[h.p];while(h!=e);cKe(t.e,e)}}function h5n(t,e,n){var r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce,Se,We,Qe,Rn,zn,hr;for(_t=e,Lt=new Hv,Bt=new Hv,C=Uv(_t,b8t),r=new LXt(t,n,Lt,Bt),Y0n(r.a,r.b,r.c,r.d,C),w=(Se=Lt.i,Se||(Lt.i=new W3(Lt,Lt.c))),Qe=w.Kc();Qe.Ob();)for(We=u(Qe.Pb(),202),s=u(Ai(Lt,We),21),Y=s.Kc();Y.Ob();)if(V=Y.Pb(),Yt=u(t4(t.d,V),202),Yt)d=(!We.e&&(We.e=new Cn(Zi,We,10,9)),We.e),Mr(d,Yt);else throw h=O0(_t,Cd),F=Ade+V+Lde+h,H=F+VE,rt(new ad(H));for(k=(ce=Bt.i,ce||(Bt.i=new W3(Bt,Bt.c))),zn=k.Kc();zn.Ob();)for(Rn=u(zn.Pb(),202),o=u(Ai(Bt,Rn),21),gt=o.Kc();gt.Ob();)if(tt=gt.Pb(),Yt=u(t4(t.d,tt),202),Yt)M=(!Rn.g&&(Rn.g=new Cn(Zi,Rn,9,10)),Rn.g),Mr(M,Yt);else throw h=O0(_t,Cd),F=Ade+tt+Lde+h,H=F+VE,rt(new ad(H));!n.b&&(n.b=new Cn(br,n,4,7)),n.b.i!=0&&(!n.c&&(n.c=new Cn(br,n,5,8)),n.c.i!=0)&&(!n.b&&(n.b=new Cn(br,n,4,7)),n.b.i<=1&&(!n.c&&(n.c=new Cn(br,n,5,8)),n.c.i<=1))&&(!n.a&&(n.a=new he(Zi,n,6,6)),n.a).i==1&&(hr=u(St((!n.a&&(n.a=new he(Zi,n,6,6)),n.a),0),202),!sst(hr)&&!ast(hr)&&(Z$(hr,u(St((!n.b&&(n.b=new Cn(br,n,4,7)),n.b),0),82)),J$(hr,u(St((!n.c&&(n.c=new Cn(br,n,5,8)),n.c),0),82))))}function f5n(t){var e,n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce,Se,We,Qe,Rn;for(_t=t.a,Bt=0,Yt=_t.length;Bt<Yt;++Bt){for(Lt=_t[Bt],k=vi,C=vi,V=new S(Lt.e);V.a<V.c.c.length;)F=u(J(V),10),h=F.c?Ro(F.c.a,F,0):-1,h>0?(M=u(Fe(F.c.a,h-1),10),We=V3(t.b,F,M),tt=F.n.b-F.d.d-(M.n.b+M.o.b+M.d.a+We)):tt=F.n.b-F.d.d,k=b.Math.min(tt,k),h<F.c.a.c.length-1?(M=u(Fe(F.c.a,h+1),10),We=V3(t.b,F,M),gt=M.n.b-M.d.d-(F.n.b+F.o.b+F.d.a+We)):gt=2*F.n.b,C=b.Math.min(gt,C);for(w=vi,o=!1,s=u(Fe(Lt.e,0),10),Rn=new S(s.j);Rn.a<Rn.c.c.length;)for(Qe=u(J(Rn),11),Y=s.n.b+Qe.n.b+Qe.a.b,r=new S(Qe.e);r.a<r.c.c.length;)n=u(J(r),17),ce=n.c,e=ce.i.n.b+ce.n.b+ce.a.b-Y,b.Math.abs(e)<b.Math.abs(w)&&b.Math.abs(e)<(e<0?k:C)&&(w=e,o=!0);for(d=u(Fe(Lt.e,Lt.e.c.length-1),10),Se=new S(d.j);Se.a<Se.c.c.length;)for(ce=u(J(Se),11),Y=d.n.b+ce.n.b+ce.a.b,r=new S(ce.g);r.a<r.c.c.length;)n=u(J(r),17),Qe=n.d,e=Qe.i.n.b+Qe.n.b+Qe.a.b-Y,b.Math.abs(e)<b.Math.abs(w)&&b.Math.abs(e)<(e<0?k:C)&&(w=e,o=!0);if(o&&w!=0)for(H=new S(Lt.e);H.a<H.c.c.length;)F=u(J(H),10),F.n.b+=w}}function Ihe(t,e,n){var r,s,o,h,d,w,k,C,M,F,H,V,Y,tt;if(kl(t.a,e)){if(S0(u(Jn(t.a,e),53),n))return 1}else ki(t.a,e,new qs);if(kl(t.a,n)){if(S0(u(Jn(t.a,n),53),e))return-1}else ki(t.a,n,new qs);if(kl(t.e,e)){if(S0(u(Jn(t.e,e),53),n))return-1}else ki(t.e,e,new qs);if(kl(t.e,n)){if(S0(u(Jn(t.a,n),53),e))return 1}else ki(t.e,n,new qs);if(t.c==(j0(),fht)||!Vs(e,(se(),Tc))||!Vs(n,(se(),Tc))){if(w=u(S2t(GZt(mit(Ri(new Tn(null,new _n(e.j,16)),new IL)),new IF)),11),C=u(S2t(GZt(mit(Ri(new Tn(null,new _n(n.j,16)),new HX)),new GX)),11),w&&C){if(d=w.i,k=C.i,d&&d==k){for(F=new S(d.j);F.a<F.c.c.length;){if(M=u(J(F),11),M==w)return xE(t,n,e),-1;if(M==C)return xE(t,e,n),1}return du(Tst(t,e),Tst(t,n))}for(V=t.d,Y=0,tt=V.length;Y<tt;++Y){if(H=V[Y],H==d)return xE(t,n,e),-1;if(H==k)return xE(t,e,n),1}}if(!Vs(e,(se(),Tc))||!Vs(n,Tc))return s=Tst(t,e),h=Tst(t,n),s>h?xE(t,e,n):xE(t,n,e),s<h?-1:s>h?1:0}return r=u(Q(e,(se(),Tc)),19).a,o=u(Q(n,Tc),19).a,r>o?xE(t,e,n):xE(t,n,e),r<o?-1:r>o?1:0}function Txt(t,e,n,r){var s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt;if(je(Re(qe(e,(ci(),$V)))))return vn(),vn(),io;if(k=(!e.a&&(e.a=new he(ns,e,10,11)),e.a).i!=0,M=Zgn(e),C=!M.dc(),k||C){if(s=u(qe(e,C7),149),!s)throw rt(new F3("Resolved algorithm is not set; apply a LayoutAlgorithmResolver before computing layout."));if(Lt=Wbt(s,(vE(),JV)),Fie(e),!k&&C&&!Lt)return vn(),vn(),io;if(w=new le,Gt(qe(e,r5))===Gt(($0(),Zg))&&(Wbt(s,QV)||Wbt(s,XV)))for(H=wue(t,e),V=new Qi,Ua(V,(!e.a&&(e.a=new he(ns,e,10,11)),e.a));V.b!=0;)F=u(V.b==0?null:(Qn(V.b!=0),ch(V,V.a.a)),33),Fie(F),gt=Gt(qe(F,r5))===Gt(YS),gt||r2(F,VS)&&!omt(s,qe(F,C7))?(d=Txt(t,F,n,r),As(w,d),bo(F,r5,YS),Pue(F)):Ua(V,(!F.a&&(F.a=new he(ns,F,10,11)),F.a));else for(H=(!e.a&&(e.a=new he(ns,e,10,11)),e.a).i,h=new er((!e.a&&(e.a=new he(ns,e,10,11)),e.a));h.e!=h.i.gc();)o=u(dr(h),33),d=Txt(t,o,n,r),As(w,d),Pue(o);for(tt=new S(w);tt.a<tt.c.c.length;)Y=u(J(tt),79),bo(Y,$V,(Fn(),!0));return Shn(e,s,Rc(r,H)),Uwn(w),C&&Lt?M:(vn(),vn(),io)}else return vn(),vn(),io}function TD(t,e,n,r,s,o,h,d,w){var k,C,M,F,H,V,Y;switch(H=n,C=new H0(w),_0(C,(Gn(),xs)),Jt(C,(se(),QTt),h),Jt(C,(Te(),os),(oa(),Vc)),Y=Xt(ye(t.We(zy))),Jt(C,zy,Y),M=new Mc,Uo(M,C),e!=H1&&e!=yb||(r>=0?H=Jx(d):H=HI(Jx(d)),t.Ye(v7,H)),k=new Ta,F=!1,t.Xe(Pw)?(F2t(k,u(t.We(Pw),8)),F=!0):jXe(k,h.a/2,h.b/2),H.g){case 4:Jt(C,cu,(hh(),fb)),Jt(C,HG,(u2(),G4)),C.o.b=h.b,Y<0&&(C.o.a=-Y),Fs(M,(be(),Hn)),F||(k.a=h.a),k.a-=h.a;break;case 2:Jt(C,cu,(hh(),Fy)),Jt(C,HG,(u2(),u7)),C.o.b=h.b,Y<0&&(C.o.a=-Y),Fs(M,(be(),Bn)),F||(k.a=0);break;case 1:Jt(C,O2,(B0(),U4)),C.o.a=h.a,Y<0&&(C.o.b=-Y),Fs(M,(be(),mr)),F||(k.b=h.b),k.b-=h.b;break;case 3:Jt(C,O2,(B0(),A6)),C.o.a=h.a,Y<0&&(C.o.b=-Y),Fs(M,(be(),Nn)),F||(k.b=0)}if(F2t(M.n,k),Jt(C,Pw,k),e==G2||e==h0||e==Vc){if(V=0,e==G2&&t.Xe(Wg))switch(H.g){case 1:case 2:V=u(t.We(Wg),19).a;break;case 3:case 4:V=-u(t.We(Wg),19).a}else switch(H.g){case 4:case 2:V=o.b,e==h0&&(V/=s.b);break;case 1:case 3:V=o.a,e==h0&&(V/=s.a)}Jt(C,Dw,V)}return Jt(C,oc,H),C}function d5n(t){var e,n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce,Se,We,Qe;if(n=Xt(ye(Q(t.a.j,(Te(),R9t)))),n<-1||!t.a.i||Dx(u(Q(t.a.o,os),98))||Yo(t.a.o,(be(),Hn)).gc()<2&&Yo(t.a.o,Bn).gc()<2)return!0;if(t.a.c.Rf())return!1;for(Yt=0,Bt=0,_t=new le,w=t.a.e,k=0,C=w.length;k<C;++k){for(d=w[k],F=d,H=0,Y=F.length;H<Y;++H){if(M=F[H],M.k==(Gn(),Hc)){_t.c[_t.c.length]=M;continue}for(r=t.b[M.c.p][M.p],M.k==xs?(r.b=1,u(Q(M,(se(),_i)),11).j==(be(),Hn)&&(Bt+=r.a)):(Qe=Yo(M,(be(),Bn)),Qe.dc()||!Jet(Qe,new sQ)?r.c=1:(s=Yo(M,Hn),(s.dc()||!Jet(s,new iQ))&&(Yt+=r.a))),h=new ar(lr(Ms(M).a.Kc(),new z));zr(h);)o=u(Lr(h),17),Yt+=r.c,Bt+=r.b,We=o.d.i,Tmt(t,r,We);for(gt=L1(ct(ot(B1,1),Ie,20,0,[Yo(M,(be(),Nn)),Yo(M,mr)])),Se=new ar(new w2t(gt.a.length,gt.a));zr(Se);)ce=u(Lr(Se),11),Lt=u(Q(ce,(se(),Zu)),10),Lt&&(Yt+=r.c,Bt+=r.b,Tmt(t,r,Lt))}for(V=new S(_t);V.a<V.c.c.length;)for(M=u(J(V),10),r=t.b[M.c.p][M.p],h=new ar(lr(Ms(M).a.Kc(),new z));zr(h);)o=u(Lr(h),17),Yt+=r.c,Bt+=r.b,We=o.d.i,Tmt(t,r,We);_t.c=Pt(Xn,Ie,1,0,5,1)}return e=Yt+Bt,tt=e==0?ss:(Yt-Bt)/e,tt>=n}function g5n(){abt();function t(r){var s=this;this.dispatch=function(o){var h=o.data;switch(h.cmd){case"algorithms":var d=g3t((vn(),new T(new b1(Tb.b))));r.postMessage({id:h.id,data:d});break;case"categories":var w=g3t((vn(),new T(new b1(Tb.c))));r.postMessage({id:h.id,data:w});break;case"options":var k=g3t((vn(),new T(new b1(Tb.d))));r.postMessage({id:h.id,data:k});break;case"register":x3n(h.algorithms),r.postMessage({id:h.id});break;case"layout":eyn(h.graph,h.layoutOptions||{},h.options||{}),r.postMessage({id:h.id,data:h.graph});break}},this.saveDispatch=function(o){try{s.dispatch(o)}catch(h){r.postMessage({id:o.data.id,error:h})}}}function e(r){var s=this;this.dispatcher=new t({postMessage:function(o){s.onmessage({data:o})}}),this.postMessage=function(o){setTimeout(function(){s.dispatcher.saveDispatch({data:o})},0)}}if(typeof document===pot&&typeof self!==pot){var n=new t(self);self.onmessage=n.saveDispatch}else typeof p!==pot&&p.exports&&(Object.defineProperty(v,"__esModule",{value:!0}),p.exports={default:e,Worker:e})}function p5n(t){t.N||(t.N=!0,t.b=ic(t,0),es(t.b,0),es(t.b,1),es(t.b,2),t.bb=ic(t,1),es(t.bb,0),es(t.bb,1),t.fb=ic(t,2),es(t.fb,3),es(t.fb,4),Pi(t.fb,5),t.qb=ic(t,3),es(t.qb,0),Pi(t.qb,1),Pi(t.qb,2),es(t.qb,3),es(t.qb,4),Pi(t.qb,5),es(t.qb,6),t.a=ai(t,4),t.c=ai(t,5),t.d=ai(t,6),t.e=ai(t,7),t.f=ai(t,8),t.g=ai(t,9),t.i=ai(t,10),t.j=ai(t,11),t.k=ai(t,12),t.n=ai(t,13),t.o=ai(t,14),t.p=ai(t,15),t.q=ai(t,16),t.s=ai(t,17),t.r=ai(t,18),t.t=ai(t,19),t.u=ai(t,20),t.v=ai(t,21),t.w=ai(t,22),t.B=ai(t,23),t.A=ai(t,24),t.C=ai(t,25),t.D=ai(t,26),t.F=ai(t,27),t.G=ai(t,28),t.H=ai(t,29),t.J=ai(t,30),t.I=ai(t,31),t.K=ai(t,32),t.M=ai(t,33),t.L=ai(t,34),t.P=ai(t,35),t.Q=ai(t,36),t.R=ai(t,37),t.S=ai(t,38),t.T=ai(t,39),t.U=ai(t,40),t.V=ai(t,41),t.X=ai(t,42),t.W=ai(t,43),t.Y=ai(t,44),t.Z=ai(t,45),t.$=ai(t,46),t._=ai(t,47),t.ab=ai(t,48),t.cb=ai(t,49),t.db=ai(t,50),t.eb=ai(t,51),t.gb=ai(t,52),t.hb=ai(t,53),t.ib=ai(t,54),t.jb=ai(t,55),t.kb=ai(t,56),t.lb=ai(t,57),t.mb=ai(t,58),t.nb=ai(t,59),t.ob=ai(t,60),t.pb=ai(t,61))}function b5n(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt;if(Lt=0,e.f.a==0)for(tt=new S(t);tt.a<tt.c.c.length;)V=u(J(tt),10),Lt=b.Math.max(Lt,V.n.a+V.o.a+V.d.c);else Lt=e.f.a-e.c.a;for(Lt-=e.c.a,Y=new S(t);Y.a<Y.c.c.length;){switch(V=u(J(Y),10),A9(V.n,Lt-V.o.a),Lvt(V.f),kse(V),(V.q?V.q:(vn(),vn(),a0))._b((Te(),Hy))&&A9(u(Q(V,Hy),8),Lt-V.o.a),u(Q(V,Ld),248).g){case 1:Jt(V,Ld,(Qd(),zO));break;case 2:Jt(V,Ld,(Qd(),$O))}for(gt=V.o,Bt=new S(V.j);Bt.a<Bt.c.c.length;){for(_t=u(J(Bt),11),A9(_t.n,gt.a-_t.o.a),A9(_t.a,_t.o.a),Fs(_t,bne(_t.j)),h=u(Q(_t,Wg),19),h&&Jt(_t,Wg,de(-h.a)),o=new S(_t.g);o.a<o.c.c.length;){for(s=u(J(o),17),r=ei(s.a,0);r.b!=r.d.c;)n=u(ti(r),8),n.a=Lt-n.a;if(k=u(Q(s,_o),74),k)for(w=ei(k,0);w.b!=w.d.c;)d=u(ti(w),8),d.a=Lt-d.a;for(F=new S(s.b);F.a<F.c.c.length;)C=u(J(F),70),A9(C.n,Lt-C.o.a)}for(H=new S(_t.f);H.a<H.c.c.length;)C=u(J(H),70),A9(C.n,_t.o.a-C.o.a)}for(V.k==(Gn(),xs)&&(Jt(V,(se(),oc),bne(u(Q(V,oc),61))),k0n(V)),M=new S(V.b);M.a<M.c.c.length;)C=u(J(M),70),kse(C),A9(C.n,gt.a-C.o.a)}}function v5n(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt;if(Lt=0,e.f.b==0)for(tt=new S(t);tt.a<tt.c.c.length;)V=u(J(tt),10),Lt=b.Math.max(Lt,V.n.b+V.o.b+V.d.a);else Lt=e.f.b-e.c.b;for(Lt-=e.c.b,Y=new S(t);Y.a<Y.c.c.length;){switch(V=u(J(Y),10),S9(V.n,Lt-V.o.b),Mvt(V.f),Ese(V),(V.q?V.q:(vn(),vn(),a0))._b((Te(),Hy))&&S9(u(Q(V,Hy),8),Lt-V.o.b),u(Q(V,Ld),248).g){case 3:Jt(V,Ld,(Qd(),NV));break;case 4:Jt(V,Ld,(Qd(),FV))}for(gt=V.o,Bt=new S(V.j);Bt.a<Bt.c.c.length;){for(_t=u(J(Bt),11),S9(_t.n,gt.b-_t.o.b),S9(_t.a,_t.o.b),Fs(_t,vne(_t.j)),h=u(Q(_t,Wg),19),h&&Jt(_t,Wg,de(-h.a)),o=new S(_t.g);o.a<o.c.c.length;){for(s=u(J(o),17),r=ei(s.a,0);r.b!=r.d.c;)n=u(ti(r),8),n.b=Lt-n.b;if(k=u(Q(s,_o),74),k)for(w=ei(k,0);w.b!=w.d.c;)d=u(ti(w),8),d.b=Lt-d.b;for(F=new S(s.b);F.a<F.c.c.length;)C=u(J(F),70),S9(C.n,Lt-C.o.b)}for(H=new S(_t.f);H.a<H.c.c.length;)C=u(J(H),70),S9(C.n,_t.o.b-C.o.b)}for(V.k==(Gn(),xs)&&(Jt(V,(se(),oc),vne(u(Q(V,oc),61))),Gun(V)),M=new S(V.b);M.a<M.c.c.length;)C=u(J(M),70),Ese(C),S9(C.n,gt.b-C.o.b)}}function w5n(t,e,n,r){var s,o,h,d,w,k,C,M,F,H;for(M=!1,k=t+1,C=(An(t,e.c.length),u(e.c[t],200)),h=C.a,d=null,o=0;o<C.a.c.length;o++)if(s=(An(o,h.c.length),u(h.c[o],187)),!s.c){if(s.b.c.length==0){qd(),tD(C,s),--o,M=!0;continue}if(s.k||(d&&Vz(d),d=new Pwt(d?d.e+d.d+r:0,C.f,r),YI(s,d.e+d.d,C.f),ue(C.d,d),cyt(d,s),s.k=!0),w=null,w=(H=null,o<C.a.c.length-1?H=u(Fe(C.a,o+1),187):k<e.c.length&&(An(k,e.c.length),u(e.c[k],200)).a.c.length!=0&&(H=u(Fe((An(k,e.c.length),u(e.c[k],200)).a,0),187)),H),F=!1,w&&(F=!yi(w.j,C)),w){if(w.b.c.length==0){tD(C,w);break}else dI(s,n-s.s),Vz(s.q),M=M|E0n(C,s,w,n,r);if(w.b.c.length==0)for(tD((An(k,e.c.length),u(e.c[k],200)),w),w=null;e.c.length>k&&(An(k,e.c.length),u(e.c[k],200)).a.c.length==0;)vu(e,(An(k,e.c.length),e.c[k]));if(!w){--o;continue}if(nmn(e,C,s,w,F,n,k,r)){M=!0;continue}if(F){if(uyn(e,C,s,w,n,k,r)){M=!0;continue}else if(zyt(C,s)){s.c=!0,M=!0;continue}}else if(zyt(C,s)){s.c=!0,M=!0;continue}if(M)continue}if(zyt(C,s)){s.c=!0,M=!0,w&&(w.k=!1);continue}else Vz(s.q)}return M}function Mat(t,e,n,r,s,o,h){var d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce,Se,We,Qe,Rn,zn,hr,pi,Rs;for(Y=0,Rn=0,k=new S(t.b);k.a<k.c.c.length;)w=u(J(k),157),w.c&&ahe(w.c),Y=b.Math.max(Y,Fu(w)),Rn+=Fu(w)*xl(w);for(tt=Rn/t.b.c.length,Qe=N1n(t.b,tt),Rn+=t.b.c.length*Qe,Y=b.Math.max(Y,b.Math.sqrt(Rn*h))+n.b,pi=n.b,Rs=n.d,H=0,M=n.b+n.c,We=new Qi,ni(We,de(0)),ce=new Qi,C=new ha(t.b,0),V=null,d=new le;C.b<C.d.gc();)w=(Qn(C.b<C.d.gc()),u(C.d.Xb(C.c=C.b++),157)),hr=Fu(w),F=xl(w),pi+hr>Y&&(o&&(Kb(ce,H),Kb(We,de(C.b-1)),ue(t.d,V),d.c=Pt(Xn,Ie,1,0,5,1)),pi=n.b,Rs+=H+e,H=0,M=b.Math.max(M,n.b+n.c+hr)),d.c[d.c.length]=w,Kie(w,pi,Rs),M=b.Math.max(M,pi+hr+n.c),H=b.Math.max(H,F),pi+=hr+e,V=w;if(As(t.a,d),ue(t.d,u(Fe(d,d.c.length-1),157)),M=b.Math.max(M,r),zn=Rs+H+n.a,zn<s&&(H+=s-zn,zn=s),o)for(pi=n.b,C=new ha(t.b,0),Kb(We,de(t.b.c.length)),Se=ei(We,0),Lt=u(ti(Se),19).a,Kb(ce,H),Yt=ei(ce,0),Bt=0;C.b<C.d.gc();)C.b==Lt&&(pi=n.b,Bt=Xt(ye(ti(Yt))),Lt=u(ti(Se),19).a),w=(Qn(C.b<C.d.gc()),u(C.d.Xb(C.c=C.b++),157)),Aie(w,Bt),C.b==Lt&&(gt=M-pi-n.c,_t=Fu(w),Sie(w,gt),Qre(w,(gt-_t)/2,0)),pi+=Fu(w)+e;return new $e(M,zn)}function m5n(t){var e,n,r,s,o;switch(e=t.c,o=null,e){case 6:return t.Vl();case 13:return t.Wl();case 23:return t.Nl();case 22:return t.Sl();case 18:return t.Pl();case 8:fi(t),o=(gi(),xLt);break;case 9:return t.vl(!0);case 19:return t.wl();case 10:switch(t.a){case 100:case 68:case 119:case 87:case 115:case 83:return o=t.ul(t.a),fi(t),o;case 101:case 102:case 110:case 114:case 116:case 117:case 118:case 120:n=t.tl(),n<Ya?o=(gi(),gi(),new Vd(0,n)):o=TYt(r3t(n));break;case 99:return t.Fl();case 67:return t.Al();case 105:return t.Il();case 73:return t.Bl();case 103:return t.Gl();case 88:return t.Cl();case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return t.xl();case 80:case 112:if(o=n5t(t,t.a),!o)throw rt(new Fr(qr((Nr(),Qct))));break;default:o=HKt(t.a)}fi(t);break;case 0:if(t.a==93||t.a==123||t.a==125)throw rt(new Fr(qr((Nr(),C8t))));o=HKt(t.a),r=t.a,fi(t),(r&64512)==OD&&t.c==0&&(t.a&64512)==56320&&(s=Pt(mh,vd,25,2,15,1),s[0]=r&ms,s[1]=t.a&ms,o=Rnt(TYt(Ah(s,0,s.length)),0),fi(t));break;default:throw rt(new Fr(qr((Nr(),C8t))))}return o}function y5n(t,e,n){var r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt;if(r=new le,s=vi,o=vi,h=vi,n)for(s=t.f.a,Y=new S(e.j);Y.a<Y.c.c.length;)for(V=u(J(Y),11),w=new S(V.g);w.a<w.c.c.length;)d=u(J(w),17),d.a.b!=0&&(C=u(ant(d.a),8),C.a<s&&(o=s-C.a,h=vi,r.c=Pt(Xn,Ie,1,0,5,1),s=C.a),C.a<=s&&(r.c[r.c.length]=d,d.a.b>1&&(h=b.Math.min(h,b.Math.abs(u(Qf(d.a,1),8).b-C.b)))));else for(Y=new S(e.j);Y.a<Y.c.c.length;)for(V=u(J(Y),11),w=new S(V.e);w.a<w.c.c.length;)d=u(J(w),17),d.a.b!=0&&(F=u(vj(d.a),8),F.a>s&&(o=F.a-s,h=vi,r.c=Pt(Xn,Ie,1,0,5,1),s=F.a),F.a>=s&&(r.c[r.c.length]=d,d.a.b>1&&(h=b.Math.min(h,b.Math.abs(u(Qf(d.a,d.a.b-2),8).b-F.b)))));if(r.c.length!=0&&o>e.o.a/2&&h>e.o.b/2){for(H=new Mc,Uo(H,e),Fs(H,(be(),Nn)),H.n.a=e.o.a/2,gt=new Mc,Uo(gt,e),Fs(gt,mr),gt.n.a=e.o.a/2,gt.n.b=e.o.b,w=new S(r);w.a<w.c.c.length;)d=u(J(w),17),n?(k=u(knt(d.a),8),tt=d.a.b==0?T1(d.d):u(ant(d.a),8),tt.b>=k.b?Da(d,gt):Da(d,H)):(k=u(ftn(d.a),8),tt=d.a.b==0?T1(d.c):u(vj(d.a),8),tt.b>=k.b?sa(d,gt):sa(d,H)),M=u(Q(d,(Te(),_o)),74),M&&ry(M,k,!0);e.n.a=s-e.o.a/2}}function x5n(t,e,n){var r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce,Se,We,Qe,Rn,zn,hr,pi,Rs,Xl,Kh;if(Rn=null,hr=e,zn=PZt(t,IZt(n),hr),qC(zn,O0(hr,Cd)),pi=u(t4(t.g,s6(D0(hr,jct))),33),F=D0(hr,"sourcePort"),r=null,F&&(r=s6(F)),Rs=u(t4(t.j,r),118),!pi)throw d=oE(hr),V="An edge must have a source node (edge id: '"+d,Y=V+VE,rt(new ad(Y));if(Rs&&!fd(k1(Rs),pi))throw w=O0(hr,Cd),tt="The source port of an edge must be a port of the edge's source node (edge id: '"+w,gt=tt+VE,rt(new ad(gt));if(We=(!zn.b&&(zn.b=new Cn(br,zn,4,7)),zn.b),o=null,Rs?o=Rs:o=pi,Mr(We,o),Xl=u(t4(t.g,s6(D0(hr,E8t))),33),H=D0(hr,"targetPort"),s=null,H&&(s=s6(H)),Kh=u(t4(t.j,s),118),!Xl)throw M=oE(hr),Lt="An edge must have a target node (edge id: '"+M,_t=Lt+VE,rt(new ad(_t));if(Kh&&!fd(k1(Kh),Xl))throw k=O0(hr,Cd),Bt="The target port of an edge must be a port of the edge's target node (edge id: '"+k,Yt=Bt+VE,rt(new ad(Yt));if(Qe=(!zn.c&&(zn.c=new Cn(br,zn,5,8)),zn.c),h=null,Kh?h=Kh:h=Xl,Mr(Qe,h),(!zn.b&&(zn.b=new Cn(br,zn,4,7)),zn.b).i==0||(!zn.c&&(zn.c=new Cn(br,zn,5,8)),zn.c).i==0)throw C=O0(hr,Cd),ce=Sde+C,Se=ce+VE,rt(new ad(Se));return Jz(hr,zn),hbn(hr,zn),Rn=wit(t,hr,zn),Rn}function Dhe(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce,Se,We,Qe,Rn;return M=Tmn(gu(t,(be(),G1)),e),V=h4(gu(t,Sf),e),Bt=h4(gu(t,Wl),e),We=Uz(gu(t,qh),e),F=Uz(gu(t,vh),e),Lt=h4(gu(t,Af),e),Y=h4(gu(t,tl),e),ce=h4(gu(t,Kl),e),Yt=h4(gu(t,wh),e),Qe=Uz(gu(t,uu),e),gt=h4(gu(t,_u),e),_t=h4(gu(t,el),e),Se=h4(gu(t,Cu),e),Rn=Uz(gu(t,Su),e),H=Uz(gu(t,qu),e),tt=h4(gu(t,Uc),e),n=r4(ct(ot(ia,1),vo,25,15,[Lt.a,We.a,ce.a,Rn.a])),r=r4(ct(ot(ia,1),vo,25,15,[V.a,M.a,Bt.a,tt.a])),s=gt.a,o=r4(ct(ot(ia,1),vo,25,15,[Y.a,F.a,Yt.a,H.a])),k=r4(ct(ot(ia,1),vo,25,15,[Lt.b,V.b,Y.b,_t.b])),w=r4(ct(ot(ia,1),vo,25,15,[We.b,M.b,F.b,tt.b])),C=Qe.b,d=r4(ct(ot(ia,1),vo,25,15,[ce.b,Bt.b,Yt.b,Se.b])),Mg(gu(t,G1),n+s,k+C),Mg(gu(t,Uc),n+s,k+C),Mg(gu(t,Sf),n+s,0),Mg(gu(t,Wl),n+s,k+C+w),Mg(gu(t,qh),0,k+C),Mg(gu(t,vh),n+s+r,k+C),Mg(gu(t,tl),n+s+r,0),Mg(gu(t,Kl),0,k+C+w),Mg(gu(t,wh),n+s+r,k+C+w),Mg(gu(t,uu),0,k),Mg(gu(t,_u),n,0),Mg(gu(t,Cu),0,k+C+w),Mg(gu(t,qu),n+s+r,0),h=new Ta,h.a=r4(ct(ot(ia,1),vo,25,15,[n+r+s+o,Qe.a,_t.a,Se.a])),h.b=r4(ct(ot(ia,1),vo,25,15,[k+w+C+d,gt.b,Rn.b,H.b])),h}function k5n(t){var e,n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt;for(Y=new le,F=new S(t.d.b);F.a<F.c.c.length;)for(M=u(J(F),29),V=new S(M.a);V.a<V.c.c.length;){for(H=u(J(V),10),s=u(Jn(t.f,H),57),w=new ar(lr(Ms(H).a.Kc(),new z));zr(w);)if(h=u(Lr(w),17),r=ei(h.a,0),k=!0,C=null,r.b!=r.d.c){for(e=u(ti(r),8),n=null,h.c.j==(be(),Nn)&&(tt=new x_(e,new $e(e.a,s.d.d),s,h),tt.f.a=!0,tt.a=h.c,Y.c[Y.c.length]=tt),h.c.j==mr&&(tt=new x_(e,new $e(e.a,s.d.d+s.d.a),s,h),tt.f.d=!0,tt.a=h.c,Y.c[Y.c.length]=tt);r.b!=r.d.c;)n=u(ti(r),8),jmt(e.b,n.b)||(C=new x_(e,n,null,h),Y.c[Y.c.length]=C,k&&(k=!1,n.b<s.d.d?C.f.a=!0:n.b>s.d.d+s.d.a?C.f.d=!0:(C.f.d=!0,C.f.a=!0))),r.b!=r.d.c&&(e=n);C&&(o=u(Jn(t.f,h.d.i),57),e.b<o.d.d?C.f.a=!0:e.b>o.d.d+o.d.a?C.f.d=!0:(C.f.d=!0,C.f.a=!0))}for(d=new ar(lr(jo(H).a.Kc(),new z));zr(d);)h=u(Lr(d),17),h.a.b!=0&&(e=u(vj(h.a),8),h.d.j==(be(),Nn)&&(tt=new x_(e,new $e(e.a,s.d.d),s,h),tt.f.a=!0,tt.a=h.d,Y.c[Y.c.length]=tt),h.d.j==mr&&(tt=new x_(e,new $e(e.a,s.d.d+s.d.a),s,h),tt.f.d=!0,tt.a=h.d,Y.c[Y.c.length]=tt))}return Y}function E5n(t,e,n){var r,s,o,h,d,w,k,C,M;if(wr(n,"Network simplex node placement",1),t.e=e,t.n=u(Q(e,(se(),Y4)),304),$yn(t),ydn(t),us(Wo(new Tn(null,new _n(t.e.b,16)),new fQ),new C$t(t)),us(Ri(Wo(Ri(Wo(new Tn(null,new _n(t.e.b,16)),new GT),new kQ),new EQ),new TQ),new T$t(t)),je(Re(Q(t.e,(Te(),TS))))&&(h=Rc(n,1),wr(h,"Straight Edges Pre-Processing",1),s4n(t),or(h)),efn(t.f),o=u(Q(e,SS),19).a*t.f.a.c.length,cat(Jpt(tbt(mnt(t.f),o),!1),Rc(n,1)),t.d.a.gc()!=0){for(h=Rc(n,1),wr(h,"Flexible Where Space Processing",1),d=u(Ov(Hj(pu(new Tn(null,new _n(t.f.a,16)),new dQ),new aQ)),19).a,w=u(Ov(qj(pu(new Tn(null,new _n(t.f.a,16)),new gQ),new oQ)),19).a,k=w-d,C=Dv(new Ub,t.f),M=Dv(new Ub,t.f),vf(of(af(sf(cf(new Eh,2e4),k),C),M)),us(Ri(Ri($nt(t.i),new pQ),new bQ),new kXt(d,C,k,M)),s=t.d.a.ec().Kc();s.Ob();)r=u(s.Pb(),213),r.g=1;cat(Jpt(tbt(mnt(t.f),o),!1),Rc(h,1)),or(h)}je(Re(Q(e,TS)))&&(h=Rc(n,1),wr(h,"Straight Edges Post-Processing",1),lgn(t),or(h)),H3n(t),t.e=null,t.f=null,t.i=null,t.c=null,Yu(t.k),t.j=null,t.a=null,t.o=null,t.d.a.$b(),or(n)}function T5n(t,e,n){var r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt;for(d=new S(t.a.b);d.a<d.c.c.length;)for(o=u(J(d),29),_t=new S(o.a);_t.a<_t.c.c.length;)Lt=u(J(_t),10),e.g[Lt.p]=Lt,e.a[Lt.p]=Lt,e.d[Lt.p]=0;for(w=t.a.b,e.c==(dd(),Kg)&&(w=Et(w,152)?Vx(u(w,152)):Et(w,131)?u(w,131).a:Et(w,54)?new mv(w):new Mm(w)),h=w.Kc();h.Ob();)for(o=u(h.Pb(),29),H=-1,F=o.a,e.o==(E1(),z1)&&(H=vi,F=Et(F,152)?Vx(u(F,152)):Et(F,131)?u(F,131).a:Et(F,54)?new mv(F):new Mm(F)),Yt=F.Kc();Yt.Ob();)if(Bt=u(Yt.Pb(),10),M=null,e.c==Kg?M=u(Fe(t.b.f,Bt.p),15):M=u(Fe(t.b.b,Bt.p),15),M.gc()>0)if(r=M.gc(),k=ps(b.Math.floor((r+1)/2))-1,s=ps(b.Math.ceil((r+1)/2))-1,e.o==z1)for(C=s;C>=k;C--)e.a[Bt.p]==Bt&&(Y=u(M.Xb(C),46),V=u(Y.a,10),!S0(n,Y.b)&&H>t.b.e[V.p]&&(e.a[V.p]=Bt,e.g[Bt.p]=e.g[V.p],e.a[Bt.p]=e.g[Bt.p],e.f[e.g[Bt.p].p]=(Fn(),!!(je(e.f[e.g[Bt.p].p])&Bt.k==(Gn(),Zs))),H=t.b.e[V.p]));else for(C=k;C<=s;C++)e.a[Bt.p]==Bt&&(gt=u(M.Xb(C),46),tt=u(gt.a,10),!S0(n,gt.b)&&H<t.b.e[tt.p]&&(e.a[tt.p]=Bt,e.g[Bt.p]=e.g[tt.p],e.a[Bt.p]=e.g[Bt.p],e.f[e.g[Bt.p].p]=(Fn(),!!(je(e.f[e.g[Bt.p].p])&Bt.k==(Gn(),Zs))),H=t.b.e[tt.p]))}function Zc(){Zc=Z,dHt(),O4e=ta.a,u(St(Wt(ta.a),0),18),I4e=ta.f,u(St(Wt(ta.f),0),18),u(St(Wt(ta.f),1),34),D4e=ta.n,u(St(Wt(ta.n),0),34),u(St(Wt(ta.n),1),34),u(St(Wt(ta.n),2),34),u(St(Wt(ta.n),3),34),RAt=ta.g,u(St(Wt(ta.g),0),18),u(St(Wt(ta.g),1),34),M4e=ta.c,u(St(Wt(ta.c),0),18),u(St(Wt(ta.c),1),18),jAt=ta.i,u(St(Wt(ta.i),0),18),u(St(Wt(ta.i),1),18),u(St(Wt(ta.i),2),18),u(St(Wt(ta.i),3),18),u(St(Wt(ta.i),4),34),$At=ta.j,u(St(Wt(ta.j),0),18),BAt=ta.d,u(St(Wt(ta.d),0),18),u(St(Wt(ta.d),1),18),u(St(Wt(ta.d),2),18),u(St(Wt(ta.d),3),18),u(St(Wt(ta.d),4),34),u(St(Wt(ta.d),5),34),u(St(Wt(ta.d),6),34),u(St(Wt(ta.d),7),34),L4e=ta.b,u(St(Wt(ta.b),0),34),u(St(Wt(ta.b),1),34),YV=ta.e,u(St(Wt(ta.e),0),34),u(St(Wt(ta.e),1),34),u(St(Wt(ta.e),2),34),u(St(Wt(ta.e),3),34),u(St(Wt(ta.e),4),18),u(St(Wt(ta.e),5),18),u(St(Wt(ta.e),6),18),u(St(Wt(ta.e),7),18),u(St(Wt(ta.e),8),18),u(St(Wt(ta.e),9),18),u(St(Wt(ta.e),10),34),Eb=ta.k,u(St(Wt(ta.k),0),34),u(St(Wt(ta.k),1),34)}function C5n(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce,Se,We,Qe,Rn,zn;for(Qe=new Qi,ce=new Qi,tt=-1,w=new S(t);w.a<w.c.c.length;){for(h=u(J(w),128),h.s=tt--,C=0,_t=0,o=new S(h.t);o.a<o.c.c.length;)r=u(J(o),268),_t+=r.c;for(s=new S(h.i);s.a<s.c.c.length;)r=u(J(s),268),C+=r.c;h.n=C,h.u=_t,_t==0?hs(ce,h,ce.c.b,ce.c):C==0&&hs(Qe,h,Qe.c.b,Qe.c)}for(zn=E$(t),M=t.c.length,Y=M+1,gt=M-1,H=new le;zn.a.gc()!=0;){for(;ce.b!=0;)Yt=(Qn(ce.b!=0),u(ch(ce,ce.a.a),128)),zn.a.Bc(Yt)!=null,Yt.s=gt--,x5t(Yt,Qe,ce);for(;Qe.b!=0;)Se=(Qn(Qe.b!=0),u(ch(Qe,Qe.a.a),128)),zn.a.Bc(Se)!=null,Se.s=Y++,x5t(Se,Qe,ce);for(V=_a,k=zn.a.ec().Kc();k.Ob();)h=u(k.Pb(),128),Lt=h.u-h.n,Lt>=V&&(Lt>V&&(H.c=Pt(Xn,Ie,1,0,5,1),V=Lt),H.c[H.c.length]=h);H.c.length!=0&&(F=u(Fe(H,zz(e,H.c.length)),128),zn.a.Bc(F)!=null,F.s=Y++,x5t(F,Qe,ce),H.c=Pt(Xn,Ie,1,0,5,1))}for(Bt=t.c.length+1,d=new S(t);d.a<d.c.c.length;)h=u(J(d),128),h.s<M&&(h.s+=Bt);for(We=new S(t);We.a<We.c.c.length;)for(Se=u(J(We),128),n=new ha(Se.t,0);n.b<n.d.gc();)r=(Qn(n.b<n.d.gc()),u(n.d.Xb(n.c=n.b++),268)),Rn=r.b,Se.s>Rn.s&&(El(n),vu(Rn.i,r),r.c>0&&(r.a=Rn,ue(Rn.t,r),r.b=Se,ue(Se.i,r)))}function Cxt(t){var e,n,r,s,o;switch(e=t.c,e){case 11:return t.Ml();case 12:return t.Ol();case 14:return t.Ql();case 15:return t.Tl();case 16:return t.Rl();case 17:return t.Ul();case 21:return fi(t),gi(),gi(),fA;case 10:switch(t.a){case 65:return t.yl();case 90:return t.Dl();case 122:return t.Kl();case 98:return t.El();case 66:return t.zl();case 60:return t.Jl();case 62:return t.Hl()}}switch(o=m5n(t),e=t.c,e){case 3:return t.Zl(o);case 4:return t.Xl(o);case 5:return t.Yl(o);case 0:if(t.a==123&&t.d<t.j){if(s=t.d,r=0,n=-1,(e=ba(t.i,s++))>=48&&e<=57){for(r=e-48;s<t.j&&(e=ba(t.i,s++))>=48&&e<=57;)if(r=r*10+e-48,r<0)throw rt(new Fr(qr((Nr(),L8t))))}else throw rt(new Fr(qr((Nr(),e0e))));if(n=r,e==44){if(s>=t.j)throw rt(new Fr(qr((Nr(),r0e))));if((e=ba(t.i,s++))>=48&&e<=57){for(n=e-48;s<t.j&&(e=ba(t.i,s++))>=48&&e<=57;)if(n=n*10+e-48,n<0)throw rt(new Fr(qr((Nr(),L8t))));if(r>n)throw rt(new Fr(qr((Nr(),i0e))))}else n=-1}if(e!=125)throw rt(new Fr(qr((Nr(),n0e))));t.sl(s)?(o=(gi(),gi(),new Wm(9,o)),t.d=s+1):(o=(gi(),gi(),new Wm(3,o)),t.d=s),o.dm(r),o.cm(n),fi(t)}}return o}function Ohe(t,e,n,r,s){var o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce,Se,We,Qe,Rn,zn;for(Y=new Yc(e.b),Bt=new Yc(e.b),F=new Yc(e.b),We=new Yc(e.b),tt=new Yc(e.b),Se=ei(e,0);Se.b!=Se.d.c;)for(Yt=u(ti(Se),11),d=new S(Yt.g);d.a<d.c.c.length;)if(o=u(J(d),17),o.c.i==o.d.i){if(Yt.j==o.d.j){We.c[We.c.length]=o;continue}else if(Yt.j==(be(),Nn)&&o.d.j==mr){tt.c[tt.c.length]=o;continue}}for(w=new S(tt);w.a<w.c.c.length;)o=u(J(w),17),amn(t,o,n,r,(be(),Hn));for(h=new S(We);h.a<h.c.c.length;)o=u(J(h),17),Qe=new H0(t),_0(Qe,(Gn(),Hc)),Jt(Qe,(Te(),os),(oa(),Vc)),Jt(Qe,(se(),_i),o),Rn=new Mc,Jt(Rn,_i,o.d),Fs(Rn,(be(),Bn)),Uo(Rn,Qe),zn=new Mc,Jt(zn,_i,o.c),Fs(zn,Hn),Uo(zn,Qe),Jt(o.c,Zu,Qe),Jt(o.d,Zu,Qe),Da(o,null),sa(o,null),n.c[n.c.length]=Qe,Jt(Qe,qG,de(2));for(ce=ei(e,0);ce.b!=ce.d.c;)Yt=u(ti(ce),11),k=Yt.e.c.length>0,gt=Yt.g.c.length>0,k&&gt?F.c[F.c.length]=Yt:k?Y.c[Y.c.length]=Yt:gt&&(Bt.c[Bt.c.length]=Yt);for(V=new S(Y);V.a<V.c.c.length;)H=u(J(V),11),ue(s,oxt(t,H,null,n));for(_t=new S(Bt);_t.a<_t.c.c.length;)Lt=u(J(_t),11),ue(s,oxt(t,null,Lt,n));for(M=new S(F);M.a<M.c.c.length;)C=u(J(M),11),ue(s,oxt(t,C,C,n))}function Nhe(t){var e,n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce,Se,We,Qe,Rn;for(Lt=new $e(ss,ss),e=new $e(Ts,Ts),We=new S(t);We.a<We.c.c.length;)Se=u(J(We),8),Lt.a=b.Math.min(Lt.a,Se.a),Lt.b=b.Math.min(Lt.b,Se.b),e.a=b.Math.max(e.a,Se.a),e.b=b.Math.max(e.b,Se.b);for(F=new $e(e.a-Lt.a,e.b-Lt.b),k=new $e(Lt.a-50,Lt.b-F.a-50),C=new $e(Lt.a-50,e.b+F.a+50),M=new $e(e.a+F.b/2+50,Lt.b+F.b/2),H=new ixt(k,C,M),ce=new qs,o=new le,n=new le,ce.a.zc(H,ce),Rn=new S(t);Rn.a<Rn.c.c.length;){for(Qe=u(J(Rn),8),o.c=Pt(Xn,Ie,1,0,5,1),Yt=ce.a.ec().Kc();Yt.Ob();)_t=u(Yt.Pb(),308),r=_t.d,Hp(r,_t.a),rw(Hp(_t.d,Qe),Hp(_t.d,_t.a))<0&&(o.c[o.c.length]=_t);for(n.c=Pt(Xn,Ie,1,0,5,1),Bt=new S(o);Bt.a<Bt.c.c.length;)for(_t=u(J(Bt),308),tt=new S(_t.e);tt.a<tt.c.c.length;){for(V=u(J(tt),168),h=!0,w=new S(o);w.a<w.c.c.length;)d=u(J(w),308),d!=_t&&(Pc(V,Fe(d.e,0))||Pc(V,Fe(d.e,1))||Pc(V,Fe(d.e,2)))&&(h=!1);h&&(n.c[n.c.length]=V)}for(pae(ce,o),va(ce,new La),Y=new S(n);Y.a<Y.c.c.length;)V=u(J(Y),168),Ns(ce,new ixt(Qe,V.a,V.b))}for(gt=new qs,va(ce,new Sn(gt)),s=gt.a.ec().Kc();s.Ob();)V=u(s.Pb(),168),(B$(H,V.a)||B$(H,V.b))&&s.Qb();return va(gt,new Gs),gt}function _5n(t){var e,n,r,s,o;switch(n=u(Q(t,(se(),Gc)),21),e=ij(vbe),s=u(Q(t,(Te(),jy)),334),s==($0(),Zg)&&Rl(e,wbe),je(Re(Q(t,Ylt)))?bi(e,(Wa(),Ad),(ro(),ilt)):bi(e,(Wa(),ou),(ro(),ilt)),Q(t,(L$(),GS))!=null&&Rl(e,mbe),(je(Re(Q(t,Y9t)))||je(Re(Q(t,V9t))))&&Ku(e,(Wa(),Io),(ro(),G7t)),u(Q(t,Vl),103).g){case 2:case 3:case 4:Ku(bi(e,(Wa(),Ad),(ro(),U7t)),Io,V7t)}switch(n.Hc((oo(),RG))&&Ku(bi(bi(e,(Wa(),Ad),(ro(),H7t)),qc,z7t),Io,q7t),Gt(Q(t,Xlt))!==Gt((w4(),hV))&&bi(e,(Wa(),ou),(ro(),oTt)),n.Hc($G)&&(bi(e,(Wa(),Ad),(ro(),hTt)),bi(e,lb,uTt),bi(e,ou,lTt)),Gt(Q(t,KG))!==Gt((gE(),bS))&&Gt(Q(t,X0))!==Gt((q0(),XO))&&Ku(e,(Wa(),Io),(ro(),eTt)),je(Re(Q(t,W9t)))&&bi(e,(Wa(),ou),(ro(),tTt)),je(Re(Q(t,Vlt)))&&bi(e,(Wa(),ou),(ro(),fTt)),r2n(t)&&(Gt(Q(t,jy))===Gt(Zg)?r=u(Q(t,_O),292):r=u(Q(t,Glt),292),o=r==(W8(),Llt)?(ro(),cTt):(ro(),pTt),bi(e,(Wa(),qc),o)),u(Q(t,xCt),377).g){case 1:bi(e,(Wa(),qc),(ro(),dTt));break;case 2:Ku(bi(bi(e,(Wa(),ou),(ro(),B7t)),qc,R7t),Io,j7t)}return Gt(Q(t,db))!==Gt((j0(),gb))&&bi(e,(Wa(),ou),(ro(),gTt)),e}function Phe(t){Sv(t,new w2(Ev(yv(kv(xv(new pg,Dh),"ELK Rectangle Packing"),"Algorithm for packing of unconnected boxes, i.e. graphs without edges. The given order of the boxes is always preserved and the main reading direction of the boxes is left to right. The algorithm is divided into two phases. One phase approximates the width in which the rectangles can be placed. The next phase places the rectangles in rows using the previously calculated width as bounding width and bundles rectangles with a similar height in blocks. A compaction step reduces the size of the drawing. Finally, the rectangles are expanded to fill their bounding box and eliminate empty unused spaces."),new aZ))),xe(t,Dh,b6,1.3),xe(t,Dh,gH,De(R_t)),xe(t,Dh,ww,V_t),xe(t,Dh,ky,15),xe(t,Dh,cH,De(Kye)),xe(t,Dh,L4,De(Qye)),xe(t,Dh,w6,De(Zye)),xe(t,Dh,v6,De(Jye)),xe(t,Dh,RE,De(Xye)),xe(t,Dh,F_,De(q_t)),xe(t,Dh,jE,De(e3e)),xe(t,Dh,Wkt,De(G_t)),xe(t,Dh,Kkt,De(z_t)),xe(t,Dh,Qkt,De(H_t)),xe(t,Dh,Zkt,De(U_t)),xe(t,Dh,Cct,De(j_t)),xe(t,Dh,$D,De($_t)),xe(t,Dh,pct,De(Yye)),xe(t,Dh,Xkt,De(RO)),xe(t,Dh,Ykt,De(B_t)),xe(t,Dh,Jkt,De(W_t))}function pw(t,e,n){var r,s,o,h,d,w,k,C,M,F,H,V,Y,tt;if(n==null)return null;if(t.a!=e.Aj())throw rt(new Pn(HE+e.ne()+kw));if(Et(e,457)){if(tt=Ovn(u(e,671),n),!tt)throw rt(new Pn(Bct+n+"' is not a valid enumerator of '"+e.ne()+"'"));return tt}switch(Og((Ru(),ma),e).cl()){case 2:{n=$c(n,!1);break}case 3:{n=$c(n,!0);break}}if(r=Og(ma,e).$k(),r)return r.Aj().Nh().Kh(r,n);if(F=Og(ma,e).al(),F){for(tt=new le,k=kit(n),C=0,M=k.length;C<M;++C)w=k[C],ue(tt,F.Aj().Nh().Kh(F,w));return tt}if(Y=Og(ma,e).bl(),!Y.dc()){for(V=Y.Kc();V.Ob();){H=u(V.Pb(),148);try{if(tt=H.Aj().Nh().Kh(H,n),tt!=null)return tt}catch(gt){if(gt=Wi(gt),!Et(gt,60))throw rt(gt)}}throw rt(new Pn(Bct+n+"' does not match any member types of the union datatype '"+e.ne()+"'"))}if(u(e,834).Fj(),s=Dun(e.Bj()),!s)return null;if(s==aS){h=0;try{h=$l(n,_a,vi)&ms}catch(gt){if(gt=Wi(gt),Et(gt,127))o=R$(n),h=o[0];else throw rt(gt)}return DI(h)}if(s==HH){for(d=0;d<rA.length;++d)try{return TGt(rA[d],n)}catch(gt){if(gt=Wi(gt),!Et(gt,32))throw rt(gt)}throw rt(new Pn(Bct+n+"' is not a date formatted string of the form yyyy-MM-dd'T'HH:mm:ss'.'SSSZ or a valid subset thereof"))}throw rt(new Pn(Bct+n+"' is invalid. "))}function S5n(t,e){var n,r,s,o,h,d,w,k;if(n=0,h=0,o=e.length,d=null,k=new Lm,h<o&&(Rr(h,e.length),e.charCodeAt(h)==43)&&(++h,++n,h<o&&(Rr(h,e.length),e.charCodeAt(h)==43||(Rr(h,e.length),e.charCodeAt(h)==45))))throw rt(new od(vw+e+'"'));for(;h<o&&(Rr(h,e.length),e.charCodeAt(h)!=46)&&(Rr(h,e.length),e.charCodeAt(h)!=101)&&(Rr(h,e.length),e.charCodeAt(h)!=69);)++h;if(k.a+=""+Dl(e==null?Tu:(On(e),e),n,h),h<o&&(Rr(h,e.length),e.charCodeAt(h)==46)){for(++h,n=h;h<o&&(Rr(h,e.length),e.charCodeAt(h)!=101)&&(Rr(h,e.length),e.charCodeAt(h)!=69);)++h;t.e=h-n,k.a+=""+Dl(e==null?Tu:(On(e),e),n,h)}else t.e=0;if(h<o&&(Rr(h,e.length),e.charCodeAt(h)==101||(Rr(h,e.length),e.charCodeAt(h)==69))&&(++h,n=h,h<o&&(Rr(h,e.length),e.charCodeAt(h)==43)&&(++h,h<o&&(Rr(h,e.length),e.charCodeAt(h)!=45)&&++n),d=e.substr(n,o-n),t.e=t.e-$l(d,_a,vi),t.e!=ps(t.e)))throw rt(new od("Scale out of range."));if(w=k.a,w.length<16){if(t.f=(vEt==null&&(vEt=new RegExp("^[+-]?\\d*$","i")),vEt.test(w)?parseInt(w,10):NaN),isNaN(t.f))throw rt(new od(vw+e+'"'));t.a=Z4t(t.f)}else Kln(t,new Np(w));for(t.d=k.a.length,s=0;s<k.a.length&&(r=ba(k.a,s),!(r!=45&&r!=48));++s)--t.d;t.d==0&&(t.d=1)}function Iat(){Iat=Z,Ni=new Hv,ln(Ni,(be(),G1),Uc),ln(Ni,qh,Uc),ln(Ni,qh,Su),ln(Ni,vh,qu),ln(Ni,vh,Uc),ln(Ni,Sf,Uc),ln(Ni,Sf,el),ln(Ni,Wl,Cu),ln(Ni,Wl,Uc),ln(Ni,_u,uu),ln(Ni,_u,Uc),ln(Ni,_u,el),ln(Ni,_u,Cu),ln(Ni,uu,_u),ln(Ni,uu,Su),ln(Ni,uu,qu),ln(Ni,uu,Uc),ln(Ni,Af,Af),ln(Ni,Af,el),ln(Ni,Af,Su),ln(Ni,tl,tl),ln(Ni,tl,el),ln(Ni,tl,qu),ln(Ni,Kl,Kl),ln(Ni,Kl,Cu),ln(Ni,Kl,Su),ln(Ni,wh,wh),ln(Ni,wh,Cu),ln(Ni,wh,qu),ln(Ni,el,Sf),ln(Ni,el,_u),ln(Ni,el,Af),ln(Ni,el,tl),ln(Ni,el,Uc),ln(Ni,el,el),ln(Ni,el,Su),ln(Ni,el,qu),ln(Ni,Cu,Wl),ln(Ni,Cu,_u),ln(Ni,Cu,Kl),ln(Ni,Cu,wh),ln(Ni,Cu,Cu),ln(Ni,Cu,Su),ln(Ni,Cu,qu),ln(Ni,Cu,Uc),ln(Ni,Su,qh),ln(Ni,Su,uu),ln(Ni,Su,Af),ln(Ni,Su,Kl),ln(Ni,Su,el),ln(Ni,Su,Cu),ln(Ni,Su,Su),ln(Ni,Su,Uc),ln(Ni,qu,vh),ln(Ni,qu,uu),ln(Ni,qu,tl),ln(Ni,qu,wh),ln(Ni,qu,el),ln(Ni,qu,Cu),ln(Ni,qu,qu),ln(Ni,qu,Uc),ln(Ni,Uc,G1),ln(Ni,Uc,qh),ln(Ni,Uc,vh),ln(Ni,Uc,Sf),ln(Ni,Uc,Wl),ln(Ni,Uc,_u),ln(Ni,Uc,uu),ln(Ni,Uc,el),ln(Ni,Uc,Cu),ln(Ni,Uc,Su),ln(Ni,Uc,qu),ln(Ni,Uc,Uc)}function _xt(t,e,n){var r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce,Se,We;for(t.d=new $e(ss,ss),t.c=new $e(Ts,Ts),F=e.Kc();F.Ob();)for(C=u(F.Pb(),37),_t=new S(C.a);_t.a<_t.c.c.length;)Lt=u(J(_t),10),t.d.a=b.Math.min(t.d.a,Lt.n.a-Lt.d.b),t.d.b=b.Math.min(t.d.b,Lt.n.b-Lt.d.d),t.c.a=b.Math.max(t.c.a,Lt.n.a+Lt.o.a+Lt.d.c),t.c.b=b.Math.max(t.c.b,Lt.n.b+Lt.o.b+Lt.d.a);for(d=new Jzt,M=e.Kc();M.Ob();)C=u(M.Pb(),37),r=l5n(t,C),ue(d.a,r),r.a=r.a|!u(Q(r.c,(se(),Ny)),21).dc();for(t.b=(Iit(),We=new j5,We.f=new jee(n),We.b=w3n(We.f,d),We),_3n((V=t.b,new Yk,V)),t.e=new Ta,t.a=t.b.f.e,h=new S(d.a);h.a<h.c.c.length;)for(s=u(J(h),841),Bt=lrn(t.b,s),fwn(s.c,Bt.a,Bt.b),tt=new S(s.c.a);tt.a<tt.c.c.length;)Y=u(J(tt),10),Y.k==(Gn(),xs)&&(gt=k5t(t,Y.n,u(Q(Y,(se(),oc)),61)),Li(Gf(Y.n),gt));for(o=new S(d.a);o.a<o.c.c.length;)for(s=u(J(o),841),k=new S(qun(s));k.a<k.c.c.length;)for(w=u(J(k),17),Se=new yR(w.a),h8(Se,0,T1(w.c)),ni(Se,T1(w.d)),H=null,ce=ei(Se,0);ce.b!=ce.d.c;){if(Yt=u(ti(ce),8),!H){H=Yt;continue}$mt(H.a,Yt.a)?(t.e.a=b.Math.min(t.e.a,H.a),t.a.a=b.Math.max(t.a.a,H.a)):$mt(H.b,Yt.b)&&(t.e.b=b.Math.min(t.e.b,H.b),t.a.b=b.Math.max(t.a.b,H.b)),H=Yt}mj(t.e),Li(t.a,t.e)}function A5n(t){Ir(t.b,Ph,ct(ot(Ae,1),te,2,6,[Ew,"ConsistentTransient"])),Ir(t.a,Ph,ct(ot(Ae,1),te,2,6,[Ew,"WellFormedSourceURI"])),Ir(t.o,Ph,ct(ot(Ae,1),te,2,6,[Ew,"InterfaceIsAbstract AtMostOneID UniqueFeatureNames UniqueOperationSignatures NoCircularSuperTypes WellFormedMapEntryClass ConsistentSuperTypes DisjointFeatureAndOperationSignatures"])),Ir(t.p,Ph,ct(ot(Ae,1),te,2,6,[Ew,"WellFormedInstanceTypeName UniqueTypeParameterNames"])),Ir(t.v,Ph,ct(ot(Ae,1),te,2,6,[Ew,"UniqueEnumeratorNames UniqueEnumeratorLiterals"])),Ir(t.R,Ph,ct(ot(Ae,1),te,2,6,[Ew,"WellFormedName"])),Ir(t.T,Ph,ct(ot(Ae,1),te,2,6,[Ew,"UniqueParameterNames UniqueTypeParameterNames NoRepeatingVoid"])),Ir(t.U,Ph,ct(ot(Ae,1),te,2,6,[Ew,"WellFormedNsURI WellFormedNsPrefix UniqueSubpackageNames UniqueClassifierNames UniqueNsURIs"])),Ir(t.W,Ph,ct(ot(Ae,1),te,2,6,[Ew,"ConsistentOpposite SingleContainer ConsistentKeys ConsistentUnique ConsistentContainer"])),Ir(t.bb,Ph,ct(ot(Ae,1),te,2,6,[Ew,"ValidDefaultValueLiteral"])),Ir(t.eb,Ph,ct(ot(Ae,1),te,2,6,[Ew,"ValidLowerBound ValidUpperBound ConsistentBounds ValidType"])),Ir(t.H,Ph,ct(ot(Ae,1),te,2,6,[Ew,"ConsistentType ConsistentBounds ConsistentArguments"]))}function L5n(t,e,n){var r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce,Se,We,Qe;if(!e.dc()){if(s=new Du,d=n||u(e.Xb(0),17),V=d.c,b_(),F=V.i.k,!(F==(Gn(),Ds)||F==Hc||F==xs||F==j1))throw rt(new Pn("The target node of the edge must be a normal node or a northSouthPort."));for(Kb(s,Ko(ct(ot(Us,1),te,8,0,[V.i.n,V.n,V.a]))),(be(),_u).Hc(V.j)&&(tt=Xt(ye(Q(V,(se(),g7)))),M=new $e(Ko(ct(ot(Us,1),te,8,0,[V.i.n,V.n,V.a])).a,tt),hs(s,M,s.c.b,s.c)),C=null,r=!1,w=e.Kc();w.Ob();)h=u(w.Pb(),17),o=h.a,o.b!=0&&(r?(k=ud(Li(C,(Qn(o.b!=0),u(o.a.a.c,8))),.5),hs(s,k,s.c.b,s.c),r=!1):r=!0,C=nc((Qn(o.b!=0),u(o.c.b.c,8))),Ua(s,o),_h(o));Y=d.d,_u.Hc(Y.j)&&(tt=Xt(ye(Q(Y,(se(),g7)))),M=new $e(Ko(ct(ot(Us,1),te,8,0,[Y.i.n,Y.n,Y.a])).a,tt),hs(s,M,s.c.b,s.c)),Kb(s,Ko(ct(ot(Us,1),te,8,0,[Y.i.n,Y.n,Y.a]))),t.d==(tE(),vht)&&(gt=(Qn(s.b!=0),u(s.a.a.c,8)),Lt=u(Qf(s,1),8),_t=new brt(Iyt(V.j)),_t.a*=5,_t.b*=5,Bt=na(new $e(Lt.a,Lt.b),gt),Yt=new $e(drt(_t.a,Bt.a),drt(_t.b,Bt.b)),Li(Yt,gt),ce=ei(s,1),XM(ce,Yt),Se=(Qn(s.b!=0),u(s.c.b.c,8)),We=u(Qf(s,s.b-2),8),_t=new brt(Iyt(Y.j)),_t.a*=5,_t.b*=5,Bt=na(new $e(We.a,We.b),Se),Qe=new $e(drt(_t.a,Bt.a),drt(_t.b,Bt.b)),Li(Qe,Se),h8(s,s.b-1,Qe)),H=new sxt(s),Ua(d.a,sse(H))}}function M5n(t,e,n,r){var s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce,Se,We,Qe,Rn,zn,hr,pi,Rs,Xl,Kh,W1,hU,bN,dA,vN;if(_t=u(St((!t.b&&(t.b=new Cn(br,t,4,7)),t.b),0),82),Yt=_t.Dg(),ce=_t.Eg(),Bt=_t.Cg()/2,Y=_t.Bg()/2,Et(_t,186)&&(Lt=u(_t,118),Yt+=k1(Lt).i,Yt+=k1(Lt).i),Yt+=Bt,ce+=Y,zn=u(St((!t.b&&(t.b=new Cn(br,t,4,7)),t.b),0),82),pi=zn.Dg(),Rs=zn.Eg(),hr=zn.Cg()/2,Se=zn.Bg()/2,Et(zn,186)&&(Rn=u(zn,118),pi+=k1(Rn).i,pi+=k1(Rn).i),pi+=hr,Rs+=Se,(!t.a&&(t.a=new he(Zi,t,6,6)),t.a).i==0)d=(Tv(),k=new rd,k),Mr((!t.a&&(t.a=new he(Zi,t,6,6)),t.a),d);else if((!t.a&&(t.a=new he(Zi,t,6,6)),t.a).i>1)for(V=new Lx((!t.a&&(t.a=new he(Zi,t,6,6)),t.a));V.e!=V.i.gc();)u_(V);for(h=u(St((!t.a&&(t.a=new he(Zi,t,6,6)),t.a),0),202),tt=pi,pi>Yt+Bt?tt=Yt+Bt:pi<Yt-Bt&&(tt=Yt-Bt),gt=Rs,Rs>ce+Y?gt=ce+Y:Rs<ce-Y&&(gt=ce-Y),tt>Yt-Bt&&tt<Yt+Bt&&gt>ce-Y&&gt<ce+Y&&(tt=Yt+Bt),B8(h,tt),j8(h,gt),We=Yt,Yt>pi+hr?We=pi+hr:Yt<pi-hr&&(We=pi-hr),Qe=ce,ce>Rs+Se?Qe=Rs+Se:ce<Rs-Se&&(Qe=Rs-Se),We>pi-hr&&We<pi+hr&&Qe>Rs-Se&&Qe<Rs+Se&&(Qe=Rs+Se),F8(h,We),R8(h,Qe),xr((!h.a&&(h.a=new Ss(Hh,h,5)),h.a)),o=zz(e,5),_t==zn&&++o,W1=We-tt,dA=Qe-gt,Xl=b.Math.sqrt(W1*W1+dA*dA),M=Xl*.20000000298023224,hU=W1/(o+1),vN=dA/(o+1),Kh=tt,bN=gt,C=0;C<o;C++)Kh+=hU,bN+=vN,F=Kh+ol(e,24)*PD*M-M/2,F<0?F=1:F>n&&(F=n-1),H=bN+ol(e,24)*PD*M-M/2,H<0?H=1:H>r&&(H=r-1),s=(Tv(),w=new vp,w),W$(s,F),K$(s,H),Mr((!h.a&&(h.a=new Ss(Hh,h,5)),h.a),s)}function Te(){Te=Z,Jlt=(ci(),Z3e),dCt=J3e,AO=iAt,xf=t4e,B6=sAt,Fw=e4e,Gy=aAt,m7=oAt,y7=cAt,tht=qV,Bw=H2,eht=n4e,_S=hAt,sV=q6,SO=(Axt(),Yve),Q4=Xve,R2=Qve,Z4=Zve,Pwe=new eo(zV,de(0)),w7=Uve,fCt=Wve,F6=Kve,xCt=ywe,gCt=ewe,pCt=iwe,rht=hwe,bCt=owe,vCt=uwe,aV=Twe,iht=xwe,mCt=bwe,wCt=gwe,yCt=wwe,Nw=$ve,CS=zve,Klt=ive,G9t=ave,oCt=new Mv(12),aCt=new eo(q2,oCt),z9t=(q0(),A7),X0=new eo(NSt,z9t),zy=new eo(hl,0),Fwe=new eo(fft,de(1)),UG=new eo($6,BE),B2=$V,os=US,v7=o5,Awe=UO,Ld=H3e,jy=r5,Bwe=new eo(dft,(Fn(),!0)),$y=WO,P2=sft,F2=z2,iV=vb,Zlt=jV,$9t=(ao(),c0),Vl=new eo(jw,$9t),Ow=s5,nV=HSt,qy=Ky,Nwe=hft,lCt=nAt,uCt=(c4(),JO),new eo(QSt,uCt),Iwe=oft,Dwe=cft,Owe=uft,Mwe=aft,nht=twe,eCt=Ave,Xlt=Sve,SS=Jve,cu=yve,Ry=X2e,ES=Y2e,By=F2e,B9t=B2e,Glt=z2e,_O=R2e,Vlt=W2e,nCt=Lve,rCt=Mve,X9t=gve,rV=Gve,Qlt=Ove,Ylt=uve,sCt=Rve,H9t=nve,Wlt=rve,Hlt=BV,iCt=Ive,KG=L2e,N9t=A2e,WG=S2e,W9t=fve,U9t=hve,K9t=dve,p7=a5,_o=i5,Ug=FSt,Md=ift,Ult=rft,R9t=H2e,Wg=lft,kS=U3e,JG=W3e,Pw=JSt,cCt=K3e,b7=Y3e,Z9t=kve,J9t=Tve,Hy=z6,zlt=_2e,tCt=_ve,ZG=J2e,QG=Z2e,eV=KO,Q9t=vve,TS=Pve,LO=uAt,j9t=Q2e,hCt=Vve,q9t=tve,Lwe=mve,Swe=V2e,Y9t=$St,tV=xve,XG=U2e,db=P2e,F9t=O2e,YG=I2e,P9t=D2e,qlt=N2e,P6=M2e,V9t=lve}function Dat(t,e){wat();var n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce,Se,We,Qe,Rn,zn,hr,pi;if(We=t.e,V=t.d,s=t.a,We==0)switch(e){case 0:return"0";case 1:return DE;case 2:return"0.00";case 3:return"0.000";case 4:return"0.0000";case 5:return"0.00000";case 6:return"0.000000";default:return ce=new _p,e<0?ce.a+="0E+":ce.a+="0E",ce.a+=-e,ce.a}if(_t=V*10+1+7,Bt=Pt(mh,vd,25,_t+1,15,1),n=_t,V==1)if(d=s[0],d<0){pi=Ps(d,co);do Y=pi,pi=eD(pi,10),Bt[--n]=48+Sr(Yp(Y,Ca(pi,10)))&ms;while(yc(pi,0)!=0)}else{pi=d;do Y=pi,pi=pi/10|0,Bt[--n]=48+(Y-pi*10)&ms;while(pi!=0)}else{Rn=Pt(Tr,Xr,25,V,15,1),hr=V,Ic(s,0,Rn,0,hr);t:for(;;){for(Se=0,k=hr-1;k>=0;k--)zn=Oa(M0(Se,32),Ps(Rn[k],co)),gt=Pdn(zn),Rn[k]=Sr(gt),Se=Sr(Fp(gt,32));Lt=Sr(Se),tt=n;do Bt[--n]=48+Lt%10&ms;while((Lt=Lt/10|0)!=0&&n!=0);for(r=9-tt+n,w=0;w<r&&n>0;w++)Bt[--n]=48;for(M=hr-1;Rn[M]==0;M--)if(M==0)break t;hr=M+1}for(;Bt[n]==48;)++n}if(H=We<0,h=_t-n-e-1,e==0)return H&&(Bt[--n]=45),Ah(Bt,n,_t-n);if(e>0&&h>=-6){if(h>=0){for(C=n+h,F=_t-1;F>=C;F--)Bt[F+1]=Bt[F];return Bt[++C]=46,H&&(Bt[--n]=45),Ah(Bt,n,_t-n+1)}for(M=2;M<-h+1;M++)Bt[--n]=48;return Bt[--n]=46,Bt[--n]=48,H&&(Bt[--n]=45),Ah(Bt,n,_t-n)}return Qe=n+1,o=_t,Yt=new Lm,H&&(Yt.a+="-"),o-Qe>=1?(Rp(Yt,Bt[n]),Yt.a+=".",Yt.a+=Ah(Bt,n+1,_t-n-1)):Yt.a+=Ah(Bt,n,_t-n),Yt.a+="E",h>0&&(Yt.a+="+"),Yt.a+=""+h,Yt.a}function Fhe(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce;switch(t.c=e,t.g=new Cr,n=(Im(),new Sm(t.c)),r=new tr(n),c3t(r),_t=Br(qe(t.c,(rD(),rSt))),w=u(qe(t.c,Kht),316),Yt=u(qe(t.c,Yht),429),h=u(qe(t.c,tSt),482),Bt=u(qe(t.c,Wht),430),t.j=Xt(ye(qe(t.c,d3e))),d=t.a,w.g){case 0:d=t.a;break;case 1:d=t.b;break;case 2:d=t.i;break;case 3:d=t.e;break;case 4:d=t.f;break;default:throw rt(new Pn(pH+(w.f!=null?w.f:""+w.g)))}if(t.d=new aQt(d,Yt,h),Jt(t.d,(G8(),uS),Re(qe(t.c,h3e))),t.d.c=je(Re(qe(t.c,eSt))),i$(t.c).i==0)return t.d;for(M=new er(i$(t.c));M.e!=M.i.gc();){for(C=u(dr(M),33),H=C.g/2,F=C.f/2,ce=new $e(C.i+H,C.j+F);kl(t.g,ce);)Fm(ce,(b.Math.random()-.5)*yd,(b.Math.random()-.5)*yd);Y=u(qe(C,(ci(),KO)),142),tt=new EQt(ce,new ih(ce.a-H-t.j/2-Y.b,ce.b-F-t.j/2-Y.d,C.g+t.j+(Y.b+Y.c),C.f+t.j+(Y.d+Y.a))),ue(t.d.i,tt),ki(t.g,ce,new la(tt,C))}switch(Bt.g){case 0:if(_t==null)t.d.d=u(Fe(t.d.i,0),65);else for(Lt=new S(t.d.i);Lt.a<Lt.c.c.length;)tt=u(J(Lt),65),V=u(u(Jn(t.g,tt.a),46).b,33).zg(),V!=null&&hn(V,_t)&&(t.d.d=tt);break;case 1:for(s=new $e(t.c.g,t.c.f),s.a*=.5,s.b*=.5,Fm(s,t.c.i,t.c.j),o=ss,gt=new S(t.d.i);gt.a<gt.c.c.length;)tt=u(J(gt),65),k=Hp(tt.a,s),k<o&&(o=k,t.d.d=tt);break;default:throw rt(new Pn(pH+(Bt.f!=null?Bt.f:""+Bt.g)))}return t.d}function Bhe(t,e,n){var r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce;for(Yt=u(St((!t.a&&(t.a=new he(Zi,t,6,6)),t.a),0),202),C=new Du,Bt=new Cr,ce=Jue(Yt),su(Bt.f,Yt,ce),F=new Cr,r=new Qi,V=Bp(L1(ct(ot(B1,1),Ie,20,0,[(!e.d&&(e.d=new Cn(Ws,e,8,5)),e.d),(!e.e&&(e.e=new Cn(Ws,e,7,4)),e.e)])));zr(V);){if(H=u(Lr(V),79),(!t.a&&(t.a=new he(Zi,t,6,6)),t.a).i!=1)throw rt(new Pn(lde+(!t.a&&(t.a=new he(Zi,t,6,6)),t.a).i));H!=t&&(tt=u(St((!H.a&&(H.a=new he(Zi,H,6,6)),H.a),0),202),hs(r,tt,r.c.b,r.c),Y=u(ec(Ao(Bt.f,tt)),12),Y||(Y=Jue(tt),su(Bt.f,tt,Y)),M=n?na(new yo(u(Fe(ce,ce.c.length-1),8)),u(Fe(Y,Y.c.length-1),8)):na(new yo((An(0,ce.c.length),u(ce.c[0],8))),(An(0,Y.c.length),u(Y.c[0],8))),su(F.f,tt,M))}if(r.b!=0)for(gt=u(Fe(ce,n?ce.c.length-1:0),8),k=1;k<ce.c.length;k++){for(Lt=u(Fe(ce,n?ce.c.length-1-k:k),8),s=ei(r,0);s.b!=s.d.c;)tt=u(ti(s),202),Y=u(ec(Ao(Bt.f,tt)),12),Y.c.length<=k?H$(s):(_t=Li(new yo(u(Fe(Y,n?Y.c.length-1-k:k),8)),u(ec(Ao(F.f,tt)),8)),(Lt.a!=_t.a||Lt.b!=_t.b)&&(o=Lt.a-gt.a,d=Lt.b-gt.b,h=_t.a-gt.a,w=_t.b-gt.b,h*d==w*o&&(o==0||isNaN(o)?o:o<0?-1:1)==(h==0||isNaN(h)?h:h<0?-1:1)&&(d==0||isNaN(d)?d:d<0?-1:1)==(w==0||isNaN(w)?w:w<0?-1:1)?(b.Math.abs(o)<b.Math.abs(h)||b.Math.abs(d)<b.Math.abs(w))&&hs(C,Lt,C.c.b,C.c):k>1&&hs(C,gt,C.c.b,C.c),H$(s)));gt=Lt}return C}function I5n(t,e,n){var r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce,Se,We,Qe,Rn,zn,hr,pi,Rs,Xl,Kh,W1;for(wr(n,"Greedy cycle removal",1),_t=e.a,W1=_t.c.length,t.a=Pt(Tr,Xr,25,W1,15,1),t.c=Pt(Tr,Xr,25,W1,15,1),t.b=Pt(Tr,Xr,25,W1,15,1),k=0,gt=new S(_t);gt.a<gt.c.c.length;){for(Y=u(J(gt),10),Y.p=k,Qe=new S(Y.j);Qe.a<Qe.c.c.length;){for(ce=u(J(Qe),11),d=new S(ce.e);d.a<d.c.c.length;)r=u(J(d),17),r.c.i!=Y&&(hr=u(Q(r,(Te(),w7)),19).a,t.a[k]+=hr>0?hr+1:1);for(h=new S(ce.g);h.a<h.c.c.length;)r=u(J(h),17),r.d.i!=Y&&(hr=u(Q(r,(Te(),w7)),19).a,t.c[k]+=hr>0?hr+1:1)}t.c[k]==0?ni(t.e,Y):t.a[k]==0&&ni(t.f,Y),++k}for(V=-1,H=1,M=new le,t.d=u(Q(e,(se(),O6)),230);W1>0;){for(;t.e.b!=0;)Rs=u(knt(t.e),10),t.b[Rs.p]=V--,K5t(t,Rs),--W1;for(;t.f.b!=0;)Xl=u(knt(t.f),10),t.b[Xl.p]=H++,K5t(t,Xl),--W1;if(W1>0){for(F=_a,Lt=new S(_t);Lt.a<Lt.c.c.length;)Y=u(J(Lt),10),t.b[Y.p]==0&&(Bt=t.c[Y.p]-t.a[Y.p],Bt>=F&&(Bt>F&&(M.c=Pt(Xn,Ie,1,0,5,1),F=Bt),M.c[M.c.length]=Y));C=t.Zf(M),t.b[C.p]=H++,K5t(t,C),--W1}}for(pi=_t.c.length+1,k=0;k<_t.c.length;k++)t.b[k]<0&&(t.b[k]+=pi);for(tt=new S(_t);tt.a<tt.c.c.length;)for(Y=u(J(tt),10),zn=bZt(Y.j),Se=zn,We=0,Rn=Se.length;We<Rn;++We)for(ce=Se[We],Yt=gd(ce.g),s=Yt,o=0,w=s.length;o<w;++o)r=s[o],Kh=r.d.i.p,t.b[Y.p]>t.b[Kh]&&(dw(r,!0),Jt(e,xO,(Fn(),!0)));t.a=null,t.c=null,t.b=null,_h(t.f),_h(t.e),or(n)}function Rhe(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt;for(r=new le,d=new le,tt=e/2,H=t.gc(),s=u(t.Xb(0),8),gt=u(t.Xb(1),8),V=Ust(s.a,s.b,gt.a,gt.b,tt),ue(r,(An(0,V.c.length),u(V.c[0],8))),ue(d,(An(1,V.c.length),u(V.c[1],8))),k=2;k<H;k++)Y=s,s=gt,gt=u(t.Xb(k),8),V=Ust(s.a,s.b,Y.a,Y.b,tt),ue(r,(An(1,V.c.length),u(V.c[1],8))),ue(d,(An(0,V.c.length),u(V.c[0],8))),V=Ust(s.a,s.b,gt.a,gt.b,tt),ue(r,(An(0,V.c.length),u(V.c[0],8))),ue(d,(An(1,V.c.length),u(V.c[1],8)));for(V=Ust(gt.a,gt.b,s.a,s.b,tt),ue(r,(An(1,V.c.length),u(V.c[1],8))),ue(d,(An(0,V.c.length),u(V.c[0],8))),n=new Du,h=new le,ni(n,(An(0,r.c.length),u(r.c[0],8))),C=1;C<r.c.length-2;C+=2)o=(An(C,r.c.length),u(r.c[C],8)),F=Qae((An(C-1,r.c.length),u(r.c[C-1],8)),o,(An(C+1,r.c.length),u(r.c[C+1],8)),(An(C+2,r.c.length),u(r.c[C+2],8))),!isFinite(F.a)||!isFinite(F.b)?hs(n,o,n.c.b,n.c):hs(n,F,n.c.b,n.c);for(ni(n,u(Fe(r,r.c.length-1),8)),ue(h,(An(0,d.c.length),u(d.c[0],8))),M=1;M<d.c.length-2;M+=2)o=(An(M,d.c.length),u(d.c[M],8)),F=Qae((An(M-1,d.c.length),u(d.c[M-1],8)),o,(An(M+1,d.c.length),u(d.c[M+1],8)),(An(M+2,d.c.length),u(d.c[M+2],8))),!isFinite(F.a)||!isFinite(F.b)?h.c[h.c.length]=o:h.c[h.c.length]=F;for(ue(h,u(Fe(d,d.c.length-1),8)),w=h.c.length-1;w>=0;w--)ni(n,(An(w,h.c.length),u(h.c[w],8)));return n}function D5n(t){var e,n,r,s,o,h,d,w,k,C,M,F,H;if(h=!0,M=null,r=null,s=null,e=!1,H=G4e,k=null,o=null,d=0,w=Zit(t,d,YAt,XAt),w<t.length&&(Rr(w,t.length),t.charCodeAt(w)==58)&&(M=t.substr(d,w-d),d=w+1),n=M!=null&&pM(rU,M.toLowerCase()),n){if(w=t.lastIndexOf("!/"),w==-1)throw rt(new Pn("no archive separator"));h=!0,r=Dl(t,d,++w),d=w}else d>=0&&hn(t.substr(d,2),"//")?(d+=2,w=Zit(t,d,iA,sA),r=t.substr(d,w-d),d=w):M!=null&&(d==t.length||(Rr(d,t.length),t.charCodeAt(d)!=47))&&(h=!1,w=_2t(t,Eu(35),d),w==-1&&(w=t.length),r=t.substr(d,w-d),d=w);if(!n&&d<t.length&&(Rr(d,t.length),t.charCodeAt(d)==47)&&(w=Zit(t,d+1,iA,sA),C=t.substr(d+1,w-(d+1)),C.length>0&&ba(C,C.length-1)==58&&(s=C,d=w)),d<t.length&&(Rr(d,t.length),t.charCodeAt(d)==47)&&(++d,e=!0),d<t.length&&(Rr(d,t.length),t.charCodeAt(d)!=63)&&(Rr(d,t.length),t.charCodeAt(d)!=35)){for(F=new le;d<t.length&&(Rr(d,t.length),t.charCodeAt(d)!=63)&&(Rr(d,t.length),t.charCodeAt(d)!=35);)w=Zit(t,d,iA,sA),ue(F,t.substr(d,w-d)),d=w,d<t.length&&(Rr(d,t.length),t.charCodeAt(d)==47)&&(yun(t,++d)||(F.c[F.c.length]=""));H=Pt(Ae,te,2,F.c.length,6,1),D1(F,H)}return d<t.length&&(Rr(d,t.length),t.charCodeAt(d)==63)&&(w=l8(t,35,++d),w==-1&&(w=t.length),k=t.substr(d,w-d),d=w),d<t.length&&(o=OM(t,++d)),k3n(h,M,r,s,H,k),new eat(h,M,r,s,e,H,k,o)}function O5n(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce,Se,We,Qe,Rn,zn,hr,pi,Rs,Xl,Kh;for(Rs=new le,V=new S(e.b);V.a<V.c.c.length;)for(F=u(J(V),29),Yt=new S(F.a);Yt.a<Yt.c.c.length;){for(Bt=u(J(Yt),10),Bt.p=-1,M=_a,We=_a,Rn=new S(Bt.j);Rn.a<Rn.c.c.length;){for(Qe=u(J(Rn),11),s=new S(Qe.e);s.a<s.c.c.length;)n=u(J(s),17),zn=u(Q(n,(Te(),F6)),19).a,M=b.Math.max(M,zn);for(r=new S(Qe.g);r.a<r.c.c.length;)n=u(J(r),17),zn=u(Q(n,(Te(),F6)),19).a,We=b.Math.max(We,zn)}Jt(Bt,pV,de(M)),Jt(Bt,bV,de(We))}for(gt=0,H=new S(e.b);H.a<H.c.c.length;)for(F=u(J(H),29),Yt=new S(F.a);Yt.a<Yt.c.c.length;)Bt=u(J(Yt),10),Bt.p<0&&(pi=new Npt,pi.b=gt++,xue(t,Bt,pi),Rs.c[Rs.c.length]=pi);for(Se=Hd(Rs.c.length),C=Hd(Rs.c.length),h=0;h<Rs.c.length;h++)ue(Se,new le),ue(C,de(0));for(n4n(e,Rs,Se,C),Xl=u(D1(Rs,Pt(yme,S1e,257,Rs.c.length,0,1)),840),ce=u(D1(Se,Pt(ph,xy,15,Se.c.length,0,1)),192),k=Pt(Tr,Xr,25,C.c.length,15,1),d=0;d<k.length;d++)k[d]=(An(d,C.c.length),u(C.c[d],19)).a;for(Lt=0,_t=new le,w=0;w<Xl.length;w++)k[w]==0&&ue(_t,Xl[w]);for(tt=Pt(Tr,Xr,25,Xl.length,15,1);_t.c.length!=0;)for(pi=u(Ag(_t,0),257),tt[pi.b]=Lt++;!ce[pi.b].dc();)Kh=u(ce[pi.b].$c(0),257),--k[Kh.b],k[Kh.b]==0&&(_t.c[_t.c.length]=Kh);for(t.a=Pt(yme,S1e,257,Xl.length,0,1),o=0;o<Xl.length;o++)for(Y=Xl[o],hr=tt[o],t.a[hr]=Y,Y.b=hr,Yt=new S(Y.e);Yt.a<Yt.c.c.length;)Bt=u(J(Yt),10),Bt.p=hr;return t.a}function fi(t){var e,n,r;if(t.d>=t.j){t.a=-1,t.c=1;return}if(e=ba(t.i,t.d++),t.a=e,t.b==1){switch(e){case 92:if(r=10,t.d>=t.j)throw rt(new Fr(qr((Nr(),kH))));t.a=ba(t.i,t.d++);break;case 45:(t.e&512)==512&&t.d<t.j&&ba(t.i,t.d)==91?(++t.d,r=24):r=0;break;case 91:if((t.e&512)!=512&&t.d<t.j&&ba(t.i,t.d)==58){++t.d,r=20;break}default:(e&64512)==OD&&t.d<t.j&&(n=ba(t.i,t.d),(n&64512)==56320&&(t.a=Ya+(e-OD<<10)+n-56320,++t.d)),r=0}t.c=r;return}switch(e){case 124:r=2;break;case 42:r=3;break;case 43:r=4;break;case 63:r=5;break;case 41:r=7;break;case 46:r=8;break;case 91:r=9;break;case 94:r=11;break;case 36:r=12;break;case 40:if(r=6,t.d>=t.j||ba(t.i,t.d)!=63)break;if(++t.d>=t.j)throw rt(new Fr(qr((Nr(),Xct))));switch(e=ba(t.i,t.d++),e){case 58:r=13;break;case 61:r=14;break;case 33:r=15;break;case 91:r=19;break;case 62:r=18;break;case 60:if(t.d>=t.j)throw rt(new Fr(qr((Nr(),Xct))));if(e=ba(t.i,t.d++),e==61)r=16;else if(e==33)r=17;else throw rt(new Fr(qr((Nr(),Bde))));break;case 35:for(;t.d<t.j&&(e=ba(t.i,t.d++),e!=41););if(e!=41)throw rt(new Fr(qr((Nr(),Rde))));r=21;break;default:if(e==45||97<=e&&e<=122||65<=e&&e<=90){--t.d,r=22;break}else if(e==40){r=23;break}throw rt(new Fr(qr((Nr(),Xct))))}break;case 92:if(r=10,t.d>=t.j)throw rt(new Fr(qr((Nr(),kH))));t.a=ba(t.i,t.d++);break;default:r=0}t.c=r}function N5n(t){var e,n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce,Se,We,Qe,Rn,zn,hr;if(Se=u(Q(t,(Te(),os)),98),Se!=(oa(),H1)&&Se!=yb){for(V=t.b,H=V.c.length,C=new Yc((Bl(H+2,Bat),q$(Oa(Oa(5,H+2),(H+2)/10|0)))),Y=new Yc((Bl(H+2,Bat),q$(Oa(Oa(5,H+2),(H+2)/10|0)))),ue(C,new Cr),ue(C,new Cr),ue(Y,new le),ue(Y,new le),ce=new le,e=0;e<H;e++)for(n=(An(e,V.c.length),u(V.c[e],29)),We=(An(e,C.c.length),u(C.c[e],83)),tt=new Cr,C.c[C.c.length]=tt,Rn=(An(e,Y.c.length),u(Y.c[e],15)),Lt=new le,Y.c[Y.c.length]=Lt,s=new S(n.a);s.a<s.c.c.length;){if(r=u(J(s),10),Zyt(r)){ce.c[ce.c.length]=r;continue}for(k=new ar(lr(jo(r).a.Kc(),new z));zr(k);)d=u(Lr(k),17),zn=d.c.i,Zyt(zn)&&(Qe=u(We.xc(Q(zn,(se(),_i))),10),Qe||(Qe=woe(t,zn),We.zc(Q(zn,_i),Qe),Rn.Fc(Qe)),Da(d,u(Fe(Qe.j,1),11)));for(w=new ar(lr(Ms(r).a.Kc(),new z));zr(w);)d=u(Lr(w),17),hr=d.d.i,Zyt(hr)&&(gt=u(Jn(tt,Q(hr,(se(),_i))),10),gt||(gt=woe(t,hr),ki(tt,Q(hr,_i),gt),Lt.c[Lt.c.length]=gt),sa(d,u(Fe(gt.j,0),11)))}for(M=0;M<Y.c.length;M++)if(_t=(An(M,Y.c.length),u(Y.c[M],15)),!_t.dc())for(F=null,M==0?(F=new Ch(t),Um(0,V.c.length),W9(V.c,0,F)):M==C.c.length-1?(F=new Ch(t),V.c[V.c.length]=F):F=(An(M-1,V.c.length),u(V.c[M-1],29)),h=_t.Kc();h.Ob();)o=u(h.Pb(),10),ko(o,F);for(Yt=new S(ce);Yt.a<Yt.c.c.length;)Bt=u(J(Yt),10),ko(Bt,null);Jt(t,(se(),Olt),ce)}}function P5n(t,e,n){var r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt;if(wr(n,"Coffman-Graham Layering",1),e.a.c.length==0){or(n);return}for(Yt=u(Q(e,(Te(),Q9t)),19).a,w=0,h=0,F=new S(e.a);F.a<F.c.c.length;)for(M=u(J(F),10),M.p=w++,o=new ar(lr(Ms(M).a.Kc(),new z));zr(o);)s=u(Lr(o),17),s.p=h++;for(t.d=Pt(dl,i0,25,w,16,1),t.a=Pt(dl,i0,25,h,16,1),t.b=Pt(Tr,Xr,25,w,15,1),t.e=Pt(Tr,Xr,25,w,15,1),t.f=Pt(Tr,Xr,25,w,15,1),Q$(t.c),edn(t,e),V=new Vj(new iR(t)),Bt=new S(e.a);Bt.a<Bt.c.c.length;){for(Lt=u(J(Bt),10),o=new ar(lr(jo(Lt).a.Kc(),new z));zr(o);)s=u(Lr(o),17),t.a[s.p]||++t.b[Lt.p];t.b[Lt.p]==0&&M8(dE(V,Lt))}for(d=0;V.b.c.length!=0;)for(Lt=u(Qrt(V),10),t.f[Lt.p]=d++,o=new ar(lr(Ms(Lt).a.Kc(),new z));zr(o);)s=u(Lr(o),17),!t.a[s.p]&&(tt=s.d.i,--t.b[tt.p],ln(t.c,tt,de(t.f[Lt.p])),t.b[tt.p]==0&&M8(dE(V,tt)));for(H=new Vj(new jtt(t)),_t=new S(e.a);_t.a<_t.c.c.length;){for(Lt=u(J(_t),10),o=new ar(lr(Ms(Lt).a.Kc(),new z));zr(o);)s=u(Lr(o),17),t.a[s.p]||++t.e[Lt.p];t.e[Lt.p]==0&&M8(dE(H,Lt))}for(C=new le,r=OQt(e,C);H.b.c.length!=0;)for(gt=u(Qrt(H),10),(r.a.c.length>=Yt||!ehn(gt,r))&&(r=OQt(e,C)),ko(gt,r),o=new ar(lr(jo(gt).a.Kc(),new z));zr(o);)s=u(Lr(o),17),!t.a[s.p]&&(Y=s.c.i,--t.e[Y.p],t.e[Y.p]==0&&M8(dE(H,Y)));for(k=C.c.length-1;k>=0;--k)ue(e.b,(An(k,C.c.length),u(C.c[k],29)));e.a.c=Pt(Xn,Ie,1,0,5,1),or(n)}function jhe(t){var e,n,r,s,o,h,d,w,k;for(t.b=1,fi(t),e=null,t.c==0&&t.a==94?(fi(t),e=(gi(),gi(),new Nl(4)),jc(e,0,WE),d=new Nl(4)):d=(gi(),gi(),new Nl(4)),s=!0;(k=t.c)!=1;){if(k==0&&t.a==93&&!s){e&&(__(e,d),d=e);break}if(n=t.a,r=!1,k==10)switch(n){case 100:case 68:case 119:case 87:case 115:case 83:vy(d,kE(n)),r=!0;break;case 105:case 73:case 99:case 67:n=(vy(d,kE(n)),-1),n<0&&(r=!0);break;case 112:case 80:if(w=n5t(t,n),!w)throw rt(new Fr(qr((Nr(),Qct))));vy(d,w),r=!0;break;default:n=F5t(t)}else if(k==24&&!s){if(e&&(__(e,d),d=e),o=jhe(t),__(d,o),t.c!=0||t.a!=93)throw rt(new Fr(qr((Nr(),Wde))));break}if(fi(t),!r){if(k==0){if(n==91)throw rt(new Fr(qr((Nr(),S8t))));if(n==93)throw rt(new Fr(qr((Nr(),A8t))));if(n==45&&!s&&t.a!=93)throw rt(new Fr(qr((Nr(),Zct))))}if(t.c!=0||t.a!=45||n==45&&s)jc(d,n,n);else{if(fi(t),(k=t.c)==1)throw rt(new Fr(qr((Nr(),EH))));if(k==0&&t.a==93)jc(d,n,n),jc(d,45,45);else{if(k==0&&t.a==93||k==24)throw rt(new Fr(qr((Nr(),Zct))));if(h=t.a,k==0){if(h==91)throw rt(new Fr(qr((Nr(),S8t))));if(h==93)throw rt(new Fr(qr((Nr(),A8t))));if(h==45)throw rt(new Fr(qr((Nr(),Zct))))}else k==10&&(h=F5t(t));if(fi(t),n>h)throw rt(new Fr(qr((Nr(),Xde))));jc(d,n,h)}}}s=!1}if(t.c==1)throw rt(new Fr(qr((Nr(),EH))));return b4(d),T_(d),t.b=0,fi(t),d}function F5n(t){Ir(t.c,Kr,ct(ot(Ae,1),te,2,6,[Sa,"http://www.w3.org/2001/XMLSchema#decimal"])),Ir(t.d,Kr,ct(ot(Ae,1),te,2,6,[Sa,"http://www.w3.org/2001/XMLSchema#integer"])),Ir(t.e,Kr,ct(ot(Ae,1),te,2,6,[Sa,"http://www.w3.org/2001/XMLSchema#boolean"])),Ir(t.f,Kr,ct(ot(Ae,1),te,2,6,[Sa,"EBoolean",oi,"EBoolean:Object"])),Ir(t.i,Kr,ct(ot(Ae,1),te,2,6,[Sa,"http://www.w3.org/2001/XMLSchema#byte"])),Ir(t.g,Kr,ct(ot(Ae,1),te,2,6,[Sa,"http://www.w3.org/2001/XMLSchema#hexBinary"])),Ir(t.j,Kr,ct(ot(Ae,1),te,2,6,[Sa,"EByte",oi,"EByte:Object"])),Ir(t.n,Kr,ct(ot(Ae,1),te,2,6,[Sa,"EChar",oi,"EChar:Object"])),Ir(t.t,Kr,ct(ot(Ae,1),te,2,6,[Sa,"http://www.w3.org/2001/XMLSchema#double"])),Ir(t.u,Kr,ct(ot(Ae,1),te,2,6,[Sa,"EDouble",oi,"EDouble:Object"])),Ir(t.F,Kr,ct(ot(Ae,1),te,2,6,[Sa,"http://www.w3.org/2001/XMLSchema#float"])),Ir(t.G,Kr,ct(ot(Ae,1),te,2,6,[Sa,"EFloat",oi,"EFloat:Object"])),Ir(t.I,Kr,ct(ot(Ae,1),te,2,6,[Sa,"http://www.w3.org/2001/XMLSchema#int"])),Ir(t.J,Kr,ct(ot(Ae,1),te,2,6,[Sa,"EInt",oi,"EInt:Object"])),Ir(t.N,Kr,ct(ot(Ae,1),te,2,6,[Sa,"http://www.w3.org/2001/XMLSchema#long"])),Ir(t.O,Kr,ct(ot(Ae,1),te,2,6,[Sa,"ELong",oi,"ELong:Object"])),Ir(t.Z,Kr,ct(ot(Ae,1),te,2,6,[Sa,"http://www.w3.org/2001/XMLSchema#short"])),Ir(t.$,Kr,ct(ot(Ae,1),te,2,6,[Sa,"EShort",oi,"EShort:Object"])),Ir(t._,Kr,ct(ot(Ae,1),te,2,6,[Sa,"http://www.w3.org/2001/XMLSchema#string"]))}function B5n(t){var e,n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce,Se,We,Qe,Rn,zn,hr;if(t.c.length==1)return An(0,t.c.length),u(t.c[0],135);if(t.c.length<=0)return new A$;for(w=new S(t);w.a<w.c.c.length;){for(h=u(J(w),135),Lt=0,V=vi,Y=vi,F=_a,H=_a,gt=ei(h.b,0);gt.b!=gt.d.c;)tt=u(ti(gt),86),Lt+=u(Q(tt,(hw(),EV)),19).a,V=b.Math.min(V,tt.e.a),Y=b.Math.min(Y,tt.e.b),F=b.Math.max(F,tt.e.a+tt.f.a),H=b.Math.max(H,tt.e.b+tt.f.b);Jt(h,(hw(),EV),de(Lt)),Jt(h,(fc(),BS),new $e(V,Y)),Jt(h,FO,new $e(F,H))}for(vn(),Xs(t,new PQ),Yt=new A$,Lo(Yt,(An(0,t.c.length),u(t.c[0],94))),M=0,Rn=0,k=new S(t);k.a<k.c.c.length;)h=u(J(k),135),ce=na(nc(u(Q(h,(fc(),FO)),8)),u(Q(h,BS),8)),M=b.Math.max(M,ce.a),Rn+=ce.a*ce.b;for(M=b.Math.max(M,b.Math.sqrt(Rn)*Xt(ye(Q(Yt,(hw(),nye))))),Se=Xt(ye(Q(Yt,o_t))),zn=0,hr=0,C=0,e=Se,d=new S(t);d.a<d.c.c.length;)h=u(J(d),135),ce=na(nc(u(Q(h,(fc(),FO)),8)),u(Q(h,BS),8)),zn+ce.a>M&&(zn=0,hr+=C+Se,C=0),Wbn(Yt,h,zn,hr),e=b.Math.max(e,zn+ce.a),C=b.Math.max(C,ce.b),zn+=ce.a+Se;for(Bt=new Cr,n=new Cr,Qe=new S(t);Qe.a<Qe.c.c.length;)for(We=u(J(Qe),135),r=je(Re(Q(We,(ci(),UO)))),_t=We.q?We.q:a0,o=_t.vc().Kc();o.Ob();)s=u(o.Pb(),42),kl(Bt,s.cd())?Gt(u(s.cd(),146).wg())!==Gt(s.dd())&&(r&&kl(n,s.cd())?(qd(),""+u(s.cd(),146).tg()):(ki(Bt,u(s.cd(),146),s.dd()),Jt(Yt,u(s.cd(),146),s.dd()),r&&ki(n,u(s.cd(),146),s.dd()))):(ki(Bt,u(s.cd(),146),s.dd()),Jt(Yt,u(s.cd(),146),s.dd()));return Yt}function $he(){$he=Z,Iat(),Qr=new Hv,ln(Qr,(be(),Sf),G1),ln(Qr,qh,G1),ln(Qr,tl,G1),ln(Qr,Af,G1),ln(Qr,Su,G1),ln(Qr,el,G1),ln(Qr,Af,Sf),ln(Qr,G1,vh),ln(Qr,Sf,vh),ln(Qr,qh,vh),ln(Qr,tl,vh),ln(Qr,_u,vh),ln(Qr,Af,vh),ln(Qr,Su,vh),ln(Qr,el,vh),ln(Qr,uu,vh),ln(Qr,G1,Wl),ln(Qr,Sf,Wl),ln(Qr,vh,Wl),ln(Qr,qh,Wl),ln(Qr,tl,Wl),ln(Qr,_u,Wl),ln(Qr,Af,Wl),ln(Qr,uu,Wl),ln(Qr,Kl,Wl),ln(Qr,Su,Wl),ln(Qr,qu,Wl),ln(Qr,el,Wl),ln(Qr,Sf,qh),ln(Qr,tl,qh),ln(Qr,Af,qh),ln(Qr,el,qh),ln(Qr,Sf,tl),ln(Qr,qh,tl),ln(Qr,Af,tl),ln(Qr,tl,tl),ln(Qr,Su,tl),ln(Qr,G1,wh),ln(Qr,Sf,wh),ln(Qr,vh,wh),ln(Qr,Wl,wh),ln(Qr,qh,wh),ln(Qr,tl,wh),ln(Qr,_u,wh),ln(Qr,Af,wh),ln(Qr,Kl,wh),ln(Qr,uu,wh),ln(Qr,el,wh),ln(Qr,Su,wh),ln(Qr,Uc,wh),ln(Qr,G1,Kl),ln(Qr,Sf,Kl),ln(Qr,vh,Kl),ln(Qr,qh,Kl),ln(Qr,tl,Kl),ln(Qr,_u,Kl),ln(Qr,Af,Kl),ln(Qr,uu,Kl),ln(Qr,el,Kl),ln(Qr,qu,Kl),ln(Qr,Uc,Kl),ln(Qr,Sf,uu),ln(Qr,qh,uu),ln(Qr,tl,uu),ln(Qr,Af,uu),ln(Qr,Kl,uu),ln(Qr,el,uu),ln(Qr,Su,uu),ln(Qr,G1,Cu),ln(Qr,Sf,Cu),ln(Qr,vh,Cu),ln(Qr,qh,Cu),ln(Qr,tl,Cu),ln(Qr,_u,Cu),ln(Qr,Af,Cu),ln(Qr,uu,Cu),ln(Qr,el,Cu),ln(Qr,Sf,Su),ln(Qr,vh,Su),ln(Qr,Wl,Su),ln(Qr,tl,Su),ln(Qr,G1,qu),ln(Qr,Sf,qu),ln(Qr,Wl,qu),ln(Qr,qh,qu),ln(Qr,tl,qu),ln(Qr,_u,qu),ln(Qr,Af,qu),ln(Qr,Af,Uc),ln(Qr,tl,Uc),ln(Qr,uu,G1),ln(Qr,uu,qh),ln(Qr,uu,vh),ln(Qr,_u,G1),ln(Qr,_u,Sf),ln(Qr,_u,Wl)}function Aq(t,e){switch(t.e){case 0:case 2:case 4:case 6:case 42:case 44:case 46:case 48:case 8:case 10:case 12:case 14:case 16:case 18:case 20:case 22:case 24:case 26:case 28:case 30:case 32:case 34:case 36:case 38:return new zXt(t.b,t.a,e,t.c);case 1:return new hj(t.a,e,Vi(e.Tg(),t.c));case 43:return new BUt(t.a,e,Vi(e.Tg(),t.c));case 3:return new Ss(t.a,e,Vi(e.Tg(),t.c));case 45:return new Ou(t.a,e,Vi(e.Tg(),t.c));case 41:return new Tl(u(Lh(t.c),26),t.a,e,Vi(e.Tg(),t.c));case 50:return new $ee(u(Lh(t.c),26),t.a,e,Vi(e.Tg(),t.c));case 5:return new ivt(t.a,e,Vi(e.Tg(),t.c),t.d.n);case 47:return new KWt(t.a,e,Vi(e.Tg(),t.c),t.d.n);case 7:return new he(t.a,e,Vi(e.Tg(),t.c),t.d.n);case 49:return new Ix(t.a,e,Vi(e.Tg(),t.c),t.d.n);case 9:return new jUt(t.a,e,Vi(e.Tg(),t.c));case 11:return new RUt(t.a,e,Vi(e.Tg(),t.c));case 13:return new b2t(t.a,e,Vi(e.Tg(),t.c));case 15:return new Sj(t.a,e,Vi(e.Tg(),t.c));case 17:return new $Ut(t.a,e,Vi(e.Tg(),t.c));case 19:return new U3(t.a,e,Vi(e.Tg(),t.c));case 21:return new p2t(t.a,e,Vi(e.Tg(),t.c));case 23:return new WM(t.a,e,Vi(e.Tg(),t.c));case 25:return new QWt(t.a,e,Vi(e.Tg(),t.c),t.d.n);case 27:return new Cn(t.a,e,Vi(e.Tg(),t.c),t.d.n);case 29:return new XWt(t.a,e,Vi(e.Tg(),t.c),t.d.n);case 31:return new YWt(t.a,e,Vi(e.Tg(),t.c),t.d.n);case 33:return new avt(t.a,e,Vi(e.Tg(),t.c),t.d.n);case 35:return new svt(t.a,e,Vi(e.Tg(),t.c),t.d.n);case 37:return new fnt(t.a,e,Vi(e.Tg(),t.c),t.d.n);case 39:return new Uj(t.a,e,Vi(e.Tg(),t.c),t.d.n);case 40:return new is(e,Vi(e.Tg(),t.c));default:throw rt(new Go("Unknown feature style: "+t.e))}}function R5n(t,e,n){var r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce;switch(wr(n,"Brandes & Koepf node placement",1),t.a=e,t.c=Imn(e),r=u(Q(e,(Te(),Qlt)),274),H=je(Re(Q(e,TS))),t.d=r==(nD(),BG)&&!H||r==Slt,b3n(t,e),Yt=null,ce=null,gt=null,Lt=null,tt=(Bl(4,my),new Yc(4)),u(Q(e,Qlt),274).g){case 3:gt=new x4(e,t.c.d,(E1(),j2),(dd(),Kg)),tt.c[tt.c.length]=gt;break;case 1:Lt=new x4(e,t.c.d,(E1(),z1),(dd(),Kg)),tt.c[tt.c.length]=Lt;break;case 4:Yt=new x4(e,t.c.d,(E1(),j2),(dd(),Rw)),tt.c[tt.c.length]=Yt;break;case 2:ce=new x4(e,t.c.d,(E1(),z1),(dd(),Rw)),tt.c[tt.c.length]=ce;break;default:gt=new x4(e,t.c.d,(E1(),j2),(dd(),Kg)),Lt=new x4(e,t.c.d,z1,Kg),Yt=new x4(e,t.c.d,j2,Rw),ce=new x4(e,t.c.d,z1,Rw),tt.c[tt.c.length]=Yt,tt.c[tt.c.length]=ce,tt.c[tt.c.length]=gt,tt.c[tt.c.length]=Lt}for(s=new nVt(e,t.c),d=new S(tt);d.a<d.c.c.length;)o=u(J(d),180),T5n(s,o,t.b),oyn(o);for(F=new Pse(e,t.c),w=new S(tt);w.a<w.c.c.length;)o=u(J(w),180),y4n(F,o);if(n.n)for(k=new S(tt);k.a<k.c.c.length;)o=u(J(k),180),Yb(n,o+" size is "+Wst(o));if(M=null,t.d&&(C=X4n(t,tt,t.c.d),xle(e,C,n)&&(M=C)),!M)for(k=new S(tt);k.a<k.c.c.length;)o=u(J(k),180),xle(e,o,n)&&(!M||Wst(M)>Wst(o))&&(M=o);for(!M&&(M=(An(0,tt.c.length),u(tt.c[0],180))),Y=new S(e.b);Y.a<Y.c.c.length;)for(V=u(J(Y),29),Bt=new S(V.a);Bt.a<Bt.c.c.length;)_t=u(J(Bt),10),_t.n.b=Xt(M.p[_t.p])+Xt(M.d[_t.p]);for(n.n&&(Yb(n,"Chosen node placement: "+M),Yb(n,"Blocks: "+zoe(M)),Yb(n,"Classes: "+Zpn(M,n)),Yb(n,"Marked edges: "+t.b)),h=new S(tt);h.a<h.c.c.length;)o=u(J(h),180),o.g=null,o.b=null,o.a=null,o.d=null,o.j=null,o.i=null,o.p=null;Lon(t.c),t.b.a.$b(),or(n)}function j5n(t,e,n){var r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce,Se,We,Qe,Rn,zn;for(h=new Qi,Yt=u(Q(n,(Te(),Vl)),103),V=0,Ua(h,(!e.a&&(e.a=new he(ns,e,10,11)),e.a));h.b!=0;)k=u(h.b==0?null:(Qn(h.b!=0),ch(h,h.a.a)),33),(Gt(qe(e,db))!==Gt((j0(),gb))||Gt(qe(e,Ry))===Gt((v2(),pS))||Gt(qe(e,Ry))===Gt((v2(),gS))||je(Re(qe(e,By)))||Gt(qe(e,P6))!==Gt((ew(),$4)))&&!je(Re(qe(k,qlt)))&&bo(k,(se(),Tc),de(V++)),tt=!je(Re(qe(k,B2))),tt&&(M=(!k.a&&(k.a=new he(ns,k,10,11)),k.a).i!=0,H=qdn(k),F=Gt(qe(k,jy))===Gt(($0(),Zg)),zn=!r2(k,(ci(),VS))||hn(Br(qe(k,VS)),Vn),_t=null,zn&&F&&(M||H)&&(_t=cle(k),Jt(_t,Vl,Yt),Vs(_t,SO)&&jqt(new l3t(Xt(ye(Q(_t,SO)))),_t),u(qe(k,F2),174).gc()!=0&&(C=_t,us(new Tn(null,(!k.c&&(k.c=new he(fl,k,9,9)),new _n(k.c,16))),new _r(C)),tue(k,_t))),ce=n,Se=u(Jn(t.a,ts(k)),10),Se&&(ce=Se.e),Lt=ohe(t,k,ce),_t&&(Lt.e=_t,_t.e=Lt,Ua(h,(!k.a&&(k.a=new he(ns,k,10,11)),k.a))));for(V=0,hs(h,e,h.c.b,h.c);h.b!=0;){for(o=u(h.b==0?null:(Qn(h.b!=0),ch(h,h.a.a)),33),w=new er((!o.b&&(o.b=new he(Ws,o,12,3)),o.b));w.e!=w.i.gc();)d=u(dr(w),79),_ue(d),(Gt(qe(e,db))!==Gt((j0(),gb))||Gt(qe(e,Ry))===Gt((v2(),pS))||Gt(qe(e,Ry))===Gt((v2(),gS))||je(Re(qe(e,By)))||Gt(qe(e,P6))!==Gt((ew(),$4)))&&bo(d,(se(),Tc),de(V++)),Qe=Mo(u(St((!d.b&&(d.b=new Cn(br,d,4,7)),d.b),0),82)),Rn=Mo(u(St((!d.c&&(d.c=new Cn(br,d,5,8)),d.c),0),82)),!(je(Re(qe(d,B2)))||je(Re(qe(Qe,B2)))||je(Re(qe(Rn,B2))))&&(Y=uw(d)&&je(Re(qe(Qe,$y)))&&je(Re(qe(d,P2))),Bt=o,Y||Zm(Rn,Qe)?Bt=Qe:Zm(Qe,Rn)&&(Bt=Rn),ce=n,Se=u(Jn(t.a,Bt),10),Se&&(ce=Se.e),gt=Sxt(t,d,Bt,ce),Jt(gt,(se(),YTt),uvn(t,d,e,n)));if(F=Gt(qe(o,jy))===Gt(($0(),Zg)),F)for(s=new er((!o.a&&(o.a=new he(ns,o,10,11)),o.a));s.e!=s.i.gc();)r=u(dr(s),33),zn=!r2(r,(ci(),VS))||hn(Br(qe(r,VS)),Vn),We=Gt(qe(r,jy))===Gt(Zg),zn&&We&&hs(h,r,h.c.b,h.c)}}function $5n(t,e,n,r,s,o){var h,d,w,k,C,M,F,H,V,Y,tt,gt;switch(e){case 71:d=r.q.getFullYear()-nb>=-1900?1:0,n>=4?Vr(t,ct(ot(Ae,1),te,2,6,[nfe,rfe])[d]):Vr(t,ct(ot(Ae,1),te,2,6,["BC","AD"])[d]);break;case 121:Ihn(t,n,r);break;case 77:Pwn(t,n,r);break;case 107:w=s.q.getHours(),w==0?Xd(t,24,n):Xd(t,w,n);break;case 83:n2n(t,n,s);break;case 69:C=r.q.getDay(),n==5?Vr(t,ct(ot(Ae,1),te,2,6,["S","M","T","W","T","F","S"])[C]):n==4?Vr(t,ct(ot(Ae,1),te,2,6,[Qat,Zat,Jat,tot,eot,not,rot])[C]):Vr(t,ct(ot(Ae,1),te,2,6,["Sun","Mon","Tue","Wed","Thu","Fri","Sat"])[C]);break;case 97:s.q.getHours()>=12&&s.q.getHours()<24?Vr(t,ct(ot(Ae,1),te,2,6,["AM","PM"])[1]):Vr(t,ct(ot(Ae,1),te,2,6,["AM","PM"])[0]);break;case 104:M=s.q.getHours()%12,M==0?Xd(t,12,n):Xd(t,M,n);break;case 75:F=s.q.getHours()%12,Xd(t,F,n);break;case 72:H=s.q.getHours(),Xd(t,H,n);break;case 99:V=r.q.getDay(),n==5?Vr(t,ct(ot(Ae,1),te,2,6,["S","M","T","W","T","F","S"])[V]):n==4?Vr(t,ct(ot(Ae,1),te,2,6,[Qat,Zat,Jat,tot,eot,not,rot])[V]):n==3?Vr(t,ct(ot(Ae,1),te,2,6,["Sun","Mon","Tue","Wed","Thu","Fri","Sat"])[V]):Xd(t,V,1);break;case 76:Y=r.q.getMonth(),n==5?Vr(t,ct(ot(Ae,1),te,2,6,["J","F","M","A","M","J","J","A","S","O","N","D"])[Y]):n==4?Vr(t,ct(ot(Ae,1),te,2,6,[$at,zat,qat,Hat,l6,Gat,Vat,Uat,Wat,Kat,Yat,Xat])[Y]):n==3?Vr(t,ct(ot(Ae,1),te,2,6,["Jan","Feb","Mar","Apr",l6,"Jun","Jul","Aug","Sep","Oct","Nov","Dec"])[Y]):Xd(t,Y+1,n);break;case 81:tt=r.q.getMonth()/3|0,n<4?Vr(t,ct(ot(Ae,1),te,2,6,["Q1","Q2","Q3","Q4"])[tt]):Vr(t,ct(ot(Ae,1),te,2,6,["1st quarter","2nd quarter","3rd quarter","4th quarter"])[tt]);break;case 100:gt=r.q.getDate(),Xd(t,gt,n);break;case 109:k=s.q.getMinutes(),Xd(t,k,n);break;case 115:h=s.q.getSeconds(),Xd(t,h,n);break;case 122:n<4?Vr(t,o.c[0]):Vr(t,o.c[1]);break;case 118:Vr(t,o.b);break;case 90:n<3?Vr(t,Vgn(o)):n==3?Vr(t,Kgn(o)):Vr(t,Ygn(o.a));break;default:return!1}return!0}function Sxt(t,e,n,r){var s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce,Se,We,Qe,Rn,zn,hr,pi;if(_ue(e),w=u(St((!e.b&&(e.b=new Cn(br,e,4,7)),e.b),0),82),C=u(St((!e.c&&(e.c=new Cn(br,e,5,8)),e.c),0),82),d=Mo(w),k=Mo(C),h=(!e.a&&(e.a=new he(Zi,e,6,6)),e.a).i==0?null:u(St((!e.a&&(e.a=new he(Zi,e,6,6)),e.a),0),202),Se=u(Jn(t.a,d),10),zn=u(Jn(t.a,k),10),We=null,hr=null,Et(w,186)&&(ce=u(Jn(t.a,w),299),Et(ce,11)?We=u(ce,11):Et(ce,10)&&(Se=u(ce,10),We=u(Fe(Se.j,0),11))),Et(C,186)&&(Rn=u(Jn(t.a,C),299),Et(Rn,11)?hr=u(Rn,11):Et(Rn,10)&&(zn=u(Rn,10),hr=u(Fe(zn.j,0),11))),!Se||!zn)throw rt(new F9("The source or the target of edge "+e+" could not be found. This usually happens when an edge connects a node laid out by ELK Layered to a node in another level of hierarchy laid out by either another instance of ELK Layered or another layout algorithm alltogether. The former can be solved by setting the hierarchyHandling option to INCLUDE_CHILDREN."));for(Y=new zv,Lo(Y,e),Jt(Y,(se(),_i),e),Jt(Y,(Te(),_o),null),H=u(Q(r,Gc),21),Se==zn&&H.Fc((oo(),wS)),We||(Yt=(so(),eu),Qe=null,h&&H3(u(Q(Se,os),98))&&(Qe=new $e(h.j,h.k),FZt(Qe,rI(e)),fJt(Qe,n),Zm(k,d)&&(Yt=Ju,Li(Qe,Se.n))),We=Tle(Se,Qe,Yt,r)),hr||(Yt=(so(),Ju),pi=null,h&&H3(u(Q(zn,os),98))&&(pi=new $e(h.b,h.c),FZt(pi,rI(e)),fJt(pi,n)),hr=Tle(zn,pi,Yt,Fa(zn))),Da(Y,We),sa(Y,hr),(We.e.c.length>1||We.g.c.length>1||hr.e.c.length>1||hr.g.c.length>1)&&H.Fc((oo(),vS)),F=new er((!e.n&&(e.n=new he(qo,e,1,7)),e.n));F.e!=F.i.gc();)if(M=u(dr(F),137),!je(Re(qe(M,B2)))&&M.a)switch(tt=Oit(M),ue(Y.b,tt),u(Q(tt,Md),272).g){case 1:case 2:H.Fc((oo(),h7));break;case 0:H.Fc((oo(),l7)),Jt(tt,Md,(A1(),_7))}if(o=u(Q(r,ES),314),gt=u(Q(r,rV),315),s=o==(Yx(),wO)||gt==(a_(),lht),h&&(!h.a&&(h.a=new Ss(Hh,h,5)),h.a).i!=0&&s){for(Lt=sD(h),V=new Du,Bt=ei(Lt,0);Bt.b!=Bt.d.c;)_t=u(ti(Bt),8),ni(V,new yo(_t));Jt(Y,JTt,V)}return Y}function z5n(t){t.gb||(t.gb=!0,t.b=ic(t,0),es(t.b,18),Pi(t.b,19),t.a=ic(t,1),es(t.a,1),Pi(t.a,2),Pi(t.a,3),Pi(t.a,4),Pi(t.a,5),t.o=ic(t,2),es(t.o,8),es(t.o,9),Pi(t.o,10),Pi(t.o,11),Pi(t.o,12),Pi(t.o,13),Pi(t.o,14),Pi(t.o,15),Pi(t.o,16),Pi(t.o,17),Pi(t.o,18),Pi(t.o,19),Pi(t.o,20),Pi(t.o,21),Pi(t.o,22),Pi(t.o,23),To(t.o),To(t.o),To(t.o),To(t.o),To(t.o),To(t.o),To(t.o),To(t.o),To(t.o),To(t.o),t.p=ic(t,3),es(t.p,2),es(t.p,3),es(t.p,4),es(t.p,5),Pi(t.p,6),Pi(t.p,7),To(t.p),To(t.p),t.q=ic(t,4),es(t.q,8),t.v=ic(t,5),Pi(t.v,9),To(t.v),To(t.v),To(t.v),t.w=ic(t,6),es(t.w,2),es(t.w,3),es(t.w,4),Pi(t.w,5),t.B=ic(t,7),Pi(t.B,1),To(t.B),To(t.B),To(t.B),t.Q=ic(t,8),Pi(t.Q,0),To(t.Q),t.R=ic(t,9),es(t.R,1),t.S=ic(t,10),To(t.S),To(t.S),To(t.S),To(t.S),To(t.S),To(t.S),To(t.S),To(t.S),To(t.S),To(t.S),To(t.S),To(t.S),To(t.S),To(t.S),To(t.S),t.T=ic(t,11),Pi(t.T,10),Pi(t.T,11),Pi(t.T,12),Pi(t.T,13),Pi(t.T,14),To(t.T),To(t.T),t.U=ic(t,12),es(t.U,2),es(t.U,3),Pi(t.U,4),Pi(t.U,5),Pi(t.U,6),Pi(t.U,7),To(t.U),t.V=ic(t,13),Pi(t.V,10),t.W=ic(t,14),es(t.W,18),es(t.W,19),es(t.W,20),Pi(t.W,21),Pi(t.W,22),Pi(t.W,23),t.bb=ic(t,15),es(t.bb,10),es(t.bb,11),es(t.bb,12),es(t.bb,13),es(t.bb,14),es(t.bb,15),es(t.bb,16),Pi(t.bb,17),To(t.bb),To(t.bb),t.eb=ic(t,16),es(t.eb,2),es(t.eb,3),es(t.eb,4),es(t.eb,5),es(t.eb,6),es(t.eb,7),Pi(t.eb,8),Pi(t.eb,9),t.ab=ic(t,17),es(t.ab,0),es(t.ab,1),t.H=ic(t,18),Pi(t.H,0),Pi(t.H,1),Pi(t.H,2),Pi(t.H,3),Pi(t.H,4),Pi(t.H,5),To(t.H),t.db=ic(t,19),Pi(t.db,2),t.c=ai(t,20),t.d=ai(t,21),t.e=ai(t,22),t.f=ai(t,23),t.i=ai(t,24),t.g=ai(t,25),t.j=ai(t,26),t.k=ai(t,27),t.n=ai(t,28),t.r=ai(t,29),t.s=ai(t,30),t.t=ai(t,31),t.u=ai(t,32),t.fb=ai(t,33),t.A=ai(t,34),t.C=ai(t,35),t.D=ai(t,36),t.F=ai(t,37),t.G=ai(t,38),t.I=ai(t,39),t.J=ai(t,40),t.L=ai(t,41),t.M=ai(t,42),t.N=ai(t,43),t.O=ai(t,44),t.P=ai(t,45),t.X=ai(t,46),t.Y=ai(t,47),t.Z=ai(t,48),t.$=ai(t,49),t._=ai(t,50),t.cb=ai(t,51),t.K=ai(t,52))}function ci(){ci=Z;var t,e;VS=new Gi(U1e),C7=new Gi(W1e),LSt=(Qd(),Zht),H3e=new mn(gkt,LSt),$6=new mn(b6,null),G3e=new Gi(c8t),ISt=(cy(),ji(eft,ct(ot(nft,1),ae,291,0,[tft]))),BV=new mn(cH,ISt),UO=new mn(KD,(Fn(),!1)),DSt=(ao(),c0),jw=new mn(vkt,DSt),PSt=(q0(),gft),NSt=new mn(UD,PSt),RSt=new mn(gH,!1),jSt=($0(),HV),r5=new mn(oH,jSt),YSt=new Mv(12),q2=new mn(ww,YSt),RV=new mn($D,!1),$St=new mn(pct,!1),YO=new mn(F_,!1),tAt=(oa(),yb),US=new mn(Not,tAt),z6=new Gi(uH),zV=new Gi(jD),fft=new Gi(Hq),dft=new Gi(P_),zSt=new Du,i5=new mn(_kt,zSt),U3e=new mn(Lkt,!1),W3e=new mn(Mkt,!1),qSt=new M9,KO=new mn(Dkt,qSt),$V=new mn(fkt,!1),Q3e=new mn(K1e,1),new mn(Y1e,!0),de(0),new mn(X1e,de(100)),new mn(Q1e,!1),de(0),new mn(Z1e,de(4e3)),de(0),new mn(J1e,de(400)),new mn(tde,!1),new mn(ede,!1),new mn(nde,!0),new mn(rde,!1),MSt=(Az(),wft),V3e=new mn(o8t,MSt),Z3e=new mn(tkt,10),J3e=new mn(ekt,10),iAt=new mn(Aot,20),t4e=new mn(nkt,10),sAt=new mn(Oot,2),e4e=new mn(rkt,10),aAt=new mn(ikt,0),qV=new mn(okt,5),oAt=new mn(skt,1),cAt=new mn(akt,1),H2=new mn(ky,20),n4e=new mn(ckt,10),hAt=new mn(ukt,10),q6=new Gi(lkt),lAt=new cUt,uAt=new mn(Okt,lAt),Y3e=new Gi(gct),XSt=!1,K3e=new mn(dct,XSt),GSt=new Mv(5),HSt=new mn(wkt,GSt),VSt=(fy(),e=u(Hf(lo),9),new rh(e,u(uf(e,e.length),9),0)),s5=new mn(RE,VSt),ZSt=(c4(),mb),QSt=new mn(xkt,ZSt),oft=new Gi(kkt),cft=new Gi(Ekt),uft=new Gi(Tkt),aft=new Gi(Ckt),USt=(t=u(Hf(tA),9),new rh(t,u(uf(t,t.length),9),0)),z2=new mn(L4,USt),KSt=un((cl(),M7)),vb=new mn(v6,KSt),WSt=new $e(0,0),a5=new mn(w6,WSt),jV=new mn(fct,!1),OSt=(A1(),_7),ift=new mn(Skt,OSt),rft=new mn(Gq,!1),de(1),new mn(ide,null),JSt=new Gi(Ikt),lft=new Gi(Akt),rAt=(be(),Zo),o5=new mn(dkt,rAt),hl=new Gi(hkt),eAt=(Qu(),un(xb)),Ky=new mn(jE,eAt),hft=new mn(mkt,!1),nAt=new mn(ykt,!0),WO=new mn(pkt,!1),sft=new mn(bkt,!1),FSt=new mn(Lot,1),BSt=(tq(),bft),new mn(sde,BSt),X3e=!0}function se(){se=Z;var t,e;_i=new Gi(l6t),YTt=new Gi("coordinateOrigin"),Rlt=new Gi("processors"),KTt=new Os("compoundNode",(Fn(),!1)),kO=new Os("insideConnections",!1),JTt=new Gi("originalBendpoints"),t9t=new Gi("originalDummyNodePosition"),e9t=new Gi("originalLabelEdge"),TO=new Gi("representedLabels"),mS=new Gi("endLabels"),M6=new Gi("endLabel.origin"),D6=new Os("labelSide",(jl(),ZO)),W4=new Os("maxEdgeThickness",0),$1=new Os("reversed",!1),O6=new Gi(zfe),n1=new Os("longEdgeSource",null),Rh=new Os("longEdgeTarget",null),Py=new Os("longEdgeHasLabelDummies",!1),EO=new Os("longEdgeBeforeLabelDummy",!1),HG=new Os("edgeConstraint",(u2(),xlt)),Iw=new Gi("inLayerLayoutUnit"),O2=new Os("inLayerConstraint",(B0(),yO)),I6=new Os("inLayerSuccessorConstraint",new le),ZTt=new Os("inLayerSuccessorConstraintBetweenNonDummies",!1),Zu=new Gi("portDummy"),qG=new Os("crossingHint",de(0)),Gc=new Os("graphProperties",(e=u(Hf(Alt),9),new rh(e,u(uf(e,e.length),9),0))),oc=new Os("externalPortSide",(be(),Zo)),QTt=new Os("externalPortSize",new Ta),Olt=new Gi("externalPortReplacedDummies"),GG=new Gi("externalPortReplacedDummy"),Ny=new Os("externalPortConnections",(t=u(Hf(Xa),9),new rh(t,u(uf(t,t.length),9),0))),Dw=new Os(Ofe,0),WTt=new Gi("barycenterAssociates"),N6=new Gi("TopSideComments"),L6=new Gi("BottomSideComments"),zG=new Gi("CommentConnectionPort"),Plt=new Os("inputCollect",!1),Blt=new Os("outputCollect",!1),xO=new Os("cyclic",!1),XTt=new Gi("crossHierarchyMap"),$lt=new Gi("targetOffset"),new Os("splineLabelSize",new Ta),Y4=new Gi("spacings"),VG=new Os("partitionConstraint",!1),Lw=new Gi("breakingPoint.info"),i9t=new Gi("splines.survivingEdge"),N2=new Gi("splines.route.start"),X4=new Gi("splines.edgeChain"),r9t=new Gi("originalPortConstraints"),d7=new Gi("selfLoopHolder"),g7=new Gi("splines.nsPortY"),Tc=new Gi("modelOrder"),Flt=new Gi("longEdgeTargetNode"),Mw=new Os(g1e,!1),K4=new Os(g1e,!1),Nlt=new Gi("layerConstraints.hiddenNodes"),n9t=new Gi("layerConstraints.opposidePort"),jlt=new Gi("targetNode.modelOrder")}function Axt(){Axt=Z,p9t=(TI(),NG),Q2e=new mn(w6t,p9t),uve=new mn(m6t,(Fn(),!1)),x9t=(x$(),Dlt),gve=new mn(Kq,x9t),Lve=new mn(y6t,!1),Mve=new mn(x6t,!0),_2e=new mn(k6t,!1),L9t=(yI(),dht),Vve=new mn(E6t,L9t),de(1),Jve=new mn(T6t,de(7)),twe=new mn(C6t,!1),lve=new mn(_6t,!1),g9t=(v2(),mlt),X2e=new mn($ot,g9t),T9t=(Zz(),aht),Ave=new mn(GD,T9t),k9t=(hh(),CO),yve=new mn(S6t,k9t),de(-1),mve=new mn(A6t,de(-1)),de(-1),xve=new mn(L6t,de(-1)),de(-1),kve=new mn(zot,de(4)),de(-1),Tve=new mn(qot,de(2)),E9t=(w4(),hV),Sve=new mn(Hot,E9t),de(0),_ve=new mn(Got,de(0)),vve=new mn(Vot,de(vi)),d9t=(Yx(),S6),Y2e=new mn($_,d9t),F2e=new mn(M6t,!1),H2e=new mn(Uot,.1),W2e=new mn(Wot,!1),de(-1),V2e=new mn(I6t,de(-1)),de(-1),U2e=new mn(D6t,de(-1)),de(0),B2e=new mn(O6t,de(40)),f9t=(W8(),Mlt),z2e=new mn(Kot,f9t),h9t=mO,R2e=new mn(Yq,h9t),A9t=(a_(),AS),Gve=new mn(M4,A9t),Pve=new Gi(Xq),C9t=(bI(),FG),Ive=new mn(Yot,C9t),_9t=(nD(),BG),Ove=new mn(Xot,_9t),Rve=new mn(Qot,.3),$ve=new Gi(Zot),S9t=(sy(),lV),zve=new mn(Jot,S9t),w9t=(uz(),pht),nve=new mn(N6t,w9t),m9t=(lI(),bht),rve=new mn(P6t,m9t),y9t=(tE(),IS),ive=new mn(Qq,y9t),ave=new mn(Zq,.2),tve=new mn(tct,2),Yve=new mn(F6t,null),Qve=new mn(B6t,10),Xve=new mn(R6t,10),Zve=new mn(j6t,20),de(0),Uve=new mn($6t,de(0)),de(0),Wve=new mn(z6t,de(0)),de(0),Kve=new mn(q6t,de(0)),S2e=new mn(ect,!1),o9t=(gE(),bS),L2e=new mn(H6t,o9t),a9t=(D$(),vlt),A2e=new mn(G6t,a9t),fve=new mn(Jq,!1),de(0),hve=new mn(nct,de(16)),de(0),dve=new mn(rct,de(5)),D9t=(gz(),mht),ywe=new mn(Y0,D9t),ewe=new mn(tH,10),iwe=new mn(eH,1),I9t=(X$(),OG),hwe=new mn(z_,I9t),owe=new Gi(ict),M9t=de(1),de(0),uwe=new mn(sct,M9t),O9t=(oz(),wht),Twe=new mn(nH,O9t),xwe=new Gi(rH),bwe=new mn(iH,!0),gwe=new mn(sH,2),wwe=new mn(act,!0),v9t=(nq(),PG),J2e=new mn(V6t,v9t),b9t=(i6(),o7),Z2e=new mn(U6t,b9t),l9t=(j0(),gb),P2e=new mn(aH,l9t),N2e=new mn(W6t,!1),c9t=(ew(),$4),M2e=new mn(oct,c9t),u9t=(YC(),oht),O2e=new mn(K6t,u9t),I2e=new mn(cct,0),D2e=new mn(uct,0),bve=ylt,pve=wO,Eve=cV,Cve=cV,wve=sht,G2e=($0(),Zg),K2e=S6,q2e=S6,j2e=S6,$2e=Zg,Fve=LS,Bve=AS,Dve=AS,Nve=AS,jve=hht,Hve=LS,qve=LS,sve=(q0(),H6),ove=H6,cve=IS,eve=XO,nwe=x7,rwe=Vy,swe=x7,awe=Vy,fwe=x7,dwe=Vy,cwe=wlt,lwe=OG,Cwe=x7,_we=Vy,kwe=x7,Ewe=Vy,vwe=Vy,pwe=Vy,mwe=Vy}function ro(){ro=Z,U7t=new ws("DIRECTION_PREPROCESSOR",0),H7t=new ws("COMMENT_PREPROCESSOR",1),hS=new ws("EDGE_AND_LAYER_CONSTRAINT_EDGE_REVERSER",2),rlt=new ws("INTERACTIVE_EXTERNAL_PORT_POSITIONER",3),hTt=new ws("PARTITION_PREPROCESSOR",4),gG=new ws("LABEL_DUMMY_INSERTER",5),TG=new ws("SELF_LOOP_PREPROCESSOR",6),r7=new ws("LAYER_CONSTRAINT_PREPROCESSOR",7),uTt=new ws("PARTITION_MIDPROCESSOR",8),tTt=new ws("HIGH_DEGREE_NODE_LAYER_PROCESSOR",9),oTt=new ws("NODE_PROMOTION",10),n7=new ws("LAYER_CONSTRAINT_POSTPROCESSOR",11),lTt=new ws("PARTITION_POSTPROCESSOR",12),Q7t=new ws("HIERARCHICAL_PORT_CONSTRAINT_PROCESSOR",13),fTt=new ws("SEMI_INTERACTIVE_CROSSMIN_PROCESSOR",14),B7t=new ws("BREAKING_POINT_INSERTER",15),wG=new ws("LONG_EDGE_SPLITTER",16),ilt=new ws("PORT_SIDE_PROCESSOR",17),fG=new ws("INVERTED_PORT_PROCESSOR",18),xG=new ws("PORT_LIST_SORTER",19),gTt=new ws("SORT_BY_INPUT_ORDER_OF_MODEL",20),yG=new ws("NORTH_SOUTH_PORT_PREPROCESSOR",21),R7t=new ws("BREAKING_POINT_PROCESSOR",22),cTt=new ws(a1e,23),pTt=new ws(o1e,24),kG=new ws("SELF_LOOP_PORT_RESTORER",25),dTt=new ws("SINGLE_EDGE_GRAPH_WRAPPER",26),dG=new ws("IN_LAYER_CONSTRAINT_PROCESSOR",27),K7t=new ws("END_NODE_PORT_LABEL_MANAGEMENT_PROCESSOR",28),sTt=new ws("LABEL_AND_NODE_SIZE_PROCESSOR",29),iTt=new ws("INNERMOST_NODE_MARGIN_CALCULATOR",30),CG=new ws("SELF_LOOP_ROUTER",31),z7t=new ws("COMMENT_NODE_MARGIN_CALCULATOR",32),hG=new ws("END_LABEL_PREPROCESSOR",33),bG=new ws("LABEL_DUMMY_SWITCHER",34),$7t=new ws("CENTER_LABEL_MANAGEMENT_PROCESSOR",35),e7=new ws("LABEL_SIDE_SELECTOR",36),nTt=new ws("HYPEREDGE_DUMMY_MERGER",37),Z7t=new ws("HIERARCHICAL_PORT_DUMMY_SIZE_PROCESSOR",38),aTt=new ws("LAYER_SIZE_AND_GRAPH_HEIGHT_CALCULATOR",39),fS=new ws("HIERARCHICAL_PORT_POSITION_PROCESSOR",40),G7t=new ws("CONSTRAINTS_POSTPROCESSOR",41),q7t=new ws("COMMENT_POSTPROCESSOR",42),rTt=new ws("HYPERNODE_PROCESSOR",43),J7t=new ws("HIERARCHICAL_PORT_ORTHOGONAL_EDGE_ROUTER",44),vG=new ws("LONG_EDGE_JOINER",45),EG=new ws("SELF_LOOP_POSTPROCESSOR",46),j7t=new ws("BREAKING_POINT_REMOVER",47),mG=new ws("NORTH_SOUTH_PORT_POSTPROCESSOR",48),eTt=new ws("HORIZONTAL_COMPACTOR",49),pG=new ws("LABEL_DUMMY_REMOVER",50),Y7t=new ws("FINAL_SPLINE_BENDPOINTS_CALCULATOR",51),W7t=new ws("END_LABEL_SORTER",52),bO=new ws("REVERSED_EDGE_RESTORER",53),lG=new ws("END_LABEL_POSTPROCESSOR",54),X7t=new ws("HIERARCHICAL_NODE_RESIZER",55),V7t=new ws("DIRECTION_POSTPROCESSOR",56)}function q5n(t,e,n){var r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce,Se,We,Qe,Rn,zn,hr,pi,Rs,Xl,Kh,W1,hU,bN,dA,vN,P7,Nft,z5e,Pft,ip,Vw,F7,wN,mN,Y6,Fft,gA,q5e,MLt,Uw,pA,Bft,X6,bA,i3,vA,Rft,H5e;for(MLt=0,pi=e,Kh=0,bN=pi.length;Kh<bN;++Kh)for(zn=pi[Kh],Vw=new S(zn.j);Vw.a<Vw.c.c.length;){for(ip=u(J(Vw),11),wN=0,d=new S(ip.g);d.a<d.c.c.length;)h=u(J(d),17),zn.c!=h.d.i.c&&++wN;wN>0&&(t.a[ip.p]=MLt++)}for(bA=0,Rs=n,W1=0,dA=Rs.length;W1<dA;++W1){for(zn=Rs[W1],vN=0,Vw=new S(zn.j);Vw.a<Vw.c.c.length&&(ip=u(J(Vw),11),ip.j==(be(),Nn));)for(d=new S(ip.e);d.a<d.c.c.length;)if(h=u(J(d),17),zn.c!=h.c.i.c){++vN;break}for(Nft=0,mN=new ha(zn.j,zn.j.c.length);mN.b>0;){for(ip=(Qn(mN.b>0),u(mN.a.Xb(mN.c=--mN.b),11)),wN=0,d=new S(ip.e);d.a<d.c.c.length;)h=u(J(d),17),zn.c!=h.c.i.c&&++wN;wN>0&&(ip.j==(be(),Nn)?(t.a[ip.p]=bA,++bA):(t.a[ip.p]=bA+vN+Nft,++Nft))}bA+=Nft}for(F7=new Cr,V=new A0,hr=e,Xl=0,hU=hr.length;Xl<hU;++Xl)for(zn=hr[Xl],Bft=new S(zn.j);Bft.a<Bft.c.c.length;)for(pA=u(J(Bft),11),d=new S(pA.g);d.a<d.c.c.length;)if(h=u(J(d),17),vA=h.d,zn.c!=vA.i.c)if(Uw=u(ec(Ao(F7.f,pA)),467),i3=u(ec(Ao(F7.f,vA)),467),!Uw&&!i3)H=new qWt,V.a.zc(H,V),ue(H.a,h),ue(H.d,pA),su(F7.f,pA,H),ue(H.d,vA),su(F7.f,vA,H);else if(!Uw)ue(i3.a,h),ue(i3.d,pA),su(F7.f,pA,i3);else if(!i3)ue(Uw.a,h),ue(Uw.d,vA),su(F7.f,vA,Uw);else if(Uw==i3)ue(Uw.a,h);else{for(ue(Uw.a,h),Pft=new S(i3.d);Pft.a<Pft.c.c.length;)z5e=u(J(Pft),11),su(F7.f,z5e,Uw);As(Uw.a,i3.a),As(Uw.d,i3.d),V.a.Bc(i3)!=null}for(Y=u(XI(V,Pt(fxn,{3:1,4:1,5:1,1946:1},467,V.a.gc(),0,1)),1946),Rn=e[0].c,q5e=n[0].c,C=Y,M=0,F=C.length;M<F;++M)for(k=C[M],k.e=MLt,k.f=bA,Vw=new S(k.d);Vw.a<Vw.c.c.length;)ip=u(J(Vw),11),Y6=t.a[ip.p],ip.i.c==Rn?(Y6<k.e&&(k.e=Y6),Y6>k.b&&(k.b=Y6)):ip.i.c==q5e&&(Y6<k.f&&(k.f=Y6),Y6>k.c&&(k.c=Y6));for(D8(Y,0,Y.length,null),X6=Pt(Tr,Xr,25,Y.length,15,1),r=Pt(Tr,Xr,25,bA+1,15,1),gt=0;gt<Y.length;gt++)X6[gt]=Y[gt].f,r[X6[gt]]=1;for(o=0,Lt=0;Lt<r.length;Lt++)r[Lt]==1?r[Lt]=o:--o;for(Fft=0,_t=0;_t<X6.length;_t++)X6[_t]+=r[X6[_t]],Fft=b.Math.max(Fft,X6[_t]+1);for(w=1;w<Fft;)w*=2;for(H5e=2*w-1,w-=1,Rft=Pt(Tr,Xr,25,H5e,15,1),s=0,We=0;We<X6.length;We++)for(Se=X6[We]+w,++Rft[Se];Se>0;)Se%2>0&&(s+=Rft[Se+1]),Se=(Se-1)/2|0,++Rft[Se];for(Qe=Pt(pme,Ie,362,Y.length*2,0,1),Bt=0;Bt<Y.length;Bt++)Qe[2*Bt]=new e$(Y[Bt],Y[Bt].e,Y[Bt].b,(BC(),NS)),Qe[2*Bt+1]=new e$(Y[Bt],Y[Bt].b,Y[Bt].e,OS);for(D8(Qe,0,Qe.length,null),P7=0,Yt=0;Yt<Qe.length;Yt++)switch(Qe[Yt].d.g){case 0:++P7;break;case 1:--P7,s+=P7}for(gA=Pt(pme,Ie,362,Y.length*2,0,1),ce=0;ce<Y.length;ce++)gA[2*ce]=new e$(Y[ce],Y[ce].f,Y[ce].c,(BC(),NS)),gA[2*ce+1]=new e$(Y[ce],Y[ce].c,Y[ce].f,OS);for(D8(gA,0,gA.length,null),P7=0,tt=0;tt<gA.length;tt++)switch(gA[tt].d.g){case 0:++P7;break;case 1:--P7,s+=P7}return s}function gi(){gi=Z,fA=new vv(7),kLt=new Vd(8,94),new Vd(8,64),ELt=new Vd(8,36),D5e=new Vd(8,65),O5e=new Vd(8,122),N5e=new Vd(8,90),F5e=new Vd(8,98),I5e=new Vd(8,66),P5e=new Vd(8,60),B5e=new Vd(8,62),xLt=new vv(11),lU=new Nl(4),jc(lU,48,57),N7=new Nl(4),jc(N7,48,57),jc(N7,65,90),jc(N7,95,95),jc(N7,97,122),K6=new Nl(4),jc(K6,9,9),jc(K6,10,10),jc(K6,12,12),jc(K6,13,13),jc(K6,32,32),TLt=by(lU),_Lt=by(N7),CLt=by(K6),O7=new Cr,hA=new Cr,M5e=ct(ot(Ae,1),te,2,6,["Cn","Lu","Ll","Lt","Lm","Lo","Mn","Me","Mc","Nd","Nl","No","Zs","Zl","Zp","Cc","Cf",null,"Co","Cs","Pd","Ps","Pe","Pc","Po","Sm","Sc","Sk","So","Pi","Pf","L","M","N","Z","C","P","S"]),mLt=ct(ot(Ae,1),te,2,6,["Basic Latin","Latin-1 Supplement","Latin Extended-A","Latin Extended-B","IPA Extensions","Spacing Modifier Letters","Combining Diacritical Marks","Greek","Cyrillic","Armenian","Hebrew","Arabic","Syriac","Thaana","Devanagari","Bengali","Gurmukhi","Gujarati","Oriya","Tamil","Telugu","Kannada","Malayalam","Sinhala","Thai","Lao","Tibetan","Myanmar","Georgian","Hangul Jamo","Ethiopic","Cherokee","Unified Canadian Aboriginal Syllabics","Ogham","Runic","Khmer","Mongolian","Latin Extended Additional","Greek Extended","General Punctuation","Superscripts and Subscripts","Currency Symbols","Combining Marks for Symbols","Letterlike Symbols","Number Forms","Arrows","Mathematical Operators","Miscellaneous Technical","Control Pictures","Optical Character Recognition","Enclosed Alphanumerics","Box Drawing","Block Elements","Geometric Shapes","Miscellaneous Symbols","Dingbats","Braille Patterns","CJK Radicals Supplement","Kangxi Radicals","Ideographic Description Characters","CJK Symbols and Punctuation","Hiragana","Katakana","Bopomofo","Hangul Compatibility Jamo","Kanbun","Bopomofo Extended","Enclosed CJK Letters and Months","CJK Compatibility","CJK Unified Ideographs Extension A","CJK Unified Ideographs","Yi Syllables","Yi Radicals","Hangul Syllables",rge,"CJK Compatibility Ideographs","Alphabetic Presentation Forms","Arabic Presentation Forms-A","Combining Half Marks","CJK Compatibility Forms","Small Form Variants","Arabic Presentation Forms-B","Specials","Halfwidth and Fullwidth Forms","Old Italic","Gothic","Deseret","Byzantine Musical Symbols","Musical Symbols","Mathematical Alphanumeric Symbols","CJK Unified Ideographs Extension B","CJK Compatibility Ideographs Supplement","Tags"]),yLt=ct(ot(Tr,1),Xr,25,15,[66304,66351,66352,66383,66560,66639,118784,119039,119040,119295,119808,120831,131072,173782,194560,195103,917504,917631])}function Lq(){Lq=Z,xpe=new uh("OUT_T_L",0,(Xu(),Sd),(wu(),yf),(Kf(),sc),sc,ct(ot(Bh,1),Ie,21,0,[ji((fy(),Cf),ct(ot(lo,1),ae,93,0,[_f,Ef]))])),ype=new uh("OUT_T_C",1,cb,yf,sc,tu,ct(ot(Bh,1),Ie,21,0,[ji(Cf,ct(ot(lo,1),ae,93,0,[_f,J0])),ji(Cf,ct(ot(lo,1),ae,93,0,[_f,J0,$h]))])),kpe=new uh("OUT_T_R",2,mf,yf,sc,ac,ct(ot(Bh,1),Ie,21,0,[ji(Cf,ct(ot(lo,1),ae,93,0,[_f,Tf]))])),fpe=new uh("OUT_B_L",3,Sd,e1,ac,sc,ct(ot(Bh,1),Ie,21,0,[ji(Cf,ct(ot(lo,1),ae,93,0,[zh,Ef]))])),hpe=new uh("OUT_B_C",4,cb,e1,ac,tu,ct(ot(Bh,1),Ie,21,0,[ji(Cf,ct(ot(lo,1),ae,93,0,[zh,J0])),ji(Cf,ct(ot(lo,1),ae,93,0,[zh,J0,$h]))])),dpe=new uh("OUT_B_R",5,mf,e1,ac,ac,ct(ot(Bh,1),Ie,21,0,[ji(Cf,ct(ot(lo,1),ae,93,0,[zh,Tf]))])),bpe=new uh("OUT_L_T",6,mf,e1,sc,sc,ct(ot(Bh,1),Ie,21,0,[ji(Cf,ct(ot(lo,1),ae,93,0,[Ef,_f,$h]))])),ppe=new uh("OUT_L_C",7,mf,ub,tu,sc,ct(ot(Bh,1),Ie,21,0,[ji(Cf,ct(ot(lo,1),ae,93,0,[Ef,l0])),ji(Cf,ct(ot(lo,1),ae,93,0,[Ef,l0,$h]))])),gpe=new uh("OUT_L_B",8,mf,yf,ac,sc,ct(ot(Bh,1),Ie,21,0,[ji(Cf,ct(ot(lo,1),ae,93,0,[Ef,zh,$h]))])),mpe=new uh("OUT_R_T",9,Sd,e1,sc,ac,ct(ot(Bh,1),Ie,21,0,[ji(Cf,ct(ot(lo,1),ae,93,0,[Tf,_f,$h]))])),wpe=new uh("OUT_R_C",10,Sd,ub,tu,ac,ct(ot(Bh,1),Ie,21,0,[ji(Cf,ct(ot(lo,1),ae,93,0,[Tf,l0])),ji(Cf,ct(ot(lo,1),ae,93,0,[Tf,l0,$h]))])),vpe=new uh("OUT_R_B",11,Sd,yf,ac,ac,ct(ot(Bh,1),Ie,21,0,[ji(Cf,ct(ot(lo,1),ae,93,0,[Tf,zh,$h]))])),upe=new uh("IN_T_L",12,Sd,e1,sc,sc,ct(ot(Bh,1),Ie,21,0,[ji(Ul,ct(ot(lo,1),ae,93,0,[_f,Ef])),ji(Ul,ct(ot(lo,1),ae,93,0,[_f,Ef,$h]))])),cpe=new uh("IN_T_C",13,cb,e1,sc,tu,ct(ot(Bh,1),Ie,21,0,[ji(Ul,ct(ot(lo,1),ae,93,0,[_f,J0])),ji(Ul,ct(ot(lo,1),ae,93,0,[_f,J0,$h]))])),lpe=new uh("IN_T_R",14,mf,e1,sc,ac,ct(ot(Bh,1),Ie,21,0,[ji(Ul,ct(ot(lo,1),ae,93,0,[_f,Tf])),ji(Ul,ct(ot(lo,1),ae,93,0,[_f,Tf,$h]))])),ape=new uh("IN_C_L",15,Sd,ub,tu,sc,ct(ot(Bh,1),Ie,21,0,[ji(Ul,ct(ot(lo,1),ae,93,0,[l0,Ef])),ji(Ul,ct(ot(lo,1),ae,93,0,[l0,Ef,$h]))])),spe=new uh("IN_C_C",16,cb,ub,tu,tu,ct(ot(Bh,1),Ie,21,0,[ji(Ul,ct(ot(lo,1),ae,93,0,[l0,J0])),ji(Ul,ct(ot(lo,1),ae,93,0,[l0,J0,$h]))])),ope=new uh("IN_C_R",17,mf,ub,tu,ac,ct(ot(Bh,1),Ie,21,0,[ji(Ul,ct(ot(lo,1),ae,93,0,[l0,Tf])),ji(Ul,ct(ot(lo,1),ae,93,0,[l0,Tf,$h]))])),rpe=new uh("IN_B_L",18,Sd,yf,ac,sc,ct(ot(Bh,1),Ie,21,0,[ji(Ul,ct(ot(lo,1),ae,93,0,[zh,Ef])),ji(Ul,ct(ot(lo,1),ae,93,0,[zh,Ef,$h]))])),npe=new uh("IN_B_C",19,cb,yf,ac,tu,ct(ot(Bh,1),Ie,21,0,[ji(Ul,ct(ot(lo,1),ae,93,0,[zh,J0])),ji(Ul,ct(ot(lo,1),ae,93,0,[zh,J0,$h]))])),ipe=new uh("IN_B_R",20,mf,yf,ac,ac,ct(ot(Bh,1),Ie,21,0,[ji(Ul,ct(ot(lo,1),ae,93,0,[zh,Tf])),ji(Ul,ct(ot(lo,1),ae,93,0,[zh,Tf,$h]))])),Put=new uh(O_,21,null,null,null,null,ct(ot(Bh,1),Ie,21,0,[]))}function dn(){dn=Z,t3=(jp(),Ln).b,u(St(Wt(Ln.b),0),34),u(St(Wt(Ln.b),1),18),Jg=Ln.a,u(St(Wt(Ln.a),0),34),u(St(Wt(Ln.a),1),18),u(St(Wt(Ln.a),2),18),u(St(Wt(Ln.a),3),18),u(St(Wt(Ln.a),4),18),Cb=Ln.o,u(St(Wt(Ln.o),0),34),u(St(Wt(Ln.o),1),34),X4e=u(St(Wt(Ln.o),2),18),u(St(Wt(Ln.o),3),18),u(St(Wt(Ln.o),4),18),u(St(Wt(Ln.o),5),18),u(St(Wt(Ln.o),6),18),u(St(Wt(Ln.o),7),18),u(St(Wt(Ln.o),8),18),u(St(Wt(Ln.o),9),18),u(St(Wt(Ln.o),10),18),u(St(Wt(Ln.o),11),18),u(St(Wt(Ln.o),12),18),u(St(Wt(Ln.o),13),18),u(St(Wt(Ln.o),14),18),u(St(Wt(Ln.o),15),18),u(St(Mi(Ln.o),0),59),u(St(Mi(Ln.o),1),59),u(St(Mi(Ln.o),2),59),u(St(Mi(Ln.o),3),59),u(St(Mi(Ln.o),4),59),u(St(Mi(Ln.o),5),59),u(St(Mi(Ln.o),6),59),u(St(Mi(Ln.o),7),59),u(St(Mi(Ln.o),8),59),u(St(Mi(Ln.o),9),59),Y4e=Ln.p,u(St(Wt(Ln.p),0),34),u(St(Wt(Ln.p),1),34),u(St(Wt(Ln.p),2),34),u(St(Wt(Ln.p),3),34),u(St(Wt(Ln.p),4),18),u(St(Wt(Ln.p),5),18),u(St(Mi(Ln.p),0),59),u(St(Mi(Ln.p),1),59),Q4e=Ln.q,u(St(Wt(Ln.q),0),34),_b=Ln.v,u(St(Wt(Ln.v),0),18),u(St(Mi(Ln.v),0),59),u(St(Mi(Ln.v),1),59),u(St(Mi(Ln.v),2),59),tp=Ln.w,u(St(Wt(Ln.w),0),34),u(St(Wt(Ln.w),1),34),u(St(Wt(Ln.w),2),34),u(St(Wt(Ln.w),3),18),Sb=Ln.B,u(St(Wt(Ln.B),0),18),u(St(Mi(Ln.B),0),59),u(St(Mi(Ln.B),1),59),u(St(Mi(Ln.B),2),59),Z4e=Ln.Q,u(St(Wt(Ln.Q),0),18),u(St(Mi(Ln.Q),0),59),J4e=Ln.R,u(St(Wt(Ln.R),0),34),Wh=Ln.S,u(St(Mi(Ln.S),0),59),u(St(Mi(Ln.S),1),59),u(St(Mi(Ln.S),2),59),u(St(Mi(Ln.S),3),59),u(St(Mi(Ln.S),4),59),u(St(Mi(Ln.S),5),59),u(St(Mi(Ln.S),6),59),u(St(Mi(Ln.S),7),59),u(St(Mi(Ln.S),8),59),u(St(Mi(Ln.S),9),59),u(St(Mi(Ln.S),10),59),u(St(Mi(Ln.S),11),59),u(St(Mi(Ln.S),12),59),u(St(Mi(Ln.S),13),59),u(St(Mi(Ln.S),14),59),ep=Ln.T,u(St(Wt(Ln.T),0),18),u(St(Wt(Ln.T),2),18),t5e=u(St(Wt(Ln.T),3),18),u(St(Wt(Ln.T),4),18),u(St(Mi(Ln.T),0),59),u(St(Mi(Ln.T),1),59),u(St(Wt(Ln.T),1),18),np=Ln.U,u(St(Wt(Ln.U),0),34),u(St(Wt(Ln.U),1),34),u(St(Wt(Ln.U),2),18),u(St(Wt(Ln.U),3),18),u(St(Wt(Ln.U),4),18),u(St(Wt(Ln.U),5),18),u(St(Mi(Ln.U),0),59),e3=Ln.V,u(St(Wt(Ln.V),0),18),c5=Ln.W,u(St(Wt(Ln.W),0),34),u(St(Wt(Ln.W),1),34),u(St(Wt(Ln.W),2),34),u(St(Wt(Ln.W),3),18),u(St(Wt(Ln.W),4),18),u(St(Wt(Ln.W),5),18),e5e=Ln.bb,u(St(Wt(Ln.bb),0),34),u(St(Wt(Ln.bb),1),34),u(St(Wt(Ln.bb),2),34),u(St(Wt(Ln.bb),3),34),u(St(Wt(Ln.bb),4),34),u(St(Wt(Ln.bb),5),34),u(St(Wt(Ln.bb),6),34),u(St(Wt(Ln.bb),7),18),u(St(Mi(Ln.bb),0),59),u(St(Mi(Ln.bb),1),59),n5e=Ln.eb,u(St(Wt(Ln.eb),0),34),u(St(Wt(Ln.eb),1),34),u(St(Wt(Ln.eb),2),34),u(St(Wt(Ln.eb),3),34),u(St(Wt(Ln.eb),4),34),u(St(Wt(Ln.eb),5),34),u(St(Wt(Ln.eb),6),18),u(St(Wt(Ln.eb),7),18),Qa=Ln.ab,u(St(Wt(Ln.ab),0),34),u(St(Wt(Ln.ab),1),34),qw=Ln.H,u(St(Wt(Ln.H),0),18),u(St(Wt(Ln.H),1),18),u(St(Wt(Ln.H),2),18),u(St(Wt(Ln.H),3),18),u(St(Wt(Ln.H),4),18),u(St(Wt(Ln.H),5),18),u(St(Mi(Ln.H),0),59),Hw=Ln.db,u(St(Wt(Ln.db),0),18),V1=Ln.M}function H5n(t){var e;t.O||(t.O=!0,Xc(t,"type"),sz(t,"ecore.xml.type"),az(t,L2),e=u(wE((Mp(),Uh),L2),1945),Mr(So(t.fb),t.b),rc(t.b,fN,"AnyType",!1,!1,!0),ls(u(St(Wt(t.b),0),34),t.wb.D,ZD,null,0,-1,fN,!1,!1,!0,!1,!1,!1),ls(u(St(Wt(t.b),1),34),t.wb.D,"any",null,0,-1,fN,!0,!0,!0,!1,!1,!0),ls(u(St(Wt(t.b),2),34),t.wb.D,"anyAttribute",null,0,-1,fN,!1,!1,!0,!1,!1,!1),rc(t.bb,cU,R0e,!1,!1,!0),ls(u(St(Wt(t.bb),0),34),t.gb,"data",null,0,1,cU,!1,!1,!0,!1,!0,!1),ls(u(St(Wt(t.bb),1),34),t.gb,E8t,null,1,1,cU,!1,!1,!0,!1,!0,!1),rc(t.fb,dN,j0e,!1,!1,!0),ls(u(St(Wt(t.fb),0),34),e.gb,"rawValue",null,0,1,dN,!0,!0,!0,!1,!0,!0),ls(u(St(Wt(t.fb),1),34),e.a,Y_,null,0,1,dN,!0,!0,!0,!1,!0,!0),Fi(u(St(Wt(t.fb),2),18),t.wb.q,null,"instanceType",1,1,dN,!1,!1,!0,!1,!1,!1,!1),rc(t.qb,pLt,$0e,!1,!1,!0),ls(u(St(Wt(t.qb),0),34),t.wb.D,ZD,null,0,-1,null,!1,!1,!0,!1,!1,!1),Fi(u(St(Wt(t.qb),1),18),t.wb.ab,null,"xMLNSPrefixMap",0,-1,null,!0,!1,!0,!0,!1,!1,!1),Fi(u(St(Wt(t.qb),2),18),t.wb.ab,null,"xSISchemaLocation",0,-1,null,!0,!1,!0,!0,!1,!1,!1),ls(u(St(Wt(t.qb),3),34),t.gb,"cDATA",null,0,-2,null,!0,!0,!0,!1,!1,!0),ls(u(St(Wt(t.qb),4),34),t.gb,"comment",null,0,-2,null,!0,!0,!0,!1,!1,!0),Fi(u(St(Wt(t.qb),5),18),t.bb,null,J0e,0,-2,null,!0,!0,!0,!0,!1,!1,!0),ls(u(St(Wt(t.qb),6),34),t.gb,Hct,null,0,-2,null,!0,!0,!0,!1,!1,!0),si(t.a,Xn,"AnySimpleType",!0),si(t.c,Ae,"AnyURI",!0),si(t.d,ot(Hu,1),"Base64Binary",!0),si(t.e,dl,"Boolean",!0),si(t.f,Bs,"BooleanObject",!0),si(t.g,Hu,"Byte",!0),si(t.i,E6,"ByteObject",!0),si(t.j,Ae,"Date",!0),si(t.k,Ae,"DateTime",!0),si(t.n,Cut,"Decimal",!0),si(t.o,ia,"Double",!0),si(t.p,ca,"DoubleObject",!0),si(t.q,Ae,"Duration",!0),si(t.s,ph,"ENTITIES",!0),si(t.r,ph,"ENTITIESBase",!0),si(t.t,Ae,j8t,!0),si(t.u,r3,"Float",!0),si(t.v,XE,"FloatObject",!0),si(t.w,Ae,"GDay",!0),si(t.B,Ae,"GMonth",!0),si(t.A,Ae,"GMonthDay",!0),si(t.C,Ae,"GYear",!0),si(t.D,Ae,"GYearMonth",!0),si(t.F,ot(Hu,1),"HexBinary",!0),si(t.G,Ae,"ID",!0),si(t.H,Ae,"IDREF",!0),si(t.J,ph,"IDREFS",!0),si(t.I,ph,"IDREFSBase",!0),si(t.K,Tr,"Int",!0),si(t.M,B4,"Integer",!0),si(t.L,ja,"IntObject",!0),si(t.P,Ae,"Language",!0),si(t.Q,Lb,"Long",!0),si(t.R,Tw,"LongObject",!0),si(t.S,Ae,"Name",!0),si(t.T,Ae,PH,!0),si(t.U,B4,"NegativeInteger",!0),si(t.V,Ae,q8t,!0),si(t.X,ph,"NMTOKENS",!0),si(t.W,ph,"NMTOKENSBase",!0),si(t.Y,B4,"NonNegativeInteger",!0),si(t.Z,B4,"NonPositiveInteger",!0),si(t.$,Ae,"NormalizedString",!0),si(t._,Ae,"NOTATION",!0),si(t.ab,Ae,"PositiveInteger",!0),si(t.cb,Ae,"QName",!0),si(t.db,f5,"Short",!0),si(t.eb,Cw,"ShortObject",!0),si(t.gb,Ae,Dxt,!0),si(t.hb,Ae,"Time",!0),si(t.ib,Ae,"Token",!0),si(t.jb,f5,"UnsignedByte",!0),si(t.kb,Cw,"UnsignedByteObject",!0),si(t.lb,Lb,"UnsignedInt",!0),si(t.mb,Tw,"UnsignedIntObject",!0),si(t.nb,B4,"UnsignedLong",!0),si(t.ob,Tr,"UnsignedShort",!0),si(t.pb,ja,"UnsignedShortObject",!0),qyt(t,L2),G5n(t))}function zhe(t){Sv(t,new w2(rbt(mR(Ev(yv(kv(xv(new pg,Vn),"ELK Layered"),"Layer-based algorithm provided by the Eclipse Layout Kernel. Arranges as many edges as possible into one direction by placing nodes into subsequent layers. This implementation supports different routing styles (straight, orthogonal, splines); if orthogonal routing is selected, arbitrary port constraints are respected, thus enabling the layout of block diagrams such as actor-oriented models or circuit schematics. Furthermore, full layout of compound graphs with cross-hierarchy edges is supported when the respective option is activated on the top level."),new eQ),Vn),ji((vE(),kft),ct(ot(eU,1),ae,237,0,[JV,tU,ZV,xft,QV,XV]))))),xe(t,Vn,tkt,De(Jlt)),xe(t,Vn,ekt,De(dCt)),xe(t,Vn,Aot,De(AO)),xe(t,Vn,nkt,De(xf)),xe(t,Vn,Oot,De(B6)),xe(t,Vn,rkt,De(Fw)),xe(t,Vn,ikt,De(Gy)),xe(t,Vn,skt,De(m7)),xe(t,Vn,akt,De(y7)),xe(t,Vn,okt,De(tht)),xe(t,Vn,ky,De(Bw)),xe(t,Vn,ckt,De(eht)),xe(t,Vn,ukt,De(_S)),xe(t,Vn,lkt,De(sV)),xe(t,Vn,F6t,De(SO)),xe(t,Vn,R6t,De(Q4)),xe(t,Vn,B6t,De(R2)),xe(t,Vn,j6t,De(Z4)),xe(t,Vn,jD,de(0)),xe(t,Vn,$6t,De(w7)),xe(t,Vn,z6t,De(fCt)),xe(t,Vn,q6t,De(F6)),xe(t,Vn,Y0,De(xCt)),xe(t,Vn,tH,De(gCt)),xe(t,Vn,eH,De(pCt)),xe(t,Vn,z_,De(rht)),xe(t,Vn,ict,De(bCt)),xe(t,Vn,sct,De(vCt)),xe(t,Vn,nH,De(aV)),xe(t,Vn,rH,De(iht)),xe(t,Vn,iH,De(mCt)),xe(t,Vn,sH,De(wCt)),xe(t,Vn,act,De(yCt)),xe(t,Vn,Zot,De(Nw)),xe(t,Vn,Jot,De(CS)),xe(t,Vn,Qq,De(Klt)),xe(t,Vn,Zq,De(G9t)),xe(t,Vn,ww,oCt),xe(t,Vn,UD,z9t),xe(t,Vn,hkt,0),xe(t,Vn,Hq,de(1)),xe(t,Vn,b6,BE),xe(t,Vn,fkt,De(B2)),xe(t,Vn,Not,De(os)),xe(t,Vn,dkt,De(v7)),xe(t,Vn,KD,De(Awe)),xe(t,Vn,gkt,De(Ld)),xe(t,Vn,oH,De(jy)),xe(t,Vn,P_,(Fn(),!0)),xe(t,Vn,pkt,De($y)),xe(t,Vn,bkt,De(P2)),xe(t,Vn,L4,De(F2)),xe(t,Vn,v6,De(iV)),xe(t,Vn,fct,De(Zlt)),xe(t,Vn,vkt,$9t),xe(t,Vn,RE,De(Ow)),xe(t,Vn,wkt,De(nV)),xe(t,Vn,jE,De(qy)),xe(t,Vn,mkt,De(Nwe)),xe(t,Vn,ykt,De(lCt)),xe(t,Vn,xkt,uCt),xe(t,Vn,kkt,De(Iwe)),xe(t,Vn,Ekt,De(Dwe)),xe(t,Vn,Tkt,De(Owe)),xe(t,Vn,Ckt,De(Mwe)),xe(t,Vn,C6t,De(nht)),xe(t,Vn,GD,De(eCt)),xe(t,Vn,Hot,De(Xlt)),xe(t,Vn,T6t,De(SS)),xe(t,Vn,S6t,De(cu)),xe(t,Vn,$ot,De(Ry)),xe(t,Vn,$_,De(ES)),xe(t,Vn,M6t,De(By)),xe(t,Vn,O6t,De(B9t)),xe(t,Vn,Kot,De(Glt)),xe(t,Vn,Yq,De(_O)),xe(t,Vn,Wot,De(Vlt)),xe(t,Vn,y6t,De(nCt)),xe(t,Vn,x6t,De(rCt)),xe(t,Vn,Kq,De(X9t)),xe(t,Vn,M4,De(rV)),xe(t,Vn,Xot,De(Qlt)),xe(t,Vn,m6t,De(Ylt)),xe(t,Vn,Qot,De(sCt)),xe(t,Vn,N6t,De(H9t)),xe(t,Vn,P6t,De(Wlt)),xe(t,Vn,cH,De(Hlt)),xe(t,Vn,Yot,De(iCt)),xe(t,Vn,H6t,De(KG)),xe(t,Vn,G6t,De(N9t)),xe(t,Vn,ect,De(WG)),xe(t,Vn,Jq,De(W9t)),xe(t,Vn,nct,De(U9t)),xe(t,Vn,rct,De(K9t)),xe(t,Vn,w6,De(p7)),xe(t,Vn,_kt,De(_o)),xe(t,Vn,Lot,De(Ug)),xe(t,Vn,Skt,De(Md)),xe(t,Vn,Gq,De(Ult)),xe(t,Vn,Uot,De(R9t)),xe(t,Vn,Akt,De(Wg)),xe(t,Vn,Lkt,De(kS)),xe(t,Vn,Mkt,De(JG)),xe(t,Vn,Ikt,De(Pw)),xe(t,Vn,dct,De(cCt)),xe(t,Vn,gct,De(b7)),xe(t,Vn,zot,De(Z9t)),xe(t,Vn,qot,De(J9t)),xe(t,Vn,uH,De(Hy)),xe(t,Vn,k6t,De(zlt)),xe(t,Vn,Got,De(tCt)),xe(t,Vn,V6t,De(ZG)),xe(t,Vn,U6t,De(QG)),xe(t,Vn,Dkt,De(eV)),xe(t,Vn,Vot,De(Q9t)),xe(t,Vn,Xq,De(TS)),xe(t,Vn,Okt,De(LO)),xe(t,Vn,w6t,De(j9t)),xe(t,Vn,E6t,De(hCt)),xe(t,Vn,tct,De(q9t)),xe(t,Vn,A6t,De(Lwe)),xe(t,Vn,I6t,De(Swe)),xe(t,Vn,pct,De(Y9t)),xe(t,Vn,L6t,De(tV)),xe(t,Vn,D6t,De(XG)),xe(t,Vn,aH,De(db)),xe(t,Vn,K6t,De(F9t)),xe(t,Vn,cct,De(YG)),xe(t,Vn,uct,De(P9t)),xe(t,Vn,W6t,De(qlt)),xe(t,Vn,oct,De(P6)),xe(t,Vn,_6t,De(V9t))}function C4(t,e){var n,r;return h5||(h5=new Cr,D7=new Cr,r=(gi(),gi(),new Nl(4)),WI(r,`	
\r\r  `),xo(h5,cut,r),xo(D7,cut,by(r)),r=new Nl(4),WI(r,ege),xo(h5,iS,r),xo(D7,iS,by(r)),r=new Nl(4),WI(r,ege),xo(h5,iS,r),xo(D7,iS,by(r)),r=new Nl(4),WI(r,nge),vy(r,u(Fc(h5,iS),117)),xo(h5,out,r),xo(D7,out,by(r)),r=new Nl(4),WI(r,"-.0:AZ__az··ÀÖØöøıĴľŁňŊžƀǃǍǰǴǵǺȗɐʨʻˁːˑ̀͠͡ͅΆΊΌΌΎΡΣώϐϖϚϚϜϜϞϞϠϠϢϳЁЌЎяёќўҁ҃҆ҐӄӇӈӋӌӐӫӮӵӸӹԱՖՙՙաֆֹֻֽֿֿׁׂ֑֣֡ׄׄאתװײءغـْ٠٩ٰڷںھۀێېۓە۪ۭۨ۰۹ँःअह़्॑॔क़ॣ०९ঁঃঅঌএঐওনপরললশহ়়াৄেৈো্ৗৗড়ঢ়য়ৣ০ৱਂਂਅਊਏਐਓਨਪਰਲਲ਼ਵਸ਼ਸਹ਼਼ਾੂੇੈੋ੍ਖ਼ੜਫ਼ਫ਼੦ੴઁઃઅઋઍઍએઑઓનપરલળવહ઼ૅેૉો્ૠૠ૦૯ଁଃଅଌଏଐଓନପରଲଳଶହ଼ୃେୈୋ୍ୖୗଡ଼ଢ଼ୟୡ୦୯ஂஃஅஊஎஐஒகஙசஜஜஞடணதநபமவஷஹாூெைொ்ௗௗ௧௯ఁఃఅఌఎఐఒనపళవహాౄెైొ్ౕౖౠౡ౦౯ಂಃಅಌಎಐಒನಪಳವಹಾೄೆೈೊ್ೕೖೞೞೠೡ೦೯ംഃഅഌഎഐഒനപഹാൃെൈൊ്ൗൗൠൡ൦൯กฮะฺเ๎๐๙ກຂຄຄງຈຊຊຍຍດທນຟມຣລລວວສຫອຮະູົຽເໄໆໆ່ໍ໐໙༘༙༠༩༹༹༵༵༷༷༾ཇཉཀྵ྄ཱ྆ྋྐྕྗྗྙྭྱྷྐྵྐྵႠჅაჶᄀᄀᄂᄃᄅᄇᄉᄉᄋᄌᄎᄒᄼᄼᄾᄾᅀᅀᅌᅌᅎᅎᅐᅐᅔᅕᅙᅙᅟᅡᅣᅣᅥᅥᅧᅧᅩᅩᅭᅮᅲᅳᅵᅵᆞᆞᆨᆨᆫᆫᆮᆯᆷᆸᆺᆺᆼᇂᇫᇫᇰᇰᇹᇹḀẛẠỹἀἕἘἝἠὅὈὍὐὗὙὙὛὛὝὝὟώᾀᾴᾶᾼιιῂῄῆῌῐΐῖΊῠῬῲῴῶῼ⃐⃜⃡⃡ΩΩKÅ℮℮ↀↂ々々〇〇〡〯〱〵ぁゔ゙゚ゝゞァヺーヾㄅㄬ一龥가힣"),xo(h5,uut,r),xo(D7,uut,by(r)),r=new Nl(4),WI(r,nge),jc(r,95,95),jc(r,58,58),xo(h5,lut,r),xo(D7,lut,by(r))),n=u(Fc(e?h5:D7,t),136),n}function G5n(t){Ir(t.a,Kr,ct(ot(Ae,1),te,2,6,[oi,"anySimpleType"])),Ir(t.b,Kr,ct(ot(Ae,1),te,2,6,[oi,"anyType",Nh,ZD])),Ir(u(St(Wt(t.b),0),34),Kr,ct(ot(Ae,1),te,2,6,[Nh,nut,oi,":mixed"])),Ir(u(St(Wt(t.b),1),34),Kr,ct(ot(Ae,1),te,2,6,[Nh,nut,B8t,iut,oi,":1",z0e,"lax"])),Ir(u(St(Wt(t.b),2),34),Kr,ct(ot(Ae,1),te,2,6,[Nh,B0e,B8t,iut,oi,":2",z0e,"lax"])),Ir(t.c,Kr,ct(ot(Ae,1),te,2,6,[oi,"anyURI",Fh,t1])),Ir(t.d,Kr,ct(ot(Ae,1),te,2,6,[oi,"base64Binary",Fh,t1])),Ir(t.e,Kr,ct(ot(Ae,1),te,2,6,[oi,u6,Fh,t1])),Ir(t.f,Kr,ct(ot(Ae,1),te,2,6,[oi,"boolean:Object",Sa,u6])),Ir(t.g,Kr,ct(ot(Ae,1),te,2,6,[oi,Q_])),Ir(t.i,Kr,ct(ot(Ae,1),te,2,6,[oi,"byte:Object",Sa,Q_])),Ir(t.j,Kr,ct(ot(Ae,1),te,2,6,[oi,"date",Fh,t1])),Ir(t.k,Kr,ct(ot(Ae,1),te,2,6,[oi,"dateTime",Fh,t1])),Ir(t.n,Kr,ct(ot(Ae,1),te,2,6,[oi,"decimal",Fh,t1])),Ir(t.o,Kr,ct(ot(Ae,1),te,2,6,[oi,Z_,Fh,t1])),Ir(t.p,Kr,ct(ot(Ae,1),te,2,6,[oi,"double:Object",Sa,Z_])),Ir(t.q,Kr,ct(ot(Ae,1),te,2,6,[oi,"duration",Fh,t1])),Ir(t.s,Kr,ct(ot(Ae,1),te,2,6,[oi,"ENTITIES",Sa,q0e,R8t,"1"])),Ir(t.r,Kr,ct(ot(Ae,1),te,2,6,[oi,q0e,rut,j8t])),Ir(t.t,Kr,ct(ot(Ae,1),te,2,6,[oi,j8t,Sa,PH])),Ir(t.u,Kr,ct(ot(Ae,1),te,2,6,[oi,J_,Fh,t1])),Ir(t.v,Kr,ct(ot(Ae,1),te,2,6,[oi,"float:Object",Sa,J_])),Ir(t.w,Kr,ct(ot(Ae,1),te,2,6,[oi,"gDay",Fh,t1])),Ir(t.B,Kr,ct(ot(Ae,1),te,2,6,[oi,"gMonth",Fh,t1])),Ir(t.A,Kr,ct(ot(Ae,1),te,2,6,[oi,"gMonthDay",Fh,t1])),Ir(t.C,Kr,ct(ot(Ae,1),te,2,6,[oi,"gYear",Fh,t1])),Ir(t.D,Kr,ct(ot(Ae,1),te,2,6,[oi,"gYearMonth",Fh,t1])),Ir(t.F,Kr,ct(ot(Ae,1),te,2,6,[oi,"hexBinary",Fh,t1])),Ir(t.G,Kr,ct(ot(Ae,1),te,2,6,[oi,"ID",Sa,PH])),Ir(t.H,Kr,ct(ot(Ae,1),te,2,6,[oi,"IDREF",Sa,PH])),Ir(t.J,Kr,ct(ot(Ae,1),te,2,6,[oi,"IDREFS",Sa,H0e,R8t,"1"])),Ir(t.I,Kr,ct(ot(Ae,1),te,2,6,[oi,H0e,rut,"IDREF"])),Ir(t.K,Kr,ct(ot(Ae,1),te,2,6,[oi,tS])),Ir(t.M,Kr,ct(ot(Ae,1),te,2,6,[oi,$8t])),Ir(t.L,Kr,ct(ot(Ae,1),te,2,6,[oi,"int:Object",Sa,tS])),Ir(t.P,Kr,ct(ot(Ae,1),te,2,6,[oi,"language",Sa,sut,aut,G0e])),Ir(t.Q,Kr,ct(ot(Ae,1),te,2,6,[oi,eS])),Ir(t.R,Kr,ct(ot(Ae,1),te,2,6,[oi,"long:Object",Sa,eS])),Ir(t.S,Kr,ct(ot(Ae,1),te,2,6,[oi,"Name",Sa,sut,aut,z8t])),Ir(t.T,Kr,ct(ot(Ae,1),te,2,6,[oi,PH,Sa,"Name",aut,V0e])),Ir(t.U,Kr,ct(ot(Ae,1),te,2,6,[oi,"negativeInteger",Sa,U0e,rO,"-1"])),Ir(t.V,Kr,ct(ot(Ae,1),te,2,6,[oi,q8t,Sa,sut,aut,"\\c+"])),Ir(t.X,Kr,ct(ot(Ae,1),te,2,6,[oi,"NMTOKENS",Sa,W0e,R8t,"1"])),Ir(t.W,Kr,ct(ot(Ae,1),te,2,6,[oi,W0e,rut,q8t])),Ir(t.Y,Kr,ct(ot(Ae,1),te,2,6,[oi,H8t,Sa,$8t,iO,"0"])),Ir(t.Z,Kr,ct(ot(Ae,1),te,2,6,[oi,U0e,Sa,$8t,rO,"0"])),Ir(t.$,Kr,ct(ot(Ae,1),te,2,6,[oi,K0e,Sa,Oat,Fh,"replace"])),Ir(t._,Kr,ct(ot(Ae,1),te,2,6,[oi,"NOTATION",Fh,t1])),Ir(t.ab,Kr,ct(ot(Ae,1),te,2,6,[oi,"positiveInteger",Sa,H8t,iO,"1"])),Ir(t.bb,Kr,ct(ot(Ae,1),te,2,6,[oi,"processingInstruction_._type",Nh,"empty"])),Ir(u(St(Wt(t.bb),0),34),Kr,ct(ot(Ae,1),te,2,6,[Nh,IH,oi,"data"])),Ir(u(St(Wt(t.bb),1),34),Kr,ct(ot(Ae,1),te,2,6,[Nh,IH,oi,E8t])),Ir(t.cb,Kr,ct(ot(Ae,1),te,2,6,[oi,"QName",Fh,t1])),Ir(t.db,Kr,ct(ot(Ae,1),te,2,6,[oi,nS])),Ir(t.eb,Kr,ct(ot(Ae,1),te,2,6,[oi,"short:Object",Sa,nS])),Ir(t.fb,Kr,ct(ot(Ae,1),te,2,6,[oi,"simpleAnyType",Nh,JD])),Ir(u(St(Wt(t.fb),0),34),Kr,ct(ot(Ae,1),te,2,6,[oi,":3",Nh,JD])),Ir(u(St(Wt(t.fb),1),34),Kr,ct(ot(Ae,1),te,2,6,[oi,":4",Nh,JD])),Ir(u(St(Wt(t.fb),2),18),Kr,ct(ot(Ae,1),te,2,6,[oi,":5",Nh,JD])),Ir(t.gb,Kr,ct(ot(Ae,1),te,2,6,[oi,Oat,Fh,"preserve"])),Ir(t.hb,Kr,ct(ot(Ae,1),te,2,6,[oi,"time",Fh,t1])),Ir(t.ib,Kr,ct(ot(Ae,1),te,2,6,[oi,sut,Sa,K0e,Fh,t1])),Ir(t.jb,Kr,ct(ot(Ae,1),te,2,6,[oi,Y0e,rO,"255",iO,"0"])),Ir(t.kb,Kr,ct(ot(Ae,1),te,2,6,[oi,"unsignedByte:Object",Sa,Y0e])),Ir(t.lb,Kr,ct(ot(Ae,1),te,2,6,[oi,X0e,rO,"4294967295",iO,"0"])),Ir(t.mb,Kr,ct(ot(Ae,1),te,2,6,[oi,"unsignedInt:Object",Sa,X0e])),Ir(t.nb,Kr,ct(ot(Ae,1),te,2,6,[oi,"unsignedLong",Sa,H8t,rO,Q0e,iO,"0"])),Ir(t.ob,Kr,ct(ot(Ae,1),te,2,6,[oi,Z0e,rO,"65535",iO,"0"])),Ir(t.pb,Kr,ct(ot(Ae,1),te,2,6,[oi,"unsignedShort:Object",Sa,Z0e])),Ir(t.qb,Kr,ct(ot(Ae,1),te,2,6,[oi,"",Nh,ZD])),Ir(u(St(Wt(t.qb),0),34),Kr,ct(ot(Ae,1),te,2,6,[Nh,nut,oi,":mixed"])),Ir(u(St(Wt(t.qb),1),18),Kr,ct(ot(Ae,1),te,2,6,[Nh,IH,oi,"xmlns:prefix"])),Ir(u(St(Wt(t.qb),2),18),Kr,ct(ot(Ae,1),te,2,6,[Nh,IH,oi,"xsi:schemaLocation"])),Ir(u(St(Wt(t.qb),3),34),Kr,ct(ot(Ae,1),te,2,6,[Nh,DH,oi,"cDATA",OH,tO])),Ir(u(St(Wt(t.qb),4),34),Kr,ct(ot(Ae,1),te,2,6,[Nh,DH,oi,"comment",OH,tO])),Ir(u(St(Wt(t.qb),5),18),Kr,ct(ot(Ae,1),te,2,6,[Nh,DH,oi,J0e,OH,tO])),Ir(u(St(Wt(t.qb),6),34),Kr,ct(ot(Ae,1),te,2,6,[Nh,DH,oi,Hct,OH,tO]))}function qr(t){return hn("_UI_EMFDiagnostic_marker",t)?"EMF Problem":hn("_UI_CircularContainment_diagnostic",t)?"An object may not circularly contain itself":hn(Pde,t)?"Wrong character.":hn(Fde,t)?"Invalid reference number.":hn(kH,t)?"A character is required after \\.":hn(Xct,t)?"'?' is not expected.  '(?:' or '(?=' or '(?!' or '(?<' or '(?#' or '(?>'?":hn(Bde,t)?"'(?<' or '(?<!' is expected.":hn(Rde,t)?"A comment is not terminated.":hn(A2,t)?"')' is expected.":hn(T8t,t)?"Unexpected end of the pattern in a modifier group.":hn(jde,t)?"':' is expected.":hn($de,t)?"Unexpected end of the pattern in a conditional group.":hn(zde,t)?"A back reference or an anchor or a lookahead or a look-behind is expected in a conditional pattern.":hn(qde,t)?"There are more than three choices in a conditional group.":hn(Hde,t)?"A character in U+0040-U+005f must follow \\c.":hn(Gde,t)?"A '{' is required before a character category.":hn(Vde,t)?"A property name is not closed by '}'.":hn(C8t,t)?"Unexpected meta character.":hn(Qct,t)?"Unknown property.":hn(_8t,t)?"A POSIX character class must be closed by ':]'.":hn(EH,t)?"Unexpected end of the pattern in a character class.":hn(Ude,t)?"Unknown name for a POSIX character class.":hn("parser.cc.4",t)?"'-' is invalid here.":hn(Wde,t)?"']' is expected.":hn(S8t,t)?"'[' is invalid in a character class.  Write '\\['.":hn(A8t,t)?"']' is invalid in a character class.  Write '\\]'.":hn(Zct,t)?"'-' is an invalid character range. Write '\\-'.":hn(Kde,t)?"'[' is expected.":hn(Yde,t)?"')' or '-[' or '+[' or '&[' is expected.":hn(Xde,t)?"The range end code point is less than the start code point.":hn(Gg,t)?"Invalid Unicode hex notation.":hn(Qde,t)?"Overflow in a hex notation.":hn(Zde,t)?"'\\x{' must be closed by '}'.":hn(Jde,t)?"Invalid Unicode code point.":hn(t0e,t)?"An anchor must not be here.":hn(gh,t)?"This expression is not supported in the current option setting.":hn(e0e,t)?"Invalid quantifier. A digit is expected.":hn(n0e,t)?"Invalid quantifier. Invalid quantity or a '}' is missing.":hn(r0e,t)?"Invalid quantifier. A digit or '}' is expected.":hn(i0e,t)?"Invalid quantifier. A min quantity must be <= a max quantity.":hn(L8t,t)?"Invalid quantifier. A quantity value overflow.":hn("_UI_PackageRegistry_extensionpoint",t)?"Ecore Package Registry for Generated Packages":hn("_UI_DynamicPackageRegistry_extensionpoint",t)?"Ecore Package Registry for Dynamic Packages":hn("_UI_FactoryRegistry_extensionpoint",t)?"Ecore Factory Override Registry":hn("_UI_URIExtensionParserRegistry_extensionpoint",t)?"URI Extension Parser Registry":hn("_UI_URIProtocolParserRegistry_extensionpoint",t)?"URI Protocol Parser Registry":hn("_UI_URIContentParserRegistry_extensionpoint",t)?"URI Content Parser Registry":hn("_UI_ContentHandlerRegistry_extensionpoint",t)?"Content Handler Registry":hn("_UI_URIMappingRegistry_extensionpoint",t)?"URI Converter Mapping Registry":hn("_UI_PackageRegistryImplementation_extensionpoint",t)?"Ecore Package Registry Implementation":hn("_UI_ValidationDelegateRegistry_extensionpoint",t)?"Validation Delegate Registry":hn("_UI_SettingDelegateRegistry_extensionpoint",t)?"Feature Setting Delegate Factory Registry":hn("_UI_InvocationDelegateRegistry_extensionpoint",t)?"Operation Invocation Delegate Factory Registry":hn("_UI_EClassInterfaceNotAbstract_diagnostic",t)?"A class that is an interface must also be abstract":hn("_UI_EClassNoCircularSuperTypes_diagnostic",t)?"A class may not be a super type of itself":hn("_UI_EClassNotWellFormedMapEntryNoInstanceClassName_diagnostic",t)?"A class that inherits from a map entry class must have instance class name 'java.util.Map$Entry'":hn("_UI_EReferenceOppositeOfOppositeInconsistent_diagnostic",t)?"The opposite of the opposite may not be a reference different from this one":hn("_UI_EReferenceOppositeNotFeatureOfType_diagnostic",t)?"The opposite must be a feature of the reference's type":hn("_UI_EReferenceTransientOppositeNotTransient_diagnostic",t)?"The opposite of a transient reference must be transient if it is proxy resolving":hn("_UI_EReferenceOppositeBothContainment_diagnostic",t)?"The opposite of a containment reference must not be a containment reference":hn("_UI_EReferenceConsistentUnique_diagnostic",t)?"A containment or bidirectional reference must be unique if its upper bound is different from 1":hn("_UI_ETypedElementNoType_diagnostic",t)?"The typed element must have a type":hn("_UI_EAttributeNoDataType_diagnostic",t)?"The generic attribute type must not refer to a class":hn("_UI_EReferenceNoClass_diagnostic",t)?"The generic reference type must not refer to a data type":hn("_UI_EGenericTypeNoTypeParameterAndClassifier_diagnostic",t)?"A generic type can't refer to both a type parameter and a classifier":hn("_UI_EGenericTypeNoClass_diagnostic",t)?"A generic super type must refer to a class":hn("_UI_EGenericTypeNoTypeParameterOrClassifier_diagnostic",t)?"A generic type in this context must refer to a classifier or a type parameter":hn("_UI_EGenericTypeBoundsOnlyForTypeArgument_diagnostic",t)?"A generic type may have bounds only when used as a type argument":hn("_UI_EGenericTypeNoUpperAndLowerBound_diagnostic",t)?"A generic type must not have both a lower and an upper bound":hn("_UI_EGenericTypeNoTypeParameterOrClassifierAndBound_diagnostic",t)?"A generic type with bounds must not also refer to a type parameter or classifier":hn("_UI_EGenericTypeNoArguments_diagnostic",t)?"A generic type may have arguments only if it refers to a classifier":hn("_UI_EGenericTypeOutOfScopeTypeParameter_diagnostic",t)?"A generic type may only refer to a type parameter that is in scope":t}function V5n(t){var e,n,r,s,o,h,d,w,k,C,M,F,H,V,Y;t.r||(t.r=!0,Xc(t,"graph"),sz(t,"graph"),az(t,GE),MI(t.o,"T"),Mr(So(t.a),t.p),Mr(So(t.f),t.a),Mr(So(t.n),t.f),Mr(So(t.g),t.n),Mr(So(t.c),t.n),Mr(So(t.i),t.c),Mr(So(t.j),t.c),Mr(So(t.d),t.f),Mr(So(t.e),t.a),rc(t.p,oxn,Nfe,!0,!0,!1),V=i4(t.p,t.p,"setProperty"),Y=Hne(V),k=I0(t.o),C=(n=(r=new wv,r),n),Mr((!k.d&&(k.d=new Ss(ho,k,1)),k.d),C),M=nrt(Y),p4t(C,M),Xz(V,k,g8t),k=nrt(Y),Xz(V,k,Y_),V=i4(t.p,null,"getProperty"),Y=Hne(V),k=I0(t.o),C=nrt(Y),Mr((!k.d&&(k.d=new Ss(ho,k,1)),k.d),C),Xz(V,k,g8t),k=nrt(Y),H=O1(V,k,null),H&&H.Fi(),V=i4(t.p,t.wb.e,"hasProperty"),k=I0(t.o),C=(s=(o=new wv,o),s),Mr((!k.d&&(k.d=new Ss(ho,k,1)),k.d),C),Xz(V,k,g8t),V=i4(t.p,t.p,"copyProperties"),Co(V,t.p,jct),V=i4(t.p,null,"getAllProperties"),k=I0(t.wb.P),C=I0(t.o),Mr((!k.d&&(k.d=new Ss(ho,k,1)),k.d),C),M=(h=(d=new wv,d),h),Mr((!C.d&&(C.d=new Ss(ho,C,1)),C.d),M),C=I0(t.wb.M),Mr((!k.d&&(k.d=new Ss(ho,k,1)),k.d),C),F=O1(V,k,null),F&&F.Fi(),rc(t.a,I7,hde,!0,!1,!0),Fi(u(St(Wt(t.a),0),18),t.k,null,Ede,0,-1,I7,!1,!1,!0,!0,!1,!1,!1),rc(t.f,sN,dde,!0,!1,!0),Fi(u(St(Wt(t.f),0),18),t.g,u(St(Wt(t.g),0),18),"labels",0,-1,sN,!1,!1,!0,!0,!1,!1,!1),ls(u(St(Wt(t.f),1),34),t.wb._,Tde,null,0,1,sN,!1,!1,!0,!1,!0,!1),rc(t.n,aN,"ElkShape",!0,!1,!0),ls(u(St(Wt(t.n),0),34),t.wb.t,$ct,DE,1,1,aN,!1,!1,!0,!1,!0,!1),ls(u(St(Wt(t.n),1),34),t.wb.t,zct,DE,1,1,aN,!1,!1,!0,!1,!0,!1),ls(u(St(Wt(t.n),2),34),t.wb.t,"x",DE,1,1,aN,!1,!1,!0,!1,!0,!1),ls(u(St(Wt(t.n),3),34),t.wb.t,"y",DE,1,1,aN,!1,!1,!0,!1,!0,!1),V=i4(t.n,null,"setDimensions"),Co(V,t.wb.t,zct),Co(V,t.wb.t,$ct),V=i4(t.n,null,"setLocation"),Co(V,t.wb.t,"x"),Co(V,t.wb.t,"y"),rc(t.g,qo,h8t,!1,!1,!0),Fi(u(St(Wt(t.g),0),18),t.f,u(St(Wt(t.f),0),18),qct,0,1,qo,!1,!1,!0,!1,!1,!1,!1),ls(u(St(Wt(t.g),1),34),t.wb._,Hct,"",0,1,qo,!1,!1,!0,!1,!0,!1),rc(t.c,br,gde,!0,!1,!0),Fi(u(St(Wt(t.c),0),18),t.d,u(St(Wt(t.d),1),18),"outgoingEdges",0,-1,br,!1,!1,!0,!1,!0,!1,!1),Fi(u(St(Wt(t.c),1),18),t.d,u(St(Wt(t.d),2),18),"incomingEdges",0,-1,br,!1,!1,!0,!1,!0,!1,!1),rc(t.i,ns,f8t,!1,!1,!0),Fi(u(St(Wt(t.i),0),18),t.j,u(St(Wt(t.j),0),18),"ports",0,-1,ns,!1,!1,!0,!0,!1,!1,!1),Fi(u(St(Wt(t.i),1),18),t.i,u(St(Wt(t.i),2),18),Gct,0,-1,ns,!1,!1,!0,!0,!1,!1,!1),Fi(u(St(Wt(t.i),2),18),t.i,u(St(Wt(t.i),1),18),qct,0,1,ns,!1,!1,!0,!1,!1,!1,!1),Fi(u(St(Wt(t.i),3),18),t.d,u(St(Wt(t.d),0),18),"containedEdges",0,-1,ns,!1,!1,!0,!0,!1,!1,!1),ls(u(St(Wt(t.i),4),34),t.wb.e,Cde,null,0,1,ns,!0,!0,!1,!1,!0,!0),rc(t.j,fl,d8t,!1,!1,!0),Fi(u(St(Wt(t.j),0),18),t.i,u(St(Wt(t.i),0),18),qct,0,1,fl,!1,!1,!0,!1,!1,!1,!1),rc(t.d,Ws,l8t,!1,!1,!0),Fi(u(St(Wt(t.d),0),18),t.i,u(St(Wt(t.i),3),18),"containingNode",0,1,Ws,!1,!1,!0,!1,!1,!1,!1),Fi(u(St(Wt(t.d),1),18),t.c,u(St(Wt(t.c),0),18),p8t,0,-1,Ws,!1,!1,!0,!1,!0,!1,!1),Fi(u(St(Wt(t.d),2),18),t.c,u(St(Wt(t.c),1),18),Vct,0,-1,Ws,!1,!1,!0,!1,!0,!1,!1),Fi(u(St(Wt(t.d),3),18),t.e,u(St(Wt(t.e),5),18),b8t,0,-1,Ws,!1,!1,!0,!0,!1,!1,!1),ls(u(St(Wt(t.d),4),34),t.wb.e,"hyperedge",null,0,1,Ws,!0,!0,!1,!1,!0,!0),ls(u(St(Wt(t.d),5),34),t.wb.e,Cde,null,0,1,Ws,!0,!0,!1,!1,!0,!0),ls(u(St(Wt(t.d),6),34),t.wb.e,"selfloop",null,0,1,Ws,!0,!0,!1,!1,!0,!0),ls(u(St(Wt(t.d),7),34),t.wb.e,"connected",null,0,1,Ws,!0,!0,!1,!1,!0,!0),rc(t.b,Hh,fde,!1,!1,!0),ls(u(St(Wt(t.b),0),34),t.wb.t,"x",DE,1,1,Hh,!1,!1,!0,!1,!0,!1),ls(u(St(Wt(t.b),1),34),t.wb.t,"y",DE,1,1,Hh,!1,!1,!0,!1,!0,!1),V=i4(t.b,null,"set"),Co(V,t.wb.t,"x"),Co(V,t.wb.t,"y"),rc(t.e,Zi,pde,!1,!1,!0),ls(u(St(Wt(t.e),0),34),t.wb.t,"startX",null,0,1,Zi,!1,!1,!0,!1,!0,!1),ls(u(St(Wt(t.e),1),34),t.wb.t,"startY",null,0,1,Zi,!1,!1,!0,!1,!0,!1),ls(u(St(Wt(t.e),2),34),t.wb.t,"endX",null,0,1,Zi,!1,!1,!0,!1,!0,!1),ls(u(St(Wt(t.e),3),34),t.wb.t,"endY",null,0,1,Zi,!1,!1,!0,!1,!0,!1),Fi(u(St(Wt(t.e),4),18),t.b,null,wH,0,-1,Zi,!1,!1,!0,!0,!1,!1,!1),Fi(u(St(Wt(t.e),5),18),t.d,u(St(Wt(t.d),3),18),qct,0,1,Zi,!1,!1,!0,!1,!1,!1,!1),Fi(u(St(Wt(t.e),6),18),t.c,null,v8t,0,1,Zi,!1,!1,!0,!1,!0,!1,!1),Fi(u(St(Wt(t.e),7),18),t.c,null,w8t,0,1,Zi,!1,!1,!0,!1,!0,!1,!1),Fi(u(St(Wt(t.e),8),18),t.e,u(St(Wt(t.e),9),18),m8t,0,-1,Zi,!1,!1,!0,!1,!0,!1,!1),Fi(u(St(Wt(t.e),9),18),t.e,u(St(Wt(t.e),8),18),y8t,0,-1,Zi,!1,!1,!0,!1,!0,!1,!1),ls(u(St(Wt(t.e),10),34),t.wb._,Tde,null,0,1,Zi,!1,!1,!0,!1,!0,!1),V=i4(t.e,null,"setStartLocation"),Co(V,t.wb.t,"x"),Co(V,t.wb.t,"y"),V=i4(t.e,null,"setEndLocation"),Co(V,t.wb.t,"x"),Co(V,t.wb.t,"y"),rc(t.k,M2,"ElkPropertyToValueMapEntry",!1,!1,!1),k=I0(t.o),C=(w=(e=new wv,e),w),Mr((!k.d&&(k.d=new Ss(ho,k,1)),k.d),C),Hoe(u(St(Wt(t.k),0),34),k,"key",M2,!1,!1,!0,!1),ls(u(St(Wt(t.k),1),34),t.s,Y_,null,0,1,M2,!1,!1,!0,!1,!0,!1),si(t.o,Qht,"IProperty",!0),si(t.s,Xn,"PropertyValue",!0),qyt(t,GE))}function qhe(){qhe=Z,vt=Pt(Hu,N4,25,Ya,15,1),vt[9]=35,vt[10]=19,vt[13]=19,vt[32]=51,vt[33]=49,vt[34]=33,Rt(vt,35,38,49),vt[38]=1,Rt(vt,39,45,49),Rt(vt,45,47,-71),vt[47]=49,Rt(vt,48,58,-71),vt[58]=61,vt[59]=49,vt[60]=1,vt[61]=49,vt[62]=33,Rt(vt,63,65,49),Rt(vt,65,91,-3),Rt(vt,91,93,33),vt[93]=1,vt[94]=33,vt[95]=-3,vt[96]=33,Rt(vt,97,123,-3),Rt(vt,123,183,33),vt[183]=-87,Rt(vt,184,192,33),Rt(vt,192,215,-19),vt[215]=33,Rt(vt,216,247,-19),vt[247]=33,Rt(vt,248,306,-19),Rt(vt,306,308,33),Rt(vt,308,319,-19),Rt(vt,319,321,33),Rt(vt,321,329,-19),vt[329]=33,Rt(vt,330,383,-19),vt[383]=33,Rt(vt,384,452,-19),Rt(vt,452,461,33),Rt(vt,461,497,-19),Rt(vt,497,500,33),Rt(vt,500,502,-19),Rt(vt,502,506,33),Rt(vt,506,536,-19),Rt(vt,536,592,33),Rt(vt,592,681,-19),Rt(vt,681,699,33),Rt(vt,699,706,-19),Rt(vt,706,720,33),Rt(vt,720,722,-87),Rt(vt,722,768,33),Rt(vt,768,838,-87),Rt(vt,838,864,33),Rt(vt,864,866,-87),Rt(vt,866,902,33),vt[902]=-19,vt[903]=-87,Rt(vt,904,907,-19),vt[907]=33,vt[908]=-19,vt[909]=33,Rt(vt,910,930,-19),vt[930]=33,Rt(vt,931,975,-19),vt[975]=33,Rt(vt,976,983,-19),Rt(vt,983,986,33),vt[986]=-19,vt[987]=33,vt[988]=-19,vt[989]=33,vt[990]=-19,vt[991]=33,vt[992]=-19,vt[993]=33,Rt(vt,994,1012,-19),Rt(vt,1012,1025,33),Rt(vt,1025,1037,-19),vt[1037]=33,Rt(vt,1038,1104,-19),vt[1104]=33,Rt(vt,1105,1117,-19),vt[1117]=33,Rt(vt,1118,1154,-19),vt[1154]=33,Rt(vt,1155,1159,-87),Rt(vt,1159,1168,33),Rt(vt,1168,1221,-19),Rt(vt,1221,1223,33),Rt(vt,1223,1225,-19),Rt(vt,1225,1227,33),Rt(vt,1227,1229,-19),Rt(vt,1229,1232,33),Rt(vt,1232,1260,-19),Rt(vt,1260,1262,33),Rt(vt,1262,1270,-19),Rt(vt,1270,1272,33),Rt(vt,1272,1274,-19),Rt(vt,1274,1329,33),Rt(vt,1329,1367,-19),Rt(vt,1367,1369,33),vt[1369]=-19,Rt(vt,1370,1377,33),Rt(vt,1377,1415,-19),Rt(vt,1415,1425,33),Rt(vt,1425,1442,-87),vt[1442]=33,Rt(vt,1443,1466,-87),vt[1466]=33,Rt(vt,1467,1470,-87),vt[1470]=33,vt[1471]=-87,vt[1472]=33,Rt(vt,1473,1475,-87),vt[1475]=33,vt[1476]=-87,Rt(vt,1477,1488,33),Rt(vt,1488,1515,-19),Rt(vt,1515,1520,33),Rt(vt,1520,1523,-19),Rt(vt,1523,1569,33),Rt(vt,1569,1595,-19),Rt(vt,1595,1600,33),vt[1600]=-87,Rt(vt,1601,1611,-19),Rt(vt,1611,1619,-87),Rt(vt,1619,1632,33),Rt(vt,1632,1642,-87),Rt(vt,1642,1648,33),vt[1648]=-87,Rt(vt,1649,1720,-19),Rt(vt,1720,1722,33),Rt(vt,1722,1727,-19),vt[1727]=33,Rt(vt,1728,1743,-19),vt[1743]=33,Rt(vt,1744,1748,-19),vt[1748]=33,vt[1749]=-19,Rt(vt,1750,1765,-87),Rt(vt,1765,1767,-19),Rt(vt,1767,1769,-87),vt[1769]=33,Rt(vt,1770,1774,-87),Rt(vt,1774,1776,33),Rt(vt,1776,1786,-87),Rt(vt,1786,2305,33),Rt(vt,2305,2308,-87),vt[2308]=33,Rt(vt,2309,2362,-19),Rt(vt,2362,2364,33),vt[2364]=-87,vt[2365]=-19,Rt(vt,2366,2382,-87),Rt(vt,2382,2385,33),Rt(vt,2385,2389,-87),Rt(vt,2389,2392,33),Rt(vt,2392,2402,-19),Rt(vt,2402,2404,-87),Rt(vt,2404,2406,33),Rt(vt,2406,2416,-87),Rt(vt,2416,2433,33),Rt(vt,2433,2436,-87),vt[2436]=33,Rt(vt,2437,2445,-19),Rt(vt,2445,2447,33),Rt(vt,2447,2449,-19),Rt(vt,2449,2451,33),Rt(vt,2451,2473,-19),vt[2473]=33,Rt(vt,2474,2481,-19),vt[2481]=33,vt[2482]=-19,Rt(vt,2483,2486,33),Rt(vt,2486,2490,-19),Rt(vt,2490,2492,33),vt[2492]=-87,vt[2493]=33,Rt(vt,2494,2501,-87),Rt(vt,2501,2503,33),Rt(vt,2503,2505,-87),Rt(vt,2505,2507,33),Rt(vt,2507,2510,-87),Rt(vt,2510,2519,33),vt[2519]=-87,Rt(vt,2520,2524,33),Rt(vt,2524,2526,-19),vt[2526]=33,Rt(vt,2527,2530,-19),Rt(vt,2530,2532,-87),Rt(vt,2532,2534,33),Rt(vt,2534,2544,-87),Rt(vt,2544,2546,-19),Rt(vt,2546,2562,33),vt[2562]=-87,Rt(vt,2563,2565,33),Rt(vt,2565,2571,-19),Rt(vt,2571,2575,33),Rt(vt,2575,2577,-19),Rt(vt,2577,2579,33),Rt(vt,2579,2601,-19),vt[2601]=33,Rt(vt,2602,2609,-19),vt[2609]=33,Rt(vt,2610,2612,-19),vt[2612]=33,Rt(vt,2613,2615,-19),vt[2615]=33,Rt(vt,2616,2618,-19),Rt(vt,2618,2620,33),vt[2620]=-87,vt[2621]=33,Rt(vt,2622,2627,-87),Rt(vt,2627,2631,33),Rt(vt,2631,2633,-87),Rt(vt,2633,2635,33),Rt(vt,2635,2638,-87),Rt(vt,2638,2649,33),Rt(vt,2649,2653,-19),vt[2653]=33,vt[2654]=-19,Rt(vt,2655,2662,33),Rt(vt,2662,2674,-87),Rt(vt,2674,2677,-19),Rt(vt,2677,2689,33),Rt(vt,2689,2692,-87),vt[2692]=33,Rt(vt,2693,2700,-19),vt[2700]=33,vt[2701]=-19,vt[2702]=33,Rt(vt,2703,2706,-19),vt[2706]=33,Rt(vt,2707,2729,-19),vt[2729]=33,Rt(vt,2730,2737,-19),vt[2737]=33,Rt(vt,2738,2740,-19),vt[2740]=33,Rt(vt,2741,2746,-19),Rt(vt,2746,2748,33),vt[2748]=-87,vt[2749]=-19,Rt(vt,2750,2758,-87),vt[2758]=33,Rt(vt,2759,2762,-87),vt[2762]=33,Rt(vt,2763,2766,-87),Rt(vt,2766,2784,33),vt[2784]=-19,Rt(vt,2785,2790,33),Rt(vt,2790,2800,-87),Rt(vt,2800,2817,33),Rt(vt,2817,2820,-87),vt[2820]=33,Rt(vt,2821,2829,-19),Rt(vt,2829,2831,33),Rt(vt,2831,2833,-19),Rt(vt,2833,2835,33),Rt(vt,2835,2857,-19),vt[2857]=33,Rt(vt,2858,2865,-19),vt[2865]=33,Rt(vt,2866,2868,-19),Rt(vt,2868,2870,33),Rt(vt,2870,2874,-19),Rt(vt,2874,2876,33),vt[2876]=-87,vt[2877]=-19,Rt(vt,2878,2884,-87),Rt(vt,2884,2887,33),Rt(vt,2887,2889,-87),Rt(vt,2889,2891,33),Rt(vt,2891,2894,-87),Rt(vt,2894,2902,33),Rt(vt,2902,2904,-87),Rt(vt,2904,2908,33),Rt(vt,2908,2910,-19),vt[2910]=33,Rt(vt,2911,2914,-19),Rt(vt,2914,2918,33),Rt(vt,2918,2928,-87),Rt(vt,2928,2946,33),Rt(vt,2946,2948,-87),vt[2948]=33,Rt(vt,2949,2955,-19),Rt(vt,2955,2958,33),Rt(vt,2958,2961,-19),vt[2961]=33,Rt(vt,2962,2966,-19),Rt(vt,2966,2969,33),Rt(vt,2969,2971,-19),vt[2971]=33,vt[2972]=-19,vt[2973]=33,Rt(vt,2974,2976,-19),Rt(vt,2976,2979,33),Rt(vt,2979,2981,-19),Rt(vt,2981,2984,33),Rt(vt,2984,2987,-19),Rt(vt,2987,2990,33),Rt(vt,2990,2998,-19),vt[2998]=33,Rt(vt,2999,3002,-19),Rt(vt,3002,3006,33),Rt(vt,3006,3011,-87),Rt(vt,3011,3014,33),Rt(vt,3014,3017,-87),vt[3017]=33,Rt(vt,3018,3022,-87),Rt(vt,3022,3031,33),vt[3031]=-87,Rt(vt,3032,3047,33),Rt(vt,3047,3056,-87),Rt(vt,3056,3073,33),Rt(vt,3073,3076,-87),vt[3076]=33,Rt(vt,3077,3085,-19),vt[3085]=33,Rt(vt,3086,3089,-19),vt[3089]=33,Rt(vt,3090,3113,-19),vt[3113]=33,Rt(vt,3114,3124,-19),vt[3124]=33,Rt(vt,3125,3130,-19),Rt(vt,3130,3134,33),Rt(vt,3134,3141,-87),vt[3141]=33,Rt(vt,3142,3145,-87),vt[3145]=33,Rt(vt,3146,3150,-87),Rt(vt,3150,3157,33),Rt(vt,3157,3159,-87),Rt(vt,3159,3168,33),Rt(vt,3168,3170,-19),Rt(vt,3170,3174,33),Rt(vt,3174,3184,-87),Rt(vt,3184,3202,33),Rt(vt,3202,3204,-87),vt[3204]=33,Rt(vt,3205,3213,-19),vt[3213]=33,Rt(vt,3214,3217,-19),vt[3217]=33,Rt(vt,3218,3241,-19),vt[3241]=33,Rt(vt,3242,3252,-19),vt[3252]=33,Rt(vt,3253,3258,-19),Rt(vt,3258,3262,33),Rt(vt,3262,3269,-87),vt[3269]=33,Rt(vt,3270,3273,-87),vt[3273]=33,Rt(vt,3274,3278,-87),Rt(vt,3278,3285,33),Rt(vt,3285,3287,-87),Rt(vt,3287,3294,33),vt[3294]=-19,vt[3295]=33,Rt(vt,3296,3298,-19),Rt(vt,3298,3302,33),Rt(vt,3302,3312,-87),Rt(vt,3312,3330,33),Rt(vt,3330,3332,-87),vt[3332]=33,Rt(vt,3333,3341,-19),vt[3341]=33,Rt(vt,3342,3345,-19),vt[3345]=33,Rt(vt,3346,3369,-19),vt[3369]=33,Rt(vt,3370,3386,-19),Rt(vt,3386,3390,33),Rt(vt,3390,3396,-87),Rt(vt,3396,3398,33),Rt(vt,3398,3401,-87),vt[3401]=33,Rt(vt,3402,3406,-87),Rt(vt,3406,3415,33),vt[3415]=-87,Rt(vt,3416,3424,33),Rt(vt,3424,3426,-19),Rt(vt,3426,3430,33),Rt(vt,3430,3440,-87),Rt(vt,3440,3585,33),Rt(vt,3585,3631,-19),vt[3631]=33,vt[3632]=-19,vt[3633]=-87,Rt(vt,3634,3636,-19),Rt(vt,3636,3643,-87),Rt(vt,3643,3648,33),Rt(vt,3648,3654,-19),Rt(vt,3654,3663,-87),vt[3663]=33,Rt(vt,3664,3674,-87),Rt(vt,3674,3713,33),Rt(vt,3713,3715,-19),vt[3715]=33,vt[3716]=-19,Rt(vt,3717,3719,33),Rt(vt,3719,3721,-19),vt[3721]=33,vt[3722]=-19,Rt(vt,3723,3725,33),vt[3725]=-19,Rt(vt,3726,3732,33),Rt(vt,3732,3736,-19),vt[3736]=33,Rt(vt,3737,3744,-19),vt[3744]=33,Rt(vt,3745,3748,-19),vt[3748]=33,vt[3749]=-19,vt[3750]=33,vt[3751]=-19,Rt(vt,3752,3754,33),Rt(vt,3754,3756,-19),vt[3756]=33,Rt(vt,3757,3759,-19),vt[3759]=33,vt[3760]=-19,vt[3761]=-87,Rt(vt,3762,3764,-19),Rt(vt,3764,3770,-87),vt[3770]=33,Rt(vt,3771,3773,-87),vt[3773]=-19,Rt(vt,3774,3776,33),Rt(vt,3776,3781,-19),vt[3781]=33,vt[3782]=-87,vt[3783]=33,Rt(vt,3784,3790,-87),Rt(vt,3790,3792,33),Rt(vt,3792,3802,-87),Rt(vt,3802,3864,33),Rt(vt,3864,3866,-87),Rt(vt,3866,3872,33),Rt(vt,3872,3882,-87),Rt(vt,3882,3893,33),vt[3893]=-87,vt[3894]=33,vt[3895]=-87,vt[3896]=33,vt[3897]=-87,Rt(vt,3898,3902,33),Rt(vt,3902,3904,-87),Rt(vt,3904,3912,-19),vt[3912]=33,Rt(vt,3913,3946,-19),Rt(vt,3946,3953,33),Rt(vt,3953,3973,-87),vt[3973]=33,Rt(vt,3974,3980,-87),Rt(vt,3980,3984,33),Rt(vt,3984,3990,-87),vt[3990]=33,vt[3991]=-87,vt[3992]=33,Rt(vt,3993,4014,-87),Rt(vt,4014,4017,33),Rt(vt,4017,4024,-87),vt[4024]=33,vt[4025]=-87,Rt(vt,4026,4256,33),Rt(vt,4256,4294,-19),Rt(vt,4294,4304,33),Rt(vt,4304,4343,-19),Rt(vt,4343,4352,33),vt[4352]=-19,vt[4353]=33,Rt(vt,4354,4356,-19),vt[4356]=33,Rt(vt,4357,4360,-19),vt[4360]=33,vt[4361]=-19,vt[4362]=33,Rt(vt,4363,4365,-19),vt[4365]=33,Rt(vt,4366,4371,-19),Rt(vt,4371,4412,33),vt[4412]=-19,vt[4413]=33,vt[4414]=-19,vt[4415]=33,vt[4416]=-19,Rt(vt,4417,4428,33),vt[4428]=-19,vt[4429]=33,vt[4430]=-19,vt[4431]=33,vt[4432]=-19,Rt(vt,4433,4436,33),Rt(vt,4436,4438,-19),Rt(vt,4438,4441,33),vt[4441]=-19,Rt(vt,4442,4447,33),Rt(vt,4447,4450,-19),vt[4450]=33,vt[4451]=-19,vt[4452]=33,vt[4453]=-19,vt[4454]=33,vt[4455]=-19,vt[4456]=33,vt[4457]=-19,Rt(vt,4458,4461,33),Rt(vt,4461,4463,-19),Rt(vt,4463,4466,33),Rt(vt,4466,4468,-19),vt[4468]=33,vt[4469]=-19,Rt(vt,4470,4510,33),vt[4510]=-19,Rt(vt,4511,4520,33),vt[4520]=-19,Rt(vt,4521,4523,33),vt[4523]=-19,Rt(vt,4524,4526,33),Rt(vt,4526,4528,-19),Rt(vt,4528,4535,33),Rt(vt,4535,4537,-19),vt[4537]=33,vt[4538]=-19,vt[4539]=33,Rt(vt,4540,4547,-19),Rt(vt,4547,4587,33),vt[4587]=-19,Rt(vt,4588,4592,33),vt[4592]=-19,Rt(vt,4593,4601,33),vt[4601]=-19,Rt(vt,4602,7680,33),Rt(vt,7680,7836,-19),Rt(vt,7836,7840,33),Rt(vt,7840,7930,-19),Rt(vt,7930,7936,33),Rt(vt,7936,7958,-19),Rt(vt,7958,7960,33),Rt(vt,7960,7966,-19),Rt(vt,7966,7968,33),Rt(vt,7968,8006,-19),Rt(vt,8006,8008,33),Rt(vt,8008,8014,-19),Rt(vt,8014,8016,33),Rt(vt,8016,8024,-19),vt[8024]=33,vt[8025]=-19,vt[8026]=33,vt[8027]=-19,vt[8028]=33,vt[8029]=-19,vt[8030]=33,Rt(vt,8031,8062,-19),Rt(vt,8062,8064,33),Rt(vt,8064,8117,-19),vt[8117]=33,Rt(vt,8118,8125,-19),vt[8125]=33,vt[8126]=-19,Rt(vt,8127,8130,33),Rt(vt,8130,8133,-19),vt[8133]=33,Rt(vt,8134,8141,-19),Rt(vt,8141,8144,33),Rt(vt,8144,8148,-19),Rt(vt,8148,8150,33),Rt(vt,8150,8156,-19),Rt(vt,8156,8160,33),Rt(vt,8160,8173,-19),Rt(vt,8173,8178,33),Rt(vt,8178,8181,-19),vt[8181]=33,Rt(vt,8182,8189,-19),Rt(vt,8189,8400,33),Rt(vt,8400,8413,-87),Rt(vt,8413,8417,33),vt[8417]=-87,Rt(vt,8418,8486,33),vt[8486]=-19,Rt(vt,8487,8490,33),Rt(vt,8490,8492,-19),Rt(vt,8492,8494,33),vt[8494]=-19,Rt(vt,8495,8576,33),Rt(vt,8576,8579,-19),Rt(vt,8579,12293,33),vt[12293]=-87,vt[12294]=33,vt[12295]=-19,Rt(vt,12296,12321,33),Rt(vt,12321,12330,-19),Rt(vt,12330,12336,-87),vt[12336]=33,Rt(vt,12337,12342,-87),Rt(vt,12342,12353,33),Rt(vt,12353,12437,-19),Rt(vt,12437,12441,33),Rt(vt,12441,12443,-87),Rt(vt,12443,12445,33),Rt(vt,12445,12447,-87),Rt(vt,12447,12449,33),Rt(vt,12449,12539,-19),vt[12539]=33,Rt(vt,12540,12543,-87),Rt(vt,12543,12549,33),Rt(vt,12549,12589,-19),Rt(vt,12589,19968,33),Rt(vt,19968,40870,-19),Rt(vt,40870,44032,33),Rt(vt,44032,55204,-19),Rt(vt,55204,OD,33),Rt(vt,57344,65534,33)}function U5n(t){var e,n,r,s,o,h,d;t.hb||(t.hb=!0,Xc(t,"ecore"),sz(t,"ecore"),az(t,Ph),MI(t.fb,"E"),MI(t.L,"T"),MI(t.P,"K"),MI(t.P,"V"),MI(t.cb,"E"),Mr(So(t.b),t.bb),Mr(So(t.a),t.Q),Mr(So(t.o),t.p),Mr(So(t.p),t.R),Mr(So(t.q),t.p),Mr(So(t.v),t.q),Mr(So(t.w),t.R),Mr(So(t.B),t.Q),Mr(So(t.R),t.Q),Mr(So(t.T),t.eb),Mr(So(t.U),t.R),Mr(So(t.V),t.eb),Mr(So(t.W),t.bb),Mr(So(t.bb),t.eb),Mr(So(t.eb),t.R),Mr(So(t.db),t.R),rc(t.b,Zy,g0e,!1,!1,!0),ls(u(St(Wt(t.b),0),34),t.e,"iD",null,0,1,Zy,!1,!1,!0,!1,!0,!1),Fi(u(St(Wt(t.b),1),18),t.q,null,"eAttributeType",1,1,Zy,!0,!0,!1,!1,!0,!1,!0),rc(t.a,Zr,h0e,!1,!1,!0),ls(u(St(Wt(t.a),0),34),t._,jct,null,0,1,Zr,!1,!1,!0,!1,!0,!1),Fi(u(St(Wt(t.a),1),18),t.ab,null,"details",0,-1,Zr,!1,!1,!0,!0,!1,!1,!1),Fi(u(St(Wt(t.a),2),18),t.Q,u(St(Wt(t.Q),0),18),"eModelElement",0,1,Zr,!0,!1,!0,!1,!1,!1,!1),Fi(u(St(Wt(t.a),3),18),t.S,null,"contents",0,-1,Zr,!1,!1,!0,!0,!1,!1,!1),Fi(u(St(Wt(t.a),4),18),t.S,null,"references",0,-1,Zr,!1,!1,!0,!1,!0,!1,!1),rc(t.o,Gh,"EClass",!1,!1,!0),ls(u(St(Wt(t.o),0),34),t.e,"abstract",null,0,1,Gh,!1,!1,!0,!1,!0,!1),ls(u(St(Wt(t.o),1),34),t.e,"interface",null,0,1,Gh,!1,!1,!0,!1,!0,!1),Fi(u(St(Wt(t.o),2),18),t.o,null,"eSuperTypes",0,-1,Gh,!1,!1,!0,!1,!0,!0,!1),Fi(u(St(Wt(t.o),3),18),t.T,u(St(Wt(t.T),0),18),"eOperations",0,-1,Gh,!1,!1,!0,!0,!1,!1,!1),Fi(u(St(Wt(t.o),4),18),t.b,null,"eAllAttributes",0,-1,Gh,!0,!0,!1,!1,!0,!1,!0),Fi(u(St(Wt(t.o),5),18),t.W,null,"eAllReferences",0,-1,Gh,!0,!0,!1,!1,!0,!1,!0),Fi(u(St(Wt(t.o),6),18),t.W,null,"eReferences",0,-1,Gh,!0,!0,!1,!1,!0,!1,!0),Fi(u(St(Wt(t.o),7),18),t.b,null,"eAttributes",0,-1,Gh,!0,!0,!1,!1,!0,!1,!0),Fi(u(St(Wt(t.o),8),18),t.W,null,"eAllContainments",0,-1,Gh,!0,!0,!1,!1,!0,!1,!0),Fi(u(St(Wt(t.o),9),18),t.T,null,"eAllOperations",0,-1,Gh,!0,!0,!1,!1,!0,!1,!0),Fi(u(St(Wt(t.o),10),18),t.bb,null,"eAllStructuralFeatures",0,-1,Gh,!0,!0,!1,!1,!0,!1,!0),Fi(u(St(Wt(t.o),11),18),t.o,null,"eAllSuperTypes",0,-1,Gh,!0,!0,!1,!1,!0,!1,!0),Fi(u(St(Wt(t.o),12),18),t.b,null,"eIDAttribute",0,1,Gh,!0,!0,!1,!1,!1,!1,!0),Fi(u(St(Wt(t.o),13),18),t.bb,u(St(Wt(t.bb),7),18),"eStructuralFeatures",0,-1,Gh,!1,!1,!0,!0,!1,!1,!1),Fi(u(St(Wt(t.o),14),18),t.H,null,"eGenericSuperTypes",0,-1,Gh,!1,!1,!0,!0,!1,!0,!1),Fi(u(St(Wt(t.o),15),18),t.H,null,"eAllGenericSuperTypes",0,-1,Gh,!0,!0,!1,!1,!0,!1,!0),d=po(u(St(Mi(t.o),0),59),t.e,"isSuperTypeOf"),Co(d,t.o,"someClass"),po(u(St(Mi(t.o),1),59),t.I,"getFeatureCount"),d=po(u(St(Mi(t.o),2),59),t.bb,_0e),Co(d,t.I,"featureID"),d=po(u(St(Mi(t.o),3),59),t.I,S0e),Co(d,t.bb,rS),d=po(u(St(Mi(t.o),4),59),t.bb,_0e),Co(d,t._,"featureName"),po(u(St(Mi(t.o),5),59),t.I,"getOperationCount"),d=po(u(St(Mi(t.o),6),59),t.T,"getEOperation"),Co(d,t.I,"operationID"),d=po(u(St(Mi(t.o),7),59),t.I,A0e),Co(d,t.T,P8t),d=po(u(St(Mi(t.o),8),59),t.T,"getOverride"),Co(d,t.T,P8t),d=po(u(St(Mi(t.o),9),59),t.H,"getFeatureType"),Co(d,t.bb,rS),rc(t.p,i1,p0e,!0,!1,!0),ls(u(St(Wt(t.p),0),34),t._,"instanceClassName",null,0,1,i1,!1,!0,!0,!0,!0,!1),e=I0(t.L),n=Wwt(),Mr((!e.d&&(e.d=new Ss(ho,e,1)),e.d),n),Hoe(u(St(Wt(t.p),1),34),e,"instanceClass",i1,!0,!0,!1,!0),ls(u(St(Wt(t.p),2),34),t.M,L0e,null,0,1,i1,!0,!0,!1,!1,!0,!0),ls(u(St(Wt(t.p),3),34),t._,"instanceTypeName",null,0,1,i1,!1,!0,!0,!0,!0,!1),Fi(u(St(Wt(t.p),4),18),t.U,u(St(Wt(t.U),3),18),"ePackage",0,1,i1,!0,!1,!1,!1,!0,!1,!1),Fi(u(St(Wt(t.p),5),18),t.db,null,M0e,0,-1,i1,!1,!1,!0,!0,!0,!1,!1),d=po(u(St(Mi(t.p),0),59),t.e,I0e),Co(d,t.M,CD),po(u(St(Mi(t.p),1),59),t.I,"getClassifierID"),rc(t.q,Cft,"EDataType",!1,!1,!0),ls(u(St(Wt(t.q),0),34),t.e,"serializable",qE,0,1,Cft,!1,!1,!0,!1,!0,!1),rc(t.v,iU,"EEnum",!1,!1,!0),Fi(u(St(Wt(t.v),0),18),t.w,u(St(Wt(t.w),3),18),"eLiterals",0,-1,iU,!1,!1,!0,!0,!1,!1,!1),d=po(u(St(Mi(t.v),0),59),t.w,D0e),Co(d,t._,oi),d=po(u(St(Mi(t.v),1),59),t.w,D0e),Co(d,t.I,Y_),d=po(u(St(Mi(t.v),2),59),t.w,"getEEnumLiteralByLiteral"),Co(d,t._,"literal"),rc(t.w,eg,b0e,!1,!1,!0),ls(u(St(Wt(t.w),0),34),t.I,Y_,null,0,1,eg,!1,!1,!0,!1,!0,!1),ls(u(St(Wt(t.w),1),34),t.A,"instance",null,0,1,eg,!0,!1,!0,!1,!0,!1),ls(u(St(Wt(t.w),2),34),t._,"literal",null,0,1,eg,!1,!1,!0,!1,!0,!1),Fi(u(St(Wt(t.w),3),18),t.v,u(St(Wt(t.v),0),18),"eEnum",0,1,eg,!0,!1,!1,!1,!1,!1,!1),rc(t.B,nA,"EFactory",!1,!1,!0),Fi(u(St(Wt(t.B),0),18),t.U,u(St(Wt(t.U),2),18),"ePackage",1,1,nA,!0,!1,!0,!1,!1,!1,!1),d=po(u(St(Mi(t.B),0),59),t.S,"create"),Co(d,t.o,"eClass"),d=po(u(St(Mi(t.B),1),59),t.M,"createFromString"),Co(d,t.q,"eDataType"),Co(d,t._,"literalValue"),d=po(u(St(Mi(t.B),2),59),t._,"convertToString"),Co(d,t.q,"eDataType"),Co(d,t.M,"instanceValue"),rc(t.Q,oN,bde,!0,!1,!0),Fi(u(St(Wt(t.Q),0),18),t.a,u(St(Wt(t.a),2),18),"eAnnotations",0,-1,oN,!1,!1,!0,!0,!1,!1,!1),d=po(u(St(Mi(t.Q),0),59),t.a,"getEAnnotation"),Co(d,t._,jct),rc(t.R,mft,vde,!0,!1,!0),ls(u(St(Wt(t.R),0),34),t._,oi,null,0,1,mft,!1,!1,!0,!1,!0,!1),rc(t.S,kb,"EObject",!1,!1,!0),po(u(St(Mi(t.S),0),59),t.o,"eClass"),po(u(St(Mi(t.S),1),59),t.e,"eIsProxy"),po(u(St(Mi(t.S),2),59),t.X,"eResource"),po(u(St(Mi(t.S),3),59),t.S,"eContainer"),po(u(St(Mi(t.S),4),59),t.bb,"eContainingFeature"),po(u(St(Mi(t.S),5),59),t.W,"eContainmentFeature"),d=po(u(St(Mi(t.S),6),59),null,"eContents"),e=I0(t.fb),n=I0(t.S),Mr((!e.d&&(e.d=new Ss(ho,e,1)),e.d),n),s=O1(d,e,null),s&&s.Fi(),d=po(u(St(Mi(t.S),7),59),null,"eAllContents"),e=I0(t.cb),n=I0(t.S),Mr((!e.d&&(e.d=new Ss(ho,e,1)),e.d),n),o=O1(d,e,null),o&&o.Fi(),d=po(u(St(Mi(t.S),8),59),null,"eCrossReferences"),e=I0(t.fb),n=I0(t.S),Mr((!e.d&&(e.d=new Ss(ho,e,1)),e.d),n),h=O1(d,e,null),h&&h.Fi(),d=po(u(St(Mi(t.S),9),59),t.M,"eGet"),Co(d,t.bb,rS),d=po(u(St(Mi(t.S),10),59),t.M,"eGet"),Co(d,t.bb,rS),Co(d,t.e,"resolve"),d=po(u(St(Mi(t.S),11),59),null,"eSet"),Co(d,t.bb,rS),Co(d,t.M,"newValue"),d=po(u(St(Mi(t.S),12),59),t.e,"eIsSet"),Co(d,t.bb,rS),d=po(u(St(Mi(t.S),13),59),null,"eUnset"),Co(d,t.bb,rS),d=po(u(St(Mi(t.S),14),59),t.M,"eInvoke"),Co(d,t.T,P8t),e=I0(t.fb),n=Wwt(),Mr((!e.d&&(e.d=new Ss(ho,e,1)),e.d),n),Xz(d,e,"arguments"),Ven(d,t.K),rc(t.T,Vh,w0e,!1,!1,!0),Fi(u(St(Wt(t.T),0),18),t.o,u(St(Wt(t.o),3),18),O0e,0,1,Vh,!0,!1,!1,!1,!1,!1,!1),Fi(u(St(Wt(t.T),1),18),t.db,null,M0e,0,-1,Vh,!1,!1,!0,!0,!0,!1,!1),Fi(u(St(Wt(t.T),2),18),t.V,u(St(Wt(t.V),0),18),"eParameters",0,-1,Vh,!1,!1,!0,!0,!1,!1,!1),Fi(u(St(Wt(t.T),3),18),t.p,null,"eExceptions",0,-1,Vh,!1,!1,!0,!1,!0,!0,!1),Fi(u(St(Wt(t.T),4),18),t.H,null,"eGenericExceptions",0,-1,Vh,!1,!1,!0,!0,!1,!0,!1),po(u(St(Mi(t.T),0),59),t.I,A0e),d=po(u(St(Mi(t.T),1),59),t.e,"isOverrideOf"),Co(d,t.T,"someOperation"),rc(t.U,r1,"EPackage",!1,!1,!0),ls(u(St(Wt(t.U),0),34),t._,"nsURI",null,0,1,r1,!1,!1,!0,!1,!0,!1),ls(u(St(Wt(t.U),1),34),t._,"nsPrefix",null,0,1,r1,!1,!1,!0,!1,!0,!1),Fi(u(St(Wt(t.U),2),18),t.B,u(St(Wt(t.B),0),18),"eFactoryInstance",1,1,r1,!0,!1,!0,!1,!1,!1,!1),Fi(u(St(Wt(t.U),3),18),t.p,u(St(Wt(t.p),4),18),"eClassifiers",0,-1,r1,!1,!1,!0,!0,!0,!1,!1),Fi(u(St(Wt(t.U),4),18),t.U,u(St(Wt(t.U),5),18),"eSubpackages",0,-1,r1,!1,!1,!0,!0,!0,!1,!1),Fi(u(St(Wt(t.U),5),18),t.U,u(St(Wt(t.U),4),18),"eSuperPackage",0,1,r1,!0,!1,!1,!1,!0,!1,!1),d=po(u(St(Mi(t.U),0),59),t.p,"getEClassifier"),Co(d,t._,oi),rc(t.V,zw,m0e,!1,!1,!0),Fi(u(St(Wt(t.V),0),18),t.T,u(St(Wt(t.T),2),18),"eOperation",0,1,zw,!0,!1,!1,!1,!1,!1,!1),rc(t.W,Jy,y0e,!1,!1,!0),ls(u(St(Wt(t.W),0),34),t.e,"containment",null,0,1,Jy,!1,!1,!0,!1,!0,!1),ls(u(St(Wt(t.W),1),34),t.e,"container",null,0,1,Jy,!0,!0,!1,!1,!0,!0),ls(u(St(Wt(t.W),2),34),t.e,"resolveProxies",qE,0,1,Jy,!1,!1,!0,!1,!0,!1),Fi(u(St(Wt(t.W),3),18),t.W,null,"eOpposite",0,1,Jy,!1,!1,!0,!1,!0,!1,!1),Fi(u(St(Wt(t.W),4),18),t.o,null,"eReferenceType",1,1,Jy,!0,!0,!1,!1,!0,!1,!0),Fi(u(St(Wt(t.W),5),18),t.b,null,"eKeys",0,-1,Jy,!1,!1,!0,!1,!0,!1,!1),rc(t.bb,Au,d0e,!0,!1,!0),ls(u(St(Wt(t.bb),0),34),t.e,"changeable",qE,0,1,Au,!1,!1,!0,!1,!0,!1),ls(u(St(Wt(t.bb),1),34),t.e,"volatile",null,0,1,Au,!1,!1,!0,!1,!0,!1),ls(u(St(Wt(t.bb),2),34),t.e,"transient",null,0,1,Au,!1,!1,!0,!1,!0,!1),ls(u(St(Wt(t.bb),3),34),t._,"defaultValueLiteral",null,0,1,Au,!1,!1,!0,!1,!0,!1),ls(u(St(Wt(t.bb),4),34),t.M,L0e,null,0,1,Au,!0,!0,!1,!1,!0,!0),ls(u(St(Wt(t.bb),5),34),t.e,"unsettable",null,0,1,Au,!1,!1,!0,!1,!0,!1),ls(u(St(Wt(t.bb),6),34),t.e,"derived",null,0,1,Au,!1,!1,!0,!1,!0,!1),Fi(u(St(Wt(t.bb),7),18),t.o,u(St(Wt(t.o),13),18),O0e,0,1,Au,!0,!1,!1,!1,!1,!1,!1),po(u(St(Mi(t.bb),0),59),t.I,S0e),d=po(u(St(Mi(t.bb),1),59),null,"getContainerClass"),e=I0(t.L),n=Wwt(),Mr((!e.d&&(e.d=new Ss(ho,e,1)),e.d),n),r=O1(d,e,null),r&&r.Fi(),rc(t.eb,Qy,f0e,!0,!1,!0),ls(u(St(Wt(t.eb),0),34),t.e,"ordered",qE,0,1,Qy,!1,!1,!0,!1,!0,!1),ls(u(St(Wt(t.eb),1),34),t.e,"unique",qE,0,1,Qy,!1,!1,!0,!1,!0,!1),ls(u(St(Wt(t.eb),2),34),t.I,"lowerBound",null,0,1,Qy,!1,!1,!0,!1,!0,!1),ls(u(St(Wt(t.eb),3),34),t.I,"upperBound","1",0,1,Qy,!1,!1,!0,!1,!0,!1),ls(u(St(Wt(t.eb),4),34),t.e,"many",null,0,1,Qy,!0,!0,!1,!1,!0,!0),ls(u(St(Wt(t.eb),5),34),t.e,"required",null,0,1,Qy,!0,!0,!1,!1,!0,!0),Fi(u(St(Wt(t.eb),6),18),t.p,null,"eType",0,1,Qy,!1,!0,!0,!1,!0,!0,!1),Fi(u(St(Wt(t.eb),7),18),t.H,null,"eGenericType",0,1,Qy,!1,!0,!0,!0,!1,!0,!1),rc(t.ab,M2,"EStringToStringMapEntry",!1,!1,!1),ls(u(St(Wt(t.ab),0),34),t._,"key",null,0,1,M2,!1,!1,!0,!1,!0,!1),ls(u(St(Wt(t.ab),1),34),t._,Y_,null,0,1,M2,!1,!1,!0,!1,!0,!1),rc(t.H,ho,v0e,!1,!1,!0),Fi(u(St(Wt(t.H),0),18),t.H,null,"eUpperBound",0,1,ho,!1,!1,!0,!0,!1,!1,!1),Fi(u(St(Wt(t.H),1),18),t.H,null,"eTypeArguments",0,-1,ho,!1,!1,!0,!0,!1,!1,!1),Fi(u(St(Wt(t.H),2),18),t.p,null,"eRawType",1,1,ho,!0,!1,!1,!1,!0,!1,!0),Fi(u(St(Wt(t.H),3),18),t.H,null,"eLowerBound",0,1,ho,!1,!1,!0,!0,!1,!1,!1),Fi(u(St(Wt(t.H),4),18),t.db,null,"eTypeParameter",0,1,ho,!1,!1,!0,!1,!1,!1,!1),Fi(u(St(Wt(t.H),5),18),t.p,null,"eClassifier",0,1,ho,!1,!1,!0,!1,!0,!1,!1),d=po(u(St(Mi(t.H),0),59),t.e,I0e),Co(d,t.M,CD),rc(t.db,lu,x0e,!1,!1,!0),Fi(u(St(Wt(t.db),0),18),t.H,null,"eBounds",0,-1,lu,!1,!1,!0,!0,!1,!1,!1),si(t.c,Cut,"EBigDecimal",!0),si(t.d,B4,"EBigInteger",!0),si(t.e,dl,"EBoolean",!0),si(t.f,Bs,"EBooleanObject",!0),si(t.i,Hu,"EByte",!0),si(t.g,ot(Hu,1),"EByteArray",!0),si(t.j,E6,"EByteObject",!0),si(t.k,mh,"EChar",!0),si(t.n,aS,"ECharacterObject",!0),si(t.r,HH,"EDate",!0),si(t.s,SLt,"EDiagnosticChain",!1),si(t.t,ia,"EDouble",!0),si(t.u,ca,"EDoubleObject",!0),si(t.fb,qAt,"EEList",!1),si(t.A,VAt,"EEnumerator",!1),si(t.C,gLt,"EFeatureMap",!1),si(t.D,sU,"EFeatureMapEntry",!1),si(t.F,r3,"EFloat",!0),si(t.G,XE,"EFloatObject",!0),si(t.I,Tr,"EInt",!0),si(t.J,ja,"EIntegerObject",!0),si(t.L,U8t,"EJavaClass",!0),si(t.M,Xn,"EJavaObject",!0),si(t.N,Lb,"ELong",!0),si(t.O,Tw,"ELongObject",!0),si(t.P,W8t,"EMap",!1),si(t.X,lLt,"EResource",!1),si(t.Y,ALt,"EResourceSet",!1),si(t.Z,f5,"EShort",!0),si(t.$,Cw,"EShortObject",!0),si(t._,Ae,"EString",!0),si(t.cb,GAt,"ETreeIterator",!1),si(t.K,LLt,"EInvocationTargetException",!1),qyt(t,Ph))}var CD="object",u6="boolean",Lxt="number",Oat="string",Nat="function",vi=2147483647,Xo="java.lang",_D={3:1},SD="com.google.common.base",Ka=", ",Hhe="%s (%s) must not be negative",Ie={3:1,4:1,5:1},Ghe="negative size: ",Vhe="Optional.of(",Tu="null",SE={198:1,47:1},Ye="com.google.common.collect",AE={198:1,47:1,125:1},y2={224:1,3:1},ra={47:1},pr="java.util",bw={83:1},wy={20:1,28:1,14:1},N1=1965,ju={20:1,28:1,14:1,21:1},Uhe={83:1,171:1,161:1},Whe={20:1,28:1,14:1,21:1,84:1},Mxt={20:1,28:1,14:1,271:1,21:1,84:1},Jd={47:1,125:1},Mq={345:1,42:1},Khe="AbstractMapEntry",Yhe="expectedValuesPerKey",te={3:1,6:1,4:1,5:1},bd=16384,Mh={164:1},Un={38:1},Iq={l:4194303,m:4194303,h:524287},AD={196:1},Pat={245:1,3:1,35:1},Xhe="range unbounded on this side",t0={20:1},Qhe={20:1,14:1},Ixt={3:1,20:1,28:1,14:1},S_={152:1,3:1,20:1,28:1,14:1,15:1,54:1},Dq={3:1,4:1,5:1,165:1},LE={3:1,83:1},Fat={20:1,14:1,21:1},ME={3:1,20:1,28:1,14:1,21:1},Zhe={20:1,14:1,21:1,84:1},e0=461845907,n0=-862048943,LD={3:1,6:1,4:1,5:1,165:1},Jhe="expectedSize",A_=1073741824,my="initialArraySize",ae={3:1,6:1,4:1,9:1,5:1},IE={20:1,28:1,52:1,14:1,15:1},Bat="arraySize",tfe={20:1,28:1,52:1,14:1,15:1,54:1},ui={45:1},Oq={365:1},eb=1e-4,_a=-2147483648,efe="__noinit__",U0={3:1,102:1,60:1,78:1},MD="com.google.gwt.core.client.impl",Dxt="String",Oxt="com.google.gwt.core.client",Rat="anonymous",jat="fnStack",Nxt="Unknown",vd={195:1,3:1,4:1},$g=1e3,ms=65535,$at="January",zat="February",qat="March",Hat="April",l6="May",Gat="June",Vat="July",Uat="August",Wat="September",Kat="October",Yat="November",Xat="December",nb=1900,Xr={48:1,3:1,4:1},nfe="Before Christ",rfe="Anno Domini",Qat="Sunday",Zat="Monday",Jat="Tuesday",tot="Wednesday",eot="Thursday",not="Friday",rot="Saturday",Pxt="com.google.gwt.i18n.shared",ife="DateTimeFormat",iot="com.google.gwt.i18n.client",sfe="DefaultDateTimeFormatInfo",afe={3:1,4:1,35:1,199:1},h6="com.google.gwt.json.client",ul=4194303,W0=1048575,ID=524288,f6=4194304,x2=17592186044416,Nq=1e9,DD=-17592186044416,Fxt="java.io",sot={3:1,102:1,73:1,60:1,78:1},ofe={3:1,289:1,78:1},vw='For input string: "',ss=1/0,Ts=-1/0,yy=4096,aot={3:1,4:1,364:1},Ya=65536,OD=55296,vo={104:1,3:1,4:1},oot=1e5,cfe=.3010299956639812,co=4294967295,cot=4294967296,DE="0.0",uot={42:1},ufe={3:1,4:1,20:1,28:1,52:1,12:1,14:1,15:1,54:1},lfe={3:1,20:1,28:1,52:1,14:1,15:1,54:1},hfe={20:1,14:1,15:1},lot={3:1,62:1},ND={182:1},_4={3:1,4:1,83:1},Bxt={3:1,4:1,20:1,28:1,14:1,53:1,21:1},hot="delete",L_=14901161193847656e-24,M_=11102230246251565e-32,fot=15525485,PD=5960464477539063e-23,Rxt=16777216,Pq=16777215,jxt=", length: ",ffe={3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1},dot={3:1,35:1,22:1,297:1},got="java.util.function",I_="java.util.logging",dfe={3:1,4:1,5:1,842:1},pot="undefined",Is="java.util.stream",$xt={525:1,670:1},Fq="fromIndex: ",gfe=" > toIndex: ",zxt=", toIndex: ",qxt="Index: ",Hxt=", Size: ",OE="org.eclipse.elk.alg.common",Oi={62:1},pfe="org.eclipse.elk.alg.common.compaction",bfe="Scanline/EventHandler",r0="org.eclipse.elk.alg.common.compaction.oned",vfe="CNode belongs to another CGroup.",wfe="ISpacingsHandler/1",bot="The ",vot=" instance has been finished already.",mfe="The direction ",yfe=" is not supported by the CGraph instance.",xfe="OneDimensionalCompactor",kfe="OneDimensionalCompactor/lambda$0$Type",Efe="Quadruplet",Tfe="ScanlineConstraintCalculator",Cfe="ScanlineConstraintCalculator/ConstraintsScanlineHandler",_fe="ScanlineConstraintCalculator/ConstraintsScanlineHandler/lambda$0$Type",Sfe="ScanlineConstraintCalculator/Timestamp",Afe="ScanlineConstraintCalculator/lambda$0$Type",wd={169:1,45:1},wot="org.eclipse.elk.alg.common.compaction.options",Qo="org.eclipse.elk.core.data",Gxt="org.eclipse.elk.polyomino.traversalStrategy",Vxt="org.eclipse.elk.polyomino.lowLevelSort",Uxt="org.eclipse.elk.polyomino.highLevelSort",Wxt="org.eclipse.elk.polyomino.fill",Ih={130:1},mot="polyomino",D_="org.eclipse.elk.alg.common.networksimplex",i0={177:1,3:1,4:1},Lfe="org.eclipse.elk.alg.common.nodespacing",k2="org.eclipse.elk.alg.common.nodespacing.cellsystem",NE="CENTER",Mfe={212:1,326:1},Kxt={3:1,4:1,5:1,595:1},d6="LEFT",g6="RIGHT",Yxt="Vertical alignment cannot be null",Xxt="BOTTOM",Bq="org.eclipse.elk.alg.common.nodespacing.internal",O_="UNDEFINED",P1=.01,FD="org.eclipse.elk.alg.common.nodespacing.internal.algorithm",Ife="LabelPlacer/lambda$0$Type",Dfe="LabelPlacer/lambda$1$Type",Ofe="portRatioOrPosition",PE="org.eclipse.elk.alg.common.overlaps",yot="DOWN",md="org.eclipse.elk.alg.common.polyomino",Rq="NORTH",xot="EAST",kot="SOUTH",Eot="WEST",jq="org.eclipse.elk.alg.common.polyomino.structures",Qxt="Direction",Tot="Grid is only of size ",Cot=". Requested point (",_ot=") is out of bounds.",$q=" Given center based coordinates were (",BD="org.eclipse.elk.graph.properties",Nfe="IPropertyHolder",Zxt={3:1,94:1,134:1},p6="org.eclipse.elk.alg.common.spore",Pfe="org.eclipse.elk.alg.common.utils",E2={209:1},S4="org.eclipse.elk.core",Ffe="Connected Components Compaction",Bfe="org.eclipse.elk.alg.disco",zq="org.eclipse.elk.alg.disco.graph",Sot="org.eclipse.elk.alg.disco.options",Jxt="CompactionStrategy",t6t="org.eclipse.elk.disco.componentCompaction.strategy",e6t="org.eclipse.elk.disco.componentCompaction.componentLayoutAlgorithm",n6t="org.eclipse.elk.disco.debug.discoGraph",r6t="org.eclipse.elk.disco.debug.discoPolys",Rfe="componentCompaction",T2="org.eclipse.elk.disco",Aot="org.eclipse.elk.spacing.componentComponent",Lot="org.eclipse.elk.edge.thickness",b6="org.eclipse.elk.aspectRatio",ww="org.eclipse.elk.padding",A4="org.eclipse.elk.alg.disco.transform",Mot=1.5707963267948966,FE=17976931348623157e292,xy={3:1,4:1,5:1,192:1},i6t={3:1,6:1,4:1,5:1,106:1,120:1},s6t="org.eclipse.elk.alg.force",a6t="ComponentsProcessor",jfe="ComponentsProcessor/1",RD="org.eclipse.elk.alg.force.graph",$fe="Component Layout",o6t="org.eclipse.elk.alg.force.model",qq="org.eclipse.elk.force.model",c6t="org.eclipse.elk.force.iterations",u6t="org.eclipse.elk.force.repulsivePower",Iot="org.eclipse.elk.force.temperature",yd=.001,Dot="org.eclipse.elk.force.repulsion",N_="org.eclipse.elk.alg.force.options",BE=1.600000023841858,ql="org.eclipse.elk.force",jD="org.eclipse.elk.priority",ky="org.eclipse.elk.spacing.nodeNode",Oot="org.eclipse.elk.spacing.edgeLabel",Hq="org.eclipse.elk.randomSeed",P_="org.eclipse.elk.separateConnectedComponents",$D="org.eclipse.elk.interactive",Not="org.eclipse.elk.portConstraints",Gq="org.eclipse.elk.edgeLabels.inline",F_="org.eclipse.elk.omitNodeMicroLayout",v6="org.eclipse.elk.nodeSize.options",L4="org.eclipse.elk.nodeSize.constraints",RE="org.eclipse.elk.nodeLabels.placement",jE="org.eclipse.elk.portLabels.placement",l6t="origin",zfe="random",qfe="boundingBox.upLeft",Hfe="boundingBox.lowRight",h6t="org.eclipse.elk.stress.fixed",f6t="org.eclipse.elk.stress.desiredEdgeLength",d6t="org.eclipse.elk.stress.dimension",g6t="org.eclipse.elk.stress.epsilon",p6t="org.eclipse.elk.stress.iterationLimit",rb="org.eclipse.elk.stress",Gfe="ELK Stress",w6="org.eclipse.elk.nodeSize.minimum",Vq="org.eclipse.elk.alg.force.stress",Vfe="Layered layout",m6="org.eclipse.elk.alg.layered",zD="org.eclipse.elk.alg.layered.compaction.components",B_="org.eclipse.elk.alg.layered.compaction.oned",Uq="org.eclipse.elk.alg.layered.compaction.oned.algs",C2="org.eclipse.elk.alg.layered.compaction.recthull",xd="org.eclipse.elk.alg.layered.components",K0="NONE",xc={3:1,6:1,4:1,9:1,5:1,122:1},Ufe={3:1,6:1,4:1,5:1,141:1,106:1,120:1},Wq="org.eclipse.elk.alg.layered.compound",as={51:1},Jc="org.eclipse.elk.alg.layered.graph",Pot=" -> ",Wfe="Not supported by LGraph",b6t="Port side is undefined",Fot={3:1,6:1,4:1,5:1,474:1,141:1,106:1,120:1},zg={3:1,6:1,4:1,5:1,141:1,193:1,203:1,106:1,120:1},Kfe={3:1,6:1,4:1,5:1,141:1,1943:1,203:1,106:1,120:1},Yfe=`([{"' 	\r
`,Xfe=`)]}"' 	\r
`,Qfe="The given string contains parts that cannot be parsed as numbers.",qD="org.eclipse.elk.core.math",Zfe={3:1,4:1,142:1,207:1,414:1},Jfe={3:1,4:1,116:1,207:1,414:1},Vn="org.eclipse.elk.layered",qg="org.eclipse.elk.alg.layered.graph.transform",t1e="ElkGraphImporter",e1e="ElkGraphImporter/lambda$0$Type",n1e="ElkGraphImporter/lambda$1$Type",r1e="ElkGraphImporter/lambda$2$Type",i1e="ElkGraphImporter/lambda$4$Type",s1e="Node margin calculation",$n="org.eclipse.elk.alg.layered.intermediate",a1e="ONE_SIDED_GREEDY_SWITCH",o1e="TWO_SIDED_GREEDY_SWITCH",Bot="No implementation is available for the layout processor ",v6t="IntermediateProcessorStrategy",Rot="Node '",c1e="FIRST_SEPARATE",u1e="LAST_SEPARATE",l1e="Odd port side processing",Cs="org.eclipse.elk.alg.layered.intermediate.compaction",R_="org.eclipse.elk.alg.layered.intermediate.greedyswitch",s0="org.eclipse.elk.alg.layered.p3order.counting",HD={225:1},y6="org.eclipse.elk.alg.layered.intermediate.loops",Hl="org.eclipse.elk.alg.layered.intermediate.loops.ordering",ib="org.eclipse.elk.alg.layered.intermediate.loops.routing",j_="org.eclipse.elk.alg.layered.intermediate.preserveorder",kd="org.eclipse.elk.alg.layered.intermediate.wrapping",kc="org.eclipse.elk.alg.layered.options",jot="INTERACTIVE",h1e="DEPTH_FIRST",f1e="EDGE_LENGTH",d1e="SELF_LOOPS",g1e="firstTryWithInitialOrder",w6t="org.eclipse.elk.layered.directionCongruency",m6t="org.eclipse.elk.layered.feedbackEdges",Kq="org.eclipse.elk.layered.interactiveReferencePoint",y6t="org.eclipse.elk.layered.mergeEdges",x6t="org.eclipse.elk.layered.mergeHierarchyEdges",k6t="org.eclipse.elk.layered.allowNonFlowPortsToSwitchSides",E6t="org.eclipse.elk.layered.portSortingStrategy",T6t="org.eclipse.elk.layered.thoroughness",C6t="org.eclipse.elk.layered.unnecessaryBendpoints",_6t="org.eclipse.elk.layered.generatePositionAndLayerIds",$ot="org.eclipse.elk.layered.cycleBreaking.strategy",GD="org.eclipse.elk.layered.layering.strategy",S6t="org.eclipse.elk.layered.layering.layerConstraint",A6t="org.eclipse.elk.layered.layering.layerChoiceConstraint",L6t="org.eclipse.elk.layered.layering.layerId",zot="org.eclipse.elk.layered.layering.minWidth.upperBoundOnWidth",qot="org.eclipse.elk.layered.layering.minWidth.upperLayerEstimationScalingFactor",Hot="org.eclipse.elk.layered.layering.nodePromotion.strategy",Got="org.eclipse.elk.layered.layering.nodePromotion.maxIterations",Vot="org.eclipse.elk.layered.layering.coffmanGraham.layerBound",$_="org.eclipse.elk.layered.crossingMinimization.strategy",M6t="org.eclipse.elk.layered.crossingMinimization.forceNodeModelOrder",Uot="org.eclipse.elk.layered.crossingMinimization.hierarchicalSweepiness",Wot="org.eclipse.elk.layered.crossingMinimization.semiInteractive",I6t="org.eclipse.elk.layered.crossingMinimization.positionChoiceConstraint",D6t="org.eclipse.elk.layered.crossingMinimization.positionId",O6t="org.eclipse.elk.layered.crossingMinimization.greedySwitch.activationThreshold",Kot="org.eclipse.elk.layered.crossingMinimization.greedySwitch.type",Yq="org.eclipse.elk.layered.crossingMinimization.greedySwitchHierarchical.type",M4="org.eclipse.elk.layered.nodePlacement.strategy",Xq="org.eclipse.elk.layered.nodePlacement.favorStraightEdges",Yot="org.eclipse.elk.layered.nodePlacement.bk.edgeStraightening",Xot="org.eclipse.elk.layered.nodePlacement.bk.fixedAlignment",Qot="org.eclipse.elk.layered.nodePlacement.linearSegments.deflectionDampening",Zot="org.eclipse.elk.layered.nodePlacement.networkSimplex.nodeFlexibility",Jot="org.eclipse.elk.layered.nodePlacement.networkSimplex.nodeFlexibility.default",N6t="org.eclipse.elk.layered.edgeRouting.selfLoopDistribution",P6t="org.eclipse.elk.layered.edgeRouting.selfLoopOrdering",Qq="org.eclipse.elk.layered.edgeRouting.splines.mode",Zq="org.eclipse.elk.layered.edgeRouting.splines.sloppy.layerSpacingFactor",tct="org.eclipse.elk.layered.edgeRouting.polyline.slopedEdgeZoneWidth",F6t="org.eclipse.elk.layered.spacing.baseValue",B6t="org.eclipse.elk.layered.spacing.edgeNodeBetweenLayers",R6t="org.eclipse.elk.layered.spacing.edgeEdgeBetweenLayers",j6t="org.eclipse.elk.layered.spacing.nodeNodeBetweenLayers",$6t="org.eclipse.elk.layered.priority.direction",z6t="org.eclipse.elk.layered.priority.shortness",q6t="org.eclipse.elk.layered.priority.straightness",ect="org.eclipse.elk.layered.compaction.connectedComponents",H6t="org.eclipse.elk.layered.compaction.postCompaction.strategy",G6t="org.eclipse.elk.layered.compaction.postCompaction.constraints",Jq="org.eclipse.elk.layered.highDegreeNodes.treatment",nct="org.eclipse.elk.layered.highDegreeNodes.threshold",rct="org.eclipse.elk.layered.highDegreeNodes.treeHeight",Y0="org.eclipse.elk.layered.wrapping.strategy",tH="org.eclipse.elk.layered.wrapping.additionalEdgeSpacing",eH="org.eclipse.elk.layered.wrapping.correctionFactor",z_="org.eclipse.elk.layered.wrapping.cutting.strategy",ict="org.eclipse.elk.layered.wrapping.cutting.cuts",sct="org.eclipse.elk.layered.wrapping.cutting.msd.freedom",nH="org.eclipse.elk.layered.wrapping.validify.strategy",rH="org.eclipse.elk.layered.wrapping.validify.forbiddenIndices",iH="org.eclipse.elk.layered.wrapping.multiEdge.improveCuts",sH="org.eclipse.elk.layered.wrapping.multiEdge.distancePenalty",act="org.eclipse.elk.layered.wrapping.multiEdge.improveWrappedEdges",V6t="org.eclipse.elk.layered.edgeLabels.sideSelection",U6t="org.eclipse.elk.layered.edgeLabels.centerLabelPlacementStrategy",aH="org.eclipse.elk.layered.considerModelOrder.strategy",W6t="org.eclipse.elk.layered.considerModelOrder.noModelOrder",oct="org.eclipse.elk.layered.considerModelOrder.components",K6t="org.eclipse.elk.layered.considerModelOrder.longEdgeStrategy",cct="org.eclipse.elk.layered.considerModelOrder.crossingCounterNodeInfluence",uct="org.eclipse.elk.layered.considerModelOrder.crossingCounterPortInfluence",lct="layering",p1e="layering.minWidth",b1e="layering.nodePromotion",VD="crossingMinimization",oH="org.eclipse.elk.hierarchyHandling",v1e="crossingMinimization.greedySwitch",w1e="nodePlacement",m1e="nodePlacement.bk",y1e="edgeRouting",UD="org.eclipse.elk.edgeRouting",F1="spacing",Y6t="priority",X6t="compaction",x1e="compaction.postCompaction",k1e="Specifies whether and how post-process compaction is applied.",Q6t="highDegreeNodes",Z6t="wrapping",E1e="wrapping.cutting",T1e="wrapping.validify",J6t="wrapping.multiEdge",hct="edgeLabels",WD="considerModelOrder",tkt="org.eclipse.elk.spacing.commentComment",ekt="org.eclipse.elk.spacing.commentNode",nkt="org.eclipse.elk.spacing.edgeEdge",rkt="org.eclipse.elk.spacing.edgeNode",ikt="org.eclipse.elk.spacing.labelLabel",skt="org.eclipse.elk.spacing.labelPortHorizontal",akt="org.eclipse.elk.spacing.labelPortVertical",okt="org.eclipse.elk.spacing.labelNode",ckt="org.eclipse.elk.spacing.nodeSelfLoop",ukt="org.eclipse.elk.spacing.portPort",lkt="org.eclipse.elk.spacing.individual",hkt="org.eclipse.elk.port.borderOffset",fkt="org.eclipse.elk.noLayout",dkt="org.eclipse.elk.port.side",KD="org.eclipse.elk.debugMode",gkt="org.eclipse.elk.alignment",pkt="org.eclipse.elk.insideSelfLoops.activate",bkt="org.eclipse.elk.insideSelfLoops.yo",fct="org.eclipse.elk.nodeSize.fixedGraphSize",vkt="org.eclipse.elk.direction",wkt="org.eclipse.elk.nodeLabels.padding",mkt="org.eclipse.elk.portLabels.nextToPortIfPossible",ykt="org.eclipse.elk.portLabels.treatAsGroup",xkt="org.eclipse.elk.portAlignment.default",kkt="org.eclipse.elk.portAlignment.north",Ekt="org.eclipse.elk.portAlignment.south",Tkt="org.eclipse.elk.portAlignment.west",Ckt="org.eclipse.elk.portAlignment.east",cH="org.eclipse.elk.contentAlignment",_kt="org.eclipse.elk.junctionPoints",Skt="org.eclipse.elk.edgeLabels.placement",Akt="org.eclipse.elk.port.index",Lkt="org.eclipse.elk.commentBox",Mkt="org.eclipse.elk.hypernode",Ikt="org.eclipse.elk.port.anchor",dct="org.eclipse.elk.partitioning.activate",gct="org.eclipse.elk.partitioning.partition",uH="org.eclipse.elk.position",Dkt="org.eclipse.elk.margins",Okt="org.eclipse.elk.spacing.portsSurrounding",pct="org.eclipse.elk.interactiveLayout",Ec="org.eclipse.elk.core.util",Nkt={3:1,4:1,5:1,593:1},C1e="NETWORK_SIMPLEX",zc={123:1,51:1},lH="org.eclipse.elk.alg.layered.p1cycles",Ey="org.eclipse.elk.alg.layered.p2layers",Pkt={402:1,225:1},_1e={832:1,3:1,4:1},$u="org.eclipse.elk.alg.layered.p3order",uo="org.eclipse.elk.alg.layered.p4nodes",S1e={3:1,4:1,5:1,840:1},Ed=1e-5,sb="org.eclipse.elk.alg.layered.p4nodes.bk",bct="org.eclipse.elk.alg.layered.p5edges",Jf="org.eclipse.elk.alg.layered.p5edges.orthogonal",vct="org.eclipse.elk.alg.layered.p5edges.orthogonal.direction",wct=1e-6,Ty="org.eclipse.elk.alg.layered.p5edges.splines",mct=.09999999999999998,hH=1e-8,A1e=4.71238898038469,L1e=3.141592653589793,q_="org.eclipse.elk.alg.mrtree",H_="org.eclipse.elk.alg.mrtree.graph",x6="org.eclipse.elk.alg.mrtree.intermediate",M1e="Set neighbors in level",I1e="DESCENDANTS",Fkt="org.eclipse.elk.mrtree.weighting",Bkt="org.eclipse.elk.mrtree.searchOrder",fH="org.eclipse.elk.alg.mrtree.options",Hg="org.eclipse.elk.mrtree",D1e="org.eclipse.elk.tree",Rkt="org.eclipse.elk.alg.radial",I4=6.283185307179586,jkt=5e-324,O1e="org.eclipse.elk.alg.radial.intermediate",yct="org.eclipse.elk.alg.radial.intermediate.compaction",N1e={3:1,4:1,5:1,106:1},$kt="org.eclipse.elk.alg.radial.intermediate.optimization",xct="No implementation is available for the layout option ",G_="org.eclipse.elk.alg.radial.options",zkt="org.eclipse.elk.radial.orderId",qkt="org.eclipse.elk.radial.radius",kct="org.eclipse.elk.radial.compactor",Ect="org.eclipse.elk.radial.compactionStepSize",Hkt="org.eclipse.elk.radial.sorter",Gkt="org.eclipse.elk.radial.wedgeCriteria",Vkt="org.eclipse.elk.radial.optimizationCriteria",Td="org.eclipse.elk.radial",P1e="org.eclipse.elk.alg.radial.p1position.wedge",Ukt="org.eclipse.elk.alg.radial.sorting",F1e=5.497787143782138,B1e=3.9269908169872414,R1e=2.356194490192345,j1e="org.eclipse.elk.alg.rectpacking",dH="org.eclipse.elk.alg.rectpacking.firstiteration",Tct="org.eclipse.elk.alg.rectpacking.options",Wkt="org.eclipse.elk.rectpacking.optimizationGoal",Kkt="org.eclipse.elk.rectpacking.lastPlaceShift",Ykt="org.eclipse.elk.rectpacking.currentPosition",Xkt="org.eclipse.elk.rectpacking.desiredPosition",Qkt="org.eclipse.elk.rectpacking.onlyFirstIteration",Zkt="org.eclipse.elk.rectpacking.rowCompaction",Cct="org.eclipse.elk.rectpacking.expandToAspectRatio",Jkt="org.eclipse.elk.rectpacking.targetWidth",gH="org.eclipse.elk.expandNodes",Dh="org.eclipse.elk.rectpacking",YD="org.eclipse.elk.alg.rectpacking.util",pH="No implementation available for ",Cy="org.eclipse.elk.alg.spore",_y="org.eclipse.elk.alg.spore.options",mw="org.eclipse.elk.sporeCompaction",_ct="org.eclipse.elk.underlyingLayoutAlgorithm",t8t="org.eclipse.elk.processingOrder.treeConstruction",e8t="org.eclipse.elk.processingOrder.spanningTreeCostFunction",Sct="org.eclipse.elk.processingOrder.preferredRoot",Act="org.eclipse.elk.processingOrder.rootSelection",Lct="org.eclipse.elk.structure.structureExtractionStrategy",n8t="org.eclipse.elk.compaction.compactionStrategy",r8t="org.eclipse.elk.compaction.orthogonal",i8t="org.eclipse.elk.overlapRemoval.maxIterations",s8t="org.eclipse.elk.overlapRemoval.runScanline",Mct="processingOrder",$1e="overlapRemoval",$E="org.eclipse.elk.sporeOverlap",z1e="org.eclipse.elk.alg.spore.p1structure",Ict="org.eclipse.elk.alg.spore.p2processingorder",Dct="org.eclipse.elk.alg.spore.p3execution",q1e="Invalid index: ",zE="org.eclipse.elk.core.alg",D4={331:1},Sy={288:1},H1e="Make sure its type is registered with the ",a8t=" utility class.",qE="true",Oct="false",G1e="Couldn't clone property '",yw=.05,Oh="org.eclipse.elk.core.options",V1e=1.2999999523162842,xw="org.eclipse.elk.box",o8t="org.eclipse.elk.box.packingMode",U1e="org.eclipse.elk.algorithm",W1e="org.eclipse.elk.resolvedAlgorithm",c8t="org.eclipse.elk.bendPoints",W5n="org.eclipse.elk.labelManager",K1e="org.eclipse.elk.scaleFactor",Y1e="org.eclipse.elk.animate",X1e="org.eclipse.elk.animTimeFactor",Q1e="org.eclipse.elk.layoutAncestors",Z1e="org.eclipse.elk.maxAnimTime",J1e="org.eclipse.elk.minAnimTime",tde="org.eclipse.elk.progressBar",ede="org.eclipse.elk.validateGraph",nde="org.eclipse.elk.validateOptions",rde="org.eclipse.elk.zoomToFit",K5n="org.eclipse.elk.font.name",ide="org.eclipse.elk.font.size",sde="org.eclipse.elk.edge.type",ade="partitioning",ode="nodeLabels",bH="portAlignment",Nct="nodeSize",Pct="port",u8t="portLabels",cde="insideSelfLoops",V_="org.eclipse.elk.fixed",vH="org.eclipse.elk.random",ude="port must have a parent node to calculate the port side",lde="The edge needs to have exactly one edge section. Found: ",U_="org.eclipse.elk.core.util.adapters",dh="org.eclipse.emf.ecore",O4="org.eclipse.elk.graph",hde="EMapPropertyHolder",fde="ElkBendPoint",dde="ElkGraphElement",gde="ElkConnectableShape",l8t="ElkEdge",pde="ElkEdgeSection",bde="EModelElement",vde="ENamedElement",h8t="ElkLabel",f8t="ElkNode",d8t="ElkPort",wde={92:1,90:1},k6="org.eclipse.emf.common.notify.impl",ab="The feature '",W_="' is not a valid changeable feature",mde="Expecting null",Fct="' is not a valid feature",yde="The feature ID",xde=" is not a valid feature ID",dc=32768,kde={105:1,92:1,90:1,56:1,49:1,97:1},Mn="org.eclipse.emf.ecore.impl",_2="org.eclipse.elk.graph.impl",K_="Recursive containment not allowed for ",HE="The datatype '",kw="' is not a valid classifier",Bct="The value '",N4={190:1,3:1,4:1},Rct="The class '",GE="http://www.eclipse.org/elk/ElkGraph",wf=1024,g8t="property",Y_="value",jct="source",Ede="properties",Tde="identifier",$ct="height",zct="width",qct="parent",Hct="text",Gct="children",Cde="hierarchical",p8t="sources",Vct="targets",b8t="sections",wH="bendPoints",v8t="outgoingShape",w8t="incomingShape",m8t="outgoingSections",y8t="incomingSections",Ra="org.eclipse.emf.common.util",x8t="Severe implementation error in the Json to ElkGraph importer.",Cd="id",wa="org.eclipse.elk.graph.json",k8t="Unhandled parameter types: ",_de="startPoint",Sde="An edge must have at least one source and one target (edge id: '",VE="').",Ade="Referenced edge section does not exist: ",Lde=" (edge id: '",E8t="target",Mde="sourcePoint",Ide="targetPoint",mH="group",oi="name",Dde="connectableShape cannot be null",Ode="edge cannot be null",Uct="Passed edge is not 'simple'.",yH="org.eclipse.elk.graph.util",XD="The 'no duplicates' constraint is violated",Wct="targetIndex=",S2=", size=",Kct="sourceIndex=",_d={3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,63:1,58:1},Yct={3:1,4:1,20:1,28:1,52:1,14:1,47:1,15:1,54:1,67:1,63:1,58:1,588:1},xH="logging",Nde="measureExecutionTime",Pde="parser.parse.1",Fde="parser.parse.2",kH="parser.next.1",Xct="parser.next.2",Bde="parser.next.3",Rde="parser.next.4",A2="parser.factor.1",T8t="parser.factor.2",jde="parser.factor.3",$de="parser.factor.4",zde="parser.factor.5",qde="parser.factor.6",Hde="parser.atom.1",Gde="parser.atom.2",Vde="parser.atom.3",C8t="parser.atom.4",Qct="parser.atom.5",_8t="parser.cc.1",EH="parser.cc.2",Ude="parser.cc.3",Wde="parser.cc.5",S8t="parser.cc.6",A8t="parser.cc.7",Zct="parser.cc.8",Kde="parser.ope.1",Yde="parser.ope.2",Xde="parser.ope.3",Gg="parser.descape.1",Qde="parser.descape.2",Zde="parser.descape.3",Jde="parser.descape.4",t0e="parser.descape.5",gh="parser.process.1",e0e="parser.quantifier.1",n0e="parser.quantifier.2",r0e="parser.quantifier.3",i0e="parser.quantifier.4",L8t="parser.quantifier.5",s0e="org.eclipse.emf.common.notify",M8t={415:1,672:1},a0e={3:1,4:1,20:1,28:1,52:1,14:1,15:1,67:1,58:1},QD={366:1,143:1},X_="index=",Jct={3:1,4:1,5:1,126:1},o0e={3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,58:1},I8t={3:1,6:1,4:1,5:1,192:1},c0e={3:1,4:1,5:1,165:1,367:1},u0e=";/?:@&=+$,",l0e="invalid authority: ",h0e="EAnnotation",f0e="ETypedElement",d0e="EStructuralFeature",g0e="EAttribute",p0e="EClassifier",b0e="EEnumLiteral",v0e="EGenericType",w0e="EOperation",m0e="EParameter",y0e="EReference",x0e="ETypeParameter",$i="org.eclipse.emf.ecore.util",tut={76:1},D8t={3:1,20:1,14:1,15:1,58:1,589:1,76:1,69:1,95:1},k0e="org.eclipse.emf.ecore.util.FeatureMap$Entry",zu=8192,Ay=2048,Q_="byte",TH="char",Z_="double",J_="float",tS="int",eS="long",nS="short",E0e="java.lang.Object",P4={3:1,4:1,5:1,247:1},O8t={3:1,4:1,5:1,673:1},T0e={3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,63:1,58:1,69:1},zo={3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,63:1,58:1,76:1,69:1,95:1},ZD="mixed",Kr="http:///org/eclipse/emf/ecore/util/ExtendedMetaData",Nh="kind",C0e={3:1,4:1,5:1,674:1},N8t={3:1,4:1,20:1,28:1,52:1,14:1,15:1,67:1,58:1,76:1,69:1,95:1},CH={20:1,28:1,52:1,14:1,15:1,58:1,69:1},_H={47:1,125:1,279:1},SH={72:1,332:1},AH="The value of type '",LH="' must be of type '",F4=1316,Ph="http://www.eclipse.org/emf/2002/Ecore",MH=-32768,Ew="constraints",Sa="baseType",_0e="getEStructuralFeature",S0e="getFeatureID",rS="feature",A0e="getOperationID",P8t="operation",L0e="defaultValue",M0e="eTypeParameters",I0e="isInstance",D0e="getEEnumLiteral",O0e="eContainingClass",ii={55:1},N0e={3:1,4:1,5:1,119:1},P0e="org.eclipse.emf.ecore.resource",F0e={92:1,90:1,591:1,1935:1},eut="org.eclipse.emf.ecore.resource.impl",F8t="unspecified",JD="simple",IH="attribute",B0e="attributeWildcard",DH="element",nut="elementWildcard",t1="collapse",rut="itemType",OH="namespace",tO="##targetNamespace",Fh="whiteSpace",B8t="wildcards",L2="http://www.eclipse.org/emf/2003/XMLType",iut="##any",UE="uninitialized",eO="The multiplicity constraint is violated",NH="org.eclipse.emf.ecore.xml.type",R0e="ProcessingInstruction",j0e="SimpleAnyType",$0e="XMLTypeDocumentRoot",ys="org.eclipse.emf.ecore.xml.type.impl",nO="INF",z0e="processing",q0e="ENTITIES_._base",R8t="minLength",j8t="ENTITY",PH="NCName",H0e="IDREFS_._base",$8t="integer",sut="token",aut="pattern",G0e="[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*",z8t="\\i\\c*",V0e="[\\i-[:]][\\c-[:]]*",U0e="nonPositiveInteger",rO="maxInclusive",q8t="NMTOKEN",W0e="NMTOKENS_._base",H8t="nonNegativeInteger",iO="minInclusive",K0e="normalizedString",Y0e="unsignedByte",X0e="unsignedInt",Q0e="18446744073709551615",Z0e="unsignedShort",J0e="processingInstruction",Vg="org.eclipse.emf.ecore.xml.type.internal",WE=1114111,tge="Internal Error: shorthands: \\u",iS="xml:isDigit",out="xml:isWord",cut="xml:isSpace",uut="xml:isNameChar",lut="xml:isInitialNameChar",ege="09٠٩۰۹०९০৯੦੯૦૯୦୯௧௯౦౯೦೯൦൯๐๙໐໙༠༩",nge="AZazÀÖØöøıĴľŁňŊžƀǃǍǰǴǵǺȗɐʨʻˁΆΆΈΊΌΌΎΡΣώϐϖϚϚϜϜϞϞϠϠϢϳЁЌЎяёќўҁҐӄӇӈӋӌӐӫӮӵӸӹԱՖՙՙաֆאתװײءغفيٱڷںھۀێېۓەەۥۦअहऽऽक़ॡঅঌএঐওনপরললশহড়ঢ়য়ৡৰৱਅਊਏਐਓਨਪਰਲਲ਼ਵਸ਼ਸਹਖ਼ੜਫ਼ਫ਼ੲੴઅઋઍઍએઑઓનપરલળવહઽઽૠૠଅଌଏଐଓନପରଲଳଶହଽଽଡ଼ଢ଼ୟୡஅஊஎஐஒகஙசஜஜஞடணதநபமவஷஹఅఌఎఐఒనపళవహౠౡಅಌಎಐಒನಪಳವಹೞೞೠೡഅഌഎഐഒനപഹൠൡกฮะะาำเๅກຂຄຄງຈຊຊຍຍດທນຟມຣລລວວສຫອຮະະາຳຽຽເໄཀཇཉཀྵႠჅაჶᄀᄀᄂᄃᄅᄇᄉᄉᄋᄌᄎᄒᄼᄼᄾᄾᅀᅀᅌᅌᅎᅎᅐᅐᅔᅕᅙᅙᅟᅡᅣᅣᅥᅥᅧᅧᅩᅩᅭᅮᅲᅳᅵᅵᆞᆞᆨᆨᆫᆫᆮᆯᆷᆸᆺᆺᆼᇂᇫᇫᇰᇰᇹᇹḀẛẠỹἀἕἘἝἠὅὈὍὐὗὙὙὛὛὝὝὟώᾀᾴᾶᾼιιῂῄῆῌῐΐῖΊῠῬῲῴῶῼΩΩKÅ℮℮ↀↂ〇〇〡〩ぁゔァヺㄅㄬ一龥가힣",rge="Private Use",hut="ASSIGNED",fut="\0ÿĀſƀɏɐʯʰ˿̀ͯͰϿЀӿ԰֏֐׿؀ۿ܀ݏހ޿ऀॿঀ৿਀੿઀૿଀୿஀௿ఀ౿ಀ೿ഀൿ඀෿฀๿຀໿ༀ࿿က႟Ⴀჿᄀᇿሀ፿Ꭰ᏿᐀ᙿ ᚟ᚠ᛿ក៿᠀᢯Ḁỿἀ῿ ⁯⁰₟₠⃏⃐⃿℀⅏⅐↏←⇿∀⋿⌀⏿␀␿⑀⑟①⓿─╿▀▟■◿☀⛿✀➿⠀⣿⺀⻿⼀⿟⿰⿿　〿぀ゟ゠ヿ㄀ㄯ㄰㆏㆐㆟ㆠㆿ㈀㋿㌀㏿㐀䶵一鿿ꀀ꒏꒐꓏가힣豈﫿ﬀﭏﭐ﷿︠︯︰﹏﹐﹯ﹰ﻾\uFEFF\uFEFF＀￯",G8t="UNASSIGNED",KE={3:1,117:1},ige="org.eclipse.emf.ecore.xml.type.util",FH={3:1,4:1,5:1,368:1},V8t="org.eclipse.xtext.xbase.lib",sge="Cannot add elements to a Range",age="Cannot set elements in a Range",oge="Cannot remove elements from a Range",BH="locale",RH="default",jH="user.agent",l,$H,dut;b.goog=b.goog||{},b.goog.global=b.goog.global||b,y0n(),I(1,null,{},_),l.Fb=function(e){return nUt(this,e)},l.Gb=function(){return this.gm},l.Hb=function(){return Iv(this)},l.Ib=function(){var e;return Ap(sl(this))+"@"+(e=Hi(this)>>>0,e.toString(16))},l.equals=function(t){return this.Fb(t)},l.hashCode=function(){return this.Hb()},l.toString=function(){return this.Ib()};var cge,uge,lge;I(290,1,{290:1,2026:1},kyt),l.le=function(e){var n;return n=new kyt,n.i=4,e>1?n.c=mQt(this,e-1):n.c=this,n},l.me=function(){return L0(this),this.b},l.ne=function(){return Ap(this)},l.oe=function(){return L0(this),this.k},l.pe=function(){return(this.i&4)!=0},l.qe=function(){return(this.i&1)!=0},l.Ib=function(){return Bmt(this)},l.i=0;var Xn=P(Xo,"Object",1),U8t=P(Xo,"Class",290);I(1998,1,_D),P(SD,"Optional",1998),I(1170,1998,_D,L),l.Fb=function(e){return e===this},l.Hb=function(){return 2040732332},l.Ib=function(){return"Optional.absent()"},l.Jb=function(e){return Ar(e),I9(),gut};var gut;P(SD,"Absent",1170),I(628,1,{},aet),P(SD,"Joiner",628);var Y5n=Yi(SD,"Predicate");I(582,1,{169:1,582:1,3:1,45:1},b9),l.Mb=function(e){return sre(this,e)},l.Lb=function(e){return sre(this,e)},l.Fb=function(e){var n;return Et(e,582)?(n=u(e,582),p5t(this.a,n.a)):!1},l.Hb=function(){return Syt(this.a)+306654252},l.Ib=function(){return agn(this.a)},P(SD,"Predicates/AndPredicate",582),I(408,1998,{408:1,3:1},jk),l.Fb=function(e){var n;return Et(e,408)?(n=u(e,408),yi(this.a,n.a)):!1},l.Hb=function(){return 1502476572+Hi(this.a)},l.Ib=function(){return Vhe+this.a+")"},l.Jb=function(e){return new jk(r$(e.Kb(this.a),"the Function passed to Optional.transform() must not return null."))},P(SD,"Present",408),I(198,1,SE),l.Nb=function(e){pa(this,e)},l.Qb=function(){Uqt()},P(Ye,"UnmodifiableIterator",198),I(1978,198,AE),l.Qb=function(){Uqt()},l.Rb=function(e){throw rt(new Or)},l.Wb=function(e){throw rt(new Or)},P(Ye,"UnmodifiableListIterator",1978),I(386,1978,AE),l.Ob=function(){return this.c<this.d},l.Sb=function(){return this.c>0},l.Pb=function(){if(this.c>=this.d)throw rt(new lc);return this.Xb(this.c++)},l.Tb=function(){return this.c},l.Ub=function(){if(this.c<=0)throw rt(new lc);return this.Xb(--this.c)},l.Vb=function(){return this.c-1},l.c=0,l.d=0,P(Ye,"AbstractIndexedListIterator",386),I(699,198,SE),l.Ob=function(){return sit(this)},l.Pb=function(){return Imt(this)},l.e=1,P(Ye,"AbstractIterator",699),I(1986,1,{224:1}),l.Zb=function(){var e;return e=this.f,e||(this.f=this.ac())},l.Fb=function(e){return Eit(this,e)},l.Hb=function(){return Hi(this.Zb())},l.dc=function(){return this.gc()==0},l.ec=function(){return Px(this)},l.Ib=function(){return $o(this.Zb())},P(Ye,"AbstractMultimap",1986),I(726,1986,y2),l.$b=function(){Q$(this)},l._b=function(e){return hHt(this,e)},l.ac=function(){return new n8(this,this.c)},l.ic=function(e){return this.hc()},l.bc=function(){return new W3(this,this.c)},l.jc=function(){return this.mc(this.hc())},l.kc=function(){return new Lqt(this)},l.lc=function(){return Mst(this.c.vc().Nc(),new B,64,this.d)},l.cc=function(e){return Ai(this,e)},l.fc=function(e){return $I(this,e)},l.gc=function(){return this.d},l.mc=function(e){return vn(),new T(e)},l.nc=function(){return new Aqt(this)},l.oc=function(){return Mst(this.c.Cc().Nc(),new N,64,this.d)},l.pc=function(e,n){return new I$(this,e,n,null)},l.d=0,P(Ye,"AbstractMapBasedMultimap",726),I(1631,726,y2),l.hc=function(){return new Yc(this.a)},l.jc=function(){return vn(),vn(),io},l.cc=function(e){return u(Ai(this,e),15)},l.fc=function(e){return u($I(this,e),15)},l.Zb=function(){return $x(this)},l.Fb=function(e){return Eit(this,e)},l.qc=function(e){return u(Ai(this,e),15)},l.rc=function(e){return u($I(this,e),15)},l.mc=function(e){return JM(u(e,15))},l.pc=function(e,n){return TZt(this,e,u(n,15),null)},P(Ye,"AbstractListMultimap",1631),I(732,1,ra),l.Nb=function(e){pa(this,e)},l.Ob=function(){return this.c.Ob()||this.e.Ob()},l.Pb=function(){var e;return this.e.Ob()||(e=u(this.c.Pb(),42),this.b=e.cd(),this.a=u(e.dd(),14),this.e=this.a.Kc()),this.sc(this.b,this.e.Pb())},l.Qb=function(){this.e.Qb(),this.a.dc()&&this.c.Qb(),--this.d.d},P(Ye,"AbstractMapBasedMultimap/Itr",732),I(1099,732,ra,Aqt),l.sc=function(e,n){return n},P(Ye,"AbstractMapBasedMultimap/1",1099),I(1100,1,{},N),l.Kb=function(e){return u(e,14).Nc()},P(Ye,"AbstractMapBasedMultimap/1methodref$spliterator$Type",1100),I(1101,732,ra,Lqt),l.sc=function(e,n){return new _v(e,n)},P(Ye,"AbstractMapBasedMultimap/2",1101);var W8t=Yi(pr,"Map");I(1967,1,bw),l.wc=function(e){UC(this,e)},l.yc=function(e,n,r){return $it(this,e,n,r)},l.$b=function(){this.vc().$b()},l.tc=function(e){return dst(this,e)},l._b=function(e){return!!w4t(this,e,!1)},l.uc=function(e){var n,r,s;for(r=this.vc().Kc();r.Ob();)if(n=u(r.Pb(),42),s=n.dd(),Gt(e)===Gt(s)||e!=null&&yi(e,s))return!0;return!1},l.Fb=function(e){var n,r,s;if(e===this)return!0;if(!Et(e,83)||(s=u(e,83),this.gc()!=s.gc()))return!1;for(r=s.vc().Kc();r.Ob();)if(n=u(r.Pb(),42),!this.tc(n))return!1;return!0},l.xc=function(e){return ec(w4t(this,e,!1))},l.Hb=function(){return vyt(this.vc())},l.dc=function(){return this.gc()==0},l.ec=function(){return new Tm(this)},l.zc=function(e,n){throw rt(new yg("Put not supported on this map"))},l.Ac=function(e){VC(this,e)},l.Bc=function(e){return ec(w4t(this,e,!0))},l.gc=function(){return this.vc().gc()},l.Ib=function(){return oae(this)},l.Cc=function(){return new b1(this)},P(pr,"AbstractMap",1967),I(1987,1967,bw),l.bc=function(){return new TR(this)},l.vc=function(){return EYt(this)},l.ec=function(){var e;return e=this.g,e||(this.g=this.bc())},l.Cc=function(){var e;return e=this.i,e||(this.i=new rGt(this))},P(Ye,"Maps/ViewCachingAbstractMap",1987),I(389,1987,bw,n8),l.xc=function(e){return qan(this,e)},l.Bc=function(e){return iun(this,e)},l.$b=function(){this.d==this.e.c?this.e.$b():Oj(new jvt(this))},l._b=function(e){return Rre(this.d,e)},l.Ec=function(){return new $k(this)},l.Dc=function(){return this.Ec()},l.Fb=function(e){return this===e||yi(this.d,e)},l.Hb=function(){return Hi(this.d)},l.ec=function(){return this.e.ec()},l.gc=function(){return this.d.gc()},l.Ib=function(){return $o(this.d)},P(Ye,"AbstractMapBasedMultimap/AsMap",389);var B1=Yi(Xo,"Iterable");I(28,1,wy),l.Jc=function(e){va(this,e)},l.Lc=function(){return this.Oc()},l.Nc=function(){return new _n(this,0)},l.Oc=function(){return new Tn(null,this.Nc())},l.Fc=function(e){throw rt(new yg("Add not supported on this collection"))},l.Gc=function(e){return Ua(this,e)},l.$b=function(){Twt(this)},l.Hc=function(e){return ry(this,e,!1)},l.Ic=function(e){return II(this,e)},l.dc=function(){return this.gc()==0},l.Mc=function(e){return ry(this,e,!0)},l.Pc=function(){return Zvt(this)},l.Qc=function(e){return XI(this,e)},l.Ib=function(){return Qp(this)},P(pr,"AbstractCollection",28);var Bh=Yi(pr,"Set");I(N1,28,ju),l.Nc=function(){return new _n(this,1)},l.Fb=function(e){return Iie(this,e)},l.Hb=function(){return vyt(this)},P(pr,"AbstractSet",N1),I(1970,N1,ju),P(Ye,"Sets/ImprovedAbstractSet",1970),I(1971,1970,ju),l.$b=function(){this.Rc().$b()},l.Hc=function(e){return fie(this,e)},l.dc=function(){return this.Rc().dc()},l.Mc=function(e){var n;return this.Hc(e)?(n=u(e,42),this.Rc().ec().Mc(n.cd())):!1},l.gc=function(){return this.Rc().gc()},P(Ye,"Maps/EntrySet",1971),I(1097,1971,ju,$k),l.Hc=function(e){return Uyt(this.a.d.vc(),e)},l.Kc=function(){return new jvt(this.a)},l.Rc=function(){return this.a},l.Mc=function(e){var n;return Uyt(this.a.d.vc(),e)?(n=u(e,42),Asn(this.a.e,n.cd()),!0):!1},l.Nc=function(){return VM(this.a.d.vc().Nc(),new VB(this.a))},P(Ye,"AbstractMapBasedMultimap/AsMap/AsMapEntries",1097),I(1098,1,{},VB),l.Kb=function(e){return dJt(this.a,u(e,42))},P(Ye,"AbstractMapBasedMultimap/AsMap/AsMapEntries/0methodref$wrapEntry$Type",1098),I(730,1,ra,jvt),l.Nb=function(e){pa(this,e)},l.Pb=function(){var e;return e=u(this.b.Pb(),42),this.a=u(e.dd(),14),dJt(this.c,e)},l.Ob=function(){return this.b.Ob()},l.Qb=function(){n4(!!this.a),this.b.Qb(),this.c.e.d-=this.a.gc(),this.a.$b(),this.a=null},P(Ye,"AbstractMapBasedMultimap/AsMap/AsMapIterator",730),I(532,1970,ju,TR),l.$b=function(){this.b.$b()},l.Hc=function(e){return this.b._b(e)},l.Jc=function(e){Ar(e),this.b.wc(new gtt(e))},l.dc=function(){return this.b.dc()},l.Kc=function(){return new D9(this.b.vc().Kc())},l.Mc=function(e){return this.b._b(e)?(this.b.Bc(e),!0):!1},l.gc=function(){return this.b.gc()},P(Ye,"Maps/KeySet",532),I(318,532,ju,W3),l.$b=function(){var e;Oj((e=this.b.vc().Kc(),new hbt(this,e)))},l.Ic=function(e){return this.b.ec().Ic(e)},l.Fb=function(e){return this===e||yi(this.b.ec(),e)},l.Hb=function(){return Hi(this.b.ec())},l.Kc=function(){var e;return e=this.b.vc().Kc(),new hbt(this,e)},l.Mc=function(e){var n,r;return r=0,n=u(this.b.Bc(e),14),n&&(r=n.gc(),n.$b(),this.a.d-=r),r>0},l.Nc=function(){return this.b.ec().Nc()},P(Ye,"AbstractMapBasedMultimap/KeySet",318),I(731,1,ra,hbt),l.Nb=function(e){pa(this,e)},l.Ob=function(){return this.c.Ob()},l.Pb=function(){return this.a=u(this.c.Pb(),42),this.a.cd()},l.Qb=function(){var e;n4(!!this.a),e=u(this.a.dd(),14),this.c.Qb(),this.b.a.d-=e.gc(),e.$b(),this.a=null},P(Ye,"AbstractMapBasedMultimap/KeySet/1",731),I(491,389,{83:1,161:1},RM),l.bc=function(){return this.Sc()},l.ec=function(){return this.Tc()},l.Sc=function(){return new gM(this.c,this.Uc())},l.Tc=function(){var e;return e=this.b,e||(this.b=this.Sc())},l.Uc=function(){return u(this.d,161)},P(Ye,"AbstractMapBasedMultimap/SortedAsMap",491),I(542,491,Uhe,yj),l.bc=function(){return new e8(this.a,u(u(this.d,161),171))},l.Sc=function(){return new e8(this.a,u(u(this.d,161),171))},l.ec=function(){var e;return e=this.b,u(e||(this.b=new e8(this.a,u(u(this.d,161),171))),271)},l.Tc=function(){var e;return e=this.b,u(e||(this.b=new e8(this.a,u(u(this.d,161),171))),271)},l.Uc=function(){return u(u(this.d,161),171)},P(Ye,"AbstractMapBasedMultimap/NavigableAsMap",542),I(490,318,Whe,gM),l.Nc=function(){return this.b.ec().Nc()},P(Ye,"AbstractMapBasedMultimap/SortedKeySet",490),I(388,490,Mxt,e8),P(Ye,"AbstractMapBasedMultimap/NavigableKeySet",388),I(541,28,wy,I$),l.Fc=function(e){var n,r;return al(this),r=this.d.dc(),n=this.d.Fc(e),n&&(++this.f.d,r&&qM(this)),n},l.Gc=function(e){var n,r,s;return e.dc()?!1:(s=(al(this),this.d.gc()),n=this.d.Gc(e),n&&(r=this.d.gc(),this.f.d+=r-s,s==0&&qM(this)),n)},l.$b=function(){var e;e=(al(this),this.d.gc()),e!=0&&(this.d.$b(),this.f.d-=e,Rj(this))},l.Hc=function(e){return al(this),this.d.Hc(e)},l.Ic=function(e){return al(this),this.d.Ic(e)},l.Fb=function(e){return e===this?!0:(al(this),yi(this.d,e))},l.Hb=function(){return al(this),Hi(this.d)},l.Kc=function(){return al(this),new Cvt(this)},l.Mc=function(e){var n;return al(this),n=this.d.Mc(e),n&&(--this.f.d,Rj(this)),n},l.gc=function(){return zVt(this)},l.Nc=function(){return al(this),this.d.Nc()},l.Ib=function(){return al(this),$o(this.d)},P(Ye,"AbstractMapBasedMultimap/WrappedCollection",541);var ph=Yi(pr,"List");I(728,541,{20:1,28:1,14:1,15:1},twt),l.ad=function(e){e4(this,e)},l.Nc=function(){return al(this),this.d.Nc()},l.Vc=function(e,n){var r;al(this),r=this.d.dc(),u(this.d,15).Vc(e,n),++this.a.d,r&&qM(this)},l.Wc=function(e,n){var r,s,o;return n.dc()?!1:(o=(al(this),this.d.gc()),r=u(this.d,15).Wc(e,n),r&&(s=this.d.gc(),this.a.d+=s-o,o==0&&qM(this)),r)},l.Xb=function(e){return al(this),u(this.d,15).Xb(e)},l.Xc=function(e){return al(this),u(this.d,15).Xc(e)},l.Yc=function(){return al(this),new yUt(this)},l.Zc=function(e){return al(this),new OXt(this,e)},l.$c=function(e){var n;return al(this),n=u(this.d,15).$c(e),--this.a.d,Rj(this),n},l._c=function(e,n){return al(this),u(this.d,15)._c(e,n)},l.bd=function(e,n){return al(this),TZt(this.a,this.e,u(this.d,15).bd(e,n),this.b?this.b:this)},P(Ye,"AbstractMapBasedMultimap/WrappedList",728),I(1096,728,{20:1,28:1,14:1,15:1,54:1},lWt),P(Ye,"AbstractMapBasedMultimap/RandomAccessWrappedList",1096),I(620,1,ra,Cvt),l.Nb=function(e){pa(this,e)},l.Ob=function(){return E8(this),this.b.Ob()},l.Pb=function(){return E8(this),this.b.Pb()},l.Qb=function(){WUt(this)},P(Ye,"AbstractMapBasedMultimap/WrappedCollection/WrappedIterator",620),I(729,620,Jd,yUt,OXt),l.Qb=function(){WUt(this)},l.Rb=function(e){var n;n=zVt(this.a)==0,(E8(this),u(this.b,125)).Rb(e),++this.a.a.d,n&&qM(this.a)},l.Sb=function(){return(E8(this),u(this.b,125)).Sb()},l.Tb=function(){return(E8(this),u(this.b,125)).Tb()},l.Ub=function(){return(E8(this),u(this.b,125)).Ub()},l.Vb=function(){return(E8(this),u(this.b,125)).Vb()},l.Wb=function(e){(E8(this),u(this.b,125)).Wb(e)},P(Ye,"AbstractMapBasedMultimap/WrappedList/WrappedListIterator",729),I(727,541,Whe,U2t),l.Nc=function(){return al(this),this.d.Nc()},P(Ye,"AbstractMapBasedMultimap/WrappedSortedSet",727),I(1095,727,Mxt,fUt),P(Ye,"AbstractMapBasedMultimap/WrappedNavigableSet",1095),I(1094,541,ju,TWt),l.Nc=function(){return al(this),this.d.Nc()},P(Ye,"AbstractMapBasedMultimap/WrappedSet",1094),I(1103,1,{},B),l.Kb=function(e){return Nsn(u(e,42))},P(Ye,"AbstractMapBasedMultimap/lambda$1$Type",1103),I(1102,1,{},ett),l.Kb=function(e){return new _v(this.a,e)},P(Ye,"AbstractMapBasedMultimap/lambda$2$Type",1102);var M2=Yi(pr,"Map/Entry");I(345,1,Mq),l.Fb=function(e){var n;return Et(e,42)?(n=u(e,42),fd(this.cd(),n.cd())&&fd(this.dd(),n.dd())):!1},l.Hb=function(){var e,n;return e=this.cd(),n=this.dd(),(e==null?0:Hi(e))^(n==null?0:Hi(n))},l.ed=function(e){throw rt(new Or)},l.Ib=function(){return this.cd()+"="+this.dd()},P(Ye,Khe,345),I(1988,28,wy),l.$b=function(){this.fd().$b()},l.Hc=function(e){var n;return Et(e,42)?(n=u(e,42),gin(this.fd(),n.cd(),n.dd())):!1},l.Mc=function(e){var n;return Et(e,42)?(n=u(e,42),iZt(this.fd(),n.cd(),n.dd())):!1},l.gc=function(){return this.fd().d},P(Ye,"Multimaps/Entries",1988),I(733,1988,wy,QL),l.Kc=function(){return this.a.kc()},l.fd=function(){return this.a},l.Nc=function(){return this.a.lc()},P(Ye,"AbstractMultimap/Entries",733),I(734,733,ju,zpt),l.Nc=function(){return this.a.lc()},l.Fb=function(e){return F4t(this,e)},l.Hb=function(){return sne(this)},P(Ye,"AbstractMultimap/EntrySet",734),I(735,28,wy,M3),l.$b=function(){this.a.$b()},l.Hc=function(e){return Zcn(this.a,e)},l.Kc=function(){return this.a.nc()},l.gc=function(){return this.a.d},l.Nc=function(){return this.a.oc()},P(Ye,"AbstractMultimap/Values",735),I(1989,28,{835:1,20:1,28:1,14:1}),l.Jc=function(e){Ar(e),Y3(this).Jc(new dtt(e))},l.Nc=function(){var e;return e=Y3(this).Nc(),Mst(e,new wt,64|e.qd()&1296,this.a.d)},l.Fc=function(e){return Xpt(),!0},l.Gc=function(e){return Ar(this),Ar(e),Et(e,543)?min(u(e,835)):!e.dc()&&Xrt(this,e.Kc())},l.Hc=function(e){var n;return n=u(ny($x(this.a),e),14),(n?n.gc():0)>0},l.Fb=function(e){return fbn(this,e)},l.Hb=function(){return Hi(Y3(this))},l.dc=function(){return Y3(this).dc()},l.Mc=function(e){return Toe(this,e,1)>0},l.Ib=function(){return $o(Y3(this))},P(Ye,"AbstractMultiset",1989),I(1991,1970,ju),l.$b=function(){Q$(this.a.a)},l.Hc=function(e){var n,r;return Et(e,492)?(r=u(e,416),u(r.a.dd(),14).gc()<=0?!1:(n=NQt(this.a,r.a.cd()),n==u(r.a.dd(),14).gc())):!1},l.Mc=function(e){var n,r,s,o;return Et(e,492)&&(r=u(e,416),n=r.a.cd(),s=u(r.a.dd(),14).gc(),s!=0)?(o=this.a,tpn(o,n,s)):!1},P(Ye,"Multisets/EntrySet",1991),I(1109,1991,ju,ZL),l.Kc=function(){return new Bqt(EYt($x(this.a.a)).Kc())},l.gc=function(){return $x(this.a.a).gc()},P(Ye,"AbstractMultiset/EntrySet",1109),I(619,726,y2),l.hc=function(){return this.gd()},l.jc=function(){return this.hd()},l.cc=function(e){return this.jd(e)},l.fc=function(e){return this.kd(e)},l.Zb=function(){var e;return e=this.f,e||(this.f=this.ac())},l.hd=function(){return vn(),vn(),UH},l.Fb=function(e){return Eit(this,e)},l.jd=function(e){return u(Ai(this,e),21)},l.kd=function(e){return u($I(this,e),21)},l.mc=function(e){return vn(),new Qk(u(e,21))},l.pc=function(e,n){return new TWt(this,e,u(n,21))},P(Ye,"AbstractSetMultimap",619),I(1657,619,y2),l.hc=function(){return new Lp(this.b)},l.gd=function(){return new Lp(this.b)},l.jc=function(){return pwt(new Lp(this.b))},l.hd=function(){return pwt(new Lp(this.b))},l.cc=function(e){return u(u(Ai(this,e),21),84)},l.jd=function(e){return u(u(Ai(this,e),21),84)},l.fc=function(e){return u(u($I(this,e),21),84)},l.kd=function(e){return u(u($I(this,e),21),84)},l.mc=function(e){return Et(e,271)?pwt(u(e,271)):(vn(),new C2t(u(e,84)))},l.Zb=function(){var e;return e=this.f,e||(this.f=Et(this.c,171)?new yj(this,u(this.c,171)):Et(this.c,161)?new RM(this,u(this.c,161)):new n8(this,this.c))},l.pc=function(e,n){return Et(n,271)?new fUt(this,e,u(n,271)):new U2t(this,e,u(n,84))},P(Ye,"AbstractSortedSetMultimap",1657),I(1658,1657,y2),l.Zb=function(){var e;return e=this.f,u(u(e||(this.f=Et(this.c,171)?new yj(this,u(this.c,171)):Et(this.c,161)?new RM(this,u(this.c,161)):new n8(this,this.c)),161),171)},l.ec=function(){var e;return e=this.i,u(u(e||(this.i=Et(this.c,171)?new e8(this,u(this.c,171)):Et(this.c,161)?new gM(this,u(this.c,161)):new W3(this,this.c)),84),271)},l.bc=function(){return Et(this.c,171)?new e8(this,u(this.c,171)):Et(this.c,161)?new gM(this,u(this.c,161)):new W3(this,this.c)},P(Ye,"AbstractSortedKeySortedSetMultimap",1658),I(2010,1,{1947:1}),l.Fb=function(e){return H1n(this,e)},l.Hb=function(){var e;return vyt((e=this.g,e||(this.g=new v9(this))))},l.Ib=function(){var e;return oae((e=this.f,e||(this.f=new v2t(this))))},P(Ye,"AbstractTable",2010),I(665,N1,ju,v9),l.$b=function(){Wqt()},l.Hc=function(e){var n,r;return Et(e,468)?(n=u(e,682),r=u(ny(UYt(this.a),Dp(n.c.e,n.b)),83),!!r&&Uyt(r.vc(),new _v(Dp(n.c.c,n.a),Wx(n.c,n.b,n.a)))):!1},l.Kc=function(){return Snn(this.a)},l.Mc=function(e){var n,r;return Et(e,468)?(n=u(e,682),r=u(ny(UYt(this.a),Dp(n.c.e,n.b)),83),!!r&&Cun(r.vc(),new _v(Dp(n.c.c,n.a),Wx(n.c,n.b,n.a)))):!1},l.gc=function(){return iYt(this.a)},l.Nc=function(){return kin(this.a)},P(Ye,"AbstractTable/CellSet",665),I(1928,28,wy,ntt),l.$b=function(){Wqt()},l.Hc=function(e){return Ndn(this.a,e)},l.Kc=function(){return Ann(this.a)},l.gc=function(){return iYt(this.a)},l.Nc=function(){return oZt(this.a)},P(Ye,"AbstractTable/Values",1928),I(1632,1631,y2),P(Ye,"ArrayListMultimapGwtSerializationDependencies",1632),I(513,1632,y2,set,$wt),l.hc=function(){return new Yc(this.a)},l.a=0,P(Ye,"ArrayListMultimap",513),I(664,2010,{664:1,1947:1,3:1},Noe),P(Ye,"ArrayTable",664),I(1924,386,AE,zUt),l.Xb=function(e){return new xyt(this.a,e)},P(Ye,"ArrayTable/1",1924),I(1925,1,{},GB),l.ld=function(e){return new xyt(this.a,e)},P(Ye,"ArrayTable/1methodref$getCell$Type",1925),I(2011,1,{682:1}),l.Fb=function(e){var n;return e===this?!0:Et(e,468)?(n=u(e,682),fd(Dp(this.c.e,this.b),Dp(n.c.e,n.b))&&fd(Dp(this.c.c,this.a),Dp(n.c.c,n.a))&&fd(Wx(this.c,this.b,this.a),Wx(n.c,n.b,n.a))):!1},l.Hb=function(){return vz(ct(ot(Xn,1),Ie,1,5,[Dp(this.c.e,this.b),Dp(this.c.c,this.a),Wx(this.c,this.b,this.a)]))},l.Ib=function(){return"("+Dp(this.c.e,this.b)+","+Dp(this.c.c,this.a)+")="+Wx(this.c,this.b,this.a)},P(Ye,"Tables/AbstractCell",2011),I(468,2011,{468:1,682:1},xyt),l.a=0,l.b=0,l.d=0,P(Ye,"ArrayTable/2",468),I(1927,1,{},ox),l.ld=function(e){return wte(this.a,e)},P(Ye,"ArrayTable/2methodref$getValue$Type",1927),I(1926,386,AE,qUt),l.Xb=function(e){return wte(this.a,e)},P(Ye,"ArrayTable/3",1926),I(1979,1967,bw),l.$b=function(){Oj(this.kc())},l.vc=function(){return new ux(this)},l.lc=function(){return new yXt(this.kc(),this.gc())},P(Ye,"Maps/IteratorBasedAbstractMap",1979),I(828,1979,bw),l.$b=function(){throw rt(new Or)},l._b=function(e){return fHt(this.c,e)},l.kc=function(){return new HUt(this,this.c.b.c.gc())},l.lc=function(){return _nt(this.c.b.c.gc(),16,new dv(this))},l.xc=function(e){var n;return n=u(wC(this.c,e),19),n?this.nd(n.a):null},l.dc=function(){return this.c.b.c.dc()},l.ec=function(){return Nnt(this.c)},l.zc=function(e,n){var r;if(r=u(wC(this.c,e),19),!r)throw rt(new Pn(this.md()+" "+e+" not in "+Nnt(this.c)));return this.od(r.a,n)},l.Bc=function(e){throw rt(new Or)},l.gc=function(){return this.c.b.c.gc()},P(Ye,"ArrayTable/ArrayMap",828),I(1923,1,{},dv),l.ld=function(e){return KYt(this.a,e)},P(Ye,"ArrayTable/ArrayMap/0methodref$getEntry$Type",1923),I(1921,345,Mq,UHt),l.cd=function(){return HXe(this.a,this.b)},l.dd=function(){return this.a.nd(this.b)},l.ed=function(e){return this.a.od(this.b,e)},l.b=0,P(Ye,"ArrayTable/ArrayMap/1",1921),I(1922,386,AE,HUt),l.Xb=function(e){return KYt(this.a,e)},P(Ye,"ArrayTable/ArrayMap/2",1922),I(1920,828,bw,PYt),l.md=function(){return"Column"},l.nd=function(e){return Wx(this.b,this.a,e)},l.od=function(e,n){return Gne(this.b,this.a,e,n)},l.a=0,P(Ye,"ArrayTable/Row",1920),I(829,828,bw,v2t),l.nd=function(e){return new PYt(this.a,e)},l.zc=function(e,n){return u(n,83),_Ke()},l.od=function(e,n){return u(n,83),SKe()},l.md=function(){return"Row"},P(Ye,"ArrayTable/RowMap",829),I(1120,1,Mh,WHt),l.qd=function(){return this.a.qd()&-262},l.rd=function(){return this.a.rd()},l.Nb=function(e){this.a.Nb(new qHt(e,this.b))},l.sd=function(e){return this.a.sd(new zHt(e,this.b))},P(Ye,"CollectSpliterators/1",1120),I(1121,1,Un,zHt),l.td=function(e){this.a.td(this.b.Kb(e))},P(Ye,"CollectSpliterators/1/lambda$0$Type",1121),I(1122,1,Un,qHt),l.td=function(e){this.a.td(this.b.Kb(e))},P(Ye,"CollectSpliterators/1/lambda$1$Type",1122),I(1123,1,Mh,wZt),l.qd=function(){return this.a},l.rd=function(){return this.d&&(this.b=kUt(this.b,this.d.rd())),kUt(this.b,0)},l.Nb=function(e){this.d&&(this.d.Nb(e),this.d=null),this.c.Nb(new $Ht(this.e,e)),this.b=0},l.sd=function(e){for(;;){if(this.d&&this.d.sd(e))return aC(this.b,Iq)&&(this.b=Yp(this.b,1)),!0;if(this.d=null,!this.c.sd(new HHt(this,this.e)))return!1}},l.a=0,l.b=0,P(Ye,"CollectSpliterators/1FlatMapSpliterator",1123),I(1124,1,Un,HHt),l.td=function(e){UQe(this.a,this.b,e)},P(Ye,"CollectSpliterators/1FlatMapSpliterator/lambda$0$Type",1124),I(1125,1,Un,$Ht),l.td=function(e){MXe(this.b,this.a,e)},P(Ye,"CollectSpliterators/1FlatMapSpliterator/lambda$1$Type",1125),I(1117,1,Mh,tKt),l.qd=function(){return 16464|this.b},l.rd=function(){return this.a.rd()},l.Nb=function(e){this.a.xe(new VHt(e,this.c))},l.sd=function(e){return this.a.ye(new GHt(e,this.c))},l.b=0,P(Ye,"CollectSpliterators/1WithCharacteristics",1117),I(1118,1,AD,GHt),l.ud=function(e){this.a.td(this.b.ld(e))},P(Ye,"CollectSpliterators/1WithCharacteristics/lambda$0$Type",1118),I(1119,1,AD,VHt),l.ud=function(e){this.a.td(this.b.ld(e))},P(Ye,"CollectSpliterators/1WithCharacteristics/lambda$1$Type",1119),I(245,1,Pat),l.wd=function(e){return this.vd(u(e,245))},l.vd=function(e){var n;return e==(Xtt(),but)?1:e==(Qtt(),put)?-1:(n=(Mj(),SI(this.a,e.a)),n!=0?n:Et(this,519)==Et(e,519)?0:Et(this,519)?1:-1)},l.zd=function(){return this.a},l.Fb=function(e){return T3t(this,e)},P(Ye,"Cut",245),I(1761,245,Pat,Xqt),l.vd=function(e){return e==this?0:1},l.xd=function(e){throw rt(new Ept)},l.yd=function(e){e.a+="+∞)"},l.zd=function(){throw rt(new Fo(Xhe))},l.Hb=function(){return qd(),O3t(this)},l.Ad=function(e){return!1},l.Ib=function(){return"+∞"};var put;P(Ye,"Cut/AboveAll",1761),I(519,245,{245:1,519:1,3:1,35:1},KUt),l.xd=function(e){hc((e.a+="(",e),this.a)},l.yd=function(e){Rp(hc(e,this.a),93)},l.Hb=function(){return~Hi(this.a)},l.Ad=function(e){return Mj(),SI(this.a,e)<0},l.Ib=function(){return"/"+this.a+"\\"},P(Ye,"Cut/AboveValue",519),I(1760,245,Pat,Qqt),l.vd=function(e){return e==this?0:-1},l.xd=function(e){e.a+="(-∞"},l.yd=function(e){throw rt(new Ept)},l.zd=function(){throw rt(new Fo(Xhe))},l.Hb=function(){return qd(),O3t(this)},l.Ad=function(e){return!0},l.Ib=function(){return"-∞"};var but;P(Ye,"Cut/BelowAll",1760),I(1762,245,Pat,YUt),l.xd=function(e){hc((e.a+="[",e),this.a)},l.yd=function(e){Rp(hc(e,this.a),41)},l.Hb=function(){return Hi(this.a)},l.Ad=function(e){return Mj(),SI(this.a,e)<=0},l.Ib=function(){return"\\"+this.a+"/"},P(Ye,"Cut/BelowValue",1762),I(537,1,t0),l.Jc=function(e){va(this,e)},l.Ib=function(){return eln(u(r$(this,"use Optional.orNull() instead of Optional.or(null)"),20).Kc())},P(Ye,"FluentIterable",537),I(433,537,t0,uC),l.Kc=function(){return new ar(lr(this.a.Kc(),new z))},P(Ye,"FluentIterable/2",433),I(1046,537,t0,JVt),l.Kc=function(){return Bp(this)},P(Ye,"FluentIterable/3",1046),I(708,386,AE,w2t),l.Xb=function(e){return this.a[e].Kc()},P(Ye,"FluentIterable/3/1",708),I(1972,1,{}),l.Ib=function(){return $o(this.Bd().b)},P(Ye,"ForwardingObject",1972),I(1973,1972,Qhe),l.Bd=function(){return this.Cd()},l.Jc=function(e){va(this,e)},l.Lc=function(){return this.Oc()},l.Nc=function(){return new _n(this,0)},l.Oc=function(){return new Tn(null,this.Nc())},l.Fc=function(e){return this.Cd(),bHt()},l.Gc=function(e){return this.Cd(),vHt()},l.$b=function(){this.Cd(),wHt()},l.Hc=function(e){return this.Cd().Hc(e)},l.Ic=function(e){return this.Cd().Ic(e)},l.dc=function(){return this.Cd().b.dc()},l.Kc=function(){return this.Cd().Kc()},l.Mc=function(e){return this.Cd(),mHt()},l.gc=function(){return this.Cd().b.gc()},l.Pc=function(){return this.Cd().Pc()},l.Qc=function(e){return this.Cd().Qc(e)},P(Ye,"ForwardingCollection",1973),I(1980,28,Ixt),l.Kc=function(){return this.Ed()},l.Fc=function(e){throw rt(new Or)},l.Gc=function(e){throw rt(new Or)},l.$b=function(){throw rt(new Or)},l.Hc=function(e){return e!=null&&ry(this,e,!1)},l.Dd=function(){switch(this.gc()){case 0:return Gm(),Gm(),vut;case 1:return Gm(),new Snt(Ar(this.Ed().Pb()));default:return new FYt(this,this.Pc())}},l.Mc=function(e){throw rt(new Or)},P(Ye,"ImmutableCollection",1980),I(712,1980,Ixt,xpt),l.Kc=function(){return Kx(this.a.Kc())},l.Hc=function(e){return e!=null&&this.a.Hc(e)},l.Ic=function(e){return this.a.Ic(e)},l.dc=function(){return this.a.dc()},l.Ed=function(){return Kx(this.a.Kc())},l.gc=function(){return this.a.gc()},l.Pc=function(){return this.a.Pc()},l.Qc=function(e){return this.a.Qc(e)},l.Ib=function(){return $o(this.a)},P(Ye,"ForwardingImmutableCollection",712),I(152,1980,S_),l.Kc=function(){return this.Ed()},l.Yc=function(){return this.Fd(0)},l.Zc=function(e){return this.Fd(e)},l.ad=function(e){e4(this,e)},l.Nc=function(){return new _n(this,16)},l.bd=function(e,n){return this.Gd(e,n)},l.Vc=function(e,n){throw rt(new Or)},l.Wc=function(e,n){throw rt(new Or)},l.Fb=function(e){return Xpn(this,e)},l.Hb=function(){return ocn(this)},l.Xc=function(e){return e==null?-1:yfn(this,e)},l.Ed=function(){return this.Fd(0)},l.Fd=function(e){return O2t(this,e)},l.$c=function(e){throw rt(new Or)},l._c=function(e,n){throw rt(new Or)},l.Gd=function(e,n){var r;return yz((r=new iGt(this),new Kd(r,e,n)))};var vut;P(Ye,"ImmutableList",152),I(2006,152,S_),l.Kc=function(){return Kx(this.Hd().Kc())},l.bd=function(e,n){return yz(this.Hd().bd(e,n))},l.Hc=function(e){return e!=null&&this.Hd().Hc(e)},l.Ic=function(e){return this.Hd().Ic(e)},l.Fb=function(e){return yi(this.Hd(),e)},l.Xb=function(e){return Dp(this,e)},l.Hb=function(){return Hi(this.Hd())},l.Xc=function(e){return this.Hd().Xc(e)},l.dc=function(){return this.Hd().dc()},l.Ed=function(){return Kx(this.Hd().Kc())},l.gc=function(){return this.Hd().gc()},l.Gd=function(e,n){return yz(this.Hd().bd(e,n))},l.Pc=function(){return this.Hd().Qc(Pt(Xn,Ie,1,this.Hd().gc(),5,1))},l.Qc=function(e){return this.Hd().Qc(e)},l.Ib=function(){return $o(this.Hd())},P(Ye,"ForwardingImmutableList",2006),I(714,1,LE),l.vc=function(){return Pv(this)},l.wc=function(e){UC(this,e)},l.ec=function(){return Nnt(this)},l.yc=function(e,n,r){return $it(this,e,n,r)},l.Cc=function(){return this.Ld()},l.$b=function(){throw rt(new Or)},l._b=function(e){return this.xc(e)!=null},l.uc=function(e){return this.Ld().Hc(e)},l.Jd=function(){return new zzt(this)},l.Kd=function(){return new qzt(this)},l.Fb=function(e){return Jcn(this,e)},l.Hb=function(){return Pv(this).Hb()},l.dc=function(){return this.gc()==0},l.zc=function(e,n){return AKe()},l.Bc=function(e){throw rt(new Or)},l.Ib=function(){return I0n(this)},l.Ld=function(){return this.e?this.e:this.e=this.Kd()},l.c=null,l.d=null,l.e=null;var hge;P(Ye,"ImmutableMap",714),I(715,714,LE),l._b=function(e){return fHt(this,e)},l.uc=function(e){return cGt(this.b,e)},l.Id=function(){return Bre(new m9(this))},l.Jd=function(){return Bre(bXt(this.b))},l.Kd=function(){return hd(),new xpt(pXt(this.b))},l.Fb=function(e){return uGt(this.b,e)},l.xc=function(e){return wC(this,e)},l.Hb=function(){return Hi(this.b.c)},l.dc=function(){return this.b.c.dc()},l.gc=function(){return this.b.c.gc()},l.Ib=function(){return $o(this.b.c)},P(Ye,"ForwardingImmutableMap",715),I(1974,1973,Fat),l.Bd=function(){return this.Md()},l.Cd=function(){return this.Md()},l.Nc=function(){return new _n(this,1)},l.Fb=function(e){return e===this||this.Md().Fb(e)},l.Hb=function(){return this.Md().Hb()},P(Ye,"ForwardingSet",1974),I(1069,1974,Fat,m9),l.Bd=function(){return x8(this.a.b)},l.Cd=function(){return x8(this.a.b)},l.Hc=function(e){if(Et(e,42)&&u(e,42).cd()==null)return!1;try{return oGt(x8(this.a.b),e)}catch(n){if(n=Wi(n),Et(n,205))return!1;throw rt(n)}},l.Md=function(){return x8(this.a.b)},l.Qc=function(e){var n;return n=QXt(x8(this.a.b),e),x8(this.a.b).b.gc()<n.length&&Ji(n,x8(this.a.b).b.gc(),null),n},P(Ye,"ForwardingImmutableMap/1",1069),I(1981,1980,ME),l.Kc=function(){return this.Ed()},l.Nc=function(){return new _n(this,1)},l.Fb=function(e){return F4t(this,e)},l.Hb=function(){return sne(this)},P(Ye,"ImmutableSet",1981),I(703,1981,ME),l.Kc=function(){return Kx(new A(this.a.b.Kc()))},l.Hc=function(e){return e!=null&&pM(this.a,e)},l.Ic=function(e){return sGt(this.a,e)},l.Hb=function(){return Hi(this.a.b)},l.dc=function(){return this.a.b.dc()},l.Ed=function(){return Kx(new A(this.a.b.Kc()))},l.gc=function(){return this.a.b.gc()},l.Pc=function(){return this.a.b.Pc()},l.Qc=function(e){return aGt(this.a,e)},l.Ib=function(){return $o(this.a.b)},P(Ye,"ForwardingImmutableSet",703),I(1975,1974,Zhe),l.Bd=function(){return this.b},l.Cd=function(){return this.b},l.Md=function(){return this.b},l.Nc=function(){return new FR(this)},P(Ye,"ForwardingSortedSet",1975),I(533,1979,LE,Hz),l.Ac=function(e){VC(this,e)},l.Cc=function(){var e;return e=this.d,new Qet(e||(this.d=new cx(this)))},l.$b=function(){cI(this)},l._b=function(e){return!!HC(this,e,Sr(Ca(e0,Wd(Sr(Ca(e==null?0:Hi(e),n0)),15))))},l.uc=function(e){return pee(this,e)},l.kc=function(){return new GUt(this,this)},l.wc=function(e){cQt(this,e)},l.xc=function(e){return t4(this,e)},l.ec=function(){return new Zet(this)},l.zc=function(e,n){return vq(this,e,n)},l.Bc=function(e){var n;return n=HC(this,e,Sr(Ca(e0,Wd(Sr(Ca(e==null?0:Hi(e),n0)),15)))),n?(v4(this,n),n.e=null,n.c=null,n.i):null},l.gc=function(){return this.i},l.pd=function(){var e;return e=this.d,new Qet(e||(this.d=new cx(this)))},l.f=0,l.g=0,l.i=0,P(Ye,"HashBiMap",533),I(534,1,ra),l.Nb=function(e){pa(this,e)},l.Ob=function(){return SZt(this)},l.Pb=function(){var e;if(!SZt(this))throw rt(new lc);return e=this.c,this.c=e.c,this.f=e,--this.d,this.Nd(e)},l.Qb=function(){if(this.e.g!=this.b)throw rt(new eh);n4(!!this.f),v4(this.e,this.f),this.b=this.e.g,this.f=null},l.b=0,l.d=0,l.f=null,P(Ye,"HashBiMap/Itr",534),I(1011,534,ra,GUt),l.Nd=function(e){return new XHt(this,e)},P(Ye,"HashBiMap/1",1011),I(1012,345,Mq,XHt),l.cd=function(){return this.a.g},l.dd=function(){return this.a.i},l.ed=function(e){var n,r,s;return r=this.a.i,s=Sr(Ca(e0,Wd(Sr(Ca(e==null?0:Hi(e),n0)),15))),s==this.a.f&&(Gt(e)===Gt(r)||e!=null&&yi(e,r))?e:($ne(!GC(this.b.a,e,s),e),v4(this.b.a,this.a),n=new Xj(this.a.g,this.a.a,e,s),oD(this.b.a,n,this.a),this.a.e=null,this.a.c=null,this.b.b=this.b.a.g,this.b.f==this.a&&(this.b.f=n),this.a=n,r)},P(Ye,"HashBiMap/1/MapEntry",1012),I(238,345,{345:1,238:1,3:1,42:1},_v),l.cd=function(){return this.g},l.dd=function(){return this.i},l.ed=function(e){throw rt(new Or)},P(Ye,"ImmutableEntry",238),I(317,238,{345:1,317:1,238:1,3:1,42:1},Xj),l.a=0,l.f=0;var wut=P(Ye,"HashBiMap/BiEntry",317);I(610,1979,LE,cx),l.Ac=function(e){VC(this,e)},l.Cc=function(){return new Zet(this.a)},l.$b=function(){cI(this.a)},l._b=function(e){return pee(this.a,e)},l.kc=function(){return new VUt(this,this.a)},l.wc=function(e){Ar(e),cQt(this.a,new JL(e))},l.xc=function(e){return tz(this,e)},l.ec=function(){return new Qet(this)},l.zc=function(e,n){return emn(this.a,e,n,!1)},l.Bc=function(e){var n;return n=GC(this.a,e,Sr(Ca(e0,Wd(Sr(Ca(e==null?0:Hi(e),n0)),15)))),n?(v4(this.a,n),n.e=null,n.c=null,n.g):null},l.gc=function(){return this.a.i},l.pd=function(){return new Zet(this.a)},P(Ye,"HashBiMap/Inverse",610),I(1008,534,ra,VUt),l.Nd=function(e){return new QHt(this,e)},P(Ye,"HashBiMap/Inverse/1",1008),I(1009,345,Mq,QHt),l.cd=function(){return this.a.i},l.dd=function(){return this.a.g},l.ed=function(e){var n,r,s;return s=this.a.g,n=Sr(Ca(e0,Wd(Sr(Ca(e==null?0:Hi(e),n0)),15))),n==this.a.a&&(Gt(e)===Gt(s)||e!=null&&yi(e,s))?e:($ne(!HC(this.b.a.a,e,n),e),v4(this.b.a.a,this.a),r=new Xj(e,n,this.a.i,this.a.f),this.a=r,oD(this.b.a.a,r,null),this.b.b=this.b.a.a.g,s)},P(Ye,"HashBiMap/Inverse/1/InverseEntry",1009),I(611,532,ju,Qet),l.Kc=function(){return new Nqt(this.a.a)},l.Mc=function(e){var n;return n=GC(this.a.a,e,Sr(Ca(e0,Wd(Sr(Ca(e==null?0:Hi(e),n0)),15)))),n?(v4(this.a.a,n),!0):!1},P(Ye,"HashBiMap/Inverse/InverseKeySet",611),I(1007,534,ra,Nqt),l.Nd=function(e){return e.i},P(Ye,"HashBiMap/Inverse/InverseKeySet/1",1007),I(1010,1,{},JL),l.Od=function(e,n){aKe(this.a,e,n)},P(Ye,"HashBiMap/Inverse/lambda$0$Type",1010),I(609,532,ju,Zet),l.Kc=function(){return new Pqt(this.a)},l.Mc=function(e){var n;return n=HC(this.a,e,Sr(Ca(e0,Wd(Sr(Ca(e==null?0:Hi(e),n0)),15)))),n?(v4(this.a,n),n.e=null,n.c=null,!0):!1},P(Ye,"HashBiMap/KeySet",609),I(1006,534,ra,Pqt),l.Nd=function(e){return e.g},P(Ye,"HashBiMap/KeySet/1",1006),I(1093,619,y2),P(Ye,"HashMultimapGwtSerializationDependencies",1093),I(265,1093,y2,Hv),l.hc=function(){return new xR(Qm(this.a))},l.gd=function(){return new xR(Qm(this.a))},l.a=2,P(Ye,"HashMultimap",265),I(1999,152,S_),l.Hc=function(e){return this.Pd().Hc(e)},l.dc=function(){return this.Pd().dc()},l.gc=function(){return this.Pd().gc()},P(Ye,"ImmutableAsList",1999),I(1931,715,LE),l.Ld=function(){return hd(),new xx(this.a)},l.Cc=function(){return hd(),new xx(this.a)},l.pd=function(){return hd(),new xx(this.a)},P(Ye,"ImmutableBiMap",1931),I(1977,1,{}),P(Ye,"ImmutableCollection/Builder",1977),I(1022,703,ME,Fqt),P(Ye,"ImmutableEnumSet",1022),I(969,386,AE,JWt),l.Xb=function(e){return this.a.Xb(e)},P(Ye,"ImmutableList/1",969),I(968,1977,{},OWt),P(Ye,"ImmutableList/Builder",968),I(614,198,SE,tM),l.Ob=function(){return this.a.Ob()},l.Pb=function(){return u(this.a.Pb(),42).cd()},P(Ye,"ImmutableMap/1",614),I(1041,1,{},j),l.Kb=function(e){return u(e,42).cd()},P(Ye,"ImmutableMap/2methodref$getKey$Type",1041),I(1040,1,{},NWt),P(Ye,"ImmutableMap/Builder",1040),I(2e3,1981,ME),l.Kc=function(){var e;return e=Pv(this.a).Ed(),new tM(e)},l.Dd=function(){return new kpt(this)},l.Jc=function(e){var n,r;for(Ar(e),r=this.gc(),n=0;n<r;n++)e.td(u(ewt(Pv(this.a)).Xb(n),42).cd())},l.Ed=function(){var e;return(e=this.c,e||(this.c=new kpt(this))).Ed()},l.Nc=function(){return _nt(this.gc(),1296,new itt(this))},P(Ye,"IndexedImmutableSet",2e3),I(1180,2e3,ME,zzt),l.Kc=function(){var e;return e=Pv(this.a).Ed(),new tM(e)},l.Hc=function(e){return this.a._b(e)},l.Jc=function(e){Ar(e),UC(this.a,new rtt(e))},l.Ed=function(){var e;return e=Pv(this.a).Ed(),new tM(e)},l.gc=function(){return this.a.gc()},l.Nc=function(){return VM(Pv(this.a).Nc(),new j)},P(Ye,"ImmutableMapKeySet",1180),I(1181,1,{},rtt),l.Od=function(e,n){hd(),this.a.td(e)},P(Ye,"ImmutableMapKeySet/lambda$0$Type",1181),I(1178,1980,Ixt,qzt),l.Kc=function(){return new Ent(this)},l.Hc=function(e){return e!=null&&q1n(new Ent(this),e)},l.Ed=function(){return new Ent(this)},l.gc=function(){return this.a.gc()},l.Nc=function(){return VM(Pv(this.a).Nc(),new R)},P(Ye,"ImmutableMapValues",1178),I(1179,1,{},R),l.Kb=function(e){return u(e,42).dd()},P(Ye,"ImmutableMapValues/0methodref$getValue$Type",1179),I(626,198,SE,Ent),l.Ob=function(){return this.a.Ob()},l.Pb=function(){return u(this.a.Pb(),42).dd()},P(Ye,"ImmutableMapValues/1",626),I(1182,1,{},itt),l.ld=function(e){return RYt(this.a,e)},P(Ye,"IndexedImmutableSet/0methodref$get$Type",1182),I(752,1999,S_,kpt),l.Pd=function(){return this.a},l.Xb=function(e){return RYt(this.a,e)},l.gc=function(){return this.a.a.gc()},P(Ye,"IndexedImmutableSet/1",752),I(44,1,{},z),l.Kb=function(e){return u(e,20).Kc()},l.Fb=function(e){return this===e},P(Ye,"Iterables/10",44),I(1042,537,t0,jKt),l.Jc=function(e){Ar(e),this.b.Jc(new ZHt(this.a,e))},l.Kc=function(){return i2t(this)},P(Ye,"Iterables/4",1042),I(1043,1,Un,ZHt),l.td=function(e){SYe(this.b,this.a,e)},P(Ye,"Iterables/4/lambda$0$Type",1043),I(1044,537,t0,$Kt),l.Jc=function(e){Ar(e),va(this.a,new KHt(e,this.b))},l.Kc=function(){return lr(new er(this.a),this.b)},P(Ye,"Iterables/5",1044),I(1045,1,Un,KHt),l.td=function(e){this.a.td(lUt(e))},P(Ye,"Iterables/5/lambda$0$Type",1045),I(1071,198,SE,stt),l.Ob=function(){return this.a.Ob()},l.Pb=function(){return this.a.Pb()},P(Ye,"Iterators/1",1071),I(1072,699,SE,YHt),l.Yb=function(){for(var e;this.b.Ob();)if(e=this.b.Pb(),this.a.Lb(e))return e;return this.e=2,null},P(Ye,"Iterators/5",1072),I(487,1,ra),l.Nb=function(e){pa(this,e)},l.Ob=function(){return this.b.Ob()},l.Pb=function(){return this.Qd(this.b.Pb())},l.Qb=function(){this.b.Qb()},P(Ye,"TransformedIterator",487),I(1073,487,ra,UUt),l.Qd=function(e){return this.a.Kb(e)},P(Ye,"Iterators/6",1073),I(717,198,SE,UB),l.Ob=function(){return!this.a},l.Pb=function(){if(this.a)throw rt(new lc);return this.a=!0,this.b},l.a=!1,P(Ye,"Iterators/9",717),I(1070,386,AE,uYt),l.Xb=function(e){return this.a[this.b+e]},l.b=0;var fge;P(Ye,"Iterators/ArrayItr",1070),I(39,1,{39:1,47:1},ar),l.Nb=function(e){pa(this,e)},l.Ob=function(){return zr(this)},l.Pb=function(){return Lr(this)},l.Qb=function(){n4(!!this.c),this.c.Qb(),this.c=null},P(Ye,"Iterators/ConcatenatedIterator",39),I(22,1,{3:1,35:1,22:1}),l.wd=function(e){return $qt(this,u(e,22))},l.Fb=function(e){return this===e},l.Hb=function(){return Iv(this)},l.Ib=function(){return snt(this)},l.g=0;var Hr=P(Xo,"Enum",22);I(538,22,{538:1,3:1,35:1,22:1,47:1},XUt),l.Nb=function(e){pa(this,e)},l.Ob=function(){return!1},l.Pb=function(){throw rt(new lc)},l.Qb=function(){n4(!1)};var mut,dge=jr(Ye,"Iterators/EmptyModifiableIterator",538,Hr,xen,nQe),gge;I(1834,619,y2),P(Ye,"LinkedHashMultimapGwtSerializationDependencies",1834),I(1835,1834,y2,Sre),l.hc=function(){return new nnt(Qm(this.b))},l.$b=function(){Q$(this),cM(this.a,this.a)},l.gd=function(){return new nnt(Qm(this.b))},l.ic=function(e){return new fre(this,e,this.b)},l.kc=function(){return new y2t(this)},l.lc=function(){var e;return new _n((e=this.g,u(e||(this.g=new zpt(this)),21)),17)},l.ec=function(){var e;return e=this.i,e||(this.i=new W3(this,this.c))},l.nc=function(){return new Upt(new y2t(this))},l.oc=function(){var e;return VM(new _n((e=this.g,u(e||(this.g=new zpt(this)),21)),17),new K)},l.b=2,P(Ye,"LinkedHashMultimap",1835),I(1838,1,{},K),l.Kb=function(e){return u(e,42).dd()},P(Ye,"LinkedHashMultimap/0methodref$getValue$Type",1838),I(824,1,ra,y2t),l.Nb=function(e){pa(this,e)},l.Pb=function(){return zan(this)},l.Ob=function(){return this.a!=this.b.a},l.Qb=function(){n4(!!this.c),iZt(this.b,this.c.g,this.c.i),this.c=null},P(Ye,"LinkedHashMultimap/1",824),I(330,238,{345:1,238:1,330:1,2020:1,3:1,42:1},kwt),l.Rd=function(){return this.f},l.Sd=function(e){this.c=e},l.Td=function(e){this.f=e},l.d=0;var pge=P(Ye,"LinkedHashMultimap/ValueEntry",330);I(1836,1970,{2020:1,20:1,28:1,14:1,21:1},fre),l.Fc=function(e){var n,r,s,o,h;for(h=Sr(Ca(e0,Wd(Sr(Ca(e==null?0:Hi(e),n0)),15))),n=h&this.b.length-1,o=this.b[n],r=o;r;r=r.a)if(r.d==h&&fd(r.i,e))return!1;return s=new kwt(this.c,e,h,o),Kqt(this.d,s),s.f=this,this.d=s,cM(this.g.a.b,s),cM(s,this.g.a),this.b[n]=s,++this.f,++this.e,j1n(this),!0},l.$b=function(){var e,n;for(yM(this.b,null),this.f=0,e=this.a;e!=this;e=e.Rd())n=u(e,330),cM(n.b,n.e);this.a=this,this.d=this,++this.e},l.Hc=function(e){var n,r;for(r=Sr(Ca(e0,Wd(Sr(Ca(e==null?0:Hi(e),n0)),15))),n=this.b[r&this.b.length-1];n;n=n.a)if(n.d==r&&fd(n.i,e))return!0;return!1},l.Jc=function(e){var n;for(Ar(e),n=this.a;n!=this;n=n.Rd())e.td(u(n,330).i)},l.Rd=function(){return this.a},l.Kc=function(){return new iXt(this)},l.Mc=function(e){return ece(this,e)},l.Sd=function(e){this.d=e},l.Td=function(e){this.a=e},l.gc=function(){return this.f},l.e=0,l.f=0,P(Ye,"LinkedHashMultimap/ValueSet",1836),I(1837,1,ra,iXt),l.Nb=function(e){pa(this,e)},l.Ob=function(){return Gvt(this),this.b!=this.c},l.Pb=function(){var e,n;if(Gvt(this),this.b==this.c)throw rt(new lc);return e=u(this.b,330),n=e.i,this.d=e,this.b=e.f,n},l.Qb=function(){Gvt(this),n4(!!this.d),ece(this.c,this.d.i),this.a=this.c.e,this.d=null},l.a=0,P(Ye,"LinkedHashMultimap/ValueSet/1",1837),I(766,1986,y2,XVt),l.Zb=function(){var e;return e=this.f,e||(this.f=new wbt(this))},l.Fb=function(e){return Eit(this,e)},l.cc=function(e){return new het(this,e)},l.fc=function(e){return emt(this,e)},l.$b=function(){qYt(this)},l._b=function(e){return lGt(this,e)},l.ac=function(){return new wbt(this)},l.bc=function(){return new ptt(this)},l.qc=function(e){return new het(this,e)},l.dc=function(){return!this.a},l.rc=function(e){return emt(this,e)},l.gc=function(){return this.d},l.c=0,l.d=0,P(Ye,"LinkedListMultimap",766),I(52,28,IE),l.ad=function(e){e4(this,e)},l.Nc=function(){return new _n(this,16)},l.Vc=function(e,n){throw rt(new yg("Add not supported on this list"))},l.Fc=function(e){return this.Vc(this.gc(),e),!0},l.Wc=function(e,n){var r,s,o;for(On(n),r=!1,o=n.Kc();o.Ob();)s=o.Pb(),this.Vc(e++,s),r=!0;return r},l.$b=function(){this.Ud(0,this.gc())},l.Fb=function(e){return p5t(this,e)},l.Hb=function(){return Syt(this)},l.Xc=function(e){return Ree(this,e)},l.Kc=function(){return new fx(this)},l.Yc=function(){return this.Zc(0)},l.Zc=function(e){return new ha(this,e)},l.$c=function(e){throw rt(new yg("Remove not supported on this list"))},l.Ud=function(e,n){var r,s;for(s=this.Zc(e),r=e;r<n;++r)s.Pb(),s.Qb()},l._c=function(e,n){throw rt(new yg("Set not supported on this list"))},l.bd=function(e,n){return new Kd(this,e,n)},l.j=0,P(pr,"AbstractList",52),I(1964,52,IE),l.Vc=function(e,n){h8(this,e,n)},l.Wc=function(e,n){return gre(this,e,n)},l.Xb=function(e){return Qf(this,e)},l.Kc=function(){return this.Zc(0)},l.$c=function(e){return yst(this,e)},l._c=function(e,n){var r,s;r=this.Zc(e);try{return s=r.Pb(),r.Wb(n),s}catch(o){throw o=Wi(o),Et(o,109)?rt(new mo("Can't set element "+e)):rt(o)}},P(pr,"AbstractSequentialList",1964),I(636,1964,IE,het),l.Zc=function(e){return tWt(this,e)},l.gc=function(){var e;return e=u(Jn(this.a.b,this.b),283),e?e.a:0},P(Ye,"LinkedListMultimap/1",636),I(1297,1970,ju,ptt),l.Hc=function(e){return lGt(this.a,e)},l.Kc=function(){return new tne(this.a)},l.Mc=function(e){return!emt(this.a,e).a.dc()},l.gc=function(){return $9(this.a.b)},P(Ye,"LinkedListMultimap/1KeySetImpl",1297),I(1296,1,ra,tne),l.Nb=function(e){pa(this,e)},l.Ob=function(){return Hvt(this),!!this.c},l.Pb=function(){Hvt(this),E2t(this.c),this.a=this.c,Ns(this.d,this.a.a);do this.c=this.c.b;while(this.c&&!Ns(this.d,this.c.a));return this.a.a},l.Qb=function(){Hvt(this),n4(!!this.a),Oj(new Vrt(this.e,this.a.a)),this.a=null,this.b=this.e.c},l.b=0,P(Ye,"LinkedListMultimap/DistinctKeyIterator",1296),I(283,1,{283:1},Iwt),l.a=0,P(Ye,"LinkedListMultimap/KeyList",283),I(1295,345,Mq,JHt),l.cd=function(){return this.a},l.dd=function(){return this.f},l.ed=function(e){var n;return n=this.f,this.f=e,n},P(Ye,"LinkedListMultimap/Node",1295),I(560,1,Jd,Vrt,Kae),l.Nb=function(e){pa(this,e)},l.Rb=function(e){this.e=G5t(this.f,this.b,e,this.c),++this.d,this.a=null},l.Ob=function(){return!!this.c},l.Sb=function(){return!!this.e},l.Pb=function(){return Bwt(this)},l.Tb=function(){return this.d},l.Ub=function(){return yQt(this)},l.Vb=function(){return this.d-1},l.Qb=function(){n4(!!this.a),this.a!=this.c?(this.e=this.a.e,--this.d):this.c=this.a.c,Ggn(this.f,this.a),this.a=null},l.Wb=function(e){k2t(!!this.a),this.a.f=e},l.d=0,P(Ye,"LinkedListMultimap/ValueForKeyIterator",560),I(1018,52,IE),l.Vc=function(e,n){this.a.Vc(e,n)},l.Wc=function(e,n){return this.a.Wc(e,n)},l.Hc=function(e){return this.a.Hc(e)},l.Xb=function(e){return this.a.Xb(e)},l.$c=function(e){return this.a.$c(e)},l._c=function(e,n){return this.a._c(e,n)},l.gc=function(){return this.a.gc()},P(Ye,"Lists/AbstractListWrapper",1018),I(1019,1018,tfe),P(Ye,"Lists/RandomAccessListWrapper",1019),I(1021,1019,tfe,iGt),l.Zc=function(e){return this.a.Zc(e)},P(Ye,"Lists/1",1021),I(131,52,{131:1,20:1,28:1,52:1,14:1,15:1},Mm),l.Vc=function(e,n){this.a.Vc(v8(this,e),n)},l.$b=function(){this.a.$b()},l.Xb=function(e){return this.a.Xb(bwt(this,e))},l.Kc=function(){return zwt(this,0)},l.Zc=function(e){return zwt(this,e)},l.$c=function(e){return this.a.$c(bwt(this,e))},l.Ud=function(e,n){(hZt(e,n,this.a.gc()),a2(this.a.bd(v8(this,n),v8(this,e)))).$b()},l._c=function(e,n){return this.a._c(bwt(this,e),n)},l.gc=function(){return this.a.gc()},l.bd=function(e,n){return hZt(e,n,this.a.gc()),a2(this.a.bd(v8(this,n),v8(this,e)))},P(Ye,"Lists/ReverseList",131),I(280,131,{131:1,20:1,28:1,52:1,14:1,15:1,54:1},mv),P(Ye,"Lists/RandomAccessReverseList",280),I(1020,1,Jd,tGt),l.Nb=function(e){pa(this,e)},l.Rb=function(e){this.c.Rb(e),this.c.Ub(),this.a=!1},l.Ob=function(){return this.c.Sb()},l.Sb=function(){return this.c.Ob()},l.Pb=function(){return gJt(this)},l.Tb=function(){return v8(this.b,this.c.Tb())},l.Ub=function(){if(!this.c.Ob())throw rt(new lc);return this.a=!0,this.c.Pb()},l.Vb=function(){return v8(this.b,this.c.Tb())-1},l.Qb=function(){n4(this.a),this.c.Qb(),this.a=!1},l.Wb=function(e){k2t(this.a),this.c.Wb(e)},l.a=!1,P(Ye,"Lists/ReverseList/1",1020),I(432,487,ra,D9),l.Qd=function(e){return PR(e)},P(Ye,"Maps/1",432),I(698,487,ra,Upt),l.Qd=function(e){return u(e,42).dd()},P(Ye,"Maps/2",698),I(962,487,ra,JUt),l.Qd=function(e){return new _v(e,eUt(this.a,e))},P(Ye,"Maps/3",962),I(959,1971,ju,ux),l.Jc=function(e){hKe(this.a,e)},l.Kc=function(){return this.a.kc()},l.Rc=function(){return this.a},l.Nc=function(){return this.a.lc()},P(Ye,"Maps/IteratorBasedAbstractMap/1",959),I(960,1,{},gtt),l.Od=function(e,n){this.a.td(e)},P(Ye,"Maps/KeySet/lambda$0$Type",960),I(958,28,wy,rGt),l.$b=function(){this.a.$b()},l.Hc=function(e){return this.a.uc(e)},l.Jc=function(e){Ar(e),this.a.wc(new ctt(e))},l.dc=function(){return this.a.dc()},l.Kc=function(){return new Upt(this.a.vc().Kc())},l.Mc=function(e){var n,r;try{return ry(this,e,!0)}catch(s){if(s=Wi(s),Et(s,41)){for(r=this.a.vc().Kc();r.Ob();)if(n=u(r.Pb(),42),fd(e,n.dd()))return this.a.Bc(n.cd()),!0;return!1}else throw rt(s)}},l.gc=function(){return this.a.gc()},P(Ye,"Maps/Values",958),I(961,1,{},ctt),l.Od=function(e,n){this.a.td(n)},P(Ye,"Maps/Values/lambda$0$Type",961),I(736,1987,bw,wbt),l.xc=function(e){return this.a._b(e)?this.a.cc(e):null},l.Bc=function(e){return this.a._b(e)?this.a.fc(e):null},l.$b=function(){this.a.$b()},l._b=function(e){return this.a._b(e)},l.Ec=function(){return new ott(this)},l.Dc=function(){return this.Ec()},l.dc=function(){return this.a.dc()},l.ec=function(){return this.a.ec()},l.gc=function(){return this.a.ec().gc()},P(Ye,"Multimaps/AsMap",736),I(1104,1971,ju,ott),l.Kc=function(){return AXe(this.a.a.ec(),new utt(this))},l.Rc=function(){return this.a},l.Mc=function(e){var n;return fie(this,e)?(n=u(e,42),LKe(this.a,n.cd()),!0):!1},P(Ye,"Multimaps/AsMap/EntrySet",1104),I(1108,1,{},utt),l.Kb=function(e){return eUt(this,e)},l.Fb=function(e){return this===e},P(Ye,"Multimaps/AsMap/EntrySet/1",1108),I(543,1989,{543:1,835:1,20:1,28:1,14:1},ltt),l.$b=function(){Q$(this.a)},l.Hc=function(e){return hHt(this.a,e)},l.Jc=function(e){Ar(e),va(SC(this.a),new ftt(e))},l.Kc=function(){return new D9(SC(this.a).a.kc())},l.gc=function(){return this.a.d},l.Nc=function(){return VM(SC(this.a).Nc(),new it)},P(Ye,"Multimaps/Keys",543),I(1106,1,{},it),l.Kb=function(e){return u(e,42).cd()},P(Ye,"Multimaps/Keys/0methodref$getKey$Type",1106),I(1105,487,ra,Bqt),l.Qd=function(e){return new htt(u(e,42))},P(Ye,"Multimaps/Keys/1",1105),I(1990,1,{416:1}),l.Fb=function(e){var n;return Et(e,492)?(n=u(e,416),u(this.a.dd(),14).gc()==u(n.a.dd(),14).gc()&&fd(this.a.cd(),n.a.cd())):!1},l.Hb=function(){var e;return e=this.a.cd(),(e==null?0:Hi(e))^u(this.a.dd(),14).gc()},l.Ib=function(){var e,n;return n=dC(this.a.cd()),e=u(this.a.dd(),14).gc(),e==1?n:n+" x "+e},P(Ye,"Multisets/AbstractEntry",1990),I(492,1990,{492:1,416:1},htt),P(Ye,"Multimaps/Keys/1/1",492),I(1107,1,Un,ftt),l.td=function(e){this.a.td(u(e,42).cd())},P(Ye,"Multimaps/Keys/lambda$1$Type",1107),I(1110,1,Un,st),l.td=function(e){Ltn(u(e,416))},P(Ye,"Multiset/lambda$0$Type",1110),I(737,1,Un,dtt),l.td=function(e){Uan(this.a,u(e,416))},P(Ye,"Multiset/lambda$1$Type",737),I(1111,1,{},ht),P(Ye,"Multisets/0methodref$add$Type",1111),I(738,1,{},wt),l.Kb=function(e){return Fin(u(e,416))},P(Ye,"Multisets/lambda$3$Type",738),I(2008,1,_D),P(Ye,"RangeGwtSerializationDependencies",2008),I(514,2008,{169:1,514:1,3:1,45:1},N3t),l.Lb=function(e){return CYt(this,u(e,35))},l.Mb=function(e){return CYt(this,u(e,35))},l.Fb=function(e){var n;return Et(e,514)?(n=u(e,514),T3t(this.a,n.a)&&T3t(this.b,n.b)):!1},l.Hb=function(){return this.a.Hb()*31+this.b.Hb()},l.Ib=function(){return OZt(this.a,this.b)},P(Ye,"Range",514),I(778,1999,S_,FYt),l.Zc=function(e){return O2t(this.b,e)},l.Pd=function(){return this.a},l.Xb=function(e){return Dp(this.b,e)},l.Fd=function(e){return O2t(this.b,e)},P(Ye,"RegularImmutableAsList",778),I(646,2006,S_,ort),l.Hd=function(){return this.a},P(Ye,"RegularImmutableList",646),I(616,715,LE,Ztt),P(Ye,"RegularImmutableMap",616),I(716,703,ME,ybt);var K8t;P(Ye,"RegularImmutableSet",716),I(1976,N1,ju),l.Kc=function(){return new Cwt(this.a,this.b)},l.Fc=function(e){throw rt(new Or)},l.Gc=function(e){throw rt(new Or)},l.$b=function(){throw rt(new Or)},l.Mc=function(e){throw rt(new Or)},P(Ye,"Sets/SetView",1976),I(963,1976,ju,eGt),l.Kc=function(){return new Cwt(this.a,this.b)},l.Hc=function(e){return Mnt(this.a,e)&&this.b.Hc(e)},l.Ic=function(e){return II(this.a,e)&&this.b.Ic(e)},l.dc=function(){return Qie(this.b,this.a)},l.Lc=function(){return Ri(new Tn(null,new _n(this.a,1)),new kh(this.b))},l.gc=function(){return AI(this)},l.Oc=function(){return Ri(new Tn(null,new _n(this.a,1)),new zk(this.b))},P(Ye,"Sets/2",963),I(700,699,SE,Cwt),l.Yb=function(){for(var e;c2t(this.a);)if(e=FC(this.a),this.c.Hc(e))return e;return this.e=2,null},P(Ye,"Sets/2/1",700),I(964,1,ui,zk),l.Mb=function(e){return this.a.Hc(e)},P(Ye,"Sets/2/4methodref$contains$Type",964),I(965,1,ui,kh),l.Mb=function(e){return this.a.Hc(e)},P(Ye,"Sets/2/5methodref$contains$Type",965),I(607,1975,{607:1,3:1,20:1,14:1,271:1,21:1,84:1},nQt),l.Bd=function(){return this.b},l.Cd=function(){return this.b},l.Md=function(){return this.b},l.Jc=function(e){this.a.Jc(e)},l.Lc=function(){return this.a.Lc()},l.Oc=function(){return this.a.Oc()},P(Ye,"Sets/UnmodifiableNavigableSet",607),I(1932,1931,LE,lXt),l.Ld=function(){return hd(),new xx(this.a)},l.Cc=function(){return hd(),new xx(this.a)},l.pd=function(){return hd(),new xx(this.a)},P(Ye,"SingletonImmutableBiMap",1932),I(647,2006,S_,Snt),l.Hd=function(){return this.a},P(Ye,"SingletonImmutableList",647),I(350,1981,ME,xx),l.Kc=function(){return new UB(this.a)},l.Hc=function(e){return yi(this.a,e)},l.Ed=function(){return new UB(this.a)},l.gc=function(){return 1},P(Ye,"SingletonImmutableSet",350),I(1115,1,{},X),l.Kb=function(e){return u(e,164)},P(Ye,"Streams/lambda$0$Type",1115),I(1116,1,Oq,btt),l.Vd=function(){Ssn(this.a)},P(Ye,"Streams/lambda$1$Type",1116),I(1659,1658,y2,KXt),l.Zb=function(){var e;return e=this.f,u(u(e||(this.f=Et(this.c,171)?new yj(this,u(this.c,171)):Et(this.c,161)?new RM(this,u(this.c,161)):new n8(this,this.c)),161),171)},l.hc=function(){return new Lp(this.b)},l.gd=function(){return new Lp(this.b)},l.ec=function(){var e;return e=this.i,u(u(e||(this.i=Et(this.c,171)?new e8(this,u(this.c,171)):Et(this.c,161)?new gM(this,u(this.c,161)):new W3(this,this.c)),84),271)},l.ac=function(){return Et(this.c,171)?new yj(this,u(this.c,171)):Et(this.c,161)?new RM(this,u(this.c,161)):new n8(this,this.c)},l.ic=function(e){return e==null&&this.a.ue(e,e),new Lp(this.b)},P(Ye,"TreeMultimap",1659),I(78,1,{3:1,78:1}),l.Wd=function(e){return new Error(e)},l.Xd=function(){return this.e},l.Yd=function(){return $ln(pu($nt((this.k==null&&(this.k=Pt(yut,te,78,0,0,1)),this.k)),new ke))},l.Zd=function(){return this.f},l.$d=function(){return this.g},l._d=function(){bKe(this,yin(this.Wd(crt(this,this.g)))),Hzt(this)},l.Ib=function(){return crt(this,this.$d())},l.e=efe,l.i=!1,l.n=!0;var yut=P(Xo,"Throwable",78);I(102,78,{3:1,102:1,78:1}),P(Xo,"Exception",102),I(60,102,U0,Vb,Go),P(Xo,"RuntimeException",60),I(598,60,U0),P(Xo,"JsException",598),I(863,598,U0),P(MD,"JavaScriptExceptionBase",863),I(477,863,{477:1,3:1,102:1,60:1,78:1},_re),l.$d=function(){return udn(this),this.c},l.ae=function(){return Gt(this.b)===Gt(Y8t)?null:this.b};var Y8t;P(Oxt,"JavaScriptException",477);var bge=P(Oxt,"JavaScriptObject$",0),xut;I(1948,1,{}),P(Oxt,"Scheduler",1948);var zH=0,vge=0,qH=-1;I(890,1948,{},pt);var X8t;P(MD,"SchedulerImpl",890);var kut;I(1960,1,{}),P(MD,"StackTraceCreator/Collector",1960),I(864,1960,{},U),l.be=function(e){var n={},r=[];e[jat]=r;for(var s=arguments.callee.caller;s;){var o=(T8(),s.name||(s.name=con(s.toString())));r.push(o);var h=":"+o,d=n[h];if(d){var w,k;for(w=0,k=d.length;w<k;w++)if(d[w]===s)return}(d||(n[h]=[])).push(s),s=s.caller}},l.ce=function(e){var n,r,s,o;for(s=(T8(),e&&e[jat]?e[jat]:[]),r=s.length,o=Pt(lEt,te,310,r,0,1),n=0;n<r;n++)o[n]=new Jnt(s[n],null,-1);return o},P(MD,"StackTraceCreator/CollectorLegacy",864),I(1961,1960,{}),l.be=function(e){},l.de=function(e,n,r,s){return new Jnt(n,e+"@"+s,r<0?-1:r)},l.ce=function(e){var n,r,s,o,h,d;if(o=Pfn(e),h=Pt(lEt,te,310,0,0,1),n=0,s=o.length,s==0)return h;for(d=Ble(this,o[0]),hn(d.d,Rat)||(h[n++]=d),r=1;r<s;r++)h[n++]=Ble(this,o[r]);return h},P(MD,"StackTraceCreator/CollectorModern",1961),I(865,1961,{},bt),l.de=function(e,n,r,s){return new Jnt(n,e,-1)},P(MD,"StackTraceCreator/CollectorModernNoSourceMap",865),I(1050,1,{}),P(Pxt,ife,1050),I(615,1050,{615:1},ZYt);var Q8t;P(iot,ife,615),I(2001,1,{}),P(Pxt,sfe,2001),I(2002,2001,{}),P(iot,sfe,2002),I(1090,1,{},mt);var sS;P(iot,"LocaleInfo",1090),I(1918,1,{},yt),l.a=0,P(iot,"TimeZone",1918),I(1258,2002,{},ut),P("com.google.gwt.i18n.client.impl.cldr","DateTimeFormatInfoImpl",1258),I(434,1,{434:1},AKt),l.a=!1,l.b=0,P(Pxt,"DateTimeFormat/PatternPart",434),I(199,1,afe,_R,Eyt,H2t),l.wd=function(e){return vin(this,u(e,199))},l.Fb=function(e){return Et(e,199)&&Av(ku(this.q.getTime()),ku(u(e,199).q.getTime()))},l.Hb=function(){var e;return e=ku(this.q.getTime()),Sr(yrt(e,zm(e,32)))},l.Ib=function(){var e,n,r;return r=-this.q.getTimezoneOffset(),e=(r>=0?"+":"")+(r/60|0),n=rj(b.Math.abs(r)%60),(vae(),Sge)[this.q.getDay()]+" "+Age[this.q.getMonth()]+" "+rj(this.q.getDate())+" "+rj(this.q.getHours())+":"+rj(this.q.getMinutes())+":"+rj(this.q.getSeconds())+" GMT"+e+n+" "+this.q.getFullYear()};var HH=P(pr,"Date",199);I(1915,199,afe,Gse),l.a=!1,l.b=0,l.c=0,l.d=0,l.e=0,l.f=0,l.g=!1,l.i=0,l.j=0,l.k=0,l.n=0,l.o=0,l.p=0,P("com.google.gwt.i18n.shared.impl","DateRecord",1915),I(1966,1,{}),l.fe=function(){return null},l.ge=function(){return null},l.he=function(){return null},l.ie=function(){return null},l.je=function(){return null},P(h6,"JSONValue",1966),I(216,1966,{216:1},bg,lx),l.Fb=function(e){return Et(e,216)?Hwt(this.a,u(e,216).a):!1},l.ee=function(){return XWe},l.Hb=function(){return Mwt(this.a)},l.fe=function(){return this},l.Ib=function(){var e,n,r;for(r=new Il("["),n=0,e=this.a.length;n<e;n++)n>0&&(r.a+=","),hc(r,Xm(this,n));return r.a+="]",r.a},P(h6,"JSONArray",216),I(483,1966,{483:1},qk),l.ee=function(){return QWe},l.ge=function(){return this},l.Ib=function(){return Fn(),""+this.a},l.a=!1;var wge,mge;P(h6,"JSONBoolean",483),I(985,60,U0,Rqt),P(h6,"JSONException",985),I(1023,1966,{},dt),l.ee=function(){return nKe},l.Ib=function(){return Tu};var yge;P(h6,"JSONNull",1023),I(258,1966,{258:1},y9),l.Fb=function(e){return Et(e,258)?this.a==u(e,258).a:!1},l.ee=function(){return ZWe},l.Hb=function(){return o8(this.a)},l.he=function(){return this},l.Ib=function(){return this.a+""},l.a=0,P(h6,"JSONNumber",258),I(183,1966,{183:1},mx,Hk),l.Fb=function(e){return Et(e,183)?Hwt(this.a,u(e,183).a):!1},l.ee=function(){return JWe},l.Hb=function(){return Mwt(this.a)},l.ie=function(){return this},l.Ib=function(){var e,n,r,s,o,h,d;for(d=new Il("{"),e=!0,h=uit(this,Pt(Ae,te,2,0,6,1)),r=h,s=0,o=r.length;s<o;++s)n=r[s],e?e=!1:d.a+=Ka,Vr(d,Poe(n)),d.a+=":",hc(d,D0(this,n));return d.a+="}",d.a},P(h6,"JSONObject",183),I(596,N1,ju,fet),l.Hc=function(e){return ea(e)&&PKe(this.a,Br(e))},l.Kc=function(){return new fx(new wl(this.b))},l.gc=function(){return this.b.length},P(h6,"JSONObject/1",596);var Eut;I(204,1966,{204:1},Hm),l.Fb=function(e){return Et(e,204)?hn(this.a,u(e,204).a):!1},l.ee=function(){return tKe},l.Hb=function(){return Bg(this.a)},l.je=function(){return this},l.Ib=function(){return Poe(this.a)},P(h6,"JSONString",204);var ob,Z8t,xge,J8t,tEt;I(1962,1,{525:1}),P(Fxt,"OutputStream",1962),I(1963,1962,{525:1}),P(Fxt,"FilterOutputStream",1963),I(866,1963,{525:1},Tt),P(Fxt,"PrintStream",866),I(418,1,{475:1}),l.Ib=function(){return this.a},P(Xo,"AbstractStringBuilder",418),I(529,60,U0,pR),P(Xo,"ArithmeticException",529),I(73,60,sot,Tpt,mo),P(Xo,"IndexOutOfBoundsException",73),I(320,73,{3:1,320:1,102:1,73:1,60:1,78:1},_pt,Qpt),P(Xo,"ArrayIndexOutOfBoundsException",320),I(528,60,U0,Htt,zqt),P(Xo,"ArrayStoreException",528),I(289,78,ofe,tet),P(Xo,"Error",289),I(194,289,ofe,Ept,amt),P(Xo,"AssertionError",194),cge={3:1,476:1,35:1};var I2,YE,Bs=P(Xo,"Boolean",476);I(236,1,{3:1,236:1});var eEt;P(Xo,"Number",236),I(217,236,{3:1,217:1,35:1,236:1},Itt),l.wd=function(e){return DKe(this,u(e,217))},l.ke=function(){return this.a},l.Fb=function(e){return Et(e,217)&&u(e,217).a==this.a},l.Hb=function(){return this.a},l.Ib=function(){return""+this.a},l.a=0;var E6=P(Xo,"Byte",217),nEt;I(172,1,{3:1,172:1,35:1},tR),l.wd=function(e){return OKe(this,u(e,172))},l.Fb=function(e){return Et(e,172)&&u(e,172).a==this.a},l.Hb=function(){return this.a},l.Ib=function(){return String.fromCharCode(this.a)},l.a=0;var rEt,aS=P(Xo,"Character",172),iEt;I(205,60,{3:1,205:1,102:1,60:1,78:1},Gzt,Xk),P(Xo,"ClassCastException",205),uge={3:1,35:1,333:1,236:1};var ca=P(Xo,"Double",333);I(155,236,{3:1,35:1,155:1,236:1},D3,Spt),l.wd=function(e){return zYe(this,u(e,155))},l.ke=function(){return this.a},l.Fb=function(e){return Et(e,155)&&eKt(this.a,u(e,155).a)},l.Hb=function(){return ps(this.a)},l.Ib=function(){return""+this.a},l.a=0;var XE=P(Xo,"Float",155);I(32,60,{3:1,102:1,32:1,60:1,78:1},uM,Pn,wre),P(Xo,"IllegalArgumentException",32),I(71,60,U0,Iu,Fo),P(Xo,"IllegalStateException",71),I(19,236,{3:1,35:1,19:1,236:1},iM),l.wd=function(e){return qYe(this,u(e,19))},l.ke=function(){return this.a},l.Fb=function(e){return Et(e,19)&&u(e,19).a==this.a},l.Hb=function(){return this.a},l.Ib=function(){return""+this.a},l.a=0;var ja=P(Xo,"Integer",19),sEt,kge;I(162,236,{3:1,35:1,162:1,236:1},Cm),l.wd=function(e){return HYe(this,u(e,162))},l.ke=function(){return Vv(this.a)},l.Fb=function(e){return Et(e,162)&&Av(u(e,162).a,this.a)},l.Hb=function(){return Sr(this.a)},l.Ib=function(){return""+EC(this.a)},l.a=0;var Tw=P(Xo,"Long",162),aEt;I(2039,1,{}),I(1831,60,U0,Hqt),P(Xo,"NegativeArraySizeException",1831),I(173,598,{3:1,102:1,173:1,60:1,78:1},L9,yx),l.Wd=function(e){return new TypeError(e)},P(Xo,"NullPointerException",173);var oEt,Tut,Ege,cEt;I(127,32,{3:1,102:1,32:1,127:1,60:1,78:1},od),P(Xo,"NumberFormatException",127),I(184,236,{3:1,35:1,236:1,184:1},eR),l.wd=function(e){return NKe(this,u(e,184))},l.ke=function(){return this.a},l.Fb=function(e){return Et(e,184)&&u(e,184).a==this.a},l.Hb=function(){return this.a},l.Ib=function(){return""+this.a},l.a=0;var Cw=P(Xo,"Short",184),uEt;I(310,1,{3:1,310:1},Jnt),l.Fb=function(e){var n;return Et(e,310)?(n=u(e,310),this.c==n.c&&this.d==n.d&&this.a==n.a&&this.b==n.b):!1},l.Hb=function(){return vz(ct(ot(Xn,1),Ie,1,5,[de(this.c),this.a,this.d,this.b]))},l.Ib=function(){return this.a+"."+this.d+"("+(this.b!=null?this.b:"Unknown Source")+(this.c>=0?":"+this.c:"")+")"},l.c=0;var lEt=P(Xo,"StackTraceElement",310);lge={3:1,475:1,35:1,2:1};var Ae=P(Xo,Dxt,2);I(107,418,{475:1},xg,B9,Th),P(Xo,"StringBuffer",107),I(100,418,{475:1},_p,Lm,Il),P(Xo,"StringBuilder",100),I(687,73,sot,Zpt),P(Xo,"StringIndexOutOfBoundsException",687),I(2043,1,{});var hEt;I(844,1,{},ke),l.Kb=function(e){return u(e,78).e},P(Xo,"Throwable/lambda$0$Type",844),I(41,60,{3:1,102:1,60:1,78:1,41:1},Or,yg),P(Xo,"UnsupportedOperationException",41),I(240,236,{3:1,35:1,236:1,240:1},kI,obt),l.wd=function(e){return Que(this,u(e,240))},l.ke=function(){return ly(Ole(this))},l.Fb=function(e){var n;return this===e?!0:Et(e,240)?(n=u(e,240),this.e==n.e&&Que(this,n)==0):!1},l.Hb=function(){var e;return this.b!=0?this.b:this.a<54?(e=ku(this.f),this.b=Sr(Ps(e,-1)),this.b=33*this.b+Sr(Ps(Fp(e,32),-1)),this.b=17*this.b+ps(this.e),this.b):(this.b=17*Ire(this.c)+ps(this.e),this.b)},l.Ib=function(){return Ole(this)},l.a=0,l.b=0,l.d=0,l.e=0,l.f=0;var Tge,D2,fEt,dEt,gEt,pEt,bEt,vEt,Cut=P("java.math","BigDecimal",240);I(91,236,{3:1,35:1,236:1,91:1},D3t,Lg,K3,g4t,Nie,Np),l.wd=function(e){return Lie(this,u(e,91))},l.ke=function(){return ly(Dat(this,0))},l.Fb=function(e){return h3t(this,e)},l.Hb=function(){return Ire(this)},l.Ib=function(){return Dat(this,0)},l.b=-2,l.c=0,l.d=0,l.e=0;var _ut,GH,wEt,Sut,VH,QE,B4=P("java.math","BigInteger",91),Cge,_ge,T6,oS;I(488,1967,bw),l.$b=function(){Yu(this)},l._b=function(e){return kl(this,e)},l.uc=function(e){return pre(this,e,this.g)||pre(this,e,this.f)},l.vc=function(){return new wg(this)},l.xc=function(e){return Jn(this,e)},l.zc=function(e,n){return ki(this,e,n)},l.Bc=function(e){return Ux(this,e)},l.gc=function(){return $9(this)},P(pr,"AbstractHashMap",488),I(261,N1,ju,wg),l.$b=function(){this.a.$b()},l.Hc=function(e){return dZt(this,e)},l.Kc=function(){return new h2(this.a)},l.Mc=function(e){var n;return dZt(this,e)?(n=u(e,42).cd(),this.a.Bc(n),!0):!1},l.gc=function(){return this.a.gc()},P(pr,"AbstractHashMap/EntrySet",261),I(262,1,ra,h2),l.Nb=function(e){pa(this,e)},l.Pb=function(){return Yv(this)},l.Ob=function(){return this.b},l.Qb=function(){lte(this)},l.b=!1,P(pr,"AbstractHashMap/EntrySetIterator",262),I(417,1,ra,fx),l.Nb=function(e){pa(this,e)},l.Ob=function(){return mM(this)},l.Pb=function(){return PXt(this)},l.Qb=function(){El(this)},l.b=0,l.c=-1,P(pr,"AbstractList/IteratorImpl",417),I(96,417,Jd,ha),l.Qb=function(){El(this)},l.Rb=function(e){Rm(this,e)},l.Sb=function(){return this.b>0},l.Tb=function(){return this.b},l.Ub=function(){return Qn(this.b>0),this.a.Xb(this.c=--this.b)},l.Vb=function(){return this.b-1},l.Wb=function(e){Pm(this.c!=-1),this.a._c(this.c,e)},P(pr,"AbstractList/ListIteratorImpl",96),I(219,52,IE,Kd),l.Vc=function(e,n){Um(e,this.b),this.c.Vc(this.a+e,n),++this.b},l.Xb=function(e){return An(e,this.b),this.c.Xb(this.a+e)},l.$c=function(e){var n;return An(e,this.b),n=this.c.$c(this.a+e),--this.b,n},l._c=function(e,n){return An(e,this.b),this.c._c(this.a+e,n)},l.gc=function(){return this.b},l.a=0,l.b=0,P(pr,"AbstractList/SubList",219),I(384,N1,ju,Tm),l.$b=function(){this.a.$b()},l.Hc=function(e){return this.a._b(e)},l.Kc=function(){var e;return e=this.a.vc().Kc(),new rM(e)},l.Mc=function(e){return this.a._b(e)?(this.a.Bc(e),!0):!1},l.gc=function(){return this.a.gc()},P(pr,"AbstractMap/1",384),I(691,1,ra,rM),l.Nb=function(e){pa(this,e)},l.Ob=function(){return this.a.Ob()},l.Pb=function(){var e;return e=u(this.a.Pb(),42),e.cd()},l.Qb=function(){this.a.Qb()},P(pr,"AbstractMap/1/1",691),I(226,28,wy,b1),l.$b=function(){this.a.$b()},l.Hc=function(e){return this.a.uc(e)},l.Kc=function(){var e;return e=this.a.vc().Kc(),new v1(e)},l.gc=function(){return this.a.gc()},P(pr,"AbstractMap/2",226),I(294,1,ra,v1),l.Nb=function(e){pa(this,e)},l.Ob=function(){return this.a.Ob()},l.Pb=function(){var e;return e=u(this.a.Pb(),42),e.dd()},l.Qb=function(){this.a.Qb()},P(pr,"AbstractMap/2/1",294),I(484,1,{484:1,42:1}),l.Fb=function(e){var n;return Et(e,42)?(n=u(e,42),Pc(this.d,n.cd())&&Pc(this.e,n.dd())):!1},l.cd=function(){return this.d},l.dd=function(){return this.e},l.Hb=function(){return G3(this.d)^G3(this.e)},l.ed=function(e){return J2t(this,e)},l.Ib=function(){return this.d+"="+this.e},P(pr,"AbstractMap/AbstractEntry",484),I(383,484,{484:1,383:1,42:1},RR),P(pr,"AbstractMap/SimpleEntry",383),I(1984,1,uot),l.Fb=function(e){var n;return Et(e,42)?(n=u(e,42),Pc(this.cd(),n.cd())&&Pc(this.dd(),n.dd())):!1},l.Hb=function(){return G3(this.cd())^G3(this.dd())},l.Ib=function(){return this.cd()+"="+this.dd()},P(pr,Khe,1984),I(1992,1967,Uhe),l.tc=function(e){return xJt(this,e)},l._b=function(e){return pnt(this,e)},l.vc=function(){return new x(this)},l.xc=function(e){var n;return n=e,ec(Dyt(this,n))},l.ec=function(){return new y(this)},P(pr,"AbstractNavigableMap",1992),I(739,N1,ju,x),l.Hc=function(e){return Et(e,42)&&xJt(this.b,u(e,42))},l.Kc=function(){return new vC(this.b)},l.Mc=function(e){var n;return Et(e,42)?(n=u(e,42),cte(this.b,n)):!1},l.gc=function(){return this.b.c},P(pr,"AbstractNavigableMap/EntrySet",739),I(493,N1,Mxt,y),l.Nc=function(){return new FR(this)},l.$b=function(){O9(this.a)},l.Hc=function(e){return pnt(this.a,e)},l.Kc=function(){var e;return e=new vC(new gC(this.a).b),new g(e)},l.Mc=function(e){return pnt(this.a,e)?(IC(this.a,e),!0):!1},l.gc=function(){return this.a.c},P(pr,"AbstractNavigableMap/NavigableKeySet",493),I(494,1,ra,g),l.Nb=function(e){pa(this,e)},l.Ob=function(){return mM(this.a.a)},l.Pb=function(){var e;return e=wj(this.a),e.cd()},l.Qb=function(){hKt(this.a)},P(pr,"AbstractNavigableMap/NavigableKeySet/1",494),I(2004,28,wy),l.Fc=function(e){return M8(dE(this,e)),!0},l.Gc=function(e){return On(e),_j(e!=this,"Can't add a queue to itself"),Ua(this,e)},l.$b=function(){for(;Qrt(this)!=null;);},P(pr,"AbstractQueue",2004),I(302,28,{4:1,20:1,28:1,14:1},P3,RQt),l.Fc=function(e){return Qwt(this,e),!0},l.$b=function(){rmt(this)},l.Hc=function(e){return Rne(new MC(this),e)},l.dc=function(){return N9(this)},l.Kc=function(){return new MC(this)},l.Mc=function(e){return frn(new MC(this),e)},l.gc=function(){return this.c-this.b&this.a.length-1},l.Nc=function(){return new _n(this,272)},l.Qc=function(e){var n;return n=this.c-this.b&this.a.length-1,e.length<n&&(e=wR(new Array(n),e)),Xee(this,e,n),e.length>n&&Ji(e,n,null),e},l.b=0,l.c=0,P(pr,"ArrayDeque",302),I(446,1,ra,MC),l.Nb=function(e){pa(this,e)},l.Ob=function(){return this.a!=this.b},l.Pb=function(){return mz(this)},l.Qb=function(){Fee(this)},l.a=0,l.b=0,l.c=-1,P(pr,"ArrayDeque/IteratorImpl",446),I(12,52,ufe,le,Yc,Pu),l.Vc=function(e,n){$m(this,e,n)},l.Fc=function(e){return ue(this,e)},l.Wc=function(e,n){return Ryt(this,e,n)},l.Gc=function(e){return As(this,e)},l.$b=function(){this.c=Pt(Xn,Ie,1,0,5,1)},l.Hc=function(e){return Ro(this,e,0)!=-1},l.Jc=function(e){mu(this,e)},l.Xb=function(e){return Fe(this,e)},l.Xc=function(e){return Ro(this,e,0)},l.dc=function(){return this.c.length==0},l.Kc=function(){return new S(this)},l.$c=function(e){return Ag(this,e)},l.Mc=function(e){return vu(this,e)},l.Ud=function(e,n){BQt(this,e,n)},l._c=function(e,n){return ah(this,e,n)},l.gc=function(){return this.c.length},l.ad=function(e){Xs(this,e)},l.Pc=function(){return int(this)},l.Qc=function(e){return D1(this,e)};var X5n=P(pr,"ArrayList",12);I(7,1,ra,S),l.Nb=function(e){pa(this,e)},l.Ob=function(){return Vo(this)},l.Pb=function(){return J(this)},l.Qb=function(){_C(this)},l.a=0,l.b=-1,P(pr,"ArrayList/1",7),I(2013,b.Function,{},xt),l.te=function(e,n){return Ls(e,n)},I(154,52,lfe,wl),l.Hc=function(e){return Ree(this,e)!=-1},l.Jc=function(e){var n,r,s,o;for(On(e),r=this.a,s=0,o=r.length;s<o;++s)n=r[s],e.td(n)},l.Xb=function(e){return eYt(this,e)},l._c=function(e,n){var r;return r=(An(e,this.a.length),this.a[e]),Ji(this.a,e,n),r},l.gc=function(){return this.a.length},l.ad=function(e){Lnt(this.a,this.a.length,e)},l.Pc=function(){return qie(this,Pt(Xn,Ie,1,this.a.length,5,1))},l.Qc=function(e){return qie(this,e)},P(pr,"Arrays/ArrayList",154);var io,a0,UH;I(940,52,lfe,Ot),l.Hc=function(e){return!1},l.Xb=function(e){return Zbt(e)},l.Kc=function(){return vn(),r8(),ZE},l.Yc=function(){return vn(),r8(),ZE},l.gc=function(){return 0},P(pr,"Collections/EmptyList",940),I(941,1,Jd,Nt),l.Nb=function(e){pa(this,e)},l.Rb=function(e){throw rt(new Or)},l.Ob=function(){return!1},l.Sb=function(){return!1},l.Pb=function(){throw rt(new lc)},l.Tb=function(){return 0},l.Ub=function(){throw rt(new lc)},l.Vb=function(){return-1},l.Qb=function(){throw rt(new Iu)},l.Wb=function(e){throw rt(new Iu)};var ZE;P(pr,"Collections/EmptyListIterator",941),I(943,1967,LE,qt),l._b=function(e){return!1},l.uc=function(e){return!1},l.vc=function(){return vn(),UH},l.xc=function(e){return null},l.ec=function(){return vn(),UH},l.gc=function(){return 0},l.Cc=function(){return vn(),io},P(pr,"Collections/EmptyMap",943),I(942,N1,ME,nt),l.Hc=function(e){return!1},l.Kc=function(){return vn(),r8(),ZE},l.gc=function(){return 0},P(pr,"Collections/EmptySet",942),I(599,52,{3:1,20:1,28:1,52:1,14:1,15:1},D),l.Hc=function(e){return Pc(this.a,e)},l.Xb=function(e){return An(e,1),this.a},l.gc=function(){return 1},P(pr,"Collections/SingletonList",599),I(372,1,Qhe,T),l.Jc=function(e){va(this,e)},l.Lc=function(){return new Tn(null,this.Nc())},l.Nc=function(){return new _n(this,0)},l.Oc=function(){return new Tn(null,this.Nc())},l.Fc=function(e){return bHt()},l.Gc=function(e){return vHt()},l.$b=function(){wHt()},l.Hc=function(e){return pM(this,e)},l.Ic=function(e){return sGt(this,e)},l.dc=function(){return this.b.dc()},l.Kc=function(){return new A(this.b.Kc())},l.Mc=function(e){return mHt()},l.gc=function(){return this.b.gc()},l.Pc=function(){return this.b.Pc()},l.Qc=function(e){return aGt(this,e)},l.Ib=function(){return $o(this.b)},P(pr,"Collections/UnmodifiableCollection",372),I(371,1,ra,A),l.Nb=function(e){pa(this,e)},l.Ob=function(){return this.b.Ob()},l.Pb=function(){return this.b.Pb()},l.Qb=function(){yHt()},P(pr,"Collections/UnmodifiableCollectionIterator",371),I(531,372,hfe,fj),l.Nc=function(){return new _n(this,16)},l.Vc=function(e,n){throw rt(new Or)},l.Wc=function(e,n){throw rt(new Or)},l.Fb=function(e){return yi(this.a,e)},l.Xb=function(e){return this.a.Xb(e)},l.Hb=function(){return Hi(this.a)},l.Xc=function(e){return this.a.Xc(e)},l.dc=function(){return this.a.dc()},l.Yc=function(){return new T2t(this.a.Zc(0))},l.Zc=function(e){return new T2t(this.a.Zc(e))},l.$c=function(e){throw rt(new Or)},l._c=function(e,n){throw rt(new Or)},l.ad=function(e){throw rt(new Or)},l.bd=function(e,n){return new fj(this.a.bd(e,n))},P(pr,"Collections/UnmodifiableList",531),I(690,371,Jd,T2t),l.Qb=function(){yHt()},l.Rb=function(e){throw rt(new Or)},l.Sb=function(){return this.a.Sb()},l.Tb=function(){return this.a.Tb()},l.Ub=function(){return this.a.Ub()},l.Vb=function(){return this.a.Vb()},l.Wb=function(e){throw rt(new Or)},P(pr,"Collections/UnmodifiableListIterator",690),I(600,1,bw,q),l.wc=function(e){UC(this,e)},l.yc=function(e,n,r){return $it(this,e,n,r)},l.$b=function(){throw rt(new Or)},l._b=function(e){return this.c._b(e)},l.uc=function(e){return cGt(this,e)},l.vc=function(){return x8(this)},l.Fb=function(e){return uGt(this,e)},l.xc=function(e){return this.c.xc(e)},l.Hb=function(){return Hi(this.c)},l.dc=function(){return this.c.dc()},l.ec=function(){return bXt(this)},l.zc=function(e,n){throw rt(new Or)},l.Bc=function(e){throw rt(new Or)},l.gc=function(){return this.c.gc()},l.Ib=function(){return $o(this.c)},l.Cc=function(){return pXt(this)},P(pr,"Collections/UnmodifiableMap",600),I(382,372,Fat,Qk),l.Nc=function(){return new _n(this,1)},l.Fb=function(e){return yi(this.b,e)},l.Hb=function(){return Hi(this.b)},P(pr,"Collections/UnmodifiableSet",382),I(944,382,Fat,Yqt),l.Hc=function(e){return oGt(this,e)},l.Ic=function(e){return this.b.Ic(e)},l.Kc=function(){var e;return e=this.b.Kc(),new O(e)},l.Pc=function(){var e;return e=this.b.Pc(),qZt(e,e.length),e},l.Qc=function(e){return QXt(this,e)},P(pr,"Collections/UnmodifiableMap/UnmodifiableEntrySet",944),I(945,1,ra,O),l.Nb=function(e){pa(this,e)},l.Pb=function(){return new $(u(this.a.Pb(),42))},l.Ob=function(){return this.a.Ob()},l.Qb=function(){throw rt(new Or)},P(pr,"Collections/UnmodifiableMap/UnmodifiableEntrySet/1",945),I(688,1,uot,$),l.Fb=function(e){return this.a.Fb(e)},l.cd=function(){return this.a.cd()},l.dd=function(){return this.a.dd()},l.Hb=function(){return this.a.Hb()},l.ed=function(e){throw rt(new Or)},l.Ib=function(){return $o(this.a)},P(pr,"Collections/UnmodifiableMap/UnmodifiableEntrySet/UnmodifiableEntry",688),I(601,531,{20:1,14:1,15:1,54:1},oet),P(pr,"Collections/UnmodifiableRandomAccessList",601),I(689,382,Zhe,C2t),l.Nc=function(){return new FR(this)},l.Fb=function(e){return yi(this.a,e)},l.Hb=function(){return Hi(this.a)},P(pr,"Collections/UnmodifiableSortedSet",689),I(847,1,lot,pn),l.ue=function(e,n){var r;return r=HZt(u(e,11),u(n,11)),r!=0?r:Zue(u(e,11),u(n,11))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(pr,"Comparator/lambda$0$Type",847);var mEt,yEt,xEt;I(751,1,lot,Me),l.ue=function(e,n){return Itn(u(e,35),u(n,35))},l.Fb=function(e){return this===e},l.ve=function(){return X3(),xEt},P(pr,"Comparators/NaturalOrderComparator",751),I(1177,1,lot,ve),l.ue=function(e,n){return Dtn(u(e,35),u(n,35))},l.Fb=function(e){return this===e},l.ve=function(){return X3(),yEt},P(pr,"Comparators/ReverseNaturalOrderComparator",1177),I(64,1,lot,ft),l.Fb=function(e){return this===e},l.ue=function(e,n){return this.a.ue(n,e)},l.ve=function(){return this.a},P(pr,"Comparators/ReversedComparator",64),I(166,60,U0,eh),P(pr,"ConcurrentModificationException",166);var Sge,Age;I(1904,1,ND,Ge),l.we=function(e){pie(this,e)},l.Ib=function(){return"DoubleSummaryStatistics[count = "+EC(this.a)+", avg = "+(LGt(this.a,0)?_Jt(this)/Vv(this.a):0)+", min = "+this.c+", max = "+this.b+", sum = "+_Jt(this)+"]"},l.a=0,l.b=Ts,l.c=ss,l.d=0,l.e=0,l.f=0,P(pr,"DoubleSummaryStatistics",1904),I(1805,60,U0,Vzt),P(pr,"EmptyStackException",1805),I(451,1967,bw,e_),l.zc=function(e,n){return Z2t(this,e,n)},l.$b=function(){aXt(this)},l._b=function(e){return AGt(this,e)},l.uc=function(e){var n,r;for(r=new Ex(this.a);r.a<r.c.a.length;)if(n=FC(r),Pc(e,this.b[n.g]))return!0;return!1},l.vc=function(){return new At(this)},l.xc=function(e){return go(this,e)},l.Bc=function(e){return Rwt(this,e)},l.gc=function(){return this.a.c},P(pr,"EnumMap",451),I(1352,N1,ju,At),l.$b=function(){aXt(this.a)},l.Hc=function(e){return fZt(this,e)},l.Kc=function(){return new JKt(this.a)},l.Mc=function(e){var n;return fZt(this,e)?(n=u(e,42).cd(),Rwt(this.a,n),!0):!1},l.gc=function(){return this.a.a.c},P(pr,"EnumMap/EntrySet",1352),I(1353,1,ra,JKt),l.Nb=function(e){pa(this,e)},l.Pb=function(){return this.b=FC(this.a),new IGt(this.c,this.b)},l.Ob=function(){return c2t(this.a)},l.Qb=function(){Pm(!!this.b),Rwt(this.c,this.b),this.b=null},P(pr,"EnumMap/EntrySetIterator",1353),I(1354,1984,uot,IGt),l.cd=function(){return this.a},l.dd=function(){return this.b.b[this.a.g]},l.ed=function(e){return cwt(this.b,this.a.g,e)},P(pr,"EnumMap/MapEntry",1354),I(174,N1,{20:1,28:1,14:1,174:1,21:1});var Lge=P(pr,"EnumSet",174);I(156,174,{20:1,28:1,14:1,174:1,156:1,21:1},rh),l.Fc=function(e){return pf(this,u(e,22))},l.Hc=function(e){return Mnt(this,e)},l.Kc=function(){return new Ex(this)},l.Mc=function(e){return dYt(this,e)},l.gc=function(){return this.c},l.c=0,P(pr,"EnumSet/EnumSetImpl",156),I(343,1,ra,Ex),l.Nb=function(e){pa(this,e)},l.Pb=function(){return FC(this)},l.Ob=function(){return c2t(this)},l.Qb=function(){Pm(this.b!=-1),Ji(this.c.b,this.b,null),--this.c.c,this.b=-1},l.a=-1,l.b=-1,P(pr,"EnumSet/EnumSetImpl/IteratorImpl",343),I(43,488,_4,Cr,kx,UVt),l.re=function(e,n){return Gt(e)===Gt(n)||e!=null&&yi(e,n)},l.se=function(e){var n;return n=Hi(e),n|0},P(pr,"HashMap",43),I(53,N1,Bxt,qs,xR,yC),l.Fc=function(e){return Ns(this,e)},l.$b=function(){this.a.$b()},l.Hc=function(e){return S0(this,e)},l.dc=function(){return this.a.gc()==0},l.Kc=function(){return this.a.ec().Kc()},l.Mc=function(e){return f2t(this,e)},l.gc=function(){return this.a.gc()};var Q5n=P(pr,"HashSet",53);I(1781,1,AD,Ke),l.ud=function(e){_ne(this,e)},l.Ib=function(){return"IntSummaryStatistics[count = "+EC(this.a)+", avg = "+(LGt(this.a,0)?Vv(this.d)/Vv(this.a):0)+", min = "+this.c+", max = "+this.b+", sum = "+EC(this.d)+"]"},l.a=0,l.b=_a,l.c=vi,l.d=0,P(pr,"IntSummaryStatistics",1781),I(1049,1,t0,sUt),l.Jc=function(e){va(this,e)},l.Kc=function(){return new Kwt(this)},l.c=0,P(pr,"InternalHashCodeMap",1049),I(711,1,ra,Kwt),l.Nb=function(e){pa(this,e)},l.Pb=function(){return this.d=this.a[this.c++],this.d},l.Ob=function(){var e;return this.c<this.a.length?!0:(e=this.b.next(),e.done?!1:(this.a=e.value[1],this.c=0,!0))},l.Qb=function(){u5t(this.e,this.d.cd()),this.c!=0&&--this.c},l.c=0,l.d=null,P(pr,"InternalHashCodeMap/1",711);var Mge;I(1047,1,t0,aUt),l.Jc=function(e){va(this,e)},l.Kc=function(){return new imt(this)},l.c=0,l.d=0,P(pr,"InternalStringMap",1047),I(710,1,ra,imt),l.Nb=function(e){pa(this,e)},l.Pb=function(){return this.c=this.a,this.a=this.b.next(),new uKt(this.d,this.c,this.d.d)},l.Ob=function(){return!this.a.done},l.Qb=function(){Pne(this.d,this.c.value[0])},P(pr,"InternalStringMap/1",710),I(1048,1984,uot,uKt),l.cd=function(){return this.b.value[0]},l.dd=function(){return this.a.d!=this.c?U9(this.a,this.b.value[0]):this.b.value[1]},l.ed=function(e){return nw(this.a,this.b.value[0],e)},l.c=0,P(pr,"InternalStringMap/2",1048),I(228,43,_4,n2,Emt),l.$b=function(){BWt(this)},l._b=function(e){return MGt(this,e)},l.uc=function(e){var n;for(n=this.d.a;n!=this.d;){if(Pc(n.e,e))return!0;n=n.a}return!1},l.vc=function(){return new Mt(this)},l.xc=function(e){return Wv(this,e)},l.zc=function(e,n){return p2(this,e,n)},l.Bc=function(e){return Pte(this,e)},l.gc=function(){return $9(this.e)},l.c=!1,P(pr,"LinkedHashMap",228),I(387,383,{484:1,383:1,387:1,42:1},cWt,_vt),P(pr,"LinkedHashMap/ChainEntry",387),I(701,N1,ju,Mt),l.$b=function(){BWt(this.a)},l.Hc=function(e){return gZt(this,e)},l.Kc=function(){return new ywt(this)},l.Mc=function(e){var n;return gZt(this,e)?(n=u(e,42).cd(),Pte(this.a,n),!0):!1},l.gc=function(){return $9(this.a.e)},P(pr,"LinkedHashMap/EntrySet",701),I(702,1,ra,ywt),l.Nb=function(e){pa(this,e)},l.Pb=function(){return hte(this)},l.Ob=function(){return this.b!=this.c.a.d},l.Qb=function(){Pm(!!this.a),Trt(this.c.a.e,this),Fvt(this.a),Ux(this.c.a.e,this.a.d),z2t(this.c.a.e,this),this.a=null},P(pr,"LinkedHashMap/EntrySet/EntryIterator",702),I(178,53,Bxt,A0,nnt,$vt);var Z5n=P(pr,"LinkedHashSet",178);I(68,1964,{3:1,4:1,20:1,28:1,52:1,14:1,68:1,15:1},Qi,bnt),l.Fc=function(e){return ni(this,e)},l.$b=function(){_h(this)},l.Zc=function(e){return ei(this,e)},l.gc=function(){return this.b},l.b=0;var J5n=P(pr,"LinkedList",68);I(970,1,Jd,lKt),l.Nb=function(e){pa(this,e)},l.Rb=function(e){XM(this,e)},l.Ob=function(){return kR(this)},l.Sb=function(){return this.b.b!=this.d.a},l.Pb=function(){return ti(this)},l.Tb=function(){return this.a},l.Ub=function(){return krt(this)},l.Vb=function(){return this.a-1},l.Qb=function(){H$(this)},l.Wb=function(e){Pm(!!this.c),this.c.c=e},l.a=0,l.c=null,P(pr,"LinkedList/ListIteratorImpl",970),I(608,1,{},Ht),P(pr,"LinkedList/Node",608),I(1959,1,{});var kEt,Ige;P(pr,"Locale",1959),I(861,1959,{},It),l.Ib=function(){return""},P(pr,"Locale/1",861),I(862,1959,{},Ft),l.Ib=function(){return"unknown"},P(pr,"Locale/4",862),I(109,60,{3:1,102:1,60:1,78:1,109:1},lc,wXt),P(pr,"NoSuchElementException",109),I(404,1,{404:1},gR),l.Fb=function(e){var n;return e===this?!0:Et(e,404)?(n=u(e,404),Pc(this.a,n.a)):!1},l.Hb=function(){return G3(this.a)},l.Ib=function(){return this.a!=null?Vhe+dC(this.a)+")":"Optional.empty()"};var WH;P(pr,"Optional",404),I(463,1,{463:1},QVt,N2t),l.Fb=function(e){var n;return e===this?!0:Et(e,463)?(n=u(e,463),this.a==n.a&&Ls(this.b,n.b)==0):!1},l.Hb=function(){return this.a?ps(this.b):0},l.Ib=function(){return this.a?"OptionalDouble.of("+(""+this.b)+")":"OptionalDouble.empty()"},l.a=!1,l.b=0;var EEt;P(pr,"OptionalDouble",463),I(517,1,{517:1},ZVt,sWt),l.Fb=function(e){var n;return e===this?!0:Et(e,517)?(n=u(e,517),this.a==n.a&&du(this.b,n.b)==0):!1},l.Hb=function(){return this.a?this.b:0},l.Ib=function(){return this.a?"OptionalInt.of("+(""+this.b)+")":"OptionalInt.empty()"},l.a=!1,l.b=0;var Dge;P(pr,"OptionalInt",517),I(503,2004,wy,Vj),l.Gc=function(e){return K3t(this,e)},l.$b=function(){this.b.c=Pt(Xn,Ie,1,0,5,1)},l.Hc=function(e){return(e==null?-1:Ro(this.b,e,0))!=-1},l.Kc=function(){return new G(this)},l.Mc=function(e){return Qee(this,e)},l.gc=function(){return this.b.c.length},l.Nc=function(){return new _n(this,256)},l.Pc=function(){return int(this.b)},l.Qc=function(e){return D1(this.b,e)},P(pr,"PriorityQueue",503),I(1277,1,ra,G),l.Nb=function(e){pa(this,e)},l.Ob=function(){return this.a<this.c.b.c.length},l.Pb=function(){return Qn(this.a<this.c.b.c.length),this.b=this.a++,Fe(this.c.b,this.b)},l.Qb=function(){Pm(this.b!=-1),oit(this.c,this.a=this.b),this.b=-1},l.a=0,l.b=-1,P(pr,"PriorityQueue/1",1277),I(230,1,{230:1},zit,T$),l.a=0,l.b=0;var TEt,CEt,txn=0;P(pr,"Random",230),I(27,1,Mh,_n,Fv,yXt),l.qd=function(){return this.a},l.rd=function(){return nwt(this),this.c},l.Nb=function(e){nwt(this),this.d.Nb(e)},l.sd=function(e){return see(this,e)},l.a=0,l.c=0,P(pr,"Spliterators/IteratorSpliterator",27),I(485,27,Mh,FR),P(pr,"SortedSet/1",485),I(602,1,ND,W),l.we=function(e){this.a.td(e)},P(pr,"Spliterator/OfDouble/0methodref$accept$Type",602),I(603,1,ND,et),l.we=function(e){this.a.td(e)},P(pr,"Spliterator/OfDouble/1methodref$accept$Type",603),I(604,1,AD,at),l.ud=function(e){this.a.td(de(e))},P(pr,"Spliterator/OfInt/2methodref$accept$Type",604),I(605,1,AD,lt),l.ud=function(e){this.a.td(de(e))},P(pr,"Spliterator/OfInt/3methodref$accept$Type",605),I(617,1,Mh),l.Nb=function(e){cbt(this,e)},l.qd=function(){return this.d},l.rd=function(){return this.e},l.d=0,l.e=0,P(pr,"Spliterators/BaseSpliterator",617),I(721,617,Mh),l.xe=function(e){B3(this,e)},l.Nb=function(e){Et(e,182)?B3(this,u(e,182)):B3(this,new et(e))},l.sd=function(e){return Et(e,182)?this.ye(u(e,182)):this.ye(new W(e))},P(pr,"Spliterators/AbstractDoubleSpliterator",721),I(720,617,Mh),l.xe=function(e){B3(this,e)},l.Nb=function(e){Et(e,196)?B3(this,u(e,196)):B3(this,new lt(e))},l.sd=function(e){return Et(e,196)?this.ye(u(e,196)):this.ye(new at(e))},P(pr,"Spliterators/AbstractIntSpliterator",720),I(540,617,Mh),P(pr,"Spliterators/AbstractSpliterator",540),I(692,1,Mh),l.Nb=function(e){cbt(this,e)},l.qd=function(){return this.b},l.rd=function(){return this.d-this.c},l.b=0,l.c=0,l.d=0,P(pr,"Spliterators/BaseArraySpliterator",692),I(947,692,Mh,zKt),l.ze=function(e,n){HKe(this,u(e,38),n)},l.Nb=function(e){Ynt(this,e)},l.sd=function(e){return M$(this,e)},P(pr,"Spliterators/ArraySpliterator",947),I(693,692,Mh,aKt),l.ze=function(e,n){GKe(this,u(e,182),n)},l.xe=function(e){Ynt(this,e)},l.Nb=function(e){Et(e,182)?Ynt(this,u(e,182)):Ynt(this,new et(e))},l.ye=function(e){return M$(this,e)},l.sd=function(e){return Et(e,182)?M$(this,u(e,182)):M$(this,new W(e))},P(pr,"Spliterators/DoubleArraySpliterator",693),I(1968,1,Mh),l.Nb=function(e){cbt(this,e)},l.qd=function(){return 16448},l.rd=function(){return 0};var Oge;P(pr,"Spliterators/EmptySpliterator",1968),I(946,1968,Mh,ie),l.xe=function(e){Rk(e)},l.Nb=function(e){Et(e,196)?Rk(u(e,196)):Rk(new lt(e))},l.ye=function(e){return mbt(e)},l.sd=function(e){return Et(e,196)?mbt(u(e,196)):mbt(new at(e))},P(pr,"Spliterators/EmptySpliterator/OfInt",946),I(580,52,ffe,fR),l.Vc=function(e,n){b8(e,this.a.c.length+1),$m(this.a,e,n)},l.Fc=function(e){return ue(this.a,e)},l.Wc=function(e,n){return b8(e,this.a.c.length+1),Ryt(this.a,e,n)},l.Gc=function(e){return As(this.a,e)},l.$b=function(){this.a.c=Pt(Xn,Ie,1,0,5,1)},l.Hc=function(e){return Ro(this.a,e,0)!=-1},l.Ic=function(e){return II(this.a,e)},l.Jc=function(e){mu(this.a,e)},l.Xb=function(e){return b8(e,this.a.c.length),Fe(this.a,e)},l.Xc=function(e){return Ro(this.a,e,0)},l.dc=function(){return this.a.c.length==0},l.Kc=function(){return new S(this.a)},l.$c=function(e){return b8(e,this.a.c.length),Ag(this.a,e)},l.Ud=function(e,n){BQt(this.a,e,n)},l._c=function(e,n){return b8(e,this.a.c.length),ah(this.a,e,n)},l.gc=function(){return this.a.c.length},l.ad=function(e){Xs(this.a,e)},l.bd=function(e,n){return new Kd(this.a,e,n)},l.Pc=function(){return int(this.a)},l.Qc=function(e){return D1(this.a,e)},l.Ib=function(){return Qp(this.a)},P(pr,"Vector",580),I(809,580,ffe,Ppt),P(pr,"Stack",809),I(206,1,{206:1},c2),l.Ib=function(){return aZt(this)},P(pr,"StringJoiner",206),I(544,1992,{3:1,83:1,171:1,161:1},fGt,Bnt),l.$b=function(){O9(this)},l.vc=function(){return new gC(this)},l.zc=function(e,n){return pz(this,e,n)},l.Bc=function(e){return IC(this,e)},l.gc=function(){return this.c},l.c=0,P(pr,"TreeMap",544),I(390,1,ra,vC),l.Nb=function(e){pa(this,e)},l.Pb=function(){return wj(this)},l.Ob=function(){return mM(this.a)},l.Qb=function(){hKt(this)},P(pr,"TreeMap/EntryIterator",390),I(435,739,ju,gC),l.$b=function(){O9(this.a)},P(pr,"TreeMap/EntrySet",435),I(436,383,{484:1,383:1,42:1,436:1},$rt),l.b=!1;var exn=P(pr,"TreeMap/Node",436);I(621,1,{},$t),l.Ib=function(){return"State: mv="+this.c+" value="+this.d+" done="+this.a+" found="+this.b},l.a=!1,l.b=!1,l.c=!1,P(pr,"TreeMap/State",621),I(297,22,dot,BR),l.Ae=function(){return!1},l.Be=function(){return!1};var Aut,_Et,SEt,AEt,KH=jr(pr,"TreeMap/SubMapType",297,Hr,Ain,sZe);I(1112,297,dot,dUt),l.Be=function(){return!0},jr(pr,"TreeMap/SubMapType/1",1112,KH,null,null),I(1113,297,dot,CUt),l.Ae=function(){return!0},l.Be=function(){return!0},jr(pr,"TreeMap/SubMapType/2",1113,KH,null,null),I(1114,297,dot,gUt),l.Ae=function(){return!0},jr(pr,"TreeMap/SubMapType/3",1114,KH,null,null);var Nge;I(208,N1,{3:1,20:1,28:1,14:1,271:1,21:1,84:1,208:1},Mpt,Lp),l.Nc=function(){return new FR(this)},l.Fc=function(e){return YM(this,e)},l.$b=function(){O9(this.a)},l.Hc=function(e){return pnt(this.a,e)},l.Kc=function(){var e;return e=new vC(new gC(new y(this.a).a).b),new g(e)},l.Mc=function(e){return ent(this,e)},l.gc=function(){return this.a.c};var nxn=P(pr,"TreeSet",208);I(966,1,{},Dt),l.Ce=function(e,n){return EQe(this.a,e,n)},P(got,"BinaryOperator/lambda$0$Type",966),I(967,1,{},jt),l.Ce=function(e,n){return TQe(this.a,e,n)},P(got,"BinaryOperator/lambda$1$Type",967),I(846,1,{},re),l.Kb=function(e){return e},P(got,"Function/lambda$0$Type",846),I(431,1,ui,Zt),l.Mb=function(e){return!this.a.Mb(e)},P(got,"Predicate/lambda$2$Type",431),I(572,1,{572:1});var Pge=P(I_,"Handler",572);I(2007,1,_D),l.ne=function(){return"DUMMY"},l.Ib=function(){return this.ne()};var LEt;P(I_,"Level",2007),I(1621,2007,_D,Oe),l.ne=function(){return"INFO"},P(I_,"Level/LevelInfo",1621),I(1640,1,{},Xzt);var Lut;P(I_,"LogManager",1640),I(1780,1,_D,fKt),l.b=null,P(I_,"LogRecord",1780),I(512,1,{512:1},Irt),l.e=!1;var Fge=!1,Bge=!1,R1=!1,Rge=!1,jge=!1;P(I_,"Logger",512),I(819,572,{572:1},oe),P(I_,"SimpleConsoleLogHandler",819),I(132,22,{3:1,35:1,22:1,132:1},pet);var MEt,Gl,Ly,ll=jr(Is,"Collector/Characteristics",132,Hr,Crn,aZe),$ge;I(744,1,{},owt),P(Is,"CollectorImpl",744),I(1060,1,{},Ne),l.Ce=function(e,n){return Mun(u(e,206),u(n,206))},P(Is,"Collectors/10methodref$merge$Type",1060),I(1061,1,{},me),l.Kb=function(e){return aZt(u(e,206))},P(Is,"Collectors/11methodref$toString$Type",1061),I(1062,1,{},Kt),l.Kb=function(e){return Fn(),!!Jbt(e)},P(Is,"Collectors/12methodref$test$Type",1062),I(251,1,{},we),l.Od=function(e,n){u(e,14).Fc(n)},P(Is,"Collectors/20methodref$add$Type",251),I(253,1,{},_e),l.Ee=function(){return new le},P(Is,"Collectors/21methodref$ctor$Type",253),I(346,1,{},cn),l.Ee=function(){return new qs},P(Is,"Collectors/23methodref$ctor$Type",346),I(347,1,{},li),l.Od=function(e,n){Ns(u(e,53),n)},P(Is,"Collectors/24methodref$add$Type",347),I(1055,1,{},ya),l.Ce=function(e,n){return dGt(u(e,15),u(n,14))},P(Is,"Collectors/4methodref$addAll$Type",1055),I(1059,1,{},da),l.Od=function(e,n){P0(u(e,206),u(n,475))},P(Is,"Collectors/9methodref$add$Type",1059),I(1058,1,{},LKt),l.Ee=function(){return new c2(this.a,this.b,this.c)},P(Is,"Collectors/lambda$15$Type",1058),I(1063,1,{},Oo),l.Ee=function(){var e;return e=new n2,p2(e,(Fn(),!1),new le),p2(e,!0,new le),e},P(Is,"Collectors/lambda$22$Type",1063),I(1064,1,{},zt),l.Ee=function(){return ct(ot(Xn,1),Ie,1,5,[this.a])},P(Is,"Collectors/lambda$25$Type",1064),I(1065,1,{},ee),l.Od=function(e,n){Otn(this.a,s2(e))},P(Is,"Collectors/lambda$26$Type",1065),I(1066,1,{},Vt),l.Ce=function(e,n){return sen(this.a,s2(e),s2(n))},P(Is,"Collectors/lambda$27$Type",1066),I(1067,1,{},ds),l.Kb=function(e){return s2(e)[0]},P(Is,"Collectors/lambda$28$Type",1067),I(713,1,{},Dr),l.Ce=function(e,n){return zvt(e,n)},P(Is,"Collectors/lambda$4$Type",713),I(252,1,{},nr),l.Ce=function(e,n){return lYe(u(e,14),u(n,14))},P(Is,"Collectors/lambda$42$Type",252),I(348,1,{},di),l.Ce=function(e,n){return hYe(u(e,53),u(n,53))},P(Is,"Collectors/lambda$50$Type",348),I(349,1,{},Ee),l.Kb=function(e){return u(e,53)},P(Is,"Collectors/lambda$51$Type",349),I(1054,1,{},fe),l.Od=function(e,n){Wcn(this.a,u(e,83),n)},P(Is,"Collectors/lambda$7$Type",1054),I(1056,1,{},Yn),l.Ce=function(e,n){return xcn(u(e,83),u(n,83),new ya)},P(Is,"Collectors/lambda$8$Type",1056),I(1057,1,{},ge),l.Kb=function(e){return lln(this.a,u(e,83))},P(Is,"Collectors/lambda$9$Type",1057),I(539,1,{}),l.He=function(){LC(this)},l.d=!1,P(Is,"TerminatableStream",539),I(812,539,$xt,G2t),l.He=function(){LC(this)},P(Is,"DoubleStreamImpl",812),I(1784,721,Mh,MKt),l.ye=function(e){return wfn(this,u(e,182))},l.a=null,P(Is,"DoubleStreamImpl/2",1784),I(1785,1,ND,ne),l.we=function(e){rXe(this.a,e)},P(Is,"DoubleStreamImpl/2/lambda$0$Type",1785),I(1782,1,ND,Pe),l.we=function(e){nXe(this.a,e)},P(Is,"DoubleStreamImpl/lambda$0$Type",1782),I(1783,1,ND,pe),l.we=function(e){pie(this.a,e)},P(Is,"DoubleStreamImpl/lambda$2$Type",1783),I(1358,720,Mh,vJt),l.ye=function(e){return xin(this,u(e,196))},l.a=0,l.b=0,l.c=0,P(Is,"IntStream/5",1358),I(787,539,$xt,V2t),l.He=function(){LC(this)},l.Ie=function(){return $p(this),this.a},P(Is,"IntStreamImpl",787),I(788,539,$xt,fbt),l.He=function(){LC(this)},l.Ie=function(){return $p(this),d2t(),Oge},P(Is,"IntStreamImpl/Empty",788),I(1463,1,AD,bn),l.ud=function(e){_ne(this.a,e)},P(Is,"IntStreamImpl/lambda$4$Type",1463);var rxn=Yi(Is,"Stream");I(30,539,{525:1,670:1,833:1},Tn),l.He=function(){LC(this)};var JE;P(Is,"StreamImpl",30),I(845,1,{},He),l.ld=function(e){return DKt(e)},P(Is,"StreamImpl/0methodref$lambda$2$Type",845),I(1084,540,Mh,sKt),l.sd=function(e){for(;han(this);){if(this.a.sd(e))return!0;LC(this.b),this.b=null,this.a=null}return!1},P(Is,"StreamImpl/1",1084),I(1085,1,Un,ze),l.td=function(e){otn(this.a,u(e,833))},P(Is,"StreamImpl/1/lambda$0$Type",1085),I(1086,1,ui,Ve),l.Mb=function(e){return Ns(this.a,e)},P(Is,"StreamImpl/1methodref$add$Type",1086),I(1087,540,Mh,NXt),l.sd=function(e){var n;return this.a||(n=new le,this.b.a.Nb(new En(n)),vn(),Xs(n,this.c),this.a=new _n(n,16)),see(this.a,e)},l.a=null,P(Is,"StreamImpl/5",1087),I(1088,1,Un,En),l.td=function(e){ue(this.a,e)},P(Is,"StreamImpl/5/2methodref$add$Type",1088),I(722,540,Mh,Lmt),l.sd=function(e){for(this.b=!1;!this.b&&this.c.sd(new OGt(this,e)););return this.b},l.b=!1,P(Is,"StreamImpl/FilterSpliterator",722),I(1079,1,Un,OGt),l.td=function(e){ien(this.a,this.b,e)},P(Is,"StreamImpl/FilterSpliterator/lambda$0$Type",1079),I(1075,721,Mh,LJt),l.ye=function(e){return WQe(this,u(e,182))},P(Is,"StreamImpl/MapToDoubleSpliterator",1075),I(1078,1,Un,NGt),l.td=function(e){CYe(this.a,this.b,e)},P(Is,"StreamImpl/MapToDoubleSpliterator/lambda$0$Type",1078),I(1074,720,Mh,MJt),l.ye=function(e){return KQe(this,u(e,196))},P(Is,"StreamImpl/MapToIntSpliterator",1074),I(1077,1,Un,PGt),l.td=function(e){TYe(this.a,this.b,e)},P(Is,"StreamImpl/MapToIntSpliterator/lambda$0$Type",1077),I(719,540,Mh,vmt),l.sd=function(e){return nKt(this,e)},P(Is,"StreamImpl/MapToObjSpliterator",719),I(1076,1,Un,FGt),l.td=function(e){_Ye(this.a,this.b,e)},P(Is,"StreamImpl/MapToObjSpliterator/lambda$0$Type",1076),I(618,1,Un,Ti),l.td=function(e){vtt(this,e)},P(Is,"StreamImpl/ValueConsumer",618),I(1080,1,Un,gn),l.td=function(e){Wb()},P(Is,"StreamImpl/lambda$0$Type",1080),I(1081,1,Un,ks),l.td=function(e){Wb()},P(Is,"StreamImpl/lambda$1$Type",1081),I(1082,1,{},Dn),l.Ce=function(e,n){return TZe(this.a,e,n)},P(Is,"StreamImpl/lambda$4$Type",1082),I(1083,1,Un,DGt),l.td=function(e){NQe(this.b,this.a,e)},P(Is,"StreamImpl/lambda$5$Type",1083),I(1089,1,Un,Kn),l.td=function(e){$cn(this.a,u(e,365))},P(Is,"TerminatableStream/lambda$0$Type",1089),I(2041,1,{}),I(1914,1,{},qa),P("javaemul.internal","ConsoleLogger",1914),I(2038,1,{});var ixn=0,IEt,DEt=0,YH;I(1768,1,Un,La),l.td=function(e){u(e,308)},P(OE,"BowyerWatsonTriangulation/lambda$0$Type",1768),I(1769,1,Un,Sn),l.td=function(e){Ua(this.a,u(e,308).e)},P(OE,"BowyerWatsonTriangulation/lambda$1$Type",1769),I(1770,1,Un,Gs),l.td=function(e){u(e,168)},P(OE,"BowyerWatsonTriangulation/lambda$2$Type",1770),I(1765,1,Oi,Wn),l.ue=function(e,n){return tsn(this.a,u(e,168),u(n,168))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(OE,"NaiveMinST/lambda$0$Type",1765),I(499,1,{},rr),P(OE,"NodeMicroLayout",499),I(168,1,{168:1},Tx),l.Fb=function(e){var n;return Et(e,168)?(n=u(e,168),Pc(this.a,n.a)&&Pc(this.b,n.b)||Pc(this.a,n.b)&&Pc(this.b,n.a)):!1},l.Hb=function(){return G3(this.a)+G3(this.b)};var sxn=P(OE,"TEdge",168);I(308,1,{308:1},ixt),l.Fb=function(e){var n;return Et(e,308)?(n=u(e,308),B$(this,n.a)&&B$(this,n.b)&&B$(this,n.c)):!1},l.Hb=function(){return G3(this.a)+G3(this.b)+G3(this.c)},P(OE,"TTriangle",308),I(221,1,{221:1},cj),P(OE,"Tree",221),I(1254,1,{},xQt),P(pfe,"Scanline",1254);var zge=Yi(pfe,bfe);I(1692,1,{},uee),P(r0,"CGraph",1692),I(307,1,{307:1},bQt),l.b=0,l.c=0,l.d=0,l.g=0,l.i=0,l.k=Ts,P(r0,"CGroup",307),I(815,1,{},Ipt),P(r0,"CGroup/CGroupBuilder",815),I(57,1,{57:1},$Wt),l.Ib=function(){var e;return this.j?Br(this.j.Kb(this)):(L0(XH),XH.o+"@"+(e=Iv(this)>>>0,e.toString(16)))},l.f=0,l.i=Ts;var XH=P(r0,"CNode",57);I(814,1,{},Dpt),P(r0,"CNode/CNodeBuilder",814);var qge;I(1525,1,{},No),l.Oe=function(e,n){return 0},l.Pe=function(e,n){return 0},P(r0,wfe,1525),I(1790,1,{},vs),l.Le=function(e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt;for(C=ss,s=new S(e.a.b);s.a<s.c.c.length;)n=u(J(s),57),C=b.Math.min(C,n.a.j.d.c+n.b.a);for(V=new Qi,d=new S(e.a.a);d.a<d.c.c.length;)h=u(J(d),307),h.k=C,h.g==0&&hs(V,h,V.c.b,V.c);for(;V.b!=0;){for(h=u(V.b==0?null:(Qn(V.b!=0),ch(V,V.a.a)),307),o=h.j.d.c,H=h.a.a.ec().Kc();H.Ob();)M=u(H.Pb(),57),tt=h.k+M.b.a,!bun(e,h,e.d)||M.d.c<tt?M.i=tt:M.i=M.d.c;for(o-=h.j.i,h.b+=o,e.d==(ao(),kf)||e.d==Q0?h.c+=o:h.c-=o,F=h.a.a.ec().Kc();F.Ob();)for(M=u(F.Pb(),57),k=M.c.Kc();k.Ob();)w=u(k.Pb(),57),Op(e.d)?Y=e.g.Oe(M,w):Y=e.g.Pe(M,w),w.a.k=b.Math.max(w.a.k,M.i+M.d.b+Y-w.b.a),qXt(e,w,e.d)&&(w.a.k=b.Math.max(w.a.k,w.d.c-w.b.a)),--w.a.g,w.a.g==0&&ni(V,w.a)}for(r=new S(e.a.b);r.a<r.c.c.length;)n=u(J(r),57),n.d.c=n.i},P(r0,"LongestPathCompaction",1790),I(1690,1,{},Foe),l.e=!1;var Hge,Gge,Vge,Mut=P(r0,xfe,1690);I(1691,1,Un,vr),l.td=function(e){wcn(this.a,u(e,46))},P(r0,kfe,1691),I(1791,1,{},nu),l.Me=function(e){var n,r,s,o,h,d,w;for(r=new S(e.a.b);r.a<r.c.c.length;)n=u(J(r),57),n.c.$b();for(o=new S(e.a.b);o.a<o.c.c.length;)for(s=u(J(o),57),d=new S(e.a.b);d.a<d.c.c.length;)h=u(J(d),57),s!=h&&(s.a&&s.a==h.a||(Op(e.d)?w=e.g.Pe(s,h):w=e.g.Oe(s,h),(h.d.c>s.d.c||s.d.c==h.d.c&&s.d.b<h.d.b)&&rhn(h.d.d+h.d.a+w,s.d.d)&&C3t(h.d.d,s.d.d+s.d.a+w)&&s.c.Fc(h)))},P(r0,"QuadraticConstraintCalculation",1791),I(522,1,{522:1},qtt),l.a=!1,l.b=!1,l.c=!1,l.d=!1,P(r0,Efe,522),I(803,1,{},Wvt),l.Me=function(e){this.c=e,aD(this,new fm)},P(r0,Tfe,803),I(1718,1,{679:1},GXt),l.Ke=function(e){dgn(this,u(e,464))},P(r0,Cfe,1718),I(1719,1,Oi,$s),l.ue=function(e,n){return gnn(u(e,57),u(n,57))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(r0,_fe,1719),I(464,1,{464:1},kbt),l.a=!1,P(r0,Sfe,464),I(1720,1,Oi,Lu),l.ue=function(e,n){return C1n(u(e,464),u(n,464))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(r0,Afe,1720),I(1721,1,wd,fm),l.Lb=function(e){return u(e,57),!0},l.Fb=function(e){return this===e},l.Mb=function(e){return u(e,57),!0},P(r0,"ScanlineConstraintCalculator/lambda$1$Type",1721),I(428,22,{3:1,35:1,22:1,428:1},Cbt);var OEt,Iut,NEt=jr(wot,"HighLevelSortingCriterion",428,Hr,trn,oZe),Uge;I(427,22,{3:1,35:1,22:1,427:1},_bt);var PEt,Dut,FEt=jr(wot,"LowLevelSortingCriterion",427,Hr,ern,cZe),Wge,R4=Yi(Qo,"ILayoutMetaDataProvider");I(853,1,Ih,UL),l.Qe=function(e){an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Gxt),mot),"Polyomino Traversal Strategy"),"Traversal strategy for trying different candidate positions for polyominoes."),HEt),(jg(),cs)),ZEt),un((Xf(),qn))))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Vxt),mot),"Polyomino Secondary Sorting Criterion"),"Possible secondary sorting criteria for the processing order of polyominoes. They are used when polyominoes are equal according to the primary sorting criterion HighLevelSortingCriterion."),zEt),cs),FEt),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Uxt),mot),"Polyomino Primary Sorting Criterion"),"Possible primary sorting criteria for the processing order of polyominoes."),jEt),cs),NEt),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Wxt),mot),"Fill Polyominoes"),"Use the Profile Fill algorithm to fill polyominoes to prevent small polyominoes from being placed inside of big polyominoes with large holes. Might increase packing area."),(Fn(),!0)),Aa),Bs),un(qn))))};var BEt,REt,jEt,$Et,zEt,qEt,HEt;P(wot,"PolyominoOptions",853),I(250,22,{3:1,35:1,22:1,250:1},j3);var GEt,VEt,UEt,WEt,KEt,YEt,Out,XEt,QEt,ZEt=jr(wot,"TraversalStrategy",250,Hr,gon,uZe),Kge;I(213,1,{213:1},av),l.Ib=function(){return"NEdge[id="+this.b+" w="+this.g+" d="+this.a+"]"},l.a=1,l.b=0,l.c=0,l.f=!1,l.g=0;var Yge=P(D_,"NEdge",213);I(176,1,{},Eh),P(D_,"NEdge/NEdgeBuilder",176),I(653,1,{},Gtt),P(D_,"NGraph",653),I(121,1,{121:1},SJt),l.c=-1,l.d=0,l.e=0,l.i=-1,l.j=!1;var JEt=P(D_,"NNode",121);I(795,1,hfe,Apt),l.Jc=function(e){va(this,e)},l.Lc=function(){return new Tn(null,new _n(this,16))},l.ad=function(e){e4(this,e)},l.Nc=function(){return new _n(this,16)},l.Oc=function(){return new Tn(null,new _n(this,16))},l.Vc=function(e,n){++this.b,$m(this.a,e,n)},l.Fc=function(e){return pj(this,e)},l.Wc=function(e,n){return++this.b,Ryt(this.a,e,n)},l.Gc=function(e){return++this.b,As(this.a,e)},l.$b=function(){++this.b,this.a.c=Pt(Xn,Ie,1,0,5,1)},l.Hc=function(e){return Ro(this.a,e,0)!=-1},l.Ic=function(e){return II(this.a,e)},l.Xb=function(e){return Fe(this.a,e)},l.Xc=function(e){return Ro(this.a,e,0)},l.dc=function(){return this.a.c.length==0},l.Kc=function(){return Kx(new S(this.a))},l.Yc=function(){throw rt(new Or)},l.Zc=function(e){throw rt(new Or)},l.$c=function(e){return++this.b,Ag(this.a,e)},l.Mc=function(e){return L2t(this,e)},l._c=function(e,n){return++this.b,ah(this.a,e,n)},l.gc=function(){return this.a.c.length},l.bd=function(e,n){return new Kd(this.a,e,n)},l.Pc=function(){return int(this.a)},l.Qc=function(e){return D1(this.a,e)},l.b=0,P(D_,"NNode/ChangeAwareArrayList",795),I(269,1,{},Ub),P(D_,"NNode/NNodeBuilder",269),I(1630,1,{},Uu),l.a=!1,l.f=vi,l.j=0,P(D_,"NetworkSimplex",1630),I(1294,1,Un,ur),l.td=function(e){lhe(this.a,u(e,680),!0,!1)},P(Lfe,"NodeLabelAndSizeCalculator/lambda$0$Type",1294),I(558,1,{},tr),l.b=!0,l.c=!0,l.d=!0,l.e=!0,P(Lfe,"NodeMarginCalculator",558),I(212,1,{212:1}),l.j=!1,l.k=!1;var Xge=P(k2,"Cell",212);I(124,212,{124:1,212:1},UWt),l.Re=function(){return Lj(this)},l.Se=function(){var e;return e=this.n,this.a.a+e.b+e.c},P(k2,"AtomicCell",124),I(232,22,{3:1,35:1,22:1,232:1},bet);var sc,tu,ac,My=jr(k2,"ContainerArea",232,Hr,_rn,lZe),Qge;I(326,212,Mfe),P(k2,"ContainerCell",326),I(1473,326,Mfe,uie),l.Re=function(){var e;return e=0,this.e?this.b?e=this.b.b:this.a[1][1]&&(e=this.a[1][1].Re()):e=a3t(this,xse(this,!0)),e>0?e+this.n.d+this.n.a:0},l.Se=function(){var e,n,r,s,o;if(o=0,this.e)this.b?o=this.b.a:this.a[1][1]&&(o=this.a[1][1].Se());else if(this.g)o=a3t(this,xst(this,null,!0));else for(n=(Kf(),ct(ot(My,1),ae,232,0,[sc,tu,ac])),r=0,s=n.length;r<s;++r)e=n[r],o=b.Math.max(o,a3t(this,xst(this,e,!0)));return o>0?o+this.n.b+this.n.c:0},l.Te=function(){var e,n,r,s,o;if(this.g)for(e=xst(this,null,!1),r=(Kf(),ct(ot(My,1),ae,232,0,[sc,tu,ac])),s=0,o=r.length;s<o;++s)n=r[s],Kce(this,n,e);else for(r=(Kf(),ct(ot(My,1),ae,232,0,[sc,tu,ac])),s=0,o=r.length;s<o;++s)n=r[s],e=xst(this,n,!1),Kce(this,n,e)},l.Ue=function(){var e,n,r,s;n=this.i,e=this.n,s=xse(this,!1),lmt(this,(Kf(),sc),n.d+e.d,s),lmt(this,ac,n.d+n.a-e.a-s[2],s),r=n.a-e.d-e.a,s[0]>0&&(s[0]+=this.d,r-=s[0]),s[2]>0&&(s[2]+=this.d,r-=s[2]),this.c.a=b.Math.max(0,r),this.c.d=n.d+e.d+(this.c.a-r)/2,s[1]=b.Math.max(s[1],r),lmt(this,tu,n.d+e.d+s[0]-(s[1]-r)/2,s)},l.b=null,l.d=0,l.e=!1,l.f=!1,l.g=!1;var Nut=0,QH=0;P(k2,"GridContainerCell",1473),I(461,22,{3:1,35:1,22:1,461:1},vet);var cb,Sd,mf,Zge=jr(k2,"HorizontalLabelAlignment",461,Hr,Srn,hZe),Jge;I(306,212,{212:1,306:1},iQt,hee,eQt),l.Re=function(){return qKt(this)},l.Se=function(){return Bvt(this)},l.a=0,l.c=!1;var axn=P(k2,"LabelCell",306);I(244,326,{212:1,326:1,244:1},r_),l.Re=function(){return cD(this)},l.Se=function(){return uD(this)},l.Te=function(){fat(this)},l.Ue=function(){dat(this)},l.b=0,l.c=0,l.d=!1,P(k2,"StripContainerCell",244),I(1626,1,ui,Zl),l.Mb=function(e){return TKe(u(e,212))},P(k2,"StripContainerCell/lambda$0$Type",1626),I(1627,1,{},Pa),l.Fe=function(e){return u(e,212).Se()},P(k2,"StripContainerCell/lambda$1$Type",1627),I(1628,1,ui,Al),l.Mb=function(e){return CKe(u(e,212))},P(k2,"StripContainerCell/lambda$2$Type",1628),I(1629,1,{},ua),l.Fe=function(e){return u(e,212).Re()},P(k2,"StripContainerCell/lambda$3$Type",1629),I(462,22,{3:1,35:1,22:1,462:1},wet);var yf,ub,e1,tpe=jr(k2,"VerticalLabelAlignment",462,Hr,Arn,fZe),epe;I(789,1,{},yxt),l.c=0,l.d=0,l.k=0,l.s=0,l.t=0,l.v=!1,l.w=0,l.D=!1,P(Bq,"NodeContext",789),I(1471,1,Oi,bc),l.ue=function(e,n){return iUt(u(e,61),u(n,61))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(Bq,"NodeContext/0methodref$comparePortSides$Type",1471),I(1472,1,Oi,Cc),l.ue=function(e,n){return Zdn(u(e,111),u(n,111))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(Bq,"NodeContext/1methodref$comparePortContexts$Type",1472),I(159,22,{3:1,35:1,22:1,159:1},uh);var npe,rpe,ipe,spe,ape,ope,cpe,upe,lpe,hpe,fpe,dpe,gpe,ppe,bpe,vpe,wpe,mpe,ype,xpe,kpe,Put,Epe=jr(Bq,"NodeLabelLocation",159,Hr,Jit,dZe),Tpe;I(111,1,{111:1},Boe),l.a=!1,P(Bq,"PortContext",111),I(1476,1,Un,ga),l.td=function(e){EHt(u(e,306))},P(FD,Ife,1476),I(1477,1,ui,Ma),l.Mb=function(e){return!!u(e,111).c},P(FD,Dfe,1477),I(1478,1,Un,Ha),l.td=function(e){EHt(u(e,111).c)},P(FD,"LabelPlacer/lambda$2$Type",1478);var t7t;I(1475,1,Un,_c),l.td=function(e){Bm(),iKe(u(e,111))},P(FD,"NodeLabelAndSizeUtilities/lambda$0$Type",1475),I(790,1,Un,bvt),l.td=function(e){bYe(this.b,this.c,this.a,u(e,181))},l.a=!1,l.c=!1,P(FD,"NodeLabelCellCreator/lambda$0$Type",790),I(1474,1,Un,wn),l.td=function(e){oKe(this.a,u(e,181))},P(FD,"PortContextCreator/lambda$0$Type",1474);var ZH;I(1829,1,{},ov),P(PE,"GreedyRectangleStripOverlapRemover",1829),I(1830,1,Oi,Ll),l.ue=function(e,n){return KXe(u(e,222),u(n,222))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(PE,"GreedyRectangleStripOverlapRemover/0methodref$compareByYCoordinate$Type",1830),I(1786,1,{},eqt),l.a=5,l.e=0,P(PE,"RectangleStripOverlapRemover",1786),I(1787,1,Oi,Z1),l.ue=function(e,n){return YXe(u(e,222),u(n,222))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(PE,"RectangleStripOverlapRemover/0methodref$compareLeftRectangleBorders$Type",1787),I(1789,1,Oi,Fd),l.ue=function(e,n){return men(u(e,222),u(n,222))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(PE,"RectangleStripOverlapRemover/1methodref$compareRightRectangleBorders$Type",1789),I(406,22,{3:1,35:1,22:1,406:1},zR);var sO,Fut,But,aO,Cpe=jr(PE,"RectangleStripOverlapRemover/OverlapRemovalDirection",406,Hr,Sin,gZe),_pe;I(222,1,{222:1},Dnt),P(PE,"RectangleStripOverlapRemover/RectangleNode",222),I(1788,1,Un,gr),l.td=function(e){Efn(this.a,u(e,222))},P(PE,"RectangleStripOverlapRemover/lambda$1$Type",1788),I(1304,1,Oi,J1),l.ue=function(e,n){return Lyn(u(e,167),u(n,167))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(md,"PolyominoCompactor/CornerCasesGreaterThanRestComparator",1304),I(1307,1,{},Bd),l.Kb=function(e){return u(e,324).a},P(md,"PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$0$Type",1307),I(1308,1,ui,E0),l.Mb=function(e){return u(e,323).a},P(md,"PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$1$Type",1308),I(1309,1,ui,Bi),l.Mb=function(e){return u(e,323).a},P(md,"PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$2$Type",1309),I(1302,1,Oi,on),l.ue=function(e,n){return uwn(u(e,167),u(n,167))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(md,"PolyominoCompactor/MinNumOfExtensionDirectionsComparator",1302),I(1305,1,{},Jl),l.Kb=function(e){return u(e,324).a},P(md,"PolyominoCompactor/MinNumOfExtensionDirectionsComparator/lambda$0$Type",1305),I(767,1,Oi,kr),l.ue=function(e,n){return hcn(u(e,167),u(n,167))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(md,"PolyominoCompactor/MinNumOfExtensionsComparator",767),I(1300,1,Oi,Ei),l.ue=function(e,n){return yon(u(e,321),u(n,321))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(md,"PolyominoCompactor/MinPerimeterComparator",1300),I(1301,1,Oi,Jo),l.ue=function(e,n){return Xhn(u(e,321),u(n,321))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(md,"PolyominoCompactor/MinPerimeterComparatorWithShape",1301),I(1303,1,Oi,vc),l.ue=function(e,n){return Dwn(u(e,167),u(n,167))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(md,"PolyominoCompactor/SingleExtensionSideGreaterThanRestComparator",1303),I(1306,1,{},tf),l.Kb=function(e){return u(e,324).a},P(md,"PolyominoCompactor/SingleExtensionSideGreaterThanRestComparator/lambda$0$Type",1306),I(777,1,{},Ebt),l.Ce=function(e,n){return Ein(this,u(e,46),u(n,167))},P(md,"SuccessorCombination",777),I(644,1,{},Oc),l.Ce=function(e,n){var r;return fpn((r=u(e,46),u(n,167),r))},P(md,"SuccessorJitter",644),I(643,1,{},ef),l.Ce=function(e,n){var r;return tvn((r=u(e,46),u(n,167),r))},P(md,"SuccessorLineByLine",643),I(568,1,{},nf),l.Ce=function(e,n){var r;return dbn((r=u(e,46),u(n,167),r))},P(md,"SuccessorManhattan",568),I(1356,1,{},Xi),l.Ce=function(e,n){var r;return T2n((r=u(e,46),u(n,167),r))},P(md,"SuccessorMaxNormWindingInMathPosSense",1356),I(400,1,{},fr),l.Ce=function(e,n){return hwt(this,e,n)},l.c=!1,l.d=!1,l.e=!1,l.f=!1,P(md,"SuccessorQuadrantsGeneric",400),I(1357,1,{},Es),l.Kb=function(e){return u(e,324).a},P(md,"SuccessorQuadrantsGeneric/lambda$0$Type",1357),I(323,22,{3:1,35:1,22:1,323:1},$R),l.a=!1;var oO,cO,uO,lO,Spe=jr(jq,Qxt,323,Hr,Min,pZe),Ape;I(1298,1,{}),l.Ib=function(){var e,n,r,s,o,h;for(r=" ",e=de(0),o=0;o<this.o;o++)r+=""+e.a,e=de(PWt(e.a));for(r+=`
`,e=de(0),h=0;h<this.p;h++){for(r+=""+e.a,e=de(PWt(e.a)),s=0;s<this.o;s++)n=ait(this,s,h),yc(n,0)==0?r+="_":yc(n,1)==0?r+="X":r+="0";r+=`
`}return Dl(r,0,r.length-1)},l.o=0,l.p=0,P(jq,"TwoBitGrid",1298),I(321,1298,{321:1},w3t),l.j=0,l.k=0,P(jq,"PlanarGrid",321),I(167,321,{321:1,167:1}),l.g=0,l.i=0,P(jq,"Polyomino",167);var oxn=Yi(BD,Nfe);I(134,1,Zxt,xa),l.Ye=function(e,n){return FI(this,e,n)},l.Ve=function(){return rYt(this)},l.We=function(e){return Q(this,e)},l.Xe=function(e){return Vs(this,e)},P(BD,"MapPropertyHolder",134),I(1299,134,Zxt,Fce),P(jq,"Polyominoes",1299);var Lpe=!1,cS,e7t;I(1766,1,Un,xi),l.td=function(e){Nle(u(e,221))},P(p6,"DepthFirstCompaction/0methodref$compactTree$Type",1766),I(810,1,Un,Jr),l.td=function(e){Gen(this.a,u(e,221))},P(p6,"DepthFirstCompaction/lambda$1$Type",810),I(1767,1,Un,bKt),l.td=function(e){ghn(this.a,this.b,this.c,u(e,221))},P(p6,"DepthFirstCompaction/lambda$2$Type",1767);var uS,n7t;I(65,1,{65:1},EQt),P(p6,"Node",65),I(1250,1,{},TUt),P(p6,"ScanlineOverlapCheck",1250),I(1251,1,{679:1},HXt),l.Ke=function(e){SQe(this,u(e,440))},P(p6,"ScanlineOverlapCheck/OverlapsScanlineHandler",1251),I(1252,1,Oi,Wc),l.ue=function(e,n){return Xun(u(e,65),u(n,65))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(p6,"ScanlineOverlapCheck/OverlapsScanlineHandler/lambda$0$Type",1252),I(440,1,{440:1},Tbt),l.a=!1,P(p6,"ScanlineOverlapCheck/Timestamp",440),I(1253,1,Oi,Ce),l.ue=function(e,n){return _1n(u(e,440),u(n,440))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(p6,"ScanlineOverlapCheck/lambda$0$Type",1253),I(550,1,{},gp),P(Pfe,"SVGImage",550),I(324,1,{324:1},vvt),l.Ib=function(){return"("+this.a+Ka+this.b+Ka+this.c+")"},P(Pfe,"UniqueTriple",324),I(209,1,E2),P(S4,"AbstractLayoutProvider",209),I(1132,209,E2,Be),l.Ze=function(e,n){var r,s,o,h;switch(wr(n,Ffe,1),this.a=Xt(ye(qe(e,(i_(),c7t)))),r2(e,jut)&&(o=Br(qe(e,jut)),r=sat(z8(),o),r&&(s=u(lrt(r.f),209),s.Ze(e,Rc(n,1)))),h=new jZt(this.a),this.b=p4n(h,e),u(qe(e,(Sit(),i7t)),481).g){case 0:Ipn(new Ff,this.b),bo(e,eG,Q(this.b,eG));break;default:qd()}E4n(h),bo(e,a7t,this.b),or(n)},l.a=0,P(Bfe,"DisCoLayoutProvider",1132),I(1244,1,{},Ff),l.c=!1,l.e=0,l.f=0,P(Bfe,"DisCoPolyominoCompactor",1244),I(561,1,{561:1},cYt),l.b=!0,P(zq,"DCComponent",561),I(394,22,{3:1,35:1,22:1,394:1},jR),l.a=!1;var JH,hO,tG,fO,Mpe=jr(zq,"DCDirection",394,Hr,Lin,bZe),Ipe;I(266,134,{3:1,266:1,94:1,134:1},Vst),P(zq,"DCElement",266),I(395,1,{395:1},q3t),l.c=0,P(zq,"DCExtension",395),I(755,134,Zxt,sHt),P(zq,"DCGraph",755),I(481,22,{3:1,35:1,22:1,481:1},uWt);var Rut,r7t=jr(Sot,Jxt,481,Hr,snn,vZe),Dpe;I(854,1,Ih,IJ),l.Qe=function(e){an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,t6t),Rfe),"Connected Components Compaction Strategy"),"Strategy for packing different connected components in order to save space and enhance readability of a graph."),s7t),(jg(),cs)),r7t),un((Xf(),qn))))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,e6t),Rfe),"Connected Components Layout Algorithm"),"A layout algorithm that is to be applied to each connected component before the components themselves are compacted. If unspecified, the positions of the components' nodes are not altered."),T7),Ae),un(qn)))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,n6t),"debug"),"DCGraph"),"Access to the DCGraph is intended for the debug view,"),q1),Xn),un(qn)))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,r6t),"debug"),"List of Polyominoes"),"Access to the polyominoes is intended for the debug view,"),q1),Xn),un(qn)))),kle((new LB,e))};var Ope,i7t,s7t,Npe,Ppe;P(Sot,"DisCoMetaDataProvider",854),I(998,1,Ih,LB),l.Qe=function(e){kle(e)};var Fpe,jut,Bpe,a7t,eG,$ut,o7t,Rpe,jpe,$pe,zpe,c7t;P(Sot,"DisCoOptions",998),I(999,1,{},dg),l.$e=function(){var e;return e=new Be,e},l._e=function(e){},P(Sot,"DisCoOptions/DiscoFactory",999),I(562,167,{321:1,167:1,562:1},mce),l.a=0,l.b=0,l.c=0,l.d=0,P("org.eclipse.elk.alg.disco.structures","DCPolyomino",562);var zut,qut,nG;I(1268,1,ui,dm),l.Mb=function(e){return Jbt(e)},P(A4,"ElkGraphComponentsProcessor/lambda$0$Type",1268),I(1269,1,{},pk),l.Kb=function(e){return jx(),Zd(u(e,79))},P(A4,"ElkGraphComponentsProcessor/lambda$1$Type",1269),I(1270,1,ui,x3),l.Mb=function(e){return btn(u(e,79))},P(A4,"ElkGraphComponentsProcessor/lambda$2$Type",1270),I(1271,1,{},Ml),l.Kb=function(e){return jx(),Xp(u(e,79))},P(A4,"ElkGraphComponentsProcessor/lambda$3$Type",1271),I(1272,1,ui,T0),l.Mb=function(e){return vtn(u(e,79))},P(A4,"ElkGraphComponentsProcessor/lambda$4$Type",1272),I(1273,1,ui,wi),l.Mb=function(e){return orn(this.a,u(e,79))},P(A4,"ElkGraphComponentsProcessor/lambda$5$Type",1273),I(1274,1,{},Ks),l.Kb=function(e){return Cen(this.a,u(e,79))},P(A4,"ElkGraphComponentsProcessor/lambda$6$Type",1274),I(1241,1,{},jZt),l.a=0,P(A4,"ElkGraphTransformer",1241),I(1242,1,{},cv),l.Od=function(e,n){bpn(this,u(e,160),u(n,266))},P(A4,"ElkGraphTransformer/OffsetApplier",1242),I(1243,1,Un,ka),l.td=function(e){zXe(this,u(e,8))},P(A4,"ElkGraphTransformer/OffsetApplier/OffSetToChainApplier",1243),I(753,1,{},F5),P(s6t,a6t,753),I(1232,1,Oi,jb),l.ue=function(e,n){return npn(u(e,231),u(n,231))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(s6t,jfe,1232),I(740,209,E2,Lpt),l.Ze=function(e,n){kce(this,e,n)},P(s6t,"ForceLayoutProvider",740),I(357,134,{3:1,357:1,94:1,134:1}),P(RD,"FParticle",357),I(559,357,{3:1,559:1,357:1,94:1,134:1},HYt),l.Ib=function(){var e;return this.a?(e=Ro(this.a.a,this,0),e>=0?"b"+e+"["+Mrt(this.a)+"]":"b["+Mrt(this.a)+"]"):"b_"+Iv(this)},P(RD,"FBendpoint",559),I(282,134,{3:1,282:1,94:1,134:1},RWt),l.Ib=function(){return Mrt(this)},P(RD,"FEdge",282),I(231,134,{3:1,231:1,94:1,134:1},_$);var cxn=P(RD,"FGraph",231);I(447,357,{3:1,447:1,357:1,94:1,134:1},zZt),l.Ib=function(){return this.b==null||this.b.length==0?"l["+Mrt(this.a)+"]":"l_"+this.b},P(RD,"FLabel",447),I(144,357,{3:1,144:1,357:1,94:1,134:1},QYt),l.Ib=function(){return qwt(this)},l.b=0,P(RD,"FNode",144),I(2003,1,{}),l.bf=function(e){J5t(this,e)},l.cf=function(){yse(this)},l.d=0,P(o6t,"AbstractForceModel",2003),I(631,2003,{631:1},Mne),l.af=function(e,n){var r,s,o,h,d;return boe(this.f,e,n),o=na(nc(n.d),e.d),d=b.Math.sqrt(o.a*o.a+o.b*o.b),s=b.Math.max(0,d-AC(e.e)/2-AC(n.e)/2),r=are(this.e,e,n),r>0?h=-ben(s,this.c)*r:h=cQe(s,this.b)*u(Q(e,(Zf(),t7)),19).a,ud(o,h/d),o},l.bf=function(e){J5t(this,e),this.a=u(Q(e,(Zf(),iG)),19).a,this.c=Xt(ye(Q(e,sG))),this.b=Xt(ye(Q(e,Gut)))},l.df=function(e){return e<this.a},l.a=0,l.b=0,l.c=0,P(o6t,"EadesModel",631),I(632,2003,{632:1},IKt),l.af=function(e,n){var r,s,o,h,d;return boe(this.f,e,n),o=na(nc(n.d),e.d),d=b.Math.sqrt(o.a*o.a+o.b*o.b),s=b.Math.max(0,d-AC(e.e)/2-AC(n.e)/2),h=oQe(s,this.a)*u(Q(e,(Zf(),t7)),19).a,r=are(this.e,e,n),r>0&&(h-=yKe(s,this.a)*r),ud(o,h*this.b/d),o},l.bf=function(e){var n,r,s,o,h,d,w;for(J5t(this,e),this.b=Xt(ye(Q(e,(Zf(),Vut)))),this.c=this.b/u(Q(e,iG),19).a,s=e.e.c.length,h=0,o=0,w=new S(e.e);w.a<w.c.c.length;)d=u(J(w),144),h+=d.e.a,o+=d.e.b;n=h*o,r=Xt(ye(Q(e,sG)))*P1,this.a=b.Math.sqrt(n/(2*s))*r},l.cf=function(){yse(this),this.b-=this.c},l.df=function(e){return this.b>0},l.a=0,l.b=0,l.c=0,P(o6t,"FruchtermanReingoldModel",632),I(849,1,Ih,DJ),l.Qe=function(e){an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,qq),""),"Force Model"),"Determines the model for force calculation."),u7t),(jg(),cs)),l7t),un((Xf(),qn))))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,c6t),""),"Iterations"),"The number of iterations on the force model."),de(300)),gc),ja),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,u6t),""),"Repulsive Power"),"Determines how many bend points are added to the edge; such bend points are regarded as repelling particles in the force model"),de(0)),gc),ja),un(Id)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Iot),""),"FR Temperature"),"The temperature is used as a scaling factor for particle displacements."),yd),Do),ca),un(qn)))),aa(e,Iot,qq,Kpe),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Dot),""),"Eades Repulsion"),"Factor for repulsive forces in Eades' model."),5),Do),ca),un(qn)))),aa(e,Dot,qq,Vpe),vhe((new d9,e))};var qpe,Hpe,u7t,Gpe,Vpe,Upe,Wpe,Kpe;P(N_,"ForceMetaDataProvider",849),I(424,22,{3:1,35:1,22:1,424:1},Sbt);var Hut,rG,l7t=jr(N_,"ForceModelStrategy",424,Hr,nrn,wZe),Ype;I(988,1,Ih,d9),l.Qe=function(e){vhe(e)};var Xpe,Qpe,h7t,iG,f7t,Zpe,Jpe,tbe,d7t,ebe,g7t,p7t,nbe,t7,rbe,Gut,b7t,ibe,sbe,sG,Vut;P(N_,"ForceOptions",988),I(989,1,{},B5),l.$e=function(){var e;return e=new Lpt,e},l._e=function(e){},P(N_,"ForceOptions/ForceFactory",989);var dO,lS,C6,aG;I(850,1,Ih,OJ),l.Qe=function(e){an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,h6t),""),"Fixed Position"),"Prevent that the node is moved by the layout algorithm."),(Fn(),!1)),(jg(),Aa)),Bs),un((Xf(),Js))))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,f6t),""),"Desired Edge Length"),"Either specified for parent nodes or for individual edges, where the latter takes higher precedence."),100),Do),ca),ji(qn,ct(ot(Qg,1),ae,175,0,[Id]))))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,d6t),""),"Layout Dimension"),"Dimensions that are permitted to be altered during layout."),v7t),cs),T7t),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,g6t),""),"Stress Epsilon"),"Termination criterion for the iterative process."),yd),Do),ca),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,p6t),""),"Iteration Limit"),"Maximum number of performed iterations. Takes higher precedence than 'epsilon'."),de(vi)),gc),ja),un(qn)))),ehe((new NJ,e))};var abe,obe,v7t,cbe,ube,lbe;P(N_,"StressMetaDataProvider",850),I(992,1,Ih,NJ),l.Qe=function(e){ehe(e)};var oG,w7t,m7t,y7t,x7t,k7t,hbe,fbe,dbe,gbe,E7t,pbe;P(N_,"StressOptions",992),I(993,1,{},l1),l.$e=function(){var e;return e=new jWt,e},l._e=function(e){},P(N_,"StressOptions/StressFactory",993),I(1128,209,E2,jWt),l.Ze=function(e,n){var r,s,o,h,d;for(wr(n,Gfe,1),je(Re(qe(e,(JI(),x7t))))?je(Re(qe(e,E7t)))||u$((r=new rr((Im(),new Sm(e))),r)):kce(new Lpt,e,Rc(n,1)),o=Zne(e),s=hle(this.a,o),d=s.Kc();d.Ob();)h=u(d.Pb(),231),!(h.e.c.length<=1)&&(Syn(this.b,h),sbn(this.b),mu(h.d,new td));o=The(s),xhe(o),or(n)},P(Vq,"StressLayoutProvider",1128),I(1129,1,Un,td),l.td=function(e){axt(u(e,447))},P(Vq,"StressLayoutProvider/lambda$0$Type",1129),I(990,1,{},Kzt),l.c=0,l.e=0,l.g=0,P(Vq,"StressMajorization",990),I(379,22,{3:1,35:1,22:1,379:1},met);var Uut,Wut,Kut,T7t=jr(Vq,"StressMajorization/Dimension",379,Hr,Mrn,mZe),bbe;I(991,1,Oi,Ci),l.ue=function(e,n){return YQe(this.a,u(e,144),u(n,144))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(Vq,"StressMajorization/lambda$0$Type",991),I(1229,1,{},tZt),P(m6,"ElkLayered",1229),I(1230,1,Un,ed),l.td=function(e){apn(u(e,37))},P(m6,"ElkLayered/lambda$0$Type",1230),I(1231,1,Un,hi),l.td=function(e){XQe(this.a,u(e,37))},P(m6,"ElkLayered/lambda$1$Type",1231),I(1263,1,{},_Ut);var vbe,wbe,mbe;P(m6,"GraphConfigurator",1263),I(759,1,Un,gs),l.td=function(e){Aae(this.a,u(e,10))},P(m6,"GraphConfigurator/lambda$0$Type",759),I(760,1,{},R5),l.Kb=function(e){return r4t(),new Tn(null,new _n(u(e,29).a,16))},P(m6,"GraphConfigurator/lambda$1$Type",760),I(761,1,Un,qi),l.td=function(e){Aae(this.a,u(e,10))},P(m6,"GraphConfigurator/lambda$2$Type",761),I(1127,209,E2,Qzt),l.Ze=function(e,n){var r;r=Kmn(new rqt,e),Gt(qe(e,(Te(),jy)))===Gt(($0(),Zg))?_ln(this.a,r,n):kpn(this.a,r,n),bhe(new FJ,r)},P(m6,"LayeredLayoutProvider",1127),I(356,22,{3:1,35:1,22:1,356:1},xM);var Ad,lb,ou,qc,Io,C7t=jr(m6,"LayeredPhases",356,Hr,dsn,yZe),ybe;I(1651,1,{},jee),l.i=0;var xbe;P(zD,"ComponentsToCGraphTransformer",1651);var kbe;I(1652,1,{},uv),l.ef=function(e,n){return b.Math.min(e.a!=null?Xt(e.a):e.c.i,n.a!=null?Xt(n.a):n.c.i)},l.ff=function(e,n){return b.Math.min(e.a!=null?Xt(e.a):e.c.i,n.a!=null?Xt(n.a):n.c.i)},P(zD,"ComponentsToCGraphTransformer/1",1652),I(81,1,{81:1}),l.i=0,l.k=!0,l.o=Ts;var Yut=P(B_,"CNode",81);I(460,81,{460:1,81:1},A2t,L3t),l.Ib=function(){return""},P(zD,"ComponentsToCGraphTransformer/CRectNode",460),I(1623,1,{},j5);var Xut,Qut;P(zD,"OneDimensionalComponentsCompaction",1623),I(1624,1,{},pp),l.Kb=function(e){return xrn(u(e,46))},l.Fb=function(e){return this===e},P(zD,"OneDimensionalComponentsCompaction/lambda$0$Type",1624),I(1625,1,{},$5),l.Kb=function(e){return Nln(u(e,46))},l.Fb=function(e){return this===e},P(zD,"OneDimensionalComponentsCompaction/lambda$1$Type",1625),I(1654,1,{},XYt),P(B_,"CGraph",1654),I(189,1,{189:1},Xit),l.b=0,l.c=0,l.e=0,l.g=!0,l.i=Ts,P(B_,"CGroup",189),I(1653,1,{},wL),l.ef=function(e,n){return b.Math.max(e.a!=null?Xt(e.a):e.c.i,n.a!=null?Xt(n.a):n.c.i)},l.ff=function(e,n){return b.Math.max(e.a!=null?Xt(e.a):e.c.i,n.a!=null?Xt(n.a):n.c.i)},P(B_,wfe,1653),I(1655,1,{},Loe),l.d=!1;var Ebe,Zut=P(B_,xfe,1655);I(1656,1,{},bl),l.Kb=function(e){return gbt(),Fn(),u(u(e,46).a,81).d.e!=0},l.Fb=function(e){return this===e},P(B_,kfe,1656),I(823,1,{},Rvt),l.a=!1,l.b=!1,l.c=!1,l.d=!1,P(B_,Efe,823),I(1825,1,{},gYt),P(Uq,Tfe,1825);var gO=Yi(C2,bfe);I(1826,1,{369:1},VXt),l.Ke=function(e){pvn(this,u(e,466))},P(Uq,Cfe,1826),I(1827,1,Oi,WP),l.ue=function(e,n){return pnn(u(e,81),u(n,81))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(Uq,_fe,1827),I(466,1,{466:1},Lbt),l.a=!1,P(Uq,Sfe,466),I(1828,1,Oi,Sc),l.ue=function(e,n){return S1n(u(e,466),u(n,466))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(Uq,Afe,1828),I(140,1,{140:1},a8,Ovt),l.Fb=function(e){var n;return e==null||uxn!=sl(e)?!1:(n=u(e,140),Pc(this.c,n.c)&&Pc(this.d,n.d))},l.Hb=function(){return vz(ct(ot(Xn,1),Ie,1,5,[this.c,this.d]))},l.Ib=function(){return"("+this.c+Ka+this.d+(this.a?"cx":"")+this.b+")"},l.a=!0,l.c=0,l.d=0;var uxn=P(C2,"Point",140);I(405,22,{3:1,35:1,22:1,405:1},qR);var _w,Iy,j4,Dy,Tbe=jr(C2,"Point/Quadrant",405,Hr,Iin,xZe),Cbe;I(1642,1,{},Zzt),l.b=null,l.c=null,l.d=null,l.e=null,l.f=null;var _be,Sbe,Abe,Lbe,Mbe;P(C2,"RectilinearConvexHull",1642),I(574,1,{369:1},Bz),l.Ke=function(e){gan(this,u(e,140))},l.b=0;var _7t;P(C2,"RectilinearConvexHull/MaximalElementsEventHandler",574),I(1644,1,Oi,gm),l.ue=function(e,n){return inn(ye(e),ye(n))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(C2,"RectilinearConvexHull/MaximalElementsEventHandler/lambda$0$Type",1644),I(1643,1,{369:1},cee),l.Ke=function(e){A2n(this,u(e,140))},l.a=0,l.b=null,l.c=null,l.d=null,l.e=null,P(C2,"RectilinearConvexHull/RectangleEventHandler",1643),I(1645,1,Oi,gg),l.ue=function(e,n){return oin(u(e,140),u(n,140))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(C2,"RectilinearConvexHull/lambda$0$Type",1645),I(1646,1,Oi,k3),l.ue=function(e,n){return cin(u(e,140),u(n,140))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(C2,"RectilinearConvexHull/lambda$1$Type",1646),I(1647,1,Oi,QK),l.ue=function(e,n){return lin(u(e,140),u(n,140))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(C2,"RectilinearConvexHull/lambda$2$Type",1647),I(1648,1,Oi,$b),l.ue=function(e,n){return uin(u(e,140),u(n,140))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(C2,"RectilinearConvexHull/lambda$3$Type",1648),I(1649,1,Oi,ZK),l.ue=function(e,n){return f0n(u(e,140),u(n,140))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(C2,"RectilinearConvexHull/lambda$4$Type",1649),I(1650,1,{},kQt),P(C2,"Scanline",1650),I(2005,1,{}),P(xd,"AbstractGraphPlacer",2005),I(325,1,{325:1},gWt),l.mf=function(e){return this.nf(e)?(ln(this.b,u(Q(e,(se(),Ny)),21),e),!0):!1},l.nf=function(e){var n,r,s,o;for(n=u(Q(e,(se(),Ny)),21),o=u(Ai(Ni,n),21),s=o.Kc();s.Ob();)if(r=u(s.Pb(),21),!u(Ai(this.b,r),15).dc())return!1;return!0};var Ni;P(xd,"ComponentGroup",325),I(765,2005,{},Opt),l.of=function(e){var n,r;for(r=new S(this.a);r.a<r.c.c.length;)if(n=u(J(r),325),n.mf(e))return;ue(this.a,new gWt(e))},l.lf=function(e,n){var r,s,o,h,d,w,k,C,M,F,H,V,Y;if(this.a.c=Pt(Xn,Ie,1,0,5,1),n.a.c=Pt(Xn,Ie,1,0,5,1),e.dc()){n.f.a=0,n.f.b=0;return}for(d=u(e.Xb(0),37),Lo(n,d),o=e.Kc();o.Ob();)s=u(o.Pb(),37),this.of(s);for(Y=new Ta,h=Xt(ye(Q(d,(Te(),AO)))),C=new S(this.a);C.a<C.c.c.length;)w=u(J(C),325),M=Dhe(w,h),Mg(Yj(w.b),Y.a,Y.b),Y.a+=M.a,Y.b+=M.b;if(n.f.a=Y.a-h,n.f.b=Y.b-h,je(Re(Q(d,WG)))&&Gt(Q(d,X0))===Gt((q0(),A7))){for(V=e.Kc();V.Ob();)F=u(V.Pb(),37),w_(F,F.c.a,F.c.b);for(r=new IT,_xt(r,e,h),H=e.Kc();H.Ob();)F=u(H.Pb(),37),Li(Gf(F.c),r.e);Li(Gf(n.f),r.a)}for(k=new S(this.a);k.a<k.c.c.length;)w=u(J(k),325),_mt(n,Yj(w.b))},P(xd,"ComponentGroupGraphPlacer",765),I(1293,765,{},lqt),l.of=function(e){jre(this,e)},l.lf=function(e,n){var r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt;if(this.a.c=Pt(Xn,Ie,1,0,5,1),n.a.c=Pt(Xn,Ie,1,0,5,1),e.dc()){n.f.a=0,n.f.b=0;return}for(d=u(e.Xb(0),37),Lo(n,d),o=e.Kc();o.Ob();)s=u(o.Pb(),37),jre(this,s);for(Bt=new Ta,_t=new Ta,tt=new Ta,Y=new Ta,h=Xt(ye(Q(d,(Te(),AO)))),C=new S(this.a);C.a<C.c.c.length;){if(w=u(J(C),325),Op(u(Q(n,(ci(),jw)),103))){for(tt.a=Bt.a,Lt=new D9(SC(Wnt(w.b).a).a.kc());Lt.b.Ob();)if(gt=u(PR(Lt.b.Pb()),21),gt.Hc((be(),Nn))){tt.a=_t.a;break}}else if(c8(u(Q(n,jw),103))){for(tt.b=Bt.b,Lt=new D9(SC(Wnt(w.b).a).a.kc());Lt.b.Ob();)if(gt=u(PR(Lt.b.Pb()),21),gt.Hc((be(),Bn))){tt.b=_t.b;break}}if(M=Dhe(u(w,570),h),Mg(Yj(w.b),tt.a,tt.b),Op(u(Q(n,jw),103))){for(_t.a=tt.a+M.a,Y.a=b.Math.max(Y.a,_t.a),Lt=new D9(SC(Wnt(w.b).a).a.kc());Lt.b.Ob();)if(gt=u(PR(Lt.b.Pb()),21),gt.Hc((be(),mr))){Bt.a=tt.a+M.a;break}_t.b=tt.b+M.b,tt.b=_t.b,Y.b=b.Math.max(Y.b,tt.b)}else if(c8(u(Q(n,jw),103))){for(_t.b=tt.b+M.b,Y.b=b.Math.max(Y.b,_t.b),Lt=new D9(SC(Wnt(w.b).a).a.kc());Lt.b.Ob();)if(gt=u(PR(Lt.b.Pb()),21),gt.Hc((be(),Hn))){Bt.b=tt.b+M.b;break}_t.a=tt.a+M.a,tt.a=_t.a,Y.a=b.Math.max(Y.a,tt.a)}}if(n.f.a=Y.a-h,n.f.b=Y.b-h,je(Re(Q(d,WG)))&&Gt(Q(d,X0))===Gt((q0(),A7))){for(V=e.Kc();V.Ob();)F=u(V.Pb(),37),w_(F,F.c.a,F.c.b);for(r=new IT,_xt(r,e,h),H=e.Kc();H.Ob();)F=u(H.Pb(),37),Li(Gf(F.c),r.e);Li(Gf(n.f),r.a)}for(k=new S(this.a);k.a<k.c.c.length;)w=u(J(k),325),_mt(n,Yj(w.b))},P(xd,"ComponentGroupModelOrderGraphPlacer",1293),I(423,22,{3:1,35:1,22:1,423:1},yet);var Jut,S7t,$4,A7t=jr(xd,"ComponentOrderingStrategy",423,Hr,Lrn,kZe),Ibe;I(650,1,{},IT),P(xd,"ComponentsCompactor",650),I(1468,12,ufe,bJt),l.Fc=function(e){return l_(this,u(e,140))},P(xd,"ComponentsCompactor/Hullpoints",1468),I(1465,1,{841:1},ese),l.a=!1,P(xd,"ComponentsCompactor/InternalComponent",1465),I(1464,1,t0,Jzt),l.Jc=function(e){va(this,e)},l.Kc=function(){return new S(this.a)},P(xd,"ComponentsCompactor/InternalConnectedComponents",1464),I(1467,1,{594:1},Ioe),l.hf=function(){return null},l.jf=function(){return this.a},l.gf=function(){return tst(this.d)},l.kf=function(){return this.b},P(xd,"ComponentsCompactor/InternalExternalExtension",1467),I(1466,1,{594:1},nqt),l.jf=function(){return this.a},l.gf=function(){return tst(this.d)},l.hf=function(){return this.c},l.kf=function(){return this.b},P(xd,"ComponentsCompactor/InternalUnionExternalExtension",1466),I(1470,1,{},Yce),P(xd,"ComponentsCompactor/OuterSegments",1470),I(1469,1,{},tqt),P(xd,"ComponentsCompactor/Segments",1469),I(1264,1,{},UXt),P(xd,a6t,1264),I(1265,1,Oi,JK),l.ue=function(e,n){return din(u(e,37),u(n,37))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(xd,"ComponentsProcessor/lambda$0$Type",1265),I(570,325,{325:1,570:1},pJt),l.mf=function(e){return Oyt(this,e)},l.nf=function(e){return Lce(this,e)};var Qr;P(xd,"ModelOrderComponentGroup",570),I(1291,2005,{},KP),l.lf=function(e,n){var r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce,Se;if(e.gc()==1){Bt=u(e.Xb(0),37),Bt!=n&&(n.a.c=Pt(Xn,Ie,1,0,5,1),Nue(n,Bt,0,0),Lo(n,Bt),Swt(n.d,Bt.d),n.f.a=Bt.f.a,n.f.b=Bt.f.b);return}else if(e.dc()){n.a.c=Pt(Xn,Ie,1,0,5,1),n.f.a=0,n.f.b=0;return}if(Gt(Q(n,(Te(),P6)))===Gt((ew(),$4))){for(k=e.Kc();k.Ob();){for(d=u(k.Pb(),37),Lt=0,tt=new S(d.a);tt.a<tt.c.c.length;)Y=u(J(tt),10),Lt+=u(Q(Y,Pwe),19).a;d.p=Lt}vn(),e.ad(new Bf)}for(h=u(e.Xb(0),37),n.a.c=Pt(Xn,Ie,1,0,5,1),Lo(n,h),V=0,Yt=0,C=e.Kc();C.Ob();)d=u(C.Pb(),37),_t=d.f,V=b.Math.max(V,_t.a),Yt+=_t.a*_t.b;for(V=b.Math.max(V,b.Math.sqrt(Yt)*Xt(ye(Q(n,UG)))),o=Xt(ye(Q(n,AO))),ce=0,Se=0,H=0,r=o,w=e.Kc();w.Ob();)d=u(w.Pb(),37),_t=d.f,ce+_t.a>V&&(ce=0,Se+=H+o,H=0),gt=d.c,w_(d,ce+gt.a,Se+gt.b),Gf(gt),r=b.Math.max(r,ce+_t.a),H=b.Math.max(H,_t.b),ce+=_t.a+o;if(n.f.a=r,n.f.b=Se+H,je(Re(Q(h,WG)))){for(s=new IT,_xt(s,e,o),F=e.Kc();F.Ob();)M=u(F.Pb(),37),Li(Gf(M.c),s.e);Li(Gf(n.f),s.a)}_mt(n,e)},P(xd,"SimpleRowGraphPlacer",1291),I(1292,1,Oi,Bf),l.ue=function(e,n){return lcn(u(e,37),u(n,37))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(xd,"SimpleRowGraphPlacer/1",1292);var Dbe;I(1262,1,wd,pm),l.Lb=function(e){var n;return n=u(Q(u(e,243).b,(Te(),_o)),74),!!n&&n.b!=0},l.Fb=function(e){return this===e},l.Mb=function(e){var n;return n=u(Q(u(e,243).b,(Te(),_o)),74),!!n&&n.b!=0},P(Wq,"CompoundGraphPostprocessor/1",1262),I(1261,1,as,iqt),l.pf=function(e,n){rse(this,u(e,37),n)},P(Wq,"CompoundGraphPreprocessor",1261),I(441,1,{441:1},Gre),l.c=!1,P(Wq,"CompoundGraphPreprocessor/ExternalPort",441),I(243,1,{243:1},Tj),l.Ib=function(){return snt(this.c)+":"+Coe(this.b)},P(Wq,"CrossHierarchyEdge",243),I(763,1,Oi,Si),l.ue=function(e,n){return Jfn(this,u(e,243),u(n,243))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(Wq,"CrossHierarchyEdgeComparator",763),I(299,134,{3:1,299:1,94:1,134:1}),l.p=0,P(Jc,"LGraphElement",299),I(17,299,{3:1,17:1,299:1,94:1,134:1},zv),l.Ib=function(){return Coe(this)};var tlt=P(Jc,"LEdge",17);I(37,299,{3:1,20:1,37:1,299:1,94:1,134:1},Kmt),l.Jc=function(e){va(this,e)},l.Kc=function(){return new S(this.b)},l.Ib=function(){return this.b.c.length==0?"G-unlayered"+Qp(this.a):this.a.c.length==0?"G-layered"+Qp(this.b):"G[layerless"+Qp(this.a)+", layers"+Qp(this.b)+"]"};var Obe=P(Jc,"LGraph",37),Nbe;I(657,1,{}),l.qf=function(){return this.e.n},l.We=function(e){return Q(this.e,e)},l.rf=function(){return this.e.o},l.sf=function(){return this.e.p},l.Xe=function(e){return Vs(this.e,e)},l.tf=function(e){this.e.n.a=e.a,this.e.n.b=e.b},l.uf=function(e){this.e.o.a=e.a,this.e.o.b=e.b},l.vf=function(e){this.e.p=e},P(Jc,"LGraphAdapters/AbstractLShapeAdapter",657),I(577,1,{839:1},Ui),l.wf=function(){var e,n;if(!this.b)for(this.b=Hd(this.a.b.c.length),n=new S(this.a.b);n.a<n.c.c.length;)e=u(J(n),70),ue(this.b,new Ga(e));return this.b},l.b=null,P(Jc,"LGraphAdapters/LEdgeAdapter",577),I(656,1,{},trt),l.xf=function(){var e,n,r,s,o,h;if(!this.b){for(this.b=new le,s=new S(this.a.b);s.a<s.c.c.length;)for(r=u(J(s),29),h=new S(r.a);h.a<h.c.c.length;)if(o=u(J(h),10),this.c.Mb(o)&&(ue(this.b,new Cj(this,o,this.e)),this.d)){if(Vs(o,(se(),N6)))for(n=u(Q(o,N6),15).Kc();n.Ob();)e=u(n.Pb(),10),ue(this.b,new Cj(this,e,!1));if(Vs(o,L6))for(n=u(Q(o,L6),15).Kc();n.Ob();)e=u(n.Pb(),10),ue(this.b,new Cj(this,e,!1))}}return this.b},l.qf=function(){throw rt(new yg(Wfe))},l.We=function(e){return Q(this.a,e)},l.rf=function(){return this.a.f},l.sf=function(){return this.a.p},l.Xe=function(e){return Vs(this.a,e)},l.tf=function(e){throw rt(new yg(Wfe))},l.uf=function(e){this.a.f.a=e.a,this.a.f.b=e.b},l.vf=function(e){this.a.p=e},l.b=null,l.d=!1,l.e=!1,P(Jc,"LGraphAdapters/LGraphAdapter",656),I(576,657,{181:1},Ga),P(Jc,"LGraphAdapters/LLabelAdapter",576),I(575,657,{680:1},Cj),l.yf=function(){return this.b},l.zf=function(){return vn(),vn(),io},l.wf=function(){var e,n;if(!this.a)for(this.a=Hd(u(this.e,10).b.c.length),n=new S(u(this.e,10).b);n.a<n.c.c.length;)e=u(J(n),70),ue(this.a,new Ga(e));return this.a},l.Af=function(){var e;return e=u(this.e,10).d,new nvt(e.d,e.c,e.a,e.b)},l.Bf=function(){return vn(),vn(),io},l.Cf=function(){var e,n;if(!this.c)for(this.c=Hd(u(this.e,10).j.c.length),n=new S(u(this.e,10).j);n.a<n.c.c.length;)e=u(J(n),11),ue(this.c,new YGt(e,this.d));return this.c},l.Df=function(){return je(Re(Q(u(this.e,10),(se(),KTt))))},l.Ef=function(e){u(this.e,10).d.b=e.b,u(this.e,10).d.d=e.d,u(this.e,10).d.c=e.c,u(this.e,10).d.a=e.a},l.Ff=function(e){u(this.e,10).f.b=e.b,u(this.e,10).f.d=e.d,u(this.e,10).f.c=e.c,u(this.e,10).f.a=e.a},l.Gf=function(){Kan(this,(z9(),Nbe))},l.a=null,l.b=null,l.c=null,l.d=!1,P(Jc,"LGraphAdapters/LNodeAdapter",575),I(1722,657,{838:1},YGt),l.zf=function(){var e,n,r,s;if(this.d&&u(this.e,11).i.k==(Gn(),Hc))return vn(),vn(),io;if(!this.a){for(this.a=new le,r=new S(u(this.e,11).e);r.a<r.c.c.length;)e=u(J(r),17),ue(this.a,new Ui(e));if(this.d&&(s=u(Q(u(this.e,11),(se(),Zu)),10),s))for(n=new ar(lr(jo(s).a.Kc(),new z));zr(n);)e=u(Lr(n),17),ue(this.a,new Ui(e))}return this.a},l.wf=function(){var e,n;if(!this.b)for(this.b=Hd(u(this.e,11).f.c.length),n=new S(u(this.e,11).f);n.a<n.c.c.length;)e=u(J(n),70),ue(this.b,new Ga(e));return this.b},l.Bf=function(){var e,n,r,s;if(this.d&&u(this.e,11).i.k==(Gn(),Hc))return vn(),vn(),io;if(!this.c){for(this.c=new le,r=new S(u(this.e,11).g);r.a<r.c.c.length;)e=u(J(r),17),ue(this.c,new Ui(e));if(this.d&&(s=u(Q(u(this.e,11),(se(),Zu)),10),s))for(n=new ar(lr(Ms(s).a.Kc(),new z));zr(n);)e=u(Lr(n),17),ue(this.c,new Ui(e))}return this.c},l.Hf=function(){return u(this.e,11).j},l.If=function(){return je(Re(Q(u(this.e,11),(se(),kO))))},l.a=null,l.b=null,l.c=null,l.d=!1,P(Jc,"LGraphAdapters/LPortAdapter",1722),I(1723,1,Oi,mL),l.ue=function(e,n){return zvn(u(e,11),u(n,11))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(Jc,"LGraphAdapters/PortComparator",1723),I(804,1,ui,YP),l.Mb=function(e){return u(e,10),z9(),!0},P(Jc,"LGraphAdapters/lambda$0$Type",804),I(392,299,{3:1,299:1,392:1,94:1,134:1}),P(Jc,"LShape",392),I(70,392,{3:1,299:1,70:1,392:1,94:1,134:1},cHt,u2t),l.Ib=function(){var e;return e=mtn(this),e==null?"label":"l_"+e},P(Jc,"LLabel",70),I(207,1,{3:1,4:1,207:1,414:1}),l.Fb=function(e){var n;return Et(e,207)?(n=u(e,207),this.d==n.d&&this.a==n.a&&this.b==n.b&&this.c==n.c):!1},l.Hb=function(){var e,n;return e=o8(this.b)<<16,e|=o8(this.a)&ms,n=o8(this.c)<<16,n|=o8(this.d)&ms,e^n},l.Jf=function(e){var n,r,s,o,h,d,w,k,C,M,F;for(h=0;h<e.length&&Mre((Rr(h,e.length),e.charCodeAt(h)),Yfe);)++h;for(n=e.length;n>0&&Mre((Rr(n-1,e.length),e.charCodeAt(n-1)),Xfe);)--n;if(h<n){M=py(e.substr(h,n-h),",|;");try{for(w=M,k=0,C=w.length;k<C;++k){if(d=w[k],o=py(d,"="),o.length!=2)throw rt(new Pn("Expecting a list of key-value pairs."));s=uy(o[0]),F=ly(uy(o[1])),hn(s,"top")?this.d=F:hn(s,"left")?this.b=F:hn(s,"bottom")?this.a=F:hn(s,"right")&&(this.c=F)}}catch(H){throw H=Wi(H),Et(H,127)?(r=H,rt(new Pn(Qfe+r))):rt(H)}}},l.Ib=function(){return"[top="+this.d+",left="+this.b+",bottom="+this.a+",right="+this.c+"]"},l.a=0,l.b=0,l.c=0,l.d=0,P(qD,"Spacing",207),I(142,207,Zfe,M9,cUt,nvt,wnt);var L7t=P(qD,"ElkMargin",142);I(651,142,Zfe,Vtt),P(Jc,"LMargin",651),I(10,392,{3:1,299:1,10:1,392:1,94:1,134:1},H0),l.Ib=function(){return Xie(this)},l.i=!1;var o0=P(Jc,"LNode",10);I(267,22,{3:1,35:1,22:1,267:1},K9);var j1,xs,Sl,Zs,Ds,Hc,elt=jr(Jc,"LNode/NodeType",267,Hr,ian,EZe),Pbe;I(116,207,Jfe,wx,Mv,pvt);var M7t=P(qD,"ElkPadding",116);I(764,116,Jfe,Fpt),P(Jc,"LPadding",764),I(11,392,{3:1,299:1,11:1,392:1,94:1,134:1},Mc),l.Ib=function(){var e,n,r;return e=new _p,Vr((e.a+="p_",e),Wz(this)),this.i&&Vr(hc((e.a+="[",e),this.i),"]"),this.e.c.length==1&&this.g.c.length==0&&u(Fe(this.e,0),17).c!=this&&(n=u(Fe(this.e,0),17).c,Vr((e.a+=" << ",e),Wz(n)),Vr(hc((e.a+="[",e),n.i),"]")),this.e.c.length==0&&this.g.c.length==1&&u(Fe(this.g,0),17).d!=this&&(r=u(Fe(this.g,0),17).d,Vr((e.a+=" >> ",e),Wz(r)),Vr(hc((e.a+="[",e),r.i),"]")),e.a},l.c=!0,l.d=!1;var I7t,D7t,O7t,N7t,P7t,F7t,Fbe=P(Jc,"LPort",11);I(397,1,t0,Ys),l.Jc=function(e){va(this,e)},l.Kc=function(){var e;return e=new S(this.a.e),new zs(e)},P(Jc,"LPort/1",397),I(1290,1,ra,zs),l.Nb=function(e){pa(this,e)},l.Pb=function(){return u(J(this.a),17).c},l.Ob=function(){return Vo(this.a)},l.Qb=function(){_C(this.a)},P(Jc,"LPort/1/1",1290),I(359,1,t0,Er),l.Jc=function(e){va(this,e)},l.Kc=function(){var e;return e=new S(this.a.g),new Qt(e)},P(Jc,"LPort/2",359),I(762,1,ra,Qt),l.Nb=function(e){pa(this,e)},l.Pb=function(){return u(J(this.a),17).d},l.Ob=function(){return Vo(this.a)},l.Qb=function(){_C(this.a)},P(Jc,"LPort/2/1",762),I(1283,1,t0,VGt),l.Jc=function(e){va(this,e)},l.Kc=function(){return new S1(this)},P(Jc,"LPort/CombineIter",1283),I(201,1,ra,S1),l.Nb=function(e){pa(this,e)},l.Qb=function(){pHt()},l.Ob=function(){return pC(this)},l.Pb=function(){return Vo(this.a)?J(this.a):J(this.b)},P(Jc,"LPort/CombineIter/1",201),I(1285,1,wd,bp),l.Lb=function(e){return _Yt(e)},l.Fb=function(e){return this===e},l.Mb=function(e){return Bu(),u(e,11).e.c.length!=0},P(Jc,"LPort/lambda$0$Type",1285),I(1284,1,wd,bm),l.Lb=function(e){return SYt(e)},l.Fb=function(e){return this===e},l.Mb=function(e){return Bu(),u(e,11).g.c.length!=0},P(Jc,"LPort/lambda$1$Type",1284),I(1286,1,wd,tY),l.Lb=function(e){return Bu(),u(e,11).j==(be(),Nn)},l.Fb=function(e){return this===e},l.Mb=function(e){return Bu(),u(e,11).j==(be(),Nn)},P(Jc,"LPort/lambda$2$Type",1286),I(1287,1,wd,zb),l.Lb=function(e){return Bu(),u(e,11).j==(be(),Hn)},l.Fb=function(e){return this===e},l.Mb=function(e){return Bu(),u(e,11).j==(be(),Hn)},P(Jc,"LPort/lambda$3$Type",1287),I(1288,1,wd,eY),l.Lb=function(e){return Bu(),u(e,11).j==(be(),mr)},l.Fb=function(e){return this===e},l.Mb=function(e){return Bu(),u(e,11).j==(be(),mr)},P(Jc,"LPort/lambda$4$Type",1288),I(1289,1,wd,nY),l.Lb=function(e){return Bu(),u(e,11).j==(be(),Bn)},l.Fb=function(e){return this===e},l.Mb=function(e){return Bu(),u(e,11).j==(be(),Bn)},P(Jc,"LPort/lambda$5$Type",1289),I(29,299,{3:1,20:1,299:1,29:1,94:1,134:1},Ch),l.Jc=function(e){va(this,e)},l.Kc=function(){return new S(this.a)},l.Ib=function(){return"L_"+Ro(this.b.b,this,0)+Qp(this.a)},P(Jc,"Layer",29),I(1342,1,{},rqt),P(qg,t1e,1342),I(1346,1,{},z5),l.Kb=function(e){return Mo(u(e,82))},P(qg,"ElkGraphImporter/0methodref$connectableShapeToNode$Type",1346),I(1349,1,{},DT),l.Kb=function(e){return Mo(u(e,82))},P(qg,"ElkGraphImporter/1methodref$connectableShapeToNode$Type",1349),I(1343,1,Un,jn),l.td=function(e){joe(this.a,u(e,118))},P(qg,e1e,1343),I(1344,1,Un,_r),l.td=function(e){joe(this.a,u(e,118))},P(qg,n1e,1344),I(1345,1,{},XP),l.Kb=function(e){return new Tn(null,new _n(Jen(u(e,79)),16))},P(qg,r1e,1345),I(1347,1,ui,ir),l.Mb=function(e){return tXe(this.a,u(e,33))},P(qg,i1e,1347),I(1348,1,{},bk),l.Kb=function(e){return new Tn(null,new _n(tnn(u(e,79)),16))},P(qg,"ElkGraphImporter/lambda$5$Type",1348),I(1350,1,ui,sr),l.Mb=function(e){return eXe(this.a,u(e,33))},P(qg,"ElkGraphImporter/lambda$7$Type",1350),I(1351,1,ui,rY),l.Mb=function(e){return vnn(u(e,79))},P(qg,"ElkGraphImporter/lambda$8$Type",1351),I(1278,1,{},FJ);var Bbe;P(qg,"ElkGraphLayoutTransferrer",1278),I(1279,1,ui,Ia),l.Mb=function(e){return HQe(this.a,u(e,17))},P(qg,"ElkGraphLayoutTransferrer/lambda$0$Type",1279),I(1280,1,Un,$r),l.td=function(e){vM(),ue(this.a,u(e,17))},P(qg,"ElkGraphLayoutTransferrer/lambda$1$Type",1280),I(1281,1,ui,Ki),l.Mb=function(e){return AQe(this.a,u(e,17))},P(qg,"ElkGraphLayoutTransferrer/lambda$2$Type",1281),I(1282,1,Un,Po),l.td=function(e){vM(),ue(this.a,u(e,17))},P(qg,"ElkGraphLayoutTransferrer/lambda$3$Type",1282),I(1485,1,as,vk),l.pf=function(e,n){Mon(u(e,37),n)},P($n,"CommentNodeMarginCalculator",1485),I(1486,1,{},iY),l.Kb=function(e){return new Tn(null,new _n(u(e,29).a,16))},P($n,"CommentNodeMarginCalculator/lambda$0$Type",1486),I(1487,1,Un,sY),l.td=function(e){lyn(u(e,10))},P($n,"CommentNodeMarginCalculator/lambda$1$Type",1487),I(1488,1,as,aY),l.pf=function(e,n){Evn(u(e,37),n)},P($n,"CommentPostprocessor",1488),I(1489,1,as,oY),l.pf=function(e,n){M4n(u(e,37),n)},P($n,"CommentPreprocessor",1489),I(1490,1,as,cY),l.pf=function(e,n){Ubn(u(e,37),n)},P($n,"ConstraintsPostprocessor",1490),I(1491,1,as,uY),l.pf=function(e,n){Jon(u(e,37),n)},P($n,"EdgeAndLayerConstraintEdgeReverser",1491),I(1492,1,as,lY),l.pf=function(e,n){zln(u(e,37),n)},P($n,"EndLabelPostprocessor",1492),I(1493,1,{},hY),l.Kb=function(e){return new Tn(null,new _n(u(e,29).a,16))},P($n,"EndLabelPostprocessor/lambda$0$Type",1493),I(1494,1,ui,fY),l.Mb=function(e){return Pnn(u(e,10))},P($n,"EndLabelPostprocessor/lambda$1$Type",1494),I(1495,1,Un,dY),l.td=function(e){A1n(u(e,10))},P($n,"EndLabelPostprocessor/lambda$2$Type",1495),I(1496,1,as,gY),l.pf=function(e,n){vgn(u(e,37),n)},P($n,"EndLabelPreprocessor",1496),I(1497,1,{},yL),l.Kb=function(e){return new Tn(null,new _n(u(e,29).a,16))},P($n,"EndLabelPreprocessor/lambda$0$Type",1497),I(1498,1,Un,vKt),l.td=function(e){vYe(this.a,this.b,this.c,u(e,10))},l.a=0,l.b=0,l.c=!1,P($n,"EndLabelPreprocessor/lambda$1$Type",1498),I(1499,1,ui,pY),l.Mb=function(e){return Gt(Q(u(e,70),(Te(),Md)))===Gt((A1(),S7))},P($n,"EndLabelPreprocessor/lambda$2$Type",1499),I(1500,1,Un,Nc),l.td=function(e){ni(this.a,u(e,70))},P($n,"EndLabelPreprocessor/lambda$3$Type",1500),I(1501,1,ui,bY),l.Mb=function(e){return Gt(Q(u(e,70),(Te(),Md)))===Gt((A1(),Yy))},P($n,"EndLabelPreprocessor/lambda$4$Type",1501),I(1502,1,Un,Za),l.td=function(e){ni(this.a,u(e,70))},P($n,"EndLabelPreprocessor/lambda$5$Type",1502),I(1551,1,as,PJ),l.pf=function(e,n){Yun(u(e,37),n)};var Rbe;P($n,"EndLabelSorter",1551),I(1552,1,Oi,OT),l.ue=function(e,n){return Chn(u(e,456),u(n,456))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P($n,"EndLabelSorter/1",1552),I(456,1,{456:1},BXt),P($n,"EndLabelSorter/LabelGroup",456),I(1553,1,{},QP),l.Kb=function(e){return wM(),new Tn(null,new _n(u(e,29).a,16))},P($n,"EndLabelSorter/lambda$0$Type",1553),I(1554,1,ui,q5),l.Mb=function(e){return wM(),u(e,10).k==(Gn(),Ds)},P($n,"EndLabelSorter/lambda$1$Type",1554),I(1555,1,Un,vY),l.td=function(e){A0n(u(e,10))},P($n,"EndLabelSorter/lambda$2$Type",1555),I(1556,1,ui,wY),l.Mb=function(e){return wM(),Gt(Q(u(e,70),(Te(),Md)))===Gt((A1(),Yy))},P($n,"EndLabelSorter/lambda$3$Type",1556),I(1557,1,ui,mY),l.Mb=function(e){return wM(),Gt(Q(u(e,70),(Te(),Md)))===Gt((A1(),S7))},P($n,"EndLabelSorter/lambda$4$Type",1557),I(1503,1,as,yY),l.pf=function(e,n){xyn(this,u(e,37))},l.b=0,l.c=0,P($n,"FinalSplineBendpointsCalculator",1503),I(1504,1,{},xY),l.Kb=function(e){return new Tn(null,new _n(u(e,29).a,16))},P($n,"FinalSplineBendpointsCalculator/lambda$0$Type",1504),I(1505,1,{},NT),l.Kb=function(e){return new Tn(null,new Fv(new ar(lr(Ms(u(e,10)).a.Kc(),new z))))},P($n,"FinalSplineBendpointsCalculator/lambda$1$Type",1505),I(1506,1,ui,xL),l.Mb=function(e){return!Va(u(e,17))},P($n,"FinalSplineBendpointsCalculator/lambda$2$Type",1506),I(1507,1,ui,ZP),l.Mb=function(e){return Vs(u(e,17),(se(),N2))},P($n,"FinalSplineBendpointsCalculator/lambda$3$Type",1507),I(1508,1,Un,mc),l.td=function(e){Nwn(this.a,u(e,128))},P($n,"FinalSplineBendpointsCalculator/lambda$4$Type",1508),I(1509,1,Un,E3),l.td=function(e){Bst(u(e,17).a)},P($n,"FinalSplineBendpointsCalculator/lambda$5$Type",1509),I(792,1,as,Ea),l.pf=function(e,n){g3n(this,u(e,37),n)},P($n,"GraphTransformer",792),I(511,22,{3:1,35:1,22:1,511:1},Abt);var nlt,pO,jbe=jr($n,"GraphTransformer/Mode",511,Hr,rrn,PJe),$be;I(1510,1,as,T3),l.pf=function(e,n){G2n(u(e,37),n)},P($n,"HierarchicalNodeResizingProcessor",1510),I(1511,1,as,kY),l.pf=function(e,n){Con(u(e,37),n)},P($n,"HierarchicalPortConstraintProcessor",1511),I(1512,1,Oi,rf),l.ue=function(e,n){return Fhn(u(e,10),u(n,10))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P($n,"HierarchicalPortConstraintProcessor/NodeComparator",1512),I(1513,1,as,H5),l.pf=function(e,n){Vmn(u(e,37),n)},P($n,"HierarchicalPortDummySizeProcessor",1513),I(1514,1,as,EY),l.pf=function(e,n){qvn(this,u(e,37),n)},l.a=0,P($n,"HierarchicalPortOrthogonalEdgeRouter",1514),I(1515,1,Oi,wk),l.ue=function(e,n){return WXe(u(e,10),u(n,10))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P($n,"HierarchicalPortOrthogonalEdgeRouter/1",1515),I(1516,1,Oi,Rd),l.ue=function(e,n){return oan(u(e,10),u(n,10))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P($n,"HierarchicalPortOrthogonalEdgeRouter/2",1516),I(1517,1,as,TY),l.pf=function(e,n){d0n(u(e,37),n)},P($n,"HierarchicalPortPositionProcessor",1517),I(1518,1,as,BJ),l.pf=function(e,n){c5n(this,u(e,37))},l.a=0,l.c=0;var cG,uG;P($n,"HighDegreeNodeLayeringProcessor",1518),I(571,1,{571:1},CY),l.b=-1,l.d=-1,P($n,"HighDegreeNodeLayeringProcessor/HighDegreeNodeInformation",571),I(1519,1,{},_Y),l.Kb=function(e){return GM(),jo(u(e,10))},l.Fb=function(e){return this===e},P($n,"HighDegreeNodeLayeringProcessor/lambda$0$Type",1519),I(1520,1,{},SY),l.Kb=function(e){return GM(),Ms(u(e,10))},l.Fb=function(e){return this===e},P($n,"HighDegreeNodeLayeringProcessor/lambda$1$Type",1520),I(1526,1,as,PT),l.pf=function(e,n){mmn(this,u(e,37),n)},P($n,"HyperedgeDummyMerger",1526),I(793,1,{},wvt),l.a=!1,l.b=!1,l.c=!1,P($n,"HyperedgeDummyMerger/MergeState",793),I(1527,1,{},kL),l.Kb=function(e){return new Tn(null,new _n(u(e,29).a,16))},P($n,"HyperedgeDummyMerger/lambda$0$Type",1527),I(1528,1,{},JP),l.Kb=function(e){return new Tn(null,new _n(u(e,10).j,16))},P($n,"HyperedgeDummyMerger/lambda$1$Type",1528),I(1529,1,Un,EL),l.td=function(e){u(e,11).p=-1},P($n,"HyperedgeDummyMerger/lambda$2$Type",1529),I(1530,1,as,G5),l.pf=function(e,n){vmn(u(e,37),n)},P($n,"HypernodesProcessor",1530),I(1531,1,as,AY),l.pf=function(e,n){wmn(u(e,37),n)},P($n,"InLayerConstraintProcessor",1531),I(1532,1,as,tF),l.pf=function(e,n){Kon(u(e,37),n)},P($n,"InnermostNodeMarginCalculator",1532),I(1533,1,as,eF),l.pf=function(e,n){C4n(this,u(e,37))},l.a=Ts,l.b=Ts,l.c=ss,l.d=ss;var lxn=P($n,"InteractiveExternalPortPositioner",1533);I(1534,1,{},LY),l.Kb=function(e){return u(e,17).d.i},l.Fb=function(e){return this===e},P($n,"InteractiveExternalPortPositioner/lambda$0$Type",1534),I(1535,1,{},Ja),l.Kb=function(e){return XXe(this.a,ye(e))},l.Fb=function(e){return this===e},P($n,"InteractiveExternalPortPositioner/lambda$1$Type",1535),I(1536,1,{},MY),l.Kb=function(e){return u(e,17).c.i},l.Fb=function(e){return this===e},P($n,"InteractiveExternalPortPositioner/lambda$2$Type",1536),I(1537,1,{},vl),l.Kb=function(e){return QXe(this.a,ye(e))},l.Fb=function(e){return this===e},P($n,"InteractiveExternalPortPositioner/lambda$3$Type",1537),I(1538,1,{},zf),l.Kb=function(e){return $Qe(this.a,ye(e))},l.Fb=function(e){return this===e},P($n,"InteractiveExternalPortPositioner/lambda$4$Type",1538),I(1539,1,{},xp),l.Kb=function(e){return zQe(this.a,ye(e))},l.Fb=function(e){return this===e},P($n,"InteractiveExternalPortPositioner/lambda$5$Type",1539),I(77,22,{3:1,35:1,22:1,77:1,234:1},ws),l.Kf=function(){switch(this.g){case 15:return new UX;case 22:return new WX;case 47:return new XX;case 28:case 35:return new C3;case 32:return new vk;case 42:return new aY;case 1:return new oY;case 41:return new cY;case 56:return new Ea((q8(),pO));case 0:return new Ea((q8(),nlt));case 2:return new uY;case 54:return new lY;case 33:return new gY;case 51:return new yY;case 55:return new T3;case 13:return new kY;case 38:return new H5;case 44:return new EY;case 40:return new TY;case 9:return new BJ;case 49:return new rWt;case 37:return new PT;case 43:return new G5;case 27:return new AY;case 30:return new tF;case 3:return new eF;case 18:return new DY;case 29:return new OY;case 5:return new MB;case 50:return new IY;case 34:return new RJ;case 36:return new mk;case 52:return new PJ;case 11:return new vm;case 7:return new $J;case 39:return new yk;case 45:return new BY;case 16:return new FT;case 10:return new nd;case 48:return new CL;case 21:return new xk;case 23:return new eet((Zv(),DS));case 8:return new sF;case 12:return new SL;case 4:return new jY;case 19:return new g9;case 17:return new GY;case 53:return new VY;case 6:return new fF;case 25:return new oqt;case 46:return new YY;case 31:return new zWt;case 14:return new LL;case 26:return new JX;case 20:return new rX;case 24:return new eet((Zv(),dV));default:throw rt(new Pn(Bot+(this.f!=null?this.f:""+this.g)))}};var B7t,R7t,j7t,$7t,z7t,q7t,H7t,G7t,V7t,U7t,hS,lG,hG,W7t,K7t,Y7t,X7t,Q7t,Z7t,J7t,fS,tTt,eTt,nTt,rTt,iTt,rlt,fG,dG,sTt,gG,pG,bG,e7,n7,r7,aTt,vG,wG,oTt,mG,yG,cTt,uTt,lTt,hTt,xG,ilt,bO,kG,EG,TG,CG,fTt,dTt,gTt,pTt,hxn=jr($n,v6t,77,Hr,Ice,NJe),zbe;I(1540,1,as,DY),l.pf=function(e,n){S4n(u(e,37),n)},P($n,"InvertedPortProcessor",1540),I(1541,1,as,OY),l.pf=function(e,n){Swn(u(e,37),n)},P($n,"LabelAndNodeSizeProcessor",1541),I(1542,1,ui,NY),l.Mb=function(e){return u(e,10).k==(Gn(),Ds)},P($n,"LabelAndNodeSizeProcessor/lambda$0$Type",1542),I(1543,1,ui,jd),l.Mb=function(e){return u(e,10).k==(Gn(),xs)},P($n,"LabelAndNodeSizeProcessor/lambda$1$Type",1543),I(1544,1,Un,wKt),l.td=function(e){wYe(this.b,this.a,this.c,u(e,10))},l.a=!1,l.c=!1,P($n,"LabelAndNodeSizeProcessor/lambda$2$Type",1544),I(1545,1,as,MB),l.pf=function(e,n){Q3n(u(e,37),n)};var qbe;P($n,"LabelDummyInserter",1545),I(1546,1,wd,lv),l.Lb=function(e){return Gt(Q(u(e,70),(Te(),Md)))===Gt((A1(),_7))},l.Fb=function(e){return this===e},l.Mb=function(e){return Gt(Q(u(e,70),(Te(),Md)))===Gt((A1(),_7))},P($n,"LabelDummyInserter/1",1546),I(1547,1,as,IY),l.pf=function(e,n){Jyn(u(e,37),n)},P($n,"LabelDummyRemover",1547),I(1548,1,ui,PY),l.Mb=function(e){return je(Re(Q(u(e,70),(Te(),Ult))))},P($n,"LabelDummyRemover/lambda$0$Type",1548),I(1359,1,as,RJ),l.pf=function(e,n){A3n(this,u(e,37),n)},l.a=null;var slt;P($n,"LabelDummySwitcher",1359),I(286,1,{286:1},Lue),l.c=0,l.d=null,l.f=0,P($n,"LabelDummySwitcher/LabelDummyInfo",286),I(1360,1,{},nF),l.Kb=function(e){return Xx(),new Tn(null,new _n(u(e,29).a,16))},P($n,"LabelDummySwitcher/lambda$0$Type",1360),I(1361,1,ui,rF),l.Mb=function(e){return Xx(),u(e,10).k==(Gn(),Sl)},P($n,"LabelDummySwitcher/lambda$1$Type",1361),I(1362,1,{},mg),l.Kb=function(e){return LQe(this.a,u(e,10))},P($n,"LabelDummySwitcher/lambda$2$Type",1362),I(1363,1,Un,sd),l.td=function(e){Aen(this.a,u(e,286))},P($n,"LabelDummySwitcher/lambda$3$Type",1363),I(1364,1,Oi,FY),l.ue=function(e,n){return nen(u(e,286),u(n,286))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P($n,"LabelDummySwitcher/lambda$4$Type",1364),I(791,1,as,C3),l.pf=function(e,n){jsn(u(e,37),n)},P($n,"LabelManagementProcessor",791),I(1549,1,as,mk),l.pf=function(e,n){lvn(u(e,37),n)},P($n,"LabelSideSelector",1549),I(1550,1,ui,TL),l.Mb=function(e){return je(Re(Q(u(e,70),(Te(),Ult))))},P($n,"LabelSideSelector/lambda$0$Type",1550),I(1558,1,as,vm),l.pf=function(e,n){Umn(u(e,37),n)},P($n,"LayerConstraintPostprocessor",1558),I(1559,1,as,$J),l.pf=function(e,n){abn(u(e,37),n)};var bTt;P($n,"LayerConstraintPreprocessor",1559),I(360,22,{3:1,35:1,22:1,360:1},HR);var vO,_G,SG,alt,Hbe=jr($n,"LayerConstraintPreprocessor/HiddenNodeConnections",360,Hr,Din,CZe),Gbe;I(1560,1,as,yk),l.pf=function(e,n){Xyn(u(e,37),n)},P($n,"LayerSizeAndGraphHeightCalculator",1560),I(1561,1,as,BY),l.pf=function(e,n){Jbn(u(e,37),n)},P($n,"LongEdgeJoiner",1561),I(1562,1,as,FT),l.pf=function(e,n){Iyn(u(e,37),n)},P($n,"LongEdgeSplitter",1562),I(1563,1,as,nd),l.pf=function(e,n){I3n(this,u(e,37),n)},l.d=0,l.e=0,l.i=0,l.j=0,l.k=0,l.n=0,P($n,"NodePromotion",1563),I(1564,1,{},iF),l.Kb=function(e){return u(e,46),Fn(),!0},l.Fb=function(e){return this===e},P($n,"NodePromotion/lambda$0$Type",1564),I(1565,1,{},kp),l.Kb=function(e){return Yen(this.a,u(e,46))},l.Fb=function(e){return this===e},l.a=0,P($n,"NodePromotion/lambda$1$Type",1565),I(1566,1,{},qf),l.Kb=function(e){return Xen(this.a,u(e,46))},l.Fb=function(e){return this===e},l.a=0,P($n,"NodePromotion/lambda$2$Type",1566),I(1567,1,as,CL),l.pf=function(e,n){e5n(u(e,37),n)},P($n,"NorthSouthPortPostprocessor",1567),I(1568,1,as,xk),l.pf=function(e,n){$4n(u(e,37),n)},P($n,"NorthSouthPortPreprocessor",1568),I(1569,1,Oi,_L),l.ue=function(e,n){return pcn(u(e,11),u(n,11))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P($n,"NorthSouthPortPreprocessor/lambda$0$Type",1569),I(1570,1,as,sF),l.pf=function(e,n){rmn(u(e,37),n)},P($n,"PartitionMidprocessor",1570),I(1571,1,ui,RY),l.Mb=function(e){return Vs(u(e,10),(Te(),b7))},P($n,"PartitionMidprocessor/lambda$0$Type",1571),I(1572,1,Un,bv),l.td=function(e){wnn(this.a,u(e,10))},P($n,"PartitionMidprocessor/lambda$1$Type",1572),I(1573,1,as,SL),l.pf=function(e,n){m2n(u(e,37),n)},P($n,"PartitionPostprocessor",1573),I(1574,1,as,jY),l.pf=function(e,n){Lpn(u(e,37),n)},P($n,"PartitionPreprocessor",1574),I(1575,1,ui,$Y),l.Mb=function(e){return Vs(u(e,10),(Te(),b7))},P($n,"PartitionPreprocessor/lambda$0$Type",1575),I(1576,1,{},aF),l.Kb=function(e){return new Tn(null,new Fv(new ar(lr(Ms(u(e,10)).a.Kc(),new z))))},P($n,"PartitionPreprocessor/lambda$1$Type",1576),I(1577,1,ui,V5),l.Mb=function(e){return khn(u(e,17))},P($n,"PartitionPreprocessor/lambda$2$Type",1577),I(1578,1,Un,oF),l.td=function(e){Ccn(u(e,17))},P($n,"PartitionPreprocessor/lambda$3$Type",1578),I(1579,1,as,g9),l.pf=function(e,n){zwn(u(e,37),n)};var vTt,Vbe,Ube,Wbe,wTt,mTt;P($n,"PortListSorter",1579),I(1580,1,{},U5),l.Kb=function(e){return J8(),u(e,11).e},P($n,"PortListSorter/lambda$0$Type",1580),I(1581,1,{},zY),l.Kb=function(e){return J8(),u(e,11).g},P($n,"PortListSorter/lambda$1$Type",1581),I(1582,1,Oi,AL),l.ue=function(e,n){return HZt(u(e,11),u(n,11))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P($n,"PortListSorter/lambda$2$Type",1582),I(1583,1,Oi,qY),l.ue=function(e,n){return Ufn(u(e,11),u(n,11))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P($n,"PortListSorter/lambda$3$Type",1583),I(1584,1,Oi,HY),l.ue=function(e,n){return Zue(u(e,11),u(n,11))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P($n,"PortListSorter/lambda$4$Type",1584),I(1585,1,as,GY),l.pf=function(e,n){tbn(u(e,37),n)},P($n,"PortSideProcessor",1585),I(1586,1,as,VY),l.pf=function(e,n){ewn(u(e,37),n)},P($n,"ReversedEdgeRestorer",1586),I(1591,1,as,oqt),l.pf=function(e,n){Mfn(this,u(e,37),n)},P($n,"SelfLoopPortRestorer",1591),I(1592,1,{},cF),l.Kb=function(e){return new Tn(null,new _n(u(e,29).a,16))},P($n,"SelfLoopPortRestorer/lambda$0$Type",1592),I(1593,1,ui,UY),l.Mb=function(e){return u(e,10).k==(Gn(),Ds)},P($n,"SelfLoopPortRestorer/lambda$1$Type",1593),I(1594,1,ui,WY),l.Mb=function(e){return Vs(u(e,10),(se(),d7))},P($n,"SelfLoopPortRestorer/lambda$2$Type",1594),I(1595,1,{},KY),l.Kb=function(e){return u(Q(u(e,10),(se(),d7)),403)},P($n,"SelfLoopPortRestorer/lambda$3$Type",1595),I(1596,1,Un,_m),l.td=function(e){j0n(this.a,u(e,403))},P($n,"SelfLoopPortRestorer/lambda$4$Type",1596),I(794,1,Un,uF),l.td=function(e){tgn(u(e,101))},P($n,"SelfLoopPortRestorer/lambda$5$Type",794),I(1597,1,as,YY),l.pf=function(e,n){jhn(u(e,37),n)},P($n,"SelfLoopPostProcessor",1597),I(1598,1,{},XY),l.Kb=function(e){return new Tn(null,new _n(u(e,29).a,16))},P($n,"SelfLoopPostProcessor/lambda$0$Type",1598),I(1599,1,ui,QY),l.Mb=function(e){return u(e,10).k==(Gn(),Ds)},P($n,"SelfLoopPostProcessor/lambda$1$Type",1599),I(1600,1,ui,lF),l.Mb=function(e){return Vs(u(e,10),(se(),d7))},P($n,"SelfLoopPostProcessor/lambda$2$Type",1600),I(1601,1,Un,ZY),l.td=function(e){U1n(u(e,10))},P($n,"SelfLoopPostProcessor/lambda$3$Type",1601),I(1602,1,{},JY),l.Kb=function(e){return new Tn(null,new _n(u(e,101).f,1))},P($n,"SelfLoopPostProcessor/lambda$4$Type",1602),I(1603,1,Un,gx),l.td=function(e){Pin(this.a,u(e,409))},P($n,"SelfLoopPostProcessor/lambda$5$Type",1603),I(1604,1,ui,hF),l.Mb=function(e){return!!u(e,101).i},P($n,"SelfLoopPostProcessor/lambda$6$Type",1604),I(1605,1,Un,O3),l.td=function(e){mKe(this.a,u(e,101))},P($n,"SelfLoopPostProcessor/lambda$7$Type",1605),I(1587,1,as,fF),l.pf=function(e,n){Dbn(u(e,37),n)},P($n,"SelfLoopPreProcessor",1587),I(1588,1,{},dF),l.Kb=function(e){return new Tn(null,new _n(u(e,101).f,1))},P($n,"SelfLoopPreProcessor/lambda$0$Type",1588),I(1589,1,{},tX),l.Kb=function(e){return u(e,409).a},P($n,"SelfLoopPreProcessor/lambda$1$Type",1589),I(1590,1,Un,eX),l.td=function(e){TXe(u(e,17))},P($n,"SelfLoopPreProcessor/lambda$2$Type",1590),I(1606,1,as,zWt),l.pf=function(e,n){L0n(this,u(e,37),n)},P($n,"SelfLoopRouter",1606),I(1607,1,{},kk),l.Kb=function(e){return new Tn(null,new _n(u(e,29).a,16))},P($n,"SelfLoopRouter/lambda$0$Type",1607),I(1608,1,ui,W5),l.Mb=function(e){return u(e,10).k==(Gn(),Ds)},P($n,"SelfLoopRouter/lambda$1$Type",1608),I(1609,1,ui,BT),l.Mb=function(e){return Vs(u(e,10),(se(),d7))},P($n,"SelfLoopRouter/lambda$2$Type",1609),I(1610,1,{},nX),l.Kb=function(e){return u(Q(u(e,10),(se(),d7)),403)},P($n,"SelfLoopRouter/lambda$3$Type",1610),I(1611,1,Un,BGt),l.td=function(e){unn(this.a,this.b,u(e,403))},P($n,"SelfLoopRouter/lambda$4$Type",1611),I(1612,1,as,LL),l.pf=function(e,n){Z2n(u(e,37),n)},P($n,"SemiInteractiveCrossMinProcessor",1612),I(1613,1,ui,RT),l.Mb=function(e){return u(e,10).k==(Gn(),Ds)},P($n,"SemiInteractiveCrossMinProcessor/lambda$0$Type",1613),I(1614,1,ui,ML),l.Mb=function(e){return rYt(u(e,10))._b((Te(),Hy))},P($n,"SemiInteractiveCrossMinProcessor/lambda$1$Type",1614),I(1615,1,Oi,gF),l.ue=function(e,n){return Son(u(e,10),u(n,10))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P($n,"SemiInteractiveCrossMinProcessor/lambda$2$Type",1615),I(1616,1,{},pF),l.Ce=function(e,n){return _nn(u(e,10),u(n,10))},P($n,"SemiInteractiveCrossMinProcessor/lambda$3$Type",1616),I(1618,1,as,rX),l.pf=function(e,n){Wmn(u(e,37),n)},P($n,"SortByInputModelProcessor",1618),I(1619,1,ui,iX),l.Mb=function(e){return u(e,11).g.c.length!=0},P($n,"SortByInputModelProcessor/lambda$0$Type",1619),I(1620,1,Un,px),l.td=function(e){sgn(this.a,u(e,11))},P($n,"SortByInputModelProcessor/lambda$1$Type",1620),I(1693,803,{},Zee),l.Me=function(e){var n,r,s,o;switch(this.c=e,this.a.g){case 2:n=new le,us(Ri(new Tn(null,new _n(this.c.a.b,16)),new mF),new qGt(this,n)),aD(this,new vF),mu(n,new aX),n.c=Pt(Xn,Ie,1,0,5,1),us(Ri(new Tn(null,new _n(this.c.a.b,16)),new oX),new N3(n)),aD(this,new cX),mu(n,new uX),n.c=Pt(Xn,Ie,1,0,5,1),r=xUt(hne(Jj(new Tn(null,new _n(this.c.a.b,16)),new $d(this))),new lX),us(new Tn(null,new _n(this.c.a.a,16)),new jGt(r,n)),aD(this,new hX),mu(n,new sX),n.c=Pt(Xn,Ie,1,0,5,1);break;case 3:s=new le,aD(this,new bF),o=xUt(hne(Jj(new Tn(null,new _n(this.c.a.b,16)),new T9(this))),new wF),us(Ri(new Tn(null,new _n(this.c.a.b,16)),new fX),new zGt(o,s)),aD(this,new dX),mu(s,new gX),s.c=Pt(Xn,Ie,1,0,5,1);break;default:throw rt(new Uzt)}},l.b=0,P(Cs,"EdgeAwareScanlineConstraintCalculation",1693),I(1694,1,wd,bF),l.Lb=function(e){return Et(u(e,57).g,145)},l.Fb=function(e){return this===e},l.Mb=function(e){return Et(u(e,57).g,145)},P(Cs,"EdgeAwareScanlineConstraintCalculation/lambda$0$Type",1694),I(1695,1,{},T9),l.Fe=function(e){return Rgn(this.a,u(e,57))},P(Cs,"EdgeAwareScanlineConstraintCalculation/lambda$1$Type",1695),I(1703,1,Oq,RGt),l.Vd=function(){c_(this.a,this.b,-1)},l.b=0,P(Cs,"EdgeAwareScanlineConstraintCalculation/lambda$10$Type",1703),I(1705,1,wd,vF),l.Lb=function(e){return Et(u(e,57).g,145)},l.Fb=function(e){return this===e},l.Mb=function(e){return Et(u(e,57).g,145)},P(Cs,"EdgeAwareScanlineConstraintCalculation/lambda$11$Type",1705),I(1706,1,Un,aX),l.td=function(e){u(e,365).Vd()},P(Cs,"EdgeAwareScanlineConstraintCalculation/lambda$12$Type",1706),I(1707,1,ui,oX),l.Mb=function(e){return Et(u(e,57).g,10)},P(Cs,"EdgeAwareScanlineConstraintCalculation/lambda$13$Type",1707),I(1709,1,Un,N3),l.td=function(e){hln(this.a,u(e,57))},P(Cs,"EdgeAwareScanlineConstraintCalculation/lambda$14$Type",1709),I(1708,1,Oq,UGt),l.Vd=function(){c_(this.b,this.a,-1)},l.a=0,P(Cs,"EdgeAwareScanlineConstraintCalculation/lambda$15$Type",1708),I(1710,1,wd,cX),l.Lb=function(e){return Et(u(e,57).g,10)},l.Fb=function(e){return this===e},l.Mb=function(e){return Et(u(e,57).g,10)},P(Cs,"EdgeAwareScanlineConstraintCalculation/lambda$16$Type",1710),I(1711,1,Un,uX),l.td=function(e){u(e,365).Vd()},P(Cs,"EdgeAwareScanlineConstraintCalculation/lambda$17$Type",1711),I(1712,1,{},$d),l.Fe=function(e){return jgn(this.a,u(e,57))},P(Cs,"EdgeAwareScanlineConstraintCalculation/lambda$18$Type",1712),I(1713,1,{},lX),l.De=function(){return 0},P(Cs,"EdgeAwareScanlineConstraintCalculation/lambda$19$Type",1713),I(1696,1,{},wF),l.De=function(){return 0},P(Cs,"EdgeAwareScanlineConstraintCalculation/lambda$2$Type",1696),I(1715,1,Un,jGt),l.td=function(e){Utn(this.a,this.b,u(e,307))},l.a=0,P(Cs,"EdgeAwareScanlineConstraintCalculation/lambda$20$Type",1715),I(1714,1,Oq,$Gt),l.Vd=function(){cce(this.a,this.b,-1)},l.b=0,P(Cs,"EdgeAwareScanlineConstraintCalculation/lambda$21$Type",1714),I(1716,1,wd,hX),l.Lb=function(e){return u(e,57),!0},l.Fb=function(e){return this===e},l.Mb=function(e){return u(e,57),!0},P(Cs,"EdgeAwareScanlineConstraintCalculation/lambda$22$Type",1716),I(1717,1,Un,sX),l.td=function(e){u(e,365).Vd()},P(Cs,"EdgeAwareScanlineConstraintCalculation/lambda$23$Type",1717),I(1697,1,ui,fX),l.Mb=function(e){return Et(u(e,57).g,10)},P(Cs,"EdgeAwareScanlineConstraintCalculation/lambda$3$Type",1697),I(1699,1,Un,zGt),l.td=function(e){Wtn(this.a,this.b,u(e,57))},l.a=0,P(Cs,"EdgeAwareScanlineConstraintCalculation/lambda$4$Type",1699),I(1698,1,Oq,WGt),l.Vd=function(){c_(this.b,this.a,-1)},l.a=0,P(Cs,"EdgeAwareScanlineConstraintCalculation/lambda$5$Type",1698),I(1700,1,wd,dX),l.Lb=function(e){return u(e,57),!0},l.Fb=function(e){return this===e},l.Mb=function(e){return u(e,57),!0},P(Cs,"EdgeAwareScanlineConstraintCalculation/lambda$6$Type",1700),I(1701,1,Un,gX),l.td=function(e){u(e,365).Vd()},P(Cs,"EdgeAwareScanlineConstraintCalculation/lambda$7$Type",1701),I(1702,1,ui,mF),l.Mb=function(e){return Et(u(e,57).g,145)},P(Cs,"EdgeAwareScanlineConstraintCalculation/lambda$8$Type",1702),I(1704,1,Un,qGt),l.td=function(e){Gan(this.a,this.b,u(e,57))},P(Cs,"EdgeAwareScanlineConstraintCalculation/lambda$9$Type",1704),I(1521,1,as,rWt),l.pf=function(e,n){Ryn(this,u(e,37),n)};var Kbe;P(Cs,"HorizontalGraphCompactor",1521),I(1522,1,{},w1),l.Oe=function(e,n){var r,s,o;return Pmt(e,n)||(r=Z3(e),s=Z3(n),r&&r.k==(Gn(),xs)||s&&s.k==(Gn(),xs))?0:(o=u(Q(this.a.a,(se(),Y4)),304),ZXe(o,r?r.k:(Gn(),Zs),s?s.k:(Gn(),Zs)))},l.Pe=function(e,n){var r,s,o;return Pmt(e,n)?1:(r=Z3(e),s=Z3(n),o=u(Q(this.a.a,(se(),Y4)),304),M2t(o,r?r.k:(Gn(),Zs),s?s.k:(Gn(),Zs)))},P(Cs,"HorizontalGraphCompactor/1",1522),I(1523,1,{},jT),l.Ne=function(e,n){return q9(),e.a.i==0},P(Cs,"HorizontalGraphCompactor/lambda$0$Type",1523),I(1524,1,{},zd),l.Ne=function(e,n){return knn(this.a,e,n)},P(Cs,"HorizontalGraphCompactor/lambda$1$Type",1524),I(1664,1,{},Bte);var Ybe,Xbe;P(Cs,"LGraphToCGraphTransformer",1664),I(1672,1,ui,pX),l.Mb=function(e){return e!=null},P(Cs,"LGraphToCGraphTransformer/0methodref$nonNull$Type",1672),I(1665,1,{},bX),l.Kb=function(e){return lf(),$o(Q(u(u(e,57).g,10),(se(),_i)))},P(Cs,"LGraphToCGraphTransformer/lambda$0$Type",1665),I(1666,1,{},yF),l.Kb=function(e){return lf(),$re(u(u(e,57).g,145))},P(Cs,"LGraphToCGraphTransformer/lambda$1$Type",1666),I(1675,1,ui,vX),l.Mb=function(e){return lf(),Et(u(e,57).g,10)},P(Cs,"LGraphToCGraphTransformer/lambda$10$Type",1675),I(1676,1,Un,wX),l.td=function(e){xnn(u(e,57))},P(Cs,"LGraphToCGraphTransformer/lambda$11$Type",1676),I(1677,1,ui,mX),l.Mb=function(e){return lf(),Et(u(e,57).g,145)},P(Cs,"LGraphToCGraphTransformer/lambda$12$Type",1677),I(1681,1,Un,yX),l.td=function(e){_un(u(e,57))},P(Cs,"LGraphToCGraphTransformer/lambda$13$Type",1681),I(1678,1,Un,C9),l.td=function(e){XYe(this.a,u(e,8))},l.a=0,P(Cs,"LGraphToCGraphTransformer/lambda$14$Type",1678),I(1679,1,Un,Gb),l.td=function(e){ZYe(this.a,u(e,110))},l.a=0,P(Cs,"LGraphToCGraphTransformer/lambda$15$Type",1679),I(1680,1,Un,nR),l.td=function(e){QYe(this.a,u(e,8))},l.a=0,P(Cs,"LGraphToCGraphTransformer/lambda$16$Type",1680),I(1682,1,{},xX),l.Kb=function(e){return lf(),new Tn(null,new Fv(new ar(lr(Ms(u(e,10)).a.Kc(),new z))))},P(Cs,"LGraphToCGraphTransformer/lambda$17$Type",1682),I(1683,1,ui,kX),l.Mb=function(e){return lf(),Va(u(e,17))},P(Cs,"LGraphToCGraphTransformer/lambda$18$Type",1683),I(1684,1,Un,Dtt),l.td=function(e){Dan(this.a,u(e,17))},P(Cs,"LGraphToCGraphTransformer/lambda$19$Type",1684),I(1668,1,Un,Ott),l.td=function(e){fin(this.a,u(e,145))},P(Cs,"LGraphToCGraphTransformer/lambda$2$Type",1668),I(1685,1,{},xF),l.Kb=function(e){return lf(),new Tn(null,new _n(u(e,29).a,16))},P(Cs,"LGraphToCGraphTransformer/lambda$20$Type",1685),I(1686,1,{},EX),l.Kb=function(e){return lf(),new Tn(null,new Fv(new ar(lr(Ms(u(e,10)).a.Kc(),new z))))},P(Cs,"LGraphToCGraphTransformer/lambda$21$Type",1686),I(1687,1,{},kF),l.Kb=function(e){return lf(),u(Q(u(e,17),(se(),N2)),15)},P(Cs,"LGraphToCGraphTransformer/lambda$22$Type",1687),I(1688,1,ui,TX),l.Mb=function(e){return tQe(u(e,15))},P(Cs,"LGraphToCGraphTransformer/lambda$23$Type",1688),I(1689,1,Un,Ntt),l.td=function(e){Lgn(this.a,u(e,15))},P(Cs,"LGraphToCGraphTransformer/lambda$24$Type",1689),I(1667,1,Un,HGt),l.td=function(e){Jin(this.a,this.b,u(e,145))},P(Cs,"LGraphToCGraphTransformer/lambda$3$Type",1667),I(1669,1,{},CX),l.Kb=function(e){return lf(),new Tn(null,new _n(u(e,29).a,16))},P(Cs,"LGraphToCGraphTransformer/lambda$4$Type",1669),I(1670,1,{},_X),l.Kb=function(e){return lf(),new Tn(null,new Fv(new ar(lr(Ms(u(e,10)).a.Kc(),new z))))},P(Cs,"LGraphToCGraphTransformer/lambda$5$Type",1670),I(1671,1,{},$T),l.Kb=function(e){return lf(),u(Q(u(e,17),(se(),N2)),15)},P(Cs,"LGraphToCGraphTransformer/lambda$6$Type",1671),I(1673,1,Un,Ptt),l.td=function(e){opn(this.a,u(e,15))},P(Cs,"LGraphToCGraphTransformer/lambda$8$Type",1673),I(1674,1,Un,GGt),l.td=function(e){yXe(this.a,this.b,u(e,145))},P(Cs,"LGraphToCGraphTransformer/lambda$9$Type",1674),I(1663,1,{},SX),l.Le=function(e){var n,r,s,o,h;for(this.a=e,this.d=new Gtt,this.c=Pt(JEt,Ie,121,this.a.a.a.c.length,0,1),this.b=0,r=new S(this.a.a.a);r.a<r.c.c.length;)n=u(J(r),307),n.d=this.b,h=Dv(bM(new Ub,n),this.d),this.c[this.b]=h,++this.b;for(G3n(this),V4n(this),u2n(this),cat(mnt(this.d),new Yk),o=new S(this.a.a.b);o.a<o.c.c.length;)s=u(J(o),57),s.d.c=this.c[s.a.d].e+s.b.a},l.b=0,P(Cs,"NetworkSimplexCompaction",1663),I(145,1,{35:1,145:1},x_),l.wd=function(e){return Fan(this,u(e,145))},l.Ib=function(){return $re(this)},P(Cs,"VerticalSegment",145),I(827,1,{},y4t),l.c=0,l.e=0,l.i=0,P(R_,"BetweenLayerEdgeTwoNodeCrossingsCounter",827),I(663,1,{663:1},gne),l.Ib=function(){return"AdjacencyList [node="+this.d+", adjacencies= "+this.a+"]"},l.b=0,l.c=0,l.f=0,P(R_,"BetweenLayerEdgeTwoNodeCrossingsCounter/AdjacencyList",663),I(287,1,{35:1,287:1},hWt),l.wd=function(e){return Etn(this,u(e,287))},l.Ib=function(){return"Adjacency [position="+this.c+", cardinality="+this.a+", currentCardinality="+this.b+"]"},l.a=0,l.b=0,l.c=0,P(R_,"BetweenLayerEdgeTwoNodeCrossingsCounter/AdjacencyList/Adjacency",287),I(1929,1,{},Fae),l.b=0,l.e=!1,P(R_,"CrossingMatrixFiller",1929);var Qbe=Yi(s0,"IInitializable");I(1804,1,HD,QGt),l.Nf=function(e,n,r,s,o,h){},l.Pf=function(e,n,r){},l.Lf=function(){return this.c!=(Zv(),DS)},l.Mf=function(){this.e=Pt(Tr,Xr,25,this.d,15,1)},l.Of=function(e,n){n[e][0].c.p=e},l.Qf=function(e,n,r,s){++this.d},l.Rf=function(){return!0},l.Sf=function(e,n,r,s){return Ore(this,e,n,r),hsn(this,n)},l.Tf=function(e,n){var r;return r=KKe(n,e.length),Ore(this,e,r,n),Jne(this,r)},l.d=0,P(R_,"GreedySwitchHeuristic",1804),I(1930,1,{},lYt),l.b=0,l.d=0,P(R_,"NorthSouthEdgeNeighbouringNodeCrossingsCounter",1930),I(1917,1,{},due),l.a=!1,P(R_,"SwitchDecider",1917),I(101,1,{101:1},Gae),l.a=null,l.c=null,l.i=null,P(y6,"SelfHyperLoop",101),I(1916,1,{},Hie),l.c=0,l.e=0,P(y6,"SelfHyperLoopLabels",1916),I(411,22,{3:1,35:1,22:1,411:1},GR);var _6,i7,s7,olt,Zbe=jr(y6,"SelfHyperLoopLabels/Alignment",411,Hr,Oin,_Ze),Jbe;I(409,1,{409:1},AJt),P(y6,"SelfLoopEdge",409),I(403,1,{403:1},Pie),l.a=!1,P(y6,"SelfLoopHolder",403),I(1724,1,ui,LF),l.Mb=function(e){return Va(u(e,17))},P(y6,"SelfLoopHolder/lambda$0$Type",1724),I(113,1,{113:1},Gie),l.a=!1,l.c=!1,P(y6,"SelfLoopPort",113),I(1792,1,ui,MF),l.Mb=function(e){return Va(u(e,17))},P(y6,"SelfLoopPort/lambda$0$Type",1792),I(363,22,{3:1,35:1,22:1,363:1},kM);var AG,LG,MG,IG,DG,t2e=jr(y6,"SelfLoopType",363,Hr,Tsn,IZe),e2e;I(1732,1,{},HJ);var n2e,r2e,i2e,s2e;P(Hl,"PortRestorer",1732),I(361,22,{3:1,35:1,22:1,361:1},xet);var Sw,hb,Aw,clt=jr(Hl,"PortRestorer/PortSideArea",361,Hr,Prn,DZe),a2e;I(1733,1,{},_3),l.Kb=function(e){return Zp(),u(e,15).Oc()},P(Hl,"PortRestorer/lambda$0$Type",1733),I(1734,1,Un,MX),l.td=function(e){Zp(),u(e,113).c=!1},P(Hl,"PortRestorer/lambda$1$Type",1734),I(1743,1,ui,IX),l.Mb=function(e){return Zp(),u(e,11).j==(be(),Bn)},P(Hl,"PortRestorer/lambda$10$Type",1743),I(1744,1,{},HT),l.Kb=function(e){return Zp(),u(e,113).d},P(Hl,"PortRestorer/lambda$11$Type",1744),I(1745,1,Un,Ftt),l.td=function(e){JKe(this.a,u(e,11))},P(Hl,"PortRestorer/lambda$12$Type",1745),I(1735,1,Un,Btt),l.td=function(e){sQe(this.a,u(e,101))},P(Hl,"PortRestorer/lambda$2$Type",1735),I(1736,1,Oi,DX),l.ue=function(e,n){return son(u(e,113),u(n,113))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(Hl,"PortRestorer/lambda$3$Type",1736),I(1737,1,ui,OX),l.Mb=function(e){return Zp(),u(e,113).c},P(Hl,"PortRestorer/lambda$4$Type",1737),I(1738,1,ui,AX),l.Mb=function(e){return Uon(u(e,11))},P(Hl,"PortRestorer/lambda$5$Type",1738),I(1739,1,ui,zT),l.Mb=function(e){return Zp(),u(e,11).j==(be(),Nn)},P(Hl,"PortRestorer/lambda$6$Type",1739),I(1740,1,ui,EF),l.Mb=function(e){return Zp(),u(e,11).j==(be(),Hn)},P(Hl,"PortRestorer/lambda$7$Type",1740),I(1741,1,ui,TF),l.Mb=function(e){return Nin(u(e,11))},P(Hl,"PortRestorer/lambda$8$Type",1741),I(1742,1,ui,CF),l.Mb=function(e){return Zp(),u(e,11).j==(be(),mr)},P(Hl,"PortRestorer/lambda$9$Type",1742),I(270,22,{3:1,35:1,22:1,270:1},Rx);var ult,llt,hlt,flt,dlt,glt,plt,blt,yTt=jr(Hl,"PortSideAssigner/Target",270,Hr,Qan,SZe),o2e;I(1725,1,{},_F),l.Kb=function(e){return Ri(new Tn(null,new _n(u(e,101).j,16)),new qT)},P(Hl,"PortSideAssigner/lambda$1$Type",1725),I(1726,1,{},hv),l.Kb=function(e){return u(e,113).d},P(Hl,"PortSideAssigner/lambda$2$Type",1726),I(1727,1,Un,SF),l.td=function(e){Fs(u(e,11),(be(),Nn))},P(Hl,"PortSideAssigner/lambda$3$Type",1727),I(1728,1,{},AF),l.Kb=function(e){return u(e,113).d},P(Hl,"PortSideAssigner/lambda$4$Type",1728),I(1729,1,Un,Rtt),l.td=function(e){sKe(this.a,u(e,11))},P(Hl,"PortSideAssigner/lambda$5$Type",1729),I(1730,1,Oi,LX),l.ue=function(e,n){return Pen(u(e,101),u(n,101))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(Hl,"PortSideAssigner/lambda$6$Type",1730),I(1731,1,Oi,K5),l.ue=function(e,n){return ctn(u(e,113),u(n,113))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(Hl,"PortSideAssigner/lambda$7$Type",1731),I(805,1,ui,qT),l.Mb=function(e){return u(e,113).c},P(Hl,"PortSideAssigner/lambda$8$Type",805),I(2009,1,{}),P(ib,"AbstractSelfLoopRouter",2009),I(1750,1,Oi,NX),l.ue=function(e,n){return ZQe(u(e,101),u(n,101))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(ib,Ife,1750),I(1751,1,Oi,PX),l.ue=function(e,n){return QQe(u(e,101),u(n,101))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(ib,Dfe,1751),I(1793,2009,{},FX),l.Uf=function(e,n,r){return r},P(ib,"OrthogonalSelfLoopRouter",1793),I(1795,1,Un,KGt),l.td=function(e){A3t(this.b,this.a,u(e,8))},P(ib,"OrthogonalSelfLoopRouter/lambda$0$Type",1795),I(1794,1793,{},BX),l.Uf=function(e,n,r){var s,o;return s=e.c.d,h8(r,0,Li(nc(s.n),s.a)),o=e.d.d,ni(r,Li(nc(o.n),o.a)),Zwn(r)},P(ib,"PolylineSelfLoopRouter",1794),I(1746,1,{},jJ),l.a=null;var z4;P(ib,"RoutingDirector",1746),I(1747,1,Oi,RX),l.ue=function(e,n){return htn(u(e,113),u(n,113))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(ib,"RoutingDirector/lambda$0$Type",1747),I(1748,1,{},jX),l.Kb=function(e){return LR(),u(e,101).j},P(ib,"RoutingDirector/lambda$1$Type",1748),I(1749,1,Un,$X),l.td=function(e){LR(),u(e,15).ad(z4)},P(ib,"RoutingDirector/lambda$2$Type",1749),I(1752,1,{},zX),P(ib,"RoutingSlotAssigner",1752),I(1753,1,ui,Uk),l.Mb=function(e){return MYe(this.a,u(e,101))},P(ib,"RoutingSlotAssigner/lambda$0$Type",1753),I(1754,1,Oi,sM),l.ue=function(e,n){return Ntn(this.a,u(e,101),u(n,101))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(ib,"RoutingSlotAssigner/lambda$1$Type",1754),I(1796,1793,{},qX),l.Uf=function(e,n,r){var s,o,h,d;return s=Xt(ye(Fz(e.b.g.b,(Te(),B6)))),d=new dWt(ct(ot(Us,1),te,8,0,[(h=e.c.d,Li(new yo(h.n),h.a))])),Obn(e,n,r,d,s),ni(d,(o=e.d.d,Li(new yo(o.n),o.a))),sse(new sxt(d))},P(ib,"SplineSelfLoopRouter",1796),I(578,1,Oi,one,OKt),l.ue=function(e,n){return Ihe(this,u(e,10),u(n,10))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(j_,"ModelOrderNodeComparator",578),I(1755,1,ui,IL),l.Mb=function(e){return u(e,11).e.c.length!=0},P(j_,"ModelOrderNodeComparator/lambda$0$Type",1755),I(1756,1,{},IF),l.Kb=function(e){return u(Fe(u(e,11).e,0),17).c},P(j_,"ModelOrderNodeComparator/lambda$1$Type",1756),I(1757,1,ui,HX),l.Mb=function(e){return u(e,11).e.c.length!=0},P(j_,"ModelOrderNodeComparator/lambda$2$Type",1757),I(1758,1,{},GX),l.Kb=function(e){return u(Fe(u(e,11).e,0),17).c},P(j_,"ModelOrderNodeComparator/lambda$3$Type",1758),I(1759,1,ui,VX),l.Mb=function(e){return u(e,11).e.c.length!=0},P(j_,"ModelOrderNodeComparator/lambda$4$Type",1759),I(806,1,Oi,Rte,XGt),l.ue=function(e,n){return AYt(this,e,n)},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(j_,"ModelOrderPortComparator",806),I(801,1,{},DF),l.Vf=function(e,n){var r,s,o,h;for(o=Dae(n),r=new le,h=n.f/o,s=1;s<o;++s)ue(r,de(Sr(ku(b.Math.round(s*h)))));return r},l.Wf=function(){return!1},P(kd,"ARDCutIndexHeuristic",801),I(1479,1,as,UX),l.pf=function(e,n){gwn(u(e,37),n)},P(kd,"BreakingPointInserter",1479),I(305,1,{305:1},Zwt),l.Ib=function(){var e;return e=new _p,e.a+="BPInfo[",e.a+=`
	start=`,hc(e,this.i),e.a+=`
	end=`,hc(e,this.a),e.a+=`
	nodeStartEdge=`,hc(e,this.e),e.a+=`
	startEndEdge=`,hc(e,this.j),e.a+=`
	originalEdge=`,hc(e,this.f),e.a+=`
	startInLayerDummy=`,hc(e,this.k),e.a+=`
	startInLayerEdge=`,hc(e,this.n),e.a+=`
	endInLayerDummy=`,hc(e,this.b),e.a+=`
	endInLayerEdge=`,hc(e,this.c),e.a},P(kd,"BreakingPointInserter/BPInfo",305),I(652,1,{652:1},Tp),l.a=!1,l.b=0,l.c=0,P(kd,"BreakingPointInserter/Cut",652),I(1480,1,as,WX),l.pf=function(e,n){Gbn(u(e,37),n)},P(kd,"BreakingPointProcessor",1480),I(1481,1,ui,KX),l.Mb=function(e){return ree(u(e,10))},P(kd,"BreakingPointProcessor/0methodref$isEnd$Type",1481),I(1482,1,ui,YX),l.Mb=function(e){return iee(u(e,10))},P(kd,"BreakingPointProcessor/1methodref$isStart$Type",1482),I(1483,1,as,XX),l.pf=function(e,n){d2n(this,u(e,37),n)},P(kd,"BreakingPointRemover",1483),I(1484,1,Un,QX),l.td=function(e){u(e,128).k=!0},P(kd,"BreakingPointRemover/lambda$0$Type",1484),I(797,1,{},f5t),l.b=0,l.e=0,l.f=0,l.j=0,P(kd,"GraphStats",797),I(798,1,{},OF),l.Ce=function(e,n){return b.Math.max(Xt(ye(e)),Xt(ye(n)))},P(kd,"GraphStats/0methodref$max$Type",798),I(799,1,{},NF),l.Ce=function(e,n){return b.Math.max(Xt(ye(e)),Xt(ye(n)))},P(kd,"GraphStats/2methodref$max$Type",799),I(1660,1,{},ZX),l.Ce=function(e,n){return ZJe(ye(e),ye(n))},P(kd,"GraphStats/lambda$1$Type",1660),I(1661,1,{},_9),l.Kb=function(e){return Uie(this.a,u(e,29))},P(kd,"GraphStats/lambda$2$Type",1661),I(1662,1,{},rR),l.Kb=function(e){return Sce(this.a,u(e,29))},P(kd,"GraphStats/lambda$6$Type",1662),I(800,1,{},PF),l.Vf=function(e,n){var r;return r=u(Q(e,(Te(),bCt)),15),r||(vn(),vn(),io)},l.Wf=function(){return!1},P(kd,"ICutIndexCalculator/ManualCutIndexCalculator",800),I(802,1,{},FF),l.Vf=function(e,n){var r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt;for(Yt=(n.n==null&&bse(n),n.n),k=(n.d==null&&bse(n),n.d),Bt=Pt(ia,vo,25,Yt.length,15,1),Bt[0]=Yt[0],Lt=Yt[0],C=1;C<Yt.length;C++)Bt[C]=Bt[C-1]+Yt[C],Lt+=Yt[C];for(o=Dae(n)-1,d=u(Q(e,(Te(),vCt)),19).a,s=Ts,r=new le,H=b.Math.max(0,o-d);H<=b.Math.min(n.f-1,o+d);H++){if(tt=Lt/(H+1),gt=0,M=1,h=new le,_t=Ts,F=0,w=0,Y=k[0],H==0)_t=Lt,w=(n.g==null&&(n.g=une(n,new NF)),Xt(n.g));else{for(;M<n.f;)Bt[M-1]-gt>=tt&&(ue(h,de(M)),_t=b.Math.max(_t,Bt[M-1]-F),w+=Y,gt+=Bt[M-1]-gt,F=Bt[M-1],Y=k[M]),Y=b.Math.max(Y,k[M]),++M;w+=Y}V=b.Math.min(1/_t,1/n.b/w),V>s&&(s=V,r=h)}return r},l.Wf=function(){return!1},P(kd,"MSDCutIndexHeuristic",802),I(1617,1,as,JX),l.pf=function(e,n){jmn(u(e,37),n)},P(kd,"SingleEdgeGraphWrapper",1617),I(227,22,{3:1,35:1,22:1,227:1},Y9);var q4,a7,o7,Oy,dS,H4,c7=jr(kc,"CenterEdgeLabelPlacementStrategy",227,Hr,Xsn,AZe),c2e;I(422,22,{3:1,35:1,22:1,422:1},Mbt);var xTt,vlt,kTt=jr(kc,"ConstraintCalculationStrategy",422,Hr,$nn,LZe),u2e;I(314,22,{3:1,35:1,22:1,314:1,246:1,234:1},ket),l.Kf=function(){return moe(this)},l.Xf=function(){return moe(this)};var wO,S6,ETt,TTt=jr(kc,"CrossingMinimizationStrategy",314,Hr,Drn,MZe),l2e;I(337,22,{3:1,35:1,22:1,337:1},Eet);var CTt,wlt,OG,_Tt=jr(kc,"CuttingStrategy",337,Hr,Orn,OZe),h2e;I(335,22,{3:1,35:1,22:1,335:1,246:1,234:1},EM),l.Kf=function(){return sce(this)},l.Xf=function(){return sce(this)};var STt,mlt,gS,ylt,pS,ATt=jr(kc,"CycleBreakingStrategy",335,Hr,ksn,NZe),f2e;I(419,22,{3:1,35:1,22:1,419:1},Ibt);var NG,LTt,MTt=jr(kc,"DirectionCongruency",419,Hr,jnn,PZe),d2e;I(450,22,{3:1,35:1,22:1,450:1},Tet);var u7,xlt,G4,g2e=jr(kc,"EdgeConstraint",450,Hr,Nrn,FZe),p2e;I(276,22,{3:1,35:1,22:1,276:1},X9);var klt,Elt,Tlt,Clt,PG,_lt,ITt=jr(kc,"EdgeLabelSideSelection",276,Hr,tan,BZe),b2e;I(479,22,{3:1,35:1,22:1,479:1},Dbt);var FG,DTt,OTt=jr(kc,"EdgeStraighteningStrategy",479,Hr,Rnn,RZe),v2e;I(274,22,{3:1,35:1,22:1,274:1},Q9);var Slt,NTt,PTt,BG,FTt,BTt,RTt=jr(kc,"FixedAlignment",274,Hr,Zsn,jZe),w2e;I(275,22,{3:1,35:1,22:1,275:1},Z9);var jTt,$Tt,zTt,qTt,bS,HTt,GTt=jr(kc,"GraphCompactionStrategy",275,Hr,Qsn,$Ze),m2e;I(256,22,{3:1,35:1,22:1,256:1},Dm);var l7,RG,h7,bh,vS,jG,f7,V4,$G,wS,Alt=jr(kc,"GraphProperties",256,Hr,jon,zZe),y2e;I(292,22,{3:1,35:1,22:1,292:1},Cet);var mO,Llt,Mlt,Ilt=jr(kc,"GreedySwitchType",292,Hr,Brn,qZe),x2e;I(303,22,{3:1,35:1,22:1,303:1},_et);var A6,yO,U4,k2e=jr(kc,"InLayerConstraint",303,Hr,Frn,HZe),E2e;I(420,22,{3:1,35:1,22:1,420:1},Obt);var Dlt,VTt,UTt=jr(kc,"InteractiveReferencePoint",420,Hr,znn,GZe),T2e,WTt,L6,Lw,zG,KTt,YTt,qG,XTt,xO,HG,mS,M6,Ny,Olt,GG,oc,QTt,Mw,Gc,Nlt,Plt,kO,O2,Iw,I6,ZTt,D6,EO,Py,n1,Rh,Flt,W4,Tc,_i,JTt,t9t,e9t,n9t,r9t,Blt,VG,Zu,Dw,Rlt,O6,TO,$1,K4,d7,Y4,X4,g7,N2,i9t,jlt,$lt,N6;I(163,22,{3:1,35:1,22:1,163:1},CM);var yS,fb,xS,Fy,CO,s9t=jr(kc,"LayerConstraint",163,Hr,Csn,VZe),C2e;I(848,1,Ih,UJ),l.Qe=function(e){an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,w6t),""),"Direction Congruency"),"Specifies how drawings of the same graph with different layout directions compare to each other: either a natural reading direction is preserved or the drawings are rotated versions of each other."),p9t),(jg(),cs)),MTt),un((Xf(),qn))))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,m6t),""),"Feedback Edges"),"Whether feedback edges should be highlighted by routing around the nodes."),(Fn(),!1)),Aa),Bs),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Kq),""),"Interactive Reference Point"),"Determines which point of a node is considered by interactive layout phases."),x9t),cs),UTt),un(qn)))),aa(e,Kq,$ot,bve),aa(e,Kq,$_,pve),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,y6t),""),"Merge Edges"),"Edges that have no ports are merged so they touch the connected nodes at the same points. When this option is disabled, one port is created for each edge directly connected to a node. When it is enabled, all such incoming edges share an input port, and all outgoing edges share an output port."),!1),Aa),Bs),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,x6t),""),"Merge Hierarchy-Crossing Edges"),"If hierarchical layout is active, hierarchy-crossing edges use as few hierarchical ports as possible. They are broken by the algorithm, with hierarchical ports inserted as required. Usually, one such port is created for each edge at each hierarchy crossing point. With this option set to true, we try to create as few hierarchical ports as possible in the process. In particular, all edges that form a hyperedge can share a port."),!0),Aa),Bs),un(qn)))),an(e,new Xe(QKe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,k6t),""),"Allow Non-Flow Ports To Switch Sides"),"Specifies whether non-flow ports may switch sides if their node's port constraints are either FIXED_SIDE or FIXED_ORDER. A non-flow port is a port on a side that is not part of the currently configured layout flow. For instance, given a left-to-right layout direction, north and south ports would be considered non-flow ports. Further note that the underlying criterium whether to switch sides or not solely relies on the minimization of edge crossings. Hence, edge length and other aesthetics criteria are not addressed."),!1),Aa),Bs),un($2)),ct(ot(Ae,1),te,2,6,["org.eclipse.elk.layered.northOrSouthPort"])))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,E6t),""),"Port Sorting Strategy"),"Only relevant for nodes with FIXED_SIDE port constraints. Determines the way a node's ports are distributed on the sides of a node if their order is not prescribed. The option is set on parent nodes."),L9t),cs),BCt),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,T6t),""),"Thoroughness"),"How much effort should be spent to produce a nice layout."),de(7)),gc),ja),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,C6t),""),"Add Unnecessary Bendpoints"),"Adds bend points even if an edge does not change direction. If true, each long edge dummy will contribute a bend point to its edges and hierarchy-crossing edges will always get a bend point where they cross hierarchy boundaries. By default, bend points are only added where an edge changes direction."),!1),Aa),Bs),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,_6t),""),"Generate Position and Layer IDs"),"If enabled position id and layer id are generated, which are usually only used internally when setting the interactiveLayout option. This option should be specified on the root node."),!1),Aa),Bs),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,$ot),"cycleBreaking"),"Cycle Breaking Strategy"),"Strategy for cycle breaking. Cycle breaking looks for cycles in the graph and determines which edges to reverse to break the cycles. Reversed edges will end up pointing to the opposite direction of regular edges (that is, reversed edges will point left if edges usually point right)."),g9t),cs),ATt),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,GD),lct),"Node Layering Strategy"),"Strategy for node layering."),T9t),cs),CCt),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,S6t),lct),"Layer Constraint"),"Determines a constraint on the placement of the node regarding the layering."),k9t),cs),s9t),un(Js)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,A6t),lct),"Layer Choice Constraint"),"Allows to set a constraint regarding the layer placement of a node. Let i be the value of teh constraint. Assumed the drawing has n layers and i < n. If set to i, it expresses that the node should be placed in i-th layer. Should i>=n be true then the node is placed in the last layer of the drawing. Note that this option is not part of any of ELK Layered's default configurations but is only evaluated as part of the `InteractiveLayeredGraphVisitor`, which must be applied manually or used via the `DiagramLayoutEngine."),de(-1)),gc),ja),un(Js)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,L6t),lct),"Layer ID"),"Layer identifier that was calculated by ELK Layered for a node. This is only generated if interactiveLayot or generatePositionAndLayerIds is set."),de(-1)),gc),ja),un(Js)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,zot),p1e),"Upper Bound On Width [MinWidth Layerer]"),"Defines a loose upper bound on the width of the MinWidth layerer. If set to '-1' multiple values are tested and the best result is selected."),de(4)),gc),ja),un(qn)))),aa(e,zot,GD,Eve),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,qot),p1e),"Upper Layer Estimation Scaling Factor [MinWidth Layerer]"),"Multiplied with Upper Bound On Width for defining an upper bound on the width of layers which haven't been determined yet, but whose maximum width had been (roughly) estimated by the MinWidth algorithm. Compensates for too high estimations. If set to '-1' multiple values are tested and the best result is selected."),de(2)),gc),ja),un(qn)))),aa(e,qot,GD,Cve),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Hot),b1e),"Node Promotion Strategy"),"Reduces number of dummy nodes after layering phase (if possible)."),E9t),cs),NCt),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Got),b1e),"Max Node Promotion Iterations"),"Limits the number of iterations for node promotion."),de(0)),gc),ja),un(qn)))),aa(e,Got,Hot,null),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Vot),"layering.coffmanGraham"),"Layer Bound"),"The maximum number of nodes allowed per layer."),de(vi)),gc),ja),un(qn)))),aa(e,Vot,GD,wve),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,$_),VD),"Crossing Minimization Strategy"),"Strategy for crossing minimization."),d9t),cs),TTt),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,M6t),VD),"Force Node Model Order"),"The node order given by the model does not change to produce a better layout. E.g. if node A is before node B in the model this is not changed during crossing minimization. This assumes that the node model order is already respected before crossing minimization. This can be achieved by setting considerModelOrder.strategy to NODES_AND_EDGES."),!1),Aa),Bs),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Uot),VD),"Hierarchical Sweepiness"),"How likely it is to use cross-hierarchy (1) vs bottom-up (-1)."),.1),Do),ca),un(qn)))),aa(e,Uot,oH,G2e),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Wot),VD),"Semi-Interactive Crossing Minimization"),"Preserves the order of nodes within a layer but still minimizes crossings between edges connecting long edge dummies. Derives the desired order from positions specified by the 'org.eclipse.elk.position' layout option. Requires a crossing minimization strategy that is able to process 'in-layer' constraints."),!1),Aa),Bs),un(qn)))),aa(e,Wot,$_,K2e),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,I6t),VD),"Position Choice Constraint"),"Allows to set a constraint regarding the position placement of a node in a layer. Assumed the layer in which the node placed includes n other nodes and i < n. If set to i, it expresses that the node should be placed at the i-th position. Should i>=n be true then the node is placed at the last position in the layer. Note that this option is not part of any of ELK Layered's default configurations but is only evaluated as part of the `InteractiveLayeredGraphVisitor`, which must be applied manually or used via the `DiagramLayoutEngine."),de(-1)),gc),ja),un(Js)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,D6t),VD),"Position ID"),"Position within a layer that was determined by ELK Layered for a node. This is only generated if interactiveLayot or generatePositionAndLayerIds is set."),de(-1)),gc),ja),un(Js)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,O6t),v1e),"Greedy Switch Activation Threshold"),"By default it is decided automatically if the greedy switch is activated or not. The decision is based on whether the size of the input graph (without dummy nodes) is smaller than the value of this option. A '0' enforces the activation."),de(40)),gc),ja),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Kot),v1e),"Greedy Switch Crossing Minimization"),"Greedy Switch strategy for crossing minimization. The greedy switch heuristic is executed after the regular crossing minimization as a post-processor. Note that if 'hierarchyHandling' is set to 'INCLUDE_CHILDREN', the 'greedySwitchHierarchical.type' option must be used."),f9t),cs),Ilt),un(qn)))),aa(e,Kot,$_,q2e),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Yq),"crossingMinimization.greedySwitchHierarchical"),"Greedy Switch Crossing Minimization (hierarchical)"),"Activates the greedy switch heuristic in case hierarchical layout is used. The differences to the non-hierarchical case (see 'greedySwitch.type') are: 1) greedy switch is inactive by default, 3) only the option value set on the node at which hierarchical layout starts is relevant, and 2) if it's activated by the user, it properly addresses hierarchy-crossing edges."),h9t),cs),Ilt),un(qn)))),aa(e,Yq,$_,j2e),aa(e,Yq,oH,$2e),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,M4),w1e),"Node Placement Strategy"),"Strategy for node placement."),A9t),cs),LCt),un(qn)))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,Xq),w1e),"Favor Straight Edges Over Balancing"),"Favor straight edges over a balanced node placement. The default behavior is determined automatically based on the used 'edgeRouting'. For an orthogonal style it is set to true, for all other styles to false."),Aa),Bs),un(qn)))),aa(e,Xq,M4,Fve),aa(e,Xq,M4,Bve),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Yot),m1e),"BK Edge Straightening"),"Specifies whether the Brandes Koepf node placer tries to increase the number of straight edges at the expense of diagram size. There is a subtle difference to the 'favorStraightEdges' option, which decides whether a balanced placement of the nodes is desired, or not. In bk terms this means combining the four alignments into a single balanced one, or not. This option on the other hand tries to straighten additional edges during the creation of each of the four alignments."),C9t),cs),OTt),un(qn)))),aa(e,Yot,M4,Dve),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Xot),m1e),"BK Fixed Alignment"),"Tells the BK node placer to use a certain alignment (out of its four) instead of the one producing the smallest height, or the combination of all four."),_9t),cs),RTt),un(qn)))),aa(e,Xot,M4,Nve),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Qot),"nodePlacement.linearSegments"),"Linear Segments Deflection Dampening"),"Dampens the movement of nodes to keep the diagram from getting too large."),.3),Do),ca),un(qn)))),aa(e,Qot,M4,jve),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,Zot),"nodePlacement.networkSimplex"),"Node Flexibility"),"Aims at shorter and straighter edges. Two configurations are possible: (a) allow ports to move freely on the side they are assigned to (the order is always defined beforehand), (b) additionally allow to enlarge a node wherever it helps. If this option is not configured for a node, the 'nodeFlexibility.default' value is used, which is specified for the node's parent."),cs),uht),un(Js)))),aa(e,Zot,M4,Hve),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Jot),"nodePlacement.networkSimplex.nodeFlexibility"),"Node Flexibility Default"),"Default value of the 'nodeFlexibility' option for the children of a hierarchical node."),S9t),cs),uht),un(qn)))),aa(e,Jot,M4,qve),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,N6t),y1e),"Self-Loop Distribution"),"Alter the distribution of the loops around the node. It only takes effect for PortConstraints.FREE."),w9t),cs),$Ct),un(Js)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,P6t),y1e),"Self-Loop Ordering"),"Alter the ordering of the loops they can either be stacked or sequenced. It only takes effect for PortConstraints.FREE."),m9t),cs),zCt),un(Js)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Qq),"edgeRouting.splines"),"Spline Routing Mode"),"Specifies the way control points are assembled for each individual edge. CONSERVATIVE ensures that edges are properly routed around the nodes but feels rather orthogonal at times. SLOPPY uses fewer control points to obtain curvier edge routes but may result in edges overlapping nodes."),y9t),cs),HCt),un(qn)))),aa(e,Qq,UD,sve),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Zq),"edgeRouting.splines.sloppy"),"Sloppy Spline Layer Spacing Factor"),"Spacing factor for routing area between layers when using sloppy spline routing."),.2),Do),ca),un(qn)))),aa(e,Zq,UD,ove),aa(e,Zq,Qq,cve),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,tct),"edgeRouting.polyline"),"Sloped Edge Zone Width"),"Width of the strip to the left and to the right of each layer where the polyline edge router is allowed to refrain from ensuring that edges are routed horizontally. This prevents awkward bend points for nodes that extent almost to the edge of their layer."),2),Do),ca),un(qn)))),aa(e,tct,UD,eve),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,F6t),F1),"Spacing Base Value"),"An optional base value for all other layout options of the 'spacing' group. It can be used to conveniently alter the overall 'spaciousness' of the drawing. Whenever an explicit value is set for the other layout options, this base value will have no effect. The base value is not inherited, i.e. it must be set for each hierarchical node."),Do),ca),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,B6t),F1),"Edge Node Between Layers Spacing"),"The spacing to be preserved between nodes and edges that are routed next to the node's layer. For the spacing between nodes and edges that cross the node's layer 'spacing.edgeNode' is used."),10),Do),ca),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,R6t),F1),"Edge Edge Between Layer Spacing"),"Spacing to be preserved between pairs of edges that are routed between the same pair of layers. Note that 'spacing.edgeEdge' is used for the spacing between pairs of edges crossing the same layer."),10),Do),ca),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,j6t),F1),"Node Node Between Layers Spacing"),"The spacing to be preserved between any pair of nodes of two adjacent layers. Note that 'spacing.nodeNode' is used for the spacing between nodes within the layer itself."),20),Do),ca),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,$6t),Y6t),"Direction Priority"),"Defines how important it is to have a certain edge point into the direction of the overall layout. This option is evaluated during the cycle breaking phase."),de(0)),gc),ja),un(Id)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,z6t),Y6t),"Shortness Priority"),"Defines how important it is to keep an edge as short as possible. This option is evaluated during the layering phase."),de(0)),gc),ja),un(Id)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,q6t),Y6t),"Straightness Priority"),"Defines how important it is to keep an edge straight, i.e. aligned with one of the two axes. This option is evaluated during node placement."),de(0)),gc),ja),un(Id)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,ect),X6t),Ffe),"Tries to further compact components (disconnected sub-graphs)."),!1),Aa),Bs),un(qn)))),aa(e,ect,P_,!0),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,H6t),x1e),"Post Compaction Strategy"),k1e),o9t),cs),GTt),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,G6t),x1e),"Post Compaction Constraint Calculation"),k1e),a9t),cs),kTt),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Jq),Q6t),"High Degree Node Treatment"),"Makes room around high degree nodes to place leafs and trees."),!1),Aa),Bs),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,nct),Q6t),"High Degree Node Threshold"),"Whether a node is considered to have a high degree."),de(16)),gc),ja),un(qn)))),aa(e,nct,Jq,!0),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,rct),Q6t),"High Degree Node Maximum Tree Height"),"Maximum height of a subtree connected to a high degree node to be moved to separate layers."),de(5)),gc),ja),un(qn)))),aa(e,rct,Jq,!0),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Y0),Z6t),"Graph Wrapping Strategy"),"For certain graphs and certain prescribed drawing areas it may be desirable to split the laid out graph into chunks that are placed side by side. The edges that connect different chunks are 'wrapped' around from the end of one chunk to the start of the other chunk. The points between the chunks are referred to as 'cuts'."),D9t),cs),WCt),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,tH),Z6t),"Additional Wrapped Edges Spacing"),"To visually separate edges that are wrapped from regularly routed edges an additional spacing value can be specified in form of this layout option. The spacing is added to the regular edgeNode spacing."),10),Do),ca),un(qn)))),aa(e,tH,Y0,nwe),aa(e,tH,Y0,rwe),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,eH),Z6t),"Correction Factor for Wrapping"),"At times and for certain types of graphs the executed wrapping may produce results that are consistently biased in the same fashion: either wrapping to often or to rarely. This factor can be used to correct the bias. Internally, it is simply multiplied with the 'aspect ratio' layout option."),1),Do),ca),un(qn)))),aa(e,eH,Y0,swe),aa(e,eH,Y0,awe),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,z_),E1e),"Cutting Strategy"),"The strategy by which the layer indexes are determined at which the layering crumbles into chunks."),I9t),cs),_Tt),un(qn)))),aa(e,z_,Y0,fwe),aa(e,z_,Y0,dwe),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,ict),E1e),"Manually Specified Cuts"),"Allows the user to specify her own cuts for a certain graph."),q1),ph),un(qn)))),aa(e,ict,z_,cwe),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,sct),"wrapping.cutting.msd"),"MSD Freedom"),"The MSD cutting strategy starts with an initial guess on the number of chunks the graph should be split into. The freedom specifies how much the strategy may deviate from this guess. E.g. if an initial number of 3 is computed, a freedom of 1 allows 2, 3, and 4 cuts."),M9t),gc),ja),un(qn)))),aa(e,sct,z_,lwe),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,nH),T1e),"Validification Strategy"),"When wrapping graphs, one can specify indices that are not allowed as split points. The validification strategy makes sure every computed split point is allowed."),O9t),cs),UCt),un(qn)))),aa(e,nH,Y0,Cwe),aa(e,nH,Y0,_we),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,rH),T1e),"Valid Indices for Wrapping"),null),q1),ph),un(qn)))),aa(e,rH,Y0,kwe),aa(e,rH,Y0,Ewe),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,iH),J6t),"Improve Cuts"),"For general graphs it is important that not too many edges wrap backwards. Thus a compromise between evenly-distributed cuts and the total number of cut edges is sought."),!0),Aa),Bs),un(qn)))),aa(e,iH,Y0,vwe),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,sH),J6t),"Distance Penalty When Improving Cuts"),null),2),Do),ca),un(qn)))),aa(e,sH,Y0,pwe),aa(e,sH,iH,!0),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,act),J6t),"Improve Wrapped Edges"),"The initial wrapping is performed in a very simple way. As a consequence, edges that wrap from one chunk to another may be unnecessarily long. Activating this option tries to shorten such edges."),!0),Aa),Bs),un(qn)))),aa(e,act,Y0,mwe),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,V6t),hct),"Edge Label Side Selection"),"Method to decide on edge label sides."),v9t),cs),ITt),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,U6t),hct),"Edge Center Label Placement Strategy"),"Determines in which layer center labels of long edges should be placed."),b9t),cs),c7),ji(qn,ct(ot(Qg,1),ae,175,0,[Xg]))))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,aH),WD),"Consider Model Order"),"Preserves the order of nodes and edges in the model file if this does not lead to additional edge crossings. Depending on the strategy this is not always possible since the node and edge order might be conflicting."),l9t),cs),FCt),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,W6t),WD),"No Model Order"),"Set on a node to not set a model order for this node even though it is a real node."),!1),Aa),Bs),un(Js)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,oct),WD),"Consider Model Order for Components"),"If set to NONE the usual ordering strategy (by cumulative node priority and size of nodes) is used. INSIDE_PORT_SIDES orders the components with external ports only inside the groups with the same port side. FORCE_MODEL_ORDER enforces the mode order on components. This option might produce bad alignments and sub optimal drawings in terms of used area since the ordering should be respected."),c9t),cs),A7t),un(qn)))),aa(e,oct,P_,null),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,K6t),WD),"Long Edge Ordering Strategy"),"Indicates whether long edges are sorted under, over, or equal to nodes that have no connection to a previous layer in a left-to-right or right-to-left layout. Under and over changes to right and left in a vertical layout."),u9t),cs),SCt),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,cct),WD),"Crossing Counter Node Order Influence"),"Indicates with what percentage (1 for 100%) violations of the node model order are weighted against the crossings e.g. a value of 0.5 means two model order violations are as important as on edge crossing. This allows some edge crossings in favor of preserving the model order. It is advised to set this value to a very small positive value (e.g. 0.001) to have minimal crossing and a optimal node order. Defaults to no influence (0)."),0),Do),ca),un(qn)))),aa(e,cct,aH,null),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,uct),WD),"Crossing Counter Port Order Influence"),"Indicates with what percentage (1 for 100%) violations of the port model order are weighted against the crossings e.g. a value of 0.5 means two model order violations are as important as on edge crossing. This allows some edge crossings in favor of preserving the model order. It is advised to set this value to a very small positive value (e.g. 0.001) to have minimal crossing and a optimal port order. Defaults to no influence (0)."),0),Do),ca),un(qn)))),aa(e,uct,aH,null),zhe((new DB,e))};var _2e,S2e,A2e,a9t,L2e,o9t,M2e,c9t,I2e,D2e,O2e,u9t,N2e,P2e,l9t,F2e,B2e,R2e,h9t,j2e,$2e,z2e,f9t,q2e,H2e,G2e,V2e,U2e,W2e,K2e,Y2e,d9t,X2e,g9t,Q2e,p9t,Z2e,b9t,J2e,v9t,tve,eve,nve,w9t,rve,m9t,ive,y9t,sve,ave,ove,cve,uve,lve,hve,fve,dve,gve,x9t,pve,bve,vve,wve,mve,yve,k9t,xve,kve,Eve,Tve,Cve,_ve,Sve,E9t,Ave,T9t,Lve,Mve,Ive,C9t,Dve,Ove,_9t,Nve,Pve,Fve,Bve,Rve,jve,$ve,zve,S9t,qve,Hve,Gve,A9t,Vve,L9t,Uve,Wve,Kve,Yve,Xve,Qve,Zve,Jve,twe,ewe,nwe,rwe,iwe,swe,awe,owe,cwe,uwe,M9t,lwe,hwe,I9t,fwe,dwe,gwe,pwe,bwe,vwe,wwe,mwe,ywe,D9t,xwe,kwe,Ewe,Twe,O9t,Cwe,_we;P(kc,"LayeredMetaDataProvider",848),I(986,1,Ih,DB),l.Qe=function(e){zhe(e)};var Ld,zlt,UG,kS,WG,N9t,KG,P6,YG,P9t,F9t,qlt,db,Hlt,By,B9t,_O,Glt,R9t,Swe,XG,Vlt,ES,Ry,Awe,Vl,j9t,$9t,QG,Ult,Md,ZG,X0,z9t,q9t,H9t,Wlt,Klt,G9t,Ug,Ylt,V9t,jy,U9t,W9t,K9t,JG,$y,P2,Y9t,X9t,_o,Q9t,Lwe,cu,tV,Z9t,J9t,tCt,Xlt,eCt,eV,nCt,rCt,nV,Ow,iCt,Qlt,TS,sCt,Nw,CS,rV,F2,Zlt,p7,iV,B2,aCt,oCt,cCt,b7,uCt,Mwe,Iwe,Dwe,Owe,Pw,zy,os,Wg,Nwe,qy,lCt,v7,hCt,Hy,Pwe,w7,fCt,F6,Fwe,Bwe,SO,Jlt,dCt,AO,xf,Q4,B6,Fw,R2,sV,Gy,tht,m7,y7,Bw,Z4,eht,LO,_S,SS,nht,gCt,pCt,bCt,vCt,rht,wCt,mCt,yCt,xCt,iht,aV;P(kc,"LayeredOptions",986),I(987,1,{},eQ),l.$e=function(){var e;return e=new Qzt,e},l._e=function(e){},P(kc,"LayeredOptions/LayeredFactory",987),I(1372,1,{}),l.a=0;var Rwe;P(Ec,"ElkSpacings/AbstractSpacingsBuilder",1372),I(779,1372,{},l3t);var oV,jwe;P(kc,"LayeredSpacings/LayeredSpacingsBuilder",779),I(313,22,{3:1,35:1,22:1,313:1,246:1,234:1},J9),l.Kf=function(){return yce(this)},l.Xf=function(){return yce(this)};var sht,kCt,ECt,cV,aht,TCt,CCt=jr(kc,"LayeringStrategy",313,Hr,Jsn,UZe),$we;I(378,22,{3:1,35:1,22:1,378:1},Aet);var oht,_Ct,uV,SCt=jr(kc,"LongEdgeOrderingStrategy",378,Hr,Irn,WZe),zwe;I(197,22,{3:1,35:1,22:1,197:1},VR);var J4,t5,lV,cht,uht=jr(kc,"NodeFlexibility",197,Hr,Rin,KZe),qwe;I(315,22,{3:1,35:1,22:1,315:1,246:1,234:1},TM),l.Kf=function(){return ice(this)},l.Xf=function(){return ice(this)};var AS,lht,hht,LS,ACt,LCt=jr(kc,"NodePlacementStrategy",315,Hr,xsn,tJe),Hwe;I(260,22,{3:1,35:1,22:1,260:1},Cx);var MCt,MO,ICt,DCt,IO,OCt,hV,fV,NCt=jr(kc,"NodePromotionStrategy",260,Hr,Zan,XZe),Gwe;I(339,22,{3:1,35:1,22:1,339:1},Let);var PCt,gb,fht,FCt=jr(kc,"OrderingStrategy",339,Hr,jrn,QZe),Vwe;I(421,22,{3:1,35:1,22:1,421:1},Nbt);var dht,ght,BCt=jr(kc,"PortSortingStrategy",421,Hr,qnn,ZZe),Uwe;I(452,22,{3:1,35:1,22:1,452:1},Met);var Ju,eu,MS,Wwe=jr(kc,"PortType",452,Hr,Rrn,YZe),Kwe;I(375,22,{3:1,35:1,22:1,375:1},Iet);var RCt,pht,jCt,$Ct=jr(kc,"SelfLoopDistributionStrategy",375,Hr,$rn,JZe),Ywe;I(376,22,{3:1,35:1,22:1,376:1},Pbt);var DO,bht,zCt=jr(kc,"SelfLoopOrderingStrategy",376,Hr,Bnn,eJe),Xwe;I(304,1,{304:1},Hle),P(kc,"Spacings",304),I(336,22,{3:1,35:1,22:1,336:1},Det);var vht,qCt,IS,HCt=jr(kc,"SplineRoutingMode",336,Hr,qrn,nJe),Qwe;I(338,22,{3:1,35:1,22:1,338:1},Oet);var wht,GCt,VCt,UCt=jr(kc,"ValidifyStrategy",338,Hr,Hrn,rJe),Zwe;I(377,22,{3:1,35:1,22:1,377:1},Net);var Vy,mht,x7,WCt=jr(kc,"WrappingStrategy",377,Hr,zrn,iJe),Jwe;I(1383,1,zc,YJ),l.Yf=function(e){return u(e,37),tme},l.pf=function(e,n){Oyn(this,u(e,37),n)};var tme;P(lH,"DepthFirstCycleBreaker",1383),I(782,1,zc,Kvt),l.Yf=function(e){return u(e,37),eme},l.pf=function(e,n){I5n(this,u(e,37),n)},l.Zf=function(e){return u(Fe(e,zz(this.d,e.c.length)),10)};var eme;P(lH,"GreedyCycleBreaker",782),I(1386,782,zc,MVt),l.Zf=function(e){var n,r,s,o;for(o=null,n=vi,s=new S(e);s.a<s.c.c.length;)r=u(J(s),10),Vs(r,(se(),Tc))&&u(Q(r,Tc),19).a<n&&(n=u(Q(r,Tc),19).a,o=r);return o||u(Fe(e,zz(this.d,e.c.length)),10)},P(lH,"GreedyModelOrderCycleBreaker",1386),I(1384,1,zc,zJ),l.Yf=function(e){return u(e,37),nme},l.pf=function(e,n){e3n(this,u(e,37),n)};var nme;P(lH,"InteractiveCycleBreaker",1384),I(1385,1,zc,qJ),l.Yf=function(e){return u(e,37),rme},l.pf=function(e,n){n3n(this,u(e,37),n)},l.a=0,l.b=0;var rme;P(lH,"ModelOrderCycleBreaker",1385),I(1389,1,zc,kGt),l.Yf=function(e){return u(e,37),ime},l.pf=function(e,n){P5n(this,u(e,37),n)};var ime;P(Ey,"CoffmanGrahamLayerer",1389),I(1390,1,Oi,iR),l.ue=function(e,n){return upn(this.a,u(e,10),u(n,10))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(Ey,"CoffmanGrahamLayerer/0methodref$compareNodesInTopo$Type",1390),I(1391,1,Oi,jtt),l.ue=function(e,n){return Ytn(this.a,u(e,10),u(n,10))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(Ey,"CoffmanGrahamLayerer/lambda$1$Type",1391),I(1392,1,zc,DL),l.Yf=function(e){return u(e,37),bi(bi(bi(new Hs,(Wa(),Ad),(ro(),rlt)),lb,r7),ou,n7)},l.pf=function(e,n){R4n(this,u(e,37),n)},P(Ey,"InteractiveLayerer",1392),I(569,1,{569:1},sqt),l.a=0,l.c=0,P(Ey,"InteractiveLayerer/LayerSpan",569),I(1388,1,zc,IB),l.Yf=function(e){return u(e,37),sme},l.pf=function(e,n){gvn(this,u(e,37),n)};var sme;P(Ey,"LongestPathLayerer",1388),I(1395,1,zc,VJ),l.Yf=function(e){return u(e,37),bi(bi(bi(new Hs,(Wa(),Ad),(ro(),hS)),lb,r7),ou,n7)},l.pf=function(e,n){o5n(this,u(e,37),n)},l.a=0,l.b=0,l.d=0;var KCt,YCt;P(Ey,"MinWidthLayerer",1395),I(1396,1,Oi,Ep),l.ue=function(e,n){return ncn(this,u(e,10),u(n,10))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(Ey,"MinWidthLayerer/MinOutgoingEdgesComparator",1396),I(1387,1,zc,GJ),l.Yf=function(e){return u(e,37),ame},l.pf=function(e,n){C3n(this,u(e,37),n)};var ame;P(Ey,"NetworkSimplexLayerer",1387),I(1393,1,zc,HWt),l.Yf=function(e){return u(e,37),bi(bi(bi(new Hs,(Wa(),Ad),(ro(),hS)),lb,r7),ou,n7)},l.pf=function(e,n){f4n(this,u(e,37),n)},l.d=0,l.f=0,l.g=0,l.i=0,l.s=0,l.t=0,l.u=0,P(Ey,"StretchWidthLayerer",1393),I(1394,1,Oi,nQ),l.ue=function(e,n){return Osn(u(e,10),u(n,10))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(Ey,"StretchWidthLayerer/1",1394),I(402,1,Pkt),l.Nf=function(e,n,r,s,o,h){},l._f=function(e,n,r){return jue(this,e,n,r)},l.Mf=function(){this.g=Pt(r3,_1e,25,this.d,15,1),this.f=Pt(r3,_1e,25,this.d,15,1)},l.Of=function(e,n){this.e[e]=Pt(Tr,Xr,25,n[e].length,15,1)},l.Pf=function(e,n,r){var s;s=r[e][n],s.p=n,this.e[e][n]=n},l.Qf=function(e,n,r,s){u(Fe(s[e][n].j,r),11).p=this.d++},l.b=0,l.c=0,l.d=0,P($u,"AbstractBarycenterPortDistributor",402),I(1633,1,Oi,aM),l.ue=function(e,n){return _hn(this.a,u(e,11),u(n,11))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P($u,"AbstractBarycenterPortDistributor/lambda$0$Type",1633),I(817,1,HD,Xwt),l.Nf=function(e,n,r,s,o,h){},l.Pf=function(e,n,r){},l.Qf=function(e,n,r,s){},l.Lf=function(){return!1},l.Mf=function(){this.c=this.e.a,this.g=this.f.g},l.Of=function(e,n){n[e][0].c.p=e},l.Rf=function(){return!1},l.ag=function(e,n,r,s){r?Use(this,e):(Xse(this,e,s),rhe(this,e,n)),e.c.length>1&&(je(Re(Q(Fa((An(0,e.c.length),u(e.c[0],10))),(Te(),By))))?gce(e,this.d,u(this,660)):(vn(),Xs(e,this.d)),Nne(this.e,e))},l.Sf=function(e,n,r,s){var o,h,d,w,k,C,M;for(n!=sYt(r,e.length)&&(h=e[n-(r?1:-1)],mmt(this.f,h,r?(so(),eu):(so(),Ju))),o=e[n][0],M=!s||o.k==(Gn(),xs),C=_1(e[n]),this.ag(C,M,!1,r),d=0,k=new S(C);k.a<k.c.c.length;)w=u(J(k),10),e[n][d++]=w;return!1},l.Tf=function(e,n){var r,s,o,h,d;for(d=sYt(n,e.length),h=_1(e[d]),this.ag(h,!1,!0,n),r=0,o=new S(h);o.a<o.c.c.length;)s=u(J(o),10),e[d][r++]=s;return!1},P($u,"BarycenterHeuristic",817),I(658,1,{658:1},Wk),l.Ib=function(){return"BarycenterState [node="+this.c+", summedWeight="+this.d+", degree="+this.b+", barycenter="+this.a+", visited="+this.e+"]"},l.b=0,l.d=0,l.e=!1;var ome=P($u,"BarycenterHeuristic/BarycenterState",658);I(1802,1,Oi,sR),l.ue=function(e,n){return fdn(this.a,u(e,10),u(n,10))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P($u,"BarycenterHeuristic/lambda$0$Type",1802),I(816,1,HD,x4t),l.Mf=function(){},l.Nf=function(e,n,r,s,o,h){},l.Qf=function(e,n,r,s){},l.Of=function(e,n){this.a[e]=Pt(ome,{3:1,4:1,5:1,2018:1},658,n[e].length,0,1),this.b[e]=Pt(cme,{3:1,4:1,5:1,2019:1},233,n[e].length,0,1)},l.Pf=function(e,n,r){Bie(this,r[e][n],!0)},l.c=!1,P($u,"ForsterConstraintResolver",816),I(233,1,{233:1},tQt,qle),l.Ib=function(){var e,n;for(n=new _p,n.a+="[",e=0;e<this.d.length;e++)Vr(n,Xie(this.d[e])),x1(this.g,this.d[0]).a!=null&&Vr(Vr((n.a+="<",n),FYe(x1(this.g,this.d[0]).a)),">"),e<this.d.length-1&&(n.a+=Ka);return(n.a+="]",n).a},l.a=0,l.c=0,l.f=0;var cme=P($u,"ForsterConstraintResolver/ConstraintGroup",233);I(1797,1,Un,$tt),l.td=function(e){Bie(this.a,u(e,10),!1)},P($u,"ForsterConstraintResolver/lambda$0$Type",1797),I(214,1,{214:1,225:1},Kle),l.Nf=function(e,n,r,s,o,h){},l.Of=function(e,n){},l.Mf=function(){this.r=Pt(Tr,Xr,25,this.n,15,1)},l.Pf=function(e,n,r){var s,o;o=r[e][n],s=o.e,s&&ue(this.b,s)},l.Qf=function(e,n,r,s){++this.n},l.Ib=function(){return ihe(this.e,new qs)},l.g=!1,l.i=!1,l.n=0,l.s=!1,P($u,"GraphInfoHolder",214),I(1832,1,HD,tQ),l.Nf=function(e,n,r,s,o,h){},l.Of=function(e,n){},l.Qf=function(e,n,r,s){},l._f=function(e,n,r){return r&&n>0?grt(this.a,e[n-1],e[n]):!r&&n<e.length-1?grt(this.a,e[n],e[n+1]):cit(this.a,e[n],r?(be(),Bn):(be(),Hn)),zbn(this,e,n,r)},l.Mf=function(){this.d=Pt(Tr,Xr,25,this.c,15,1),this.a=new HM(this.d)},l.Pf=function(e,n,r){var s;s=r[e][n],this.c+=s.j.c.length},l.c=0,P($u,"GreedyPortDistributor",1832),I(1401,1,zc,OB),l.Yf=function(e){return wun(u(e,37))},l.pf=function(e,n){z3n(u(e,37),n)};var ume;P($u,"InteractiveCrossingMinimizer",1401),I(1402,1,Oi,l$t),l.ue=function(e,n){return Y1n(this,u(e,10),u(n,10))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P($u,"InteractiveCrossingMinimizer/1",1402),I(507,1,{507:1,123:1,51:1},eet),l.Yf=function(e){var n;return u(e,37),n=ij(lme),bi(n,(Wa(),ou),(ro(),xG)),n},l.pf=function(e,n){tmn(this,u(e,37),n)},l.e=0;var lme;P($u,"LayerSweepCrossingMinimizer",507),I(1398,1,Un,h$t),l.td=function(e){$mn(this.a,u(e,214))},P($u,"LayerSweepCrossingMinimizer/0methodref$compareDifferentRandomizedLayouts$Type",1398),I(1399,1,Un,f$t),l.td=function(e){hun(this.a,u(e,214))},P($u,"LayerSweepCrossingMinimizer/1methodref$minimizeCrossingsNoCounter$Type",1399),I(1400,1,Un,d$t),l.td=function(e){ile(this.a,u(e,214))},P($u,"LayerSweepCrossingMinimizer/2methodref$minimizeCrossingsWithCounter$Type",1400),I(454,22,{3:1,35:1,22:1,454:1},Pet);var OO,DS,dV,hme=jr($u,"LayerSweepCrossingMinimizer/CrossMinType",454,Hr,Grn,sJe),fme;I(1397,1,ui,Ek),l.Mb=function(e){return lyt(),u(e,29).a.c.length==0},P($u,"LayerSweepCrossingMinimizer/lambda$0$Type",1397),I(1799,1,HD,vQt),l.Mf=function(){},l.Nf=function(e,n,r,s,o,h){},l.Qf=function(e,n,r,s){},l.Of=function(e,n){n[e][0].c.p=e,this.b[e]=Pt(dme,{3:1,4:1,5:1,1944:1},659,n[e].length,0,1)},l.Pf=function(e,n,r){var s;s=r[e][n],s.p=n,Ji(this.b[e],n,new rQ)},P($u,"LayerSweepTypeDecider",1799),I(659,1,{659:1},rQ),l.Ib=function(){return"NodeInfo [connectedEdges="+this.a+", hierarchicalInfluence="+this.b+", randomInfluence="+this.c+"]"},l.a=0,l.b=0,l.c=0;var dme=P($u,"LayerSweepTypeDecider/NodeInfo",659);I(1800,1,wd,iQ),l.Lb=function(e){return pC(new S1(u(e,11).b))},l.Fb=function(e){return this===e},l.Mb=function(e){return pC(new S1(u(e,11).b))},P($u,"LayerSweepTypeDecider/lambda$0$Type",1800),I(1801,1,wd,sQ),l.Lb=function(e){return pC(new S1(u(e,11).b))},l.Fb=function(e){return this===e},l.Mb=function(e){return pC(new S1(u(e,11).b))},P($u,"LayerSweepTypeDecider/lambda$1$Type",1801),I(1833,402,Pkt,iHt),l.$f=function(e,n,r){var s,o,h,d,w,k,C,M,F;switch(C=this.g,r.g){case 1:{for(s=0,o=0,k=new S(e.j);k.a<k.c.c.length;)d=u(J(k),11),d.e.c.length!=0&&(++s,d.j==(be(),Nn)&&++o);for(h=n+o,F=n+s,w=iw(e,(so(),Ju)).Kc();w.Ob();)d=u(w.Pb(),11),d.j==(be(),Nn)?(C[d.p]=h,--h):(C[d.p]=F,--F);return s}case 2:{for(M=0,w=iw(e,(so(),eu)).Kc();w.Ob();)d=u(w.Pb(),11),++M,C[d.p]=n+M;return M}default:throw rt(new uM)}},P($u,"LayerTotalPortDistributor",1833),I(660,817,{660:1,225:1},Jee),l.ag=function(e,n,r,s){r?Use(this,e):(Xse(this,e,s),rhe(this,e,n)),e.c.length>1&&(je(Re(Q(Fa((An(0,e.c.length),u(e.c[0],10))),(Te(),By))))?gce(e,this.d,this):(vn(),Xs(e,this.d)),je(Re(Q(Fa((An(0,e.c.length),u(e.c[0],10))),By)))||Nne(this.e,e))},P($u,"ModelOrderBarycenterHeuristic",660),I(1803,1,Oi,g$t),l.ue=function(e,n){return W0n(this.a,u(e,10),u(n,10))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P($u,"ModelOrderBarycenterHeuristic/lambda$0$Type",1803),I(1403,1,zc,JJ),l.Yf=function(e){var n;return u(e,37),n=ij(gme),bi(n,(Wa(),ou),(ro(),xG)),n},l.pf=function(e,n){Dnn((u(e,37),n))};var gme;P($u,"NoCrossingMinimizer",1403),I(796,402,Pkt,ibt),l.$f=function(e,n,r){var s,o,h,d,w,k,C,M,F,H,V;switch(F=this.g,r.g){case 1:{for(o=0,h=0,M=new S(e.j);M.a<M.c.c.length;)k=u(J(M),11),k.e.c.length!=0&&(++o,k.j==(be(),Nn)&&++h);for(s=1/(o+1),d=n+h*s,V=n+1-s,C=iw(e,(so(),Ju)).Kc();C.Ob();)k=u(C.Pb(),11),k.j==(be(),Nn)?(F[k.p]=d,d-=s):(F[k.p]=V,V-=s);break}case 2:{for(w=0,M=new S(e.j);M.a<M.c.c.length;)k=u(J(M),11),k.g.c.length==0||++w;for(s=1/(w+1),H=n+s,C=iw(e,(so(),eu)).Kc();C.Ob();)k=u(C.Pb(),11),F[k.p]=H,H+=s;break}default:throw rt(new Pn("Port type is undefined"))}return 1},P($u,"NodeRelativePortDistributor",796),I(807,1,{},IYt,Cae),P($u,"SweepCopy",807),I(1798,1,HD,bie),l.Of=function(e,n){},l.Mf=function(){var e;e=Pt(Tr,Xr,25,this.f,15,1),this.d=new k$t(e),this.a=new HM(e)},l.Nf=function(e,n,r,s,o,h){var d;d=u(Fe(h[e][n].j,r),11),o.c==d&&o.c.i.c==o.d.i.c&&++this.e[e]},l.Pf=function(e,n,r){var s;s=r[e][n],this.c[e]=this.c[e]|s.k==(Gn(),Hc)},l.Qf=function(e,n,r,s){var o;o=u(Fe(s[e][n].j,r),11),o.p=this.f++,o.g.c.length+o.e.c.length>1&&(o.j==(be(),Hn)?this.b[e]=!0:o.j==Bn&&e>0&&(this.b[e-1]=!0))},l.f=0,P(s0,"AllCrossingsCounter",1798),I(587,1,{},rz),l.b=0,l.d=0,P(s0,"BinaryIndexedTree",587),I(524,1,{},HM);var XCt,gV;P(s0,"CrossingsCounter",524),I(1906,1,Oi,p$t),l.ue=function(e,n){return Ptn(this.a,u(e,11),u(n,11))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(s0,"CrossingsCounter/lambda$0$Type",1906),I(1907,1,Oi,b$t),l.ue=function(e,n){return Ftn(this.a,u(e,11),u(n,11))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(s0,"CrossingsCounter/lambda$1$Type",1907),I(1908,1,Oi,v$t),l.ue=function(e,n){return Btn(this.a,u(e,11),u(n,11))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(s0,"CrossingsCounter/lambda$2$Type",1908),I(1909,1,Oi,w$t),l.ue=function(e,n){return Rtn(this.a,u(e,11),u(n,11))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(s0,"CrossingsCounter/lambda$3$Type",1909),I(1910,1,Un,m$t),l.td=function(e){man(this.a,u(e,11))},P(s0,"CrossingsCounter/lambda$4$Type",1910),I(1911,1,ui,y$t),l.Mb=function(e){return OYe(this.a,u(e,11))},P(s0,"CrossingsCounter/lambda$5$Type",1911),I(1912,1,Un,x$t),l.td=function(e){_Vt(this,e)},P(s0,"CrossingsCounter/lambda$6$Type",1912),I(1913,1,Un,ZGt),l.td=function(e){var n;g8(),qp(this.b,(n=this.a,u(e,11),n))},P(s0,"CrossingsCounter/lambda$7$Type",1913),I(826,1,wd,BF),l.Lb=function(e){return g8(),Vs(u(e,11),(se(),Zu))},l.Fb=function(e){return this===e},l.Mb=function(e){return g8(),Vs(u(e,11),(se(),Zu))},P(s0,"CrossingsCounter/lambda$8$Type",826),I(1905,1,{},k$t),P(s0,"HyperedgeCrossingsCounter",1905),I(467,1,{35:1,467:1},qWt),l.wd=function(e){return bhn(this,u(e,467))},l.b=0,l.c=0,l.e=0,l.f=0;var fxn=P(s0,"HyperedgeCrossingsCounter/Hyperedge",467);I(362,1,{35:1,362:1},e$),l.wd=function(e){return gbn(this,u(e,362))},l.b=0,l.c=0;var pme=P(s0,"HyperedgeCrossingsCounter/HyperedgeCorner",362);I(523,22,{3:1,35:1,22:1,523:1},Fbt);var OS,NS,bme=jr(s0,"HyperedgeCrossingsCounter/HyperedgeCorner/Type",523,Hr,Hnn,aJe),vme;I(1405,1,zc,KJ),l.Yf=function(e){return u(Q(u(e,37),(se(),Gc)),21).Hc((oo(),bh))?wme:null},l.pf=function(e,n){P1n(this,u(e,37),n)};var wme;P(uo,"InteractiveNodePlacer",1405),I(1406,1,zc,WJ),l.Yf=function(e){return u(Q(u(e,37),(se(),Gc)),21).Hc((oo(),bh))?mme:null},l.pf=function(e,n){mfn(this,u(e,37),n)};var mme,pV,bV;P(uo,"LinearSegmentsNodePlacer",1406),I(257,1,{35:1,257:1},Npt),l.wd=function(e){return VKe(this,u(e,257))},l.Fb=function(e){var n;return Et(e,257)?(n=u(e,257),this.b==n.b):!1},l.Hb=function(){return this.b},l.Ib=function(){return"ls"+Qp(this.e)},l.a=0,l.b=0,l.c=-1,l.d=-1,l.g=0;var yme=P(uo,"LinearSegmentsNodePlacer/LinearSegment",257);I(1408,1,zc,pYt),l.Yf=function(e){return u(Q(u(e,37),(se(),Gc)),21).Hc((oo(),bh))?xme:null},l.pf=function(e,n){E5n(this,u(e,37),n)},l.b=0,l.g=0;var xme;P(uo,"NetworkSimplexPlacer",1408),I(1427,1,Oi,aQ),l.ue=function(e,n){return du(u(e,19).a,u(n,19).a)},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(uo,"NetworkSimplexPlacer/0methodref$compare$Type",1427),I(1429,1,Oi,oQ),l.ue=function(e,n){return du(u(e,19).a,u(n,19).a)},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(uo,"NetworkSimplexPlacer/1methodref$compare$Type",1429),I(649,1,{649:1},JGt);var dxn=P(uo,"NetworkSimplexPlacer/EdgeRep",649);I(401,1,{401:1},_wt),l.b=!1;var gxn=P(uo,"NetworkSimplexPlacer/NodeRep",401);I(508,12,{3:1,4:1,20:1,28:1,52:1,12:1,14:1,15:1,54:1,508:1},cqt),P(uo,"NetworkSimplexPlacer/Path",508),I(1409,1,{},cQ),l.Kb=function(e){return u(e,17).d.i.k},P(uo,"NetworkSimplexPlacer/Path/lambda$0$Type",1409),I(1410,1,ui,uQ),l.Mb=function(e){return u(e,267)==(Gn(),Zs)},P(uo,"NetworkSimplexPlacer/Path/lambda$1$Type",1410),I(1411,1,{},lQ),l.Kb=function(e){return u(e,17).d.i},P(uo,"NetworkSimplexPlacer/Path/lambda$2$Type",1411),I(1412,1,ui,E$t),l.Mb=function(e){return _Wt(hie(u(e,10)))},P(uo,"NetworkSimplexPlacer/Path/lambda$3$Type",1412),I(1413,1,ui,hQ),l.Mb=function(e){return Ttn(u(e,11))},P(uo,"NetworkSimplexPlacer/lambda$0$Type",1413),I(1414,1,Un,tVt),l.td=function(e){xXe(this.a,this.b,u(e,11))},P(uo,"NetworkSimplexPlacer/lambda$1$Type",1414),I(1423,1,Un,T$t),l.td=function(e){zgn(this.a,u(e,17))},P(uo,"NetworkSimplexPlacer/lambda$10$Type",1423),I(1424,1,{},fQ),l.Kb=function(e){return Ol(),new Tn(null,new _n(u(e,29).a,16))},P(uo,"NetworkSimplexPlacer/lambda$11$Type",1424),I(1425,1,Un,C$t),l.td=function(e){Bvn(this.a,u(e,10))},P(uo,"NetworkSimplexPlacer/lambda$12$Type",1425),I(1426,1,{},dQ),l.Kb=function(e){return Ol(),de(u(e,121).e)},P(uo,"NetworkSimplexPlacer/lambda$13$Type",1426),I(1428,1,{},gQ),l.Kb=function(e){return Ol(),de(u(e,121).e)},P(uo,"NetworkSimplexPlacer/lambda$15$Type",1428),I(1430,1,ui,pQ),l.Mb=function(e){return Ol(),u(e,401).c.k==(Gn(),Ds)},P(uo,"NetworkSimplexPlacer/lambda$17$Type",1430),I(1431,1,ui,bQ),l.Mb=function(e){return Ol(),u(e,401).c.j.c.length>1},P(uo,"NetworkSimplexPlacer/lambda$18$Type",1431),I(1432,1,Un,kXt),l.td=function(e){Sln(this.c,this.b,this.d,this.a,u(e,401))},l.c=0,l.d=0,P(uo,"NetworkSimplexPlacer/lambda$19$Type",1432),I(1415,1,{},vQ),l.Kb=function(e){return Ol(),new Tn(null,new _n(u(e,29).a,16))},P(uo,"NetworkSimplexPlacer/lambda$2$Type",1415),I(1433,1,Un,_$t),l.td=function(e){mXe(this.a,u(e,11))},l.a=0,P(uo,"NetworkSimplexPlacer/lambda$20$Type",1433),I(1434,1,{},Y5),l.Kb=function(e){return Ol(),new Tn(null,new _n(u(e,29).a,16))},P(uo,"NetworkSimplexPlacer/lambda$21$Type",1434),I(1435,1,Un,S$t),l.td=function(e){NXe(this.a,u(e,10))},P(uo,"NetworkSimplexPlacer/lambda$22$Type",1435),I(1436,1,ui,RF),l.Mb=function(e){return _Wt(e)},P(uo,"NetworkSimplexPlacer/lambda$23$Type",1436),I(1437,1,{},wQ),l.Kb=function(e){return Ol(),new Tn(null,new _n(u(e,29).a,16))},P(uo,"NetworkSimplexPlacer/lambda$24$Type",1437),I(1438,1,ui,A$t),l.Mb=function(e){return $Ye(this.a,u(e,10))},P(uo,"NetworkSimplexPlacer/lambda$25$Type",1438),I(1439,1,Un,eVt),l.td=function(e){ugn(this.a,this.b,u(e,10))},P(uo,"NetworkSimplexPlacer/lambda$26$Type",1439),I(1440,1,ui,mQ),l.Mb=function(e){return Ol(),!Va(u(e,17))},P(uo,"NetworkSimplexPlacer/lambda$27$Type",1440),I(1441,1,ui,yQ),l.Mb=function(e){return Ol(),!Va(u(e,17))},P(uo,"NetworkSimplexPlacer/lambda$28$Type",1441),I(1442,1,{},L$t),l.Ce=function(e,n){return IXe(this.a,u(e,29),u(n,29))},P(uo,"NetworkSimplexPlacer/lambda$29$Type",1442),I(1416,1,{},jF),l.Kb=function(e){return Ol(),new Tn(null,new Fv(new ar(lr(Ms(u(e,10)).a.Kc(),new z))))},P(uo,"NetworkSimplexPlacer/lambda$3$Type",1416),I(1417,1,ui,xQ),l.Mb=function(e){return Ol(),win(u(e,17))},P(uo,"NetworkSimplexPlacer/lambda$4$Type",1417),I(1418,1,Un,M$t),l.td=function(e){Fmn(this.a,u(e,17))},P(uo,"NetworkSimplexPlacer/lambda$5$Type",1418),I(1419,1,{},GT),l.Kb=function(e){return Ol(),new Tn(null,new _n(u(e,29).a,16))},P(uo,"NetworkSimplexPlacer/lambda$6$Type",1419),I(1420,1,ui,kQ),l.Mb=function(e){return Ol(),u(e,10).k==(Gn(),Ds)},P(uo,"NetworkSimplexPlacer/lambda$7$Type",1420),I(1421,1,{},EQ),l.Kb=function(e){return Ol(),new Tn(null,new Fv(new ar(lr(z0(u(e,10)).a.Kc(),new z))))},P(uo,"NetworkSimplexPlacer/lambda$8$Type",1421),I(1422,1,ui,TQ),l.Mb=function(e){return Ol(),wtn(u(e,17))},P(uo,"NetworkSimplexPlacer/lambda$9$Type",1422),I(1404,1,zc,p9),l.Yf=function(e){return u(Q(u(e,37),(se(),Gc)),21).Hc((oo(),bh))?kme:null},l.pf=function(e,n){vyn(u(e,37),n)};var kme;P(uo,"SimpleNodePlacer",1404),I(180,1,{180:1},x4),l.Ib=function(){var e;return e="",this.c==(dd(),Rw)?e+=g6:this.c==Kg&&(e+=d6),this.o==(E1(),j2)?e+=yot:this.o==z1?e+="UP":e+="BALANCED",e},P(sb,"BKAlignedLayout",180),I(516,22,{3:1,35:1,22:1,516:1},Rbt);var Kg,Rw,Eme=jr(sb,"BKAlignedLayout/HDirection",516,Hr,Vnn,oJe),Tme;I(515,22,{3:1,35:1,22:1,515:1},Bbt);var j2,z1,Cme=jr(sb,"BKAlignedLayout/VDirection",515,Hr,Unn,cJe),_me;I(1634,1,{},nVt),P(sb,"BKAligner",1634),I(1637,1,{},Pse),P(sb,"BKCompactor",1637),I(654,1,{654:1},CQ),l.a=0,P(sb,"BKCompactor/ClassEdge",654),I(458,1,{458:1},aqt),l.a=null,l.b=0,P(sb,"BKCompactor/ClassNode",458),I(1407,1,zc,AVt),l.Yf=function(e){return u(Q(u(e,37),(se(),Gc)),21).Hc((oo(),bh))?Sme:null},l.pf=function(e,n){R5n(this,u(e,37),n)},l.d=!1;var Sme;P(sb,"BKNodePlacer",1407),I(1635,1,{},_Q),l.d=0,P(sb,"NeighborhoodInformation",1635),I(1636,1,Oi,I$t),l.ue=function(e,n){return Van(this,u(e,46),u(n,46))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(sb,"NeighborhoodInformation/NeighborComparator",1636),I(808,1,{}),P(sb,"ThresholdStrategy",808),I(1763,808,{},hqt),l.bg=function(e,n,r){return this.a.o==(E1(),z1)?ss:Ts},l.cg=function(){},P(sb,"ThresholdStrategy/NullThresholdStrategy",1763),I(579,1,{579:1},rVt),l.c=!1,l.d=!1,P(sb,"ThresholdStrategy/Postprocessable",579),I(1764,808,{},fqt),l.bg=function(e,n,r){var s,o,h;return o=n==r,s=this.a.a[r.p]==n,o||s?(h=e,this.a.c==(dd(),Rw)?(o&&(h=yat(this,n,!0)),!isNaN(h)&&!isFinite(h)&&s&&(h=yat(this,r,!1))):(o&&(h=yat(this,n,!0)),!isNaN(h)&&!isFinite(h)&&s&&(h=yat(this,r,!1))),h):e},l.cg=function(){for(var e,n,r,s,o;this.d.b!=0;)o=u(crn(this.d),579),s=nle(this,o),s.a&&(e=s.a,r=je(this.a.f[this.a.g[o.b.p].p]),!(!r&&!Va(e)&&e.c.i.c==e.d.i.c)&&(n=uce(this,o),n||KYe(this.e,o)));for(;this.e.a.c.length!=0;)uce(this,u(mre(this.e),579))},P(sb,"ThresholdStrategy/SimpleThresholdStrategy",1764),I(635,1,{635:1,246:1,234:1},SQ),l.Kf=function(){return Lne(this)},l.Xf=function(){return Lne(this)};var yht;P(bct,"EdgeRouterFactory",635),I(1458,1,zc,id),l.Yf=function(e){return bvn(u(e,37))},l.pf=function(e,n){Tyn(u(e,37),n)};var Ame,Lme,Mme,Ime,Dme,QCt,Ome,Nme;P(bct,"OrthogonalEdgeRouter",1458),I(1451,1,zc,LVt),l.Yf=function(e){return $1n(u(e,37))},l.pf=function(e,n){G4n(this,u(e,37),n)};var Pme,Fme,Bme,Rme,NO,jme;P(bct,"PolylineEdgeRouter",1451),I(1452,1,wd,AQ),l.Lb=function(e){return dyt(u(e,10))},l.Fb=function(e){return this===e},l.Mb=function(e){return dyt(u(e,10))},P(bct,"PolylineEdgeRouter/1",1452),I(1809,1,ui,LQ),l.Mb=function(e){return u(e,129).c==(Vf(),pb)},P(Jf,"HyperEdgeCycleDetector/lambda$0$Type",1809),I(1810,1,{},MQ),l.Ge=function(e){return u(e,129).d},P(Jf,"HyperEdgeCycleDetector/lambda$1$Type",1810),I(1811,1,ui,IQ),l.Mb=function(e){return u(e,129).c==(Vf(),pb)},P(Jf,"HyperEdgeCycleDetector/lambda$2$Type",1811),I(1812,1,{},X5),l.Ge=function(e){return u(e,129).d},P(Jf,"HyperEdgeCycleDetector/lambda$3$Type",1812),I(1813,1,{},DQ),l.Ge=function(e){return u(e,129).d},P(Jf,"HyperEdgeCycleDetector/lambda$4$Type",1813),I(1814,1,{},OQ),l.Ge=function(e){return u(e,129).d},P(Jf,"HyperEdgeCycleDetector/lambda$5$Type",1814),I(112,1,{35:1,112:1},LI),l.wd=function(e){return UKe(this,u(e,112))},l.Fb=function(e){var n;return Et(e,112)?(n=u(e,112),this.g==n.g):!1},l.Hb=function(){return this.g},l.Ib=function(){var e,n,r,s;for(e=new Il("{"),s=new S(this.n);s.a<s.c.c.length;)r=u(J(s),11),n=ZI(r.i),n==null&&(n="n"+rKt(r.i)),e.a+=""+n,s.a<s.c.c.length&&(e.a+=",");return e.a+="}",e.a},l.a=0,l.b=0,l.c=NaN,l.d=0,l.g=0,l.i=0,l.o=0,l.s=NaN,P(Jf,"HyperEdgeSegment",112),I(129,1,{129:1},t2),l.Ib=function(){return this.a+"->"+this.b+" ("+rQe(this.c)+")"},l.d=0,P(Jf,"HyperEdgeSegmentDependency",129),I(520,22,{3:1,35:1,22:1,520:1},jbt);var pb,Uy,$me=jr(Jf,"HyperEdgeSegmentDependency/DependencyType",520,Hr,Gnn,uJe),zme;I(1815,1,{},D$t),P(Jf,"HyperEdgeSegmentSplitter",1815),I(1816,1,{},uHt),l.a=0,l.b=0,P(Jf,"HyperEdgeSegmentSplitter/AreaRating",1816),I(329,1,{329:1},ynt),l.a=0,l.b=0,l.c=0,P(Jf,"HyperEdgeSegmentSplitter/FreeArea",329),I(1817,1,Oi,$Q),l.ue=function(e,n){return JQe(u(e,112),u(n,112))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(Jf,"HyperEdgeSegmentSplitter/lambda$0$Type",1817),I(1818,1,Un,EXt),l.td=function(e){isn(this.a,this.d,this.c,this.b,u(e,112))},l.b=0,P(Jf,"HyperEdgeSegmentSplitter/lambda$1$Type",1818),I(1819,1,{},zQ),l.Kb=function(e){return new Tn(null,new _n(u(e,112).e,16))},P(Jf,"HyperEdgeSegmentSplitter/lambda$2$Type",1819),I(1820,1,{},qQ),l.Kb=function(e){return new Tn(null,new _n(u(e,112).j,16))},P(Jf,"HyperEdgeSegmentSplitter/lambda$3$Type",1820),I(1821,1,{},HQ),l.Fe=function(e){return Xt(ye(e))},P(Jf,"HyperEdgeSegmentSplitter/lambda$4$Type",1821),I(655,1,{},Gnt),l.a=0,l.b=0,l.c=0,P(Jf,"OrthogonalRoutingGenerator",655),I(1638,1,{},GQ),l.Kb=function(e){return new Tn(null,new _n(u(e,112).e,16))},P(Jf,"OrthogonalRoutingGenerator/lambda$0$Type",1638),I(1639,1,{},VQ),l.Kb=function(e){return new Tn(null,new _n(u(e,112).j,16))},P(Jf,"OrthogonalRoutingGenerator/lambda$1$Type",1639),I(661,1,{}),P(vct,"BaseRoutingDirectionStrategy",661),I(1807,661,{},dqt),l.dg=function(e,n,r){var s,o,h,d,w,k,C,M,F,H,V,Y,tt;if(!(e.r&&!e.q))for(M=n+e.o*r,C=new S(e.n);C.a<C.c.c.length;)for(k=u(J(C),11),F=Ko(ct(ot(Us,1),te,8,0,[k.i.n,k.n,k.a])).a,w=new S(k.g);w.a<w.c.c.length;)d=u(J(w),17),Va(d)||(Y=d.d,tt=Ko(ct(ot(Us,1),te,8,0,[Y.i.n,Y.n,Y.a])).a,b.Math.abs(F-tt)>yd&&(h=M,o=e,s=new $e(F,h),ni(d.a,s),fw(this,d,o,s,!1),H=e.r,H&&(V=Xt(ye(Qf(H.e,0))),s=new $e(V,h),ni(d.a,s),fw(this,d,o,s,!1),h=n+H.o*r,o=H,s=new $e(V,h),ni(d.a,s),fw(this,d,o,s,!1)),s=new $e(tt,h),ni(d.a,s),fw(this,d,o,s,!1)))},l.eg=function(e){return e.i.n.a+e.n.a+e.a.a},l.fg=function(){return be(),mr},l.gg=function(){return be(),Nn},P(vct,"NorthToSouthRoutingStrategy",1807),I(1808,661,{},gqt),l.dg=function(e,n,r){var s,o,h,d,w,k,C,M,F,H,V,Y,tt;if(!(e.r&&!e.q))for(M=n-e.o*r,C=new S(e.n);C.a<C.c.c.length;)for(k=u(J(C),11),F=Ko(ct(ot(Us,1),te,8,0,[k.i.n,k.n,k.a])).a,w=new S(k.g);w.a<w.c.c.length;)d=u(J(w),17),Va(d)||(Y=d.d,tt=Ko(ct(ot(Us,1),te,8,0,[Y.i.n,Y.n,Y.a])).a,b.Math.abs(F-tt)>yd&&(h=M,o=e,s=new $e(F,h),ni(d.a,s),fw(this,d,o,s,!1),H=e.r,H&&(V=Xt(ye(Qf(H.e,0))),s=new $e(V,h),ni(d.a,s),fw(this,d,o,s,!1),h=n-H.o*r,o=H,s=new $e(V,h),ni(d.a,s),fw(this,d,o,s,!1)),s=new $e(tt,h),ni(d.a,s),fw(this,d,o,s,!1)))},l.eg=function(e){return e.i.n.a+e.n.a+e.a.a},l.fg=function(){return be(),Nn},l.gg=function(){return be(),mr},P(vct,"SouthToNorthRoutingStrategy",1808),I(1806,661,{},pqt),l.dg=function(e,n,r){var s,o,h,d,w,k,C,M,F,H,V,Y,tt;if(!(e.r&&!e.q))for(M=n+e.o*r,C=new S(e.n);C.a<C.c.c.length;)for(k=u(J(C),11),F=Ko(ct(ot(Us,1),te,8,0,[k.i.n,k.n,k.a])).b,w=new S(k.g);w.a<w.c.c.length;)d=u(J(w),17),Va(d)||(Y=d.d,tt=Ko(ct(ot(Us,1),te,8,0,[Y.i.n,Y.n,Y.a])).b,b.Math.abs(F-tt)>yd&&(h=M,o=e,s=new $e(h,F),ni(d.a,s),fw(this,d,o,s,!0),H=e.r,H&&(V=Xt(ye(Qf(H.e,0))),s=new $e(h,V),ni(d.a,s),fw(this,d,o,s,!0),h=n+H.o*r,o=H,s=new $e(h,V),ni(d.a,s),fw(this,d,o,s,!0)),s=new $e(h,tt),ni(d.a,s),fw(this,d,o,s,!0)))},l.eg=function(e){return e.i.n.b+e.n.b+e.a.b},l.fg=function(){return be(),Hn},l.gg=function(){return be(),Bn},P(vct,"WestToEastRoutingStrategy",1806),I(813,1,{},sxt),l.Ib=function(){return Qp(this.a)},l.b=0,l.c=!1,l.d=!1,l.f=0,P(Ty,"NubSpline",813),I(407,1,{407:1},Rce,rQt),P(Ty,"NubSpline/PolarCP",407),I(1453,1,zc,Sse),l.Yf=function(e){return Ldn(u(e,37))},l.pf=function(e,n){u5n(this,u(e,37),n)};var qme,Hme,Gme,Vme,Ume;P(Ty,"SplineEdgeRouter",1453),I(268,1,{268:1},S$),l.Ib=function(){return this.a+" ->("+this.c+") "+this.b},l.c=0,P(Ty,"SplineEdgeRouter/Dependency",268),I(455,22,{3:1,35:1,22:1,455:1},$bt);var bb,e5,Wme=jr(Ty,"SplineEdgeRouter/SideToProcess",455,Hr,Wnn,lJe),Kme;I(1454,1,ui,jQ),l.Mb=function(e){return b_(),!u(e,128).o},P(Ty,"SplineEdgeRouter/lambda$0$Type",1454),I(1455,1,{},RQ),l.Ge=function(e){return b_(),u(e,128).v+1},P(Ty,"SplineEdgeRouter/lambda$1$Type",1455),I(1456,1,Un,iVt),l.td=function(e){ytn(this.a,this.b,u(e,46))},P(Ty,"SplineEdgeRouter/lambda$2$Type",1456),I(1457,1,Un,sVt),l.td=function(e){xtn(this.a,this.b,u(e,46))},P(Ty,"SplineEdgeRouter/lambda$3$Type",1457),I(128,1,{35:1,128:1},eoe,hxt),l.wd=function(e){return WKe(this,u(e,128))},l.b=0,l.e=!1,l.f=0,l.g=0,l.j=!1,l.k=!1,l.n=0,l.o=!1,l.p=!1,l.q=!1,l.s=0,l.u=0,l.v=0,l.F=0,P(Ty,"SplineSegment",128),I(459,1,{459:1},VT),l.a=0,l.b=!1,l.c=!1,l.d=!1,l.e=!1,l.f=0,P(Ty,"SplineSegment/EdgeInformation",459),I(1234,1,{},NQ),P(q_,a6t,1234),I(1235,1,Oi,PQ),l.ue=function(e,n){return rpn(u(e,135),u(n,135))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(q_,jfe,1235),I(1233,1,{},CHt),P(q_,"MrTree",1233),I(393,22,{3:1,35:1,22:1,393:1,246:1,234:1},UR),l.Kf=function(){return _oe(this)},l.Xf=function(){return _oe(this)};var vV,PS,PO,FS,ZCt=jr(q_,"TreeLayoutPhases",393,Hr,jin,hJe),Yme;I(1130,209,E2,VWt),l.Ze=function(e,n){var r,s,o,h,d,w,k;for(je(Re(qe(e,(hw(),i_t))))||u$((r=new rr((Im(),new Sm(e))),r)),d=(w=new A$,Lo(w,e),Jt(w,(fc(),jS),e),k=new Cr,Kwn(e,w,k),hmn(e,w,k),w),h=imn(this.a,d),o=new S(h);o.a<o.c.c.length;)s=u(J(o),135),Tdn(this.b,s,Rc(n,1/h.c.length));d=B5n(h),u4n(d)},P(q_,"TreeLayoutProvider",1130),I(1847,1,t0,FQ),l.Jc=function(e){va(this,e)},l.Kc=function(){return vn(),r8(),ZE},P(q_,"TreeUtil/1",1847),I(1848,1,t0,BQ),l.Jc=function(e){va(this,e)},l.Kc=function(){return vn(),r8(),ZE},P(q_,"TreeUtil/2",1848),I(502,134,{3:1,502:1,94:1,134:1}),l.g=0,P(H_,"TGraphElement",502),I(188,502,{3:1,188:1,502:1,94:1,134:1},Lwt),l.Ib=function(){return this.b&&this.c?b$(this.b)+"->"+b$(this.c):"e_"+Hi(this)},P(H_,"TEdge",188),I(135,134,{3:1,135:1,94:1,134:1},A$),l.Ib=function(){var e,n,r,s,o;for(o=null,s=ei(this.b,0);s.b!=s.d.c;)r=u(ti(s),86),o+=(r.c==null||r.c.length==0?"n_"+r.g:"n_"+r.c)+`
`;for(n=ei(this.a,0);n.b!=n.d.c;)e=u(ti(n),188),o+=(e.b&&e.c?b$(e.b)+"->"+b$(e.c):"e_"+Hi(e))+`
`;return o};var pxn=P(H_,"TGraph",135);I(633,502,{3:1,502:1,633:1,94:1,134:1}),P(H_,"TShape",633),I(86,633,{3:1,502:1,86:1,633:1,94:1,134:1},yit),l.Ib=function(){return b$(this)};var bxn=P(H_,"TNode",86);I(255,1,t0,Cp),l.Jc=function(e){va(this,e)},l.Kc=function(){var e;return e=ei(this.a.d,0),new bx(e)},P(H_,"TNode/2",255),I(358,1,ra,bx),l.Nb=function(e){pa(this,e)},l.Pb=function(){return u(ti(this.a),188).c},l.Ob=function(){return kR(this.a)},l.Qb=function(){H$(this.a)},P(H_,"TNode/2/1",358),I(1840,1,as,GWt),l.pf=function(e,n){Smn(this,u(e,135),n)},P(x6,"FanProcessor",1840),I(327,22,{3:1,35:1,22:1,327:1,234:1},tC),l.Kf=function(){switch(this.g){case 0:return new Mqt;case 1:return new GWt;case 2:return new Q5;case 3:return new UQ;case 4:return new KQ;case 5:return new OL;default:throw rt(new Pn(Bot+(this.f!=null?this.f:""+this.g)))}};var xht,kht,Eht,Tht,Cht,wV,Xme=jr(x6,v6t,327,Hr,ean,fJe),Qme;I(1843,1,as,UQ),l.pf=function(e,n){ubn(this,u(e,135),n)},l.a=0,P(x6,"LevelHeightProcessor",1843),I(1844,1,t0,WQ),l.Jc=function(e){va(this,e)},l.Kc=function(){return vn(),r8(),ZE},P(x6,"LevelHeightProcessor/1",1844),I(1841,1,as,Q5),l.pf=function(e,n){bgn(this,u(e,135),n)},l.a=0,P(x6,"NeighborsProcessor",1841),I(1842,1,t0,$F),l.Jc=function(e){va(this,e)},l.Kc=function(){return vn(),r8(),ZE},P(x6,"NeighborsProcessor/1",1842),I(1845,1,as,KQ),l.pf=function(e,n){cbn(this,u(e,135),n)},l.a=0,P(x6,"NodePositionProcessor",1845),I(1839,1,as,Mqt),l.pf=function(e,n){Nyn(this,u(e,135))},P(x6,"RootProcessor",1839),I(1846,1,as,OL),l.pf=function(e,n){Hun(u(e,135))},P(x6,"Untreeifyer",1846);var FO,BS,Zme,_ht,mV,RS,Sht,yV,xV,k7,jS,kV,Yg,JCt,Jme,Aht,Wy,Lht,t_t;I(851,1,Ih,L3),l.Qe=function(e){an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Fkt),""),"Weighting of Nodes"),"Which weighting to use when computing a node order."),n_t),(jg(),cs)),u_t),un((Xf(),qn))))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Bkt),""),"Search Order"),"Which search order to use when computing a spanning tree."),e_t),cs),h_t),un(qn)))),Zle((new KL,e))};var tye,e_t,eye,n_t;P(fH,"MrTreeMetaDataProvider",851),I(994,1,Ih,KL),l.Qe=function(e){Zle(e)};var nye,r_t,rye,iye,sye,aye,i_t,oye,s_t,cye,EV,a_t,uye,o_t,lye;P(fH,"MrTreeOptions",994),I(995,1,{},YQ),l.$e=function(){var e;return e=new VWt,e},l._e=function(e){},P(fH,"MrTreeOptions/MrtreeFactory",995),I(480,22,{3:1,35:1,22:1,480:1},zbt);var Mht,c_t,u_t=jr(fH,"OrderWeighting",480,Hr,Ynn,dJe),hye;I(425,22,{3:1,35:1,22:1,425:1},qbt);var l_t,Iht,h_t=jr(fH,"TreeifyingOrder",425,Hr,Knn,pJe),fye;I(1459,1,zc,WL),l.Yf=function(e){return u(e,135),dye},l.pf=function(e,n){qon(this,u(e,135),n)};var dye;P("org.eclipse.elk.alg.mrtree.p1treeify","DFSTreeifyer",1459),I(1460,1,zc,QJ),l.Yf=function(e){return u(e,135),gye},l.pf=function(e,n){_gn(this,u(e,135),n)};var gye;P("org.eclipse.elk.alg.mrtree.p2order","NodeOrderer",1460),I(1461,1,zc,XJ),l.Yf=function(e){return u(e,135),pye},l.pf=function(e,n){Hvn(this,u(e,135),n)},l.a=0;var pye;P("org.eclipse.elk.alg.mrtree.p3place","NodePlacer",1461),I(1462,1,zc,NB),l.Yf=function(e){return u(e,135),bye},l.pf=function(e,n){p1n(u(e,135),n)};var bye;P("org.eclipse.elk.alg.mrtree.p4route","EdgeRouter",1462);var $S;I(495,22,{3:1,35:1,22:1,495:1,246:1,234:1},Hbt),l.Kf=function(){return iie(this)},l.Xf=function(){return iie(this)};var TV,E7,f_t=jr(Rkt,"RadialLayoutPhases",495,Hr,Xnn,gJe),vye;I(1131,209,E2,THt),l.Ze=function(e,n){var r,s,o,h,d,w;if(r=ooe(this,e),wr(n,"Radial layout",r.c.length),je(Re(qe(e,(ay(),k_t))))||u$((s=new rr((Im(),new Sm(e))),s)),w=Ddn(e),bo(e,(bC(),$S),w),!w)throw rt(new Pn("The given graph is not a tree!"));for(o=Xt(ye(qe(e,SV))),o==0&&(o=xoe(e)),bo(e,SV,o),d=new S(ooe(this,e));d.a<d.c.c.length;)h=u(J(d),51),h.pf(e,Rc(n,1));or(n)},P(Rkt,"RadialLayoutProvider",1131),I(549,1,Oi,ER),l.ue=function(e,n){return iwn(this.a,this.b,u(e,33),u(n,33))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},l.a=0,l.b=0,P(Rkt,"RadialUtil/lambda$0$Type",549),I(1375,1,as,QQ),l.pf=function(e,n){E3n(u(e,33),n)},P(O1e,"CalculateGraphSize",1375),I(442,22,{3:1,35:1,22:1,442:1,234:1},Fet),l.Kf=function(){switch(this.g){case 0:return new zF;case 1:return new XQ;case 2:return new QQ;default:throw rt(new Pn(Bot+(this.f!=null?this.f:""+this.g)))}};var Dht,Oht,Nht,wye=jr(O1e,v6t,442,Hr,Vrn,bJe),mye;I(645,1,{}),l.e=1,l.g=0,P(yct,"AbstractRadiusExtensionCompaction",645),I(1772,645,{},kWt),l.hg=function(e){var n,r,s,o,h,d,w,k,C;for(this.c=u(qe(e,(bC(),$S)),33),ktt(this,this.c),this.d=ist(u(qe(e,(ay(),BO)),293)),k=u(qe(e,Fht),19),k&&pv(this,k.a),w=ye(qe(e,(ci(),H2))),k9(this,(On(w),w)),C=gy(this.c),this.d&&this.d.lg(C),mwn(this,C),d=new wl(ct(ot(ns,1),N1e,33,0,[this.c])),r=0;r<2;r++)for(n=0;n<C.c.length;n++)o=new wl(ct(ot(ns,1),N1e,33,0,[(An(n,C.c.length),u(C.c[n],33))])),h=n<C.c.length-1?(An(n+1,C.c.length),u(C.c[n+1],33)):(An(0,C.c.length),u(C.c[0],33)),s=n==0?u(Fe(C,C.c.length-1),33):(An(n-1,C.c.length),u(C.c[n-1],33)),gae(this,(An(n,C.c.length),u(C.c[n],33),d),s,h,o)},P(yct,"AnnulusWedgeCompaction",1772),I(1374,1,as,XQ),l.pf=function(e,n){F1n(u(e,33),n)},P(yct,"GeneralCompactor",1374),I(1771,645,{},ZQ),l.hg=function(e){var n,r,s,o;r=u(qe(e,(bC(),$S)),33),this.f=r,this.b=ist(u(qe(e,(ay(),BO)),293)),o=u(qe(e,Fht),19),o&&pv(this,o.a),s=ye(qe(e,(ci(),H2))),k9(this,(On(s),s)),n=gy(r),this.b&&this.b.lg(n),Vae(this,n)},l.a=0,P(yct,"RadialCompaction",1771),I(1779,1,{},JQ),l.ig=function(e){var n,r,s,o,h,d;for(this.a=e,n=0,d=gy(e),s=0,h=new S(d);h.a<h.c.c.length;)for(o=u(J(h),33),++s,r=s;r<d.c.length;r++)Omn(this,o,(An(r,d.c.length),u(d.c[r],33)))&&(n+=1);return n},P($kt,"CrossingMinimizationPosition",1779),I(1777,1,{},tZ),l.ig=function(e){var n,r,s,o,h,d,w,k,C,M,F,H,V;for(s=0,r=new ar(lr(G0(e).a.Kc(),new z));zr(r);)n=u(Lr(r),79),w=Mo(u(St((!n.c&&(n.c=new Cn(br,n,5,8)),n.c),0),82)),C=w.i+w.g/2,M=w.j+w.f/2,o=e.i+e.g/2,h=e.j+e.f/2,F=new Ta,F.a=C-o,F.b=M-h,d=new $e(F.a,F.b),hE(d,e.g,e.f),F.a-=d.a,F.b-=d.b,o=C-F.a,h=M-F.b,k=new $e(F.a,F.b),hE(k,w.g,w.f),F.a-=k.a,F.b-=k.b,C=o+F.a,M=h+F.b,H=C-o,V=M-h,s+=b.Math.sqrt(H*H+V*V);return s},P($kt,"EdgeLengthOptimization",1777),I(1778,1,{},eZ),l.ig=function(e){var n,r,s,o,h,d,w,k,C,M,F;for(s=0,r=new ar(lr(G0(e).a.Kc(),new z));zr(r);)n=u(Lr(r),79),w=Mo(u(St((!n.c&&(n.c=new Cn(br,n,5,8)),n.c),0),82)),k=w.i+w.g/2,C=w.j+w.f/2,o=u(qe(w,(ci(),z6)),8),h=e.i+o.a+e.g/2,d=e.j+o.b+e.f,M=k-h,F=C-d,s+=b.Math.sqrt(M*M+F*F);return s},P($kt,"EdgeLengthPositionOptimization",1778),I(1373,645,as,zF),l.pf=function(e,n){$bn(this,u(e,33),n)},P("org.eclipse.elk.alg.radial.intermediate.overlaps","RadiusExtensionOverlapRemoval",1373),I(426,22,{3:1,35:1,22:1,426:1},Gbt);var d_t,Pht,g_t=jr(G_,"AnnulusWedgeCriteria",426,Hr,Qnn,vJe),yye;I(380,22,{3:1,35:1,22:1,380:1},Bet);var CV,p_t,b_t,v_t=jr(G_,Jxt,380,Hr,Urn,wJe),xye;I(852,1,Ih,ZJ),l.Qe=function(e){an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,zkt),""),"Order ID"),"The id can be used to define an order for nodes of one radius. This can be used to sort them in the layer accordingly."),de(0)),(jg(),gc)),ja),un((Xf(),Js))))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,qkt),""),"Radius"),"The radius option can be used to set the initial radius for the radial layouter."),0),Do),ca),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,kct),""),"Compaction"),"With the compacter option it can be determined how compaction on the graph is done. It can be chosen between none, the radial compaction or the compaction of wedges separately."),w_t),cs),v_t),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Ect),""),"Compaction Step Size"),"Determine the size of steps with which the compaction is done. Step size 1 correlates to a compaction of 1 pixel per Iteration."),de(1)),gc),ja),un(qn)))),aa(e,Ect,kct,null),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Hkt),""),"Sorter"),"Sort the nodes per radius according to the sorting algorithm. The strategies are none, by the given order id, or sorting them by polar coordinates."),y_t),cs),I_t),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Gkt),""),"Annulus Wedge Criteria"),"Determine how the wedge for the node placement is calculated. It can be chosen between wedge determination by the number of leaves or by the maximum sum of diagonals."),x_t),cs),g_t),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Vkt),""),"Translation Optimization"),"Find the optimal translation of the nodes of the first radii according to this criteria. For example edge crossings can be minimized."),m_t),cs),A_t),un(qn)))),dhe((new PB,e))};var kye,Eye,w_t,Tye,m_t,Cye,_ye,Sye,y_t,Aye,x_t;P(G_,"RadialMetaDataProvider",852),I(996,1,Ih,PB),l.Qe=function(e){dhe(e)};var Fht,Bht,Lye,Mye,Iye,Dye,k_t,E_t,_V,Oye,Nye,SV,BO,Pye,T_t;P(G_,"RadialOptions",996),I(997,1,{},nZ),l.$e=function(){var e;return e=new THt,e},l._e=function(e){},P(G_,"RadialOptions/RadialFactory",997),I(340,22,{3:1,35:1,22:1,340:1},WR);var C_t,__t,S_t,Rht,A_t=jr(G_,"RadialTranslationStrategy",340,Hr,$in,mJe),Fye;I(293,22,{3:1,35:1,22:1,293:1},Ret);var L_t,jht,M_t,I_t=jr(G_,"SortingStrategy",293,Hr,Krn,yJe),Bye;I(1449,1,zc,qF),l.Yf=function(e){return u(e,33),null},l.pf=function(e,n){Ybn(this,u(e,33),n)},l.c=0,P("org.eclipse.elk.alg.radial.p1position","EadesRadial",1449),I(1775,1,{},rZ),l.jg=function(e){return Jie(e)},P(P1e,"AnnulusWedgeByLeafs",1775),I(1776,1,{},HF),l.jg=function(e){return aae(this,e)},P(P1e,"AnnulusWedgeByNodeSpace",1776),I(1450,1,zc,GF),l.Yf=function(e){return u(e,33),null},l.pf=function(e,n){odn(this,u(e,33),n)},P("org.eclipse.elk.alg.radial.p2routing","StraightLineEdgeRouter",1450),I(811,1,{},Vpt),l.kg=function(e){},l.lg=function(e){$zt(this,e)},P(Ukt,"IDSorter",811),I(1774,1,Oi,VF),l.ue=function(e,n){return Ion(u(e,33),u(n,33))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(Ukt,"IDSorter/lambda$0$Type",1774),I(1773,1,{},rne),l.kg=function(e){lZt(this,e)},l.lg=function(e){var n;e.dc()||(this.e||(n=aYt(u(e.Xb(0),33)),lZt(this,n)),$zt(this.e,e))},P(Ukt,"PolarCoordinateSorter",1773),I(1136,209,E2,iZ),l.Ze=function(e,n){var r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce,Se,We,Qe,Rn,zn,hr;if(wr(n,"Rectangle Packing",1),n.n&&n.n&&e&&hf(n,ff(e),(Cl(),Yl)),r=Xt(ye(qe(e,(Kst(),Wye)))),tt=u(qe(e,G_t),381),_t=je(Re(qe(e,z_t))),Se=je(Re(qe(e,H_t))),F=je(Re(qe(e,R_t))),We=u(qe(e,t3e),116),ce=Xt(ye(qe(e,n3e))),o=je(Re(qe(e,U_t))),H=je(Re(qe(e,j_t))),Lt=je(Re(qe(e,$_t))),hr=Xt(ye(qe(e,W_t))),Rn=(!e.a&&(e.a=new he(ns,e,10,11)),e.a),nne(Rn),Lt){for(Y=new le,k=new er(Rn);k.e!=k.i.gc();)d=u(dr(k),33),r2(d,RO)&&(Y.c[Y.c.length]=d);for(C=new S(Y);C.a<C.c.c.length;)d=u(J(C),33),j$(Rn,d);for(vn(),Xs(Y,new sZ),M=new S(Y);M.a<M.c.c.length;)d=u(J(M),33),Qe=u(qe(d,RO),19).a,Qe=b.Math.min(Qe,Rn.i),JC(Rn,Qe,d);for(gt=0,w=new er(Rn);w.e!=w.i.gc();)d=u(dr(w),33),bo(d,B_t,de(gt)),++gt}Yt=G4t(e),Yt.a-=We.b+We.c,Yt.b-=We.d+We.a,Bt=Yt.a,hr<0||hr<Yt.a?(V=new mKt(r,tt,_t),h=_wn(V,Rn,ce,We),n.n&&n.n&&e&&hf(n,ff(e),(Cl(),Yl))):h=new Tnt(r,hr,0,(yE(),HS)),Yt.a+=We.b+We.c,Yt.b+=We.d+We.a,Se||(nne(Rn),zn=new MZt(r,F,H,o,ce),Bt=b.Math.max(Yt.a,h.c),h=i4n(zn,Rn,Bt,Yt,n,e,We)),rcn(Rn,We),gw(e,h.c+(We.b+We.c),h.b+(We.d+We.a),!1,!0),je(Re(qe(e,q_t)))||u$((s=new rr((Im(),new Sm(e))),s)),n.n&&n.n&&e&&hf(n,ff(e),(Cl(),Yl)),or(n)},P(j1e,"RectPackingLayoutProvider",1136),I(1137,1,Oi,sZ),l.ue=function(e,n){return Kcn(u(e,33),u(n,33))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(j1e,"RectPackingLayoutProvider/lambda$0$Type",1137),I(1256,1,{},mKt),l.a=0,l.c=!1,P(dH,"AreaApproximation",1256);var D_t=Yi(dH,"BestCandidateFilter");I(638,1,{526:1},UT),l.mg=function(e,n,r){var s,o,h,d,w,k;for(k=new le,h=ss,w=new S(e);w.a<w.c.c.length;)d=u(J(w),220),h=b.Math.min(h,(d.c+(r.b+r.c))*(d.b+(r.d+r.a)));for(o=new S(e);o.a<o.c.c.length;)s=u(J(o),220),(s.c+(r.b+r.c))*(s.b+(r.d+r.a))==h&&(k.c[k.c.length]=s);return k},P(dH,"AreaFilter",638),I(639,1,{526:1},NL),l.mg=function(e,n,r){var s,o,h,d,w,k;for(w=new le,k=ss,d=new S(e);d.a<d.c.c.length;)h=u(J(d),220),k=b.Math.min(k,b.Math.abs((h.c+(r.b+r.c))/(h.b+(r.d+r.a))-n));for(o=new S(e);o.a<o.c.c.length;)s=u(J(o),220),b.Math.abs((s.c+(r.b+r.c))/(s.b+(r.d+r.a))-n)==k&&(w.c[w.c.length]=s);return w},P(dH,"AspectRatioFilter",639),I(637,1,{526:1},WT),l.mg=function(e,n,r){var s,o,h,d,w,k;for(k=new le,h=Ts,w=new S(e);w.a<w.c.c.length;)d=u(J(w),220),h=b.Math.max(h,qvt(d.c+(r.b+r.c),d.b+(r.d+r.a),d.a));for(o=new S(e);o.a<o.c.c.length;)s=u(J(o),220),qvt(s.c+(r.b+r.c),s.b+(r.d+r.a),s.a)==h&&(k.c[k.c.length]=s);return k},P(dH,"ScaleMeasureFilter",637),I(381,22,{3:1,35:1,22:1,381:1},jet);var O_t,N_t,$ht,P_t=jr(Tct,"OptimizationGoal",381,Hr,Wrn,xJe),Rye;I(856,1,Ih,jB),l.Qe=function(e){an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Wkt),""),"Optimization Goal"),"Optimization goal for approximation of the bounding box given by the first iteration. Determines whether layout is sorted by the maximum scaling, aspect ratio, or area. Depending on the strategy the aspect ratio might be nearly ignored."),F_t),(jg(),cs)),P_t),un((Xf(),Js))))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Kkt),""),"Shift Last Placed."),"When placing a rectangle behind or below the last placed rectangle in the first iteration, it is sometimes possible to shift the rectangle further to the left or right, resulting in less whitespace. True (default) enables the shift and false disables it. Disabling the shift produces a greater approximated area by the first iteration and a layout, when using ONLY the first iteration (default not the case), where it is sometimes impossible to implement a size transformation of rectangles that will fill the bounding box and eliminate empty spaces."),(Fn(),!0)),Aa),Bs),un(Js)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Ykt),""),"Current position of a node in the order of nodes"),"The rectangles are ordered. Normally according to their definition the the model. This option specifies the current position of a node."),de(-1)),gc),ja),un(Js)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Xkt),""),"Desired index of node"),"The rectangles are ordered. Normally according to their definition the the model. This option allows to specify a desired position that has preference over the original position."),de(-1)),gc),ja),un(Js)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Qkt),""),"Only Area Approximation"),"If enabled only the width approximation step is executed and the nodes are placed accordingly. The nodes are layouted according to the packingStrategy. If set to true not expansion of nodes is taking place."),!1),Aa),Bs),un(Js)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Zkt),""),"Compact Rows"),"Enables compaction. Compacts blocks if they do not use the full height of the row. This option allows to have a smaller drawing. If this option is disabled all nodes are placed next to each other in rows."),!0),Aa),Bs),un(Js)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Cct),""),"Fit Aspect Ratio"),"Expands nodes if expandNodes is true to fit the aspect ratio instead of only in their bounds. The option is only useful if the used packingStrategy is ASPECT_RATIO_DRIVEN, otherwise this may result in unreasonable ndoe expansion."),!1),Aa),Bs),un(Js)))),aa(e,Cct,gH,null),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Jkt),""),"Target Width"),"Option to place the rectangles in the given target width instead of approximating the width using the desired aspect ratio. The padding is not included in this. Meaning a drawing will have width of targetwidth + horizontal padding."),-1),Do),ca),un(Js)))),Phe((new Bk,e))};var jye,$ye,zye,qye,Hye,Gye,F_t,Vye,Uye;P(Tct,"RectPackingMetaDataProvider",856),I(1004,1,Ih,Bk),l.Qe=function(e){Phe(e)};var Wye,Kye,B_t,RO,R_t,j_t,$_t,Yye,z_t,Xye,Qye,Zye,Jye,q_t,H_t,G_t,t3e,V_t,e3e,U_t,n3e,W_t;P(Tct,"RectPackingOptions",1004),I(1005,1,{},aZ),l.$e=function(){var e;return e=new iZ,e},l._e=function(e){},P(Tct,"RectPackingOptions/RectpackingFactory",1005),I(1257,1,{},MZt),l.a=0,l.b=!1,l.c=0,l.d=0,l.e=!1,l.f=!1,l.g=0,P("org.eclipse.elk.alg.rectpacking.seconditeration","RowFillingAndCompaction",1257),I(187,1,{187:1},xit),l.a=0,l.c=!1,l.d=0,l.e=0,l.f=0,l.g=0,l.i=0,l.k=!1,l.o=ss,l.p=ss,l.r=0,l.s=0,l.t=0,P(YD,"Block",187),I(211,1,{211:1},f$),l.a=0,l.b=0,l.d=0,l.e=0,l.f=0,P(YD,"BlockRow",211),I(443,1,{443:1},Pwt),l.b=0,l.c=0,l.d=0,l.e=0,l.f=0,P(YD,"BlockStack",443),I(220,1,{220:1},Tnt,u3t),l.a=0,l.b=0,l.c=0,l.d=0,l.e=0;var vxn=P(YD,"DrawingData",220);I(355,22,{3:1,35:1,22:1,355:1},_M);var R6,n5,zS,qS,HS,r3e=jr(YD,"DrawingDataDescriptor",355,Hr,Esn,kJe),i3e;I(200,1,{200:1},Vwt),l.b=0,l.c=0,l.e=0,l.f=0,P(YD,"RectRow",200),I(756,1,{},$yt),l.j=0,P(Cy,t1e,756),I(1245,1,{},oZ),l.Je=function(e){return Hp(e.a,e.b)},P(Cy,e1e,1245),I(1246,1,{},O$t),l.Je=function(e){return Msn(this.a,e)},P(Cy,n1e,1246),I(1247,1,{},N$t),l.Je=function(e){return Bhn(this.a,e)},P(Cy,r1e,1247),I(1248,1,{},P$t),l.Je=function(e){return Ocn(this.a,e)},P(Cy,"ElkGraphImporter/lambda$3$Type",1248),I(1249,1,{},F$t),l.Je=function(e){return vpn(this.a,e)},P(Cy,i1e,1249),I(1133,209,E2,_Ht),l.Ze=function(e,n){var r,s,o,h,d,w,k,C,M,F,H,V;for(r2(e,(rD(),DV))&&(V=Br(qe(e,(ust(),gSt))),h=sat(z8(),V),h&&(d=u(lrt(h.f),209),d.Ze(e,Rc(n,1)))),bo(e,Wht,(hI(),IV)),bo(e,Kht,(iD(),Uht)),bo(e,Yht,(NI(),OV)),w=u(qe(e,(ust(),hSt)),19).a,wr(n,"Overlap removal",1),je(Re(qe(e,T3e))),k=new qs,C=new B$t(k),s=new $yt,r=Fhe(s,e),M=!0,o=0;o<w&&M;){if(je(Re(qe(e,fSt)))){if(k.a.$b(),ggn(new TUt(C),r.i),k.a.gc()==0)break;r.e=k}for(w$(this.b),Ud(this.b,(GI(),AV),(H9(),jO)),Ud(this.b,LV,r.g),Ud(this.b,MV,(IR(),Hht)),this.a=Tq(this.b,r),H=new S(this.a);H.a<H.c.c.length;)F=u(J(H),51),F.pf(r,Rc(n,1));I1n(s,r),M=je(Re(Q(r,(G8(),n7t)))),++o}Qle(s,r),or(n)},P(Cy,"OverlapRemovalLayoutProvider",1133),I(1134,1,{},B$t),P(Cy,"OverlapRemovalLayoutProvider/lambda$0$Type",1134),I(437,22,{3:1,35:1,22:1,437:1},$et);var AV,LV,MV,zht=jr(Cy,"SPOrEPhases",437,Hr,Yrn,EJe),s3e;I(1255,1,{},SHt),P(Cy,"ShrinkTree",1255),I(1135,209,E2,Dqt),l.Ze=function(e,n){var r,s,o,h,d;r2(e,(rD(),DV))&&(d=Br(qe(e,DV)),o=sat(z8(),d),o&&(h=u(lrt(o.f),209),h.Ze(e,Rc(n,1)))),s=new $yt,r=Fhe(s,e),t2n(this.a,r,Rc(n,1)),Qle(s,r)},P(Cy,"ShrinkTreeLayoutProvider",1135),I(300,134,{3:1,300:1,94:1,134:1},aQt),l.c=!1,P("org.eclipse.elk.alg.spore.graph","Graph",300),I(482,22,{3:1,35:1,22:1,482:1,246:1,234:1},EGt),l.Kf=function(){return ure(this)},l.Xf=function(){return ure(this)};var qht,K_t=jr(_y,Jxt,482,Hr,ann,TJe),a3e;I(551,22,{3:1,35:1,22:1,551:1,246:1,234:1},EWt),l.Kf=function(){return new UF},l.Xf=function(){return new UF};var Hht,o3e=jr(_y,"OverlapRemovalStrategy",551,Hr,onn,CJe),c3e;I(430,22,{3:1,35:1,22:1,430:1},Vbt);var IV,Ght,Y_t=jr(_y,"RootSelection",430,Hr,Jnn,_Je),u3e;I(316,22,{3:1,35:1,22:1,316:1},SM);var X_t,Vht,Uht,Q_t,Z_t,J_t=jr(_y,"SpanningTreeCostFunction",316,Hr,ysn,SJe),l3e;I(1002,1,Ih,FB),l.Qe=function(e){Sle(e)};var tSt,eSt,h3e,f3e,nSt,rSt,Wht,Kht,Yht,d3e,g3e,DV;P(_y,"SporeCompactionOptions",1002),I(1003,1,{},PL),l.$e=function(){var e;return e=new Dqt,e},l._e=function(e){},P(_y,"SporeCompactionOptions/SporeCompactionFactory",1003),I(855,1,Ih,BB),l.Qe=function(e){an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,_ct),""),"Underlying Layout Algorithm"),"A layout algorithm that is applied to the graph before it is compacted. If this is null, nothing is applied before compaction."),(jg(),T7)),Ae),un((Xf(),qn))))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Lct),"structure"),"Structure Extraction Strategy"),"This option defines what kind of triangulation or other partitioning of the plane is applied to the vertices."),uSt),cs),pSt),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,t8t),Mct),"Tree Construction Strategy"),"Whether a minimum spanning tree or a maximum spanning tree should be constructed."),oSt),cs),vSt),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,e8t),Mct),"Cost Function for Spanning Tree"),"The cost function is used in the creation of the spanning tree."),aSt),cs),J_t),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Sct),Mct),"Root node for spanning tree construction"),"The identifier of the node that is preferred as the root of the spanning tree. If this is null, the first node is chosen."),null),T7),Ae),un(qn)))),aa(e,Sct,Act,y3e),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Act),Mct),"Root selection for spanning tree"),"This sets the method used to select a root node for the construction of a spanning tree"),sSt),cs),Y_t),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,n8t),X6t),"Compaction Strategy"),"This option defines how the compaction is applied."),iSt),cs),K_t),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,r8t),X6t),"Orthogonal Compaction"),"Restricts the translation of nodes to orthogonal directions in the compaction phase."),(Fn(),!1)),Aa),Bs),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,i8t),$1e),"Upper limit for iterations of overlap removal"),null),de(64)),gc),ja),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,s8t),$1e),"Whether to run a supplementary scanline overlap check."),null),!0),Aa),Bs),un(qn)))),Oue((new RB,e)),Sle((new FB,e))};var p3e,iSt,b3e,v3e,w3e,m3e,y3e,x3e,sSt,k3e,aSt,E3e,oSt,cSt,uSt,lSt;P(_y,"SporeMetaDataProvider",855),I($g,1,Ih,RB),l.Qe=function(e){Oue(e)};var T3e,hSt,fSt,dSt,C3e,gSt;P(_y,"SporeOverlapRemovalOptions",$g),I(1001,1,{},cZ),l.$e=function(){var e;return e=new _Ht,e},l._e=function(e){},P(_y,"SporeOverlapRemovalOptions/SporeOverlapFactory",1001),I(530,22,{3:1,35:1,22:1,530:1,246:1,234:1},dXt),l.Kf=function(){return lre(this)},l.Xf=function(){return lre(this)};var jO,pSt=jr(_y,"StructureExtractionStrategy",530,Hr,cnn,AJe),_3e;I(429,22,{3:1,35:1,22:1,429:1,246:1,234:1},Ubt),l.Kf=function(){return sie(this)},l.Xf=function(){return sie(this)};var bSt,OV,vSt=jr(_y,"TreeConstructionStrategy",429,Hr,Znn,LJe),S3e;I(1443,1,zc,uZ),l.Yf=function(e){return u(e,300),new Hs},l.pf=function(e,n){z1n(u(e,300),n)},P(z1e,"DelaunayTriangulationPhase",1443),I(1444,1,Un,R$t),l.td=function(e){ue(this.a,u(e,65).a)},P(z1e,"DelaunayTriangulationPhase/lambda$0$Type",1444),I(783,1,zc,Gpt),l.Yf=function(e){return u(e,300),new Hs},l.pf=function(e,n){this.ng(u(e,300),n)},l.ng=function(e,n){var r,s,o;wr(n,"Minimum spanning tree construction",1),e.d?s=e.d.a:s=u(Fe(e.i,0),65).a,je(Re(Q(e,(G8(),uS))))?o=Cat(e.e,s,(r=e.b,r)):o=Cat(e.e,s,e.b),Vne(this,o,e),or(n)},P(Ict,"MinSTPhase",783),I(1446,783,zc,bqt),l.ng=function(e,n){var r,s,o,h;wr(n,"Maximum spanning tree construction",1),r=new j$t(e),e.d?o=e.d.c:o=u(Fe(e.i,0),65).c,je(Re(Q(e,(G8(),uS))))?h=Cat(e.e,o,(s=r,s)):h=Cat(e.e,o,r),Vne(this,h,e),or(n)},P(Ict,"MaxSTPhase",1446),I(1447,1,{},j$t),l.Je=function(e){return IYe(this.a,e)},P(Ict,"MaxSTPhase/lambda$0$Type",1447),I(1445,1,Un,$$t),l.td=function(e){kXe(this.a,u(e,65))},P(Ict,"MinSTPhase/lambda$0$Type",1445),I(785,1,zc,UF),l.Yf=function(e){return u(e,300),new Hs},l.pf=function(e,n){t0n(this,u(e,300),n)},l.a=!1,P(Dct,"GrowTreePhase",785),I(786,1,Un,yvt),l.td=function(e){vcn(this.a,this.b,this.c,u(e,221))},P(Dct,"GrowTreePhase/lambda$0$Type",786),I(1448,1,zc,lZ),l.Yf=function(e){return u(e,300),new Hs},l.pf=function(e,n){ufn(this,u(e,300),n)},P(Dct,"ShrinkTreeCompactionPhase",1448),I(784,1,Un,xvt),l.td=function(e){zpn(this.a,this.b,this.c,u(e,221))},P(Dct,"ShrinkTreeCompactionPhase/lambda$0$Type",784);var wSt=Yi(Ec,"IGraphElementVisitor");I(860,1,{527:1},eZt),l.og=function(e){var n;n=Wvn(this,e),Lo(n,u(Jn(this.b,e),94)),Vbn(this,e,n)};var A3e,L3e;P(S4,"LayoutConfigurator",860);var wxn=Yi(S4,"LayoutConfigurator/IPropertyHolderOptionFilter");I(932,1,{1933:1},hZ),l.pg=function(e,n){return Qx(),!e.Xe(n)},P(S4,"LayoutConfigurator/lambda$0$Type",932),I(933,1,{1933:1},fZ),l.pg=function(e,n){return kHt(e,n)},P(S4,"LayoutConfigurator/lambda$1$Type",933),I(931,1,{831:1},dZ),l.qg=function(e,n){return Qx(),!e.Xe(n)},P(S4,"LayoutConfigurator/lambda$2$Type",931),I(934,1,ui,aVt),l.Mb=function(e){return Wen(this.a,this.b,u(e,1933))},P(S4,"LayoutConfigurator/lambda$3$Type",934),I(858,1,{},gZ),P(S4,"RecursiveGraphLayoutEngine",858),I(296,60,U0,Uzt,F3),P(S4,"UnsupportedConfigurationException",296),I(453,60,U0,F9),P(S4,"UnsupportedGraphException",453),I(754,1,{}),P(Ec,"AbstractRandomListAccessor",754),I(500,754,{},dD),l.rg=function(){return null},l.d=!0,l.e=!0,l.f=0,P(zE,"AlgorithmAssembler",500),I(1236,1,ui,pZ),l.Mb=function(e){return!!u(e,123)},P(zE,"AlgorithmAssembler/lambda$0$Type",1236),I(1237,1,{},z$t),l.Kb=function(e){return XKe(this.a,u(e,123))},P(zE,"AlgorithmAssembler/lambda$1$Type",1237),I(1238,1,ui,bZ),l.Mb=function(e){return!!u(e,80)},P(zE,"AlgorithmAssembler/lambda$2$Type",1238),I(1239,1,Un,q$t),l.td=function(e){Rl(this.a,u(e,80))},P(zE,"AlgorithmAssembler/lambda$3$Type",1239),I(1240,1,Un,oVt),l.td=function(e){uQe(this.a,this.b,u(e,234))},P(zE,"AlgorithmAssembler/lambda$4$Type",1240),I(1355,1,Oi,vZ),l.ue=function(e,n){return Enn(u(e,234),u(n,234))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(zE,"EnumBasedFactoryComparator",1355),I(80,754,{80:1},Hs),l.rg=function(){return new qs},l.a=0,P(zE,"LayoutProcessorConfiguration",80),I(1013,1,{527:1},YL),l.og=function(e){UC(I3e,new H$t(e))};var M3e,I3e,D3e;P(Qo,"DeprecatedLayoutOptionReplacer",1013),I(1014,1,Un,wZ),l.td=function(e){fan(u(e,160))},P(Qo,"DeprecatedLayoutOptionReplacer/lambda$0$Type",1014),I(1015,1,Un,mZ),l.td=function(e){Pln(u(e,160))},P(Qo,"DeprecatedLayoutOptionReplacer/lambda$1$Type",1015),I(1016,1,{},H$t),l.Od=function(e,n){lQe(this.a,u(e,146),u(n,38))},P(Qo,"DeprecatedLayoutOptionReplacer/lambda$2$Type",1016),I(149,1,{686:1,149:1},w2),l.Fb=function(e){return omt(this,e)},l.sg=function(){return this.b},l.tg=function(){return this.c},l.ne=function(){return this.e},l.Hb=function(){return Bg(this.c)},l.Ib=function(){return"Layout Algorithm: "+this.c};var mxn=P(Qo,"LayoutAlgorithmData",149);I(263,1,{},pg),P(Qo,"LayoutAlgorithmData/Builder",263),I(1017,1,{527:1},yZ),l.og=function(e){Et(e,239)&&!je(Re(e.We((ci(),$V))))&&Mmn(u(e,33))},P(Qo,"LayoutAlgorithmResolver",1017),I(229,1,{686:1,229:1},zx),l.Fb=function(e){return Et(e,229)?hn(this.b,u(e,229).b):!1},l.sg=function(){return this.a},l.tg=function(){return this.b},l.ne=function(){return this.d},l.Hb=function(){return Bg(this.b)},l.Ib=function(){return"Layout Type: "+this.b},P(Qo,"LayoutCategoryData",229),I(344,1,{},wm),P(Qo,"LayoutCategoryData/Builder",344),I(867,1,{},kue);var Xht;P(Qo,"LayoutMetaDataService",867),I(868,1,{},JYt),P(Qo,"LayoutMetaDataService/Registry",868),I(478,1,{478:1},WF),P(Qo,"LayoutMetaDataService/Registry/Triple",478),I(869,1,D4,xZ),l.ug=function(){return new Ta},P(Qo,"LayoutMetaDataService/lambda$0$Type",869),I(870,1,Sy,kZ),l.vg=function(e){return nc(u(e,8))},P(Qo,"LayoutMetaDataService/lambda$1$Type",870),I(879,1,D4,EZ),l.ug=function(){return new le},P(Qo,"LayoutMetaDataService/lambda$10$Type",879),I(880,1,Sy,TZ),l.vg=function(e){return new Pu(u(e,12))},P(Qo,"LayoutMetaDataService/lambda$11$Type",880),I(881,1,D4,CZ),l.ug=function(){return new Qi},P(Qo,"LayoutMetaDataService/lambda$12$Type",881),I(882,1,Sy,_Z),l.vg=function(e){return UM(u(e,68))},P(Qo,"LayoutMetaDataService/lambda$13$Type",882),I(883,1,D4,SZ),l.ug=function(){return new qs},P(Qo,"LayoutMetaDataService/lambda$14$Type",883),I(884,1,Sy,AZ),l.vg=function(e){return s$(u(e,53))},P(Qo,"LayoutMetaDataService/lambda$15$Type",884),I(885,1,D4,LZ),l.ug=function(){return new A0},P(Qo,"LayoutMetaDataService/lambda$16$Type",885),I(886,1,Sy,Ac),l.vg=function(e){return E$(u(e,53))},P(Qo,"LayoutMetaDataService/lambda$17$Type",886),I(887,1,D4,MZ),l.ug=function(){return new Mpt},P(Qo,"LayoutMetaDataService/lambda$18$Type",887),I(888,1,Sy,KT),l.vg=function(e){return SKt(u(e,208))},P(Qo,"LayoutMetaDataService/lambda$19$Type",888),I(871,1,D4,tc),l.ug=function(){return new Du},P(Qo,"LayoutMetaDataService/lambda$2$Type",871),I(872,1,Sy,Kc),l.vg=function(e){return new yR(u(e,74))},P(Qo,"LayoutMetaDataService/lambda$3$Type",872),I(873,1,D4,zi),l.ug=function(){return new M9},P(Qo,"LayoutMetaDataService/lambda$4$Type",873),I(874,1,Sy,FL),l.vg=function(e){return new wnt(u(e,142))},P(Qo,"LayoutMetaDataService/lambda$5$Type",874),I(875,1,D4,DZ),l.ug=function(){return new wx},P(Qo,"LayoutMetaDataService/lambda$6$Type",875),I(876,1,Sy,OZ),l.vg=function(e){return new pvt(u(e,116))},P(Qo,"LayoutMetaDataService/lambda$7$Type",876),I(877,1,D4,Z5),l.ug=function(){return new Wu},P(Qo,"LayoutMetaDataService/lambda$8$Type",877),I(878,1,Sy,mm),l.vg=function(e){return new $te(u(e,373))},P(Qo,"LayoutMetaDataService/lambda$9$Type",878);var Qht=Yi(BD,"IProperty");I(23,1,{35:1,686:1,23:1,146:1},Xe),l.wd=function(e){return PXe(this,u(e,146))},l.Fb=function(e){return Et(e,23)?hn(this.f,u(e,23).f):Et(e,146)&&hn(this.f,u(e,146).tg())},l.wg=function(){var e;if(Et(this.b,4)){if(e=_3t(this.b),e==null)throw rt(new Fo(G1e+this.f+"'. Make sure it's type is registered with the "+(L0(uN),uN.k)+a8t));return e}else return this.b},l.sg=function(){return this.d},l.tg=function(){return this.f},l.ne=function(){return this.i},l.Hb=function(){return Bg(this.f)},l.Ib=function(){return"Layout Option: "+this.f},P(Qo,"LayoutOptionData",23),I(24,1,{},Ue),P(Qo,"LayoutOptionData/Builder",24),I(175,22,{3:1,35:1,22:1,175:1},AM);var Id,Xg,Js,qn,$2,Qg=jr(Qo,"LayoutOptionData/Target",175,Hr,msn,MJe),O3e;I(277,22,{3:1,35:1,22:1,277:1},_x);var Aa,Do,cs,j6,gc,q1,T7,mSt,N3e=jr(Qo,"LayoutOptionData/Type",277,Hr,Xan,IJe),P3e,GS,ySt;I(110,1,{110:1},Ax,ih,o$),l.Fb=function(e){var n;return e==null||!Et(e,110)?!1:(n=u(e,110),Pc(this.c,n.c)&&Pc(this.d,n.d)&&Pc(this.b,n.b)&&Pc(this.a,n.a))},l.Hb=function(){return vz(ct(ot(Xn,1),Ie,1,5,[this.c,this.d,this.b,this.a]))},l.Ib=function(){return"Rect[x="+this.c+",y="+this.d+",w="+this.b+",h="+this.a+"]"},l.a=0,l.b=0,l.c=0,l.d=0,P(qD,"ElkRectangle",110),I(8,1,{3:1,4:1,8:1,414:1},Ta,brt,$e,yo),l.Fb=function(e){return Yee(this,e)},l.Hb=function(){return o8(this.a)+Ffn(o8(this.b))},l.Jf=function(e){var n,r,s,o;for(s=0;s<e.length&&Lre((Rr(s,e.length),e.charCodeAt(s)),Yfe);)++s;for(n=e.length;n>0&&Lre((Rr(n-1,e.length),e.charCodeAt(n-1)),Xfe);)--n;if(s>=n)throw rt(new Pn("The given string does not contain any numbers."));if(o=py(e.substr(s,n-s),`,|;|\r|
`),o.length!=2)throw rt(new Pn("Exactly two numbers are expected, "+o.length+" were found."));try{this.a=ly(uy(o[0])),this.b=ly(uy(o[1]))}catch(h){throw h=Wi(h),Et(h,127)?(r=h,rt(new Pn(Qfe+r))):rt(h)}},l.Ib=function(){return"("+this.a+","+this.b+")"},l.a=0,l.b=0;var Us=P(qD,"KVector",8);I(74,68,{3:1,4:1,20:1,28:1,52:1,14:1,68:1,15:1,74:1,414:1},Du,yR,dWt),l.Pc=function(){return eun(this)},l.Jf=function(e){var n,r,s,o,h,d;s=py(e,`,|;|\\(|\\)|\\[|\\]|\\{|\\}| |	|
`),_h(this);try{for(r=0,h=0,o=0,d=0;r<s.length;)s[r]!=null&&uy(s[r]).length>0&&(h%2==0?o=ly(s[r]):d=ly(s[r]),h>0&&h%2!=0&&ni(this,new $e(o,d)),++h),++r}catch(w){throw w=Wi(w),Et(w,127)?(n=w,rt(new Pn("The given string does not match the expected format for vectors."+n))):rt(w)}},l.Ib=function(){var e,n,r;for(e=new Il("("),n=ei(this,0);n.b!=n.d.c;)r=u(ti(n),8),Vr(e,r.a+","+r.b),n.b!=n.d.c&&(e.a+="; ");return(e.a+=")",e).a};var xSt=P(qD,"KVectorChain",74);I(248,22,{3:1,35:1,22:1,248:1},eC);var Zht,NV,PV,$O,zO,FV,kSt=jr(Oh,"Alignment",248,Hr,Ysn,DJe),F3e;I(979,1,Ih,ttt),l.Qe=function(e){Wue(e)};var ESt,Jht,B3e,TSt,CSt,R3e,_St,j3e,$3e,SSt,ASt,z3e;P(Oh,"BoxLayouterOptions",979),I(980,1,{},IZ),l.$e=function(){var e;return e=new BZ,e},l._e=function(e){},P(Oh,"BoxLayouterOptions/BoxFactory",980),I(291,22,{3:1,35:1,22:1,291:1},nC);var qO,tft,HO,GO,VO,eft,nft=jr(Oh,"ContentAlignment",291,Hr,Ksn,OJe),q3e;I(684,1,Ih,yp),l.Qe=function(e){an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,U1e),""),"Layout Algorithm"),"Select a specific layout algorithm."),(jg(),T7)),Ae),un((Xf(),qn))))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,W1e),""),"Resolved Layout Algorithm"),"Meta data associated with the selected algorithm."),q1),mxn),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,gkt),""),"Alignment"),"Alignment of the selected node relative to other nodes; the exact meaning depends on the used algorithm."),LSt),cs),kSt),un(Js)))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,b6),""),"Aspect Ratio"),"The desired aspect ratio of the drawing, that is the quotient of width by height."),Do),ca),un(qn)))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,c8t),""),"Bend Points"),"A fixed list of bend points for the edge. This is used by the 'Fixed Layout' algorithm to specify a pre-defined routing for an edge. The vector chain must include the source point, any bend points, and the target point, so it must have at least two points."),q1),xSt),un(Id)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,cH),""),"Content Alignment"),"Specifies how the content of a node are aligned. Each node can individually control the alignment of its contents. I.e. if a node should be aligned top left in its parent node, the parent node should specify that option."),ISt),j6),nft),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,KD),""),"Debug Mode"),"Whether additional debug information shall be generated."),(Fn(),!1)),Aa),Bs),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,vkt),""),Qxt),"Overall direction of edges: horizontal (right / left) or vertical (down / up)."),DSt),cs),WS),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,UD),""),"Edge Routing"),"What kind of edge routing style should be applied for the content of a parent node. Algorithms may also set this option to single edges in order to mark them as splines. The bend point list of edges with this option set to SPLINES must be interpreted as control points for a piecewise cubic spline."),PSt),cs),pft),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,gH),""),"Expand Nodes"),"If active, nodes are expanded to fill the area of their parent."),!1),Aa),Bs),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,oH),""),"Hierarchy Handling"),"Determines whether separate layout runs are triggered for different compound nodes in a hierarchical graph. Setting a node's hierarchy handling to `INCLUDE_CHILDREN` will lay out that node and all of its descendants in a single layout run, until a descendant is encountered which has its hierarchy handling set to `SEPARATE_CHILDREN`. In general, `SEPARATE_CHILDREN` will ensure that a new layout run is triggered for a node with that setting. Including multiple levels of hierarchy in a single layout run may allow cross-hierarchical edges to be laid out properly. If the root node is set to `INHERIT` (or not set at all), the default behavior is `SEPARATE_CHILDREN`."),jSt),cs),TAt),ji(qn,ct(ot(Qg,1),ae,175,0,[Js]))))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,ww),""),"Padding"),"The padding to be left to a parent element's border when placing child elements. This can also serve as an output option of a layout algorithm if node size calculation is setup appropriately."),YSt),q1),M7t),ji(qn,ct(ot(Qg,1),ae,175,0,[Js]))))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,$D),""),"Interactive"),"Whether the algorithm should be run in interactive mode for the content of a parent node. What this means exactly depends on how the specific algorithm interprets this option. Usually in the interactive mode algorithms try to modify the current layout as little as possible."),!1),Aa),Bs),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,pct),""),"interactive Layout"),"Whether the graph should be changeable interactively and by setting constraints"),!1),Aa),Bs),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,F_),""),"Omit Node Micro Layout"),"Node micro layout comprises the computation of node dimensions (if requested), the placement of ports and their labels, and the placement of node labels. The functionality is implemented independent of any specific layout algorithm and shouldn't have any negative impact on the layout algorithm's performance itself. Yet, if any unforeseen behavior occurs, this option allows to deactivate the micro layout."),!1),Aa),Bs),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Not),""),"Port Constraints"),"Defines constraints of the position of the ports of a node."),tAt),cs),SAt),un(Js)))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,uH),""),"Position"),"The position of a node, port, or label. This is used by the 'Fixed Layout' algorithm to specify a pre-defined position."),q1),Us),ji(Js,ct(ot(Qg,1),ae,175,0,[$2,Xg]))))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,jD),""),"Priority"),"Defines the priority of an object; its meaning depends on the specific layout algorithm and the context where it is used."),gc),ja),ji(Js,ct(ot(Qg,1),ae,175,0,[Id]))))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,Hq),""),"Randomization Seed"),"Seed used for pseudo-random number generators to control the layout algorithm. If the value is 0, the seed shall be determined pseudo-randomly (e.g. from the system time)."),gc),ja),un(qn)))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,P_),""),"Separate Connected Components"),"Whether each connected component should be processed separately."),Aa),Bs),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,_kt),""),"Junction Points"),"This option is not used as option, but as output of the layout algorithms. It is attached to edges and determines the points where junction symbols should be drawn in order to represent hyperedges with orthogonal routing. Whether such points are computed depends on the chosen layout algorithm and edge routing style. The points are put into the vector chain with no specific order."),zSt),q1),xSt),un(Id)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Lkt),""),"Comment Box"),"Whether the node should be regarded as a comment box instead of a regular node. In that case its placement should be similar to how labels are handled. Any edges incident to a comment box specify to which graph elements the comment is related."),!1),Aa),Bs),un(Js)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Mkt),""),"Hypernode"),"Whether the node should be handled as a hypernode."),!1),Aa),Bs),un(Js)))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,W5n),""),"Label Manager"),"Label managers can shorten labels upon a layout algorithm's request."),q1),Txn),ji(qn,ct(ot(Qg,1),ae,175,0,[Xg]))))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Dkt),""),"Margins"),"Margins define additional space around the actual bounds of a graph element. For instance, ports or labels being placed on the outside of a node's border might introduce such a margin. The margin is used to guarantee non-overlap of other graph elements with those ports or labels."),qSt),q1),L7t),un(Js)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,fkt),""),"No Layout"),"No layout is done for the associated element. This is used to mark parts of a diagram to avoid their inclusion in the layout graph, or to mark parts of the layout graph to prevent layout engines from processing them. If you wish to exclude the contents of a compound node from automatic layout, while the node itself is still considered on its own layer, use the 'Fixed Layout' algorithm for that node."),!1),Aa),Bs),ji(Js,ct(ot(Qg,1),ae,175,0,[Id,$2,Xg]))))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,K1e),""),"Scale Factor"),"The scaling factor to be applied to the corresponding node in recursive layout. It causes the corresponding node's size to be adjusted, and its ports and labels to be sized and placed accordingly after the layout of that node has been determined (and before the node itself and its siblings are arranged). The scaling is not reverted afterwards, so the resulting layout graph contains the adjusted size and position data. This option is currently not supported if 'Layout Hierarchy' is set."),1),Do),ca),un(Js)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Y1e),""),"Animate"),"Whether the shift from the old layout to the new computed layout shall be animated."),!0),Aa),Bs),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,X1e),""),"Animation Time Factor"),"Factor for computation of animation time. The higher the value, the longer the animation time. If the value is 0, the resulting time is always equal to the minimum defined by 'Minimal Animation Time'."),de(100)),gc),ja),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Q1e),""),"Layout Ancestors"),"Whether the hierarchy levels on the path from the selected element to the root of the diagram shall be included in the layout process."),!1),Aa),Bs),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Z1e),""),"Maximal Animation Time"),"The maximal time for animations, in milliseconds."),de(4e3)),gc),ja),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,J1e),""),"Minimal Animation Time"),"The minimal time for animations, in milliseconds."),de(400)),gc),ja),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,tde),""),"Progress Bar"),"Whether a progress bar shall be displayed during layout computations."),!1),Aa),Bs),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,ede),""),"Validate Graph"),"Whether the graph shall be validated before any layout algorithm is applied. If this option is enabled and at least one error is found, the layout process is aborted and a message is shown to the user."),!1),Aa),Bs),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,nde),""),"Validate Options"),"Whether layout options shall be validated before any layout algorithm is applied. If this option is enabled and at least one error is found, the layout process is aborted and a message is shown to the user."),!0),Aa),Bs),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,rde),""),"Zoom to Fit"),"Whether the zoom level shall be set to view the whole diagram after layout."),!1),Aa),Bs),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,o8t),"box"),"Box Layout Mode"),"Configures the packing mode used by the {@link BoxLayoutProvider}. If SIMPLE is not required (neither priorities are used nor the interactive mode), GROUP_DEC can improve the packing and decrease the area. GROUP_MIXED and GROUP_INC may, in very specific scenarios, work better."),MSt),cs),OAt),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,tkt),F1),"Comment Comment Spacing"),"Spacing to be preserved between a comment box and other comment boxes connected to the same node. The space left between comment boxes of different nodes is controlled by the node-node spacing."),10),Do),ca),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,ekt),F1),"Comment Node Spacing"),"Spacing to be preserved between a node and its connected comment boxes. The space left between a node and the comments of another node is controlled by the node-node spacing."),10),Do),ca),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Aot),F1),"Components Spacing"),"Spacing to be preserved between pairs of connected components. This option is only relevant if 'separateConnectedComponents' is activated."),20),Do),ca),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,nkt),F1),"Edge Spacing"),"Spacing to be preserved between any two edges. Note that while this can somewhat easily be satisfied for the segments of orthogonally drawn edges, it is harder for general polylines or splines."),10),Do),ca),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Oot),F1),"Edge Label Spacing"),"The minimal distance to be preserved between a label and the edge it is associated with. Note that the placement of a label is influenced by the 'edgelabels.placement' option."),2),Do),ca),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,rkt),F1),"Edge Node Spacing"),"Spacing to be preserved between nodes and edges."),10),Do),ca),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,ikt),F1),"Label Spacing"),"Determines the amount of space to be left between two labels of the same graph element."),0),Do),ca),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,okt),F1),"Label Node Spacing"),"Spacing to be preserved between labels and the border of node they are associated with. Note that the placement of a label is influenced by the 'nodelabels.placement' option."),5),Do),ca),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,skt),F1),"Horizontal spacing between Label and Port"),"Horizontal spacing to be preserved between labels and the ports they are associated with. Note that the placement of a label is influenced by the 'portlabels.placement' option."),1),Do),ca),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,akt),F1),"Vertical spacing between Label and Port"),"Vertical spacing to be preserved between labels and the ports they are associated with. Note that the placement of a label is influenced by the 'portlabels.placement' option."),1),Do),ca),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,ky),F1),"Node Spacing"),"The minimal distance to be preserved between each two nodes."),20),Do),ca),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,ckt),F1),"Node Self Loop Spacing"),"Spacing to be preserved between a node and its self loops."),10),Do),ca),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,ukt),F1),"Port Spacing"),"Spacing between pairs of ports of the same node."),10),Do),ca),ji(qn,ct(ot(Qg,1),ae,175,0,[Js]))))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,lkt),F1),"Individual Spacing"),"Allows to specify individual spacing values for graph elements that shall be different from the value specified for the element's parent."),q1),E4e),ji(Js,ct(ot(Qg,1),ae,175,0,[Id,$2,Xg]))))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Okt),F1),"Additional Port Space"),"Additional space around the sets of ports on each node side. For each side of a node, this option can reserve additional space before and after the ports on each side. For example, a top spacing of 20 makes sure that the first port on the western and eastern side is 20 units away from the northern border."),lAt),q1),L7t),un(qn)))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,gct),ade),"Layout Partition"),"Partition to which the node belongs. This requires Layout Partitioning to be active. Nodes with lower partition IDs will appear to the left of nodes with higher partition IDs (assuming a left-to-right layout direction)."),gc),ja),ji(qn,ct(ot(Qg,1),ae,175,0,[Js]))))),aa(e,gct,dct,X3e),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,dct),ade),"Layout Partitioning"),"Whether to activate partitioned layout. This will allow to group nodes through the Layout Partition option. a pair of nodes with different partition indices is then placed such that the node with lower index is placed to the left of the other node (with left-to-right layout direction). Depending on the layout algorithm, this may only be guaranteed to work if all nodes have a layout partition configured, or at least if edges that cross partitions are not part of a partition-crossing cycle."),XSt),Aa),Bs),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,wkt),ode),"Node Label Padding"),"Define padding for node labels that are placed inside of a node."),GSt),q1),M7t),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,RE),ode),"Node Label Placement"),"Hints for where node labels are to be placed; if empty, the node label's position is not modified."),VSt),j6),lo),ji(Js,ct(ot(Qg,1),ae,175,0,[Xg]))))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,xkt),bH),"Port Alignment"),"Defines the default port distribution for a node. May be overridden for each side individually."),ZSt),cs),QS),un(Js)))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,kkt),bH),"Port Alignment (North)"),"Defines how ports on the northern side are placed, overriding the node's general port alignment."),cs),QS),un(Js)))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,Ekt),bH),"Port Alignment (South)"),"Defines how ports on the southern side are placed, overriding the node's general port alignment."),cs),QS),un(Js)))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,Tkt),bH),"Port Alignment (West)"),"Defines how ports on the western side are placed, overriding the node's general port alignment."),cs),QS),un(Js)))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,Ckt),bH),"Port Alignment (East)"),"Defines how ports on the eastern side are placed, overriding the node's general port alignment."),cs),QS),un(Js)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,L4),Nct),"Node Size Constraints"),"What should be taken into account when calculating a node's size. Empty size constraints specify that a node's size is already fixed and should not be changed."),USt),j6),tA),un(Js)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,v6),Nct),"Node Size Options"),"Options modifying the behavior of the size constraints set on a node. Each member of the set specifies something that should be taken into account when calculating node sizes. The empty set corresponds to no further modifications."),KSt),j6),LAt),un(Js)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,w6),Nct),"Node Size Minimum"),"The minimal size to which a node can be reduced."),WSt),q1),Us),un(Js)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,fct),Nct),"Fixed Graph Size"),"By default, the fixed layout provider will enlarge a graph until it is large enough to contain its children. If this option is set, it won't do so."),!1),Aa),Bs),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Skt),hct),"Edge Label Placement"),"Gives a hint on where to put edge labels."),OSt),cs),fAt),un(Xg)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Gq),hct),"Inline Edge Labels"),"If true, an edge label is placed directly on its edge. May only apply to center edge labels. This kind of label placement is only advisable if the label's rendering is such that it is not crossed by its edge and thus stays legible."),!1),Aa),Bs),un(Xg)))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,K5n),"font"),"Font Name"),"Font name used for a label."),T7),Ae),un(Xg)))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,ide),"font"),"Font Size"),"Font size used for a label."),gc),ja),un(Xg)))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,Ikt),Pct),"Port Anchor Offset"),"The offset to the port position where connections shall be attached."),q1),Us),un($2)))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,Akt),Pct),"Port Index"),"The index of a port in the fixed order around a node. The order is assumed as clockwise, starting with the leftmost port on the top side. This option must be set if 'Port Constraints' is set to FIXED_ORDER and no specific positions are given for the ports. Additionally, the option 'Port Side' must be defined in this case."),gc),ja),un($2)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,dkt),Pct),"Port Side"),"The side of a node on which a port is situated. This option must be set if 'Port Constraints' is set to FIXED_SIDE or FIXED_ORDER and no specific positions are given for the ports."),rAt),cs),Xa),un($2)))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,hkt),Pct),"Port Border Offset"),"The offset of ports on the node border. With a positive offset the port is moved outside of the node, while with a negative offset the port is moved towards the inside. An offset of 0 means that the port is placed directly on the node border, i.e. if the port side is north, the port's south border touches the nodes's north border; if the port side is east, the port's west border touches the nodes's east border; if the port side is south, the port's north border touches the node's south border; if the port side is west, the port's east border touches the node's west border."),Do),ca),un($2)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,jE),u8t),"Port Label Placement"),"Decides on a placement method for port labels; if empty, the node label's position is not modified."),eAt),j6),GV),un(Js)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,mkt),u8t),"Port Labels Next to Port"),"Use 'portLabels.placement': NEXT_TO_PORT_OF_POSSIBLE."),!1),Aa),Bs),un(Js)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,ykt),u8t),"Treat Port Labels as Group"),"If this option is true (default), the labels of a port will be treated as a group when it comes to centering them next to their port. If this option is false, only the first label will be centered next to the port, with the others being placed below. This only applies to labels of eastern and western ports and will have no effect if labels are not placed next to their port."),!0),Aa),Bs),un(Js)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,pkt),cde),"Activate Inside Self Loops"),"Whether this node allows to route self loops inside of it instead of around it. If set to true, this will make the node a compound node if it isn't already, and will require the layout algorithm to support compound nodes with hierarchical ports."),!1),Aa),Bs),un(Js)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,bkt),cde),"Inside Self Loop"),"Whether a self loop should be routed inside a node instead of around that node."),!1),Aa),Bs),un(Id)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Lot),"edge"),"Edge Thickness"),"The thickness of an edge. This is a hint on the line width used to draw an edge, possibly requiring more space to be reserved for it."),1),Do),ca),un(Id)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,sde),"edge"),"Edge Type"),"The type of an edge. This is usually used for UML class diagrams, where associations must be handled differently from generalizations."),BSt),cs),wAt),un(Id)))),G9(e,new zx(R9(Jk(Zk(new wm,Vn),"Layered"),'The layer-based method was introduced by Sugiyama, Tagawa and Toda in 1981. It emphasizes the direction of edges by pointing as many edges as possible into the same direction. The nodes are arranged in layers, which are sometimes called "hierarchies", and then reordered such that the number of edge crossings is minimized. Afterwards, concrete coordinates are computed for the nodes and edge bend points.'))),G9(e,new zx(R9(Jk(Zk(new wm,"org.eclipse.elk.orthogonal"),"Orthogonal"),`Orthogonal methods that follow the "topology-shape-metrics" approach by Batini, Nardelli and Tamassia '86. The first phase determines the topology of the drawing by applying a planarization technique, which results in a planar representation of the graph. The orthogonal shape is computed in the second phase, which aims at minimizing the number of edge bends, and is called orthogonalization. The third phase leads to concrete coordinates for nodes and edge bend points by applying a compaction method, thus defining the metrics.`))),G9(e,new zx(R9(Jk(Zk(new wm,ql),"Force"),"Layout algorithms that follow physical analogies by simulating a system of attractive and repulsive forces. The first successful method of this kind was proposed by Eades in 1984."))),G9(e,new zx(R9(Jk(Zk(new wm,"org.eclipse.elk.circle"),"Circle"),"Circular layout algorithms emphasize cycles or biconnected components of a graph by arranging them in circles. This is useful if a drawing is desired where such components are clearly grouped, or where cycles are shown as prominent OPTIONS of the graph."))),G9(e,new zx(R9(Jk(Zk(new wm,D1e),"Tree"),"Specialized layout methods for trees, i.e. acyclic graphs. The regular structure of graphs that have no undirected cycles can be emphasized using an algorithm of this type."))),G9(e,new zx(R9(Jk(Zk(new wm,"org.eclipse.elk.planar"),"Planar"),"Algorithms that require a planar or upward planar graph. Most of these algorithms are theoretically interesting, but not practically usable."))),G9(e,new zx(R9(Jk(Zk(new wm,Td),"Radial"),"Radial layout algorithms usually position the nodes of the graph on concentric circles."))),Due((new $B,e)),Wue((new ttt,e)),cue((new zB,e))};var VS,H3e,LSt,$6,G3e,V3e,MSt,U3e,BV,ISt,UO,jw,DSt,rft,ift,OSt,NSt,PSt,FSt,BSt,RSt,r5,jSt,W3e,WO,sft,RV,$St,i5,zSt,KO,qSt,HSt,GSt,s5,VSt,z2,USt,jV,a5,WSt,vb,KSt,$V,YO,q2,YSt,K3e,XSt,Y3e,X3e,QSt,ZSt,aft,oft,cft,uft,JSt,hl,US,tAt,lft,hft,Ky,eAt,nAt,o5,rAt,z6,zV,fft,C7,Q3e,dft,Z3e,J3e,iAt,t4e,sAt,e4e,q6,aAt,qV,oAt,cAt,H2,n4e,uAt,lAt,hAt;P(Oh,"CoreOptions",684),I(103,22,{3:1,35:1,22:1,103:1},LM);var Q0,jh,kf,c0,Z0,WS=jr(Oh,Qxt,103,Hr,vsn,FJe),r4e;I(272,22,{3:1,35:1,22:1,272:1},zet);var _7,Yy,S7,fAt=jr(Oh,"EdgeLabelPlacement",272,Hr,Qrn,BJe),i4e;I(218,22,{3:1,35:1,22:1,218:1},KR);var A7,XO,H6,gft,pft=jr(Oh,"EdgeRouting",218,Hr,Hin,RJe),s4e;I(312,22,{3:1,35:1,22:1,312:1},rC);var dAt,gAt,pAt,bAt,bft,vAt,wAt=jr(Oh,"EdgeType",312,Hr,ran,jJe),a4e;I(977,1,Ih,$B),l.Qe=function(e){Due(e)};var mAt,yAt,xAt,kAt,o4e,EAt,KS;P(Oh,"FixedLayouterOptions",977),I(978,1,{},BL),l.$e=function(){var e;return e=new PZ,e},l._e=function(e){},P(Oh,"FixedLayouterOptions/FixedFactory",978),I(334,22,{3:1,35:1,22:1,334:1},qet);var Zg,HV,YS,TAt=jr(Oh,"HierarchyHandling",334,Hr,Xrn,$Je),c4e;I(285,22,{3:1,35:1,22:1,285:1},YR);var u0,wb,QO,ZO,u4e=jr(Oh,"LabelSide",285,Hr,qin,zJe),l4e;I(93,22,{3:1,35:1,22:1,93:1},$3);var J0,Ef,$h,Tf,Ul,Cf,zh,l0,_f,lo=jr(Oh,"NodeLabelPlacement",93,Hr,aon,qJe),h4e;I(249,22,{3:1,35:1,22:1,249:1},MM);var CAt,XS,mb,_At,JO,QS=jr(Oh,"PortAlignment",249,Hr,wsn,HJe),f4e;I(98,22,{3:1,35:1,22:1,98:1},iC);var G2,Vc,h0,L7,H1,yb,SAt=jr(Oh,"PortConstraints",98,Hr,$sn,GJe),d4e;I(273,22,{3:1,35:1,22:1,273:1},sC);var ZS,JS,tg,tN,xb,G6,GV=jr(Oh,"PortLabelPlacement",273,Hr,nan,VJe),g4e;I(61,22,{3:1,35:1,22:1,61:1},IM);var Hn,Nn,vh,wh,Cu,uu,G1,Sf,tl,qu,Uc,el,_u,Su,Af,Wl,Kl,qh,mr,Zo,Bn,Xa=jr(Oh,"PortSide",61,Hr,gsn,KJe),p4e;I(981,1,Ih,zB),l.Qe=function(e){cue(e)};var b4e,v4e,AAt,w4e,m4e;P(Oh,"RandomLayouterOptions",981),I(982,1,{},zZ),l.$e=function(){var e;return e=new HZ,e},l._e=function(e){},P(Oh,"RandomLayouterOptions/RandomFactory",982),I(374,22,{3:1,35:1,22:1,374:1},XR);var Xy,eN,nN,V2,tA=jr(Oh,"SizeConstraint",374,Hr,zin,UJe),y4e;I(259,22,{3:1,35:1,22:1,259:1},z3);var rN,VV,M7,vft,iN,eA,UV,WV,KV,LAt=jr(Oh,"SizeOptions",259,Hr,don,WJe),x4e;I(370,1,{1949:1},Yk),l.b=!1,l.c=0,l.d=-1,l.e=null,l.f=null,l.g=-1,l.j=!1,l.k=!1,l.n=!1,l.o=0,l.q=0,l.r=0,P(Ec,"BasicProgressMonitor",370),I(972,209,E2,BZ),l.Ze=function(e,n){var r,s,o,h,d,w,k,C,M;switch(wr(n,"Box layout",2),o=lM(ye(qe(e,(eq(),z3e)))),h=u(qe(e,$3e),116),r=je(Re(qe(e,TSt))),s=je(Re(qe(e,CSt))),u(qe(e,Jht),311).g){case 0:d=(w=new Pu((!e.a&&(e.a=new he(ns,e,10,11)),e.a)),vn(),Xs(w,new G$t(s)),w),k=G4t(e),C=ye(qe(e,ESt)),(C==null||(On(C),C<=0))&&(C=1.3),M=Z4n(d,o,h,k.a,k.b,r,(On(C),C)),gw(e,M.a,M.b,!1,!0);break;default:Kyn(e,o,h,r)}or(n)},P(Ec,"BoxLayoutProvider",972),I(973,1,Oi,G$t),l.ue=function(e,n){return b2n(this,u(e,33),u(n,33))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},l.a=!1,P(Ec,"BoxLayoutProvider/1",973),I(157,1,{157:1},U$,fWt),l.Ib=function(){return this.c?H5t(this.c):Qp(this.b)},P(Ec,"BoxLayoutProvider/Group",157),I(311,22,{3:1,35:1,22:1,311:1},QR);var MAt,IAt,DAt,wft,OAt=jr(Ec,"BoxLayoutProvider/PackingMode",311,Hr,Gin,YJe),k4e;I(974,1,Oi,RZ),l.ue=function(e,n){return mnn(u(e,157),u(n,157))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(Ec,"BoxLayoutProvider/lambda$0$Type",974),I(975,1,Oi,KF),l.ue=function(e,n){return fnn(u(e,157),u(n,157))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(Ec,"BoxLayoutProvider/lambda$1$Type",975),I(976,1,Oi,jZ),l.ue=function(e,n){return dnn(u(e,157),u(n,157))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(Ec,"BoxLayoutProvider/lambda$2$Type",976),I(1365,1,{831:1},$Z),l.qg=function(e,n){return DR(),!Et(n,160)||kHt((Qx(),u(e,160)),n)},P(Ec,"ElkSpacings/AbstractSpacingsBuilder/lambda$0$Type",1365),I(1366,1,Un,V$t),l.td=function(e){run(this.a,u(e,146))},P(Ec,"ElkSpacings/AbstractSpacingsBuilder/lambda$1$Type",1366),I(1367,1,Un,FZ),l.td=function(e){u(e,94),DR()},P(Ec,"ElkSpacings/AbstractSpacingsBuilder/lambda$2$Type",1367),I(1371,1,Un,U$t),l.td=function(e){Aon(this.a,u(e,94))},P(Ec,"ElkSpacings/AbstractSpacingsBuilder/lambda$3$Type",1371),I(1369,1,ui,cVt),l.Mb=function(e){return Hcn(this.a,this.b,u(e,146))},P(Ec,"ElkSpacings/AbstractSpacingsBuilder/lambda$4$Type",1369),I(1368,1,ui,uVt),l.Mb=function(e){return aQe(this.a,this.b,u(e,831))},P(Ec,"ElkSpacings/AbstractSpacingsBuilder/lambda$5$Type",1368),I(1370,1,Un,lVt),l.td=function(e){aen(this.a,this.b,u(e,146))},P(Ec,"ElkSpacings/AbstractSpacingsBuilder/lambda$6$Type",1370),I(935,1,{},NZ),l.Kb=function(e){return lUt(e)},l.Fb=function(e){return this===e},P(Ec,"ElkUtil/lambda$0$Type",935),I(936,1,Un,hVt),l.td=function(e){wpn(this.a,this.b,u(e,79))},l.a=0,l.b=0,P(Ec,"ElkUtil/lambda$1$Type",936),I(937,1,Un,fVt),l.td=function(e){wKe(this.a,this.b,u(e,202))},l.a=0,l.b=0,P(Ec,"ElkUtil/lambda$2$Type",937),I(938,1,Un,dVt),l.td=function(e){uXe(this.a,this.b,u(e,137))},l.a=0,l.b=0,P(Ec,"ElkUtil/lambda$3$Type",938),I(939,1,Un,W$t),l.td=function(e){ktn(this.a,u(e,469))},P(Ec,"ElkUtil/lambda$4$Type",939),I(342,1,{35:1,342:1},KWe),l.wd=function(e){return BXe(this,u(e,236))},l.Fb=function(e){var n;return Et(e,342)?(n=u(e,342),this.a==n.a):!1},l.Hb=function(){return ps(this.a)},l.Ib=function(){return this.a+" (exclusive)"},l.a=0,P(Ec,"ExclusiveBounds/ExclusiveLowerBound",342),I(1138,209,E2,PZ),l.Ze=function(e,n){var r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce,Se,We,Qe;for(wr(n,"Fixed Layout",1),h=u(qe(e,(ci(),NSt)),218),F=0,H=0,_t=new er((!e.a&&(e.a=new he(ns,e,10,11)),e.a));_t.e!=_t.i.gc();){for(gt=u(dr(_t),33),Qe=u(qe(gt,(bz(),KS)),8),Qe&&(m1(gt,Qe.a,Qe.b),u(qe(gt,yAt),174).Hc((_l(),Xy))&&(V=u(qe(gt,kAt),8),V.a>0&&V.b>0&&gw(gt,V.a,V.b,!0,!0))),F=b.Math.max(F,gt.i+gt.g),H=b.Math.max(H,gt.j+gt.f),C=new er((!gt.n&&(gt.n=new he(qo,gt,1,7)),gt.n));C.e!=C.i.gc();)w=u(dr(C),137),Qe=u(qe(w,KS),8),Qe&&m1(w,Qe.a,Qe.b),F=b.Math.max(F,gt.i+w.i+w.g),H=b.Math.max(H,gt.j+w.j+w.f);for(ce=new er((!gt.c&&(gt.c=new he(fl,gt,9,9)),gt.c));ce.e!=ce.i.gc();)for(Yt=u(dr(ce),118),Qe=u(qe(Yt,KS),8),Qe&&m1(Yt,Qe.a,Qe.b),Se=gt.i+Yt.i,We=gt.j+Yt.j,F=b.Math.max(F,Se+Yt.g),H=b.Math.max(H,We+Yt.f),k=new er((!Yt.n&&(Yt.n=new he(qo,Yt,1,7)),Yt.n));k.e!=k.i.gc();)w=u(dr(k),137),Qe=u(qe(w,KS),8),Qe&&m1(w,Qe.a,Qe.b),F=b.Math.max(F,Se+w.i+w.g),H=b.Math.max(H,We+w.j+w.f);for(o=new ar(lr(G0(gt).a.Kc(),new z));zr(o);)r=u(Lr(o),79),M=Ehe(r),F=b.Math.max(F,M.a),H=b.Math.max(H,M.b);for(s=new ar(lr(fD(gt).a.Kc(),new z));zr(s);)r=u(Lr(s),79),ts(Zd(r))!=e&&(M=Ehe(r),F=b.Math.max(F,M.a),H=b.Math.max(H,M.b))}if(h==(q0(),A7))for(Lt=new er((!e.a&&(e.a=new he(ns,e,10,11)),e.a));Lt.e!=Lt.i.gc();)for(gt=u(dr(Lt),33),s=new ar(lr(G0(gt).a.Kc(),new z));zr(s);)r=u(Lr(s),79),d=pmn(r),d.b==0?bo(r,i5,null):bo(r,i5,d);je(Re(qe(e,(bz(),xAt))))||(Bt=u(qe(e,o4e),116),tt=F+Bt.b+Bt.c,Y=H+Bt.d+Bt.a,gw(e,tt,Y,!0,!0)),or(n)},P(Ec,"FixedLayoutProvider",1138),I(373,134,{3:1,414:1,373:1,94:1,134:1},Wu,$te),l.Jf=function(e){var n,r,s,o,h,d,w,k,C;if(e)try{for(k=py(e,";,;"),h=k,d=0,w=h.length;d<w;++d){if(o=h[d],r=py(o,"\\:"),s=bxt(z8(),r[0]),!s)throw rt(new Pn("Invalid option id: "+r[0]));if(C=gxt(s,r[1]),C==null)throw rt(new Pn("Invalid option value: "+r[1]));C==null?(!this.q&&(this.q=new Cr),Ux(this.q,s)):(!this.q&&(this.q=new Cr),ki(this.q,s,C))}}catch(M){throw M=Wi(M),Et(M,102)?(n=M,rt(new wre(n))):rt(M)}},l.Ib=function(){var e;return e=Br(Pl(pu((this.q?this.q:(vn(),vn(),a0)).vc().Oc(),new Mu),Ym(new LKt,new da,new Ne,new me,ct(ot(ll,1),ae,132,0,[])))),e};var E4e=P(Ec,"IndividualSpacings",373);I(971,1,{},Mu),l.Kb=function(e){return ynn(u(e,42))},P(Ec,"IndividualSpacings/lambda$0$Type",971),I(709,1,{},oYt),l.c=0,P(Ec,"InstancePool",709),I(1275,1,{},qZ),P(Ec,"LoggedGraph",1275),I(396,22,{3:1,35:1,22:1,396:1},ZR);var NAt,Yl,PAt,FAt,T4e=jr(Ec,"LoggedGraph/Type",396,Hr,Vin,XJe),C4e;I(46,1,{20:1,46:1},la),l.Jc=function(e){va(this,e)},l.Fb=function(e){var n,r,s;return Et(e,46)?(r=u(e,46),n=this.a==null?r.a==null:yi(this.a,r.a),s=this.b==null?r.b==null:yi(this.b,r.b),n&&s):!1},l.Hb=function(){var e,n,r,s,o,h;return r=this.a==null?0:Hi(this.a),e=r&ms,n=r&-65536,h=this.b==null?0:Hi(this.b),s=h&ms,o=h&-65536,e^o>>16&ms|n^s<<16},l.Kc=function(){return new K$t(this)},l.Ib=function(){return this.a==null&&this.b==null?"pair(null,null)":this.a==null?"pair(null,"+$o(this.b)+")":this.b==null?"pair("+$o(this.a)+",null)":"pair("+$o(this.a)+","+$o(this.b)+")"},P(Ec,"Pair",46),I(983,1,ra,K$t),l.Nb=function(e){pa(this,e)},l.Ob=function(){return!this.c&&(!this.b&&this.a.a!=null||this.a.b!=null)},l.Pb=function(){if(!this.c&&!this.b&&this.a.a!=null)return this.b=!0,this.a.a;if(!this.c&&this.a.b!=null)return this.c=!0,this.a.b;throw rt(new lc)},l.Qb=function(){throw this.c&&this.a.b!=null?this.a.b=null:this.b&&this.a.a!=null&&(this.a.a=null),rt(new Iu)},l.b=!1,l.c=!1,P(Ec,"Pair/1",983),I(448,1,{448:1},TXt),l.Fb=function(e){return Pc(this.a,u(e,448).a)&&Pc(this.c,u(e,448).c)&&Pc(this.d,u(e,448).d)&&Pc(this.b,u(e,448).b)},l.Hb=function(){return vz(ct(ot(Xn,1),Ie,1,5,[this.a,this.c,this.d,this.b]))},l.Ib=function(){return"("+this.a+Ka+this.c+Ka+this.d+Ka+this.b+")"},P(Ec,"Quadruple",448),I(1126,209,E2,HZ),l.Ze=function(e,n){var r,s,o,h,d;if(wr(n,"Random Layout",1),(!e.a&&(e.a=new he(ns,e,10,11)),e.a).i==0){or(n);return}h=u(qe(e,(y3t(),w4e)),19),h&&h.a!=0?o=new T$(h.a):o=new zit,r=lM(ye(qe(e,b4e))),d=lM(ye(qe(e,m4e))),s=u(qe(e,v4e),116),L4n(e,o,r,d,s),or(n)},P(Ec,"RandomLayoutProvider",1126);var _4e;I(553,1,{}),l.qf=function(){return new $e(this.f.i,this.f.j)},l.We=function(e){return XXt(e,(ci(),hl))?qe(this.f,S4e):qe(this.f,e)},l.rf=function(){return new $e(this.f.g,this.f.f)},l.sf=function(){return this.g},l.Xe=function(e){return r2(this.f,e)},l.tf=function(e){yu(this.f,e.a),xu(this.f,e.b)},l.uf=function(e){Qv(this.f,e.a),Xv(this.f,e.b)},l.vf=function(e){this.g=e},l.g=0;var S4e;P(U_,"ElkGraphAdapters/AbstractElkGraphElementAdapter",553),I(554,1,{839:1},aR),l.wf=function(){var e,n;if(!this.b)for(this.b=y$(Zj(this.a).i),n=new er(Zj(this.a));n.e!=n.i.gc();)e=u(dr(n),137),ue(this.b,new net(e));return this.b},l.b=null,P(U_,"ElkGraphAdapters/ElkEdgeAdapter",554),I(301,553,{},Sm),l.xf=function(){return Tse(this)},l.a=null,P(U_,"ElkGraphAdapters/ElkGraphAdapter",301),I(630,553,{181:1},net),P(U_,"ElkGraphAdapters/ElkLabelAdapter",630),I(629,553,{680:1},rnt),l.wf=function(){return Ifn(this)},l.Af=function(){var e;return e=u(qe(this.f,(ci(),KO)),142),!e&&(e=new M9),e},l.Cf=function(){return Dfn(this)},l.Ef=function(e){var n;n=new wnt(e),bo(this.f,(ci(),KO),n)},l.Ff=function(e){bo(this.f,(ci(),q2),new pvt(e))},l.yf=function(){return this.d},l.zf=function(){var e,n;if(!this.a)for(this.a=new le,n=new ar(lr(fD(u(this.f,33)).a.Kc(),new z));zr(n);)e=u(Lr(n),79),ue(this.a,new aR(e));return this.a},l.Bf=function(){var e,n;if(!this.c)for(this.c=new le,n=new ar(lr(G0(u(this.f,33)).a.Kc(),new z));zr(n);)e=u(Lr(n),79),ue(this.c,new aR(e));return this.c},l.Df=function(){return i$(u(this.f,33)).i!=0||je(Re(u(this.f,33).We((ci(),WO))))},l.Gf=function(){kan(this,(Im(),_4e))},l.a=null,l.b=null,l.c=null,l.d=null,l.e=null,P(U_,"ElkGraphAdapters/ElkNodeAdapter",629),I(1266,553,{838:1},Ezt),l.wf=function(){return $fn(this)},l.zf=function(){var e,n;if(!this.a)for(this.a=Hd(u(this.f,118).xg().i),n=new er(u(this.f,118).xg());n.e!=n.i.gc();)e=u(dr(n),79),ue(this.a,new aR(e));return this.a},l.Bf=function(){var e,n;if(!this.c)for(this.c=Hd(u(this.f,118).yg().i),n=new er(u(this.f,118).yg());n.e!=n.i.gc();)e=u(dr(n),79),ue(this.c,new aR(e));return this.c},l.Hf=function(){return u(u(this.f,118).We((ci(),o5)),61)},l.If=function(){var e,n,r,s,o,h,d,w;for(s=k1(u(this.f,118)),r=new er(u(this.f,118).yg());r.e!=r.i.gc();)for(e=u(dr(r),79),w=new er((!e.c&&(e.c=new Cn(br,e,5,8)),e.c));w.e!=w.i.gc();){if(d=u(dr(w),82),Zm(Mo(d),s))return!0;if(Mo(d)==s&&je(Re(qe(e,(ci(),sft)))))return!0}for(n=new er(u(this.f,118).xg());n.e!=n.i.gc();)for(e=u(dr(n),79),h=new er((!e.b&&(e.b=new Cn(br,e,4,7)),e.b));h.e!=h.i.gc();)if(o=u(dr(h),82),Zm(Mo(o),s))return!0;return!1},l.a=null,l.b=null,l.c=null,P(U_,"ElkGraphAdapters/ElkPortAdapter",1266),I(1267,1,Oi,GZ),l.ue=function(e,n){return cwn(u(e,118),u(n,118))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(U_,"ElkGraphAdapters/PortComparator",1267);var kb=Yi(dh,"EObject"),I7=Yi(O4,hde),Hh=Yi(O4,fde),sN=Yi(O4,dde),aN=Yi(O4,"ElkShape"),br=Yi(O4,gde),Ws=Yi(O4,l8t),Zi=Yi(O4,pde),oN=Yi(dh,bde),nA=Yi(dh,"EFactory"),A4e,mft=Yi(dh,vde),r1=Yi(dh,"EPackage"),ta,L4e,M4e,BAt,YV,I4e,RAt,jAt,$At,Eb,D4e,O4e,qo=Yi(O4,h8t),ns=Yi(O4,f8t),fl=Yi(O4,d8t);I(90,1,wde),l.Jg=function(){return this.Kg(),null},l.Kg=function(){return null},l.Lg=function(){return this.Kg(),!1},l.Mg=function(){return!1},l.Ng=function(e){mi(this,e)},P(k6,"BasicNotifierImpl",90),I(97,90,kde),l.nh=function(){return ml(this)},l.Og=function(e,n){return e},l.Pg=function(){throw rt(new Or)},l.Qg=function(e){var n;return n=no(u(yn(this.Tg(),this.Vg()),18)),this.eh().ih(this,n.n,n.f,e)},l.Rg=function(e,n){throw rt(new Or)},l.Sg=function(e,n,r){return zl(this,e,n,r)},l.Tg=function(){var e;return this.Pg()&&(e=this.Pg().ck(),e)?e:this.zh()},l.Ug=function(){return Gst(this)},l.Vg=function(){throw rt(new Or)},l.Wg=function(){var e,n;return n=this.ph().dk(),!n&&this.Pg().ik(n=(V9(),e=Dwt(pd(this.Tg())),e==null?Sft:new NM(this,e))),n},l.Xg=function(e,n){return e},l.Yg=function(e){var n;return n=e.Gj(),n?e.aj():Vi(this.Tg(),e)},l.Zg=function(){var e;return e=this.Pg(),e?e.fk():null},l.$g=function(){return this.Pg()?this.Pg().ck():null},l._g=function(e,n,r){return jz(this,e,n,r)},l.ah=function(e){return I8(this,e)},l.bh=function(e,n){return Prt(this,e,n)},l.dh=function(){var e;return e=this.Pg(),!!e&&e.gk()},l.eh=function(){throw rt(new Or)},l.fh=function(){return Dz(this)},l.gh=function(e,n,r,s){return e6(this,e,n,s)},l.hh=function(e,n,r){var s;return s=u(yn(this.Tg(),n),66),s.Nj().Qj(this,this.yh(),n-this.Ah(),e,r)},l.ih=function(e,n,r,s){return c$(this,e,n,s)},l.jh=function(e,n,r){var s;return s=u(yn(this.Tg(),n),66),s.Nj().Rj(this,this.yh(),n-this.Ah(),e,r)},l.kh=function(){return!!this.Pg()&&!!this.Pg().ek()},l.lh=function(e){return est(this,e)},l.mh=function(e){return dQt(this,e)},l.oh=function(e){return Rle(this,e)},l.ph=function(){throw rt(new Or)},l.qh=function(){return this.Pg()?this.Pg().ek():null},l.rh=function(){return Dz(this)},l.sh=function(e,n){jst(this,e,n)},l.th=function(e){this.ph().hk(e)},l.uh=function(e){this.ph().kk(e)},l.vh=function(e){this.ph().jk(e)},l.wh=function(e,n){var r,s,o,h;return h=this.Zg(),h&&e&&(n=Ba(h.Vk(),this,n),h.Zk(this)),s=this.eh(),s&&(aat(this,this.eh(),this.Vg()).Bb&Ya?(o=s.fh(),o&&(e?!h&&o.Zk(this):o.Yk(this))):(n=(r=this.Vg(),r>=0?this.Qg(n):this.eh().ih(this,-1-r,null,n)),n=this.Sg(null,-1,n))),this.uh(e),n},l.xh=function(e){var n,r,s,o,h,d,w,k;if(r=this.Tg(),h=Vi(r,e),n=this.Ah(),h>=n)return u(e,66).Nj().Uj(this,this.yh(),h-n);if(h<=-1)if(d=E4((Ru(),ma),r,e),d){if(to(),u(d,66).Oj()||(d=qx(Eo(ma,d))),o=(s=this.Yg(d),u(s>=0?this._g(s,!0,!0):lw(this,d,!0),153)),k=d.Zj(),k>1||k==-1)return u(u(o,215).hl(e,!1),76)}else throw rt(new Pn(ab+e.ne()+Fct));else if(e.$j())return s=this.Yg(e),u(s>=0?this._g(s,!1,!0):lw(this,e,!1),76);return w=new OVt(this,e),w},l.yh=function(){return Omt(this)},l.zh=function(){return(jp(),Ln).S},l.Ah=function(){return Zn(this.zh())},l.Bh=function(e){Nst(this,e)},l.Ib=function(){return bf(this)},P(Mn,"BasicEObjectImpl",97);var N4e;I(114,97,{105:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1}),l.Ch=function(e){var n;return n=Nmt(this),n[e]},l.Dh=function(e,n){var r;r=Nmt(this),Ji(r,e,n)},l.Eh=function(e){var n;n=Nmt(this),Ji(n,e,null)},l.Jg=function(){return u(In(this,4),126)},l.Kg=function(){throw rt(new Or)},l.Lg=function(){return(this.Db&4)!=0},l.Pg=function(){throw rt(new Or)},l.Fh=function(e){t6(this,2,e)},l.Rg=function(e,n){this.Db=n<<16|this.Db&255,this.Fh(e)},l.Tg=function(){return bu(this)},l.Vg=function(){return this.Db>>16},l.Wg=function(){var e,n;return V9(),n=Dwt(pd((e=u(In(this,16),26),e||this.zh()))),n==null?Sft:new NM(this,n)},l.Mg=function(){return(this.Db&1)==0},l.Zg=function(){return u(In(this,128),1935)},l.$g=function(){return u(In(this,16),26)},l.dh=function(){return(this.Db&32)!=0},l.eh=function(){return u(In(this,2),49)},l.kh=function(){return(this.Db&64)!=0},l.ph=function(){throw rt(new Or)},l.qh=function(){return u(In(this,64),281)},l.th=function(e){t6(this,16,e)},l.uh=function(e){t6(this,128,e)},l.vh=function(e){t6(this,64,e)},l.yh=function(){return iu(this)},l.Db=0,P(Mn,"MinimalEObjectImpl",114),I(115,114,{105:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1}),l.Fh=function(e){this.Cb=e},l.eh=function(){return this.Cb},P(Mn,"MinimalEObjectImpl/Container",115),I(1985,115,{105:1,413:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1}),l._g=function(e,n,r){return V3t(this,e,n,r)},l.jh=function(e,n,r){return O4t(this,e,n,r)},l.lh=function(e){return Gwt(this,e)},l.sh=function(e,n){Myt(this,e,n)},l.zh=function(){return Zc(),O4e},l.Bh=function(e){myt(this,e)},l.Ve=function(){return Vie(this)},l.We=function(e){return qe(this,e)},l.Xe=function(e){return r2(this,e)},l.Ye=function(e,n){return bo(this,e,n)},P(_2,"EMapPropertyHolderImpl",1985),I(567,115,{105:1,469:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},vp),l._g=function(e,n,r){switch(e){case 0:return this.a;case 1:return this.b}return jz(this,e,n,r)},l.lh=function(e){switch(e){case 0:return this.a!=0;case 1:return this.b!=0}return est(this,e)},l.sh=function(e,n){switch(e){case 0:W$(this,Xt(ye(n)));return;case 1:K$(this,Xt(ye(n)));return}jst(this,e,n)},l.zh=function(){return Zc(),L4e},l.Bh=function(e){switch(e){case 0:W$(this,0);return;case 1:K$(this,0);return}Nst(this,e)},l.Ib=function(){var e;return this.Db&64?bf(this):(e=new Th(bf(this)),e.a+=" (x: ",R3(e,this.a),e.a+=", y: ",R3(e,this.b),e.a+=")",e.a)},l.a=0,l.b=0,P(_2,"ElkBendPointImpl",567),I(723,1985,{105:1,413:1,160:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1}),l._g=function(e,n,r){return Yyt(this,e,n,r)},l.hh=function(e,n,r){return Ast(this,e,n,r)},l.jh=function(e,n,r){return fit(this,e,n,r)},l.lh=function(e){return hyt(this,e)},l.sh=function(e,n){l4t(this,e,n)},l.zh=function(){return Zc(),I4e},l.Bh=function(e){Vyt(this,e)},l.zg=function(){return this.k},l.Ag=function(){return Zj(this)},l.Ib=function(){return jit(this)},l.k=null,P(_2,"ElkGraphElementImpl",723),I(724,723,{105:1,413:1,160:1,470:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1}),l._g=function(e,n,r){return s3t(this,e,n,r)},l.lh=function(e){return f3t(this,e)},l.sh=function(e,n){h4t(this,e,n)},l.zh=function(){return Zc(),D4e},l.Bh=function(e){v3t(this,e)},l.Bg=function(){return this.f},l.Cg=function(){return this.g},l.Dg=function(){return this.i},l.Eg=function(){return this.j},l.Fg=function(e,n){sj(this,e,n)},l.Gg=function(e,n){m1(this,e,n)},l.Hg=function(e){yu(this,e)},l.Ig=function(e){xu(this,e)},l.Ib=function(){return Ost(this)},l.f=0,l.g=0,l.i=0,l.j=0,P(_2,"ElkShapeImpl",724),I(725,724,{105:1,413:1,82:1,160:1,470:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1}),l._g=function(e,n,r){return j3t(this,e,n,r)},l.hh=function(e,n,r){return i4t(this,e,n,r)},l.jh=function(e,n,r){return s4t(this,e,n,r)},l.lh=function(e){return Ayt(this,e)},l.sh=function(e,n){g5t(this,e,n)},l.zh=function(){return Zc(),M4e},l.Bh=function(e){I3t(this,e)},l.xg=function(){return!this.d&&(this.d=new Cn(Ws,this,8,5)),this.d},l.yg=function(){return!this.e&&(this.e=new Cn(Ws,this,7,4)),this.e},P(_2,"ElkConnectableShapeImpl",725),I(352,723,{105:1,413:1,79:1,160:1,352:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},fv),l.Qg=function(e){return t4t(this,e)},l._g=function(e,n,r){switch(e){case 3:return rI(this);case 4:return!this.b&&(this.b=new Cn(br,this,4,7)),this.b;case 5:return!this.c&&(this.c=new Cn(br,this,5,8)),this.c;case 6:return!this.a&&(this.a=new he(Zi,this,6,6)),this.a;case 7:return Fn(),!this.b&&(this.b=new Cn(br,this,4,7)),!(this.b.i<=1&&(!this.c&&(this.c=new Cn(br,this,5,8)),this.c.i<=1));case 8:return Fn(),!!g_(this);case 9:return Fn(),!!uw(this);case 10:return Fn(),!this.b&&(this.b=new Cn(br,this,4,7)),this.b.i!=0&&(!this.c&&(this.c=new Cn(br,this,5,8)),this.c.i!=0)}return Yyt(this,e,n,r)},l.hh=function(e,n,r){var s;switch(n){case 3:return this.Cb&&(r=(s=this.Db>>16,s>=0?t4t(this,r):this.Cb.ih(this,-1-s,null,r))),W2t(this,u(e,33),r);case 4:return!this.b&&(this.b=new Cn(br,this,4,7)),Qc(this.b,e,r);case 5:return!this.c&&(this.c=new Cn(br,this,5,8)),Qc(this.c,e,r);case 6:return!this.a&&(this.a=new he(Zi,this,6,6)),Qc(this.a,e,r)}return Ast(this,e,n,r)},l.jh=function(e,n,r){switch(n){case 3:return W2t(this,null,r);case 4:return!this.b&&(this.b=new Cn(br,this,4,7)),Ba(this.b,e,r);case 5:return!this.c&&(this.c=new Cn(br,this,5,8)),Ba(this.c,e,r);case 6:return!this.a&&(this.a=new he(Zi,this,6,6)),Ba(this.a,e,r)}return fit(this,e,n,r)},l.lh=function(e){switch(e){case 3:return!!rI(this);case 4:return!!this.b&&this.b.i!=0;case 5:return!!this.c&&this.c.i!=0;case 6:return!!this.a&&this.a.i!=0;case 7:return!this.b&&(this.b=new Cn(br,this,4,7)),!(this.b.i<=1&&(!this.c&&(this.c=new Cn(br,this,5,8)),this.c.i<=1));case 8:return g_(this);case 9:return uw(this);case 10:return!this.b&&(this.b=new Cn(br,this,4,7)),this.b.i!=0&&(!this.c&&(this.c=new Cn(br,this,5,8)),this.c.i!=0)}return hyt(this,e)},l.sh=function(e,n){switch(e){case 3:Xst(this,u(n,33));return;case 4:!this.b&&(this.b=new Cn(br,this,4,7)),xr(this.b),!this.b&&(this.b=new Cn(br,this,4,7)),rs(this.b,u(n,14));return;case 5:!this.c&&(this.c=new Cn(br,this,5,8)),xr(this.c),!this.c&&(this.c=new Cn(br,this,5,8)),rs(this.c,u(n,14));return;case 6:!this.a&&(this.a=new he(Zi,this,6,6)),xr(this.a),!this.a&&(this.a=new he(Zi,this,6,6)),rs(this.a,u(n,14));return}l4t(this,e,n)},l.zh=function(){return Zc(),BAt},l.Bh=function(e){switch(e){case 3:Xst(this,null);return;case 4:!this.b&&(this.b=new Cn(br,this,4,7)),xr(this.b);return;case 5:!this.c&&(this.c=new Cn(br,this,5,8)),xr(this.c);return;case 6:!this.a&&(this.a=new he(Zi,this,6,6)),xr(this.a);return}Vyt(this,e)},l.Ib=function(){return Ele(this)},P(_2,"ElkEdgeImpl",352),I(439,1985,{105:1,413:1,202:1,439:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},rd),l.Qg=function(e){return X3t(this,e)},l._g=function(e,n,r){switch(e){case 1:return this.j;case 2:return this.k;case 3:return this.b;case 4:return this.c;case 5:return!this.a&&(this.a=new Ss(Hh,this,5)),this.a;case 6:return lQt(this);case 7:return n?ast(this):this.i;case 8:return n?sst(this):this.f;case 9:return!this.g&&(this.g=new Cn(Zi,this,9,10)),this.g;case 10:return!this.e&&(this.e=new Cn(Zi,this,10,9)),this.e;case 11:return this.d}return V3t(this,e,n,r)},l.hh=function(e,n,r){var s,o,h;switch(n){case 6:return this.Cb&&(r=(o=this.Db>>16,o>=0?X3t(this,r):this.Cb.ih(this,-1-o,null,r))),K2t(this,u(e,79),r);case 9:return!this.g&&(this.g=new Cn(Zi,this,9,10)),Qc(this.g,e,r);case 10:return!this.e&&(this.e=new Cn(Zi,this,10,9)),Qc(this.e,e,r)}return h=u(yn((s=u(In(this,16),26),s||(Zc(),YV)),n),66),h.Nj().Qj(this,iu(this),n-Zn((Zc(),YV)),e,r)},l.jh=function(e,n,r){switch(n){case 5:return!this.a&&(this.a=new Ss(Hh,this,5)),Ba(this.a,e,r);case 6:return K2t(this,null,r);case 9:return!this.g&&(this.g=new Cn(Zi,this,9,10)),Ba(this.g,e,r);case 10:return!this.e&&(this.e=new Cn(Zi,this,10,9)),Ba(this.e,e,r)}return O4t(this,e,n,r)},l.lh=function(e){switch(e){case 1:return this.j!=0;case 2:return this.k!=0;case 3:return this.b!=0;case 4:return this.c!=0;case 5:return!!this.a&&this.a.i!=0;case 6:return!!lQt(this);case 7:return!!this.i;case 8:return!!this.f;case 9:return!!this.g&&this.g.i!=0;case 10:return!!this.e&&this.e.i!=0;case 11:return this.d!=null}return Gwt(this,e)},l.sh=function(e,n){switch(e){case 1:B8(this,Xt(ye(n)));return;case 2:j8(this,Xt(ye(n)));return;case 3:F8(this,Xt(ye(n)));return;case 4:R8(this,Xt(ye(n)));return;case 5:!this.a&&(this.a=new Ss(Hh,this,5)),xr(this.a),!this.a&&(this.a=new Ss(Hh,this,5)),rs(this.a,u(n,14));return;case 6:Tce(this,u(n,79));return;case 7:J$(this,u(n,82));return;case 8:Z$(this,u(n,82));return;case 9:!this.g&&(this.g=new Cn(Zi,this,9,10)),xr(this.g),!this.g&&(this.g=new Cn(Zi,this,9,10)),rs(this.g,u(n,14));return;case 10:!this.e&&(this.e=new Cn(Zi,this,10,9)),xr(this.e),!this.e&&(this.e=new Cn(Zi,this,10,9)),rs(this.e,u(n,14));return;case 11:nyt(this,Br(n));return}Myt(this,e,n)},l.zh=function(){return Zc(),YV},l.Bh=function(e){switch(e){case 1:B8(this,0);return;case 2:j8(this,0);return;case 3:F8(this,0);return;case 4:R8(this,0);return;case 5:!this.a&&(this.a=new Ss(Hh,this,5)),xr(this.a);return;case 6:Tce(this,null);return;case 7:J$(this,null);return;case 8:Z$(this,null);return;case 9:!this.g&&(this.g=new Cn(Zi,this,9,10)),xr(this.g);return;case 10:!this.e&&(this.e=new Cn(Zi,this,10,9)),xr(this.e);return;case 11:nyt(this,null);return}myt(this,e)},l.Ib=function(){return qoe(this)},l.b=0,l.c=0,l.d=null,l.j=0,l.k=0,P(_2,"ElkEdgeSectionImpl",439),I(150,115,{105:1,92:1,90:1,147:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1}),l._g=function(e,n,r){var s;return e==0?(!this.Ab&&(this.Ab=new he(Zr,this,0,3)),this.Ab):oh(this,e-Zn(this.zh()),yn((s=u(In(this,16),26),s||this.zh()),e),n,r)},l.hh=function(e,n,r){var s,o;return n==0?(!this.Ab&&(this.Ab=new he(Zr,this,0,3)),Qc(this.Ab,e,r)):(o=u(yn((s=u(In(this,16),26),s||this.zh()),n),66),o.Nj().Qj(this,iu(this),n-Zn(this.zh()),e,r))},l.jh=function(e,n,r){var s,o;return n==0?(!this.Ab&&(this.Ab=new he(Zr,this,0,3)),Ba(this.Ab,e,r)):(o=u(yn((s=u(In(this,16),26),s||this.zh()),n),66),o.Nj().Rj(this,iu(this),n-Zn(this.zh()),e,r))},l.lh=function(e){var n;return e==0?!!this.Ab&&this.Ab.i!=0:sh(this,e-Zn(this.zh()),yn((n=u(In(this,16),26),n||this.zh()),e))},l.oh=function(e){return kxt(this,e)},l.sh=function(e,n){var r;switch(e){case 0:!this.Ab&&(this.Ab=new he(Zr,this,0,3)),xr(this.Ab),!this.Ab&&(this.Ab=new he(Zr,this,0,3)),rs(this.Ab,u(n,14));return}fh(this,e-Zn(this.zh()),yn((r=u(In(this,16),26),r||this.zh()),e),n)},l.uh=function(e){t6(this,128,e)},l.zh=function(){return dn(),Z4e},l.Bh=function(e){var n;switch(e){case 0:!this.Ab&&(this.Ab=new he(Zr,this,0,3)),xr(this.Ab);return}lh(this,e-Zn(this.zh()),yn((n=u(In(this,16),26),n||this.zh()),e))},l.Gh=function(){this.Bb|=1},l.Hh=function(e){return m_(this,e)},l.Bb=0,P(Mn,"EModelElementImpl",150),I(704,150,{105:1,92:1,90:1,471:1,147:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1},qB),l.Ih=function(e,n){return Jle(this,e,n)},l.Jh=function(e){var n,r,s,o,h;if(this.a!=Fl(e)||e.Bb&256)throw rt(new Pn(Rct+e.zb+kw));for(s=So(e);Lc(s.a).i!=0;){if(r=u(ED(s,0,(n=u(St(Lc(s.a),0),87),h=n.c,Et(h,88)?u(h,26):(dn(),Wh))),26),cw(r))return o=Fl(r).Nh().Jh(r),u(o,49).th(e),o;s=So(r)}return(e.D!=null?e.D:e.B)=="java.util.Map$Entry"?new KKt(e):new Nvt(e)},l.Kh=function(e,n){return pw(this,e,n)},l._g=function(e,n,r){var s;switch(e){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),this.Ab;case 1:return this.a}return oh(this,e-Zn((dn(),Sb)),yn((s=u(In(this,16),26),s||Sb),e),n,r)},l.hh=function(e,n,r){var s,o;switch(n){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),Qc(this.Ab,e,r);case 1:return this.a&&(r=u(this.a,49).ih(this,4,r1,r)),Hyt(this,u(e,235),r)}return o=u(yn((s=u(In(this,16),26),s||(dn(),Sb)),n),66),o.Nj().Qj(this,iu(this),n-Zn((dn(),Sb)),e,r)},l.jh=function(e,n,r){var s,o;switch(n){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),Ba(this.Ab,e,r);case 1:return Hyt(this,null,r)}return o=u(yn((s=u(In(this,16),26),s||(dn(),Sb)),n),66),o.Nj().Rj(this,iu(this),n-Zn((dn(),Sb)),e,r)},l.lh=function(e){var n;switch(e){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return!!this.a}return sh(this,e-Zn((dn(),Sb)),yn((n=u(In(this,16),26),n||Sb),e))},l.sh=function(e,n){var r;switch(e){case 0:!this.Ab&&(this.Ab=new he(Zr,this,0,3)),xr(this.Ab),!this.Ab&&(this.Ab=new he(Zr,this,0,3)),rs(this.Ab,u(n,14));return;case 1:Tae(this,u(n,235));return}fh(this,e-Zn((dn(),Sb)),yn((r=u(In(this,16),26),r||Sb),e),n)},l.zh=function(){return dn(),Sb},l.Bh=function(e){var n;switch(e){case 0:!this.Ab&&(this.Ab=new he(Zr,this,0,3)),xr(this.Ab);return;case 1:Tae(this,null);return}lh(this,e-Zn((dn(),Sb)),yn((n=u(In(this,16),26),n||Sb),e))};var rA,zAt,P4e;P(Mn,"EFactoryImpl",704),I(wf,704,{105:1,2014:1,92:1,90:1,471:1,147:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1},J5),l.Ih=function(e,n){switch(e.yj()){case 12:return u(n,146).tg();case 13:return $o(n);default:throw rt(new Pn(HE+e.ne()+kw))}},l.Jh=function(e){var n,r,s,o,h,d,w,k;switch(e.G==-1&&(e.G=(n=Fl(e),n?Fg(n.Mh(),e):-1)),e.G){case 4:return h=new YT,h;case 6:return d=new Bpt,d;case 7:return w=new Rpt,w;case 8:return s=new fv,s;case 9:return r=new vp,r;case 10:return o=new rd,o;case 11:return k=new YF,k;default:throw rt(new Pn(Rct+e.zb+kw))}},l.Kh=function(e,n){switch(e.yj()){case 13:case 12:return null;default:throw rt(new Pn(HE+e.ne()+kw))}},P(_2,"ElkGraphFactoryImpl",wf),I(438,150,{105:1,92:1,90:1,147:1,191:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1}),l.Wg=function(){var e,n;return n=(e=u(In(this,16),26),Dwt(pd(e||this.zh()))),n==null?(V9(),V9(),Sft):new pWt(this,n)},l._g=function(e,n,r){var s;switch(e){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),this.Ab;case 1:return this.ne()}return oh(this,e-Zn(this.zh()),yn((s=u(In(this,16),26),s||this.zh()),e),n,r)},l.lh=function(e){var n;switch(e){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null}return sh(this,e-Zn(this.zh()),yn((n=u(In(this,16),26),n||this.zh()),e))},l.sh=function(e,n){var r;switch(e){case 0:!this.Ab&&(this.Ab=new he(Zr,this,0,3)),xr(this.Ab),!this.Ab&&(this.Ab=new he(Zr,this,0,3)),rs(this.Ab,u(n,14));return;case 1:this.Lh(Br(n));return}fh(this,e-Zn(this.zh()),yn((r=u(In(this,16),26),r||this.zh()),e),n)},l.zh=function(){return dn(),J4e},l.Bh=function(e){var n;switch(e){case 0:!this.Ab&&(this.Ab=new he(Zr,this,0,3)),xr(this.Ab);return;case 1:this.Lh(null);return}lh(this,e-Zn(this.zh()),yn((n=u(In(this,16),26),n||this.zh()),e))},l.ne=function(){return this.zb},l.Lh=function(e){Xc(this,e)},l.Ib=function(){return XC(this)},l.zb=null,P(Mn,"ENamedElementImpl",438),I(179,438,{105:1,92:1,90:1,147:1,191:1,56:1,235:1,108:1,49:1,97:1,150:1,179:1,114:1,115:1,675:1},YXt),l.Qg=function(e){return Rse(this,e)},l._g=function(e,n,r){var s;switch(e){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),this.Ab;case 1:return this.zb;case 2:return this.yb;case 3:return this.xb;case 4:return this.sb;case 5:return!this.rb&&(this.rb=new qm(this,i1,this)),this.rb;case 6:return!this.vb&&(this.vb=new Ix(r1,this,6,7)),this.vb;case 7:return n?this.Db>>16==7?u(this.Cb,235):null:hQt(this)}return oh(this,e-Zn((dn(),np)),yn((s=u(In(this,16),26),s||np),e),n,r)},l.hh=function(e,n,r){var s,o,h;switch(n){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),Qc(this.Ab,e,r);case 4:return this.sb&&(r=u(this.sb,49).ih(this,1,nA,r)),Wyt(this,u(e,471),r);case 5:return!this.rb&&(this.rb=new qm(this,i1,this)),Qc(this.rb,e,r);case 6:return!this.vb&&(this.vb=new Ix(r1,this,6,7)),Qc(this.vb,e,r);case 7:return this.Cb&&(r=(o=this.Db>>16,o>=0?Rse(this,r):this.Cb.ih(this,-1-o,null,r))),zl(this,e,7,r)}return h=u(yn((s=u(In(this,16),26),s||(dn(),np)),n),66),h.Nj().Qj(this,iu(this),n-Zn((dn(),np)),e,r)},l.jh=function(e,n,r){var s,o;switch(n){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),Ba(this.Ab,e,r);case 4:return Wyt(this,null,r);case 5:return!this.rb&&(this.rb=new qm(this,i1,this)),Ba(this.rb,e,r);case 6:return!this.vb&&(this.vb=new Ix(r1,this,6,7)),Ba(this.vb,e,r);case 7:return zl(this,null,7,r)}return o=u(yn((s=u(In(this,16),26),s||(dn(),np)),n),66),o.Nj().Rj(this,iu(this),n-Zn((dn(),np)),e,r)},l.lh=function(e){var n;switch(e){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.yb!=null;case 3:return this.xb!=null;case 4:return!!this.sb;case 5:return!!this.rb&&this.rb.i!=0;case 6:return!!this.vb&&this.vb.i!=0;case 7:return!!hQt(this)}return sh(this,e-Zn((dn(),np)),yn((n=u(In(this,16),26),n||np),e))},l.oh=function(e){var n;return n=M2n(this,e),n||kxt(this,e)},l.sh=function(e,n){var r;switch(e){case 0:!this.Ab&&(this.Ab=new he(Zr,this,0,3)),xr(this.Ab),!this.Ab&&(this.Ab=new he(Zr,this,0,3)),rs(this.Ab,u(n,14));return;case 1:Xc(this,Br(n));return;case 2:az(this,Br(n));return;case 3:sz(this,Br(n));return;case 4:Dst(this,u(n,471));return;case 5:!this.rb&&(this.rb=new qm(this,i1,this)),xr(this.rb),!this.rb&&(this.rb=new qm(this,i1,this)),rs(this.rb,u(n,14));return;case 6:!this.vb&&(this.vb=new Ix(r1,this,6,7)),xr(this.vb),!this.vb&&(this.vb=new Ix(r1,this,6,7)),rs(this.vb,u(n,14));return}fh(this,e-Zn((dn(),np)),yn((r=u(In(this,16),26),r||np),e),n)},l.vh=function(e){var n,r;if(e&&this.rb)for(r=new er(this.rb);r.e!=r.i.gc();)n=dr(r),Et(n,351)&&(u(n,351).w=null);t6(this,64,e)},l.zh=function(){return dn(),np},l.Bh=function(e){var n;switch(e){case 0:!this.Ab&&(this.Ab=new he(Zr,this,0,3)),xr(this.Ab);return;case 1:Xc(this,null);return;case 2:az(this,null);return;case 3:sz(this,null);return;case 4:Dst(this,null);return;case 5:!this.rb&&(this.rb=new qm(this,i1,this)),xr(this.rb);return;case 6:!this.vb&&(this.vb=new Ix(r1,this,6,7)),xr(this.vb);return}lh(this,e-Zn((dn(),np)),yn((n=u(In(this,16),26),n||np),e))},l.Gh=function(){mst(this)},l.Mh=function(){return!this.rb&&(this.rb=new qm(this,i1,this)),this.rb},l.Nh=function(){return this.sb},l.Oh=function(){return this.ub},l.Ph=function(){return this.xb},l.Qh=function(){return this.yb},l.Rh=function(e){this.ub=e},l.Ib=function(){var e;return this.Db&64?XC(this):(e=new Th(XC(this)),e.a+=" (nsURI: ",fo(e,this.yb),e.a+=", nsPrefix: ",fo(e,this.xb),e.a+=")",e.a)},l.xb=null,l.yb=null,P(Mn,"EPackageImpl",179),I(555,179,{105:1,2016:1,555:1,92:1,90:1,147:1,191:1,56:1,235:1,108:1,49:1,97:1,150:1,179:1,114:1,115:1,675:1},Qoe),l.q=!1,l.r=!1;var F4e=!1;P(_2,"ElkGraphPackageImpl",555),I(354,724,{105:1,413:1,160:1,137:1,470:1,354:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},YT),l.Qg=function(e){return Q3t(this,e)},l._g=function(e,n,r){switch(e){case 7:return fQt(this);case 8:return this.a}return s3t(this,e,n,r)},l.hh=function(e,n,r){var s;switch(n){case 7:return this.Cb&&(r=(s=this.Db>>16,s>=0?Q3t(this,r):this.Cb.ih(this,-1-s,null,r))),Yvt(this,u(e,160),r)}return Ast(this,e,n,r)},l.jh=function(e,n,r){return n==7?Yvt(this,null,r):fit(this,e,n,r)},l.lh=function(e){switch(e){case 7:return!!fQt(this);case 8:return!hn("",this.a)}return f3t(this,e)},l.sh=function(e,n){switch(e){case 7:A5t(this,u(n,160));return;case 8:Ymt(this,Br(n));return}h4t(this,e,n)},l.zh=function(){return Zc(),RAt},l.Bh=function(e){switch(e){case 7:A5t(this,null);return;case 8:Ymt(this,"");return}v3t(this,e)},l.Ib=function(){return Rae(this)},l.a="",P(_2,"ElkLabelImpl",354),I(239,725,{105:1,413:1,82:1,160:1,33:1,470:1,239:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},Bpt),l.Qg=function(e){return e4t(this,e)},l._g=function(e,n,r){switch(e){case 9:return!this.c&&(this.c=new he(fl,this,9,9)),this.c;case 10:return!this.a&&(this.a=new he(ns,this,10,11)),this.a;case 11:return ts(this);case 12:return!this.b&&(this.b=new he(Ws,this,12,3)),this.b;case 13:return Fn(),!this.a&&(this.a=new he(ns,this,10,11)),this.a.i>0}return j3t(this,e,n,r)},l.hh=function(e,n,r){var s;switch(n){case 9:return!this.c&&(this.c=new he(fl,this,9,9)),Qc(this.c,e,r);case 10:return!this.a&&(this.a=new he(ns,this,10,11)),Qc(this.a,e,r);case 11:return this.Cb&&(r=(s=this.Db>>16,s>=0?e4t(this,r):this.Cb.ih(this,-1-s,null,r))),rvt(this,u(e,33),r);case 12:return!this.b&&(this.b=new he(Ws,this,12,3)),Qc(this.b,e,r)}return i4t(this,e,n,r)},l.jh=function(e,n,r){switch(n){case 9:return!this.c&&(this.c=new he(fl,this,9,9)),Ba(this.c,e,r);case 10:return!this.a&&(this.a=new he(ns,this,10,11)),Ba(this.a,e,r);case 11:return rvt(this,null,r);case 12:return!this.b&&(this.b=new he(Ws,this,12,3)),Ba(this.b,e,r)}return s4t(this,e,n,r)},l.lh=function(e){switch(e){case 9:return!!this.c&&this.c.i!=0;case 10:return!!this.a&&this.a.i!=0;case 11:return!!ts(this);case 12:return!!this.b&&this.b.i!=0;case 13:return!this.a&&(this.a=new he(ns,this,10,11)),this.a.i>0}return Ayt(this,e)},l.sh=function(e,n){switch(e){case 9:!this.c&&(this.c=new he(fl,this,9,9)),xr(this.c),!this.c&&(this.c=new he(fl,this,9,9)),rs(this.c,u(n,14));return;case 10:!this.a&&(this.a=new he(ns,this,10,11)),xr(this.a),!this.a&&(this.a=new he(ns,this,10,11)),rs(this.a,u(n,14));return;case 11:C5t(this,u(n,33));return;case 12:!this.b&&(this.b=new he(Ws,this,12,3)),xr(this.b),!this.b&&(this.b=new he(Ws,this,12,3)),rs(this.b,u(n,14));return}g5t(this,e,n)},l.zh=function(){return Zc(),jAt},l.Bh=function(e){switch(e){case 9:!this.c&&(this.c=new he(fl,this,9,9)),xr(this.c);return;case 10:!this.a&&(this.a=new he(ns,this,10,11)),xr(this.a);return;case 11:C5t(this,null);return;case 12:!this.b&&(this.b=new he(Ws,this,12,3)),xr(this.b);return}I3t(this,e)},l.Ib=function(){return H5t(this)},P(_2,"ElkNodeImpl",239),I(186,725,{105:1,413:1,82:1,160:1,118:1,470:1,186:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},Rpt),l.Qg=function(e){return Z3t(this,e)},l._g=function(e,n,r){return e==9?k1(this):j3t(this,e,n,r)},l.hh=function(e,n,r){var s;switch(n){case 9:return this.Cb&&(r=(s=this.Db>>16,s>=0?Z3t(this,r):this.Cb.ih(this,-1-s,null,r))),Y2t(this,u(e,33),r)}return i4t(this,e,n,r)},l.jh=function(e,n,r){return n==9?Y2t(this,null,r):s4t(this,e,n,r)},l.lh=function(e){return e==9?!!k1(this):Ayt(this,e)},l.sh=function(e,n){switch(e){case 9:T5t(this,u(n,33));return}g5t(this,e,n)},l.zh=function(){return Zc(),$At},l.Bh=function(e){switch(e){case 9:T5t(this,null);return}I3t(this,e)},l.Ib=function(){return Tue(this)},P(_2,"ElkPortImpl",186);var B4e=Yi(Ra,"BasicEMap/Entry");I(1092,115,{105:1,42:1,92:1,90:1,133:1,56:1,108:1,49:1,97:1,114:1,115:1},YF),l.Fb=function(e){return this===e},l.cd=function(){return this.b},l.Hb=function(){return Iv(this)},l.Uh=function(e){Xmt(this,u(e,146))},l._g=function(e,n,r){switch(e){case 0:return this.b;case 1:return this.c}return jz(this,e,n,r)},l.lh=function(e){switch(e){case 0:return!!this.b;case 1:return this.c!=null}return est(this,e)},l.sh=function(e,n){switch(e){case 0:Xmt(this,u(n,146));return;case 1:Jmt(this,n);return}jst(this,e,n)},l.zh=function(){return Zc(),Eb},l.Bh=function(e){switch(e){case 0:Xmt(this,null);return;case 1:Jmt(this,null);return}Nst(this,e)},l.Sh=function(){var e;return this.a==-1&&(e=this.b,this.a=e?Hi(e):0),this.a},l.dd=function(){return this.c},l.Th=function(e){this.a=e},l.ed=function(e){var n;return n=this.c,Jmt(this,e),n},l.Ib=function(){var e;return this.Db&64?bf(this):(e=new _p,Vr(Vr(Vr(e,this.b?this.b.tg():Tu),Pot),dC(this.c)),e.a)},l.a=-1,l.c=null;var $w=P(_2,"ElkPropertyToValueMapEntryImpl",1092);I(984,1,{},XF),P(wa,"JsonAdapter",984),I(210,60,U0,ad),P(wa,"JsonImportException",210),I(857,1,{},jse),P(wa,"JsonImporter",857),I(891,1,{},gVt),P(wa,"JsonImporter/lambda$0$Type",891),I(892,1,{},pVt),P(wa,"JsonImporter/lambda$1$Type",892),I(900,1,{},Y$t),P(wa,"JsonImporter/lambda$10$Type",900),I(902,1,{},bVt),P(wa,"JsonImporter/lambda$11$Type",902),I(903,1,{},vVt),P(wa,"JsonImporter/lambda$12$Type",903),I(909,1,{},LXt),P(wa,"JsonImporter/lambda$13$Type",909),I(908,1,{},AXt),P(wa,"JsonImporter/lambda$14$Type",908),I(904,1,{},wVt),P(wa,"JsonImporter/lambda$15$Type",904),I(905,1,{},mVt),P(wa,"JsonImporter/lambda$16$Type",905),I(906,1,{},yVt),P(wa,"JsonImporter/lambda$17$Type",906),I(907,1,{},xVt),P(wa,"JsonImporter/lambda$18$Type",907),I(912,1,{},X$t),P(wa,"JsonImporter/lambda$19$Type",912),I(893,1,{},Q$t),P(wa,"JsonImporter/lambda$2$Type",893),I(910,1,{},Z$t),P(wa,"JsonImporter/lambda$20$Type",910),I(911,1,{},J$t),P(wa,"JsonImporter/lambda$21$Type",911),I(915,1,{},tzt),P(wa,"JsonImporter/lambda$22$Type",915),I(913,1,{},ezt),P(wa,"JsonImporter/lambda$23$Type",913),I(914,1,{},nzt),P(wa,"JsonImporter/lambda$24$Type",914),I(917,1,{},rzt),P(wa,"JsonImporter/lambda$25$Type",917),I(916,1,{},izt),P(wa,"JsonImporter/lambda$26$Type",916),I(918,1,Un,kVt),l.td=function(e){san(this.b,this.a,Br(e))},P(wa,"JsonImporter/lambda$27$Type",918),I(919,1,Un,EVt),l.td=function(e){aan(this.b,this.a,Br(e))},P(wa,"JsonImporter/lambda$28$Type",919),I(920,1,{},TVt),P(wa,"JsonImporter/lambda$29$Type",920),I(896,1,{},szt),P(wa,"JsonImporter/lambda$3$Type",896),I(921,1,{},CVt),P(wa,"JsonImporter/lambda$30$Type",921),I(922,1,{},azt),P(wa,"JsonImporter/lambda$31$Type",922),I(923,1,{},ozt),P(wa,"JsonImporter/lambda$32$Type",923),I(924,1,{},czt),P(wa,"JsonImporter/lambda$33$Type",924),I(925,1,{},uzt),P(wa,"JsonImporter/lambda$34$Type",925),I(859,1,{},lzt),P(wa,"JsonImporter/lambda$35$Type",859),I(929,1,{},yKt),P(wa,"JsonImporter/lambda$36$Type",929),I(926,1,Un,hzt),l.td=function(e){usn(this.a,u(e,469))},P(wa,"JsonImporter/lambda$37$Type",926),I(927,1,Un,IVt),l.td=function(e){BYe(this.a,this.b,u(e,202))},P(wa,"JsonImporter/lambda$38$Type",927),I(928,1,Un,DVt),l.td=function(e){RYe(this.a,this.b,u(e,202))},P(wa,"JsonImporter/lambda$39$Type",928),I(894,1,{},fzt),P(wa,"JsonImporter/lambda$4$Type",894),I(930,1,Un,dzt),l.td=function(e){lsn(this.a,u(e,8))},P(wa,"JsonImporter/lambda$40$Type",930),I(895,1,{},gzt),P(wa,"JsonImporter/lambda$5$Type",895),I(899,1,{},pzt),P(wa,"JsonImporter/lambda$6$Type",899),I(897,1,{},bzt),P(wa,"JsonImporter/lambda$7$Type",897),I(898,1,{},vzt),P(wa,"JsonImporter/lambda$8$Type",898),I(901,1,{},wzt),P(wa,"JsonImporter/lambda$9$Type",901),I(948,1,Un,mzt),l.td=function(e){Bx(this.a,new Hm(Br(e)))},P(wa,"JsonMetaDataConverter/lambda$0$Type",948),I(949,1,Un,yzt),l.td=function(e){_en(this.a,u(e,237))},P(wa,"JsonMetaDataConverter/lambda$1$Type",949),I(950,1,Un,xzt),l.td=function(e){Ern(this.a,u(e,149))},P(wa,"JsonMetaDataConverter/lambda$2$Type",950),I(951,1,Un,kzt),l.td=function(e){Sen(this.a,u(e,175))},P(wa,"JsonMetaDataConverter/lambda$3$Type",951),I(237,22,{3:1,35:1,22:1,237:1},Sx);var XV,QV,yft,ZV,JV,tU,xft,kft,eU=jr(BD,"GraphFeature",237,Hr,Yan,QJe),R4e;I(13,1,{35:1,146:1},Gi,Os,mn,eo),l.wd=function(e){return FXe(this,u(e,146))},l.Fb=function(e){return XXt(this,e)},l.wg=function(){return De(this)},l.tg=function(){return this.b},l.Hb=function(){return Bg(this.b)},l.Ib=function(){return this.b},P(BD,"Property",13),I(818,1,Oi,bpt),l.ue=function(e,n){return tln(this,u(e,94),u(n,94))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(BD,"PropertyHolderComparator",818),I(695,1,ra,vpt),l.Nb=function(e){pa(this,e)},l.Pb=function(){return lan(this)},l.Qb=function(){pHt()},l.Ob=function(){return!!this.a},P(yH,"ElkGraphUtil/AncestorIterator",695);var qAt=Yi(Ra,"EList");I(67,52,{20:1,28:1,52:1,14:1,15:1,67:1,58:1}),l.Vc=function(e,n){JC(this,e,n)},l.Fc=function(e){return Mr(this,e)},l.Wc=function(e,n){return yyt(this,e,n)},l.Gc=function(e){return rs(this,e)},l.Zh=function(){return new Mx(this)},l.$h=function(){return new PM(this)},l._h=function(e){return _I(this,e)},l.ai=function(){return!0},l.bi=function(e,n){},l.ci=function(){},l.di=function(e,n){Brt(this,e,n)},l.ei=function(e,n,r){},l.fi=function(e,n){},l.gi=function(e,n,r){},l.Fb=function(e){return lue(this,e)},l.Hb=function(){return pyt(this)},l.hi=function(){return!1},l.Kc=function(){return new er(this)},l.Yc=function(){return new Lx(this)},l.Zc=function(e){var n;if(n=this.gc(),e<0||e>n)throw rt(new jm(e,n));return new qnt(this,e)},l.ji=function(e,n){this.ii(e,this.Xc(n))},l.Mc=function(e){return j$(this,e)},l.li=function(e,n){return n},l._c=function(e,n){return u4(this,e,n)},l.Ib=function(){return o3t(this)},l.ni=function(){return!0},l.oi=function(e,n){return Q8(this,n)},P(Ra,"AbstractEList",67),I(63,67,_d,tx,Kv,oyt),l.Vh=function(e,n){return Lst(this,e,n)},l.Wh=function(e){return fse(this,e)},l.Xh=function(e,n){zI(this,e,n)},l.Yh=function(e){uI(this,e)},l.pi=function(e){return Amt(this,e)},l.$b=function(){RC(this)},l.Hc=function(e){return fE(this,e)},l.Xb=function(e){return St(this,e)},l.qi=function(e){var n,r,s;++this.j,r=this.g==null?0:this.g.length,e>r&&(s=this.g,n=r+(r/2|0)+4,n<e&&(n=e),this.g=this.ri(n),s!=null&&Ic(s,0,this.g,0,this.i))},l.Xc=function(e){return Ose(this,e)},l.dc=function(){return this.i==0},l.ii=function(e,n){return qst(this,e,n)},l.ri=function(e){return Pt(Xn,Ie,1,e,5,1)},l.ki=function(e){return this.g[e]},l.$c=function(e){return r6(this,e)},l.mi=function(e,n){return Krt(this,e,n)},l.gc=function(){return this.i},l.Pc=function(){return Jwt(this)},l.Qc=function(e){return m3t(this,e)},l.i=0;var HAt=P(Ra,"BasicEList",63),GAt=Yi(Ra,"TreeIterator");I(694,63,Yct),l.Nb=function(e){pa(this,e)},l.Ob=function(){return this.g==null&&!this.c?Fwt(this):this.g==null||this.i!=0&&u(this.g[this.i-1],47).Ob()},l.Pb=function(){return aq(this)},l.Qb=function(){if(!this.e)throw rt(new Fo("There is no valid object to remove."));this.e.Qb()},l.c=!1,P(Ra,"AbstractTreeIterator",694),I(685,694,Yct,r2t),l.si=function(e){var n;return n=u(e,56).Wg().Kc(),Et(n,279)&&u(n,279).Nk(new UZ),n},P(yH,"ElkGraphUtil/PropertiesSkippingTreeIterator",685),I(952,1,{},UZ),P(yH,"ElkGraphUtil/PropertiesSkippingTreeIterator/1",952);var cN,Eft,uN=P(yH,"ElkReflect",null);I(889,1,Sy,XT),l.vg=function(e){return g$(),Psn(u(e,174))},P(yH,"ElkReflect/lambda$0$Type",889);var Tb;Yi(Ra,"ResourceLocator"),I(1051,1,{}),P(Ra,"DelegatingResourceLocator",1051),I(1052,1051,{}),P("org.eclipse.emf.common","EMFPlugin",1052);var Tft=Yi(s0e,"Adapter"),yxn=Yi(s0e,"Notification");I(1153,1,M8t),l.ti=function(){return this.d},l.ui=function(e){},l.vi=function(e){this.d=e},l.wi=function(e){this.d==e&&(this.d=null)},l.d=null,P(k6,"AdapterImpl",1153),I(1995,67,a0e),l.Vh=function(e,n){return d3t(this,e,n)},l.Wh=function(e){var n,r,s;if(++this.j,e.dc())return!1;for(n=this.Vi(),s=e.Kc();s.Ob();)r=s.Pb(),this.Ii(this.oi(n,r)),++n;return!0},l.Xh=function(e,n){AWt(this,e,n)},l.Yh=function(e){nXt(this,e)},l.Gi=function(){return this.Ji()},l.$b=function(){jM(this,this.Vi(),this.Wi())},l.Hc=function(e){return this.Li(e)},l.Ic=function(e){return this.Mi(e)},l.Hi=function(e,n){this.Si().jm()},l.Ii=function(e){this.Si().jm()},l.Ji=function(){return this.Si()},l.Ki=function(){this.Si().jm()},l.Li=function(e){return this.Si().jm()},l.Mi=function(e){return this.Si().jm()},l.Ni=function(e){return this.Si().jm()},l.Oi=function(e){return this.Si().jm()},l.Pi=function(){return this.Si().jm()},l.Qi=function(e){return this.Si().jm()},l.Ri=function(){return this.Si().jm()},l.Ti=function(e){return this.Si().jm()},l.Ui=function(e,n){return this.Si().jm()},l.Vi=function(){return this.Si().jm()},l.Wi=function(){return this.Si().jm()},l.Xi=function(e){return this.Si().jm()},l.Yi=function(){return this.Si().jm()},l.Fb=function(e){return this.Ni(e)},l.Xb=function(e){return this.li(e,this.Oi(e))},l.Hb=function(){return this.Pi()},l.Xc=function(e){return this.Qi(e)},l.dc=function(){return this.Ri()},l.ii=function(e,n){return M4t(this,e,n)},l.ki=function(e){return this.Oi(e)},l.$c=function(e){return Dj(this,e)},l.Mc=function(e){var n;return n=this.Xc(e),n>=0?(this.$c(n),!0):!1},l.mi=function(e,n){return this.Ui(e,this.oi(e,n))},l.gc=function(){return this.Vi()},l.Pc=function(){return this.Wi()},l.Qc=function(e){return this.Xi(e)},l.Ib=function(){return this.Yi()},P(Ra,"DelegatingEList",1995),I(1996,1995,a0e),l.Vh=function(e,n){return Z5t(this,e,n)},l.Wh=function(e){return this.Vh(this.Vi(),e)},l.Xh=function(e,n){Yoe(this,e,n)},l.Yh=function(e){$oe(this,e)},l.ai=function(){return!this.bj()},l.$b=function(){C_(this)},l.Zi=function(e,n,r,s,o){return new ZXt(this,e,n,r,s,o)},l.$i=function(e){mi(this.Ai(),e)},l._i=function(){return null},l.aj=function(){return-1},l.Ai=function(){return null},l.bj=function(){return!1},l.cj=function(e,n){return n},l.dj=function(e,n){return n},l.ej=function(){return!1},l.fj=function(){return!this.Ri()},l.ii=function(e,n){var r,s;return this.ej()?(s=this.fj(),r=M4t(this,e,n),this.$i(this.Zi(7,de(n),r,e,s)),r):M4t(this,e,n)},l.$c=function(e){var n,r,s,o;return this.ej()?(r=null,s=this.fj(),n=this.Zi(4,o=Dj(this,e),null,e,s),this.bj()&&o?(r=this.dj(o,r),r?(r.Ei(n),r.Fi()):this.$i(n)):r?(r.Ei(n),r.Fi()):this.$i(n),o):(o=Dj(this,e),this.bj()&&o&&(r=this.dj(o,null),r&&r.Fi()),o)},l.mi=function(e,n){return rle(this,e,n)},P(k6,"DelegatingNotifyingListImpl",1996),I(143,1,QD),l.Ei=function(e){return v4t(this,e)},l.Fi=function(){Urt(this)},l.xi=function(){return this.d},l._i=function(){return null},l.gj=function(){return null},l.yi=function(e){return-1},l.zi=function(){return Hce(this)},l.Ai=function(){return null},l.Bi=function(){return O5t(this)},l.Ci=function(){return this.o<0?this.o<-2?-2-this.o-1:-1:this.o},l.hj=function(){return!1},l.Di=function(e){var n,r,s,o,h,d,w,k,C,M,F;switch(this.d){case 1:case 2:switch(o=e.xi(),o){case 1:case 2:if(h=e.Ai(),Gt(h)===Gt(this.Ai())&&this.yi(null)==e.yi(null))return this.g=e.zi(),e.xi()==1&&(this.d=1),!0}case 4:{switch(o=e.xi(),o){case 4:{if(h=e.Ai(),Gt(h)===Gt(this.Ai())&&this.yi(null)==e.yi(null))return C=pxt(this),k=this.o<0?this.o<-2?-2-this.o-1:-1:this.o,d=e.Ci(),this.d=6,F=new Kv(2),k<=d?(Mr(F,this.n),Mr(F,e.Bi()),this.g=ct(ot(Tr,1),Xr,25,15,[this.o=k,d+1])):(Mr(F,e.Bi()),Mr(F,this.n),this.g=ct(ot(Tr,1),Xr,25,15,[this.o=d,k])),this.n=F,C||(this.o=-2-this.o-1),!0;break}}break}case 6:{switch(o=e.xi(),o){case 4:{if(h=e.Ai(),Gt(h)===Gt(this.Ai())&&this.yi(null)==e.yi(null)){for(C=pxt(this),d=e.Ci(),M=u(this.g,48),s=Pt(Tr,Xr,25,M.length+1,15,1),n=0;n<M.length&&(w=M[n],w<=d);)s[n++]=w,++d;for(r=u(this.n,15),r.Vc(n,e.Bi()),s[n]=d;++n<s.length;)s[n]=M[n-1];return this.g=s,C||(this.o=-2-s[0]),!0}break}}break}}return!1},l.Ib=function(){var e,n,r,s;switch(s=new Th(Ap(this.gm)+"@"+(n=Hi(this)>>>0,n.toString(16))),s.a+=" (eventType: ",this.d){case 1:{s.a+="SET";break}case 2:{s.a+="UNSET";break}case 3:{s.a+="ADD";break}case 5:{s.a+="ADD_MANY";break}case 4:{s.a+="REMOVE";break}case 6:{s.a+="REMOVE_MANY";break}case 7:{s.a+="MOVE";break}case 8:{s.a+="REMOVING_ADAPTER";break}case 9:{s.a+="RESOLVE";break}default:{uet(s,this.d);break}}if(Iue(this)&&(s.a+=", touch: true"),s.a+=", position: ",uet(s,this.o<0?this.o<-2?-2-this.o-1:-1:this.o),s.a+=", notifier: ",oC(s,this.Ai()),s.a+=", feature: ",oC(s,this._i()),s.a+=", oldValue: ",oC(s,O5t(this)),s.a+=", newValue: ",this.d==6&&Et(this.g,48)){for(r=u(this.g,48),s.a+="[",e=0;e<r.length;)s.a+=r[e],++e<r.length&&(s.a+=Ka);s.a+="]"}else oC(s,Hce(this));return s.a+=", isTouch: ",kg(s,Iue(this)),s.a+=", wasSet: ",kg(s,pxt(this)),s.a+=")",s.a},l.d=0,l.e=0,l.f=0,l.j=0,l.k=0,l.o=0,l.p=0,P(k6,"NotificationImpl",143),I(1167,143,QD,ZXt),l._i=function(){return this.a._i()},l.yi=function(e){return this.a.aj()},l.Ai=function(){return this.a.Ai()},P(k6,"DelegatingNotifyingListImpl/1",1167),I(242,63,_d,ex,Sp),l.Fc=function(e){return oie(this,u(e,366))},l.Ei=function(e){return oie(this,e)},l.Fi=function(){var e,n,r;for(e=0;e<this.i;++e)n=u(this.g[e],366),r=n.Ai(),r!=null&&n.xi()!=-1&&u(r,92).Ng(n)},l.ri=function(e){return Pt(yxn,Ie,366,e,0,1)},P(k6,"NotificationChainImpl",242),I(1378,90,wde),l.Kg=function(){return this.e},l.Mg=function(){return(this.f&1)!=0},l.f=1,P(k6,"NotifierImpl",1378),I(1993,63,_d),l.Vh=function(e,n){return hat(this,e,n)},l.Wh=function(e){return this.Vh(this.i,e)},l.Xh=function(e,n){a5t(this,e,n)},l.Yh=function(e){Hst(this,e)},l.ai=function(){return!this.bj()},l.$b=function(){xr(this)},l.Zi=function(e,n,r,s,o){return new JXt(this,e,n,r,s,o)},l.$i=function(e){mi(this.Ai(),e)},l._i=function(){return null},l.aj=function(){return-1},l.Ai=function(){return null},l.bj=function(){return!1},l.ij=function(){return!1},l.cj=function(e,n){return n},l.dj=function(e,n){return n},l.ej=function(){return!1},l.fj=function(){return this.i!=0},l.ii=function(e,n){return t_(this,e,n)},l.$c=function(e){return dy(this,e)},l.mi=function(e,n){return wle(this,e,n)},l.jj=function(e,n){return n},l.kj=function(e,n){return n},l.lj=function(e,n,r){return r},P(k6,"NotifyingListImpl",1993),I(1166,143,QD,JXt),l._i=function(){return this.a._i()},l.yi=function(e){return this.a.aj()},l.Ai=function(){return this.a.Ai()},P(k6,"NotifyingListImpl/1",1166),I(953,63,_d,IWt),l.Hc=function(e){return this.i>10?((!this.b||this.c.j!=this.a)&&(this.b=new yC(this),this.a=this.j),S0(this.b,e)):fE(this,e)},l.ni=function(){return!0},l.a=0,P(Ra,"AbstractEList/1",953),I(295,73,sot,jm),P(Ra,"AbstractEList/BasicIndexOutOfBoundsException",295),I(40,1,ra,er),l.Nb=function(e){pa(this,e)},l.mj=function(){if(this.i.j!=this.f)throw rt(new eh)},l.nj=function(){return dr(this)},l.Ob=function(){return this.e!=this.i.gc()},l.Pb=function(){return this.nj()},l.Qb=function(){u_(this)},l.e=0,l.f=0,l.g=-1,P(Ra,"AbstractEList/EIterator",40),I(278,40,Jd,Lx,qnt),l.Qb=function(){u_(this)},l.Rb=function(e){gie(this,e)},l.oj=function(){var e;try{return e=this.d.Xb(--this.e),this.mj(),this.g=this.e,e}catch(n){throw n=Wi(n),Et(n,73)?(this.mj(),rt(new lc)):rt(n)}},l.pj=function(e){pse(this,e)},l.Sb=function(){return this.e!=0},l.Tb=function(){return this.e},l.Ub=function(){return this.oj()},l.Vb=function(){return this.e-1},l.Wb=function(e){this.pj(e)},P(Ra,"AbstractEList/EListIterator",278),I(341,40,ra,Mx),l.nj=function(){return nst(this)},l.Qb=function(){throw rt(new Or)},P(Ra,"AbstractEList/NonResolvingEIterator",341),I(385,278,Jd,PM,lvt),l.Rb=function(e){throw rt(new Or)},l.nj=function(){var e;try{return e=this.c.ki(this.e),this.mj(),this.g=this.e++,e}catch(n){throw n=Wi(n),Et(n,73)?(this.mj(),rt(new lc)):rt(n)}},l.oj=function(){var e;try{return e=this.c.ki(--this.e),this.mj(),this.g=this.e,e}catch(n){throw n=Wi(n),Et(n,73)?(this.mj(),rt(new lc)):rt(n)}},l.Qb=function(){throw rt(new Or)},l.Wb=function(e){throw rt(new Or)},P(Ra,"AbstractEList/NonResolvingEListIterator",385),I(1982,67,o0e),l.Vh=function(e,n){var r,s,o,h,d,w,k,C,M,F,H;if(o=n.gc(),o!=0){for(C=u(In(this.a,4),126),M=C==null?0:C.length,H=M+o,s=Tit(this,H),F=M-e,F>0&&Ic(C,e,s,e+o,F),k=n.Kc(),d=0;d<o;++d)w=k.Pb(),r=e+d,Xet(s,r,Q8(this,w));for(cE(this,s),h=0;h<o;++h)w=s[e],this.bi(e,w),++e;return!0}else return++this.j,!1},l.Wh=function(e){var n,r,s,o,h,d,w,k,C;if(s=e.gc(),s!=0){for(k=(r=u(In(this.a,4),126),r==null?0:r.length),C=k+s,n=Tit(this,C),w=e.Kc(),h=k;h<C;++h)d=w.Pb(),Xet(n,h,Q8(this,d));for(cE(this,n),o=k;o<C;++o)d=n[o],this.bi(o,d);return!0}else return++this.j,!1},l.Xh=function(e,n){var r,s,o,h;s=u(In(this.a,4),126),o=s==null?0:s.length,r=Tit(this,o+1),h=Q8(this,n),e!=o&&Ic(s,e,r,e+1,o-e),Ji(r,e,h),cE(this,r),this.bi(e,n)},l.Yh=function(e){var n,r,s;s=(r=u(In(this.a,4),126),r==null?0:r.length),n=Tit(this,s+1),Xet(n,s,Q8(this,e)),cE(this,n),this.bi(s,e)},l.Zh=function(){return new mJt(this)},l.$h=function(){return new OYt(this)},l._h=function(e){var n,r;if(r=(n=u(In(this.a,4),126),n==null?0:n.length),e<0||e>r)throw rt(new jm(e,r));return new uXt(this,e)},l.$b=function(){var e,n;++this.j,e=u(In(this.a,4),126),n=e==null?0:e.length,cE(this,null),Brt(this,n,e)},l.Hc=function(e){var n,r,s,o,h;if(n=u(In(this.a,4),126),n!=null){if(e!=null){for(s=n,o=0,h=s.length;o<h;++o)if(r=s[o],yi(e,r))return!0}else for(s=n,o=0,h=s.length;o<h;++o)if(r=s[o],Gt(r)===Gt(e))return!0}return!1},l.Xb=function(e){var n,r;if(n=u(In(this.a,4),126),r=n==null?0:n.length,e>=r)throw rt(new jm(e,r));return n[e]},l.Xc=function(e){var n,r,s;if(n=u(In(this.a,4),126),n!=null){if(e!=null){for(r=0,s=n.length;r<s;++r)if(yi(e,n[r]))return r}else for(r=0,s=n.length;r<s;++r)if(Gt(n[r])===Gt(e))return r}return-1},l.dc=function(){return u(In(this.a,4),126)==null},l.Kc=function(){return new wJt(this)},l.Yc=function(){return new DYt(this)},l.Zc=function(e){var n,r;if(r=(n=u(In(this.a,4),126),n==null?0:n.length),e<0||e>r)throw rt(new jm(e,r));return new cXt(this,e)},l.ii=function(e,n){var r,s,o;if(r=kie(this),o=r==null?0:r.length,e>=o)throw rt(new mo(Wct+e+S2+o));if(n>=o)throw rt(new mo(Kct+n+S2+o));return s=r[n],e!=n&&(e<n?Ic(r,e,r,e+1,n-e):Ic(r,n+1,r,n,e-n),Ji(r,e,s),cE(this,r)),s},l.ki=function(e){return u(In(this.a,4),126)[e]},l.$c=function(e){return Cpn(this,e)},l.mi=function(e,n){var r,s;return r=kie(this),s=r[e],Xet(r,e,Q8(this,n)),cE(this,r),s},l.gc=function(){var e;return e=u(In(this.a,4),126),e==null?0:e.length},l.Pc=function(){var e,n,r;return e=u(In(this.a,4),126),r=e==null?0:e.length,n=Pt(Tft,Jct,415,r,0,1),r>0&&Ic(e,0,n,0,r),n},l.Qc=function(e){var n,r,s;return n=u(In(this.a,4),126),s=n==null?0:n.length,s>0&&(e.length<s&&(r=CI(sl(e).c,s),e=r),Ic(n,0,e,0,s)),e.length>s&&Ji(e,s,null),e};var j4e;P(Ra,"ArrayDelegatingEList",1982),I(1038,40,ra,wJt),l.mj=function(){if(this.b.j!=this.f||Gt(u(In(this.b.a,4),126))!==Gt(this.a))throw rt(new eh)},l.Qb=function(){u_(this),this.a=u(In(this.b.a,4),126)},P(Ra,"ArrayDelegatingEList/EIterator",1038),I(706,278,Jd,DYt,cXt),l.mj=function(){if(this.b.j!=this.f||Gt(u(In(this.b.a,4),126))!==Gt(this.a))throw rt(new eh)},l.pj=function(e){pse(this,e),this.a=u(In(this.b.a,4),126)},l.Qb=function(){u_(this),this.a=u(In(this.b.a,4),126)},P(Ra,"ArrayDelegatingEList/EListIterator",706),I(1039,341,ra,mJt),l.mj=function(){if(this.b.j!=this.f||Gt(u(In(this.b.a,4),126))!==Gt(this.a))throw rt(new eh)},P(Ra,"ArrayDelegatingEList/NonResolvingEIterator",1039),I(707,385,Jd,OYt,uXt),l.mj=function(){if(this.b.j!=this.f||Gt(u(In(this.b.a,4),126))!==Gt(this.a))throw rt(new eh)},P(Ra,"ArrayDelegatingEList/NonResolvingEListIterator",707),I(606,295,sot,Vet),P(Ra,"BasicEList/BasicIndexOutOfBoundsException",606),I(696,63,_d,Ybt),l.Vc=function(e,n){throw rt(new Or)},l.Fc=function(e){throw rt(new Or)},l.Wc=function(e,n){throw rt(new Or)},l.Gc=function(e){throw rt(new Or)},l.$b=function(){throw rt(new Or)},l.qi=function(e){throw rt(new Or)},l.Kc=function(){return this.Zh()},l.Yc=function(){return this.$h()},l.Zc=function(e){return this._h(e)},l.ii=function(e,n){throw rt(new Or)},l.ji=function(e,n){throw rt(new Or)},l.$c=function(e){throw rt(new Or)},l.Mc=function(e){throw rt(new Or)},l._c=function(e,n){throw rt(new Or)},P(Ra,"BasicEList/UnmodifiableEList",696),I(705,1,{3:1,20:1,14:1,15:1,58:1,589:1}),l.Vc=function(e,n){_Xe(this,e,u(n,42))},l.Fc=function(e){return fQe(this,u(e,42))},l.Jc=function(e){va(this,e)},l.Xb=function(e){return u(St(this.c,e),133)},l.ii=function(e,n){return u(this.c.ii(e,n),42)},l.ji=function(e,n){SXe(this,e,u(n,42))},l.Lc=function(){return new Tn(null,new _n(this,16))},l.$c=function(e){return u(this.c.$c(e),42)},l._c=function(e,n){return yen(this,e,u(n,42))},l.ad=function(e){e4(this,e)},l.Nc=function(){return new _n(this,16)},l.Oc=function(){return new Tn(null,new _n(this,16))},l.Wc=function(e,n){return this.c.Wc(e,n)},l.Gc=function(e){return this.c.Gc(e)},l.$b=function(){this.c.$b()},l.Hc=function(e){return this.c.Hc(e)},l.Ic=function(e){return II(this.c,e)},l.qj=function(){var e,n,r;if(this.d==null){for(this.d=Pt(HAt,I8t,63,2*this.f+1,0,1),r=this.e,this.f=0,n=this.c.Kc();n.e!=n.i.gc();)e=u(n.nj(),133),qz(this,e);this.e=r}},l.Fb=function(e){return iKt(this,e)},l.Hb=function(){return pyt(this.c)},l.Xc=function(e){return this.c.Xc(e)},l.rj=function(){this.c=new Tzt(this)},l.dc=function(){return this.f==0},l.Kc=function(){return this.c.Kc()},l.Yc=function(){return this.c.Yc()},l.Zc=function(e){return this.c.Zc(e)},l.sj=function(){return fI(this)},l.tj=function(e,n,r){return new xKt(e,n,r)},l.uj=function(){return new wp},l.Mc=function(e){return Bee(this,e)},l.gc=function(){return this.f},l.bd=function(e,n){return new Kd(this.c,e,n)},l.Pc=function(){return this.c.Pc()},l.Qc=function(e){return this.c.Qc(e)},l.Ib=function(){return o3t(this.c)},l.e=0,l.f=0,P(Ra,"BasicEMap",705),I(1033,63,_d,Tzt),l.bi=function(e,n){uKe(this,u(n,133))},l.ei=function(e,n,r){var s;++(s=this,u(n,133),s).a.e},l.fi=function(e,n){lKe(this,u(n,133))},l.gi=function(e,n,r){JXe(this,u(n,133),u(r,133))},l.di=function(e,n){Sne(this.a)},P(Ra,"BasicEMap/1",1033),I(1034,63,_d,wp),l.ri=function(e){return Pt(xxn,c0e,612,e,0,1)},P(Ra,"BasicEMap/2",1034),I(1035,N1,ju,Czt),l.$b=function(){this.a.c.$b()},l.Hc=function(e){return Wit(this.a,e)},l.Kc=function(){return this.a.f==0?(f8(),lN.a):new aHt(this.a)},l.Mc=function(e){var n;return n=this.a.f,Iz(this.a,e),this.a.f!=n},l.gc=function(){return this.a.f},P(Ra,"BasicEMap/3",1035),I(1036,28,wy,_zt),l.$b=function(){this.a.c.$b()},l.Hc=function(e){return hue(this.a,e)},l.Kc=function(){return this.a.f==0?(f8(),lN.a):new oHt(this.a)},l.gc=function(){return this.a.f},P(Ra,"BasicEMap/4",1036),I(1037,N1,ju,Szt),l.$b=function(){this.a.c.$b()},l.Hc=function(e){var n,r,s,o,h,d,w,k,C;if(this.a.f>0&&Et(e,42)&&(this.a.qj(),k=u(e,42),w=k.cd(),o=w==null?0:Hi(w),h=X2t(this.a,o),n=this.a.d[h],n)){for(r=u(n.g,367),C=n.i,d=0;d<C;++d)if(s=r[d],s.Sh()==o&&s.Fb(k))return!0}return!1},l.Kc=function(){return this.a.f==0?(f8(),lN.a):new irt(this.a)},l.Mc=function(e){return rce(this,e)},l.gc=function(){return this.a.f},P(Ra,"BasicEMap/5",1037),I(613,1,ra,irt),l.Nb=function(e){pa(this,e)},l.Ob=function(){return this.b!=-1},l.Pb=function(){var e;if(this.f.e!=this.c)throw rt(new eh);if(this.b==-1)throw rt(new lc);return this.d=this.a,this.e=this.b,Vse(this),e=u(this.f.d[this.d].g[this.e],133),this.vj(e)},l.Qb=function(){if(this.f.e!=this.c)throw rt(new eh);if(this.e==-1)throw rt(new Iu);this.f.c.Mc(St(this.f.d[this.d],this.e)),this.c=this.f.e,this.e=-1,this.a==this.d&&this.b!=-1&&--this.b},l.vj=function(e){return e},l.a=0,l.b=-1,l.c=0,l.d=0,l.e=0,P(Ra,"BasicEMap/BasicEMapIterator",613),I(1031,613,ra,aHt),l.vj=function(e){return e.cd()},P(Ra,"BasicEMap/BasicEMapKeyIterator",1031),I(1032,613,ra,oHt),l.vj=function(e){return e.dd()},P(Ra,"BasicEMap/BasicEMapValueIterator",1032),I(1030,1,bw,Azt),l.wc=function(e){UC(this,e)},l.yc=function(e,n,r){return $it(this,e,n,r)},l.$b=function(){this.a.c.$b()},l._b=function(e){return $Vt(this,e)},l.uc=function(e){return hue(this.a,e)},l.vc=function(){return qsn(this.a)},l.Fb=function(e){return iKt(this.a,e)},l.xc=function(e){return Yf(this.a,e)},l.Hb=function(){return pyt(this.a.c)},l.dc=function(){return this.a.f==0},l.ec=function(){return Hsn(this.a)},l.zc=function(e,n){return Yz(this.a,e,n)},l.Bc=function(e){return Iz(this.a,e)},l.gc=function(){return this.a.f},l.Ib=function(){return o3t(this.a.c)},l.Cc=function(){return zsn(this.a)},P(Ra,"BasicEMap/DelegatingMap",1030),I(612,1,{42:1,133:1,612:1},xKt),l.Fb=function(e){var n;return Et(e,42)?(n=u(e,42),(this.b!=null?yi(this.b,n.cd()):Gt(this.b)===Gt(n.cd()))&&(this.c!=null?yi(this.c,n.dd()):Gt(this.c)===Gt(n.dd()))):!1},l.Sh=function(){return this.a},l.cd=function(){return this.b},l.dd=function(){return this.c},l.Hb=function(){return this.a^(this.c==null?0:Hi(this.c))},l.Th=function(e){this.a=e},l.Uh=function(e){throw rt(new Vb)},l.ed=function(e){var n;return n=this.c,this.c=e,n},l.Ib=function(){return this.b+"->"+this.c},l.a=0;var xxn=P(Ra,"BasicEMap/EntryImpl",612);I(536,1,{},Tk),P(Ra,"BasicEMap/View",536);var lN;I(768,1,{}),l.Fb=function(e){return p5t((vn(),io),e)},l.Hb=function(){return Syt((vn(),io))},l.Ib=function(){return Qp((vn(),io))},P(Ra,"ECollections/BasicEmptyUnmodifiableEList",768),I(1312,1,Jd,QF),l.Nb=function(e){pa(this,e)},l.Rb=function(e){throw rt(new Or)},l.Ob=function(){return!1},l.Sb=function(){return!1},l.Pb=function(){throw rt(new lc)},l.Tb=function(){return 0},l.Ub=function(){throw rt(new lc)},l.Vb=function(){return-1},l.Qb=function(){throw rt(new Or)},l.Wb=function(e){throw rt(new Or)},P(Ra,"ECollections/BasicEmptyUnmodifiableEList/1",1312),I(1310,768,{20:1,14:1,15:1,58:1},vqt),l.Vc=function(e,n){AHt()},l.Fc=function(e){return LHt()},l.Wc=function(e,n){return MHt()},l.Gc=function(e){return IHt()},l.$b=function(){DHt()},l.Hc=function(e){return!1},l.Ic=function(e){return!1},l.Jc=function(e){va(this,e)},l.Xb=function(e){return Zbt((vn(),e)),null},l.Xc=function(e){return-1},l.dc=function(){return!0},l.Kc=function(){return this.a},l.Yc=function(){return this.a},l.Zc=function(e){return this.a},l.ii=function(e,n){return OHt()},l.ji=function(e,n){NHt()},l.Lc=function(){return new Tn(null,new _n(this,16))},l.$c=function(e){return PHt()},l.Mc=function(e){return FHt()},l._c=function(e,n){return BHt()},l.gc=function(){return 0},l.ad=function(e){e4(this,e)},l.Nc=function(){return new _n(this,16)},l.Oc=function(){return new Tn(null,new _n(this,16))},l.bd=function(e,n){return vn(),new Kd(io,e,n)},l.Pc=function(){return Zvt((vn(),io))},l.Qc=function(e){return vn(),XI(io,e)},P(Ra,"ECollections/EmptyUnmodifiableEList",1310),I(1311,768,{20:1,14:1,15:1,58:1,589:1},wqt),l.Vc=function(e,n){AHt()},l.Fc=function(e){return LHt()},l.Wc=function(e,n){return MHt()},l.Gc=function(e){return IHt()},l.$b=function(){DHt()},l.Hc=function(e){return!1},l.Ic=function(e){return!1},l.Jc=function(e){va(this,e)},l.Xb=function(e){return Zbt((vn(),e)),null},l.Xc=function(e){return-1},l.dc=function(){return!0},l.Kc=function(){return this.a},l.Yc=function(){return this.a},l.Zc=function(e){return this.a},l.ii=function(e,n){return OHt()},l.ji=function(e,n){NHt()},l.Lc=function(){return new Tn(null,new _n(this,16))},l.$c=function(e){return PHt()},l.Mc=function(e){return FHt()},l._c=function(e,n){return BHt()},l.gc=function(){return 0},l.ad=function(e){e4(this,e)},l.Nc=function(){return new _n(this,16)},l.Oc=function(){return new Tn(null,new _n(this,16))},l.bd=function(e,n){return vn(),new Kd(io,e,n)},l.Pc=function(){return Zvt((vn(),io))},l.Qc=function(e){return vn(),XI(io,e)},l.sj=function(){return vn(),vn(),a0},P(Ra,"ECollections/EmptyUnmodifiableEMap",1311);var VAt=Yi(Ra,"Enumerator"),nU;I(281,1,{281:1},eat),l.Fb=function(e){var n;return this===e?!0:Et(e,281)?(n=u(e,281),this.f==n.f&&ztn(this.i,n.i)&&Ant(this.a,this.f&256?n.f&256?n.a:null:n.f&256?null:n.a)&&Ant(this.d,n.d)&&Ant(this.g,n.g)&&Ant(this.e,n.e)&&Phn(this,n)):!1},l.Hb=function(){return this.f},l.Ib=function(){return que(this)},l.f=0;var $4e=0,z4e=0,q4e=0,H4e=0,UAt=0,WAt=0,KAt=0,YAt=0,XAt=0,G4e,iA=0,sA=0,V4e=0,U4e=0,rU,QAt;P(Ra,"URI",281),I(1091,43,_4,mqt),l.zc=function(e,n){return u(xo(this,Br(e),u(n,281)),281)},P(Ra,"URI/URICache",1091),I(497,63,_d,Ck,Nj),l.hi=function(){return!0},P(Ra,"UniqueEList",497),I(581,60,U0,F$),P(Ra,"WrappedException",581);var Zr=Yi(dh,h0e),Qy=Yi(dh,f0e),Au=Yi(dh,d0e),Zy=Yi(dh,g0e),i1=Yi(dh,p0e),Gh=Yi(dh,"EClass"),Cft=Yi(dh,"EDataType"),W4e;I(1183,43,_4,yqt),l.xc=function(e){return ea(e)?Fc(this,e):ec(Ao(this.f,e))},P(dh,"EDataType/Internal/ConversionDelegate/Factory/Registry/Impl",1183);var iU=Yi(dh,"EEnum"),eg=Yi(dh,b0e),ho=Yi(dh,v0e),Vh=Yi(dh,w0e),Uh,zw=Yi(dh,m0e),Jy=Yi(dh,y0e);I(1029,1,{},VZ),l.Ib=function(){return"NIL"},P(dh,"EStructuralFeature/Internal/DynamicValueHolder/1",1029);var K4e;I(1028,43,_4,xqt),l.xc=function(e){return ea(e)?Fc(this,e):ec(Ao(this.f,e))},P(dh,"EStructuralFeature/Internal/SettingDelegate/Factory/Registry/Impl",1028);var lu=Yi(dh,x0e),V6=Yi(dh,"EValidator/PatternMatcher"),ZAt,JAt,Ln,Jg,t3,Cb,Y4e,X4e,Q4e,_b,tp,Sb,qw,V1,Z4e,J4e,Wh,ep,t5e,np,e3,c5,Qa,e5e,n5e,Hw,sU=Yi($i,"FeatureMap/Entry");I(535,1,{72:1},JR),l.ak=function(){return this.a},l.dd=function(){return this.b},P(Mn,"BasicEObjectImpl/1",535),I(1027,1,tut,OVt),l.Wj=function(e){return Prt(this.a,this.b,e)},l.fj=function(){return dQt(this.a,this.b)},l.Wb=function(e){Nwt(this.a,this.b,e)},l.Xj=function(){Ben(this.a,this.b)},P(Mn,"BasicEObjectImpl/4",1027),I(1983,1,{108:1}),l.bk=function(e){this.e=e==0?r5e:Pt(Xn,Ie,1,e,5,1)},l.Ch=function(e){return this.e[e]},l.Dh=function(e,n){this.e[e]=n},l.Eh=function(e){this.e[e]=null},l.ck=function(){return this.c},l.dk=function(){throw rt(new Or)},l.ek=function(){throw rt(new Or)},l.fk=function(){return this.d},l.gk=function(){return this.e!=null},l.hk=function(e){this.c=e},l.ik=function(e){throw rt(new Or)},l.jk=function(e){throw rt(new Or)},l.kk=function(e){this.d=e};var r5e;P(Mn,"BasicEObjectImpl/EPropertiesHolderBaseImpl",1983),I(185,1983,{108:1},th),l.dk=function(){return this.a},l.ek=function(){return this.b},l.ik=function(e){this.a=e},l.jk=function(e){this.b=e},P(Mn,"BasicEObjectImpl/EPropertiesHolderImpl",185),I(506,97,kde,_k),l.Kg=function(){return this.f},l.Pg=function(){return this.k},l.Rg=function(e,n){this.g=e,this.i=n},l.Tg=function(){return this.j&2?this.ph().ck():this.zh()},l.Vg=function(){return this.i},l.Mg=function(){return(this.j&1)!=0},l.eh=function(){return this.g},l.kh=function(){return(this.j&4)!=0},l.ph=function(){return!this.k&&(this.k=new th),this.k},l.th=function(e){this.ph().hk(e),e?this.j|=2:this.j&=-3},l.vh=function(e){this.ph().jk(e),e?this.j|=4:this.j&=-5},l.zh=function(){return(jp(),Ln).S},l.i=0,l.j=1,P(Mn,"EObjectImpl",506),I(780,506,{105:1,92:1,90:1,56:1,108:1,49:1,97:1},Nvt),l.Ch=function(e){return this.e[e]},l.Dh=function(e,n){this.e[e]=n},l.Eh=function(e){this.e[e]=null},l.Tg=function(){return this.d},l.Yg=function(e){return Vi(this.d,e)},l.$g=function(){return this.d},l.dh=function(){return this.e!=null},l.ph=function(){return!this.k&&(this.k=new ZF),this.k},l.th=function(e){this.d=e},l.yh=function(){var e;return this.e==null&&(e=Zn(this.d),this.e=e==0?i5e:Pt(Xn,Ie,1,e,5,1)),this},l.Ah=function(){return 0};var i5e;P(Mn,"DynamicEObjectImpl",780),I(1376,780,{105:1,42:1,92:1,90:1,133:1,56:1,108:1,49:1,97:1},KKt),l.Fb=function(e){return this===e},l.Hb=function(){return Iv(this)},l.th=function(e){this.d=e,this.b=gD(e,"key"),this.c=gD(e,Y_)},l.Sh=function(){var e;return this.a==-1&&(e=Wrt(this,this.b),this.a=e==null?0:Hi(e)),this.a},l.cd=function(){return Wrt(this,this.b)},l.dd=function(){return Wrt(this,this.c)},l.Th=function(e){this.a=e},l.Uh=function(e){Nwt(this,this.b,e)},l.ed=function(e){var n;return n=Wrt(this,this.c),Nwt(this,this.c,e),n},l.a=0,P(Mn,"DynamicEObjectImpl/BasicEMapEntry",1376),I(1377,1,{108:1},ZF),l.bk=function(e){throw rt(new Or)},l.Ch=function(e){throw rt(new Or)},l.Dh=function(e,n){throw rt(new Or)},l.Eh=function(e){throw rt(new Or)},l.ck=function(){throw rt(new Or)},l.dk=function(){return this.a},l.ek=function(){return this.b},l.fk=function(){return this.c},l.gk=function(){throw rt(new Or)},l.hk=function(e){throw rt(new Or)},l.ik=function(e){this.a=e},l.jk=function(e){this.b=e},l.kk=function(e){this.c=e},P(Mn,"DynamicEObjectImpl/DynamicEPropertiesHolderImpl",1377),I(510,150,{105:1,92:1,90:1,590:1,147:1,56:1,108:1,49:1,97:1,510:1,150:1,114:1,115:1},JF),l.Qg=function(e){return J3t(this,e)},l._g=function(e,n,r){var s;switch(e){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),this.Ab;case 1:return this.d;case 2:return r?(!this.b&&(this.b=new yl((dn(),Qa),cc,this)),this.b):(!this.b&&(this.b=new yl((dn(),Qa),cc,this)),fI(this.b));case 3:return wQt(this);case 4:return!this.a&&(this.a=new Ss(kb,this,4)),this.a;case 5:return!this.c&&(this.c=new U3(kb,this,5)),this.c}return oh(this,e-Zn((dn(),Jg)),yn((s=u(In(this,16),26),s||Jg),e),n,r)},l.hh=function(e,n,r){var s,o,h;switch(n){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),Qc(this.Ab,e,r);case 3:return this.Cb&&(r=(o=this.Db>>16,o>=0?J3t(this,r):this.Cb.ih(this,-1-o,null,r))),Xvt(this,u(e,147),r)}return h=u(yn((s=u(In(this,16),26),s||(dn(),Jg)),n),66),h.Nj().Qj(this,iu(this),n-Zn((dn(),Jg)),e,r)},l.jh=function(e,n,r){var s,o;switch(n){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),Ba(this.Ab,e,r);case 2:return!this.b&&(this.b=new yl((dn(),Qa),cc,this)),kj(this.b,e,r);case 3:return Xvt(this,null,r);case 4:return!this.a&&(this.a=new Ss(kb,this,4)),Ba(this.a,e,r)}return o=u(yn((s=u(In(this,16),26),s||(dn(),Jg)),n),66),o.Nj().Rj(this,iu(this),n-Zn((dn(),Jg)),e,r)},l.lh=function(e){var n;switch(e){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.d!=null;case 2:return!!this.b&&this.b.f!=0;case 3:return!!wQt(this);case 4:return!!this.a&&this.a.i!=0;case 5:return!!this.c&&this.c.i!=0}return sh(this,e-Zn((dn(),Jg)),yn((n=u(In(this,16),26),n||Jg),e))},l.sh=function(e,n){var r;switch(e){case 0:!this.Ab&&(this.Ab=new he(Zr,this,0,3)),xr(this.Ab),!this.Ab&&(this.Ab=new he(Zr,this,0,3)),rs(this.Ab,u(n,14));return;case 1:_tn(this,Br(n));return;case 2:!this.b&&(this.b=new yl((dn(),Qa),cc,this)),lz(this.b,n);return;case 3:Dce(this,u(n,147));return;case 4:!this.a&&(this.a=new Ss(kb,this,4)),xr(this.a),!this.a&&(this.a=new Ss(kb,this,4)),rs(this.a,u(n,14));return;case 5:!this.c&&(this.c=new U3(kb,this,5)),xr(this.c),!this.c&&(this.c=new U3(kb,this,5)),rs(this.c,u(n,14));return}fh(this,e-Zn((dn(),Jg)),yn((r=u(In(this,16),26),r||Jg),e),n)},l.zh=function(){return dn(),Jg},l.Bh=function(e){var n;switch(e){case 0:!this.Ab&&(this.Ab=new he(Zr,this,0,3)),xr(this.Ab);return;case 1:tyt(this,null);return;case 2:!this.b&&(this.b=new yl((dn(),Qa),cc,this)),this.b.c.$b();return;case 3:Dce(this,null);return;case 4:!this.a&&(this.a=new Ss(kb,this,4)),xr(this.a);return;case 5:!this.c&&(this.c=new U3(kb,this,5)),xr(this.c);return}lh(this,e-Zn((dn(),Jg)),yn((n=u(In(this,16),26),n||Jg),e))},l.Ib=function(){return Wre(this)},l.d=null,P(Mn,"EAnnotationImpl",510),I(151,705,D8t,Tl),l.Xh=function(e,n){cXe(this,e,u(n,42))},l.lk=function(e,n){return nZe(this,u(e,42),n)},l.pi=function(e){return u(u(this.c,69).pi(e),133)},l.Zh=function(){return u(this.c,69).Zh()},l.$h=function(){return u(this.c,69).$h()},l._h=function(e){return u(this.c,69)._h(e)},l.mk=function(e,n){return kj(this,e,n)},l.Wj=function(e){return u(this.c,76).Wj(e)},l.rj=function(){},l.fj=function(){return u(this.c,76).fj()},l.tj=function(e,n,r){var s;return s=u(Fl(this.b).Nh().Jh(this.b),133),s.Th(e),s.Uh(n),s.ed(r),s},l.uj=function(){return new mpt(this)},l.Wb=function(e){lz(this,e)},l.Xj=function(){u(this.c,76).Xj()},P($i,"EcoreEMap",151),I(158,151,D8t,yl),l.qj=function(){var e,n,r,s,o,h;if(this.d==null){for(h=Pt(HAt,I8t,63,2*this.f+1,0,1),r=this.c.Kc();r.e!=r.i.gc();)n=u(r.nj(),133),s=n.Sh(),o=(s&vi)%h.length,e=h[o],!e&&(e=h[o]=new mpt(this)),e.Fc(n);this.d=h}},P(Mn,"EAnnotationImpl/1",158),I(284,438,{105:1,92:1,90:1,147:1,191:1,56:1,108:1,472:1,49:1,97:1,150:1,284:1,114:1,115:1}),l._g=function(e,n,r){var s,o;switch(e){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Fn(),!!(this.Bb&256);case 3:return Fn(),!!(this.Bb&512);case 4:return de(this.s);case 5:return de(this.t);case 6:return Fn(),!!this.$j();case 7:return Fn(),o=this.s,o>=1;case 8:return n?Lh(this):this.r;case 9:return this.q}return oh(this,e-Zn(this.zh()),yn((s=u(In(this,16),26),s||this.zh()),e),n,r)},l.jh=function(e,n,r){var s,o;switch(n){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),Ba(this.Ab,e,r);case 9:return Vnt(this,r)}return o=u(yn((s=u(In(this,16),26),s||this.zh()),n),66),o.Nj().Rj(this,iu(this),n-Zn(this.zh()),e,r)},l.lh=function(e){var n,r;switch(e){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return(this.Bb&256)==0;case 3:return(this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return this.$j();case 7:return r=this.s,r>=1;case 8:return!!this.r&&!this.q.e&&jv(this.q).i==0;case 9:return!!this.q&&!(this.r&&!this.q.e&&jv(this.q).i==0)}return sh(this,e-Zn(this.zh()),yn((n=u(In(this,16),26),n||this.zh()),e))},l.sh=function(e,n){var r,s;switch(e){case 0:!this.Ab&&(this.Ab=new he(Zr,this,0,3)),xr(this.Ab),!this.Ab&&(this.Ab=new he(Zr,this,0,3)),rs(this.Ab,u(n,14));return;case 1:this.Lh(Br(n));return;case 2:Ng(this,je(Re(n)));return;case 3:Pg(this,je(Re(n)));return;case 4:Ig(this,u(n,19).a);return;case 5:this.ok(u(n,19).a);return;case 8:f2(this,u(n,138));return;case 9:s=O1(this,u(n,87),null),s&&s.Fi();return}fh(this,e-Zn(this.zh()),yn((r=u(In(this,16),26),r||this.zh()),e),n)},l.zh=function(){return dn(),n5e},l.Bh=function(e){var n,r;switch(e){case 0:!this.Ab&&(this.Ab=new he(Zr,this,0,3)),xr(this.Ab);return;case 1:this.Lh(null);return;case 2:Ng(this,!0);return;case 3:Pg(this,!0);return;case 4:Ig(this,0);return;case 5:this.ok(1);return;case 8:f2(this,null);return;case 9:r=O1(this,null,null),r&&r.Fi();return}lh(this,e-Zn(this.zh()),yn((n=u(In(this,16),26),n||this.zh()),e))},l.Gh=function(){Lh(this),this.Bb|=1},l.Yj=function(){return Lh(this)},l.Zj=function(){return this.t},l.$j=function(){var e;return e=this.t,e>1||e==-1},l.hi=function(){return(this.Bb&512)!=0},l.nk=function(e,n){return Kyt(this,e,n)},l.ok=function(e){ty(this,e)},l.Ib=function(){return s5t(this)},l.s=0,l.t=1,P(Mn,"ETypedElementImpl",284),I(449,284,{105:1,92:1,90:1,147:1,191:1,56:1,170:1,66:1,108:1,472:1,49:1,97:1,150:1,449:1,284:1,114:1,115:1,677:1}),l.Qg=function(e){return Lse(this,e)},l._g=function(e,n,r){var s,o;switch(e){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Fn(),!!(this.Bb&256);case 3:return Fn(),!!(this.Bb&512);case 4:return de(this.s);case 5:return de(this.t);case 6:return Fn(),!!this.$j();case 7:return Fn(),o=this.s,o>=1;case 8:return n?Lh(this):this.r;case 9:return this.q;case 10:return Fn(),!!(this.Bb&wf);case 11:return Fn(),!!(this.Bb&Ay);case 12:return Fn(),!!(this.Bb&yy);case 13:return this.j;case 14:return mE(this);case 15:return Fn(),!!(this.Bb&zu);case 16:return Fn(),!!(this.Bb&bd);case 17:return Vm(this)}return oh(this,e-Zn(this.zh()),yn((s=u(In(this,16),26),s||this.zh()),e),n,r)},l.hh=function(e,n,r){var s,o,h;switch(n){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),Qc(this.Ab,e,r);case 17:return this.Cb&&(r=(o=this.Db>>16,o>=0?Lse(this,r):this.Cb.ih(this,-1-o,null,r))),zl(this,e,17,r)}return h=u(yn((s=u(In(this,16),26),s||this.zh()),n),66),h.Nj().Qj(this,iu(this),n-Zn(this.zh()),e,r)},l.jh=function(e,n,r){var s,o;switch(n){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),Ba(this.Ab,e,r);case 9:return Vnt(this,r);case 17:return zl(this,null,17,r)}return o=u(yn((s=u(In(this,16),26),s||this.zh()),n),66),o.Nj().Rj(this,iu(this),n-Zn(this.zh()),e,r)},l.lh=function(e){var n,r;switch(e){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return(this.Bb&256)==0;case 3:return(this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return this.$j();case 7:return r=this.s,r>=1;case 8:return!!this.r&&!this.q.e&&jv(this.q).i==0;case 9:return!!this.q&&!(this.r&&!this.q.e&&jv(this.q).i==0);case 10:return(this.Bb&wf)==0;case 11:return(this.Bb&Ay)!=0;case 12:return(this.Bb&yy)!=0;case 13:return this.j!=null;case 14:return mE(this)!=null;case 15:return(this.Bb&zu)!=0;case 16:return(this.Bb&bd)!=0;case 17:return!!Vm(this)}return sh(this,e-Zn(this.zh()),yn((n=u(In(this,16),26),n||this.zh()),e))},l.sh=function(e,n){var r,s;switch(e){case 0:!this.Ab&&(this.Ab=new he(Zr,this,0,3)),xr(this.Ab),!this.Ab&&(this.Ab=new he(Zr,this,0,3)),rs(this.Ab,u(n,14));return;case 1:mrt(this,Br(n));return;case 2:Ng(this,je(Re(n)));return;case 3:Pg(this,je(Re(n)));return;case 4:Ig(this,u(n,19).a);return;case 5:this.ok(u(n,19).a);return;case 8:f2(this,u(n,138));return;case 9:s=O1(this,u(n,87),null),s&&s.Fi();return;case 10:nE(this,je(Re(n)));return;case 11:sE(this,je(Re(n)));return;case 12:rE(this,je(Re(n)));return;case 13:Xbt(this,Br(n));return;case 15:iE(this,je(Re(n)));return;case 16:aE(this,je(Re(n)));return}fh(this,e-Zn(this.zh()),yn((r=u(In(this,16),26),r||this.zh()),e),n)},l.zh=function(){return dn(),e5e},l.Bh=function(e){var n,r;switch(e){case 0:!this.Ab&&(this.Ab=new he(Zr,this,0,3)),xr(this.Ab);return;case 1:Et(this.Cb,88)&&hy(rl(u(this.Cb,88)),4),Xc(this,null);return;case 2:Ng(this,!0);return;case 3:Pg(this,!0);return;case 4:Ig(this,0);return;case 5:this.ok(1);return;case 8:f2(this,null);return;case 9:r=O1(this,null,null),r&&r.Fi();return;case 10:nE(this,!0);return;case 11:sE(this,!1);return;case 12:rE(this,!1);return;case 13:this.i=null,ez(this,null);return;case 15:iE(this,!1);return;case 16:aE(this,!1);return}lh(this,e-Zn(this.zh()),yn((n=u(In(this,16),26),n||this.zh()),e))},l.Gh=function(){k8(Eo((Ru(),ma),this)),Lh(this),this.Bb|=1},l.Gj=function(){return this.f},l.zj=function(){return mE(this)},l.Hj=function(){return Vm(this)},l.Lj=function(){return null},l.pk=function(){return this.k},l.aj=function(){return this.n},l.Mj=function(){return Qz(this)},l.Nj=function(){var e,n,r,s,o,h,d,w,k;return this.p||(r=Vm(this),(r.i==null&&pd(r),r.i).length,s=this.Lj(),s&&Zn(Vm(s)),o=Lh(this),d=o.Bj(),e=d?d.i&1?d==dl?Bs:d==Tr?ja:d==r3?XE:d==ia?ca:d==Lb?Tw:d==f5?Cw:d==Hu?E6:aS:d:null,n=mE(this),w=o.zj(),aln(this),this.Bb&bd&&((h=a4t((Ru(),ma),r))&&h!=this||(h=qx(Eo(ma,this))))?this.p=new PVt(this,h):this.$j()?this.rk()?s?this.Bb&zu?e?this.sk()?this.p=new Zb(47,e,this,s):this.p=new Zb(5,e,this,s):this.sk()?this.p=new e2(46,this,s):this.p=new e2(4,this,s):e?this.sk()?this.p=new Zb(49,e,this,s):this.p=new Zb(7,e,this,s):this.sk()?this.p=new e2(48,this,s):this.p=new e2(6,this,s):this.Bb&zu?e?e==M2?this.p=new Cg(50,B4e,this):this.sk()?this.p=new Cg(43,e,this):this.p=new Cg(1,e,this):this.sk()?this.p=new Sg(42,this):this.p=new Sg(0,this):e?e==M2?this.p=new Cg(41,B4e,this):this.sk()?this.p=new Cg(45,e,this):this.p=new Cg(3,e,this):this.sk()?this.p=new Sg(44,this):this.p=new Sg(2,this):Et(o,148)?e==sU?this.p=new Sg(40,this):this.Bb&512?this.Bb&zu?e?this.p=new Cg(9,e,this):this.p=new Sg(8,this):e?this.p=new Cg(11,e,this):this.p=new Sg(10,this):this.Bb&zu?e?this.p=new Cg(13,e,this):this.p=new Sg(12,this):e?this.p=new Cg(15,e,this):this.p=new Sg(14,this):s?(k=s.t,k>1||k==-1?this.sk()?this.Bb&zu?e?this.p=new Zb(25,e,this,s):this.p=new e2(24,this,s):e?this.p=new Zb(27,e,this,s):this.p=new e2(26,this,s):this.Bb&zu?e?this.p=new Zb(29,e,this,s):this.p=new e2(28,this,s):e?this.p=new Zb(31,e,this,s):this.p=new e2(30,this,s):this.sk()?this.Bb&zu?e?this.p=new Zb(33,e,this,s):this.p=new e2(32,this,s):e?this.p=new Zb(35,e,this,s):this.p=new e2(34,this,s):this.Bb&zu?e?this.p=new Zb(37,e,this,s):this.p=new e2(36,this,s):e?this.p=new Zb(39,e,this,s):this.p=new e2(38,this,s)):this.sk()?this.Bb&zu?e?this.p=new Cg(17,e,this):this.p=new Sg(16,this):e?this.p=new Cg(19,e,this):this.p=new Sg(18,this):this.Bb&zu?e?this.p=new Cg(21,e,this):this.p=new Sg(20,this):e?this.p=new Cg(23,e,this):this.p=new Sg(22,this):this.qk()?this.sk()?this.p=new kKt(u(o,26),this,s):this.p=new Owt(u(o,26),this,s):Et(o,148)?e==sU?this.p=new Sg(40,this):this.Bb&zu?e?this.p=new yYt(n,w,this,(Uit(),d==Tr?aLt:d==dl?eLt:d==Lb?oLt:d==r3?sLt:d==ia?iLt:d==f5?cLt:d==Hu?nLt:d==mh?rLt:Aft)):this.p=new DXt(u(o,148),n,w,this):e?this.p=new mYt(n,w,this,(Uit(),d==Tr?aLt:d==dl?eLt:d==Lb?oLt:d==r3?sLt:d==ia?iLt:d==f5?cLt:d==Hu?nLt:d==mh?rLt:Aft)):this.p=new IXt(u(o,148),n,w,this):this.rk()?s?this.Bb&zu?this.sk()?this.p=new TKt(u(o,26),this,s):this.p=new Tvt(u(o,26),this,s):this.sk()?this.p=new EKt(u(o,26),this,s):this.p=new xnt(u(o,26),this,s):this.Bb&zu?this.sk()?this.p=new mWt(u(o,26),this):this.p=new R2t(u(o,26),this):this.sk()?this.p=new wWt(u(o,26),this):this.p=new ont(u(o,26),this):this.sk()?s?this.Bb&zu?this.p=new CKt(u(o,26),this,s):this.p=new kvt(u(o,26),this,s):this.Bb&zu?this.p=new yWt(u(o,26),this):this.p=new j2t(u(o,26),this):s?this.Bb&zu?this.p=new _Kt(u(o,26),this,s):this.p=new Evt(u(o,26),this,s):this.Bb&zu?this.p=new xWt(u(o,26),this):this.p=new Pj(u(o,26),this)),this.p},l.Ij=function(){return(this.Bb&wf)!=0},l.qk=function(){return!1},l.rk=function(){return!1},l.Jj=function(){return(this.Bb&bd)!=0},l.Oj=function(){return Yrt(this)},l.sk=function(){return!1},l.Kj=function(){return(this.Bb&zu)!=0},l.tk=function(e){this.k=e},l.Lh=function(e){mrt(this,e)},l.Ib=function(){return pq(this)},l.e=!1,l.n=0,P(Mn,"EStructuralFeatureImpl",449),I(322,449,{105:1,92:1,90:1,34:1,147:1,191:1,56:1,170:1,66:1,108:1,472:1,49:1,97:1,322:1,150:1,449:1,284:1,114:1,115:1,677:1},Utt),l._g=function(e,n,r){var s,o;switch(e){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Fn(),!!(this.Bb&256);case 3:return Fn(),!!(this.Bb&512);case 4:return de(this.s);case 5:return de(this.t);case 6:return Fn(),!!e5t(this);case 7:return Fn(),o=this.s,o>=1;case 8:return n?Lh(this):this.r;case 9:return this.q;case 10:return Fn(),!!(this.Bb&wf);case 11:return Fn(),!!(this.Bb&Ay);case 12:return Fn(),!!(this.Bb&yy);case 13:return this.j;case 14:return mE(this);case 15:return Fn(),!!(this.Bb&zu);case 16:return Fn(),!!(this.Bb&bd);case 17:return Vm(this);case 18:return Fn(),!!(this.Bb&dc);case 19:return n?dit(this):DJt(this)}return oh(this,e-Zn((dn(),t3)),yn((s=u(In(this,16),26),s||t3),e),n,r)},l.lh=function(e){var n,r;switch(e){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return(this.Bb&256)==0;case 3:return(this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return e5t(this);case 7:return r=this.s,r>=1;case 8:return!!this.r&&!this.q.e&&jv(this.q).i==0;case 9:return!!this.q&&!(this.r&&!this.q.e&&jv(this.q).i==0);case 10:return(this.Bb&wf)==0;case 11:return(this.Bb&Ay)!=0;case 12:return(this.Bb&yy)!=0;case 13:return this.j!=null;case 14:return mE(this)!=null;case 15:return(this.Bb&zu)!=0;case 16:return(this.Bb&bd)!=0;case 17:return!!Vm(this);case 18:return(this.Bb&dc)!=0;case 19:return!!DJt(this)}return sh(this,e-Zn((dn(),t3)),yn((n=u(In(this,16),26),n||t3),e))},l.sh=function(e,n){var r,s;switch(e){case 0:!this.Ab&&(this.Ab=new he(Zr,this,0,3)),xr(this.Ab),!this.Ab&&(this.Ab=new he(Zr,this,0,3)),rs(this.Ab,u(n,14));return;case 1:mrt(this,Br(n));return;case 2:Ng(this,je(Re(n)));return;case 3:Pg(this,je(Re(n)));return;case 4:Ig(this,u(n,19).a);return;case 5:lHt(this,u(n,19).a);return;case 8:f2(this,u(n,138));return;case 9:s=O1(this,u(n,87),null),s&&s.Fi();return;case 10:nE(this,je(Re(n)));return;case 11:sE(this,je(Re(n)));return;case 12:rE(this,je(Re(n)));return;case 13:Xbt(this,Br(n));return;case 15:iE(this,je(Re(n)));return;case 16:aE(this,je(Re(n)));return;case 18:Rit(this,je(Re(n)));return}fh(this,e-Zn((dn(),t3)),yn((r=u(In(this,16),26),r||t3),e),n)},l.zh=function(){return dn(),t3},l.Bh=function(e){var n,r;switch(e){case 0:!this.Ab&&(this.Ab=new he(Zr,this,0,3)),xr(this.Ab);return;case 1:Et(this.Cb,88)&&hy(rl(u(this.Cb,88)),4),Xc(this,null);return;case 2:Ng(this,!0);return;case 3:Pg(this,!0);return;case 4:Ig(this,0);return;case 5:this.b=0,ty(this,1);return;case 8:f2(this,null);return;case 9:r=O1(this,null,null),r&&r.Fi();return;case 10:nE(this,!0);return;case 11:sE(this,!1);return;case 12:rE(this,!1);return;case 13:this.i=null,ez(this,null);return;case 15:iE(this,!1);return;case 16:aE(this,!1);return;case 18:Rit(this,!1);return}lh(this,e-Zn((dn(),t3)),yn((n=u(In(this,16),26),n||t3),e))},l.Gh=function(){dit(this),k8(Eo((Ru(),ma),this)),Lh(this),this.Bb|=1},l.$j=function(){return e5t(this)},l.nk=function(e,n){return this.b=0,this.a=null,Kyt(this,e,n)},l.ok=function(e){lHt(this,e)},l.Ib=function(){var e;return this.Db&64?pq(this):(e=new Th(pq(this)),e.a+=" (iD: ",kg(e,(this.Bb&dc)!=0),e.a+=")",e.a)},l.b=0,P(Mn,"EAttributeImpl",322),I(351,438,{105:1,92:1,90:1,138:1,147:1,191:1,56:1,108:1,49:1,97:1,351:1,150:1,114:1,115:1,676:1}),l.uk=function(e){return e.Tg()==this},l.Qg=function(e){return wst(this,e)},l.Rg=function(e,n){this.w=null,this.Db=n<<16|this.Db&255,this.Cb=e},l._g=function(e,n,r){var s;switch(e){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),this.Ab;case 1:return this.zb;case 2:return this.D!=null?this.D:this.B;case 3:return cw(this);case 4:return this.zj();case 5:return this.F;case 6:return n?Fl(this):C8(this);case 7:return!this.A&&(this.A=new Ou(lu,this,7)),this.A}return oh(this,e-Zn(this.zh()),yn((s=u(In(this,16),26),s||this.zh()),e),n,r)},l.hh=function(e,n,r){var s,o,h;switch(n){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),Qc(this.Ab,e,r);case 6:return this.Cb&&(r=(o=this.Db>>16,o>=0?wst(this,r):this.Cb.ih(this,-1-o,null,r))),zl(this,e,6,r)}return h=u(yn((s=u(In(this,16),26),s||this.zh()),n),66),h.Nj().Qj(this,iu(this),n-Zn(this.zh()),e,r)},l.jh=function(e,n,r){var s,o;switch(n){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),Ba(this.Ab,e,r);case 6:return zl(this,null,6,r);case 7:return!this.A&&(this.A=new Ou(lu,this,7)),Ba(this.A,e,r)}return o=u(yn((s=u(In(this,16),26),s||this.zh()),n),66),o.Nj().Rj(this,iu(this),n-Zn(this.zh()),e,r)},l.lh=function(e){var n;switch(e){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.D!=null&&this.D==this.F;case 3:return!!cw(this);case 4:return this.zj()!=null;case 5:return this.F!=null&&this.F!=this.D&&this.F!=this.B;case 6:return!!C8(this);case 7:return!!this.A&&this.A.i!=0}return sh(this,e-Zn(this.zh()),yn((n=u(In(this,16),26),n||this.zh()),e))},l.sh=function(e,n){var r;switch(e){case 0:!this.Ab&&(this.Ab=new he(Zr,this,0,3)),xr(this.Ab),!this.Ab&&(this.Ab=new he(Zr,this,0,3)),rs(this.Ab,u(n,14));return;case 1:p$(this,Br(n));return;case 2:Ket(this,Br(n));return;case 5:CE(this,Br(n));return;case 7:!this.A&&(this.A=new Ou(lu,this,7)),xr(this.A),!this.A&&(this.A=new Ou(lu,this,7)),rs(this.A,u(n,14));return}fh(this,e-Zn(this.zh()),yn((r=u(In(this,16),26),r||this.zh()),e),n)},l.zh=function(){return dn(),Y4e},l.Bh=function(e){var n;switch(e){case 0:!this.Ab&&(this.Ab=new he(Zr,this,0,3)),xr(this.Ab);return;case 1:Et(this.Cb,179)&&(u(this.Cb,179).tb=null),Xc(this,null);return;case 2:Z8(this,null),$8(this,this.D);return;case 5:CE(this,null);return;case 7:!this.A&&(this.A=new Ou(lu,this,7)),xr(this.A);return}lh(this,e-Zn(this.zh()),yn((n=u(In(this,16),26),n||this.zh()),e))},l.yj=function(){var e;return this.G==-1&&(this.G=(e=Fl(this),e?Fg(e.Mh(),this):-1)),this.G},l.zj=function(){return null},l.Aj=function(){return Fl(this)},l.vk=function(){return this.v},l.Bj=function(){return cw(this)},l.Cj=function(){return this.D!=null?this.D:this.B},l.Dj=function(){return this.F},l.wj=function(e){return lat(this,e)},l.wk=function(e){this.v=e},l.xk=function(e){cne(this,e)},l.yk=function(e){this.C=e},l.Lh=function(e){p$(this,e)},l.Ib=function(){return Sz(this)},l.C=null,l.D=null,l.G=-1,P(Mn,"EClassifierImpl",351),I(88,351,{105:1,92:1,90:1,26:1,138:1,147:1,191:1,56:1,108:1,49:1,97:1,88:1,351:1,150:1,473:1,114:1,115:1,676:1},XL),l.uk=function(e){return qQe(this,e.Tg())},l._g=function(e,n,r){var s;switch(e){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),this.Ab;case 1:return this.zb;case 2:return this.D!=null?this.D:this.B;case 3:return cw(this);case 4:return null;case 5:return this.F;case 6:return n?Fl(this):C8(this);case 7:return!this.A&&(this.A=new Ou(lu,this,7)),this.A;case 8:return Fn(),!!(this.Bb&256);case 9:return Fn(),!!(this.Bb&512);case 10:return So(this);case 11:return!this.q&&(this.q=new he(Vh,this,11,10)),this.q;case 12:return k4(this);case 13:return k_(this);case 14:return k_(this),this.r;case 15:return k4(this),this.k;case 16:return V4t(this);case 17:return pat(this);case 18:return pd(this);case 19:return cq(this);case 20:return k4(this),this.o;case 21:return!this.s&&(this.s=new he(Au,this,21,17)),this.s;case 22:return Lc(this);case 23:return tat(this)}return oh(this,e-Zn((dn(),Cb)),yn((s=u(In(this,16),26),s||Cb),e),n,r)},l.hh=function(e,n,r){var s,o,h;switch(n){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),Qc(this.Ab,e,r);case 6:return this.Cb&&(r=(o=this.Db>>16,o>=0?wst(this,r):this.Cb.ih(this,-1-o,null,r))),zl(this,e,6,r);case 11:return!this.q&&(this.q=new he(Vh,this,11,10)),Qc(this.q,e,r);case 21:return!this.s&&(this.s=new he(Au,this,21,17)),Qc(this.s,e,r)}return h=u(yn((s=u(In(this,16),26),s||(dn(),Cb)),n),66),h.Nj().Qj(this,iu(this),n-Zn((dn(),Cb)),e,r)},l.jh=function(e,n,r){var s,o;switch(n){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),Ba(this.Ab,e,r);case 6:return zl(this,null,6,r);case 7:return!this.A&&(this.A=new Ou(lu,this,7)),Ba(this.A,e,r);case 11:return!this.q&&(this.q=new he(Vh,this,11,10)),Ba(this.q,e,r);case 21:return!this.s&&(this.s=new he(Au,this,21,17)),Ba(this.s,e,r);case 22:return Ba(Lc(this),e,r)}return o=u(yn((s=u(In(this,16),26),s||(dn(),Cb)),n),66),o.Nj().Rj(this,iu(this),n-Zn((dn(),Cb)),e,r)},l.lh=function(e){var n;switch(e){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.D!=null&&this.D==this.F;case 3:return!!cw(this);case 4:return!1;case 5:return this.F!=null&&this.F!=this.D&&this.F!=this.B;case 6:return!!C8(this);case 7:return!!this.A&&this.A.i!=0;case 8:return(this.Bb&256)!=0;case 9:return(this.Bb&512)!=0;case 10:return!!this.u&&Lc(this.u.a).i!=0&&!(this.n&&ost(this.n));case 11:return!!this.q&&this.q.i!=0;case 12:return k4(this).i!=0;case 13:return k_(this).i!=0;case 14:return k_(this),this.r.i!=0;case 15:return k4(this),this.k.i!=0;case 16:return V4t(this).i!=0;case 17:return pat(this).i!=0;case 18:return pd(this).i!=0;case 19:return cq(this).i!=0;case 20:return k4(this),!!this.o;case 21:return!!this.s&&this.s.i!=0;case 22:return!!this.n&&ost(this.n);case 23:return tat(this).i!=0}return sh(this,e-Zn((dn(),Cb)),yn((n=u(In(this,16),26),n||Cb),e))},l.oh=function(e){var n;return n=this.i==null||this.q&&this.q.i!=0?null:gD(this,e),n||kxt(this,e)},l.sh=function(e,n){var r;switch(e){case 0:!this.Ab&&(this.Ab=new he(Zr,this,0,3)),xr(this.Ab),!this.Ab&&(this.Ab=new he(Zr,this,0,3)),rs(this.Ab,u(n,14));return;case 1:p$(this,Br(n));return;case 2:Ket(this,Br(n));return;case 5:CE(this,Br(n));return;case 7:!this.A&&(this.A=new Ou(lu,this,7)),xr(this.A),!this.A&&(this.A=new Ou(lu,this,7)),rs(this.A,u(n,14));return;case 8:Xyt(this,je(Re(n)));return;case 9:Qyt(this,je(Re(n)));return;case 10:C_(So(this)),rs(So(this),u(n,14));return;case 11:!this.q&&(this.q=new he(Vh,this,11,10)),xr(this.q),!this.q&&(this.q=new he(Vh,this,11,10)),rs(this.q,u(n,14));return;case 21:!this.s&&(this.s=new he(Au,this,21,17)),xr(this.s),!this.s&&(this.s=new he(Au,this,21,17)),rs(this.s,u(n,14));return;case 22:xr(Lc(this)),rs(Lc(this),u(n,14));return}fh(this,e-Zn((dn(),Cb)),yn((r=u(In(this,16),26),r||Cb),e),n)},l.zh=function(){return dn(),Cb},l.Bh=function(e){var n;switch(e){case 0:!this.Ab&&(this.Ab=new he(Zr,this,0,3)),xr(this.Ab);return;case 1:Et(this.Cb,179)&&(u(this.Cb,179).tb=null),Xc(this,null);return;case 2:Z8(this,null),$8(this,this.D);return;case 5:CE(this,null);return;case 7:!this.A&&(this.A=new Ou(lu,this,7)),xr(this.A);return;case 8:Xyt(this,!1);return;case 9:Qyt(this,!1);return;case 10:this.u&&C_(this.u);return;case 11:!this.q&&(this.q=new he(Vh,this,11,10)),xr(this.q);return;case 21:!this.s&&(this.s=new he(Au,this,21,17)),xr(this.s);return;case 22:this.n&&xr(this.n);return}lh(this,e-Zn((dn(),Cb)),yn((n=u(In(this,16),26),n||Cb),e))},l.Gh=function(){var e,n;if(k4(this),k_(this),V4t(this),pat(this),pd(this),cq(this),tat(this),RC(stn(rl(this))),this.s)for(e=0,n=this.s.i;e<n;++e)FM(St(this.s,e));if(this.q)for(e=0,n=this.q.i;e<n;++e)FM(St(this.q,e));Og((Ru(),ma),this).ne(),this.Bb|=1},l.Ib=function(){return d4t(this)},l.k=null,l.r=null;var aA,s5e,_ft;P(Mn,"EClassImpl",88),I(1994,1993,T0e),l.Vh=function(e,n){return hat(this,e,n)},l.Wh=function(e){return hat(this,this.i,e)},l.Xh=function(e,n){a5t(this,e,n)},l.Yh=function(e){Hst(this,e)},l.lk=function(e,n){return Qc(this,e,n)},l.pi=function(e){return Amt(this,e)},l.mk=function(e,n){return Ba(this,e,n)},l.mi=function(e,n){return wle(this,e,n)},l.Zh=function(){return new Mx(this)},l.$h=function(){return new PM(this)},l._h=function(e){return _I(this,e)},P($i,"NotifyingInternalEListImpl",1994),I(622,1994,zo),l.Hc=function(e){return Fle(this,e)},l.Zi=function(e,n,r,s,o){return DC(this,e,n,r,s,o)},l.$i=function(e){Kk(this,e)},l.Wj=function(e){return this},l.ak=function(){return yn(this.e.Tg(),this.aj())},l._i=function(){return this.ak()},l.aj=function(){return Vi(this.e.Tg(),this.ak())},l.zk=function(){return u(this.ak().Yj(),26).Bj()},l.Ak=function(){return no(u(this.ak(),18)).n},l.Ai=function(){return this.e},l.Bk=function(){return!0},l.Ck=function(){return!1},l.Dk=function(){return!1},l.Ek=function(){return!1},l.Xc=function(e){return Fg(this,e)},l.cj=function(e,n){var r;return r=u(e,49),this.Dk()?this.Bk()?r.gh(this.e,this.Ak(),this.zk(),n):r.gh(this.e,Vi(r.Tg(),no(u(this.ak(),18))),null,n):r.gh(this.e,-1-this.aj(),null,n)},l.dj=function(e,n){var r;return r=u(e,49),this.Dk()?this.Bk()?r.ih(this.e,this.Ak(),this.zk(),n):r.ih(this.e,Vi(r.Tg(),no(u(this.ak(),18))),null,n):r.ih(this.e,-1-this.aj(),null,n)},l.rk=function(){return!1},l.Fk=function(){return!0},l.wj=function(e){return DZt(this.d,e)},l.ej=function(){return ml(this.e)},l.fj=function(){return this.i!=0},l.ri=function(e){return CI(this.d,e)},l.li=function(e,n){return this.Fk()&&this.Ek()?o6(this,e,u(n,56)):n},l.Gk=function(e){return e.kh()?Kp(this.e,u(e,49)):e},l.Wb=function(e){IUt(this,e)},l.Pc=function(){return bte(this)},l.Qc=function(e){var n;if(this.Ek())for(n=this.i-1;n>=0;--n)St(this,n);return m3t(this,e)},l.Xj=function(){xr(this)},l.oi=function(e,n){return Iee(this,e,n)},P($i,"EcoreEList",622),I(496,622,zo,WM),l.ai=function(){return!1},l.aj=function(){return this.c},l.bj=function(){return!1},l.Fk=function(){return!0},l.hi=function(){return!0},l.li=function(e,n){return n},l.ni=function(){return!1},l.c=0,P($i,"EObjectEList",496),I(85,496,zo,Ss),l.bj=function(){return!0},l.Dk=function(){return!1},l.rk=function(){return!0},P($i,"EObjectContainmentEList",85),I(545,85,zo,hj),l.ci=function(){this.b=!0},l.fj=function(){return this.b},l.Xj=function(){var e;xr(this),ml(this.e)?(e=this.b,this.b=!1,mi(this.e,new df(this.e,2,this.c,e,!1))):this.b=!1},l.b=!1,P($i,"EObjectContainmentEList/Unsettable",545),I(1140,545,zo,vYt),l.ii=function(e,n){var r,s;return r=u(t_(this,e,n),87),ml(this.e)&&Kk(this,new gI(this.a,7,(dn(),X4e),de(n),(s=r.c,Et(s,88)?u(s,26):Wh),e)),r},l.jj=function(e,n){return Wln(this,u(e,87),n)},l.kj=function(e,n){return Uln(this,u(e,87),n)},l.lj=function(e,n,r){return K1n(this,u(e,87),u(n,87),r)},l.Zi=function(e,n,r,s,o){switch(e){case 3:return DC(this,e,n,r,s,this.i>1);case 5:return DC(this,e,n,r,s,this.i-u(r,15).gc()>0);default:return new F0(this.e,e,this.c,n,r,s,!0)}},l.ij=function(){return!0},l.fj=function(){return ost(this)},l.Xj=function(){xr(this)},P(Mn,"EClassImpl/1",1140),I(1154,1153,M8t),l.ui=function(e){var n,r,s,o,h,d,w;if(r=e.xi(),r!=8){if(s=Mhn(e),s==0)switch(r){case 1:case 9:{w=e.Bi(),w!=null&&(n=rl(u(w,473)),!n.c&&(n.c=new xm),j$(n.c,e.Ai())),d=e.zi(),d!=null&&(o=u(d,473),o.Bb&1||(n=rl(o),!n.c&&(n.c=new xm),Mr(n.c,u(e.Ai(),26))));break}case 3:{d=e.zi(),d!=null&&(o=u(d,473),o.Bb&1||(n=rl(o),!n.c&&(n.c=new xm),Mr(n.c,u(e.Ai(),26))));break}case 5:{if(d=e.zi(),d!=null)for(h=u(d,14).Kc();h.Ob();)o=u(h.Pb(),473),o.Bb&1||(n=rl(o),!n.c&&(n.c=new xm),Mr(n.c,u(e.Ai(),26)));break}case 4:{w=e.Bi(),w!=null&&(o=u(w,473),o.Bb&1||(n=rl(o),!n.c&&(n.c=new xm),j$(n.c,e.Ai())));break}case 6:{if(w=e.Bi(),w!=null)for(h=u(w,14).Kc();h.Ob();)o=u(h.Pb(),473),o.Bb&1||(n=rl(o),!n.c&&(n.c=new xm),j$(n.c,e.Ai()));break}}this.Hk(s)}},l.Hk=function(e){bue(this,e)},l.b=63,P(Mn,"ESuperAdapter",1154),I(1155,1154,M8t,Lzt),l.Hk=function(e){hy(this,e)},P(Mn,"EClassImpl/10",1155),I(1144,696,zo),l.Vh=function(e,n){return Lst(this,e,n)},l.Wh=function(e){return fse(this,e)},l.Xh=function(e,n){zI(this,e,n)},l.Yh=function(e){uI(this,e)},l.pi=function(e){return Amt(this,e)},l.mi=function(e,n){return Krt(this,e,n)},l.lk=function(e,n){throw rt(new Or)},l.Zh=function(){return new Mx(this)},l.$h=function(){return new PM(this)},l._h=function(e){return _I(this,e)},l.mk=function(e,n){throw rt(new Or)},l.Wj=function(e){return this},l.fj=function(){return this.i!=0},l.Wb=function(e){throw rt(new Or)},l.Xj=function(){throw rt(new Or)},P($i,"EcoreEList/UnmodifiableEList",1144),I(319,1144,zo,q3),l.ni=function(){return!1},P($i,"EcoreEList/UnmodifiableEList/FastCompare",319),I(1147,319,zo,tre),l.Xc=function(e){var n,r,s;if(Et(e,170)&&(n=u(e,170),r=n.aj(),r!=-1)){for(s=this.i;r<s;++r)if(Gt(this.g[r])===Gt(e))return r}return-1},P(Mn,"EClassImpl/1EAllStructuralFeaturesList",1147),I(1141,497,_d,nx),l.ri=function(e){return Pt(ho,C0e,87,e,0,1)},l.ni=function(){return!1},P(Mn,"EClassImpl/1EGenericSuperTypeEList",1141),I(623,497,_d,qb),l.ri=function(e){return Pt(Au,P4,170,e,0,1)},l.ni=function(){return!1},P(Mn,"EClassImpl/1EStructuralFeatureUniqueEList",623),I(741,497,_d,C0),l.ri=function(e){return Pt(Jy,P4,18,e,0,1)},l.ni=function(){return!1},P(Mn,"EClassImpl/1ReferenceList",741),I(1142,497,_d,Mzt),l.bi=function(e,n){Xtn(this,u(n,34))},l.ri=function(e){return Pt(Zy,P4,34,e,0,1)},l.ni=function(){return!1},P(Mn,"EClassImpl/2",1142),I(1143,497,_d,mp),l.ri=function(e){return Pt(Zy,P4,34,e,0,1)},l.ni=function(){return!1},P(Mn,"EClassImpl/3",1143),I(1145,319,zo,NKt),l.Fc=function(e){return JJe(this,u(e,34))},l.Yh=function(e){oYe(this,u(e,34))},P(Mn,"EClassImpl/4",1145),I(1146,319,zo,PKt),l.Fc=function(e){return ttn(this,u(e,18))},l.Yh=function(e){cYe(this,u(e,18))},P(Mn,"EClassImpl/5",1146),I(1148,497,_d,S3),l.ri=function(e){return Pt(Vh,O8t,59,e,0,1)},l.ni=function(){return!1},P(Mn,"EClassImpl/6",1148),I(1149,497,_d,Sk),l.ri=function(e){return Pt(Jy,P4,18,e,0,1)},l.ni=function(){return!1},P(Mn,"EClassImpl/7",1149),I(1997,1996,{3:1,4:1,20:1,28:1,52:1,14:1,15:1,67:1,58:1,69:1}),l.Vh=function(e,n){return Z5t(this,e,n)},l.Wh=function(e){return Z5t(this,this.Vi(),e)},l.Xh=function(e,n){Yoe(this,e,n)},l.Yh=function(e){$oe(this,e)},l.lk=function(e,n){return bfn(this,e,n)},l.mk=function(e,n){return $hn(this,e,n)},l.mi=function(e,n){return rle(this,e,n)},l.pi=function(e){return this.Oi(e)},l.Zh=function(){return new Mx(this)},l.Gi=function(){return this.Ji()},l.$h=function(){return new PM(this)},l._h=function(e){return _I(this,e)},P($i,"DelegatingNotifyingInternalEListImpl",1997),I(742,1997,N8t),l.ai=function(){var e;return e=yn(bu(this.b),this.aj()).Yj(),Et(e,148)&&!Et(e,457)&&(e.Bj().i&1)==0},l.Hc=function(e){var n,r,s,o,h,d,w,k;if(this.Fk()){if(k=this.Vi(),k>4)if(this.wj(e)){if(this.rk()){if(s=u(e,49),r=s.Ug(),w=r==this.b&&(this.Dk()?s.Og(s.Vg(),u(yn(bu(this.b),this.aj()).Yj(),26).Bj())==no(u(yn(bu(this.b),this.aj()),18)).n:-1-s.Vg()==this.aj()),this.Ek()&&!w&&!r&&s.Zg()){for(o=0;o<k;++o)if(n=Fnt(this,this.Oi(o)),Gt(n)===Gt(e))return!0}return w}else if(this.Dk()&&!this.Ck()){if(h=u(e,56).ah(no(u(yn(bu(this.b),this.aj()),18))),Gt(h)===Gt(this.b))return!0;if(h==null||!u(h,56).kh())return!1}}else return!1;if(d=this.Li(e),this.Ek()&&!d){for(o=0;o<k;++o)if(s=Fnt(this,this.Oi(o)),Gt(s)===Gt(e))return!0}return d}else return this.Li(e)},l.Zi=function(e,n,r,s,o){return new F0(this.b,e,this.aj(),n,r,s,o)},l.$i=function(e){mi(this.b,e)},l.Wj=function(e){return this},l._i=function(){return yn(bu(this.b),this.aj())},l.aj=function(){return Vi(bu(this.b),yn(bu(this.b),this.aj()))},l.Ai=function(){return this.b},l.Bk=function(){return!!yn(bu(this.b),this.aj()).Yj().Bj()},l.bj=function(){var e,n;return n=yn(bu(this.b),this.aj()),Et(n,99)?(e=u(n,18),(e.Bb&dc)!=0||!!no(u(n,18))):!1},l.Ck=function(){var e,n,r,s;return n=yn(bu(this.b),this.aj()),Et(n,99)?(e=u(n,18),r=no(e),!!r&&(s=r.t,s>1||s==-1)):!1},l.Dk=function(){var e,n,r;return n=yn(bu(this.b),this.aj()),Et(n,99)?(e=u(n,18),r=no(e),!!r):!1},l.Ek=function(){var e,n;return n=yn(bu(this.b),this.aj()),Et(n,99)?(e=u(n,18),(e.Bb&Ya)!=0):!1},l.Xc=function(e){var n,r,s,o;if(s=this.Qi(e),s>=0)return s;if(this.Fk()){for(r=0,o=this.Vi();r<o;++r)if(n=Fnt(this,this.Oi(r)),Gt(n)===Gt(e))return r}return-1},l.cj=function(e,n){var r;return r=u(e,49),this.Dk()?this.Bk()?r.gh(this.b,no(u(yn(bu(this.b),this.aj()),18)).n,u(yn(bu(this.b),this.aj()).Yj(),26).Bj(),n):r.gh(this.b,Vi(r.Tg(),no(u(yn(bu(this.b),this.aj()),18))),null,n):r.gh(this.b,-1-this.aj(),null,n)},l.dj=function(e,n){var r;return r=u(e,49),this.Dk()?this.Bk()?r.ih(this.b,no(u(yn(bu(this.b),this.aj()),18)).n,u(yn(bu(this.b),this.aj()).Yj(),26).Bj(),n):r.ih(this.b,Vi(r.Tg(),no(u(yn(bu(this.b),this.aj()),18))),null,n):r.ih(this.b,-1-this.aj(),null,n)},l.rk=function(){var e,n;return n=yn(bu(this.b),this.aj()),Et(n,99)?(e=u(n,18),(e.Bb&dc)!=0):!1},l.Fk=function(){return Et(yn(bu(this.b),this.aj()).Yj(),88)},l.wj=function(e){return yn(bu(this.b),this.aj()).Yj().wj(e)},l.ej=function(){return ml(this.b)},l.fj=function(){return!this.Ri()},l.hi=function(){return yn(bu(this.b),this.aj()).hi()},l.li=function(e,n){return ED(this,e,n)},l.Wb=function(e){C_(this),rs(this,u(e,15))},l.Pc=function(){var e;if(this.Ek())for(e=this.Vi()-1;e>=0;--e)ED(this,e,this.Oi(e));return this.Wi()},l.Qc=function(e){var n;if(this.Ek())for(n=this.Vi()-1;n>=0;--n)ED(this,n,this.Oi(n));return this.Xi(e)},l.Xj=function(){C_(this)},l.oi=function(e,n){return pte(this,e,n)},P($i,"DelegatingEcoreEList",742),I(1150,742,N8t,DWt),l.Hi=function(e,n){bQe(this,e,u(n,26))},l.Ii=function(e){lXe(this,u(e,26))},l.Oi=function(e){var n,r;return n=u(St(Lc(this.a),e),87),r=n.c,Et(r,88)?u(r,26):(dn(),Wh)},l.Ti=function(e){var n,r;return n=u(dy(Lc(this.a),e),87),r=n.c,Et(r,88)?u(r,26):(dn(),Wh)},l.Ui=function(e,n){return vfn(this,e,u(n,26))},l.ai=function(){return!1},l.Zi=function(e,n,r,s,o){return null},l.Ji=function(){return new Izt(this)},l.Ki=function(){xr(Lc(this.a))},l.Li=function(e){return Vre(this,e)},l.Mi=function(e){var n,r;for(r=e.Kc();r.Ob();)if(n=r.Pb(),!Vre(this,n))return!1;return!0},l.Ni=function(e){var n,r,s;if(Et(e,15)&&(s=u(e,15),s.gc()==Lc(this.a).i)){for(n=s.Kc(),r=new er(this);n.Ob();)if(Gt(n.Pb())!==Gt(dr(r)))return!1;return!0}return!1},l.Pi=function(){var e,n,r,s,o;for(r=1,n=new er(Lc(this.a));n.e!=n.i.gc();)e=u(dr(n),87),s=(o=e.c,Et(o,88)?u(o,26):(dn(),Wh)),r=31*r+(s?Iv(s):0);return r},l.Qi=function(e){var n,r,s,o;for(s=0,r=new er(Lc(this.a));r.e!=r.i.gc();){if(n=u(dr(r),87),Gt(e)===Gt((o=n.c,Et(o,88)?u(o,26):(dn(),Wh))))return s;++s}return-1},l.Ri=function(){return Lc(this.a).i==0},l.Si=function(){return null},l.Vi=function(){return Lc(this.a).i},l.Wi=function(){var e,n,r,s,o,h;for(h=Lc(this.a).i,o=Pt(Xn,Ie,1,h,5,1),r=0,n=new er(Lc(this.a));n.e!=n.i.gc();)e=u(dr(n),87),o[r++]=(s=e.c,Et(s,88)?u(s,26):(dn(),Wh));return o},l.Xi=function(e){var n,r,s,o,h,d,w;for(w=Lc(this.a).i,e.length<w&&(o=CI(sl(e).c,w),e=o),e.length>w&&Ji(e,w,null),s=0,r=new er(Lc(this.a));r.e!=r.i.gc();)n=u(dr(r),87),h=(d=n.c,Et(d,88)?u(d,26):(dn(),Wh)),Ji(e,s++,h);return e},l.Yi=function(){var e,n,r,s,o;for(o=new xg,o.a+="[",e=Lc(this.a),n=0,s=Lc(this.a).i;n<s;)fo(o,dC((r=u(St(e,n),87).c,Et(r,88)?u(r,26):(dn(),Wh)))),++n<s&&(o.a+=Ka);return o.a+="]",o.a},l.$i=function(e){},l.aj=function(){return 10},l.Bk=function(){return!0},l.bj=function(){return!1},l.Ck=function(){return!1},l.Dk=function(){return!1},l.Ek=function(){return!0},l.rk=function(){return!1},l.Fk=function(){return!0},l.wj=function(e){return Et(e,88)},l.fj=function(){return bin(this.a)},l.hi=function(){return!0},l.ni=function(){return!0},P(Mn,"EClassImpl/8",1150),I(1151,1964,IE,Izt),l.Zc=function(e){return _I(this.a,e)},l.gc=function(){return Lc(this.a.a).i},P(Mn,"EClassImpl/8/1",1151),I(1152,497,_d,QT),l.ri=function(e){return Pt(i1,Ie,138,e,0,1)},l.ni=function(){return!1},P(Mn,"EClassImpl/9",1152),I(1139,53,Bxt,kqt),P(Mn,"EClassImpl/MyHashSet",1139),I(566,351,{105:1,92:1,90:1,138:1,148:1,834:1,147:1,191:1,56:1,108:1,49:1,97:1,351:1,150:1,114:1,115:1,676:1},lR),l._g=function(e,n,r){var s;switch(e){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),this.Ab;case 1:return this.zb;case 2:return this.D!=null?this.D:this.B;case 3:return cw(this);case 4:return this.zj();case 5:return this.F;case 6:return n?Fl(this):C8(this);case 7:return!this.A&&(this.A=new Ou(lu,this,7)),this.A;case 8:return Fn(),!!(this.Bb&256)}return oh(this,e-Zn(this.zh()),yn((s=u(In(this,16),26),s||this.zh()),e),n,r)},l.lh=function(e){var n;switch(e){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.D!=null&&this.D==this.F;case 3:return!!cw(this);case 4:return this.zj()!=null;case 5:return this.F!=null&&this.F!=this.D&&this.F!=this.B;case 6:return!!C8(this);case 7:return!!this.A&&this.A.i!=0;case 8:return(this.Bb&256)==0}return sh(this,e-Zn(this.zh()),yn((n=u(In(this,16),26),n||this.zh()),e))},l.sh=function(e,n){var r;switch(e){case 0:!this.Ab&&(this.Ab=new he(Zr,this,0,3)),xr(this.Ab),!this.Ab&&(this.Ab=new he(Zr,this,0,3)),rs(this.Ab,u(n,14));return;case 1:p$(this,Br(n));return;case 2:Ket(this,Br(n));return;case 5:CE(this,Br(n));return;case 7:!this.A&&(this.A=new Ou(lu,this,7)),xr(this.A),!this.A&&(this.A=new Ou(lu,this,7)),rs(this.A,u(n,14));return;case 8:xz(this,je(Re(n)));return}fh(this,e-Zn(this.zh()),yn((r=u(In(this,16),26),r||this.zh()),e),n)},l.zh=function(){return dn(),Q4e},l.Bh=function(e){var n;switch(e){case 0:!this.Ab&&(this.Ab=new he(Zr,this,0,3)),xr(this.Ab);return;case 1:Et(this.Cb,179)&&(u(this.Cb,179).tb=null),Xc(this,null);return;case 2:Z8(this,null),$8(this,this.D);return;case 5:CE(this,null);return;case 7:!this.A&&(this.A=new Ou(lu,this,7)),xr(this.A);return;case 8:xz(this,!0);return}lh(this,e-Zn(this.zh()),yn((n=u(In(this,16),26),n||this.zh()),e))},l.Gh=function(){Og((Ru(),ma),this).ne(),this.Bb|=1},l.Fj=function(){var e,n,r;if(!this.c&&(e=vce(Fl(this)),!e.dc()))for(r=e.Kc();r.Ob();)n=Br(r.Pb()),m_(this,n)&&Zun(this);return this.b},l.zj=function(){var e;if(!this.e){e=null;try{e=cw(this)}catch(n){if(n=Wi(n),!Et(n,102))throw rt(n)}this.d=null,e&&e.i&1&&(e==dl?this.d=(Fn(),I2):e==Tr?this.d=de(0):e==r3?this.d=new D3(0):e==ia?this.d=0:e==Lb?this.d=g2(0):e==f5?this.d=eE(0):e==Hu?this.d=EI(0):this.d=DI(0)),this.e=!0}return this.d},l.Ej=function(){return(this.Bb&256)!=0},l.Ik=function(e){e&&(this.D="org.eclipse.emf.common.util.AbstractEnumerator")},l.xk=function(e){cne(this,e),this.Ik(e)},l.yk=function(e){this.C=e,this.e=!1},l.Ib=function(){var e;return this.Db&64?Sz(this):(e=new Th(Sz(this)),e.a+=" (serializable: ",kg(e,(this.Bb&256)!=0),e.a+=")",e.a)},l.c=!1,l.d=null,l.e=!1,P(Mn,"EDataTypeImpl",566),I(457,566,{105:1,92:1,90:1,138:1,148:1,834:1,671:1,147:1,191:1,56:1,108:1,49:1,97:1,351:1,457:1,150:1,114:1,115:1,676:1},Eqt),l._g=function(e,n,r){var s;switch(e){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),this.Ab;case 1:return this.zb;case 2:return this.D!=null?this.D:this.B;case 3:return cw(this);case 4:return Fyt(this);case 5:return this.F;case 6:return n?Fl(this):C8(this);case 7:return!this.A&&(this.A=new Ou(lu,this,7)),this.A;case 8:return Fn(),!!(this.Bb&256);case 9:return!this.a&&(this.a=new he(eg,this,9,5)),this.a}return oh(this,e-Zn((dn(),_b)),yn((s=u(In(this,16),26),s||_b),e),n,r)},l.hh=function(e,n,r){var s,o,h;switch(n){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),Qc(this.Ab,e,r);case 6:return this.Cb&&(r=(o=this.Db>>16,o>=0?wst(this,r):this.Cb.ih(this,-1-o,null,r))),zl(this,e,6,r);case 9:return!this.a&&(this.a=new he(eg,this,9,5)),Qc(this.a,e,r)}return h=u(yn((s=u(In(this,16),26),s||(dn(),_b)),n),66),h.Nj().Qj(this,iu(this),n-Zn((dn(),_b)),e,r)},l.jh=function(e,n,r){var s,o;switch(n){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),Ba(this.Ab,e,r);case 6:return zl(this,null,6,r);case 7:return!this.A&&(this.A=new Ou(lu,this,7)),Ba(this.A,e,r);case 9:return!this.a&&(this.a=new he(eg,this,9,5)),Ba(this.a,e,r)}return o=u(yn((s=u(In(this,16),26),s||(dn(),_b)),n),66),o.Nj().Rj(this,iu(this),n-Zn((dn(),_b)),e,r)},l.lh=function(e){var n;switch(e){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.D!=null&&this.D==this.F;case 3:return!!cw(this);case 4:return!!Fyt(this);case 5:return this.F!=null&&this.F!=this.D&&this.F!=this.B;case 6:return!!C8(this);case 7:return!!this.A&&this.A.i!=0;case 8:return(this.Bb&256)==0;case 9:return!!this.a&&this.a.i!=0}return sh(this,e-Zn((dn(),_b)),yn((n=u(In(this,16),26),n||_b),e))},l.sh=function(e,n){var r;switch(e){case 0:!this.Ab&&(this.Ab=new he(Zr,this,0,3)),xr(this.Ab),!this.Ab&&(this.Ab=new he(Zr,this,0,3)),rs(this.Ab,u(n,14));return;case 1:p$(this,Br(n));return;case 2:Ket(this,Br(n));return;case 5:CE(this,Br(n));return;case 7:!this.A&&(this.A=new Ou(lu,this,7)),xr(this.A),!this.A&&(this.A=new Ou(lu,this,7)),rs(this.A,u(n,14));return;case 8:xz(this,je(Re(n)));return;case 9:!this.a&&(this.a=new he(eg,this,9,5)),xr(this.a),!this.a&&(this.a=new he(eg,this,9,5)),rs(this.a,u(n,14));return}fh(this,e-Zn((dn(),_b)),yn((r=u(In(this,16),26),r||_b),e),n)},l.zh=function(){return dn(),_b},l.Bh=function(e){var n;switch(e){case 0:!this.Ab&&(this.Ab=new he(Zr,this,0,3)),xr(this.Ab);return;case 1:Et(this.Cb,179)&&(u(this.Cb,179).tb=null),Xc(this,null);return;case 2:Z8(this,null),$8(this,this.D);return;case 5:CE(this,null);return;case 7:!this.A&&(this.A=new Ou(lu,this,7)),xr(this.A);return;case 8:xz(this,!0);return;case 9:!this.a&&(this.a=new he(eg,this,9,5)),xr(this.a);return}lh(this,e-Zn((dn(),_b)),yn((n=u(In(this,16),26),n||_b),e))},l.Gh=function(){var e,n;if(this.a)for(e=0,n=this.a.i;e<n;++e)FM(St(this.a,e));Og((Ru(),ma),this).ne(),this.Bb|=1},l.zj=function(){return Fyt(this)},l.wj=function(e){return e!=null},l.Ik=function(e){},P(Mn,"EEnumImpl",457),I(573,438,{105:1,92:1,90:1,1940:1,678:1,147:1,191:1,56:1,108:1,49:1,97:1,573:1,150:1,114:1,115:1},Wzt),l.ne=function(){return this.zb},l.Qg=function(e){return Bse(this,e)},l._g=function(e,n,r){var s,o;switch(e){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),this.Ab;case 1:return this.zb;case 2:return de(this.d);case 3:return this.b?this.b:this.a;case 4:return o=this.c,o??this.zb;case 5:return this.Db>>16==5?u(this.Cb,671):null}return oh(this,e-Zn((dn(),tp)),yn((s=u(In(this,16),26),s||tp),e),n,r)},l.hh=function(e,n,r){var s,o,h;switch(n){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),Qc(this.Ab,e,r);case 5:return this.Cb&&(r=(o=this.Db>>16,o>=0?Bse(this,r):this.Cb.ih(this,-1-o,null,r))),zl(this,e,5,r)}return h=u(yn((s=u(In(this,16),26),s||(dn(),tp)),n),66),h.Nj().Qj(this,iu(this),n-Zn((dn(),tp)),e,r)},l.jh=function(e,n,r){var s,o;switch(n){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),Ba(this.Ab,e,r);case 5:return zl(this,null,5,r)}return o=u(yn((s=u(In(this,16),26),s||(dn(),tp)),n),66),o.Nj().Rj(this,iu(this),n-Zn((dn(),tp)),e,r)},l.lh=function(e){var n;switch(e){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.d!=0;case 3:return!!this.b;case 4:return this.c!=null;case 5:return!!(this.Db>>16==5&&u(this.Cb,671))}return sh(this,e-Zn((dn(),tp)),yn((n=u(In(this,16),26),n||tp),e))},l.sh=function(e,n){var r;switch(e){case 0:!this.Ab&&(this.Ab=new he(Zr,this,0,3)),xr(this.Ab),!this.Ab&&(this.Ab=new he(Zr,this,0,3)),rs(this.Ab,u(n,14));return;case 1:Xc(this,Br(n));return;case 2:tit(this,u(n,19).a);return;case 3:Doe(this,u(n,1940));return;case 4:nit(this,Br(n));return}fh(this,e-Zn((dn(),tp)),yn((r=u(In(this,16),26),r||tp),e),n)},l.zh=function(){return dn(),tp},l.Bh=function(e){var n;switch(e){case 0:!this.Ab&&(this.Ab=new he(Zr,this,0,3)),xr(this.Ab);return;case 1:Xc(this,null);return;case 2:tit(this,0);return;case 3:Doe(this,null);return;case 4:nit(this,null);return}lh(this,e-Zn((dn(),tp)),yn((n=u(In(this,16),26),n||tp),e))},l.Ib=function(){var e;return e=this.c,e??this.zb},l.b=null,l.c=null,l.d=0,P(Mn,"EEnumLiteralImpl",573);var kxn=Yi(Mn,"EFactoryImpl/InternalEDateTimeFormat");I(489,1,{2015:1},oM),P(Mn,"EFactoryImpl/1ClientInternalEDateTimeFormat",489),I(241,115,{105:1,92:1,90:1,87:1,56:1,108:1,49:1,97:1,241:1,114:1,115:1},wv),l.Sg=function(e,n,r){var s;return r=zl(this,e,n,r),this.e&&Et(e,170)&&(s=oq(this,this.e),s!=this.c&&(r=_E(this,s,r))),r},l._g=function(e,n,r){var s;switch(e){case 0:return this.f;case 1:return!this.d&&(this.d=new Ss(ho,this,1)),this.d;case 2:return n?wq(this):this.c;case 3:return this.b;case 4:return this.e;case 5:return n?lst(this):this.a}return oh(this,e-Zn((dn(),qw)),yn((s=u(In(this,16),26),s||qw),e),n,r)},l.jh=function(e,n,r){var s,o;switch(n){case 0:return Pre(this,null,r);case 1:return!this.d&&(this.d=new Ss(ho,this,1)),Ba(this.d,e,r);case 3:return Nre(this,null,r)}return o=u(yn((s=u(In(this,16),26),s||(dn(),qw)),n),66),o.Nj().Rj(this,iu(this),n-Zn((dn(),qw)),e,r)},l.lh=function(e){var n;switch(e){case 0:return!!this.f;case 1:return!!this.d&&this.d.i!=0;case 2:return!!this.c;case 3:return!!this.b;case 4:return!!this.e;case 5:return!!this.a}return sh(this,e-Zn((dn(),qw)),yn((n=u(In(this,16),26),n||qw),e))},l.sh=function(e,n){var r;switch(e){case 0:eae(this,u(n,87));return;case 1:!this.d&&(this.d=new Ss(ho,this,1)),xr(this.d),!this.d&&(this.d=new Ss(ho,this,1)),rs(this.d,u(n,14));return;case 3:p4t(this,u(n,87));return;case 4:D4t(this,u(n,836));return;case 5:P8(this,u(n,138));return}fh(this,e-Zn((dn(),qw)),yn((r=u(In(this,16),26),r||qw),e),n)},l.zh=function(){return dn(),qw},l.Bh=function(e){var n;switch(e){case 0:eae(this,null);return;case 1:!this.d&&(this.d=new Ss(ho,this,1)),xr(this.d);return;case 3:p4t(this,null);return;case 4:D4t(this,null);return;case 5:P8(this,null);return}lh(this,e-Zn((dn(),qw)),yn((n=u(In(this,16),26),n||qw),e))},l.Ib=function(){var e;return e=new Il(bf(this)),e.a+=" (expression: ",mat(this,e),e.a+=")",e.a};var tLt;P(Mn,"EGenericTypeImpl",241),I(1969,1964,CH),l.Xh=function(e,n){LWt(this,e,n)},l.lk=function(e,n){return LWt(this,this.gc(),e),n},l.pi=function(e){return Qf(this.Gi(),e)},l.Zh=function(){return this.$h()},l.Gi=function(){return new Pzt(this)},l.$h=function(){return this._h(0)},l._h=function(e){return this.Gi().Zc(e)},l.mk=function(e,n){return ry(this,e,!0),n},l.ii=function(e,n){var r,s;return s=yst(this,n),r=this.Zc(e),r.Rb(s),s},l.ji=function(e,n){var r;ry(this,n,!0),r=this.Zc(e),r.Rb(n)},P($i,"AbstractSequentialInternalEList",1969),I(486,1969,CH,NM),l.pi=function(e){return Qf(this.Gi(),e)},l.Zh=function(){return this.b==null?(Eg(),Eg(),hN):this.Jk()},l.Gi=function(){return new tUt(this.a,this.b)},l.$h=function(){return this.b==null?(Eg(),Eg(),hN):this.Jk()},l._h=function(e){var n,r;if(this.b==null){if(e<0||e>1)throw rt(new mo(X_+e+", size=0"));return Eg(),Eg(),hN}for(r=this.Jk(),n=0;n<e;++n)hz(r);return r},l.dc=function(){var e,n,r,s,o,h;if(this.b!=null){for(r=0;r<this.b.length;++r)if(e=this.b[r],!this.Mk()||this.a.mh(e)){if(h=this.a.bh(e,!1),to(),u(e,66).Oj()){for(n=u(h,153),s=0,o=n.gc();s<o;++s)if(VYt(n.il(s))&&n.jl(s)!=null)return!1}else if(e.$j()){if(!u(h,14).dc())return!1}else if(h!=null)return!1}}return!0},l.Kc=function(){return ryt(this)},l.Zc=function(e){var n,r;if(this.b==null){if(e!=0)throw rt(new mo(X_+e+", size=0"));return Eg(),Eg(),hN}for(r=this.Lk()?this.Kk():this.Jk(),n=0;n<e;++n)hz(r);return r},l.ii=function(e,n){throw rt(new Or)},l.ji=function(e,n){throw rt(new Or)},l.Jk=function(){return new bj(this.a,this.b)},l.Kk=function(){return new B2t(this.a,this.b)},l.Lk=function(){return!0},l.gc=function(){var e,n,r,s,o,h,d;if(o=0,this.b!=null){for(r=0;r<this.b.length;++r)if(e=this.b[r],!this.Mk()||this.a.mh(e))if(d=this.a.bh(e,!1),to(),u(e,66).Oj())for(n=u(d,153),s=0,h=n.gc();s<h;++s)VYt(n.il(s))&&n.jl(s)!=null&&++o;else e.$j()?o+=u(d,14).gc():d!=null&&++o}return o},l.Mk=function(){return!0};var Sft;P($i,"EContentsEList",486),I(1156,486,CH,pWt),l.Jk=function(){return new bWt(this.a,this.b)},l.Kk=function(){return new vWt(this.a,this.b)},l.Mk=function(){return!1},P(Mn,"ENamedElementImpl/1",1156),I(279,1,_H,bj),l.Nb=function(e){pa(this,e)},l.Rb=function(e){throw rt(new Or)},l.Nk=function(e){if(this.g!=0||this.e)throw rt(new Fo("Iterator already in use or already filtered"));this.e=e},l.Ob=function(){var e,n,r,s,o,h;switch(this.g){case 3:case 2:return!0;case 1:return!1;case-3:this.p?this.p.Pb():++this.n;default:if(!this.k||(this.p?!Uae(this,this.p):!Ooe(this))){for(;this.d<this.c.length;)if(n=this.c[this.d++],(!this.e||n.Gj()!=I7||n.aj()!=0)&&(!this.Mk()||this.b.mh(n))){if(h=this.b.bh(n,this.Lk()),this.f=(to(),u(n,66).Oj()),this.f||n.$j()){if(this.Lk()?(s=u(h,15),this.k=s):(s=u(h,69),this.k=this.j=s),Et(this.k,54)?(this.p=null,this.o=this.k.gc(),this.n=0):this.p=this.j?this.j.$h():this.k.Yc(),this.p?Uae(this,this.p):Ooe(this))return o=this.p?this.p.Pb():this.j?this.j.pi(this.n++):this.k.Xb(this.n++),this.f?(e=u(o,72),e.ak(),r=e.dd(),this.i=r):(r=o,this.i=r),this.g=3,!0}else if(h!=null)return this.k=null,this.p=null,r=h,this.i=r,this.g=2,!0}return this.k=null,this.p=null,this.f=!1,this.g=1,!1}else return o=this.p?this.p.Pb():this.j?this.j.pi(this.n++):this.k.Xb(this.n++),this.f?(e=u(o,72),e.ak(),r=e.dd(),this.i=r):(r=o,this.i=r),this.g=3,!0}},l.Sb=function(){var e,n,r,s,o,h;switch(this.g){case-3:case-2:return!0;case-1:return!1;case 3:this.p?this.p.Ub():--this.n;default:if(!this.k||(this.p?!Wae(this,this.p):!soe(this))){for(;this.d>0;)if(n=this.c[--this.d],(!this.e||n.Gj()!=I7||n.aj()!=0)&&(!this.Mk()||this.b.mh(n))){if(h=this.b.bh(n,this.Lk()),this.f=(to(),u(n,66).Oj()),this.f||n.$j()){if(this.Lk()?(s=u(h,15),this.k=s):(s=u(h,69),this.k=this.j=s),Et(this.k,54)?(this.o=this.k.gc(),this.n=this.o):this.p=this.j?this.j._h(this.k.gc()):this.k.Zc(this.k.gc()),this.p?Wae(this,this.p):soe(this))return o=this.p?this.p.Ub():this.j?this.j.pi(--this.n):this.k.Xb(--this.n),this.f?(e=u(o,72),e.ak(),r=e.dd(),this.i=r):(r=o,this.i=r),this.g=-3,!0}else if(h!=null)return this.k=null,this.p=null,r=h,this.i=r,this.g=-2,!0}return this.k=null,this.p=null,this.g=-1,!1}else return o=this.p?this.p.Ub():this.j?this.j.pi(--this.n):this.k.Xb(--this.n),this.f?(e=u(o,72),e.ak(),r=e.dd(),this.i=r):(r=o,this.i=r),this.g=-3,!0}},l.Pb=function(){return hz(this)},l.Tb=function(){return this.a},l.Ub=function(){var e;if(this.g<-1||this.Sb())return--this.a,this.g=0,e=this.i,this.Sb(),e;throw rt(new lc)},l.Vb=function(){return this.a-1},l.Qb=function(){throw rt(new Or)},l.Lk=function(){return!1},l.Wb=function(e){throw rt(new Or)},l.Mk=function(){return!0},l.a=0,l.d=0,l.f=!1,l.g=0,l.n=0,l.o=0;var hN;P($i,"EContentsEList/FeatureIteratorImpl",279),I(697,279,_H,B2t),l.Lk=function(){return!0},P($i,"EContentsEList/ResolvingFeatureIteratorImpl",697),I(1157,697,_H,vWt),l.Mk=function(){return!1},P(Mn,"ENamedElementImpl/1/1",1157),I(1158,279,_H,bWt),l.Mk=function(){return!1},P(Mn,"ENamedElementImpl/1/2",1158),I(36,143,QD,Km,Srt,Qs,qrt,F0,df,zmt,VQt,qmt,UQt,fmt,WQt,Vmt,KQt,dmt,YQt,Hmt,XQt,CC,gI,srt,Gmt,QQt,gmt,ZQt),l._i=function(){return Cmt(this)},l.gj=function(){var e;return e=Cmt(this),e?e.zj():null},l.yi=function(e){return this.b==-1&&this.a&&(this.b=this.c.Xg(this.a.aj(),this.a.Gj())),this.c.Og(this.b,e)},l.Ai=function(){return this.c},l.hj=function(){var e;return e=Cmt(this),e?e.Kj():!1},l.b=-1,P(Mn,"ENotificationImpl",36),I(399,284,{105:1,92:1,90:1,147:1,191:1,56:1,59:1,108:1,472:1,49:1,97:1,150:1,399:1,284:1,114:1,115:1},Wtt),l.Qg=function(e){return $se(this,e)},l._g=function(e,n,r){var s,o,h;switch(e){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Fn(),!!(this.Bb&256);case 3:return Fn(),!!(this.Bb&512);case 4:return de(this.s);case 5:return de(this.t);case 6:return Fn(),h=this.t,h>1||h==-1;case 7:return Fn(),o=this.s,o>=1;case 8:return n?Lh(this):this.r;case 9:return this.q;case 10:return this.Db>>16==10?u(this.Cb,26):null;case 11:return!this.d&&(this.d=new Ou(lu,this,11)),this.d;case 12:return!this.c&&(this.c=new he(zw,this,12,10)),this.c;case 13:return!this.a&&(this.a=new $M(this,this)),this.a;case 14:return il(this)}return oh(this,e-Zn((dn(),ep)),yn((s=u(In(this,16),26),s||ep),e),n,r)},l.hh=function(e,n,r){var s,o,h;switch(n){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),Qc(this.Ab,e,r);case 10:return this.Cb&&(r=(o=this.Db>>16,o>=0?$se(this,r):this.Cb.ih(this,-1-o,null,r))),zl(this,e,10,r);case 12:return!this.c&&(this.c=new he(zw,this,12,10)),Qc(this.c,e,r)}return h=u(yn((s=u(In(this,16),26),s||(dn(),ep)),n),66),h.Nj().Qj(this,iu(this),n-Zn((dn(),ep)),e,r)},l.jh=function(e,n,r){var s,o;switch(n){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),Ba(this.Ab,e,r);case 9:return Vnt(this,r);case 10:return zl(this,null,10,r);case 11:return!this.d&&(this.d=new Ou(lu,this,11)),Ba(this.d,e,r);case 12:return!this.c&&(this.c=new he(zw,this,12,10)),Ba(this.c,e,r);case 14:return Ba(il(this),e,r)}return o=u(yn((s=u(In(this,16),26),s||(dn(),ep)),n),66),o.Nj().Rj(this,iu(this),n-Zn((dn(),ep)),e,r)},l.lh=function(e){var n,r,s;switch(e){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return(this.Bb&256)==0;case 3:return(this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return s=this.t,s>1||s==-1;case 7:return r=this.s,r>=1;case 8:return!!this.r&&!this.q.e&&jv(this.q).i==0;case 9:return!!this.q&&!(this.r&&!this.q.e&&jv(this.q).i==0);case 10:return!!(this.Db>>16==10&&u(this.Cb,26));case 11:return!!this.d&&this.d.i!=0;case 12:return!!this.c&&this.c.i!=0;case 13:return!!this.a&&il(this.a.a).i!=0&&!(this.b&&cst(this.b));case 14:return!!this.b&&cst(this.b)}return sh(this,e-Zn((dn(),ep)),yn((n=u(In(this,16),26),n||ep),e))},l.sh=function(e,n){var r,s;switch(e){case 0:!this.Ab&&(this.Ab=new he(Zr,this,0,3)),xr(this.Ab),!this.Ab&&(this.Ab=new he(Zr,this,0,3)),rs(this.Ab,u(n,14));return;case 1:Xc(this,Br(n));return;case 2:Ng(this,je(Re(n)));return;case 3:Pg(this,je(Re(n)));return;case 4:Ig(this,u(n,19).a);return;case 5:ty(this,u(n,19).a);return;case 8:f2(this,u(n,138));return;case 9:s=O1(this,u(n,87),null),s&&s.Fi();return;case 11:!this.d&&(this.d=new Ou(lu,this,11)),xr(this.d),!this.d&&(this.d=new Ou(lu,this,11)),rs(this.d,u(n,14));return;case 12:!this.c&&(this.c=new he(zw,this,12,10)),xr(this.c),!this.c&&(this.c=new he(zw,this,12,10)),rs(this.c,u(n,14));return;case 13:!this.a&&(this.a=new $M(this,this)),C_(this.a),!this.a&&(this.a=new $M(this,this)),rs(this.a,u(n,14));return;case 14:xr(il(this)),rs(il(this),u(n,14));return}fh(this,e-Zn((dn(),ep)),yn((r=u(In(this,16),26),r||ep),e),n)},l.zh=function(){return dn(),ep},l.Bh=function(e){var n,r;switch(e){case 0:!this.Ab&&(this.Ab=new he(Zr,this,0,3)),xr(this.Ab);return;case 1:Xc(this,null);return;case 2:Ng(this,!0);return;case 3:Pg(this,!0);return;case 4:Ig(this,0);return;case 5:ty(this,1);return;case 8:f2(this,null);return;case 9:r=O1(this,null,null),r&&r.Fi();return;case 11:!this.d&&(this.d=new Ou(lu,this,11)),xr(this.d);return;case 12:!this.c&&(this.c=new he(zw,this,12,10)),xr(this.c);return;case 13:this.a&&C_(this.a);return;case 14:this.b&&xr(this.b);return}lh(this,e-Zn((dn(),ep)),yn((n=u(In(this,16),26),n||ep),e))},l.Gh=function(){var e,n;if(this.c)for(e=0,n=this.c.i;e<n;++e)FM(St(this.c,e));Lh(this),this.Bb|=1},P(Mn,"EOperationImpl",399),I(505,742,N8t,$M),l.Hi=function(e,n){pQe(this,e,u(n,138))},l.Ii=function(e){hXe(this,u(e,138))},l.Oi=function(e){var n,r;return n=u(St(il(this.a),e),87),r=n.c,r||(dn(),V1)},l.Ti=function(e){var n,r;return n=u(dy(il(this.a),e),87),r=n.c,r||(dn(),V1)},l.Ui=function(e,n){return fhn(this,e,u(n,138))},l.ai=function(){return!1},l.Zi=function(e,n,r,s,o){return null},l.Ji=function(){return new Dzt(this)},l.Ki=function(){xr(il(this.a))},l.Li=function(e){return Kre(this,e)},l.Mi=function(e){var n,r;for(r=e.Kc();r.Ob();)if(n=r.Pb(),!Kre(this,n))return!1;return!0},l.Ni=function(e){var n,r,s;if(Et(e,15)&&(s=u(e,15),s.gc()==il(this.a).i)){for(n=s.Kc(),r=new er(this);n.Ob();)if(Gt(n.Pb())!==Gt(dr(r)))return!1;return!0}return!1},l.Pi=function(){var e,n,r,s,o;for(r=1,n=new er(il(this.a));n.e!=n.i.gc();)e=u(dr(n),87),s=(o=e.c,o||(dn(),V1)),r=31*r+(s?Hi(s):0);return r},l.Qi=function(e){var n,r,s,o;for(s=0,r=new er(il(this.a));r.e!=r.i.gc();){if(n=u(dr(r),87),Gt(e)===Gt((o=n.c,o||(dn(),V1))))return s;++s}return-1},l.Ri=function(){return il(this.a).i==0},l.Si=function(){return null},l.Vi=function(){return il(this.a).i},l.Wi=function(){var e,n,r,s,o,h;for(h=il(this.a).i,o=Pt(Xn,Ie,1,h,5,1),r=0,n=new er(il(this.a));n.e!=n.i.gc();)e=u(dr(n),87),o[r++]=(s=e.c,s||(dn(),V1));return o},l.Xi=function(e){var n,r,s,o,h,d,w;for(w=il(this.a).i,e.length<w&&(o=CI(sl(e).c,w),e=o),e.length>w&&Ji(e,w,null),s=0,r=new er(il(this.a));r.e!=r.i.gc();)n=u(dr(r),87),h=(d=n.c,d||(dn(),V1)),Ji(e,s++,h);return e},l.Yi=function(){var e,n,r,s,o;for(o=new xg,o.a+="[",e=il(this.a),n=0,s=il(this.a).i;n<s;)fo(o,dC((r=u(St(e,n),87).c,r||(dn(),V1)))),++n<s&&(o.a+=Ka);return o.a+="]",o.a},l.$i=function(e){},l.aj=function(){return 13},l.Bk=function(){return!0},l.bj=function(){return!1},l.Ck=function(){return!1},l.Dk=function(){return!1},l.Ek=function(){return!0},l.rk=function(){return!1},l.Fk=function(){return!0},l.wj=function(e){return Et(e,138)},l.fj=function(){return pin(this.a)},l.hi=function(){return!0},l.ni=function(){return!0},P(Mn,"EOperationImpl/1",505),I(1340,1964,IE,Dzt),l.Zc=function(e){return _I(this.a,e)},l.gc=function(){return il(this.a.a).i},P(Mn,"EOperationImpl/1/1",1340),I(1341,545,zo,wYt),l.ii=function(e,n){var r,s;return r=u(t_(this,e,n),87),ml(this.e)&&Kk(this,new gI(this.a,7,(dn(),t5e),de(n),(s=r.c,s||V1),e)),r},l.jj=function(e,n){return Aun(this,u(e,87),n)},l.kj=function(e,n){return Lun(this,u(e,87),n)},l.lj=function(e,n,r){return Ahn(this,u(e,87),u(n,87),r)},l.Zi=function(e,n,r,s,o){switch(e){case 3:return DC(this,e,n,r,s,this.i>1);case 5:return DC(this,e,n,r,s,this.i-u(r,15).gc()>0);default:return new F0(this.e,e,this.c,n,r,s,!0)}},l.ij=function(){return!0},l.fj=function(){return cst(this)},l.Xj=function(){xr(this)},P(Mn,"EOperationImpl/2",1341),I(498,1,{1938:1,498:1},NVt),P(Mn,"EPackageImpl/1",498),I(16,85,zo,he),l.zk=function(){return this.d},l.Ak=function(){return this.b},l.Dk=function(){return!0},l.b=0,P($i,"EObjectContainmentWithInverseEList",16),I(353,16,zo,Ix),l.Ek=function(){return!0},l.li=function(e,n){return o6(this,e,u(n,56))},P($i,"EObjectContainmentWithInverseEList/Resolving",353),I(298,353,zo,qm),l.ci=function(){this.a.tb=null},P(Mn,"EPackageImpl/2",298),I(1228,1,{},tB),P(Mn,"EPackageImpl/3",1228),I(718,43,_4,jpt),l._b=function(e){return ea(e)?art(this,e):!!Ao(this.f,e)},P(Mn,"EPackageRegistryImpl",718),I(509,284,{105:1,92:1,90:1,147:1,191:1,56:1,2017:1,108:1,472:1,49:1,97:1,150:1,509:1,284:1,114:1,115:1},Ktt),l.Qg=function(e){return zse(this,e)},l._g=function(e,n,r){var s,o,h;switch(e){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Fn(),!!(this.Bb&256);case 3:return Fn(),!!(this.Bb&512);case 4:return de(this.s);case 5:return de(this.t);case 6:return Fn(),h=this.t,h>1||h==-1;case 7:return Fn(),o=this.s,o>=1;case 8:return n?Lh(this):this.r;case 9:return this.q;case 10:return this.Db>>16==10?u(this.Cb,59):null}return oh(this,e-Zn((dn(),e3)),yn((s=u(In(this,16),26),s||e3),e),n,r)},l.hh=function(e,n,r){var s,o,h;switch(n){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),Qc(this.Ab,e,r);case 10:return this.Cb&&(r=(o=this.Db>>16,o>=0?zse(this,r):this.Cb.ih(this,-1-o,null,r))),zl(this,e,10,r)}return h=u(yn((s=u(In(this,16),26),s||(dn(),e3)),n),66),h.Nj().Qj(this,iu(this),n-Zn((dn(),e3)),e,r)},l.jh=function(e,n,r){var s,o;switch(n){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),Ba(this.Ab,e,r);case 9:return Vnt(this,r);case 10:return zl(this,null,10,r)}return o=u(yn((s=u(In(this,16),26),s||(dn(),e3)),n),66),o.Nj().Rj(this,iu(this),n-Zn((dn(),e3)),e,r)},l.lh=function(e){var n,r,s;switch(e){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return(this.Bb&256)==0;case 3:return(this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return s=this.t,s>1||s==-1;case 7:return r=this.s,r>=1;case 8:return!!this.r&&!this.q.e&&jv(this.q).i==0;case 9:return!!this.q&&!(this.r&&!this.q.e&&jv(this.q).i==0);case 10:return!!(this.Db>>16==10&&u(this.Cb,59))}return sh(this,e-Zn((dn(),e3)),yn((n=u(In(this,16),26),n||e3),e))},l.zh=function(){return dn(),e3},P(Mn,"EParameterImpl",509),I(99,449,{105:1,92:1,90:1,147:1,191:1,56:1,18:1,170:1,66:1,108:1,472:1,49:1,97:1,150:1,99:1,449:1,284:1,114:1,115:1,677:1},q2t),l._g=function(e,n,r){var s,o,h,d;switch(e){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Fn(),!!(this.Bb&256);case 3:return Fn(),!!(this.Bb&512);case 4:return de(this.s);case 5:return de(this.t);case 6:return Fn(),d=this.t,d>1||d==-1;case 7:return Fn(),o=this.s,o>=1;case 8:return n?Lh(this):this.r;case 9:return this.q;case 10:return Fn(),!!(this.Bb&wf);case 11:return Fn(),!!(this.Bb&Ay);case 12:return Fn(),!!(this.Bb&yy);case 13:return this.j;case 14:return mE(this);case 15:return Fn(),!!(this.Bb&zu);case 16:return Fn(),!!(this.Bb&bd);case 17:return Vm(this);case 18:return Fn(),!!(this.Bb&dc);case 19:return Fn(),h=no(this),!!(h&&h.Bb&dc);case 20:return Fn(),!!(this.Bb&Ya);case 21:return n?no(this):this.b;case 22:return n?Cyt(this):yJt(this);case 23:return!this.a&&(this.a=new U3(Zy,this,23)),this.a}return oh(this,e-Zn((dn(),c5)),yn((s=u(In(this,16),26),s||c5),e),n,r)},l.lh=function(e){var n,r,s,o;switch(e){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return(this.Bb&256)==0;case 3:return(this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return o=this.t,o>1||o==-1;case 7:return r=this.s,r>=1;case 8:return!!this.r&&!this.q.e&&jv(this.q).i==0;case 9:return!!this.q&&!(this.r&&!this.q.e&&jv(this.q).i==0);case 10:return(this.Bb&wf)==0;case 11:return(this.Bb&Ay)!=0;case 12:return(this.Bb&yy)!=0;case 13:return this.j!=null;case 14:return mE(this)!=null;case 15:return(this.Bb&zu)!=0;case 16:return(this.Bb&bd)!=0;case 17:return!!Vm(this);case 18:return(this.Bb&dc)!=0;case 19:return s=no(this),!!s&&(s.Bb&dc)!=0;case 20:return(this.Bb&Ya)==0;case 21:return!!this.b;case 22:return!!yJt(this);case 23:return!!this.a&&this.a.i!=0}return sh(this,e-Zn((dn(),c5)),yn((n=u(In(this,16),26),n||c5),e))},l.sh=function(e,n){var r,s;switch(e){case 0:!this.Ab&&(this.Ab=new he(Zr,this,0,3)),xr(this.Ab),!this.Ab&&(this.Ab=new he(Zr,this,0,3)),rs(this.Ab,u(n,14));return;case 1:mrt(this,Br(n));return;case 2:Ng(this,je(Re(n)));return;case 3:Pg(this,je(Re(n)));return;case 4:Ig(this,u(n,19).a);return;case 5:ty(this,u(n,19).a);return;case 8:f2(this,u(n,138));return;case 9:s=O1(this,u(n,87),null),s&&s.Fi();return;case 10:nE(this,je(Re(n)));return;case 11:sE(this,je(Re(n)));return;case 12:rE(this,je(Re(n)));return;case 13:Xbt(this,Br(n));return;case 15:iE(this,je(Re(n)));return;case 16:aE(this,je(Re(n)));return;case 18:krn(this,je(Re(n)));return;case 20:n3t(this,je(Re(n)));return;case 21:eyt(this,u(n,18));return;case 23:!this.a&&(this.a=new U3(Zy,this,23)),xr(this.a),!this.a&&(this.a=new U3(Zy,this,23)),rs(this.a,u(n,14));return}fh(this,e-Zn((dn(),c5)),yn((r=u(In(this,16),26),r||c5),e),n)},l.zh=function(){return dn(),c5},l.Bh=function(e){var n,r;switch(e){case 0:!this.Ab&&(this.Ab=new he(Zr,this,0,3)),xr(this.Ab);return;case 1:Et(this.Cb,88)&&hy(rl(u(this.Cb,88)),4),Xc(this,null);return;case 2:Ng(this,!0);return;case 3:Pg(this,!0);return;case 4:Ig(this,0);return;case 5:ty(this,1);return;case 8:f2(this,null);return;case 9:r=O1(this,null,null),r&&r.Fi();return;case 10:nE(this,!0);return;case 11:sE(this,!1);return;case 12:rE(this,!1);return;case 13:this.i=null,ez(this,null);return;case 15:iE(this,!1);return;case 16:aE(this,!1);return;case 18:e3t(this,!1),Et(this.Cb,88)&&hy(rl(u(this.Cb,88)),2);return;case 20:n3t(this,!0);return;case 21:eyt(this,null);return;case 23:!this.a&&(this.a=new U3(Zy,this,23)),xr(this.a);return}lh(this,e-Zn((dn(),c5)),yn((n=u(In(this,16),26),n||c5),e))},l.Gh=function(){Cyt(this),k8(Eo((Ru(),ma),this)),Lh(this),this.Bb|=1},l.Lj=function(){return no(this)},l.qk=function(){var e;return e=no(this),!!e&&(e.Bb&dc)!=0},l.rk=function(){return(this.Bb&dc)!=0},l.sk=function(){return(this.Bb&Ya)!=0},l.nk=function(e,n){return this.c=null,Kyt(this,e,n)},l.Ib=function(){var e;return this.Db&64?pq(this):(e=new Th(pq(this)),e.a+=" (containment: ",kg(e,(this.Bb&dc)!=0),e.a+=", resolveProxies: ",kg(e,(this.Bb&Ya)!=0),e.a+=")",e.a)},P(Mn,"EReferenceImpl",99),I(548,115,{105:1,42:1,92:1,90:1,133:1,56:1,108:1,49:1,97:1,548:1,114:1,115:1},WZ),l.Fb=function(e){return this===e},l.cd=function(){return this.b},l.dd=function(){return this.c},l.Hb=function(){return Iv(this)},l.Uh=function(e){Stn(this,Br(e))},l.ed=function(e){return ptn(this,Br(e))},l._g=function(e,n,r){var s;switch(e){case 0:return this.b;case 1:return this.c}return oh(this,e-Zn((dn(),Qa)),yn((s=u(In(this,16),26),s||Qa),e),n,r)},l.lh=function(e){var n;switch(e){case 0:return this.b!=null;case 1:return this.c!=null}return sh(this,e-Zn((dn(),Qa)),yn((n=u(In(this,16),26),n||Qa),e))},l.sh=function(e,n){var r;switch(e){case 0:Atn(this,Br(n));return;case 1:Zmt(this,Br(n));return}fh(this,e-Zn((dn(),Qa)),yn((r=u(In(this,16),26),r||Qa),e),n)},l.zh=function(){return dn(),Qa},l.Bh=function(e){var n;switch(e){case 0:Qmt(this,null);return;case 1:Zmt(this,null);return}lh(this,e-Zn((dn(),Qa)),yn((n=u(In(this,16),26),n||Qa),e))},l.Sh=function(){var e;return this.a==-1&&(e=this.b,this.a=e==null?0:Bg(e)),this.a},l.Th=function(e){this.a=e},l.Ib=function(){var e;return this.Db&64?bf(this):(e=new Th(bf(this)),e.a+=" (key: ",fo(e,this.b),e.a+=", value: ",fo(e,this.c),e.a+=")",e.a)},l.a=-1,l.b=null,l.c=null;var cc=P(Mn,"EStringToStringMapEntryImpl",548),a5e=Yi($i,"FeatureMap/Entry/Internal");I(565,1,SH),l.Ok=function(e){return this.Pk(u(e,49))},l.Pk=function(e){return this.Ok(e)},l.Fb=function(e){var n,r;return this===e?!0:Et(e,72)?(n=u(e,72),n.ak()==this.c?(r=this.dd(),r==null?n.dd()==null:yi(r,n.dd())):!1):!1},l.ak=function(){return this.c},l.Hb=function(){var e;return e=this.dd(),Hi(this.c)^(e==null?0:Hi(e))},l.Ib=function(){var e,n;return e=this.c,n=Fl(e.Hj()).Ph(),e.ne(),(n!=null&&n.length!=0?n+":"+e.ne():e.ne())+"="+this.dd()},P(Mn,"EStructuralFeatureImpl/BasicFeatureMapEntry",565),I(776,565,SH,Q2t),l.Pk=function(e){return new Q2t(this.c,e)},l.dd=function(){return this.a},l.Qk=function(e,n,r){return Gon(this,e,this.a,n,r)},l.Rk=function(e,n,r){return Von(this,e,this.a,n,r)},P(Mn,"EStructuralFeatureImpl/ContainmentUpdatingFeatureMapEntry",776),I(1314,1,{},PVt),l.Pj=function(e,n,r,s,o){var h;return h=u(I8(e,this.b),215),h.nl(this.a).Wj(s)},l.Qj=function(e,n,r,s,o){var h;return h=u(I8(e,this.b),215),h.el(this.a,s,o)},l.Rj=function(e,n,r,s,o){var h;return h=u(I8(e,this.b),215),h.fl(this.a,s,o)},l.Sj=function(e,n,r){var s;return s=u(I8(e,this.b),215),s.nl(this.a).fj()},l.Tj=function(e,n,r,s){var o;o=u(I8(e,this.b),215),o.nl(this.a).Wb(s)},l.Uj=function(e,n,r){return u(I8(e,this.b),215).nl(this.a)},l.Vj=function(e,n,r){var s;s=u(I8(e,this.b),215),s.nl(this.a).Xj()},P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateFeatureMapDelegator",1314),I(89,1,{},Cg,Zb,Sg,e2),l.Pj=function(e,n,r,s,o){var h;if(h=n.Ch(r),h==null&&n.Dh(r,h=Aq(this,e)),!o)switch(this.e){case 50:case 41:return u(h,589).sj();case 40:return u(h,215).kl()}return h},l.Qj=function(e,n,r,s,o){var h,d;return d=n.Ch(r),d==null&&n.Dh(r,d=Aq(this,e)),h=u(d,69).lk(s,o),h},l.Rj=function(e,n,r,s,o){var h;return h=n.Ch(r),h!=null&&(o=u(h,69).mk(s,o)),o},l.Sj=function(e,n,r){var s;return s=n.Ch(r),s!=null&&u(s,76).fj()},l.Tj=function(e,n,r,s){var o;o=u(n.Ch(r),76),!o&&n.Dh(r,o=Aq(this,e)),o.Wb(s)},l.Uj=function(e,n,r){var s,o;return o=n.Ch(r),o==null&&n.Dh(r,o=Aq(this,e)),Et(o,76)?u(o,76):(s=u(n.Ch(r),15),new Nzt(s))},l.Vj=function(e,n,r){var s;s=u(n.Ch(r),76),!s&&n.Dh(r,s=Aq(this,e)),s.Xj()},l.b=0,l.e=0,P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateMany",89),I(504,1,{}),l.Qj=function(e,n,r,s,o){throw rt(new Or)},l.Rj=function(e,n,r,s,o){throw rt(new Or)},l.Uj=function(e,n,r){return new MXt(this,e,n,r)};var f0;P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingle",504),I(1331,1,tut,MXt),l.Wj=function(e){return this.a.Pj(this.c,this.d,this.b,e,!0)},l.fj=function(){return this.a.Sj(this.c,this.d,this.b)},l.Wb=function(e){this.a.Tj(this.c,this.d,this.b,e)},l.Xj=function(){this.a.Vj(this.c,this.d,this.b)},l.b=0,P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingle/1",1331),I(769,504,{},Owt),l.Pj=function(e,n,r,s,o){return aat(e,e.eh(),e.Vg())==this.b?this.sk()&&s?Gst(e):e.eh():null},l.Qj=function(e,n,r,s,o){var h,d;return e.eh()&&(o=(h=e.Vg(),h>=0?e.Qg(o):e.eh().ih(e,-1-h,null,o))),d=Vi(e.Tg(),this.e),e.Sg(s,d,o)},l.Rj=function(e,n,r,s,o){var h;return h=Vi(e.Tg(),this.e),e.Sg(null,h,o)},l.Sj=function(e,n,r){var s;return s=Vi(e.Tg(),this.e),!!e.eh()&&e.Vg()==s},l.Tj=function(e,n,r,s){var o,h,d,w,k;if(s!=null&&!lat(this.a,s))throw rt(new Xk(AH+(Et(s,56)?d4t(u(s,56).Tg()):Bmt(sl(s)))+LH+this.a+"'"));if(o=e.eh(),d=Vi(e.Tg(),this.e),Gt(s)!==Gt(o)||e.Vg()!=d&&s!=null){if(lE(e,u(s,56)))throw rt(new Pn(K_+e.Ib()));k=null,o&&(k=(h=e.Vg(),h>=0?e.Qg(k):e.eh().ih(e,-1-h,null,k))),w=u(s,49),w&&(k=w.gh(e,Vi(w.Tg(),this.b),null,k)),k=e.Sg(w,d,k),k&&k.Fi()}else e.Lg()&&e.Mg()&&mi(e,new Qs(e,1,d,s,s))},l.Vj=function(e,n,r){var s,o,h,d;s=e.eh(),s?(d=(o=e.Vg(),o>=0?e.Qg(null):e.eh().ih(e,-1-o,null,null)),h=Vi(e.Tg(),this.e),d=e.Sg(null,h,d),d&&d.Fi()):e.Lg()&&e.Mg()&&mi(e,new CC(e,1,this.e,null,null))},l.sk=function(){return!1},P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleContainer",769),I(1315,769,{},kKt),l.sk=function(){return!0},P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleContainerResolving",1315),I(563,504,{}),l.Pj=function(e,n,r,s,o){var h;return h=n.Ch(r),h==null?this.b:Gt(h)===Gt(f0)?null:h},l.Sj=function(e,n,r){var s;return s=n.Ch(r),s!=null&&(Gt(s)===Gt(f0)||!yi(s,this.b))},l.Tj=function(e,n,r,s){var o,h;e.Lg()&&e.Mg()?(o=(h=n.Ch(r),h==null?this.b:Gt(h)===Gt(f0)?null:h),s==null?this.c!=null?(n.Dh(r,null),s=this.b):this.b!=null?n.Dh(r,f0):n.Dh(r,null):(this.Sk(s),n.Dh(r,s)),mi(e,this.d.Tk(e,1,this.e,o,s))):s==null?this.c!=null?n.Dh(r,null):this.b!=null?n.Dh(r,f0):n.Dh(r,null):(this.Sk(s),n.Dh(r,s))},l.Vj=function(e,n,r){var s,o;e.Lg()&&e.Mg()?(s=(o=n.Ch(r),o==null?this.b:Gt(o)===Gt(f0)?null:o),n.Eh(r),mi(e,this.d.Tk(e,1,this.e,s,this.b))):n.Eh(r)},l.Sk=function(e){throw rt(new Gzt)},P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleData",563),I(F4,1,{},eB),l.Tk=function(e,n,r,s,o){return new CC(e,n,r,s,o)},l.Uk=function(e,n,r,s,o,h){return new srt(e,n,r,s,o,h)};var eLt,nLt,rLt,iLt,sLt,aLt,oLt,Aft,cLt;P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator",F4),I(1332,F4,{},nB),l.Tk=function(e,n,r,s,o){return new gmt(e,n,r,je(Re(s)),je(Re(o)))},l.Uk=function(e,n,r,s,o,h){return new ZQt(e,n,r,je(Re(s)),je(Re(o)),h)},P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/1",1332),I(1333,F4,{},rB),l.Tk=function(e,n,r,s,o){return new zmt(e,n,r,u(s,217).a,u(o,217).a)},l.Uk=function(e,n,r,s,o,h){return new VQt(e,n,r,u(s,217).a,u(o,217).a,h)},P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/2",1333),I(1334,F4,{},Ak),l.Tk=function(e,n,r,s,o){return new qmt(e,n,r,u(s,172).a,u(o,172).a)},l.Uk=function(e,n,r,s,o,h){return new UQt(e,n,r,u(s,172).a,u(o,172).a,h)},P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/3",1334),I(1335,F4,{},iB),l.Tk=function(e,n,r,s,o){return new fmt(e,n,r,Xt(ye(s)),Xt(ye(o)))},l.Uk=function(e,n,r,s,o,h){return new WQt(e,n,r,Xt(ye(s)),Xt(ye(o)),h)},P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/4",1335),I(1336,F4,{},sB),l.Tk=function(e,n,r,s,o){return new Vmt(e,n,r,u(s,155).a,u(o,155).a)},l.Uk=function(e,n,r,s,o,h){return new KQt(e,n,r,u(s,155).a,u(o,155).a,h)},P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/5",1336),I(1337,F4,{},KZ),l.Tk=function(e,n,r,s,o){return new dmt(e,n,r,u(s,19).a,u(o,19).a)},l.Uk=function(e,n,r,s,o,h){return new YQt(e,n,r,u(s,19).a,u(o,19).a,h)},P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/6",1337),I(1338,F4,{},Lk),l.Tk=function(e,n,r,s,o){return new Hmt(e,n,r,u(s,162).a,u(o,162).a)},l.Uk=function(e,n,r,s,o,h){return new XQt(e,n,r,u(s,162).a,u(o,162).a,h)},P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/7",1338),I(1339,F4,{},Mk),l.Tk=function(e,n,r,s,o){return new Gmt(e,n,r,u(s,184).a,u(o,184).a)},l.Uk=function(e,n,r,s,o,h){return new QQt(e,n,r,u(s,184).a,u(o,184).a,h)},P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/8",1339),I(1317,563,{},IXt),l.Sk=function(e){if(!this.a.wj(e))throw rt(new Xk(AH+sl(e)+LH+this.a+"'"))},P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataDynamic",1317),I(1318,563,{},mYt),l.Sk=function(e){},P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataStatic",1318),I(770,563,{}),l.Sj=function(e,n,r){var s;return s=n.Ch(r),s!=null},l.Tj=function(e,n,r,s){var o,h;e.Lg()&&e.Mg()?(o=!0,h=n.Ch(r),h==null?(o=!1,h=this.b):Gt(h)===Gt(f0)&&(h=null),s==null?this.c!=null?(n.Dh(r,null),s=this.b):n.Dh(r,f0):(this.Sk(s),n.Dh(r,s)),mi(e,this.d.Uk(e,1,this.e,h,s,!o))):s==null?this.c!=null?n.Dh(r,null):n.Dh(r,f0):(this.Sk(s),n.Dh(r,s))},l.Vj=function(e,n,r){var s,o;e.Lg()&&e.Mg()?(s=!0,o=n.Ch(r),o==null?(s=!1,o=this.b):Gt(o)===Gt(f0)&&(o=null),n.Eh(r),mi(e,this.d.Uk(e,2,this.e,o,this.b,s))):n.Eh(r)},P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettable",770),I(1319,770,{},DXt),l.Sk=function(e){if(!this.a.wj(e))throw rt(new Xk(AH+sl(e)+LH+this.a+"'"))},P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettableDynamic",1319),I(1320,770,{},yYt),l.Sk=function(e){},P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettableStatic",1320),I(398,504,{},Pj),l.Pj=function(e,n,r,s,o){var h,d,w,k,C;if(C=n.Ch(r),this.Kj()&&Gt(C)===Gt(f0))return null;if(this.sk()&&s&&C!=null){if(w=u(C,49),w.kh()&&(k=Kp(e,w),w!=k)){if(!lat(this.a,k))throw rt(new Xk(AH+sl(k)+LH+this.a+"'"));n.Dh(r,C=k),this.rk()&&(h=u(k,49),d=w.ih(e,this.b?Vi(w.Tg(),this.b):-1-Vi(e.Tg(),this.e),null,null),!h.eh()&&(d=h.gh(e,this.b?Vi(h.Tg(),this.b):-1-Vi(e.Tg(),this.e),null,d)),d&&d.Fi()),e.Lg()&&e.Mg()&&mi(e,new CC(e,9,this.e,w,k))}return C}else return C},l.Qj=function(e,n,r,s,o){var h,d;return d=n.Ch(r),Gt(d)===Gt(f0)&&(d=null),n.Dh(r,s),this.bj()?Gt(d)!==Gt(s)&&d!=null&&(h=u(d,49),o=h.ih(e,Vi(h.Tg(),this.b),null,o)):this.rk()&&d!=null&&(o=u(d,49).ih(e,-1-Vi(e.Tg(),this.e),null,o)),e.Lg()&&e.Mg()&&(!o&&(o=new Sp(4)),o.Ei(new CC(e,1,this.e,d,s))),o},l.Rj=function(e,n,r,s,o){var h;return h=n.Ch(r),Gt(h)===Gt(f0)&&(h=null),n.Eh(r),e.Lg()&&e.Mg()&&(!o&&(o=new Sp(4)),this.Kj()?o.Ei(new CC(e,2,this.e,h,null)):o.Ei(new CC(e,1,this.e,h,null))),o},l.Sj=function(e,n,r){var s;return s=n.Ch(r),s!=null},l.Tj=function(e,n,r,s){var o,h,d,w,k;if(s!=null&&!lat(this.a,s))throw rt(new Xk(AH+(Et(s,56)?d4t(u(s,56).Tg()):Bmt(sl(s)))+LH+this.a+"'"));k=n.Ch(r),w=k!=null,this.Kj()&&Gt(k)===Gt(f0)&&(k=null),d=null,this.bj()?Gt(k)!==Gt(s)&&(k!=null&&(o=u(k,49),d=o.ih(e,Vi(o.Tg(),this.b),null,d)),s!=null&&(o=u(s,49),d=o.gh(e,Vi(o.Tg(),this.b),null,d))):this.rk()&&Gt(k)!==Gt(s)&&(k!=null&&(d=u(k,49).ih(e,-1-Vi(e.Tg(),this.e),null,d)),s!=null&&(d=u(s,49).gh(e,-1-Vi(e.Tg(),this.e),null,d))),s==null&&this.Kj()?n.Dh(r,f0):n.Dh(r,s),e.Lg()&&e.Mg()?(h=new srt(e,1,this.e,k,s,this.Kj()&&!w),d?(d.Ei(h),d.Fi()):mi(e,h)):d&&d.Fi()},l.Vj=function(e,n,r){var s,o,h,d,w;w=n.Ch(r),d=w!=null,this.Kj()&&Gt(w)===Gt(f0)&&(w=null),h=null,w!=null&&(this.bj()?(s=u(w,49),h=s.ih(e,Vi(s.Tg(),this.b),null,h)):this.rk()&&(h=u(w,49).ih(e,-1-Vi(e.Tg(),this.e),null,h))),n.Eh(r),e.Lg()&&e.Mg()?(o=new srt(e,this.Kj()?2:1,this.e,w,null,d),h?(h.Ei(o),h.Fi()):mi(e,o)):h&&h.Fi()},l.bj=function(){return!1},l.rk=function(){return!1},l.sk=function(){return!1},l.Kj=function(){return!1},P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObject",398),I(564,398,{},ont),l.rk=function(){return!0},P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainment",564),I(1323,564,{},wWt),l.sk=function(){return!0},P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentResolving",1323),I(772,564,{},R2t),l.Kj=function(){return!0},P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentUnsettable",772),I(1325,772,{},mWt),l.sk=function(){return!0},P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentUnsettableResolving",1325),I(640,564,{},xnt),l.bj=function(){return!0},P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverse",640),I(1324,640,{},EKt),l.sk=function(){return!0},P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseResolving",1324),I(773,640,{},Tvt),l.Kj=function(){return!0},P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseUnsettable",773),I(1326,773,{},TKt),l.sk=function(){return!0},P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseUnsettableResolving",1326),I(641,398,{},j2t),l.sk=function(){return!0},P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolving",641),I(1327,641,{},yWt),l.Kj=function(){return!0},P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingUnsettable",1327),I(774,641,{},kvt),l.bj=function(){return!0},P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingWithInverse",774),I(1328,774,{},CKt),l.Kj=function(){return!0},P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingWithInverseUnsettable",1328),I(1321,398,{},xWt),l.Kj=function(){return!0},P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectUnsettable",1321),I(771,398,{},Evt),l.bj=function(){return!0},P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectWithInverse",771),I(1322,771,{},_Kt),l.Kj=function(){return!0},P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectWithInverseUnsettable",1322),I(775,565,SH,mwt),l.Pk=function(e){return new mwt(this.a,this.c,e)},l.dd=function(){return this.b},l.Qk=function(e,n,r){return Vsn(this,e,this.b,r)},l.Rk=function(e,n,r){return Usn(this,e,this.b,r)},P(Mn,"EStructuralFeatureImpl/InverseUpdatingFeatureMapEntry",775),I(1329,1,tut,Nzt),l.Wj=function(e){return this.a},l.fj=function(){return Et(this.a,95)?u(this.a,95).fj():!this.a.dc()},l.Wb=function(e){this.a.$b(),this.a.Gc(u(e,15))},l.Xj=function(){Et(this.a,95)?u(this.a,95).Xj():this.a.$b()},P(Mn,"EStructuralFeatureImpl/SettingMany",1329),I(1330,565,SH,$Zt),l.Ok=function(e){return new lnt((Di(),uA),this.b.Ih(this.a,e))},l.dd=function(){return null},l.Qk=function(e,n,r){return r},l.Rk=function(e,n,r){return r},P(Mn,"EStructuralFeatureImpl/SimpleContentFeatureMapEntry",1330),I(642,565,SH,lnt),l.Ok=function(e){return new lnt(this.c,e)},l.dd=function(){return this.a},l.Qk=function(e,n,r){return r},l.Rk=function(e,n,r){return r},P(Mn,"EStructuralFeatureImpl/SimpleFeatureMapEntry",642),I(391,497,_d,xm),l.ri=function(e){return Pt(Gh,Ie,26,e,0,1)},l.ni=function(){return!1},P(Mn,"ESuperAdapter/1",391),I(444,438,{105:1,92:1,90:1,147:1,191:1,56:1,108:1,836:1,49:1,97:1,150:1,444:1,114:1,115:1},RL),l._g=function(e,n,r){var s;switch(e){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),this.Ab;case 1:return this.zb;case 2:return!this.a&&(this.a=new xC(this,ho,this)),this.a}return oh(this,e-Zn((dn(),Hw)),yn((s=u(In(this,16),26),s||Hw),e),n,r)},l.jh=function(e,n,r){var s,o;switch(n){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),Ba(this.Ab,e,r);case 2:return!this.a&&(this.a=new xC(this,ho,this)),Ba(this.a,e,r)}return o=u(yn((s=u(In(this,16),26),s||(dn(),Hw)),n),66),o.Nj().Rj(this,iu(this),n-Zn((dn(),Hw)),e,r)},l.lh=function(e){var n;switch(e){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return!!this.a&&this.a.i!=0}return sh(this,e-Zn((dn(),Hw)),yn((n=u(In(this,16),26),n||Hw),e))},l.sh=function(e,n){var r;switch(e){case 0:!this.Ab&&(this.Ab=new he(Zr,this,0,3)),xr(this.Ab),!this.Ab&&(this.Ab=new he(Zr,this,0,3)),rs(this.Ab,u(n,14));return;case 1:Xc(this,Br(n));return;case 2:!this.a&&(this.a=new xC(this,ho,this)),xr(this.a),!this.a&&(this.a=new xC(this,ho,this)),rs(this.a,u(n,14));return}fh(this,e-Zn((dn(),Hw)),yn((r=u(In(this,16),26),r||Hw),e),n)},l.zh=function(){return dn(),Hw},l.Bh=function(e){var n;switch(e){case 0:!this.Ab&&(this.Ab=new he(Zr,this,0,3)),xr(this.Ab);return;case 1:Xc(this,null);return;case 2:!this.a&&(this.a=new xC(this,ho,this)),xr(this.a);return}lh(this,e-Zn((dn(),Hw)),yn((n=u(In(this,16),26),n||Hw),e))},P(Mn,"ETypeParameterImpl",444),I(445,85,zo,xC),l.cj=function(e,n){return Udn(this,u(e,87),n)},l.dj=function(e,n){return Wdn(this,u(e,87),n)},P(Mn,"ETypeParameterImpl/1",445),I(634,43,_4,Ytt),l.ec=function(){return new cR(this)},P(Mn,"ETypeParameterImpl/2",634),I(556,N1,ju,cR),l.Fc=function(e){return WWt(this,u(e,87))},l.Gc=function(e){var n,r,s;for(s=!1,r=e.Kc();r.Ob();)n=u(r.Pb(),87),ki(this.a,n,"")==null&&(s=!0);return s},l.$b=function(){Yu(this.a)},l.Hc=function(e){return kl(this.a,e)},l.Kc=function(){var e;return e=new h2(new wg(this.a).a),new uR(e)},l.Mc=function(e){return OJt(this,e)},l.gc=function(){return $9(this.a)},P(Mn,"ETypeParameterImpl/2/1",556),I(557,1,ra,uR),l.Nb=function(e){pa(this,e)},l.Pb=function(){return u(Yv(this.a).cd(),87)},l.Ob=function(){return this.a.b},l.Qb=function(){lte(this.a)},P(Mn,"ETypeParameterImpl/2/1/1",557),I(1276,43,_4,Tqt),l._b=function(e){return ea(e)?art(this,e):!!Ao(this.f,e)},l.xc=function(e){var n,r;return n=ea(e)?Fc(this,e):ec(Ao(this.f,e)),Et(n,837)?(r=u(n,837),n=r._j(),ki(this,u(e,235),n),n):n??(e==null?(det(),c5e):null)},P(Mn,"EValidatorRegistryImpl",1276),I(1313,704,{105:1,92:1,90:1,471:1,147:1,56:1,108:1,1941:1,49:1,97:1,150:1,114:1,115:1},YZ),l.Ih=function(e,n){switch(e.yj()){case 21:case 22:case 23:case 24:case 26:case 31:case 32:case 37:case 38:case 39:case 40:case 43:case 44:case 48:case 49:case 20:return n==null?null:$o(n);case 25:return ton(n);case 27:return van(n);case 28:return wan(n);case 29:return n==null?null:SUt(rA[0],u(n,199));case 41:return n==null?"":Ap(u(n,290));case 42:return $o(n);case 50:return Br(n);default:throw rt(new Pn(HE+e.ne()+kw))}},l.Jh=function(e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt;switch(e.G==-1&&(e.G=(H=Fl(e),H?Fg(H.Mh(),e):-1)),e.G){case 0:return r=new Utt,r;case 1:return n=new JF,n;case 2:return s=new XL,s;case 4:return o=new lR,o;case 5:return h=new Eqt,h;case 6:return d=new Wzt,d;case 7:return w=new qB,w;case 10:return C=new _k,C;case 11:return M=new Wtt,M;case 12:return F=new YXt,F;case 13:return V=new Ktt,V;case 14:return Y=new q2t,Y;case 17:return tt=new WZ,tt;case 18:return k=new wv,k;case 19:return gt=new RL,gt;default:throw rt(new Pn(Rct+e.zb+kw))}},l.Kh=function(e,n){switch(e.yj()){case 20:return n==null?null:new obt(n);case 21:return n==null?null:new Np(n);case 23:case 22:return n==null?null:shn(n);case 26:case 24:return n==null?null:EI($l(n,-128,127)<<24>>24);case 25:return bbn(n);case 27:return qfn(n);case 28:return Hfn(n);case 29:return h0n(n);case 32:case 31:return n==null?null:ly(n);case 38:case 37:return n==null?null:new Spt(n);case 40:case 39:return n==null?null:de($l(n,_a,vi));case 41:return null;case 42:return n==null,null;case 44:case 43:return n==null?null:g2(Sq(n));case 49:case 48:return n==null?null:eE($l(n,MH,32767)<<16>>16);case 50:return n;default:throw rt(new Pn(HE+e.ne()+kw))}},P(Mn,"EcoreFactoryImpl",1313),I(547,179,{105:1,92:1,90:1,147:1,191:1,56:1,235:1,108:1,1939:1,49:1,97:1,150:1,179:1,547:1,114:1,115:1,675:1},fXt),l.gb=!1,l.hb=!1;var uLt,o5e=!1;P(Mn,"EcorePackageImpl",547),I(1184,1,{837:1},XZ),l._j=function(){return QUt(),u5e},P(Mn,"EcorePackageImpl/1",1184),I(1193,1,ii,QZ),l.wj=function(e){return Et(e,147)},l.xj=function(e){return Pt(oN,Ie,147,e,0,1)},P(Mn,"EcorePackageImpl/10",1193),I(1194,1,ii,ZZ),l.wj=function(e){return Et(e,191)},l.xj=function(e){return Pt(mft,Ie,191,e,0,1)},P(Mn,"EcorePackageImpl/11",1194),I(1195,1,ii,JZ),l.wj=function(e){return Et(e,56)},l.xj=function(e){return Pt(kb,Ie,56,e,0,1)},P(Mn,"EcorePackageImpl/12",1195),I(1196,1,ii,tJ),l.wj=function(e){return Et(e,399)},l.xj=function(e){return Pt(Vh,O8t,59,e,0,1)},P(Mn,"EcorePackageImpl/13",1196),I(1197,1,ii,eJ),l.wj=function(e){return Et(e,235)},l.xj=function(e){return Pt(r1,Ie,235,e,0,1)},P(Mn,"EcorePackageImpl/14",1197),I(1198,1,ii,nJ),l.wj=function(e){return Et(e,509)},l.xj=function(e){return Pt(zw,Ie,2017,e,0,1)},P(Mn,"EcorePackageImpl/15",1198),I(1199,1,ii,aB),l.wj=function(e){return Et(e,99)},l.xj=function(e){return Pt(Jy,P4,18,e,0,1)},P(Mn,"EcorePackageImpl/16",1199),I(1200,1,ii,rJ),l.wj=function(e){return Et(e,170)},l.xj=function(e){return Pt(Au,P4,170,e,0,1)},P(Mn,"EcorePackageImpl/17",1200),I(1201,1,ii,iJ),l.wj=function(e){return Et(e,472)},l.xj=function(e){return Pt(Qy,Ie,472,e,0,1)},P(Mn,"EcorePackageImpl/18",1201),I(1202,1,ii,sJ),l.wj=function(e){return Et(e,548)},l.xj=function(e){return Pt(cc,c0e,548,e,0,1)},P(Mn,"EcorePackageImpl/19",1202),I(1185,1,ii,oB),l.wj=function(e){return Et(e,322)},l.xj=function(e){return Pt(Zy,P4,34,e,0,1)},P(Mn,"EcorePackageImpl/2",1185),I(1203,1,ii,Ik),l.wj=function(e){return Et(e,241)},l.xj=function(e){return Pt(ho,C0e,87,e,0,1)},P(Mn,"EcorePackageImpl/20",1203),I(1204,1,ii,ZT),l.wj=function(e){return Et(e,444)},l.xj=function(e){return Pt(lu,Ie,836,e,0,1)},P(Mn,"EcorePackageImpl/21",1204),I(1205,1,ii,cB),l.wj=function(e){return Om(e)},l.xj=function(e){return Pt(Bs,te,476,e,8,1)},P(Mn,"EcorePackageImpl/22",1205),I(1206,1,ii,aJ),l.wj=function(e){return Et(e,190)},l.xj=function(e){return Pt(Hu,te,190,e,0,2)},P(Mn,"EcorePackageImpl/23",1206),I(1207,1,ii,uB),l.wj=function(e){return Et(e,217)},l.xj=function(e){return Pt(E6,te,217,e,0,1)},P(Mn,"EcorePackageImpl/24",1207),I(1208,1,ii,lB),l.wj=function(e){return Et(e,172)},l.xj=function(e){return Pt(aS,te,172,e,0,1)},P(Mn,"EcorePackageImpl/25",1208),I(1209,1,ii,oJ),l.wj=function(e){return Et(e,199)},l.xj=function(e){return Pt(HH,te,199,e,0,1)},P(Mn,"EcorePackageImpl/26",1209),I(1210,1,ii,JT),l.wj=function(e){return!1},l.xj=function(e){return Pt(SLt,Ie,2110,e,0,1)},P(Mn,"EcorePackageImpl/27",1210),I(1211,1,ii,km),l.wj=function(e){return Nm(e)},l.xj=function(e){return Pt(ca,te,333,e,7,1)},P(Mn,"EcorePackageImpl/28",1211),I(1212,1,ii,hB),l.wj=function(e){return Et(e,58)},l.xj=function(e){return Pt(qAt,xy,58,e,0,1)},P(Mn,"EcorePackageImpl/29",1212),I(1186,1,ii,fB),l.wj=function(e){return Et(e,510)},l.xj=function(e){return Pt(Zr,{3:1,4:1,5:1,1934:1},590,e,0,1)},P(Mn,"EcorePackageImpl/3",1186),I(1213,1,ii,cJ),l.wj=function(e){return Et(e,573)},l.xj=function(e){return Pt(VAt,Ie,1940,e,0,1)},P(Mn,"EcorePackageImpl/30",1213),I(1214,1,ii,uJ),l.wj=function(e){return Et(e,153)},l.xj=function(e){return Pt(gLt,xy,153,e,0,1)},P(Mn,"EcorePackageImpl/31",1214),I(1215,1,ii,t9),l.wj=function(e){return Et(e,72)},l.xj=function(e){return Pt(sU,N0e,72,e,0,1)},P(Mn,"EcorePackageImpl/32",1215),I(1216,1,ii,dB),l.wj=function(e){return Et(e,155)},l.xj=function(e){return Pt(XE,te,155,e,0,1)},P(Mn,"EcorePackageImpl/33",1216),I(1217,1,ii,gB),l.wj=function(e){return Et(e,19)},l.xj=function(e){return Pt(ja,te,19,e,0,1)},P(Mn,"EcorePackageImpl/34",1217),I(1218,1,ii,uc),l.wj=function(e){return Et(e,290)},l.xj=function(e){return Pt(U8t,Ie,290,e,0,1)},P(Mn,"EcorePackageImpl/35",1218),I(1219,1,ii,lJ),l.wj=function(e){return Et(e,162)},l.xj=function(e){return Pt(Tw,te,162,e,0,1)},P(Mn,"EcorePackageImpl/36",1219),I(1220,1,ii,pB),l.wj=function(e){return Et(e,83)},l.xj=function(e){return Pt(W8t,Ie,83,e,0,1)},P(Mn,"EcorePackageImpl/37",1220),I(1221,1,ii,e9),l.wj=function(e){return Et(e,591)},l.xj=function(e){return Pt(lLt,Ie,591,e,0,1)},P(Mn,"EcorePackageImpl/38",1221),I(1222,1,ii,hJ),l.wj=function(e){return!1},l.xj=function(e){return Pt(ALt,Ie,2111,e,0,1)},P(Mn,"EcorePackageImpl/39",1222),I(1187,1,ii,fJ),l.wj=function(e){return Et(e,88)},l.xj=function(e){return Pt(Gh,Ie,26,e,0,1)},P(Mn,"EcorePackageImpl/4",1187),I(1223,1,ii,n9),l.wj=function(e){return Et(e,184)},l.xj=function(e){return Pt(Cw,te,184,e,0,1)},P(Mn,"EcorePackageImpl/40",1223),I(1224,1,ii,bB),l.wj=function(e){return ea(e)},l.xj=function(e){return Pt(Ae,te,2,e,6,1)},P(Mn,"EcorePackageImpl/41",1224),I(1225,1,ii,r9),l.wj=function(e){return Et(e,588)},l.xj=function(e){return Pt(GAt,Ie,588,e,0,1)},P(Mn,"EcorePackageImpl/42",1225),I(1226,1,ii,i9),l.wj=function(e){return!1},l.xj=function(e){return Pt(LLt,te,2112,e,0,1)},P(Mn,"EcorePackageImpl/43",1226),I(1227,1,ii,Rf),l.wj=function(e){return Et(e,42)},l.xj=function(e){return Pt(M2,Dq,42,e,0,1)},P(Mn,"EcorePackageImpl/44",1227),I(1188,1,ii,jL),l.wj=function(e){return Et(e,138)},l.xj=function(e){return Pt(i1,Ie,138,e,0,1)},P(Mn,"EcorePackageImpl/5",1188),I(1189,1,ii,$L),l.wj=function(e){return Et(e,148)},l.xj=function(e){return Pt(Cft,Ie,148,e,0,1)},P(Mn,"EcorePackageImpl/6",1189),I(1190,1,ii,rx),l.wj=function(e){return Et(e,457)},l.xj=function(e){return Pt(iU,Ie,671,e,0,1)},P(Mn,"EcorePackageImpl/7",1190),I(1191,1,ii,dJ),l.wj=function(e){return Et(e,573)},l.xj=function(e){return Pt(eg,Ie,678,e,0,1)},P(Mn,"EcorePackageImpl/8",1191),I(1192,1,ii,gJ),l.wj=function(e){return Et(e,471)},l.xj=function(e){return Pt(nA,Ie,471,e,0,1)},P(Mn,"EcorePackageImpl/9",1192),I(1025,1982,o0e,qqt),l.bi=function(e,n){Iun(this,u(n,415))},l.fi=function(e,n){noe(this,e,u(n,415))},P(Mn,"MinimalEObjectImpl/1ArrayDelegatingAdapterList",1025),I(1026,143,QD,rXt),l.Ai=function(){return this.a.a},P(Mn,"MinimalEObjectImpl/1ArrayDelegatingAdapterList/1",1026),I(1053,1052,{},mUt),P("org.eclipse.emf.ecore.plugin","EcorePlugin",1053);var lLt=Yi(P0e,"Resource");I(781,1378,F0e),l.Yk=function(e){},l.Zk=function(e){},l.Vk=function(){return!this.a&&(this.a=new ztt(this)),this.a},l.Wk=function(e){var n,r,s,o,h;if(s=e.length,s>0)if(Rr(0,e.length),e.charCodeAt(0)==47){for(h=new Yc(4),o=1,n=1;n<s;++n)Rr(n,e.length),e.charCodeAt(n)==47&&(ue(h,o==n?"":e.substr(o,n-o)),o=n+1);return ue(h,e.substr(o)),O1n(this,h)}else Rr(s-1,e.length),e.charCodeAt(s-1)==63&&(r=uvt(e,Eu(63),s-2),r>0&&(e=e.substr(0,r)));return Jgn(this,e)},l.Xk=function(){return this.c},l.Ib=function(){var e;return Ap(this.gm)+"@"+(e=Hi(this)>>>0,e.toString(16))+" uri='"+this.d+"'"},l.b=!1,P(eut,"ResourceImpl",781),I(1379,781,F0e,Fzt),P(eut,"BinaryResourceImpl",1379),I(1169,694,Yct),l.si=function(e){return Et(e,56)?Nnn(this,u(e,56)):Et(e,591)?new er(u(e,591).Vk()):Gt(e)===Gt(this.f)?u(e,14).Kc():(f8(),lN.a)},l.Ob=function(){return i5t(this)},l.a=!1,P($i,"EcoreUtil/ContentTreeIterator",1169),I(1380,1169,Yct,NYt),l.si=function(e){return Gt(e)===Gt(this.f)?u(e,15).Kc():new vZt(u(e,56))},P(eut,"ResourceImpl/5",1380),I(648,1994,T0e,ztt),l.Hc=function(e){return this.i<=4?fE(this,e):Et(e,49)&&u(e,49).Zg()==this.a},l.bi=function(e,n){e==this.i-1&&(this.a.b||(this.a.b=!0))},l.di=function(e,n){e==0?this.a.b||(this.a.b=!0):Brt(this,e,n)},l.fi=function(e,n){},l.gi=function(e,n,r){},l.aj=function(){return 2},l.Ai=function(){return this.a},l.bj=function(){return!0},l.cj=function(e,n){var r;return r=u(e,49),n=r.wh(this.a,n),n},l.dj=function(e,n){var r;return r=u(e,49),r.wh(null,n)},l.ej=function(){return!1},l.hi=function(){return!0},l.ri=function(e){return Pt(kb,Ie,56,e,0,1)},l.ni=function(){return!1},P(eut,"ResourceImpl/ContentsEList",648),I(957,1964,IE,Pzt),l.Zc=function(e){return this.a._h(e)},l.gc=function(){return this.a.gc()},P($i,"AbstractSequentialInternalEList/1",957);var hLt,fLt,ma,dLt;I(624,1,{},FKt);var aU,oU;P($i,"BasicExtendedMetaData",624),I(1160,1,{},FVt),l.$k=function(){return null},l._k=function(){return this.a==-2&&vg(this,a0n(this.d,this.b)),this.a},l.al=function(){return null},l.bl=function(){return vn(),vn(),io},l.ne=function(){return this.c==UE&&I3(this,Oie(this.d,this.b)),this.c},l.cl=function(){return 0},l.a=-2,l.c=UE,P($i,"BasicExtendedMetaData/EClassExtendedMetaDataImpl",1160),I(1161,1,{},rZt),l.$k=function(){return this.a==(L8(),aU)&&dpt(this,k2n(this.f,this.b)),this.a},l._k=function(){return 0},l.al=function(){return this.c==(L8(),aU)&&Ttt(this,E2n(this.f,this.b)),this.c},l.bl=function(){return!this.d&&Ctt(this,kwn(this.f,this.b)),this.d},l.ne=function(){return this.e==UE&&QB(this,Oie(this.f,this.b)),this.e},l.cl=function(){return this.g==-2&&ZB(this,Cdn(this.f,this.b)),this.g},l.e=UE,l.g=-2,P($i,"BasicExtendedMetaData/EDataTypeExtendedMetaDataImpl",1161),I(1159,1,{},RVt),l.b=!1,l.c=!1,P($i,"BasicExtendedMetaData/EPackageExtendedMetaDataImpl",1159),I(1162,1,{},nZt),l.c=-2,l.e=UE,l.f=UE,P($i,"BasicExtendedMetaData/EStructuralFeatureExtendedMetaDataImpl",1162),I(585,622,zo,Sj),l.aj=function(){return this.c},l.Fk=function(){return!1},l.li=function(e,n){return n},l.c=0,P($i,"EDataTypeEList",585);var gLt=Yi($i,"FeatureMap");I(75,585,{3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,63:1,58:1,76:1,153:1,215:1,1937:1,69:1,95:1},is),l.Vc=function(e,n){w2n(this,e,u(n,72))},l.Fc=function(e){return Bbn(this,u(e,72))},l.Yh=function(e){Een(this,u(e,72))},l.cj=function(e,n){return rZe(this,u(e,72),n)},l.dj=function(e,n){return hvt(this,u(e,72),n)},l.ii=function(e,n){return $wn(this,e,n)},l.li=function(e,n){return m3n(this,e,u(n,72))},l._c=function(e,n){return cvn(this,e,u(n,72))},l.jj=function(e,n){return iZe(this,u(e,72),n)},l.kj=function(e,n){return oKt(this,u(e,72),n)},l.lj=function(e,n,r){return cdn(this,u(e,72),u(n,72),r)},l.oi=function(e,n){return Sst(this,e,u(n,72))},l.dl=function(e,n){return U5t(this,e,n)},l.Wc=function(e,n){var r,s,o,h,d,w,k,C,M;for(C=new Kv(n.gc()),o=n.Kc();o.Ob();)if(s=u(o.Pb(),72),h=s.ak(),V0(this.e,h))(!h.hi()||!k$(this,h,s.dd())&&!fE(C,s))&&Mr(C,s);else{for(M=au(this.e.Tg(),h),r=u(this.g,119),d=!0,w=0;w<this.i;++w)if(k=r[w],M.rl(k.ak())){u(u4(this,w,s),72),d=!1;break}d&&Mr(C,s)}return yyt(this,e,C)},l.Gc=function(e){var n,r,s,o,h,d,w,k,C;for(k=new Kv(e.gc()),s=e.Kc();s.Ob();)if(r=u(s.Pb(),72),o=r.ak(),V0(this.e,o))(!o.hi()||!k$(this,o,r.dd())&&!fE(k,r))&&Mr(k,r);else{for(C=au(this.e.Tg(),o),n=u(this.g,119),h=!0,d=0;d<this.i;++d)if(w=n[d],C.rl(w.ak())){u(u4(this,d,r),72),h=!1;break}h&&Mr(k,r)}return rs(this,k)},l.Wh=function(e){return this.j=-1,hat(this,this.i,e)},l.el=function(e,n,r){return $5t(this,e,n,r)},l.mk=function(e,n){return wD(this,e,n)},l.fl=function(e,n,r){return uxt(this,e,n,r)},l.gl=function(){return this},l.hl=function(e,n){return kD(this,e,n)},l.il=function(e){return u(St(this,e),72).ak()},l.jl=function(e){return u(St(this,e),72).dd()},l.kl=function(){return this.b},l.bj=function(){return!0},l.ij=function(){return!0},l.ll=function(e){return!VI(this,e)},l.ri=function(e){return Pt(a5e,N0e,332,e,0,1)},l.Gk=function(e){return cnt(this,e)},l.Wb=function(e){QM(this,e)},l.ml=function(e,n){kq(this,e,n)},l.nl=function(e){return Wee(this,e)},l.ol=function(e){vse(this,e)},P($i,"BasicFeatureMap",75),I(1851,1,Jd),l.Nb=function(e){pa(this,e)},l.Rb=function(e){if(this.g==-1)throw rt(new Iu);zj(this);try{qce(this.e,this.b,this.a,e),this.d=this.e.j,$z(this)}catch(n){throw n=Wi(n),Et(n,73)?rt(new eh):rt(n)}},l.Ob=function(){return _it(this)},l.Sb=function(){return vre(this)},l.Pb=function(){return $z(this)},l.Tb=function(){return this.a},l.Ub=function(){var e;if(vre(this))return zj(this),this.g=--this.a,this.Lk()&&(e=d_(this.e,this.b,this.c,this.a,this.j),this.j=e),this.i=0,this.j;throw rt(new lc)},l.Vb=function(){return this.a-1},l.Qb=function(){if(this.g==-1)throw rt(new Iu);zj(this);try{jae(this.e,this.b,this.g),this.d=this.e.j,this.g<this.a&&(--this.a,--this.c),--this.g}catch(e){throw e=Wi(e),Et(e,73)?rt(new eh):rt(e)}},l.Lk=function(){return!1},l.Wb=function(e){if(this.g==-1)throw rt(new Iu);zj(this);try{fle(this.e,this.b,this.g,e),this.d=this.e.j}catch(n){throw n=Wi(n),Et(n,73)?rt(new eh):rt(n)}},l.a=0,l.c=0,l.d=0,l.f=!1,l.g=0,l.i=0,P($i,"FeatureMapUtil/BasicFeatureEIterator",1851),I(410,1851,Jd,U8),l.pl=function(){var e,n,r;for(r=this.e.i,e=u(this.e.g,119);this.c<r;){if(n=e[this.c],this.k.rl(n.ak()))return this.j=this.f?n:n.dd(),this.i=2,!0;++this.c}return this.i=1,this.g=-1,!1},l.ql=function(){var e,n;for(e=u(this.e.g,119);--this.c>=0;)if(n=e[this.c],this.k.rl(n.ak()))return this.j=this.f?n:n.dd(),this.i=-2,!0;return this.i=-1,this.g=-1,!1},P($i,"BasicFeatureMap/FeatureEIterator",410),I(662,410,Jd,Uet),l.Lk=function(){return!0},P($i,"BasicFeatureMap/ResolvingFeatureEIterator",662),I(955,486,CH,LUt),l.Gi=function(){return this},P($i,"EContentsEList/1",955),I(956,486,CH,tUt),l.Lk=function(){return!1},P($i,"EContentsEList/2",956),I(954,279,_H,MUt),l.Nk=function(e){},l.Ob=function(){return!1},l.Sb=function(){return!1},P($i,"EContentsEList/FeatureIteratorImpl/1",954),I(825,585,zo,b2t),l.ci=function(){this.a=!0},l.fj=function(){return this.a},l.Xj=function(){var e;xr(this),ml(this.e)?(e=this.a,this.a=!1,mi(this.e,new df(this.e,2,this.c,e,!1))):this.a=!1},l.a=!1,P($i,"EDataTypeEList/Unsettable",825),I(1849,585,zo,RUt),l.hi=function(){return!0},P($i,"EDataTypeUniqueEList",1849),I(1850,825,zo,jUt),l.hi=function(){return!0},P($i,"EDataTypeUniqueEList/Unsettable",1850),I(139,85,zo,Ou),l.Ek=function(){return!0},l.li=function(e,n){return o6(this,e,u(n,56))},P($i,"EObjectContainmentEList/Resolving",139),I(1163,545,zo,BUt),l.Ek=function(){return!0},l.li=function(e,n){return o6(this,e,u(n,56))},P($i,"EObjectContainmentEList/Unsettable/Resolving",1163),I(748,16,zo,ivt),l.ci=function(){this.a=!0},l.fj=function(){return this.a},l.Xj=function(){var e;xr(this),ml(this.e)?(e=this.a,this.a=!1,mi(this.e,new df(this.e,2,this.c,e,!1))):this.a=!1},l.a=!1,P($i,"EObjectContainmentWithInverseEList/Unsettable",748),I(1173,748,zo,KWt),l.Ek=function(){return!0},l.li=function(e,n){return o6(this,e,u(n,56))},P($i,"EObjectContainmentWithInverseEList/Unsettable/Resolving",1173),I(743,496,zo,p2t),l.ci=function(){this.a=!0},l.fj=function(){return this.a},l.Xj=function(){var e;xr(this),ml(this.e)?(e=this.a,this.a=!1,mi(this.e,new df(this.e,2,this.c,e,!1))):this.a=!1},l.a=!1,P($i,"EObjectEList/Unsettable",743),I(328,496,zo,U3),l.Ek=function(){return!0},l.li=function(e,n){return o6(this,e,u(n,56))},P($i,"EObjectResolvingEList",328),I(1641,743,zo,$Ut),l.Ek=function(){return!0},l.li=function(e,n){return o6(this,e,u(n,56))},P($i,"EObjectResolvingEList/Unsettable",1641),I(1381,1,{},pJ);var c5e;P($i,"EObjectValidator",1381),I(546,496,zo,Uj),l.zk=function(){return this.d},l.Ak=function(){return this.b},l.bj=function(){return!0},l.Dk=function(){return!0},l.b=0,P($i,"EObjectWithInverseEList",546),I(1176,546,zo,YWt),l.Ck=function(){return!0},P($i,"EObjectWithInverseEList/ManyInverse",1176),I(625,546,zo,fnt),l.ci=function(){this.a=!0},l.fj=function(){return this.a},l.Xj=function(){var e;xr(this),ml(this.e)?(e=this.a,this.a=!1,mi(this.e,new df(this.e,2,this.c,e,!1))):this.a=!1},l.a=!1,P($i,"EObjectWithInverseEList/Unsettable",625),I(1175,625,zo,XWt),l.Ck=function(){return!0},P($i,"EObjectWithInverseEList/Unsettable/ManyInverse",1175),I(749,546,zo,svt),l.Ek=function(){return!0},l.li=function(e,n){return o6(this,e,u(n,56))},P($i,"EObjectWithInverseResolvingEList",749),I(31,749,zo,Cn),l.Ck=function(){return!0},P($i,"EObjectWithInverseResolvingEList/ManyInverse",31),I(750,625,zo,avt),l.Ek=function(){return!0},l.li=function(e,n){return o6(this,e,u(n,56))},P($i,"EObjectWithInverseResolvingEList/Unsettable",750),I(1174,750,zo,QWt),l.Ck=function(){return!0},P($i,"EObjectWithInverseResolvingEList/Unsettable/ManyInverse",1174),I(1164,622,zo),l.ai=function(){return(this.b&1792)==0},l.ci=function(){this.b|=1},l.Bk=function(){return(this.b&4)!=0},l.bj=function(){return(this.b&40)!=0},l.Ck=function(){return(this.b&16)!=0},l.Dk=function(){return(this.b&8)!=0},l.Ek=function(){return(this.b&Ay)!=0},l.rk=function(){return(this.b&32)!=0},l.Fk=function(){return(this.b&wf)!=0},l.wj=function(e){return this.d?DZt(this.d,e):this.ak().Yj().wj(e)},l.fj=function(){return this.b&2?(this.b&1)!=0:this.i!=0},l.hi=function(){return(this.b&128)!=0},l.Xj=function(){var e;xr(this),this.b&2&&(ml(this.e)?(e=(this.b&1)!=0,this.b&=-2,Kk(this,new df(this.e,2,Vi(this.e.Tg(),this.ak()),e,!1))):this.b&=-2)},l.ni=function(){return(this.b&1536)==0},l.b=0,P($i,"EcoreEList/Generic",1164),I(1165,1164,zo,zXt),l.ak=function(){return this.a},P($i,"EcoreEList/Dynamic",1165),I(747,63,_d,mpt),l.ri=function(e){return CI(this.a.a,e)},P($i,"EcoreEMap/1",747),I(746,85,zo,iwt),l.bi=function(e,n){qz(this.b,u(n,133))},l.di=function(e,n){Sne(this.b)},l.ei=function(e,n,r){var s;++(s=this.b,u(n,133),s).e},l.fi=function(e,n){Fit(this.b,u(n,133))},l.gi=function(e,n,r){Fit(this.b,u(r,133)),Gt(r)===Gt(n)&&u(r,133).Th(fXe(u(n,133).cd())),qz(this.b,u(n,133))},P($i,"EcoreEMap/DelegateEObjectContainmentEList",746),I(1171,151,D8t,$ee),P($i,"EcoreEMap/Unsettable",1171),I(1172,746,zo,ZWt),l.ci=function(){this.a=!0},l.fj=function(){return this.a},l.Xj=function(){var e;xr(this),ml(this.e)?(e=this.a,this.a=!1,mi(this.e,new df(this.e,2,this.c,e,!1))):this.a=!1},l.a=!1,P($i,"EcoreEMap/Unsettable/UnsettableDelegateEObjectContainmentEList",1172),I(1168,228,_4,GYt),l.a=!1,l.b=!1,P($i,"EcoreUtil/Copier",1168),I(745,1,ra,vZt),l.Nb=function(e){pa(this,e)},l.Ob=function(){return die(this)},l.Pb=function(){var e;return die(this),e=this.b,this.b=null,e},l.Qb=function(){this.a.Qb()},P($i,"EcoreUtil/ProperContentIterator",745),I(1382,1381,{},HB);var u5e;P($i,"EcoreValidator",1382);var l5e;Yi($i,"FeatureMapUtil/Validator"),I(1260,1,{1942:1},bJ),l.rl=function(e){return!0},P($i,"FeatureMapUtil/1",1260),I(757,1,{1942:1},xxt),l.rl=function(e){var n;return this.c==e?!0:(n=Re(Jn(this.a,e)),n==null?rwn(this,e)?(CJt(this.a,e,(Fn(),YE)),!0):(CJt(this.a,e,(Fn(),I2)),!1):n==(Fn(),YE))},l.e=!1;var Lft;P($i,"FeatureMapUtil/BasicValidator",757),I(758,43,_4,h2t),P($i,"FeatureMapUtil/BasicValidator/Cache",758),I(501,52,{20:1,28:1,52:1,14:1,15:1,58:1,76:1,69:1,95:1},DM),l.Vc=function(e,n){qce(this.c,this.b,e,n)},l.Fc=function(e){return U5t(this.c,this.b,e)},l.Wc=function(e,n){return wyn(this.c,this.b,e,n)},l.Gc=function(e){return hC(this,e)},l.Xh=function(e,n){jan(this.c,this.b,e,n)},l.lk=function(e,n){return $5t(this.c,this.b,e,n)},l.pi=function(e){return xq(this.c,this.b,e,!1)},l.Zh=function(){return hUt(this.c,this.b)},l.$h=function(){return JYe(this.c,this.b)},l._h=function(e){return Gsn(this.c,this.b,e)},l.mk=function(e,n){return MWt(this,e,n)},l.$b=function(){vx(this)},l.Hc=function(e){return k$(this.c,this.b,e)},l.Ic=function(e){return Hon(this.c,this.b,e)},l.Xb=function(e){return xq(this.c,this.b,e,!0)},l.Wj=function(e){return this},l.Xc=function(e){return esn(this.c,this.b,e)},l.dc=function(){return tj(this)},l.fj=function(){return!VI(this.c,this.b)},l.Kc=function(){return San(this.c,this.b)},l.Yc=function(){return Aan(this.c,this.b)},l.Zc=function(e){return $un(this.c,this.b,e)},l.ii=function(e,n){return ale(this.c,this.b,e,n)},l.ji=function(e,n){Rsn(this.c,this.b,e,n)},l.$c=function(e){return jae(this.c,this.b,e)},l.Mc=function(e){return Twn(this.c,this.b,e)},l._c=function(e,n){return fle(this.c,this.b,e,n)},l.Wb=function(e){iq(this.c,this.b),hC(this,u(e,15))},l.gc=function(){return Jun(this.c,this.b)},l.Pc=function(){return Zrn(this.c,this.b)},l.Qc=function(e){return nsn(this.c,this.b,e)},l.Ib=function(){var e,n;for(n=new xg,n.a+="[",e=hUt(this.c,this.b);_it(e);)fo(n,dC($z(e))),_it(e)&&(n.a+=Ka);return n.a+="]",n.a},l.Xj=function(){iq(this.c,this.b)},P($i,"FeatureMapUtil/FeatureEList",501),I(627,36,QD,Art),l.yi=function(e){return ZC(this,e)},l.Di=function(e){var n,r,s,o,h,d,w;switch(this.d){case 1:case 2:{if(h=e.Ai(),Gt(h)===Gt(this.c)&&ZC(this,null)==e.yi(null))return this.g=e.zi(),e.xi()==1&&(this.d=1),!0;break}case 3:{switch(o=e.xi(),o){case 3:{if(h=e.Ai(),Gt(h)===Gt(this.c)&&ZC(this,null)==e.yi(null))return this.d=5,n=new Kv(2),Mr(n,this.g),Mr(n,e.zi()),this.g=n,!0;break}}break}case 5:{switch(o=e.xi(),o){case 3:{if(h=e.Ai(),Gt(h)===Gt(this.c)&&ZC(this,null)==e.yi(null))return r=u(this.g,14),r.Fc(e.zi()),!0;break}}break}case 4:{switch(o=e.xi(),o){case 3:{if(h=e.Ai(),Gt(h)===Gt(this.c)&&ZC(this,null)==e.yi(null))return this.d=1,this.g=e.zi(),!0;break}case 4:{if(h=e.Ai(),Gt(h)===Gt(this.c)&&ZC(this,null)==e.yi(null))return this.d=6,w=new Kv(2),Mr(w,this.n),Mr(w,e.Bi()),this.n=w,d=ct(ot(Tr,1),Xr,25,15,[this.o,e.Ci()]),this.g=d,!0;break}}break}case 6:{switch(o=e.xi(),o){case 4:{if(h=e.Ai(),Gt(h)===Gt(this.c)&&ZC(this,null)==e.yi(null))return r=u(this.n,14),r.Fc(e.Bi()),d=u(this.g,48),s=Pt(Tr,Xr,25,d.length+1,15,1),Ic(d,0,s,0,d.length),s[d.length]=e.Ci(),this.g=s,!0;break}}break}}return!1},P($i,"FeatureMapUtil/FeatureENotificationImpl",627),I(552,501,{20:1,28:1,52:1,14:1,15:1,58:1,76:1,153:1,215:1,1937:1,69:1,95:1},Ij),l.dl=function(e,n){return U5t(this.c,e,n)},l.el=function(e,n,r){return $5t(this.c,e,n,r)},l.fl=function(e,n,r){return uxt(this.c,e,n,r)},l.gl=function(){return this},l.hl=function(e,n){return kD(this.c,e,n)},l.il=function(e){return u(xq(this.c,this.b,e,!1),72).ak()},l.jl=function(e){return u(xq(this.c,this.b,e,!1),72).dd()},l.kl=function(){return this.a},l.ll=function(e){return!VI(this.c,e)},l.ml=function(e,n){kq(this.c,e,n)},l.nl=function(e){return Wee(this.c,e)},l.ol=function(e){vse(this.c,e)},P($i,"FeatureMapUtil/FeatureFeatureMap",552),I(1259,1,tut,jVt),l.Wj=function(e){return xq(this.b,this.a,-1,e)},l.fj=function(){return!VI(this.b,this.a)},l.Wb=function(e){kq(this.b,this.a,e)},l.Xj=function(){iq(this.b,this.a)},P($i,"FeatureMapUtil/FeatureValue",1259);var U6,Mft,Ift,W6,h5e,fN=Yi(NH,"AnyType");I(666,60,U0,ret),P(NH,"InvalidDatatypeValueException",666);var cU=Yi(NH,R0e),dN=Yi(NH,j0e),pLt=Yi(NH,$0e),f5e,pc,bLt,U2,d5e,g5e,p5e,b5e,v5e,w5e,m5e,y5e,x5e,k5e,E5e,u5,T5e,l5,oA,C5e,Gw,gN,pN,_5e,cA,uA;I(830,506,{105:1,92:1,90:1,56:1,49:1,97:1,843:1},$pt),l._g=function(e,n,r){switch(e){case 0:return r?(!this.c&&(this.c=new is(this,0)),this.c):(!this.c&&(this.c=new is(this,0)),this.c.b);case 1:return r?(!this.c&&(this.c=new is(this,0)),u(Bc(this.c,(Di(),U2)),153)):(!this.c&&(this.c=new is(this,0)),u(u(Bc(this.c,(Di(),U2)),153),215)).kl();case 2:return r?(!this.b&&(this.b=new is(this,2)),this.b):(!this.b&&(this.b=new is(this,2)),this.b.b)}return oh(this,e-Zn(this.zh()),yn(this.j&2?(!this.k&&(this.k=new th),this.k).ck():this.zh(),e),n,r)},l.jh=function(e,n,r){var s;switch(n){case 0:return!this.c&&(this.c=new is(this,0)),wD(this.c,e,r);case 1:return(!this.c&&(this.c=new is(this,0)),u(u(Bc(this.c,(Di(),U2)),153),69)).mk(e,r);case 2:return!this.b&&(this.b=new is(this,2)),wD(this.b,e,r)}return s=u(yn(this.j&2?(!this.k&&(this.k=new th),this.k).ck():this.zh(),n),66),s.Nj().Rj(this,Omt(this),n-Zn(this.zh()),e,r)},l.lh=function(e){switch(e){case 0:return!!this.c&&this.c.i!=0;case 1:return!(!this.c&&(this.c=new is(this,0)),u(Bc(this.c,(Di(),U2)),153)).dc();case 2:return!!this.b&&this.b.i!=0}return sh(this,e-Zn(this.zh()),yn(this.j&2?(!this.k&&(this.k=new th),this.k).ck():this.zh(),e))},l.sh=function(e,n){switch(e){case 0:!this.c&&(this.c=new is(this,0)),QM(this.c,n);return;case 1:(!this.c&&(this.c=new is(this,0)),u(u(Bc(this.c,(Di(),U2)),153),215)).Wb(n);return;case 2:!this.b&&(this.b=new is(this,2)),QM(this.b,n);return}fh(this,e-Zn(this.zh()),yn(this.j&2?(!this.k&&(this.k=new th),this.k).ck():this.zh(),e),n)},l.zh=function(){return Di(),bLt},l.Bh=function(e){switch(e){case 0:!this.c&&(this.c=new is(this,0)),xr(this.c);return;case 1:(!this.c&&(this.c=new is(this,0)),u(Bc(this.c,(Di(),U2)),153)).$b();return;case 2:!this.b&&(this.b=new is(this,2)),xr(this.b);return}lh(this,e-Zn(this.zh()),yn(this.j&2?(!this.k&&(this.k=new th),this.k).ck():this.zh(),e))},l.Ib=function(){var e;return this.j&4?bf(this):(e=new Th(bf(this)),e.a+=" (mixed: ",oC(e,this.c),e.a+=", anyAttribute: ",oC(e,this.b),e.a+=")",e.a)},P(ys,"AnyTypeImpl",830),I(667,506,{105:1,92:1,90:1,56:1,49:1,97:1,2021:1,667:1},vB),l._g=function(e,n,r){switch(e){case 0:return this.a;case 1:return this.b}return oh(this,e-Zn((Di(),u5)),yn(this.j&2?(!this.k&&(this.k=new th),this.k).ck():u5,e),n,r)},l.lh=function(e){switch(e){case 0:return this.a!=null;case 1:return this.b!=null}return sh(this,e-Zn((Di(),u5)),yn(this.j&2?(!this.k&&(this.k=new th),this.k).ck():u5,e))},l.sh=function(e,n){switch(e){case 0:Ltt(this,Br(n));return;case 1:ppt(this,Br(n));return}fh(this,e-Zn((Di(),u5)),yn(this.j&2?(!this.k&&(this.k=new th),this.k).ck():u5,e),n)},l.zh=function(){return Di(),u5},l.Bh=function(e){switch(e){case 0:this.a=null;return;case 1:this.b=null;return}lh(this,e-Zn((Di(),u5)),yn(this.j&2?(!this.k&&(this.k=new th),this.k).ck():u5,e))},l.Ib=function(){var e;return this.j&4?bf(this):(e=new Th(bf(this)),e.a+=" (data: ",fo(e,this.a),e.a+=", target: ",fo(e,this.b),e.a+=")",e.a)},l.a=null,l.b=null,P(ys,"ProcessingInstructionImpl",667),I(668,830,{105:1,92:1,90:1,56:1,49:1,97:1,843:1,2022:1,668:1},_qt),l._g=function(e,n,r){switch(e){case 0:return r?(!this.c&&(this.c=new is(this,0)),this.c):(!this.c&&(this.c=new is(this,0)),this.c.b);case 1:return r?(!this.c&&(this.c=new is(this,0)),u(Bc(this.c,(Di(),U2)),153)):(!this.c&&(this.c=new is(this,0)),u(u(Bc(this.c,(Di(),U2)),153),215)).kl();case 2:return r?(!this.b&&(this.b=new is(this,2)),this.b):(!this.b&&(this.b=new is(this,2)),this.b.b);case 3:return!this.c&&(this.c=new is(this,0)),Br(kD(this.c,(Di(),oA),!0));case 4:return ovt(this.a,(!this.c&&(this.c=new is(this,0)),Br(kD(this.c,(Di(),oA),!0))));case 5:return this.a}return oh(this,e-Zn((Di(),l5)),yn(this.j&2?(!this.k&&(this.k=new th),this.k).ck():l5,e),n,r)},l.lh=function(e){switch(e){case 0:return!!this.c&&this.c.i!=0;case 1:return!(!this.c&&(this.c=new is(this,0)),u(Bc(this.c,(Di(),U2)),153)).dc();case 2:return!!this.b&&this.b.i!=0;case 3:return!this.c&&(this.c=new is(this,0)),Br(kD(this.c,(Di(),oA),!0))!=null;case 4:return ovt(this.a,(!this.c&&(this.c=new is(this,0)),Br(kD(this.c,(Di(),oA),!0))))!=null;case 5:return!!this.a}return sh(this,e-Zn((Di(),l5)),yn(this.j&2?(!this.k&&(this.k=new th),this.k).ck():l5,e))},l.sh=function(e,n){switch(e){case 0:!this.c&&(this.c=new is(this,0)),QM(this.c,n);return;case 1:(!this.c&&(this.c=new is(this,0)),u(u(Bc(this.c,(Di(),U2)),153),215)).Wb(n);return;case 2:!this.b&&(this.b=new is(this,2)),QM(this.b,n);return;case 3:Uwt(this,Br(n));return;case 4:Uwt(this,cvt(this.a,n));return;case 5:wc(this,u(n,148));return}fh(this,e-Zn((Di(),l5)),yn(this.j&2?(!this.k&&(this.k=new th),this.k).ck():l5,e),n)},l.zh=function(){return Di(),l5},l.Bh=function(e){switch(e){case 0:!this.c&&(this.c=new is(this,0)),xr(this.c);return;case 1:(!this.c&&(this.c=new is(this,0)),u(Bc(this.c,(Di(),U2)),153)).$b();return;case 2:!this.b&&(this.b=new is(this,2)),xr(this.b);return;case 3:!this.c&&(this.c=new is(this,0)),kq(this.c,(Di(),oA),null);return;case 4:Uwt(this,cvt(this.a,null));return;case 5:this.a=null;return}lh(this,e-Zn((Di(),l5)),yn(this.j&2?(!this.k&&(this.k=new th),this.k).ck():l5,e))},P(ys,"SimpleAnyTypeImpl",668),I(669,506,{105:1,92:1,90:1,56:1,49:1,97:1,2023:1,669:1},Cqt),l._g=function(e,n,r){switch(e){case 0:return r?(!this.a&&(this.a=new is(this,0)),this.a):(!this.a&&(this.a=new is(this,0)),this.a.b);case 1:return r?(!this.b&&(this.b=new Tl((dn(),Qa),cc,this,1)),this.b):(!this.b&&(this.b=new Tl((dn(),Qa),cc,this,1)),fI(this.b));case 2:return r?(!this.c&&(this.c=new Tl((dn(),Qa),cc,this,2)),this.c):(!this.c&&(this.c=new Tl((dn(),Qa),cc,this,2)),fI(this.c));case 3:return!this.a&&(this.a=new is(this,0)),Bc(this.a,(Di(),gN));case 4:return!this.a&&(this.a=new is(this,0)),Bc(this.a,(Di(),pN));case 5:return!this.a&&(this.a=new is(this,0)),Bc(this.a,(Di(),cA));case 6:return!this.a&&(this.a=new is(this,0)),Bc(this.a,(Di(),uA))}return oh(this,e-Zn((Di(),Gw)),yn(this.j&2?(!this.k&&(this.k=new th),this.k).ck():Gw,e),n,r)},l.jh=function(e,n,r){var s;switch(n){case 0:return!this.a&&(this.a=new is(this,0)),wD(this.a,e,r);case 1:return!this.b&&(this.b=new Tl((dn(),Qa),cc,this,1)),kj(this.b,e,r);case 2:return!this.c&&(this.c=new Tl((dn(),Qa),cc,this,2)),kj(this.c,e,r);case 5:return!this.a&&(this.a=new is(this,0)),MWt(Bc(this.a,(Di(),cA)),e,r)}return s=u(yn(this.j&2?(!this.k&&(this.k=new th),this.k).ck():(Di(),Gw),n),66),s.Nj().Rj(this,Omt(this),n-Zn((Di(),Gw)),e,r)},l.lh=function(e){switch(e){case 0:return!!this.a&&this.a.i!=0;case 1:return!!this.b&&this.b.f!=0;case 2:return!!this.c&&this.c.f!=0;case 3:return!this.a&&(this.a=new is(this,0)),!tj(Bc(this.a,(Di(),gN)));case 4:return!this.a&&(this.a=new is(this,0)),!tj(Bc(this.a,(Di(),pN)));case 5:return!this.a&&(this.a=new is(this,0)),!tj(Bc(this.a,(Di(),cA)));case 6:return!this.a&&(this.a=new is(this,0)),!tj(Bc(this.a,(Di(),uA)))}return sh(this,e-Zn((Di(),Gw)),yn(this.j&2?(!this.k&&(this.k=new th),this.k).ck():Gw,e))},l.sh=function(e,n){switch(e){case 0:!this.a&&(this.a=new is(this,0)),QM(this.a,n);return;case 1:!this.b&&(this.b=new Tl((dn(),Qa),cc,this,1)),lz(this.b,n);return;case 2:!this.c&&(this.c=new Tl((dn(),Qa),cc,this,2)),lz(this.c,n);return;case 3:!this.a&&(this.a=new is(this,0)),vx(Bc(this.a,(Di(),gN))),!this.a&&(this.a=new is(this,0)),hC(Bc(this.a,gN),u(n,14));return;case 4:!this.a&&(this.a=new is(this,0)),vx(Bc(this.a,(Di(),pN))),!this.a&&(this.a=new is(this,0)),hC(Bc(this.a,pN),u(n,14));return;case 5:!this.a&&(this.a=new is(this,0)),vx(Bc(this.a,(Di(),cA))),!this.a&&(this.a=new is(this,0)),hC(Bc(this.a,cA),u(n,14));return;case 6:!this.a&&(this.a=new is(this,0)),vx(Bc(this.a,(Di(),uA))),!this.a&&(this.a=new is(this,0)),hC(Bc(this.a,uA),u(n,14));return}fh(this,e-Zn((Di(),Gw)),yn(this.j&2?(!this.k&&(this.k=new th),this.k).ck():Gw,e),n)},l.zh=function(){return Di(),Gw},l.Bh=function(e){switch(e){case 0:!this.a&&(this.a=new is(this,0)),xr(this.a);return;case 1:!this.b&&(this.b=new Tl((dn(),Qa),cc,this,1)),this.b.c.$b();return;case 2:!this.c&&(this.c=new Tl((dn(),Qa),cc,this,2)),this.c.c.$b();return;case 3:!this.a&&(this.a=new is(this,0)),vx(Bc(this.a,(Di(),gN)));return;case 4:!this.a&&(this.a=new is(this,0)),vx(Bc(this.a,(Di(),pN)));return;case 5:!this.a&&(this.a=new is(this,0)),vx(Bc(this.a,(Di(),cA)));return;case 6:!this.a&&(this.a=new is(this,0)),vx(Bc(this.a,(Di(),uA)));return}lh(this,e-Zn((Di(),Gw)),yn(this.j&2?(!this.k&&(this.k=new th),this.k).ck():Gw,e))},l.Ib=function(){var e;return this.j&4?bf(this):(e=new Th(bf(this)),e.a+=" (mixed: ",oC(e,this.a),e.a+=")",e.a)},P(ys,"XMLTypeDocumentRootImpl",669),I(1919,704,{105:1,92:1,90:1,471:1,147:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1,2024:1},Em),l.Ih=function(e,n){switch(e.yj()){case 7:case 8:case 9:case 10:case 16:case 22:case 23:case 24:case 25:case 26:case 32:case 33:case 34:case 36:case 37:case 44:case 45:case 50:case 51:case 53:case 55:case 56:case 57:case 58:case 60:case 61:case 4:return n==null?null:$o(n);case 19:case 28:case 29:case 35:case 38:case 39:case 41:case 46:case 52:case 54:case 5:return Br(n);case 6:return vQe(u(n,190));case 12:case 47:case 49:case 11:return Jle(this,e,n);case 13:return n==null?null:iyn(u(n,240));case 15:case 14:return n==null?null:gen(Xt(ye(n)));case 17:return nae((Di(),n));case 18:return nae(n);case 21:case 20:return n==null?null:pen(u(n,155).a);case 27:return wQe(u(n,190));case 30:return wse((Di(),u(n,15)));case 31:return wse(u(n,15));case 40:return yQe((Di(),n));case 42:return rae((Di(),n));case 43:return rae(n);case 59:case 48:return mQe((Di(),n));default:throw rt(new Pn(HE+e.ne()+kw))}},l.Jh=function(e){var n,r,s,o,h;switch(e.G==-1&&(e.G=(r=Fl(e),r?Fg(r.Mh(),e):-1)),e.G){case 0:return n=new $pt,n;case 1:return s=new vB,s;case 2:return o=new _qt,o;case 3:return h=new Cqt,h;default:throw rt(new Pn(Rct+e.zb+kw))}},l.Kh=function(e,n){var r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt;switch(e.yj()){case 5:case 52:case 4:return n;case 6:return Nhn(n);case 8:case 7:return n==null?null:xdn(n);case 9:return n==null?null:EI($l((s=$c(n,!0),s.length>0&&(Rr(0,s.length),s.charCodeAt(0)==43)?s.substr(1):s),-128,127)<<24>>24);case 10:return n==null?null:EI($l((o=$c(n,!0),o.length>0&&(Rr(0,o.length),o.charCodeAt(0)==43)?o.substr(1):o),-128,127)<<24>>24);case 11:return Br(pw(this,(Di(),p5e),n));case 12:return Br(pw(this,(Di(),b5e),n));case 13:return n==null?null:new obt($c(n,!0));case 15:case 14:return qbn(n);case 16:return Br(pw(this,(Di(),v5e),n));case 17:return Tie((Di(),n));case 18:return Tie(n);case 28:case 29:case 35:case 38:case 39:case 41:case 54:case 19:return $c(n,!0);case 21:case 20:return Qbn(n);case 22:return Br(pw(this,(Di(),w5e),n));case 23:return Br(pw(this,(Di(),m5e),n));case 24:return Br(pw(this,(Di(),y5e),n));case 25:return Br(pw(this,(Di(),x5e),n));case 26:return Br(pw(this,(Di(),k5e),n));case 27:return Lhn(n);case 30:return Cie((Di(),n));case 31:return Cie(n);case 32:return n==null?null:de($l((M=$c(n,!0),M.length>0&&(Rr(0,M.length),M.charCodeAt(0)==43)?M.substr(1):M),_a,vi));case 33:return n==null?null:new Np((F=$c(n,!0),F.length>0&&(Rr(0,F.length),F.charCodeAt(0)==43)?F.substr(1):F));case 34:return n==null?null:de($l((H=$c(n,!0),H.length>0&&(Rr(0,H.length),H.charCodeAt(0)==43)?H.substr(1):H),_a,vi));case 36:return n==null?null:g2(Sq((V=$c(n,!0),V.length>0&&(Rr(0,V.length),V.charCodeAt(0)==43)?V.substr(1):V)));case 37:return n==null?null:g2(Sq((Y=$c(n,!0),Y.length>0&&(Rr(0,Y.length),Y.charCodeAt(0)==43)?Y.substr(1):Y)));case 40:return Vln((Di(),n));case 42:return _ie((Di(),n));case 43:return _ie(n);case 44:return n==null?null:new Np((tt=$c(n,!0),tt.length>0&&(Rr(0,tt.length),tt.charCodeAt(0)==43)?tt.substr(1):tt));case 45:return n==null?null:new Np((gt=$c(n,!0),gt.length>0&&(Rr(0,gt.length),gt.charCodeAt(0)==43)?gt.substr(1):gt));case 46:return $c(n,!1);case 47:return Br(pw(this,(Di(),E5e),n));case 59:case 48:return Gln((Di(),n));case 49:return Br(pw(this,(Di(),T5e),n));case 50:return n==null?null:eE($l((Lt=$c(n,!0),Lt.length>0&&(Rr(0,Lt.length),Lt.charCodeAt(0)==43)?Lt.substr(1):Lt),MH,32767)<<16>>16);case 51:return n==null?null:eE($l((h=$c(n,!0),h.length>0&&(Rr(0,h.length),h.charCodeAt(0)==43)?h.substr(1):h),MH,32767)<<16>>16);case 53:return Br(pw(this,(Di(),C5e),n));case 55:return n==null?null:eE($l((d=$c(n,!0),d.length>0&&(Rr(0,d.length),d.charCodeAt(0)==43)?d.substr(1):d),MH,32767)<<16>>16);case 56:return n==null?null:eE($l((w=$c(n,!0),w.length>0&&(Rr(0,w.length),w.charCodeAt(0)==43)?w.substr(1):w),MH,32767)<<16>>16);case 57:return n==null?null:g2(Sq((k=$c(n,!0),k.length>0&&(Rr(0,k.length),k.charCodeAt(0)==43)?k.substr(1):k)));case 58:return n==null?null:g2(Sq((C=$c(n,!0),C.length>0&&(Rr(0,C.length),C.charCodeAt(0)==43)?C.substr(1):C)));case 60:return n==null?null:de($l((r=$c(n,!0),r.length>0&&(Rr(0,r.length),r.charCodeAt(0)==43)?r.substr(1):r),_a,vi));case 61:return n==null?null:de($l($c(n,!0),_a,vi));default:throw rt(new Pn(HE+e.ne()+kw))}};var S5e,vLt,A5e,wLt;P(ys,"XMLTypeFactoryImpl",1919),I(586,179,{105:1,92:1,90:1,147:1,191:1,56:1,235:1,108:1,49:1,97:1,150:1,179:1,114:1,115:1,675:1,1945:1,586:1},hXt),l.N=!1,l.O=!1;var L5e=!1;P(ys,"XMLTypePackageImpl",586),I(1852,1,{837:1},ix),l._j=function(){return txt(),R5e},P(ys,"XMLTypePackageImpl/1",1852),I(1861,1,ii,h1),l.wj=function(e){return ea(e)},l.xj=function(e){return Pt(Ae,te,2,e,6,1)},P(ys,"XMLTypePackageImpl/10",1861),I(1862,1,ii,wB),l.wj=function(e){return ea(e)},l.xj=function(e){return Pt(Ae,te,2,e,6,1)},P(ys,"XMLTypePackageImpl/11",1862),I(1863,1,ii,mB),l.wj=function(e){return ea(e)},l.xj=function(e){return Pt(Ae,te,2,e,6,1)},P(ys,"XMLTypePackageImpl/12",1863),I(1864,1,ii,yB),l.wj=function(e){return Nm(e)},l.xj=function(e){return Pt(ca,te,333,e,7,1)},P(ys,"XMLTypePackageImpl/13",1864),I(1865,1,ii,xB),l.wj=function(e){return ea(e)},l.xj=function(e){return Pt(Ae,te,2,e,6,1)},P(ys,"XMLTypePackageImpl/14",1865),I(1866,1,ii,kB),l.wj=function(e){return Et(e,15)},l.xj=function(e){return Pt(ph,xy,15,e,0,1)},P(ys,"XMLTypePackageImpl/15",1866),I(1867,1,ii,EB),l.wj=function(e){return Et(e,15)},l.xj=function(e){return Pt(ph,xy,15,e,0,1)},P(ys,"XMLTypePackageImpl/16",1867),I(1868,1,ii,jf),l.wj=function(e){return ea(e)},l.xj=function(e){return Pt(Ae,te,2,e,6,1)},P(ys,"XMLTypePackageImpl/17",1868),I(1869,1,ii,hu),l.wj=function(e){return Et(e,155)},l.xj=function(e){return Pt(XE,te,155,e,0,1)},P(ys,"XMLTypePackageImpl/18",1869),I(1870,1,ii,vJ),l.wj=function(e){return ea(e)},l.xj=function(e){return Pt(Ae,te,2,e,6,1)},P(ys,"XMLTypePackageImpl/19",1870),I(1853,1,ii,wJ),l.wj=function(e){return Et(e,843)},l.xj=function(e){return Pt(fN,Ie,843,e,0,1)},P(ys,"XMLTypePackageImpl/2",1853),I(1871,1,ii,mJ),l.wj=function(e){return ea(e)},l.xj=function(e){return Pt(Ae,te,2,e,6,1)},P(ys,"XMLTypePackageImpl/20",1871),I(1872,1,ii,fu),l.wj=function(e){return ea(e)},l.xj=function(e){return Pt(Ae,te,2,e,6,1)},P(ys,"XMLTypePackageImpl/21",1872),I(1873,1,ii,s9),l.wj=function(e){return ea(e)},l.xj=function(e){return Pt(Ae,te,2,e,6,1)},P(ys,"XMLTypePackageImpl/22",1873),I(1874,1,ii,TB),l.wj=function(e){return ea(e)},l.xj=function(e){return Pt(Ae,te,2,e,6,1)},P(ys,"XMLTypePackageImpl/23",1874),I(1875,1,ii,CB),l.wj=function(e){return Et(e,190)},l.xj=function(e){return Pt(Hu,te,190,e,0,2)},P(ys,"XMLTypePackageImpl/24",1875),I(1876,1,ii,sx),l.wj=function(e){return ea(e)},l.xj=function(e){return Pt(Ae,te,2,e,6,1)},P(ys,"XMLTypePackageImpl/25",1876),I(1877,1,ii,yJ),l.wj=function(e){return ea(e)},l.xj=function(e){return Pt(Ae,te,2,e,6,1)},P(ys,"XMLTypePackageImpl/26",1877),I(1878,1,ii,Dk),l.wj=function(e){return Et(e,15)},l.xj=function(e){return Pt(ph,xy,15,e,0,1)},P(ys,"XMLTypePackageImpl/27",1878),I(1879,1,ii,xJ),l.wj=function(e){return Et(e,15)},l.xj=function(e){return Pt(ph,xy,15,e,0,1)},P(ys,"XMLTypePackageImpl/28",1879),I(1880,1,ii,_B),l.wj=function(e){return ea(e)},l.xj=function(e){return Pt(Ae,te,2,e,6,1)},P(ys,"XMLTypePackageImpl/29",1880),I(1854,1,ii,kJ),l.wj=function(e){return Et(e,667)},l.xj=function(e){return Pt(cU,Ie,2021,e,0,1)},P(ys,"XMLTypePackageImpl/3",1854),I(1881,1,ii,EJ),l.wj=function(e){return Et(e,19)},l.xj=function(e){return Pt(ja,te,19,e,0,1)},P(ys,"XMLTypePackageImpl/30",1881),I(1882,1,ii,a9),l.wj=function(e){return ea(e)},l.xj=function(e){return Pt(Ae,te,2,e,6,1)},P(ys,"XMLTypePackageImpl/31",1882),I(1883,1,ii,SB),l.wj=function(e){return Et(e,162)},l.xj=function(e){return Pt(Tw,te,162,e,0,1)},P(ys,"XMLTypePackageImpl/32",1883),I(1884,1,ii,zL),l.wj=function(e){return ea(e)},l.xj=function(e){return Pt(Ae,te,2,e,6,1)},P(ys,"XMLTypePackageImpl/33",1884),I(1885,1,ii,o9),l.wj=function(e){return ea(e)},l.xj=function(e){return Pt(Ae,te,2,e,6,1)},P(ys,"XMLTypePackageImpl/34",1885),I(1886,1,ii,TJ),l.wj=function(e){return ea(e)},l.xj=function(e){return Pt(Ae,te,2,e,6,1)},P(ys,"XMLTypePackageImpl/35",1886),I(1887,1,ii,CJ),l.wj=function(e){return ea(e)},l.xj=function(e){return Pt(Ae,te,2,e,6,1)},P(ys,"XMLTypePackageImpl/36",1887),I(1888,1,ii,qL),l.wj=function(e){return Et(e,15)},l.xj=function(e){return Pt(ph,xy,15,e,0,1)},P(ys,"XMLTypePackageImpl/37",1888),I(1889,1,ii,c9),l.wj=function(e){return Et(e,15)},l.xj=function(e){return Pt(ph,xy,15,e,0,1)},P(ys,"XMLTypePackageImpl/38",1889),I(1890,1,ii,f1),l.wj=function(e){return ea(e)},l.xj=function(e){return Pt(Ae,te,2,e,6,1)},P(ys,"XMLTypePackageImpl/39",1890),I(1855,1,ii,Ok),l.wj=function(e){return Et(e,668)},l.xj=function(e){return Pt(dN,Ie,2022,e,0,1)},P(ys,"XMLTypePackageImpl/4",1855),I(1891,1,ii,_J),l.wj=function(e){return ea(e)},l.xj=function(e){return Pt(Ae,te,2,e,6,1)},P(ys,"XMLTypePackageImpl/40",1891),I(1892,1,ii,Nk),l.wj=function(e){return ea(e)},l.xj=function(e){return Pt(Ae,te,2,e,6,1)},P(ys,"XMLTypePackageImpl/41",1892),I(1893,1,ii,HL),l.wj=function(e){return ea(e)},l.xj=function(e){return Pt(Ae,te,2,e,6,1)},P(ys,"XMLTypePackageImpl/42",1893),I(1894,1,ii,Hb),l.wj=function(e){return ea(e)},l.xj=function(e){return Pt(Ae,te,2,e,6,1)},P(ys,"XMLTypePackageImpl/43",1894),I(1895,1,ii,u9),l.wj=function(e){return ea(e)},l.xj=function(e){return Pt(Ae,te,2,e,6,1)},P(ys,"XMLTypePackageImpl/44",1895),I(1896,1,ii,GL),l.wj=function(e){return Et(e,184)},l.xj=function(e){return Pt(Cw,te,184,e,0,1)},P(ys,"XMLTypePackageImpl/45",1896),I(1897,1,ii,$f),l.wj=function(e){return ea(e)},l.xj=function(e){return Pt(Ae,te,2,e,6,1)},P(ys,"XMLTypePackageImpl/46",1897),I(1898,1,ii,l9),l.wj=function(e){return ea(e)},l.xj=function(e){return Pt(Ae,te,2,e,6,1)},P(ys,"XMLTypePackageImpl/47",1898),I(1899,1,ii,d1),l.wj=function(e){return ea(e)},l.xj=function(e){return Pt(Ae,te,2,e,6,1)},P(ys,"XMLTypePackageImpl/48",1899),I(nb,1,ii,g1),l.wj=function(e){return Et(e,184)},l.xj=function(e){return Pt(Cw,te,184,e,0,1)},P(ys,"XMLTypePackageImpl/49",nb),I(1856,1,ii,SJ),l.wj=function(e){return Et(e,669)},l.xj=function(e){return Pt(pLt,Ie,2023,e,0,1)},P(ys,"XMLTypePackageImpl/5",1856),I(1901,1,ii,AJ),l.wj=function(e){return Et(e,162)},l.xj=function(e){return Pt(Tw,te,162,e,0,1)},P(ys,"XMLTypePackageImpl/50",1901),I(1902,1,ii,A3),l.wj=function(e){return ea(e)},l.xj=function(e){return Pt(Ae,te,2,e,6,1)},P(ys,"XMLTypePackageImpl/51",1902),I(1903,1,ii,Pk),l.wj=function(e){return Et(e,19)},l.xj=function(e){return Pt(ja,te,19,e,0,1)},P(ys,"XMLTypePackageImpl/52",1903),I(1857,1,ii,Fk),l.wj=function(e){return ea(e)},l.xj=function(e){return Pt(Ae,te,2,e,6,1)},P(ys,"XMLTypePackageImpl/6",1857),I(1858,1,ii,h9),l.wj=function(e){return Et(e,190)},l.xj=function(e){return Pt(Hu,te,190,e,0,2)},P(ys,"XMLTypePackageImpl/7",1858),I(1859,1,ii,LJ),l.wj=function(e){return Om(e)},l.xj=function(e){return Pt(Bs,te,476,e,8,1)},P(ys,"XMLTypePackageImpl/8",1859),I(1860,1,ii,ax),l.wj=function(e){return Et(e,217)},l.xj=function(e){return Pt(E6,te,217,e,0,1)},P(ys,"XMLTypePackageImpl/9",1860);var U1,rp,lA,uU,vt;I(50,60,U0,Fr),P(Vg,"RegEx/ParseException",50),I(820,1,{},VL),l.sl=function(e){return e<this.j&&ba(this.i,e)==63},l.tl=function(){var e,n,r,s,o;if(this.c!=10)throw rt(new Fr(qr((Nr(),kH))));switch(e=this.a,e){case 101:e=27;break;case 102:e=12;break;case 110:e=10;break;case 114:e=13;break;case 116:e=9;break;case 120:if(fi(this),this.c!=0)throw rt(new Fr(qr((Nr(),Gg))));if(this.a==123){o=0,r=0;do{if(fi(this),this.c!=0)throw rt(new Fr(qr((Nr(),Gg))));if((o=b2(this.a))<0)break;if(r>r*16)throw rt(new Fr(qr((Nr(),Qde))));r=r*16+o}while(!0);if(this.a!=125)throw rt(new Fr(qr((Nr(),Zde))));if(r>WE)throw rt(new Fr(qr((Nr(),Jde))));e=r}else{if(o=0,this.c!=0||(o=b2(this.a))<0)throw rt(new Fr(qr((Nr(),Gg))));if(r=o,fi(this),this.c!=0||(o=b2(this.a))<0)throw rt(new Fr(qr((Nr(),Gg))));r=r*16+o,e=r}break;case 117:if(s=0,fi(this),this.c!=0||(s=b2(this.a))<0)throw rt(new Fr(qr((Nr(),Gg))));if(n=s,fi(this),this.c!=0||(s=b2(this.a))<0)throw rt(new Fr(qr((Nr(),Gg))));if(n=n*16+s,fi(this),this.c!=0||(s=b2(this.a))<0)throw rt(new Fr(qr((Nr(),Gg))));if(n=n*16+s,fi(this),this.c!=0||(s=b2(this.a))<0)throw rt(new Fr(qr((Nr(),Gg))));n=n*16+s,e=n;break;case 118:if(fi(this),this.c!=0||(s=b2(this.a))<0)throw rt(new Fr(qr((Nr(),Gg))));if(n=s,fi(this),this.c!=0||(s=b2(this.a))<0)throw rt(new Fr(qr((Nr(),Gg))));if(n=n*16+s,fi(this),this.c!=0||(s=b2(this.a))<0)throw rt(new Fr(qr((Nr(),Gg))));if(n=n*16+s,fi(this),this.c!=0||(s=b2(this.a))<0)throw rt(new Fr(qr((Nr(),Gg))));if(n=n*16+s,fi(this),this.c!=0||(s=b2(this.a))<0)throw rt(new Fr(qr((Nr(),Gg))));if(n=n*16+s,fi(this),this.c!=0||(s=b2(this.a))<0)throw rt(new Fr(qr((Nr(),Gg))));if(n=n*16+s,n>WE)throw rt(new Fr(qr((Nr(),"parser.descappe.4"))));e=n;break;case 65:case 90:case 122:throw rt(new Fr(qr((Nr(),t0e))))}return e},l.ul=function(e){var n,r;switch(e){case 100:r=(this.e&32)==32?tb("Nd",!0):(gi(),lU);break;case 68:r=(this.e&32)==32?tb("Nd",!1):(gi(),TLt);break;case 119:r=(this.e&32)==32?tb("IsWord",!0):(gi(),N7);break;case 87:r=(this.e&32)==32?tb("IsWord",!1):(gi(),_Lt);break;case 115:r=(this.e&32)==32?tb("IsSpace",!0):(gi(),K6);break;case 83:r=(this.e&32)==32?tb("IsSpace",!1):(gi(),CLt);break;default:throw rt(new Go((n=e,tge+n.toString(16))))}return r},l.vl=function(e){var n,r,s,o,h,d,w,k,C,M,F,H;for(this.b=1,fi(this),n=null,this.c==0&&this.a==94?(fi(this),e?M=(gi(),gi(),new Nl(5)):(n=(gi(),gi(),new Nl(4)),jc(n,0,WE),M=new Nl(4))):M=(gi(),gi(),new Nl(4)),o=!0;(H=this.c)!=1&&!(H==0&&this.a==93&&!o);){if(o=!1,r=this.a,s=!1,H==10)switch(r){case 100:case 68:case 119:case 87:case 115:case 83:vy(M,this.ul(r)),s=!0;break;case 105:case 73:case 99:case 67:r=this.Ll(M,r),r<0&&(s=!0);break;case 112:case 80:if(F=n5t(this,r),!F)throw rt(new Fr(qr((Nr(),Qct))));vy(M,F),s=!0;break;default:r=this.tl()}else if(H==20){if(d=l8(this.i,58,this.d),d<0)throw rt(new Fr(qr((Nr(),_8t))));if(w=!0,ba(this.i,this.d)==94&&(++this.d,w=!1),h=Dl(this.i,this.d,d),k=fte(h,w,(this.e&512)==512),!k)throw rt(new Fr(qr((Nr(),Ude))));if(vy(M,k),s=!0,d+1>=this.j||ba(this.i,d+1)!=93)throw rt(new Fr(qr((Nr(),_8t))));this.d=d+2}if(fi(this),!s)if(this.c!=0||this.a!=45)jc(M,r,r);else{if(fi(this),(H=this.c)==1)throw rt(new Fr(qr((Nr(),EH))));H==0&&this.a==93?(jc(M,r,r),jc(M,45,45)):(C=this.a,H==10&&(C=this.tl()),fi(this),jc(M,r,C))}(this.e&wf)==wf&&this.c==0&&this.a==44&&fi(this)}if(this.c==1)throw rt(new Fr(qr((Nr(),EH))));return n&&(__(n,M),M=n),b4(M),T_(M),this.b=0,fi(this),M},l.wl=function(){var e,n,r,s;for(r=this.vl(!1);(s=this.c)!=7;)if(e=this.a,s==0&&(e==45||e==38)||s==4){if(fi(this),this.c!=9)throw rt(new Fr(qr((Nr(),Kde))));if(n=this.vl(!1),s==4)vy(r,n);else if(e==45)__(r,n);else if(e==38)Wle(r,n);else throw rt(new Go("ASSERT"))}else throw rt(new Fr(qr((Nr(),Yde))));return fi(this),r},l.xl=function(){var e,n;return e=this.a-48,n=(gi(),gi(),new hrt(12,null,e)),!this.g&&(this.g=new fR),hR(this.g,new ypt(e)),fi(this),n},l.yl=function(){return fi(this),gi(),D5e},l.zl=function(){return fi(this),gi(),I5e},l.Al=function(){throw rt(new Fr(qr((Nr(),gh))))},l.Bl=function(){throw rt(new Fr(qr((Nr(),gh))))},l.Cl=function(){return fi(this),Ucn()},l.Dl=function(){return fi(this),gi(),N5e},l.El=function(){return fi(this),gi(),F5e},l.Fl=function(){var e;if(this.d>=this.j||((e=ba(this.i,this.d++))&65504)!=64)throw rt(new Fr(qr((Nr(),Hde))));return fi(this),gi(),gi(),new Vd(0,e-64)},l.Gl=function(){return fi(this),Lmn()},l.Hl=function(){return fi(this),gi(),B5e},l.Il=function(){var e;return e=(gi(),gi(),new Vd(0,105)),fi(this),e},l.Jl=function(){return fi(this),gi(),P5e},l.Kl=function(){return fi(this),gi(),O5e},l.Ll=function(e,n){return this.tl()},l.Ml=function(){return fi(this),gi(),kLt},l.Nl=function(){var e,n,r,s,o;if(this.d+1>=this.j)throw rt(new Fr(qr((Nr(),$de))));if(s=-1,n=null,e=ba(this.i,this.d),49<=e&&e<=57){if(s=e-48,!this.g&&(this.g=new fR),hR(this.g,new ypt(s)),++this.d,ba(this.i,this.d)!=41)throw rt(new Fr(qr((Nr(),A2))));++this.d}else switch(e==63&&--this.d,fi(this),n=Cxt(this),n.e){case 20:case 21:case 22:case 23:break;case 8:if(this.c!=7)throw rt(new Fr(qr((Nr(),A2))));break;default:throw rt(new Fr(qr((Nr(),zde))))}if(fi(this),o=sw(this),r=null,o.e==2){if(o.em()!=2)throw rt(new Fr(qr((Nr(),qde))));r=o.am(1),o=o.am(0)}if(this.c!=7)throw rt(new Fr(qr((Nr(),A2))));return fi(this),gi(),gi(),new Gte(s,n,o,r)},l.Ol=function(){return fi(this),gi(),ELt},l.Pl=function(){var e;if(fi(this),e=Wj(24,sw(this)),this.c!=7)throw rt(new Fr(qr((Nr(),A2))));return fi(this),e},l.Ql=function(){var e;if(fi(this),e=Wj(20,sw(this)),this.c!=7)throw rt(new Fr(qr((Nr(),A2))));return fi(this),e},l.Rl=function(){var e;if(fi(this),e=Wj(22,sw(this)),this.c!=7)throw rt(new Fr(qr((Nr(),A2))));return fi(this),e},l.Sl=function(){var e,n,r,s,o;for(e=0,r=0,n=-1;this.d<this.j&&(n=ba(this.i,this.d),o=o5t(n),o!=0);)e|=o,++this.d;if(this.d>=this.j)throw rt(new Fr(qr((Nr(),T8t))));if(n==45){for(++this.d;this.d<this.j&&(n=ba(this.i,this.d),o=o5t(n),o!=0);)r|=o,++this.d;if(this.d>=this.j)throw rt(new Fr(qr((Nr(),T8t))))}if(n==58){if(++this.d,fi(this),s=YYt(sw(this),e,r),this.c!=7)throw rt(new Fr(qr((Nr(),A2))));fi(this)}else if(n==41)++this.d,fi(this),s=YYt(sw(this),e,r);else throw rt(new Fr(qr((Nr(),jde))));return s},l.Tl=function(){var e;if(fi(this),e=Wj(21,sw(this)),this.c!=7)throw rt(new Fr(qr((Nr(),A2))));return fi(this),e},l.Ul=function(){var e;if(fi(this),e=Wj(23,sw(this)),this.c!=7)throw rt(new Fr(qr((Nr(),A2))));return fi(this),e},l.Vl=function(){var e,n;if(fi(this),e=this.f++,n=Rnt(sw(this),e),this.c!=7)throw rt(new Fr(qr((Nr(),A2))));return fi(this),n},l.Wl=function(){var e;if(fi(this),e=Rnt(sw(this),0),this.c!=7)throw rt(new Fr(qr((Nr(),A2))));return fi(this),e},l.Xl=function(e){return fi(this),this.c==5?(fi(this),Bj(e,(gi(),gi(),new Wm(9,e)))):Bj(e,(gi(),gi(),new Wm(3,e)))},l.Yl=function(e){var n;return fi(this),n=(gi(),gi(),new lC(2)),this.c==5?(fi(this),m2(n,fA),m2(n,e)):(m2(n,e),m2(n,fA)),n},l.Zl=function(e){return fi(this),this.c==5?(fi(this),gi(),gi(),new Wm(9,e)):(gi(),gi(),new Wm(3,e))},l.a=0,l.b=0,l.c=0,l.d=0,l.e=0,l.f=1,l.g=null,l.j=0,P(Vg,"RegEx/RegexParser",820),I(1824,820,{},Sqt),l.sl=function(e){return!1},l.tl=function(){return F5t(this)},l.ul=function(e){return kE(e)},l.vl=function(e){return jhe(this)},l.wl=function(){throw rt(new Fr(qr((Nr(),gh))))},l.xl=function(){throw rt(new Fr(qr((Nr(),gh))))},l.yl=function(){throw rt(new Fr(qr((Nr(),gh))))},l.zl=function(){throw rt(new Fr(qr((Nr(),gh))))},l.Al=function(){return fi(this),kE(67)},l.Bl=function(){return fi(this),kE(73)},l.Cl=function(){throw rt(new Fr(qr((Nr(),gh))))},l.Dl=function(){throw rt(new Fr(qr((Nr(),gh))))},l.El=function(){throw rt(new Fr(qr((Nr(),gh))))},l.Fl=function(){return fi(this),kE(99)},l.Gl=function(){throw rt(new Fr(qr((Nr(),gh))))},l.Hl=function(){throw rt(new Fr(qr((Nr(),gh))))},l.Il=function(){return fi(this),kE(105)},l.Jl=function(){throw rt(new Fr(qr((Nr(),gh))))},l.Kl=function(){throw rt(new Fr(qr((Nr(),gh))))},l.Ll=function(e,n){return vy(e,kE(n)),-1},l.Ml=function(){return fi(this),gi(),gi(),new Vd(0,94)},l.Nl=function(){throw rt(new Fr(qr((Nr(),gh))))},l.Ol=function(){return fi(this),gi(),gi(),new Vd(0,36)},l.Pl=function(){throw rt(new Fr(qr((Nr(),gh))))},l.Ql=function(){throw rt(new Fr(qr((Nr(),gh))))},l.Rl=function(){throw rt(new Fr(qr((Nr(),gh))))},l.Sl=function(){throw rt(new Fr(qr((Nr(),gh))))},l.Tl=function(){throw rt(new Fr(qr((Nr(),gh))))},l.Ul=function(){throw rt(new Fr(qr((Nr(),gh))))},l.Vl=function(){var e;if(fi(this),e=Rnt(sw(this),0),this.c!=7)throw rt(new Fr(qr((Nr(),A2))));return fi(this),e},l.Wl=function(){throw rt(new Fr(qr((Nr(),gh))))},l.Xl=function(e){return fi(this),Bj(e,(gi(),gi(),new Wm(3,e)))},l.Yl=function(e){var n;return fi(this),n=(gi(),gi(),new lC(2)),m2(n,e),m2(n,fA),n},l.Zl=function(e){return fi(this),gi(),gi(),new Wm(3,e)};var h5=null,D7=null;P(Vg,"RegEx/ParserForXMLSchema",1824),I(117,1,KE,vv),l.$l=function(e){throw rt(new Go("Not supported."))},l._l=function(){return-1},l.am=function(e){return null},l.bm=function(){return null},l.cm=function(e){},l.dm=function(e){},l.em=function(){return 0},l.Ib=function(){return this.fm(0)},l.fm=function(e){return this.e==11?".":""},l.e=0;var mLt,O7,hA,M5e,yLt,n3=null,lU,Dft=null,xLt,fA,Oft=null,kLt,ELt,TLt,CLt,_Lt,I5e,K6,D5e,O5e,N5e,P5e,N7,F5e,B5e,Exn=P(Vg,"RegEx/Token",117);I(136,117,{3:1,136:1,117:1},Nl),l.fm=function(e){var n,r,s;if(this.e==4)if(this==xLt)r=".";else if(this==lU)r="\\d";else if(this==N7)r="\\w";else if(this==K6)r="\\s";else{for(s=new xg,s.a+="[",n=0;n<this.b.length;n+=2)e&wf&&n>0&&(s.a+=","),this.b[n]===this.b[n+1]?fo(s,xD(this.b[n])):(fo(s,xD(this.b[n])),s.a+="-",fo(s,xD(this.b[n+1])));s.a+="]",r=s.a}else if(this==TLt)r="\\D";else if(this==_Lt)r="\\W";else if(this==CLt)r="\\S";else{for(s=new xg,s.a+="[^",n=0;n<this.b.length;n+=2)e&wf&&n>0&&(s.a+=","),this.b[n]===this.b[n+1]?fo(s,xD(this.b[n])):(fo(s,xD(this.b[n])),s.a+="-",fo(s,xD(this.b[n+1])));s.a+="]",r=s.a}return r},l.a=!1,l.c=!1,P(Vg,"RegEx/RangeToken",136),I(584,1,{584:1},ypt),l.a=0,P(Vg,"RegEx/RegexParser/ReferencePosition",584),I(583,1,{3:1,583:1},RHt),l.Fb=function(e){var n;return e==null||!Et(e,583)?!1:(n=u(e,583),hn(this.b,n.b)&&this.a==n.a)},l.Hb=function(){return Bg(this.b+"/"+M5t(this.a))},l.Ib=function(){return this.c.fm(this.a)},l.a=0,P(Vg,"RegEx/RegularExpression",583),I(223,117,KE,Vd),l._l=function(){return this.a},l.fm=function(e){var n,r,s;switch(this.e){case 0:switch(this.a){case 124:case 42:case 43:case 63:case 40:case 41:case 46:case 91:case 123:case 92:s="\\"+hnt(this.a&ms);break;case 12:s="\\f";break;case 10:s="\\n";break;case 13:s="\\r";break;case 9:s="\\t";break;case 27:s="\\e";break;default:this.a>=Ya?(r=(n=this.a>>>0,"0"+n.toString(16)),s="\\v"+Dl(r,r.length-6,r.length)):s=""+hnt(this.a&ms)}break;case 8:this==kLt||this==ELt?s=""+hnt(this.a&ms):s="\\"+hnt(this.a&ms);break;default:s=null}return s},l.a=0,P(Vg,"RegEx/Token/CharToken",223),I(309,117,KE,Wm),l.am=function(e){return this.a},l.cm=function(e){this.b=e},l.dm=function(e){this.c=e},l.em=function(){return 1},l.fm=function(e){var n;if(this.e==3)if(this.c<0&&this.b<0)n=this.a.fm(e)+"*";else if(this.c==this.b)n=this.a.fm(e)+"{"+this.c+"}";else if(this.c>=0&&this.b>=0)n=this.a.fm(e)+"{"+this.c+","+this.b+"}";else if(this.c>=0&&this.b<0)n=this.a.fm(e)+"{"+this.c+",}";else throw rt(new Go("Token#toString(): CLOSURE "+this.c+Ka+this.b));else if(this.c<0&&this.b<0)n=this.a.fm(e)+"*?";else if(this.c==this.b)n=this.a.fm(e)+"{"+this.c+"}?";else if(this.c>=0&&this.b>=0)n=this.a.fm(e)+"{"+this.c+","+this.b+"}?";else if(this.c>=0&&this.b<0)n=this.a.fm(e)+"{"+this.c+",}?";else throw rt(new Go("Token#toString(): NONGREEDYCLOSURE "+this.c+Ka+this.b));return n},l.b=0,l.c=0,P(Vg,"RegEx/Token/ClosureToken",309),I(821,117,KE,fwt),l.am=function(e){return e==0?this.a:this.b},l.em=function(){return 2},l.fm=function(e){var n;return this.b.e==3&&this.b.am(0)==this.a?n=this.a.fm(e)+"+":this.b.e==9&&this.b.am(0)==this.a?n=this.a.fm(e)+"+?":n=this.a.fm(e)+(""+this.b.fm(e)),n},P(Vg,"RegEx/Token/ConcatToken",821),I(1822,117,KE,Gte),l.am=function(e){if(e==0)return this.d;if(e==1)return this.b;throw rt(new Go("Internal Error: "+e))},l.em=function(){return this.b?2:1},l.fm=function(e){var n;return this.c>0?n="(?("+this.c+")":this.a.e==8?n="(?("+this.a+")":n="(?"+this.a,this.b?n+=this.d+"|"+this.b+")":n+=this.d+")",n},l.c=0,P(Vg,"RegEx/Token/ConditionToken",1822),I(1823,117,KE,GQt),l.am=function(e){return this.b},l.em=function(){return 1},l.fm=function(e){return"(?"+(this.a==0?"":M5t(this.a))+(this.c==0?"":M5t(this.c))+":"+this.b.fm(e)+")"},l.a=0,l.c=0,P(Vg,"RegEx/Token/ModifierToken",1823),I(822,117,KE,wwt),l.am=function(e){return this.a},l.em=function(){return 1},l.fm=function(e){var n;switch(n=null,this.e){case 6:this.b==0?n="(?:"+this.a.fm(e)+")":n="("+this.a.fm(e)+")";break;case 20:n="(?="+this.a.fm(e)+")";break;case 21:n="(?!"+this.a.fm(e)+")";break;case 22:n="(?<="+this.a.fm(e)+")";break;case 23:n="(?<!"+this.a.fm(e)+")";break;case 24:n="(?>"+this.a.fm(e)+")"}return n},l.b=0,P(Vg,"RegEx/Token/ParenToken",822),I(521,117,{3:1,117:1,521:1},hrt),l.bm=function(){return this.b},l.fm=function(e){return this.e==12?"\\"+this.a:Bpn(this.b)},l.a=0,P(Vg,"RegEx/Token/StringToken",521),I(465,117,KE,lC),l.$l=function(e){m2(this,e)},l.am=function(e){return u(Rv(this.a,e),117)},l.em=function(){return this.a?this.a.a.c.length:0},l.fm=function(e){var n,r,s,o,h;if(this.e==1){if(this.a.a.c.length==2)n=u(Rv(this.a,0),117),r=u(Rv(this.a,1),117),r.e==3&&r.am(0)==n?o=n.fm(e)+"+":r.e==9&&r.am(0)==n?o=n.fm(e)+"+?":o=n.fm(e)+(""+r.fm(e));else{for(h=new xg,s=0;s<this.a.a.c.length;s++)fo(h,u(Rv(this.a,s),117).fm(e));o=h.a}return o}if(this.a.a.c.length==2&&u(Rv(this.a,1),117).e==7)o=u(Rv(this.a,0),117).fm(e)+"?";else if(this.a.a.c.length==2&&u(Rv(this.a,0),117).e==7)o=u(Rv(this.a,1),117).fm(e)+"??";else{for(h=new xg,fo(h,u(Rv(this.a,0),117).fm(e)),s=1;s<this.a.a.c.length;s++)h.a+="|",fo(h,u(Rv(this.a,s),117).fm(e));o=h.a}return o},P(Vg,"RegEx/Token/UnionToken",465),I(518,1,{592:1},hM),l.Ib=function(){return this.a.b},P(ige,"XMLTypeUtil/PatternMatcherImpl",518),I(1622,1381,{},AB);var R5e;P(ige,"XMLTypeValidator",1622),I(264,1,t0,Qb),l.Jc=function(e){va(this,e)},l.Kc=function(){return(this.b-this.a)*this.c<0?Ab:new Pp(this)},l.a=0,l.b=0,l.c=0;var Ab;P(V8t,"ExclusiveRange",264),I(1068,1,Jd,MJ),l.Rb=function(e){u(e,19),dXe()},l.Nb=function(e){pa(this,e)},l.Pb=function(){return iYe()},l.Ub=function(){return sYe()},l.Wb=function(e){u(e,19),pXe()},l.Ob=function(){return!1},l.Sb=function(){return!1},l.Tb=function(){return-1},l.Vb=function(){return-1},l.Qb=function(){throw rt(new yg(oge))},P(V8t,"ExclusiveRange/1",1068),I(254,1,Jd,Pp),l.Rb=function(e){u(e,19),gXe()},l.Nb=function(e){pa(this,e)},l.Pb=function(){return dun(this)},l.Ub=function(){return uan(this)},l.Wb=function(e){u(e,19),bXe()},l.Ob=function(){return this.c.c<0?this.a>=this.c.b:this.a<=this.c.b},l.Sb=function(){return this.b>0},l.Tb=function(){return this.b},l.Vb=function(){return this.b-1},l.Qb=function(){throw rt(new yg(oge))},l.a=0,l.b=0,P(V8t,"ExclusiveRange/RangeIterator",254);var mh=y8(TH,"C"),Tr=y8(tS,"I"),dl=y8(u6,"Z"),Lb=y8(eS,"J"),Hu=y8(Q_,"B"),ia=y8(Z_,"D"),r3=y8(J_,"F"),f5=y8(nS,"S"),Txn=Yi("org.eclipse.elk.core.labels","ILabelManager"),SLt=Yi(Ra,"DiagnosticChain"),ALt=Yi(P0e,"ResourceSet"),LLt=P(Ra,"InvocationTargetException",null),j5e=(vR(),psn),$5e=$5e=idn;lon(rKe),Fon("permProps",[[[BH,RH],[jH,"gecko1_8"]],[[BH,RH],[jH,"ie10"]],[[BH,RH],[jH,"ie8"]],[[BH,RH],[jH,"ie9"]],[[BH,RH],[jH,"safari"]]]),$5e(null,"elk",null)}).call(this)}).call(this,typeof d0<"u"?d0:typeof self<"u"?self:typeof window<"u"?window:{})},{}],3:[function(f,p,v){function m(N,B){if(!(N instanceof B))throw new TypeError("Cannot call a class as a function")}function b(N,B){if(!N)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return B&&(typeof B=="object"||typeof B=="function")?B:N}function E(N,B){if(typeof B!="function"&&B!==null)throw new TypeError("Super expression must either be null or a function, not "+typeof B);N.prototype=Object.create(B&&B.prototype,{constructor:{value:N,enumerable:!1,writable:!0,configurable:!0}}),B&&(Object.setPrototypeOf?Object.setPrototypeOf(N,B):N.__proto__=B)}var _=f("./elk-api.js").default,L=function(N){E(B,N);function B(){var j=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};m(this,B);var R=Object.assign({},j),z=!1;try{f.resolve("web-worker"),z=!0}catch{}if(j.workerUrl)if(z){var K=f("web-worker");R.workerFactory=function(ut){return new K(ut)}}else console.warn(`Web worker requested but 'web-worker' package not installed. 
Consider installing the package or pass your own 'workerFactory' to ELK's constructor.
... Falling back to non-web worker version.`);if(!R.workerFactory){var it=f("./elk-worker.min.js"),st=it.Worker;R.workerFactory=function(ut){return new st(ut)}}return b(this,(B.__proto__||Object.getPrototypeOf(B)).call(this,R))}return B}(_);Object.defineProperty(p.exports,"__esModule",{value:!0}),p.exports=L,L.default=L},{"./elk-api.js":1,"./elk-worker.min.js":2,"web-worker":4}],4:[function(f,p,v){p.exports=Worker},{}]},{},[3])(3)})})(kjt);var cUe=kjt.exports;const uUe=B7(cUe),Ejt=new uUe;let iv={};const lUe={};let P5={};const hUe=async function(i,a,f,p,v,m,b){const _=f.select(`[id="${a}"]`).insert("g").attr("class","nodes"),L=Object.keys(i);return await Promise.all(L.map(async function(N){const B=i[N];let j="default";B.classes.length>0&&(j=B.classes.join(" ")),j=j+" flowchart-label";const R=em(B.styles);let z=B.text!==void 0?B.text:B.id;const K={width:0,height:0},it=[{id:B.id+"-west",layoutOptions:{"port.side":"WEST"}},{id:B.id+"-east",layoutOptions:{"port.side":"EAST"}},{id:B.id+"-south",layoutOptions:{"port.side":"SOUTH"}},{id:B.id+"-north",layoutOptions:{"port.side":"NORTH"}}];let st=0,ut="",bt={};switch(B.type){case"round":st=5,ut="rect";break;case"square":ut="rect";break;case"diamond":ut="question",bt={portConstraints:"FIXED_SIDE"};break;case"hexagon":ut="hexagon";break;case"odd":ut="rect_left_inv_arrow";break;case"lean_right":ut="lean_right";break;case"lean_left":ut="lean_left";break;case"trapezoid":ut="trapezoid";break;case"inv_trapezoid":ut="inv_trapezoid";break;case"odd_right":ut="rect_left_inv_arrow";break;case"circle":ut="circle";break;case"ellipse":ut="ellipse";break;case"stadium":ut="stadium";break;case"subroutine":ut="subroutine";break;case"cylinder":ut="cylinder";break;case"group":ut="rect";break;case"doublecircle":ut="doublecircle";break;default:ut="rect"}const mt={labelStyle:R.labelStyle,shape:ut,labelText:z,labelType:B.labelType,rx:st,ry:st,class:j,style:R.style,id:B.id,link:B.link,linkTarget:B.linkTarget,tooltip:v.db.getTooltip(B.id)||"",domId:v.db.lookUpDomId(B.id),haveCallback:B.haveCallback,width:B.type==="group"?500:void 0,dir:B.dir,type:B.type,props:B.props,padding:Le().flowchart.padding};let yt,dt;if(mt.type!=="group")dt=await xBt(_,mt,B.dir),yt=dt.node().getBBox();else{p.createElementNS("http://www.w3.org/2000/svg","text");const{shapeSvg:wt,bbox:X}=await Od(_,mt,void 0,!0);K.width=X.width,K.wrappingWidth=Le().flowchart.wrappingWidth,K.height=X.height,K.labelNode=wt.node(),mt.labelData=K}const ht={id:B.id,ports:B.type==="diamond"?it:[],layoutOptions:bt,labelText:z,labelData:K,domId:v.db.lookUpDomId(B.id),width:yt==null?void 0:yt.width,height:yt==null?void 0:yt.height,type:B.type,el:dt,parent:m.parentById[B.id]};P5[mt.id]=ht})),b},Tjt=(i,a,f)=>{const p={TB:{in:{north:"north"},out:{south:"west",west:"east",east:"south"}},LR:{in:{west:"west"},out:{east:"south",south:"north",north:"east"}},RL:{in:{east:"east"},out:{west:"north",north:"south",south:"west"}},BT:{in:{south:"south"},out:{north:"east",east:"west",west:"north"}}};return p.TD=p.TB,Ut.info("abc88",f,a,i),p[f][a][i]},Cjt=(i,a,f)=>{if(Ut.info("getNextPort abc88",{node:i,edgeDirection:a,graphDirection:f}),!iv[i])switch(f){case"TB":case"TD":iv[i]={inPosition:"north",outPosition:"south"};break;case"BT":iv[i]={inPosition:"south",outPosition:"north"};break;case"RL":iv[i]={inPosition:"east",outPosition:"west"};break;case"LR":iv[i]={inPosition:"west",outPosition:"east"};break}const p=a==="in"?iv[i].inPosition:iv[i].outPosition;return a==="in"?iv[i].inPosition=Tjt(iv[i].inPosition,a,f):iv[i].outPosition=Tjt(iv[i].outPosition,a,f),p},fUe=(i,a)=>{let f=i.start,p=i.end;const v=f,m=p,b=P5[f],E=P5[p];return!b||!E?{source:f,target:p}:(b.type==="diamond"&&(f=`${f}-${Cjt(f,"out",a)}`),E.type==="diamond"&&(p=`${p}-${Cjt(p,"in",a)}`),{source:f,target:p,sourceId:v,targetId:m})},dUe=function(i,a,f,p){Ut.info("abc78 edges = ",i);const v=p.insert("g").attr("class","edgeLabels");let m={},b=a.db.getDirection(),E,_;if(i.defaultStyle!==void 0){const L=em(i.defaultStyle);E=L.style,_=L.labelStyle}return i.forEach(function(L){const N="L-"+L.start+"-"+L.end;m[N]===void 0?(m[N]=0,Ut.info("abc78 new entry",N,m[N])):(m[N]++,Ut.info("abc78 new entry",N,m[N]));let B=N+"-"+m[N];Ut.info("abc78 new link id to be used is",N,B,m[N]);const j="LS-"+L.start,R="LE-"+L.end,z={style:"",labelStyle:""};switch(z.minlen=L.length||1,L.type==="arrow_open"?z.arrowhead="none":z.arrowhead="normal",z.arrowTypeStart="arrow_open",z.arrowTypeEnd="arrow_open",L.type){case"double_arrow_cross":z.arrowTypeStart="arrow_cross";case"arrow_cross":z.arrowTypeEnd="arrow_cross";break;case"double_arrow_point":z.arrowTypeStart="arrow_point";case"arrow_point":z.arrowTypeEnd="arrow_point";break;case"double_arrow_circle":z.arrowTypeStart="arrow_circle";case"arrow_circle":z.arrowTypeEnd="arrow_circle";break}let K="",it="";switch(L.stroke){case"normal":K="fill:none;",E!==void 0&&(K=E),_!==void 0&&(it=_),z.thickness="normal",z.pattern="solid";break;case"dotted":z.thickness="normal",z.pattern="dotted",z.style="fill:none;stroke-width:2px;stroke-dasharray:3;";break;case"thick":z.thickness="thick",z.pattern="solid",z.style="stroke-width: 3.5px;fill:none;";break}if(L.style!==void 0){const dt=em(L.style);K=dt.style,it=dt.labelStyle}z.style=z.style+=K,z.labelStyle=z.labelStyle+=it,L.interpolate!==void 0?z.curve=X2(L.interpolate,ig):i.defaultInterpolate!==void 0?z.curve=X2(i.defaultInterpolate,ig):z.curve=X2(lUe.curve,ig),L.text===void 0?L.style!==void 0&&(z.arrowheadStyle="fill: #333"):(z.arrowheadStyle="fill: #333",z.labelpos="c"),z.labelType=L.labelType,z.label=L.text.replace(Yr.lineBreakRegex,`
`),L.style===void 0&&(z.style=z.style||"stroke: #333; stroke-width: 1.5px;fill:none;"),z.labelStyle=z.labelStyle.replace("color:","fill:"),z.id=B,z.classes="flowchart-link "+j+" "+R;const st=CBt(v,z),{source:ut,target:bt,sourceId:mt,targetId:yt}=fUe(L,b);Ut.debug("abc78 source and target",ut,bt),f.edges.push({id:"e"+L.start+L.end,sources:[ut],targets:[bt],sourceId:mt,targetId:yt,labelEl:st,labels:[{width:z.width,height:z.height,orgWidth:z.width,orgHeight:z.height,text:z.label,layoutOptions:{"edgeLabels.inline":"true","edgeLabels.placement":"CENTER"}}],edgeData:z})}),f},gUe=function(i,a,f,p,v){let m="";switch(p&&(m=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,m=m.replace(/\(/g,"\\("),m=m.replace(/\)/g,"\\)")),a.arrowTypeStart){case"arrow_cross":i.attr("marker-start","url("+m+"#"+v+"_"+f+"-crossStart)");break;case"arrow_point":i.attr("marker-start","url("+m+"#"+v+"_"+f+"-pointStart)");break;case"arrow_barb":i.attr("marker-start","url("+m+"#"+v+"_"+f+"-barbStart)");break;case"arrow_circle":i.attr("marker-start","url("+m+"#"+v+"_"+f+"-circleStart)");break;case"aggregation":i.attr("marker-start","url("+m+"#"+v+"_"+f+"-aggregationStart)");break;case"extension":i.attr("marker-start","url("+m+"#"+v+"_"+f+"-extensionStart)");break;case"composition":i.attr("marker-start","url("+m+"#"+v+"_"+f+"-compositionStart)");break;case"dependency":i.attr("marker-start","url("+m+"#"+v+"_"+f+"-dependencyStart)");break;case"lollipop":i.attr("marker-start","url("+m+"#"+v+"_"+f+"-lollipopStart)");break}switch(a.arrowTypeEnd){case"arrow_cross":i.attr("marker-end","url("+m+"#"+v+"_"+f+"-crossEnd)");break;case"arrow_point":i.attr("marker-end","url("+m+"#"+v+"_"+f+"-pointEnd)");break;case"arrow_barb":i.attr("marker-end","url("+m+"#"+v+"_"+f+"-barbEnd)");break;case"arrow_circle":i.attr("marker-end","url("+m+"#"+v+"_"+f+"-circleEnd)");break;case"aggregation":i.attr("marker-end","url("+m+"#"+v+"_"+f+"-aggregationEnd)");break;case"extension":i.attr("marker-end","url("+m+"#"+v+"_"+f+"-extensionEnd)");break;case"composition":i.attr("marker-end","url("+m+"#"+v+"_"+f+"-compositionEnd)");break;case"dependency":i.attr("marker-end","url("+m+"#"+v+"_"+f+"-dependencyEnd)");break;case"lollipop":i.attr("marker-end","url("+m+"#"+v+"_"+f+"-lollipopEnd)");break}},pUe=function(i,a){return Ut.info("Extracting classes"),a.db.getClasses()},bUe=function(i){const a={parentById:{},childrenById:{}},f=i.getSubGraphs();return Ut.info("Subgraphs - ",f),f.forEach(function(p){p.nodes.forEach(function(v){a.parentById[v]=p.id,a.childrenById[p.id]===void 0&&(a.childrenById[p.id]=[]),a.childrenById[p.id].push(v)})}),f.forEach(function(p){p.id,a.parentById[p.id]!==void 0&&a.parentById[p.id]}),a},vUe=function(i,a,f){const p=oUe(i,a,f);if(p===void 0||p==="root")return{x:0,y:0};const v=P5[p].offset;return{x:v.posX,y:v.posY}},wUe=function(i,a,f,p,v,m){const b=vUe(a.sourceId,a.targetId,v),E=a.sections[0].startPoint,_=a.sections[0].endPoint,N=(a.sections[0].bendPoints?a.sections[0].bendPoints:[]).map(bt=>[bt.x+b.x,bt.y+b.y]),B=[[E.x+b.x,E.y+b.y],...N,[_.x+b.x,_.y+b.y]],{x:j,y:R}=TBt(a.edgeData),z=Z7().x(j).y(R).curve(ig),K=i.insert("path").attr("d",z(B)).attr("class","path "+f.classes).attr("fill","none"),it=i.insert("g").attr("class","edgeLabel"),st=yr(it.node().appendChild(a.labelEl)),ut=st.node().firstChild.getBoundingClientRect();st.attr("width",ut.width),st.attr("height",ut.height),it.attr("transform",`translate(${a.labels[0].x+b.x}, ${a.labels[0].y+b.y})`),gUe(K,f,p.type,p.arrowMarkerAbsolute,m)},_jt=(i,a)=>{i.forEach(f=>{f.children||(f.children=[]);const p=a.childrenById[f.id];p&&p.forEach(v=>{f.children.push(P5[v])}),_jt(f.children,a)})},mUe=async function(i,a,f,p){var ht;P5={},iv={};const v=yr("body").append("div").attr("style","height:400px").attr("id","cy");let m={id:"root",layoutOptions:{"elk.hierarchyHandling":"INCLUDE_CHILDREN","org.eclipse.elk.padding":"[top=100, left=100, bottom=110, right=110]","elk.layered.spacing.edgeNodeBetweenLayers":"30","elk.direction":"DOWN"},children:[],edges:[]};switch(Ut.info("Drawing flowchart using v3 renderer",Ejt),p.db.getDirection()){case"BT":m.layoutOptions["elk.direction"]="UP";break;case"TB":m.layoutOptions["elk.direction"]="DOWN";break;case"LR":m.layoutOptions["elk.direction"]="RIGHT";break;case"RL":m.layoutOptions["elk.direction"]="LEFT";break}const{securityLevel:E,flowchart:_}=Le();let L;E==="sandbox"&&(L=yr("#i"+a));const N=yr(E==="sandbox"?L.nodes()[0].contentDocument.body:"body"),B=E==="sandbox"?L.nodes()[0].contentDocument:document,j=N.select(`[id="${a}"]`);IFt(j,["point","circle","cross"],p.type,a);const z=p.db.getVertices();let K;const it=p.db.getSubGraphs();Ut.info("Subgraphs - ",it);for(let wt=it.length-1;wt>=0;wt--)K=it[wt],p.db.addVertex(K.id,{text:K.title,type:K.labelType},"group",void 0,K.classes,K.dir);const st=j.insert("g").attr("class","subgraphs"),ut=bUe(p.db);m=await hUe(z,a,N,B,p,ut,m);const bt=j.insert("g").attr("class","edges edgePath"),mt=p.db.getEdges();m=dUe(mt,p,m,j),Object.keys(P5).forEach(wt=>{const X=P5[wt];X.parent||m.children.push(X),ut.childrenById[wt]!==void 0&&(X.labels=[{text:X.labelText,layoutOptions:{"nodeLabels.placement":"[H_CENTER, V_TOP, INSIDE]"},width:X.labelData.width,height:X.labelData.height}],delete X.x,delete X.y,delete X.width,delete X.height)}),_jt(m.children,ut),Ut.info("after layout",JSON.stringify(m,null,2));const dt=await Ejt.layout(m);Sjt(0,0,dt.children,j,st,p,0),Ut.info("after layout",dt),(ht=dt.edges)==null||ht.map(wt=>{wUe(bt,wt,wt.edgeData,p,ut,a)}),cT({},j,_.diagramPadding,_.useMaxWidth),v.remove()},Sjt=(i,a,f,p,v,m,b)=>{f.forEach(function(E){if(E)if(P5[E.id].offset={posX:E.x+i,posY:E.y+a,x:i,y:a,depth:b,width:E.width,height:E.height},E.type==="group"){const _=v.insert("g").attr("class","subgraph");_.insert("rect").attr("class","subgraph subgraph-lvl-"+b%5+" node").attr("x",E.x+i).attr("y",E.y+a).attr("width",E.width).attr("height",E.height);const L=_.insert("g").attr("class","label"),N=Le().flowchart.htmlLabels?E.labelData.width/2:0;L.attr("transform",`translate(${E.labels[0].x+i+E.x+N}, ${E.labels[0].y+a+E.y+3})`),L.node().appendChild(E.labelData.labelNode),Ut.info("Id (UGH)= ",E.type,E.labels)}else Ut.info("Id (UGH)= ",E.id),E.el.attr("transform",`translate(${E.x+i+E.width/2}, ${E.y+a+E.height/2})`)}),f.forEach(function(E){E&&E.type==="group"&&Sjt(i+E.x,a+E.y,E.children,p,v,m,b+1)})},yUe={getClasses:pUe,draw:mUe},xUe=i=>{let a="";for(let f=0;f<5;f++)a+=`
      .subgraph-lvl-${f} {
        fill: ${i[`surface${f}`]};
        stroke: ${i[`surfacePeer${f}`]};
      }
    `;return a},kUe=Object.freeze(Object.defineProperty({__proto__:null,diagram:{db:jIe,renderer:yUe,parser:$dt,styles:i=>`.label {
    font-family: ${i.fontFamily};
    color: ${i.nodeTextColor||i.textColor};
  }
  .cluster-label text {
    fill: ${i.titleColor};
  }
  .cluster-label span {
    color: ${i.titleColor};
  }

  .label text,span {
    fill: ${i.nodeTextColor||i.textColor};
    color: ${i.nodeTextColor||i.textColor};
  }

  .node rect,
  .node circle,
  .node ellipse,
  .node polygon,
  .node path {
    fill: ${i.mainBkg};
    stroke: ${i.nodeBorder};
    stroke-width: 1px;
  }

  .node .label {
    text-align: center;
  }
  .node.clickable {
    cursor: pointer;
  }

  .arrowheadPath {
    fill: ${i.arrowheadColor};
  }

  .edgePath .path {
    stroke: ${i.lineColor};
    stroke-width: 2.0px;
  }

  .flowchart-link {
    stroke: ${i.lineColor};
    fill: none;
  }

  .edgeLabel {
    background-color: ${i.edgeLabelBackground};
    rect {
      opacity: 0.85;
      background-color: ${i.edgeLabelBackground};
      fill: ${i.edgeLabelBackground};
    }
    text-align: center;
  }

  .cluster rect {
    fill: ${i.clusterBkg};
    stroke: ${i.clusterBorder};
    stroke-width: 1px;
  }

  .cluster text {
    fill: ${i.titleColor};
  }

  .cluster span {
    color: ${i.titleColor};
  }
  /* .cluster div {
    color: ${i.titleColor};
  } */

  div.mermaidTooltip {
    position: absolute;
    text-align: center;
    max-width: 200px;
    padding: 2px;
    font-family: ${i.fontFamily};
    font-size: 12px;
    background: ${i.tertiaryColor};
    border: 1px solid ${i.border2};
    border-radius: 2px;
    pointer-events: none;
    z-index: 100;
  }

  .flowchartTitleText {
    text-anchor: middle;
    font-size: 18px;
    fill: ${i.textColor};
  }
  .subgraph {
    stroke-width:2;
    rx:3;
  }
  // .subgraph-lvl-1 {
  //   fill:#ccc;
  //   // stroke:black;
  // }

  .flowchart-label text {
    text-anchor: middle;
  }

  ${xUe(i)}
`}},Symbol.toStringTag,{value:"Module"}));var jgt=function(){var i=function(j,R,z,K){for(z=z||{},K=j.length;K--;z[j[K]]=R);return z},a=[6,8,10,11,12,14,16,17,20,21],f=[1,9],p=[1,10],v=[1,11],m=[1,12],b=[1,13],E=[1,16],_=[1,17],L={trace:function(){},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:function(R,z,K,it,st,ut,bt){var mt=ut.length-1;switch(st){case 1:return ut[mt-1];case 2:this.$=[];break;case 3:ut[mt-1].push(ut[mt]),this.$=ut[mt-1];break;case 4:case 5:this.$=ut[mt];break;case 6:case 7:this.$=[];break;case 8:it.getCommonDb().setDiagramTitle(ut[mt].substr(6)),this.$=ut[mt].substr(6);break;case 9:this.$=ut[mt].trim(),it.getCommonDb().setAccTitle(this.$);break;case 10:case 11:this.$=ut[mt].trim(),it.getCommonDb().setAccDescription(this.$);break;case 12:it.addSection(ut[mt].substr(8)),this.$=ut[mt].substr(8);break;case 15:it.addTask(ut[mt],0,""),this.$=ut[mt];break;case 16:it.addEvent(ut[mt].substr(2)),this.$=ut[mt];break}},table:[{3:1,4:[1,2]},{1:[3]},i(a,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:f,12:p,14:v,16:m,17:b,18:14,19:15,20:E,21:_},i(a,[2,7],{1:[2,1]}),i(a,[2,3]),{9:18,11:f,12:p,14:v,16:m,17:b,18:14,19:15,20:E,21:_},i(a,[2,5]),i(a,[2,6]),i(a,[2,8]),{13:[1,19]},{15:[1,20]},i(a,[2,11]),i(a,[2,12]),i(a,[2,13]),i(a,[2,14]),i(a,[2,15]),i(a,[2,16]),i(a,[2,4]),i(a,[2,9]),i(a,[2,10])],defaultActions:{},parseError:function(R,z){if(z.recoverable)this.trace(R);else{var K=new Error(R);throw K.hash=z,K}},parse:function(R){var z=this,K=[0],it=[],st=[null],ut=[],bt=this.table,mt="",yt=0,dt=0,ht=2,wt=1,X=ut.slice.call(arguments,1),pt=Object.create(this.lexer),U={yy:{}};for(var xt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,xt)&&(U.yy[xt]=this.yy[xt]);pt.setInput(R,U.yy),U.yy.lexer=pt,U.yy.parser=this,typeof pt.yylloc>"u"&&(pt.yylloc={});var nt=pt.yylloc;ut.push(nt);var Ot=pt.options&&pt.options.ranges;typeof U.yy.parseError=="function"?this.parseError=U.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Nt(){var ve;return ve=it.pop()||pt.lex()||wt,typeof ve!="number"&&(ve instanceof Array&&(it=ve,ve=it.pop()),ve=z.symbols_[ve]||ve),ve}for(var qt,Ct,Z,Tt,Ht={},It,Ft,ke,pn;;){if(Ct=K[K.length-1],this.defaultActions[Ct]?Z=this.defaultActions[Ct]:((qt===null||typeof qt>"u")&&(qt=Nt()),Z=bt[Ct]&&bt[Ct][qt]),typeof Z>"u"||!Z.length||!Z[0]){var Me="";pn=[];for(It in bt[Ct])this.terminals_[It]&&It>ht&&pn.push("'"+this.terminals_[It]+"'");pt.showPosition?Me="Parse error on line "+(yt+1)+`:
`+pt.showPosition()+`
Expecting `+pn.join(", ")+", got '"+(this.terminals_[qt]||qt)+"'":Me="Parse error on line "+(yt+1)+": Unexpected "+(qt==wt?"end of input":"'"+(this.terminals_[qt]||qt)+"'"),this.parseError(Me,{text:pt.match,token:this.terminals_[qt]||qt,line:pt.yylineno,loc:nt,expected:pn})}if(Z[0]instanceof Array&&Z.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Ct+", token: "+qt);switch(Z[0]){case 1:K.push(qt),st.push(pt.yytext),ut.push(pt.yylloc),K.push(Z[1]),qt=null,dt=pt.yyleng,mt=pt.yytext,yt=pt.yylineno,nt=pt.yylloc;break;case 2:if(Ft=this.productions_[Z[1]][1],Ht.$=st[st.length-Ft],Ht._$={first_line:ut[ut.length-(Ft||1)].first_line,last_line:ut[ut.length-1].last_line,first_column:ut[ut.length-(Ft||1)].first_column,last_column:ut[ut.length-1].last_column},Ot&&(Ht._$.range=[ut[ut.length-(Ft||1)].range[0],ut[ut.length-1].range[1]]),Tt=this.performAction.apply(Ht,[mt,dt,yt,U.yy,Z[1],st,ut].concat(X)),typeof Tt<"u")return Tt;Ft&&(K=K.slice(0,-1*Ft*2),st=st.slice(0,-1*Ft),ut=ut.slice(0,-1*Ft)),K.push(this.productions_[Z[1]][0]),st.push(Ht.$),ut.push(Ht._$),ke=bt[K[K.length-2]][K[K.length-1]],K.push(ke);break;case 3:return!0}}return!0}},N=function(){var j={EOF:1,parseError:function(z,K){if(this.yy.parser)this.yy.parser.parseError(z,K);else throw new Error(z)},setInput:function(R,z){return this.yy=z||this.yy||{},this._input=R,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},input:function(){var R=this._input[0];this.yytext+=R,this.yyleng++,this.offset++,this.match+=R,this.matched+=R;var z=R.match(/(?:\r\n?|\n).*/g);return z?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),R},unput:function(R){var z=R.length,K=R.split(/(?:\r\n?|\n)/g);this._input=R+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-z),this.offset-=z;var it=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),K.length-1&&(this.yylineno-=K.length-1);var st=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:K?(K.length===it.length?this.yylloc.first_column:0)+it[it.length-K.length].length-K[0].length:this.yylloc.first_column-z},this.options.ranges&&(this.yylloc.range=[st[0],st[0]+this.yyleng-z]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject: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},less:function(R){this.unput(this.match.slice(R))},pastInput:function(){var R=this.matched.substr(0,this.matched.length-this.match.length);return(R.length>20?"...":"")+R.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var R=this.match;return R.length<20&&(R+=this._input.substr(0,20-R.length)),(R.substr(0,20)+(R.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var R=this.pastInput(),z=new Array(R.length+1).join("-");return R+this.upcomingInput()+`
`+z+"^"},test_match:function(R,z){var K,it,st;if(this.options.backtrack_lexer&&(st={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&&(st.yylloc.range=this.yylloc.range.slice(0))),it=R[0].match(/(?:\r\n?|\n).*/g),it&&(this.yylineno+=it.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:it?it[it.length-1].length-it[it.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+R[0].length},this.yytext+=R[0],this.match+=R[0],this.matches=R,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(R[0].length),this.matched+=R[0],K=this.performAction.call(this,this.yy,this,z,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),K)return K;if(this._backtrack){for(var ut in st)this[ut]=st[ut];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var R,z,K,it;this._more||(this.yytext="",this.match="");for(var st=this._currentRules(),ut=0;ut<st.length;ut++)if(K=this._input.match(this.rules[st[ut]]),K&&(!z||K[0].length>z[0].length)){if(z=K,it=ut,this.options.backtrack_lexer){if(R=this.test_match(K,st[ut]),R!==!1)return R;if(this._backtrack){z=!1;continue}else return!1}else if(!this.options.flex)break}return z?(R=this.test_match(z,st[it]),R!==!1?R:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text.
`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var z=this.next();return z||this.lex()},begin:function(z){this.conditionStack.push(z)},popState:function(){var z=this.conditionStack.length-1;return z>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(z){return z=this.conditionStack.length-1-Math.abs(z||0),z>=0?this.conditionStack[z]:"INITIAL"},pushState:function(z){this.begin(z)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(z,K,it,st){switch(it){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;case 8:return this.popState(),"acc_title_value";case 9:return this.begin("acc_descr"),14;case 10:return this.popState(),"acc_descr_value";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"}},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 j}();L.lexer=N;function B(){this.yy={}}return B.prototype=L,L.Parser=B,new B}();jgt.parser=jgt;const EUe=jgt;let pL="",Ajt=0;const $gt=[],GK=[],bL=[],Ljt=()=>LOt,Mjt=function(){$gt.length=0,GK.length=0,pL="",bL.length=0,ap()},Ijt=function(i){pL=i,$gt.push(i)},Djt=function(){return $gt},Ojt=function(){let i=Bjt();const a=100;let f=0;for(;!i&&f<a;)i=Bjt(),f++;return GK.push(...bL),GK},Njt=function(i,a,f){const p={id:Ajt++,section:pL,type:pL,task:i,score:a||0,events:f?[f]:[]};bL.push(p)},Pjt=function(i){bL.find(f=>f.id===Ajt-1).events.push(i)},Fjt=function(i){const a={section:pL,type:pL,description:i,task:i,classes:[]};GK.push(a)},Bjt=function(){const i=function(f){return bL[f].processed};let a=!0;for(const[f,p]of bL.entries())i(f),a=a&&p.processed;return a},TUe=Object.freeze(Object.defineProperty({__proto__:null,addEvent:Pjt,addSection:Ijt,addTask:Njt,addTaskOrg:Fjt,clear:Mjt,default:{clear:Mjt,getCommonDb:Ljt,addSection:Ijt,getSections:Djt,getTasks:Ojt,addTask:Njt,addTaskOrg:Fjt,addEvent:Pjt},getCommonDb:Ljt,getSections:Djt,getTasks:Ojt},Symbol.toStringTag,{value:"Module"})),CUe=12,VK=function(i,a){const f=i.append("rect");return f.attr("x",a.x),f.attr("y",a.y),f.attr("fill",a.fill),f.attr("stroke",a.stroke),f.attr("width",a.width),f.attr("height",a.height),f.attr("rx",a.rx),f.attr("ry",a.ry),a.class!==void 0&&f.attr("class",a.class),f},_Ue=function(i,a){const p=i.append("circle").attr("cx",a.cx).attr("cy",a.cy).attr("class","face").attr("r",15).attr("stroke-width",2).attr("overflow","visible"),v=i.append("g");v.append("circle").attr("cx",a.cx-15/3).attr("cy",a.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),v.append("circle").attr("cx",a.cx+15/3).attr("cy",a.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666");function m(_){const L=LA().startAngle(Math.PI/2).endAngle(3*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);_.append("path").attr("class","mouth").attr("d",L).attr("transform","translate("+a.cx+","+(a.cy+2)+")")}function b(_){const L=LA().startAngle(3*Math.PI/2).endAngle(5*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);_.append("path").attr("class","mouth").attr("d",L).attr("transform","translate("+a.cx+","+(a.cy+7)+")")}function E(_){_.append("line").attr("class","mouth").attr("stroke",2).attr("x1",a.cx-5).attr("y1",a.cy+7).attr("x2",a.cx+5).attr("y2",a.cy+7).attr("class","mouth").attr("stroke-width","1px").attr("stroke","#666")}return a.score>3?m(v):a.score<3?b(v):E(v),p},SUe=function(i,a){const f=i.append("circle");return f.attr("cx",a.cx),f.attr("cy",a.cy),f.attr("class","actor-"+a.pos),f.attr("fill",a.fill),f.attr("stroke",a.stroke),f.attr("r",a.r),f.class!==void 0&&f.attr("class",f.class),a.title!==void 0&&f.append("title").text(a.title),f},Rjt=function(i,a){const f=a.text.replace(/<br\s*\/?>/gi," "),p=i.append("text");p.attr("x",a.x),p.attr("y",a.y),p.attr("class","legend"),p.style("text-anchor",a.anchor),a.class!==void 0&&p.attr("class",a.class);const v=p.append("tspan");return v.attr("x",a.x+a.textMargin*2),v.text(f),p},AUe=function(i,a){function f(v,m,b,E,_){return v+","+m+" "+(v+b)+","+m+" "+(v+b)+","+(m+E-_)+" "+(v+b-_*1.2)+","+(m+E)+" "+v+","+(m+E)}const p=i.append("polygon");p.attr("points",f(a.x,a.y,50,20,7)),p.attr("class","labelBox"),a.y=a.y+a.labelMargin,a.x=a.x+.5*a.labelMargin,Rjt(i,a)},LUe=function(i,a,f){const p=i.append("g"),v=zgt();v.x=a.x,v.y=a.y,v.fill=a.fill,v.width=f.width,v.height=f.height,v.class="journey-section section-type-"+a.num,v.rx=3,v.ry=3,VK(p,v),$jt(f)(a.text,p,v.x,v.y,v.width,v.height,{class:"journey-section section-type-"+a.num},f,a.colour)};let jjt=-1;const MUe=function(i,a,f){const p=a.x+f.width/2,v=i.append("g");jjt++;const m=300+5*30;v.append("line").attr("id","task"+jjt).attr("x1",p).attr("y1",a.y).attr("x2",p).attr("y2",m).attr("class","task-line").attr("stroke-width","1px").attr("stroke-dasharray","4 2").attr("stroke","#666"),_Ue(v,{cx:p,cy:300+(5-a.score)*30,score:a.score});const b=zgt();b.x=a.x,b.y=a.y,b.fill=a.fill,b.width=f.width,b.height=f.height,b.class="task task-type-"+a.num,b.rx=3,b.ry=3,VK(v,b),a.x+14,$jt(f)(a.task,v,b.x,b.y,b.width,b.height,{class:"task"},f,a.colour)},IUe=function(i,a){VK(i,{x:a.startx,y:a.starty,width:a.stopx-a.startx,height:a.stopy-a.starty,fill:a.fill,class:"rect"}).lower()},DUe=function(){return{x:0,y:0,fill:void 0,"text-anchor":"start",width:100,height:100,textMargin:0,rx:0,ry:0}},zgt=function(){return{x:0,y:0,width:100,anchor:"start",height:100,rx:0,ry:0}},$jt=function(){function i(v,m,b,E,_,L,N,B){const j=m.append("text").attr("x",b+_/2).attr("y",E+L/2+5).style("font-color",B).style("text-anchor","middle").text(v);p(j,N)}function a(v,m,b,E,_,L,N,B,j){const{taskFontSize:R,taskFontFamily:z}=B,K=v.split(/<br\s*\/?>/gi);for(let it=0;it<K.length;it++){const st=it*R-R*(K.length-1)/2,ut=m.append("text").attr("x",b+_/2).attr("y",E).attr("fill",j).style("text-anchor","middle").style("font-size",R).style("font-family",z);ut.append("tspan").attr("x",b+_/2).attr("dy",st).text(K[it]),ut.attr("y",E+L/2).attr("dominant-baseline","central").attr("alignment-baseline","central"),p(ut,N)}}function f(v,m,b,E,_,L,N,B){const j=m.append("switch"),z=j.append("foreignObject").attr("x",b).attr("y",E).attr("width",_).attr("height",L).attr("position","fixed").append("xhtml:div").style("display","table").style("height","100%").style("width","100%");z.append("div").attr("class","label").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(v),a(v,j,b,E,_,L,N,B),p(z,N)}function p(v,m){for(const b in m)b in m&&v.attr(b,m[b])}return function(v){return v.textPlacement==="fo"?f:v.textPlacement==="old"?i:a}}(),OUe=function(i){i.append("defs").append("marker").attr("id","arrowhead").attr("refX",5).attr("refY",2).attr("markerWidth",6).attr("markerHeight",4).attr("orient","auto").append("path").attr("d","M 0,0 V 4 L6,2 Z")};function zjt(i,a){i.each(function(){var f=yr(this),p=f.text().split(/(\s+|<br>)/).reverse(),v,m=[],b=1.1,E=f.attr("y"),_=parseFloat(f.attr("dy")),L=f.text(null).append("tspan").attr("x",0).attr("y",E).attr("dy",_+"em");for(let N=0;N<p.length;N++)v=p[p.length-1-N],m.push(v),L.text(m.join(" ").trim()),(L.node().getComputedTextLength()>a||v==="<br>")&&(m.pop(),L.text(m.join(" ").trim()),v==="<br>"?m=[""]:m=[v],L=f.append("tspan").attr("x",0).attr("y",E).attr("dy",b+"em").text(v))})}const NUe=function(i,a,f,p){const v=f%CUe-1,m=i.append("g");a.section=v,m.attr("class",(a.class?a.class+" ":"")+"timeline-node "+("section-"+v));const b=m.append("g"),E=m.append("g"),L=E.append("text").text(a.descr).attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle").call(zjt,a.width).node().getBBox(),N=p.fontSize&&p.fontSize.replace?p.fontSize.replace("px",""):p.fontSize;return a.height=L.height+N*1.1*.5+a.padding,a.height=Math.max(a.height,a.maxHeight),a.width=a.width+2*a.padding,E.attr("transform","translate("+a.width/2+", "+a.padding/2+")"),FUe(b,a,v),a},PUe=function(i,a,f){const p=i.append("g"),m=p.append("text").text(a.descr).attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle").call(zjt,a.width).node().getBBox(),b=f.fontSize&&f.fontSize.replace?f.fontSize.replace("px",""):f.fontSize;return p.remove(),m.height+b*1.1*.5+a.padding},FUe=function(i,a,f){i.append("path").attr("id","node-"+a.id).attr("class","node-bkg node-"+a.type).attr("d",`M0 ${a.height-5} v${-a.height+2*5} q0,-5 5,-5 h${a.width-2*5} q5,0 5,5 v${a.height-5} H0 Z`),i.append("line").attr("class","node-line-"+f).attr("x1",0).attr("y1",a.height).attr("x2",a.width).attr("y2",a.height)},AT={drawRect:VK,drawCircle:SUe,drawSection:LUe,drawText:Rjt,drawLabel:AUe,drawTask:MUe,drawBackgroundRect:IUe,getTextObj:DUe,getNoteRect:zgt,initGraphics:OUe,drawNode:NUe,getVirtualNodeHeight:PUe},BUe=function(i,a,f,p){var X,pt;const v=Le(),m=v.leftMargin??50;Ut.debug("timeline",p.db);const b=v.securityLevel;let E;b==="sandbox"&&(E=yr("#i"+a));const L=yr(b==="sandbox"?E.nodes()[0].contentDocument.body:"body").select("#"+a);L.append("g");const N=p.db.getTasks(),B=p.db.getCommonDb().getDiagramTitle();Ut.debug("task",N),AT.initGraphics(L);const j=p.db.getSections();Ut.debug("sections",j);let R=0,z=0,K=0,it=0,st=50+m,ut=50;it=50;let bt=0,mt=!0;j.forEach(function(U){const xt={number:bt,descr:U,section:bt,width:150,padding:20,maxHeight:R},nt=AT.getVirtualNodeHeight(L,xt,v);Ut.debug("sectionHeight before draw",nt),R=Math.max(R,nt+20)});let yt=0,dt=0;Ut.debug("tasks.length",N.length);for(const[U,xt]of N.entries()){const nt={number:U,descr:xt,section:xt.section,width:150,padding:20,maxHeight:z},Ot=AT.getVirtualNodeHeight(L,nt,v);Ut.debug("taskHeight before draw",Ot),z=Math.max(z,Ot+20),yt=Math.max(yt,xt.events.length);let Nt=0;for(let qt=0;qt<xt.events.length;qt++){const Z={descr:xt.events[qt],section:xt.section,number:xt.section,width:150,padding:20,maxHeight:50};Nt+=AT.getVirtualNodeHeight(L,Z,v)}dt=Math.max(dt,Nt)}Ut.debug("maxSectionHeight before draw",R),Ut.debug("maxTaskHeight before draw",z),j&&j.length>0?j.forEach(U=>{const xt=N.filter(qt=>qt.section===U),nt={number:bt,descr:U,section:bt,width:200*Math.max(xt.length,1)-50,padding:20,maxHeight:R};Ut.debug("sectionNode",nt);const Ot=L.append("g"),Nt=AT.drawNode(Ot,nt,bt,v);Ut.debug("sectionNode output",Nt),Ot.attr("transform",`translate(${st}, ${it})`),ut+=R+50,xt.length>0&&qjt(L,xt,bt,st,ut,z,v,yt,dt,R,!1),st+=200*Math.max(xt.length,1),ut=it,bt++}):(mt=!1,qjt(L,N,bt,st,ut,z,v,yt,dt,R,!0));const ht=L.node().getBBox();Ut.debug("bounds",ht),B&&L.append("text").text(B).attr("x",ht.width/2-m).attr("font-size","4ex").attr("font-weight","bold").attr("y",20),K=mt?R+z+150:z+100,L.append("g").attr("class","lineWrapper").append("line").attr("x1",m).attr("y1",K).attr("x2",ht.width+3*m).attr("y2",K).attr("stroke-width",4).attr("stroke","black").attr("marker-end","url(#arrowhead)"),cT(void 0,L,((X=v.timeline)==null?void 0:X.padding)??50,((pt=v.timeline)==null?void 0:pt.useMaxWidth)??!1)},qjt=function(i,a,f,p,v,m,b,E,_,L,N){var B;for(const j of a){const R={descr:j.task,section:f,number:f,width:150,padding:20,maxHeight:m};Ut.debug("taskNode",R);const z=i.append("g").attr("class","taskWrapper"),it=AT.drawNode(z,R,f,b).height;if(Ut.debug("taskHeight after draw",it),z.attr("transform",`translate(${p}, ${v})`),m=Math.max(m,it),j.events){const st=i.append("g").attr("class","lineWrapper");let ut=m;v+=100,ut=ut+RUe(i,j.events,f,p,v,b),v-=100,st.append("line").attr("x1",p+190/2).attr("y1",v+m).attr("x2",p+190/2).attr("y2",v+m+(N?m:L)+_+120).attr("stroke-width",2).attr("stroke","black").attr("marker-end","url(#arrowhead)").attr("stroke-dasharray","5,5")}p=p+200,N&&!((B=b.timeline)!=null&&B.disableMulticolor)&&f++}v=v-10},RUe=function(i,a,f,p,v,m){let b=0;const E=v;v=v+100;for(const _ of a){const L={descr:_,section:f,number:f,width:150,padding:20,maxHeight:50};Ut.debug("eventNode",L);const N=i.append("g").attr("class","eventWrapper"),j=AT.drawNode(N,L,f,m).height;b=b+j,N.attr("transform",`translate(${p}, ${v})`),v=v+10+j}return v=E,b},jUe={setConf:()=>{},draw:BUe},$Ue=i=>{let a="";for(let f=0;f<i.THEME_COLOR_LIMIT;f++)i["lineColor"+f]=i["lineColor"+f]||i["cScaleInv"+f],J7(i["lineColor"+f])?i["lineColor"+f]=bs(i["lineColor"+f],20):i["lineColor"+f]=js(i["lineColor"+f],20);for(let f=0;f<i.THEME_COLOR_LIMIT;f++){const p=""+(17-3*f);a+=`
    .section-${f-1} rect, .section-${f-1} path, .section-${f-1} circle, .section-${f-1} path  {
      fill: ${i["cScale"+f]};
    }
    .section-${f-1} text {
     fill: ${i["cScaleLabel"+f]};
    }
    .node-icon-${f-1} {
      font-size: 40px;
      color: ${i["cScaleLabel"+f]};
    }
    .section-edge-${f-1}{
      stroke: ${i["cScale"+f]};
    }
    .edge-depth-${f-1}{
      stroke-width: ${p};
    }
    .section-${f-1} line {
      stroke: ${i["cScaleInv"+f]} ;
      stroke-width: 3;
    }

    .lineWrapper line{
      stroke: ${i["cScaleLabel"+f]} ;
    }

    .disabled, .disabled circle, .disabled text {
      fill: lightgray;
    }
    .disabled text {
      fill: #efefef;
    }
    `}return a},zUe=Object.freeze(Object.defineProperty({__proto__:null,diagram:{db:TUe,renderer:jUe,parser:EUe,styles:i=>`
  .edge {
    stroke-width: 3;
  }
  ${$Ue(i)}
  .section-root rect, .section-root path, .section-root circle  {
    fill: ${i.git0};
  }
  .section-root text {
    fill: ${i.gitBranchLabel0};
  }
  .icon-container {
    height:100%;
    display: flex;
    justify-content: center;
    align-items: center;
  }
  .edge {
    fill: none;
  }
  .eventWrapper  {
   filter: brightness(120%);
  }
`}},Symbol.toStringTag,{value:"Module"}));var qgt=function(){var i=function(mt,yt,dt,ht){for(dt=dt||{},ht=mt.length;ht--;dt[mt[ht]]=yt);return dt},a=[1,4],f=[1,13],p=[1,12],v=[1,15],m=[1,16],b=[1,20],E=[1,19],_=[6,7,8],L=[1,26],N=[1,24],B=[1,25],j=[6,7,11],R=[1,6,13,15,16,19,22],z=[1,33],K=[1,34],it=[1,6,7,11,13,15,16,19,22],st={trace:function(){},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:function(yt,dt,ht,wt,X,pt,U){var xt=pt.length-1;switch(X){case 6:case 7:return wt;case 8:wt.getLogger().trace("Stop NL ");break;case 9:wt.getLogger().trace("Stop EOF ");break;case 11:wt.getLogger().trace("Stop NL2 ");break;case 12:wt.getLogger().trace("Stop EOF2 ");break;case 15:wt.getLogger().info("Node: ",pt[xt].id),wt.addNode(pt[xt-1].length,pt[xt].id,pt[xt].descr,pt[xt].type);break;case 16:wt.getLogger().trace("Icon: ",pt[xt]),wt.decorateNode({icon:pt[xt]});break;case 17:case 21:wt.decorateNode({class:pt[xt]});break;case 18:wt.getLogger().trace("SPACELIST");break;case 19:wt.getLogger().trace("Node: ",pt[xt].id),wt.addNode(0,pt[xt].id,pt[xt].descr,pt[xt].type);break;case 20:wt.decorateNode({icon:pt[xt]});break;case 25:wt.getLogger().trace("node found ..",pt[xt-2]),this.$={id:pt[xt-1],descr:pt[xt-1],type:wt.getType(pt[xt-2],pt[xt])};break;case 26:this.$={id:pt[xt],descr:pt[xt],type:wt.nodeType.DEFAULT};break;case 27:wt.getLogger().trace("node found ..",pt[xt-3]),this.$={id:pt[xt-3],descr:pt[xt-1],type:wt.getType(pt[xt-2],pt[xt])};break}},table:[{3:1,4:2,5:3,6:[1,5],8:a},{1:[3]},{1:[2,1]},{4:6,6:[1,7],7:[1,8],8:a},{6:f,7:[1,10],9:9,12:11,13:p,14:14,15:v,16:m,17:17,18:18,19:b,22:E},i(_,[2,3]),{1:[2,2]},i(_,[2,4]),i(_,[2,5]),{1:[2,6],6:f,12:21,13:p,14:14,15:v,16:m,17:17,18:18,19:b,22:E},{6:f,9:22,12:11,13:p,14:14,15:v,16:m,17:17,18:18,19:b,22:E},{6:L,7:N,10:23,11:B},i(j,[2,22],{17:17,18:18,14:27,15:[1,28],16:[1,29],19:b,22:E}),i(j,[2,18]),i(j,[2,19]),i(j,[2,20]),i(j,[2,21]),i(j,[2,23]),i(j,[2,24]),i(j,[2,26],{19:[1,30]}),{20:[1,31]},{6:L,7:N,10:32,11:B},{1:[2,7],6:f,12:21,13:p,14:14,15:v,16:m,17:17,18:18,19:b,22:E},i(R,[2,14],{7:z,11:K}),i(it,[2,8]),i(it,[2,9]),i(it,[2,10]),i(j,[2,15]),i(j,[2,16]),i(j,[2,17]),{20:[1,35]},{21:[1,36]},i(R,[2,13],{7:z,11:K}),i(it,[2,11]),i(it,[2,12]),{21:[1,37]},i(j,[2,25]),i(j,[2,27])],defaultActions:{2:[2,1],6:[2,2]},parseError:function(yt,dt){if(dt.recoverable)this.trace(yt);else{var ht=new Error(yt);throw ht.hash=dt,ht}},parse:function(yt){var dt=this,ht=[0],wt=[],X=[null],pt=[],U=this.table,xt="",nt=0,Ot=0,Nt=2,qt=1,Ct=pt.slice.call(arguments,1),Z=Object.create(this.lexer),Tt={yy:{}};for(var Ht in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Ht)&&(Tt.yy[Ht]=this.yy[Ht]);Z.setInput(yt,Tt.yy),Tt.yy.lexer=Z,Tt.yy.parser=this,typeof Z.yylloc>"u"&&(Z.yylloc={});var It=Z.yylloc;pt.push(It);var Ft=Z.options&&Z.options.ranges;typeof Tt.yy.parseError=="function"?this.parseError=Tt.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function ke(){var Oe;return Oe=wt.pop()||Z.lex()||qt,typeof Oe!="number"&&(Oe instanceof Array&&(wt=Oe,Oe=wt.pop()),Oe=dt.symbols_[Oe]||Oe),Oe}for(var pn,Me,ve,Ge,Ke={},we,_e,$t,re;;){if(Me=ht[ht.length-1],this.defaultActions[Me]?ve=this.defaultActions[Me]:((pn===null||typeof pn>"u")&&(pn=ke()),ve=U[Me]&&U[Me][pn]),typeof ve>"u"||!ve.length||!ve[0]){var ie="";re=[];for(we in U[Me])this.terminals_[we]&&we>Nt&&re.push("'"+this.terminals_[we]+"'");Z.showPosition?ie="Parse error on line "+(nt+1)+`:
`+Z.showPosition()+`
Expecting `+re.join(", ")+", got '"+(this.terminals_[pn]||pn)+"'":ie="Parse error on line "+(nt+1)+": Unexpected "+(pn==qt?"end of input":"'"+(this.terminals_[pn]||pn)+"'"),this.parseError(ie,{text:Z.match,token:this.terminals_[pn]||pn,line:Z.yylineno,loc:It,expected:re})}if(ve[0]instanceof Array&&ve.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Me+", token: "+pn);switch(ve[0]){case 1:ht.push(pn),X.push(Z.yytext),pt.push(Z.yylloc),ht.push(ve[1]),pn=null,Ot=Z.yyleng,xt=Z.yytext,nt=Z.yylineno,It=Z.yylloc;break;case 2:if(_e=this.productions_[ve[1]][1],Ke.$=X[X.length-_e],Ke._$={first_line:pt[pt.length-(_e||1)].first_line,last_line:pt[pt.length-1].last_line,first_column:pt[pt.length-(_e||1)].first_column,last_column:pt[pt.length-1].last_column},Ft&&(Ke._$.range=[pt[pt.length-(_e||1)].range[0],pt[pt.length-1].range[1]]),Ge=this.performAction.apply(Ke,[xt,Ot,nt,Tt.yy,ve[1],X,pt].concat(Ct)),typeof Ge<"u")return Ge;_e&&(ht=ht.slice(0,-1*_e*2),X=X.slice(0,-1*_e),pt=pt.slice(0,-1*_e)),ht.push(this.productions_[ve[1]][0]),X.push(Ke.$),pt.push(Ke._$),$t=U[ht[ht.length-2]][ht[ht.length-1]],ht.push($t);break;case 3:return!0}}return!0}},ut=function(){var mt={EOF:1,parseError:function(dt,ht){if(this.yy.parser)this.yy.parser.parseError(dt,ht);else throw new Error(dt)},setInput:function(yt,dt){return this.yy=dt||this.yy||{},this._input=yt,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},input:function(){var yt=this._input[0];this.yytext+=yt,this.yyleng++,this.offset++,this.match+=yt,this.matched+=yt;var dt=yt.match(/(?:\r\n?|\n).*/g);return dt?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),yt},unput:function(yt){var dt=yt.length,ht=yt.split(/(?:\r\n?|\n)/g);this._input=yt+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-dt),this.offset-=dt;var wt=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),ht.length-1&&(this.yylineno-=ht.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:ht?(ht.length===wt.length?this.yylloc.first_column:0)+wt[wt.length-ht.length].length-ht[0].length:this.yylloc.first_column-dt},this.options.ranges&&(this.yylloc.range=[X[0],X[0]+this.yyleng-dt]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject: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},less:function(yt){this.unput(this.match.slice(yt))},pastInput:function(){var yt=this.matched.substr(0,this.matched.length-this.match.length);return(yt.length>20?"...":"")+yt.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var yt=this.match;return yt.length<20&&(yt+=this._input.substr(0,20-yt.length)),(yt.substr(0,20)+(yt.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var yt=this.pastInput(),dt=new Array(yt.length+1).join("-");return yt+this.upcomingInput()+`
`+dt+"^"},test_match:function(yt,dt){var ht,wt,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))),wt=yt[0].match(/(?:\r\n?|\n).*/g),wt&&(this.yylineno+=wt.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:wt?wt[wt.length-1].length-wt[wt.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+yt[0].length},this.yytext+=yt[0],this.match+=yt[0],this.matches=yt,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(yt[0].length),this.matched+=yt[0],ht=this.performAction.call(this,this.yy,this,dt,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),ht)return ht;if(this._backtrack){for(var pt in X)this[pt]=X[pt];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var yt,dt,ht,wt;this._more||(this.yytext="",this.match="");for(var X=this._currentRules(),pt=0;pt<X.length;pt++)if(ht=this._input.match(this.rules[X[pt]]),ht&&(!dt||ht[0].length>dt[0].length)){if(dt=ht,wt=pt,this.options.backtrack_lexer){if(yt=this.test_match(ht,X[pt]),yt!==!1)return yt;if(this._backtrack){dt=!1;continue}else return!1}else if(!this.options.flex)break}return dt?(yt=this.test_match(dt,X[wt]),yt!==!1?yt:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text.
`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var dt=this.next();return dt||this.lex()},begin:function(dt){this.conditionStack.push(dt)},popState:function(){var dt=this.conditionStack.length-1;return dt>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(dt){return dt=this.conditionStack.length-1-Math.abs(dt||0),dt>=0?this.conditionStack[dt]:"INITIAL"},pushState:function(dt){this.begin(dt)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(dt,ht,wt,X){switch(wt){case 0:return dt.getLogger().trace("Found comment",ht.yytext),6;case 1:return 8;case 2:this.begin("CLASS");break;case 3:return this.popState(),16;case 4:this.popState();break;case 5:dt.getLogger().trace("Begin icon"),this.begin("ICON");break;case 6:return dt.getLogger().trace("SPACELINE"),6;case 7:return 7;case 8:return 15;case 9:dt.getLogger().trace("end icon"),this.popState();break;case 10:return dt.getLogger().trace("Exploding node"),this.begin("NODE"),19;case 11:return dt.getLogger().trace("Cloud"),this.begin("NODE"),19;case 12:return dt.getLogger().trace("Explosion Bang"),this.begin("NODE"),19;case 13:return dt.getLogger().trace("Cloud Bang"),this.begin("NODE"),19;case 14:return this.begin("NODE"),19;case 15:return this.begin("NODE"),19;case 16:return this.begin("NODE"),19;case 17:return this.begin("NODE"),19;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:dt.getLogger().trace("Starting NSTR"),this.begin("NSTR");break;case 25:return dt.getLogger().trace("description:",ht.yytext),"NODE_DESCR";case 26:this.popState();break;case 27:return this.popState(),dt.getLogger().trace("node end ))"),"NODE_DEND";case 28:return this.popState(),dt.getLogger().trace("node end )"),"NODE_DEND";case 29:return this.popState(),dt.getLogger().trace("node end ...",ht.yytext),"NODE_DEND";case 30:return this.popState(),dt.getLogger().trace("node end (("),"NODE_DEND";case 31:return this.popState(),dt.getLogger().trace("node end (-"),"NODE_DEND";case 32:return this.popState(),dt.getLogger().trace("node end (-"),"NODE_DEND";case 33:return this.popState(),dt.getLogger().trace("node end (("),"NODE_DEND";case 34:return this.popState(),dt.getLogger().trace("node end (("),"NODE_DEND";case 35:return dt.getLogger().trace("Long description:",ht.yytext),20;case 36:return dt.getLogger().trace("Long description:",ht.yytext),20}},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 mt}();st.lexer=ut;function bt(){this.yy={}}return bt.prototype=st,st.Parser=bt,new bt}();qgt.parser=qgt;const qUe=qgt,UP=i=>Dd(i,Le());let sv=[],Hjt=0,Hgt={};const HUe=()=>{sv=[],Hjt=0,Hgt={}},GUe=function(i){for(let a=sv.length-1;a>=0;a--)if(sv[a].level<i)return sv[a];return null},VUe=()=>sv.length>0?sv[0]:null,UUe=(i,a,f,p)=>{Ut.info("addNode",i,a,f,p);const v=Le(),m={id:Hjt++,nodeId:UP(a),level:i,descr:UP(f),type:p,children:[],width:Le().mindmap.maxNodeWidth};switch(m.type){case Vu.ROUNDED_RECT:m.padding=2*v.mindmap.padding;break;case Vu.RECT:m.padding=2*v.mindmap.padding;break;case Vu.HEXAGON:m.padding=2*v.mindmap.padding;break;default:m.padding=v.mindmap.padding}const b=GUe(i);if(b)b.children.push(m),sv.push(m);else if(sv.length===0)sv.push(m);else{let E=new Error('There can be only one root. No parent could be found for ("'+m.descr+'")');throw E.hash={text:"branch "+name,token:"branch "+name,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:['"checkout '+name+'"']},E}},Vu={DEFAULT:0,NO_BORDER:0,ROUNDED_RECT:1,RECT:2,CIRCLE:3,CLOUD:4,BANG:5,HEXAGON:6},WUe=(i,a)=>{switch(Ut.debug("In get type",i,a),i){case"[":return Vu.RECT;case"(":return a===")"?Vu.ROUNDED_RECT:Vu.CLOUD;case"((":return Vu.CIRCLE;case")":return Vu.CLOUD;case"))":return Vu.BANG;case"{{":return Vu.HEXAGON;default:return Vu.DEFAULT}},Gjt=(i,a)=>{Hgt[i]=a},KUe=i=>{const a=sv[sv.length-1];i&&i.icon&&(a.icon=UP(i.icon)),i&&i.class&&(a.class=UP(i.class))},LT=i=>{switch(i){case Vu.DEFAULT:return"no-border";case Vu.RECT:return"rect";case Vu.ROUNDED_RECT:return"rounded-rect";case Vu.CIRCLE:return"circle";case Vu.CLOUD:return"cloud";case Vu.BANG:return"bang";case Vu.HEXAGON:return"hexgon";default:return"no-border"}};let Vjt;const YUe=i=>{Vjt=i},XUe=()=>Ut,QUe=i=>sv[i],Ggt=i=>Hgt[i],ZUe=Object.freeze(Object.defineProperty({__proto__:null,addNode:UUe,clear:HUe,decorateNode:KUe,getElementById:Ggt,getLogger:XUe,getMindmap:VUe,getNodeById:QUe,getType:WUe,nodeType:Vu,get parseError(){return Vjt},sanitizeText:UP,setElementForId:Gjt,setErrorHandler:YUe,type2Str:LT},Symbol.toStringTag,{value:"Module"})),Ujt=12,JUe=function(i,a,f){i.append("path").attr("id","node-"+a.id).attr("class","node-bkg node-"+LT(a.type)).attr("d",`M0 ${a.height-5} v${-a.height+2*5} q0,-5 5,-5 h${a.width-2*5} q5,0 5,5 v${a.height-5} H0 Z`),i.append("line").attr("class","node-line-"+f).attr("x1",0).attr("y1",a.height).attr("x2",a.width).attr("y2",a.height)},tWe=function(i,a){i.append("rect").attr("id","node-"+a.id).attr("class","node-bkg node-"+LT(a.type)).attr("height",a.height).attr("width",a.width)},eWe=function(i,a){const f=a.width,p=a.height,v=.15*f,m=.25*f,b=.35*f,E=.2*f;i.append("path").attr("id","node-"+a.id).attr("class","node-bkg node-"+LT(a.type)).attr("d",`M0 0 a${v},${v} 0 0,1 ${f*.25},${-1*f*.1}
      a${b},${b} 1 0,1 ${f*.4},${-1*f*.1}
      a${m},${m} 1 0,1 ${f*.35},${1*f*.2}

      a${v},${v} 1 0,1 ${f*.15},${1*p*.35}
      a${E},${E} 1 0,1 ${-1*f*.15},${1*p*.65}

      a${m},${v} 1 0,1 ${-1*f*.25},${f*.15}
      a${b},${b} 1 0,1 ${-1*f*.5},0
      a${v},${v} 1 0,1 ${-1*f*.25},${-1*f*.15}

      a${v},${v} 1 0,1 ${-1*f*.1},${-1*p*.35}
      a${E},${E} 1 0,1 ${f*.1},${-1*p*.65}

    H0 V0 Z`)},nWe=function(i,a){const f=a.width,p=a.height,v=.15*f;i.append("path").attr("id","node-"+a.id).attr("class","node-bkg node-"+LT(a.type)).attr("d",`M0 0 a${v},${v} 1 0,0 ${f*.25},${-1*p*.1}
      a${v},${v} 1 0,0 ${f*.25},0
      a${v},${v} 1 0,0 ${f*.25},0
      a${v},${v} 1 0,0 ${f*.25},${1*p*.1}

      a${v},${v} 1 0,0 ${f*.15},${1*p*.33}
      a${v*.8},${v*.8} 1 0,0 0,${1*p*.34}
      a${v},${v} 1 0,0 ${-1*f*.15},${1*p*.33}

      a${v},${v} 1 0,0 ${-1*f*.25},${p*.15}
      a${v},${v} 1 0,0 ${-1*f*.25},0
      a${v},${v} 1 0,0 ${-1*f*.25},0
      a${v},${v} 1 0,0 ${-1*f*.25},${-1*p*.15}

      a${v},${v} 1 0,0 ${-1*f*.1},${-1*p*.33}
      a${v*.8},${v*.8} 1 0,0 0,${-1*p*.34}
      a${v},${v} 1 0,0 ${f*.1},${-1*p*.33}

    H0 V0 Z`)},rWe=function(i,a){i.append("circle").attr("id","node-"+a.id).attr("class","node-bkg node-"+LT(a.type)).attr("r",a.width/2)};function iWe(i,a,f,p,v){return i.insert("polygon",":first-child").attr("points",p.map(function(m){return m.x+","+m.y}).join(" ")).attr("transform","translate("+(v.width-a)/2+", "+f+")")}const sWe=function(i,a){const f=a.height,v=f/4,m=a.width-a.padding+2*v,b=[{x:v,y:0},{x:m-v,y:0},{x:m,y:-f/2},{x:m-v,y:-f},{x:v,y:-f},{x:0,y:-f/2}];iWe(i,m,f,b,a)},aWe=function(i,a){i.append("rect").attr("id","node-"+a.id).attr("class","node-bkg node-"+LT(a.type)).attr("height",a.height).attr("rx",a.padding).attr("ry",a.padding).attr("width",a.width)},Wjt={drawNode:function(i,a,f,p){const v=p.htmlLabels,m=f%(Ujt-1),b=i.append("g");a.section=m;let E="section-"+m;m<0&&(E+=" section-root"),b.attr("class",(a.class?a.class+" ":"")+"mindmap-node "+E);const _=b.append("g"),L=b.append("g"),N=a.descr.replace(/(<br\/*>)/g,`
`);dK(L,N,{useHtmlLabels:v,width:a.width,classes:"mindmap-node-label"}),v||L.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle");const B=L.node().getBBox(),j=p.fontSize.replace?p.fontSize.replace("px",""):p.fontSize;if(a.height=B.height+j*1.1*.5+a.padding,a.width=B.width+2*a.padding,a.icon)if(a.type===Vu.CIRCLE)a.height+=50,a.width+=50,b.append("foreignObject").attr("height","50px").attr("width",a.width).attr("style","text-align: center;").append("div").attr("class","icon-container").append("i").attr("class","node-icon-"+m+" "+a.icon),L.attr("transform","translate("+a.width/2+", "+(a.height/2-1.5*a.padding)+")");else{a.width+=50;const R=a.height;a.height=Math.max(R,60);const z=Math.abs(a.height-R);b.append("foreignObject").attr("width","60px").attr("height",a.height).attr("style","text-align: center;margin-top:"+z/2+"px;").append("div").attr("class","icon-container").append("i").attr("class","node-icon-"+m+" "+a.icon),L.attr("transform","translate("+(25+a.width/2)+", "+(z/2+a.padding/2)+")")}else if(v){const R=(a.width-B.width)/2,z=(a.height-B.height)/2;L.attr("transform","translate("+R+", "+z+")")}else{const R=a.width/2,z=a.padding/2;L.attr("transform","translate("+R+", "+z+")")}switch(a.type){case Vu.DEFAULT:JUe(_,a,m);break;case Vu.ROUNDED_RECT:aWe(_,a);break;case Vu.RECT:tWe(_,a);break;case Vu.CIRCLE:_.attr("transform","translate("+a.width/2+", "+ +a.height/2+")"),rWe(_,a);break;case Vu.CLOUD:eWe(_,a);break;case Vu.BANG:nWe(_,a);break;case Vu.HEXAGON:sWe(_,a);break}return Gjt(a.id,b),a.height},positionNode:function(i){const a=Ggt(i.id),f=i.x||0,p=i.y||0;a.attr("transform","translate("+f+","+p+")")},drawEdge:function(a,f,p,v,m){const b=m%(Ujt-1),E=p.x+p.width/2,_=p.y+p.height/2,L=f.x+f.width/2,N=f.y+f.height/2,B=L>E?E+Math.abs(E-L)/2:E-Math.abs(E-L)/2,j=N>_?_+Math.abs(_-N)/2:_-Math.abs(_-N)/2,R=L>E?Math.abs(E-B)/2+E:-Math.abs(E-B)/2+E,z=N>_?Math.abs(_-j)/2+_:-Math.abs(_-j)/2+_;a.append("path").attr("d",p.direction==="TB"||p.direction==="BT"?`M${E},${_} Q${E},${z} ${B},${j} T${L},${N}`:`M${E},${_} Q${R},${_} ${B},${j} T${L},${N}`).attr("class","edge section-edge-"+b+" edge-depth-"+v)}};var Kjt={exports:{}};(function(i,a){(function(f,p){i.exports=p()})(d0,function(){function f(y){return f=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(g){return typeof g}:function(g){return g&&typeof Symbol=="function"&&g.constructor===Symbol&&g!==Symbol.prototype?"symbol":typeof g},f(y)}function p(y,g){if(!(y instanceof g))throw new TypeError("Cannot call a class as a function")}function v(y,g){for(var x=0;x<g.length;x++){var T=g[x];T.enumerable=T.enumerable||!1,T.configurable=!0,"value"in T&&(T.writable=!0),Object.defineProperty(y,T.key,T)}}function m(y,g,x){return g&&v(y.prototype,g),x&&v(y,x),Object.defineProperty(y,"prototype",{writable:!1}),y}function b(y,g,x){return g in y?Object.defineProperty(y,g,{value:x,enumerable:!0,configurable:!0,writable:!0}):y[g]=x,y}function E(y,g){return _(y)||L(y,g)||N(y,g)||j()}function _(y){if(Array.isArray(y))return y}function L(y,g){var x=y==null?null:typeof Symbol<"u"&&y[Symbol.iterator]||y["@@iterator"];if(x!=null){var T=[],A=!0,D=!1,O,$;try{for(x=x.call(y);!(A=(O=x.next()).done)&&(T.push(O.value),!(g&&T.length===g));A=!0);}catch(q){D=!0,$=q}finally{try{!A&&x.return!=null&&x.return()}finally{if(D)throw $}}return T}}function N(y,g){if(y){if(typeof y=="string")return B(y,g);var x=Object.prototype.toString.call(y).slice(8,-1);if(x==="Object"&&y.constructor&&(x=y.constructor.name),x==="Map"||x==="Set")return Array.from(y);if(x==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(x))return B(y,g)}}function B(y,g){(g==null||g>y.length)&&(g=y.length);for(var x=0,T=new Array(g);x<g;x++)T[x]=y[x];return T}function j(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var R=typeof window>"u"?null:window,z=R?R.navigator:null;R&&R.document;var K=f(""),it=f({}),st=f(function(){}),ut=typeof HTMLElement>"u"?"undefined":f(HTMLElement),bt=function(g){return g&&g.instanceString&&yt(g.instanceString)?g.instanceString():null},mt=function(g){return g!=null&&f(g)==K},yt=function(g){return g!=null&&f(g)===st},dt=function(g){return!xt(g)&&(Array.isArray?Array.isArray(g):g!=null&&g instanceof Array)},ht=function(g){return g!=null&&f(g)===it&&!dt(g)&&g.constructor===Object},wt=function(g){return g!=null&&f(g)===it},X=function(g){return g!=null&&f(g)===f(1)&&!isNaN(g)},pt=function(g){return X(g)&&Math.floor(g)===g},U=function(g){if(ut!=="undefined")return g!=null&&g instanceof HTMLElement},xt=function(g){return nt(g)||Ot(g)},nt=function(g){return bt(g)==="collection"&&g._private.single},Ot=function(g){return bt(g)==="collection"&&!g._private.single},Nt=function(g){return bt(g)==="core"},qt=function(g){return bt(g)==="stylesheet"},Ct=function(g){return bt(g)==="event"},Z=function(g){return g==null?!0:!!(g===""||g.match(/^\s+$/))},Tt=function(g){return typeof HTMLElement>"u"?!1:g instanceof HTMLElement},Ht=function(g){return ht(g)&&X(g.x1)&&X(g.x2)&&X(g.y1)&&X(g.y2)},It=function(g){return wt(g)&&yt(g.then)},Ft=function(){return z&&z.userAgent.match(/msie|trident|edge/i)},ke=function(g,x){x||(x=function(){if(arguments.length===1)return arguments[0];if(arguments.length===0)return"undefined";for(var D=[],O=0;O<arguments.length;O++)D.push(arguments[O]);return D.join("$")});var T=function A(){var D=this,O=arguments,$,q=x.apply(D,O),S=A.cache;return($=S[q])||($=S[q]=g.apply(D,O)),$};return T.cache={},T},pn=ke(function(y){return y.replace(/([A-Z])/g,function(g){return"-"+g.toLowerCase()})}),Me=ke(function(y){return y.replace(/(-\w)/g,function(g){return g[1].toUpperCase()})}),ve=ke(function(y,g){return y+g[0].toUpperCase()+g.substring(1)},function(y,g){return y+"$"+g}),Ge=function(g){return Z(g)?g:g.charAt(0).toUpperCase()+g.substring(1)},Ke="(?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))",we="rgb[a]?\\(("+Ke+"[%]?)\\s*,\\s*("+Ke+"[%]?)\\s*,\\s*("+Ke+"[%]?)(?:\\s*,\\s*("+Ke+"))?\\)",_e="rgb[a]?\\((?:"+Ke+"[%]?)\\s*,\\s*(?:"+Ke+"[%]?)\\s*,\\s*(?:"+Ke+"[%]?)(?:\\s*,\\s*(?:"+Ke+"))?\\)",$t="hsl[a]?\\(("+Ke+")\\s*,\\s*("+Ke+"[%])\\s*,\\s*("+Ke+"[%])(?:\\s*,\\s*("+Ke+"))?\\)",re="hsl[a]?\\((?:"+Ke+")\\s*,\\s*(?:"+Ke+"[%])\\s*,\\s*(?:"+Ke+"[%])(?:\\s*,\\s*(?:"+Ke+"))?\\)",ie="\\#[0-9a-fA-F]{3}",Oe="\\#[0-9a-fA-F]{6}",oe=function(g,x){return g<x?-1:g>x?1:0},Ne=function(g,x){return-1*oe(g,x)},me=Object.assign!=null?Object.assign.bind(Object):function(y){for(var g=arguments,x=1;x<g.length;x++){var T=g[x];if(T!=null)for(var A=Object.keys(T),D=0;D<A.length;D++){var O=A[D];y[O]=T[O]}}return y},cn=function(g){if(!(!(g.length===4||g.length===7)||g[0]!=="#")){var x=g.length===4,T,A,D,O=16;return x?(T=parseInt(g[1]+g[1],O),A=parseInt(g[2]+g[2],O),D=parseInt(g[3]+g[3],O)):(T=parseInt(g[1]+g[2],O),A=parseInt(g[3]+g[4],O),D=parseInt(g[5]+g[6],O)),[T,A,D]}},li=function(g){var x,T,A,D,O,$,q,S;function G(lt,ft,At){return At<0&&(At+=1),At>1&&(At-=1),At<1/6?lt+(ft-lt)*6*At:At<1/2?ft:At<2/3?lt+(ft-lt)*(2/3-At)*6:lt}var W=new RegExp("^"+$t+"$").exec(g);if(W){if(T=parseInt(W[1]),T<0?T=(360- -1*T%360)%360:T>360&&(T=T%360),T/=360,A=parseFloat(W[2]),A<0||A>100||(A=A/100,D=parseFloat(W[3]),D<0||D>100)||(D=D/100,O=W[4],O!==void 0&&(O=parseFloat(O),O<0||O>1)))return;if(A===0)$=q=S=Math.round(D*255);else{var et=D<.5?D*(1+A):D+A-D*A,at=2*D-et;$=Math.round(255*G(at,et,T+1/3)),q=Math.round(255*G(at,et,T)),S=Math.round(255*G(at,et,T-1/3))}x=[$,q,S,O]}return x},ya=function(g){var x,T=new RegExp("^"+we+"$").exec(g);if(T){x=[];for(var A=[],D=1;D<=3;D++){var O=T[D];if(O[O.length-1]==="%"&&(A[D]=!0),O=parseFloat(O),A[D]&&(O=O/100*255),O<0||O>255)return;x.push(Math.floor(O))}var $=A[1]||A[2]||A[3],q=A[1]&&A[2]&&A[3];if($&&!q)return;var S=T[4];if(S!==void 0){if(S=parseFloat(S),S<0||S>1)return;x.push(S)}}return x},da=function(g){return ds[g.toLowerCase()]},Oo=function(g){return(dt(g)?g:null)||da(g)||cn(g)||ya(g)||li(g)},ds={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]},Dr=function(g){for(var x=g.map,T=g.keys,A=T.length,D=0;D<A;D++){var O=T[D];if(ht(O))throw Error("Tried to set map with object key");D<T.length-1?(x[O]==null&&(x[O]={}),x=x[O]):x[O]=g.value}},nr=function(g){for(var x=g.map,T=g.keys,A=T.length,D=0;D<A;D++){var O=T[D];if(ht(O))throw Error("Tried to get map with object key");if(x=x[O],x==null)return x}return x};function di(y){var g=typeof y;return y!=null&&(g=="object"||g=="function")}var Ee=di,Yn=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof d0<"u"?d0:typeof self<"u"?self:{};function He(y,g){return g={exports:{}},y(g,g.exports),g.exports}var Ti=typeof Yn=="object"&&Yn&&Yn.Object===Object&&Yn,gn=Ti,ks=typeof self=="object"&&self&&self.Object===Object&&self,qa=gn||ks||Function("return this")(),La=qa,Gs=function(){return La.Date.now()},No=Gs,vs=/\s/;function nu(y){for(var g=y.length;g--&&vs.test(y.charAt(g)););return g}var $s=nu,Lu=/^\s+/;function fm(y){return y&&y.slice(0,$s(y)+1).replace(Lu,"")}var av=fm,Uu=La.Symbol,Zl=Uu,Pa=Object.prototype,Al=Pa.hasOwnProperty,ua=Pa.toString,bc=Zl?Zl.toStringTag:void 0;function Cc(y){var g=Al.call(y,bc),x=y[bc];try{y[bc]=void 0;var T=!0}catch{}var A=ua.call(y);return T&&(g?y[bc]=x:delete y[bc]),A}var ga=Cc,Ma=Object.prototype,Ha=Ma.toString;function Ll(y){return Ha.call(y)}var _c=Ll,ov="[object Null]",Jl="[object Undefined]",Z1=Zl?Zl.toStringTag:void 0;function Fd(y){return y==null?y===void 0?Jl:ov:Z1&&Z1 in Object(y)?ga(y):_c(y)}var J1=Fd;function Bd(y){return y!=null&&typeof y=="object"}var E0=Bd,Bi="[object Symbol]";function on(y){return typeof y=="symbol"||E0(y)&&J1(y)==Bi}var kr=on,Ei=0/0,Jo=/^[-+]0x[0-9a-f]+$/i,vc=/^0b[01]+$/i,tf=/^0o[0-7]+$/i,Oc=parseInt;function ef(y){if(typeof y=="number")return y;if(kr(y))return Ei;if(Ee(y)){var g=typeof y.valueOf=="function"?y.valueOf():y;y=Ee(g)?g+"":g}if(typeof y!="string")return y===0?y:+y;y=av(y);var x=vc.test(y);return x||tf.test(y)?Oc(y.slice(2),x?2:8):Jo.test(y)?Ei:+y}var nf=ef,Xi="Expected a function",Es=Math.max,xa=Math.min;function xi(y,g,x){var T,A,D,O,$,q,S=0,G=!1,W=!1,et=!0;if(typeof y!="function")throw new TypeError(Xi);g=nf(g)||0,Ee(x)&&(G=!!x.leading,W="maxWait"in x,D=W?Es(nf(x.maxWait)||0,g):D,et="trailing"in x?!!x.trailing:et);function at(Kt){var zt=T,ee=A;return T=A=void 0,S=Kt,O=y.apply(ee,zt),O}function lt(Kt){return S=Kt,$=setTimeout(kt,g),G?at(Kt):O}function ft(Kt){var zt=Kt-q,ee=Kt-S,Vt=g-zt;return W?xa(Vt,D-ee):Vt}function At(Kt){var zt=Kt-q,ee=Kt-S;return q===void 0||zt>=g||zt<0||W&&ee>=D}function kt(){var Kt=No();if(At(Kt))return Mt(Kt);$=setTimeout(kt,ft(Kt))}function Mt(Kt){return $=void 0,et&&T?at(Kt):(T=A=void 0,O)}function Dt(){$!==void 0&&clearTimeout($),S=0,T=q=A=$=void 0}function jt(){return $===void 0?O:Mt(No())}function Zt(){var Kt=No(),zt=At(Kt);if(T=arguments,A=this,q=Kt,zt){if($===void 0)return lt(q);if(W)return clearTimeout($),$=setTimeout(kt,g),at(q)}return $===void 0&&($=setTimeout(kt,g)),O}return Zt.cancel=Dt,Zt.flush=jt,Zt}var Wc=xi,Ce=R?R.performance:null,gp=Ce&&Ce.now?function(){return Ce.now()}:function(){return Date.now()},Be=function(){if(R){if(R.requestAnimationFrame)return function(y){R.requestAnimationFrame(y)};if(R.mozRequestAnimationFrame)return function(y){R.mozRequestAnimationFrame(y)};if(R.webkitRequestAnimationFrame)return function(y){R.webkitRequestAnimationFrame(y)};if(R.msRequestAnimationFrame)return function(y){R.msRequestAnimationFrame(y)}}return function(y){y&&setTimeout(function(){y(gp())},1e3/60)}}(),Ff=function(g){return Be(g)},dg=gp,dm=9261,pk=65599,x3=5381,Ml=function(g){for(var x=arguments.length>1&&arguments[1]!==void 0?arguments[1]:dm,T=x,A;A=g.next(),!A.done;)T=T*pk+A.value|0;return T},T0=function(g){var x=arguments.length>1&&arguments[1]!==void 0?arguments[1]:dm;return x*pk+g|0},cv=function(g){var x=arguments.length>1&&arguments[1]!==void 0?arguments[1]:x3;return(x<<5)+x+g|0},F5=function(g,x){return g*2097152+x},jb=function(g){return g[0]*2097152+g[1]},B5=function(g,x){return[T0(g[0],x[0]),cv(g[1],x[1])]},l1=function(g,x){var T={value:0,done:!1},A=0,D=g.length,O={next:function(){return A<D?T.value=g[A++]:T.done=!0,T}};return Ml(O,x)},td=function(g,x){var T={value:0,done:!1},A=0,D=g.length,O={next:function(){return A<D?T.value=g.charCodeAt(A++):T.done=!0,T}};return Ml(O,x)},ed=function(){return R5(arguments)},R5=function(g){for(var x,T=0;T<g.length;T++){var A=g[T];T===0?x=td(A):x=td(A,x)}return x},uv=!0,j5=console.warn!=null,pp=console.trace!=null,$5=Number.MAX_SAFE_INTEGER||9007199254740991,k3=function(){return!0},gm=function(){return!1},gg=function(){return 0},wL=function(){},bl=function(g){throw new Error(g)},WP=function(g){if(g!==void 0)uv=!!g;else return uv},Sc=function(g){WP()&&(j5?console.warn(g):(console.log(g),pp&&console.trace()))},QK=function(g){return me({},g)},$b=function(g){return g==null?g:dt(g)?g.slice():ht(g)?QK(g):g},ZK=function(g){return g.slice()},IT=function(g,x){for(x=g="";g++<36;x+=g*51&52?(g^15?8^Math.random()*(g^20?16:4):4).toString(16):"-");return x},JK={},KP=function(){return JK},Bf=function(g){var x=Object.keys(g);return function(T){for(var A={},D=0;D<x.length;D++){var O=x[D],$=T==null?void 0:T[O];A[O]=$===void 0?g[O]:$}return A}},pm=function(g,x,T){for(var A=g.length-1;A>=0&&!(g[A]===x&&(g.splice(A,1),T));A--);},mL=function(g){g.splice(0,g.length)},YP=function(g,x){for(var T=0;T<x.length;T++){var A=x[T];g.push(A)}},bp=function(g,x,T){return T&&(x=ve(T,x)),g[x]},bm=function(g,x,T,A){T&&(x=ve(T,x)),g[x]=A},tY=function(){function y(){p(this,y),this._obj={}}return m(y,[{key:"set",value:function(x,T){return this._obj[x]=T,this}},{key:"delete",value:function(x){return this._obj[x]=void 0,this}},{key:"clear",value:function(){this._obj={}}},{key:"has",value:function(x){return this._obj[x]!==void 0}},{key:"get",value:function(x){return this._obj[x]}}]),y}(),zb=typeof Map<"u"?Map:tY,eY="undefined",nY=function(){function y(g){if(p(this,y),this._obj=Object.create(null),this.size=0,g!=null){var x;g.instanceString!=null&&g.instanceString()===this.instanceString()?x=g.toArray():x=g;for(var T=0;T<x.length;T++)this.add(x[T])}}return m(y,[{key:"instanceString",value:function(){return"set"}},{key:"add",value:function(x){var T=this._obj;T[x]!==1&&(T[x]=1,this.size++)}},{key:"delete",value:function(x){var T=this._obj;T[x]===1&&(T[x]=0,this.size--)}},{key:"clear",value:function(){this._obj=Object.create(null)}},{key:"has",value:function(x){return this._obj[x]===1}},{key:"toArray",value:function(){var x=this;return Object.keys(this._obj).filter(function(T){return x.has(T)})}},{key:"forEach",value:function(x,T){return this.toArray().forEach(x,T)}}]),y}(),z5=(typeof Set>"u"?"undefined":f(Set))!==eY?Set:nY,DT=function(g,x){var T=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;if(g===void 0||x===void 0||!Nt(g)){bl("An element must have a core reference and parameters set");return}var A=x.group;if(A==null&&(x.data&&x.data.source!=null&&x.data.target!=null?A="edges":A="nodes"),A!=="nodes"&&A!=="edges"){bl("An element must be of type `nodes` or `edges`; you specified `"+A+"`");return}this.length=1,this[0]=this;var D=this._private={cy:g,single:!0,data:x.data||{},position:x.position||{x:0,y:0},autoWidth:void 0,autoHeight:void 0,autoPadding:void 0,compoundBoundsClean:!1,listeners:[],group:A,style:{},rstyle:{},styleCxts:[],styleKeys:{},removed:!0,selected:!!x.selected,selectable:x.selectable===void 0?!0:!!x.selectable,locked:!!x.locked,grabbed:!1,grabbable:x.grabbable===void 0?!0:!!x.grabbable,pannable:x.pannable===void 0?A==="edges":!!x.pannable,active:!1,classes:new z5,animation:{current:[],queue:[]},rscratch:{},scratch:x.scratch||{},edges:[],children:[],parent:x.parent&&x.parent.isNode()?x.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(D.position.x==null&&(D.position.x=0),D.position.y==null&&(D.position.y=0),x.renderedPosition){var O=x.renderedPosition,$=g.pan(),q=g.zoom();D.position={x:(O.x-$.x)/q,y:(O.y-$.y)/q}}var S=[];dt(x.classes)?S=x.classes:mt(x.classes)&&(S=x.classes.split(/\s+/));for(var G=0,W=S.length;G<W;G++){var et=S[G];!et||et===""||D.classes.add(et)}this.createEmitter();var at=x.style||x.css;at&&(Sc("Setting a `style` bypass at element creation should be done only when absolutely necessary.  Try to use the stylesheet instead."),this.style(at)),(T===void 0||T)&&this.restore()},XP=function(g){return g={bfs:g.bfs||!g.dfs,dfs:g.dfs||!g.bfs},function(T,A,D){var O;ht(T)&&!xt(T)&&(O=T,T=O.roots||O.root,A=O.visit,D=O.directed),D=arguments.length===2&&!yt(A)?A:D,A=yt(A)?A:function(){};for(var $=this._private.cy,q=T=mt(T)?this.filter(T):T,S=[],G=[],W={},et={},at={},lt=0,ft,At=this.byGroup(),kt=At.nodes,Mt=At.edges,Dt=0;Dt<q.length;Dt++){var jt=q[Dt],Zt=jt.id();jt.isNode()&&(S.unshift(jt),g.bfs&&(at[Zt]=!0,G.push(jt)),et[Zt]=0)}for(var Kt=function(){var Pe=g.bfs?S.shift():S.pop(),pe=Pe.id();if(g.dfs){if(at[pe])return"continue";at[pe]=!0,G.push(Pe)}var bn=et[pe],ze=W[pe],Ve=ze!=null?ze.source():null,En=ze!=null?ze.target():null,Dn=ze==null?void 0:Pe.same(Ve)?En[0]:Ve[0],Kn=void 0;if(Kn=A(Pe,ze,Dn,lt++,bn),Kn===!0)return ft=Pe,"break";if(Kn===!1)return"break";for(var Sn=Pe.connectedEdges().filter(function(tr){return(!D||tr.source().same(Pe))&&Mt.has(tr)}),Wn=0;Wn<Sn.length;Wn++){var rr=Sn[Wn],vr=rr.connectedNodes().filter(function(tr){return!tr.same(Pe)&&kt.has(tr)}),ur=vr.id();vr.length!==0&&!at[ur]&&(vr=vr[0],S.push(vr),g.bfs&&(at[ur]=!0,G.push(vr)),W[ur]=rr,et[ur]=et[pe]+1)}};S.length!==0;){var zt=Kt();if(zt!=="continue"&&zt==="break")break}for(var ee=$.collection(),Vt=0;Vt<G.length;Vt++){var fe=G[Vt],ge=W[fe.id()];ge!=null&&ee.push(ge),ee.push(fe)}return{path:$.collection(ee),found:$.collection(ft)}}},bk={breadthFirstSearch:XP({bfs:!0}),depthFirstSearch:XP({dfs:!0})};bk.bfs=bk.breadthFirstSearch,bk.dfs=bk.depthFirstSearch;var rY=He(function(y,g){(function(){var x,T,A,D,O,$,q,S,G,W,et,at,lt,ft,At;A=Math.floor,W=Math.min,T=function(kt,Mt){return kt<Mt?-1:kt>Mt?1:0},G=function(kt,Mt,Dt,jt,Zt){var Kt;if(Dt==null&&(Dt=0),Zt==null&&(Zt=T),Dt<0)throw new Error("lo must be non-negative");for(jt==null&&(jt=kt.length);Dt<jt;)Kt=A((Dt+jt)/2),Zt(Mt,kt[Kt])<0?jt=Kt:Dt=Kt+1;return[].splice.apply(kt,[Dt,Dt-Dt].concat(Mt)),Mt},$=function(kt,Mt,Dt){return Dt==null&&(Dt=T),kt.push(Mt),ft(kt,0,kt.length-1,Dt)},O=function(kt,Mt){var Dt,jt;return Mt==null&&(Mt=T),Dt=kt.pop(),kt.length?(jt=kt[0],kt[0]=Dt,At(kt,0,Mt)):jt=Dt,jt},S=function(kt,Mt,Dt){var jt;return Dt==null&&(Dt=T),jt=kt[0],kt[0]=Mt,At(kt,0,Dt),jt},q=function(kt,Mt,Dt){var jt;return Dt==null&&(Dt=T),kt.length&&Dt(kt[0],Mt)<0&&(jt=[kt[0],Mt],Mt=jt[0],kt[0]=jt[1],At(kt,0,Dt)),Mt},D=function(kt,Mt){var Dt,jt,Zt,Kt,zt,ee;for(Mt==null&&(Mt=T),Kt=function(){ee=[];for(var Vt=0,fe=A(kt.length/2);0<=fe?Vt<fe:Vt>fe;0<=fe?Vt++:Vt--)ee.push(Vt);return ee}.apply(this).reverse(),zt=[],jt=0,Zt=Kt.length;jt<Zt;jt++)Dt=Kt[jt],zt.push(At(kt,Dt,Mt));return zt},lt=function(kt,Mt,Dt){var jt;if(Dt==null&&(Dt=T),jt=kt.indexOf(Mt),jt!==-1)return ft(kt,0,jt,Dt),At(kt,jt,Dt)},et=function(kt,Mt,Dt){var jt,Zt,Kt,zt,ee;if(Dt==null&&(Dt=T),Zt=kt.slice(0,Mt),!Zt.length)return Zt;for(D(Zt,Dt),ee=kt.slice(Mt),Kt=0,zt=ee.length;Kt<zt;Kt++)jt=ee[Kt],q(Zt,jt,Dt);return Zt.sort(Dt).reverse()},at=function(kt,Mt,Dt){var jt,Zt,Kt,zt,ee,Vt,fe,ge,ne;if(Dt==null&&(Dt=T),Mt*10<=kt.length){if(Kt=kt.slice(0,Mt).sort(Dt),!Kt.length)return Kt;for(Zt=Kt[Kt.length-1],fe=kt.slice(Mt),zt=0,Vt=fe.length;zt<Vt;zt++)jt=fe[zt],Dt(jt,Zt)<0&&(G(Kt,jt,0,null,Dt),Kt.pop(),Zt=Kt[Kt.length-1]);return Kt}for(D(kt,Dt),ne=[],ee=0,ge=W(Mt,kt.length);0<=ge?ee<ge:ee>ge;0<=ge?++ee:--ee)ne.push(O(kt,Dt));return ne},ft=function(kt,Mt,Dt,jt){var Zt,Kt,zt;for(jt==null&&(jt=T),Zt=kt[Dt];Dt>Mt;){if(zt=Dt-1>>1,Kt=kt[zt],jt(Zt,Kt)<0){kt[Dt]=Kt,Dt=zt;continue}break}return kt[Dt]=Zt},At=function(kt,Mt,Dt){var jt,Zt,Kt,zt,ee;for(Dt==null&&(Dt=T),Zt=kt.length,ee=Mt,Kt=kt[Mt],jt=2*Mt+1;jt<Zt;)zt=jt+1,zt<Zt&&!(Dt(kt[jt],kt[zt])<0)&&(jt=zt),kt[Mt]=kt[jt],Mt=jt,jt=2*Mt+1;return kt[Mt]=Kt,ft(kt,ee,Mt,Dt)},x=function(){kt.push=$,kt.pop=O,kt.replace=S,kt.pushpop=q,kt.heapify=D,kt.updateItem=lt,kt.nlargest=et,kt.nsmallest=at;function kt(Mt){this.cmp=Mt??T,this.nodes=[]}return kt.prototype.push=function(Mt){return $(this.nodes,Mt,this.cmp)},kt.prototype.pop=function(){return O(this.nodes,this.cmp)},kt.prototype.peek=function(){return this.nodes[0]},kt.prototype.contains=function(Mt){return this.nodes.indexOf(Mt)!==-1},kt.prototype.replace=function(Mt){return S(this.nodes,Mt,this.cmp)},kt.prototype.pushpop=function(Mt){return q(this.nodes,Mt,this.cmp)},kt.prototype.heapify=function(){return D(this.nodes,this.cmp)},kt.prototype.updateItem=function(Mt){return lt(this.nodes,Mt,this.cmp)},kt.prototype.clear=function(){return this.nodes=[]},kt.prototype.empty=function(){return this.nodes.length===0},kt.prototype.size=function(){return this.nodes.length},kt.prototype.clone=function(){var Mt;return Mt=new kt,Mt.nodes=this.nodes.slice(0),Mt},kt.prototype.toArray=function(){return this.nodes.slice(0)},kt.prototype.insert=kt.prototype.push,kt.prototype.top=kt.prototype.peek,kt.prototype.front=kt.prototype.peek,kt.prototype.has=kt.prototype.contains,kt.prototype.copy=kt.prototype.clone,kt}(),function(kt,Mt){return y.exports=Mt()}(this,function(){return x})}).call(Yn)}),vk=rY,iY=Bf({root:null,weight:function(g){return 1},directed:!1}),sY={dijkstra:function(g){if(!ht(g)){var x=arguments;g={root:x[0],weight:x[1],directed:x[2]}}var T=iY(g),A=T.root,D=T.weight,O=T.directed,$=this,q=D,S=mt(A)?this.filter(A)[0]:A[0],G={},W={},et={},at=this.byGroup(),lt=at.nodes,ft=at.edges;ft.unmergeBy(function(bn){return bn.isLoop()});for(var At=function(ze){return G[ze.id()]},kt=function(ze,Ve){G[ze.id()]=Ve,Mt.updateItem(ze)},Mt=new vk(function(bn,ze){return At(bn)-At(ze)}),Dt=0;Dt<lt.length;Dt++){var jt=lt[Dt];G[jt.id()]=jt.same(S)?0:1/0,Mt.push(jt)}for(var Zt=function(ze,Ve){for(var En=(O?ze.edgesTo(Ve):ze.edgesWith(Ve)).intersect(ft),Dn=1/0,Kn,Sn=0;Sn<En.length;Sn++){var Wn=En[Sn],rr=q(Wn);(rr<Dn||!Kn)&&(Dn=rr,Kn=Wn)}return{edge:Kn,dist:Dn}};Mt.size()>0;){var Kt=Mt.pop(),zt=At(Kt),ee=Kt.id();if(et[ee]=zt,zt!==1/0)for(var Vt=Kt.neighborhood().intersect(lt),fe=0;fe<Vt.length;fe++){var ge=Vt[fe],ne=ge.id(),Pe=Zt(Kt,ge),pe=zt+Pe.dist;pe<At(ge)&&(kt(ge,pe),W[ne]={node:Kt,edge:Pe.edge})}}return{distanceTo:function(ze){var Ve=mt(ze)?lt.filter(ze)[0]:ze[0];return et[Ve.id()]},pathTo:function(ze){var Ve=mt(ze)?lt.filter(ze)[0]:ze[0],En=[],Dn=Ve,Kn=Dn.id();if(Ve.length>0)for(En.unshift(Ve);W[Kn];){var Sn=W[Kn];En.unshift(Sn.edge),En.unshift(Sn.node),Dn=Sn.node,Kn=Dn.id()}return $.spawn(En)}}}},aY={kruskal:function(g){g=g||function(Dt){return 1};for(var x=this.byGroup(),T=x.nodes,A=x.edges,D=T.length,O=new Array(D),$=T,q=function(jt){for(var Zt=0;Zt<O.length;Zt++){var Kt=O[Zt];if(Kt.has(jt))return Zt}},S=0;S<D;S++)O[S]=this.spawn(T[S]);for(var G=A.sort(function(Dt,jt){return g(Dt)-g(jt)}),W=0;W<G.length;W++){var et=G[W],at=et.source()[0],lt=et.target()[0],ft=q(at),At=q(lt),kt=O[ft],Mt=O[At];ft!==At&&($.merge(et),kt.merge(Mt),O.splice(At,1))}return $}},oY=Bf({root:null,goal:null,weight:function(g){return 1},heuristic:function(g){return 0},directed:!1}),cY={aStar:function(g){var x=this.cy(),T=oY(g),A=T.root,D=T.goal,O=T.heuristic,$=T.directed,q=T.weight;A=x.collection(A)[0],D=x.collection(D)[0];var S=A.id(),G=D.id(),W={},et={},at={},lt=new vk(function(Kn,Sn){return et[Kn.id()]-et[Sn.id()]}),ft=new z5,At={},kt={},Mt=function(Sn,Wn){lt.push(Sn),ft.add(Wn)},Dt,jt,Zt=function(){Dt=lt.pop(),jt=Dt.id(),ft.delete(jt)},Kt=function(Sn){return ft.has(Sn)};Mt(A,S),W[S]=0,et[S]=O(A);for(var zt=0;lt.size()>0;){if(Zt(),zt++,jt===G){for(var ee=[],Vt=D,fe=G,ge=kt[fe];ee.unshift(Vt),ge!=null&&ee.unshift(ge),Vt=At[fe],Vt!=null;)fe=Vt.id(),ge=kt[fe];return{found:!0,distance:W[jt],path:this.spawn(ee),steps:zt}}at[jt]=!0;for(var ne=Dt._private.edges,Pe=0;Pe<ne.length;Pe++){var pe=ne[Pe];if(this.hasElementWithId(pe.id())&&!($&&pe.data("source")!==jt)){var bn=pe.source(),ze=pe.target(),Ve=bn.id()!==jt?bn:ze,En=Ve.id();if(this.hasElementWithId(En)&&!at[En]){var Dn=W[jt]+q(pe);if(!Kt(En)){W[En]=Dn,et[En]=Dn+O(Ve),Mt(Ve,En),At[En]=Dt,kt[En]=pe;continue}Dn<W[En]&&(W[En]=Dn,et[En]=Dn+O(Ve),At[En]=Dt,kt[En]=pe)}}}}return{found:!1,distance:void 0,path:void 0,steps:zt}}},uY=Bf({weight:function(g){return 1},directed:!1}),lY={floydWarshall:function(g){for(var x=this.cy(),T=uY(g),A=T.weight,D=T.directed,O=A,$=this.byGroup(),q=$.nodes,S=$.edges,G=q.length,W=G*G,et=function(rr){return q.indexOf(rr)},at=function(rr){return q[rr]},lt=new Array(W),ft=0;ft<W;ft++){var At=ft%G,kt=(ft-At)/G;kt===At?lt[ft]=0:lt[ft]=1/0}for(var Mt=new Array(W),Dt=new Array(W),jt=0;jt<S.length;jt++){var Zt=S[jt],Kt=Zt.source()[0],zt=Zt.target()[0];if(Kt!==zt){var ee=et(Kt),Vt=et(zt),fe=ee*G+Vt,ge=O(Zt);if(lt[fe]>ge&&(lt[fe]=ge,Mt[fe]=Vt,Dt[fe]=Zt),!D){var ne=Vt*G+ee;!D&&lt[ne]>ge&&(lt[ne]=ge,Mt[ne]=ee,Dt[ne]=Zt)}}}for(var Pe=0;Pe<G;Pe++)for(var pe=0;pe<G;pe++)for(var bn=pe*G+Pe,ze=0;ze<G;ze++){var Ve=pe*G+ze,En=Pe*G+ze;lt[bn]+lt[En]<lt[Ve]&&(lt[Ve]=lt[bn]+lt[En],Mt[Ve]=Mt[bn])}var Dn=function(rr){return(mt(rr)?x.filter(rr):rr)[0]},Kn=function(rr){return et(Dn(rr))},Sn={distance:function(rr,vr){var ur=Kn(rr),tr=Kn(vr);return lt[ur*G+tr]},path:function(rr,vr){var ur=Kn(rr),tr=Kn(vr),wn=at(ur);if(ur===tr)return wn.collection();if(Mt[ur*G+tr]==null)return x.collection();var gr=x.collection(),fr=ur,Jr;for(gr.merge(wn);ur!==tr;)fr=ur,ur=Mt[ur*G+tr],Jr=Dt[fr*G+ur],gr.merge(Jr),gr.merge(at(ur));return gr}};return Sn}},hY=Bf({weight:function(g){return 1},directed:!1,root:null}),fY={bellmanFord:function(g){var x=this,T=hY(g),A=T.weight,D=T.directed,O=T.root,$=A,q=this,S=this.cy(),G=this.byGroup(),W=G.edges,et=G.nodes,at=et.length,lt=new zb,ft=!1,At=[];O=S.collection(O)[0],W.unmergeBy(function(qi){return qi.isLoop()});for(var kt=W.length,Mt=function(Si){var Ui=lt.get(Si.id());return Ui||(Ui={},lt.set(Si.id(),Ui)),Ui},Dt=function(Si){return(mt(Si)?S.$(Si):Si)[0]},jt=function(Si){return Mt(Dt(Si)).dist},Zt=function(Si){for(var Ui=arguments.length>1&&arguments[1]!==void 0?arguments[1]:O,Ga=Dt(Si),Ys=[],zs=Ga;;){if(zs==null)return x.spawn();var Er=Mt(zs),Qt=Er.edge,jn=Er.pred;if(Ys.unshift(zs[0]),zs.same(Ui)&&Ys.length>0)break;Qt!=null&&Ys.unshift(Qt),zs=jn}return q.spawn(Ys)},Kt=0;Kt<at;Kt++){var zt=et[Kt],ee=Mt(zt);zt.same(O)?ee.dist=0:ee.dist=1/0,ee.pred=null,ee.edge=null}for(var Vt=!1,fe=function(Si,Ui,Ga,Ys,zs,Er){var Qt=Ys.dist+Er;Qt<zs.dist&&!Ga.same(Ys.edge)&&(zs.dist=Qt,zs.pred=Si,zs.edge=Ga,Vt=!0)},ge=1;ge<at;ge++){Vt=!1;for(var ne=0;ne<kt;ne++){var Pe=W[ne],pe=Pe.source(),bn=Pe.target(),ze=$(Pe),Ve=Mt(pe),En=Mt(bn);fe(pe,bn,Pe,Ve,En,ze),D||fe(bn,pe,Pe,En,Ve,ze)}if(!Vt)break}if(Vt)for(var Dn=[],Kn=0;Kn<kt;Kn++){var Sn=W[Kn],Wn=Sn.source(),rr=Sn.target(),vr=$(Sn),ur=Mt(Wn).dist,tr=Mt(rr).dist;if(ur+vr<tr||!D&&tr+vr<ur)if(ft||(Sc("Graph contains a negative weight cycle for Bellman-Ford"),ft=!0),g.findNegativeWeightCycles!==!1){var wn=[];ur+vr<tr&&wn.push(Wn),!D&&tr+vr<ur&&wn.push(rr);for(var gr=wn.length,fr=0;fr<gr;fr++){var Jr=wn[fr],wi=[Jr];wi.push(Mt(Jr).edge);for(var Ks=Mt(Jr).pred;wi.indexOf(Ks)===-1;)wi.push(Ks),wi.push(Mt(Ks).edge),Ks=Mt(Ks).pred;wi=wi.slice(wi.indexOf(Ks));for(var ka=wi[0].id(),Ci=0,hi=2;hi<wi.length;hi+=2)wi[hi].id()<ka&&(ka=wi[hi].id(),Ci=hi);wi=wi.slice(Ci).concat(wi.slice(0,Ci)),wi.push(wi[0]);var gs=wi.map(function(qi){return qi.id()}).join(",");Dn.indexOf(gs)===-1&&(At.push(q.spawn(wi)),Dn.push(gs))}}else break}return{distanceTo:jt,pathTo:Zt,hasNegativeWeightCycle:ft,negativeWeightCycles:At}}},dY=Math.sqrt(2),gY=function(g,x,T){T.length===0&&bl("Karger-Stein must be run on a connected (sub)graph");for(var A=T[g],D=A[1],O=A[2],$=x[D],q=x[O],S=T,G=S.length-1;G>=0;G--){var W=S[G],et=W[1],at=W[2];(x[et]===$&&x[at]===q||x[et]===q&&x[at]===$)&&S.splice(G,1)}for(var lt=0;lt<S.length;lt++){var ft=S[lt];ft[1]===q?(S[lt]=ft.slice(),S[lt][1]=$):ft[2]===q&&(S[lt]=ft.slice(),S[lt][2]=$)}for(var At=0;At<x.length;At++)x[At]===q&&(x[At]=$);return S},yL=function(g,x,T,A){for(;T>A;){var D=Math.floor(Math.random()*x.length);x=gY(D,g,x),T--}return x},pY={kargerStein:function(){var g=this,x=this.byGroup(),T=x.nodes,A=x.edges;A.unmergeBy(function(En){return En.isLoop()});var D=T.length,O=A.length,$=Math.ceil(Math.pow(Math.log(D)/Math.LN2,2)),q=Math.floor(D/dY);if(D<2){bl("At least 2 nodes are required for Karger-Stein algorithm");return}for(var S=[],G=0;G<O;G++){var W=A[G];S.push([G,T.indexOf(W.source()),T.indexOf(W.target())])}for(var et=1/0,at=[],lt=new Array(D),ft=new Array(D),At=new Array(D),kt=function(Dn,Kn){for(var Sn=0;Sn<D;Sn++)Kn[Sn]=Dn[Sn]},Mt=0;Mt<=$;Mt++){for(var Dt=0;Dt<D;Dt++)ft[Dt]=Dt;var jt=yL(ft,S.slice(),D,q),Zt=jt.slice();kt(ft,At);var Kt=yL(ft,jt,q,2),zt=yL(At,Zt,q,2);Kt.length<=zt.length&&Kt.length<et?(et=Kt.length,at=Kt,kt(ft,lt)):zt.length<=Kt.length&&zt.length<et&&(et=zt.length,at=zt,kt(At,lt))}for(var ee=this.spawn(at.map(function(En){return A[En[0]]})),Vt=this.spawn(),fe=this.spawn(),ge=lt[0],ne=0;ne<lt.length;ne++){var Pe=lt[ne],pe=T[ne];Pe===ge?Vt.merge(pe):fe.merge(pe)}var bn=function(Dn){var Kn=g.spawn();return Dn.forEach(function(Sn){Kn.merge(Sn),Sn.connectedEdges().forEach(function(Wn){g.contains(Wn)&&!ee.contains(Wn)&&Kn.merge(Wn)})}),Kn},ze=[bn(Vt),bn(fe)],Ve={cut:ee,components:ze,partition1:Vt,partition2:fe};return Ve}},bY=function(g){return{x:g.x,y:g.y}},OT=function(g,x,T){return{x:g.x*x+T.x,y:g.y*x+T.y}},QP=function(g,x,T){return{x:(g.x-T.x)/x,y:(g.y-T.y)/x}},q5=function(g){return{x:g[0],y:g[1]}},vY=function(g){for(var x=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,T=arguments.length>2&&arguments[2]!==void 0?arguments[2]:g.length,A=1/0,D=x;D<T;D++){var O=g[D];isFinite(O)&&(A=Math.min(O,A))}return A},wY=function(g){for(var x=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,T=arguments.length>2&&arguments[2]!==void 0?arguments[2]:g.length,A=-1/0,D=x;D<T;D++){var O=g[D];isFinite(O)&&(A=Math.max(O,A))}return A},mY=function(g){for(var x=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,T=arguments.length>2&&arguments[2]!==void 0?arguments[2]:g.length,A=0,D=0,O=x;O<T;O++){var $=g[O];isFinite($)&&(A+=$,D++)}return A/D},yY=function(g){var x=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,T=arguments.length>2&&arguments[2]!==void 0?arguments[2]:g.length,A=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,D=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,O=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0;A?g=g.slice(x,T):(T<g.length&&g.splice(T,g.length-T),x>0&&g.splice(0,x));for(var $=0,q=g.length-1;q>=0;q--){var S=g[q];O?isFinite(S)||(g[q]=-1/0,$++):g.splice(q,1)}D&&g.sort(function(et,at){return et-at});var G=g.length,W=Math.floor(G/2);return G%2!==0?g[W+1+$]:(g[W-1+$]+g[W+$])/2},xY=function(g){return Math.PI*g/180},NT=function(g,x){return Math.atan2(x,g)-Math.PI/2},xL=Math.log2||function(y){return Math.log(y)/Math.log(2)},ZP=function(g){return g>0?1:g<0?-1:0},E3=function(g,x){return Math.sqrt(T3(g,x))},T3=function(g,x){var T=x.x-g.x,A=x.y-g.y;return T*T+A*A},kY=function(g){for(var x=g.length,T=0,A=0;A<x;A++)T+=g[A];for(var D=0;D<x;D++)g[D]=g[D]/T;return g},rf=function(g,x,T,A){return(1-A)*(1-A)*g+2*(1-A)*A*x+A*A*T},H5=function(g,x,T,A){return{x:rf(g.x,x.x,T.x,A),y:rf(g.y,x.y,T.y,A)}},EY=function(g,x,T,A){var D={x:x.x-g.x,y:x.y-g.y},O=E3(g,x),$={x:D.x/O,y:D.y/O};return T=T??0,A=A??T*O,{x:g.x+$.x*A,y:g.y+$.y*A}},wk=function(g,x,T){return Math.max(g,Math.min(T,x))},Rd=function(g){if(g==null)return{x1:1/0,y1:1/0,x2:-1/0,y2:-1/0,w:0,h:0};if(g.x1!=null&&g.y1!=null){if(g.x2!=null&&g.y2!=null&&g.x2>=g.x1&&g.y2>=g.y1)return{x1:g.x1,y1:g.y1,x2:g.x2,y2:g.y2,w:g.x2-g.x1,h:g.y2-g.y1};if(g.w!=null&&g.h!=null&&g.w>=0&&g.h>=0)return{x1:g.x1,y1:g.y1,x2:g.x1+g.w,y2:g.y1+g.h,w:g.w,h:g.h}}},TY=function(g){return{x1:g.x1,x2:g.x2,w:g.w,y1:g.y1,y2:g.y2,h:g.h}},CY=function(g){g.x1=1/0,g.y1=1/0,g.x2=-1/0,g.y2=-1/0,g.w=0,g.h=0},_Y=function(g,x){g.x1=Math.min(g.x1,x.x1),g.x2=Math.max(g.x2,x.x2),g.w=g.x2-g.x1,g.y1=Math.min(g.y1,x.y1),g.y2=Math.max(g.y2,x.y2),g.h=g.y2-g.y1},SY=function(g,x,T){g.x1=Math.min(g.x1,x),g.x2=Math.max(g.x2,x),g.w=g.x2-g.x1,g.y1=Math.min(g.y1,T),g.y2=Math.max(g.y2,T),g.h=g.y2-g.y1},PT=function(g){var x=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;return g.x1-=x,g.x2+=x,g.y1-=x,g.y2+=x,g.w=g.x2-g.x1,g.h=g.y2-g.y1,g},kL=function(g){var x=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[0],T,A,D,O;if(x.length===1)T=A=D=O=x[0];else if(x.length===2)T=D=x[0],O=A=x[1];else if(x.length===4){var $=E(x,4);T=$[0],A=$[1],D=$[2],O=$[3]}return g.x1-=O,g.x2+=A,g.y1-=T,g.y2+=D,g.w=g.x2-g.x1,g.h=g.y2-g.y1,g},JP=function(g,x){g.x1=x.x1,g.y1=x.y1,g.x2=x.x2,g.y2=x.y2,g.w=g.x2-g.x1,g.h=g.y2-g.y1},EL=function(g,x){return!(g.x1>x.x2||x.x1>g.x2||g.x2<x.x1||x.x2<g.x1||g.y2<x.y1||x.y2<g.y1||g.y1>x.y2||x.y1>g.y2)},G5=function(g,x,T){return g.x1<=x&&x<=g.x2&&g.y1<=T&&T<=g.y2},AY=function(g,x){return G5(g,x.x,x.y)},tF=function(g,x){return G5(g,x.x1,x.y1)&&G5(g,x.x2,x.y2)},eF=function(g,x,T,A,D,O,$){var q=xk(D,O),S=D/2,G=O/2,W;{var et=T-S+q-$,at=A-G-$,lt=T+S-q+$,ft=at;if(W=vm(g,x,T,A,et,at,lt,ft,!1),W.length>0)return W}{var At=T+S+$,kt=A-G+q-$,Mt=At,Dt=A+G-q+$;if(W=vm(g,x,T,A,At,kt,Mt,Dt,!1),W.length>0)return W}{var jt=T-S+q-$,Zt=A+G+$,Kt=T+S-q+$,zt=Zt;if(W=vm(g,x,T,A,jt,Zt,Kt,zt,!1),W.length>0)return W}{var ee=T-S-$,Vt=A-G+q-$,fe=ee,ge=A+G-q+$;if(W=vm(g,x,T,A,ee,Vt,fe,ge,!1),W.length>0)return W}var ne;{var Pe=T-S+q,pe=A-G+q;if(ne=mk(g,x,T,A,Pe,pe,q+$),ne.length>0&&ne[0]<=Pe&&ne[1]<=pe)return[ne[0],ne[1]]}{var bn=T+S-q,ze=A-G+q;if(ne=mk(g,x,T,A,bn,ze,q+$),ne.length>0&&ne[0]>=bn&&ne[1]<=ze)return[ne[0],ne[1]]}{var Ve=T+S-q,En=A+G-q;if(ne=mk(g,x,T,A,Ve,En,q+$),ne.length>0&&ne[0]>=Ve&&ne[1]>=En)return[ne[0],ne[1]]}{var Dn=T-S+q,Kn=A+G-q;if(ne=mk(g,x,T,A,Dn,Kn,q+$),ne.length>0&&ne[0]<=Dn&&ne[1]>=Kn)return[ne[0],ne[1]]}return[]},LY=function(g,x,T,A,D,O,$){var q=$,S=Math.min(T,D),G=Math.max(T,D),W=Math.min(A,O),et=Math.max(A,O);return S-q<=g&&g<=G+q&&W-q<=x&&x<=et+q},MY=function(g,x,T,A,D,O,$,q,S){var G={x1:Math.min(T,$,D)-S,x2:Math.max(T,$,D)+S,y1:Math.min(A,q,O)-S,y2:Math.max(A,q,O)+S};return!(g<G.x1||g>G.x2||x<G.y1||x>G.y2)},IY=function(g,x,T,A){T-=A;var D=x*x-4*g*T;if(D<0)return[];var O=Math.sqrt(D),$=2*g,q=(-x+O)/$,S=(-x-O)/$;return[q,S]},DY=function(g,x,T,A,D){var O=1e-5;g===0&&(g=O),x/=g,T/=g,A/=g;var $,q,S,G,W,et,at,lt;if(q=(3*T-x*x)/9,S=-(27*A)+x*(9*T-2*(x*x)),S/=54,$=q*q*q+S*S,D[1]=0,at=x/3,$>0){W=S+Math.sqrt($),W=W<0?-Math.pow(-W,1/3):Math.pow(W,1/3),et=S-Math.sqrt($),et=et<0?-Math.pow(-et,1/3):Math.pow(et,1/3),D[0]=-at+W+et,at+=(W+et)/2,D[4]=D[2]=-at,at=Math.sqrt(3)*(-et+W)/2,D[3]=at,D[5]=-at;return}if(D[5]=D[3]=0,$===0){lt=S<0?-Math.pow(-S,1/3):Math.pow(S,1/3),D[0]=-at+2*lt,D[4]=D[2]=-(lt+at);return}q=-q,G=q*q*q,G=Math.acos(S/Math.sqrt(G)),lt=2*Math.sqrt(q),D[0]=-at+lt*Math.cos(G/3),D[2]=-at+lt*Math.cos((G+2*Math.PI)/3),D[4]=-at+lt*Math.cos((G+4*Math.PI)/3)},OY=function(g,x,T,A,D,O,$,q){var S=1*T*T-4*T*D+2*T*$+4*D*D-4*D*$+$*$+A*A-4*A*O+2*A*q+4*O*O-4*O*q+q*q,G=1*9*T*D-3*T*T-3*T*$-6*D*D+3*D*$+9*A*O-3*A*A-3*A*q-6*O*O+3*O*q,W=1*3*T*T-6*T*D+T*$-T*g+2*D*D+2*D*g-$*g+3*A*A-6*A*O+A*q-A*x+2*O*O+2*O*x-q*x,et=1*T*D-T*T+T*g-D*g+A*O-A*A+A*x-O*x,at=[];DY(S,G,W,et,at);for(var lt=1e-7,ft=[],At=0;At<6;At+=2)Math.abs(at[At+1])<lt&&at[At]>=0&&at[At]<=1&&ft.push(at[At]);ft.push(1),ft.push(0);for(var kt=-1,Mt,Dt,jt,Zt=0;Zt<ft.length;Zt++)Mt=Math.pow(1-ft[Zt],2)*T+2*(1-ft[Zt])*ft[Zt]*D+ft[Zt]*ft[Zt]*$,Dt=Math.pow(1-ft[Zt],2)*A+2*(1-ft[Zt])*ft[Zt]*O+ft[Zt]*ft[Zt]*q,jt=Math.pow(Mt-g,2)+Math.pow(Dt-x,2),kt>=0?jt<kt&&(kt=jt):kt=jt;return kt},NY=function(g,x,T,A,D,O){var $=[g-T,x-A],q=[D-T,O-A],S=q[0]*q[0]+q[1]*q[1],G=$[0]*$[0]+$[1]*$[1],W=$[0]*q[0]+$[1]*q[1],et=W*W/S;return W<0?G:et>S?(g-D)*(g-D)+(x-O)*(x-O):G-et},jd=function(g,x,T){for(var A,D,O,$,q,S=0,G=0;G<T.length/2;G++)if(A=T[G*2],D=T[G*2+1],G+1<T.length/2?(O=T[(G+1)*2],$=T[(G+1)*2+1]):(O=T[(G+1-T.length/2)*2],$=T[(G+1-T.length/2)*2+1]),!(A==g&&O==g))if(A>=g&&g>=O||A<=g&&g<=O)q=(g-A)/(O-A)*($-D)+D,q>x&&S++;else continue;return S%2!==0},lv=function(g,x,T,A,D,O,$,q,S){var G=new Array(T.length),W;q[0]!=null?(W=Math.atan(q[1]/q[0]),q[0]<0?W=W+Math.PI/2:W=-W-Math.PI/2):W=q;for(var et=Math.cos(-W),at=Math.sin(-W),lt=0;lt<G.length/2;lt++)G[lt*2]=O/2*(T[lt*2]*et-T[lt*2+1]*at),G[lt*2+1]=$/2*(T[lt*2+1]*et+T[lt*2]*at),G[lt*2]+=A,G[lt*2+1]+=D;var ft;if(S>0){var At=rF(G,-S);ft=nF(At)}else ft=G;return jd(g,x,ft)},PY=function(g,x,T,A,D,O,$){for(var q=new Array(T.length),S=O/2,G=$/2,W=_L(O,$),et=W*W,at=0;at<T.length/4;at++){var lt=void 0,ft=void 0;at===0?lt=T.length-2:lt=at*4-2,ft=at*4+2;var At=A+S*T[at*4],kt=D+G*T[at*4+1],Mt=-T[lt]*T[ft]-T[lt+1]*T[ft+1],Dt=W/Math.tan(Math.acos(Mt)/2),jt=At-Dt*T[lt],Zt=kt-Dt*T[lt+1],Kt=At+Dt*T[ft],zt=kt+Dt*T[ft+1];q[at*4]=jt,q[at*4+1]=Zt,q[at*4+2]=Kt,q[at*4+3]=zt;var ee=T[lt+1],Vt=-T[lt],fe=ee*T[ft]+Vt*T[ft+1];fe<0&&(ee*=-1,Vt*=-1);var ge=jt+ee*W,ne=Zt+Vt*W,Pe=Math.pow(ge-g,2)+Math.pow(ne-x,2);if(Pe<=et)return!0}return jd(g,x,q)},nF=function(g){for(var x=new Array(g.length/2),T,A,D,O,$,q,S,G,W=0;W<g.length/4;W++){T=g[W*4],A=g[W*4+1],D=g[W*4+2],O=g[W*4+3],W<g.length/4-1?($=g[(W+1)*4],q=g[(W+1)*4+1],S=g[(W+1)*4+2],G=g[(W+1)*4+3]):($=g[0],q=g[1],S=g[2],G=g[3]);var et=vm(T,A,D,O,$,q,S,G,!0);x[W*2]=et[0],x[W*2+1]=et[1]}return x},rF=function(g,x){for(var T=new Array(g.length*2),A,D,O,$,q=0;q<g.length/2;q++){A=g[q*2],D=g[q*2+1],q<g.length/2-1?(O=g[(q+1)*2],$=g[(q+1)*2+1]):(O=g[0],$=g[1]);var S=$-D,G=-(O-A),W=Math.sqrt(S*S+G*G),et=S/W,at=G/W;T[q*4]=A+et*x,T[q*4+1]=D+at*x,T[q*4+2]=O+et*x,T[q*4+3]=$+at*x}return T},FY=function(g,x,T,A,D,O){var $=T-g,q=A-x;$/=D,q/=O;var S=Math.sqrt($*$+q*q),G=S-1;if(G<0)return[];var W=G/S;return[(T-g)*W+g,(A-x)*W+x]},C3=function(g,x,T,A,D,O,$){return g-=D,x-=O,g/=T/2+$,x/=A/2+$,g*g+x*x<=1},mk=function(g,x,T,A,D,O,$){var q=[T-g,A-x],S=[g-D,x-O],G=q[0]*q[0]+q[1]*q[1],W=2*(S[0]*q[0]+S[1]*q[1]),et=S[0]*S[0]+S[1]*S[1]-$*$,at=W*W-4*G*et;if(at<0)return[];var lt=(-W+Math.sqrt(at))/(2*G),ft=(-W-Math.sqrt(at))/(2*G),At=Math.min(lt,ft),kt=Math.max(lt,ft),Mt=[];if(At>=0&&At<=1&&Mt.push(At),kt>=0&&kt<=1&&Mt.push(kt),Mt.length===0)return[];var Dt=Mt[0]*q[0]+g,jt=Mt[0]*q[1]+x;if(Mt.length>1){if(Mt[0]==Mt[1])return[Dt,jt];var Zt=Mt[1]*q[0]+g,Kt=Mt[1]*q[1]+x;return[Dt,jt,Zt,Kt]}else return[Dt,jt]},TL=function(g,x,T){return x<=g&&g<=T||T<=g&&g<=x?g:g<=x&&x<=T||T<=x&&x<=g?x:T},vm=function(g,x,T,A,D,O,$,q,S){var G=g-D,W=T-g,et=$-D,at=x-O,lt=A-x,ft=q-O,At=et*at-ft*G,kt=W*at-lt*G,Mt=ft*W-et*lt;if(Mt!==0){var Dt=At/Mt,jt=kt/Mt,Zt=.001,Kt=0-Zt,zt=1+Zt;return Kt<=Dt&&Dt<=zt&&Kt<=jt&&jt<=zt?[g+Dt*W,x+Dt*lt]:S?[g+Dt*W,x+Dt*lt]:[]}else return At===0||kt===0?TL(g,T,$)===$?[$,q]:TL(g,T,D)===D?[D,O]:TL(D,$,T)===T?[T,A]:[]:[]},yk=function(g,x,T,A,D,O,$,q){var S=[],G,W=new Array(T.length),et=!0;O==null&&(et=!1);var at;if(et){for(var lt=0;lt<W.length/2;lt++)W[lt*2]=T[lt*2]*O+A,W[lt*2+1]=T[lt*2+1]*$+D;if(q>0){var ft=rF(W,-q);at=nF(ft)}else at=W}else at=T;for(var At,kt,Mt,Dt,jt=0;jt<at.length/2;jt++)At=at[jt*2],kt=at[jt*2+1],jt<at.length/2-1?(Mt=at[(jt+1)*2],Dt=at[(jt+1)*2+1]):(Mt=at[0],Dt=at[1]),G=vm(g,x,A,D,At,kt,Mt,Dt),G.length!==0&&S.push(G[0],G[1]);return S},BY=function(g,x,T,A,D,O,$,q){for(var S=[],G,W=new Array(T.length),et=O/2,at=$/2,lt=_L(O,$),ft=0;ft<T.length/4;ft++){var At=void 0,kt=void 0;ft===0?At=T.length-2:At=ft*4-2,kt=ft*4+2;var Mt=A+et*T[ft*4],Dt=D+at*T[ft*4+1],jt=-T[At]*T[kt]-T[At+1]*T[kt+1],Zt=lt/Math.tan(Math.acos(jt)/2),Kt=Mt-Zt*T[At],zt=Dt-Zt*T[At+1],ee=Mt+Zt*T[kt],Vt=Dt+Zt*T[kt+1];ft===0?(W[T.length-2]=Kt,W[T.length-1]=zt):(W[ft*4-2]=Kt,W[ft*4-1]=zt),W[ft*4]=ee,W[ft*4+1]=Vt;var fe=T[At+1],ge=-T[At],ne=fe*T[kt]+ge*T[kt+1];ne<0&&(fe*=-1,ge*=-1);var Pe=Kt+fe*lt,pe=zt+ge*lt;G=mk(g,x,A,D,Pe,pe,lt),G.length!==0&&S.push(G[0],G[1])}for(var bn=0;bn<W.length/4;bn++)G=vm(g,x,A,D,W[bn*4],W[bn*4+1],W[bn*4+2],W[bn*4+3],!1),G.length!==0&&S.push(G[0],G[1]);if(S.length>2){for(var ze=[S[0],S[1]],Ve=Math.pow(ze[0]-g,2)+Math.pow(ze[1]-x,2),En=1;En<S.length/2;En++){var Dn=Math.pow(S[En*2]-g,2)+Math.pow(S[En*2+1]-x,2);Dn<=Ve&&(ze[0]=S[En*2],ze[1]=S[En*2+1],Ve=Dn)}return ze}return S},FT=function(g,x,T){var A=[g[0]-x[0],g[1]-x[1]],D=Math.sqrt(A[0]*A[0]+A[1]*A[1]),O=(D-T)/D;return O<0&&(O=1e-5),[x[0]+O*A[0],x[1]+O*A[1]]},nd=function(g,x){var T=CL(g,x);return T=iF(T),T},iF=function(g){for(var x,T,A=g.length/2,D=1/0,O=1/0,$=-1/0,q=-1/0,S=0;S<A;S++)x=g[2*S],T=g[2*S+1],D=Math.min(D,x),$=Math.max($,x),O=Math.min(O,T),q=Math.max(q,T);for(var G=2/($-D),W=2/(q-O),et=0;et<A;et++)x=g[2*et]=g[2*et]*G,T=g[2*et+1]=g[2*et+1]*W,D=Math.min(D,x),$=Math.max($,x),O=Math.min(O,T),q=Math.max(q,T);if(O<-1)for(var at=0;at<A;at++)T=g[2*at+1]=g[2*at+1]+(-1-O);return g},CL=function(g,x){var T=1/g*2*Math.PI,A=g%2===0?Math.PI/2+T/2:Math.PI/2;A+=x;for(var D=new Array(g*2),O,$=0;$<g;$++)O=$*T+A,D[2*$]=Math.cos(O),D[2*$+1]=Math.sin(-O);return D},xk=function(g,x){return Math.min(g/4,x/4,8)},_L=function(g,x){return Math.min(g/10,x/10,8)},sF=function(){return 8},RY=function(g,x,T){return[g-2*x+T,2*(x-g),g]},SL=function(g,x){return{heightOffset:Math.min(15,.05*x),widthOffset:Math.min(100,.25*g),ctrlPtOffsetPct:.05}},jY=Bf({dampingFactor:.8,precision:1e-6,iterations:200,weight:function(g){return 1}}),$Y={pageRank:function(g){for(var x=jY(g),T=x.dampingFactor,A=x.precision,D=x.iterations,O=x.weight,$=this._private.cy,q=this.byGroup(),S=q.nodes,G=q.edges,W=S.length,et=W*W,at=G.length,lt=new Array(et),ft=new Array(W),At=(1-T)/W,kt=0;kt<W;kt++){for(var Mt=0;Mt<W;Mt++){var Dt=kt*W+Mt;lt[Dt]=0}ft[kt]=0}for(var jt=0;jt<at;jt++){var Zt=G[jt],Kt=Zt.data("source"),zt=Zt.data("target");if(Kt!==zt){var ee=S.indexOfId(Kt),Vt=S.indexOfId(zt),fe=O(Zt),ge=Vt*W+ee;lt[ge]+=fe,ft[ee]+=fe}}for(var ne=1/W+At,Pe=0;Pe<W;Pe++)if(ft[Pe]===0)for(var pe=0;pe<W;pe++){var bn=pe*W+Pe;lt[bn]=ne}else for(var ze=0;ze<W;ze++){var Ve=ze*W+Pe;lt[Ve]=lt[Ve]/ft[Pe]+At}for(var En=new Array(W),Dn=new Array(W),Kn,Sn=0;Sn<W;Sn++)En[Sn]=1;for(var Wn=0;Wn<D;Wn++){for(var rr=0;rr<W;rr++)Dn[rr]=0;for(var vr=0;vr<W;vr++)for(var ur=0;ur<W;ur++){var tr=vr*W+ur;Dn[vr]+=lt[tr]*En[ur]}kY(Dn),Kn=En,En=Dn,Dn=Kn;for(var wn=0,gr=0;gr<W;gr++){var fr=Kn[gr]-En[gr];wn+=fr*fr}if(wn<A)break}var Jr={rank:function(Ks){return Ks=$.collection(Ks)[0],En[S.indexOf(Ks)]}};return Jr}},aF=Bf({root:null,weight:function(g){return 1},directed:!1,alpha:0}),V5={degreeCentralityNormalized:function(g){g=aF(g);var x=this.cy(),T=this.nodes(),A=T.length;if(g.directed){for(var G={},W={},et=0,at=0,lt=0;lt<A;lt++){var ft=T[lt],At=ft.id();g.root=ft;var kt=this.degreeCentrality(g);et<kt.indegree&&(et=kt.indegree),at<kt.outdegree&&(at=kt.outdegree),G[At]=kt.indegree,W[At]=kt.outdegree}return{indegree:function(Dt){return et==0?0:(mt(Dt)&&(Dt=x.filter(Dt)),G[Dt.id()]/et)},outdegree:function(Dt){return at===0?0:(mt(Dt)&&(Dt=x.filter(Dt)),W[Dt.id()]/at)}}}else{for(var D={},O=0,$=0;$<A;$++){var q=T[$];g.root=q;var S=this.degreeCentrality(g);O<S.degree&&(O=S.degree),D[q.id()]=S.degree}return{degree:function(Dt){return O===0?0:(mt(Dt)&&(Dt=x.filter(Dt)),D[Dt.id()]/O)}}}},degreeCentrality:function(g){g=aF(g);var x=this.cy(),T=this,A=g,D=A.root,O=A.weight,$=A.directed,q=A.alpha;if(D=x.collection(D)[0],$){for(var at=D.connectedEdges(),lt=at.filter(function(Kt){return Kt.target().same(D)&&T.has(Kt)}),ft=at.filter(function(Kt){return Kt.source().same(D)&&T.has(Kt)}),At=lt.length,kt=ft.length,Mt=0,Dt=0,jt=0;jt<lt.length;jt++)Mt+=O(lt[jt]);for(var Zt=0;Zt<ft.length;Zt++)Dt+=O(ft[Zt]);return{indegree:Math.pow(At,1-q)*Math.pow(Mt,q),outdegree:Math.pow(kt,1-q)*Math.pow(Dt,q)}}else{for(var S=D.connectedEdges().intersection(T),G=S.length,W=0,et=0;et<S.length;et++)W+=O(S[et]);return{degree:Math.pow(G,1-q)*Math.pow(W,q)}}}};V5.dc=V5.degreeCentrality,V5.dcn=V5.degreeCentralityNormalised=V5.degreeCentralityNormalized;var oF=Bf({harmonic:!0,weight:function(){return 1},directed:!1,root:null}),U5={closenessCentralityNormalized:function(g){for(var x=oF(g),T=x.harmonic,A=x.weight,D=x.directed,O=this.cy(),$={},q=0,S=this.nodes(),G=this.floydWarshall({weight:A,directed:D}),W=0;W<S.length;W++){for(var et=0,at=S[W],lt=0;lt<S.length;lt++)if(W!==lt){var ft=G.distance(at,S[lt]);T?et+=1/ft:et+=ft}T||(et=1/et),q<et&&(q=et),$[at.id()]=et}return{closeness:function(kt){return q==0?0:(mt(kt)?kt=O.filter(kt)[0].id():kt=kt.id(),$[kt]/q)}}},closenessCentrality:function(g){var x=oF(g),T=x.root,A=x.weight,D=x.directed,O=x.harmonic;T=this.filter(T)[0];for(var $=this.dijkstra({root:T,weight:A,directed:D}),q=0,S=this.nodes(),G=0;G<S.length;G++){var W=S[G];if(!W.same(T)){var et=$.distanceTo(W);O?q+=1/et:q+=et}}return O?q:1/q}};U5.cc=U5.closenessCentrality,U5.ccn=U5.closenessCentralityNormalised=U5.closenessCentralityNormalized;var zY=Bf({weight:null,directed:!1}),AL={betweennessCentrality:function(g){for(var x=zY(g),T=x.directed,A=x.weight,D=A!=null,O=this.cy(),$=this.nodes(),q={},S={},G=0,W={set:function(Dt,jt){S[Dt]=jt,jt>G&&(G=jt)},get:function(Dt){return S[Dt]}},et=0;et<$.length;et++){var at=$[et],lt=at.id();T?q[lt]=at.outgoers().nodes():q[lt]=at.openNeighborhood().nodes(),W.set(lt,0)}for(var ft=function(Dt){for(var jt=$[Dt].id(),Zt=[],Kt={},zt={},ee={},Vt=new vk(function(ur,tr){return ee[ur]-ee[tr]}),fe=0;fe<$.length;fe++){var ge=$[fe].id();Kt[ge]=[],zt[ge]=0,ee[ge]=1/0}for(zt[jt]=1,ee[jt]=0,Vt.push(jt);!Vt.empty();){var ne=Vt.pop();if(Zt.push(ne),D)for(var Pe=0;Pe<q[ne].length;Pe++){var pe=q[ne][Pe],bn=O.getElementById(ne),ze=void 0;bn.edgesTo(pe).length>0?ze=bn.edgesTo(pe)[0]:ze=pe.edgesTo(bn)[0];var Ve=A(ze);pe=pe.id(),ee[pe]>ee[ne]+Ve&&(ee[pe]=ee[ne]+Ve,Vt.nodes.indexOf(pe)<0?Vt.push(pe):Vt.updateItem(pe),zt[pe]=0,Kt[pe]=[]),ee[pe]==ee[ne]+Ve&&(zt[pe]=zt[pe]+zt[ne],Kt[pe].push(ne))}else for(var En=0;En<q[ne].length;En++){var Dn=q[ne][En].id();ee[Dn]==1/0&&(Vt.push(Dn),ee[Dn]=ee[ne]+1),ee[Dn]==ee[ne]+1&&(zt[Dn]=zt[Dn]+zt[ne],Kt[Dn].push(ne))}}for(var Kn={},Sn=0;Sn<$.length;Sn++)Kn[$[Sn].id()]=0;for(;Zt.length>0;){for(var Wn=Zt.pop(),rr=0;rr<Kt[Wn].length;rr++){var vr=Kt[Wn][rr];Kn[vr]=Kn[vr]+zt[vr]/zt[Wn]*(1+Kn[Wn])}Wn!=$[Dt].id()&&W.set(Wn,W.get(Wn)+Kn[Wn])}},At=0;At<$.length;At++)ft(At);var kt={betweenness:function(Dt){var jt=O.collection(Dt).id();return W.get(jt)},betweennessNormalized:function(Dt){if(G==0)return 0;var jt=O.collection(Dt).id();return W.get(jt)/G}};return kt.betweennessNormalised=kt.betweennessNormalized,kt}};AL.bc=AL.betweennessCentrality;var qY=Bf({expandFactor:2,inflateFactor:2,multFactor:1,maxIterations:20,attributes:[function(y){return 1}]}),HY=function(g){return qY(g)},GY=function(g,x){for(var T=0,A=0;A<x.length;A++)T+=x[A](g);return T},VY=function(g,x,T){for(var A=0;A<x;A++)g[A*x+A]=T},cF=function(g,x){for(var T,A=0;A<x;A++){T=0;for(var D=0;D<x;D++)T+=g[D*x+A];for(var O=0;O<x;O++)g[O*x+A]=g[O*x+A]/T}},UY=function(g,x,T){for(var A=new Array(T*T),D=0;D<T;D++){for(var O=0;O<T;O++)A[D*T+O]=0;for(var $=0;$<T;$++)for(var q=0;q<T;q++)A[D*T+q]+=g[D*T+$]*x[$*T+q]}return A},WY=function(g,x,T){for(var A=g.slice(0),D=1;D<T;D++)g=UY(g,A,x);return g},KY=function(g,x,T){for(var A=new Array(x*x),D=0;D<x*x;D++)A[D]=Math.pow(g[D],T);return cF(A,x),A},uF=function(g,x,T,A){for(var D=0;D<T;D++){var O=Math.round(g[D]*Math.pow(10,A))/Math.pow(10,A),$=Math.round(x[D]*Math.pow(10,A))/Math.pow(10,A);if(O!==$)return!1}return!0},YY=function(g,x,T,A){for(var D=[],O=0;O<x;O++){for(var $=[],q=0;q<x;q++)Math.round(g[O*x+q]*1e3)/1e3>0&&$.push(T[q]);$.length!==0&&D.push(A.collection($))}return D},XY=function(g,x){for(var T=0;T<g.length;T++)if(!x[T]||g[T].id()!==x[T].id())return!1;return!0},QY=function(g){for(var x=0;x<g.length;x++)for(var T=0;T<g.length;T++)x!=T&&XY(g[x],g[T])&&g.splice(T,1);return g},lF=function(g){for(var x=this.nodes(),T=this.edges(),A=this.cy(),D=HY(g),O={},$=0;$<x.length;$++)O[x[$].id()]=$;for(var q=x.length,S=q*q,G=new Array(S),W,et=0;et<S;et++)G[et]=0;for(var at=0;at<T.length;at++){var lt=T[at],ft=O[lt.source().id()],At=O[lt.target().id()],kt=GY(lt,D.attributes);G[ft*q+At]+=kt,G[At*q+ft]+=kt}VY(G,q,D.multFactor),cF(G,q);for(var Mt=!0,Dt=0;Mt&&Dt<D.maxIterations;)Mt=!1,W=WY(G,q,D.expandFactor),G=KY(W,q,D.inflateFactor),uF(G,W,S,4)||(Mt=!0),Dt++;var jt=YY(G,q,x,A);return jt=QY(jt),jt},ZY={markovClustering:lF,mcl:lF},JY=function(g){return g},hF=function(g,x){return Math.abs(x-g)},fF=function(g,x,T){return g+hF(x,T)},dF=function(g,x,T){return g+Math.pow(T-x,2)},tX=function(g){return Math.sqrt(g)},eX=function(g,x,T){return Math.max(g,hF(x,T))},kk=function(g,x,T,A,D){for(var O=arguments.length>5&&arguments[5]!==void 0?arguments[5]:JY,$=A,q,S,G=0;G<g;G++)q=x(G),S=T(G),$=D($,q,S);return O($)},W5={euclidean:function(g,x,T){return g>=2?kk(g,x,T,0,dF,tX):kk(g,x,T,0,fF)},squaredEuclidean:function(g,x,T){return kk(g,x,T,0,dF)},manhattan:function(g,x,T){return kk(g,x,T,0,fF)},max:function(g,x,T){return kk(g,x,T,-1/0,eX)}};W5["squared-euclidean"]=W5.squaredEuclidean,W5.squaredeuclidean=W5.squaredEuclidean;function BT(y,g,x,T,A,D){var O;return yt(y)?O=y:O=W5[y]||W5.euclidean,g===0&&yt(y)?O(A,D):O(g,x,T,A,D)}var nX=Bf({k:2,m:2,sensitivityThreshold:1e-4,distance:"euclidean",maxIterations:10,attributes:[],testMode:!1,testCentroids:null}),LL=function(g){return nX(g)},RT=function(g,x,T,A,D){var O=D!=="kMedoids",$=O?function(W){return T[W]}:function(W){return A[W](T)},q=function(et){return A[et](x)},S=T,G=x;return BT(g,A.length,$,q,S,G)},ML=function(g,x,T){for(var A=T.length,D=new Array(A),O=new Array(A),$=new Array(x),q=null,S=0;S<A;S++)D[S]=g.min(T[S]).value,O[S]=g.max(T[S]).value;for(var G=0;G<x;G++){q=[];for(var W=0;W<A;W++)q[W]=Math.random()*(O[W]-D[W])+D[W];$[G]=q}return $},gF=function(g,x,T,A,D){for(var O=1/0,$=0,q=0;q<x.length;q++){var S=RT(T,g,x[q],A,D);S<O&&(O=S,$=q)}return $},pF=function(g,x,T){for(var A=[],D=null,O=0;O<x.length;O++)D=x[O],T[D.id()]===g&&A.push(D);return A},rX=function(g,x,T){return Math.abs(x-g)<=T},iX=function(g,x,T){for(var A=0;A<g.length;A++)for(var D=0;D<g[A].length;D++){var O=Math.abs(g[A][D]-x[A][D]);if(O>T)return!1}return!0},sX=function(g,x,T){for(var A=0;A<T;A++)if(g===x[A])return!0;return!1},bF=function(g,x){var T=new Array(x);if(g.length<50)for(var A=0;A<x;A++){for(var D=g[Math.floor(Math.random()*g.length)];sX(D,T,A);)D=g[Math.floor(Math.random()*g.length)];T[A]=D}else for(var O=0;O<x;O++)T[O]=g[Math.floor(Math.random()*g.length)];return T},vF=function(g,x,T){for(var A=0,D=0;D<x.length;D++)A+=RT("manhattan",x[D],g,T,"kMedoids");return A},aX=function(g){var x=this.cy(),T=this.nodes(),A=null,D=LL(g),O=new Array(D.k),$={},q;D.testMode?typeof D.testCentroids=="number"?(D.testCentroids,q=ML(T,D.k,D.attributes)):f(D.testCentroids)==="object"?q=D.testCentroids:q=ML(T,D.k,D.attributes):q=ML(T,D.k,D.attributes);for(var S=!0,G=0;S&&G<D.maxIterations;){for(var W=0;W<T.length;W++)A=T[W],$[A.id()]=gF(A,q,D.distance,D.attributes,"kMeans");S=!1;for(var et=0;et<D.k;et++){var at=pF(et,T,$);if(at.length!==0){for(var lt=D.attributes.length,ft=q[et],At=new Array(lt),kt=new Array(lt),Mt=0;Mt<lt;Mt++){kt[Mt]=0;for(var Dt=0;Dt<at.length;Dt++)A=at[Dt],kt[Mt]+=D.attributes[Mt](A);At[Mt]=kt[Mt]/at.length,rX(At[Mt],ft[Mt],D.sensitivityThreshold)||(S=!0)}q[et]=At,O[et]=x.collection(at)}}G++}return O},oX=function(g){var x=this.cy(),T=this.nodes(),A=null,D=LL(g),O=new Array(D.k),$,q={},S,G=new Array(D.k);D.testMode?typeof D.testCentroids=="number"||(f(D.testCentroids)==="object"?$=D.testCentroids:$=bF(T,D.k)):$=bF(T,D.k);for(var W=!0,et=0;W&&et<D.maxIterations;){for(var at=0;at<T.length;at++)A=T[at],q[A.id()]=gF(A,$,D.distance,D.attributes,"kMedoids");W=!1;for(var lt=0;lt<$.length;lt++){var ft=pF(lt,T,q);if(ft.length!==0){G[lt]=vF($[lt],ft,D.attributes);for(var At=0;At<ft.length;At++)S=vF(ft[At],ft,D.attributes),S<G[lt]&&(G[lt]=S,$[lt]=ft[At],W=!0);O[lt]=x.collection(ft)}}et++}return O},cX=function(g,x,T,A,D){for(var O,$,q=0;q<x.length;q++)for(var S=0;S<g.length;S++)A[q][S]=Math.pow(T[q][S],D.m);for(var G=0;G<g.length;G++)for(var W=0;W<D.attributes.length;W++){O=0,$=0;for(var et=0;et<x.length;et++)O+=A[et][G]*D.attributes[W](x[et]),$+=A[et][G];g[G][W]=O/$}},uX=function(g,x,T,A,D){for(var O=0;O<g.length;O++)x[O]=g[O].slice();for(var $,q,S,G=2/(D.m-1),W=0;W<T.length;W++)for(var et=0;et<A.length;et++){$=0;for(var at=0;at<T.length;at++)q=RT(D.distance,A[et],T[W],D.attributes,"cmeans"),S=RT(D.distance,A[et],T[at],D.attributes,"cmeans"),$+=Math.pow(q/S,G);g[et][W]=1/$}},lX=function(g,x,T,A){for(var D=new Array(T.k),O=0;O<D.length;O++)D[O]=[];for(var $,q,S=0;S<x.length;S++){$=-1/0,q=-1;for(var G=0;G<x[0].length;G++)x[S][G]>$&&($=x[S][G],q=G);D[q].push(g[S])}for(var W=0;W<D.length;W++)D[W]=A.collection(D[W]);return D},wF=function(g){var x=this.cy(),T=this.nodes(),A=LL(g),D,O,$,q,S;q=new Array(T.length);for(var G=0;G<T.length;G++)q[G]=new Array(A.k);$=new Array(T.length);for(var W=0;W<T.length;W++)$[W]=new Array(A.k);for(var et=0;et<T.length;et++){for(var at=0,lt=0;lt<A.k;lt++)$[et][lt]=Math.random(),at+=$[et][lt];for(var ft=0;ft<A.k;ft++)$[et][ft]=$[et][ft]/at}O=new Array(A.k);for(var At=0;At<A.k;At++)O[At]=new Array(A.attributes.length);S=new Array(T.length);for(var kt=0;kt<T.length;kt++)S[kt]=new Array(A.k);for(var Mt=!0,Dt=0;Mt&&Dt<A.maxIterations;)Mt=!1,cX(O,T,$,S,A),uX($,q,O,T,A),iX($,q,A.sensitivityThreshold)||(Mt=!0),Dt++;return D=lX(T,$,A,x),{clusters:D,degreeOfMembership:$}},hX={kMeans:aX,kMedoids:oX,fuzzyCMeans:wF,fcm:wF},fX=Bf({distance:"euclidean",linkage:"min",mode:"threshold",threshold:1/0,addDendrogram:!1,dendrogramDepth:0,attributes:[]}),dX={single:"min",complete:"max"},gX=function(g){var x=fX(g),T=dX[x.linkage];return T!=null&&(x.linkage=T),x},mF=function(g,x,T,A,D){for(var O=0,$=1/0,q,S=D.attributes,G=function(Vt,fe){return BT(D.distance,S.length,function(ge){return S[ge](Vt)},function(ge){return S[ge](fe)},Vt,fe)},W=0;W<g.length;W++){var et=g[W].key,at=T[et][A[et]];at<$&&(O=et,$=at)}if(D.mode==="threshold"&&$>=D.threshold||D.mode==="dendrogram"&&g.length===1)return!1;var lt=x[O],ft=x[A[O]],At;D.mode==="dendrogram"?At={left:lt,right:ft,key:lt.key}:At={value:lt.value.concat(ft.value),key:lt.key},g[lt.index]=At,g.splice(ft.index,1),x[lt.key]=At;for(var kt=0;kt<g.length;kt++){var Mt=g[kt];lt.key===Mt.key?q=1/0:D.linkage==="min"?(q=T[lt.key][Mt.key],T[lt.key][Mt.key]>T[ft.key][Mt.key]&&(q=T[ft.key][Mt.key])):D.linkage==="max"?(q=T[lt.key][Mt.key],T[lt.key][Mt.key]<T[ft.key][Mt.key]&&(q=T[ft.key][Mt.key])):D.linkage==="mean"?q=(T[lt.key][Mt.key]*lt.size+T[ft.key][Mt.key]*ft.size)/(lt.size+ft.size):D.mode==="dendrogram"?q=G(Mt.value,lt.value):q=G(Mt.value[0],lt.value[0]),T[lt.key][Mt.key]=T[Mt.key][lt.key]=q}for(var Dt=0;Dt<g.length;Dt++){var jt=g[Dt].key;if(A[jt]===lt.key||A[jt]===ft.key){for(var Zt=jt,Kt=0;Kt<g.length;Kt++){var zt=g[Kt].key;T[jt][zt]<T[jt][Zt]&&(Zt=zt)}A[jt]=Zt}g[Dt].index=Dt}return lt.key=ft.key=lt.index=ft.index=null,!0},jT=function y(g,x,T){g&&(g.value?x.push(g.value):(g.left&&y(g.left,x),g.right&&y(g.right,x)))},pX=function y(g,x){if(!g)return"";if(g.left&&g.right){var T=y(g.left,x),A=y(g.right,x),D=x.add({group:"nodes",data:{id:T+","+A}});return x.add({group:"edges",data:{source:T,target:D.id()}}),x.add({group:"edges",data:{source:A,target:D.id()}}),D.id()}else if(g.value)return g.value.id()},bX=function y(g,x,T){if(!g)return[];var A=[],D=[],O=[];return x===0?(g.left&&jT(g.left,A),g.right&&jT(g.right,D),O=A.concat(D),[T.collection(O)]):x===1?g.value?[T.collection(g.value)]:(g.left&&jT(g.left,A),g.right&&jT(g.right,D),[T.collection(A),T.collection(D)]):g.value?[T.collection(g.value)]:(g.left&&(A=y(g.left,x-1,T)),g.right&&(D=y(g.right,x-1,T)),A.concat(D))},yF=function(g){for(var x=this.cy(),T=this.nodes(),A=gX(g),D=A.attributes,O=function(Dt,jt){return BT(A.distance,D.length,function(Zt){return D[Zt](Dt)},function(Zt){return D[Zt](jt)},Dt,jt)},$=[],q=[],S=[],G=[],W=0;W<T.length;W++){var et={value:A.mode==="dendrogram"?T[W]:[T[W]],key:W,index:W};$[W]=et,G[W]=et,q[W]=[],S[W]=0}for(var at=0;at<$.length;at++)for(var lt=0;lt<=at;lt++){var ft=void 0;A.mode==="dendrogram"?ft=at===lt?1/0:O($[at].value,$[lt].value):ft=at===lt?1/0:O($[at].value[0],$[lt].value[0]),q[at][lt]=ft,q[lt][at]=ft,ft<q[at][S[at]]&&(S[at]=lt)}for(var At=mF($,G,q,S,A);At;)At=mF($,G,q,S,A);var kt;return A.mode==="dendrogram"?(kt=bX($[0],A.dendrogramDepth,x),A.addDendrogram&&pX($[0],x)):(kt=new Array($.length),$.forEach(function(Mt,Dt){Mt.key=Mt.index=null,kt[Dt]=x.collection(Mt.value)})),kt},vX={hierarchicalClustering:yF,hca:yF},wX=Bf({distance:"euclidean",preference:"median",damping:.8,maxIterations:1e3,minIterations:100,attributes:[]}),mX=function(g){var x=g.damping,T=g.preference;.5<=x&&x<1||bl("Damping must range on [0.5, 1).  Got: ".concat(x));var A=["median","mean","min","max"];return A.some(function(D){return D===T})||X(T)||bl("Preference must be one of [".concat(A.map(function(D){return"'".concat(D,"'")}).join(", "),"] or a number.  Got: ").concat(T)),wX(g)},yX=function(g,x,T,A){var D=function($,q){return A[q]($)};return-BT(g,A.length,function(O){return D(x,O)},function(O){return D(T,O)},x,T)},xX=function(g,x){var T=null;return x==="median"?T=yY(g):x==="mean"?T=mY(g):x==="min"?T=vY(g):x==="max"?T=wY(g):T=x,T},kX=function(g,x,T){for(var A=[],D=0;D<g;D++)x[D*g+D]+T[D*g+D]>0&&A.push(D);return A},xF=function(g,x,T){for(var A=[],D=0;D<g;D++){for(var O=-1,$=-1/0,q=0;q<T.length;q++){var S=T[q];x[D*g+S]>$&&(O=S,$=x[D*g+S])}O>0&&A.push(O)}for(var G=0;G<T.length;G++)A[T[G]]=T[G];return A},EX=function(g,x,T){for(var A=xF(g,x,T),D=0;D<T.length;D++){for(var O=[],$=0;$<A.length;$++)A[$]===T[D]&&O.push($);for(var q=-1,S=-1/0,G=0;G<O.length;G++){for(var W=0,et=0;et<O.length;et++)W+=x[O[et]*g+O[G]];W>S&&(q=G,S=W)}T[D]=O[q]}return A=xF(g,x,T),A},kF=function(g){for(var x=this.cy(),T=this.nodes(),A=mX(g),D={},O=0;O<T.length;O++)D[T[O].id()]=O;var $,q,S,G,W,et;$=T.length,q=$*$,S=new Array(q);for(var at=0;at<q;at++)S[at]=-1/0;for(var lt=0;lt<$;lt++)for(var ft=0;ft<$;ft++)lt!==ft&&(S[lt*$+ft]=yX(A.distance,T[lt],T[ft],A.attributes));G=xX(S,A.preference);for(var At=0;At<$;At++)S[At*$+At]=G;W=new Array(q);for(var kt=0;kt<q;kt++)W[kt]=0;et=new Array(q);for(var Mt=0;Mt<q;Mt++)et[Mt]=0;for(var Dt=new Array($),jt=new Array($),Zt=new Array($),Kt=0;Kt<$;Kt++)Dt[Kt]=0,jt[Kt]=0,Zt[Kt]=0;for(var zt=new Array($*A.minIterations),ee=0;ee<zt.length;ee++)zt[ee]=0;var Vt;for(Vt=0;Vt<A.maxIterations;Vt++){for(var fe=0;fe<$;fe++){for(var ge=-1/0,ne=-1/0,Pe=-1,pe=0,bn=0;bn<$;bn++)Dt[bn]=W[fe*$+bn],pe=et[fe*$+bn]+S[fe*$+bn],pe>=ge?(ne=ge,ge=pe,Pe=bn):pe>ne&&(ne=pe);for(var ze=0;ze<$;ze++)W[fe*$+ze]=(1-A.damping)*(S[fe*$+ze]-ge)+A.damping*Dt[ze];W[fe*$+Pe]=(1-A.damping)*(S[fe*$+Pe]-ne)+A.damping*Dt[Pe]}for(var Ve=0;Ve<$;Ve++){for(var En=0,Dn=0;Dn<$;Dn++)Dt[Dn]=et[Dn*$+Ve],jt[Dn]=Math.max(0,W[Dn*$+Ve]),En+=jt[Dn];En-=jt[Ve],jt[Ve]=W[Ve*$+Ve],En+=jt[Ve];for(var Kn=0;Kn<$;Kn++)et[Kn*$+Ve]=(1-A.damping)*Math.min(0,En-jt[Kn])+A.damping*Dt[Kn];et[Ve*$+Ve]=(1-A.damping)*(En-jt[Ve])+A.damping*Dt[Ve]}for(var Sn=0,Wn=0;Wn<$;Wn++){var rr=et[Wn*$+Wn]+W[Wn*$+Wn]>0?1:0;zt[Vt%A.minIterations*$+Wn]=rr,Sn+=rr}if(Sn>0&&(Vt>=A.minIterations-1||Vt==A.maxIterations-1)){for(var vr=0,ur=0;ur<$;ur++){Zt[ur]=0;for(var tr=0;tr<A.minIterations;tr++)Zt[ur]+=zt[tr*$+ur];(Zt[ur]===0||Zt[ur]===A.minIterations)&&vr++}if(vr===$)break}}for(var wn=kX($,W,et),gr=EX($,S,wn),fr={},Jr=0;Jr<wn.length;Jr++)fr[wn[Jr]]=[];for(var wi=0;wi<T.length;wi++){var Ks=D[T[wi].id()],ka=gr[Ks];ka!=null&&fr[ka].push(T[wi])}for(var Ci=new Array(wn.length),hi=0;hi<wn.length;hi++)Ci[hi]=x.collection(fr[wn[hi]]);return Ci},TX={affinityPropagation:kF,ap:kF},CX=Bf({root:void 0,directed:!1}),_X={hierholzer:function(g){if(!ht(g)){var x=arguments;g={root:x[0],directed:x[1]}}var T=CX(g),A=T.root,D=T.directed,O=this,$=!1,q,S,G;A&&(G=mt(A)?this.filter(A)[0].id():A[0].id());var W={},et={};D?O.forEach(function(Mt){var Dt=Mt.id();if(Mt.isNode()){var jt=Mt.indegree(!0),Zt=Mt.outdegree(!0),Kt=jt-Zt,zt=Zt-jt;Kt==1?q?$=!0:q=Dt:zt==1?S?$=!0:S=Dt:(zt>1||Kt>1)&&($=!0),W[Dt]=[],Mt.outgoers().forEach(function(ee){ee.isEdge()&&W[Dt].push(ee.id())})}else et[Dt]=[void 0,Mt.target().id()]}):O.forEach(function(Mt){var Dt=Mt.id();if(Mt.isNode()){var jt=Mt.degree(!0);jt%2&&(q?S?$=!0:S=Dt:q=Dt),W[Dt]=[],Mt.connectedEdges().forEach(function(Zt){return W[Dt].push(Zt.id())})}else et[Dt]=[Mt.source().id(),Mt.target().id()]});var at={found:!1,trail:void 0};if($)return at;if(S&&q)if(D){if(G&&S!=G)return at;G=S}else{if(G&&S!=G&&q!=G)return at;G||(G=S)}else G||(G=O[0].id());var lt=function(Dt){for(var jt=Dt,Zt=[Dt],Kt,zt,ee;W[jt].length;)Kt=W[jt].shift(),zt=et[Kt][0],ee=et[Kt][1],jt!=ee?(W[ee]=W[ee].filter(function(Vt){return Vt!=Kt}),jt=ee):!D&&jt!=zt&&(W[zt]=W[zt].filter(function(Vt){return Vt!=Kt}),jt=zt),Zt.unshift(Kt),Zt.unshift(jt);return Zt},ft=[],At=[];for(At=lt(G);At.length!=1;)W[At[0]].length==0?(ft.unshift(O.getElementById(At.shift())),ft.unshift(O.getElementById(At.shift()))):At=lt(At.shift()).concat(At);ft.unshift(O.getElementById(At.shift()));for(var kt in W)if(W[kt].length)return at;return at.found=!0,at.trail=this.spawn(ft,!0),at}},$T=function(){var g=this,x={},T=0,A=0,D=[],O=[],$={},q=function(et,at){for(var lt=O.length-1,ft=[],At=g.spawn();O[lt].x!=et||O[lt].y!=at;)ft.push(O.pop().edge),lt--;ft.push(O.pop().edge),ft.forEach(function(kt){var Mt=kt.connectedNodes().intersection(g);At.merge(kt),Mt.forEach(function(Dt){var jt=Dt.id(),Zt=Dt.connectedEdges().intersection(g);At.merge(Dt),x[jt].cutVertex?At.merge(Zt.filter(function(Kt){return Kt.isLoop()})):At.merge(Zt)})}),D.push(At)},S=function W(et,at,lt){et===lt&&(A+=1),x[at]={id:T,low:T++,cutVertex:!1};var ft=g.getElementById(at).connectedEdges().intersection(g);if(ft.size()===0)D.push(g.spawn(g.getElementById(at)));else{var At,kt,Mt,Dt;ft.forEach(function(jt){At=jt.source().id(),kt=jt.target().id(),Mt=At===at?kt:At,Mt!==lt&&(Dt=jt.id(),$[Dt]||($[Dt]=!0,O.push({x:at,y:Mt,edge:jt})),Mt in x?x[at].low=Math.min(x[at].low,x[Mt].id):(W(et,Mt,at),x[at].low=Math.min(x[at].low,x[Mt].low),x[at].id<=x[Mt].low&&(x[at].cutVertex=!0,q(at,Mt))))})}};g.forEach(function(W){if(W.isNode()){var et=W.id();et in x||(A=0,S(et,et),x[et].cutVertex=A>1)}});var G=Object.keys(x).filter(function(W){return x[W].cutVertex}).map(function(W){return g.getElementById(W)});return{cut:g.spawn(G),components:D}},SX={hopcroftTarjanBiconnected:$T,htbc:$T,htb:$T,hopcroftTarjanBiconnectedComponents:$T},zT=function(){var g=this,x={},T=0,A=[],D=[],O=g.spawn(g),$=function q(S){D.push(S),x[S]={index:T,low:T++,explored:!1};var G=g.getElementById(S).connectedEdges().intersection(g);if(G.forEach(function(ft){var At=ft.target().id();At!==S&&(At in x||q(At),x[At].explored||(x[S].low=Math.min(x[S].low,x[At].low)))}),x[S].index===x[S].low){for(var W=g.spawn();;){var et=D.pop();if(W.merge(g.getElementById(et)),x[et].low=x[S].index,x[et].explored=!0,et===S)break}var at=W.edgesWith(W),lt=W.merge(at);A.push(lt),O=O.difference(lt)}};return g.forEach(function(q){if(q.isNode()){var S=q.id();S in x||$(S)}}),{cut:O,components:A}},AX={tarjanStronglyConnected:zT,tsc:zT,tscc:zT,tarjanStronglyConnectedComponents:zT},EF={};[bk,sY,aY,cY,lY,fY,pY,$Y,V5,U5,AL,ZY,hX,vX,TX,_X,SX,AX].forEach(function(y){me(EF,y)});/*!
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)
*/var TF=0,CF=1,_F=2,hv=function y(g){if(!(this instanceof y))return new y(g);this.id="Thenable/1.0.7",this.state=TF,this.fulfillValue=void 0,this.rejectReason=void 0,this.onFulfilled=[],this.onRejected=[],this.proxy={then:this.then.bind(this)},typeof g=="function"&&g.call(this,this.fulfill.bind(this),this.reject.bind(this))};hv.prototype={fulfill:function(g){return SF(this,CF,"fulfillValue",g)},reject:function(g){return SF(this,_F,"rejectReason",g)},then:function(g,x){var T=this,A=new hv;return T.onFulfilled.push(MF(g,A,"fulfill")),T.onRejected.push(MF(x,A,"reject")),AF(T),A.proxy}};var SF=function(g,x,T,A){return g.state===TF&&(g.state=x,g[T]=A,AF(g)),g},AF=function(g){g.state===CF?LF(g,"onFulfilled",g.fulfillValue):g.state===_F&&LF(g,"onRejected",g.rejectReason)},LF=function(g,x,T){if(g[x].length!==0){var A=g[x];g[x]=[];var D=function(){for(var $=0;$<A.length;$++)A[$](T)};typeof setImmediate=="function"?setImmediate(D):setTimeout(D,0)}},MF=function(g,x,T){return function(A){if(typeof g!="function")x[T].call(x,A);else{var D;try{D=g(A)}catch(O){x.reject(O);return}LX(x,D)}}},LX=function y(g,x){if(g===x||g.proxy===x){g.reject(new TypeError("cannot resolve promise with itself"));return}var T;if(f(x)==="object"&&x!==null||typeof x=="function")try{T=x.then}catch(D){g.reject(D);return}if(typeof T=="function"){var A=!1;try{T.call(x,function(D){A||(A=!0,D===x?g.reject(new TypeError("circular thenable chain")):y(g,D))},function(D){A||(A=!0,g.reject(D))})}catch(D){A||g.reject(D)}return}g.fulfill(x)};hv.all=function(y){return new hv(function(g,x){for(var T=new Array(y.length),A=0,D=function(q,S){T[q]=S,A++,A===y.length&&g(T)},O=0;O<y.length;O++)(function($){var q=y[$],S=q!=null&&q.then!=null;if(S)q.then(function(W){D($,W)},function(W){x(W)});else{var G=q;D($,G)}})(O)})},hv.resolve=function(y){return new hv(function(g,x){g(y)})},hv.reject=function(y){return new hv(function(g,x){x(y)})};var K5=typeof Promise<"u"?Promise:hv,qT=function(g,x,T){var A=Nt(g),D=!A,O=this._private=me({duration:1e3},x,T);if(O.target=g,O.style=O.style||O.css,O.started=!1,O.playing=!1,O.hooked=!1,O.applying=!1,O.progress=0,O.completes=[],O.frames=[],O.complete&&yt(O.complete)&&O.completes.push(O.complete),D){var $=g.position();O.startPosition=O.startPosition||{x:$.x,y:$.y},O.startStyle=O.startStyle||g.cy().style().getAnimationStartStyle(g,O.style)}if(A){var q=g.pan();O.startPan={x:q.x,y:q.y},O.startZoom=g.zoom()}this.length=1,this[0]=this},_3=qT.prototype;me(_3,{instanceString:function(){return"animation"},hook:function(){var g=this._private;if(!g.hooked){var x,T=g.target._private.animation;g.queue?x=T.queue:x=T.current,x.push(this),xt(g.target)&&g.target.cy().addToAnimationPool(g.target),g.hooked=!0}return this},play:function(){var g=this._private;return g.progress===1&&(g.progress=0),g.playing=!0,g.started=!1,g.stopped=!1,this.hook(),this},playing:function(){return this._private.playing},apply:function(){var g=this._private;return g.applying=!0,g.started=!1,g.stopped=!1,this.hook(),this},applying:function(){return this._private.applying},pause:function(){var g=this._private;return g.playing=!1,g.started=!1,this},stop:function(){var g=this._private;return g.playing=!1,g.started=!1,g.stopped=!0,this},rewind:function(){return this.progress(0)},fastforward:function(){return this.progress(1)},time:function(g){var x=this._private;return g===void 0?x.progress*x.duration:this.progress(g/x.duration)},progress:function(g){var x=this._private,T=x.playing;return g===void 0?x.progress:(T&&this.pause(),x.progress=g,x.started=!1,T&&this.play(),this)},completed:function(){return this._private.progress===1},reverse:function(){var g=this._private,x=g.playing;x&&this.pause(),g.progress=1-g.progress,g.started=!1;var T=function(S,G){var W=g[S];W!=null&&(g[S]=g[G],g[G]=W)};if(T("zoom","startZoom"),T("pan","startPan"),T("position","startPosition"),g.style)for(var A=0;A<g.style.length;A++){var D=g.style[A],O=D.name,$=g.startStyle[O];g.startStyle[O]=D,g.style[A]=$}return x&&this.play(),this},promise:function(g){var x=this._private,T;switch(g){case"frame":T=x.frames;break;default:case"complete":case"completed":T=x.completes}return new K5(function(A,D){T.push(function(){A()})})}}),_3.complete=_3.completed,_3.run=_3.play,_3.running=_3.playing;var MX={animated:function(){return function(){var x=this,T=x.length!==void 0,A=T?x:[x],D=this._private.cy||this;if(!D.styleEnabled())return!1;var O=A[0];if(O)return O._private.animation.current.length>0}},clearQueue:function(){return function(){var x=this,T=x.length!==void 0,A=T?x:[x],D=this._private.cy||this;if(!D.styleEnabled())return this;for(var O=0;O<A.length;O++){var $=A[O];$._private.animation.queue=[]}return this}},delay:function(){return function(x,T){var A=this._private.cy||this;return A.styleEnabled()?this.animate({delay:x,duration:x,complete:T}):this}},delayAnimation:function(){return function(x,T){var A=this._private.cy||this;return A.styleEnabled()?this.animation({delay:x,duration:x,complete:T}):this}},animation:function(){return function(x,T){var A=this,D=A.length!==void 0,O=D?A:[A],$=this._private.cy||this,q=!D,S=!q;if(!$.styleEnabled())return this;var G=$.style();x=me({},x,T);var W=Object.keys(x).length===0;if(W)return new qT(O[0],x);switch(x.duration===void 0&&(x.duration=400),x.duration){case"slow":x.duration=600;break;case"fast":x.duration=200;break}if(S&&(x.style=G.getPropsList(x.style||x.css),x.css=void 0),S&&x.renderedPosition!=null){var et=x.renderedPosition,at=$.pan(),lt=$.zoom();x.position=QP(et,lt,at)}if(q&&x.panBy!=null){var ft=x.panBy,At=$.pan();x.pan={x:At.x+ft.x,y:At.y+ft.y}}var kt=x.center||x.centre;if(q&&kt!=null){var Mt=$.getCenterPan(kt.eles,x.zoom);Mt!=null&&(x.pan=Mt)}if(q&&x.fit!=null){var Dt=x.fit,jt=$.getFitViewport(Dt.eles||Dt.boundingBox,Dt.padding);jt!=null&&(x.pan=jt.pan,x.zoom=jt.zoom)}if(q&&ht(x.zoom)){var Zt=$.getZoomedViewport(x.zoom);Zt!=null?(Zt.zoomed&&(x.zoom=Zt.zoom),Zt.panned&&(x.pan=Zt.pan)):x.zoom=null}return new qT(O[0],x)}},animate:function(){return function(x,T){var A=this,D=A.length!==void 0,O=D?A:[A],$=this._private.cy||this;if(!$.styleEnabled())return this;T&&(x=me({},x,T));for(var q=0;q<O.length;q++){var S=O[q],G=S.animated()&&(x.queue===void 0||x.queue),W=S.animation(x,G?{queue:!0}:void 0);W.play()}return this}},stop:function(){return function(x,T){var A=this,D=A.length!==void 0,O=D?A:[A],$=this._private.cy||this;if(!$.styleEnabled())return this;for(var q=0;q<O.length;q++){for(var S=O[q],G=S._private,W=G.animation.current,et=0;et<W.length;et++){var at=W[et],lt=at._private;T&&(lt.duration=0)}x&&(G.animation.queue=[]),T||(G.animation.current=[])}return $.notify("draw"),this}}},IX=Array.isArray,HT=IX,DX=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,OX=/^\w*$/;function NX(y,g){if(HT(y))return!1;var x=typeof y;return x=="number"||x=="symbol"||x=="boolean"||y==null||kr(y)?!0:OX.test(y)||!DX.test(y)||g!=null&&y in Object(g)}var PX=NX,FX="[object AsyncFunction]",BX="[object Function]",RX="[object GeneratorFunction]",jX="[object Proxy]";function $X(y){if(!Ee(y))return!1;var g=J1(y);return g==BX||g==RX||g==FX||g==jX}var zX=$X,qX=La["__core-js_shared__"],IL=qX,IF=function(){var y=/[^.]+$/.exec(IL&&IL.keys&&IL.keys.IE_PROTO||"");return y?"Symbol(src)_1."+y:""}();function HX(y){return!!IF&&IF in y}var GX=HX,VX=Function.prototype,DF=VX.toString;function UX(y){if(y!=null){try{return DF.call(y)}catch{}try{return y+""}catch{}}return""}var WX=UX,KX=/[\\^$.*+?()[\]{}|]/g,YX=/^\[object .+?Constructor\]$/,XX=Function.prototype,QX=Object.prototype,OF=XX.toString,NF=QX.hasOwnProperty,ZX=RegExp("^"+OF.call(NF).replace(KX,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function PF(y){if(!Ee(y)||GX(y))return!1;var g=zX(y)?ZX:YX;return g.test(WX(y))}var FF=PF;function JX(y,g){return y==null?void 0:y[g]}var tQ=JX;function eQ(y,g){var x=tQ(y,g);return FF(x)?x:void 0}var DL=eQ,nQ=DL(Object,"create"),Ek=nQ;function rQ(){this.__data__=Ek?Ek(null):{},this.size=0}var iQ=rQ;function sQ(y){var g=this.has(y)&&delete this.__data__[y];return this.size-=g?1:0,g}var BF=sQ,aQ="__lodash_hash_undefined__",oQ=Object.prototype,cQ=oQ.hasOwnProperty;function uQ(y){var g=this.__data__;if(Ek){var x=g[y];return x===aQ?void 0:x}return cQ.call(g,y)?g[y]:void 0}var lQ=uQ,hQ=Object.prototype,fQ=hQ.hasOwnProperty;function dQ(y){var g=this.__data__;return Ek?g[y]!==void 0:fQ.call(g,y)}var gQ=dQ,pQ="__lodash_hash_undefined__";function bQ(y,g){var x=this.__data__;return this.size+=this.has(y)?0:1,x[y]=Ek&&g===void 0?pQ:g,this}var vQ=bQ;function Y5(y){var g=-1,x=y==null?0:y.length;for(this.clear();++g<x;){var T=y[g];this.set(T[0],T[1])}}Y5.prototype.clear=iQ,Y5.prototype.delete=BF,Y5.prototype.get=lQ,Y5.prototype.has=gQ,Y5.prototype.set=vQ;var RF=Y5;function wQ(){this.__data__=[],this.size=0}var mQ=wQ;function yQ(y,g){return y===g||y!==y&&g!==g}var jF=yQ;function xQ(y,g){for(var x=y.length;x--;)if(jF(y[x][0],g))return x;return-1}var GT=xQ,kQ=Array.prototype,EQ=kQ.splice;function TQ(y){var g=this.__data__,x=GT(g,y);if(x<0)return!1;var T=g.length-1;return x==T?g.pop():EQ.call(g,x,1),--this.size,!0}var CQ=TQ;function _Q(y){var g=this.__data__,x=GT(g,y);return x<0?void 0:g[x][1]}var SQ=_Q;function AQ(y){return GT(this.__data__,y)>-1}var LQ=AQ;function MQ(y,g){var x=this.__data__,T=GT(x,y);return T<0?(++this.size,x.push([y,g])):x[T][1]=g,this}var IQ=MQ;function X5(y){var g=-1,x=y==null?0:y.length;for(this.clear();++g<x;){var T=y[g];this.set(T[0],T[1])}}X5.prototype.clear=mQ,X5.prototype.delete=CQ,X5.prototype.get=SQ,X5.prototype.has=LQ,X5.prototype.set=IQ;var DQ=X5,OQ=DL(La,"Map"),NQ=OQ;function PQ(){this.size=0,this.__data__={hash:new RF,map:new(NQ||DQ),string:new RF}}var FQ=PQ;function BQ(y){var g=typeof y;return g=="string"||g=="number"||g=="symbol"||g=="boolean"?y!=="__proto__":y===null}var RQ=BQ;function jQ(y,g){var x=y.__data__;return RQ(g)?x[typeof g=="string"?"string":"hash"]:x.map}var VT=jQ;function $Q(y){var g=VT(this,y).delete(y);return this.size-=g?1:0,g}var zQ=$Q;function qQ(y){return VT(this,y).get(y)}var HQ=qQ;function GQ(y){return VT(this,y).has(y)}var VQ=GQ;function UQ(y,g){var x=VT(this,y),T=x.size;return x.set(y,g),this.size+=x.size==T?0:1,this}var WQ=UQ;function Q5(y){var g=-1,x=y==null?0:y.length;for(this.clear();++g<x;){var T=y[g];this.set(T[0],T[1])}}Q5.prototype.clear=FQ,Q5.prototype.delete=zQ,Q5.prototype.get=HQ,Q5.prototype.has=VQ,Q5.prototype.set=WQ;var $F=Q5,KQ="Expected a function";function OL(y,g){if(typeof y!="function"||g!=null&&typeof g!="function")throw new TypeError(KQ);var x=function(){var T=arguments,A=g?g.apply(this,T):T[0],D=x.cache;if(D.has(A))return D.get(A);var O=y.apply(this,T);return x.cache=D.set(A,O)||D,O};return x.cache=new(OL.Cache||$F),x}OL.Cache=$F;var YQ=OL,XQ=500;function QQ(y){var g=YQ(y,function(T){return x.size===XQ&&x.clear(),T}),x=g.cache;return g}var ZQ=QQ,JQ=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,tZ=/\\(\\)?/g,eZ=ZQ(function(y){var g=[];return y.charCodeAt(0)===46&&g.push(""),y.replace(JQ,function(x,T,A,D){g.push(A?D.replace(tZ,"$1"):T||x)}),g}),zF=eZ;function nZ(y,g){for(var x=-1,T=y==null?0:y.length,A=Array(T);++x<T;)A[x]=g(y[x],x,y);return A}var qF=nZ,rZ=1/0,HF=Zl?Zl.prototype:void 0,GF=HF?HF.toString:void 0;function VF(y){if(typeof y=="string")return y;if(HT(y))return qF(y,VF)+"";if(kr(y))return GF?GF.call(y):"";var g=y+"";return g=="0"&&1/y==-rZ?"-0":g}var iZ=VF;function sZ(y){return y==null?"":iZ(y)}var UT=sZ;function NL(y,g){return HT(y)?y:PX(y,g)?[y]:zF(UT(y))}var WT=NL,aZ=1/0;function oZ(y){if(typeof y=="string"||kr(y))return y;var g=y+"";return g=="0"&&1/y==-aZ?"-0":g}var PL=oZ;function cZ(y,g){g=WT(g,y);for(var x=0,T=g.length;y!=null&&x<T;)y=y[PL(g[x++])];return x&&x==T?y:void 0}var uZ=cZ;function UF(y,g,x){var T=y==null?void 0:uZ(y,g);return T===void 0?x:T}var lZ=UF,hZ=function(){try{var y=DL(Object,"defineProperty");return y({},"",{}),y}catch{}}(),fZ=hZ;function dZ(y,g,x){g=="__proto__"&&fZ?fZ(y,g,{configurable:!0,enumerable:!0,value:x,writable:!0}):y[g]=x}var gZ=dZ,pZ=Object.prototype,bZ=pZ.hasOwnProperty;function vZ(y,g,x){var T=y[g];(!(bZ.call(y,g)&&jF(T,x))||x===void 0&&!(g in y))&&gZ(y,g,x)}var wZ=vZ,mZ=9007199254740991,pg=/^(?:0|[1-9]\d*)$/;function yZ(y,g){var x=typeof y;return g=g??mZ,!!g&&(x=="number"||x!="symbol"&&pg.test(y))&&y>-1&&y%1==0&&y<g}var wm=yZ;function WF(y,g,x,T){if(!Ee(y))return y;g=WT(g,y);for(var A=-1,D=g.length,O=D-1,$=y;$!=null&&++A<D;){var q=PL(g[A]),S=x;if(q==="__proto__"||q==="constructor"||q==="prototype")return y;if(A!=O){var G=$[q];S=T?T(G,q,$):void 0,S===void 0&&(S=Ee(G)?G:wm(g[A+1])?[]:{})}wZ($,q,S),$=$[q]}return y}var xZ=WF;function kZ(y,g,x){return y==null?y:xZ(y,g,x)}var EZ=kZ;function TZ(y,g){var x=-1,T=y.length;for(g||(g=Array(T));++x<T;)g[x]=y[x];return g}var CZ=TZ;function _Z(y){return HT(y)?qF(y,PL):kr(y)?[y]:CZ(zF(UT(y)))}var SZ=_Z,AZ={data:function(g){var x={field:"data",bindingEvent:"data",allowBinding:!1,allowSetting:!1,allowGetting:!1,settingEvent:"data",settingTriggersEvent:!1,triggerFnName:"trigger",immutableKeys:{},updateStyle:!1,beforeGet:function(A){},beforeSet:function(A,D){},onSet:function(A){},canSet:function(A){return!0}};return g=me({},x,g),function(A,D){var O=g,$=this,q=$.length!==void 0,S=q?$:[$],G=q?$[0]:$;if(mt(A)){var W=A.indexOf(".")!==-1,et=W&&SZ(A);if(O.allowGetting&&D===void 0){var at;return G&&(O.beforeGet(G),et&&G._private[O.field][A]===void 0?at=lZ(G._private[O.field],et):at=G._private[O.field][A]),at}else if(O.allowSetting&&D!==void 0){var lt=!O.immutableKeys[A];if(lt){var ft=b({},A,D);O.beforeSet($,ft);for(var At=0,kt=S.length;At<kt;At++){var Mt=S[At];O.canSet(Mt)&&(et&&G._private[O.field][A]===void 0?EZ(Mt._private[O.field],et,D):Mt._private[O.field][A]=D)}O.updateStyle&&$.updateStyle(),O.onSet($),O.settingTriggersEvent&&$[O.triggerFnName](O.settingEvent)}}}else if(O.allowSetting&&ht(A)){var Dt=A,jt,Zt,Kt=Object.keys(Dt);O.beforeSet($,Dt);for(var zt=0;zt<Kt.length;zt++){jt=Kt[zt],Zt=Dt[jt];var ee=!O.immutableKeys[jt];if(ee)for(var Vt=0;Vt<S.length;Vt++){var fe=S[Vt];O.canSet(fe)&&(fe._private[O.field][jt]=Zt)}}O.updateStyle&&$.updateStyle(),O.onSet($),O.settingTriggersEvent&&$[O.triggerFnName](O.settingEvent)}else if(O.allowBinding&&yt(A)){var ge=A;$.on(O.bindingEvent,ge)}else if(O.allowGetting&&A===void 0){var ne;return G&&(O.beforeGet(G),ne=G._private[O.field]),ne}return $}},removeData:function(g){var x={field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!1,immutableKeys:{}};return g=me({},x,g),function(A){var D=g,O=this,$=O.length!==void 0,q=$?O:[O];if(mt(A)){for(var S=A.split(/\s+/),G=S.length,W=0;W<G;W++){var et=S[W];if(!Z(et)){var at=!D.immutableKeys[et];if(at)for(var lt=0,ft=q.length;lt<ft;lt++)q[lt]._private[D.field][et]=void 0}}D.triggerEvent&&O[D.triggerFnName](D.event)}else if(A===void 0){for(var At=0,kt=q.length;At<kt;At++)for(var Mt=q[At]._private[D.field],Dt=Object.keys(Mt),jt=0;jt<Dt.length;jt++){var Zt=Dt[jt],Kt=!D.immutableKeys[Zt];Kt&&(Mt[Zt]=void 0)}D.triggerEvent&&O[D.triggerFnName](D.event)}return O}}},LZ={eventAliasesOn:function(g){var x=g;x.addListener=x.listen=x.bind=x.on,x.unlisten=x.unbind=x.off=x.removeListener,x.trigger=x.emit,x.pon=x.promiseOn=function(T,A){var D=this,O=Array.prototype.slice.call(arguments,0);return new K5(function($,q){var S=function(at){D.off.apply(D,W),$(at)},G=O.concat([S]),W=G.concat([]);D.on.apply(D,G)})}}},Ac={};[MX,AZ,LZ].forEach(function(y){me(Ac,y)});var MZ={animate:Ac.animate(),animation:Ac.animation(),animated:Ac.animated(),clearQueue:Ac.clearQueue(),delay:Ac.delay(),delayAnimation:Ac.delayAnimation(),stop:Ac.stop()},KT={classes:function(g){var x=this;if(g===void 0){var T=[];return x[0]._private.classes.forEach(function(lt){return T.push(lt)}),T}else dt(g)||(g=(g||"").match(/\S+/g)||[]);for(var A=[],D=new z5(g),O=0;O<x.length;O++){for(var $=x[O],q=$._private,S=q.classes,G=!1,W=0;W<g.length;W++){var et=g[W],at=S.has(et);if(!at){G=!0;break}}G||(G=S.size!==g.length),G&&(q.classes=D,A.push($))}return A.length>0&&this.spawn(A).updateStyle().emit("class"),x},addClass:function(g){return this.toggleClass(g,!0)},hasClass:function(g){var x=this[0];return x!=null&&x._private.classes.has(g)},toggleClass:function(g,x){dt(g)||(g=g.match(/\S+/g)||[]);for(var T=this,A=x===void 0,D=[],O=0,$=T.length;O<$;O++)for(var q=T[O],S=q._private.classes,G=!1,W=0;W<g.length;W++){var et=g[W],at=S.has(et),lt=!1;x||A&&!at?(S.add(et),lt=!0):(!x||A&&at)&&(S.delete(et),lt=!0),!G&&lt&&(D.push(q),G=!0)}return D.length>0&&this.spawn(D).updateStyle().emit("class"),T},removeClass:function(g){return this.toggleClass(g,!1)},flashClass:function(g,x){var T=this;if(x==null)x=250;else if(x===0)return T;return T.addClass(g),setTimeout(function(){T.removeClass(g)},x),T}};KT.className=KT.classNames=KT.classes;var tc={metaChar:"[\\!\\\"\\#\\$\\%\\&\\'\\(\\)\\*\\+\\,\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\]\\^\\`\\{\\|\\}\\~]",comparatorOp:"=|\\!=|>|>=|<|<=|\\$=|\\^=|\\*=",boolOp:"\\?|\\!|\\^",string:`"(?:\\\\"|[^"])*"|'(?:\\\\'|[^'])*'`,number:Ke,meta:"degree|indegree|outdegree",separator:"\\s*,\\s*",descendant:"\\s+",child:"\\s+>\\s+",subject:"\\$",group:"node|edge|\\*",directedEdge:"\\s+->\\s+",undirectedEdge:"\\s+<->\\s+"};tc.variable="(?:[\\w-.]|(?:\\\\"+tc.metaChar+"))+",tc.className="(?:[\\w-]|(?:\\\\"+tc.metaChar+"))+",tc.value=tc.string+"|"+tc.number,tc.id=tc.variable,function(){var y,g,x;for(y=tc.comparatorOp.split("|"),x=0;x<y.length;x++)g=y[x],tc.comparatorOp+="|@"+g;for(y=tc.comparatorOp.split("|"),x=0;x<y.length;x++)g=y[x],!(g.indexOf("!")>=0)&&g!=="="&&(tc.comparatorOp+="|\\!"+g)}();var Kc=function(){return{checks:[]}},zi={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},FL=[{selector:":selected",matches:function(g){return g.selected()}},{selector:":unselected",matches:function(g){return!g.selected()}},{selector:":selectable",matches:function(g){return g.selectable()}},{selector:":unselectable",matches:function(g){return!g.selectable()}},{selector:":locked",matches:function(g){return g.locked()}},{selector:":unlocked",matches:function(g){return!g.locked()}},{selector:":visible",matches:function(g){return g.visible()}},{selector:":hidden",matches:function(g){return!g.visible()}},{selector:":transparent",matches:function(g){return g.transparent()}},{selector:":grabbed",matches:function(g){return g.grabbed()}},{selector:":free",matches:function(g){return!g.grabbed()}},{selector:":removed",matches:function(g){return g.removed()}},{selector:":inside",matches:function(g){return!g.removed()}},{selector:":grabbable",matches:function(g){return g.grabbable()}},{selector:":ungrabbable",matches:function(g){return!g.grabbable()}},{selector:":animated",matches:function(g){return g.animated()}},{selector:":unanimated",matches:function(g){return!g.animated()}},{selector:":parent",matches:function(g){return g.isParent()}},{selector:":childless",matches:function(g){return g.isChildless()}},{selector:":child",matches:function(g){return g.isChild()}},{selector:":orphan",matches:function(g){return g.isOrphan()}},{selector:":nonorphan",matches:function(g){return g.isChild()}},{selector:":compound",matches:function(g){return g.isNode()?g.isParent():g.source().isParent()||g.target().isParent()}},{selector:":loop",matches:function(g){return g.isLoop()}},{selector:":simple",matches:function(g){return g.isSimple()}},{selector:":active",matches:function(g){return g.active()}},{selector:":inactive",matches:function(g){return!g.active()}},{selector:":backgrounding",matches:function(g){return g.backgrounding()}},{selector:":nonbackgrounding",matches:function(g){return!g.backgrounding()}}].sort(function(y,g){return Ne(y.selector,g.selector)}),IZ=function(){for(var y={},g,x=0;x<FL.length;x++)g=FL[x],y[g.selector]=g.matches;return y}(),DZ=function(g,x){return IZ[g](x)},OZ="("+FL.map(function(y){return y.selector}).join("|")+")",Z5=function(g){return g.replace(new RegExp("\\\\("+tc.metaChar+")","g"),function(x,T){return T})},mm=function(g,x,T){g[g.length-1]=T},Ue=[{name:"group",query:!0,regex:"("+tc.group+")",populate:function(g,x,T){var A=E(T,1),D=A[0];x.checks.push({type:zi.GROUP,value:D==="*"?D:D+"s"})}},{name:"state",query:!0,regex:OZ,populate:function(g,x,T){var A=E(T,1),D=A[0];x.checks.push({type:zi.STATE,value:D})}},{name:"id",query:!0,regex:"\\#("+tc.id+")",populate:function(g,x,T){var A=E(T,1),D=A[0];x.checks.push({type:zi.ID,value:Z5(D)})}},{name:"className",query:!0,regex:"\\.("+tc.className+")",populate:function(g,x,T){var A=E(T,1),D=A[0];x.checks.push({type:zi.CLASS,value:Z5(D)})}},{name:"dataExists",query:!0,regex:"\\[\\s*("+tc.variable+")\\s*\\]",populate:function(g,x,T){var A=E(T,1),D=A[0];x.checks.push({type:zi.DATA_EXIST,field:Z5(D)})}},{name:"dataCompare",query:!0,regex:"\\[\\s*("+tc.variable+")\\s*("+tc.comparatorOp+")\\s*("+tc.value+")\\s*\\]",populate:function(g,x,T){var A=E(T,3),D=A[0],O=A[1],$=A[2],q=new RegExp("^"+tc.string+"$").exec($)!=null;q?$=$.substring(1,$.length-1):$=parseFloat($),x.checks.push({type:zi.DATA_COMPARE,field:Z5(D),operator:O,value:$})}},{name:"dataBool",query:!0,regex:"\\[\\s*("+tc.boolOp+")\\s*("+tc.variable+")\\s*\\]",populate:function(g,x,T){var A=E(T,2),D=A[0],O=A[1];x.checks.push({type:zi.DATA_BOOL,field:Z5(O),operator:D})}},{name:"metaCompare",query:!0,regex:"\\[\\[\\s*("+tc.meta+")\\s*("+tc.comparatorOp+")\\s*("+tc.number+")\\s*\\]\\]",populate:function(g,x,T){var A=E(T,3),D=A[0],O=A[1],$=A[2];x.checks.push({type:zi.META_COMPARE,field:Z5(D),operator:O,value:parseFloat($)})}},{name:"nextQuery",separator:!0,regex:tc.separator,populate:function(g,x){var T=g.currentSubject,A=g.edgeCount,D=g.compoundCount,O=g[g.length-1];T!=null&&(O.subject=T,g.currentSubject=null),O.edgeCount=A,O.compoundCount=D,g.edgeCount=0,g.compoundCount=0;var $=g[g.length++]=Kc();return $}},{name:"directedEdge",separator:!0,regex:tc.directedEdge,populate:function(g,x){if(g.currentSubject==null){var T=Kc(),A=x,D=Kc();return T.checks.push({type:zi.DIRECTED_EDGE,source:A,target:D}),mm(g,x,T),g.edgeCount++,D}else{var O=Kc(),$=x,q=Kc();return O.checks.push({type:zi.NODE_SOURCE,source:$,target:q}),mm(g,x,O),g.edgeCount++,q}}},{name:"undirectedEdge",separator:!0,regex:tc.undirectedEdge,populate:function(g,x){if(g.currentSubject==null){var T=Kc(),A=x,D=Kc();return T.checks.push({type:zi.UNDIRECTED_EDGE,nodes:[A,D]}),mm(g,x,T),g.edgeCount++,D}else{var O=Kc(),$=x,q=Kc();return O.checks.push({type:zi.NODE_NEIGHBOR,node:$,neighbor:q}),mm(g,x,O),q}}},{name:"child",separator:!0,regex:tc.child,populate:function(g,x){if(g.currentSubject==null){var T=Kc(),A=Kc(),D=g[g.length-1];return T.checks.push({type:zi.CHILD,parent:D,child:A}),mm(g,x,T),g.compoundCount++,A}else if(g.currentSubject===x){var O=Kc(),$=g[g.length-1],q=Kc(),S=Kc(),G=Kc(),W=Kc();return O.checks.push({type:zi.COMPOUND_SPLIT,left:$,right:q,subject:S}),S.checks=x.checks,x.checks=[{type:zi.TRUE}],W.checks.push({type:zi.TRUE}),q.checks.push({type:zi.PARENT,parent:W,child:G}),mm(g,$,O),g.currentSubject=S,g.compoundCount++,G}else{var et=Kc(),at=Kc(),lt=[{type:zi.PARENT,parent:et,child:at}];return et.checks=x.checks,x.checks=lt,g.compoundCount++,at}}},{name:"descendant",separator:!0,regex:tc.descendant,populate:function(g,x){if(g.currentSubject==null){var T=Kc(),A=Kc(),D=g[g.length-1];return T.checks.push({type:zi.DESCENDANT,ancestor:D,descendant:A}),mm(g,x,T),g.compoundCount++,A}else if(g.currentSubject===x){var O=Kc(),$=g[g.length-1],q=Kc(),S=Kc(),G=Kc(),W=Kc();return O.checks.push({type:zi.COMPOUND_SPLIT,left:$,right:q,subject:S}),S.checks=x.checks,x.checks=[{type:zi.TRUE}],W.checks.push({type:zi.TRUE}),q.checks.push({type:zi.ANCESTOR,ancestor:W,descendant:G}),mm(g,$,O),g.currentSubject=S,g.compoundCount++,G}else{var et=Kc(),at=Kc(),lt=[{type:zi.ANCESTOR,ancestor:et,descendant:at}];return et.checks=x.checks,x.checks=lt,g.compoundCount++,at}}},{name:"subject",modifier:!0,regex:tc.subject,populate:function(g,x){if(g.currentSubject!=null&&g.currentSubject!==x)return Sc("Redefinition of subject in selector `"+g.toString()+"`"),!1;g.currentSubject=x;var T=g[g.length-1],A=T.checks[0],D=A==null?null:A.type;D===zi.DIRECTED_EDGE?A.type=zi.NODE_TARGET:D===zi.UNDIRECTED_EDGE&&(A.type=zi.NODE_NEIGHBOR,A.node=A.nodes[1],A.neighbor=A.nodes[0],A.nodes=null)}}];Ue.forEach(function(y){return y.regexObj=new RegExp("^"+y.regex)});var NZ=function(g){for(var x,T,A,D=0;D<Ue.length;D++){var O=Ue[D],$=O.name,q=g.match(O.regexObj);if(q!=null){T=q,x=O,A=$;var S=q[0];g=g.substring(S.length);break}}return{expr:x,match:T,name:A,remaining:g}},PZ=function(g){var x=g.match(/^\s+/);if(x){var T=x[0];g=g.substring(T.length)}return g},FZ=function(g){var x=this,T=x.inputText=g,A=x[0]=Kc();for(x.length=1,T=PZ(T);;){var D=NZ(T);if(D.expr==null)return Sc("The selector `"+g+"`is invalid"),!1;var O=D.match.slice(1),$=D.expr.populate(x,A,O);if($===!1)return!1;if($!=null&&(A=$),T=D.remaining,T.match(/^\s*$/))break}var q=x[x.length-1];x.currentSubject!=null&&(q.subject=x.currentSubject),q.edgeCount=x.edgeCount,q.compoundCount=x.compoundCount;for(var S=0;S<x.length;S++){var G=x[S];if(G.compoundCount>0&&G.edgeCount>0)return Sc("The selector `"+g+"` is invalid because it uses both a compound selector and an edge selector"),!1;if(G.edgeCount>1)return Sc("The selector `"+g+"` is invalid because it uses multiple edge selectors"),!1;G.edgeCount===1&&Sc("The selector `"+g+"` 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},BZ=function(){if(this.toStringCache!=null)return this.toStringCache;for(var g=function(G){return G??""},x=function(G){return mt(G)?'"'+G+'"':g(G)},T=function(G){return" "+G+" "},A=function(G,W){var et=G.type,at=G.value;switch(et){case zi.GROUP:{var lt=g(at);return lt.substring(0,lt.length-1)}case zi.DATA_COMPARE:{var ft=G.field,At=G.operator;return"["+ft+T(g(At))+x(at)+"]"}case zi.DATA_BOOL:{var kt=G.operator,Mt=G.field;return"["+g(kt)+Mt+"]"}case zi.DATA_EXIST:{var Dt=G.field;return"["+Dt+"]"}case zi.META_COMPARE:{var jt=G.operator,Zt=G.field;return"[["+Zt+T(g(jt))+x(at)+"]]"}case zi.STATE:return at;case zi.ID:return"#"+at;case zi.CLASS:return"."+at;case zi.PARENT:case zi.CHILD:return D(G.parent,W)+T(">")+D(G.child,W);case zi.ANCESTOR:case zi.DESCENDANT:return D(G.ancestor,W)+" "+D(G.descendant,W);case zi.COMPOUND_SPLIT:{var Kt=D(G.left,W),zt=D(G.subject,W),ee=D(G.right,W);return Kt+(Kt.length>0?" ":"")+zt+ee}case zi.TRUE:return""}},D=function(G,W){return G.checks.reduce(function(et,at,lt){return et+(W===G&&lt===0?"$":"")+A(at,W)},"")},O="",$=0;$<this.length;$++){var q=this[$];O+=D(q,q.subject),this.length>1&&$<this.length-1&&(O+=", ")}return this.toStringCache=O,O},RZ={parse:FZ,toString:BZ},KF=function(g,x,T){var A,D=mt(g),O=X(g),$=mt(T),q,S,G=!1,W=!1,et=!1;switch(x.indexOf("!")>=0&&(x=x.replace("!",""),W=!0),x.indexOf("@")>=0&&(x=x.replace("@",""),G=!0),(D||$||G)&&(q=!D&&!O?"":""+g,S=""+T),G&&(g=q=q.toLowerCase(),T=S=S.toLowerCase()),x){case"*=":A=q.indexOf(S)>=0;break;case"$=":A=q.indexOf(S,q.length-S.length)>=0;break;case"^=":A=q.indexOf(S)===0;break;case"=":A=g===T;break;case">":et=!0,A=g>T;break;case">=":et=!0,A=g>=T;break;case"<":et=!0,A=g<T;break;case"<=":et=!0,A=g<=T;break;default:A=!1;break}return W&&(g!=null||!et)&&(A=!A),A},jZ=function(g,x){switch(x){case"?":return!!g;case"!":return!g;case"^":return g===void 0}},$Z=function(g){return g!==void 0},BL=function(g,x){return g.data(x)},zZ=function(g,x){return g[x]()},Wu=[],Mu=function(g,x){return g.checks.every(function(T){return Wu[T.type](T,x)})};Wu[zi.GROUP]=function(y,g){var x=y.value;return x==="*"||x===g.group()},Wu[zi.STATE]=function(y,g){var x=y.value;return DZ(x,g)},Wu[zi.ID]=function(y,g){var x=y.value;return g.id()===x},Wu[zi.CLASS]=function(y,g){var x=y.value;return g.hasClass(x)},Wu[zi.META_COMPARE]=function(y,g){var x=y.field,T=y.operator,A=y.value;return KF(zZ(g,x),T,A)},Wu[zi.DATA_COMPARE]=function(y,g){var x=y.field,T=y.operator,A=y.value;return KF(BL(g,x),T,A)},Wu[zi.DATA_BOOL]=function(y,g){var x=y.field,T=y.operator;return jZ(BL(g,x),T)},Wu[zi.DATA_EXIST]=function(y,g){var x=y.field;return y.operator,$Z(BL(g,x))},Wu[zi.UNDIRECTED_EDGE]=function(y,g){var x=y.nodes[0],T=y.nodes[1],A=g.source(),D=g.target();return Mu(x,A)&&Mu(T,D)||Mu(T,A)&&Mu(x,D)},Wu[zi.NODE_NEIGHBOR]=function(y,g){return Mu(y.node,g)&&g.neighborhood().some(function(x){return x.isNode()&&Mu(y.neighbor,x)})},Wu[zi.DIRECTED_EDGE]=function(y,g){return Mu(y.source,g.source())&&Mu(y.target,g.target())},Wu[zi.NODE_SOURCE]=function(y,g){return Mu(y.source,g)&&g.outgoers().some(function(x){return x.isNode()&&Mu(y.target,x)})},Wu[zi.NODE_TARGET]=function(y,g){return Mu(y.target,g)&&g.incomers().some(function(x){return x.isNode()&&Mu(y.source,x)})},Wu[zi.CHILD]=function(y,g){return Mu(y.child,g)&&Mu(y.parent,g.parent())},Wu[zi.PARENT]=function(y,g){return Mu(y.parent,g)&&g.children().some(function(x){return Mu(y.child,x)})},Wu[zi.DESCENDANT]=function(y,g){return Mu(y.descendant,g)&&g.ancestors().some(function(x){return Mu(y.ancestor,x)})},Wu[zi.ANCESTOR]=function(y,g){return Mu(y.ancestor,g)&&g.descendants().some(function(x){return Mu(y.descendant,x)})},Wu[zi.COMPOUND_SPLIT]=function(y,g){return Mu(y.subject,g)&&Mu(y.left,g)&&Mu(y.right,g)},Wu[zi.TRUE]=function(){return!0},Wu[zi.COLLECTION]=function(y,g){var x=y.value;return x.has(g)},Wu[zi.FILTER]=function(y,g){var x=y.value;return x(g)};var qZ=function(g){var x=this;if(x.length===1&&x[0].checks.length===1&&x[0].checks[0].type===zi.ID)return g.getElementById(x[0].checks[0].value).collection();var T=function(D){for(var O=0;O<x.length;O++){var $=x[O];if(Mu($,D))return!0}return!1};return x.text()==null&&(T=function(){return!0}),g.filter(T)},HZ=function(g){for(var x=this,T=0;T<x.length;T++){var A=x[T];if(Mu(A,g))return!0}return!1},GZ={matches:HZ,filter:qZ},ym=function(g){this.inputText=g,this.currentSubject=null,this.compoundCount=0,this.edgeCount=0,this.length=0,g==null||mt(g)&&g.match(/^\s*$/)||(xt(g)?this.addQuery({checks:[{type:zi.COLLECTION,value:g.collection()}]}):yt(g)?this.addQuery({checks:[{type:zi.FILTER,value:g}]}):mt(g)?this.parse(g)||(this.invalid=!0):bl("A selector must be created from a string; found "))},fv=ym.prototype;[RZ,GZ].forEach(function(y){return me(fv,y)}),fv.text=function(){return this.inputText},fv.size=function(){return this.length},fv.eq=function(y){return this[y]},fv.sameText=function(y){return!this.invalid&&!y.invalid&&this.text()===y.text()},fv.addQuery=function(y){this[this.length++]=y},fv.selector=fv.toString;var vp={allAre:function(g){var x=new ym(g);return this.every(function(T){return x.matches(T)})},is:function(g){var x=new ym(g);return this.some(function(T){return x.matches(T)})},some:function(g,x){for(var T=0;T<this.length;T++){var A=x?g.apply(x,[this[T],T,this]):g(this[T],T,this);if(A)return!0}return!1},every:function(g,x){for(var T=0;T<this.length;T++){var A=x?g.apply(x,[this[T],T,this]):g(this[T],T,this);if(!A)return!1}return!0},same:function(g){if(this===g)return!0;g=this.cy().collection(g);var x=this.length,T=g.length;return x!==T?!1:x===1?this[0]===g[0]:this.every(function(A){return g.hasElementWithId(A.id())})},anySame:function(g){return g=this.cy().collection(g),this.some(function(x){return g.hasElementWithId(x.id())})},allAreNeighbors:function(g){g=this.cy().collection(g);var x=this.neighborhood();return g.every(function(T){return x.hasElementWithId(T.id())})},contains:function(g){g=this.cy().collection(g);var x=this;return g.every(function(T){return x.hasElementWithId(T.id())})}};vp.allAreNeighbours=vp.allAreNeighbors,vp.has=vp.contains,vp.equal=vp.equals=vp.same;var rd=function(g,x){return function(A,D,O,$){var q=A,S=this,G;if(q==null?G="":xt(q)&&q.length===1&&(G=q.id()),S.length===1&&G){var W=S[0]._private,et=W.traversalCache=W.traversalCache||{},at=et[x]=et[x]||[],lt=td(G),ft=at[lt];return ft||(at[lt]=g.call(S,A,D,O,$))}else return g.call(S,A,D,O,$)}},J5={parent:function(g){var x=[];if(this.length===1){var T=this[0]._private.parent;if(T)return T}for(var A=0;A<this.length;A++){var D=this[A],O=D._private.parent;O&&x.push(O)}return this.spawn(x,!0).filter(g)},parents:function(g){for(var x=[],T=this.parent();T.nonempty();){for(var A=0;A<T.length;A++){var D=T[A];x.push(D)}T=T.parent()}return this.spawn(x,!0).filter(g)},commonAncestors:function(g){for(var x,T=0;T<this.length;T++){var A=this[T],D=A.parents();x=x||D,x=x.intersect(D)}return x.filter(g)},orphans:function(g){return this.stdFilter(function(x){return x.isOrphan()}).filter(g)},nonorphans:function(g){return this.stdFilter(function(x){return x.isChild()}).filter(g)},children:rd(function(y){for(var g=[],x=0;x<this.length;x++)for(var T=this[x],A=T._private.children,D=0;D<A.length;D++)g.push(A[D]);return this.spawn(g,!0).filter(y)},"children"),siblings:function(g){return this.parent().children().not(this).filter(g)},isParent:function(){var g=this[0];if(g)return g.isNode()&&g._private.children.length!==0},isChildless:function(){var g=this[0];if(g)return g.isNode()&&g._private.children.length===0},isChild:function(){var g=this[0];if(g)return g.isNode()&&g._private.parent!=null},isOrphan:function(){var g=this[0];if(g)return g.isNode()&&g._private.parent==null},descendants:function(g){var x=[];function T(A){for(var D=0;D<A.length;D++){var O=A[D];x.push(O),O.children().nonempty()&&T(O.children())}}return T(this.children()),this.spawn(x,!0).filter(g)}};function YT(y,g,x,T){for(var A=[],D=new z5,O=y.cy(),$=O.hasCompoundNodes(),q=0;q<y.length;q++){var S=y[q];x?A.push(S):$&&T(A,D,S)}for(;A.length>0;){var G=A.shift();g(G),D.add(G.id()),$&&T(A,D,G)}return y}function Tk(y,g,x){if(x.isParent())for(var T=x._private.children,A=0;A<T.length;A++){var D=T[A];g.has(D.id())||y.push(D)}}J5.forEachDown=function(y){var g=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return YT(this,y,g,Tk)};function YF(y,g,x){if(x.isChild()){var T=x._private.parent;g.has(T.id())||y.push(T)}}J5.forEachUp=function(y){var g=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return YT(this,y,g,YF)};function VZ(y,g,x){YF(y,g,x),Tk(y,g,x)}J5.forEachUpAndDown=function(y){var g=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return YT(this,y,g,VZ)},J5.ancestors=J5.parents;var Ck,XF;Ck=XF={data:Ac.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:Ac.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),scratch:Ac.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:Ac.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),rscratch:Ac.data({field:"rscratch",allowBinding:!1,allowSetting:!0,settingTriggersEvent:!1,allowGetting:!0}),removeRscratch:Ac.removeData({field:"rscratch",triggerEvent:!1}),id:function(){var g=this[0];if(g)return g._private.data.id}},Ck.attr=Ck.data,Ck.removeAttr=Ck.removeData;var UZ=XF,XT={};function tx(y){return function(g){var x=this;if(g===void 0&&(g=!0),x.length!==0)if(x.isNode()&&!x.removed()){for(var T=0,A=x[0],D=A._private.edges,O=0;O<D.length;O++){var $=D[O];!g&&$.isLoop()||(T+=y(A,$))}return T}else return}}me(XT,{degree:tx(function(y,g){return g.source().same(g.target())?2:1}),indegree:tx(function(y,g){return g.target().same(y)?1:0}),outdegree:tx(function(y,g){return g.source().same(y)?1:0})});function ex(y,g){return function(x){for(var T,A=this.nodes(),D=0;D<A.length;D++){var O=A[D],$=O[y](x);$!==void 0&&(T===void 0||g($,T))&&(T=$)}return T}}me(XT,{minDegree:ex("degree",function(y,g){return y<g}),maxDegree:ex("degree",function(y,g){return y>g}),minIndegree:ex("indegree",function(y,g){return y<g}),maxIndegree:ex("indegree",function(y,g){return y>g}),minOutdegree:ex("outdegree",function(y,g){return y<g}),maxOutdegree:ex("outdegree",function(y,g){return y>g})}),me(XT,{totalDegree:function(g){for(var x=0,T=this.nodes(),A=0;A<T.length;A++)x+=T[A].degree(g);return x}});var wp,QF,_k=function(g,x,T){for(var A=0;A<g.length;A++){var D=g[A];if(!D.locked()){var O=D._private.position,$={x:x.x!=null?x.x-O.x:0,y:x.y!=null?x.y-O.y:0};D.isParent()&&!($.x===0&&$.y===0)&&D.children().shift($,T),D.dirtyBoundingBoxCache()}}},ZF={field:"position",bindingEvent:"position",allowBinding:!0,allowSetting:!0,settingEvent:"position",settingTriggersEvent:!0,triggerFnName:"emitAndNotify",allowGetting:!0,validKeys:["x","y"],beforeGet:function(g){g.updateCompoundBounds()},beforeSet:function(g,x){_k(g,x,!1)},onSet:function(g){g.dirtyCompoundBoundsCache()},canSet:function(g){return!g.locked()}};wp=QF={position:Ac.data(ZF),silentPosition:Ac.data(me({},ZF,{allowBinding:!1,allowSetting:!0,settingTriggersEvent:!1,allowGetting:!1,beforeSet:function(g,x){_k(g,x,!0)},onSet:function(g){g.dirtyCompoundBoundsCache()}})),positions:function(g,x){if(ht(g))x?this.silentPosition(g):this.position(g);else if(yt(g)){var T=g,A=this.cy();A.startBatch();for(var D=0;D<this.length;D++){var O=this[D],$=void 0;($=T(O,D))&&(x?O.silentPosition($):O.position($))}A.endBatch()}return this},silentPositions:function(g){return this.positions(g,!0)},shift:function(g,x,T){var A;if(ht(g)?(A={x:X(g.x)?g.x:0,y:X(g.y)?g.y:0},T=x):mt(g)&&X(x)&&(A={x:0,y:0},A[g]=x),A!=null){var D=this.cy();D.startBatch();for(var O=0;O<this.length;O++){var $=this[O];if(!(D.hasCompoundNodes()&&$.isChild()&&$.ancestors().anySame(this))){var q=$.position(),S={x:q.x+A.x,y:q.y+A.y};T?$.silentPosition(S):$.position(S)}}D.endBatch()}return this},silentShift:function(g,x){return ht(g)?this.shift(g,!0):mt(g)&&X(x)&&this.shift(g,x,!0),this},renderedPosition:function(g,x){var T=this[0],A=this.cy(),D=A.zoom(),O=A.pan(),$=ht(g)?g:void 0,q=$!==void 0||x!==void 0&&mt(g);if(T&&T.isNode())if(q)for(var S=0;S<this.length;S++){var G=this[S];x!==void 0?G.position(g,(x-O[g])/D):$!==void 0&&G.position(QP($,D,O))}else{var W=T.position();return $=OT(W,D,O),g===void 0?$:$[g]}else if(!q)return;return this},relativePosition:function(g,x){var T=this[0],A=this.cy(),D=ht(g)?g:void 0,O=D!==void 0||x!==void 0&&mt(g),$=A.hasCompoundNodes();if(T&&T.isNode())if(O)for(var q=0;q<this.length;q++){var S=this[q],G=$?S.parent():null,W=G&&G.length>0,et=W;W&&(G=G[0]);var at=et?G.position():{x:0,y:0};x!==void 0?S.position(g,x+at[g]):D!==void 0&&S.position({x:D.x+at.x,y:D.y+at.y})}else{var lt=T.position(),ft=$?T.parent():null,At=ft&&ft.length>0,kt=At;At&&(ft=ft[0]);var Mt=kt?ft.position():{x:0,y:0};return D={x:lt.x-Mt.x,y:lt.y-Mt.y},g===void 0?D:D[g]}else if(!O)return;return this}},wp.modelPosition=wp.point=wp.position,wp.modelPositions=wp.points=wp.positions,wp.renderedPoint=wp.renderedPosition,wp.relativePoint=wp.relativePosition;var JF=QF,nx,qb;nx=qb={},qb.renderedBoundingBox=function(y){var g=this.boundingBox(y),x=this.cy(),T=x.zoom(),A=x.pan(),D=g.x1*T+A.x,O=g.x2*T+A.x,$=g.y1*T+A.y,q=g.y2*T+A.y;return{x1:D,x2:O,y1:$,y2:q,w:O-D,h:q-$}},qb.dirtyCompoundBoundsCache=function(){var y=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,g=this.cy();return!g.styleEnabled()||!g.hasCompoundNodes()?this:(this.forEachUp(function(x){if(x.isParent()){var T=x._private;T.compoundBoundsClean=!1,T.bbCache=null,y||x.emitAndNotify("bounds")}}),this)},qb.updateCompoundBounds=function(){var y=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,g=this.cy();if(!g.styleEnabled()||!g.hasCompoundNodes())return this;if(!y&&g.batching())return this;function x(O){if(!O.isParent())return;var $=O._private,q=O.children(),S=O.pstyle("compound-sizing-wrt-labels").value==="include",G={width:{val:O.pstyle("min-width").pfValue,left:O.pstyle("min-width-bias-left"),right:O.pstyle("min-width-bias-right")},height:{val:O.pstyle("min-height").pfValue,top:O.pstyle("min-height-bias-top"),bottom:O.pstyle("min-height-bias-bottom")}},W=q.boundingBox({includeLabels:S,includeOverlays:!1,useCache:!1}),et=$.position;(W.w===0||W.h===0)&&(W={w:O.pstyle("width").pfValue,h:O.pstyle("height").pfValue},W.x1=et.x-W.w/2,W.x2=et.x+W.w/2,W.y1=et.y-W.h/2,W.y2=et.y+W.h/2);function at(Vt,fe,ge){var ne=0,Pe=0,pe=fe+ge;return Vt>0&&pe>0&&(ne=fe/pe*Vt,Pe=ge/pe*Vt),{biasDiff:ne,biasComplementDiff:Pe}}function lt(Vt,fe,ge,ne){if(ge.units==="%")switch(ne){case"width":return Vt>0?ge.pfValue*Vt:0;case"height":return fe>0?ge.pfValue*fe:0;case"average":return Vt>0&&fe>0?ge.pfValue*(Vt+fe)/2:0;case"min":return Vt>0&&fe>0?Vt>fe?ge.pfValue*fe:ge.pfValue*Vt:0;case"max":return Vt>0&&fe>0?Vt>fe?ge.pfValue*Vt:ge.pfValue*fe:0;default:return 0}else return ge.units==="px"?ge.pfValue:0}var ft=G.width.left.value;G.width.left.units==="px"&&G.width.val>0&&(ft=ft*100/G.width.val);var At=G.width.right.value;G.width.right.units==="px"&&G.width.val>0&&(At=At*100/G.width.val);var kt=G.height.top.value;G.height.top.units==="px"&&G.height.val>0&&(kt=kt*100/G.height.val);var Mt=G.height.bottom.value;G.height.bottom.units==="px"&&G.height.val>0&&(Mt=Mt*100/G.height.val);var Dt=at(G.width.val-W.w,ft,At),jt=Dt.biasDiff,Zt=Dt.biasComplementDiff,Kt=at(G.height.val-W.h,kt,Mt),zt=Kt.biasDiff,ee=Kt.biasComplementDiff;$.autoPadding=lt(W.w,W.h,O.pstyle("padding"),O.pstyle("padding-relative-to").value),$.autoWidth=Math.max(W.w,G.width.val),et.x=(-jt+W.x1+W.x2+Zt)/2,$.autoHeight=Math.max(W.h,G.height.val),et.y=(-zt+W.y1+W.y2+ee)/2}for(var T=0;T<this.length;T++){var A=this[T],D=A._private;(!D.compoundBoundsClean||y)&&(x(A),g.batching()||(D.compoundBoundsClean=!0))}return this};var C0=function(g){return g===1/0||g===-1/0?0:g},mp=function(g,x,T,A,D){A-x===0||D-T===0||x==null||T==null||A==null||D==null||(g.x1=x<g.x1?x:g.x1,g.x2=A>g.x2?A:g.x2,g.y1=T<g.y1?T:g.y1,g.y2=D>g.y2?D:g.y2,g.w=g.x2-g.x1,g.h=g.y2-g.y1)},S3=function(g,x){return x==null?g:mp(g,x.x1,x.y1,x.x2,x.y2)},Sk=function(g,x,T){return bp(g,x,T)},QT=function(g,x,T){if(!x.cy().headless()){var A=x._private,D=A.rstyle,O=D.arrowWidth/2,$=x.pstyle(T+"-arrow-shape").value,q,S;if($!=="none"){T==="source"?(q=D.srcX,S=D.srcY):T==="target"?(q=D.tgtX,S=D.tgtY):(q=D.midX,S=D.midY);var G=A.arrowBounds=A.arrowBounds||{},W=G[T]=G[T]||{};W.x1=q-O,W.y1=S-O,W.x2=q+O,W.y2=S+O,W.w=W.x2-W.x1,W.h=W.y2-W.y1,PT(W,1),mp(g,W.x1,W.y1,W.x2,W.y2)}}},tB=function(g,x,T){if(!x.cy().headless()){var A;T?A=T+"-":A="";var D=x._private,O=D.rstyle,$=x.pstyle(A+"label").strValue;if($){var q=x.pstyle("text-halign"),S=x.pstyle("text-valign"),G=Sk(O,"labelWidth",T),W=Sk(O,"labelHeight",T),et=Sk(O,"labelX",T),at=Sk(O,"labelY",T),lt=x.pstyle(A+"text-margin-x").pfValue,ft=x.pstyle(A+"text-margin-y").pfValue,At=x.isEdge(),kt=x.pstyle(A+"text-rotation"),Mt=x.pstyle("text-outline-width").pfValue,Dt=x.pstyle("text-border-width").pfValue,jt=Dt/2,Zt=x.pstyle("text-background-padding").pfValue,Kt=2,zt=W,ee=G,Vt=ee/2,fe=zt/2,ge,ne,Pe,pe;if(At)ge=et-Vt,ne=et+Vt,Pe=at-fe,pe=at+fe;else{switch(q.value){case"left":ge=et-ee,ne=et;break;case"center":ge=et-Vt,ne=et+Vt;break;case"right":ge=et,ne=et+ee;break}switch(S.value){case"top":Pe=at-zt,pe=at;break;case"center":Pe=at-fe,pe=at+fe;break;case"bottom":Pe=at,pe=at+zt;break}}ge+=lt-Math.max(Mt,jt)-Zt-Kt,ne+=lt+Math.max(Mt,jt)+Zt+Kt,Pe+=ft-Math.max(Mt,jt)-Zt-Kt,pe+=ft+Math.max(Mt,jt)+Zt+Kt;var bn=T||"main",ze=D.labelBounds,Ve=ze[bn]=ze[bn]||{};Ve.x1=ge,Ve.y1=Pe,Ve.x2=ne,Ve.y2=pe,Ve.w=ne-ge,Ve.h=pe-Pe;var En=At&&kt.strValue==="autorotate",Dn=kt.pfValue!=null&&kt.pfValue!==0;if(En||Dn){var Kn=En?Sk(D.rstyle,"labelAngle",T):kt.pfValue,Sn=Math.cos(Kn),Wn=Math.sin(Kn),rr=(ge+ne)/2,vr=(Pe+pe)/2;if(!At){switch(q.value){case"left":rr=ne;break;case"right":rr=ge;break}switch(S.value){case"top":vr=pe;break;case"bottom":vr=Pe;break}}var ur=function(ka,Ci){return ka=ka-rr,Ci=Ci-vr,{x:ka*Sn-Ci*Wn+rr,y:ka*Wn+Ci*Sn+vr}},tr=ur(ge,Pe),wn=ur(ge,pe),gr=ur(ne,Pe),fr=ur(ne,pe);ge=Math.min(tr.x,wn.x,gr.x,fr.x),ne=Math.max(tr.x,wn.x,gr.x,fr.x),Pe=Math.min(tr.y,wn.y,gr.y,fr.y),pe=Math.max(tr.y,wn.y,gr.y,fr.y)}var Jr=bn+"Rot",wi=ze[Jr]=ze[Jr]||{};wi.x1=ge,wi.y1=Pe,wi.x2=ne,wi.y2=pe,wi.w=ne-ge,wi.h=pe-Pe,mp(g,ge,Pe,ne,pe),mp(D.labelBounds.all,ge,Pe,ne,pe)}return g}},WZ=function(g,x){var T=g._private.cy,A=T.styleEnabled(),D=T.headless(),O=Rd(),$=g._private,q=g.isNode(),S=g.isEdge(),G,W,et,at,lt,ft,At=$.rstyle,kt=q&&A?g.pstyle("bounds-expansion").pfValue:[0],Mt=function(gs){return gs.pstyle("display").value!=="none"},Dt=!A||Mt(g)&&(!S||Mt(g.source())&&Mt(g.target()));if(Dt){var jt=0,Zt=0;A&&x.includeOverlays&&(jt=g.pstyle("overlay-opacity").value,jt!==0&&(Zt=g.pstyle("overlay-padding").value));var Kt=0,zt=0;A&&x.includeUnderlays&&(Kt=g.pstyle("underlay-opacity").value,Kt!==0&&(zt=g.pstyle("underlay-padding").value));var ee=Math.max(Zt,zt),Vt=0,fe=0;if(A&&(Vt=g.pstyle("width").pfValue,fe=Vt/2),q&&x.includeNodes){var ge=g.position();lt=ge.x,ft=ge.y;var ne=g.outerWidth(),Pe=ne/2,pe=g.outerHeight(),bn=pe/2;G=lt-Pe,W=lt+Pe,et=ft-bn,at=ft+bn,mp(O,G,et,W,at)}else if(S&&x.includeEdges)if(A&&!D){var ze=g.pstyle("curve-style").strValue;if(G=Math.min(At.srcX,At.midX,At.tgtX),W=Math.max(At.srcX,At.midX,At.tgtX),et=Math.min(At.srcY,At.midY,At.tgtY),at=Math.max(At.srcY,At.midY,At.tgtY),G-=fe,W+=fe,et-=fe,at+=fe,mp(O,G,et,W,at),ze==="haystack"){var Ve=At.haystackPts;if(Ve&&Ve.length===2){if(G=Ve[0].x,et=Ve[0].y,W=Ve[1].x,at=Ve[1].y,G>W){var En=G;G=W,W=En}if(et>at){var Dn=et;et=at,at=Dn}mp(O,G-fe,et-fe,W+fe,at+fe)}}else if(ze==="bezier"||ze==="unbundled-bezier"||ze==="segments"||ze==="taxi"){var Kn;switch(ze){case"bezier":case"unbundled-bezier":Kn=At.bezierPts;break;case"segments":case"taxi":Kn=At.linePts;break}if(Kn!=null)for(var Sn=0;Sn<Kn.length;Sn++){var Wn=Kn[Sn];G=Wn.x-fe,W=Wn.x+fe,et=Wn.y-fe,at=Wn.y+fe,mp(O,G,et,W,at)}}}else{var rr=g.source(),vr=rr.position(),ur=g.target(),tr=ur.position();if(G=vr.x,W=tr.x,et=vr.y,at=tr.y,G>W){var wn=G;G=W,W=wn}if(et>at){var gr=et;et=at,at=gr}G-=fe,W+=fe,et-=fe,at+=fe,mp(O,G,et,W,at)}if(A&&x.includeEdges&&S&&(QT(O,g,"mid-source"),QT(O,g,"mid-target"),QT(O,g,"source"),QT(O,g,"target")),A){var fr=g.pstyle("ghost").value==="yes";if(fr){var Jr=g.pstyle("ghost-offset-x").pfValue,wi=g.pstyle("ghost-offset-y").pfValue;mp(O,O.x1+Jr,O.y1+wi,O.x2+Jr,O.y2+wi)}}var Ks=$.bodyBounds=$.bodyBounds||{};JP(Ks,O),kL(Ks,kt),PT(Ks,1),A&&(G=O.x1,W=O.x2,et=O.y1,at=O.y2,mp(O,G-ee,et-ee,W+ee,at+ee));var ka=$.overlayBounds=$.overlayBounds||{};JP(ka,O),kL(ka,kt),PT(ka,1);var Ci=$.labelBounds=$.labelBounds||{};Ci.all!=null?CY(Ci.all):Ci.all=Rd(),A&&x.includeLabels&&(x.includeMainLabels&&tB(O,g,null),S&&(x.includeSourceLabels&&tB(O,g,"source"),x.includeTargetLabels&&tB(O,g,"target")))}return O.x1=C0(O.x1),O.y1=C0(O.y1),O.x2=C0(O.x2),O.y2=C0(O.y2),O.w=C0(O.x2-O.x1),O.h=C0(O.y2-O.y1),O.w>0&&O.h>0&&Dt&&(kL(O,kt),PT(O,1)),O},eB=function(g){var x=0,T=function(O){return(O?1:0)<<x++},A=0;return A+=T(g.incudeNodes),A+=T(g.includeEdges),A+=T(g.includeLabels),A+=T(g.includeMainLabels),A+=T(g.includeSourceLabels),A+=T(g.includeTargetLabels),A+=T(g.includeOverlays),A},nB=function(g){if(g.isEdge()){var x=g.source().position(),T=g.target().position(),A=function(O){return Math.round(O)};return l1([A(x.x),A(x.y),A(T.x),A(T.y)])}else return 0},rB=function(g,x){var T=g._private,A,D=g.isEdge(),O=x==null?iB:eB(x),$=O===iB,q=nB(g),S=T.bbCachePosKey===q,G=x.useCache&&S,W=function(ft){return ft._private.bbCache==null||ft._private.styleDirty},et=!G||W(g)||D&&W(g.source())||W(g.target());if(et?(S||g.recalculateRenderedStyle(G),A=WZ(g,Ak),T.bbCache=A,T.bbCachePosKey=q):A=T.bbCache,!$){var at=g.isNode();A=Rd(),(x.includeNodes&&at||x.includeEdges&&!at)&&(x.includeOverlays?S3(A,T.overlayBounds):S3(A,T.bodyBounds)),x.includeLabels&&(x.includeMainLabels&&(!D||x.includeSourceLabels&&x.includeTargetLabels)?S3(A,T.labelBounds.all):(x.includeMainLabels&&S3(A,T.labelBounds.mainRot),x.includeSourceLabels&&S3(A,T.labelBounds.sourceRot),x.includeTargetLabels&&S3(A,T.labelBounds.targetRot))),A.w=A.x2-A.x1,A.h=A.y2-A.y1}return A},Ak={includeNodes:!0,includeEdges:!0,includeLabels:!0,includeMainLabels:!0,includeSourceLabels:!0,includeTargetLabels:!0,includeOverlays:!0,includeUnderlays:!0,useCache:!0},iB=eB(Ak),sB=Bf(Ak);qb.boundingBox=function(y){var g;if(this.length===1&&this[0]._private.bbCache!=null&&!this[0]._private.styleDirty&&(y===void 0||y.useCache===void 0||y.useCache===!0))y===void 0?y=Ak:y=sB(y),g=rB(this[0],y);else{g=Rd(),y=y||Ak;var x=sB(y),T=this,A=T.cy(),D=A.styleEnabled();if(D)for(var O=0;O<T.length;O++){var $=T[O],q=$._private,S=nB($),G=q.bbCachePosKey===S,W=x.useCache&&G&&!q.styleDirty;$.recalculateRenderedStyle(W)}this.updateCompoundBounds(!y.useCache);for(var et=0;et<T.length;et++){var at=T[et];S3(g,rB(at,x))}}return g.x1=C0(g.x1),g.y1=C0(g.y1),g.x2=C0(g.x2),g.y2=C0(g.y2),g.w=C0(g.x2-g.x1),g.h=C0(g.y2-g.y1),g},qb.dirtyBoundingBoxCache=function(){for(var y=0;y<this.length;y++){var g=this[y]._private;g.bbCache=null,g.bbCachePosKey=null,g.bodyBounds=null,g.overlayBounds=null,g.labelBounds.all=null,g.labelBounds.source=null,g.labelBounds.target=null,g.labelBounds.main=null,g.labelBounds.sourceRot=null,g.labelBounds.targetRot=null,g.labelBounds.mainRot=null,g.arrowBounds.source=null,g.arrowBounds.target=null,g.arrowBounds["mid-source"]=null,g.arrowBounds["mid-target"]=null}return this.emitAndNotify("bounds"),this},qb.boundingBoxAt=function(y){var g=this.nodes(),x=this.cy(),T=x.hasCompoundNodes(),A=x.collection();if(T&&(A=g.filter(function(S){return S.isParent()}),g=g.not(A)),ht(y)){var D=y;y=function(){return D}}var O=function(G,W){return G._private.bbAtOldPos=y(G,W)},$=function(G){return G._private.bbAtOldPos};x.startBatch(),g.forEach(O).silentPositions(y),T&&(A.dirtyCompoundBoundsCache(),A.dirtyBoundingBoxCache(),A.updateCompoundBounds(!0));var q=TY(this.boundingBox({useCache:!1}));return g.silentPositions($),T&&(A.dirtyCompoundBoundsCache(),A.dirtyBoundingBoxCache(),A.updateCompoundBounds(!0)),x.endBatch(),q},nx.boundingbox=nx.bb=nx.boundingBox,nx.renderedBoundingbox=nx.renderedBoundingBox;var KZ=qb,Lk,Mk;Lk=Mk={};var xm=function(g){g.uppercaseName=Ge(g.name),g.autoName="auto"+g.uppercaseName,g.labelName="label"+g.uppercaseName,g.outerName="outer"+g.uppercaseName,g.uppercaseOuterName=Ge(g.outerName),Lk[g.name]=function(){var T=this[0],A=T._private,D=A.cy,O=D._private.styleEnabled;if(T)if(O){if(T.isParent())return T.updateCompoundBounds(),A[g.autoName]||0;var $=T.pstyle(g.name);switch($.strValue){case"label":return T.recalculateRenderedStyle(),A.rstyle[g.labelName]||0;default:return $.pfValue}}else return 1},Lk["outer"+g.uppercaseName]=function(){var T=this[0],A=T._private,D=A.cy,O=D._private.styleEnabled;if(T)if(O){var $=T[g.name](),q=T.pstyle("border-width").pfValue,S=2*T.padding();return $+q+S}else return 1},Lk["rendered"+g.uppercaseName]=function(){var T=this[0];if(T){var A=T[g.name]();return A*this.cy().zoom()}},Lk["rendered"+g.uppercaseOuterName]=function(){var T=this[0];if(T){var A=T[g.outerName]();return A*this.cy().zoom()}}};xm({name:"width"}),xm({name:"height"}),Mk.padding=function(){var y=this[0],g=y._private;return y.isParent()?(y.updateCompoundBounds(),g.autoPadding!==void 0?g.autoPadding:y.pstyle("padding").pfValue):y.pstyle("padding").pfValue},Mk.paddedHeight=function(){var y=this[0];return y.height()+2*y.padding()},Mk.paddedWidth=function(){var y=this[0];return y.width()+2*y.padding()};var RL=Mk,YZ=function(g,x){if(g.isEdge())return x(g)},XZ=function(g,x){if(g.isEdge()){var T=g.cy();return OT(x(g),T.zoom(),T.pan())}},QZ=function(g,x){if(g.isEdge()){var T=g.cy(),A=T.pan(),D=T.zoom();return x(g).map(function(O){return OT(O,D,A)})}},ZZ=function(g){return g.renderer().getControlPoints(g)},JZ=function(g){return g.renderer().getSegmentPoints(g)},tJ=function(g){return g.renderer().getSourceEndpoint(g)},eJ=function(g){return g.renderer().getTargetEndpoint(g)},nJ=function(g){return g.renderer().getEdgeMidpoint(g)},aB={controlPoints:{get:ZZ,mult:!0},segmentPoints:{get:JZ,mult:!0},sourceEndpoint:{get:tJ},targetEndpoint:{get:eJ},midpoint:{get:nJ}},rJ=function(g){return"rendered"+g[0].toUpperCase()+g.substr(1)},iJ=Object.keys(aB).reduce(function(y,g){var x=aB[g],T=rJ(g);return y[g]=function(){return YZ(this,x.get)},x.mult?y[T]=function(){return QZ(this,x.get)}:y[T]=function(){return XZ(this,x.get)},y},{}),sJ=me({},JF,KZ,RL,iJ);/*!
    	  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
    	  */var oB=function(g,x){this.recycle(g,x)};function Ik(){return!1}function ZT(){return!0}oB.prototype={instanceString:function(){return"event"},recycle:function(g,x){if(this.isImmediatePropagationStopped=this.isPropagationStopped=this.isDefaultPrevented=Ik,g!=null&&g.preventDefault?(this.type=g.type,this.isDefaultPrevented=g.defaultPrevented?ZT:Ik):g!=null&&g.type?x=g:this.type=g,x!=null&&(this.originalEvent=x.originalEvent,this.type=x.type!=null?x.type:this.type,this.cy=x.cy,this.target=x.target,this.position=x.position,this.renderedPosition=x.renderedPosition,this.namespace=x.namespace,this.layout=x.layout),this.cy!=null&&this.position!=null&&this.renderedPosition==null){var T=this.position,A=this.cy.zoom(),D=this.cy.pan();this.renderedPosition={x:T.x*A+D.x,y:T.y*A+D.y}}this.timeStamp=g&&g.timeStamp||Date.now()},preventDefault:function(){this.isDefaultPrevented=ZT;var g=this.originalEvent;g&&g.preventDefault&&g.preventDefault()},stopPropagation:function(){this.isPropagationStopped=ZT;var g=this.originalEvent;g&&g.stopPropagation&&g.stopPropagation()},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=ZT,this.stopPropagation()},isDefaultPrevented:Ik,isPropagationStopped:Ik,isImmediatePropagationStopped:Ik};var cB=/^([^.]+)(\.(?:[^.]+))?$/,aJ=".*",uB={qualifierCompare:function(g,x){return g===x},eventMatches:function(){return!0},addEventFields:function(){},callbackContext:function(g){return g},beforeEmit:function(){},afterEmit:function(){},bubble:function(){return!1},parent:function(){return null},context:null},lB=Object.keys(uB),oJ={};function JT(){for(var y=arguments.length>0&&arguments[0]!==void 0?arguments[0]:oJ,g=arguments.length>1?arguments[1]:void 0,x=0;x<lB.length;x++){var T=lB[x];this[T]=y[T]||uB[T]}this.context=g||this.context,this.listeners=[],this.emitting=0}var km=JT.prototype,hB=function(g,x,T,A,D,O,$){yt(A)&&(D=A,A=null),$&&(O==null?O=$:O=me({},O,$));for(var q=dt(T)?T:T.split(/\s+/),S=0;S<q.length;S++){var G=q[S];if(!Z(G)){var W=G.match(cB);if(W){var et=W[1],at=W[2]?W[2]:null,lt=x(g,G,et,at,A,D,O);if(lt===!1)break}}}},fB=function(g,x){return g.addEventFields(g.context,x),new oB(x.type,x)},cJ=function(g,x,T){if(Ct(T)){x(g,T);return}else if(ht(T)){x(g,fB(g,T));return}for(var A=dt(T)?T:T.split(/\s+/),D=0;D<A.length;D++){var O=A[D];if(!Z(O)){var $=O.match(cB);if($){var q=$[1],S=$[2]?$[2]:null,G=fB(g,{type:q,namespace:S,target:g.context});x(g,G)}}}};km.on=km.addListener=function(y,g,x,T,A){return hB(this,function(D,O,$,q,S,G,W){yt(G)&&D.listeners.push({event:O,callback:G,type:$,namespace:q,qualifier:S,conf:W})},y,g,x,T,A),this},km.one=function(y,g,x,T){return this.on(y,g,x,T,{one:!0})},km.removeListener=km.off=function(y,g,x,T){var A=this;this.emitting!==0&&(this.listeners=ZK(this.listeners));for(var D=this.listeners,O=function(S){var G=D[S];hB(A,function(W,et,at,lt,ft,At){if((G.type===at||y==="*")&&(!lt&&G.namespace!==".*"||G.namespace===lt)&&(!ft||W.qualifierCompare(G.qualifier,ft))&&(!At||G.callback===At))return D.splice(S,1),!1},y,g,x,T)},$=D.length-1;$>=0;$--)O($);return this},km.removeAllListeners=function(){return this.removeListener("*")},km.emit=km.trigger=function(y,g,x){var T=this.listeners,A=T.length;return this.emitting++,dt(g)||(g=[g]),cJ(this,function(D,O){x!=null&&(T=[{event:O.event,type:O.type,namespace:O.namespace,callback:x}],A=T.length);for(var $=function(G){var W=T[G];if(W.type===O.type&&(!W.namespace||W.namespace===O.namespace||W.namespace===aJ)&&D.eventMatches(D.context,W,O)){var et=[O];g!=null&&YP(et,g),D.beforeEmit(D.context,W,O),W.conf&&W.conf.one&&(D.listeners=D.listeners.filter(function(ft){return ft!==W}));var at=D.callbackContext(D.context,W,O),lt=W.callback.apply(at,et);D.afterEmit(D.context,W,O),lt===!1&&(O.stopPropagation(),O.preventDefault())}},q=0;q<A;q++)$(q);D.bubble(D.context)&&!O.isPropagationStopped()&&D.parent(D.context).emit(O,g)},y),this.emitting--,this};var uJ={qualifierCompare:function(g,x){return g==null||x==null?g==null&&x==null:g.sameText(x)},eventMatches:function(g,x,T){var A=x.qualifier;return A!=null?g!==T.target&&nt(T.target)&&A.matches(T.target):!0},addEventFields:function(g,x){x.cy=g.cy(),x.target=g},callbackContext:function(g,x,T){return x.qualifier!=null?T.target:g},beforeEmit:function(g,x){x.conf&&x.conf.once&&x.conf.onceCollection.removeListener(x.event,x.qualifier,x.callback)},bubble:function(){return!0},parent:function(g){return g.isChild()?g.parent():g.cy()}},t9=function(g){return mt(g)?new ym(g):g},dB={createEmitter:function(){for(var g=0;g<this.length;g++){var x=this[g],T=x._private;T.emitter||(T.emitter=new JT(uJ,x))}return this},emitter:function(){return this._private.emitter},on:function(g,x,T){for(var A=t9(x),D=0;D<this.length;D++){var O=this[D];O.emitter().on(g,A,T)}return this},removeListener:function(g,x,T){for(var A=t9(x),D=0;D<this.length;D++){var O=this[D];O.emitter().removeListener(g,A,T)}return this},removeAllListeners:function(){for(var g=0;g<this.length;g++){var x=this[g];x.emitter().removeAllListeners()}return this},one:function(g,x,T){for(var A=t9(x),D=0;D<this.length;D++){var O=this[D];O.emitter().one(g,A,T)}return this},once:function(g,x,T){for(var A=t9(x),D=0;D<this.length;D++){var O=this[D];O.emitter().on(g,A,T,{once:!0,onceCollection:this})}},emit:function(g,x){for(var T=0;T<this.length;T++){var A=this[T];A.emitter().emit(g,x)}return this},emitAndNotify:function(g,x){if(this.length!==0)return this.cy().notify(g,this),this.emit(g,x),this}};Ac.eventAliasesOn(dB);var gB={nodes:function(g){return this.filter(function(x){return x.isNode()}).filter(g)},edges:function(g){return this.filter(function(x){return x.isEdge()}).filter(g)},byGroup:function(){for(var g=this.spawn(),x=this.spawn(),T=0;T<this.length;T++){var A=this[T];A.isNode()?g.push(A):x.push(A)}return{nodes:g,edges:x}},filter:function(g,x){if(g===void 0)return this;if(mt(g)||xt(g))return new ym(g).filter(this);if(yt(g)){for(var T=this.spawn(),A=this,D=0;D<A.length;D++){var O=A[D],$=x?g.apply(x,[O,D,A]):g(O,D,A);$&&T.push(O)}return T}return this.spawn()},not:function(g){if(g){mt(g)&&(g=this.filter(g));for(var x=this.spawn(),T=0;T<this.length;T++){var A=this[T],D=g.has(A);D||x.push(A)}return x}else return this},absoluteComplement:function(){var g=this.cy();return g.mutableElements().not(this)},intersect:function(g){if(mt(g)){var x=g;return this.filter(x)}for(var T=this.spawn(),A=this,D=g,O=this.length<g.length,$=O?A:D,q=O?D:A,S=0;S<$.length;S++){var G=$[S];q.has(G)&&T.push(G)}return T},xor:function(g){var x=this._private.cy;mt(g)&&(g=x.$(g));var T=this.spawn(),A=this,D=g,O=function(q,S){for(var G=0;G<q.length;G++){var W=q[G],et=W._private.data.id,at=S.hasElementWithId(et);at||T.push(W)}};return O(A,D),O(D,A),T},diff:function(g){var x=this._private.cy;mt(g)&&(g=x.$(g));var T=this.spawn(),A=this.spawn(),D=this.spawn(),O=this,$=g,q=function(G,W,et){for(var at=0;at<G.length;at++){var lt=G[at],ft=lt._private.data.id,At=W.hasElementWithId(ft);At?D.merge(lt):et.push(lt)}};return q(O,$,T),q($,O,A),{left:T,right:A,both:D}},add:function(g){var x=this._private.cy;if(!g)return this;if(mt(g)){var T=g;g=x.mutableElements().filter(T)}for(var A=this.spawnSelf(),D=0;D<g.length;D++){var O=g[D],$=!this.has(O);$&&A.push(O)}return A},merge:function(g){var x=this._private,T=x.cy;if(!g)return this;if(g&&mt(g)){var A=g;g=T.mutableElements().filter(A)}for(var D=x.map,O=0;O<g.length;O++){var $=g[O],q=$._private.data.id,S=!D.has(q);if(S){var G=this.length++;this[G]=$,D.set(q,{ele:$,index:G})}}return this},unmergeAt:function(g){var x=this[g],T=x.id(),A=this._private,D=A.map;this[g]=void 0,D.delete(T);var O=g===this.length-1;if(this.length>1&&!O){var $=this.length-1,q=this[$],S=q._private.data.id;this[$]=void 0,this[g]=q,D.set(S,{ele:q,index:g})}return this.length--,this},unmergeOne:function(g){g=g[0];var x=this._private,T=g._private.data.id,A=x.map,D=A.get(T);if(!D)return this;var O=D.index;return this.unmergeAt(O),this},unmerge:function(g){var x=this._private.cy;if(!g)return this;if(g&&mt(g)){var T=g;g=x.mutableElements().filter(T)}for(var A=0;A<g.length;A++)this.unmergeOne(g[A]);return this},unmergeBy:function(g){for(var x=this.length-1;x>=0;x--){var T=this[x];g(T)&&this.unmergeAt(x)}return this},map:function(g,x){for(var T=[],A=this,D=0;D<A.length;D++){var O=A[D],$=x?g.apply(x,[O,D,A]):g(O,D,A);T.push($)}return T},reduce:function(g,x){for(var T=x,A=this,D=0;D<A.length;D++)T=g(T,A[D],D,A);return T},max:function(g,x){for(var T=-1/0,A,D=this,O=0;O<D.length;O++){var $=D[O],q=x?g.apply(x,[$,O,D]):g($,O,D);q>T&&(T=q,A=$)}return{value:T,ele:A}},min:function(g,x){for(var T=1/0,A,D=this,O=0;O<D.length;O++){var $=D[O],q=x?g.apply(x,[$,O,D]):g($,O,D);q<T&&(T=q,A=$)}return{value:T,ele:A}}},uc=gB;uc.u=uc["|"]=uc["+"]=uc.union=uc.or=uc.add,uc["\\"]=uc["!"]=uc["-"]=uc.difference=uc.relativeComplement=uc.subtract=uc.not,uc.n=uc["&"]=uc["."]=uc.and=uc.intersection=uc.intersect,uc["^"]=uc["(+)"]=uc["(-)"]=uc.symmetricDifference=uc.symdiff=uc.xor,uc.fnFilter=uc.filterFn=uc.stdFilter=uc.filter,uc.complement=uc.abscomp=uc.absoluteComplement;var lJ={isNode:function(){return this.group()==="nodes"},isEdge:function(){return this.group()==="edges"},isLoop:function(){return this.isEdge()&&this.source()[0]===this.target()[0]},isSimple:function(){return this.isEdge()&&this.source()[0]!==this.target()[0]},group:function(){var g=this[0];if(g)return g._private.group}},pB=function(g,x){var T=g.cy(),A=T.hasCompoundNodes();function D(G){var W=G.pstyle("z-compound-depth");return W.value==="auto"?A?G.zDepth():0:W.value==="bottom"?-1:W.value==="top"?$5:0}var O=D(g)-D(x);if(O!==0)return O;function $(G){var W=G.pstyle("z-index-compare");return W.value==="auto"&&G.isNode()?1:0}var q=$(g)-$(x);if(q!==0)return q;var S=g.pstyle("z-index").value-x.pstyle("z-index").value;return S!==0?S:g.poolIndex()-x.poolIndex()},e9={forEach:function(g,x){if(yt(g))for(var T=this.length,A=0;A<T;A++){var D=this[A],O=x?g.apply(x,[D,A,this]):g(D,A,this);if(O===!1)break}return this},toArray:function(){for(var g=[],x=0;x<this.length;x++)g.push(this[x]);return g},slice:function(g,x){var T=[],A=this.length;x==null&&(x=A),g==null&&(g=0),g<0&&(g=A+g),x<0&&(x=A+x);for(var D=g;D>=0&&D<x&&D<A;D++)T.push(this[D]);return this.spawn(T)},size:function(){return this.length},eq:function(g){return this[g]||this.spawn()},first:function(){return this[0]||this.spawn()},last:function(){return this[this.length-1]||this.spawn()},empty:function(){return this.length===0},nonempty:function(){return!this.empty()},sort:function(g){if(!yt(g))return this;var x=this.toArray().sort(g);return this.spawn(x)},sortByZIndex:function(){return this.sort(pB)},zDepth:function(){var g=this[0];if(g){var x=g._private,T=x.group;if(T==="nodes"){var A=x.data.parent?g.parents().size():0;return g.isParent()?A:$5-1}else{var D=x.source,O=x.target,$=D.zDepth(),q=O.zDepth();return Math.max($,q,0)}}}};e9.each=e9.forEach;var hJ=function(){var g="undefined",x=(typeof Symbol>"u"?"undefined":f(Symbol))!=g&&f(Symbol.iterator)!=g;x&&(e9[Symbol.iterator]=function(){var T=this,A={value:void 0,done:!1},D=0,O=this.length;return b({next:function(){return D<O?A.value=T[D++]:(A.value=void 0,A.done=!0),A}},Symbol.iterator,function(){return this})})};hJ();var fJ=Bf({nodeDimensionsIncludeLabels:!1}),n9={layoutDimensions:function(g){g=fJ(g);var x;if(!this.takesUpSpace())x={w:0,h:0};else if(g.nodeDimensionsIncludeLabels){var T=this.boundingBox();x={w:T.w,h:T.h}}else x={w:this.outerWidth(),h:this.outerHeight()};return(x.w===0||x.h===0)&&(x.w=x.h=1),x},layoutPositions:function(g,x,T){var A=this.nodes().filter(function(Zt){return!Zt.isParent()}),D=this.cy(),O=x.eles,$=function(Kt){return Kt.id()},q=ke(T,$);g.emit({type:"layoutstart",layout:g}),g.animations=[];var S=function(Kt,zt,ee){var Vt={x:zt.x1+zt.w/2,y:zt.y1+zt.h/2},fe={x:(ee.x-Vt.x)*Kt,y:(ee.y-Vt.y)*Kt};return{x:Vt.x+fe.x,y:Vt.y+fe.y}},G=x.spacingFactor&&x.spacingFactor!==1,W=function(){if(!G)return null;for(var Kt=Rd(),zt=0;zt<A.length;zt++){var ee=A[zt],Vt=q(ee,zt);SY(Kt,Vt.x,Vt.y)}return Kt},et=W(),at=ke(function(Zt,Kt){var zt=q(Zt,Kt);if(G){var ee=Math.abs(x.spacingFactor);zt=S(ee,et,zt)}return x.transform!=null&&(zt=x.transform(Zt,zt)),zt},$);if(x.animate){for(var lt=0;lt<A.length;lt++){var ft=A[lt],At=at(ft,lt),kt=x.animateFilter==null||x.animateFilter(ft,lt);if(kt){var Mt=ft.animation({position:At,duration:x.animationDuration,easing:x.animationEasing});g.animations.push(Mt)}else ft.position(At)}if(x.fit){var Dt=D.animation({fit:{boundingBox:O.boundingBoxAt(at),padding:x.padding},duration:x.animationDuration,easing:x.animationEasing});g.animations.push(Dt)}else if(x.zoom!==void 0&&x.pan!==void 0){var jt=D.animation({zoom:x.zoom,pan:x.pan,duration:x.animationDuration,easing:x.animationEasing});g.animations.push(jt)}g.animations.forEach(function(Zt){return Zt.play()}),g.one("layoutready",x.ready),g.emit({type:"layoutready",layout:g}),K5.all(g.animations.map(function(Zt){return Zt.promise()})).then(function(){g.one("layoutstop",x.stop),g.emit({type:"layoutstop",layout:g})})}else A.positions(at),x.fit&&D.fit(x.eles,x.padding),x.zoom!=null&&D.zoom(x.zoom),x.pan&&D.pan(x.pan),g.one("layoutready",x.ready),g.emit({type:"layoutready",layout:g}),g.one("layoutstop",x.stop),g.emit({type:"layoutstop",layout:g});return this},layout:function(g){var x=this.cy();return x.makeLayout(me({},g,{eles:this}))}};n9.createLayout=n9.makeLayout=n9.layout;function bB(y,g,x){var T=x._private,A=T.styleCache=T.styleCache||[],D;return(D=A[y])!=null||(D=A[y]=g(x)),D}function r9(y,g){return y=td(y),function(T){return bB(y,g,T)}}function i9(y,g){y=td(y);var x=function(A){return g.call(A)};return function(){var A=this[0];if(A)return bB(y,x,A)}}var Rf={recalculateRenderedStyle:function(g){var x=this.cy(),T=x.renderer(),A=x.styleEnabled();return T&&A&&T.recalculateRenderedStyle(this,g),this},dirtyStyleCache:function(){var g=this.cy(),x=function(D){return D._private.styleCache=null};if(g.hasCompoundNodes()){var T;T=this.spawnSelf().merge(this.descendants()).merge(this.parents()),T.merge(T.connectedEdges()),T.forEach(x)}else this.forEach(function(A){x(A),A.connectedEdges().forEach(x)});return this},updateStyle:function(g){var x=this._private.cy;if(!x.styleEnabled())return this;if(x.batching()){var T=x._private.batchStyleEles;return T.merge(this),this}var A=x.hasCompoundNodes(),D=this;g=!!(g||g===void 0),A&&(D=this.spawnSelf().merge(this.descendants()).merge(this.parents()));var O=D;return g?O.emitAndNotify("style"):O.emit("style"),D.forEach(function($){return $._private.styleDirty=!0}),this},cleanStyle:function(){var g=this.cy();if(g.styleEnabled())for(var x=0;x<this.length;x++){var T=this[x];T._private.styleDirty&&(T._private.styleDirty=!1,g.style().apply(T))}},parsedStyle:function(g){var x=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,T=this[0],A=T.cy();if(A.styleEnabled()&&T){this.cleanStyle();var D=T._private.style[g];return D??(x?A.style().getDefaultProperty(g):null)}},numericStyle:function(g){var x=this[0];if(x.cy().styleEnabled()&&x){var T=x.pstyle(g);return T.pfValue!==void 0?T.pfValue:T.value}},numericStyleUnits:function(g){var x=this[0];if(x.cy().styleEnabled()&&x)return x.pstyle(g).units},renderedStyle:function(g){var x=this.cy();if(!x.styleEnabled())return this;var T=this[0];if(T)return x.style().getRenderedStyle(T,g)},style:function(g,x){var T=this.cy();if(!T.styleEnabled())return this;var A=!1,D=T.style();if(ht(g)){var O=g;D.applyBypass(this,O,A),this.emitAndNotify("style")}else if(mt(g))if(x===void 0){var $=this[0];return $?D.getStylePropertyValue($,g):void 0}else D.applyBypass(this,g,x,A),this.emitAndNotify("style");else if(g===void 0){var q=this[0];return q?D.getRawStyle(q):void 0}return this},removeStyle:function(g){var x=this.cy();if(!x.styleEnabled())return this;var T=!1,A=x.style(),D=this;if(g===void 0)for(var O=0;O<D.length;O++){var $=D[O];A.removeAllBypasses($,T)}else{g=g.split(/\s+/);for(var q=0;q<D.length;q++){var S=D[q];A.removeBypasses(S,g,T)}}return this.emitAndNotify("style"),this},show:function(){return this.css("display","element"),this},hide:function(){return this.css("display","none"),this},effectiveOpacity:function(){var g=this.cy();if(!g.styleEnabled())return 1;var x=g.hasCompoundNodes(),T=this[0];if(T){var A=T._private,D=T.pstyle("opacity").value;if(!x)return D;var O=A.data.parent?T.parents():null;if(O)for(var $=0;$<O.length;$++){var q=O[$],S=q.pstyle("opacity").value;D=S*D}return D}},transparent:function(){var g=this.cy();if(!g.styleEnabled())return!1;var x=this[0],T=x.cy().hasCompoundNodes();if(x)return T?x.effectiveOpacity()===0:x.pstyle("opacity").value===0},backgrounding:function(){var g=this.cy();if(!g.styleEnabled())return!1;var x=this[0];return!!x._private.backgrounding}};function jL(y,g){var x=y._private,T=x.data.parent?y.parents():null;if(T)for(var A=0;A<T.length;A++){var D=T[A];if(!g(D))return!1}return!0}function $L(y){var g=y.ok,x=y.edgeOkViaNode||y.ok,T=y.parentOk||y.ok;return function(){var A=this.cy();if(!A.styleEnabled())return!0;var D=this[0],O=A.hasCompoundNodes();if(D){var $=D._private;if(!g(D))return!1;if(D.isNode())return!O||jL(D,T);var q=$.source,S=$.target;return x(q)&&(!O||jL(q,x))&&(q===S||x(S)&&(!O||jL(S,x)))}}}var rx=r9("eleTakesUpSpace",function(y){return y.pstyle("display").value==="element"&&y.width()!==0&&(y.isNode()?y.height()!==0:!0)});Rf.takesUpSpace=i9("takesUpSpace",$L({ok:rx}));var dJ=r9("eleInteractive",function(y){return y.pstyle("events").value==="yes"&&y.pstyle("visibility").value==="visible"&&rx(y)}),gJ=r9("parentInteractive",function(y){return y.pstyle("visibility").value==="visible"&&rx(y)});Rf.interactive=i9("interactive",$L({ok:dJ,parentOk:gJ,edgeOkViaNode:rx})),Rf.noninteractive=function(){var y=this[0];if(y)return!y.interactive()};var pJ=r9("eleVisible",function(y){return y.pstyle("visibility").value==="visible"&&y.pstyle("opacity").pfValue!==0&&rx(y)}),bJ=rx;Rf.visible=i9("visible",$L({ok:pJ,edgeOkViaNode:bJ})),Rf.hidden=function(){var y=this[0];if(y)return!y.visible()},Rf.isBundledBezier=i9("isBundledBezier",function(){return this.cy().styleEnabled()?!this.removed()&&this.pstyle("curve-style").value==="bezier"&&this.takesUpSpace():!1}),Rf.bypass=Rf.css=Rf.style,Rf.renderedCss=Rf.renderedStyle,Rf.removeBypass=Rf.removeCss=Rf.removeStyle,Rf.pstyle=Rf.parsedStyle;var Em={};function vB(y){return function(){var g=arguments,x=[];if(g.length===2){var T=g[0],A=g[1];this.on(y.event,T,A)}else if(g.length===1&&yt(g[0])){var D=g[0];this.on(y.event,D)}else if(g.length===0||g.length===1&&dt(g[0])){for(var O=g.length===1?g[0]:null,$=0;$<this.length;$++){var q=this[$],S=!y.ableField||q._private[y.ableField],G=q._private[y.field]!=y.value;if(y.overrideAble){var W=y.overrideAble(q);if(W!==void 0&&(S=W,!W))return this}S&&(q._private[y.field]=y.value,G&&x.push(q))}var et=this.spawn(x);et.updateStyle(),et.emit(y.event),O&&et.emit(O)}return this}}function ix(y){Em[y.field]=function(){var g=this[0];if(g){if(y.overrideField){var x=y.overrideField(g);if(x!==void 0)return x}return g._private[y.field]}},Em[y.on]=vB({event:y.on,field:y.field,ableField:y.ableField,overrideAble:y.overrideAble,value:!0}),Em[y.off]=vB({event:y.off,field:y.field,ableField:y.ableField,overrideAble:y.overrideAble,value:!1})}ix({field:"locked",overrideField:function(g){return g.cy().autolock()?!0:void 0},on:"lock",off:"unlock"}),ix({field:"grabbable",overrideField:function(g){return g.cy().autoungrabify()||g.pannable()?!1:void 0},on:"grabify",off:"ungrabify"}),ix({field:"selected",ableField:"selectable",overrideAble:function(g){return g.cy().autounselectify()?!1:void 0},on:"select",off:"unselect"}),ix({field:"selectable",overrideField:function(g){return g.cy().autounselectify()?!1:void 0},on:"selectify",off:"unselectify"}),Em.deselect=Em.unselect,Em.grabbed=function(){var y=this[0];if(y)return y._private.grabbed},ix({field:"active",on:"activate",off:"unactivate"}),ix({field:"pannable",on:"panify",off:"unpanify"}),Em.inactive=function(){var y=this[0];if(y)return!y._private.active};var h1={},wB=function(g){return function(T){for(var A=this,D=[],O=0;O<A.length;O++){var $=A[O];if($.isNode()){for(var q=!1,S=$.connectedEdges(),G=0;G<S.length;G++){var W=S[G],et=W.source(),at=W.target();if(g.noIncomingEdges&&at===$&&et!==$||g.noOutgoingEdges&&et===$&&at!==$){q=!0;break}}q||D.push($)}}return this.spawn(D,!0).filter(T)}},mB=function(g){return function(x){for(var T=this,A=[],D=0;D<T.length;D++){var O=T[D];if(O.isNode())for(var $=O.connectedEdges(),q=0;q<$.length;q++){var S=$[q],G=S.source(),W=S.target();g.outgoing&&G===O?(A.push(S),A.push(W)):g.incoming&&W===O&&(A.push(S),A.push(G))}}return this.spawn(A,!0).filter(x)}},yB=function(g){return function(x){for(var T=this,A=[],D={};;){var O=g.outgoing?T.outgoers():T.incomers();if(O.length===0)break;for(var $=!1,q=0;q<O.length;q++){var S=O[q],G=S.id();D[G]||(D[G]=!0,A.push(S),$=!0)}if(!$)break;T=O}return this.spawn(A,!0).filter(x)}};h1.clearTraversalCache=function(){for(var y=0;y<this.length;y++)this[y]._private.traversalCache=null},me(h1,{roots:wB({noIncomingEdges:!0}),leaves:wB({noOutgoingEdges:!0}),outgoers:rd(mB({outgoing:!0}),"outgoers"),successors:yB({outgoing:!0}),incomers:rd(mB({incoming:!0}),"incomers"),predecessors:yB({incoming:!0})}),me(h1,{neighborhood:rd(function(y){for(var g=[],x=this.nodes(),T=0;T<x.length;T++)for(var A=x[T],D=A.connectedEdges(),O=0;O<D.length;O++){var $=D[O],q=$.source(),S=$.target(),G=A===q?S:q;G.length>0&&g.push(G[0]),g.push($[0])}return this.spawn(g,!0).filter(y)},"neighborhood"),closedNeighborhood:function(g){return this.neighborhood().add(this).filter(g)},openNeighborhood:function(g){return this.neighborhood(g)}}),h1.neighbourhood=h1.neighborhood,h1.closedNeighbourhood=h1.closedNeighborhood,h1.openNeighbourhood=h1.openNeighborhood,me(h1,{source:rd(function(g){var x=this[0],T;return x&&(T=x._private.source||x.cy().collection()),T&&g?T.filter(g):T},"source"),target:rd(function(g){var x=this[0],T;return x&&(T=x._private.target||x.cy().collection()),T&&g?T.filter(g):T},"target"),sources:xB({attr:"source"}),targets:xB({attr:"target"})});function xB(y){return function(x){for(var T=[],A=0;A<this.length;A++){var D=this[A],O=D._private[y.attr];O&&T.push(O)}return this.spawn(T,!0).filter(x)}}me(h1,{edgesWith:rd(kB(),"edgesWith"),edgesTo:rd(kB({thisIsSrc:!0}),"edgesTo")});function kB(y){return function(x){var T=[],A=this._private.cy,D=y||{};mt(x)&&(x=A.$(x));for(var O=0;O<x.length;O++)for(var $=x[O]._private.edges,q=0;q<$.length;q++){var S=$[q],G=S._private.data,W=this.hasElementWithId(G.source)&&x.hasElementWithId(G.target),et=x.hasElementWithId(G.source)&&this.hasElementWithId(G.target),at=W||et;at&&((D.thisIsSrc||D.thisIsTgt)&&(D.thisIsSrc&&!W||D.thisIsTgt&&!et)||T.push(S))}return this.spawn(T,!0)}}me(h1,{connectedEdges:rd(function(y){for(var g=[],x=this,T=0;T<x.length;T++){var A=x[T];if(A.isNode())for(var D=A._private.edges,O=0;O<D.length;O++){var $=D[O];g.push($)}}return this.spawn(g,!0).filter(y)},"connectedEdges"),connectedNodes:rd(function(y){for(var g=[],x=this,T=0;T<x.length;T++){var A=x[T];A.isEdge()&&(g.push(A.source()[0]),g.push(A.target()[0]))}return this.spawn(g,!0).filter(y)},"connectedNodes"),parallelEdges:rd(EB(),"parallelEdges"),codirectedEdges:rd(EB({codirected:!0}),"codirectedEdges")});function EB(y){var g={codirected:!1};return y=me({},g,y),function(T){for(var A=[],D=this.edges(),O=y,$=0;$<D.length;$++)for(var q=D[$],S=q._private,G=S.source,W=G._private.data.id,et=S.data.target,at=G._private.edges,lt=0;lt<at.length;lt++){var ft=at[lt],At=ft._private.data,kt=At.target,Mt=At.source,Dt=kt===et&&Mt===W,jt=W===kt&&et===Mt;(O.codirected&&Dt||!O.codirected&&(Dt||jt))&&A.push(ft)}return this.spawn(A,!0).filter(T)}}me(h1,{components:function(g){var x=this,T=x.cy(),A=T.collection(),D=g==null?x.nodes():g.nodes(),O=[];g!=null&&D.empty()&&(D=g.sources());var $=function(G,W){A.merge(G),D.unmerge(G),W.merge(G)};if(D.empty())return x.spawn();var q=function(){var G=T.collection();O.push(G);var W=D[0];$(W,G),x.bfs({directed:!1,roots:W,visit:function(at){return $(at,G)}}),G.forEach(function(et){et.connectedEdges().forEach(function(at){x.has(at)&&G.has(at.source())&&G.has(at.target())&&G.merge(at)})})};do q();while(D.length>0);return O},component:function(){var g=this[0];return g.cy().mutableElements().components(g)[0]}}),h1.componentsOf=h1.components;var jf=function(g,x){var T=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,A=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1;if(g===void 0){bl("A collection must have a reference to the core");return}var D=new zb,O=!1;if(!x)x=[];else if(x.length>0&&ht(x[0])&&!nt(x[0])){O=!0;for(var $=[],q=new z5,S=0,G=x.length;S<G;S++){var W=x[S];W.data==null&&(W.data={});var et=W.data;if(et.id==null)et.id=IT();else if(g.hasElementWithId(et.id)||q.has(et.id))continue;var at=new DT(g,W,!1);$.push(at),q.add(et.id)}x=$}this.length=0;for(var lt=0,ft=x.length;lt<ft;lt++){var At=x[lt][0];if(At!=null){var kt=At._private.data.id;(!T||!D.has(kt))&&(T&&D.set(kt,{index:this.length,ele:At}),this[this.length]=At,this.length++)}}this._private={eles:this,cy:g,get map(){return this.lazyMap==null&&this.rebuildMap(),this.lazyMap},set map(Mt){this.lazyMap=Mt},rebuildMap:function(){for(var Dt=this.lazyMap=new zb,jt=this.eles,Zt=0;Zt<jt.length;Zt++){var Kt=jt[Zt];Dt.set(Kt.id(),{index:Zt,ele:Kt})}}},T&&(this._private.map=D),O&&!A&&this.restore()},hu=DT.prototype=jf.prototype=Object.create(Array.prototype);hu.instanceString=function(){return"collection"},hu.spawn=function(y,g){return new jf(this.cy(),y,g)},hu.spawnSelf=function(){return this.spawn(this)},hu.cy=function(){return this._private.cy},hu.renderer=function(){return this._private.cy.renderer()},hu.element=function(){return this[0]},hu.collection=function(){return Ot(this)?this:new jf(this._private.cy,[this])},hu.unique=function(){return new jf(this._private.cy,this,!0)},hu.hasElementWithId=function(y){return y=""+y,this._private.map.has(y)},hu.getElementById=function(y){y=""+y;var g=this._private.cy,x=this._private.map.get(y);return x?x.ele:new jf(g)},hu.$id=hu.getElementById,hu.poolIndex=function(){var y=this._private.cy,g=y._private.elements,x=this[0]._private.data.id;return g._private.map.get(x).index},hu.indexOf=function(y){var g=y[0]._private.data.id;return this._private.map.get(g).index},hu.indexOfId=function(y){return y=""+y,this._private.map.get(y).index},hu.json=function(y){var g=this.element(),x=this.cy();if(g==null&&y)return this;if(g!=null){var T=g._private;if(ht(y)){if(x.startBatch(),y.data){g.data(y.data);var A=T.data;if(g.isEdge()){var D=!1,O={},$=y.data.source,q=y.data.target;$!=null&&$!=A.source&&(O.source=""+$,D=!0),q!=null&&q!=A.target&&(O.target=""+q,D=!0),D&&(g=g.move(O))}else{var S="parent"in y.data,G=y.data.parent;S&&(G!=null||A.parent!=null)&&G!=A.parent&&(G===void 0&&(G=null),G!=null&&(G=""+G),g=g.move({parent:G}))}}y.position&&g.position(y.position);var W=function(ft,At,kt){var Mt=y[ft];Mt!=null&&Mt!==T[ft]&&(Mt?g[At]():g[kt]())};return W("removed","remove","restore"),W("selected","select","unselect"),W("selectable","selectify","unselectify"),W("locked","lock","unlock"),W("grabbable","grabify","ungrabify"),W("pannable","panify","unpanify"),y.classes!=null&&g.classes(y.classes),x.endBatch(),this}else if(y===void 0){var et={data:$b(T.data),position:$b(T.position),group:T.group,removed:T.removed,selected:T.selected,selectable:T.selectable,locked:T.locked,grabbable:T.grabbable,pannable:T.pannable,classes:null};et.classes="";var at=0;return T.classes.forEach(function(lt){return et.classes+=at++===0?lt:" "+lt}),et}}},hu.jsons=function(){for(var y=[],g=0;g<this.length;g++){var x=this[g],T=x.json();y.push(T)}return y},hu.clone=function(){for(var y=this.cy(),g=[],x=0;x<this.length;x++){var T=this[x],A=T.json(),D=new DT(y,A,!1);g.push(D)}return new jf(y,g)},hu.copy=hu.clone,hu.restore=function(){for(var y=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0,g=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,x=this,T=x.cy(),A=T._private,D=[],O=[],$,q=0,S=x.length;q<S;q++){var G=x[q];g&&!G.removed()||(G.isNode()?D.push(G):O.push(G))}$=D.concat(O);var W,et=function(){$.splice(W,1),W--};for(W=0;W<$.length;W++){var at=$[W],lt=at._private,ft=lt.data;if(at.clearTraversalCache(),!(!g&&!lt.removed)){if(ft.id===void 0)ft.id=IT();else if(X(ft.id))ft.id=""+ft.id;else if(Z(ft.id)||!mt(ft.id)){bl("Can not create element with invalid string ID `"+ft.id+"`"),et();continue}else if(T.hasElementWithId(ft.id)){bl("Can not create second element with ID `"+ft.id+"`"),et();continue}}var At=ft.id;if(at.isNode()){var kt=lt.position;kt.x==null&&(kt.x=0),kt.y==null&&(kt.y=0)}if(at.isEdge()){for(var Mt=at,Dt=["source","target"],jt=Dt.length,Zt=!1,Kt=0;Kt<jt;Kt++){var zt=Dt[Kt],ee=ft[zt];X(ee)&&(ee=ft[zt]=""+ft[zt]),ee==null||ee===""?(bl("Can not create edge `"+At+"` with unspecified "+zt),Zt=!0):T.hasElementWithId(ee)||(bl("Can not create edge `"+At+"` with nonexistant "+zt+" `"+ee+"`"),Zt=!0)}if(Zt){et();continue}var Vt=T.getElementById(ft.source),fe=T.getElementById(ft.target);Vt.same(fe)?Vt._private.edges.push(Mt):(Vt._private.edges.push(Mt),fe._private.edges.push(Mt)),Mt._private.source=Vt,Mt._private.target=fe}lt.map=new zb,lt.map.set(At,{ele:at,index:0}),lt.removed=!1,g&&T.addToPool(at)}for(var ge=0;ge<D.length;ge++){var ne=D[ge],Pe=ne._private.data;X(Pe.parent)&&(Pe.parent=""+Pe.parent);var pe=Pe.parent,bn=pe!=null;if(bn||ne._private.parent){var ze=ne._private.parent?T.collection().merge(ne._private.parent):T.getElementById(pe);if(ze.empty())Pe.parent=void 0;else if(ze[0].removed())Sc("Node added with missing parent, reference to parent removed"),Pe.parent=void 0,ne._private.parent=null;else{for(var Ve=!1,En=ze;!En.empty();){if(ne.same(En)){Ve=!0,Pe.parent=void 0;break}En=En.parent()}Ve||(ze[0]._private.children.push(ne),ne._private.parent=ze[0],A.hasCompoundNodes=!0)}}}if($.length>0){for(var Dn=$.length===x.length?x:new jf(T,$),Kn=0;Kn<Dn.length;Kn++){var Sn=Dn[Kn];Sn.isNode()||(Sn.parallelEdges().clearTraversalCache(),Sn.source().clearTraversalCache(),Sn.target().clearTraversalCache())}var Wn;A.hasCompoundNodes?Wn=T.collection().merge(Dn).merge(Dn.connectedNodes()).merge(Dn.parent()):Wn=Dn,Wn.dirtyCompoundBoundsCache().dirtyBoundingBoxCache().updateStyle(y),y?Dn.emitAndNotify("add"):g&&Dn.emit("add")}return x},hu.removed=function(){var y=this[0];return y&&y._private.removed},hu.inside=function(){var y=this[0];return y&&!y._private.removed},hu.remove=function(){var y=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0,g=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,x=this,T=[],A={},D=x._private.cy;function O(pe){for(var bn=pe._private.edges,ze=0;ze<bn.length;ze++)q(bn[ze])}function $(pe){for(var bn=pe._private.children,ze=0;ze<bn.length;ze++)q(bn[ze])}function q(pe){var bn=A[pe.id()];g&&pe.removed()||bn||(A[pe.id()]=!0,pe.isNode()?(T.push(pe),O(pe),$(pe)):T.unshift(pe))}for(var S=0,G=x.length;S<G;S++){var W=x[S];q(W)}function et(pe,bn){var ze=pe._private.edges;pm(ze,bn),pe.clearTraversalCache()}function at(pe){pe.clearTraversalCache()}var lt=[];lt.ids={};function ft(pe,bn){bn=bn[0],pe=pe[0];var ze=pe._private.children,Ve=pe.id();pm(ze,bn),bn._private.parent=null,lt.ids[Ve]||(lt.ids[Ve]=!0,lt.push(pe))}x.dirtyCompoundBoundsCache(),g&&D.removeFromPool(T);for(var At=0;At<T.length;At++){var kt=T[At];if(kt.isEdge()){var Mt=kt.source()[0],Dt=kt.target()[0];et(Mt,kt),et(Dt,kt);for(var jt=kt.parallelEdges(),Zt=0;Zt<jt.length;Zt++){var Kt=jt[Zt];at(Kt),Kt.isBundledBezier()&&Kt.dirtyBoundingBoxCache()}}else{var zt=kt.parent();zt.length!==0&&ft(zt,kt)}g&&(kt._private.removed=!0)}var ee=D._private.elements;D._private.hasCompoundNodes=!1;for(var Vt=0;Vt<ee.length;Vt++){var fe=ee[Vt];if(fe.isParent()){D._private.hasCompoundNodes=!0;break}}var ge=new jf(this.cy(),T);ge.size()>0&&(y?ge.emitAndNotify("remove"):g&&ge.emit("remove"));for(var ne=0;ne<lt.length;ne++){var Pe=lt[ne];(!g||!Pe.removed())&&Pe.updateStyle()}return ge},hu.move=function(y){var g=this._private.cy,x=this,T=!1,A=!1,D=function(lt){return lt==null?lt:""+lt};if(y.source!==void 0||y.target!==void 0){var O=D(y.source),$=D(y.target),q=O!=null&&g.hasElementWithId(O),S=$!=null&&g.hasElementWithId($);(q||S)&&(g.batch(function(){x.remove(T,A),x.emitAndNotify("moveout");for(var at=0;at<x.length;at++){var lt=x[at],ft=lt._private.data;lt.isEdge()&&(q&&(ft.source=O),S&&(ft.target=$))}x.restore(T,A)}),x.emitAndNotify("move"))}else if(y.parent!==void 0){var G=D(y.parent),W=G===null||g.hasElementWithId(G);if(W){var et=G===null?void 0:G;g.batch(function(){var at=x.remove(T,A);at.emitAndNotify("moveout");for(var lt=0;lt<x.length;lt++){var ft=x[lt],At=ft._private.data;ft.isNode()&&(At.parent=et)}at.restore(T,A)}),x.emitAndNotify("move")}}return this},[EF,MZ,KT,vp,J5,UZ,XT,sJ,dB,gB,lJ,e9,n9,Rf,Em,h1].forEach(function(y){me(hu,y)});var vJ={add:function(g){var x,T=this;if(xt(g)){var A=g;if(A._private.cy===T)x=A.restore();else{for(var D=[],O=0;O<A.length;O++){var $=A[O];D.push($.json())}x=new jf(T,D)}}else if(dt(g)){var q=g;x=new jf(T,q)}else if(ht(g)&&(dt(g.nodes)||dt(g.edges))){for(var S=g,G=[],W=["nodes","edges"],et=0,at=W.length;et<at;et++){var lt=W[et],ft=S[lt];if(dt(ft))for(var At=0,kt=ft.length;At<kt;At++){var Mt=me({group:lt},ft[At]);G.push(Mt)}}x=new jf(T,G)}else{var Dt=g;x=new DT(T,Dt).collection()}return x},remove:function(g){if(!xt(g)){if(mt(g)){var x=g;g=this.$(x)}}return g.remove()}};/*! Bezier curve function generator. Copyright Gaetan Renaudeau. MIT License: http://en.wikipedia.org/wiki/MIT_License */function wJ(y,g,x,T){var A=4,D=.001,O=1e-7,$=10,q=11,S=1/(q-1),G=typeof Float32Array<"u";if(arguments.length!==4)return!1;for(var W=0;W<4;++W)if(typeof arguments[W]!="number"||isNaN(arguments[W])||!isFinite(arguments[W]))return!1;y=Math.min(y,1),x=Math.min(x,1),y=Math.max(y,0),x=Math.max(x,0);var et=G?new Float32Array(q):new Array(q);function at(fe,ge){return 1-3*ge+3*fe}function lt(fe,ge){return 3*ge-6*fe}function ft(fe){return 3*fe}function At(fe,ge,ne){return((at(ge,ne)*fe+lt(ge,ne))*fe+ft(ge))*fe}function kt(fe,ge,ne){return 3*at(ge,ne)*fe*fe+2*lt(ge,ne)*fe+ft(ge)}function Mt(fe,ge){for(var ne=0;ne<A;++ne){var Pe=kt(ge,y,x);if(Pe===0)return ge;var pe=At(ge,y,x)-fe;ge-=pe/Pe}return ge}function Dt(){for(var fe=0;fe<q;++fe)et[fe]=At(fe*S,y,x)}function jt(fe,ge,ne){var Pe,pe,bn=0;do pe=ge+(ne-ge)/2,Pe=At(pe,y,x)-fe,Pe>0?ne=pe:ge=pe;while(Math.abs(Pe)>O&&++bn<$);return pe}function Zt(fe){for(var ge=0,ne=1,Pe=q-1;ne!==Pe&&et[ne]<=fe;++ne)ge+=S;--ne;var pe=(fe-et[ne])/(et[ne+1]-et[ne]),bn=ge+pe*S,ze=kt(bn,y,x);return ze>=D?Mt(fe,bn):ze===0?bn:jt(fe,ge,ge+S)}var Kt=!1;function zt(){Kt=!0,(y!==g||x!==T)&&Dt()}var ee=function(ge){return Kt||zt(),y===g&&x===T?ge:ge===0?0:ge===1?1:At(Zt(ge),g,T)};ee.getControlPoints=function(){return[{x:y,y:g},{x,y:T}]};var Vt="generateBezier("+[y,g,x,T]+")";return ee.toString=function(){return Vt},ee}/*! Runge-Kutta spring physics function generator. Adapted from Framer.js, copyright Koen Bok. MIT License: http://en.wikipedia.org/wiki/MIT_License */var mJ=function(){function y(T){return-T.tension*T.x-T.friction*T.v}function g(T,A,D){var O={x:T.x+D.dx*A,v:T.v+D.dv*A,tension:T.tension,friction:T.friction};return{dx:O.v,dv:y(O)}}function x(T,A){var D={dx:T.v,dv:y(T)},O=g(T,A*.5,D),$=g(T,A*.5,O),q=g(T,A,$),S=1/6*(D.dx+2*(O.dx+$.dx)+q.dx),G=1/6*(D.dv+2*(O.dv+$.dv)+q.dv);return T.x=T.x+S*A,T.v=T.v+G*A,T}return function T(A,D,O){var $={x:-1,v:0,tension:null,friction:null},q=[0],S=0,G=1/1e4,W=16/1e3,et,at,lt;for(A=parseFloat(A)||500,D=parseFloat(D)||20,O=O||null,$.tension=A,$.friction=D,et=O!==null,et?(S=T(A,D),at=S/O*W):at=W;lt=x(lt||$,at),q.push(1+lt.x),S+=16,Math.abs(lt.x)>G&&Math.abs(lt.v)>G;);return et?function(ft){return q[ft*(q.length-1)|0]}:S}}(),fu=function(g,x,T,A){var D=wJ(g,x,T,A);return function(O,$,q){return O+($-O)*D(q)}},s9={linear:function(g,x,T){return g+(x-g)*T},ease:fu(.25,.1,.25,1),"ease-in":fu(.42,0,1,1),"ease-out":fu(0,0,.58,1),"ease-in-out":fu(.42,0,.58,1),"ease-in-sine":fu(.47,0,.745,.715),"ease-out-sine":fu(.39,.575,.565,1),"ease-in-out-sine":fu(.445,.05,.55,.95),"ease-in-quad":fu(.55,.085,.68,.53),"ease-out-quad":fu(.25,.46,.45,.94),"ease-in-out-quad":fu(.455,.03,.515,.955),"ease-in-cubic":fu(.55,.055,.675,.19),"ease-out-cubic":fu(.215,.61,.355,1),"ease-in-out-cubic":fu(.645,.045,.355,1),"ease-in-quart":fu(.895,.03,.685,.22),"ease-out-quart":fu(.165,.84,.44,1),"ease-in-out-quart":fu(.77,0,.175,1),"ease-in-quint":fu(.755,.05,.855,.06),"ease-out-quint":fu(.23,1,.32,1),"ease-in-out-quint":fu(.86,0,.07,1),"ease-in-expo":fu(.95,.05,.795,.035),"ease-out-expo":fu(.19,1,.22,1),"ease-in-out-expo":fu(1,0,0,1),"ease-in-circ":fu(.6,.04,.98,.335),"ease-out-circ":fu(.075,.82,.165,1),"ease-in-out-circ":fu(.785,.135,.15,.86),spring:function(g,x,T){if(T===0)return s9.linear;var A=mJ(g,x,T);return function(D,O,$){return D+(O-D)*A($)}},"cubic-bezier":fu};function TB(y,g,x,T,A){if(T===1||g===x)return x;var D=A(g,x,T);return y==null||((y.roundValue||y.color)&&(D=Math.round(D)),y.min!==void 0&&(D=Math.max(D,y.min)),y.max!==void 0&&(D=Math.min(D,y.max))),D}function CB(y,g){return y.pfValue!=null||y.value!=null?y.pfValue!=null&&(g==null||g.type.units!=="%")?y.pfValue:y.value:y}function sx(y,g,x,T,A){var D=A!=null?A.type:null;x<0?x=0:x>1&&(x=1);var O=CB(y,A),$=CB(g,A);if(X(O)&&X($))return TB(D,O,$,x,T);if(dt(O)&&dt($)){for(var q=[],S=0;S<$.length;S++){var G=O[S],W=$[S];if(G!=null&&W!=null){var et=TB(D,G,W,x,T);q.push(et)}else q.push(W)}return q}}function yJ(y,g,x,T){var A=!T,D=y._private,O=g._private,$=O.easing,q=O.startTime,S=T?y:y.cy(),G=S.style();if(!O.easingImpl)if($==null)O.easingImpl=s9.linear;else{var W;if(mt($)){var et=G.parse("transition-timing-function",$);W=et.value}else W=$;var at,lt;mt(W)?(at=W,lt=[]):(at=W[1],lt=W.slice(2).map(function(Dn){return+Dn})),lt.length>0?(at==="spring"&&lt.push(O.duration),O.easingImpl=s9[at].apply(null,lt)):O.easingImpl=s9[at]}var ft=O.easingImpl,At;if(O.duration===0?At=1:At=(x-q)/O.duration,O.applying&&(At=O.progress),At<0?At=0:At>1&&(At=1),O.delay==null){var kt=O.startPosition,Mt=O.position;if(Mt&&A&&!y.locked()){var Dt={};Dk(kt.x,Mt.x)&&(Dt.x=sx(kt.x,Mt.x,At,ft)),Dk(kt.y,Mt.y)&&(Dt.y=sx(kt.y,Mt.y,At,ft)),y.position(Dt)}var jt=O.startPan,Zt=O.pan,Kt=D.pan,zt=Zt!=null&&T;zt&&(Dk(jt.x,Zt.x)&&(Kt.x=sx(jt.x,Zt.x,At,ft)),Dk(jt.y,Zt.y)&&(Kt.y=sx(jt.y,Zt.y,At,ft)),y.emit("pan"));var ee=O.startZoom,Vt=O.zoom,fe=Vt!=null&&T;fe&&(Dk(ee,Vt)&&(D.zoom=wk(D.minZoom,sx(ee,Vt,At,ft),D.maxZoom)),y.emit("zoom")),(zt||fe)&&y.emit("viewport");var ge=O.style;if(ge&&ge.length>0&&A){for(var ne=0;ne<ge.length;ne++){var Pe=ge[ne],pe=Pe.name,bn=Pe,ze=O.startStyle[pe],Ve=G.properties[ze.name],En=sx(ze,bn,At,ft,Ve);G.overrideBypass(y,pe,En)}y.emit("style")}}return O.progress=At,At}function Dk(y,g){return y==null||g==null?!1:X(y)&&X(g)?!0:!!(y&&g)}function xJ(y,g,x,T){var A=g._private;A.started=!0,A.startTime=x-A.progress*A.duration}function _B(y,g){var x=g._private.aniEles,T=[];function A(G,W){var et=G._private,at=et.animation.current,lt=et.animation.queue,ft=!1;if(at.length===0){var At=lt.shift();At&&at.push(At)}for(var kt=function(Kt){for(var zt=Kt.length-1;zt>=0;zt--){var ee=Kt[zt];ee()}Kt.splice(0,Kt.length)},Mt=at.length-1;Mt>=0;Mt--){var Dt=at[Mt],jt=Dt._private;if(jt.stopped){at.splice(Mt,1),jt.hooked=!1,jt.playing=!1,jt.started=!1,kt(jt.frames);continue}!jt.playing&&!jt.applying||(jt.playing&&jt.applying&&(jt.applying=!1),jt.started||xJ(G,Dt,y),yJ(G,Dt,y,W),jt.applying&&(jt.applying=!1),kt(jt.frames),jt.step!=null&&jt.step(y),Dt.completed()&&(at.splice(Mt,1),jt.hooked=!1,jt.playing=!1,jt.started=!1,kt(jt.completes)),ft=!0)}return!W&&at.length===0&&lt.length===0&&T.push(G),ft}for(var D=!1,O=0;O<x.length;O++){var $=x[O],q=A($);D=D||q}var S=A(g,!0);(D||S)&&(x.length>0?g.notify("draw",x):g.notify("draw")),x.unmerge(T),g.emit("step")}var kJ={animate:Ac.animate(),animation:Ac.animation(),animated:Ac.animated(),clearQueue:Ac.clearQueue(),delay:Ac.delay(),delayAnimation:Ac.delayAnimation(),stop:Ac.stop(),addToAnimationPool:function(g){var x=this;x.styleEnabled()&&x._private.aniEles.merge(g)},stopAnimationLoop:function(){this._private.animationsRunning=!1},startAnimationLoop:function(){var g=this;if(g._private.animationsRunning=!0,!g.styleEnabled())return;function x(){g._private.animationsRunning&&Ff(function(D){_B(D,g),x()})}var T=g.renderer();T&&T.beforeRender?T.beforeRender(function(D,O){_B(O,g)},T.beforeRenderPriorities.animations):x()}},EJ={qualifierCompare:function(g,x){return g==null||x==null?g==null&&x==null:g.sameText(x)},eventMatches:function(g,x,T){var A=x.qualifier;return A!=null?g!==T.target&&nt(T.target)&&A.matches(T.target):!0},addEventFields:function(g,x){x.cy=g,x.target=g},callbackContext:function(g,x,T){return x.qualifier!=null?T.target:g}},a9=function(g){return mt(g)?new ym(g):g},SB={createEmitter:function(){var g=this._private;return g.emitter||(g.emitter=new JT(EJ,this)),this},emitter:function(){return this._private.emitter},on:function(g,x,T){return this.emitter().on(g,a9(x),T),this},removeListener:function(g,x,T){return this.emitter().removeListener(g,a9(x),T),this},removeAllListeners:function(){return this.emitter().removeAllListeners(),this},one:function(g,x,T){return this.emitter().one(g,a9(x),T),this},once:function(g,x,T){return this.emitter().one(g,a9(x),T),this},emit:function(g,x){return this.emitter().emit(g,x),this},emitAndNotify:function(g,x){return this.emit(g),this.notify(g,x),this}};Ac.eventAliasesOn(SB);var zL={png:function(g){var x=this._private.renderer;return g=g||{},x.png(g)},jpg:function(g){var x=this._private.renderer;return g=g||{},g.bg=g.bg||"#fff",x.jpg(g)}};zL.jpeg=zL.jpg;var o9={layout:function(g){var x=this;if(g==null){bl("Layout options must be specified to make a layout");return}if(g.name==null){bl("A `name` must be specified to make a layout");return}var T=g.name,A=x.extension("layout",T);if(A==null){bl("No such layout `"+T+"` found.  Did you forget to import it and `cytoscape.use()` it?");return}var D;mt(g.eles)?D=x.$(g.eles):D=g.eles!=null?g.eles:x.$();var O=new A(me({},g,{cy:x,eles:D}));return O}};o9.createLayout=o9.makeLayout=o9.layout;var TJ={notify:function(g,x){var T=this._private;if(this.batching()){T.batchNotifications=T.batchNotifications||{};var A=T.batchNotifications[g]=T.batchNotifications[g]||this.collection();x!=null&&A.merge(x);return}if(T.notificationsEnabled){var D=this.renderer();this.destroyed()||!D||D.notify(g,x)}},notifications:function(g){var x=this._private;return g===void 0?x.notificationsEnabled:(x.notificationsEnabled=!!g,this)},noNotifications:function(g){this.notifications(!1),g(),this.notifications(!0)},batching:function(){return this._private.batchCount>0},startBatch:function(){var g=this._private;return g.batchCount==null&&(g.batchCount=0),g.batchCount===0&&(g.batchStyleEles=this.collection(),g.batchNotifications={}),g.batchCount++,this},endBatch:function(){var g=this._private;if(g.batchCount===0)return this;if(g.batchCount--,g.batchCount===0){g.batchStyleEles.updateStyle();var x=this.renderer();Object.keys(g.batchNotifications).forEach(function(T){var A=g.batchNotifications[T];A.empty()?x.notify(T):x.notify(T,A)})}return this},batch:function(g){return this.startBatch(),g(),this.endBatch(),this},batchData:function(g){var x=this;return this.batch(function(){for(var T=Object.keys(g),A=0;A<T.length;A++){var D=T[A],O=g[D],$=x.getElementById(D);$.data(O)}})}},CJ=Bf({hideEdgesOnViewport:!1,textureOnViewport:!1,motionBlur:!1,motionBlurOpacity:.05,pixelRatio:void 0,desktopTapThreshold:4,touchTapThreshold:8,wheelSensitivity:1,debug:!1,showFps:!1}),qL={renderTo:function(g,x,T,A){var D=this._private.renderer;return D.renderTo(g,x,T,A),this},renderer:function(){return this._private.renderer},forceRender:function(){return this.notify("draw"),this},resize:function(){return this.invalidateSize(),this.emitAndNotify("resize"),this},initRenderer:function(g){var x=this,T=x.extension("renderer",g.name);if(T==null){bl("Can not initialise: No such renderer `".concat(g.name,"` found. Did you forget to import it and `cytoscape.use()` it?"));return}g.wheelSensitivity!==void 0&&Sc("You have set a custom wheel sensitivity.  This will make your app zoom unnaturally when using mainstream mice.  You should change this value from the default only if you can guarantee that all your users will use the same hardware and OS configuration as your current machine.");var A=CJ(g);A.cy=x,x._private.renderer=new T(A),this.notify("init")},destroyRenderer:function(){var g=this;g.notify("destroy");var x=g.container();if(x)for(x._cyreg=null;x.childNodes.length>0;)x.removeChild(x.childNodes[0]);g._private.renderer=null,g.mutableElements().forEach(function(T){var A=T._private;A.rscratch={},A.rstyle={},A.animation.current=[],A.animation.queue=[]})},onRender:function(g){return this.on("render",g)},offRender:function(g){return this.off("render",g)}};qL.invalidateDimensions=qL.resize;var c9={collection:function(g,x){return mt(g)?this.$(g):xt(g)?g.collection():dt(g)?(x||(x={}),new jf(this,g,x.unique,x.removed)):new jf(this)},nodes:function(g){var x=this.$(function(T){return T.isNode()});return g?x.filter(g):x},edges:function(g){var x=this.$(function(T){return T.isEdge()});return g?x.filter(g):x},$:function(g){var x=this._private.elements;return g?x.filter(g):x.spawnSelf()},mutableElements:function(){return this._private.elements}};c9.elements=c9.filter=c9.$;var f1={},Ok="t",_J="f";f1.apply=function(y){for(var g=this,x=g._private,T=x.cy,A=T.collection(),D=0;D<y.length;D++){var O=y[D],$=g.getContextMeta(O);if(!$.empty){var q=g.getContextStyle($),S=g.applyContextStyle($,q,O);O._private.appliedInitStyle?g.updateTransitions(O,S.diffProps):O._private.appliedInitStyle=!0;var G=g.updateStyleHints(O);G&&A.push(O)}}return A},f1.getPropertiesDiff=function(y,g){var x=this,T=x._private.propDiffs=x._private.propDiffs||{},A=y+"-"+g,D=T[A];if(D)return D;for(var O=[],$={},q=0;q<x.length;q++){var S=x[q],G=y[q]===Ok,W=g[q]===Ok,et=G!==W,at=S.mappedProperties.length>0;if(et||W&&at){var lt=void 0;et&&at||et?lt=S.properties:at&&(lt=S.mappedProperties);for(var ft=0;ft<lt.length;ft++){for(var At=lt[ft],kt=At.name,Mt=!1,Dt=q+1;Dt<x.length;Dt++){var jt=x[Dt],Zt=g[Dt]===Ok;if(Zt&&(Mt=jt.properties[At.name]!=null,Mt))break}!$[kt]&&!Mt&&($[kt]=!0,O.push(kt))}}}return T[A]=O,O},f1.getContextMeta=function(y){for(var g=this,x="",T,A=y._private.styleCxtKey||"",D=0;D<g.length;D++){var O=g[D],$=O.selector&&O.selector.matches(y);$?x+=Ok:x+=_J}return T=g.getPropertiesDiff(A,x),y._private.styleCxtKey=x,{key:x,diffPropNames:T,empty:T.length===0}},f1.getContextStyle=function(y){var g=y.key,x=this,T=this._private.contextStyles=this._private.contextStyles||{};if(T[g])return T[g];for(var A={_private:{key:g}},D=0;D<x.length;D++){var O=x[D],$=g[D]===Ok;if($)for(var q=0;q<O.properties.length;q++){var S=O.properties[q];A[S.name]=S}}return T[g]=A,A},f1.applyContextStyle=function(y,g,x){for(var T=this,A=y.diffPropNames,D={},O=T.types,$=0;$<A.length;$++){var q=A[$],S=g[q],G=x.pstyle(q);if(!S)if(G)G.bypass?S={name:q,deleteBypassed:!0}:S={name:q,delete:!0};else continue;if(G!==S){if(S.mapped===O.fn&&G!=null&&G.mapping!=null&&G.mapping.value===S.value){var W=G.mapping,et=W.fnValue=S.value(x);if(et===W.prevFnValue)continue}var at=D[q]={prev:G};T.applyParsedProperty(x,S),at.next=x.pstyle(q),at.next&&at.next.bypass&&(at.next=at.next.bypassed)}}return{diffProps:D}},f1.updateStyleHints=function(y){var g=y._private,x=this,T=x.propertyGroupNames,A=x.propertyGroupKeys,D=function(Jr,wi,Ks){return x.getPropertiesHash(Jr,wi,Ks)},O=g.styleKey;if(y.removed())return!1;var $=g.group==="nodes",q=y._private.style;T=Object.keys(q);for(var S=0;S<A.length;S++){var G=A[S];g.styleKeys[G]=[dm,x3]}for(var W=function(Jr,wi){return g.styleKeys[wi][0]=T0(Jr,g.styleKeys[wi][0])},et=function(Jr,wi){return g.styleKeys[wi][1]=cv(Jr,g.styleKeys[wi][1])},at=function(Jr,wi){W(Jr,wi),et(Jr,wi)},lt=function(Jr,wi){for(var Ks=0;Ks<Jr.length;Ks++){var ka=Jr.charCodeAt(Ks);W(ka,wi),et(ka,wi)}},ft=2e9,At=function(Jr){return-128<Jr&&Jr<128&&Math.floor(Jr)!==Jr?ft-(Jr*1024|0):Jr},kt=0;kt<T.length;kt++){var Mt=T[kt],Dt=q[Mt];if(Dt!=null){var jt=this.properties[Mt],Zt=jt.type,Kt=jt.groupKey,zt=void 0;jt.hashOverride!=null?zt=jt.hashOverride(y,Dt):Dt.pfValue!=null&&(zt=Dt.pfValue);var ee=jt.enums==null?Dt.value:null,Vt=zt!=null,fe=ee!=null,ge=Vt||fe,ne=Dt.units;if(Zt.number&&ge&&!Zt.multiple){var Pe=Vt?zt:ee;at(At(Pe),Kt),!Vt&&ne!=null&&lt(ne,Kt)}else lt(Dt.strValue,Kt)}}for(var pe=[dm,x3],bn=0;bn<A.length;bn++){var ze=A[bn],Ve=g.styleKeys[ze];pe[0]=T0(Ve[0],pe[0]),pe[1]=cv(Ve[1],pe[1])}g.styleKey=F5(pe[0],pe[1]);var En=g.styleKeys;g.labelDimsKey=jb(En.labelDimensions);var Dn=D(y,["label"],En.labelDimensions);if(g.labelKey=jb(Dn),g.labelStyleKey=jb(B5(En.commonLabel,Dn)),!$){var Kn=D(y,["source-label"],En.labelDimensions);g.sourceLabelKey=jb(Kn),g.sourceLabelStyleKey=jb(B5(En.commonLabel,Kn));var Sn=D(y,["target-label"],En.labelDimensions);g.targetLabelKey=jb(Sn),g.targetLabelStyleKey=jb(B5(En.commonLabel,Sn))}if($){var Wn=g.styleKeys,rr=Wn.nodeBody,vr=Wn.nodeBorder,ur=Wn.backgroundImage,tr=Wn.compound,wn=Wn.pie,gr=[rr,vr,ur,tr,wn].filter(function(fr){return fr!=null}).reduce(B5,[dm,x3]);g.nodeKey=jb(gr),g.hasPie=wn!=null&&wn[0]!==dm&&wn[1]!==x3}return O!==g.styleKey},f1.clearStyleHints=function(y){var g=y._private;g.styleCxtKey="",g.styleKeys={},g.styleKey=null,g.labelKey=null,g.labelStyleKey=null,g.sourceLabelKey=null,g.sourceLabelStyleKey=null,g.targetLabelKey=null,g.targetLabelStyleKey=null,g.nodeKey=null,g.hasPie=null},f1.applyParsedProperty=function(y,g){var x=this,T=g,A=y._private.style,D,O=x.types,$=x.properties[T.name].type,q=T.bypass,S=A[T.name],G=S&&S.bypass,W=y._private,et="mapping",at=function(rr){return rr==null?null:rr.pfValue!=null?rr.pfValue:rr.value},lt=function(){var rr=at(S),vr=at(T);x.checkTriggers(y,T.name,rr,vr)};if(T&&T.name.substr(0,3)==="pie"&&Sc("The pie style properties are deprecated.  Create charts using background images instead."),g.name==="curve-style"&&y.isEdge()&&(g.value!=="bezier"&&y.isLoop()||g.value==="haystack"&&(y.source().isParent()||y.target().isParent()))&&(T=g=this.parse(g.name,"bezier",q)),T.delete)return A[T.name]=void 0,lt(),!0;if(T.deleteBypassed)return S?S.bypass?(S.bypassed=void 0,lt(),!0):!1:(lt(),!0);if(T.deleteBypass)return S?S.bypass?(A[T.name]=S.bypassed,lt(),!0):!1:(lt(),!0);var ft=function(){Sc("Do not assign mappings to elements without corresponding data (i.e. ele `"+y.id()+"` has no mapping for property `"+T.name+"` with data field `"+T.field+"`); try a `["+T.field+"]` selector to limit scope to elements with `"+T.field+"` defined")};switch(T.mapped){case O.mapData:{for(var At=T.field.split("."),kt=W.data,Mt=0;Mt<At.length&&kt;Mt++){var Dt=At[Mt];kt=kt[Dt]}if(kt==null)return ft(),!1;var jt;if(X(kt)){var Zt=T.fieldMax-T.fieldMin;Zt===0?jt=0:jt=(kt-T.fieldMin)/Zt}else return Sc("Do not use continuous mappers without specifying numeric data (i.e. `"+T.field+": "+kt+"` for `"+y.id()+"` is non-numeric)"),!1;if(jt<0?jt=0:jt>1&&(jt=1),$.color){var Kt=T.valueMin[0],zt=T.valueMax[0],ee=T.valueMin[1],Vt=T.valueMax[1],fe=T.valueMin[2],ge=T.valueMax[2],ne=T.valueMin[3]==null?1:T.valueMin[3],Pe=T.valueMax[3]==null?1:T.valueMax[3],pe=[Math.round(Kt+(zt-Kt)*jt),Math.round(ee+(Vt-ee)*jt),Math.round(fe+(ge-fe)*jt),Math.round(ne+(Pe-ne)*jt)];D={bypass:T.bypass,name:T.name,value:pe,strValue:"rgb("+pe[0]+", "+pe[1]+", "+pe[2]+")"}}else if($.number){var bn=T.valueMin+(T.valueMax-T.valueMin)*jt;D=this.parse(T.name,bn,T.bypass,et)}else return!1;if(!D)return ft(),!1;D.mapping=T,T=D;break}case O.data:{for(var ze=T.field.split("."),Ve=W.data,En=0;En<ze.length&&Ve;En++){var Dn=ze[En];Ve=Ve[Dn]}if(Ve!=null&&(D=this.parse(T.name,Ve,T.bypass,et)),!D)return ft(),!1;D.mapping=T,T=D;break}case O.fn:{var Kn=T.value,Sn=T.fnValue!=null?T.fnValue:Kn(y);if(T.prevFnValue=Sn,Sn==null)return Sc("Custom function mappers may not return null (i.e. `"+T.name+"` for ele `"+y.id()+"` is null)"),!1;if(D=this.parse(T.name,Sn,T.bypass,et),!D)return Sc("Custom function mappers may not return invalid values for the property type (i.e. `"+T.name+"` for ele `"+y.id()+"` is invalid)"),!1;D.mapping=$b(T),T=D;break}case void 0:break;default:return!1}return q?(G?T.bypassed=S.bypassed:T.bypassed=S,A[T.name]=T):G?S.bypassed=T:A[T.name]=T,lt(),!0},f1.cleanElements=function(y,g){for(var x=0;x<y.length;x++){var T=y[x];if(this.clearStyleHints(T),T.dirtyCompoundBoundsCache(),T.dirtyBoundingBoxCache(),!g)T._private.style={};else for(var A=T._private.style,D=Object.keys(A),O=0;O<D.length;O++){var $=D[O],q=A[$];q!=null&&(q.bypass?q.bypassed=null:A[$]=null)}}},f1.update=function(){var y=this._private.cy,g=y.mutableElements();g.updateStyle()},f1.updateTransitions=function(y,g){var x=this,T=y._private,A=y.pstyle("transition-property").value,D=y.pstyle("transition-duration").pfValue,O=y.pstyle("transition-delay").pfValue;if(A.length>0&&D>0){for(var $={},q=!1,S=0;S<A.length;S++){var G=A[S],W=y.pstyle(G),et=g[G];if(et){var at=et.prev,lt=at,ft=et.next!=null?et.next:W,At=!1,kt=void 0,Mt=1e-6;lt&&(X(lt.pfValue)&&X(ft.pfValue)?(At=ft.pfValue-lt.pfValue,kt=lt.pfValue+Mt*At):X(lt.value)&&X(ft.value)?(At=ft.value-lt.value,kt=lt.value+Mt*At):dt(lt.value)&&dt(ft.value)&&(At=lt.value[0]!==ft.value[0]||lt.value[1]!==ft.value[1]||lt.value[2]!==ft.value[2],kt=lt.strValue),At&&($[G]=ft.strValue,this.applyBypass(y,G,kt),q=!0))}}if(!q)return;T.transitioning=!0,new K5(function(Dt){O>0?y.delayAnimation(O).play().promise().then(Dt):Dt()}).then(function(){return y.animation({style:$,duration:D,easing:y.pstyle("transition-timing-function").value,queue:!1}).play().promise()}).then(function(){x.removeBypasses(y,A),y.emitAndNotify("style"),T.transitioning=!1})}else T.transitioning&&(this.removeBypasses(y,A),y.emitAndNotify("style"),T.transitioning=!1)},f1.checkTrigger=function(y,g,x,T,A,D){var O=this.properties[g],$=A(O);$!=null&&$(x,T)&&D(O)},f1.checkZOrderTrigger=function(y,g,x,T){var A=this;this.checkTrigger(y,g,x,T,function(D){return D.triggersZOrder},function(){A._private.cy.notify("zorder",y)})},f1.checkBoundsTrigger=function(y,g,x,T){this.checkTrigger(y,g,x,T,function(A){return A.triggersBounds},function(A){y.dirtyCompoundBoundsCache(),y.dirtyBoundingBoxCache(),A.triggersBoundsOfParallelBeziers&&(g==="curve-style"&&(x==="bezier"||T==="bezier")||g==="display"&&(x==="none"||T==="none"))&&y.parallelEdges().forEach(function(D){D.isBundledBezier()&&D.dirtyBoundingBoxCache()})})},f1.checkTriggers=function(y,g,x,T){y.dirtyStyleCache(),this.checkZOrderTrigger(y,g,x,T),this.checkBoundsTrigger(y,g,x,T)};var Nk={};Nk.applyBypass=function(y,g,x,T){var A=this,D=[],O=!0;if(g==="*"||g==="**"){if(x!==void 0)for(var $=0;$<A.properties.length;$++){var q=A.properties[$],S=q.name,G=this.parse(S,x,!0);G&&D.push(G)}}else if(mt(g)){var W=this.parse(g,x,!0);W&&D.push(W)}else if(ht(g)){var et=g;T=x;for(var at=Object.keys(et),lt=0;lt<at.length;lt++){var ft=at[lt],At=et[ft];if(At===void 0&&(At=et[Me(ft)]),At!==void 0){var kt=this.parse(ft,At,!0);kt&&D.push(kt)}}}else return!1;if(D.length===0)return!1;for(var Mt=!1,Dt=0;Dt<y.length;Dt++){for(var jt=y[Dt],Zt={},Kt=void 0,zt=0;zt<D.length;zt++){var ee=D[zt];if(T){var Vt=jt.pstyle(ee.name);Kt=Zt[ee.name]={prev:Vt}}Mt=this.applyParsedProperty(jt,$b(ee))||Mt,T&&(Kt.next=jt.pstyle(ee.name))}Mt&&this.updateStyleHints(jt),T&&this.updateTransitions(jt,Zt,O)}return Mt},Nk.overrideBypass=function(y,g,x){g=pn(g);for(var T=0;T<y.length;T++){var A=y[T],D=A._private.style[g],O=this.properties[g].type,$=O.color,q=O.mutiple,S=D?D.pfValue!=null?D.pfValue:D.value:null;!D||!D.bypass?this.applyBypass(A,g,x):(D.value=x,D.pfValue!=null&&(D.pfValue=x),$?D.strValue="rgb("+x.join(",")+")":q?D.strValue=x.join(" "):D.strValue=""+x,this.updateStyleHints(A)),this.checkTriggers(A,g,S,x)}},Nk.removeAllBypasses=function(y,g){return this.removeBypasses(y,this.propertyNames,g)},Nk.removeBypasses=function(y,g,x){for(var T=!0,A=0;A<y.length;A++){for(var D=y[A],O={},$=0;$<g.length;$++){var q=g[$],S=this.properties[q],G=D.pstyle(S.name);if(!(!G||!G.bypass)){var W="",et=this.parse(q,W,!0),at=O[S.name]={prev:G};this.applyParsedProperty(D,et),at.next=D.pstyle(S.name)}}this.updateStyleHints(D),x&&this.updateTransitions(D,O,T)}};var HL={};HL.getEmSizeInPixels=function(){var y=this.containerCss("font-size");return y!=null?parseFloat(y):1},HL.containerCss=function(y){var g=this._private.cy,x=g.container();if(R&&x&&R.getComputedStyle)return R.getComputedStyle(x).getPropertyValue(y)};var Hb={};Hb.getRenderedStyle=function(y,g){return g?this.getStylePropertyValue(y,g,!0):this.getRawStyle(y,!0)},Hb.getRawStyle=function(y,g){var x=this;if(y=y[0],y){for(var T={},A=0;A<x.properties.length;A++){var D=x.properties[A],O=x.getStylePropertyValue(y,D.name,g);O!=null&&(T[D.name]=O,T[Me(D.name)]=O)}return T}},Hb.getIndexedStyle=function(y,g,x,T){var A=y.pstyle(g)[x][T];return A??y.cy().style().getDefaultProperty(g)[x][0]},Hb.getStylePropertyValue=function(y,g,x){var T=this;if(y=y[0],y){var A=T.properties[g];A.alias&&(A=A.pointsTo);var D=A.type,O=y.pstyle(A.name);if(O){var $=O.value,q=O.units,S=O.strValue;if(x&&D.number&&$!=null&&X($)){var G=y.cy().zoom(),W=function(At){return At*G},et=function(At,kt){return W(At)+kt},at=dt($),lt=at?q.every(function(ft){return ft!=null}):q!=null;return lt?at?$.map(function(ft,At){return et(ft,q[At])}).join(" "):et($,q):at?$.map(function(ft){return mt(ft)?ft:""+W(ft)}).join(" "):""+W($)}else if(S!=null)return S}return null}},Hb.getAnimationStartStyle=function(y,g){for(var x={},T=0;T<g.length;T++){var A=g[T],D=A.name,O=y.pstyle(D);O!==void 0&&(ht(O)?O=this.parse(D,O.strValue):O=this.parse(D,O)),O&&(x[D]=O)}return x},Hb.getPropsList=function(y){var g=this,x=[],T=y,A=g.properties;if(T)for(var D=Object.keys(T),O=0;O<D.length;O++){var $=D[O],q=T[$],S=A[$]||A[pn($)],G=this.parse(S.name,q);G&&x.push(G)}return x},Hb.getNonDefaultPropertiesHash=function(y,g,x){var T=x.slice(),A,D,O,$,q,S;for(q=0;q<g.length;q++)if(A=g[q],D=y.pstyle(A,!1),D!=null)if(D.pfValue!=null)T[0]=T0($,T[0]),T[1]=cv($,T[1]);else for(O=D.strValue,S=0;S<O.length;S++)$=O.charCodeAt(S),T[0]=T0($,T[0]),T[1]=cv($,T[1]);return T},Hb.getPropertiesHash=Hb.getNonDefaultPropertiesHash;var u9={};u9.appendFromJson=function(y){for(var g=this,x=0;x<y.length;x++){var T=y[x],A=T.selector,D=T.style||T.css,O=Object.keys(D);g.selector(A);for(var $=0;$<O.length;$++){var q=O[$],S=D[q];g.css(q,S)}}return g},u9.fromJson=function(y){var g=this;return g.resetToDefault(),g.appendFromJson(y),g},u9.json=function(){for(var y=[],g=this.defaultLength;g<this.length;g++){for(var x=this[g],T=x.selector,A=x.properties,D={},O=0;O<A.length;O++){var $=A[O];D[$.name]=$.strValue}y.push({selector:T?T.toString():"core",style:D})}return y};var GL={};GL.appendFromString=function(y){var g=this,x=this,T=""+y,A,D,O;T=T.replace(/[/][*](\s|.)+?[*][/]/g,"");function $(){T.length>A.length?T=T.substr(A.length):T=""}function q(){D.length>O.length?D=D.substr(O.length):D=""}for(;;){var S=T.match(/^\s*$/);if(S)break;var G=T.match(/^\s*((?:.|\s)+?)\s*\{((?:.|\s)+?)\}/);if(!G){Sc("Halting stylesheet parsing: String stylesheet contains more to parse but no selector and block found in: "+T);break}A=G[0];var W=G[1];if(W!=="core"){var et=new ym(W);if(et.invalid){Sc("Skipping parsing of block: Invalid selector found in string stylesheet: "+W),$();continue}}var at=G[2],lt=!1;D=at;for(var ft=[];;){var At=D.match(/^\s*$/);if(At)break;var kt=D.match(/^\s*(.+?)\s*:\s*(.+?)(?:\s*;|\s*$)/);if(!kt){Sc("Skipping parsing of block: Invalid formatting of style property and value definitions found in:"+at),lt=!0;break}O=kt[0];var Mt=kt[1],Dt=kt[2],jt=g.properties[Mt];if(!jt){Sc("Skipping property: Invalid property name in: "+O),q();continue}var Zt=x.parse(Mt,Dt);if(!Zt){Sc("Skipping property: Invalid property definition in: "+O),q();continue}ft.push({name:Mt,val:Dt}),q()}if(lt){$();break}x.selector(W);for(var Kt=0;Kt<ft.length;Kt++){var zt=ft[Kt];x.css(zt.name,zt.val)}$()}return x},GL.fromString=function(y){var g=this;return g.resetToDefault(),g.appendFromString(y),g};var $f={};(function(){var y=Ke,g=_e,x=re,T=ie,A=Oe,D=function(gr){return"^"+gr+"\\s*\\(\\s*([\\w\\.]+)\\s*\\)$"},O=function(gr){var fr=y+"|\\w+|"+g+"|"+x+"|"+T+"|"+A;return"^"+gr+"\\s*\\(([\\w\\.]+)\\s*\\,\\s*("+y+")\\s*\\,\\s*("+y+")\\s*,\\s*("+fr+")\\s*\\,\\s*("+fr+")\\)$"},$=[`^url\\s*\\(\\s*['"]?(.+?)['"]?\\s*\\)$`,"^(none)$","^(.+)$"];$f.types={time:{number:!0,min:0,units:"s|ms",implicitUnits:"ms"},percent:{number:!0,min:0,max:100,units:"%",implicitUnits:"%"},percentages:{number:!0,min:0,max:100,units:"%",implicitUnits:"%",multiple:!0},zeroOneNumber:{number:!0,min:0,max:1,unitless:!0},zeroOneNumbers:{number:!0,min:0,max:1,unitless:!0,multiple:!0},nOneOneNumber:{number:!0,min:-1,max:1,unitless:!0},nonNegativeInt:{number:!0,min:0,integer:!0,unitless:!0},position:{enums:["parent","origin"]},nodeSize:{number:!0,min:0,enums:["label"]},number:{number:!0,unitless:!0},numbers:{number:!0,unitless:!0,multiple:!0},positiveNumber:{number:!0,unitless:!0,min:0,strictMin:!0},size:{number:!0,min:0},bidirectionalSize:{number:!0},bidirectionalSizeMaybePercent:{number:!0,allowPercent:!0},bidirectionalSizes:{number:!0,multiple:!0},sizeMaybePercent:{number:!0,min:0,allowPercent:!0},axisDirection:{enums:["horizontal","leftward","rightward","vertical","upward","downward","auto"]},paddingRelativeTo:{enums:["width","height","average","min","max"]},bgWH:{number:!0,min:0,allowPercent:!0,enums:["auto"],multiple:!0},bgPos:{number:!0,allowPercent:!0,multiple:!0},bgRelativeTo:{enums:["inner","include-padding"],multiple:!0},bgRepeat:{enums:["repeat","repeat-x","repeat-y","no-repeat"],multiple:!0},bgFit:{enums:["none","contain","cover"],multiple:!0},bgCrossOrigin:{enums:["anonymous","use-credentials"],multiple:!0},bgClip:{enums:["none","node"],multiple:!0},bgContainment:{enums:["inside","over"],multiple:!0},color:{color:!0},colors:{color:!0,multiple:!0},fill:{enums:["solid","linear-gradient","radial-gradient"]},bool:{enums:["yes","no"]},bools:{enums:["yes","no"],multiple:!0},lineStyle:{enums:["solid","dotted","dashed"]},lineCap:{enums:["butt","round","square"]},borderStyle:{enums:["solid","dotted","dashed","double"]},curveStyle:{enums:["bezier","unbundled-bezier","haystack","segments","straight","straight-triangle","taxi"]},fontFamily:{regex:'^([\\w- \\"]+(?:\\s*,\\s*[\\w- \\"]+)*)$'},fontStyle:{enums:["italic","normal","oblique"]},fontWeight:{enums:["normal","bold","bolder","lighter","100","200","300","400","500","600","800","900",100,200,300,400,500,600,700,800,900]},textDecoration:{enums:["none","underline","overline","line-through"]},textTransform:{enums:["none","uppercase","lowercase"]},textWrap:{enums:["none","wrap","ellipsis"]},textOverflowWrap:{enums:["whitespace","anywhere"]},textBackgroundShape:{enums:["rectangle","roundrectangle","round-rectangle"]},nodeShape:{enums:["rectangle","roundrectangle","round-rectangle","cutrectangle","cut-rectangle","bottomroundrectangle","bottom-round-rectangle","barrel","ellipse","triangle","round-triangle","square","pentagon","round-pentagon","hexagon","round-hexagon","concavehexagon","concave-hexagon","heptagon","round-heptagon","octagon","round-octagon","tag","round-tag","star","diamond","round-diamond","vee","rhomboid","polygon"]},overlayShape:{enums:["roundrectangle","round-rectangle","ellipse"]},compoundIncludeLabels:{enums:["include","exclude"]},arrowShape:{enums:["tee","triangle","triangle-tee","circle-triangle","triangle-cross","triangle-backcurve","vee","square","circle","diamond","chevron","none"]},arrowFill:{enums:["filled","hollow"]},display:{enums:["element","none"]},visibility:{enums:["hidden","visible"]},zCompoundDepth:{enums:["bottom","orphan","auto","top"]},zIndexCompare:{enums:["auto","manual"]},valign:{enums:["top","center","bottom"]},halign:{enums:["left","center","right"]},justification:{enums:["left","center","right","auto"]},text:{string:!0},data:{mapping:!0,regex:D("data")},layoutData:{mapping:!0,regex:D("layoutData")},scratch:{mapping:!0,regex:D("scratch")},mapData:{mapping:!0,regex:O("mapData")},mapLayoutData:{mapping:!0,regex:O("mapLayoutData")},mapScratch:{mapping:!0,regex:O("mapScratch")},fn:{mapping:!0,fn:!0},url:{regexes:$,singleRegexMatchValue:!0},urls:{regexes:$,singleRegexMatchValue:!0,multiple:!0},propList:{propList:!0},angle:{number:!0,units:"deg|rad",implicitUnits:"rad"},textRotation:{number:!0,units:"deg|rad",implicitUnits:"rad",enums:["none","autorotate"]},polygonPointList:{number:!0,multiple:!0,evenMultiple:!0,min:-1,max:1,unitless:!0},edgeDistances:{enums:["intersection","node-position"]},edgeEndpoint:{number:!0,multiple:!0,units:"%|px|em|deg|rad",implicitUnits:"px",enums:["inside-to-node","outside-to-node","outside-to-node-or-label","outside-to-line","outside-to-line-or-label"],singleEnum:!0,validate:function(gr,fr){switch(gr.length){case 2:return fr[0]!=="deg"&&fr[0]!=="rad"&&fr[1]!=="deg"&&fr[1]!=="rad";case 1:return mt(gr[0])||fr[0]==="deg"||fr[0]==="rad";default:return!1}}},easing:{regexes:["^(spring)\\s*\\(\\s*("+y+")\\s*,\\s*("+y+")\\s*\\)$","^(cubic-bezier)\\s*\\(\\s*("+y+")\\s*,\\s*("+y+")\\s*,\\s*("+y+")\\s*,\\s*("+y+")\\s*\\)$"],enums:["linear","ease","ease-in","ease-out","ease-in-out","ease-in-sine","ease-out-sine","ease-in-out-sine","ease-in-quad","ease-out-quad","ease-in-out-quad","ease-in-cubic","ease-out-cubic","ease-in-out-cubic","ease-in-quart","ease-out-quart","ease-in-out-quart","ease-in-quint","ease-out-quint","ease-in-out-quint","ease-in-expo","ease-out-expo","ease-in-out-expo","ease-in-circ","ease-out-circ","ease-in-out-circ"]},gradientDirection:{enums:["to-bottom","to-top","to-left","to-right","to-bottom-right","to-bottom-left","to-top-right","to-top-left","to-right-bottom","to-left-bottom","to-right-top","to-left-top"]},boundsExpansion:{number:!0,multiple:!0,min:0,validate:function(gr){var fr=gr.length;return fr===1||fr===2||fr===4}}};var q={zeroNonZero:function(gr,fr){return(gr==null||fr==null)&&gr!==fr||gr==0&&fr!=0?!0:gr!=0&&fr==0},any:function(gr,fr){return gr!=fr},emptyNonEmpty:function(gr,fr){var Jr=Z(gr),wi=Z(fr);return Jr&&!wi||!Jr&&wi}},S=$f.types,G=[{name:"label",type:S.text,triggersBounds:q.any,triggersZOrder:q.emptyNonEmpty},{name:"text-rotation",type:S.textRotation,triggersBounds:q.any},{name:"text-margin-x",type:S.bidirectionalSize,triggersBounds:q.any},{name:"text-margin-y",type:S.bidirectionalSize,triggersBounds:q.any}],W=[{name:"source-label",type:S.text,triggersBounds:q.any},{name:"source-text-rotation",type:S.textRotation,triggersBounds:q.any},{name:"source-text-margin-x",type:S.bidirectionalSize,triggersBounds:q.any},{name:"source-text-margin-y",type:S.bidirectionalSize,triggersBounds:q.any},{name:"source-text-offset",type:S.size,triggersBounds:q.any}],et=[{name:"target-label",type:S.text,triggersBounds:q.any},{name:"target-text-rotation",type:S.textRotation,triggersBounds:q.any},{name:"target-text-margin-x",type:S.bidirectionalSize,triggersBounds:q.any},{name:"target-text-margin-y",type:S.bidirectionalSize,triggersBounds:q.any},{name:"target-text-offset",type:S.size,triggersBounds:q.any}],at=[{name:"font-family",type:S.fontFamily,triggersBounds:q.any},{name:"font-style",type:S.fontStyle,triggersBounds:q.any},{name:"font-weight",type:S.fontWeight,triggersBounds:q.any},{name:"font-size",type:S.size,triggersBounds:q.any},{name:"text-transform",type:S.textTransform,triggersBounds:q.any},{name:"text-wrap",type:S.textWrap,triggersBounds:q.any},{name:"text-overflow-wrap",type:S.textOverflowWrap,triggersBounds:q.any},{name:"text-max-width",type:S.size,triggersBounds:q.any},{name:"text-outline-width",type:S.size,triggersBounds:q.any},{name:"line-height",type:S.positiveNumber,triggersBounds:q.any}],lt=[{name:"text-valign",type:S.valign,triggersBounds:q.any},{name:"text-halign",type:S.halign,triggersBounds:q.any},{name:"color",type:S.color},{name:"text-outline-color",type:S.color},{name:"text-outline-opacity",type:S.zeroOneNumber},{name:"text-background-color",type:S.color},{name:"text-background-opacity",type:S.zeroOneNumber},{name:"text-background-padding",type:S.size,triggersBounds:q.any},{name:"text-border-opacity",type:S.zeroOneNumber},{name:"text-border-color",type:S.color},{name:"text-border-width",type:S.size,triggersBounds:q.any},{name:"text-border-style",type:S.borderStyle,triggersBounds:q.any},{name:"text-background-shape",type:S.textBackgroundShape,triggersBounds:q.any},{name:"text-justification",type:S.justification}],ft=[{name:"events",type:S.bool},{name:"text-events",type:S.bool}],At=[{name:"display",type:S.display,triggersZOrder:q.any,triggersBounds:q.any,triggersBoundsOfParallelBeziers:!0},{name:"visibility",type:S.visibility,triggersZOrder:q.any},{name:"opacity",type:S.zeroOneNumber,triggersZOrder:q.zeroNonZero},{name:"text-opacity",type:S.zeroOneNumber},{name:"min-zoomed-font-size",type:S.size},{name:"z-compound-depth",type:S.zCompoundDepth,triggersZOrder:q.any},{name:"z-index-compare",type:S.zIndexCompare,triggersZOrder:q.any},{name:"z-index",type:S.nonNegativeInt,triggersZOrder:q.any}],kt=[{name:"overlay-padding",type:S.size,triggersBounds:q.any},{name:"overlay-color",type:S.color},{name:"overlay-opacity",type:S.zeroOneNumber,triggersBounds:q.zeroNonZero},{name:"overlay-shape",type:S.overlayShape,triggersBounds:q.any}],Mt=[{name:"underlay-padding",type:S.size,triggersBounds:q.any},{name:"underlay-color",type:S.color},{name:"underlay-opacity",type:S.zeroOneNumber,triggersBounds:q.zeroNonZero},{name:"underlay-shape",type:S.overlayShape,triggersBounds:q.any}],Dt=[{name:"transition-property",type:S.propList},{name:"transition-duration",type:S.time},{name:"transition-delay",type:S.time},{name:"transition-timing-function",type:S.easing}],jt=function(gr,fr){return fr.value==="label"?-gr.poolIndex():fr.pfValue},Zt=[{name:"height",type:S.nodeSize,triggersBounds:q.any,hashOverride:jt},{name:"width",type:S.nodeSize,triggersBounds:q.any,hashOverride:jt},{name:"shape",type:S.nodeShape,triggersBounds:q.any},{name:"shape-polygon-points",type:S.polygonPointList,triggersBounds:q.any},{name:"background-color",type:S.color},{name:"background-fill",type:S.fill},{name:"background-opacity",type:S.zeroOneNumber},{name:"background-blacken",type:S.nOneOneNumber},{name:"background-gradient-stop-colors",type:S.colors},{name:"background-gradient-stop-positions",type:S.percentages},{name:"background-gradient-direction",type:S.gradientDirection},{name:"padding",type:S.sizeMaybePercent,triggersBounds:q.any},{name:"padding-relative-to",type:S.paddingRelativeTo,triggersBounds:q.any},{name:"bounds-expansion",type:S.boundsExpansion,triggersBounds:q.any}],Kt=[{name:"border-color",type:S.color},{name:"border-opacity",type:S.zeroOneNumber},{name:"border-width",type:S.size,triggersBounds:q.any},{name:"border-style",type:S.borderStyle}],zt=[{name:"background-image",type:S.urls},{name:"background-image-crossorigin",type:S.bgCrossOrigin},{name:"background-image-opacity",type:S.zeroOneNumbers},{name:"background-image-containment",type:S.bgContainment},{name:"background-image-smoothing",type:S.bools},{name:"background-position-x",type:S.bgPos},{name:"background-position-y",type:S.bgPos},{name:"background-width-relative-to",type:S.bgRelativeTo},{name:"background-height-relative-to",type:S.bgRelativeTo},{name:"background-repeat",type:S.bgRepeat},{name:"background-fit",type:S.bgFit},{name:"background-clip",type:S.bgClip},{name:"background-width",type:S.bgWH},{name:"background-height",type:S.bgWH},{name:"background-offset-x",type:S.bgPos},{name:"background-offset-y",type:S.bgPos}],ee=[{name:"position",type:S.position,triggersBounds:q.any},{name:"compound-sizing-wrt-labels",type:S.compoundIncludeLabels,triggersBounds:q.any},{name:"min-width",type:S.size,triggersBounds:q.any},{name:"min-width-bias-left",type:S.sizeMaybePercent,triggersBounds:q.any},{name:"min-width-bias-right",type:S.sizeMaybePercent,triggersBounds:q.any},{name:"min-height",type:S.size,triggersBounds:q.any},{name:"min-height-bias-top",type:S.sizeMaybePercent,triggersBounds:q.any},{name:"min-height-bias-bottom",type:S.sizeMaybePercent,triggersBounds:q.any}],Vt=[{name:"line-style",type:S.lineStyle},{name:"line-color",type:S.color},{name:"line-fill",type:S.fill},{name:"line-cap",type:S.lineCap},{name:"line-opacity",type:S.zeroOneNumber},{name:"line-dash-pattern",type:S.numbers},{name:"line-dash-offset",type:S.number},{name:"line-gradient-stop-colors",type:S.colors},{name:"line-gradient-stop-positions",type:S.percentages},{name:"curve-style",type:S.curveStyle,triggersBounds:q.any,triggersBoundsOfParallelBeziers:!0},{name:"haystack-radius",type:S.zeroOneNumber,triggersBounds:q.any},{name:"source-endpoint",type:S.edgeEndpoint,triggersBounds:q.any},{name:"target-endpoint",type:S.edgeEndpoint,triggersBounds:q.any},{name:"control-point-step-size",type:S.size,triggersBounds:q.any},{name:"control-point-distances",type:S.bidirectionalSizes,triggersBounds:q.any},{name:"control-point-weights",type:S.numbers,triggersBounds:q.any},{name:"segment-distances",type:S.bidirectionalSizes,triggersBounds:q.any},{name:"segment-weights",type:S.numbers,triggersBounds:q.any},{name:"taxi-turn",type:S.bidirectionalSizeMaybePercent,triggersBounds:q.any},{name:"taxi-turn-min-distance",type:S.size,triggersBounds:q.any},{name:"taxi-direction",type:S.axisDirection,triggersBounds:q.any},{name:"edge-distances",type:S.edgeDistances,triggersBounds:q.any},{name:"arrow-scale",type:S.positiveNumber,triggersBounds:q.any},{name:"loop-direction",type:S.angle,triggersBounds:q.any},{name:"loop-sweep",type:S.angle,triggersBounds:q.any},{name:"source-distance-from-node",type:S.size,triggersBounds:q.any},{name:"target-distance-from-node",type:S.size,triggersBounds:q.any}],fe=[{name:"ghost",type:S.bool,triggersBounds:q.any},{name:"ghost-offset-x",type:S.bidirectionalSize,triggersBounds:q.any},{name:"ghost-offset-y",type:S.bidirectionalSize,triggersBounds:q.any},{name:"ghost-opacity",type:S.zeroOneNumber}],ge=[{name:"selection-box-color",type:S.color},{name:"selection-box-opacity",type:S.zeroOneNumber},{name:"selection-box-border-color",type:S.color},{name:"selection-box-border-width",type:S.size},{name:"active-bg-color",type:S.color},{name:"active-bg-opacity",type:S.zeroOneNumber},{name:"active-bg-size",type:S.size},{name:"outside-texture-bg-color",type:S.color},{name:"outside-texture-bg-opacity",type:S.zeroOneNumber}],ne=[];$f.pieBackgroundN=16,ne.push({name:"pie-size",type:S.sizeMaybePercent});for(var Pe=1;Pe<=$f.pieBackgroundN;Pe++)ne.push({name:"pie-"+Pe+"-background-color",type:S.color}),ne.push({name:"pie-"+Pe+"-background-size",type:S.percent}),ne.push({name:"pie-"+Pe+"-background-opacity",type:S.zeroOneNumber});var pe=[],bn=$f.arrowPrefixes=["source","mid-source","target","mid-target"];[{name:"arrow-shape",type:S.arrowShape,triggersBounds:q.any},{name:"arrow-color",type:S.color},{name:"arrow-fill",type:S.arrowFill}].forEach(function(wn){bn.forEach(function(gr){var fr=gr+"-"+wn.name,Jr=wn.type,wi=wn.triggersBounds;pe.push({name:fr,type:Jr,triggersBounds:wi})})},{});var ze=$f.properties=[].concat(ft,Dt,At,kt,Mt,fe,lt,at,G,W,et,Zt,Kt,zt,ne,ee,Vt,pe,ge),Ve=$f.propertyGroups={behavior:ft,transition:Dt,visibility:At,overlay:kt,underlay:Mt,ghost:fe,commonLabel:lt,labelDimensions:at,mainLabel:G,sourceLabel:W,targetLabel:et,nodeBody:Zt,nodeBorder:Kt,backgroundImage:zt,pie:ne,compound:ee,edgeLine:Vt,edgeArrow:pe,core:ge},En=$f.propertyGroupNames={},Dn=$f.propertyGroupKeys=Object.keys(Ve);Dn.forEach(function(wn){En[wn]=Ve[wn].map(function(gr){return gr.name}),Ve[wn].forEach(function(gr){return gr.groupKey=wn})});var Kn=$f.aliases=[{name:"content",pointsTo:"label"},{name:"control-point-distance",pointsTo:"control-point-distances"},{name:"control-point-weight",pointsTo:"control-point-weights"},{name:"edge-text-rotation",pointsTo:"text-rotation"},{name:"padding-left",pointsTo:"padding"},{name:"padding-right",pointsTo:"padding"},{name:"padding-top",pointsTo:"padding"},{name:"padding-bottom",pointsTo:"padding"}];$f.propertyNames=ze.map(function(wn){return wn.name});for(var Sn=0;Sn<ze.length;Sn++){var Wn=ze[Sn];ze[Wn.name]=Wn}for(var rr=0;rr<Kn.length;rr++){var vr=Kn[rr],ur=ze[vr.pointsTo],tr={name:vr.name,alias:!0,pointsTo:ur};ze.push(tr),ze[vr.name]=tr}})(),$f.getDefaultProperty=function(y){return this.getDefaultProperties()[y]},$f.getDefaultProperties=function(){var y=this._private;if(y.defaultProperties!=null)return y.defaultProperties;for(var g=me({"selection-box-color":"#ddd","selection-box-opacity":.65,"selection-box-border-color":"#aaa","selection-box-border-width":1,"active-bg-color":"black","active-bg-opacity":.15,"active-bg-size":30,"outside-texture-bg-color":"#000","outside-texture-bg-opacity":.125,events:"yes","text-events":"no","text-valign":"top","text-halign":"center","text-justification":"auto","line-height":1,color:"#000","text-outline-color":"#000","text-outline-width":0,"text-outline-opacity":1,"text-opacity":1,"text-decoration":"none","text-transform":"none","text-wrap":"none","text-overflow-wrap":"whitespace","text-max-width":9999,"text-background-color":"#000","text-background-opacity":0,"text-background-shape":"rectangle","text-background-padding":0,"text-border-opacity":0,"text-border-width":0,"text-border-style":"solid","text-border-color":"#000","font-family":"Helvetica Neue, Helvetica, sans-serif","font-style":"normal","font-weight":"normal","font-size":16,"min-zoomed-font-size":0,"text-rotation":"none","source-text-rotation":"none","target-text-rotation":"none",visibility:"visible",display:"element",opacity:1,"z-compound-depth":"auto","z-index-compare":"auto","z-index":0,label:"","text-margin-x":0,"text-margin-y":0,"source-label":"","source-text-offset":0,"source-text-margin-x":0,"source-text-margin-y":0,"target-label":"","target-text-offset":0,"target-text-margin-x":0,"target-text-margin-y":0,"overlay-opacity":0,"overlay-color":"#000","overlay-padding":10,"overlay-shape":"round-rectangle","underlay-opacity":0,"underlay-color":"#000","underlay-padding":10,"underlay-shape":"round-rectangle","transition-property":"none","transition-duration":0,"transition-delay":0,"transition-timing-function":"linear","background-blacken":0,"background-color":"#999","background-fill":"solid","background-opacity":1,"background-image":"none","background-image-crossorigin":"anonymous","background-image-opacity":1,"background-image-containment":"inside","background-image-smoothing":"yes","background-position-x":"50%","background-position-y":"50%","background-offset-x":0,"background-offset-y":0,"background-width-relative-to":"include-padding","background-height-relative-to":"include-padding","background-repeat":"no-repeat","background-fit":"none","background-clip":"node","background-width":"auto","background-height":"auto","border-color":"#000","border-opacity":1,"border-width":0,"border-style":"solid",height:30,width:30,shape:"ellipse","shape-polygon-points":"-1, -1,   1, -1,   1, 1,   -1, 1","bounds-expansion":0,"background-gradient-direction":"to-bottom","background-gradient-stop-colors":"#999","background-gradient-stop-positions":"0%",ghost:"no","ghost-offset-y":0,"ghost-offset-x":0,"ghost-opacity":0,padding:0,"padding-relative-to":"width",position:"origin","compound-sizing-wrt-labels":"include","min-width":0,"min-width-bias-left":0,"min-width-bias-right":0,"min-height":0,"min-height-bias-top":0,"min-height-bias-bottom":0},{"pie-size":"100%"},[{name:"pie-{{i}}-background-color",value:"black"},{name:"pie-{{i}}-background-size",value:"0%"},{name:"pie-{{i}}-background-opacity",value:1}].reduce(function(q,S){for(var G=1;G<=$f.pieBackgroundN;G++){var W=S.name.replace("{{i}}",G),et=S.value;q[W]=et}return q},{}),{"line-style":"solid","line-color":"#999","line-fill":"solid","line-cap":"butt","line-opacity":1,"line-gradient-stop-colors":"#999","line-gradient-stop-positions":"0%","control-point-step-size":40,"control-point-weights":.5,"segment-weights":.5,"segment-distances":20,"taxi-turn":"50%","taxi-turn-min-distance":10,"taxi-direction":"auto","edge-distances":"intersection","curve-style":"haystack","haystack-radius":0,"arrow-scale":1,"loop-direction":"-45deg","loop-sweep":"-90deg","source-distance-from-node":0,"target-distance-from-node":0,"source-endpoint":"outside-to-node","target-endpoint":"outside-to-node","line-dash-pattern":[6,3],"line-dash-offset":0},[{name:"arrow-shape",value:"none"},{name:"arrow-color",value:"#999"},{name:"arrow-fill",value:"filled"}].reduce(function(q,S){return $f.arrowPrefixes.forEach(function(G){var W=G+"-"+S.name,et=S.value;q[W]=et}),q},{})),x={},T=0;T<this.properties.length;T++){var A=this.properties[T];if(!A.pointsTo){var D=A.name,O=g[D],$=this.parse(D,O);x[D]=$}}return y.defaultProperties=x,y.defaultProperties},$f.addDefaultStylesheet=function(){this.selector(":parent").css({shape:"rectangle",padding:10,"background-color":"#eee","border-color":"#ccc","border-width":1}).selector("edge").css({width:3}).selector(":loop").css({"curve-style":"bezier"}).selector("edge:compound").css({"curve-style":"bezier","source-endpoint":"outside-to-line","target-endpoint":"outside-to-line"}).selector(":selected").css({"background-color":"#0169D9","line-color":"#0169D9","source-arrow-color":"#0169D9","target-arrow-color":"#0169D9","mid-source-arrow-color":"#0169D9","mid-target-arrow-color":"#0169D9"}).selector(":parent:selected").css({"background-color":"#CCE1F9","border-color":"#aec8e5"}).selector(":active").css({"overlay-color":"black","overlay-padding":10,"overlay-opacity":.25}),this.defaultLength=this.length};var l9={};l9.parse=function(y,g,x,T){var A=this;if(yt(g))return A.parseImplWarn(y,g,x,T);var D=T==="mapping"||T===!0||T===!1||T==null?"dontcare":T,O=x?"t":"f",$=""+g,q=ed(y,$,O,D),S=A.propCache=A.propCache||[],G;return(G=S[q])||(G=S[q]=A.parseImplWarn(y,g,x,T)),(x||T==="mapping")&&(G=$b(G),G&&(G.value=$b(G.value))),G},l9.parseImplWarn=function(y,g,x,T){var A=this.parseImpl(y,g,x,T);return!A&&g!=null&&Sc("The style property `".concat(y,": ").concat(g,"` is invalid")),A&&(A.name==="width"||A.name==="height")&&g==="label"&&Sc("The style value of `label` is deprecated for `"+A.name+"`"),A},l9.parseImpl=function(y,g,x,T){var A=this;y=pn(y);var D=A.properties[y],O=g,$=A.types;if(!D||g===void 0)return null;D.alias&&(D=D.pointsTo,y=D.name);var q=mt(g);q&&(g=g.trim());var S=D.type;if(!S)return null;if(x&&(g===""||g===null))return{name:y,value:g,bypass:!0,deleteBypass:!0};if(yt(g))return{name:y,value:g,strValue:"fn",mapped:$.fn,bypass:x};var G,W;if(!(!q||T||g.length<7||g[1]!=="a")){if(g.length>=7&&g[0]==="d"&&(G=new RegExp($.data.regex).exec(g))){if(x)return!1;var et=$.data;return{name:y,value:G,strValue:""+g,mapped:et,field:G[1],bypass:x}}else if(g.length>=10&&g[0]==="m"&&(W=new RegExp($.mapData.regex).exec(g))){if(x||S.multiple)return!1;var at=$.mapData;if(!(S.color||S.number))return!1;var lt=this.parse(y,W[4]);if(!lt||lt.mapped)return!1;var ft=this.parse(y,W[5]);if(!ft||ft.mapped)return!1;if(lt.pfValue===ft.pfValue||lt.strValue===ft.strValue)return Sc("`"+y+": "+g+"` is not a valid mapper because the output range is zero; converting to `"+y+": "+lt.strValue+"`"),this.parse(y,lt.strValue);if(S.color){var At=lt.value,kt=ft.value,Mt=At[0]===kt[0]&&At[1]===kt[1]&&At[2]===kt[2]&&(At[3]===kt[3]||(At[3]==null||At[3]===1)&&(kt[3]==null||kt[3]===1));if(Mt)return!1}return{name:y,value:W,strValue:""+g,mapped:at,field:W[1],fieldMin:parseFloat(W[2]),fieldMax:parseFloat(W[3]),valueMin:lt.value,valueMax:ft.value,bypass:x}}}if(S.multiple&&T!=="multiple"){var Dt;if(q?Dt=g.split(/\s+/):dt(g)?Dt=g:Dt=[g],S.evenMultiple&&Dt.length%2!==0)return null;for(var jt=[],Zt=[],Kt=[],zt="",ee=!1,Vt=0;Vt<Dt.length;Vt++){var fe=A.parse(y,Dt[Vt],x,"multiple");ee=ee||mt(fe.value),jt.push(fe.value),Kt.push(fe.pfValue!=null?fe.pfValue:fe.value),Zt.push(fe.units),zt+=(Vt>0?" ":"")+fe.strValue}return S.validate&&!S.validate(jt,Zt)?null:S.singleEnum&&ee?jt.length===1&&mt(jt[0])?{name:y,value:jt[0],strValue:jt[0],bypass:x}:null:{name:y,value:jt,pfValue:Kt,strValue:zt,bypass:x,units:Zt}}var ge=function(){for(var fr=0;fr<S.enums.length;fr++){var Jr=S.enums[fr];if(Jr===g)return{name:y,value:g,strValue:""+g,bypass:x}}return null};if(S.number){var ne,Pe="px";if(S.units&&(ne=S.units),S.implicitUnits&&(Pe=S.implicitUnits),!S.unitless)if(q){var pe="px|em"+(S.allowPercent?"|\\%":"");ne&&(pe=ne);var bn=g.match("^("+Ke+")("+pe+")?$");bn&&(g=bn[1],ne=bn[2]||Pe)}else(!ne||S.implicitUnits)&&(ne=Pe);if(g=parseFloat(g),isNaN(g)&&S.enums===void 0)return null;if(isNaN(g)&&S.enums!==void 0)return g=O,ge();if(S.integer&&!pt(g)||S.min!==void 0&&(g<S.min||S.strictMin&&g===S.min)||S.max!==void 0&&(g>S.max||S.strictMax&&g===S.max))return null;var ze={name:y,value:g,strValue:""+g+(ne||""),units:ne,bypass:x};return S.unitless||ne!=="px"&&ne!=="em"?ze.pfValue=g:ze.pfValue=ne==="px"||!ne?g:this.getEmSizeInPixels()*g,(ne==="ms"||ne==="s")&&(ze.pfValue=ne==="ms"?g:1e3*g),(ne==="deg"||ne==="rad")&&(ze.pfValue=ne==="rad"?g:xY(g)),ne==="%"&&(ze.pfValue=g/100),ze}else if(S.propList){var Ve=[],En=""+g;if(En!=="none"){for(var Dn=En.split(/\s*,\s*|\s+/),Kn=0;Kn<Dn.length;Kn++){var Sn=Dn[Kn].trim();A.properties[Sn]?Ve.push(Sn):Sc("`"+Sn+"` is not a valid property name")}if(Ve.length===0)return null}return{name:y,value:Ve,strValue:Ve.length===0?"none":Ve.join(" "),bypass:x}}else if(S.color){var Wn=Oo(g);return Wn?{name:y,value:Wn,pfValue:Wn,strValue:"rgb("+Wn[0]+","+Wn[1]+","+Wn[2]+")",bypass:x}:null}else if(S.regex||S.regexes){if(S.enums){var rr=ge();if(rr)return rr}for(var vr=S.regexes?S.regexes:[S.regex],ur=0;ur<vr.length;ur++){var tr=new RegExp(vr[ur]),wn=tr.exec(g);if(wn)return{name:y,value:S.singleRegexMatchValue?wn[1]:wn,strValue:""+g,bypass:x}}return null}else return S.string?{name:y,value:""+g,strValue:""+g,bypass:x}:S.enums?ge():null};var d1=function y(g){if(!(this instanceof y))return new y(g);if(!Nt(g)){bl("A style must have a core reference");return}this._private={cy:g,coreStyle:{}},this.length=0,this.resetToDefault()},g1=d1.prototype;g1.instanceString=function(){return"style"},g1.clear=function(){for(var y=this._private,g=y.cy,x=g.elements(),T=0;T<this.length;T++)this[T]=void 0;return this.length=0,y.contextStyles={},y.propDiffs={},this.cleanElements(x,!0),x.forEach(function(A){var D=A[0]._private;D.styleDirty=!0,D.appliedInitStyle=!1}),this},g1.resetToDefault=function(){return this.clear(),this.addDefaultStylesheet(),this},g1.core=function(y){return this._private.coreStyle[y]||this.getDefaultProperty(y)},g1.selector=function(y){var g=y==="core"?null:new ym(y),x=this.length++;return this[x]={selector:g,properties:[],mappedProperties:[],index:x},this},g1.css=function(){var y=this,g=arguments;if(g.length===1)for(var x=g[0],T=0;T<y.properties.length;T++){var A=y.properties[T],D=x[A.name];D===void 0&&(D=x[Me(A.name)]),D!==void 0&&this.cssRule(A.name,D)}else g.length===2&&this.cssRule(g[0],g[1]);return this},g1.style=g1.css,g1.cssRule=function(y,g){var x=this.parse(y,g);if(x){var T=this.length-1;this[T].properties.push(x),this[T].properties[x.name]=x,x.name.match(/pie-(\d+)-background-size/)&&x.value&&(this._private.hasPie=!0),x.mapped&&this[T].mappedProperties.push(x);var A=!this[T].selector;A&&(this._private.coreStyle[x.name]=x)}return this},g1.append=function(y){return qt(y)?y.appendToStyle(this):dt(y)?this.appendFromJson(y):mt(y)&&this.appendFromString(y),this},d1.fromJson=function(y,g){var x=new d1(y);return x.fromJson(g),x},d1.fromString=function(y,g){return new d1(y).fromString(g)},[f1,Nk,HL,Hb,u9,GL,$f,l9].forEach(function(y){me(g1,y)}),d1.types=g1.types,d1.properties=g1.properties,d1.propertyGroups=g1.propertyGroups,d1.propertyGroupNames=g1.propertyGroupNames,d1.propertyGroupKeys=g1.propertyGroupKeys;var SJ={style:function(g){if(g){var x=this.setStyle(g);x.update()}return this._private.style},setStyle:function(g){var x=this._private;return qt(g)?x.style=g.generateStyle(this):dt(g)?x.style=d1.fromJson(this,g):mt(g)?x.style=d1.fromString(this,g):x.style=d1(this),x.style},updateStyle:function(){this.mutableElements().updateStyle()}},AJ="single",A3={autolock:function(g){if(g!==void 0)this._private.autolock=!!g;else return this._private.autolock;return this},autoungrabify:function(g){if(g!==void 0)this._private.autoungrabify=!!g;else return this._private.autoungrabify;return this},autounselectify:function(g){if(g!==void 0)this._private.autounselectify=!!g;else return this._private.autounselectify;return this},selectionType:function(g){var x=this._private;if(x.selectionType==null&&(x.selectionType=AJ),g!==void 0)(g==="additive"||g==="single")&&(x.selectionType=g);else return x.selectionType;return this},panningEnabled:function(g){if(g!==void 0)this._private.panningEnabled=!!g;else return this._private.panningEnabled;return this},userPanningEnabled:function(g){if(g!==void 0)this._private.userPanningEnabled=!!g;else return this._private.userPanningEnabled;return this},zoomingEnabled:function(g){if(g!==void 0)this._private.zoomingEnabled=!!g;else return this._private.zoomingEnabled;return this},userZoomingEnabled:function(g){if(g!==void 0)this._private.userZoomingEnabled=!!g;else return this._private.userZoomingEnabled;return this},boxSelectionEnabled:function(g){if(g!==void 0)this._private.boxSelectionEnabled=!!g;else return this._private.boxSelectionEnabled;return this},pan:function(){var g=arguments,x=this._private.pan,T,A,D,O,$;switch(g.length){case 0:return x;case 1:if(mt(g[0]))return T=g[0],x[T];if(ht(g[0])){if(!this._private.panningEnabled)return this;D=g[0],O=D.x,$=D.y,X(O)&&(x.x=O),X($)&&(x.y=$),this.emit("pan viewport")}break;case 2:if(!this._private.panningEnabled)return this;T=g[0],A=g[1],(T==="x"||T==="y")&&X(A)&&(x[T]=A),this.emit("pan viewport");break}return this.notify("viewport"),this},panBy:function(g,x){var T=arguments,A=this._private.pan,D,O,$,q,S;if(!this._private.panningEnabled)return this;switch(T.length){case 1:ht(g)&&($=T[0],q=$.x,S=$.y,X(q)&&(A.x+=q),X(S)&&(A.y+=S),this.emit("pan viewport"));break;case 2:D=g,O=x,(D==="x"||D==="y")&&X(O)&&(A[D]+=O),this.emit("pan viewport");break}return this.notify("viewport"),this},fit:function(g,x){var T=this.getFitViewport(g,x);if(T){var A=this._private;A.zoom=T.zoom,A.pan=T.pan,this.emit("pan zoom viewport"),this.notify("viewport")}return this},getFitViewport:function(g,x){if(X(g)&&x===void 0&&(x=g,g=void 0),!(!this._private.panningEnabled||!this._private.zoomingEnabled)){var T;if(mt(g)){var A=g;g=this.$(A)}else if(Ht(g)){var D=g;T={x1:D.x1,y1:D.y1,x2:D.x2,y2:D.y2},T.w=T.x2-T.x1,T.h=T.y2-T.y1}else xt(g)||(g=this.mutableElements());if(!(xt(g)&&g.empty())){T=T||g.boundingBox();var O=this.width(),$=this.height(),q;if(x=X(x)?x:0,!isNaN(O)&&!isNaN($)&&O>0&&$>0&&!isNaN(T.w)&&!isNaN(T.h)&&T.w>0&&T.h>0){q=Math.min((O-2*x)/T.w,($-2*x)/T.h),q=q>this._private.maxZoom?this._private.maxZoom:q,q=q<this._private.minZoom?this._private.minZoom:q;var S={x:(O-q*(T.x1+T.x2))/2,y:($-q*(T.y1+T.y2))/2};return{zoom:q,pan:S}}}}},zoomRange:function(g,x){var T=this._private;if(x==null){var A=g;g=A.min,x=A.max}return X(g)&&X(x)&&g<=x?(T.minZoom=g,T.maxZoom=x):X(g)&&x===void 0&&g<=T.maxZoom?T.minZoom=g:X(x)&&g===void 0&&x>=T.minZoom&&(T.maxZoom=x),this},minZoom:function(g){return g===void 0?this._private.minZoom:this.zoomRange({min:g})},maxZoom:function(g){return g===void 0?this._private.maxZoom:this.zoomRange({max:g})},getZoomedViewport:function(g){var x=this._private,T=x.pan,A=x.zoom,D,O,$=!1;if(x.zoomingEnabled||($=!0),X(g)?O=g:ht(g)&&(O=g.level,g.position!=null?D=OT(g.position,A,T):g.renderedPosition!=null&&(D=g.renderedPosition),D!=null&&!x.panningEnabled&&($=!0)),O=O>x.maxZoom?x.maxZoom:O,O=O<x.minZoom?x.minZoom:O,$||!X(O)||O===A||D!=null&&(!X(D.x)||!X(D.y)))return null;if(D!=null){var q=T,S=A,G=O,W={x:-G/S*(D.x-q.x)+D.x,y:-G/S*(D.y-q.y)+D.y};return{zoomed:!0,panned:!0,zoom:G,pan:W}}else return{zoomed:!0,panned:!1,zoom:O,pan:T}},zoom:function(g){if(g===void 0)return this._private.zoom;var x=this.getZoomedViewport(g),T=this._private;return x==null||!x.zoomed?this:(T.zoom=x.zoom,x.panned&&(T.pan.x=x.pan.x,T.pan.y=x.pan.y),this.emit("zoom"+(x.panned?" pan":"")+" viewport"),this.notify("viewport"),this)},viewport:function(g){var x=this._private,T=!0,A=!0,D=[],O=!1,$=!1;if(!g)return this;if(X(g.zoom)||(T=!1),ht(g.pan)||(A=!1),!T&&!A)return this;if(T){var q=g.zoom;q<x.minZoom||q>x.maxZoom||!x.zoomingEnabled?O=!0:(x.zoom=q,D.push("zoom"))}if(A&&(!O||!g.cancelOnFailedZoom)&&x.panningEnabled){var S=g.pan;X(S.x)&&(x.pan.x=S.x,$=!1),X(S.y)&&(x.pan.y=S.y,$=!1),$||D.push("pan")}return D.length>0&&(D.push("viewport"),this.emit(D.join(" ")),this.notify("viewport")),this},center:function(g){var x=this.getCenterPan(g);return x&&(this._private.pan=x,this.emit("pan viewport"),this.notify("viewport")),this},getCenterPan:function(g,x){if(this._private.panningEnabled){if(mt(g)){var T=g;g=this.mutableElements().filter(T)}else xt(g)||(g=this.mutableElements());if(g.length!==0){var A=g.boundingBox(),D=this.width(),O=this.height();x=x===void 0?this._private.zoom:x;var $={x:(D-x*(A.x1+A.x2))/2,y:(O-x*(A.y1+A.y2))/2};return $}}},reset:function(){return!this._private.panningEnabled||!this._private.zoomingEnabled?this:(this.viewport({pan:{x:0,y:0},zoom:1}),this)},invalidateSize:function(){this._private.sizeCache=null},size:function(){var g=this._private,x=g.container;return g.sizeCache=g.sizeCache||(x?function(){var T=R.getComputedStyle(x),A=function(O){return parseFloat(T.getPropertyValue(O))};return{width:x.clientWidth-A("padding-left")-A("padding-right"),height:x.clientHeight-A("padding-top")-A("padding-bottom")}}():{width:1,height:1})},width:function(){return this.size().width},height:function(){return this.size().height},extent:function(){var g=this._private.pan,x=this._private.zoom,T=this.renderedExtent(),A={x1:(T.x1-g.x)/x,x2:(T.x2-g.x)/x,y1:(T.y1-g.y)/x,y2:(T.y2-g.y)/x};return A.w=A.x2-A.x1,A.h=A.y2-A.y1,A},renderedExtent:function(){var g=this.width(),x=this.height();return{x1:0,y1:0,x2:g,y2:x,w:g,h:x}},multiClickDebounceTime:function(g){if(g)this._private.multiClickDebounceTime=g;else return this._private.multiClickDebounceTime;return this}};A3.centre=A3.center,A3.autolockNodes=A3.autolock,A3.autoungrabifyNodes=A3.autoungrabify;var Pk={data:Ac.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeData:Ac.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),scratch:Ac.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:Ac.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0})};Pk.attr=Pk.data,Pk.removeAttr=Pk.removeData;var Fk=function(g){var x=this;g=me({},g);var T=g.container;T&&!U(T)&&U(T[0])&&(T=T[0]);var A=T?T._cyreg:null;A=A||{},A&&A.cy&&(A.cy.destroy(),A={});var D=A.readies=A.readies||[];T&&(T._cyreg=A),A.cy=x;var O=R!==void 0&&T!==void 0&&!g.headless,$=g;$.layout=me({name:O?"grid":"null"},$.layout),$.renderer=me({name:O?"canvas":"null"},$.renderer);var q=function(lt,ft,At){return ft!==void 0?ft:At!==void 0?At:lt},S=this._private={container:T,ready:!1,options:$,elements:new jf(this),listeners:[],aniEles:new jf(this),data:$.data||{},scratch:{},layout:null,renderer:null,destroyed:!1,notificationsEnabled:!0,minZoom:1e-50,maxZoom:1e50,zoomingEnabled:q(!0,$.zoomingEnabled),userZoomingEnabled:q(!0,$.userZoomingEnabled),panningEnabled:q(!0,$.panningEnabled),userPanningEnabled:q(!0,$.userPanningEnabled),boxSelectionEnabled:q(!0,$.boxSelectionEnabled),autolock:q(!1,$.autolock,$.autolockNodes),autoungrabify:q(!1,$.autoungrabify,$.autoungrabifyNodes),autounselectify:q(!1,$.autounselectify),styleEnabled:$.styleEnabled===void 0?O:$.styleEnabled,zoom:X($.zoom)?$.zoom:1,pan:{x:ht($.pan)&&X($.pan.x)?$.pan.x:0,y:ht($.pan)&&X($.pan.y)?$.pan.y:0},animation:{current:[],queue:[]},hasCompoundNodes:!1,multiClickDebounceTime:q(250,$.multiClickDebounceTime)};this.createEmitter(),this.selectionType($.selectionType),this.zoomRange({min:$.minZoom,max:$.maxZoom});var G=function(lt,ft){var At=lt.some(It);if(At)return K5.all(lt).then(ft);ft(lt)};S.styleEnabled&&x.setStyle([]);var W=me({},$,$.renderer);x.initRenderer(W);var et=function(lt,ft,At){x.notifications(!1);var kt=x.mutableElements();kt.length>0&&kt.remove(),lt!=null&&(ht(lt)||dt(lt))&&x.add(lt),x.one("layoutready",function(Dt){x.notifications(!0),x.emit(Dt),x.one("load",ft),x.emitAndNotify("load")}).one("layoutstop",function(){x.one("done",At),x.emit("done")});var Mt=me({},x._private.options.layout);Mt.eles=x.elements(),x.layout(Mt).run()};G([$.style,$.elements],function(at){var lt=at[0],ft=at[1];S.styleEnabled&&x.style().append(lt),et(ft,function(){x.startAnimationLoop(),S.ready=!0,yt($.ready)&&x.on("ready",$.ready);for(var At=0;At<D.length;At++){var kt=D[At];x.on("ready",kt)}A&&(A.readies=[]),x.emit("ready")},$.done)})},h9=Fk.prototype;me(h9,{instanceString:function(){return"core"},isReady:function(){return this._private.ready},destroyed:function(){return this._private.destroyed},ready:function(g){return this.isReady()?this.emitter().emit("ready",[],g):this.on("ready",g),this},destroy:function(){var g=this;if(!g.destroyed())return g.stopAnimationLoop(),g.destroyRenderer(),this.emit("destroy"),g._private.destroyed=!0,g},hasElementWithId:function(g){return this._private.elements.hasElementWithId(g)},getElementById:function(g){return this._private.elements.getElementById(g)},hasCompoundNodes:function(){return this._private.hasCompoundNodes},headless:function(){return this._private.renderer.isHeadless()},styleEnabled:function(){return this._private.styleEnabled},addToPool:function(g){return this._private.elements.merge(g),this},removeFromPool:function(g){return this._private.elements.unmerge(g),this},container:function(){return this._private.container||null},mount:function(g){if(g!=null){var x=this,T=x._private,A=T.options;return!U(g)&&U(g[0])&&(g=g[0]),x.stopAnimationLoop(),x.destroyRenderer(),T.container=g,T.styleEnabled=!0,x.invalidateSize(),x.initRenderer(me({},A,A.renderer,{name:A.renderer.name==="null"?"canvas":A.renderer.name})),x.startAnimationLoop(),x.style(A.style),x.emit("mount"),x}},unmount:function(){var g=this;return g.stopAnimationLoop(),g.destroyRenderer(),g.initRenderer({name:"null"}),g.emit("unmount"),g},options:function(){return $b(this._private.options)},json:function(g){var x=this,T=x._private,A=x.mutableElements(),D=function(jt){return x.getElementById(jt.id())};if(ht(g)){if(x.startBatch(),g.elements){var O={},$=function(jt,Zt){for(var Kt=[],zt=[],ee=0;ee<jt.length;ee++){var Vt=jt[ee];if(!Vt.data.id){Sc("cy.json() cannot handle elements without an ID attribute");continue}var fe=""+Vt.data.id,ge=x.getElementById(fe);O[fe]=!0,ge.length!==0?zt.push({ele:ge,json:Vt}):(Zt&&(Vt.group=Zt),Kt.push(Vt))}x.add(Kt);for(var ne=0;ne<zt.length;ne++){var Pe=zt[ne],pe=Pe.ele,bn=Pe.json;pe.json(bn)}};if(dt(g.elements))$(g.elements);else for(var q=["nodes","edges"],S=0;S<q.length;S++){var G=q[S],W=g.elements[G];dt(W)&&$(W,G)}var et=x.collection();A.filter(function(Dt){return!O[Dt.id()]}).forEach(function(Dt){Dt.isParent()?et.merge(Dt):Dt.remove()}),et.forEach(function(Dt){return Dt.children().move({parent:null})}),et.forEach(function(Dt){return D(Dt).remove()})}g.style&&x.style(g.style),g.zoom!=null&&g.zoom!==T.zoom&&x.zoom(g.zoom),g.pan&&(g.pan.x!==T.pan.x||g.pan.y!==T.pan.y)&&x.pan(g.pan),g.data&&x.data(g.data);for(var at=["minZoom","maxZoom","zoomingEnabled","userZoomingEnabled","panningEnabled","userPanningEnabled","boxSelectionEnabled","autolock","autoungrabify","autounselectify","multiClickDebounceTime"],lt=0;lt<at.length;lt++){var ft=at[lt];g[ft]!=null&&x[ft](g[ft])}return x.endBatch(),this}else{var At=!!g,kt={};At?kt.elements=this.elements().map(function(Dt){return Dt.json()}):(kt.elements={},A.forEach(function(Dt){var jt=Dt.group();kt.elements[jt]||(kt.elements[jt]=[]),kt.elements[jt].push(Dt.json())})),this._private.styleEnabled&&(kt.style=x.style().json()),kt.data=$b(x.data());var Mt=T.options;return kt.zoomingEnabled=T.zoomingEnabled,kt.userZoomingEnabled=T.userZoomingEnabled,kt.zoom=T.zoom,kt.minZoom=T.minZoom,kt.maxZoom=T.maxZoom,kt.panningEnabled=T.panningEnabled,kt.userPanningEnabled=T.userPanningEnabled,kt.pan=$b(T.pan),kt.boxSelectionEnabled=T.boxSelectionEnabled,kt.renderer=$b(Mt.renderer),kt.hideEdgesOnViewport=Mt.hideEdgesOnViewport,kt.textureOnViewport=Mt.textureOnViewport,kt.wheelSensitivity=Mt.wheelSensitivity,kt.motionBlur=Mt.motionBlur,kt.multiClickDebounceTime=Mt.multiClickDebounceTime,kt}}}),h9.$id=h9.getElementById,[vJ,kJ,SB,zL,o9,TJ,qL,c9,SJ,A3,Pk].forEach(function(y){me(h9,y)});var LJ={fit:!0,directed:!1,padding:30,circle:!1,grid:!1,spacingFactor:1.75,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,roots:void 0,maximal:!1,depthSort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(g,x){return!0},ready:void 0,stop:void 0,transform:function(g,x){return x}},ax=function(g){return g.scratch("breadthfirst")},VL=function(g,x){return g.scratch("breadthfirst",x)};function AB(y){this.options=me({},LJ,y)}AB.prototype.run=function(){var y=this.options,g=y,x=y.cy,T=g.eles,A=T.nodes().filter(function(Ci){return!Ci.isParent()}),D=T,O=g.directed,$=g.maximal||g.maximalAdjustments>0,q=Rd(g.boundingBox?g.boundingBox:{x1:0,y1:0,w:x.width(),h:x.height()}),S;if(xt(g.roots))S=g.roots;else if(dt(g.roots)){for(var G=[],W=0;W<g.roots.length;W++){var et=g.roots[W],at=x.getElementById(et);G.push(at)}S=x.collection(G)}else if(mt(g.roots))S=x.$(g.roots);else if(O)S=A.roots();else{var lt=T.components();S=x.collection();for(var ft=function(hi){var gs=lt[hi],qi=gs.maxDegree(!1),Si=gs.filter(function(Ui){return Ui.degree(!1)===qi});S=S.add(Si)},At=0;At<lt.length;At++)ft(At)}var kt=[],Mt={},Dt=function(hi,gs){kt[gs]==null&&(kt[gs]=[]);var qi=kt[gs].length;kt[gs].push(hi),VL(hi,{index:qi,depth:gs})},jt=function(hi,gs){var qi=ax(hi),Si=qi.depth,Ui=qi.index;kt[Si][Ui]=null,Dt(hi,gs)};D.bfs({roots:S,directed:g.directed,visit:function(hi,gs,qi,Si,Ui){var Ga=hi[0],Ys=Ga.id();Dt(Ga,Ui),Mt[Ys]=!0}});for(var Zt=[],Kt=0;Kt<A.length;Kt++){var zt=A[Kt];Mt[zt.id()]||Zt.push(zt)}var ee=function(hi){for(var gs=kt[hi],qi=0;qi<gs.length;qi++){var Si=gs[qi];if(Si==null){gs.splice(qi,1),qi--;continue}VL(Si,{depth:hi,index:qi})}},Vt=function(){for(var hi=0;hi<kt.length;hi++)ee(hi)},fe=function(hi,gs){for(var qi=ax(hi),Si=hi.incomers().filter(function(Qt){return Qt.isNode()&&T.has(Qt)}),Ui=-1,Ga=hi.id(),Ys=0;Ys<Si.length;Ys++){var zs=Si[Ys],Er=ax(zs);Ui=Math.max(Ui,Er.depth)}return qi.depth<=Ui?gs[Ga]?null:(jt(hi,Ui+1),gs[Ga]=!0,!0):!1};if(O&&$){var ge=[],ne={},Pe=function(hi){return ge.push(hi)},pe=function(){return ge.shift()};for(A.forEach(function(Ci){return ge.push(Ci)});ge.length>0;){var bn=pe(),ze=fe(bn,ne);if(ze)bn.outgoers().filter(function(Ci){return Ci.isNode()&&T.has(Ci)}).forEach(Pe);else if(ze===null){Sc("Detected double maximal shift for node `"+bn.id()+"`.  Bailing maximal adjustment due to cycle.  Use `options.maximal: true` only on DAGs.");break}}}Vt();var Ve=0;if(g.avoidOverlap)for(var En=0;En<A.length;En++){var Dn=A[En],Kn=Dn.layoutDimensions(g),Sn=Kn.w,Wn=Kn.h;Ve=Math.max(Ve,Sn,Wn)}var rr={},vr=function(hi){if(rr[hi.id()])return rr[hi.id()];for(var gs=ax(hi).depth,qi=hi.neighborhood(),Si=0,Ui=0,Ga=0;Ga<qi.length;Ga++){var Ys=qi[Ga];if(!(Ys.isEdge()||Ys.isParent()||!A.has(Ys))){var zs=ax(Ys);if(zs!=null){var Er=zs.index,Qt=zs.depth;if(!(Er==null||Qt==null)){var jn=kt[Qt].length;Qt<gs&&(Si+=Er/jn,Ui++)}}}}return Ui=Math.max(1,Ui),Si=Si/Ui,Ui===0&&(Si=0),rr[hi.id()]=Si,Si},ur=function(hi,gs){var qi=vr(hi),Si=vr(gs),Ui=qi-Si;return Ui===0?oe(hi.id(),gs.id()):Ui};g.depthSort!==void 0&&(ur=g.depthSort);for(var tr=0;tr<kt.length;tr++)kt[tr].sort(ur),ee(tr);for(var wn=[],gr=0;gr<Zt.length;gr++)wn.push(Zt[gr]);kt.unshift(wn),Vt();for(var fr=0,Jr=0;Jr<kt.length;Jr++)fr=Math.max(kt[Jr].length,fr);var wi={x:q.x1+q.w/2,y:q.x1+q.h/2},Ks=kt.reduce(function(Ci,hi){return Math.max(Ci,hi.length)},0),ka=function(hi){var gs=ax(hi),qi=gs.depth,Si=gs.index,Ui=kt[qi].length,Ga=Math.max(q.w/((g.grid?Ks:Ui)+1),Ve),Ys=Math.max(q.h/(kt.length+1),Ve),zs=Math.min(q.w/2/kt.length,q.h/2/kt.length);if(zs=Math.max(zs,Ve),g.circle){var Qt=zs*qi+zs-(kt.length>0&&kt[0].length<=3?zs/2:0),jn=2*Math.PI/kt[qi].length*Si;return qi===0&&kt[0].length===1&&(Qt=1),{x:wi.x+Qt*Math.cos(jn),y:wi.y+Qt*Math.sin(jn)}}else{var Er={x:wi.x+(Si+1-(Ui+1)/2)*Ga,y:(qi+1)*Ys};return Er}};return T.nodes().layoutPositions(this,g,ka),this};var MJ={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:function(g,x){return!0},ready:void 0,stop:void 0,transform:function(g,x){return x}};function f9(y){this.options=me({},MJ,y)}f9.prototype.run=function(){var y=this.options,g=y,x=y.cy,T=g.eles,A=g.counterclockwise!==void 0?!g.counterclockwise:g.clockwise,D=T.nodes().not(":parent");g.sort&&(D=D.sort(g.sort));for(var O=Rd(g.boundingBox?g.boundingBox:{x1:0,y1:0,w:x.width(),h:x.height()}),$={x:O.x1+O.w/2,y:O.y1+O.h/2},q=g.sweep===void 0?2*Math.PI-2*Math.PI/D.length:g.sweep,S=q/Math.max(1,D.length-1),G,W=0,et=0;et<D.length;et++){var at=D[et],lt=at.layoutDimensions(g),ft=lt.w,At=lt.h;W=Math.max(W,ft,At)}if(X(g.radius)?G=g.radius:D.length<=1?G=0:G=Math.min(O.h,O.w)/2-W,D.length>1&&g.avoidOverlap){W*=1.75;var kt=Math.cos(S)-Math.cos(0),Mt=Math.sin(S)-Math.sin(0),Dt=Math.sqrt(W*W/(kt*kt+Mt*Mt));G=Math.max(Dt,G)}var jt=function(Kt,zt){var ee=g.startAngle+zt*S*(A?1:-1),Vt=G*Math.cos(ee),fe=G*Math.sin(ee),ge={x:$.x+Vt,y:$.y+fe};return ge};return T.nodes().layoutPositions(this,g,jt),this};var IJ={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:function(g){return g.degree()},levelWidth:function(g){return g.maxDegree()/4},animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(g,x){return!0},ready:void 0,stop:void 0,transform:function(g,x){return x}};function LB(y){this.options=me({},IJ,y)}LB.prototype.run=function(){for(var y=this.options,g=y,x=g.counterclockwise!==void 0?!g.counterclockwise:g.clockwise,T=y.cy,A=g.eles,D=A.nodes().not(":parent"),O=Rd(g.boundingBox?g.boundingBox:{x1:0,y1:0,w:T.width(),h:T.height()}),$={x:O.x1+O.w/2,y:O.y1+O.h/2},q=[],S=0,G=0;G<D.length;G++){var W=D[G],et=void 0;et=g.concentric(W),q.push({value:et,node:W}),W._private.scratch.concentric=et}D.updateStyle();for(var at=0;at<D.length;at++){var lt=D[at],ft=lt.layoutDimensions(g);S=Math.max(S,ft.w,ft.h)}q.sort(function(Ci,hi){return hi.value-Ci.value});for(var At=g.levelWidth(D),kt=[[]],Mt=kt[0],Dt=0;Dt<q.length;Dt++){var jt=q[Dt];if(Mt.length>0){var Zt=Math.abs(Mt[0].value-jt.value);Zt>=At&&(Mt=[],kt.push(Mt))}Mt.push(jt)}var Kt=S+g.minNodeSpacing;if(!g.avoidOverlap){var zt=kt.length>0&&kt[0].length>1,ee=Math.min(O.w,O.h)/2-Kt,Vt=ee/(kt.length+zt?1:0);Kt=Math.min(Kt,Vt)}for(var fe=0,ge=0;ge<kt.length;ge++){var ne=kt[ge],Pe=g.sweep===void 0?2*Math.PI-2*Math.PI/ne.length:g.sweep,pe=ne.dTheta=Pe/Math.max(1,ne.length-1);if(ne.length>1&&g.avoidOverlap){var bn=Math.cos(pe)-Math.cos(0),ze=Math.sin(pe)-Math.sin(0),Ve=Math.sqrt(Kt*Kt/(bn*bn+ze*ze));fe=Math.max(Ve,fe)}ne.r=fe,fe+=Kt}if(g.equidistant){for(var En=0,Dn=0,Kn=0;Kn<kt.length;Kn++){var Sn=kt[Kn],Wn=Sn.r-Dn;En=Math.max(En,Wn)}Dn=0;for(var rr=0;rr<kt.length;rr++){var vr=kt[rr];rr===0&&(Dn=vr.r),vr.r=Dn,Dn+=En}}for(var ur={},tr=0;tr<kt.length;tr++)for(var wn=kt[tr],gr=wn.dTheta,fr=wn.r,Jr=0;Jr<wn.length;Jr++){var wi=wn[Jr],Ks=g.startAngle+(x?1:-1)*gr*Jr,ka={x:$.x+fr*Math.cos(Ks),y:$.y+fr*Math.sin(Ks)};ur[wi.node.id()]=ka}return A.nodes().layoutPositions(this,g,function(Ci){var hi=Ci.id();return ur[hi]}),this};var UL,DJ={ready:function(){},stop:function(){},animate:!0,animationEasing:void 0,animationDuration:void 0,animateFilter:function(g,x){return!0},animationThreshold:250,refresh:20,fit:!0,padding:30,boundingBox:void 0,nodeDimensionsIncludeLabels:!1,randomize:!1,componentSpacing:40,nodeRepulsion:function(g){return 2048},nodeOverlap:4,idealEdgeLength:function(g){return 32},edgeElasticity:function(g){return 32},nestingFactor:1.2,gravity:1,numIter:1e3,initialTemp:1e3,coolingFactor:.99,minTemp:1};function d9(y){this.options=me({},DJ,y),this.options.layout=this}d9.prototype.run=function(){var y=this.options,g=y.cy,x=this;x.stopped=!1,(y.animate===!0||y.animate===!1)&&x.emit({type:"layoutstart",layout:x}),y.debug===!0?UL=!0:UL=!1;var T=OJ(g,x,y);UL&&FJ(T),y.randomize&&BJ(T);var A=dg(),D=function(){RJ(T,g,y),y.fit===!0&&g.fit(y.padding)},O=function(et){return!(x.stopped||et>=y.numIter||(jJ(T,y),T.temperature=T.temperature*y.coolingFactor,T.temperature<y.minTemp))},$=function(){if(y.animate===!0||y.animate===!1)D(),x.one("layoutstop",y.stop),x.emit({type:"layoutstop",layout:x});else{var et=y.eles.nodes(),at=MB(T,y,et);et.layoutPositions(x,y,at)}},q=0,S=!0;if(y.animate===!0){var G=function W(){for(var et=0;S&&et<y.refresh;)S=O(q),q++,et++;if(!S)DB(T,y),$();else{var at=dg();at-A>=y.animationThreshold&&D(),Ff(W)}};G()}else{for(;S;)S=O(q),q++;DB(T,y),$()}return this},d9.prototype.stop=function(){return this.stopped=!0,this.thread&&this.thread.stop(),this.emit("layoutstop"),this},d9.prototype.destroy=function(){return this.thread&&this.thread.stop(),this};var OJ=function(g,x,T){for(var A=T.eles.edges(),D=T.eles.nodes(),O={isCompound:g.hasCompoundNodes(),layoutNodes:[],idToIndex:{},nodeSize:D.size(),graphSet:[],indexToGraph:[],layoutEdges:[],edgeSize:A.size(),temperature:T.initialTemp,clientWidth:g.width(),clientHeight:g.width(),boundingBox:Rd(T.boundingBox?T.boundingBox:{x1:0,y1:0,w:g.width(),h:g.height()})},$=T.eles.components(),q={},S=0;S<$.length;S++)for(var G=$[S],W=0;W<G.length;W++){var et=G[W];q[et.id()]=S}for(var S=0;S<O.nodeSize;S++){var at=D[S],lt=at.layoutDimensions(T),ft={};ft.isLocked=at.locked(),ft.id=at.data("id"),ft.parentId=at.data("parent"),ft.cmptId=q[at.id()],ft.children=[],ft.positionX=at.position("x"),ft.positionY=at.position("y"),ft.offsetX=0,ft.offsetY=0,ft.height=lt.w,ft.width=lt.h,ft.maxX=ft.positionX+ft.width/2,ft.minX=ft.positionX-ft.width/2,ft.maxY=ft.positionY+ft.height/2,ft.minY=ft.positionY-ft.height/2,ft.padLeft=parseFloat(at.style("padding")),ft.padRight=parseFloat(at.style("padding")),ft.padTop=parseFloat(at.style("padding")),ft.padBottom=parseFloat(at.style("padding")),ft.nodeRepulsion=yt(T.nodeRepulsion)?T.nodeRepulsion(at):T.nodeRepulsion,O.layoutNodes.push(ft),O.idToIndex[ft.id]=S}for(var At=[],kt=0,Mt=-1,Dt=[],S=0;S<O.nodeSize;S++){var at=O.layoutNodes[S],jt=at.parentId;jt!=null?O.layoutNodes[O.idToIndex[jt]].children.push(at.id):(At[++Mt]=at.id,Dt.push(at.id))}for(O.graphSet.push(Dt);kt<=Mt;){var Zt=At[kt++],Kt=O.idToIndex[Zt],et=O.layoutNodes[Kt],zt=et.children;if(zt.length>0){O.graphSet.push(zt);for(var S=0;S<zt.length;S++)At[++Mt]=zt[S]}}for(var S=0;S<O.graphSet.length;S++)for(var ee=O.graphSet[S],W=0;W<ee.length;W++){var Vt=O.idToIndex[ee[W]];O.indexToGraph[Vt]=S}for(var S=0;S<O.edgeSize;S++){var fe=A[S],ge={};ge.id=fe.data("id"),ge.sourceId=fe.data("source"),ge.targetId=fe.data("target");var ne=yt(T.idealEdgeLength)?T.idealEdgeLength(fe):T.idealEdgeLength,Pe=yt(T.edgeElasticity)?T.edgeElasticity(fe):T.edgeElasticity,pe=O.idToIndex[ge.sourceId],bn=O.idToIndex[ge.targetId],ze=O.indexToGraph[pe],Ve=O.indexToGraph[bn];if(ze!=Ve){for(var En=NJ(ge.sourceId,ge.targetId,O),Dn=O.graphSet[En],Kn=0,ft=O.layoutNodes[pe];Dn.indexOf(ft.id)===-1;)ft=O.layoutNodes[O.idToIndex[ft.parentId]],Kn++;for(ft=O.layoutNodes[bn];Dn.indexOf(ft.id)===-1;)ft=O.layoutNodes[O.idToIndex[ft.parentId]],Kn++;ne*=Kn*T.nestingFactor}ge.idealLength=ne,ge.elasticity=Pe,O.layoutEdges.push(ge)}return O},NJ=function(g,x,T){var A=PJ(g,x,0,T);return 2>A.count?0:A.graph},PJ=function y(g,x,T,A){var D=A.graphSet[T];if(-1<D.indexOf(g)&&-1<D.indexOf(x))return{count:2,graph:T};for(var O=0,$=0;$<D.length;$++){var q=D[$],S=A.idToIndex[q],G=A.layoutNodes[S].children;if(G.length!==0){var W=A.indexToGraph[A.idToIndex[G[0]]],et=y(g,x,W,A);if(et.count!==0)if(et.count===1){if(O++,O===2)break}else return et}}return{count:O,graph:T}},FJ,BJ=function(g,x){for(var T=g.clientWidth,A=g.clientHeight,D=0;D<g.nodeSize;D++){var O=g.layoutNodes[D];O.children.length===0&&!O.isLocked&&(O.positionX=Math.random()*T,O.positionY=Math.random()*A)}},MB=function(g,x,T){var A=g.boundingBox,D={x1:1/0,x2:-1/0,y1:1/0,y2:-1/0};return x.boundingBox&&(T.forEach(function(O){var $=g.layoutNodes[g.idToIndex[O.data("id")]];D.x1=Math.min(D.x1,$.positionX),D.x2=Math.max(D.x2,$.positionX),D.y1=Math.min(D.y1,$.positionY),D.y2=Math.max(D.y2,$.positionY)}),D.w=D.x2-D.x1,D.h=D.y2-D.y1),function(O,$){var q=g.layoutNodes[g.idToIndex[O.data("id")]];if(x.boundingBox){var S=(q.positionX-D.x1)/D.w,G=(q.positionY-D.y1)/D.h;return{x:A.x1+S*A.w,y:A.y1+G*A.h}}else return{x:q.positionX,y:q.positionY}}},RJ=function(g,x,T){var A=T.layout,D=T.eles.nodes(),O=MB(g,T,D);D.positions(O),g.ready!==!0&&(g.ready=!0,A.one("layoutready",T.ready),A.emit({type:"layoutready",layout:this}))},jJ=function(g,x,T){$J(g,x),HJ(g),GJ(g,x),VJ(g),UJ(g)},$J=function(g,x){for(var T=0;T<g.graphSet.length;T++)for(var A=g.graphSet[T],D=A.length,O=0;O<D;O++)for(var $=g.layoutNodes[g.idToIndex[A[O]]],q=O+1;q<D;q++){var S=g.layoutNodes[g.idToIndex[A[q]]];zJ($,S,g,x)}},IB=function(g){return-g+2*g*Math.random()},zJ=function(g,x,T,A){var D=g.cmptId,O=x.cmptId;if(!(D!==O&&!T.isCompound)){var $=x.positionX-g.positionX,q=x.positionY-g.positionY,S=1;$===0&&q===0&&($=IB(S),q=IB(S));var G=qJ(g,x,$,q);if(G>0)var W=A.nodeOverlap*G,et=Math.sqrt($*$+q*q),at=W*$/et,lt=W*q/et;else var ft=g9(g,$,q),At=g9(x,-1*$,-1*q),kt=At.x-ft.x,Mt=At.y-ft.y,Dt=kt*kt+Mt*Mt,et=Math.sqrt(Dt),W=(g.nodeRepulsion+x.nodeRepulsion)/Dt,at=W*kt/et,lt=W*Mt/et;g.isLocked||(g.offsetX-=at,g.offsetY-=lt),x.isLocked||(x.offsetX+=at,x.offsetY+=lt)}},qJ=function(g,x,T,A){if(T>0)var D=g.maxX-x.minX;else var D=x.maxX-g.minX;if(A>0)var O=g.maxY-x.minY;else var O=x.maxY-g.minY;return D>=0&&O>=0?Math.sqrt(D*D+O*O):0},g9=function(g,x,T){var A=g.positionX,D=g.positionY,O=g.height||1,$=g.width||1,q=T/x,S=O/$,G={};return x===0&&0<T||x===0&&0>T?(G.x=A,G.y=D+O/2,G):0<x&&-1*S<=q&&q<=S?(G.x=A+$/2,G.y=D+$*T/2/x,G):0>x&&-1*S<=q&&q<=S?(G.x=A-$/2,G.y=D-$*T/2/x,G):0<T&&(q<=-1*S||q>=S)?(G.x=A+O*x/2/T,G.y=D+O/2,G):(0>T&&(q<=-1*S||q>=S)&&(G.x=A-O*x/2/T,G.y=D-O/2),G)},HJ=function(g,x){for(var T=0;T<g.edgeSize;T++){var A=g.layoutEdges[T],D=g.idToIndex[A.sourceId],O=g.layoutNodes[D],$=g.idToIndex[A.targetId],q=g.layoutNodes[$],S=q.positionX-O.positionX,G=q.positionY-O.positionY;if(!(S===0&&G===0)){var W=g9(O,S,G),et=g9(q,-1*S,-1*G),at=et.x-W.x,lt=et.y-W.y,ft=Math.sqrt(at*at+lt*lt),At=Math.pow(A.idealLength-ft,2)/A.elasticity;if(ft!==0)var kt=At*at/ft,Mt=At*lt/ft;else var kt=0,Mt=0;O.isLocked||(O.offsetX+=kt,O.offsetY+=Mt),q.isLocked||(q.offsetX-=kt,q.offsetY-=Mt)}}},GJ=function(g,x){if(x.gravity!==0)for(var T=1,A=0;A<g.graphSet.length;A++){var D=g.graphSet[A],O=D.length;if(A===0)var $=g.clientHeight/2,q=g.clientWidth/2;else var S=g.layoutNodes[g.idToIndex[D[0]]],G=g.layoutNodes[g.idToIndex[S.parentId]],$=G.positionX,q=G.positionY;for(var W=0;W<O;W++){var et=g.layoutNodes[g.idToIndex[D[W]]];if(!et.isLocked){var at=$-et.positionX,lt=q-et.positionY,ft=Math.sqrt(at*at+lt*lt);if(ft>T){var At=x.gravity*at/ft,kt=x.gravity*lt/ft;et.offsetX+=At,et.offsetY+=kt}}}}},VJ=function(g,x){var T=[],A=0,D=-1;for(T.push.apply(T,g.graphSet[0]),D+=g.graphSet[0].length;A<=D;){var O=T[A++],$=g.idToIndex[O],q=g.layoutNodes[$],S=q.children;if(0<S.length&&!q.isLocked){for(var G=q.offsetX,W=q.offsetY,et=0;et<S.length;et++){var at=g.layoutNodes[g.idToIndex[S[et]]];at.offsetX+=G,at.offsetY+=W,T[++D]=S[et]}q.offsetX=0,q.offsetY=0}}},UJ=function(g,x){for(var T=0;T<g.nodeSize;T++){var A=g.layoutNodes[T];0<A.children.length&&(A.maxX=void 0,A.minX=void 0,A.maxY=void 0,A.minY=void 0)}for(var T=0;T<g.nodeSize;T++){var A=g.layoutNodes[T];if(!(0<A.children.length||A.isLocked)){var D=WJ(A.offsetX,A.offsetY,g.temperature);A.positionX+=D.x,A.positionY+=D.y,A.offsetX=0,A.offsetY=0,A.minX=A.positionX-A.width,A.maxX=A.positionX+A.width,A.minY=A.positionY-A.height,A.maxY=A.positionY+A.height,KJ(A,g)}}for(var T=0;T<g.nodeSize;T++){var A=g.layoutNodes[T];0<A.children.length&&!A.isLocked&&(A.positionX=(A.maxX+A.minX)/2,A.positionY=(A.maxY+A.minY)/2,A.width=A.maxX-A.minX,A.height=A.maxY-A.minY)}},WJ=function(g,x,T){var A=Math.sqrt(g*g+x*x);if(A>T)var D={x:T*g/A,y:T*x/A};else var D={x:g,y:x};return D},KJ=function y(g,x){var T=g.parentId;if(T!=null){var A=x.layoutNodes[x.idToIndex[T]],D=!1;if((A.maxX==null||g.maxX+A.padRight>A.maxX)&&(A.maxX=g.maxX+A.padRight,D=!0),(A.minX==null||g.minX-A.padLeft<A.minX)&&(A.minX=g.minX-A.padLeft,D=!0),(A.maxY==null||g.maxY+A.padBottom>A.maxY)&&(A.maxY=g.maxY+A.padBottom,D=!0),(A.minY==null||g.minY-A.padTop<A.minY)&&(A.minY=g.minY-A.padTop,D=!0),D)return y(A,x)}},DB=function(g,x){for(var T=g.layoutNodes,A=[],D=0;D<T.length;D++){var O=T[D],$=O.cmptId,q=A[$]=A[$]||[];q.push(O)}for(var S=0,D=0;D<A.length;D++){var G=A[D];if(G){G.x1=1/0,G.x2=-1/0,G.y1=1/0,G.y2=-1/0;for(var W=0;W<G.length;W++){var et=G[W];G.x1=Math.min(G.x1,et.positionX-et.width/2),G.x2=Math.max(G.x2,et.positionX+et.width/2),G.y1=Math.min(G.y1,et.positionY-et.height/2),G.y2=Math.max(G.y2,et.positionY+et.height/2)}G.w=G.x2-G.x1,G.h=G.y2-G.y1,S+=G.w*G.h}}A.sort(function(Mt,Dt){return Dt.w*Dt.h-Mt.w*Mt.h});for(var at=0,lt=0,ft=0,At=0,kt=Math.sqrt(S)*g.clientWidth/g.clientHeight,D=0;D<A.length;D++){var G=A[D];if(G){for(var W=0;W<G.length;W++){var et=G[W];et.isLocked||(et.positionX+=at-G.x1,et.positionY+=lt-G.y1)}at+=G.w+x.componentSpacing,ft+=G.w+x.componentSpacing,At=Math.max(At,G.h),ft>kt&&(lt+=At+x.componentSpacing,at=0,ft=0,At=0)}}},YJ={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:function(g){},sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(g,x){return!0},ready:void 0,stop:void 0,transform:function(g,x){return x}};function OB(y){this.options=me({},YJ,y)}OB.prototype.run=function(){var y=this.options,g=y,x=y.cy,T=g.eles,A=T.nodes().not(":parent");g.sort&&(A=A.sort(g.sort));var D=Rd(g.boundingBox?g.boundingBox:{x1:0,y1:0,w:x.width(),h:x.height()});if(D.h===0||D.w===0)T.nodes().layoutPositions(this,g,function(rr){return{x:D.x1,y:D.y1}});else{var O=A.size(),$=Math.sqrt(O*D.h/D.w),q=Math.round($),S=Math.round(D.w/D.h*$),G=function(vr){if(vr==null)return Math.min(q,S);var ur=Math.min(q,S);ur==q?q=vr:S=vr},W=function(vr){if(vr==null)return Math.max(q,S);var ur=Math.max(q,S);ur==q?q=vr:S=vr},et=g.rows,at=g.cols!=null?g.cols:g.columns;if(et!=null&&at!=null)q=et,S=at;else if(et!=null&&at==null)q=et,S=Math.ceil(O/q);else if(et==null&&at!=null)S=at,q=Math.ceil(O/S);else if(S*q>O){var lt=G(),ft=W();(lt-1)*ft>=O?G(lt-1):(ft-1)*lt>=O&&W(ft-1)}else for(;S*q<O;){var At=G(),kt=W();(kt+1)*At>=O?W(kt+1):G(At+1)}var Mt=D.w/S,Dt=D.h/q;if(g.condense&&(Mt=0,Dt=0),g.avoidOverlap)for(var jt=0;jt<A.length;jt++){var Zt=A[jt],Kt=Zt._private.position;(Kt.x==null||Kt.y==null)&&(Kt.x=0,Kt.y=0);var zt=Zt.layoutDimensions(g),ee=g.avoidOverlapPadding,Vt=zt.w+ee,fe=zt.h+ee;Mt=Math.max(Mt,Vt),Dt=Math.max(Dt,fe)}for(var ge={},ne=function(vr,ur){return!!ge["c-"+vr+"-"+ur]},Pe=function(vr,ur){ge["c-"+vr+"-"+ur]=!0},pe=0,bn=0,ze=function(){bn++,bn>=S&&(bn=0,pe++)},Ve={},En=0;En<A.length;En++){var Dn=A[En],Kn=g.position(Dn);if(Kn&&(Kn.row!==void 0||Kn.col!==void 0)){var Sn={row:Kn.row,col:Kn.col};if(Sn.col===void 0)for(Sn.col=0;ne(Sn.row,Sn.col);)Sn.col++;else if(Sn.row===void 0)for(Sn.row=0;ne(Sn.row,Sn.col);)Sn.row++;Ve[Dn.id()]=Sn,Pe(Sn.row,Sn.col)}}var Wn=function(vr,ur){var tr,wn;if(vr.locked()||vr.isParent())return!1;var gr=Ve[vr.id()];if(gr)tr=gr.col*Mt+Mt/2+D.x1,wn=gr.row*Dt+Dt/2+D.y1;else{for(;ne(pe,bn);)ze();tr=bn*Mt+Mt/2+D.x1,wn=pe*Dt+Dt/2+D.y1,Pe(pe,bn),ze()}return{x:tr,y:wn}};A.layoutPositions(this,g,Wn)}return this};var XJ={ready:function(){},stop:function(){}};function WL(y){this.options=me({},XJ,y)}WL.prototype.run=function(){var y=this.options,g=y.eles,x=this;return y.cy,x.emit("layoutstart"),g.nodes().positions(function(){return{x:0,y:0}}),x.one("layoutready",y.ready),x.emit("layoutready"),x.one("layoutstop",y.stop),x.emit("layoutstop"),this},WL.prototype.stop=function(){return this};var QJ={positions:void 0,zoom:void 0,pan:void 0,fit:!0,padding:30,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(g,x){return!0},ready:void 0,stop:void 0,transform:function(g,x){return x}};function NB(y){this.options=me({},QJ,y)}NB.prototype.run=function(){var y=this.options,g=y.eles,x=g.nodes(),T=yt(y.positions);function A(D){if(y.positions==null)return bY(D.position());if(T)return y.positions(D);var O=y.positions[D._private.data.id];return O??null}return x.layoutPositions(this,y,function(D,O){var $=A(D);return D.locked()||$==null?!1:$}),this};var ZJ={fit:!0,padding:30,boundingBox:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(g,x){return!0},ready:void 0,stop:void 0,transform:function(g,x){return x}};function PB(y){this.options=me({},ZJ,y)}PB.prototype.run=function(){var y=this.options,g=y.cy,x=y.eles,T=Rd(y.boundingBox?y.boundingBox:{x1:0,y1:0,w:g.width(),h:g.height()}),A=function(O,$){return{x:T.x1+Math.round(Math.random()*T.w),y:T.y1+Math.round(Math.random()*T.h)}};return x.nodes().layoutPositions(this,y,A),this};var JJ=[{name:"breadthfirst",impl:AB},{name:"circle",impl:f9},{name:"concentric",impl:LB},{name:"cose",impl:d9},{name:"grid",impl:OB},{name:"null",impl:WL},{name:"preset",impl:NB},{name:"random",impl:PB}];function FB(y){this.options=y,this.notifications=0}var BB=function(){},RB=function(){throw new Error("A headless instance can not render images")};FB.prototype={recalculateRenderedStyle:BB,notify:function(){this.notifications++},init:BB,isHeadless:function(){return!0},png:RB,jpg:RB};var KL={};KL.arrowShapeWidth=.3,KL.registerArrowShapes=function(){var y=this.arrowShapes={},g=this,x=function(S,G,W,et,at,lt,ft){var At=at.x-W/2-ft,kt=at.x+W/2+ft,Mt=at.y-W/2-ft,Dt=at.y+W/2+ft,jt=At<=S&&S<=kt&&Mt<=G&&G<=Dt;return jt},T=function(S,G,W,et,at){var lt=S*Math.cos(et)-G*Math.sin(et),ft=S*Math.sin(et)+G*Math.cos(et),At=lt*W,kt=ft*W,Mt=At+at.x,Dt=kt+at.y;return{x:Mt,y:Dt}},A=function(S,G,W,et){for(var at=[],lt=0;lt<S.length;lt+=2){var ft=S[lt],At=S[lt+1];at.push(T(ft,At,G,W,et))}return at},D=function(S){for(var G=[],W=0;W<S.length;W++){var et=S[W];G.push(et.x,et.y)}return G},O=function(S){return S.pstyle("width").pfValue*S.pstyle("arrow-scale").pfValue*2},$=function(S,G){mt(G)&&(G=y[G]),y[S]=me({name:S,points:[-.15,-.3,.15,-.3,.15,.3,-.15,.3],collide:function(et,at,lt,ft,At,kt){var Mt=D(A(this.points,lt+2*kt,ft,At)),Dt=jd(et,at,Mt);return Dt},roughCollide:x,draw:function(et,at,lt,ft){var At=A(this.points,at,lt,ft);g.arrowShapeImpl("polygon")(et,At)},spacing:function(et){return 0},gap:O},G)};$("none",{collide:gm,roughCollide:gm,draw:wL,spacing:gg,gap:gg}),$("triangle",{points:[-.15,-.3,0,0,.15,-.3]}),$("arrow","triangle"),$("triangle-backcurve",{points:y.triangle.points,controlPoint:[0,-.15],roughCollide:x,draw:function(S,G,W,et,at){var lt=A(this.points,G,W,et),ft=this.controlPoint,At=T(ft[0],ft[1],G,W,et);g.arrowShapeImpl(this.name)(S,lt,At)},gap:function(S){return O(S)*.8}}),$("triangle-tee",{points:[0,0,.15,-.3,-.15,-.3,0,0],pointsTee:[-.15,-.4,-.15,-.5,.15,-.5,.15,-.4],collide:function(S,G,W,et,at,lt,ft){var At=D(A(this.points,W+2*ft,et,at)),kt=D(A(this.pointsTee,W+2*ft,et,at)),Mt=jd(S,G,At)||jd(S,G,kt);return Mt},draw:function(S,G,W,et,at){var lt=A(this.points,G,W,et),ft=A(this.pointsTee,G,W,et);g.arrowShapeImpl(this.name)(S,lt,ft)}}),$("circle-triangle",{radius:.15,pointsTr:[0,-.15,.15,-.45,-.15,-.45,0,-.15],collide:function(S,G,W,et,at,lt,ft){var At=at,kt=Math.pow(At.x-S,2)+Math.pow(At.y-G,2)<=Math.pow((W+2*ft)*this.radius,2),Mt=D(A(this.points,W+2*ft,et,at));return jd(S,G,Mt)||kt},draw:function(S,G,W,et,at){var lt=A(this.pointsTr,G,W,et);g.arrowShapeImpl(this.name)(S,lt,et.x,et.y,this.radius*G)},spacing:function(S){return g.getArrowWidth(S.pstyle("width").pfValue,S.pstyle("arrow-scale").value)*this.radius}}),$("triangle-cross",{points:[0,0,.15,-.3,-.15,-.3,0,0],baseCrossLinePts:[-.15,-.4,-.15,-.4,.15,-.4,.15,-.4],crossLinePts:function(S,G){var W=this.baseCrossLinePts.slice(),et=G/S,at=3,lt=5;return W[at]=W[at]-et,W[lt]=W[lt]-et,W},collide:function(S,G,W,et,at,lt,ft){var At=D(A(this.points,W+2*ft,et,at)),kt=D(A(this.crossLinePts(W,lt),W+2*ft,et,at)),Mt=jd(S,G,At)||jd(S,G,kt);return Mt},draw:function(S,G,W,et,at){var lt=A(this.points,G,W,et),ft=A(this.crossLinePts(G,at),G,W,et);g.arrowShapeImpl(this.name)(S,lt,ft)}}),$("vee",{points:[-.15,-.3,0,0,.15,-.3,0,-.15],gap:function(S){return O(S)*.525}}),$("circle",{radius:.15,collide:function(S,G,W,et,at,lt,ft){var At=at,kt=Math.pow(At.x-S,2)+Math.pow(At.y-G,2)<=Math.pow((W+2*ft)*this.radius,2);return kt},draw:function(S,G,W,et,at){g.arrowShapeImpl(this.name)(S,et.x,et.y,this.radius*G)},spacing:function(S){return g.getArrowWidth(S.pstyle("width").pfValue,S.pstyle("arrow-scale").value)*this.radius}}),$("tee",{points:[-.15,0,-.15,-.1,.15,-.1,.15,0],spacing:function(S){return 1},gap:function(S){return 1}}),$("square",{points:[-.15,0,.15,0,.15,-.3,-.15,-.3]}),$("diamond",{points:[-.15,-.15,0,-.3,.15,-.15,0,0],gap:function(S){return S.pstyle("width").pfValue*S.pstyle("arrow-scale").value}}),$("chevron",{points:[0,0,-.15,-.15,-.1,-.2,0,-.1,.1,-.2,.15,-.15],gap:function(S){return .95*S.pstyle("width").pfValue*S.pstyle("arrow-scale").value}})};var L3={};L3.projectIntoViewport=function(y,g){var x=this.cy,T=this.findContainerClientCoords(),A=T[0],D=T[1],O=T[4],$=x.pan(),q=x.zoom(),S=((y-A)/O-$.x)/q,G=((g-D)/O-$.y)/q;return[S,G]},L3.findContainerClientCoords=function(){if(this.containerBB)return this.containerBB;var y=this.container,g=y.getBoundingClientRect(),x=R.getComputedStyle(y),T=function(kt){return parseFloat(x.getPropertyValue(kt))},A={left:T("padding-left"),right:T("padding-right"),top:T("padding-top"),bottom:T("padding-bottom")},D={left:T("border-left-width"),right:T("border-right-width"),top:T("border-top-width"),bottom:T("border-bottom-width")},O=y.clientWidth,$=y.clientHeight,q=A.left+A.right,S=A.top+A.bottom,G=D.left+D.right,W=g.width/(O+G),et=O-q,at=$-S,lt=g.left+A.left+D.left,ft=g.top+A.top+D.top;return this.containerBB=[lt,ft,et,at,W]},L3.invalidateContainerClientCoordsCache=function(){this.containerBB=null},L3.findNearestElement=function(y,g,x,T){return this.findNearestElements(y,g,x,T)[0]},L3.findNearestElements=function(y,g,x,T){var A=this,D=this,O=D.getCachedZSortedEles(),$=[],q=D.cy.zoom(),S=D.cy.hasCompoundNodes(),G=(T?24:8)/q,W=(T?8:2)/q,et=(T?8:2)/q,at=1/0,lt,ft;x&&(O=O.interactive);function At(zt,ee){if(zt.isNode()){if(ft)return;ft=zt,$.push(zt)}if(zt.isEdge()&&(ee==null||ee<at))if(lt){if(lt.pstyle("z-compound-depth").value===zt.pstyle("z-compound-depth").value&&lt.pstyle("z-compound-depth").value===zt.pstyle("z-compound-depth").value){for(var Vt=0;Vt<$.length;Vt++)if($[Vt].isEdge()){$[Vt]=zt,lt=zt,at=ee??at;break}}}else $.push(zt),lt=zt,at=ee??at}function kt(zt){var ee=zt.outerWidth()+2*W,Vt=zt.outerHeight()+2*W,fe=ee/2,ge=Vt/2,ne=zt.position();if(ne.x-fe<=y&&y<=ne.x+fe&&ne.y-ge<=g&&g<=ne.y+ge){var Pe=D.nodeShapes[A.getNodeShape(zt)];if(Pe.checkPoint(y,g,0,ee,Vt,ne.x,ne.y))return At(zt,0),!0}}function Mt(zt){var ee=zt._private,Vt=ee.rscratch,fe=zt.pstyle("width").pfValue,ge=zt.pstyle("arrow-scale").value,ne=fe/2+G,Pe=ne*ne,pe=ne*2,En=ee.source,Dn=ee.target,bn;if(Vt.edgeType==="segments"||Vt.edgeType==="straight"||Vt.edgeType==="haystack"){for(var ze=Vt.allpts,Ve=0;Ve+3<ze.length;Ve+=2)if(LY(y,g,ze[Ve],ze[Ve+1],ze[Ve+2],ze[Ve+3],pe)&&Pe>(bn=NY(y,g,ze[Ve],ze[Ve+1],ze[Ve+2],ze[Ve+3])))return At(zt,bn),!0}else if(Vt.edgeType==="bezier"||Vt.edgeType==="multibezier"||Vt.edgeType==="self"||Vt.edgeType==="compound"){for(var ze=Vt.allpts,Ve=0;Ve+5<Vt.allpts.length;Ve+=4)if(MY(y,g,ze[Ve],ze[Ve+1],ze[Ve+2],ze[Ve+3],ze[Ve+4],ze[Ve+5],pe)&&Pe>(bn=OY(y,g,ze[Ve],ze[Ve+1],ze[Ve+2],ze[Ve+3],ze[Ve+4],ze[Ve+5])))return At(zt,bn),!0}for(var En=En||ee.source,Dn=Dn||ee.target,Kn=A.getArrowWidth(fe,ge),Sn=[{name:"source",x:Vt.arrowStartX,y:Vt.arrowStartY,angle:Vt.srcArrowAngle},{name:"target",x:Vt.arrowEndX,y:Vt.arrowEndY,angle:Vt.tgtArrowAngle},{name:"mid-source",x:Vt.midX,y:Vt.midY,angle:Vt.midsrcArrowAngle},{name:"mid-target",x:Vt.midX,y:Vt.midY,angle:Vt.midtgtArrowAngle}],Ve=0;Ve<Sn.length;Ve++){var Wn=Sn[Ve],rr=D.arrowShapes[zt.pstyle(Wn.name+"-arrow-shape").value],vr=zt.pstyle("width").pfValue;if(rr.roughCollide(y,g,Kn,Wn.angle,{x:Wn.x,y:Wn.y},vr,G)&&rr.collide(y,g,Kn,Wn.angle,{x:Wn.x,y:Wn.y},vr,G))return At(zt),!0}S&&$.length>0&&(kt(En),kt(Dn))}function Dt(zt,ee,Vt){return bp(zt,ee,Vt)}function jt(zt,ee){var Vt=zt._private,fe=et,ge;ee?ge=ee+"-":ge="",zt.boundingBox();var ne=Vt.labelBounds[ee||"main"],Pe=zt.pstyle(ge+"label").value,pe=zt.pstyle("text-events").strValue==="yes";if(!(!pe||!Pe)){var bn=Dt(Vt.rscratch,"labelX",ee),ze=Dt(Vt.rscratch,"labelY",ee),Ve=Dt(Vt.rscratch,"labelAngle",ee),En=zt.pstyle(ge+"text-margin-x").pfValue,Dn=zt.pstyle(ge+"text-margin-y").pfValue,Kn=ne.x1-fe-En,Sn=ne.x2+fe-En,Wn=ne.y1-fe-Dn,rr=ne.y2+fe-Dn;if(Ve){var vr=Math.cos(Ve),ur=Math.sin(Ve),tr=function(ka,Ci){return ka=ka-bn,Ci=Ci-ze,{x:ka*vr-Ci*ur+bn,y:ka*ur+Ci*vr+ze}},wn=tr(Kn,Wn),gr=tr(Kn,rr),fr=tr(Sn,Wn),Jr=tr(Sn,rr),wi=[wn.x+En,wn.y+Dn,fr.x+En,fr.y+Dn,Jr.x+En,Jr.y+Dn,gr.x+En,gr.y+Dn];if(jd(y,g,wi))return At(zt),!0}else if(G5(ne,y,g))return At(zt),!0}}for(var Zt=O.length-1;Zt>=0;Zt--){var Kt=O[Zt];Kt.isNode()?kt(Kt)||jt(Kt):Mt(Kt)||jt(Kt)||jt(Kt,"source")||jt(Kt,"target")}return $},L3.getAllInBox=function(y,g,x,T){var A=this.getCachedZSortedEles().interactive,D=[],O=Math.min(y,x),$=Math.max(y,x),q=Math.min(g,T),S=Math.max(g,T);y=O,x=$,g=q,T=S;for(var G=Rd({x1:y,y1:g,x2:x,y2:T}),W=0;W<A.length;W++){var et=A[W];if(et.isNode()){var at=et,lt=at.boundingBox({includeNodes:!0,includeEdges:!1,includeLabels:!1});EL(G,lt)&&!tF(lt,G)&&D.push(at)}else{var ft=et,At=ft._private,kt=At.rscratch;if(kt.startX!=null&&kt.startY!=null&&!G5(G,kt.startX,kt.startY)||kt.endX!=null&&kt.endY!=null&&!G5(G,kt.endX,kt.endY))continue;if(kt.edgeType==="bezier"||kt.edgeType==="multibezier"||kt.edgeType==="self"||kt.edgeType==="compound"||kt.edgeType==="segments"||kt.edgeType==="haystack"){for(var Mt=At.rstyle.bezierPts||At.rstyle.linePts||At.rstyle.haystackPts,Dt=!0,jt=0;jt<Mt.length;jt++)if(!AY(G,Mt[jt])){Dt=!1;break}Dt&&D.push(ft)}else(kt.edgeType==="haystack"||kt.edgeType==="straight")&&D.push(ft)}}return D};var p9={};p9.calculateArrowAngles=function(y){var g=y._private.rscratch,x=g.edgeType==="haystack",T=g.edgeType==="bezier",A=g.edgeType==="multibezier",D=g.edgeType==="segments",O=g.edgeType==="compound",$=g.edgeType==="self",q,S,G,W,et,at,kt,Mt;if(x?(G=g.haystackPts[0],W=g.haystackPts[1],et=g.haystackPts[2],at=g.haystackPts[3]):(G=g.arrowStartX,W=g.arrowStartY,et=g.arrowEndX,at=g.arrowEndY),kt=g.midX,Mt=g.midY,D)q=G-g.segpts[0],S=W-g.segpts[1];else if(A||O||$||T){var lt=g.allpts,ft=rf(lt[0],lt[2],lt[4],.1),At=rf(lt[1],lt[3],lt[5],.1);q=G-ft,S=W-At}else q=G-kt,S=W-Mt;g.srcArrowAngle=NT(q,S);var kt=g.midX,Mt=g.midY;if(x&&(kt=(G+et)/2,Mt=(W+at)/2),q=et-G,S=at-W,D){var lt=g.allpts;if(lt.length/2%2===0){var Dt=lt.length/2,jt=Dt-2;q=lt[Dt]-lt[jt],S=lt[Dt+1]-lt[jt+1]}else{var Dt=lt.length/2-1,jt=Dt-2,Zt=Dt+2;q=lt[Dt]-lt[jt],S=lt[Dt+1]-lt[jt+1]}}else if(A||O||$){var lt=g.allpts,Kt=g.ctrlpts,zt,ee,Vt,fe;if(Kt.length/2%2===0){var ge=lt.length/2-1,ne=ge+2,Pe=ne+2;zt=rf(lt[ge],lt[ne],lt[Pe],0),ee=rf(lt[ge+1],lt[ne+1],lt[Pe+1],0),Vt=rf(lt[ge],lt[ne],lt[Pe],1e-4),fe=rf(lt[ge+1],lt[ne+1],lt[Pe+1],1e-4)}else{var ne=lt.length/2-1,ge=ne-2,Pe=ne+2;zt=rf(lt[ge],lt[ne],lt[Pe],.4999),ee=rf(lt[ge+1],lt[ne+1],lt[Pe+1],.4999),Vt=rf(lt[ge],lt[ne],lt[Pe],.5),fe=rf(lt[ge+1],lt[ne+1],lt[Pe+1],.5)}q=Vt-zt,S=fe-ee}if(g.midtgtArrowAngle=NT(q,S),g.midDispX=q,g.midDispY=S,q*=-1,S*=-1,D){var lt=g.allpts;if(lt.length/2%2!==0){var Dt=lt.length/2-1,Zt=Dt+2;q=-(lt[Zt]-lt[Dt]),S=-(lt[Zt+1]-lt[Dt+1])}}if(g.midsrcArrowAngle=NT(q,S),D)q=et-g.segpts[g.segpts.length-2],S=at-g.segpts[g.segpts.length-1];else if(A||O||$||T){var lt=g.allpts,pe=lt.length,ft=rf(lt[pe-6],lt[pe-4],lt[pe-2],.9),At=rf(lt[pe-5],lt[pe-3],lt[pe-1],.9);q=et-ft,S=at-At}else q=et-kt,S=at-Mt;g.tgtArrowAngle=NT(q,S)},p9.getArrowWidth=p9.getArrowHeight=function(y,g){var x=this.arrowWidthCache=this.arrowWidthCache||{},T=x[y+", "+g];return T||(T=Math.max(Math.pow(y*13.37,.9),29)*g,x[y+", "+g]=T,T)};var id={};id.findHaystackPoints=function(y){for(var g=0;g<y.length;g++){var x=y[g],T=x._private,A=T.rscratch;if(!A.haystack){var D=Math.random()*2*Math.PI;A.source={x:Math.cos(D),y:Math.sin(D)},D=Math.random()*2*Math.PI,A.target={x:Math.cos(D),y:Math.sin(D)}}var O=T.source,$=T.target,q=O.position(),S=$.position(),G=O.width(),W=$.width(),et=O.height(),at=$.height(),lt=x.pstyle("haystack-radius").value,ft=lt/2;A.haystackPts=A.allpts=[A.source.x*G*ft+q.x,A.source.y*et*ft+q.y,A.target.x*W*ft+S.x,A.target.y*at*ft+S.y],A.midX=(A.allpts[0]+A.allpts[2])/2,A.midY=(A.allpts[1]+A.allpts[3])/2,A.edgeType="haystack",A.haystack=!0,this.storeEdgeProjections(x),this.calculateArrowAngles(x),this.recalculateEdgeLabelProjections(x),this.calculateLabelAngles(x)}},id.findSegmentsPoints=function(y,g){var x=y._private.rscratch,T=g.posPts,A=g.intersectionPts,D=g.vectorNormInverse,O=y.pstyle("edge-distances").value,$=y.pstyle("segment-weights"),q=y.pstyle("segment-distances"),S=Math.min($.pfValue.length,q.pfValue.length);x.edgeType="segments",x.segpts=[];for(var G=0;G<S;G++){var W=$.pfValue[G],et=q.pfValue[G],at=1-W,lt=W,ft=O==="node-position"?T:A,At={x:ft.x1*at+ft.x2*lt,y:ft.y1*at+ft.y2*lt};x.segpts.push(At.x+D.x*et,At.y+D.y*et)}},id.findLoopPoints=function(y,g,x,T){var A=y._private.rscratch,D=g.dirCounts,O=g.srcPos,$=y.pstyle("control-point-distances"),q=$?$.pfValue[0]:void 0,S=y.pstyle("loop-direction").pfValue,G=y.pstyle("loop-sweep").pfValue,W=y.pstyle("control-point-step-size").pfValue;A.edgeType="self";var et=x,at=W;T&&(et=0,at=q);var lt=S-Math.PI/2,ft=lt-G/2,At=lt+G/2,kt=S+"_"+G;et=D[kt]===void 0?D[kt]=0:++D[kt],A.ctrlpts=[O.x+Math.cos(ft)*1.4*at*(et/3+1),O.y+Math.sin(ft)*1.4*at*(et/3+1),O.x+Math.cos(At)*1.4*at*(et/3+1),O.y+Math.sin(At)*1.4*at*(et/3+1)]},id.findCompoundLoopPoints=function(y,g,x,T){var A=y._private.rscratch;A.edgeType="compound";var D=g.srcPos,O=g.tgtPos,$=g.srcW,q=g.srcH,S=g.tgtW,G=g.tgtH,W=y.pstyle("control-point-step-size").pfValue,et=y.pstyle("control-point-distances"),at=et?et.pfValue[0]:void 0,lt=x,ft=W;T&&(lt=0,ft=at);var At=50,kt={x:D.x-$/2,y:D.y-q/2},Mt={x:O.x-S/2,y:O.y-G/2},Dt={x:Math.min(kt.x,Mt.x),y:Math.min(kt.y,Mt.y)},jt=.5,Zt=Math.max(jt,Math.log($*.01)),Kt=Math.max(jt,Math.log(S*.01));A.ctrlpts=[Dt.x,Dt.y-(1+Math.pow(At,1.12)/100)*ft*(lt/3+1)*Zt,Dt.x-(1+Math.pow(At,1.12)/100)*ft*(lt/3+1)*Kt,Dt.y]},id.findStraightEdgePoints=function(y){y._private.rscratch.edgeType="straight"},id.findBezierPoints=function(y,g,x,T,A){var D=y._private.rscratch,O=g.vectorNormInverse,$=g.posPts,q=g.intersectionPts,S=y.pstyle("edge-distances").value,G=y.pstyle("control-point-step-size").pfValue,W=y.pstyle("control-point-distances"),et=y.pstyle("control-point-weights"),at=W&&et?Math.min(W.value.length,et.value.length):1,lt=W?W.pfValue[0]:void 0,ft=et.value[0],At=T;D.edgeType=At?"multibezier":"bezier",D.ctrlpts=[];for(var kt=0;kt<at;kt++){var Mt=(.5-g.eles.length/2+x)*G*(A?-1:1),Dt=void 0,jt=ZP(Mt);At&&(lt=W?W.pfValue[kt]:G,ft=et.value[kt]),T?Dt=lt:Dt=lt!==void 0?jt*lt:void 0;var Zt=Dt!==void 0?Dt:Mt,Kt=1-ft,zt=ft,ee=S==="node-position"?$:q,Vt={x:ee.x1*Kt+ee.x2*zt,y:ee.y1*Kt+ee.y2*zt};D.ctrlpts.push(Vt.x+O.x*Zt,Vt.y+O.y*Zt)}},id.findTaxiPoints=function(y,g){var x=y._private.rscratch;x.edgeType="segments";var T="vertical",A="horizontal",D="leftward",O="rightward",$="downward",q="upward",S="auto",G=g.posPts,W=g.srcW,et=g.srcH,at=g.tgtW,lt=g.tgtH,ft=y.pstyle("edge-distances").value,At=ft!=="node-position",kt=y.pstyle("taxi-direction").value,Mt=kt,Dt=y.pstyle("taxi-turn"),jt=Dt.units==="%",Zt=Dt.pfValue,Kt=Zt<0,zt=y.pstyle("taxi-turn-min-distance").pfValue,ee=At?(W+at)/2:0,Vt=At?(et+lt)/2:0,fe=G.x2-G.x1,ge=G.y2-G.y1,ne=function(Ki,Po){return Ki>0?Math.max(Ki-Po,0):Math.min(Ki+Po,0)},Pe=ne(fe,ee),pe=ne(ge,Vt),bn=!1;Mt===S?kt=Math.abs(Pe)>Math.abs(pe)?A:T:Mt===q||Mt===$?(kt=T,bn=!0):(Mt===D||Mt===O)&&(kt=A,bn=!0);var ze=kt===T,Ve=ze?pe:Pe,En=ze?ge:fe,Dn=ZP(En),Kn=!1;!(bn&&(jt||Kt))&&(Mt===$&&En<0||Mt===q&&En>0||Mt===D&&En>0||Mt===O&&En<0)&&(Dn*=-1,Ve=Dn*Math.abs(Ve),Kn=!0);var Sn;if(jt){var Wn=Zt<0?1+Zt:Zt;Sn=Wn*Ve}else{var rr=Zt<0?Ve:0;Sn=rr+Zt*Dn}var vr=function(Ki){return Math.abs(Ki)<zt||Math.abs(Ki)>=Math.abs(Ve)},ur=vr(Sn),tr=vr(Math.abs(Ve)-Math.abs(Sn)),wn=ur||tr;if(wn&&!Kn)if(ze){var gr=Math.abs(En)<=et/2,fr=Math.abs(fe)<=at/2;if(gr){var Jr=(G.x1+G.x2)/2,wi=G.y1,Ks=G.y2;x.segpts=[Jr,wi,Jr,Ks]}else if(fr){var ka=(G.y1+G.y2)/2,Ci=G.x1,hi=G.x2;x.segpts=[Ci,ka,hi,ka]}else x.segpts=[G.x1,G.y2]}else{var gs=Math.abs(En)<=W/2,qi=Math.abs(ge)<=lt/2;if(gs){var Si=(G.y1+G.y2)/2,Ui=G.x1,Ga=G.x2;x.segpts=[Ui,Si,Ga,Si]}else if(qi){var Ys=(G.x1+G.x2)/2,zs=G.y1,Er=G.y2;x.segpts=[Ys,zs,Ys,Er]}else x.segpts=[G.x2,G.y1]}else if(ze){var Qt=G.y1+Sn+(At?et/2*Dn:0),jn=G.x1,_r=G.x2;x.segpts=[jn,Qt,_r,Qt]}else{var ir=G.x1+Sn+(At?W/2*Dn:0),sr=G.y1,Ia=G.y2;x.segpts=[ir,sr,ir,Ia]}},id.tryToCorrectInvalidPoints=function(y,g){var x=y._private.rscratch;if(x.edgeType==="bezier"){var T=g.srcPos,A=g.tgtPos,D=g.srcW,O=g.srcH,$=g.tgtW,q=g.tgtH,S=g.srcShape,G=g.tgtShape,W=!X(x.startX)||!X(x.startY),et=!X(x.arrowStartX)||!X(x.arrowStartY),at=!X(x.endX)||!X(x.endY),lt=!X(x.arrowEndX)||!X(x.arrowEndY),ft=3,At=this.getArrowWidth(y.pstyle("width").pfValue,y.pstyle("arrow-scale").value)*this.arrowShapeWidth,kt=ft*At,Mt=E3({x:x.ctrlpts[0],y:x.ctrlpts[1]},{x:x.startX,y:x.startY}),Dt=Mt<kt,jt=E3({x:x.ctrlpts[0],y:x.ctrlpts[1]},{x:x.endX,y:x.endY}),Zt=jt<kt,Kt=!1;if(W||et||Dt){Kt=!0;var zt={x:x.ctrlpts[0]-T.x,y:x.ctrlpts[1]-T.y},ee=Math.sqrt(zt.x*zt.x+zt.y*zt.y),Vt={x:zt.x/ee,y:zt.y/ee},fe=Math.max(D,O),ge={x:x.ctrlpts[0]+Vt.x*2*fe,y:x.ctrlpts[1]+Vt.y*2*fe},ne=S.intersectLine(T.x,T.y,D,O,ge.x,ge.y,0);Dt?(x.ctrlpts[0]=x.ctrlpts[0]+Vt.x*(kt-Mt),x.ctrlpts[1]=x.ctrlpts[1]+Vt.y*(kt-Mt)):(x.ctrlpts[0]=ne[0]+Vt.x*kt,x.ctrlpts[1]=ne[1]+Vt.y*kt)}if(at||lt||Zt){Kt=!0;var Pe={x:x.ctrlpts[0]-A.x,y:x.ctrlpts[1]-A.y},pe=Math.sqrt(Pe.x*Pe.x+Pe.y*Pe.y),bn={x:Pe.x/pe,y:Pe.y/pe},ze=Math.max(D,O),Ve={x:x.ctrlpts[0]+bn.x*2*ze,y:x.ctrlpts[1]+bn.y*2*ze},En=G.intersectLine(A.x,A.y,$,q,Ve.x,Ve.y,0);Zt?(x.ctrlpts[0]=x.ctrlpts[0]+bn.x*(kt-jt),x.ctrlpts[1]=x.ctrlpts[1]+bn.y*(kt-jt)):(x.ctrlpts[0]=En[0]+bn.x*kt,x.ctrlpts[1]=En[1]+bn.y*kt)}Kt&&this.findEndpoints(y)}},id.storeAllpts=function(y){var g=y._private.rscratch;if(g.edgeType==="multibezier"||g.edgeType==="bezier"||g.edgeType==="self"||g.edgeType==="compound"){g.allpts=[],g.allpts.push(g.startX,g.startY);for(var x=0;x+1<g.ctrlpts.length;x+=2)g.allpts.push(g.ctrlpts[x],g.ctrlpts[x+1]),x+3<g.ctrlpts.length&&g.allpts.push((g.ctrlpts[x]+g.ctrlpts[x+2])/2,(g.ctrlpts[x+1]+g.ctrlpts[x+3])/2);g.allpts.push(g.endX,g.endY);var T,A;g.ctrlpts.length/2%2===0?(T=g.allpts.length/2-1,g.midX=g.allpts[T],g.midY=g.allpts[T+1]):(T=g.allpts.length/2-3,A=.5,g.midX=rf(g.allpts[T],g.allpts[T+2],g.allpts[T+4],A),g.midY=rf(g.allpts[T+1],g.allpts[T+3],g.allpts[T+5],A))}else if(g.edgeType==="straight")g.allpts=[g.startX,g.startY,g.endX,g.endY],g.midX=(g.startX+g.endX+g.arrowStartX+g.arrowEndX)/4,g.midY=(g.startY+g.endY+g.arrowStartY+g.arrowEndY)/4;else if(g.edgeType==="segments")if(g.allpts=[],g.allpts.push(g.startX,g.startY),g.allpts.push.apply(g.allpts,g.segpts),g.allpts.push(g.endX,g.endY),g.segpts.length%4===0){var D=g.segpts.length/2,O=D-2;g.midX=(g.segpts[O]+g.segpts[D])/2,g.midY=(g.segpts[O+1]+g.segpts[D+1])/2}else{var $=g.segpts.length/2-1;g.midX=g.segpts[$],g.midY=g.segpts[$+1]}},id.checkForInvalidEdgeWarning=function(y){var g=y[0]._private.rscratch;g.nodesOverlap||X(g.startX)&&X(g.startY)&&X(g.endX)&&X(g.endY)?g.loggedErr=!1:g.loggedErr||(g.loggedErr=!0,Sc("Edge `"+y.id()+"` has invalid endpoints and so it is impossible to draw.  Adjust your edge style (e.g. control points) accordingly or use an alternative edge type.  This is expected behaviour when the source node and the target node overlap."))},id.findEdgeControlPoints=function(y){var g=this;if(!(!y||y.length===0)){for(var x=this,T=x.cy,A=T.hasCompoundNodes(),D={map:new zb,get:function(zt){var ee=this.map.get(zt[0]);return ee!=null?ee.get(zt[1]):null},set:function(zt,ee){var Vt=this.map.get(zt[0]);Vt==null&&(Vt=new zb,this.map.set(zt[0],Vt)),Vt.set(zt[1],ee)}},O=[],$=[],q=0;q<y.length;q++){var S=y[q],G=S._private,W=S.pstyle("curve-style").value;if(!(S.removed()||!S.takesUpSpace())){if(W==="haystack"){$.push(S);continue}var et=W==="unbundled-bezier"||W==="segments"||W==="straight"||W==="straight-triangle"||W==="taxi",at=W==="unbundled-bezier"||W==="bezier",lt=G.source,ft=G.target,At=lt.poolIndex(),kt=ft.poolIndex(),Mt=[At,kt].sort(),Dt=D.get(Mt);Dt==null&&(Dt={eles:[]},D.set(Mt,Dt),O.push(Mt)),Dt.eles.push(S),et&&(Dt.hasUnbundled=!0),at&&(Dt.hasBezier=!0)}}for(var jt=function(zt){var ee=O[zt],Vt=D.get(ee),fe=void 0;if(!Vt.hasUnbundled){var ge=Vt.eles[0].parallelEdges().filter(function(Er){return Er.isBundledBezier()});mL(Vt.eles),ge.forEach(function(Er){return Vt.eles.push(Er)}),Vt.eles.sort(function(Er,Qt){return Er.poolIndex()-Qt.poolIndex()})}var ne=Vt.eles[0],Pe=ne.source(),pe=ne.target();if(Pe.poolIndex()>pe.poolIndex()){var bn=Pe;Pe=pe,pe=bn}var ze=Vt.srcPos=Pe.position(),Ve=Vt.tgtPos=pe.position(),En=Vt.srcW=Pe.outerWidth(),Dn=Vt.srcH=Pe.outerHeight(),Kn=Vt.tgtW=pe.outerWidth(),Sn=Vt.tgtH=pe.outerHeight(),Wn=Vt.srcShape=x.nodeShapes[g.getNodeShape(Pe)],rr=Vt.tgtShape=x.nodeShapes[g.getNodeShape(pe)];Vt.dirCounts={north:0,west:0,south:0,east:0,northwest:0,southwest:0,northeast:0,southeast:0};for(var vr=0;vr<Vt.eles.length;vr++){var ur=Vt.eles[vr],tr=ur[0]._private.rscratch,wn=ur.pstyle("curve-style").value,gr=wn==="unbundled-bezier"||wn==="segments"||wn==="taxi",fr=!Pe.same(ur.source());if(!Vt.calculatedIntersection&&Pe!==pe&&(Vt.hasBezier||Vt.hasUnbundled)){Vt.calculatedIntersection=!0;var Jr=Wn.intersectLine(ze.x,ze.y,En,Dn,Ve.x,Ve.y,0),wi=Vt.srcIntn=Jr,Ks=rr.intersectLine(Ve.x,Ve.y,Kn,Sn,ze.x,ze.y,0),ka=Vt.tgtIntn=Ks,Ci=Vt.intersectionPts={x1:Jr[0],x2:Ks[0],y1:Jr[1],y2:Ks[1]},hi=Vt.posPts={x1:ze.x,x2:Ve.x,y1:ze.y,y2:Ve.y},gs=Ks[1]-Jr[1],qi=Ks[0]-Jr[0],Si=Math.sqrt(qi*qi+gs*gs),Ui=Vt.vector={x:qi,y:gs},Ga=Vt.vectorNorm={x:Ui.x/Si,y:Ui.y/Si},Ys={x:-Ga.y,y:Ga.x};Vt.nodesOverlap=!X(Si)||rr.checkPoint(Jr[0],Jr[1],0,Kn,Sn,Ve.x,Ve.y)||Wn.checkPoint(Ks[0],Ks[1],0,En,Dn,ze.x,ze.y),Vt.vectorNormInverse=Ys,fe={nodesOverlap:Vt.nodesOverlap,dirCounts:Vt.dirCounts,calculatedIntersection:!0,hasBezier:Vt.hasBezier,hasUnbundled:Vt.hasUnbundled,eles:Vt.eles,srcPos:Ve,tgtPos:ze,srcW:Kn,srcH:Sn,tgtW:En,tgtH:Dn,srcIntn:ka,tgtIntn:wi,srcShape:rr,tgtShape:Wn,posPts:{x1:hi.x2,y1:hi.y2,x2:hi.x1,y2:hi.y1},intersectionPts:{x1:Ci.x2,y1:Ci.y2,x2:Ci.x1,y2:Ci.y1},vector:{x:-Ui.x,y:-Ui.y},vectorNorm:{x:-Ga.x,y:-Ga.y},vectorNormInverse:{x:-Ys.x,y:-Ys.y}}}var zs=fr?fe:Vt;tr.nodesOverlap=zs.nodesOverlap,tr.srcIntn=zs.srcIntn,tr.tgtIntn=zs.tgtIntn,A&&(Pe.isParent()||Pe.isChild()||pe.isParent()||pe.isChild())&&(Pe.parents().anySame(pe)||pe.parents().anySame(Pe)||Pe.same(pe)&&Pe.isParent())?g.findCompoundLoopPoints(ur,zs,vr,gr):Pe===pe?g.findLoopPoints(ur,zs,vr,gr):wn==="segments"?g.findSegmentsPoints(ur,zs):wn==="taxi"?g.findTaxiPoints(ur,zs):wn==="straight"||!gr&&Vt.eles.length%2===1&&vr===Math.floor(Vt.eles.length/2)?g.findStraightEdgePoints(ur):g.findBezierPoints(ur,zs,vr,gr,fr),g.findEndpoints(ur),g.tryToCorrectInvalidPoints(ur,zs),g.checkForInvalidEdgeWarning(ur),g.storeAllpts(ur),g.storeEdgeProjections(ur),g.calculateArrowAngles(ur),g.recalculateEdgeLabelProjections(ur),g.calculateLabelAngles(ur)}},Zt=0;Zt<O.length;Zt++)jt(Zt);this.findHaystackPoints($)}};function jB(y){var g=[];if(y!=null){for(var x=0;x<y.length;x+=2){var T=y[x],A=y[x+1];g.push({x:T,y:A})}return g}}id.getSegmentPoints=function(y){var g=y[0]._private.rscratch,x=g.edgeType;if(x==="segments")return this.recalculateRenderedStyle(y),jB(g.segpts)},id.getControlPoints=function(y){var g=y[0]._private.rscratch,x=g.edgeType;if(x==="bezier"||x==="multibezier"||x==="self"||x==="compound")return this.recalculateRenderedStyle(y),jB(g.ctrlpts)},id.getEdgeMidpoint=function(y){var g=y[0]._private.rscratch;return this.recalculateRenderedStyle(y),{x:g.midX,y:g.midY}};var Bk={};Bk.manualEndptToPx=function(y,g){var x=this,T=y.position(),A=y.outerWidth(),D=y.outerHeight();if(g.value.length===2){var O=[g.pfValue[0],g.pfValue[1]];return g.units[0]==="%"&&(O[0]=O[0]*A),g.units[1]==="%"&&(O[1]=O[1]*D),O[0]+=T.x,O[1]+=T.y,O}else{var $=g.pfValue[0];$=-Math.PI/2+$;var q=2*Math.max(A,D),S=[T.x+Math.cos($)*q,T.y+Math.sin($)*q];return x.nodeShapes[this.getNodeShape(y)].intersectLine(T.x,T.y,A,D,S[0],S[1],0)}},Bk.findEndpoints=function(y){var g=this,x,T=y.source()[0],A=y.target()[0],D=T.position(),O=A.position(),$=y.pstyle("target-arrow-shape").value,q=y.pstyle("source-arrow-shape").value,S=y.pstyle("target-distance-from-node").pfValue,G=y.pstyle("source-distance-from-node").pfValue,W=y.pstyle("curve-style").value,et=y._private.rscratch,at=et.edgeType,lt=W==="taxi",ft=at==="self"||at==="compound",At=at==="bezier"||at==="multibezier"||ft,kt=at!=="bezier",Mt=at==="straight"||at==="segments",Dt=at==="segments",jt=At||kt||Mt,Zt=ft||lt,Kt=y.pstyle("source-endpoint"),zt=Zt?"outside-to-node":Kt.value,ee=y.pstyle("target-endpoint"),Vt=Zt?"outside-to-node":ee.value;et.srcManEndpt=Kt,et.tgtManEndpt=ee;var fe,ge,ne,Pe;if(At){var pe=[et.ctrlpts[0],et.ctrlpts[1]],bn=kt?[et.ctrlpts[et.ctrlpts.length-2],et.ctrlpts[et.ctrlpts.length-1]]:pe;fe=bn,ge=pe}else if(Mt){var ze=Dt?et.segpts.slice(0,2):[O.x,O.y],Ve=Dt?et.segpts.slice(et.segpts.length-2):[D.x,D.y];fe=Ve,ge=ze}if(Vt==="inside-to-node")x=[O.x,O.y];else if(ee.units)x=this.manualEndptToPx(A,ee);else if(Vt==="outside-to-line")x=et.tgtIntn;else if(Vt==="outside-to-node"||Vt==="outside-to-node-or-label"?ne=fe:(Vt==="outside-to-line"||Vt==="outside-to-line-or-label")&&(ne=[D.x,D.y]),x=g.nodeShapes[this.getNodeShape(A)].intersectLine(O.x,O.y,A.outerWidth(),A.outerHeight(),ne[0],ne[1],0),Vt==="outside-to-node-or-label"||Vt==="outside-to-line-or-label"){var En=A._private.rscratch,Dn=En.labelWidth,Kn=En.labelHeight,Sn=En.labelX,Wn=En.labelY,rr=Dn/2,vr=Kn/2,ur=A.pstyle("text-valign").value;ur==="top"?Wn-=vr:ur==="bottom"&&(Wn+=vr);var tr=A.pstyle("text-halign").value;tr==="left"?Sn-=rr:tr==="right"&&(Sn+=rr);var wn=yk(ne[0],ne[1],[Sn-rr,Wn-vr,Sn+rr,Wn-vr,Sn+rr,Wn+vr,Sn-rr,Wn+vr],O.x,O.y);if(wn.length>0){var gr=D,fr=T3(gr,q5(x)),Jr=T3(gr,q5(wn)),wi=fr;if(Jr<fr&&(x=wn,wi=Jr),wn.length>2){var Ks=T3(gr,{x:wn[2],y:wn[3]});Ks<wi&&(x=[wn[2],wn[3]])}}}var ka=FT(x,fe,g.arrowShapes[$].spacing(y)+S),Ci=FT(x,fe,g.arrowShapes[$].gap(y)+S);if(et.endX=Ci[0],et.endY=Ci[1],et.arrowEndX=ka[0],et.arrowEndY=ka[1],zt==="inside-to-node")x=[D.x,D.y];else if(Kt.units)x=this.manualEndptToPx(T,Kt);else if(zt==="outside-to-line")x=et.srcIntn;else if(zt==="outside-to-node"||zt==="outside-to-node-or-label"?Pe=ge:(zt==="outside-to-line"||zt==="outside-to-line-or-label")&&(Pe=[O.x,O.y]),x=g.nodeShapes[this.getNodeShape(T)].intersectLine(D.x,D.y,T.outerWidth(),T.outerHeight(),Pe[0],Pe[1],0),zt==="outside-to-node-or-label"||zt==="outside-to-line-or-label"){var hi=T._private.rscratch,gs=hi.labelWidth,qi=hi.labelHeight,Si=hi.labelX,Ui=hi.labelY,Ga=gs/2,Ys=qi/2,zs=T.pstyle("text-valign").value;zs==="top"?Ui-=Ys:zs==="bottom"&&(Ui+=Ys);var Er=T.pstyle("text-halign").value;Er==="left"?Si-=Ga:Er==="right"&&(Si+=Ga);var Qt=yk(Pe[0],Pe[1],[Si-Ga,Ui-Ys,Si+Ga,Ui-Ys,Si+Ga,Ui+Ys,Si-Ga,Ui+Ys],D.x,D.y);if(Qt.length>0){var jn=O,_r=T3(jn,q5(x)),ir=T3(jn,q5(Qt)),sr=_r;if(ir<_r&&(x=[Qt[0],Qt[1]],sr=ir),Qt.length>2){var Ia=T3(jn,{x:Qt[2],y:Qt[3]});Ia<sr&&(x=[Qt[2],Qt[3]])}}}var $r=FT(x,ge,g.arrowShapes[q].spacing(y)+G),Ki=FT(x,ge,g.arrowShapes[q].gap(y)+G);et.startX=Ki[0],et.startY=Ki[1],et.arrowStartX=$r[0],et.arrowStartY=$r[1],jt&&(!X(et.startX)||!X(et.startY)||!X(et.endX)||!X(et.endY)?et.badLine=!0:et.badLine=!1)},Bk.getSourceEndpoint=function(y){var g=y[0]._private.rscratch;switch(this.recalculateRenderedStyle(y),g.edgeType){case"haystack":return{x:g.haystackPts[0],y:g.haystackPts[1]};default:return{x:g.arrowStartX,y:g.arrowStartY}}},Bk.getTargetEndpoint=function(y){var g=y[0]._private.rscratch;switch(this.recalculateRenderedStyle(y),g.edgeType){case"haystack":return{x:g.haystackPts[2],y:g.haystackPts[3]};default:return{x:g.arrowEndX,y:g.arrowEndY}}};var YL={};function ttt(y,g,x){for(var T=function(S,G,W,et){return rf(S,G,W,et)},A=g._private,D=A.rstyle.bezierPts,O=0;O<y.bezierProjPcts.length;O++){var $=y.bezierProjPcts[O];D.push({x:T(x[0],x[2],x[4],$),y:T(x[1],x[3],x[5],$)})}}YL.storeEdgeProjections=function(y){var g=y._private,x=g.rscratch,T=x.edgeType;if(g.rstyle.bezierPts=null,g.rstyle.linePts=null,g.rstyle.haystackPts=null,T==="multibezier"||T==="bezier"||T==="self"||T==="compound"){g.rstyle.bezierPts=[];for(var A=0;A+5<x.allpts.length;A+=4)ttt(this,y,x.allpts.slice(A,A+6))}else if(T==="segments")for(var D=g.rstyle.linePts=[],A=0;A+1<x.allpts.length;A+=2)D.push({x:x.allpts[A],y:x.allpts[A+1]});else if(T==="haystack"){var O=x.haystackPts;g.rstyle.haystackPts=[{x:O[0],y:O[1]},{x:O[2],y:O[3]}]}g.rstyle.arrowWidth=this.getArrowWidth(y.pstyle("width").pfValue,y.pstyle("arrow-scale").value)*this.arrowShapeWidth},YL.recalculateEdgeProjections=function(y){this.findEdgeControlPoints(y)};var yp={};yp.recalculateNodeLabelProjection=function(y){var g=y.pstyle("label").strValue;if(!Z(g)){var x,T,A=y._private,D=y.width(),O=y.height(),$=y.padding(),q=y.position(),S=y.pstyle("text-halign").strValue,G=y.pstyle("text-valign").strValue,W=A.rscratch,et=A.rstyle;switch(S){case"left":x=q.x-D/2-$;break;case"right":x=q.x+D/2+$;break;default:x=q.x}switch(G){case"top":T=q.y-O/2-$;break;case"bottom":T=q.y+O/2+$;break;default:T=q.y}W.labelX=x,W.labelY=T,et.labelX=x,et.labelY=T,this.calculateLabelAngles(y),this.applyLabelDimensions(y)}};var $B=function(g,x){var T=Math.atan(x/g);return g===0&&T<0&&(T=T*-1),T},zB=function(g,x){var T=x.x-g.x,A=x.y-g.y;return $B(T,A)},qB=function(g,x,T,A){var D=wk(0,A-.001,1),O=wk(0,A+.001,1),$=H5(g,x,T,D),q=H5(g,x,T,O);return zB($,q)};yp.recalculateEdgeLabelProjections=function(y){var g,x=y._private,T=x.rscratch,A=this,D={mid:y.pstyle("label").strValue,source:y.pstyle("source-label").strValue,target:y.pstyle("target-label").strValue};if(D.mid||D.source||D.target){g={x:T.midX,y:T.midY};var O=function(W,et,at){bm(x.rscratch,W,et,at),bm(x.rstyle,W,et,at)};O("labelX",null,g.x),O("labelY",null,g.y);var $=$B(T.midDispX,T.midDispY);O("labelAutoAngle",null,$);var q=function G(){if(G.cache)return G.cache;for(var W=[],et=0;et+5<T.allpts.length;et+=4){var at={x:T.allpts[et],y:T.allpts[et+1]},lt={x:T.allpts[et+2],y:T.allpts[et+3]},ft={x:T.allpts[et+4],y:T.allpts[et+5]};W.push({p0:at,p1:lt,p2:ft,startDist:0,length:0,segments:[]})}var At=x.rstyle.bezierPts,kt=A.bezierProjPcts.length;function Mt(zt,ee,Vt,fe,ge){var ne=E3(ee,Vt),Pe=zt.segments[zt.segments.length-1],pe={p0:ee,p1:Vt,t0:fe,t1:ge,startDist:Pe?Pe.startDist+Pe.length:0,length:ne};zt.segments.push(pe),zt.length+=ne}for(var Dt=0;Dt<W.length;Dt++){var jt=W[Dt],Zt=W[Dt-1];Zt&&(jt.startDist=Zt.startDist+Zt.length),Mt(jt,jt.p0,At[Dt*kt],0,A.bezierProjPcts[0]);for(var Kt=0;Kt<kt-1;Kt++)Mt(jt,At[Dt*kt+Kt],At[Dt*kt+Kt+1],A.bezierProjPcts[Kt],A.bezierProjPcts[Kt+1]);Mt(jt,At[Dt*kt+kt-1],jt.p2,A.bezierProjPcts[kt-1],1)}return G.cache=W},S=function(W){var et,at=W==="source";if(D[W]){var lt=y.pstyle(W+"-text-offset").pfValue;switch(T.edgeType){case"self":case"compound":case"bezier":case"multibezier":{for(var ft=q(),At,kt=0,Mt=0,Dt=0;Dt<ft.length;Dt++){for(var jt=ft[at?Dt:ft.length-1-Dt],Zt=0;Zt<jt.segments.length;Zt++){var Kt=jt.segments[at?Zt:jt.segments.length-1-Zt],zt=Dt===ft.length-1&&Zt===jt.segments.length-1;if(kt=Mt,Mt+=Kt.length,Mt>=lt||zt){At={cp:jt,segment:Kt};break}}if(At)break}var ee=At.cp,Vt=At.segment,fe=(lt-kt)/Vt.length,ge=Vt.t1-Vt.t0,ne=at?Vt.t0+ge*fe:Vt.t1-ge*fe;ne=wk(0,ne,1),g=H5(ee.p0,ee.p1,ee.p2,ne),et=qB(ee.p0,ee.p1,ee.p2,ne);break}case"straight":case"segments":case"haystack":{for(var Pe=0,pe,bn,ze,Ve,En=T.allpts.length,Dn=0;Dn+3<En&&(at?(ze={x:T.allpts[Dn],y:T.allpts[Dn+1]},Ve={x:T.allpts[Dn+2],y:T.allpts[Dn+3]}):(ze={x:T.allpts[En-2-Dn],y:T.allpts[En-1-Dn]},Ve={x:T.allpts[En-4-Dn],y:T.allpts[En-3-Dn]}),pe=E3(ze,Ve),bn=Pe,Pe+=pe,!(Pe>=lt));Dn+=2);var Kn=lt-bn,Sn=Kn/pe;Sn=wk(0,Sn,1),g=EY(ze,Ve,Sn),et=zB(ze,Ve);break}}O("labelX",W,g.x),O("labelY",W,g.y),O("labelAutoAngle",W,et)}};S("source"),S("target"),this.applyLabelDimensions(y)}},yp.applyLabelDimensions=function(y){this.applyPrefixedLabelDimensions(y),y.isEdge()&&(this.applyPrefixedLabelDimensions(y,"source"),this.applyPrefixedLabelDimensions(y,"target"))},yp.applyPrefixedLabelDimensions=function(y,g){var x=y._private,T=this.getLabelText(y,g),A=this.calculateLabelDimensions(y,T),D=y.pstyle("line-height").pfValue,O=y.pstyle("text-wrap").strValue,$=bp(x.rscratch,"labelWrapCachedLines",g)||[],q=O!=="wrap"?1:Math.max($.length,1),S=A.height/q,G=S*D,W=A.width,et=A.height+(q-1)*(D-1)*S;bm(x.rstyle,"labelWidth",g,W),bm(x.rscratch,"labelWidth",g,W),bm(x.rstyle,"labelHeight",g,et),bm(x.rscratch,"labelHeight",g,et),bm(x.rscratch,"labelLineHeight",g,G)},yp.getLabelText=function(y,g){var x=y._private,T=g?g+"-":"",A=y.pstyle(T+"label").strValue,D=y.pstyle("text-transform").value,O=function(Kn,Sn){return Sn?(bm(x.rscratch,Kn,g,Sn),Sn):bp(x.rscratch,Kn,g)};if(!A)return"";D=="none"||(D=="uppercase"?A=A.toUpperCase():D=="lowercase"&&(A=A.toLowerCase()));var $=y.pstyle("text-wrap").value;if($==="wrap"){var q=O("labelKey");if(q!=null&&O("labelWrapKey")===q)return O("labelWrapCachedText");for(var S="​",G=A.split(`
`),W=y.pstyle("text-max-width").pfValue,et=y.pstyle("text-overflow-wrap").value,at=et==="anywhere",lt=[],ft=/[\s\u200b]+/,At=at?"":" ",kt=0;kt<G.length;kt++){var Mt=G[kt],Dt=this.calculateLabelDimensions(y,Mt),jt=Dt.width;if(at){var Zt=Mt.split("").join(S);Mt=Zt}if(jt>W){for(var Kt=Mt.split(ft),zt="",ee=0;ee<Kt.length;ee++){var Vt=Kt[ee],fe=zt.length===0?Vt:zt+At+Vt,ge=this.calculateLabelDimensions(y,fe),ne=ge.width;ne<=W?zt+=Vt+At:(zt&&lt.push(zt),zt=Vt+At)}zt.match(/^[\s\u200b]+$/)||lt.push(zt)}else lt.push(Mt)}O("labelWrapCachedLines",lt),A=O("labelWrapCachedText",lt.join(`
`)),O("labelWrapKey",q)}else if($==="ellipsis"){var Pe=y.pstyle("text-max-width").pfValue,pe="",bn="…",ze=!1;if(this.calculateLabelDimensions(y,A).width<Pe)return A;for(var Ve=0;Ve<A.length;Ve++){var En=this.calculateLabelDimensions(y,pe+A[Ve]+bn).width;if(En>Pe)break;pe+=A[Ve],Ve===A.length-1&&(ze=!0)}return ze||(pe+=bn),pe}return A},yp.getLabelJustification=function(y){var g=y.pstyle("text-justification").strValue,x=y.pstyle("text-halign").strValue;if(g==="auto")if(y.isNode())switch(x){case"left":return"right";case"right":return"left";default:return"center"}else return"center";else return g},yp.calculateLabelDimensions=function(y,g){var x=this,T=td(g,y._private.labelDimsKey),A=x.labelDimCache||(x.labelDimCache=[]),D=A[T];if(D!=null)return D;var O=0,$=y.pstyle("font-style").strValue,q=y.pstyle("font-size").pfValue,S=y.pstyle("font-family").strValue,G=y.pstyle("font-weight").strValue,W=this.labelCalcCanvas,et=this.labelCalcCanvasContext;if(!W){W=this.labelCalcCanvas=document.createElement("canvas"),et=this.labelCalcCanvasContext=W.getContext("2d");var at=W.style;at.position="absolute",at.left="-9999px",at.top="-9999px",at.zIndex="-1",at.visibility="hidden",at.pointerEvents="none"}et.font="".concat($," ").concat(G," ").concat(q,"px ").concat(S);for(var lt=0,ft=0,At=g.split(`
`),kt=0;kt<At.length;kt++){var Mt=At[kt],Dt=et.measureText(Mt),jt=Math.ceil(Dt.width),Zt=q;lt=Math.max(jt,lt),ft+=Zt}return lt+=O,ft+=O,A[T]={width:lt,height:ft}},yp.calculateLabelAngle=function(y,g){var x=y._private,T=x.rscratch,A=y.isEdge(),D=g?g+"-":"",O=y.pstyle(D+"text-rotation"),$=O.strValue;return $==="none"?0:A&&$==="autorotate"?T.labelAutoAngle:$==="autorotate"?0:O.pfValue},yp.calculateLabelAngles=function(y){var g=this,x=y.isEdge(),T=y._private,A=T.rscratch;A.labelAngle=g.calculateLabelAngle(y),x&&(A.sourceLabelAngle=g.calculateLabelAngle(y,"source"),A.targetLabelAngle=g.calculateLabelAngle(y,"target"))};var th={},XL=28,HB=!1;th.getNodeShape=function(y){var g=this,x=y.pstyle("shape").value;if(x==="cutrectangle"&&(y.width()<XL||y.height()<XL))return HB||(Sc("The `cutrectangle` node shape can not be used at small sizes so `rectangle` is used instead"),HB=!0),"rectangle";if(y.isParent())return x==="rectangle"||x==="roundrectangle"||x==="round-rectangle"||x==="cutrectangle"||x==="cut-rectangle"||x==="barrel"?x:"rectangle";if(x==="polygon"){var T=y.pstyle("shape-polygon-points").value;return g.nodeShapes.makePolygon(T).name}return x};var Rk={};Rk.registerCalculationListeners=function(){var y=this.cy,g=y.collection(),x=this,T=function(O){var $=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;if(g.merge(O),$)for(var q=0;q<O.length;q++){var S=O[q],G=S._private,W=G.rstyle;W.clean=!1,W.cleanConnected=!1}};x.binder(y).on("bounds.* dirty.*",function(O){var $=O.target;T($)}).on("style.* background.*",function(O){var $=O.target;T($,!1)});var A=function(O){if(O){var $=x.onUpdateEleCalcsFns;g.cleanStyle();for(var q=0;q<g.length;q++){var S=g[q],G=S._private.rstyle;S.isNode()&&!G.cleanConnected&&(T(S.connectedEdges()),G.cleanConnected=!0)}if($)for(var W=0;W<$.length;W++){var et=$[W];et(O,g)}x.recalculateRenderedStyle(g),g=y.collection()}};x.flushRenderedStyleQueue=function(){A(!0)},x.beforeRender(A,x.beforeRenderPriorities.eleCalcs)},Rk.onUpdateEleCalcs=function(y){var g=this.onUpdateEleCalcsFns=this.onUpdateEleCalcsFns||[];g.push(y)},Rk.recalculateRenderedStyle=function(y,g){var x=function(jt){return jt._private.rstyle.cleanConnected},T=[],A=[];if(!this.destroyed){g===void 0&&(g=!0);for(var D=0;D<y.length;D++){var O=y[D],$=O._private,q=$.rstyle;O.isEdge()&&(!x(O.source())||!x(O.target()))&&(q.clean=!1),!(g&&q.clean||O.removed())&&O.pstyle("display").value!=="none"&&($.group==="nodes"?A.push(O):T.push(O),q.clean=!0)}for(var S=0;S<A.length;S++){var G=A[S],W=G._private,et=W.rstyle,at=G.position();this.recalculateNodeLabelProjection(G),et.nodeX=at.x,et.nodeY=at.y,et.nodeW=G.pstyle("width").pfValue,et.nodeH=G.pstyle("height").pfValue}this.recalculateEdgeProjections(T);for(var lt=0;lt<T.length;lt++){var ft=T[lt],At=ft._private,kt=At.rstyle,Mt=At.rscratch;kt.srcX=Mt.arrowStartX,kt.srcY=Mt.arrowStartY,kt.tgtX=Mt.arrowEndX,kt.tgtY=Mt.arrowEndY,kt.midX=Mt.midX,kt.midY=Mt.midY,kt.labelAngle=Mt.labelAngle,kt.sourceLabelAngle=Mt.sourceLabelAngle,kt.targetLabelAngle=Mt.targetLabelAngle}}};var b9={};b9.updateCachedGrabbedEles=function(){var y=this.cachedZSortedEles;if(y){y.drag=[],y.nondrag=[];for(var g=[],x=0;x<y.length;x++){var T=y[x],A=T._private.rscratch;T.grabbed()&&!T.isParent()?g.push(T):A.inDragLayer?y.drag.push(T):y.nondrag.push(T)}for(var x=0;x<g.length;x++){var T=g[x];y.drag.push(T)}}},b9.invalidateCachedZSortedEles=function(){this.cachedZSortedEles=null},b9.getCachedZSortedEles=function(y){if(y||!this.cachedZSortedEles){var g=this.cy.mutableElements().toArray();g.sort(pB),g.interactive=g.filter(function(x){return x.interactive()}),this.cachedZSortedEles=g,this.updateCachedGrabbedEles()}else g=this.cachedZSortedEles;return g};var jk={};[L3,p9,id,Bk,YL,yp,th,Rk,b9].forEach(function(y){me(jk,y)});var GB={};GB.getCachedImage=function(y,g,x){var T=this,A=T.imageCache=T.imageCache||{},D=A[y];if(D)return D.image.complete||D.image.addEventListener("load",x),D.image;D=A[y]=A[y]||{};var O=D.image=new Image;O.addEventListener("load",x),O.addEventListener("error",function(){O.error=!0});var $="data:",q=y.substring(0,$.length).toLowerCase()===$;return q||(O.crossOrigin=g),O.src=y,O};var ox={};ox.registerBinding=function(y,g,x,T){var A=Array.prototype.slice.apply(arguments,[1]),D=this.binder(y);return D.on.apply(D,A)},ox.binder=function(y){var g=this,x=y===window||y===document||y===document.body||Tt(y);if(g.supportsPassiveEvents==null){var T=!1;try{var A=Object.defineProperty({},"passive",{get:function(){return T=!0,!0}});window.addEventListener("test",null,A)}catch{}g.supportsPassiveEvents=T}var D=function($,q,S){var G=Array.prototype.slice.call(arguments);return x&&g.supportsPassiveEvents&&(G[2]={capture:S??!1,passive:!1,once:!1}),g.bindings.push({target:y,args:G}),(y.addEventListener||y.on).apply(y,G),this};return{on:D,addEventListener:D,addListener:D,bind:D}},ox.nodeIsDraggable=function(y){return y&&y.isNode()&&!y.locked()&&y.grabbable()},ox.nodeIsGrabbable=function(y){return this.nodeIsDraggable(y)&&y.interactive()},ox.load=function(){var y=this,g=function(Qt){return Qt.selected()},x=function(Qt,jn,_r,ir){Qt==null&&(Qt=y.cy);for(var sr=0;sr<jn.length;sr++){var Ia=jn[sr];Qt.emit({originalEvent:_r,type:Ia,position:ir})}},T=function(Qt){return Qt.shiftKey||Qt.metaKey||Qt.ctrlKey},A=function(Qt,jn){var _r=!0;if(y.cy.hasCompoundNodes()&&Qt&&Qt.pannable())for(var ir=0;jn&&ir<jn.length;ir++){var Qt=jn[ir];if(Qt.isNode()&&Qt.isParent()&&!Qt.pannable()){_r=!1;break}}else _r=!0;return _r},D=function(Qt){Qt[0]._private.grabbed=!0},O=function(Qt){Qt[0]._private.grabbed=!1},$=function(Qt){Qt[0]._private.rscratch.inDragLayer=!0},q=function(Qt){Qt[0]._private.rscratch.inDragLayer=!1},S=function(Qt){Qt[0]._private.rscratch.isGrabTarget=!0},G=function(Qt){Qt[0]._private.rscratch.isGrabTarget=!1},W=function(Qt,jn){var _r=jn.addToList,ir=_r.has(Qt);!ir&&Qt.grabbable()&&!Qt.locked()&&(_r.merge(Qt),D(Qt))},et=function(Qt,jn){if(Qt.cy().hasCompoundNodes()&&!(jn.inDragLayer==null&&jn.addToList==null)){var _r=Qt.descendants();jn.inDragLayer&&(_r.forEach($),_r.connectedEdges().forEach($)),jn.addToList&&W(_r,jn)}},at=function(Qt,jn){jn=jn||{};var _r=Qt.cy().hasCompoundNodes();jn.inDragLayer&&(Qt.forEach($),Qt.neighborhood().stdFilter(function(ir){return!_r||ir.isEdge()}).forEach($)),jn.addToList&&Qt.forEach(function(ir){W(ir,jn)}),et(Qt,jn),At(Qt,{inDragLayer:jn.inDragLayer}),y.updateCachedGrabbedEles()},lt=at,ft=function(Qt){Qt&&(y.getCachedZSortedEles().forEach(function(jn){O(jn),q(jn),G(jn)}),y.updateCachedGrabbedEles())},At=function(Qt,jn){if(!(jn.inDragLayer==null&&jn.addToList==null)&&Qt.cy().hasCompoundNodes()){var _r=Qt.ancestors().orphans();if(!_r.same(Qt)){var ir=_r.descendants().spawnSelf().merge(_r).unmerge(Qt).unmerge(Qt.descendants()),sr=ir.connectedEdges();jn.inDragLayer&&(sr.forEach($),ir.forEach($)),jn.addToList&&ir.forEach(function(Ia){W(Ia,jn)})}}},kt=function(){document.activeElement!=null&&document.activeElement.blur!=null&&document.activeElement.blur()},Mt=typeof MutationObserver<"u",Dt=typeof ResizeObserver<"u";Mt?(y.removeObserver=new MutationObserver(function(Er){for(var Qt=0;Qt<Er.length;Qt++){var jn=Er[Qt],_r=jn.removedNodes;if(_r)for(var ir=0;ir<_r.length;ir++){var sr=_r[ir];if(sr===y.container){y.destroy();break}}}}),y.container.parentNode&&y.removeObserver.observe(y.container.parentNode,{childList:!0})):y.registerBinding(y.container,"DOMNodeRemoved",function(Er){y.destroy()});var jt=Wc(function(){y.cy.resize()},100);Mt&&(y.styleObserver=new MutationObserver(jt),y.styleObserver.observe(y.container,{attributes:!0})),y.registerBinding(window,"resize",jt),Dt&&(y.resizeObserver=new ResizeObserver(jt),y.resizeObserver.observe(y.container));var Zt=function(Qt,jn){for(;Qt!=null;)jn(Qt),Qt=Qt.parentNode},Kt=function(){y.invalidateContainerClientCoordsCache()};Zt(y.container,function(Er){y.registerBinding(Er,"transitionend",Kt),y.registerBinding(Er,"animationend",Kt),y.registerBinding(Er,"scroll",Kt)}),y.registerBinding(y.container,"contextmenu",function(Er){Er.preventDefault()});var zt=function(){return y.selection[4]!==0},ee=function(Qt){for(var jn=y.findContainerClientCoords(),_r=jn[0],ir=jn[1],sr=jn[2],Ia=jn[3],$r=Qt.touches?Qt.touches:[Qt],Ki=!1,Po=0;Po<$r.length;Po++){var Nc=$r[Po];if(_r<=Nc.clientX&&Nc.clientX<=_r+sr&&ir<=Nc.clientY&&Nc.clientY<=ir+Ia){Ki=!0;break}}if(!Ki)return!1;for(var Za=y.container,mc=Qt.target,Ea=mc.parentNode,Ja=!1;Ea;){if(Ea===Za){Ja=!0;break}Ea=Ea.parentNode}return!!Ja};y.registerBinding(y.container,"mousedown",function(Qt){if(ee(Qt)){Qt.preventDefault(),kt(),y.hoverData.capture=!0,y.hoverData.which=Qt.which;var jn=y.cy,_r=[Qt.clientX,Qt.clientY],ir=y.projectIntoViewport(_r[0],_r[1]),sr=y.selection,Ia=y.findNearestElements(ir[0],ir[1],!0,!1),$r=Ia[0],Ki=y.dragData.possibleDragElements;y.hoverData.mdownPos=ir,y.hoverData.mdownGPos=_r;var Po=function(){y.hoverData.tapholdCancelled=!1,clearTimeout(y.hoverData.tapholdTimeout),y.hoverData.tapholdTimeout=setTimeout(function(){if(!y.hoverData.tapholdCancelled){var vl=y.hoverData.down;vl?vl.emit({originalEvent:Qt,type:"taphold",position:{x:ir[0],y:ir[1]}}):jn.emit({originalEvent:Qt,type:"taphold",position:{x:ir[0],y:ir[1]}})}},y.tapholdDuration)};if(Qt.which==3){y.hoverData.cxtStarted=!0;var Nc={originalEvent:Qt,type:"cxttapstart",position:{x:ir[0],y:ir[1]}};$r?($r.activate(),$r.emit(Nc),y.hoverData.down=$r):jn.emit(Nc),y.hoverData.downTime=new Date().getTime(),y.hoverData.cxtDragged=!1}else if(Qt.which==1){$r&&$r.activate();{if($r!=null&&y.nodeIsGrabbable($r)){var Za=function(vl){return{originalEvent:Qt,type:vl,position:{x:ir[0],y:ir[1]}}},mc=function(vl){vl.emit(Za("grab"))};if(S($r),!$r.selected())Ki=y.dragData.possibleDragElements=jn.collection(),lt($r,{addToList:Ki}),$r.emit(Za("grabon")).emit(Za("grab"));else{Ki=y.dragData.possibleDragElements=jn.collection();var Ea=jn.$(function(Ja){return Ja.isNode()&&Ja.selected()&&y.nodeIsGrabbable(Ja)});at(Ea,{addToList:Ki}),$r.emit(Za("grabon")),Ea.forEach(mc)}y.redrawHint("eles",!0),y.redrawHint("drag",!0)}y.hoverData.down=$r,y.hoverData.downs=Ia,y.hoverData.downTime=new Date().getTime()}x($r,["mousedown","tapstart","vmousedown"],Qt,{x:ir[0],y:ir[1]}),$r==null?(sr[4]=1,y.data.bgActivePosistion={x:ir[0],y:ir[1]},y.redrawHint("select",!0),y.redraw()):$r.pannable()&&(sr[4]=1),Po()}sr[0]=sr[2]=ir[0],sr[1]=sr[3]=ir[1]}},!1),y.registerBinding(window,"mousemove",function(Qt){var jn=y.hoverData.capture;if(!(!jn&&!ee(Qt))){var _r=!1,ir=y.cy,sr=ir.zoom(),Ia=[Qt.clientX,Qt.clientY],$r=y.projectIntoViewport(Ia[0],Ia[1]),Ki=y.hoverData.mdownPos,Po=y.hoverData.mdownGPos,Nc=y.selection,Za=null;!y.hoverData.draggingEles&&!y.hoverData.dragging&&!y.hoverData.selecting&&(Za=y.findNearestElement($r[0],$r[1],!0,!1));var mc=y.hoverData.last,Ea=y.hoverData.down,Ja=[$r[0]-Nc[2],$r[1]-Nc[3]],vl=y.dragData.possibleDragElements,zf;if(Po){var xp=Ia[0]-Po[0],kp=xp*xp,qf=Ia[1]-Po[1],mg=qf*qf,sd=kp+mg;y.hoverData.isOverThresholdDrag=zf=sd>=y.desktopTapThreshold2}var bv=T(Qt);zf&&(y.hoverData.tapholdCancelled=!0);var _m=function(){var Gb=y.hoverData.dragDelta=y.hoverData.dragDelta||[];Gb.length===0?(Gb.push(Ja[0]),Gb.push(Ja[1])):(Gb[0]+=Ja[0],Gb[1]+=Ja[1])};_r=!0,x(Za,["mousemove","vmousemove","tapdrag"],Qt,{x:$r[0],y:$r[1]});var gx=function(){y.data.bgActivePosistion=void 0,y.hoverData.selecting||ir.emit({originalEvent:Qt,type:"boxstart",position:{x:$r[0],y:$r[1]}}),Nc[4]=1,y.hoverData.selecting=!0,y.redrawHint("select",!0),y.redraw()};if(y.hoverData.which===3){if(zf){var O3={originalEvent:Qt,type:"cxtdrag",position:{x:$r[0],y:$r[1]}};Ea?Ea.emit(O3):ir.emit(O3),y.hoverData.cxtDragged=!0,(!y.hoverData.cxtOver||Za!==y.hoverData.cxtOver)&&(y.hoverData.cxtOver&&y.hoverData.cxtOver.emit({originalEvent:Qt,type:"cxtdragout",position:{x:$r[0],y:$r[1]}}),y.hoverData.cxtOver=Za,Za&&Za.emit({originalEvent:Qt,type:"cxtdragover",position:{x:$r[0],y:$r[1]}}))}}else if(y.hoverData.dragging){if(_r=!0,ir.panningEnabled()&&ir.userPanningEnabled()){var px;if(y.hoverData.justStartedPan){var T9=y.hoverData.mdownPos;px={x:($r[0]-T9[0])*sr,y:($r[1]-T9[1])*sr},y.hoverData.justStartedPan=!1}else px={x:Ja[0]*sr,y:Ja[1]*sr};ir.panBy(px),ir.emit("dragpan"),y.hoverData.dragged=!0}$r=y.projectIntoViewport(Qt.clientX,Qt.clientY)}else if(Nc[4]==1&&(Ea==null||Ea.pannable())){if(zf){if(!y.hoverData.dragging&&ir.boxSelectionEnabled()&&(bv||!ir.panningEnabled()||!ir.userPanningEnabled()))gx();else if(!y.hoverData.selecting&&ir.panningEnabled()&&ir.userPanningEnabled()){var N3=A(Ea,y.hoverData.downs);N3&&(y.hoverData.dragging=!0,y.hoverData.justStartedPan=!0,Nc[4]=0,y.data.bgActivePosistion=q5(Ki),y.redrawHint("select",!0),y.redraw())}Ea&&Ea.pannable()&&Ea.active()&&Ea.unactivate()}}else{if(Ea&&Ea.pannable()&&Ea.active()&&Ea.unactivate(),(!Ea||!Ea.grabbed())&&Za!=mc&&(mc&&x(mc,["mouseout","tapdragout"],Qt,{x:$r[0],y:$r[1]}),Za&&x(Za,["mouseover","tapdragover"],Qt,{x:$r[0],y:$r[1]}),y.hoverData.last=Za),Ea)if(zf){if(ir.boxSelectionEnabled()&&bv)Ea&&Ea.grabbed()&&(ft(vl),Ea.emit("freeon"),vl.emit("free"),y.dragData.didDrag&&(Ea.emit("dragfreeon"),vl.emit("dragfree"))),gx();else if(Ea&&Ea.grabbed()&&y.nodeIsDraggable(Ea)){var $d=!y.dragData.didDrag;$d&&y.redrawHint("eles",!0),y.dragData.didDrag=!0,y.hoverData.draggingEles||at(vl,{inDragLayer:!0});var w1={x:0,y:0};if(X(Ja[0])&&X(Ja[1])&&(w1.x+=Ja[0],w1.y+=Ja[1],$d)){var zd=y.hoverData.dragDelta;zd&&X(zd[0])&&X(zd[1])&&(w1.x+=zd[0],w1.y+=zd[1])}y.hoverData.draggingEles=!0,vl.silentShift(w1).emit("position drag"),y.redrawHint("drag",!0),y.redraw()}}else _m();_r=!0}if(Nc[2]=$r[0],Nc[3]=$r[1],_r)return Qt.stopPropagation&&Qt.stopPropagation(),Qt.preventDefault&&Qt.preventDefault(),!1}},!1);var Vt,fe,ge;y.registerBinding(window,"mouseup",function(Qt){var jn=y.hoverData.capture;if(jn){y.hoverData.capture=!1;var _r=y.cy,ir=y.projectIntoViewport(Qt.clientX,Qt.clientY),sr=y.selection,Ia=y.findNearestElement(ir[0],ir[1],!0,!1),$r=y.dragData.possibleDragElements,Ki=y.hoverData.down,Po=T(Qt);if(y.data.bgActivePosistion&&(y.redrawHint("select",!0),y.redraw()),y.hoverData.tapholdCancelled=!0,y.data.bgActivePosistion=void 0,Ki&&Ki.unactivate(),y.hoverData.which===3){var Nc={originalEvent:Qt,type:"cxttapend",position:{x:ir[0],y:ir[1]}};if(Ki?Ki.emit(Nc):_r.emit(Nc),!y.hoverData.cxtDragged){var Za={originalEvent:Qt,type:"cxttap",position:{x:ir[0],y:ir[1]}};Ki?Ki.emit(Za):_r.emit(Za)}y.hoverData.cxtDragged=!1,y.hoverData.which=null}else if(y.hoverData.which===1){if(x(Ia,["mouseup","tapend","vmouseup"],Qt,{x:ir[0],y:ir[1]}),!y.dragData.didDrag&&!y.hoverData.dragged&&!y.hoverData.selecting&&!y.hoverData.isOverThresholdDrag&&(x(Ki,["click","tap","vclick"],Qt,{x:ir[0],y:ir[1]}),fe=!1,Qt.timeStamp-ge<=_r.multiClickDebounceTime()?(Vt&&clearTimeout(Vt),fe=!0,ge=null,x(Ki,["dblclick","dbltap","vdblclick"],Qt,{x:ir[0],y:ir[1]})):(Vt=setTimeout(function(){fe||x(Ki,["oneclick","onetap","voneclick"],Qt,{x:ir[0],y:ir[1]})},_r.multiClickDebounceTime()),ge=Qt.timeStamp)),Ki==null&&!y.dragData.didDrag&&!y.hoverData.selecting&&!y.hoverData.dragged&&!T(Qt)&&(_r.$(g).unselect(["tapunselect"]),$r.length>0&&y.redrawHint("eles",!0),y.dragData.possibleDragElements=$r=_r.collection()),Ia==Ki&&!y.dragData.didDrag&&!y.hoverData.selecting&&Ia!=null&&Ia._private.selectable&&(y.hoverData.dragging||(_r.selectionType()==="additive"||Po?Ia.selected()?Ia.unselect(["tapunselect"]):Ia.select(["tapselect"]):Po||(_r.$(g).unmerge(Ia).unselect(["tapunselect"]),Ia.select(["tapselect"]))),y.redrawHint("eles",!0)),y.hoverData.selecting){var mc=_r.collection(y.getAllInBox(sr[0],sr[1],sr[2],sr[3]));y.redrawHint("select",!0),mc.length>0&&y.redrawHint("eles",!0),_r.emit({type:"boxend",originalEvent:Qt,position:{x:ir[0],y:ir[1]}});var Ea=function(zf){return zf.selectable()&&!zf.selected()};_r.selectionType()==="additive"||Po||_r.$(g).unmerge(mc).unselect(),mc.emit("box").stdFilter(Ea).select().emit("boxselect"),y.redraw()}if(y.hoverData.dragging&&(y.hoverData.dragging=!1,y.redrawHint("select",!0),y.redrawHint("eles",!0),y.redraw()),!sr[4]){y.redrawHint("drag",!0),y.redrawHint("eles",!0);var Ja=Ki&&Ki.grabbed();ft($r),Ja&&(Ki.emit("freeon"),$r.emit("free"),y.dragData.didDrag&&(Ki.emit("dragfreeon"),$r.emit("dragfree")))}}sr[4]=0,y.hoverData.down=null,y.hoverData.cxtStarted=!1,y.hoverData.draggingEles=!1,y.hoverData.selecting=!1,y.hoverData.isOverThresholdDrag=!1,y.dragData.didDrag=!1,y.hoverData.dragged=!1,y.hoverData.dragDelta=[],y.hoverData.mdownPos=null,y.hoverData.mdownGPos=null}},!1);var ne=function(Qt){if(!y.scrollingPage){var jn=y.cy,_r=jn.zoom(),ir=jn.pan(),sr=y.projectIntoViewport(Qt.clientX,Qt.clientY),Ia=[sr[0]*_r+ir.x,sr[1]*_r+ir.y];if(y.hoverData.draggingEles||y.hoverData.dragging||y.hoverData.cxtStarted||zt()){Qt.preventDefault();return}if(jn.panningEnabled()&&jn.userPanningEnabled()&&jn.zoomingEnabled()&&jn.userZoomingEnabled()){Qt.preventDefault(),y.data.wheelZooming=!0,clearTimeout(y.data.wheelTimeout),y.data.wheelTimeout=setTimeout(function(){y.data.wheelZooming=!1,y.redrawHint("eles",!0),y.redraw()},150);var $r;Qt.deltaY!=null?$r=Qt.deltaY/-250:Qt.wheelDeltaY!=null?$r=Qt.wheelDeltaY/1e3:$r=Qt.wheelDelta/1e3,$r=$r*y.wheelSensitivity;var Ki=Qt.deltaMode===1;Ki&&($r*=33);var Po=jn.zoom()*Math.pow(10,$r);Qt.type==="gesturechange"&&(Po=y.gestureStartZoom*Qt.scale),jn.zoom({level:Po,renderedPosition:{x:Ia[0],y:Ia[1]}}),jn.emit(Qt.type==="gesturechange"?"pinchzoom":"scrollzoom")}}};y.registerBinding(y.container,"wheel",ne,!0),y.registerBinding(window,"scroll",function(Qt){y.scrollingPage=!0,clearTimeout(y.scrollingPageTimeout),y.scrollingPageTimeout=setTimeout(function(){y.scrollingPage=!1},250)},!0),y.registerBinding(y.container,"gesturestart",function(Qt){y.gestureStartZoom=y.cy.zoom(),y.hasTouchStarted||Qt.preventDefault()},!0),y.registerBinding(y.container,"gesturechange",function(Er){y.hasTouchStarted||ne(Er)},!0),y.registerBinding(y.container,"mouseout",function(Qt){var jn=y.projectIntoViewport(Qt.clientX,Qt.clientY);y.cy.emit({originalEvent:Qt,type:"mouseout",position:{x:jn[0],y:jn[1]}})},!1),y.registerBinding(y.container,"mouseover",function(Qt){var jn=y.projectIntoViewport(Qt.clientX,Qt.clientY);y.cy.emit({originalEvent:Qt,type:"mouseover",position:{x:jn[0],y:jn[1]}})},!1);var Pe,pe,bn,ze,Ve,En,Dn,Kn,Sn,Wn,rr,vr,ur,tr=function(Qt,jn,_r,ir){return Math.sqrt((_r-Qt)*(_r-Qt)+(ir-jn)*(ir-jn))},wn=function(Qt,jn,_r,ir){return(_r-Qt)*(_r-Qt)+(ir-jn)*(ir-jn)},gr;y.registerBinding(y.container,"touchstart",gr=function(Qt){if(y.hasTouchStarted=!0,!!ee(Qt)){kt(),y.touchData.capture=!0,y.data.bgActivePosistion=void 0;var jn=y.cy,_r=y.touchData.now,ir=y.touchData.earlier;if(Qt.touches[0]){var sr=y.projectIntoViewport(Qt.touches[0].clientX,Qt.touches[0].clientY);_r[0]=sr[0],_r[1]=sr[1]}if(Qt.touches[1]){var sr=y.projectIntoViewport(Qt.touches[1].clientX,Qt.touches[1].clientY);_r[2]=sr[0],_r[3]=sr[1]}if(Qt.touches[2]){var sr=y.projectIntoViewport(Qt.touches[2].clientX,Qt.touches[2].clientY);_r[4]=sr[0],_r[5]=sr[1]}if(Qt.touches[1]){y.touchData.singleTouchMoved=!0,ft(y.dragData.touchDragEles);var Ia=y.findContainerClientCoords();Sn=Ia[0],Wn=Ia[1],rr=Ia[2],vr=Ia[3],Pe=Qt.touches[0].clientX-Sn,pe=Qt.touches[0].clientY-Wn,bn=Qt.touches[1].clientX-Sn,ze=Qt.touches[1].clientY-Wn,ur=0<=Pe&&Pe<=rr&&0<=bn&&bn<=rr&&0<=pe&&pe<=vr&&0<=ze&&ze<=vr;var $r=jn.pan(),Ki=jn.zoom();Ve=tr(Pe,pe,bn,ze),En=wn(Pe,pe,bn,ze),Dn=[(Pe+bn)/2,(pe+ze)/2],Kn=[(Dn[0]-$r.x)/Ki,(Dn[1]-$r.y)/Ki];var Po=200,Nc=Po*Po;if(En<Nc&&!Qt.touches[2]){var Za=y.findNearestElement(_r[0],_r[1],!0,!0),mc=y.findNearestElement(_r[2],_r[3],!0,!0);Za&&Za.isNode()?(Za.activate().emit({originalEvent:Qt,type:"cxttapstart",position:{x:_r[0],y:_r[1]}}),y.touchData.start=Za):mc&&mc.isNode()?(mc.activate().emit({originalEvent:Qt,type:"cxttapstart",position:{x:_r[0],y:_r[1]}}),y.touchData.start=mc):jn.emit({originalEvent:Qt,type:"cxttapstart",position:{x:_r[0],y:_r[1]}}),y.touchData.start&&(y.touchData.start._private.grabbed=!1),y.touchData.cxt=!0,y.touchData.cxtDragged=!1,y.data.bgActivePosistion=void 0,y.redraw();return}}if(Qt.touches[2])jn.boxSelectionEnabled()&&Qt.preventDefault();else if(!Qt.touches[1]){if(Qt.touches[0]){var Ea=y.findNearestElements(_r[0],_r[1],!0,!0),Ja=Ea[0];if(Ja!=null&&(Ja.activate(),y.touchData.start=Ja,y.touchData.starts=Ea,y.nodeIsGrabbable(Ja))){var vl=y.dragData.touchDragEles=jn.collection(),zf=null;y.redrawHint("eles",!0),y.redrawHint("drag",!0),Ja.selected()?(zf=jn.$(function(sd){return sd.selected()&&y.nodeIsGrabbable(sd)}),at(zf,{addToList:vl})):lt(Ja,{addToList:vl}),S(Ja);var xp=function(bv){return{originalEvent:Qt,type:bv,position:{x:_r[0],y:_r[1]}}};Ja.emit(xp("grabon")),zf?zf.forEach(function(sd){sd.emit(xp("grab"))}):Ja.emit(xp("grab"))}x(Ja,["touchstart","tapstart","vmousedown"],Qt,{x:_r[0],y:_r[1]}),Ja==null&&(y.data.bgActivePosistion={x:sr[0],y:sr[1]},y.redrawHint("select",!0),y.redraw()),y.touchData.singleTouchMoved=!1,y.touchData.singleTouchStartTime=+new Date,clearTimeout(y.touchData.tapholdTimeout),y.touchData.tapholdTimeout=setTimeout(function(){y.touchData.singleTouchMoved===!1&&!y.pinching&&!y.touchData.selecting&&x(y.touchData.start,["taphold"],Qt,{x:_r[0],y:_r[1]})},y.tapholdDuration)}}if(Qt.touches.length>=1){for(var kp=y.touchData.startPosition=[],qf=0;qf<_r.length;qf++)kp[qf]=ir[qf]=_r[qf];var mg=Qt.touches[0];y.touchData.startGPosition=[mg.clientX,mg.clientY]}}},!1);var fr;y.registerBinding(window,"touchmove",fr=function(Qt){var jn=y.touchData.capture;if(!(!jn&&!ee(Qt))){var _r=y.selection,ir=y.cy,sr=y.touchData.now,Ia=y.touchData.earlier,$r=ir.zoom();if(Qt.touches[0]){var Ki=y.projectIntoViewport(Qt.touches[0].clientX,Qt.touches[0].clientY);sr[0]=Ki[0],sr[1]=Ki[1]}if(Qt.touches[1]){var Ki=y.projectIntoViewport(Qt.touches[1].clientX,Qt.touches[1].clientY);sr[2]=Ki[0],sr[3]=Ki[1]}if(Qt.touches[2]){var Ki=y.projectIntoViewport(Qt.touches[2].clientX,Qt.touches[2].clientY);sr[4]=Ki[0],sr[5]=Ki[1]}var Po=y.touchData.startGPosition,Nc;if(jn&&Qt.touches[0]&&Po){for(var Za=[],mc=0;mc<sr.length;mc++)Za[mc]=sr[mc]-Ia[mc];var Ea=Qt.touches[0].clientX-Po[0],Ja=Ea*Ea,vl=Qt.touches[0].clientY-Po[1],zf=vl*vl,xp=Ja+zf;Nc=xp>=y.touchTapThreshold2}if(jn&&y.touchData.cxt){Qt.preventDefault();var kp=Qt.touches[0].clientX-Sn,qf=Qt.touches[0].clientY-Wn,mg=Qt.touches[1].clientX-Sn,sd=Qt.touches[1].clientY-Wn,bv=wn(kp,qf,mg,sd),_m=bv/En,gx=150,O3=gx*gx,px=1.5,T9=px*px;if(_m>=T9||bv>=O3){y.touchData.cxt=!1,y.data.bgActivePosistion=void 0,y.redrawHint("select",!0);var N3={originalEvent:Qt,type:"cxttapend",position:{x:sr[0],y:sr[1]}};y.touchData.start?(y.touchData.start.unactivate().emit(N3),y.touchData.start=null):ir.emit(N3)}}if(jn&&y.touchData.cxt){var N3={originalEvent:Qt,type:"cxtdrag",position:{x:sr[0],y:sr[1]}};y.data.bgActivePosistion=void 0,y.redrawHint("select",!0),y.touchData.start?y.touchData.start.emit(N3):ir.emit(N3),y.touchData.start&&(y.touchData.start._private.grabbed=!1),y.touchData.cxtDragged=!0;var $d=y.findNearestElement(sr[0],sr[1],!0,!0);(!y.touchData.cxtOver||$d!==y.touchData.cxtOver)&&(y.touchData.cxtOver&&y.touchData.cxtOver.emit({originalEvent:Qt,type:"cxtdragout",position:{x:sr[0],y:sr[1]}}),y.touchData.cxtOver=$d,$d&&$d.emit({originalEvent:Qt,type:"cxtdragover",position:{x:sr[0],y:sr[1]}}))}else if(jn&&Qt.touches[2]&&ir.boxSelectionEnabled())Qt.preventDefault(),y.data.bgActivePosistion=void 0,this.lastThreeTouch=+new Date,y.touchData.selecting||ir.emit({originalEvent:Qt,type:"boxstart",position:{x:sr[0],y:sr[1]}}),y.touchData.selecting=!0,y.touchData.didSelect=!0,_r[4]=1,!_r||_r.length===0||_r[0]===void 0?(_r[0]=(sr[0]+sr[2]+sr[4])/3,_r[1]=(sr[1]+sr[3]+sr[5])/3,_r[2]=(sr[0]+sr[2]+sr[4])/3+1,_r[3]=(sr[1]+sr[3]+sr[5])/3+1):(_r[2]=(sr[0]+sr[2]+sr[4])/3,_r[3]=(sr[1]+sr[3]+sr[5])/3),y.redrawHint("select",!0),y.redraw();else if(jn&&Qt.touches[1]&&!y.touchData.didSelect&&ir.zoomingEnabled()&&ir.panningEnabled()&&ir.userZoomingEnabled()&&ir.userPanningEnabled()){Qt.preventDefault(),y.data.bgActivePosistion=void 0,y.redrawHint("select",!0);var w1=y.dragData.touchDragEles;if(w1){y.redrawHint("drag",!0);for(var zd=0;zd<w1.length;zd++){var C9=w1[zd]._private;C9.grabbed=!1,C9.rscratch.inDragLayer=!1}}var Gb=y.touchData.start,kp=Qt.touches[0].clientX-Sn,qf=Qt.touches[0].clientY-Wn,mg=Qt.touches[1].clientX-Sn,sd=Qt.touches[1].clientY-Wn,nR=tr(kp,qf,mg,sd),Dtt=nR/Ve;if(ur){var Ott=kp-Pe,Ntt=qf-pe,Ptt=mg-bn,Ftt=sd-ze,Btt=(Ott+Ptt)/2,Rtt=(Ntt+Ftt)/2,Uk=ir.zoom(),sM=Uk*Dtt,_9=ir.pan(),rR=Kn[0]*Uk+_9.x,iR=Kn[1]*Uk+_9.y,jtt={x:-sM/Uk*(rR-_9.x-Btt)+rR,y:-sM/Uk*(iR-_9.y-Rtt)+iR};if(Gb&&Gb.active()){var w1=y.dragData.touchDragEles;ft(w1),y.redrawHint("drag",!0),y.redrawHint("eles",!0),Gb.unactivate().emit("freeon"),w1.emit("free"),y.dragData.didDrag&&(Gb.emit("dragfreeon"),w1.emit("dragfree"))}ir.viewport({zoom:sM,pan:jtt,cancelOnFailedZoom:!0}),ir.emit("pinchzoom"),Ve=nR,Pe=kp,pe=qf,bn=mg,ze=sd,y.pinching=!0}if(Qt.touches[0]){var Ki=y.projectIntoViewport(Qt.touches[0].clientX,Qt.touches[0].clientY);sr[0]=Ki[0],sr[1]=Ki[1]}if(Qt.touches[1]){var Ki=y.projectIntoViewport(Qt.touches[1].clientX,Qt.touches[1].clientY);sr[2]=Ki[0],sr[3]=Ki[1]}if(Qt.touches[2]){var Ki=y.projectIntoViewport(Qt.touches[2].clientX,Qt.touches[2].clientY);sr[4]=Ki[0],sr[5]=Ki[1]}}else if(Qt.touches[0]&&!y.touchData.didSelect){var Ep=y.touchData.start,aM=y.touchData.last,$d;if(!y.hoverData.draggingEles&&!y.swipePanning&&($d=y.findNearestElement(sr[0],sr[1],!0,!0)),jn&&Ep!=null&&Qt.preventDefault(),jn&&Ep!=null&&y.nodeIsDraggable(Ep))if(Nc){var w1=y.dragData.touchDragEles,sR=!y.dragData.didDrag;sR&&at(w1,{inDragLayer:!0}),y.dragData.didDrag=!0;var Wk={x:0,y:0};if(X(Za[0])&&X(Za[1])&&(Wk.x+=Za[0],Wk.y+=Za[1],sR)){y.redrawHint("eles",!0);var Tp=y.touchData.dragDelta;Tp&&X(Tp[0])&&X(Tp[1])&&(Wk.x+=Tp[0],Wk.y+=Tp[1])}y.hoverData.draggingEles=!0,w1.silentShift(Wk).emit("position drag"),y.redrawHint("drag",!0),y.touchData.startPosition[0]==Ia[0]&&y.touchData.startPosition[1]==Ia[1]&&y.redrawHint("eles",!0),y.redraw()}else{var Tp=y.touchData.dragDelta=y.touchData.dragDelta||[];Tp.length===0?(Tp.push(Za[0]),Tp.push(Za[1])):(Tp[0]+=Za[0],Tp[1]+=Za[1])}if(x(Ep||$d,["touchmove","tapdrag","vmousemove"],Qt,{x:sr[0],y:sr[1]}),(!Ep||!Ep.grabbed())&&$d!=aM&&(aM&&aM.emit({originalEvent:Qt,type:"tapdragout",position:{x:sr[0],y:sr[1]}}),$d&&$d.emit({originalEvent:Qt,type:"tapdragover",position:{x:sr[0],y:sr[1]}})),y.touchData.last=$d,jn)for(var zd=0;zd<sr.length;zd++)sr[zd]&&y.touchData.startPosition[zd]&&Nc&&(y.touchData.singleTouchMoved=!0);if(jn&&(Ep==null||Ep.pannable())&&ir.panningEnabled()&&ir.userPanningEnabled()){var $tt=A(Ep,y.touchData.starts);$tt&&(Qt.preventDefault(),y.data.bgActivePosistion||(y.data.bgActivePosistion=q5(y.touchData.startPosition)),y.swipePanning?(ir.panBy({x:Za[0]*$r,y:Za[1]*$r}),ir.emit("dragpan")):Nc&&(y.swipePanning=!0,ir.panBy({x:Ea*$r,y:vl*$r}),ir.emit("dragpan"),Ep&&(Ep.unactivate(),y.redrawHint("select",!0),y.touchData.start=null)));var Ki=y.projectIntoViewport(Qt.touches[0].clientX,Qt.touches[0].clientY);sr[0]=Ki[0],sr[1]=Ki[1]}}for(var mc=0;mc<sr.length;mc++)Ia[mc]=sr[mc];jn&&Qt.touches.length>0&&!y.hoverData.draggingEles&&!y.swipePanning&&y.data.bgActivePosistion!=null&&(y.data.bgActivePosistion=void 0,y.redrawHint("select",!0),y.redraw())}},!1);var Jr;y.registerBinding(window,"touchcancel",Jr=function(Qt){var jn=y.touchData.start;y.touchData.capture=!1,jn&&jn.unactivate()});var wi,Ks,ka,Ci;if(y.registerBinding(window,"touchend",wi=function(Qt){var jn=y.touchData.start,_r=y.touchData.capture;if(_r)Qt.touches.length===0&&(y.touchData.capture=!1),Qt.preventDefault();else return;var ir=y.selection;y.swipePanning=!1,y.hoverData.draggingEles=!1;var sr=y.cy,Ia=sr.zoom(),$r=y.touchData.now,Ki=y.touchData.earlier;if(Qt.touches[0]){var Po=y.projectIntoViewport(Qt.touches[0].clientX,Qt.touches[0].clientY);$r[0]=Po[0],$r[1]=Po[1]}if(Qt.touches[1]){var Po=y.projectIntoViewport(Qt.touches[1].clientX,Qt.touches[1].clientY);$r[2]=Po[0],$r[3]=Po[1]}if(Qt.touches[2]){var Po=y.projectIntoViewport(Qt.touches[2].clientX,Qt.touches[2].clientY);$r[4]=Po[0],$r[5]=Po[1]}jn&&jn.unactivate();var Nc;if(y.touchData.cxt){if(Nc={originalEvent:Qt,type:"cxttapend",position:{x:$r[0],y:$r[1]}},jn?jn.emit(Nc):sr.emit(Nc),!y.touchData.cxtDragged){var Za={originalEvent:Qt,type:"cxttap",position:{x:$r[0],y:$r[1]}};jn?jn.emit(Za):sr.emit(Za)}y.touchData.start&&(y.touchData.start._private.grabbed=!1),y.touchData.cxt=!1,y.touchData.start=null,y.redraw();return}if(!Qt.touches[2]&&sr.boxSelectionEnabled()&&y.touchData.selecting){y.touchData.selecting=!1;var mc=sr.collection(y.getAllInBox(ir[0],ir[1],ir[2],ir[3]));ir[0]=void 0,ir[1]=void 0,ir[2]=void 0,ir[3]=void 0,ir[4]=0,y.redrawHint("select",!0),sr.emit({type:"boxend",originalEvent:Qt,position:{x:$r[0],y:$r[1]}});var Ea=function(O3){return O3.selectable()&&!O3.selected()};mc.emit("box").stdFilter(Ea).select().emit("boxselect"),mc.nonempty()&&y.redrawHint("eles",!0),y.redraw()}if(jn!=null&&jn.unactivate(),Qt.touches[2])y.data.bgActivePosistion=void 0,y.redrawHint("select",!0);else if(!Qt.touches[1]){if(!Qt.touches[0]){if(!Qt.touches[0]){y.data.bgActivePosistion=void 0,y.redrawHint("select",!0);var Ja=y.dragData.touchDragEles;if(jn!=null){var vl=jn._private.grabbed;ft(Ja),y.redrawHint("drag",!0),y.redrawHint("eles",!0),vl&&(jn.emit("freeon"),Ja.emit("free"),y.dragData.didDrag&&(jn.emit("dragfreeon"),Ja.emit("dragfree"))),x(jn,["touchend","tapend","vmouseup","tapdragout"],Qt,{x:$r[0],y:$r[1]}),jn.unactivate(),y.touchData.start=null}else{var zf=y.findNearestElement($r[0],$r[1],!0,!0);x(zf,["touchend","tapend","vmouseup","tapdragout"],Qt,{x:$r[0],y:$r[1]})}var xp=y.touchData.startPosition[0]-$r[0],kp=xp*xp,qf=y.touchData.startPosition[1]-$r[1],mg=qf*qf,sd=kp+mg,bv=sd*Ia*Ia;y.touchData.singleTouchMoved||(jn||sr.$(":selected").unselect(["tapunselect"]),x(jn,["tap","vclick"],Qt,{x:$r[0],y:$r[1]}),Ks=!1,Qt.timeStamp-Ci<=sr.multiClickDebounceTime()?(ka&&clearTimeout(ka),Ks=!0,Ci=null,x(jn,["dbltap","vdblclick"],Qt,{x:$r[0],y:$r[1]})):(ka=setTimeout(function(){Ks||x(jn,["onetap","voneclick"],Qt,{x:$r[0],y:$r[1]})},sr.multiClickDebounceTime()),Ci=Qt.timeStamp)),jn!=null&&!y.dragData.didDrag&&jn._private.selectable&&bv<y.touchTapThreshold2&&!y.pinching&&(sr.selectionType()==="single"?(sr.$(g).unmerge(jn).unselect(["tapunselect"]),jn.select(["tapselect"])):jn.selected()?jn.unselect(["tapunselect"]):jn.select(["tapselect"]),y.redrawHint("eles",!0)),y.touchData.singleTouchMoved=!0}}}for(var _m=0;_m<$r.length;_m++)Ki[_m]=$r[_m];y.dragData.didDrag=!1,Qt.touches.length===0&&(y.touchData.dragDelta=[],y.touchData.startPosition=null,y.touchData.startGPosition=null,y.touchData.didSelect=!1),Qt.touches.length<2&&(Qt.touches.length===1&&(y.touchData.startGPosition=[Qt.touches[0].clientX,Qt.touches[0].clientY]),y.pinching=!1,y.redrawHint("eles",!0),y.redraw())},!1),typeof TouchEvent>"u"){var hi=[],gs=function(Qt){return{clientX:Qt.clientX,clientY:Qt.clientY,force:1,identifier:Qt.pointerId,pageX:Qt.pageX,pageY:Qt.pageY,radiusX:Qt.width/2,radiusY:Qt.height/2,screenX:Qt.screenX,screenY:Qt.screenY,target:Qt.target}},qi=function(Qt){return{event:Qt,touch:gs(Qt)}},Si=function(Qt){hi.push(qi(Qt))},Ui=function(Qt){for(var jn=0;jn<hi.length;jn++){var _r=hi[jn];if(_r.event.pointerId===Qt.pointerId){hi.splice(jn,1);return}}},Ga=function(Qt){var jn=hi.filter(function(_r){return _r.event.pointerId===Qt.pointerId})[0];jn.event=Qt,jn.touch=gs(Qt)},Ys=function(Qt){Qt.touches=hi.map(function(jn){return jn.touch})},zs=function(Qt){return Qt.pointerType==="mouse"||Qt.pointerType===4};y.registerBinding(y.container,"pointerdown",function(Er){zs(Er)||(Er.preventDefault(),Si(Er),Ys(Er),gr(Er))}),y.registerBinding(y.container,"pointerup",function(Er){zs(Er)||(Ui(Er),Ys(Er),wi(Er))}),y.registerBinding(y.container,"pointercancel",function(Er){zs(Er)||(Ui(Er),Ys(Er),Jr(Er))}),y.registerBinding(y.container,"pointermove",function(Er){zs(Er)||(Er.preventDefault(),Ga(Er),Ys(Er),fr(Er))})}};var dv={};dv.generatePolygon=function(y,g){return this.nodeShapes[y]={renderer:this,name:y,points:g,draw:function(T,A,D,O,$){this.renderer.nodeShapeImpl("polygon",T,A,D,O,$,this.points)},intersectLine:function(T,A,D,O,$,q,S){return yk($,q,this.points,T,A,D/2,O/2,S)},checkPoint:function(T,A,D,O,$,q,S){return lv(T,A,this.points,q,S,O,$,[0,-1],D)}}},dv.generateEllipse=function(){return this.nodeShapes.ellipse={renderer:this,name:"ellipse",draw:function(g,x,T,A,D){this.renderer.nodeShapeImpl(this.name,g,x,T,A,D)},intersectLine:function(g,x,T,A,D,O,$){return FY(D,O,g,x,T/2+$,A/2+$)},checkPoint:function(g,x,T,A,D,O,$){return C3(g,x,A,D,O,$,T)}}},dv.generateRoundPolygon=function(y,g){for(var x=new Array(g.length*2),T=0;T<g.length/2;T++){var A=T*2,D=void 0;T<g.length/2-1?D=(T+1)*2:D=0,x[T*4]=g[A],x[T*4+1]=g[A+1];var O=g[D]-g[A],$=g[D+1]-g[A+1],q=Math.sqrt(O*O+$*$);x[T*4+2]=O/q,x[T*4+3]=$/q}return this.nodeShapes[y]={renderer:this,name:y,points:x,draw:function(G,W,et,at,lt){this.renderer.nodeShapeImpl("round-polygon",G,W,et,at,lt,this.points)},intersectLine:function(G,W,et,at,lt,ft,At){return BY(lt,ft,this.points,G,W,et,at)},checkPoint:function(G,W,et,at,lt,ft,At){return PY(G,W,this.points,ft,At,at,lt)}}},dv.generateRoundRectangle=function(){return this.nodeShapes["round-rectangle"]=this.nodeShapes.roundrectangle={renderer:this,name:"round-rectangle",points:nd(4,0),draw:function(g,x,T,A,D){this.renderer.nodeShapeImpl(this.name,g,x,T,A,D)},intersectLine:function(g,x,T,A,D,O,$){return eF(D,O,g,x,T,A,$)},checkPoint:function(g,x,T,A,D,O,$){var q=xk(A,D),S=q*2;return!!(lv(g,x,this.points,O,$,A,D-S,[0,-1],T)||lv(g,x,this.points,O,$,A-S,D,[0,-1],T)||C3(g,x,S,S,O-A/2+q,$-D/2+q,T)||C3(g,x,S,S,O+A/2-q,$-D/2+q,T)||C3(g,x,S,S,O+A/2-q,$+D/2-q,T)||C3(g,x,S,S,O-A/2+q,$+D/2-q,T))}}},dv.generateCutRectangle=function(){return this.nodeShapes["cut-rectangle"]=this.nodeShapes.cutrectangle={renderer:this,name:"cut-rectangle",cornerLength:sF(),points:nd(4,0),draw:function(g,x,T,A,D){this.renderer.nodeShapeImpl(this.name,g,x,T,A,D)},generateCutTrianglePts:function(g,x,T,A){var D=this.cornerLength,O=x/2,$=g/2,q=T-$,S=T+$,G=A-O,W=A+O;return{topLeft:[q,G+D,q+D,G,q+D,G+D],topRight:[S-D,G,S,G+D,S-D,G+D],bottomRight:[S,W-D,S-D,W,S-D,W-D],bottomLeft:[q+D,W,q,W-D,q+D,W-D]}},intersectLine:function(g,x,T,A,D,O,$){var q=this.generateCutTrianglePts(T+2*$,A+2*$,g,x),S=[].concat.apply([],[q.topLeft.splice(0,4),q.topRight.splice(0,4),q.bottomRight.splice(0,4),q.bottomLeft.splice(0,4)]);return yk(D,O,S,g,x)},checkPoint:function(g,x,T,A,D,O,$){if(lv(g,x,this.points,O,$,A,D-2*this.cornerLength,[0,-1],T)||lv(g,x,this.points,O,$,A-2*this.cornerLength,D,[0,-1],T))return!0;var q=this.generateCutTrianglePts(A,D,O,$);return jd(g,x,q.topLeft)||jd(g,x,q.topRight)||jd(g,x,q.bottomRight)||jd(g,x,q.bottomLeft)}}},dv.generateBarrel=function(){return this.nodeShapes.barrel={renderer:this,name:"barrel",points:nd(4,0),draw:function(g,x,T,A,D){this.renderer.nodeShapeImpl(this.name,g,x,T,A,D)},intersectLine:function(g,x,T,A,D,O,$){var q=.15,S=.5,G=.85,W=this.generateBarrelBezierPts(T+2*$,A+2*$,g,x),et=function(ft){var At=H5({x:ft[0],y:ft[1]},{x:ft[2],y:ft[3]},{x:ft[4],y:ft[5]},q),kt=H5({x:ft[0],y:ft[1]},{x:ft[2],y:ft[3]},{x:ft[4],y:ft[5]},S),Mt=H5({x:ft[0],y:ft[1]},{x:ft[2],y:ft[3]},{x:ft[4],y:ft[5]},G);return[ft[0],ft[1],At.x,At.y,kt.x,kt.y,Mt.x,Mt.y,ft[4],ft[5]]},at=[].concat(et(W.topLeft),et(W.topRight),et(W.bottomRight),et(W.bottomLeft));return yk(D,O,at,g,x)},generateBarrelBezierPts:function(g,x,T,A){var D=x/2,O=g/2,$=T-O,q=T+O,S=A-D,G=A+D,W=SL(g,x),et=W.heightOffset,at=W.widthOffset,lt=W.ctrlPtOffsetPct*g,ft={topLeft:[$,S+et,$+lt,S,$+at,S],topRight:[q-at,S,q-lt,S,q,S+et],bottomRight:[q,G-et,q-lt,G,q-at,G],bottomLeft:[$+at,G,$+lt,G,$,G-et]};return ft.topLeft.isTop=!0,ft.topRight.isTop=!0,ft.bottomLeft.isBottom=!0,ft.bottomRight.isBottom=!0,ft},checkPoint:function(g,x,T,A,D,O,$){var q=SL(A,D),S=q.heightOffset,G=q.widthOffset;if(lv(g,x,this.points,O,$,A,D-2*S,[0,-1],T)||lv(g,x,this.points,O,$,A-2*G,D,[0,-1],T))return!0;for(var W=this.generateBarrelBezierPts(A,D,O,$),et=function(zt,ee,Vt){var fe=Vt[4],ge=Vt[2],ne=Vt[0],Pe=Vt[5],pe=Vt[1],bn=Math.min(fe,ne),ze=Math.max(fe,ne),Ve=Math.min(Pe,pe),En=Math.max(Pe,pe);if(bn<=zt&&zt<=ze&&Ve<=ee&&ee<=En){var Dn=RY(fe,ge,ne),Kn=IY(Dn[0],Dn[1],Dn[2],zt),Sn=Kn.filter(function(Wn){return 0<=Wn&&Wn<=1});if(Sn.length>0)return Sn[0]}return null},at=Object.keys(W),lt=0;lt<at.length;lt++){var ft=at[lt],At=W[ft],kt=et(g,x,At);if(kt!=null){var Mt=At[5],Dt=At[3],jt=At[1],Zt=rf(Mt,Dt,jt,kt);if(At.isTop&&Zt<=x||At.isBottom&&x<=Zt)return!0}}return!1}}},dv.generateBottomRoundrectangle=function(){return this.nodeShapes["bottom-round-rectangle"]=this.nodeShapes.bottomroundrectangle={renderer:this,name:"bottom-round-rectangle",points:nd(4,0),draw:function(g,x,T,A,D){this.renderer.nodeShapeImpl(this.name,g,x,T,A,D)},intersectLine:function(g,x,T,A,D,O,$){var q=g-(T/2+$),S=x-(A/2+$),G=S,W=g+(T/2+$),et=vm(D,O,g,x,q,S,W,G,!1);return et.length>0?et:eF(D,O,g,x,T,A,$)},checkPoint:function(g,x,T,A,D,O,$){var q=xk(A,D),S=2*q;if(lv(g,x,this.points,O,$,A,D-S,[0,-1],T)||lv(g,x,this.points,O,$,A-S,D,[0,-1],T))return!0;var G=A/2+2*T,W=D/2+2*T,et=[O-G,$-W,O-G,$,O+G,$,O+G,$-W];return!!(jd(g,x,et)||C3(g,x,S,S,O+A/2-q,$+D/2-q,T)||C3(g,x,S,S,O-A/2+q,$+D/2-q,T))}}},dv.registerNodeShapes=function(){var y=this.nodeShapes={},g=this;this.generateEllipse(),this.generatePolygon("triangle",nd(3,0)),this.generateRoundPolygon("round-triangle",nd(3,0)),this.generatePolygon("rectangle",nd(4,0)),y.square=y.rectangle,this.generateRoundRectangle(),this.generateCutRectangle(),this.generateBarrel(),this.generateBottomRoundrectangle();{var x=[0,1,1,0,0,-1,-1,0];this.generatePolygon("diamond",x),this.generateRoundPolygon("round-diamond",x)}this.generatePolygon("pentagon",nd(5,0)),this.generateRoundPolygon("round-pentagon",nd(5,0)),this.generatePolygon("hexagon",nd(6,0)),this.generateRoundPolygon("round-hexagon",nd(6,0)),this.generatePolygon("heptagon",nd(7,0)),this.generateRoundPolygon("round-heptagon",nd(7,0)),this.generatePolygon("octagon",nd(8,0)),this.generateRoundPolygon("round-octagon",nd(8,0));var T=new Array(20);{var A=CL(5,0),D=CL(5,Math.PI/5),O=.5*(3-Math.sqrt(5));O*=1.57;for(var $=0;$<D.length/2;$++)D[$*2]*=O,D[$*2+1]*=O;for(var $=0;$<20/4;$++)T[$*4]=A[$*2],T[$*4+1]=A[$*2+1],T[$*4+2]=D[$*2],T[$*4+3]=D[$*2+1]}T=iF(T),this.generatePolygon("star",T),this.generatePolygon("vee",[-1,-1,0,-.333,1,-1,0,1]),this.generatePolygon("rhomboid",[-1,-1,.333,-1,1,1,-.333,1]),this.nodeShapes.concavehexagon=this.generatePolygon("concave-hexagon",[-1,-.95,-.75,0,-1,.95,1,.95,.75,0,1,-.95]);{var q=[-1,-1,.25,-1,1,0,.25,1,-1,1];this.generatePolygon("tag",q),this.generateRoundPolygon("round-tag",q)}y.makePolygon=function(S){var G=S.join("$"),W="polygon-"+G,et;return(et=this[W])?et:g.generatePolygon(W,S)}};var $k={};$k.timeToRender=function(){return this.redrawTotalTime/this.redrawCount},$k.redraw=function(y){y=y||KP();var g=this;g.averageRedrawTime===void 0&&(g.averageRedrawTime=0),g.lastRedrawTime===void 0&&(g.lastRedrawTime=0),g.lastDrawTime===void 0&&(g.lastDrawTime=0),g.requestedFrame=!0,g.renderOptions=y},$k.beforeRender=function(y,g){if(!this.destroyed){g==null&&bl("Priority is not optional for beforeRender");var x=this.beforeRenderCallbacks;x.push({fn:y,priority:g}),x.sort(function(T,A){return A.priority-T.priority})}};var VB=function(g,x,T){for(var A=g.beforeRenderCallbacks,D=0;D<A.length;D++)A[D].fn(x,T)};$k.startRenderLoop=function(){var y=this,g=y.cy;if(!y.renderLoopStarted){y.renderLoopStarted=!0;var x=function T(A){if(!y.destroyed){if(!g.batching())if(y.requestedFrame&&!y.skipFrame){VB(y,!0,A);var D=dg();y.render(y.renderOptions);var O=y.lastDrawTime=dg();y.averageRedrawTime===void 0&&(y.averageRedrawTime=O-D),y.redrawCount===void 0&&(y.redrawCount=0),y.redrawCount++,y.redrawTotalTime===void 0&&(y.redrawTotalTime=0);var $=O-D;y.redrawTotalTime+=$,y.lastRedrawTime=$,y.averageRedrawTime=y.averageRedrawTime/2+$/2,y.requestedFrame=!1}else VB(y,!1,A);y.skipFrame=!1,Ff(T)}};Ff(x)}};var ett=function(g){this.init(g)},QL=ett,M3=QL.prototype;M3.clientFunctions=["redrawHint","render","renderTo","matchCanvasSize","nodeShapeImpl","arrowShapeImpl"],M3.init=function(y){var g=this;g.options=y,g.cy=y.cy;var x=g.container=y.cy.container();if(R){var T=R.document,A=T.head,D="__________cytoscape_stylesheet",O="__________cytoscape_container",$=T.getElementById(D)!=null;if(x.className.indexOf(O)<0&&(x.className=(x.className||"")+" "+O),!$){var q=T.createElement("style");q.id=D,q.innerHTML="."+O+" { position: relative; }",A.insertBefore(q,A.children[0])}var S=R.getComputedStyle(x),G=S.getPropertyValue("position");G==="static"&&Sc("A Cytoscape container has style position:static and so can not use UI extensions properly")}g.selection=[void 0,void 0,void 0,void 0,0],g.bezierProjPcts=[.05,.225,.4,.5,.6,.775,.95],g.hoverData={down:null,last:null,downTime:null,triggerMode:null,dragging:!1,initialPan:[null,null],capture:!1},g.dragData={possibleDragElements:[]},g.touchData={start:null,capture:!1,startPosition:[null,null,null,null,null,null],singleTouchStartTime:null,singleTouchMoved:!0,now:[null,null,null,null,null,null],earlier:[null,null,null,null,null,null]},g.redraws=0,g.showFps=y.showFps,g.debug=y.debug,g.hideEdgesOnViewport=y.hideEdgesOnViewport,g.textureOnViewport=y.textureOnViewport,g.wheelSensitivity=y.wheelSensitivity,g.motionBlurEnabled=y.motionBlur,g.forcedPixelRatio=X(y.pixelRatio)?y.pixelRatio:null,g.motionBlur=y.motionBlur,g.motionBlurOpacity=y.motionBlurOpacity,g.motionBlurTransparency=1-g.motionBlurOpacity,g.motionBlurPxRatio=1,g.mbPxRBlurry=1,g.minMbLowQualFrames=4,g.fullQualityMb=!1,g.clearedForMotionBlur=[],g.desktopTapThreshold=y.desktopTapThreshold,g.desktopTapThreshold2=y.desktopTapThreshold*y.desktopTapThreshold,g.touchTapThreshold=y.touchTapThreshold,g.touchTapThreshold2=y.touchTapThreshold*y.touchTapThreshold,g.tapholdDuration=500,g.bindings=[],g.beforeRenderCallbacks=[],g.beforeRenderPriorities={animations:400,eleCalcs:300,eleTxrDeq:200,lyrTxrDeq:150,lyrTxrSkip:100},g.registerNodeShapes(),g.registerArrowShapes(),g.registerCalculationListeners()},M3.notify=function(y,g){var x=this,T=x.cy;if(!this.destroyed){if(y==="init"){x.load();return}if(y==="destroy"){x.destroy();return}(y==="add"||y==="remove"||y==="move"&&T.hasCompoundNodes()||y==="load"||y==="zorder"||y==="mount")&&x.invalidateCachedZSortedEles(),y==="viewport"&&x.redrawHint("select",!0),(y==="load"||y==="resize"||y==="mount")&&(x.invalidateContainerClientCoordsCache(),x.matchCanvasSize(x.container)),x.redrawHint("eles",!0),x.redrawHint("drag",!0),this.startRenderLoop(),this.redraw()}},M3.destroy=function(){var y=this;y.destroyed=!0,y.cy.stopAnimationLoop();for(var g=0;g<y.bindings.length;g++){var x=y.bindings[g],T=x,A=T.target;(A.off||A.removeEventListener).apply(A,T.args)}if(y.bindings=[],y.beforeRenderCallbacks=[],y.onUpdateEleCalcsFns=[],y.removeObserver&&y.removeObserver.disconnect(),y.styleObserver&&y.styleObserver.disconnect(),y.resizeObserver&&y.resizeObserver.disconnect(),y.labelCalcDiv)try{document.body.removeChild(y.labelCalcDiv)}catch{}},M3.isHeadless=function(){return!1},[KL,jk,GB,ox,dv,$k].forEach(function(y){me(M3,y)});var ZL=1e3/60,v9={setupDequeueing:function(g){return function(){var T=this,A=this.renderer;if(!T.dequeueingSetup){T.dequeueingSetup=!0;var D=Wc(function(){A.redrawHint("eles",!0),A.redrawHint("drag",!0),A.redraw()},g.deqRedrawThreshold),O=function(S,G){var W=dg(),et=A.averageRedrawTime,at=A.lastRedrawTime,lt=[],ft=A.cy.extent(),At=A.getPixelRatio();for(S||A.flushRenderedStyleQueue();;){var kt=dg(),Mt=kt-W,Dt=kt-G;if(at<ZL){var jt=ZL-(S?et:0);if(Dt>=g.deqFastCost*jt)break}else if(S){if(Mt>=g.deqCost*at||Mt>=g.deqAvgCost*et)break}else if(Dt>=g.deqNoDrawCost*ZL)break;var Zt=g.deq(T,At,ft);if(Zt.length>0)for(var Kt=0;Kt<Zt.length;Kt++)lt.push(Zt[Kt]);else break}lt.length>0&&(g.onDeqd(T,lt),!S&&g.shouldRedraw(T,lt,At,ft)&&D())},$=g.priority||wL;A.beforeRender(O,$(T))}}}},ntt=function(){function y(g){var x=arguments.length>1&&arguments[1]!==void 0?arguments[1]:gm;p(this,y),this.idsByKey=new zb,this.keyForId=new zb,this.cachesByLvl=new zb,this.lvls=[],this.getKey=g,this.doesEleInvalidateKey=x}return m(y,[{key:"getIdsFor",value:function(x){x==null&&bl("Can not get id list for null key");var T=this.idsByKey,A=this.idsByKey.get(x);return A||(A=new z5,T.set(x,A)),A}},{key:"addIdForKey",value:function(x,T){x!=null&&this.getIdsFor(x).add(T)}},{key:"deleteIdForKey",value:function(x,T){x!=null&&this.getIdsFor(x).delete(T)}},{key:"getNumberOfIdsForKey",value:function(x){return x==null?0:this.getIdsFor(x).size}},{key:"updateKeyMappingFor",value:function(x){var T=x.id(),A=this.keyForId.get(T),D=this.getKey(x);this.deleteIdForKey(A,T),this.addIdForKey(D,T),this.keyForId.set(T,D)}},{key:"deleteKeyMappingFor",value:function(x){var T=x.id(),A=this.keyForId.get(T);this.deleteIdForKey(A,T),this.keyForId.delete(T)}},{key:"keyHasChangedFor",value:function(x){var T=x.id(),A=this.keyForId.get(T),D=this.getKey(x);return A!==D}},{key:"isInvalid",value:function(x){return this.keyHasChangedFor(x)||this.doesEleInvalidateKey(x)}},{key:"getCachesAt",value:function(x){var T=this.cachesByLvl,A=this.lvls,D=T.get(x);return D||(D=new zb,T.set(x,D),A.push(x)),D}},{key:"getCache",value:function(x,T){return this.getCachesAt(T).get(x)}},{key:"get",value:function(x,T){var A=this.getKey(x),D=this.getCache(A,T);return D!=null&&this.updateKeyMappingFor(x),D}},{key:"getForCachedKey",value:function(x,T){var A=this.keyForId.get(x.id()),D=this.getCache(A,T);return D}},{key:"hasCache",value:function(x,T){return this.getCachesAt(T).has(x)}},{key:"has",value:function(x,T){var A=this.getKey(x);return this.hasCache(A,T)}},{key:"setCache",value:function(x,T,A){A.key=x,this.getCachesAt(T).set(x,A)}},{key:"set",value:function(x,T,A){var D=this.getKey(x);this.setCache(D,T,A),this.updateKeyMappingFor(x)}},{key:"deleteCache",value:function(x,T){this.getCachesAt(T).delete(x)}},{key:"delete",value:function(x,T){var A=this.getKey(x);this.deleteCache(A,T)}},{key:"invalidateKey",value:function(x){var T=this;this.lvls.forEach(function(A){return T.deleteCache(x,A)})}},{key:"invalidate",value:function(x){var T=x.id(),A=this.keyForId.get(T);this.deleteKeyMappingFor(x);var D=this.doesEleInvalidateKey(x);return D&&this.invalidateKey(A),D||this.getNumberOfIdsForKey(A)===0}}]),y}(),w9=25,m9=50,cx=-4,JL=3,tM=7.99,rtt=8,itt=1024,stt=1024,UB=1024,att=.2,ott=.8,ctt=10,utt=.15,ltt=.1,htt=.9,ftt=.9,dtt=100,gtt=1,ux={dequeue:"dequeue",downscale:"downscale",highQuality:"highQuality"},ptt=Bf({getKey:null,doesEleInvalidateKey:gm,drawElement:null,getBoundingBox:null,getRotationPoint:null,getRotationOffset:null,isVisible:k3,allowEdgeTxrCaching:!0,allowParentTxrCaching:!0}),zk=function(g,x){var T=this;T.renderer=g,T.onDequeues=[];var A=ptt(x);me(T,A),T.lookup=new ntt(A.getKey,A.doesEleInvalidateKey),T.setupDequeueing()},kh=zk.prototype;kh.reasons=ux,kh.getTextureQueue=function(y){var g=this;return g.eleImgCaches=g.eleImgCaches||{},g.eleImgCaches[y]=g.eleImgCaches[y]||[]},kh.getRetiredTextureQueue=function(y){var g=this,x=g.eleImgCaches.retired=g.eleImgCaches.retired||{},T=x[y]=x[y]||[];return T},kh.getElementQueue=function(){var y=this,g=y.eleCacheQueue=y.eleCacheQueue||new vk(function(x,T){return T.reqs-x.reqs});return g},kh.getElementKeyToQueue=function(){var y=this,g=y.eleKeyToCacheQueue=y.eleKeyToCacheQueue||{};return g},kh.getElement=function(y,g,x,T,A){var D=this,O=this.renderer,$=O.cy.zoom(),q=this.lookup;if(!g||g.w===0||g.h===0||isNaN(g.w)||isNaN(g.h)||!y.visible()||y.removed()||!D.allowEdgeTxrCaching&&y.isEdge()||!D.allowParentTxrCaching&&y.isParent())return null;if(T==null&&(T=Math.ceil(xL($*x))),T<cx)T=cx;else if($>=tM||T>JL)return null;var S=Math.pow(2,T),G=g.h*S,W=g.w*S,et=O.eleTextBiggerThanMin(y,S);if(!this.isVisible(y,et))return null;var at=q.get(y,T);if(at&&at.invalidated&&(at.invalidated=!1,at.texture.invalidatedWidth-=at.width),at)return at;var lt;if(G<=w9?lt=w9:G<=m9?lt=m9:lt=Math.ceil(G/m9)*m9,G>UB||W>stt)return null;var ft=D.getTextureQueue(lt),At=ft[ft.length-2],kt=function(){return D.recycleTexture(lt,W)||D.addTexture(lt,W)};At||(At=ft[ft.length-1]),At||(At=kt()),At.width-At.usedWidth<W&&(At=kt());for(var Mt=function(ze){return ze&&ze.scaledLabelShown===et},Dt=A&&A===ux.dequeue,jt=A&&A===ux.highQuality,Zt=A&&A===ux.downscale,Kt,zt=T+1;zt<=JL;zt++){var ee=q.get(y,zt);if(ee){Kt=ee;break}}var Vt=Kt&&Kt.level===T+1?Kt:null,fe=function(){At.context.drawImage(Vt.texture.canvas,Vt.x,0,Vt.width,Vt.height,At.usedWidth,0,W,G)};if(At.context.setTransform(1,0,0,1,0,0),At.context.clearRect(At.usedWidth,0,W,lt),Mt(Vt))fe();else if(Mt(Kt))if(jt){for(var ge=Kt.level;ge>T;ge--)Vt=D.getElement(y,g,x,ge,ux.downscale);fe()}else return D.queueElement(y,Kt.level-1),Kt;else{var ne;if(!Dt&&!jt&&!Zt)for(var Pe=T-1;Pe>=cx;Pe--){var pe=q.get(y,Pe);if(pe){ne=pe;break}}if(Mt(ne))return D.queueElement(y,T),ne;At.context.translate(At.usedWidth,0),At.context.scale(S,S),this.drawElement(At.context,y,g,et,!1),At.context.scale(1/S,1/S),At.context.translate(-At.usedWidth,0)}return at={x:At.usedWidth,texture:At,level:T,scale:S,width:W,height:G,scaledLabelShown:et},At.usedWidth+=Math.ceil(W+rtt),At.eleCaches.push(at),q.set(y,T,at),D.checkTextureFullness(At),at},kh.invalidateElements=function(y){for(var g=0;g<y.length;g++)this.invalidateElement(y[g])},kh.invalidateElement=function(y){var g=this,x=g.lookup,T=[],A=x.isInvalid(y);if(A){for(var D=cx;D<=JL;D++){var O=x.getForCachedKey(y,D);O&&T.push(O)}var $=x.invalidate(y);if($)for(var q=0;q<T.length;q++){var S=T[q],G=S.texture;G.invalidatedWidth+=S.width,S.invalidated=!0,g.checkTextureUtility(G)}g.removeFromQueue(y)}},kh.checkTextureUtility=function(y){y.invalidatedWidth>=att*y.width&&this.retireTexture(y)},kh.checkTextureFullness=function(y){var g=this,x=g.getTextureQueue(y.height);y.usedWidth/y.width>ott&&y.fullnessChecks>=ctt?pm(x,y):y.fullnessChecks++},kh.retireTexture=function(y){var g=this,x=y.height,T=g.getTextureQueue(x),A=this.lookup;pm(T,y),y.retired=!0;for(var D=y.eleCaches,O=0;O<D.length;O++){var $=D[O];A.deleteCache($.key,$.level)}mL(D);var q=g.getRetiredTextureQueue(x);q.push(y)},kh.addTexture=function(y,g){var x=this,T=x.getTextureQueue(y),A={};return T.push(A),A.eleCaches=[],A.height=y,A.width=Math.max(itt,g),A.usedWidth=0,A.invalidatedWidth=0,A.fullnessChecks=0,A.canvas=x.renderer.makeOffscreenCanvas(A.width,A.height),A.context=A.canvas.getContext("2d"),A},kh.recycleTexture=function(y,g){for(var x=this,T=x.getTextureQueue(y),A=x.getRetiredTextureQueue(y),D=0;D<A.length;D++){var O=A[D];if(O.width>=g)return O.retired=!1,O.usedWidth=0,O.invalidatedWidth=0,O.fullnessChecks=0,mL(O.eleCaches),O.context.setTransform(1,0,0,1,0,0),O.context.clearRect(0,0,O.width,O.height),pm(A,O),T.push(O),O}},kh.queueElement=function(y,g){var x=this,T=x.getElementQueue(),A=x.getElementKeyToQueue(),D=this.getKey(y),O=A[D];if(O)O.level=Math.max(O.level,g),O.eles.merge(y),O.reqs++,T.updateItem(O);else{var $={eles:y.spawn().merge(y),level:g,reqs:1,key:D};T.push($),A[D]=$}},kh.dequeue=function(y){for(var g=this,x=g.getElementQueue(),T=g.getElementKeyToQueue(),A=[],D=g.lookup,O=0;O<gtt&&x.size()>0;O++){var $=x.pop(),q=$.key,S=$.eles[0],G=D.hasCache(S,$.level);if(T[q]=null,G)continue;A.push($);var W=g.getBoundingBox(S);g.getElement(S,W,y,$.level,ux.dequeue)}return A},kh.removeFromQueue=function(y){var g=this,x=g.getElementQueue(),T=g.getElementKeyToQueue(),A=this.getKey(y),D=T[A];D!=null&&(D.eles.length===1?(D.reqs=$5,x.updateItem(D),x.pop(),T[A]=null):D.eles.unmerge(y))},kh.onDequeue=function(y){this.onDequeues.push(y)},kh.offDequeue=function(y){pm(this.onDequeues,y)},kh.setupDequeueing=v9.setupDequeueing({deqRedrawThreshold:dtt,deqCost:utt,deqAvgCost:ltt,deqNoDrawCost:htt,deqFastCost:ftt,deq:function(g,x,T){return g.dequeue(x,T)},onDeqd:function(g,x){for(var T=0;T<g.onDequeues.length;T++){var A=g.onDequeues[T];A(x)}},shouldRedraw:function(g,x,T,A){for(var D=0;D<x.length;D++)for(var O=x[D].eles,$=0;$<O.length;$++){var q=O[$].boundingBox();if(EL(q,A))return!0}return!1},priority:function(g){return g.renderer.beforeRenderPriorities.eleTxrDeq}});var btt=1,lx=-4,qk=2,y9=3.99,Hk=50,bg=50,vtt=.15,ept=.1,npt=.9,rpt=.9,ipt=1,eM=250,spt=4e3*4e3,apt=!0,wtt=function(g){var x=this,T=x.renderer=g,A=T.cy;x.layersByLevel={},x.firstGet=!0,x.lastInvalidationTime=dg()-2*eM,x.skipping=!1,x.eleTxrDeqs=A.collection(),x.scheduleElementRefinement=Wc(function(){x.refineElementTextures(x.eleTxrDeqs),x.eleTxrDeqs.unmerge(x.eleTxrDeqs)},bg),T.beforeRender(function(O,$){$-x.lastInvalidationTime<=eM?x.skipping=!0:x.skipping=!1},T.beforeRenderPriorities.lyrTxrSkip);var D=function($,q){return q.reqs-$.reqs};x.layersQueue=new vk(D),x.setupDequeueing()},p1=wtt.prototype,mtt=0,opt=Math.pow(2,53)-1;p1.makeLayer=function(y,g){var x=Math.pow(2,g),T=Math.ceil(y.w*x),A=Math.ceil(y.h*x),D=this.renderer.makeOffscreenCanvas(T,A),O={id:mtt=++mtt%opt,bb:y,level:g,width:T,height:A,canvas:D,context:D.getContext("2d"),eles:[],elesQueue:[],reqs:0},$=O.context,q=-O.bb.x1,S=-O.bb.y1;return $.scale(x,x),$.translate(q,S),O},p1.getLayers=function(y,g,x){var T=this,A=T.renderer,D=A.cy,O=D.zoom(),$=T.firstGet;if(T.firstGet=!1,x==null){if(x=Math.ceil(xL(O*g)),x<lx)x=lx;else if(O>=y9||x>qk)return null}T.validateLayersElesOrdering(x,y);var q=T.layersByLevel,S=Math.pow(2,x),G=q[x]=q[x]||[],W,et=T.levelIsComplete(x,y),at,lt=function(){var fe=function(bn){if(T.validateLayersElesOrdering(bn,y),T.levelIsComplete(bn,y))return at=q[bn],!0},ge=function(bn){if(!at)for(var ze=x+bn;lx<=ze&&ze<=qk&&!fe(ze);ze+=bn);};ge(1),ge(-1);for(var ne=G.length-1;ne>=0;ne--){var Pe=G[ne];Pe.invalid&&pm(G,Pe)}};if(!et)lt();else return G;var ft=function(){if(!W){W=Rd();for(var fe=0;fe<y.length;fe++)_Y(W,y[fe].boundingBox())}return W},At=function(fe){fe=fe||{};var ge=fe.after;ft();var ne=W.w*S*(W.h*S);if(ne>spt)return null;var Pe=T.makeLayer(W,x);if(ge!=null){var pe=G.indexOf(ge)+1;G.splice(pe,0,Pe)}else(fe.insert===void 0||fe.insert)&&G.unshift(Pe);return Pe};if(T.skipping&&!$)return null;for(var kt=null,Mt=y.length/btt,Dt=!$,jt=0;jt<y.length;jt++){var Zt=y[jt],Kt=Zt._private.rscratch,zt=Kt.imgLayerCaches=Kt.imgLayerCaches||{},ee=zt[x];if(ee){kt=ee;continue}if((!kt||kt.eles.length>=Mt||!tF(kt.bb,Zt.boundingBox()))&&(kt=At({insert:!0,after:kt}),!kt))return null;at||Dt?T.queueLayer(kt,Zt):T.drawEleInLayer(kt,Zt,x,g),kt.eles.push(Zt),zt[x]=kt}return at||(Dt?null:G)},p1.getEleLevelForLayerLevel=function(y,g){return y},p1.drawEleInLayer=function(y,g,x,T){var A=this,D=this.renderer,O=y.context,$=g.boundingBox();$.w===0||$.h===0||!g.visible()||(x=A.getEleLevelForLayerLevel(x,T),D.setImgSmoothing(O,!1),D.drawCachedElement(O,g,null,null,x,apt),D.setImgSmoothing(O,!0))},p1.levelIsComplete=function(y,g){var x=this,T=x.layersByLevel[y];if(!T||T.length===0)return!1;for(var A=0,D=0;D<T.length;D++){var O=T[D];if(O.reqs>0||O.invalid)return!1;A+=O.eles.length}return A===g.length},p1.validateLayersElesOrdering=function(y,g){var x=this.layersByLevel[y];if(x)for(var T=0;T<x.length;T++){for(var A=x[T],D=-1,O=0;O<g.length;O++)if(A.eles[0]===g[O]){D=O;break}if(D<0){this.invalidateLayer(A);continue}for(var $=D,O=0;O<A.eles.length;O++)if(A.eles[O]!==g[$+O]){this.invalidateLayer(A);break}}},p1.updateElementsInLayers=function(y,g){for(var x=this,T=nt(y[0]),A=0;A<y.length;A++)for(var D=T?null:y[A],O=T?y[A]:y[A].ele,$=O._private.rscratch,q=$.imgLayerCaches=$.imgLayerCaches||{},S=lx;S<=qk;S++){var G=q[S];G&&(D&&x.getEleLevelForLayerLevel(G.level)!==D.level||g(G,O,D))}},p1.haveLayers=function(){for(var y=this,g=!1,x=lx;x<=qk;x++){var T=y.layersByLevel[x];if(T&&T.length>0){g=!0;break}}return g},p1.invalidateElements=function(y){var g=this;y.length!==0&&(g.lastInvalidationTime=dg(),!(y.length===0||!g.haveLayers())&&g.updateElementsInLayers(y,function(T,A,D){g.invalidateLayer(T)}))},p1.invalidateLayer=function(y){if(this.lastInvalidationTime=dg(),!y.invalid){var g=y.level,x=y.eles,T=this.layersByLevel[g];pm(T,y),y.elesQueue=[],y.invalid=!0,y.replacement&&(y.replacement.invalid=!0);for(var A=0;A<x.length;A++){var D=x[A]._private.rscratch.imgLayerCaches;D&&(D[g]=null)}}},p1.refineElementTextures=function(y){var g=this;g.updateElementsInLayers(y,function(T,A,D){var O=T.replacement;if(O||(O=T.replacement=g.makeLayer(T.bb,T.level),O.replaces=T,O.eles=T.eles),!O.reqs)for(var $=0;$<O.eles.length;$++)g.queueLayer(O,O.eles[$])})},p1.enqueueElementRefinement=function(y){this.eleTxrDeqs.merge(y),this.scheduleElementRefinement()},p1.queueLayer=function(y,g){var x=this,T=x.layersQueue,A=y.elesQueue,D=A.hasId=A.hasId||{};if(!y.replacement){if(g){if(D[g.id()])return;A.push(g),D[g.id()]=!0}y.reqs?(y.reqs++,T.updateItem(y)):(y.reqs=1,T.push(y))}},p1.dequeue=function(y){for(var g=this,x=g.layersQueue,T=[],A=0;A<ipt&&x.size()!==0;){var D=x.peek();if(D.replacement){x.pop();continue}if(D.replaces&&D!==D.replaces.replacement){x.pop();continue}if(D.invalid){x.pop();continue}var O=D.elesQueue.shift();O&&(g.drawEleInLayer(D,O,D.level,y),A++),T.length===0&&T.push(!0),D.elesQueue.length===0&&(x.pop(),D.reqs=0,D.replaces&&g.applyLayerReplacement(D),g.requestRedraw())}return T},p1.applyLayerReplacement=function(y){var g=this,x=g.layersByLevel[y.level],T=y.replaces,A=x.indexOf(T);if(!(A<0||T.invalid)){x[A]=y;for(var D=0;D<y.eles.length;D++){var O=y.eles[D]._private,$=O.imgLayerCaches=O.imgLayerCaches||{};$&&($[y.level]=y)}g.requestRedraw()}},p1.requestRedraw=Wc(function(){var y=this.renderer;y.redrawHint("eles",!0),y.redrawHint("drag",!0),y.redraw()},100),p1.setupDequeueing=v9.setupDequeueing({deqRedrawThreshold:Hk,deqCost:vtt,deqAvgCost:ept,deqNoDrawCost:npt,deqFastCost:rpt,deq:function(g,x){return g.dequeue(x)},onDeqd:wL,shouldRedraw:k3,priority:function(g){return g.renderer.beforeRenderPriorities.lyrTxrDeq}});var _0={},ytt;function WB(y,g){for(var x=0;x<g.length;x++){var T=g[x];y.lineTo(T.x,T.y)}}function KB(y,g,x){for(var T,A=0;A<g.length;A++){var D=g[A];A===0&&(T=D),y.lineTo(D.x,D.y)}y.quadraticCurveTo(x.x,x.y,T.x,T.y)}function xtt(y,g,x){y.beginPath&&y.beginPath();for(var T=g,A=0;A<T.length;A++){var D=T[A];y.lineTo(D.x,D.y)}var O=x,$=x[0];y.moveTo($.x,$.y);for(var A=1;A<O.length;A++){var D=O[A];y.lineTo(D.x,D.y)}y.closePath&&y.closePath()}function cpt(y,g,x,T,A){y.beginPath&&y.beginPath(),y.arc(x,T,A,0,Math.PI*2,!1);var D=g,O=D[0];y.moveTo(O.x,O.y);for(var $=0;$<D.length;$++){var q=D[$];y.lineTo(q.x,q.y)}y.closePath&&y.closePath()}function upt(y,g,x,T){y.arc(g,x,T,0,Math.PI*2,!1)}_0.arrowShapeImpl=function(y){return(ytt||(ytt={polygon:WB,"triangle-backcurve":KB,"triangle-tee":xtt,"circle-triangle":cpt,"triangle-cross":xtt,circle:upt}))[y]};var gv={};gv.drawElement=function(y,g,x,T,A,D){var O=this;g.isNode()?O.drawNode(y,g,x,T,A,D):O.drawEdge(y,g,x,T,A,D)},gv.drawElementOverlay=function(y,g){var x=this;g.isNode()?x.drawNodeOverlay(y,g):x.drawEdgeOverlay(y,g)},gv.drawElementUnderlay=function(y,g){var x=this;g.isNode()?x.drawNodeUnderlay(y,g):x.drawEdgeUnderlay(y,g)},gv.drawCachedElementPortion=function(y,g,x,T,A,D,O,$){var q=this,S=x.getBoundingBox(g);if(!(S.w===0||S.h===0)){var G=x.getElement(g,S,T,A,D);if(G!=null){var W=$(q,g);if(W===0)return;var et=O(q,g),at=S.x1,lt=S.y1,ft=S.w,At=S.h,kt,Mt,Dt,jt,Zt;if(et!==0){var Kt=x.getRotationPoint(g);Dt=Kt.x,jt=Kt.y,y.translate(Dt,jt),y.rotate(et),Zt=q.getImgSmoothing(y),Zt||q.setImgSmoothing(y,!0);var zt=x.getRotationOffset(g);kt=zt.x,Mt=zt.y}else kt=at,Mt=lt;var ee;W!==1&&(ee=y.globalAlpha,y.globalAlpha=ee*W),y.drawImage(G.texture.canvas,G.x,0,G.width,G.height,kt,Mt,ft,At),W!==1&&(y.globalAlpha=ee),et!==0&&(y.rotate(-et),y.translate(-Dt,-jt),Zt||q.setImgSmoothing(y,!1))}else x.drawElement(y,g)}};var nM=function(){return 0},x9=function(g,x){return g.getTextAngle(x,null)},YB=function(g,x){return g.getTextAngle(x,"source")},lpt=function(g,x){return g.getTextAngle(x,"target")},hpt=function(g,x){return x.effectiveOpacity()},XB=function(g,x){return x.pstyle("text-opacity").pfValue*x.effectiveOpacity()};gv.drawCachedElement=function(y,g,x,T,A,D){var O=this,$=O.data,q=$.eleTxrCache,S=$.lblTxrCache,G=$.slbTxrCache,W=$.tlbTxrCache,et=g.boundingBox(),at=D===!0?q.reasons.highQuality:null;if(!(et.w===0||et.h===0||!g.visible())&&(!T||EL(et,T))){var lt=g.isEdge(),ft=g.element()._private.rscratch.badLine;O.drawElementUnderlay(y,g),O.drawCachedElementPortion(y,g,q,x,A,at,nM,hpt),(!lt||!ft)&&O.drawCachedElementPortion(y,g,S,x,A,at,x9,XB),lt&&!ft&&(O.drawCachedElementPortion(y,g,G,x,A,at,YB,XB),O.drawCachedElementPortion(y,g,W,x,A,at,lpt,XB)),O.drawElementOverlay(y,g)}},gv.drawElements=function(y,g){for(var x=this,T=0;T<g.length;T++){var A=g[T];x.drawElement(y,A)}},gv.drawCachedElements=function(y,g,x,T){for(var A=this,D=0;D<g.length;D++){var O=g[D];A.drawCachedElement(y,O,x,T)}},gv.drawCachedNodes=function(y,g,x,T){for(var A=this,D=0;D<g.length;D++){var O=g[D];O.isNode()&&A.drawCachedElement(y,O,x,T)}},gv.drawLayeredElements=function(y,g,x,T){var A=this,D=A.data.lyrTxrCache.getLayers(g,x);if(D)for(var O=0;O<D.length;O++){var $=D[O],q=$.bb;q.w===0||q.h===0||y.drawImage($.canvas,q.x1,q.y1,q.w,q.h)}else A.drawCachedElements(y,g,x,T)};var pv={};pv.drawEdge=function(y,g,x){var T=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,A=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,D=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0,O=this,$=g._private.rscratch;if(!(D&&!g.visible())&&!($.badLine||$.allpts==null||isNaN($.allpts[0]))){var q;x&&(q=x,y.translate(-q.x1,-q.y1));var S=D?g.pstyle("opacity").value:1,G=D?g.pstyle("line-opacity").value:1,W=g.pstyle("curve-style").value,et=g.pstyle("line-style").value,at=g.pstyle("width").pfValue,lt=g.pstyle("line-cap").value,ft=S*G,At=S*G,kt=function(){var ne=arguments.length>0&&arguments[0]!==void 0?arguments[0]:ft;W==="straight-triangle"?(O.eleStrokeStyle(y,g,ne),O.drawEdgeTrianglePath(g,y,$.allpts)):(y.lineWidth=at,y.lineCap=lt,O.eleStrokeStyle(y,g,ne),O.drawEdgePath(g,y,$.allpts,et),y.lineCap="butt")},Mt=function(){A&&O.drawEdgeOverlay(y,g)},Dt=function(){A&&O.drawEdgeUnderlay(y,g)},jt=function(){var ne=arguments.length>0&&arguments[0]!==void 0?arguments[0]:At;O.drawArrowheads(y,g,ne)},Zt=function(){O.drawElementText(y,g,null,T)};y.lineJoin="round";var Kt=g.pstyle("ghost").value==="yes";if(Kt){var zt=g.pstyle("ghost-offset-x").pfValue,ee=g.pstyle("ghost-offset-y").pfValue,Vt=g.pstyle("ghost-opacity").value,fe=ft*Vt;y.translate(zt,ee),kt(fe),jt(fe),y.translate(-zt,-ee)}Dt(),kt(),jt(),Mt(),Zt(),x&&y.translate(q.x1,q.y1)}};var ktt=function(g){if(!["overlay","underlay"].includes(g))throw new Error("Invalid state");return function(x,T){if(T.visible()){var A=T.pstyle("".concat(g,"-opacity")).value;if(A!==0){var D=this,O=D.usePaths(),$=T._private.rscratch,q=T.pstyle("".concat(g,"-padding")).pfValue,S=2*q,G=T.pstyle("".concat(g,"-color")).value;x.lineWidth=S,$.edgeType==="self"&&!O?x.lineCap="butt":x.lineCap="round",D.colorStrokeStyle(x,G[0],G[1],G[2],A),D.drawEdgePath(T,x,$.allpts,"solid")}}}};pv.drawEdgeOverlay=ktt("overlay"),pv.drawEdgeUnderlay=ktt("underlay"),pv.drawEdgePath=function(y,g,x,T){var A=y._private.rscratch,D=g,O,$=!1,q=this.usePaths(),S=y.pstyle("line-dash-pattern").pfValue,G=y.pstyle("line-dash-offset").pfValue;if(q){var W=x.join("$"),et=A.pathCacheKey&&A.pathCacheKey===W;et?(O=g=A.pathCache,$=!0):(O=g=new Path2D,A.pathCacheKey=W,A.pathCache=O)}if(D.setLineDash)switch(T){case"dotted":D.setLineDash([1,1]);break;case"dashed":D.setLineDash(S),D.lineDashOffset=G;break;case"solid":D.setLineDash([]);break}if(!$&&!A.badLine)switch(g.beginPath&&g.beginPath(),g.moveTo(x[0],x[1]),A.edgeType){case"bezier":case"self":case"compound":case"multibezier":for(var at=2;at+3<x.length;at+=4)g.quadraticCurveTo(x[at],x[at+1],x[at+2],x[at+3]);break;case"straight":case"segments":case"haystack":for(var lt=2;lt+1<x.length;lt+=2)g.lineTo(x[lt],x[lt+1]);break}g=D,q?g.stroke(O):g.stroke(),g.setLineDash&&g.setLineDash([])},pv.drawEdgeTrianglePath=function(y,g,x){g.fillStyle=g.strokeStyle;for(var T=y.pstyle("width").pfValue,A=0;A+1<x.length;A+=2){var D=[x[A+2]-x[A],x[A+3]-x[A+1]],O=Math.sqrt(D[0]*D[0]+D[1]*D[1]),$=[D[1]/O,-D[0]/O],q=[$[0]*T/2,$[1]*T/2];g.beginPath(),g.moveTo(x[A]-q[0],x[A+1]-q[1]),g.lineTo(x[A]+q[0],x[A+1]+q[1]),g.lineTo(x[A+2],x[A+3]),g.closePath(),g.fill()}},pv.drawArrowheads=function(y,g,x){var T=g._private.rscratch,A=T.edgeType==="haystack";A||this.drawArrowhead(y,g,"source",T.arrowStartX,T.arrowStartY,T.srcArrowAngle,x),this.drawArrowhead(y,g,"mid-target",T.midX,T.midY,T.midtgtArrowAngle,x),this.drawArrowhead(y,g,"mid-source",T.midX,T.midY,T.midsrcArrowAngle,x),A||this.drawArrowhead(y,g,"target",T.arrowEndX,T.arrowEndY,T.tgtArrowAngle,x)},pv.drawArrowhead=function(y,g,x,T,A,D,O){if(!(isNaN(T)||T==null||isNaN(A)||A==null||isNaN(D)||D==null)){var $=this,q=g.pstyle(x+"-arrow-shape").value;if(q!=="none"){var S=g.pstyle(x+"-arrow-fill").value==="hollow"?"both":"filled",G=g.pstyle(x+"-arrow-fill").value,W=g.pstyle("width").pfValue,et=g.pstyle("opacity").value;O===void 0&&(O=et);var at=y.globalCompositeOperation;(O!==1||G==="hollow")&&(y.globalCompositeOperation="destination-out",$.colorFillStyle(y,255,255,255,1),$.colorStrokeStyle(y,255,255,255,1),$.drawArrowShape(g,y,S,W,q,T,A,D),y.globalCompositeOperation=at);var lt=g.pstyle(x+"-arrow-color").value;$.colorFillStyle(y,lt[0],lt[1],lt[2],O),$.colorStrokeStyle(y,lt[0],lt[1],lt[2],O),$.drawArrowShape(g,y,G,W,q,T,A,D)}}},pv.drawArrowShape=function(y,g,x,T,A,D,O,$){var q=this,S=this.usePaths()&&A!=="triangle-cross",G=!1,W,et=g,at={x:D,y:O},lt=y.pstyle("arrow-scale").value,ft=this.getArrowWidth(T,lt),At=q.arrowShapes[A];if(S){var kt=q.arrowPathCache=q.arrowPathCache||[],Mt=td(A),Dt=kt[Mt];Dt!=null?(W=g=Dt,G=!0):(W=g=new Path2D,kt[Mt]=W)}G||(g.beginPath&&g.beginPath(),S?At.draw(g,1,0,{x:0,y:0},1):At.draw(g,ft,$,at,T),g.closePath&&g.closePath()),g=et,S&&(g.translate(D,O),g.rotate($),g.scale(ft,ft)),(x==="filled"||x==="both")&&(S?g.fill(W):g.fill()),(x==="hollow"||x==="both")&&(g.lineWidth=(At.matchEdgeWidth?T:1)/(S?ft:1),g.lineJoin="miter",S?g.stroke(W):g.stroke()),S&&(g.scale(1/ft,1/ft),g.rotate(-$),g.translate(-D,-O))};var k9={};k9.safeDrawImage=function(y,g,x,T,A,D,O,$,q,S){if(!(A<=0||D<=0||q<=0||S<=0))try{y.drawImage(g,x,T,A,D,O,$,q,S)}catch(G){Sc(G)}},k9.drawInscribedImage=function(y,g,x,T,A){var D=this,O=x.position(),$=O.x,q=O.y,S=x.cy().style(),G=S.getIndexedStyle.bind(S),W=G(x,"background-fit","value",T),et=G(x,"background-repeat","value",T),at=x.width(),lt=x.height(),ft=x.padding()*2,At=at+(G(x,"background-width-relative-to","value",T)==="inner"?0:ft),kt=lt+(G(x,"background-height-relative-to","value",T)==="inner"?0:ft),Mt=x._private.rscratch,Dt=G(x,"background-clip","value",T),jt=Dt==="node",Zt=G(x,"background-image-opacity","value",T)*A,Kt=G(x,"background-image-smoothing","value",T),zt=g.width||g.cachedW,ee=g.height||g.cachedH;(zt==null||ee==null)&&(document.body.appendChild(g),zt=g.cachedW=g.width||g.offsetWidth,ee=g.cachedH=g.height||g.offsetHeight,document.body.removeChild(g));var Vt=zt,fe=ee;if(G(x,"background-width","value",T)!=="auto"&&(G(x,"background-width","units",T)==="%"?Vt=G(x,"background-width","pfValue",T)*At:Vt=G(x,"background-width","pfValue",T)),G(x,"background-height","value",T)!=="auto"&&(G(x,"background-height","units",T)==="%"?fe=G(x,"background-height","pfValue",T)*kt:fe=G(x,"background-height","pfValue",T)),!(Vt===0||fe===0)){if(W==="contain"){var ge=Math.min(At/Vt,kt/fe);Vt*=ge,fe*=ge}else if(W==="cover"){var ge=Math.max(At/Vt,kt/fe);Vt*=ge,fe*=ge}var ne=$-At/2,Pe=G(x,"background-position-x","units",T),pe=G(x,"background-position-x","pfValue",T);Pe==="%"?ne+=(At-Vt)*pe:ne+=pe;var bn=G(x,"background-offset-x","units",T),ze=G(x,"background-offset-x","pfValue",T);bn==="%"?ne+=(At-Vt)*ze:ne+=ze;var Ve=q-kt/2,En=G(x,"background-position-y","units",T),Dn=G(x,"background-position-y","pfValue",T);En==="%"?Ve+=(kt-fe)*Dn:Ve+=Dn;var Kn=G(x,"background-offset-y","units",T),Sn=G(x,"background-offset-y","pfValue",T);Kn==="%"?Ve+=(kt-fe)*Sn:Ve+=Sn,Mt.pathCache&&(ne-=$,Ve-=q,$=0,q=0);var Wn=y.globalAlpha;y.globalAlpha=Zt;var rr=D.getImgSmoothing(y),vr=!1;if(Kt==="no"&&rr?(D.setImgSmoothing(y,!1),vr=!0):Kt==="yes"&&!rr&&(D.setImgSmoothing(y,!0),vr=!0),et==="no-repeat")jt&&(y.save(),Mt.pathCache?y.clip(Mt.pathCache):(D.nodeShapes[D.getNodeShape(x)].draw(y,$,q,At,kt),y.clip())),D.safeDrawImage(y,g,0,0,zt,ee,ne,Ve,Vt,fe),jt&&y.restore();else{var ur=y.createPattern(g,et);y.fillStyle=ur,D.nodeShapes[D.getNodeShape(x)].draw(y,$,q,At,kt),y.translate(ne,Ve),y.fill(),y.translate(-ne,-Ve)}y.globalAlpha=Wn,vr&&D.setImgSmoothing(y,rr)}};var hx={};hx.eleTextBiggerThanMin=function(y,g){if(!g){var x=y.cy().zoom(),T=this.getPixelRatio(),A=Math.ceil(xL(x*T));g=Math.pow(2,A)}var D=y.pstyle("font-size").pfValue*g,O=y.pstyle("min-zoomed-font-size").pfValue;return!(D<O)},hx.drawElementText=function(y,g,x,T,A){var D=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0,O=this;if(T==null){if(D&&!O.eleTextBiggerThanMin(g))return}else if(T===!1)return;if(g.isNode()){var $=g.pstyle("label");if(!$||!$.value)return;var q=O.getLabelJustification(g);y.textAlign=q,y.textBaseline="bottom"}else{var S=g.element()._private.rscratch.badLine,G=g.pstyle("label"),W=g.pstyle("source-label"),et=g.pstyle("target-label");if(S||(!G||!G.value)&&(!W||!W.value)&&(!et||!et.value))return;y.textAlign="center",y.textBaseline="bottom"}var at=!x,lt;x&&(lt=x,y.translate(-lt.x1,-lt.y1)),A==null?(O.drawText(y,g,null,at,D),g.isEdge()&&(O.drawText(y,g,"source",at,D),O.drawText(y,g,"target",at,D))):O.drawText(y,g,A,at,D),x&&y.translate(lt.x1,lt.y1)},hx.getFontCache=function(y){var g;this.fontCaches=this.fontCaches||[];for(var x=0;x<this.fontCaches.length;x++)if(g=this.fontCaches[x],g.context===y)return g;return g={context:y},this.fontCaches.push(g),g},hx.setupTextStyle=function(y,g){var x=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,T=g.pstyle("font-style").strValue,A=g.pstyle("font-size").pfValue+"px",D=g.pstyle("font-family").strValue,O=g.pstyle("font-weight").strValue,$=x?g.effectiveOpacity()*g.pstyle("text-opacity").value:1,q=g.pstyle("text-outline-opacity").value*$,S=g.pstyle("color").value,G=g.pstyle("text-outline-color").value;y.font=T+" "+O+" "+A+" "+D,y.lineJoin="round",this.colorFillStyle(y,S[0],S[1],S[2],$),this.colorStrokeStyle(y,G[0],G[1],G[2],q)};function fpt(y,g,x,T,A){var D=arguments.length>5&&arguments[5]!==void 0?arguments[5]:5;y.beginPath(),y.moveTo(g+D,x),y.lineTo(g+T-D,x),y.quadraticCurveTo(g+T,x,g+T,x+D),y.lineTo(g+T,x+A-D),y.quadraticCurveTo(g+T,x+A,g+T-D,x+A),y.lineTo(g+D,x+A),y.quadraticCurveTo(g,x+A,g,x+A-D),y.lineTo(g,x+D),y.quadraticCurveTo(g,x,g+D,x),y.closePath(),y.fill()}hx.getTextAngle=function(y,g){var x,T=y._private,A=T.rscratch,D=g?g+"-":"",O=y.pstyle(D+"text-rotation"),$=bp(A,"labelAngle",g);return O.strValue==="autorotate"?x=y.isEdge()?$:0:O.strValue==="none"?x=0:x=O.pfValue,x},hx.drawText=function(y,g,x){var T=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,A=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,D=g._private,O=D.rscratch,$=A?g.effectiveOpacity():1;if(!(A&&($===0||g.pstyle("text-opacity").value===0))){x==="main"&&(x=null);var q=bp(O,"labelX",x),S=bp(O,"labelY",x),G,W,et=this.getLabelText(g,x);if(et!=null&&et!==""&&!isNaN(q)&&!isNaN(S)){this.setupTextStyle(y,g,A);var at=x?x+"-":"",lt=bp(O,"labelWidth",x),ft=bp(O,"labelHeight",x),At=g.pstyle(at+"text-margin-x").pfValue,kt=g.pstyle(at+"text-margin-y").pfValue,Mt=g.isEdge(),Dt=g.pstyle("text-halign").value,jt=g.pstyle("text-valign").value;Mt&&(Dt="center",jt="center"),q+=At,S+=kt;var Zt;switch(T?Zt=this.getTextAngle(g,x):Zt=0,Zt!==0&&(G=q,W=S,y.translate(G,W),y.rotate(Zt),q=0,S=0),jt){case"top":break;case"center":S+=ft/2;break;case"bottom":S+=ft;break}var Kt=g.pstyle("text-background-opacity").value,zt=g.pstyle("text-border-opacity").value,ee=g.pstyle("text-border-width").pfValue,Vt=g.pstyle("text-background-padding").pfValue;if(Kt>0||ee>0&&zt>0){var fe=q-Vt;switch(Dt){case"left":fe-=lt;break;case"center":fe-=lt/2;break}var ge=S-ft-Vt,ne=lt+2*Vt,Pe=ft+2*Vt;if(Kt>0){var pe=y.fillStyle,bn=g.pstyle("text-background-color").value;y.fillStyle="rgba("+bn[0]+","+bn[1]+","+bn[2]+","+Kt*$+")";var ze=g.pstyle("text-background-shape").strValue;ze.indexOf("round")===0?fpt(y,fe,ge,ne,Pe,2):y.fillRect(fe,ge,ne,Pe),y.fillStyle=pe}if(ee>0&&zt>0){var Ve=y.strokeStyle,En=y.lineWidth,Dn=g.pstyle("text-border-color").value,Kn=g.pstyle("text-border-style").value;if(y.strokeStyle="rgba("+Dn[0]+","+Dn[1]+","+Dn[2]+","+zt*$+")",y.lineWidth=ee,y.setLineDash)switch(Kn){case"dotted":y.setLineDash([1,1]);break;case"dashed":y.setLineDash([4,2]);break;case"double":y.lineWidth=ee/4,y.setLineDash([]);break;case"solid":y.setLineDash([]);break}if(y.strokeRect(fe,ge,ne,Pe),Kn==="double"){var Sn=ee/2;y.strokeRect(fe+Sn,ge+Sn,ne-Sn*2,Pe-Sn*2)}y.setLineDash&&y.setLineDash([]),y.lineWidth=En,y.strokeStyle=Ve}}var Wn=2*g.pstyle("text-outline-width").pfValue;if(Wn>0&&(y.lineWidth=Wn),g.pstyle("text-wrap").value==="wrap"){var rr=bp(O,"labelWrapCachedLines",x),vr=bp(O,"labelLineHeight",x),ur=lt/2,tr=this.getLabelJustification(g);switch(tr==="auto"||(Dt==="left"?tr==="left"?q+=-lt:tr==="center"&&(q+=-ur):Dt==="center"?tr==="left"?q+=-ur:tr==="right"&&(q+=ur):Dt==="right"&&(tr==="center"?q+=ur:tr==="right"&&(q+=lt))),jt){case"top":S-=(rr.length-1)*vr;break;case"center":case"bottom":S-=(rr.length-1)*vr;break}for(var wn=0;wn<rr.length;wn++)Wn>0&&y.strokeText(rr[wn],q,S),y.fillText(rr[wn],q,S),S+=vr}else Wn>0&&y.strokeText(et,q,S),y.fillText(et,q,S);Zt!==0&&(y.rotate(-Zt),y.translate(-G,-W))}}};var Gk={};Gk.drawNode=function(y,g,x){var T=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,A=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,D=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0,O=this,$,q,S=g._private,G=S.rscratch,W=g.position();if(!(!X(W.x)||!X(W.y))&&!(D&&!g.visible())){var et=D?g.effectiveOpacity():1,at=O.usePaths(),lt,ft=!1,At=g.padding();$=g.width()+2*At,q=g.height()+2*At;var kt;x&&(kt=x,y.translate(-kt.x1,-kt.y1));for(var Mt=g.pstyle("background-image"),Dt=Mt.value,jt=new Array(Dt.length),Zt=new Array(Dt.length),Kt=0,zt=0;zt<Dt.length;zt++){var ee=Dt[zt],Vt=jt[zt]=ee!=null&&ee!=="none";if(Vt){var fe=g.cy().style().getIndexedStyle(g,"background-image-crossorigin","value",zt);Kt++,Zt[zt]=O.getCachedImage(ee,fe,function(){S.backgroundTimestamp=Date.now(),g.emitAndNotify("background")})}}var ge=g.pstyle("background-blacken").value,ne=g.pstyle("border-width").pfValue,Pe=g.pstyle("background-opacity").value*et,pe=g.pstyle("border-color").value,bn=g.pstyle("border-style").value,ze=g.pstyle("border-opacity").value*et;y.lineJoin="miter";var Ve=function(){var Si=arguments.length>0&&arguments[0]!==void 0?arguments[0]:Pe;O.eleFillStyle(y,g,Si)},En=function(){var Si=arguments.length>0&&arguments[0]!==void 0?arguments[0]:ze;O.colorStrokeStyle(y,pe[0],pe[1],pe[2],Si)},Dn=g.pstyle("shape").strValue,Kn=g.pstyle("shape-polygon-points").pfValue;if(at){y.translate(W.x,W.y);var Sn=O.nodePathCache=O.nodePathCache||[],Wn=ed(Dn==="polygon"?Dn+","+Kn.join(","):Dn,""+q,""+$),rr=Sn[Wn];rr!=null?(lt=rr,ft=!0,G.pathCache=lt):(lt=new Path2D,Sn[Wn]=G.pathCache=lt)}var vr=function(){if(!ft){var Si=W;at&&(Si={x:0,y:0}),O.nodeShapes[O.getNodeShape(g)].draw(lt||y,Si.x,Si.y,$,q)}at?y.fill(lt):y.fill()},ur=function(){for(var Si=arguments.length>0&&arguments[0]!==void 0?arguments[0]:et,Ui=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,Ga=S.backgrounding,Ys=0,zs=0;zs<Zt.length;zs++){var Er=g.cy().style().getIndexedStyle(g,"background-image-containment","value",zs);if(Ui&&Er==="over"||!Ui&&Er==="inside"){Ys++;continue}jt[zs]&&Zt[zs].complete&&!Zt[zs].error&&(Ys++,O.drawInscribedImage(y,Zt[zs],g,zs,Si))}S.backgrounding=Ys!==Kt,Ga!==S.backgrounding&&g.updateStyle(!1)},tr=function(){var Si=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,Ui=arguments.length>1&&arguments[1]!==void 0?arguments[1]:et;O.hasPie(g)&&(O.drawPie(y,g,Ui),Si&&(at||O.nodeShapes[O.getNodeShape(g)].draw(y,W.x,W.y,$,q)))},wn=function(){var Si=arguments.length>0&&arguments[0]!==void 0?arguments[0]:et,Ui=(ge>0?ge:-ge)*Si,Ga=ge>0?0:255;ge!==0&&(O.colorFillStyle(y,Ga,Ga,Ga,Ui),at?y.fill(lt):y.fill())},gr=function(){if(ne>0){if(y.lineWidth=ne,y.lineCap="butt",y.setLineDash)switch(bn){case"dotted":y.setLineDash([1,1]);break;case"dashed":y.setLineDash([4,2]);break;case"solid":case"double":y.setLineDash([]);break}if(at?y.stroke(lt):y.stroke(),bn==="double"){y.lineWidth=ne/3;var Si=y.globalCompositeOperation;y.globalCompositeOperation="destination-out",at?y.stroke(lt):y.stroke(),y.globalCompositeOperation=Si}y.setLineDash&&y.setLineDash([])}},fr=function(){A&&O.drawNodeOverlay(y,g,W,$,q)},Jr=function(){A&&O.drawNodeUnderlay(y,g,W,$,q)},wi=function(){O.drawElementText(y,g,null,T)},Ks=g.pstyle("ghost").value==="yes";if(Ks){var ka=g.pstyle("ghost-offset-x").pfValue,Ci=g.pstyle("ghost-offset-y").pfValue,hi=g.pstyle("ghost-opacity").value,gs=hi*et;y.translate(ka,Ci),Ve(hi*Pe),vr(),ur(gs,!0),En(hi*ze),gr(),tr(ge!==0||ne!==0),ur(gs,!1),wn(gs),y.translate(-ka,-Ci)}at&&y.translate(-W.x,-W.y),Jr(),at&&y.translate(W.x,W.y),Ve(),vr(),ur(et,!0),En(),gr(),tr(ge!==0||ne!==0),ur(et,!1),wn(),at&&y.translate(-W.x,-W.y),wi(),fr(),x&&y.translate(kt.x1,kt.y1)}};var Ett=function(g){if(!["overlay","underlay"].includes(g))throw new Error("Invalid state");return function(x,T,A,D,O){var $=this;if(T.visible()){var q=T.pstyle("".concat(g,"-padding")).pfValue,S=T.pstyle("".concat(g,"-opacity")).value,G=T.pstyle("".concat(g,"-color")).value,W=T.pstyle("".concat(g,"-shape")).value;if(S>0){if(A=A||T.position(),D==null||O==null){var et=T.padding();D=T.width()+2*et,O=T.height()+2*et}$.colorFillStyle(x,G[0],G[1],G[2],S),$.nodeShapes[W].draw(x,A.x,A.y,D+q*2,O+q*2),x.fill()}}}};Gk.drawNodeOverlay=Ett("overlay"),Gk.drawNodeUnderlay=Ett("underlay"),Gk.hasPie=function(y){return y=y[0],y._private.hasPie},Gk.drawPie=function(y,g,x,T){g=g[0],T=T||g.position();var A=g.cy().style(),D=g.pstyle("pie-size"),O=T.x,$=T.y,q=g.width(),S=g.height(),G=Math.min(q,S)/2,W=0,et=this.usePaths();et&&(O=0,$=0),D.units==="%"?G=G*D.pfValue:D.pfValue!==void 0&&(G=D.pfValue/2);for(var at=1;at<=A.pieBackgroundN;at++){var lt=g.pstyle("pie-"+at+"-background-size").value,ft=g.pstyle("pie-"+at+"-background-color").value,At=g.pstyle("pie-"+at+"-background-opacity").value*x,kt=lt/100;kt+W>1&&(kt=1-W);var Mt=1.5*Math.PI+2*Math.PI*W,Dt=2*Math.PI*kt,jt=Mt+Dt;lt===0||W>=1||W+kt>1||(y.beginPath(),y.moveTo(O,$),y.arc(O,$,G,Mt,jt),y.closePath(),this.colorFillStyle(y,ft[0],ft[1],ft[2],At),y.fill(),W+=kt)}};var vg={},dpt=100;vg.getPixelRatio=function(){var y=this.data.contexts[0];if(this.forcedPixelRatio!=null)return this.forcedPixelRatio;var g=y.backingStorePixelRatio||y.webkitBackingStorePixelRatio||y.mozBackingStorePixelRatio||y.msBackingStorePixelRatio||y.oBackingStorePixelRatio||y.backingStorePixelRatio||1;return(window.devicePixelRatio||1)/g},vg.paintCache=function(y){for(var g=this.paintCaches=this.paintCaches||[],x=!0,T,A=0;A<g.length;A++)if(T=g[A],T.context===y){x=!1;break}return x&&(T={context:y},g.push(T)),T},vg.createGradientStyleFor=function(y,g,x,T,A){var D,O=this.usePaths(),$=x.pstyle(g+"-gradient-stop-colors").value,q=x.pstyle(g+"-gradient-stop-positions").pfValue;if(T==="radial-gradient")if(x.isEdge()){var S=x.sourceEndpoint(),G=x.targetEndpoint(),W=x.midpoint(),et=E3(S,W),at=E3(G,W);D=y.createRadialGradient(W.x,W.y,0,W.x,W.y,Math.max(et,at))}else{var lt=O?{x:0,y:0}:x.position(),ft=x.paddedWidth(),At=x.paddedHeight();D=y.createRadialGradient(lt.x,lt.y,0,lt.x,lt.y,Math.max(ft,At))}else if(x.isEdge()){var kt=x.sourceEndpoint(),Mt=x.targetEndpoint();D=y.createLinearGradient(kt.x,kt.y,Mt.x,Mt.y)}else{var Dt=O?{x:0,y:0}:x.position(),jt=x.paddedWidth(),Zt=x.paddedHeight(),Kt=jt/2,zt=Zt/2,ee=x.pstyle("background-gradient-direction").value;switch(ee){case"to-bottom":D=y.createLinearGradient(Dt.x,Dt.y-zt,Dt.x,Dt.y+zt);break;case"to-top":D=y.createLinearGradient(Dt.x,Dt.y+zt,Dt.x,Dt.y-zt);break;case"to-left":D=y.createLinearGradient(Dt.x+Kt,Dt.y,Dt.x-Kt,Dt.y);break;case"to-right":D=y.createLinearGradient(Dt.x-Kt,Dt.y,Dt.x+Kt,Dt.y);break;case"to-bottom-right":case"to-right-bottom":D=y.createLinearGradient(Dt.x-Kt,Dt.y-zt,Dt.x+Kt,Dt.y+zt);break;case"to-top-right":case"to-right-top":D=y.createLinearGradient(Dt.x-Kt,Dt.y+zt,Dt.x+Kt,Dt.y-zt);break;case"to-bottom-left":case"to-left-bottom":D=y.createLinearGradient(Dt.x+Kt,Dt.y-zt,Dt.x-Kt,Dt.y+zt);break;case"to-top-left":case"to-left-top":D=y.createLinearGradient(Dt.x+Kt,Dt.y+zt,Dt.x-Kt,Dt.y-zt);break}}if(!D)return null;for(var Vt=q.length===$.length,fe=$.length,ge=0;ge<fe;ge++)D.addColorStop(Vt?q[ge]:ge/(fe-1),"rgba("+$[ge][0]+","+$[ge][1]+","+$[ge][2]+","+A+")");return D},vg.gradientFillStyle=function(y,g,x,T){var A=this.createGradientStyleFor(y,"background",g,x,T);if(!A)return null;y.fillStyle=A},vg.colorFillStyle=function(y,g,x,T,A){y.fillStyle="rgba("+g+","+x+","+T+","+A+")"},vg.eleFillStyle=function(y,g,x){var T=g.pstyle("background-fill").value;if(T==="linear-gradient"||T==="radial-gradient")this.gradientFillStyle(y,g,T,x);else{var A=g.pstyle("background-color").value;this.colorFillStyle(y,A[0],A[1],A[2],x)}},vg.gradientStrokeStyle=function(y,g,x,T){var A=this.createGradientStyleFor(y,"line",g,x,T);if(!A)return null;y.strokeStyle=A},vg.colorStrokeStyle=function(y,g,x,T,A){y.strokeStyle="rgba("+g+","+x+","+T+","+A+")"},vg.eleStrokeStyle=function(y,g,x){var T=g.pstyle("line-fill").value;if(T==="linear-gradient"||T==="radial-gradient")this.gradientStrokeStyle(y,g,T,x);else{var A=g.pstyle("line-color").value;this.colorStrokeStyle(y,A[0],A[1],A[2],x)}},vg.matchCanvasSize=function(y){var g=this,x=g.data,T=g.findContainerClientCoords(),A=T[2],D=T[3],O=g.getPixelRatio(),$=g.motionBlurPxRatio;(y===g.data.bufferCanvases[g.MOTIONBLUR_BUFFER_NODE]||y===g.data.bufferCanvases[g.MOTIONBLUR_BUFFER_DRAG])&&(O=$);var q=A*O,S=D*O,G;if(!(q===g.canvasWidth&&S===g.canvasHeight)){g.fontCaches=null;var W=x.canvasContainer;W.style.width=A+"px",W.style.height=D+"px";for(var et=0;et<g.CANVAS_LAYERS;et++)G=x.canvases[et],G.width=q,G.height=S,G.style.width=A+"px",G.style.height=D+"px";for(var et=0;et<g.BUFFER_COUNT;et++)G=x.bufferCanvases[et],G.width=q,G.height=S,G.style.width=A+"px",G.style.height=D+"px";g.textureMult=1,O<=1&&(G=x.bufferCanvases[g.TEXTURE_BUFFER],g.textureMult=2,G.width=q*g.textureMult,G.height=S*g.textureMult),g.canvasWidth=q,g.canvasHeight=S}},vg.renderTo=function(y,g,x,T){this.render({forcedContext:y,forcedZoom:g,forcedPan:x,drawAllLayers:!0,forcedPxRatio:T})},vg.render=function(y){y=y||KP();var g=y.forcedContext,x=y.drawAllLayers,T=y.drawOnlyNodeLayer,A=y.forcedZoom,D=y.forcedPan,O=this,$=y.forcedPxRatio===void 0?this.getPixelRatio():y.forcedPxRatio,q=O.cy,S=O.data,G=S.canvasNeedsRedraw,W=O.textureOnViewport&&!g&&(O.pinching||O.hoverData.dragging||O.swipePanning||O.data.wheelZooming),et=y.motionBlur!==void 0?y.motionBlur:O.motionBlur,at=O.motionBlurPxRatio,lt=q.hasCompoundNodes(),ft=O.hoverData.draggingEles,At=!!(O.hoverData.selecting||O.touchData.selecting);et=et&&!g&&O.motionBlurEnabled&&!At;var kt=et;g||(O.prevPxRatio!==$&&(O.invalidateContainerClientCoordsCache(),O.matchCanvasSize(O.container),O.redrawHint("eles",!0),O.redrawHint("drag",!0)),O.prevPxRatio=$),!g&&O.motionBlurTimeout&&clearTimeout(O.motionBlurTimeout),et&&(O.mbFrames==null&&(O.mbFrames=0),O.mbFrames++,O.mbFrames<3&&(kt=!1),O.mbFrames>O.minMbLowQualFrames&&(O.motionBlurPxRatio=O.mbPxRBlurry)),O.clearingMotionBlur&&(O.motionBlurPxRatio=1),O.textureDrawLastFrame&&!W&&(G[O.NODE]=!0,G[O.SELECT_BOX]=!0);var Mt=q.style(),Dt=q.zoom(),jt=A!==void 0?A:Dt,Zt=q.pan(),Kt={x:Zt.x,y:Zt.y},zt={zoom:Dt,pan:{x:Zt.x,y:Zt.y}},ee=O.prevViewport,Vt=ee===void 0||zt.zoom!==ee.zoom||zt.pan.x!==ee.pan.x||zt.pan.y!==ee.pan.y;!Vt&&!(ft&&!lt)&&(O.motionBlurPxRatio=1),D&&(Kt=D),jt*=$,Kt.x*=$,Kt.y*=$;var fe=O.getCachedZSortedEles();function ge(Ci,hi,gs,qi,Si){var Ui=Ci.globalCompositeOperation;Ci.globalCompositeOperation="destination-out",O.colorFillStyle(Ci,255,255,255,O.motionBlurTransparency),Ci.fillRect(hi,gs,qi,Si),Ci.globalCompositeOperation=Ui}function ne(Ci,hi){var gs,qi,Si,Ui;!O.clearingMotionBlur&&(Ci===S.bufferContexts[O.MOTIONBLUR_BUFFER_NODE]||Ci===S.bufferContexts[O.MOTIONBLUR_BUFFER_DRAG])?(gs={x:Zt.x*at,y:Zt.y*at},qi=Dt*at,Si=O.canvasWidth*at,Ui=O.canvasHeight*at):(gs=Kt,qi=jt,Si=O.canvasWidth,Ui=O.canvasHeight),Ci.setTransform(1,0,0,1,0,0),hi==="motionBlur"?ge(Ci,0,0,Si,Ui):!g&&(hi===void 0||hi)&&Ci.clearRect(0,0,Si,Ui),x||(Ci.translate(gs.x,gs.y),Ci.scale(qi,qi)),D&&Ci.translate(D.x,D.y),A&&Ci.scale(A,A)}if(W||(O.textureDrawLastFrame=!1),W){if(O.textureDrawLastFrame=!0,!O.textureCache){O.textureCache={},O.textureCache.bb=q.mutableElements().boundingBox(),O.textureCache.texture=O.data.bufferCanvases[O.TEXTURE_BUFFER];var Pe=O.data.bufferContexts[O.TEXTURE_BUFFER];Pe.setTransform(1,0,0,1,0,0),Pe.clearRect(0,0,O.canvasWidth*O.textureMult,O.canvasHeight*O.textureMult),O.render({forcedContext:Pe,drawOnlyNodeLayer:!0,forcedPxRatio:$*O.textureMult});var zt=O.textureCache.viewport={zoom:q.zoom(),pan:q.pan(),width:O.canvasWidth,height:O.canvasHeight};zt.mpan={x:(0-zt.pan.x)/zt.zoom,y:(0-zt.pan.y)/zt.zoom}}G[O.DRAG]=!1,G[O.NODE]=!1;var pe=S.contexts[O.NODE],bn=O.textureCache.texture,zt=O.textureCache.viewport;pe.setTransform(1,0,0,1,0,0),et?ge(pe,0,0,zt.width,zt.height):pe.clearRect(0,0,zt.width,zt.height);var ze=Mt.core("outside-texture-bg-color").value,Ve=Mt.core("outside-texture-bg-opacity").value;O.colorFillStyle(pe,ze[0],ze[1],ze[2],Ve),pe.fillRect(0,0,zt.width,zt.height);var Dt=q.zoom();ne(pe,!1),pe.clearRect(zt.mpan.x,zt.mpan.y,zt.width/zt.zoom/$,zt.height/zt.zoom/$),pe.drawImage(bn,zt.mpan.x,zt.mpan.y,zt.width/zt.zoom/$,zt.height/zt.zoom/$)}else O.textureOnViewport&&!g&&(O.textureCache=null);var En=q.extent(),Dn=O.pinching||O.hoverData.dragging||O.swipePanning||O.data.wheelZooming||O.hoverData.draggingEles||O.cy.animated(),Kn=O.hideEdgesOnViewport&&Dn,Sn=[];if(Sn[O.NODE]=!G[O.NODE]&&et&&!O.clearedForMotionBlur[O.NODE]||O.clearingMotionBlur,Sn[O.NODE]&&(O.clearedForMotionBlur[O.NODE]=!0),Sn[O.DRAG]=!G[O.DRAG]&&et&&!O.clearedForMotionBlur[O.DRAG]||O.clearingMotionBlur,Sn[O.DRAG]&&(O.clearedForMotionBlur[O.DRAG]=!0),G[O.NODE]||x||T||Sn[O.NODE]){var Wn=et&&!Sn[O.NODE]&&at!==1,pe=g||(Wn?O.data.bufferContexts[O.MOTIONBLUR_BUFFER_NODE]:S.contexts[O.NODE]),rr=et&&!Wn?"motionBlur":void 0;ne(pe,rr),Kn?O.drawCachedNodes(pe,fe.nondrag,$,En):O.drawLayeredElements(pe,fe.nondrag,$,En),O.debug&&O.drawDebugPoints(pe,fe.nondrag),!x&&!et&&(G[O.NODE]=!1)}if(!T&&(G[O.DRAG]||x||Sn[O.DRAG])){var Wn=et&&!Sn[O.DRAG]&&at!==1,pe=g||(Wn?O.data.bufferContexts[O.MOTIONBLUR_BUFFER_DRAG]:S.contexts[O.DRAG]);ne(pe,et&&!Wn?"motionBlur":void 0),Kn?O.drawCachedNodes(pe,fe.drag,$,En):O.drawCachedElements(pe,fe.drag,$,En),O.debug&&O.drawDebugPoints(pe,fe.drag),!x&&!et&&(G[O.DRAG]=!1)}if(O.showFps||!T&&G[O.SELECT_BOX]&&!x){var pe=g||S.contexts[O.SELECT_BOX];if(ne(pe),O.selection[4]==1&&(O.hoverData.selecting||O.touchData.selecting)){var Dt=O.cy.zoom(),vr=Mt.core("selection-box-border-width").value/Dt;pe.lineWidth=vr,pe.fillStyle="rgba("+Mt.core("selection-box-color").value[0]+","+Mt.core("selection-box-color").value[1]+","+Mt.core("selection-box-color").value[2]+","+Mt.core("selection-box-opacity").value+")",pe.fillRect(O.selection[0],O.selection[1],O.selection[2]-O.selection[0],O.selection[3]-O.selection[1]),vr>0&&(pe.strokeStyle="rgba("+Mt.core("selection-box-border-color").value[0]+","+Mt.core("selection-box-border-color").value[1]+","+Mt.core("selection-box-border-color").value[2]+","+Mt.core("selection-box-opacity").value+")",pe.strokeRect(O.selection[0],O.selection[1],O.selection[2]-O.selection[0],O.selection[3]-O.selection[1]))}if(S.bgActivePosistion&&!O.hoverData.selecting){var Dt=O.cy.zoom(),ur=S.bgActivePosistion;pe.fillStyle="rgba("+Mt.core("active-bg-color").value[0]+","+Mt.core("active-bg-color").value[1]+","+Mt.core("active-bg-color").value[2]+","+Mt.core("active-bg-opacity").value+")",pe.beginPath(),pe.arc(ur.x,ur.y,Mt.core("active-bg-size").pfValue/Dt,0,2*Math.PI),pe.fill()}var tr=O.lastRedrawTime;if(O.showFps&&tr){tr=Math.round(tr);var wn=Math.round(1e3/tr);pe.setTransform(1,0,0,1,0,0),pe.fillStyle="rgba(255, 0, 0, 0.75)",pe.strokeStyle="rgba(255, 0, 0, 0.75)",pe.lineWidth=1,pe.fillText("1 frame = "+tr+" ms = "+wn+" fps",0,20);var gr=60;pe.strokeRect(0,30,250,20),pe.fillRect(0,30,250*Math.min(wn/gr,1),20)}x||(G[O.SELECT_BOX]=!1)}if(et&&at!==1){var fr=S.contexts[O.NODE],Jr=O.data.bufferCanvases[O.MOTIONBLUR_BUFFER_NODE],wi=S.contexts[O.DRAG],Ks=O.data.bufferCanvases[O.MOTIONBLUR_BUFFER_DRAG],ka=function(hi,gs,qi){hi.setTransform(1,0,0,1,0,0),qi||!kt?hi.clearRect(0,0,O.canvasWidth,O.canvasHeight):ge(hi,0,0,O.canvasWidth,O.canvasHeight);var Si=at;hi.drawImage(gs,0,0,O.canvasWidth*Si,O.canvasHeight*Si,0,0,O.canvasWidth,O.canvasHeight)};(G[O.NODE]||Sn[O.NODE])&&(ka(fr,Jr,Sn[O.NODE]),G[O.NODE]=!1),(G[O.DRAG]||Sn[O.DRAG])&&(ka(wi,Ks,Sn[O.DRAG]),G[O.DRAG]=!1)}O.prevViewport=zt,O.clearingMotionBlur&&(O.clearingMotionBlur=!1,O.motionBlurCleared=!0,O.motionBlur=!0),et&&(O.motionBlurTimeout=setTimeout(function(){O.motionBlurTimeout=null,O.clearedForMotionBlur[O.NODE]=!1,O.clearedForMotionBlur[O.DRAG]=!1,O.motionBlur=!1,O.clearingMotionBlur=!W,O.mbFrames=0,G[O.NODE]=!0,G[O.DRAG]=!0,O.redraw()},dpt)),g||q.emit("render")};var I3={};I3.drawPolygonPath=function(y,g,x,T,A,D){var O=T/2,$=A/2;y.beginPath&&y.beginPath(),y.moveTo(g+O*D[0],x+$*D[1]);for(var q=1;q<D.length/2;q++)y.lineTo(g+O*D[q*2],x+$*D[q*2+1]);y.closePath()},I3.drawRoundPolygonPath=function(y,g,x,T,A,D){var O=T/2,$=A/2,q=_L(T,A);y.beginPath&&y.beginPath();for(var S=0;S<D.length/4;S++){var G=void 0,W=void 0;S===0?G=D.length-2:G=S*4-2,W=S*4+2;var et=g+O*D[S*4],at=x+$*D[S*4+1],lt=-D[G]*D[W]-D[G+1]*D[W+1],ft=q/Math.tan(Math.acos(lt)/2),At=et-ft*D[G],kt=at-ft*D[G+1],Mt=et+ft*D[W],Dt=at+ft*D[W+1];S===0?y.moveTo(At,kt):y.lineTo(At,kt),y.arcTo(et,at,Mt,Dt,q)}y.closePath()},I3.drawRoundRectanglePath=function(y,g,x,T,A){var D=T/2,O=A/2,$=xk(T,A);y.beginPath&&y.beginPath(),y.moveTo(g,x-O),y.arcTo(g+D,x-O,g+D,x,$),y.arcTo(g+D,x+O,g,x+O,$),y.arcTo(g-D,x+O,g-D,x,$),y.arcTo(g-D,x-O,g,x-O,$),y.lineTo(g,x-O),y.closePath()},I3.drawBottomRoundRectanglePath=function(y,g,x,T,A){var D=T/2,O=A/2,$=xk(T,A);y.beginPath&&y.beginPath(),y.moveTo(g,x-O),y.lineTo(g+D,x-O),y.lineTo(g+D,x),y.arcTo(g+D,x+O,g,x+O,$),y.arcTo(g-D,x+O,g-D,x,$),y.lineTo(g-D,x-O),y.lineTo(g,x-O),y.closePath()},I3.drawCutRectanglePath=function(y,g,x,T,A){var D=T/2,O=A/2,$=sF();y.beginPath&&y.beginPath(),y.moveTo(g-D+$,x-O),y.lineTo(g+D-$,x-O),y.lineTo(g+D,x-O+$),y.lineTo(g+D,x+O-$),y.lineTo(g+D-$,x+O),y.lineTo(g-D+$,x+O),y.lineTo(g-D,x+O-$),y.lineTo(g-D,x-O+$),y.closePath()},I3.drawBarrelPath=function(y,g,x,T,A){var D=T/2,O=A/2,$=g-D,q=g+D,S=x-O,G=x+O,W=SL(T,A),et=W.widthOffset,at=W.heightOffset,lt=W.ctrlPtOffsetPct*et;y.beginPath&&y.beginPath(),y.moveTo($,S+at),y.lineTo($,G-at),y.quadraticCurveTo($+lt,G,$+et,G),y.lineTo(q-et,G),y.quadraticCurveTo(q-lt,G,q,G-at),y.lineTo(q,S+at),y.quadraticCurveTo(q-lt,S,q-et,S),y.lineTo($+et,S),y.quadraticCurveTo($+lt,S,$,S+at),y.closePath()};for(var Ttt=Math.sin(0),Ctt=Math.cos(0),QB={},ZB={},_tt=Math.PI/40,Vk=0*Math.PI;Vk<2*Math.PI;Vk+=_tt)QB[Vk]=Math.sin(Vk),ZB[Vk]=Math.cos(Vk);I3.drawEllipsePath=function(y,g,x,T,A){if(y.beginPath&&y.beginPath(),y.ellipse)y.ellipse(g,x,T/2,A/2,0,0,2*Math.PI);else for(var D,O,$=T/2,q=A/2,S=0*Math.PI;S<2*Math.PI;S+=_tt)D=g-$*QB[S]*Ttt+$*ZB[S]*Ctt,O=x+q*ZB[S]*Ttt+q*QB[S]*Ctt,S===0?y.moveTo(D,O):y.lineTo(D,O);y.closePath()};var E9={};E9.createBuffer=function(y,g){var x=document.createElement("canvas");return x.width=y,x.height=g,[x,x.getContext("2d")]},E9.bufferCanvasImage=function(y){var g=this.cy,x=g.mutableElements(),T=x.boundingBox(),A=this.findContainerClientCoords(),D=y.full?Math.ceil(T.w):A[2],O=y.full?Math.ceil(T.h):A[3],$=X(y.maxWidth)||X(y.maxHeight),q=this.getPixelRatio(),S=1;if(y.scale!==void 0)D*=y.scale,O*=y.scale,S=y.scale;else if($){var G=1/0,W=1/0;X(y.maxWidth)&&(G=S*y.maxWidth/D),X(y.maxHeight)&&(W=S*y.maxHeight/O),S=Math.min(G,W),D*=S,O*=S}$||(D*=q,O*=q,S*=q);var et=document.createElement("canvas");et.width=D,et.height=O,et.style.width=D+"px",et.style.height=O+"px";var at=et.getContext("2d");if(D>0&&O>0){at.clearRect(0,0,D,O),at.globalCompositeOperation="source-over";var lt=this.getCachedZSortedEles();if(y.full)at.translate(-T.x1*S,-T.y1*S),at.scale(S,S),this.drawElements(at,lt),at.scale(1/S,1/S),at.translate(T.x1*S,T.y1*S);else{var ft=g.pan(),At={x:ft.x*S,y:ft.y*S};S*=g.zoom(),at.translate(At.x,At.y),at.scale(S,S),this.drawElements(at,lt),at.scale(1/S,1/S),at.translate(-At.x,-At.y)}y.bg&&(at.globalCompositeOperation="destination-over",at.fillStyle=y.bg,at.rect(0,0,D,O),at.fill())}return et};function gpt(y,g){for(var x=atob(y),T=new ArrayBuffer(x.length),A=new Uint8Array(T),D=0;D<x.length;D++)A[D]=x.charCodeAt(D);return new Blob([T],{type:g})}function Stt(y){var g=y.indexOf(",");return y.substr(g+1)}function Att(y,g,x){var T=function(){return g.toDataURL(x,y.quality)};switch(y.output){case"blob-promise":return new K5(function(A,D){try{g.toBlob(function(O){O!=null?A(O):D(new Error("`canvas.toBlob()` sent a null value in its callback"))},x,y.quality)}catch(O){D(O)}});case"blob":return gpt(Stt(T()),x);case"base64":return Stt(T());case"base64uri":default:return T()}}E9.png=function(y){return Att(y,this.bufferCanvasImage(y),"image/png")},E9.jpg=function(y){return Att(y,this.bufferCanvasImage(y),"image/jpeg")};var Ltt={};Ltt.nodeShapeImpl=function(y,g,x,T,A,D,O){switch(y){case"ellipse":return this.drawEllipsePath(g,x,T,A,D);case"polygon":return this.drawPolygonPath(g,x,T,A,D,O);case"round-polygon":return this.drawRoundPolygonPath(g,x,T,A,D,O);case"roundrectangle":case"round-rectangle":return this.drawRoundRectanglePath(g,x,T,A,D);case"cutrectangle":case"cut-rectangle":return this.drawCutRectanglePath(g,x,T,A,D);case"bottomroundrectangle":case"bottom-round-rectangle":return this.drawBottomRoundRectanglePath(g,x,T,A,D);case"barrel":return this.drawBarrelPath(g,x,T,A,D)}};var ppt=JB,wc=JB.prototype;wc.CANVAS_LAYERS=3,wc.SELECT_BOX=0,wc.DRAG=1,wc.NODE=2,wc.BUFFER_COUNT=3,wc.TEXTURE_BUFFER=0,wc.MOTIONBLUR_BUFFER_NODE=1,wc.MOTIONBLUR_BUFFER_DRAG=2;function JB(y){var g=this;g.data={canvases:new Array(wc.CANVAS_LAYERS),contexts:new Array(wc.CANVAS_LAYERS),canvasNeedsRedraw:new Array(wc.CANVAS_LAYERS),bufferCanvases:new Array(wc.BUFFER_COUNT),bufferContexts:new Array(wc.CANVAS_LAYERS)};var x="-webkit-tap-highlight-color",T="rgba(0,0,0,0)";g.data.canvasContainer=document.createElement("div");var A=g.data.canvasContainer.style;g.data.canvasContainer.style[x]=T,A.position="relative",A.zIndex="0",A.overflow="hidden";var D=y.cy.container();D.appendChild(g.data.canvasContainer),D.style[x]=T;var O={"-webkit-user-select":"none","-moz-user-select":"-moz-none","user-select":"none","-webkit-tap-highlight-color":"rgba(0,0,0,0)","outline-style":"none"};Ft()&&(O["-ms-touch-action"]="none",O["touch-action"]="none");for(var $=0;$<wc.CANVAS_LAYERS;$++){var q=g.data.canvases[$]=document.createElement("canvas");g.data.contexts[$]=q.getContext("2d"),Object.keys(O).forEach(function(tr){q.style[tr]=O[tr]}),q.style.position="absolute",q.setAttribute("data-id","layer"+$),q.style.zIndex=String(wc.CANVAS_LAYERS-$),g.data.canvasContainer.appendChild(q),g.data.canvasNeedsRedraw[$]=!1}g.data.topCanvas=g.data.canvases[0],g.data.canvases[wc.NODE].setAttribute("data-id","layer"+wc.NODE+"-node"),g.data.canvases[wc.SELECT_BOX].setAttribute("data-id","layer"+wc.SELECT_BOX+"-selectbox"),g.data.canvases[wc.DRAG].setAttribute("data-id","layer"+wc.DRAG+"-drag");for(var $=0;$<wc.BUFFER_COUNT;$++)g.data.bufferCanvases[$]=document.createElement("canvas"),g.data.bufferContexts[$]=g.data.bufferCanvases[$].getContext("2d"),g.data.bufferCanvases[$].style.position="absolute",g.data.bufferCanvases[$].setAttribute("data-id","buffer"+$),g.data.bufferCanvases[$].style.zIndex=String(-$-1),g.data.bufferCanvases[$].style.visibility="hidden";g.pathsEnabled=!0;var S=Rd(),G=function(wn){return{x:(wn.x1+wn.x2)/2,y:(wn.y1+wn.y2)/2}},W=function(wn){return{x:-wn.w/2,y:-wn.h/2}},et=function(wn){var gr=wn[0]._private,fr=gr.oldBackgroundTimestamp===gr.backgroundTimestamp;return!fr},at=function(wn){return wn[0]._private.nodeKey},lt=function(wn){return wn[0]._private.labelStyleKey},ft=function(wn){return wn[0]._private.sourceLabelStyleKey},At=function(wn){return wn[0]._private.targetLabelStyleKey},kt=function(wn,gr,fr,Jr,wi){return g.drawElement(wn,gr,fr,!1,!1,wi)},Mt=function(wn,gr,fr,Jr,wi){return g.drawElementText(wn,gr,fr,Jr,"main",wi)},Dt=function(wn,gr,fr,Jr,wi){return g.drawElementText(wn,gr,fr,Jr,"source",wi)},jt=function(wn,gr,fr,Jr,wi){return g.drawElementText(wn,gr,fr,Jr,"target",wi)},Zt=function(wn){return wn.boundingBox(),wn[0]._private.bodyBounds},Kt=function(wn){return wn.boundingBox(),wn[0]._private.labelBounds.main||S},zt=function(wn){return wn.boundingBox(),wn[0]._private.labelBounds.source||S},ee=function(wn){return wn.boundingBox(),wn[0]._private.labelBounds.target||S},Vt=function(wn,gr){return gr},fe=function(wn){return G(Zt(wn))},ge=function(wn,gr,fr){var Jr=wn?wn+"-":"";return{x:gr.x+fr.pstyle(Jr+"text-margin-x").pfValue,y:gr.y+fr.pstyle(Jr+"text-margin-y").pfValue}},ne=function(wn,gr,fr){var Jr=wn[0]._private.rscratch;return{x:Jr[gr],y:Jr[fr]}},Pe=function(wn){return ge("",ne(wn,"labelX","labelY"),wn)},pe=function(wn){return ge("source",ne(wn,"sourceLabelX","sourceLabelY"),wn)},bn=function(wn){return ge("target",ne(wn,"targetLabelX","targetLabelY"),wn)},ze=function(wn){return W(Zt(wn))},Ve=function(wn){return W(zt(wn))},En=function(wn){return W(ee(wn))},Dn=function(wn){var gr=Kt(wn),fr=W(Kt(wn));if(wn.isNode()){switch(wn.pstyle("text-halign").value){case"left":fr.x=-gr.w;break;case"right":fr.x=0;break}switch(wn.pstyle("text-valign").value){case"top":fr.y=-gr.h;break;case"bottom":fr.y=0;break}}return fr},Kn=g.data.eleTxrCache=new zk(g,{getKey:at,doesEleInvalidateKey:et,drawElement:kt,getBoundingBox:Zt,getRotationPoint:fe,getRotationOffset:ze,allowEdgeTxrCaching:!1,allowParentTxrCaching:!1}),Sn=g.data.lblTxrCache=new zk(g,{getKey:lt,drawElement:Mt,getBoundingBox:Kt,getRotationPoint:Pe,getRotationOffset:Dn,isVisible:Vt}),Wn=g.data.slbTxrCache=new zk(g,{getKey:ft,drawElement:Dt,getBoundingBox:zt,getRotationPoint:pe,getRotationOffset:Ve,isVisible:Vt}),rr=g.data.tlbTxrCache=new zk(g,{getKey:At,drawElement:jt,getBoundingBox:ee,getRotationPoint:bn,getRotationOffset:En,isVisible:Vt}),vr=g.data.lyrTxrCache=new wtt(g);g.onUpdateEleCalcs(function(wn,gr){Kn.invalidateElements(gr),Sn.invalidateElements(gr),Wn.invalidateElements(gr),rr.invalidateElements(gr),vr.invalidateElements(gr);for(var fr=0;fr<gr.length;fr++){var Jr=gr[fr]._private;Jr.oldBackgroundTimestamp=Jr.backgroundTimestamp}});var ur=function(wn){for(var gr=0;gr<wn.length;gr++)vr.enqueueElementRefinement(wn[gr].ele)};Kn.onDequeue(ur),Sn.onDequeue(ur),Wn.onDequeue(ur),rr.onDequeue(ur)}wc.redrawHint=function(y,g){var x=this;switch(y){case"eles":x.data.canvasNeedsRedraw[wc.NODE]=g;break;case"drag":x.data.canvasNeedsRedraw[wc.DRAG]=g;break;case"select":x.data.canvasNeedsRedraw[wc.SELECT_BOX]=g;break}};var Mtt=typeof Path2D<"u";wc.path2dEnabled=function(y){if(y===void 0)return this.pathsEnabled;this.pathsEnabled=!!y},wc.usePaths=function(){return Mtt&&this.pathsEnabled},wc.setImgSmoothing=function(y,g){y.imageSmoothingEnabled!=null?y.imageSmoothingEnabled=g:(y.webkitImageSmoothingEnabled=g,y.mozImageSmoothingEnabled=g,y.msImageSmoothingEnabled=g)},wc.getImgSmoothing=function(y){return y.imageSmoothingEnabled!=null?y.imageSmoothingEnabled:y.webkitImageSmoothingEnabled||y.mozImageSmoothingEnabled||y.msImageSmoothingEnabled},wc.makeOffscreenCanvas=function(y,g){var x;return(typeof OffscreenCanvas>"u"?"undefined":f(OffscreenCanvas))!=="undefined"?x=new OffscreenCanvas(y,g):(x=document.createElement("canvas"),x.width=y,x.height=g),x},[_0,gv,pv,k9,hx,Gk,vg,I3,E9,Ltt].forEach(function(y){me(wc,y)});var fx=[{name:"null",impl:FB},{name:"base",impl:QL},{name:"canvas",impl:ppt}],wg=[{type:"layout",extensions:JJ},{type:"renderer",extensions:fx}],Tm={},rM={};function b1(y,g,x){var T=x,A=function(ee){Sc("Can not register `"+g+"` for `"+y+"` since `"+ee+"` already exists in the prototype and can not be overridden")};if(y==="core"){if(Fk.prototype[g])return A(g);Fk.prototype[g]=x}else if(y==="collection"){if(jf.prototype[g])return A(g);jf.prototype[g]=x}else if(y==="layout"){for(var D=function(ee){this.options=ee,x.call(this,ee),ht(this._private)||(this._private={}),this._private.cy=ee.cy,this._private.listeners=[],this.createEmitter()},O=D.prototype=Object.create(x.prototype),$=[],q=0;q<$.length;q++){var S=$[q];O[S]=O[S]||function(){return this}}O.start&&!O.run?O.run=function(){return this.start(),this}:!O.start&&O.run&&(O.start=function(){return this.run(),this});var G=x.prototype.stop;O.stop=function(){var zt=this.options;if(zt&&zt.animate){var ee=this.animations;if(ee)for(var Vt=0;Vt<ee.length;Vt++)ee[Vt].stop()}return G?G.call(this):this.emit("layoutstop"),this},O.destroy||(O.destroy=function(){return this}),O.cy=function(){return this._private.cy};var W=function(ee){return ee._private.cy},et={addEventFields:function(ee,Vt){Vt.layout=ee,Vt.cy=W(ee),Vt.target=ee},bubble:function(){return!0},parent:function(ee){return W(ee)}};me(O,{createEmitter:function(){return this._private.emitter=new JT(et,this),this},emitter:function(){return this._private.emitter},on:function(ee,Vt){return this.emitter().on(ee,Vt),this},one:function(ee,Vt){return this.emitter().one(ee,Vt),this},once:function(ee,Vt){return this.emitter().one(ee,Vt),this},removeListener:function(ee,Vt){return this.emitter().removeListener(ee,Vt),this},removeAllListeners:function(){return this.emitter().removeAllListeners(),this},emit:function(ee,Vt){return this.emitter().emit(ee,Vt),this}}),Ac.eventAliasesOn(O),T=D}else if(y==="renderer"&&g!=="null"&&g!=="base"){var at=dx("renderer","base"),lt=at.prototype,ft=x,At=x.prototype,kt=function(){at.apply(this,arguments),ft.apply(this,arguments)},Mt=kt.prototype;for(var Dt in lt){var jt=lt[Dt],Zt=At[Dt]!=null;if(Zt)return A(Dt);Mt[Dt]=jt}for(var Kt in At)Mt[Kt]=At[Kt];lt.clientFunctions.forEach(function(zt){Mt[zt]=Mt[zt]||function(){bl("Renderer does not implement `renderer."+zt+"()` on its prototype")}}),T=kt}else if(y==="__proto__"||y==="constructor"||y==="prototype")return bl(y+" is an illegal type to be registered, possibly lead to prototype pollutions");return Dr({map:Tm,keys:[y,g],value:T})}function dx(y,g){return nr({map:Tm,keys:[y,g]})}function Itt(y,g,x,T,A){return Dr({map:rM,keys:[y,g,x,T],value:A})}function tR(y,g,x,T){return nr({map:rM,keys:[y,g,x,T]})}var D3=function(){if(arguments.length===2)return dx.apply(null,arguments);if(arguments.length===3)return b1.apply(null,arguments);if(arguments.length===4)return tR.apply(null,arguments);if(arguments.length===5)return Itt.apply(null,arguments);bl("Invalid extension access syntax")};Fk.prototype.extension=D3,wg.forEach(function(y){y.extensions.forEach(function(g){b1(y.type,g.name,g.impl)})});var iM=function y(){if(!(this instanceof y))return new y;this.length=0},Cm=iM.prototype;Cm.instanceString=function(){return"stylesheet"},Cm.selector=function(y){var g=this.length++;return this[g]={selector:y,properties:[]},this},Cm.css=function(y,g){var x=this.length-1;if(mt(y))this[x].properties.push({name:y,value:g});else if(ht(y))for(var T=y,A=Object.keys(T),D=0;D<A.length;D++){var O=A[D],$=T[O];if($!=null){var q=d1.properties[O]||d1.properties[Me(O)];if(q!=null){var S=q.name,G=$;this[x].properties.push({name:S,value:G})}}}return this},Cm.style=Cm.css,Cm.generateStyle=function(y){var g=new d1(y);return this.appendToStyle(g)},Cm.appendToStyle=function(y){for(var g=0;g<this.length;g++){var x=this[g],T=x.selector,A=x.properties;y.selector(T);for(var D=0;D<A.length;D++){var O=A[D];y.css(O.name,O.value)}}return y};var eR="3.23.0",v1=function(g){if(g===void 0&&(g={}),ht(g))return new Fk(g);if(mt(g))return D3.apply(D3,arguments)};return v1.use=function(y){var g=Array.prototype.slice.call(arguments,1);return g.unshift(v1),y.apply(null,g),this},v1.warnings=function(y){return WP(y)},v1.version=eR,v1.stylesheet=v1.Stylesheet=iM,v1})})(Kjt);var oWe=Kjt.exports;const Yjt=B7(oWe);var Xjt={exports:{}},Vgt={exports:{}},Ugt={exports:{}},Qjt;function cWe(){return Qjt||(Qjt=1,function(i,a){(function(p,v){i.exports=v()})(d0,function(){return function(f){var p={};function v(m){if(p[m])return p[m].exports;var b=p[m]={i:m,l:!1,exports:{}};return f[m].call(b.exports,b,b.exports,v),b.l=!0,b.exports}return v.m=f,v.c=p,v.i=function(m){return m},v.d=function(m,b,E){v.o(m,b)||Object.defineProperty(m,b,{configurable:!1,enumerable:!0,get:E})},v.n=function(m){var b=m&&m.__esModule?function(){return m.default}:function(){return m};return v.d(b,"a",b),b},v.o=function(m,b){return Object.prototype.hasOwnProperty.call(m,b)},v.p="",v(v.s=26)}([function(f,p,v){function m(){}m.QUALITY=1,m.DEFAULT_CREATE_BENDS_AS_NEEDED=!1,m.DEFAULT_INCREMENTAL=!1,m.DEFAULT_ANIMATION_ON_LAYOUT=!0,m.DEFAULT_ANIMATION_DURING_LAYOUT=!1,m.DEFAULT_ANIMATION_PERIOD=50,m.DEFAULT_UNIFORM_LEAF_NODE_SIZES=!1,m.DEFAULT_GRAPH_MARGIN=15,m.NODE_DIMENSIONS_INCLUDE_LABELS=!1,m.SIMPLE_NODE_SIZE=40,m.SIMPLE_NODE_HALF_SIZE=m.SIMPLE_NODE_SIZE/2,m.EMPTY_COMPOUND_NODE_SIZE=40,m.MIN_EDGE_LENGTH=1,m.WORLD_BOUNDARY=1e6,m.INITIAL_WORLD_BOUNDARY=m.WORLD_BOUNDARY/1e3,m.WORLD_CENTER_X=1200,m.WORLD_CENTER_Y=900,f.exports=m},function(f,p,v){var m=v(2),b=v(8),E=v(9);function _(N,B,j){m.call(this,j),this.isOverlapingSourceAndTarget=!1,this.vGraphObject=j,this.bendpoints=[],this.source=N,this.target=B}_.prototype=Object.create(m.prototype);for(var L in m)_[L]=m[L];_.prototype.getSource=function(){return this.source},_.prototype.getTarget=function(){return this.target},_.prototype.isInterGraph=function(){return this.isInterGraph},_.prototype.getLength=function(){return this.length},_.prototype.isOverlapingSourceAndTarget=function(){return this.isOverlapingSourceAndTarget},_.prototype.getBendpoints=function(){return this.bendpoints},_.prototype.getLca=function(){return this.lca},_.prototype.getSourceInLca=function(){return this.sourceInLca},_.prototype.getTargetInLca=function(){return this.targetInLca},_.prototype.getOtherEnd=function(N){if(this.source===N)return this.target;if(this.target===N)return this.source;throw"Node is not incident with this edge"},_.prototype.getOtherEndInGraph=function(N,B){for(var j=this.getOtherEnd(N),R=B.getGraphManager().getRoot();;){if(j.getOwner()==B)return j;if(j.getOwner()==R)break;j=j.getOwner().getParent()}return null},_.prototype.updateLength=function(){var N=new Array(4);this.isOverlapingSourceAndTarget=b.getIntersection(this.target.getRect(),this.source.getRect(),N),this.isOverlapingSourceAndTarget||(this.lengthX=N[0]-N[2],this.lengthY=N[1]-N[3],Math.abs(this.lengthX)<1&&(this.lengthX=E.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=E.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY))},_.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=E.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=E.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY)},f.exports=_},function(f,p,v){function m(b){this.vGraphObject=b}f.exports=m},function(f,p,v){var m=v(2),b=v(10),E=v(13),_=v(0),L=v(16),N=v(4);function B(R,z,K,it){K==null&&it==null&&(it=z),m.call(this,it),R.graphManager!=null&&(R=R.graphManager),this.estimatedSize=b.MIN_VALUE,this.inclusionTreeDepth=b.MAX_VALUE,this.vGraphObject=it,this.edges=[],this.graphManager=R,K!=null&&z!=null?this.rect=new E(z.x,z.y,K.width,K.height):this.rect=new E}B.prototype=Object.create(m.prototype);for(var j in m)B[j]=m[j];B.prototype.getEdges=function(){return this.edges},B.prototype.getChild=function(){return this.child},B.prototype.getOwner=function(){return this.owner},B.prototype.getWidth=function(){return this.rect.width},B.prototype.setWidth=function(R){this.rect.width=R},B.prototype.getHeight=function(){return this.rect.height},B.prototype.setHeight=function(R){this.rect.height=R},B.prototype.getCenterX=function(){return this.rect.x+this.rect.width/2},B.prototype.getCenterY=function(){return this.rect.y+this.rect.height/2},B.prototype.getCenter=function(){return new N(this.rect.x+this.rect.width/2,this.rect.y+this.rect.height/2)},B.prototype.getLocation=function(){return new N(this.rect.x,this.rect.y)},B.prototype.getRect=function(){return this.rect},B.prototype.getDiagonal=function(){return Math.sqrt(this.rect.width*this.rect.width+this.rect.height*this.rect.height)},B.prototype.getHalfTheDiagonal=function(){return Math.sqrt(this.rect.height*this.rect.height+this.rect.width*this.rect.width)/2},B.prototype.setRect=function(R,z){this.rect.x=R.x,this.rect.y=R.y,this.rect.width=z.width,this.rect.height=z.height},B.prototype.setCenter=function(R,z){this.rect.x=R-this.rect.width/2,this.rect.y=z-this.rect.height/2},B.prototype.setLocation=function(R,z){this.rect.x=R,this.rect.y=z},B.prototype.moveBy=function(R,z){this.rect.x+=R,this.rect.y+=z},B.prototype.getEdgeListToNode=function(R){var z=[],K=this;return K.edges.forEach(function(it){if(it.target==R){if(it.source!=K)throw"Incorrect edge source!";z.push(it)}}),z},B.prototype.getEdgesBetween=function(R){var z=[],K=this;return K.edges.forEach(function(it){if(!(it.source==K||it.target==K))throw"Incorrect edge source and/or target";(it.target==R||it.source==R)&&z.push(it)}),z},B.prototype.getNeighborsList=function(){var R=new Set,z=this;return z.edges.forEach(function(K){if(K.source==z)R.add(K.target);else{if(K.target!=z)throw"Incorrect incidency!";R.add(K.source)}}),R},B.prototype.withChildren=function(){var R=new Set,z,K;if(R.add(this),this.child!=null)for(var it=this.child.getNodes(),st=0;st<it.length;st++)z=it[st],K=z.withChildren(),K.forEach(function(ut){R.add(ut)});return R},B.prototype.getNoOfChildren=function(){var R=0,z;if(this.child==null)R=1;else for(var K=this.child.getNodes(),it=0;it<K.length;it++)z=K[it],R+=z.getNoOfChildren();return R==0&&(R=1),R},B.prototype.getEstimatedSize=function(){if(this.estimatedSize==b.MIN_VALUE)throw"assert failed";return this.estimatedSize},B.prototype.calcEstimatedSize=function(){return this.child==null?this.estimatedSize=(this.rect.width+this.rect.height)/2:(this.estimatedSize=this.child.calcEstimatedSize(),this.rect.width=this.estimatedSize,this.rect.height=this.estimatedSize,this.estimatedSize)},B.prototype.scatter=function(){var R,z,K=-_.INITIAL_WORLD_BOUNDARY,it=_.INITIAL_WORLD_BOUNDARY;R=_.WORLD_CENTER_X+L.nextDouble()*(it-K)+K;var st=-_.INITIAL_WORLD_BOUNDARY,ut=_.INITIAL_WORLD_BOUNDARY;z=_.WORLD_CENTER_Y+L.nextDouble()*(ut-st)+st,this.rect.x=R,this.rect.y=z},B.prototype.updateBounds=function(){if(this.getChild()==null)throw"assert failed";if(this.getChild().getNodes().length!=0){var R=this.getChild();if(R.updateBounds(!0),this.rect.x=R.getLeft(),this.rect.y=R.getTop(),this.setWidth(R.getRight()-R.getLeft()),this.setHeight(R.getBottom()-R.getTop()),_.NODE_DIMENSIONS_INCLUDE_LABELS){var z=R.getRight()-R.getLeft(),K=R.getBottom()-R.getTop();this.labelWidth>z&&(this.rect.x-=(this.labelWidth-z)/2,this.setWidth(this.labelWidth)),this.labelHeight>K&&(this.labelPos=="center"?this.rect.y-=(this.labelHeight-K)/2:this.labelPos=="top"&&(this.rect.y-=this.labelHeight-K),this.setHeight(this.labelHeight))}}},B.prototype.getInclusionTreeDepth=function(){if(this.inclusionTreeDepth==b.MAX_VALUE)throw"assert failed";return this.inclusionTreeDepth},B.prototype.transform=function(R){var z=this.rect.x;z>_.WORLD_BOUNDARY?z=_.WORLD_BOUNDARY:z<-_.WORLD_BOUNDARY&&(z=-_.WORLD_BOUNDARY);var K=this.rect.y;K>_.WORLD_BOUNDARY?K=_.WORLD_BOUNDARY:K<-_.WORLD_BOUNDARY&&(K=-_.WORLD_BOUNDARY);var it=new N(z,K),st=R.inverseTransformPoint(it);this.setLocation(st.x,st.y)},B.prototype.getLeft=function(){return this.rect.x},B.prototype.getRight=function(){return this.rect.x+this.rect.width},B.prototype.getTop=function(){return this.rect.y},B.prototype.getBottom=function(){return this.rect.y+this.rect.height},B.prototype.getParent=function(){return this.owner==null?null:this.owner.getParent()},f.exports=B},function(f,p,v){function m(b,E){b==null&&E==null?(this.x=0,this.y=0):(this.x=b,this.y=E)}m.prototype.getX=function(){return this.x},m.prototype.getY=function(){return this.y},m.prototype.setX=function(b){this.x=b},m.prototype.setY=function(b){this.y=b},m.prototype.getDifference=function(b){return new DimensionD(this.x-b.x,this.y-b.y)},m.prototype.getCopy=function(){return new m(this.x,this.y)},m.prototype.translate=function(b){return this.x+=b.width,this.y+=b.height,this},f.exports=m},function(f,p,v){var m=v(2),b=v(10),E=v(0),_=v(6),L=v(3),N=v(1),B=v(13),j=v(12),R=v(11);function z(it,st,ut){m.call(this,ut),this.estimatedSize=b.MIN_VALUE,this.margin=E.DEFAULT_GRAPH_MARGIN,this.edges=[],this.nodes=[],this.isConnected=!1,this.parent=it,st!=null&&st instanceof _?this.graphManager=st:st!=null&&st instanceof Layout&&(this.graphManager=st.graphManager)}z.prototype=Object.create(m.prototype);for(var K in m)z[K]=m[K];z.prototype.getNodes=function(){return this.nodes},z.prototype.getEdges=function(){return this.edges},z.prototype.getGraphManager=function(){return this.graphManager},z.prototype.getParent=function(){return this.parent},z.prototype.getLeft=function(){return this.left},z.prototype.getRight=function(){return this.right},z.prototype.getTop=function(){return this.top},z.prototype.getBottom=function(){return this.bottom},z.prototype.isConnected=function(){return this.isConnected},z.prototype.add=function(it,st,ut){if(st==null&&ut==null){var bt=it;if(this.graphManager==null)throw"Graph has no graph mgr!";if(this.getNodes().indexOf(bt)>-1)throw"Node already in graph!";return bt.owner=this,this.getNodes().push(bt),bt}else{var mt=it;if(!(this.getNodes().indexOf(st)>-1&&this.getNodes().indexOf(ut)>-1))throw"Source or target not in graph!";if(!(st.owner==ut.owner&&st.owner==this))throw"Both owners must be this graph!";return st.owner!=ut.owner?null:(mt.source=st,mt.target=ut,mt.isInterGraph=!1,this.getEdges().push(mt),st.edges.push(mt),ut!=st&&ut.edges.push(mt),mt)}},z.prototype.remove=function(it){var st=it;if(it instanceof L){if(st==null)throw"Node is null!";if(!(st.owner!=null&&st.owner==this))throw"Owner graph is invalid!";if(this.graphManager==null)throw"Owner graph manager is invalid!";for(var ut=st.edges.slice(),bt,mt=ut.length,yt=0;yt<mt;yt++)bt=ut[yt],bt.isInterGraph?this.graphManager.remove(bt):bt.source.owner.remove(bt);var dt=this.nodes.indexOf(st);if(dt==-1)throw"Node not in owner node list!";this.nodes.splice(dt,1)}else if(it instanceof N){var bt=it;if(bt==null)throw"Edge is null!";if(!(bt.source!=null&&bt.target!=null))throw"Source and/or target is null!";if(!(bt.source.owner!=null&&bt.target.owner!=null&&bt.source.owner==this&&bt.target.owner==this))throw"Source and/or target owner is invalid!";var ht=bt.source.edges.indexOf(bt),wt=bt.target.edges.indexOf(bt);if(!(ht>-1&&wt>-1))throw"Source and/or target doesn't know this edge!";bt.source.edges.splice(ht,1),bt.target!=bt.source&&bt.target.edges.splice(wt,1);var dt=bt.source.owner.getEdges().indexOf(bt);if(dt==-1)throw"Not in owner's edge list!";bt.source.owner.getEdges().splice(dt,1)}},z.prototype.updateLeftTop=function(){for(var it=b.MAX_VALUE,st=b.MAX_VALUE,ut,bt,mt,yt=this.getNodes(),dt=yt.length,ht=0;ht<dt;ht++){var wt=yt[ht];ut=wt.getTop(),bt=wt.getLeft(),it>ut&&(it=ut),st>bt&&(st=bt)}return it==b.MAX_VALUE?null:(yt[0].getParent().paddingLeft!=null?mt=yt[0].getParent().paddingLeft:mt=this.margin,this.left=st-mt,this.top=it-mt,new j(this.left,this.top))},z.prototype.updateBounds=function(it){for(var st=b.MAX_VALUE,ut=-b.MAX_VALUE,bt=b.MAX_VALUE,mt=-b.MAX_VALUE,yt,dt,ht,wt,X,pt=this.nodes,U=pt.length,xt=0;xt<U;xt++){var nt=pt[xt];it&&nt.child!=null&&nt.updateBounds(),yt=nt.getLeft(),dt=nt.getRight(),ht=nt.getTop(),wt=nt.getBottom(),st>yt&&(st=yt),ut<dt&&(ut=dt),bt>ht&&(bt=ht),mt<wt&&(mt=wt)}var Ot=new B(st,bt,ut-st,mt-bt);st==b.MAX_VALUE&&(this.left=this.parent.getLeft(),this.right=this.parent.getRight(),this.top=this.parent.getTop(),this.bottom=this.parent.getBottom()),pt[0].getParent().paddingLeft!=null?X=pt[0].getParent().paddingLeft:X=this.margin,this.left=Ot.x-X,this.right=Ot.x+Ot.width+X,this.top=Ot.y-X,this.bottom=Ot.y+Ot.height+X},z.calculateBounds=function(it){for(var st=b.MAX_VALUE,ut=-b.MAX_VALUE,bt=b.MAX_VALUE,mt=-b.MAX_VALUE,yt,dt,ht,wt,X=it.length,pt=0;pt<X;pt++){var U=it[pt];yt=U.getLeft(),dt=U.getRight(),ht=U.getTop(),wt=U.getBottom(),st>yt&&(st=yt),ut<dt&&(ut=dt),bt>ht&&(bt=ht),mt<wt&&(mt=wt)}var xt=new B(st,bt,ut-st,mt-bt);return xt},z.prototype.getInclusionTreeDepth=function(){return this==this.graphManager.getRoot()?1:this.parent.getInclusionTreeDepth()},z.prototype.getEstimatedSize=function(){if(this.estimatedSize==b.MIN_VALUE)throw"assert failed";return this.estimatedSize},z.prototype.calcEstimatedSize=function(){for(var it=0,st=this.nodes,ut=st.length,bt=0;bt<ut;bt++){var mt=st[bt];it+=mt.calcEstimatedSize()}return it==0?this.estimatedSize=E.EMPTY_COMPOUND_NODE_SIZE:this.estimatedSize=it/Math.sqrt(this.nodes.length),this.estimatedSize},z.prototype.updateConnected=function(){var it=this;if(this.nodes.length==0){this.isConnected=!0;return}var st=new R,ut=new Set,bt=this.nodes[0],mt,yt,dt=bt.withChildren();for(dt.forEach(function(xt){st.push(xt),ut.add(xt)});st.length!==0;){bt=st.shift(),mt=bt.getEdges();for(var ht=mt.length,wt=0;wt<ht;wt++){var X=mt[wt];if(yt=X.getOtherEndInGraph(bt,this),yt!=null&&!ut.has(yt)){var pt=yt.withChildren();pt.forEach(function(xt){st.push(xt),ut.add(xt)})}}}if(this.isConnected=!1,ut.size>=this.nodes.length){var U=0;ut.forEach(function(xt){xt.owner==it&&U++}),U==this.nodes.length&&(this.isConnected=!0)}},f.exports=z},function(f,p,v){var m,b=v(1);function E(_){m=v(5),this.layout=_,this.graphs=[],this.edges=[]}E.prototype.addRoot=function(){var _=this.layout.newGraph(),L=this.layout.newNode(null),N=this.add(_,L);return this.setRootGraph(N),this.rootGraph},E.prototype.add=function(_,L,N,B,j){if(N==null&&B==null&&j==null){if(_==null)throw"Graph is null!";if(L==null)throw"Parent node is null!";if(this.graphs.indexOf(_)>-1)throw"Graph already in this graph mgr!";if(this.graphs.push(_),_.parent!=null)throw"Already has a parent!";if(L.child!=null)throw"Already has a child!";return _.parent=L,L.child=_,_}else{j=N,B=L,N=_;var R=B.getOwner(),z=j.getOwner();if(!(R!=null&&R.getGraphManager()==this))throw"Source not in this graph mgr!";if(!(z!=null&&z.getGraphManager()==this))throw"Target not in this graph mgr!";if(R==z)return N.isInterGraph=!1,R.add(N,B,j);if(N.isInterGraph=!0,N.source=B,N.target=j,this.edges.indexOf(N)>-1)throw"Edge already in inter-graph edge list!";if(this.edges.push(N),!(N.source!=null&&N.target!=null))throw"Edge source and/or target is null!";if(!(N.source.edges.indexOf(N)==-1&&N.target.edges.indexOf(N)==-1))throw"Edge already in source and/or target incidency list!";return N.source.edges.push(N),N.target.edges.push(N),N}},E.prototype.remove=function(_){if(_ instanceof m){var L=_;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 N=[];N=N.concat(L.getEdges());for(var B,j=N.length,R=0;R<j;R++)B=N[R],L.remove(B);var z=[];z=z.concat(L.getNodes());var K;j=z.length;for(var R=0;R<j;R++)K=z[R],L.remove(K);L==this.rootGraph&&this.setRootGraph(null);var it=this.graphs.indexOf(L);this.graphs.splice(it,1),L.parent=null}else if(_ instanceof b){if(B=_,B==null)throw"Edge is null!";if(!B.isInterGraph)throw"Not an inter-graph edge!";if(!(B.source!=null&&B.target!=null))throw"Source and/or target is null!";if(!(B.source.edges.indexOf(B)!=-1&&B.target.edges.indexOf(B)!=-1))throw"Source and/or target doesn't know this edge!";var it=B.source.edges.indexOf(B);if(B.source.edges.splice(it,1),it=B.target.edges.indexOf(B),B.target.edges.splice(it,1),!(B.source.owner!=null&&B.source.owner.getGraphManager()!=null))throw"Edge owner graph or owner graph manager is null!";if(B.source.owner.getGraphManager().edges.indexOf(B)==-1)throw"Not in owner graph manager's edge list!";var it=B.source.owner.getGraphManager().edges.indexOf(B);B.source.owner.getGraphManager().edges.splice(it,1)}},E.prototype.updateBounds=function(){this.rootGraph.updateBounds(!0)},E.prototype.getGraphs=function(){return this.graphs},E.prototype.getAllNodes=function(){if(this.allNodes==null){for(var _=[],L=this.getGraphs(),N=L.length,B=0;B<N;B++)_=_.concat(L[B].getNodes());this.allNodes=_}return this.allNodes},E.prototype.resetAllNodes=function(){this.allNodes=null},E.prototype.resetAllEdges=function(){this.allEdges=null},E.prototype.resetAllNodesToApplyGravitation=function(){this.allNodesToApplyGravitation=null},E.prototype.getAllEdges=function(){if(this.allEdges==null){var _=[],L=this.getGraphs();L.length;for(var N=0;N<L.length;N++)_=_.concat(L[N].getEdges());_=_.concat(this.edges),this.allEdges=_}return this.allEdges},E.prototype.getAllNodesToApplyGravitation=function(){return this.allNodesToApplyGravitation},E.prototype.setAllNodesToApplyGravitation=function(_){if(this.allNodesToApplyGravitation!=null)throw"assert failed";this.allNodesToApplyGravitation=_},E.prototype.getRoot=function(){return this.rootGraph},E.prototype.setRootGraph=function(_){if(_.getGraphManager()!=this)throw"Root not in this graph mgr!";this.rootGraph=_,_.parent==null&&(_.parent=this.layout.newNode("Root node"))},E.prototype.getLayout=function(){return this.layout},E.prototype.isOneAncestorOfOther=function(_,L){if(!(_!=null&&L!=null))throw"assert failed";if(_==L)return!0;var N=_.getOwner(),B;do{if(B=N.getParent(),B==null)break;if(B==L)return!0;if(N=B.getOwner(),N==null)break}while(!0);N=L.getOwner();do{if(B=N.getParent(),B==null)break;if(B==_)return!0;if(N=B.getOwner(),N==null)break}while(!0);return!1},E.prototype.calcLowestCommonAncestors=function(){for(var _,L,N,B,j,R=this.getAllEdges(),z=R.length,K=0;K<z;K++){if(_=R[K],L=_.source,N=_.target,_.lca=null,_.sourceInLca=L,_.targetInLca=N,L==N){_.lca=L.getOwner();continue}for(B=L.getOwner();_.lca==null;){for(_.targetInLca=N,j=N.getOwner();_.lca==null;){if(j==B){_.lca=j;break}if(j==this.rootGraph)break;if(_.lca!=null)throw"assert failed";_.targetInLca=j.getParent(),j=_.targetInLca.getOwner()}if(B==this.rootGraph)break;_.lca==null&&(_.sourceInLca=B.getParent(),B=_.sourceInLca.getOwner())}if(_.lca==null)throw"assert failed"}},E.prototype.calcLowestCommonAncestor=function(_,L){if(_==L)return _.getOwner();var N=_.getOwner();do{if(N==null)break;var B=L.getOwner();do{if(B==null)break;if(B==N)return B;B=B.getParent().getOwner()}while(!0);N=N.getParent().getOwner()}while(!0);return N},E.prototype.calcInclusionTreeDepths=function(_,L){_==null&&L==null&&(_=this.rootGraph,L=1);for(var N,B=_.getNodes(),j=B.length,R=0;R<j;R++)N=B[R],N.inclusionTreeDepth=L,N.child!=null&&this.calcInclusionTreeDepths(N.child,L+1)},E.prototype.includesInvalidEdge=function(){for(var _,L=this.edges.length,N=0;N<L;N++)if(_=this.edges[N],this.isOneAncestorOfOther(_.source,_.target))return!0;return!1},f.exports=E},function(f,p,v){var m=v(0);function b(){}for(var E in m)b[E]=m[E];b.MAX_ITERATIONS=2500,b.DEFAULT_EDGE_LENGTH=50,b.DEFAULT_SPRING_STRENGTH=.45,b.DEFAULT_REPULSION_STRENGTH=4500,b.DEFAULT_GRAVITY_STRENGTH=.4,b.DEFAULT_COMPOUND_GRAVITY_STRENGTH=1,b.DEFAULT_GRAVITY_RANGE_FACTOR=3.8,b.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=1.5,b.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION=!0,b.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION=!0,b.DEFAULT_COOLING_FACTOR_INCREMENTAL=.3,b.COOLING_ADAPTATION_FACTOR=.33,b.ADAPTATION_LOWER_NODE_LIMIT=1e3,b.ADAPTATION_UPPER_NODE_LIMIT=5e3,b.MAX_NODE_DISPLACEMENT_INCREMENTAL=100,b.MAX_NODE_DISPLACEMENT=b.MAX_NODE_DISPLACEMENT_INCREMENTAL*3,b.MIN_REPULSION_DIST=b.DEFAULT_EDGE_LENGTH/10,b.CONVERGENCE_CHECK_PERIOD=100,b.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=.1,b.MIN_EDGE_LENGTH=1,b.GRID_CALCULATION_CHECK_PERIOD=10,f.exports=b},function(f,p,v){var m=v(12);function b(){}b.calcSeparationAmount=function(E,_,L,N){if(!E.intersects(_))throw"assert failed";var B=new Array(2);this.decideDirectionsForOverlappingNodes(E,_,B),L[0]=Math.min(E.getRight(),_.getRight())-Math.max(E.x,_.x),L[1]=Math.min(E.getBottom(),_.getBottom())-Math.max(E.y,_.y),E.getX()<=_.getX()&&E.getRight()>=_.getRight()?L[0]+=Math.min(_.getX()-E.getX(),E.getRight()-_.getRight()):_.getX()<=E.getX()&&_.getRight()>=E.getRight()&&(L[0]+=Math.min(E.getX()-_.getX(),_.getRight()-E.getRight())),E.getY()<=_.getY()&&E.getBottom()>=_.getBottom()?L[1]+=Math.min(_.getY()-E.getY(),E.getBottom()-_.getBottom()):_.getY()<=E.getY()&&_.getBottom()>=E.getBottom()&&(L[1]+=Math.min(E.getY()-_.getY(),_.getBottom()-E.getBottom()));var j=Math.abs((_.getCenterY()-E.getCenterY())/(_.getCenterX()-E.getCenterX()));_.getCenterY()===E.getCenterY()&&_.getCenterX()===E.getCenterX()&&(j=1);var R=j*L[0],z=L[1]/j;L[0]<z?z=L[0]:R=L[1],L[0]=-1*B[0]*(z/2+N),L[1]=-1*B[1]*(R/2+N)},b.decideDirectionsForOverlappingNodes=function(E,_,L){E.getCenterX()<_.getCenterX()?L[0]=-1:L[0]=1,E.getCenterY()<_.getCenterY()?L[1]=-1:L[1]=1},b.getIntersection2=function(E,_,L){var N=E.getCenterX(),B=E.getCenterY(),j=_.getCenterX(),R=_.getCenterY();if(E.intersects(_))return L[0]=N,L[1]=B,L[2]=j,L[3]=R,!0;var z=E.getX(),K=E.getY(),it=E.getRight(),st=E.getX(),ut=E.getBottom(),bt=E.getRight(),mt=E.getWidthHalf(),yt=E.getHeightHalf(),dt=_.getX(),ht=_.getY(),wt=_.getRight(),X=_.getX(),pt=_.getBottom(),U=_.getRight(),xt=_.getWidthHalf(),nt=_.getHeightHalf(),Ot=!1,Nt=!1;if(N===j){if(B>R)return L[0]=N,L[1]=K,L[2]=j,L[3]=pt,!1;if(B<R)return L[0]=N,L[1]=ut,L[2]=j,L[3]=ht,!1}else if(B===R){if(N>j)return L[0]=z,L[1]=B,L[2]=wt,L[3]=R,!1;if(N<j)return L[0]=it,L[1]=B,L[2]=dt,L[3]=R,!1}else{var qt=E.height/E.width,Ct=_.height/_.width,Z=(R-B)/(j-N),Tt=void 0,Ht=void 0,It=void 0,Ft=void 0,ke=void 0,pn=void 0;if(-qt===Z?N>j?(L[0]=st,L[1]=ut,Ot=!0):(L[0]=it,L[1]=K,Ot=!0):qt===Z&&(N>j?(L[0]=z,L[1]=K,Ot=!0):(L[0]=bt,L[1]=ut,Ot=!0)),-Ct===Z?j>N?(L[2]=X,L[3]=pt,Nt=!0):(L[2]=wt,L[3]=ht,Nt=!0):Ct===Z&&(j>N?(L[2]=dt,L[3]=ht,Nt=!0):(L[2]=U,L[3]=pt,Nt=!0)),Ot&&Nt)return!1;if(N>j?B>R?(Tt=this.getCardinalDirection(qt,Z,4),Ht=this.getCardinalDirection(Ct,Z,2)):(Tt=this.getCardinalDirection(-qt,Z,3),Ht=this.getCardinalDirection(-Ct,Z,1)):B>R?(Tt=this.getCardinalDirection(-qt,Z,1),Ht=this.getCardinalDirection(-Ct,Z,3)):(Tt=this.getCardinalDirection(qt,Z,2),Ht=this.getCardinalDirection(Ct,Z,4)),!Ot)switch(Tt){case 1:Ft=K,It=N+-yt/Z,L[0]=It,L[1]=Ft;break;case 2:It=bt,Ft=B+mt*Z,L[0]=It,L[1]=Ft;break;case 3:Ft=ut,It=N+yt/Z,L[0]=It,L[1]=Ft;break;case 4:It=st,Ft=B+-mt*Z,L[0]=It,L[1]=Ft;break}if(!Nt)switch(Ht){case 1:pn=ht,ke=j+-nt/Z,L[2]=ke,L[3]=pn;break;case 2:ke=U,pn=R+xt*Z,L[2]=ke,L[3]=pn;break;case 3:pn=pt,ke=j+nt/Z,L[2]=ke,L[3]=pn;break;case 4:ke=X,pn=R+-xt*Z,L[2]=ke,L[3]=pn;break}}return!1},b.getCardinalDirection=function(E,_,L){return E>_?L:1+L%4},b.getIntersection=function(E,_,L,N){if(N==null)return this.getIntersection2(E,_,L);var B=E.x,j=E.y,R=_.x,z=_.y,K=L.x,it=L.y,st=N.x,ut=N.y,bt=void 0,mt=void 0,yt=void 0,dt=void 0,ht=void 0,wt=void 0,X=void 0,pt=void 0,U=void 0;return yt=z-j,ht=B-R,X=R*j-B*z,dt=ut-it,wt=K-st,pt=st*it-K*ut,U=yt*wt-dt*ht,U===0?null:(bt=(ht*pt-wt*X)/U,mt=(dt*X-yt*pt)/U,new m(bt,mt))},b.angleOfVector=function(E,_,L,N){var B=void 0;return E!==L?(B=Math.atan((N-_)/(L-E)),L<E?B+=Math.PI:N<_&&(B+=this.TWO_PI)):N<_?B=this.ONE_AND_HALF_PI:B=this.HALF_PI,B},b.doIntersect=function(E,_,L,N){var B=E.x,j=E.y,R=_.x,z=_.y,K=L.x,it=L.y,st=N.x,ut=N.y,bt=(R-B)*(ut-it)-(st-K)*(z-j);if(bt===0)return!1;var mt=((ut-it)*(st-B)+(K-st)*(ut-j))/bt,yt=((j-z)*(st-B)+(R-B)*(ut-j))/bt;return 0<mt&&mt<1&&0<yt&&yt<1},b.HALF_PI=.5*Math.PI,b.ONE_AND_HALF_PI=1.5*Math.PI,b.TWO_PI=2*Math.PI,b.THREE_PI=3*Math.PI,f.exports=b},function(f,p,v){function m(){}m.sign=function(b){return b>0?1:b<0?-1:0},m.floor=function(b){return b<0?Math.ceil(b):Math.floor(b)},m.ceil=function(b){return b<0?Math.floor(b):Math.ceil(b)},f.exports=m},function(f,p,v){function m(){}m.MAX_VALUE=2147483647,m.MIN_VALUE=-2147483648,f.exports=m},function(f,p,v){var m=function(){function B(j,R){for(var z=0;z<R.length;z++){var K=R[z];K.enumerable=K.enumerable||!1,K.configurable=!0,"value"in K&&(K.writable=!0),Object.defineProperty(j,K.key,K)}}return function(j,R,z){return R&&B(j.prototype,R),z&&B(j,z),j}}();function b(B,j){if(!(B instanceof j))throw new TypeError("Cannot call a class as a function")}var E=function(j){return{value:j,next:null,prev:null}},_=function(j,R,z,K){return j!==null?j.next=R:K.head=R,z!==null?z.prev=R:K.tail=R,R.prev=j,R.next=z,K.length++,R},L=function(j,R){var z=j.prev,K=j.next;return z!==null?z.next=K:R.head=K,K!==null?K.prev=z:R.tail=z,j.prev=j.next=null,R.length--,j},N=function(){function B(j){var R=this;b(this,B),this.length=0,this.head=null,this.tail=null,j!=null&&j.forEach(function(z){return R.push(z)})}return m(B,[{key:"size",value:function(){return this.length}},{key:"insertBefore",value:function(R,z){return _(z.prev,E(R),z,this)}},{key:"insertAfter",value:function(R,z){return _(z,E(R),z.next,this)}},{key:"insertNodeBefore",value:function(R,z){return _(z.prev,R,z,this)}},{key:"insertNodeAfter",value:function(R,z){return _(z,R,z.next,this)}},{key:"push",value:function(R){return _(this.tail,E(R),null,this)}},{key:"unshift",value:function(R){return _(null,E(R),this.head,this)}},{key:"remove",value:function(R){return L(R,this)}},{key:"pop",value:function(){return L(this.tail,this).value}},{key:"popNode",value:function(){return L(this.tail,this)}},{key:"shift",value:function(){return L(this.head,this).value}},{key:"shiftNode",value:function(){return L(this.head,this)}},{key:"get_object_at",value:function(R){if(R<=this.length()){for(var z=1,K=this.head;z<R;)K=K.next,z++;return K.value}}},{key:"set_object_at",value:function(R,z){if(R<=this.length()){for(var K=1,it=this.head;K<R;)it=it.next,K++;it.value=z}}}]),B}();f.exports=N},function(f,p,v){function m(b,E,_){this.x=null,this.y=null,b==null&&E==null&&_==null?(this.x=0,this.y=0):typeof b=="number"&&typeof E=="number"&&_==null?(this.x=b,this.y=E):b.constructor.name=="Point"&&E==null&&_==null&&(_=b,this.x=_.x,this.y=_.y)}m.prototype.getX=function(){return this.x},m.prototype.getY=function(){return this.y},m.prototype.getLocation=function(){return new m(this.x,this.y)},m.prototype.setLocation=function(b,E,_){b.constructor.name=="Point"&&E==null&&_==null?(_=b,this.setLocation(_.x,_.y)):typeof b=="number"&&typeof E=="number"&&_==null&&(parseInt(b)==b&&parseInt(E)==E?this.move(b,E):(this.x=Math.floor(b+.5),this.y=Math.floor(E+.5)))},m.prototype.move=function(b,E){this.x=b,this.y=E},m.prototype.translate=function(b,E){this.x+=b,this.y+=E},m.prototype.equals=function(b){if(b.constructor.name=="Point"){var E=b;return this.x==E.x&&this.y==E.y}return this==b},m.prototype.toString=function(){return new m().constructor.name+"[x="+this.x+",y="+this.y+"]"},f.exports=m},function(f,p,v){function m(b,E,_,L){this.x=0,this.y=0,this.width=0,this.height=0,b!=null&&E!=null&&_!=null&&L!=null&&(this.x=b,this.y=E,this.width=_,this.height=L)}m.prototype.getX=function(){return this.x},m.prototype.setX=function(b){this.x=b},m.prototype.getY=function(){return this.y},m.prototype.setY=function(b){this.y=b},m.prototype.getWidth=function(){return this.width},m.prototype.setWidth=function(b){this.width=b},m.prototype.getHeight=function(){return this.height},m.prototype.setHeight=function(b){this.height=b},m.prototype.getRight=function(){return this.x+this.width},m.prototype.getBottom=function(){return this.y+this.height},m.prototype.intersects=function(b){return!(this.getRight()<b.x||this.getBottom()<b.y||b.getRight()<this.x||b.getBottom()<this.y)},m.prototype.getCenterX=function(){return this.x+this.width/2},m.prototype.getMinX=function(){return this.getX()},m.prototype.getMaxX=function(){return this.getX()+this.width},m.prototype.getCenterY=function(){return this.y+this.height/2},m.prototype.getMinY=function(){return this.getY()},m.prototype.getMaxY=function(){return this.getY()+this.height},m.prototype.getWidthHalf=function(){return this.width/2},m.prototype.getHeightHalf=function(){return this.height/2},f.exports=m},function(f,p,v){var m=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};function b(){}b.lastID=0,b.createID=function(E){return b.isPrimitive(E)?E:(E.uniqueID!=null||(E.uniqueID=b.getString(),b.lastID++),E.uniqueID)},b.getString=function(E){return E==null&&(E=b.lastID),"Object#"+E},b.isPrimitive=function(E){var _=typeof E>"u"?"undefined":m(E);return E==null||_!="object"&&_!="function"},f.exports=b},function(f,p,v){function m(K){if(Array.isArray(K)){for(var it=0,st=Array(K.length);it<K.length;it++)st[it]=K[it];return st}else return Array.from(K)}var b=v(0),E=v(6),_=v(3),L=v(1),N=v(5),B=v(4),j=v(17),R=v(27);function z(K){R.call(this),this.layoutQuality=b.QUALITY,this.createBendsAsNeeded=b.DEFAULT_CREATE_BENDS_AS_NEEDED,this.incremental=b.DEFAULT_INCREMENTAL,this.animationOnLayout=b.DEFAULT_ANIMATION_ON_LAYOUT,this.animationDuringLayout=b.DEFAULT_ANIMATION_DURING_LAYOUT,this.animationPeriod=b.DEFAULT_ANIMATION_PERIOD,this.uniformLeafNodeSizes=b.DEFAULT_UNIFORM_LEAF_NODE_SIZES,this.edgeToDummyNodes=new Map,this.graphManager=new E(this),this.isLayoutFinished=!1,this.isSubLayout=!1,this.isRemoteUse=!1,K!=null&&(this.isRemoteUse=K)}z.RANDOM_SEED=1,z.prototype=Object.create(R.prototype),z.prototype.getGraphManager=function(){return this.graphManager},z.prototype.getAllNodes=function(){return this.graphManager.getAllNodes()},z.prototype.getAllEdges=function(){return this.graphManager.getAllEdges()},z.prototype.getAllNodesToApplyGravitation=function(){return this.graphManager.getAllNodesToApplyGravitation()},z.prototype.newGraphManager=function(){var K=new E(this);return this.graphManager=K,K},z.prototype.newGraph=function(K){return new N(null,this.graphManager,K)},z.prototype.newNode=function(K){return new _(this.graphManager,K)},z.prototype.newEdge=function(K){return new L(null,null,K)},z.prototype.checkLayoutSuccess=function(){return this.graphManager.getRoot()==null||this.graphManager.getRoot().getNodes().length==0||this.graphManager.includesInvalidEdge()},z.prototype.runLayout=function(){this.isLayoutFinished=!1,this.tilingPreLayout&&this.tilingPreLayout(),this.initParameters();var K;return this.checkLayoutSuccess()?K=!1:K=this.layout(),b.ANIMATE==="during"?!1:(K&&(this.isSubLayout||this.doPostLayout()),this.tilingPostLayout&&this.tilingPostLayout(),this.isLayoutFinished=!0,K)},z.prototype.doPostLayout=function(){this.incremental||this.transform(),this.update()},z.prototype.update2=function(){if(this.createBendsAsNeeded&&(this.createBendpointsFromDummyNodes(),this.graphManager.resetAllEdges()),!this.isRemoteUse){for(var K=this.graphManager.getAllEdges(),it=0;it<K.length;it++)K[it];for(var st=this.graphManager.getRoot().getNodes(),it=0;it<st.length;it++)st[it];this.update(this.graphManager.getRoot())}},z.prototype.update=function(K){if(K==null)this.update2();else if(K instanceof _){var it=K;if(it.getChild()!=null)for(var st=it.getChild().getNodes(),ut=0;ut<st.length;ut++)update(st[ut]);if(it.vGraphObject!=null){var bt=it.vGraphObject;bt.update(it)}}else if(K instanceof L){var mt=K;if(mt.vGraphObject!=null){var yt=mt.vGraphObject;yt.update(mt)}}else if(K instanceof N){var dt=K;if(dt.vGraphObject!=null){var ht=dt.vGraphObject;ht.update(dt)}}},z.prototype.initParameters=function(){this.isSubLayout||(this.layoutQuality=b.QUALITY,this.animationDuringLayout=b.DEFAULT_ANIMATION_DURING_LAYOUT,this.animationPeriod=b.DEFAULT_ANIMATION_PERIOD,this.animationOnLayout=b.DEFAULT_ANIMATION_ON_LAYOUT,this.incremental=b.DEFAULT_INCREMENTAL,this.createBendsAsNeeded=b.DEFAULT_CREATE_BENDS_AS_NEEDED,this.uniformLeafNodeSizes=b.DEFAULT_UNIFORM_LEAF_NODE_SIZES),this.animationDuringLayout&&(this.animationOnLayout=!1)},z.prototype.transform=function(K){if(K==null)this.transform(new B(0,0));else{var it=new j,st=this.graphManager.getRoot().updateLeftTop();if(st!=null){it.setWorldOrgX(K.x),it.setWorldOrgY(K.y),it.setDeviceOrgX(st.x),it.setDeviceOrgY(st.y);for(var ut=this.getAllNodes(),bt,mt=0;mt<ut.length;mt++)bt=ut[mt],bt.transform(it)}}},z.prototype.positionNodesRandomly=function(K){if(K==null)this.positionNodesRandomly(this.getGraphManager().getRoot()),this.getGraphManager().getRoot().updateBounds(!0);else for(var it,st,ut=K.getNodes(),bt=0;bt<ut.length;bt++)it=ut[bt],st=it.getChild(),st==null||st.getNodes().length==0?it.scatter():(this.positionNodesRandomly(st),it.updateBounds())},z.prototype.getFlatForest=function(){for(var K=[],it=!0,st=this.graphManager.getRoot().getNodes(),ut=!0,bt=0;bt<st.length;bt++)st[bt].getChild()!=null&&(ut=!1);if(!ut)return K;var mt=new Set,yt=[],dt=new Map,ht=[];for(ht=ht.concat(st);ht.length>0&&it;){for(yt.push(ht[0]);yt.length>0&&it;){var wt=yt[0];yt.splice(0,1),mt.add(wt);for(var X=wt.getEdges(),bt=0;bt<X.length;bt++){var pt=X[bt].getOtherEnd(wt);if(dt.get(wt)!=pt)if(!mt.has(pt))yt.push(pt),dt.set(pt,wt);else{it=!1;break}}}if(!it)K=[];else{var U=[].concat(m(mt));K.push(U);for(var bt=0;bt<U.length;bt++){var xt=U[bt],nt=ht.indexOf(xt);nt>-1&&ht.splice(nt,1)}mt=new Set,dt=new Map}}return K},z.prototype.createDummyNodesForBendpoints=function(K){for(var it=[],st=K.source,ut=this.graphManager.calcLowestCommonAncestor(K.source,K.target),bt=0;bt<K.bendpoints.length;bt++){var mt=this.newNode(null);mt.setRect(new Point(0,0),new Dimension(1,1)),ut.add(mt);var yt=this.newEdge(null);this.graphManager.add(yt,st,mt),it.add(mt),st=mt}var yt=this.newEdge(null);return this.graphManager.add(yt,st,K.target),this.edgeToDummyNodes.set(K,it),K.isInterGraph()?this.graphManager.remove(K):ut.remove(K),it},z.prototype.createBendpointsFromDummyNodes=function(){var K=[];K=K.concat(this.graphManager.getAllEdges()),K=[].concat(m(this.edgeToDummyNodes.keys())).concat(K);for(var it=0;it<K.length;it++){var st=K[it];if(st.bendpoints.length>0){for(var ut=this.edgeToDummyNodes.get(st),bt=0;bt<ut.length;bt++){var mt=ut[bt],yt=new B(mt.getCenterX(),mt.getCenterY()),dt=st.bendpoints.get(bt);dt.x=yt.x,dt.y=yt.y,mt.getOwner().remove(mt)}this.graphManager.add(st,st.source,st.target)}}},z.transform=function(K,it,st,ut){if(st!=null&&ut!=null){var bt=it;if(K<=50){var mt=it/st;bt-=(it-mt)/50*(50-K)}else{var yt=it*ut;bt+=(yt-it)/50*(K-50)}return bt}else{var dt,ht;return K<=50?(dt=9*it/500,ht=it/10):(dt=9*it/50,ht=-8*it),dt*K+ht}},z.findCenterOfTree=function(K){var it=[];it=it.concat(K);var st=[],ut=new Map,bt=!1,mt=null;(it.length==1||it.length==2)&&(bt=!0,mt=it[0]);for(var yt=0;yt<it.length;yt++){var dt=it[yt],ht=dt.getNeighborsList().size;ut.set(dt,dt.getNeighborsList().size),ht==1&&st.push(dt)}var wt=[];for(wt=wt.concat(st);!bt;){var X=[];X=X.concat(wt),wt=[];for(var yt=0;yt<it.length;yt++){var dt=it[yt],pt=it.indexOf(dt);pt>=0&&it.splice(pt,1);var U=dt.getNeighborsList();U.forEach(function(Ot){if(st.indexOf(Ot)<0){var Nt=ut.get(Ot),qt=Nt-1;qt==1&&wt.push(Ot),ut.set(Ot,qt)}})}st=st.concat(wt),(it.length==1||it.length==2)&&(bt=!0,mt=it[0])}return mt},z.prototype.setGraphManager=function(K){this.graphManager=K},f.exports=z},function(f,p,v){function m(){}m.seed=1,m.x=0,m.nextDouble=function(){return m.x=Math.sin(m.seed++)*1e4,m.x-Math.floor(m.x)},f.exports=m},function(f,p,v){var m=v(4);function b(E,_){this.lworldOrgX=0,this.lworldOrgY=0,this.ldeviceOrgX=0,this.ldeviceOrgY=0,this.lworldExtX=1,this.lworldExtY=1,this.ldeviceExtX=1,this.ldeviceExtY=1}b.prototype.getWorldOrgX=function(){return this.lworldOrgX},b.prototype.setWorldOrgX=function(E){this.lworldOrgX=E},b.prototype.getWorldOrgY=function(){return this.lworldOrgY},b.prototype.setWorldOrgY=function(E){this.lworldOrgY=E},b.prototype.getWorldExtX=function(){return this.lworldExtX},b.prototype.setWorldExtX=function(E){this.lworldExtX=E},b.prototype.getWorldExtY=function(){return this.lworldExtY},b.prototype.setWorldExtY=function(E){this.lworldExtY=E},b.prototype.getDeviceOrgX=function(){return this.ldeviceOrgX},b.prototype.setDeviceOrgX=function(E){this.ldeviceOrgX=E},b.prototype.getDeviceOrgY=function(){return this.ldeviceOrgY},b.prototype.setDeviceOrgY=function(E){this.ldeviceOrgY=E},b.prototype.getDeviceExtX=function(){return this.ldeviceExtX},b.prototype.setDeviceExtX=function(E){this.ldeviceExtX=E},b.prototype.getDeviceExtY=function(){return this.ldeviceExtY},b.prototype.setDeviceExtY=function(E){this.ldeviceExtY=E},b.prototype.transformX=function(E){var _=0,L=this.lworldExtX;return L!=0&&(_=this.ldeviceOrgX+(E-this.lworldOrgX)*this.ldeviceExtX/L),_},b.prototype.transformY=function(E){var _=0,L=this.lworldExtY;return L!=0&&(_=this.ldeviceOrgY+(E-this.lworldOrgY)*this.ldeviceExtY/L),_},b.prototype.inverseTransformX=function(E){var _=0,L=this.ldeviceExtX;return L!=0&&(_=this.lworldOrgX+(E-this.ldeviceOrgX)*this.lworldExtX/L),_},b.prototype.inverseTransformY=function(E){var _=0,L=this.ldeviceExtY;return L!=0&&(_=this.lworldOrgY+(E-this.ldeviceOrgY)*this.lworldExtY/L),_},b.prototype.inverseTransformPoint=function(E){var _=new m(this.inverseTransformX(E.x),this.inverseTransformY(E.y));return _},f.exports=b},function(f,p,v){function m(R){if(Array.isArray(R)){for(var z=0,K=Array(R.length);z<R.length;z++)K[z]=R[z];return K}else return Array.from(R)}var b=v(15),E=v(7),_=v(0),L=v(8),N=v(9);function B(){b.call(this),this.useSmartIdealEdgeLengthCalculation=E.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION,this.idealEdgeLength=E.DEFAULT_EDGE_LENGTH,this.springConstant=E.DEFAULT_SPRING_STRENGTH,this.repulsionConstant=E.DEFAULT_REPULSION_STRENGTH,this.gravityConstant=E.DEFAULT_GRAVITY_STRENGTH,this.compoundGravityConstant=E.DEFAULT_COMPOUND_GRAVITY_STRENGTH,this.gravityRangeFactor=E.DEFAULT_GRAVITY_RANGE_FACTOR,this.compoundGravityRangeFactor=E.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR,this.displacementThresholdPerNode=3*E.DEFAULT_EDGE_LENGTH/100,this.coolingFactor=E.DEFAULT_COOLING_FACTOR_INCREMENTAL,this.initialCoolingFactor=E.DEFAULT_COOLING_FACTOR_INCREMENTAL,this.totalDisplacement=0,this.oldTotalDisplacement=0,this.maxIterations=E.MAX_ITERATIONS}B.prototype=Object.create(b.prototype);for(var j in b)B[j]=b[j];B.prototype.initParameters=function(){b.prototype.initParameters.call(this,arguments),this.totalIterations=0,this.notAnimatedIterations=0,this.useFRGridVariant=E.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION,this.grid=[]},B.prototype.calcIdealEdgeLengths=function(){for(var R,z,K,it,st,ut,bt=this.getGraphManager().getAllEdges(),mt=0;mt<bt.length;mt++)R=bt[mt],R.idealLength=this.idealEdgeLength,R.isInterGraph&&(K=R.getSource(),it=R.getTarget(),st=R.getSourceInLca().getEstimatedSize(),ut=R.getTargetInLca().getEstimatedSize(),this.useSmartIdealEdgeLengthCalculation&&(R.idealLength+=st+ut-2*_.SIMPLE_NODE_SIZE),z=R.getLca().getInclusionTreeDepth(),R.idealLength+=E.DEFAULT_EDGE_LENGTH*E.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR*(K.getInclusionTreeDepth()+it.getInclusionTreeDepth()-2*z))},B.prototype.initSpringEmbedder=function(){var R=this.getAllNodes().length;this.incremental?(R>E.ADAPTATION_LOWER_NODE_LIMIT&&(this.coolingFactor=Math.max(this.coolingFactor*E.COOLING_ADAPTATION_FACTOR,this.coolingFactor-(R-E.ADAPTATION_LOWER_NODE_LIMIT)/(E.ADAPTATION_UPPER_NODE_LIMIT-E.ADAPTATION_LOWER_NODE_LIMIT)*this.coolingFactor*(1-E.COOLING_ADAPTATION_FACTOR))),this.maxNodeDisplacement=E.MAX_NODE_DISPLACEMENT_INCREMENTAL):(R>E.ADAPTATION_LOWER_NODE_LIMIT?this.coolingFactor=Math.max(E.COOLING_ADAPTATION_FACTOR,1-(R-E.ADAPTATION_LOWER_NODE_LIMIT)/(E.ADAPTATION_UPPER_NODE_LIMIT-E.ADAPTATION_LOWER_NODE_LIMIT)*(1-E.COOLING_ADAPTATION_FACTOR)):this.coolingFactor=1,this.initialCoolingFactor=this.coolingFactor,this.maxNodeDisplacement=E.MAX_NODE_DISPLACEMENT),this.maxIterations=Math.max(this.getAllNodes().length*5,this.maxIterations),this.totalDisplacementThreshold=this.displacementThresholdPerNode*this.getAllNodes().length,this.repulsionRange=this.calcRepulsionRange()},B.prototype.calcSpringForces=function(){for(var R=this.getAllEdges(),z,K=0;K<R.length;K++)z=R[K],this.calcSpringForce(z,z.idealLength)},B.prototype.calcRepulsionForces=function(){var R=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0,z=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,K,it,st,ut,bt=this.getAllNodes(),mt;if(this.useFRGridVariant)for(this.totalIterations%E.GRID_CALCULATION_CHECK_PERIOD==1&&R&&this.updateGrid(),mt=new Set,K=0;K<bt.length;K++)st=bt[K],this.calculateRepulsionForceOfANode(st,mt,R,z),mt.add(st);else for(K=0;K<bt.length;K++)for(st=bt[K],it=K+1;it<bt.length;it++)ut=bt[it],st.getOwner()==ut.getOwner()&&this.calcRepulsionForce(st,ut)},B.prototype.calcGravitationalForces=function(){for(var R,z=this.getAllNodesToApplyGravitation(),K=0;K<z.length;K++)R=z[K],this.calcGravitationalForce(R)},B.prototype.moveNodes=function(){for(var R=this.getAllNodes(),z,K=0;K<R.length;K++)z=R[K],z.move()},B.prototype.calcSpringForce=function(R,z){var K=R.getSource(),it=R.getTarget(),st,ut,bt,mt;if(this.uniformLeafNodeSizes&&K.getChild()==null&&it.getChild()==null)R.updateLengthSimple();else if(R.updateLength(),R.isOverlapingSourceAndTarget)return;st=R.getLength(),st!=0&&(ut=this.springConstant*(st-z),bt=ut*(R.lengthX/st),mt=ut*(R.lengthY/st),K.springForceX+=bt,K.springForceY+=mt,it.springForceX-=bt,it.springForceY-=mt)},B.prototype.calcRepulsionForce=function(R,z){var K=R.getRect(),it=z.getRect(),st=new Array(2),ut=new Array(4),bt,mt,yt,dt,ht,wt,X;if(K.intersects(it)){L.calcSeparationAmount(K,it,st,E.DEFAULT_EDGE_LENGTH/2),wt=2*st[0],X=2*st[1];var pt=R.noOfChildren*z.noOfChildren/(R.noOfChildren+z.noOfChildren);R.repulsionForceX-=pt*wt,R.repulsionForceY-=pt*X,z.repulsionForceX+=pt*wt,z.repulsionForceY+=pt*X}else this.uniformLeafNodeSizes&&R.getChild()==null&&z.getChild()==null?(bt=it.getCenterX()-K.getCenterX(),mt=it.getCenterY()-K.getCenterY()):(L.getIntersection(K,it,ut),bt=ut[2]-ut[0],mt=ut[3]-ut[1]),Math.abs(bt)<E.MIN_REPULSION_DIST&&(bt=N.sign(bt)*E.MIN_REPULSION_DIST),Math.abs(mt)<E.MIN_REPULSION_DIST&&(mt=N.sign(mt)*E.MIN_REPULSION_DIST),yt=bt*bt+mt*mt,dt=Math.sqrt(yt),ht=this.repulsionConstant*R.noOfChildren*z.noOfChildren/yt,wt=ht*bt/dt,X=ht*mt/dt,R.repulsionForceX-=wt,R.repulsionForceY-=X,z.repulsionForceX+=wt,z.repulsionForceY+=X},B.prototype.calcGravitationalForce=function(R){var z,K,it,st,ut,bt,mt,yt;z=R.getOwner(),K=(z.getRight()+z.getLeft())/2,it=(z.getTop()+z.getBottom())/2,st=R.getCenterX()-K,ut=R.getCenterY()-it,bt=Math.abs(st)+R.getWidth()/2,mt=Math.abs(ut)+R.getHeight()/2,R.getOwner()==this.graphManager.getRoot()?(yt=z.getEstimatedSize()*this.gravityRangeFactor,(bt>yt||mt>yt)&&(R.gravitationForceX=-this.gravityConstant*st,R.gravitationForceY=-this.gravityConstant*ut)):(yt=z.getEstimatedSize()*this.compoundGravityRangeFactor,(bt>yt||mt>yt)&&(R.gravitationForceX=-this.gravityConstant*st*this.compoundGravityConstant,R.gravitationForceY=-this.gravityConstant*ut*this.compoundGravityConstant))},B.prototype.isConverged=function(){var R,z=!1;return this.totalIterations>this.maxIterations/3&&(z=Math.abs(this.totalDisplacement-this.oldTotalDisplacement)<2),R=this.totalDisplacement<this.totalDisplacementThreshold,this.oldTotalDisplacement=this.totalDisplacement,R||z},B.prototype.animate=function(){this.animationDuringLayout&&!this.isSubLayout&&(this.notAnimatedIterations==this.animationPeriod?(this.update(),this.notAnimatedIterations=0):this.notAnimatedIterations++)},B.prototype.calcNoOfChildrenForAllNodes=function(){for(var R,z=this.graphManager.getAllNodes(),K=0;K<z.length;K++)R=z[K],R.noOfChildren=R.getNoOfChildren()},B.prototype.calcGrid=function(R){var z=0,K=0;z=parseInt(Math.ceil((R.getRight()-R.getLeft())/this.repulsionRange)),K=parseInt(Math.ceil((R.getBottom()-R.getTop())/this.repulsionRange));for(var it=new Array(z),st=0;st<z;st++)it[st]=new Array(K);for(var st=0;st<z;st++)for(var ut=0;ut<K;ut++)it[st][ut]=new Array;return it},B.prototype.addNodeToGrid=function(R,z,K){var it=0,st=0,ut=0,bt=0;it=parseInt(Math.floor((R.getRect().x-z)/this.repulsionRange)),st=parseInt(Math.floor((R.getRect().width+R.getRect().x-z)/this.repulsionRange)),ut=parseInt(Math.floor((R.getRect().y-K)/this.repulsionRange)),bt=parseInt(Math.floor((R.getRect().height+R.getRect().y-K)/this.repulsionRange));for(var mt=it;mt<=st;mt++)for(var yt=ut;yt<=bt;yt++)this.grid[mt][yt].push(R),R.setGridCoordinates(it,st,ut,bt)},B.prototype.updateGrid=function(){var R,z,K=this.getAllNodes();for(this.grid=this.calcGrid(this.graphManager.getRoot()),R=0;R<K.length;R++)z=K[R],this.addNodeToGrid(z,this.graphManager.getRoot().getLeft(),this.graphManager.getRoot().getTop())},B.prototype.calculateRepulsionForceOfANode=function(R,z,K,it){if(this.totalIterations%E.GRID_CALCULATION_CHECK_PERIOD==1&&K||it){var st=new Set;R.surrounding=new Array;for(var ut,bt=this.grid,mt=R.startX-1;mt<R.finishX+2;mt++)for(var yt=R.startY-1;yt<R.finishY+2;yt++)if(!(mt<0||yt<0||mt>=bt.length||yt>=bt[0].length)){for(var dt=0;dt<bt[mt][yt].length;dt++)if(ut=bt[mt][yt][dt],!(R.getOwner()!=ut.getOwner()||R==ut)&&!z.has(ut)&&!st.has(ut)){var ht=Math.abs(R.getCenterX()-ut.getCenterX())-(R.getWidth()/2+ut.getWidth()/2),wt=Math.abs(R.getCenterY()-ut.getCenterY())-(R.getHeight()/2+ut.getHeight()/2);ht<=this.repulsionRange&&wt<=this.repulsionRange&&st.add(ut)}}R.surrounding=[].concat(m(st))}for(mt=0;mt<R.surrounding.length;mt++)this.calcRepulsionForce(R,R.surrounding[mt])},B.prototype.calcRepulsionRange=function(){return 0},f.exports=B},function(f,p,v){var m=v(1),b=v(7);function E(L,N,B){m.call(this,L,N,B),this.idealLength=b.DEFAULT_EDGE_LENGTH}E.prototype=Object.create(m.prototype);for(var _ in m)E[_]=m[_];f.exports=E},function(f,p,v){var m=v(3);function b(_,L,N,B){m.call(this,_,L,N,B),this.springForceX=0,this.springForceY=0,this.repulsionForceX=0,this.repulsionForceY=0,this.gravitationForceX=0,this.gravitationForceY=0,this.displacementX=0,this.displacementY=0,this.startX=0,this.finishX=0,this.startY=0,this.finishY=0,this.surrounding=[]}b.prototype=Object.create(m.prototype);for(var E in m)b[E]=m[E];b.prototype.setGridCoordinates=function(_,L,N,B){this.startX=_,this.finishX=L,this.startY=N,this.finishY=B},f.exports=b},function(f,p,v){function m(b,E){this.width=0,this.height=0,b!==null&&E!==null&&(this.height=E,this.width=b)}m.prototype.getWidth=function(){return this.width},m.prototype.setWidth=function(b){this.width=b},m.prototype.getHeight=function(){return this.height},m.prototype.setHeight=function(b){this.height=b},f.exports=m},function(f,p,v){var m=v(14);function b(){this.map={},this.keys=[]}b.prototype.put=function(E,_){var L=m.createID(E);this.contains(L)||(this.map[L]=_,this.keys.push(E))},b.prototype.contains=function(E){return m.createID(E),this.map[E]!=null},b.prototype.get=function(E){var _=m.createID(E);return this.map[_]},b.prototype.keySet=function(){return this.keys},f.exports=b},function(f,p,v){var m=v(14);function b(){this.set={}}b.prototype.add=function(E){var _=m.createID(E);this.contains(_)||(this.set[_]=E)},b.prototype.remove=function(E){delete this.set[m.createID(E)]},b.prototype.clear=function(){this.set={}},b.prototype.contains=function(E){return this.set[m.createID(E)]==E},b.prototype.isEmpty=function(){return this.size()===0},b.prototype.size=function(){return Object.keys(this.set).length},b.prototype.addAllTo=function(E){for(var _=Object.keys(this.set),L=_.length,N=0;N<L;N++)E.push(this.set[_[N]])},b.prototype.size=function(){return Object.keys(this.set).length},b.prototype.addAll=function(E){for(var _=E.length,L=0;L<_;L++){var N=E[L];this.add(N)}},f.exports=b},function(f,p,v){var m=function(){function L(N,B){for(var j=0;j<B.length;j++){var R=B[j];R.enumerable=R.enumerable||!1,R.configurable=!0,"value"in R&&(R.writable=!0),Object.defineProperty(N,R.key,R)}}return function(N,B,j){return B&&L(N.prototype,B),j&&L(N,j),N}}();function b(L,N){if(!(L instanceof N))throw new TypeError("Cannot call a class as a function")}var E=v(11),_=function(){function L(N,B){b(this,L),(B!==null||B!==void 0)&&(this.compareFunction=this._defaultCompareFunction);var j=void 0;N instanceof E?j=N.size():j=N.length,this._quicksort(N,0,j-1)}return m(L,[{key:"_quicksort",value:function(B,j,R){if(j<R){var z=this._partition(B,j,R);this._quicksort(B,j,z),this._quicksort(B,z+1,R)}}},{key:"_partition",value:function(B,j,R){for(var z=this._get(B,j),K=j,it=R;;){for(;this.compareFunction(z,this._get(B,it));)it--;for(;this.compareFunction(this._get(B,K),z);)K++;if(K<it)this._swap(B,K,it),K++,it--;else return it}}},{key:"_get",value:function(B,j){return B instanceof E?B.get_object_at(j):B[j]}},{key:"_set",value:function(B,j,R){B instanceof E?B.set_object_at(j,R):B[j]=R}},{key:"_swap",value:function(B,j,R){var z=this._get(B,j);this._set(B,j,this._get(B,R)),this._set(B,R,z)}},{key:"_defaultCompareFunction",value:function(B,j){return j>B}}]),L}();f.exports=_},function(f,p,v){var m=function(){function _(L,N){for(var B=0;B<N.length;B++){var j=N[B];j.enumerable=j.enumerable||!1,j.configurable=!0,"value"in j&&(j.writable=!0),Object.defineProperty(L,j.key,j)}}return function(L,N,B){return N&&_(L.prototype,N),B&&_(L,B),L}}();function b(_,L){if(!(_ instanceof L))throw new TypeError("Cannot call a class as a function")}var E=function(){function _(L,N){var B=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1,j=arguments.length>3&&arguments[3]!==void 0?arguments[3]:-1,R=arguments.length>4&&arguments[4]!==void 0?arguments[4]:-1;b(this,_),this.sequence1=L,this.sequence2=N,this.match_score=B,this.mismatch_penalty=j,this.gap_penalty=R,this.iMax=L.length+1,this.jMax=N.length+1,this.grid=new Array(this.iMax);for(var z=0;z<this.iMax;z++){this.grid[z]=new Array(this.jMax);for(var K=0;K<this.jMax;K++)this.grid[z][K]=0}this.tracebackGrid=new Array(this.iMax);for(var it=0;it<this.iMax;it++){this.tracebackGrid[it]=new Array(this.jMax);for(var st=0;st<this.jMax;st++)this.tracebackGrid[it][st]=[null,null,null]}this.alignments=[],this.score=-1,this.computeGrids()}return m(_,[{key:"getScore",value:function(){return this.score}},{key:"getAlignments",value:function(){return this.alignments}},{key:"computeGrids",value:function(){for(var N=1;N<this.jMax;N++)this.grid[0][N]=this.grid[0][N-1]+this.gap_penalty,this.tracebackGrid[0][N]=[!1,!1,!0];for(var B=1;B<this.iMax;B++)this.grid[B][0]=this.grid[B-1][0]+this.gap_penalty,this.tracebackGrid[B][0]=[!1,!0,!1];for(var j=1;j<this.iMax;j++)for(var R=1;R<this.jMax;R++){var z=void 0;this.sequence1[j-1]===this.sequence2[R-1]?z=this.grid[j-1][R-1]+this.match_score:z=this.grid[j-1][R-1]+this.mismatch_penalty;var K=this.grid[j-1][R]+this.gap_penalty,it=this.grid[j][R-1]+this.gap_penalty,st=[z,K,it],ut=this.arrayAllMaxIndexes(st);this.grid[j][R]=st[ut[0]],this.tracebackGrid[j][R]=[ut.includes(0),ut.includes(1),ut.includes(2)]}this.score=this.grid[this.iMax-1][this.jMax-1]}},{key:"alignmentTraceback",value:function(){var N=[];for(N.push({pos:[this.sequence1.length,this.sequence2.length],seq1:"",seq2:""});N[0];){var B=N[0],j=this.tracebackGrid[B.pos[0]][B.pos[1]];j[0]&&N.push({pos:[B.pos[0]-1,B.pos[1]-1],seq1:this.sequence1[B.pos[0]-1]+B.seq1,seq2:this.sequence2[B.pos[1]-1]+B.seq2}),j[1]&&N.push({pos:[B.pos[0]-1,B.pos[1]],seq1:this.sequence1[B.pos[0]-1]+B.seq1,seq2:"-"+B.seq2}),j[2]&&N.push({pos:[B.pos[0],B.pos[1]-1],seq1:"-"+B.seq1,seq2:this.sequence2[B.pos[1]-1]+B.seq2}),B.pos[0]===0&&B.pos[1]===0&&this.alignments.push({sequence1:B.seq1,sequence2:B.seq2}),N.shift()}return this.alignments}},{key:"getAllIndexes",value:function(N,B){for(var j=[],R=-1;(R=N.indexOf(B,R+1))!==-1;)j.push(R);return j}},{key:"arrayAllMaxIndexes",value:function(N){return this.getAllIndexes(N,Math.max.apply(null,N))}}]),_}();f.exports=E},function(f,p,v){var m=function(){};m.FDLayout=v(18),m.FDLayoutConstants=v(7),m.FDLayoutEdge=v(19),m.FDLayoutNode=v(20),m.DimensionD=v(21),m.HashMap=v(22),m.HashSet=v(23),m.IGeometry=v(8),m.IMath=v(9),m.Integer=v(10),m.Point=v(12),m.PointD=v(4),m.RandomSeed=v(16),m.RectangleD=v(13),m.Transform=v(17),m.UniqueIDGeneretor=v(14),m.Quicksort=v(24),m.LinkedList=v(11),m.LGraphObject=v(2),m.LGraph=v(5),m.LEdge=v(1),m.LGraphManager=v(6),m.LNode=v(3),m.Layout=v(15),m.LayoutConstants=v(0),m.NeedlemanWunsch=v(25),f.exports=m},function(f,p,v){function m(){this.listeners=[]}var b=m.prototype;b.addListener=function(E,_){this.listeners.push({event:E,callback:_})},b.removeListener=function(E,_){for(var L=this.listeners.length;L>=0;L--){var N=this.listeners[L];N.event===E&&N.callback===_&&this.listeners.splice(L,1)}},b.emit=function(E,_){for(var L=0;L<this.listeners.length;L++){var N=this.listeners[L];E===N.event&&N.callback(_)}},f.exports=m}])})}(Ugt)),Ugt.exports}var Zjt;function uWe(){return Zjt||(Zjt=1,function(i,a){(function(p,v){i.exports=v(cWe())})(d0,function(f){return function(p){var v={};function m(b){if(v[b])return v[b].exports;var E=v[b]={i:b,l:!1,exports:{}};return p[b].call(E.exports,E,E.exports,m),E.l=!0,E.exports}return m.m=p,m.c=v,m.i=function(b){return b},m.d=function(b,E,_){m.o(b,E)||Object.defineProperty(b,E,{configurable:!1,enumerable:!0,get:_})},m.n=function(b){var E=b&&b.__esModule?function(){return b.default}:function(){return b};return m.d(E,"a",E),E},m.o=function(b,E){return Object.prototype.hasOwnProperty.call(b,E)},m.p="",m(m.s=7)}([function(p,v){p.exports=f},function(p,v,m){var b=m(0).FDLayoutConstants;function E(){}for(var _ in b)E[_]=b[_];E.DEFAULT_USE_MULTI_LEVEL_SCALING=!1,E.DEFAULT_RADIAL_SEPARATION=b.DEFAULT_EDGE_LENGTH,E.DEFAULT_COMPONENT_SEPERATION=60,E.TILE=!0,E.TILING_PADDING_VERTICAL=10,E.TILING_PADDING_HORIZONTAL=10,E.TREE_REDUCTION_ON_INCREMENTAL=!1,p.exports=E},function(p,v,m){var b=m(0).FDLayoutEdge;function E(L,N,B){b.call(this,L,N,B)}E.prototype=Object.create(b.prototype);for(var _ in b)E[_]=b[_];p.exports=E},function(p,v,m){var b=m(0).LGraph;function E(L,N,B){b.call(this,L,N,B)}E.prototype=Object.create(b.prototype);for(var _ in b)E[_]=b[_];p.exports=E},function(p,v,m){var b=m(0).LGraphManager;function E(L){b.call(this,L)}E.prototype=Object.create(b.prototype);for(var _ in b)E[_]=b[_];p.exports=E},function(p,v,m){var b=m(0).FDLayoutNode,E=m(0).IMath;function _(N,B,j,R){b.call(this,N,B,j,R)}_.prototype=Object.create(b.prototype);for(var L in b)_[L]=b[L];_.prototype.move=function(){var N=this.graphManager.getLayout();this.displacementX=N.coolingFactor*(this.springForceX+this.repulsionForceX+this.gravitationForceX)/this.noOfChildren,this.displacementY=N.coolingFactor*(this.springForceY+this.repulsionForceY+this.gravitationForceY)/this.noOfChildren,Math.abs(this.displacementX)>N.coolingFactor*N.maxNodeDisplacement&&(this.displacementX=N.coolingFactor*N.maxNodeDisplacement*E.sign(this.displacementX)),Math.abs(this.displacementY)>N.coolingFactor*N.maxNodeDisplacement&&(this.displacementY=N.coolingFactor*N.maxNodeDisplacement*E.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),N.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},_.prototype.propogateDisplacementToChildren=function(N,B){for(var j=this.getChild().getNodes(),R,z=0;z<j.length;z++)R=j[z],R.getChild()==null?(R.moveBy(N,B),R.displacementX+=N,R.displacementY+=B):R.propogateDisplacementToChildren(N,B)},_.prototype.setPred1=function(N){this.pred1=N},_.prototype.getPred1=function(){return pred1},_.prototype.getPred2=function(){return pred2},_.prototype.setNext=function(N){this.next=N},_.prototype.getNext=function(){return next},_.prototype.setProcessed=function(N){this.processed=N},_.prototype.isProcessed=function(){return processed},p.exports=_},function(p,v,m){var b=m(0).FDLayout,E=m(4),_=m(3),L=m(5),N=m(2),B=m(1),j=m(0).FDLayoutConstants,R=m(0).LayoutConstants,z=m(0).Point,K=m(0).PointD,it=m(0).Layout,st=m(0).Integer,ut=m(0).IGeometry,bt=m(0).LGraph,mt=m(0).Transform;function yt(){b.call(this),this.toBeTiled={}}yt.prototype=Object.create(b.prototype);for(var dt in b)yt[dt]=b[dt];yt.prototype.newGraphManager=function(){var ht=new E(this);return this.graphManager=ht,ht},yt.prototype.newGraph=function(ht){return new _(null,this.graphManager,ht)},yt.prototype.newNode=function(ht){return new L(this.graphManager,ht)},yt.prototype.newEdge=function(ht){return new N(null,null,ht)},yt.prototype.initParameters=function(){b.prototype.initParameters.call(this,arguments),this.isSubLayout||(B.DEFAULT_EDGE_LENGTH<10?this.idealEdgeLength=10:this.idealEdgeLength=B.DEFAULT_EDGE_LENGTH,this.useSmartIdealEdgeLengthCalculation=B.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION,this.springConstant=j.DEFAULT_SPRING_STRENGTH,this.repulsionConstant=j.DEFAULT_REPULSION_STRENGTH,this.gravityConstant=j.DEFAULT_GRAVITY_STRENGTH,this.compoundGravityConstant=j.DEFAULT_COMPOUND_GRAVITY_STRENGTH,this.gravityRangeFactor=j.DEFAULT_GRAVITY_RANGE_FACTOR,this.compoundGravityRangeFactor=j.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR,this.prunedNodesAll=[],this.growTreeIterations=0,this.afterGrowthIterations=0,this.isTreeGrowing=!1,this.isGrowthFinished=!1,this.coolingCycle=0,this.maxCoolingCycle=this.maxIterations/j.CONVERGENCE_CHECK_PERIOD,this.finalTemperature=j.CONVERGENCE_CHECK_PERIOD/this.maxIterations,this.coolingAdjuster=1)},yt.prototype.layout=function(){var ht=R.DEFAULT_CREATE_BENDS_AS_NEEDED;return ht&&(this.createBendpoints(),this.graphManager.resetAllEdges()),this.level=0,this.classicLayout()},yt.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(B.TREE_REDUCTION_ON_INCREMENTAL){this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var wt=new Set(this.getAllNodes()),X=this.nodesWithGravity.filter(function(xt){return wt.has(xt)});this.graphManager.setAllNodesToApplyGravitation(X)}}else{var ht=this.getFlatForest();if(ht.length>0)this.positionNodesRadially(ht);else{this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var wt=new Set(this.getAllNodes()),X=this.nodesWithGravity.filter(function(pt){return wt.has(pt)});this.graphManager.setAllNodesToApplyGravitation(X),this.positionNodesRandomly()}}return this.initSpringEmbedder(),this.runSpringEmbedder(),!0},yt.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%j.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 ht=new Set(this.getAllNodes()),wt=this.nodesWithGravity.filter(function(U){return ht.has(U)});this.graphManager.setAllNodesToApplyGravitation(wt),this.graphManager.updateBounds(),this.updateGrid(),this.coolingFactor=j.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=j.DEFAULT_COOLING_FACTOR_INCREMENTAL*((100-this.afterGrowthIterations)/100),this.afterGrowthIterations++}var X=!this.isTreeGrowing&&!this.isGrowthFinished,pt=this.growTreeIterations%10==1&&this.isTreeGrowing||this.afterGrowthIterations%10==1&&this.isGrowthFinished;return this.totalDisplacement=0,this.graphManager.updateBounds(),this.calcSpringForces(),this.calcRepulsionForces(X,pt),this.calcGravitationalForces(),this.moveNodes(),this.animate(),!1},yt.prototype.getPositionsData=function(){for(var ht=this.graphManager.getAllNodes(),wt={},X=0;X<ht.length;X++){var pt=ht[X].rect,U=ht[X].id;wt[U]={id:U,x:pt.getCenterX(),y:pt.getCenterY(),w:pt.width,h:pt.height}}return wt},yt.prototype.runSpringEmbedder=function(){this.initialAnimationPeriod=25,this.animationPeriod=this.initialAnimationPeriod;var ht=!1;if(j.ANIMATE==="during")this.emit("layoutstarted");else{for(;!ht;)ht=this.tick();this.graphManager.updateBounds()}},yt.prototype.calculateNodesToApplyGravitationTo=function(){var ht=[],wt,X=this.graphManager.getGraphs(),pt=X.length,U;for(U=0;U<pt;U++)wt=X[U],wt.updateConnected(),wt.isConnected||(ht=ht.concat(wt.getNodes()));return ht},yt.prototype.createBendpoints=function(){var ht=[];ht=ht.concat(this.graphManager.getAllEdges());var wt=new Set,X;for(X=0;X<ht.length;X++){var pt=ht[X];if(!wt.has(pt)){var U=pt.getSource(),xt=pt.getTarget();if(U==xt)pt.getBendpoints().push(new K),pt.getBendpoints().push(new K),this.createDummyNodesForBendpoints(pt),wt.add(pt);else{var nt=[];if(nt=nt.concat(U.getEdgeListToNode(xt)),nt=nt.concat(xt.getEdgeListToNode(U)),!wt.has(nt[0])){if(nt.length>1){var Ot;for(Ot=0;Ot<nt.length;Ot++){var Nt=nt[Ot];Nt.getBendpoints().push(new K),this.createDummyNodesForBendpoints(Nt)}}nt.forEach(function(qt){wt.add(qt)})}}}if(wt.size==ht.length)break}},yt.prototype.positionNodesRadially=function(ht){for(var wt=new z(0,0),X=Math.ceil(Math.sqrt(ht.length)),pt=0,U=0,xt=0,nt=new K(0,0),Ot=0;Ot<ht.length;Ot++){Ot%X==0&&(xt=0,U=pt,Ot!=0&&(U+=B.DEFAULT_COMPONENT_SEPERATION),pt=0);var Nt=ht[Ot],qt=it.findCenterOfTree(Nt);wt.x=xt,wt.y=U,nt=yt.radialLayout(Nt,qt,wt),nt.y>pt&&(pt=Math.floor(nt.y)),xt=Math.floor(nt.x+B.DEFAULT_COMPONENT_SEPERATION)}this.transform(new K(R.WORLD_CENTER_X-nt.x/2,R.WORLD_CENTER_Y-nt.y/2))},yt.radialLayout=function(ht,wt,X){var pt=Math.max(this.maxDiagonalInTree(ht),B.DEFAULT_RADIAL_SEPARATION);yt.branchRadialLayout(wt,null,0,359,0,pt);var U=bt.calculateBounds(ht),xt=new mt;xt.setDeviceOrgX(U.getMinX()),xt.setDeviceOrgY(U.getMinY()),xt.setWorldOrgX(X.x),xt.setWorldOrgY(X.y);for(var nt=0;nt<ht.length;nt++){var Ot=ht[nt];Ot.transform(xt)}var Nt=new K(U.getMaxX(),U.getMaxY());return xt.inverseTransformPoint(Nt)},yt.branchRadialLayout=function(ht,wt,X,pt,U,xt){var nt=(pt-X+1)/2;nt<0&&(nt+=180);var Ot=(nt+X)%360,Nt=Ot*ut.TWO_PI/360,qt=U*Math.cos(Nt),Ct=U*Math.sin(Nt);ht.setCenter(qt,Ct);var Z=[];Z=Z.concat(ht.getEdges());var Tt=Z.length;wt!=null&&Tt--;for(var Ht=0,It=Z.length,Ft,ke=ht.getEdgesBetween(wt);ke.length>1;){var pn=ke[0];ke.splice(0,1);var Me=Z.indexOf(pn);Me>=0&&Z.splice(Me,1),It--,Tt--}wt!=null?Ft=(Z.indexOf(ke[0])+1)%It:Ft=0;for(var ve=Math.abs(pt-X)/Tt,Ge=Ft;Ht!=Tt;Ge=++Ge%It){var Ke=Z[Ge].getOtherEnd(ht);if(Ke!=wt){var we=(X+Ht*ve)%360,_e=(we+ve)%360;yt.branchRadialLayout(Ke,ht,we,_e,U+xt,xt),Ht++}}},yt.maxDiagonalInTree=function(ht){for(var wt=st.MIN_VALUE,X=0;X<ht.length;X++){var pt=ht[X],U=pt.getDiagonal();U>wt&&(wt=U)}return wt},yt.prototype.calcRepulsionRange=function(){return 2*(this.level+1)*this.idealEdgeLength},yt.prototype.groupZeroDegreeMembers=function(){var ht=this,wt={};this.memberGroups={},this.idToDummyNode={};for(var X=[],pt=this.graphManager.getAllNodes(),U=0;U<pt.length;U++){var xt=pt[U],nt=xt.getParent();this.getNodeDegreeWithChildren(xt)===0&&(nt.id==null||!this.getToBeTiled(nt))&&X.push(xt)}for(var U=0;U<X.length;U++){var xt=X[U],Ot=xt.getParent().id;typeof wt[Ot]>"u"&&(wt[Ot]=[]),wt[Ot]=wt[Ot].concat(xt)}Object.keys(wt).forEach(function(Nt){if(wt[Nt].length>1){var qt="DummyCompound_"+Nt;ht.memberGroups[qt]=wt[Nt];var Ct=wt[Nt][0].getParent(),Z=new L(ht.graphManager);Z.id=qt,Z.paddingLeft=Ct.paddingLeft||0,Z.paddingRight=Ct.paddingRight||0,Z.paddingBottom=Ct.paddingBottom||0,Z.paddingTop=Ct.paddingTop||0,ht.idToDummyNode[qt]=Z;var Tt=ht.getGraphManager().add(ht.newGraph(),Z),Ht=Ct.getChild();Ht.add(Z);for(var It=0;It<wt[Nt].length;It++){var Ft=wt[Nt][It];Ht.remove(Ft),Tt.add(Ft)}}})},yt.prototype.clearCompounds=function(){var ht={},wt={};this.performDFSOnCompounds();for(var X=0;X<this.compoundOrder.length;X++)wt[this.compoundOrder[X].id]=this.compoundOrder[X],ht[this.compoundOrder[X].id]=[].concat(this.compoundOrder[X].getChild().getNodes()),this.graphManager.remove(this.compoundOrder[X].getChild()),this.compoundOrder[X].child=null;this.graphManager.resetAllNodes(),this.tileCompoundMembers(ht,wt)},yt.prototype.clearZeroDegreeMembers=function(){var ht=this,wt=this.tiledZeroDegreePack=[];Object.keys(this.memberGroups).forEach(function(X){var pt=ht.idToDummyNode[X];wt[X]=ht.tileNodes(ht.memberGroups[X],pt.paddingLeft+pt.paddingRight),pt.rect.width=wt[X].width,pt.rect.height=wt[X].height})},yt.prototype.repopulateCompounds=function(){for(var ht=this.compoundOrder.length-1;ht>=0;ht--){var wt=this.compoundOrder[ht],X=wt.id,pt=wt.paddingLeft,U=wt.paddingTop;this.adjustLocations(this.tiledMemberPack[X],wt.rect.x,wt.rect.y,pt,U)}},yt.prototype.repopulateZeroDegreeMembers=function(){var ht=this,wt=this.tiledZeroDegreePack;Object.keys(wt).forEach(function(X){var pt=ht.idToDummyNode[X],U=pt.paddingLeft,xt=pt.paddingTop;ht.adjustLocations(wt[X],pt.rect.x,pt.rect.y,U,xt)})},yt.prototype.getToBeTiled=function(ht){var wt=ht.id;if(this.toBeTiled[wt]!=null)return this.toBeTiled[wt];var X=ht.getChild();if(X==null)return this.toBeTiled[wt]=!1,!1;for(var pt=X.getNodes(),U=0;U<pt.length;U++){var xt=pt[U];if(this.getNodeDegree(xt)>0)return this.toBeTiled[wt]=!1,!1;if(xt.getChild()==null){this.toBeTiled[xt.id]=!1;continue}if(!this.getToBeTiled(xt))return this.toBeTiled[wt]=!1,!1}return this.toBeTiled[wt]=!0,!0},yt.prototype.getNodeDegree=function(ht){ht.id;for(var wt=ht.getEdges(),X=0,pt=0;pt<wt.length;pt++){var U=wt[pt];U.getSource().id!==U.getTarget().id&&(X=X+1)}return X},yt.prototype.getNodeDegreeWithChildren=function(ht){var wt=this.getNodeDegree(ht);if(ht.getChild()==null)return wt;for(var X=ht.getChild().getNodes(),pt=0;pt<X.length;pt++){var U=X[pt];wt+=this.getNodeDegreeWithChildren(U)}return wt},yt.prototype.performDFSOnCompounds=function(){this.compoundOrder=[],this.fillCompexOrderByDFS(this.graphManager.getRoot().getNodes())},yt.prototype.fillCompexOrderByDFS=function(ht){for(var wt=0;wt<ht.length;wt++){var X=ht[wt];X.getChild()!=null&&this.fillCompexOrderByDFS(X.getChild().getNodes()),this.getToBeTiled(X)&&this.compoundOrder.push(X)}},yt.prototype.adjustLocations=function(ht,wt,X,pt,U){wt+=pt,X+=U;for(var xt=wt,nt=0;nt<ht.rows.length;nt++){var Ot=ht.rows[nt];wt=xt;for(var Nt=0,qt=0;qt<Ot.length;qt++){var Ct=Ot[qt];Ct.rect.x=wt,Ct.rect.y=X,wt+=Ct.rect.width+ht.horizontalPadding,Ct.rect.height>Nt&&(Nt=Ct.rect.height)}X+=Nt+ht.verticalPadding}},yt.prototype.tileCompoundMembers=function(ht,wt){var X=this;this.tiledMemberPack=[],Object.keys(ht).forEach(function(pt){var U=wt[pt];X.tiledMemberPack[pt]=X.tileNodes(ht[pt],U.paddingLeft+U.paddingRight),U.rect.width=X.tiledMemberPack[pt].width,U.rect.height=X.tiledMemberPack[pt].height})},yt.prototype.tileNodes=function(ht,wt){var X=B.TILING_PADDING_VERTICAL,pt=B.TILING_PADDING_HORIZONTAL,U={rows:[],rowWidth:[],rowHeight:[],width:0,height:wt,verticalPadding:X,horizontalPadding:pt};ht.sort(function(Ot,Nt){return Ot.rect.width*Ot.rect.height>Nt.rect.width*Nt.rect.height?-1:Ot.rect.width*Ot.rect.height<Nt.rect.width*Nt.rect.height?1:0});for(var xt=0;xt<ht.length;xt++){var nt=ht[xt];U.rows.length==0?this.insertNodeToRow(U,nt,0,wt):this.canAddHorizontal(U,nt.rect.width,nt.rect.height)?this.insertNodeToRow(U,nt,this.getShortestRowIndex(U),wt):this.insertNodeToRow(U,nt,U.rows.length,wt),this.shiftToLastRow(U)}return U},yt.prototype.insertNodeToRow=function(ht,wt,X,pt){var U=pt;if(X==ht.rows.length){var xt=[];ht.rows.push(xt),ht.rowWidth.push(U),ht.rowHeight.push(0)}var nt=ht.rowWidth[X]+wt.rect.width;ht.rows[X].length>0&&(nt+=ht.horizontalPadding),ht.rowWidth[X]=nt,ht.width<nt&&(ht.width=nt);var Ot=wt.rect.height;X>0&&(Ot+=ht.verticalPadding);var Nt=0;Ot>ht.rowHeight[X]&&(Nt=ht.rowHeight[X],ht.rowHeight[X]=Ot,Nt=ht.rowHeight[X]-Nt),ht.height+=Nt,ht.rows[X].push(wt)},yt.prototype.getShortestRowIndex=function(ht){for(var wt=-1,X=Number.MAX_VALUE,pt=0;pt<ht.rows.length;pt++)ht.rowWidth[pt]<X&&(wt=pt,X=ht.rowWidth[pt]);return wt},yt.prototype.getLongestRowIndex=function(ht){for(var wt=-1,X=Number.MIN_VALUE,pt=0;pt<ht.rows.length;pt++)ht.rowWidth[pt]>X&&(wt=pt,X=ht.rowWidth[pt]);return wt},yt.prototype.canAddHorizontal=function(ht,wt,X){var pt=this.getShortestRowIndex(ht);if(pt<0)return!0;var U=ht.rowWidth[pt];if(U+ht.horizontalPadding+wt<=ht.width)return!0;var xt=0;ht.rowHeight[pt]<X&&pt>0&&(xt=X+ht.verticalPadding-ht.rowHeight[pt]);var nt;ht.width-U>=wt+ht.horizontalPadding?nt=(ht.height+xt)/(U+wt+ht.horizontalPadding):nt=(ht.height+xt)/ht.width,xt=X+ht.verticalPadding;var Ot;return ht.width<wt?Ot=(ht.height+xt)/wt:Ot=(ht.height+xt)/ht.width,Ot<1&&(Ot=1/Ot),nt<1&&(nt=1/nt),nt<Ot},yt.prototype.shiftToLastRow=function(ht){var wt=this.getLongestRowIndex(ht),X=ht.rowWidth.length-1,pt=ht.rows[wt],U=pt[pt.length-1],xt=U.width+ht.horizontalPadding;if(ht.width-ht.rowWidth[X]>xt&&wt!=X){pt.splice(-1,1),ht.rows[X].push(U),ht.rowWidth[wt]=ht.rowWidth[wt]-xt,ht.rowWidth[X]=ht.rowWidth[X]+xt,ht.width=ht.rowWidth[instance.getLongestRowIndex(ht)];for(var nt=Number.MIN_VALUE,Ot=0;Ot<pt.length;Ot++)pt[Ot].height>nt&&(nt=pt[Ot].height);wt>0&&(nt+=ht.verticalPadding);var Nt=ht.rowHeight[wt]+ht.rowHeight[X];ht.rowHeight[wt]=nt,ht.rowHeight[X]<U.height+ht.verticalPadding&&(ht.rowHeight[X]=U.height+ht.verticalPadding);var qt=ht.rowHeight[wt]+ht.rowHeight[X];ht.height+=qt-Nt,this.shiftToLastRow(ht)}},yt.prototype.tilingPreLayout=function(){B.TILE&&(this.groupZeroDegreeMembers(),this.clearCompounds(),this.clearZeroDegreeMembers())},yt.prototype.tilingPostLayout=function(){B.TILE&&(this.repopulateZeroDegreeMembers(),this.repopulateCompounds())},yt.prototype.reduceTrees=function(){for(var ht=[],wt=!0,X;wt;){var pt=this.graphManager.getAllNodes(),U=[];wt=!1;for(var xt=0;xt<pt.length;xt++)X=pt[xt],X.getEdges().length==1&&!X.getEdges()[0].isInterGraph&&X.getChild()==null&&(U.push([X,X.getEdges()[0],X.getOwner()]),wt=!0);if(wt==!0){for(var nt=[],Ot=0;Ot<U.length;Ot++)U[Ot][0].getEdges().length==1&&(nt.push(U[Ot]),U[Ot][0].getOwner().remove(U[Ot][0]));ht.push(nt),this.graphManager.resetAllNodes(),this.graphManager.resetAllEdges()}}this.prunedNodesAll=ht},yt.prototype.growTree=function(ht){for(var wt=ht.length,X=ht[wt-1],pt,U=0;U<X.length;U++)pt=X[U],this.findPlaceforPrunedNode(pt),pt[2].add(pt[0]),pt[2].add(pt[1],pt[1].source,pt[1].target);ht.splice(ht.length-1,1),this.graphManager.resetAllNodes(),this.graphManager.resetAllEdges()},yt.prototype.findPlaceforPrunedNode=function(ht){var wt,X,pt=ht[0];pt==ht[1].source?X=ht[1].target:X=ht[1].source;var U=X.startX,xt=X.finishX,nt=X.startY,Ot=X.finishY,Nt=0,qt=0,Ct=0,Z=0,Tt=[Nt,Ct,qt,Z];if(nt>0)for(var Ht=U;Ht<=xt;Ht++)Tt[0]+=this.grid[Ht][nt-1].length+this.grid[Ht][nt].length-1;if(xt<this.grid.length-1)for(var Ht=nt;Ht<=Ot;Ht++)Tt[1]+=this.grid[xt+1][Ht].length+this.grid[xt][Ht].length-1;if(Ot<this.grid[0].length-1)for(var Ht=U;Ht<=xt;Ht++)Tt[2]+=this.grid[Ht][Ot+1].length+this.grid[Ht][Ot].length-1;if(U>0)for(var Ht=nt;Ht<=Ot;Ht++)Tt[3]+=this.grid[U-1][Ht].length+this.grid[U][Ht].length-1;for(var It=st.MAX_VALUE,Ft,ke,pn=0;pn<Tt.length;pn++)Tt[pn]<It?(It=Tt[pn],Ft=1,ke=pn):Tt[pn]==It&&Ft++;if(Ft==3&&It==0)Tt[0]==0&&Tt[1]==0&&Tt[2]==0?wt=1:Tt[0]==0&&Tt[1]==0&&Tt[3]==0?wt=0:Tt[0]==0&&Tt[2]==0&&Tt[3]==0?wt=3:Tt[1]==0&&Tt[2]==0&&Tt[3]==0&&(wt=2);else if(Ft==2&&It==0){var Me=Math.floor(Math.random()*2);Tt[0]==0&&Tt[1]==0?Me==0?wt=0:wt=1:Tt[0]==0&&Tt[2]==0?Me==0?wt=0:wt=2:Tt[0]==0&&Tt[3]==0?Me==0?wt=0:wt=3:Tt[1]==0&&Tt[2]==0?Me==0?wt=1:wt=2:Tt[1]==0&&Tt[3]==0?Me==0?wt=1:wt=3:Me==0?wt=2:wt=3}else if(Ft==4&&It==0){var Me=Math.floor(Math.random()*4);wt=Me}else wt=ke;wt==0?pt.setCenter(X.getCenterX(),X.getCenterY()-X.getHeight()/2-j.DEFAULT_EDGE_LENGTH-pt.getHeight()/2):wt==1?pt.setCenter(X.getCenterX()+X.getWidth()/2+j.DEFAULT_EDGE_LENGTH+pt.getWidth()/2,X.getCenterY()):wt==2?pt.setCenter(X.getCenterX(),X.getCenterY()+X.getHeight()/2+j.DEFAULT_EDGE_LENGTH+pt.getHeight()/2):pt.setCenter(X.getCenterX()-X.getWidth()/2-j.DEFAULT_EDGE_LENGTH-pt.getWidth()/2,X.getCenterY())},p.exports=yt},function(p,v,m){var b={};b.layoutBase=m(0),b.CoSEConstants=m(1),b.CoSEEdge=m(2),b.CoSEGraph=m(3),b.CoSEGraphManager=m(4),b.CoSELayout=m(6),b.CoSENode=m(5),p.exports=b}])})}(Vgt)),Vgt.exports}(function(i,a){(function(p,v){i.exports=v(uWe())})(d0,function(f){return function(p){var v={};function m(b){if(v[b])return v[b].exports;var E=v[b]={i:b,l:!1,exports:{}};return p[b].call(E.exports,E,E.exports,m),E.l=!0,E.exports}return m.m=p,m.c=v,m.i=function(b){return b},m.d=function(b,E,_){m.o(b,E)||Object.defineProperty(b,E,{configurable:!1,enumerable:!0,get:_})},m.n=function(b){var E=b&&b.__esModule?function(){return b.default}:function(){return b};return m.d(E,"a",E),E},m.o=function(b,E){return Object.prototype.hasOwnProperty.call(b,E)},m.p="",m(m.s=1)}([function(p,v){p.exports=f},function(p,v,m){var b=m(0).layoutBase.LayoutConstants,E=m(0).layoutBase.FDLayoutConstants,_=m(0).CoSEConstants,L=m(0).CoSELayout,N=m(0).CoSENode,B=m(0).layoutBase.PointD,j=m(0).layoutBase.DimensionD,R={ready:function(){},stop:function(){},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 z(ut,bt){var mt={};for(var yt in ut)mt[yt]=ut[yt];for(var yt in bt)mt[yt]=bt[yt];return mt}function K(ut){this.options=z(R,ut),it(this.options)}var it=function(bt){bt.nodeRepulsion!=null&&(_.DEFAULT_REPULSION_STRENGTH=E.DEFAULT_REPULSION_STRENGTH=bt.nodeRepulsion),bt.idealEdgeLength!=null&&(_.DEFAULT_EDGE_LENGTH=E.DEFAULT_EDGE_LENGTH=bt.idealEdgeLength),bt.edgeElasticity!=null&&(_.DEFAULT_SPRING_STRENGTH=E.DEFAULT_SPRING_STRENGTH=bt.edgeElasticity),bt.nestingFactor!=null&&(_.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=E.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=bt.nestingFactor),bt.gravity!=null&&(_.DEFAULT_GRAVITY_STRENGTH=E.DEFAULT_GRAVITY_STRENGTH=bt.gravity),bt.numIter!=null&&(_.MAX_ITERATIONS=E.MAX_ITERATIONS=bt.numIter),bt.gravityRange!=null&&(_.DEFAULT_GRAVITY_RANGE_FACTOR=E.DEFAULT_GRAVITY_RANGE_FACTOR=bt.gravityRange),bt.gravityCompound!=null&&(_.DEFAULT_COMPOUND_GRAVITY_STRENGTH=E.DEFAULT_COMPOUND_GRAVITY_STRENGTH=bt.gravityCompound),bt.gravityRangeCompound!=null&&(_.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=E.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=bt.gravityRangeCompound),bt.initialEnergyOnIncremental!=null&&(_.DEFAULT_COOLING_FACTOR_INCREMENTAL=E.DEFAULT_COOLING_FACTOR_INCREMENTAL=bt.initialEnergyOnIncremental),bt.quality=="draft"?b.QUALITY=0:bt.quality=="proof"?b.QUALITY=2:b.QUALITY=1,_.NODE_DIMENSIONS_INCLUDE_LABELS=E.NODE_DIMENSIONS_INCLUDE_LABELS=b.NODE_DIMENSIONS_INCLUDE_LABELS=bt.nodeDimensionsIncludeLabels,_.DEFAULT_INCREMENTAL=E.DEFAULT_INCREMENTAL=b.DEFAULT_INCREMENTAL=!bt.randomize,_.ANIMATE=E.ANIMATE=b.ANIMATE=bt.animate,_.TILE=bt.tile,_.TILING_PADDING_VERTICAL=typeof bt.tilingPaddingVertical=="function"?bt.tilingPaddingVertical.call():bt.tilingPaddingVertical,_.TILING_PADDING_HORIZONTAL=typeof bt.tilingPaddingHorizontal=="function"?bt.tilingPaddingHorizontal.call():bt.tilingPaddingHorizontal};K.prototype.run=function(){var ut,bt,mt=this.options;this.idToLNode={};var yt=this.layout=new L,dt=this;dt.stopped=!1,this.cy=this.options.cy,this.cy.trigger({type:"layoutstart",layout:this});var ht=yt.newGraphManager();this.gm=ht;var wt=this.options.eles.nodes(),X=this.options.eles.edges();this.root=ht.addRoot(),this.processChildrenList(this.root,this.getTopMostNodes(wt),yt);for(var pt=0;pt<X.length;pt++){var U=X[pt],xt=this.idToLNode[U.data("source")],nt=this.idToLNode[U.data("target")];if(xt!==nt&&xt.getEdgesBetween(nt).length==0){var Ot=ht.add(yt.newEdge(),xt,nt);Ot.id=U.id()}}var Nt=function(Z,Tt){typeof Z=="number"&&(Z=Tt);var Ht=Z.data("id"),It=dt.idToLNode[Ht];return{x:It.getRect().getCenterX(),y:It.getRect().getCenterY()}},qt=function Ct(){for(var Z=function(){mt.fit&&mt.cy.fit(mt.eles,mt.padding),ut||(ut=!0,dt.cy.one("layoutready",mt.ready),dt.cy.trigger({type:"layoutready",layout:dt}))},Tt=dt.options.refresh,Ht,It=0;It<Tt&&!Ht;It++)Ht=dt.stopped||dt.layout.tick();if(Ht){yt.checkLayoutSuccess()&&!yt.isSubLayout&&yt.doPostLayout(),yt.tilingPostLayout&&yt.tilingPostLayout(),yt.isLayoutFinished=!0,dt.options.eles.nodes().positions(Nt),Z(),dt.cy.one("layoutstop",dt.options.stop),dt.cy.trigger({type:"layoutstop",layout:dt}),bt&&cancelAnimationFrame(bt),ut=!1;return}var Ft=dt.layout.getPositionsData();mt.eles.nodes().positions(function(ke,pn){if(typeof ke=="number"&&(ke=pn),!ke.isParent()){for(var Me=ke.id(),ve=Ft[Me],Ge=ke;ve==null&&(ve=Ft[Ge.data("parent")]||Ft["DummyCompound_"+Ge.data("parent")],Ft[Me]=ve,Ge=Ge.parent()[0],Ge!=null););return ve!=null?{x:ve.x,y:ve.y}:{x:ke.position("x"),y:ke.position("y")}}}),Z(),bt=requestAnimationFrame(Ct)};return yt.addListener("layoutstarted",function(){dt.options.animate==="during"&&(bt=requestAnimationFrame(qt))}),yt.runLayout(),this.options.animate!=="during"&&(dt.options.eles.nodes().not(":parent").layoutPositions(dt,dt.options,Nt),ut=!1),this},K.prototype.getTopMostNodes=function(ut){for(var bt={},mt=0;mt<ut.length;mt++)bt[ut[mt].id()]=!0;var yt=ut.filter(function(dt,ht){typeof dt=="number"&&(dt=ht);for(var wt=dt.parent()[0];wt!=null;){if(bt[wt.id()])return!1;wt=wt.parent()[0]}return!0});return yt},K.prototype.processChildrenList=function(ut,bt,mt){for(var yt=bt.length,dt=0;dt<yt;dt++){var ht=bt[dt],wt=ht.children(),X,pt=ht.layoutDimensions({nodeDimensionsIncludeLabels:this.options.nodeDimensionsIncludeLabels});if(ht.outerWidth()!=null&&ht.outerHeight()!=null?X=ut.add(new N(mt.graphManager,new B(ht.position("x")-pt.w/2,ht.position("y")-pt.h/2),new j(parseFloat(pt.w),parseFloat(pt.h)))):X=ut.add(new N(this.graphManager)),X.id=ht.data("id"),X.paddingLeft=parseInt(ht.css("padding")),X.paddingTop=parseInt(ht.css("padding")),X.paddingRight=parseInt(ht.css("padding")),X.paddingBottom=parseInt(ht.css("padding")),this.options.nodeDimensionsIncludeLabels&&ht.isParent()){var U=ht.boundingBox({includeLabels:!0,includeNodes:!1}).w,xt=ht.boundingBox({includeLabels:!0,includeNodes:!1}).h,nt=ht.css("text-halign");X.labelWidth=U,X.labelHeight=xt,X.labelPos=nt}if(this.idToLNode[ht.data("id")]=X,isNaN(X.rect.x)&&(X.rect.x=0),isNaN(X.rect.y)&&(X.rect.y=0),wt!=null&&wt.length>0){var Ot;Ot=mt.getGraphManager().add(mt.newGraph(),X),this.processChildrenList(Ot,wt,mt)}}},K.prototype.stop=function(){return this.stopped=!0,this};var st=function(bt){bt("layout","cose-bilkent",K)};typeof cytoscape<"u"&&st(cytoscape),p.exports=st}])})})(Xjt);var lWe=Xjt.exports;const hWe=B7(lWe);Yjt.use(hWe);function Jjt(i,a,f,p){Wjt.drawNode(i,a,f,p),a.children&&a.children.forEach((v,m)=>{Jjt(i,v,f<0?m:f,p)})}function fWe(i,a){a.edges().map((f,p)=>{const v=f.data();if(f[0]._private.bodyBounds){const m=f[0]._private.rscratch;Ut.trace("Edge: ",p,v),i.insert("path").attr("d",`M ${m.startX},${m.startY} L ${m.midX},${m.midY} L${m.endX},${m.endY} `).attr("class","edge section-edge-"+v.section+" edge-depth-"+v.depth)}})}function t$t(i,a,f,p){a.add({group:"nodes",data:{id:i.id,labelText:i.descr,height:i.height,width:i.width,level:p,nodeId:i.id,padding:i.padding,type:i.type},position:{x:i.x,y:i.y}}),i.children&&i.children.forEach(v=>{t$t(v,a,f,p+1),a.add({group:"edges",data:{id:`${i.id}_${v.id}`,source:i.id,target:v.id,depth:p,section:v.section}})})}function dWe(i,a){return new Promise(f=>{const p=yr("body").append("div").attr("id","cy").attr("style","display:none"),v=Yjt({container:document.getElementById("cy"),style:[{selector:"edge",style:{"curve-style":"bezier"}}]});p.remove(),t$t(i,v,a,0),v.nodes().forEach(function(m){m.layoutDimensions=()=>{const b=m.data();return{w:b.width,h:b.height}}}),v.layout({name:"cose-bilkent",quality:"proof",styleEnabled:!1,animate:!1}).run(),v.ready(m=>{Ut.info("Ready",m),f(v)})})}function gWe(i){i.nodes().map((a,f)=>{const p=a.data();p.x=a.position().x,p.y=a.position().y,Wjt.positionNode(p);const v=Ggt(p.nodeId);Ut.info("Id:",f,"Position: (",a.position().x,", ",a.position().y,")",p),v.attr("transform",`translate(${a.position().x-p.width/2}, ${a.position().y-p.height/2})`),v.attr("attr",`apa-${f})`)})}const pWe={draw:async(i,a,f,p)=>{const v=Le();v.htmlLabels=!1,Ut.debug(`Rendering mindmap diagram
`+i,p.parser);const m=Le().securityLevel;let b;m==="sandbox"&&(b=yr("#i"+a));const _=yr(m==="sandbox"?b.nodes()[0].contentDocument.body:"body").select("#"+a);_.append("g");const L=p.db.getMindmap(),N=_.append("g");N.attr("class","mindmap-edges");const B=_.append("g");B.attr("class","mindmap-nodes"),Jjt(B,L,-1,v);const j=await dWe(L,v);fWe(N,j),gWe(j),cT(void 0,_,v.mindmap.padding,v.mindmap.useMaxWidth)}},bWe=i=>{let a="";for(let f=0;f<i.THEME_COLOR_LIMIT;f++)i["lineColor"+f]=i["lineColor"+f]||i["cScaleInv"+f],J7(i["lineColor"+f])?i["lineColor"+f]=bs(i["lineColor"+f],20):i["lineColor"+f]=js(i["lineColor"+f],20);for(let f=0;f<i.THEME_COLOR_LIMIT;f++){const p=""+(17-3*f);a+=`
    .section-${f-1} rect, .section-${f-1} path, .section-${f-1} circle, .section-${f-1} polygon, .section-${f-1} path  {
      fill: ${i["cScale"+f]};
    }
    .section-${f-1} text {
     fill: ${i["cScaleLabel"+f]};
    }
    .node-icon-${f-1} {
      font-size: 40px;
      color: ${i["cScaleLabel"+f]};
    }
    .section-edge-${f-1}{
      stroke: ${i["cScale"+f]};
    }
    .edge-depth-${f-1}{
      stroke-width: ${p};
    }
    .section-${f-1} line {
      stroke: ${i["cScaleInv"+f]} ;
      stroke-width: 3;
    }

    .disabled, .disabled circle, .disabled text {
      fill: lightgray;
    }
    .disabled text {
      fill: #efefef;
    }
    `}return a},vWe=Object.freeze(Object.defineProperty({__proto__:null,diagram:{db:ZUe,renderer:pWe,parser:qUe,styles:i=>`
  .edge {
    stroke-width: 3;
  }
  ${bWe(i)}
  .section-root rect, .section-root path, .section-root circle, .section-root polygon  {
    fill: ${i.git0};
  }
  .section-root text {
    fill: ${i.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;
  }
`}},Symbol.toStringTag,{value:"Module"}));var Wgt=function(){var i=function(E,_,L,N){for(L=L||{},N=E.length;N--;L[E[N]]=_);return L},a=[1,9],f=[1,10],p=[1,5,10,12],v={trace:function(){},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:function(_,L,N,B,j,R,z){var K=R.length-1;switch(j){case 7:const it=B.findOrCreateNode(R[K-4].trim().replaceAll('""','"')),st=B.findOrCreateNode(R[K-2].trim().replaceAll('""','"')),ut=parseFloat(R[K].trim());B.addLink(it,st,ut);break;case 8:case 9:case 11:this.$=R[K];break;case 10:this.$=R[K-1];break}},table:[{3:1,4:[1,2]},{1:[3]},{5:[1,3]},{6:4,8:5,15:6,16:7,17:8,18:a,20:f},{1:[2,6],7:11,10:[1,12]},i(f,[2,4],{9:13,5:[1,14]}),{12:[1,15]},i(p,[2,8]),i(p,[2,9]),{19:[1,16]},i(p,[2,11]),{1:[2,1]},{1:[2,5]},i(f,[2,2]),{6:17,8:5,15:6,16:7,17:8,18:a,20:f},{15:18,16:7,17:8,18:a,20:f},{18:[1,19]},i(f,[2,3]),{12:[1,20]},i(p,[2,10]),{15:21,16:7,17:8,18:a,20:f},i([1,5,10],[2,7])],defaultActions:{11:[2,1],12:[2,5]},parseError:function(_,L){if(L.recoverable)this.trace(_);else{var N=new Error(_);throw N.hash=L,N}},parse:function(_){var L=this,N=[0],B=[],j=[null],R=[],z=this.table,K="",it=0,st=0,ut=2,bt=1,mt=R.slice.call(arguments,1),yt=Object.create(this.lexer),dt={yy:{}};for(var ht in this.yy)Object.prototype.hasOwnProperty.call(this.yy,ht)&&(dt.yy[ht]=this.yy[ht]);yt.setInput(_,dt.yy),dt.yy.lexer=yt,dt.yy.parser=this,typeof yt.yylloc>"u"&&(yt.yylloc={});var wt=yt.yylloc;R.push(wt);var X=yt.options&&yt.options.ranges;typeof dt.yy.parseError=="function"?this.parseError=dt.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function pt(){var It;return It=B.pop()||yt.lex()||bt,typeof It!="number"&&(It instanceof Array&&(B=It,It=B.pop()),It=L.symbols_[It]||It),It}for(var U,xt,nt,Ot,Nt={},qt,Ct,Z,Tt;;){if(xt=N[N.length-1],this.defaultActions[xt]?nt=this.defaultActions[xt]:((U===null||typeof U>"u")&&(U=pt()),nt=z[xt]&&z[xt][U]),typeof nt>"u"||!nt.length||!nt[0]){var Ht="";Tt=[];for(qt in z[xt])this.terminals_[qt]&&qt>ut&&Tt.push("'"+this.terminals_[qt]+"'");yt.showPosition?Ht="Parse error on line "+(it+1)+`:
`+yt.showPosition()+`
Expecting `+Tt.join(", ")+", got '"+(this.terminals_[U]||U)+"'":Ht="Parse error on line "+(it+1)+": Unexpected "+(U==bt?"end of input":"'"+(this.terminals_[U]||U)+"'"),this.parseError(Ht,{text:yt.match,token:this.terminals_[U]||U,line:yt.yylineno,loc:wt,expected:Tt})}if(nt[0]instanceof Array&&nt.length>1)throw new Error("Parse Error: multiple actions possible at state: "+xt+", token: "+U);switch(nt[0]){case 1:N.push(U),j.push(yt.yytext),R.push(yt.yylloc),N.push(nt[1]),U=null,st=yt.yyleng,K=yt.yytext,it=yt.yylineno,wt=yt.yylloc;break;case 2:if(Ct=this.productions_[nt[1]][1],Nt.$=j[j.length-Ct],Nt._$={first_line:R[R.length-(Ct||1)].first_line,last_line:R[R.length-1].last_line,first_column:R[R.length-(Ct||1)].first_column,last_column:R[R.length-1].last_column},X&&(Nt._$.range=[R[R.length-(Ct||1)].range[0],R[R.length-1].range[1]]),Ot=this.performAction.apply(Nt,[K,st,it,dt.yy,nt[1],j,R].concat(mt)),typeof Ot<"u")return Ot;Ct&&(N=N.slice(0,-1*Ct*2),j=j.slice(0,-1*Ct),R=R.slice(0,-1*Ct)),N.push(this.productions_[nt[1]][0]),j.push(Nt.$),R.push(Nt._$),Z=z[N[N.length-2]][N[N.length-1]],N.push(Z);break;case 3:return!0}}return!0}},m=function(){var E={EOF:1,parseError:function(L,N){if(this.yy.parser)this.yy.parser.parseError(L,N);else throw new Error(L)},setInput:function(_,L){return this.yy=L||this.yy||{},this._input=_,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},input:function(){var _=this._input[0];this.yytext+=_,this.yyleng++,this.offset++,this.match+=_,this.matched+=_;var L=_.match(/(?:\r\n?|\n).*/g);return L?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),_},unput:function(_){var L=_.length,N=_.split(/(?:\r\n?|\n)/g);this._input=_+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-L),this.offset-=L;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),N.length-1&&(this.yylineno-=N.length-1);var j=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===B.length?this.yylloc.first_column:0)+B[B.length-N.length].length-N[0].length:this.yylloc.first_column-L},this.options.ranges&&(this.yylloc.range=[j[0],j[0]+this.yyleng-L]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject: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},less:function(_){this.unput(this.match.slice(_))},pastInput:function(){var _=this.matched.substr(0,this.matched.length-this.match.length);return(_.length>20?"...":"")+_.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var _=this.match;return _.length<20&&(_+=this._input.substr(0,20-_.length)),(_.substr(0,20)+(_.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var _=this.pastInput(),L=new Array(_.length+1).join("-");return _+this.upcomingInput()+`
`+L+"^"},test_match:function(_,L){var N,B,j;if(this.options.backtrack_lexer&&(j={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&&(j.yylloc.range=this.yylloc.range.slice(0))),B=_[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+_[0].length},this.yytext+=_[0],this.match+=_[0],this.matches=_,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(_[0].length),this.matched+=_[0],N=this.performAction.call(this,this.yy,this,L,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),N)return N;if(this._backtrack){for(var R in j)this[R]=j[R];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var _,L,N,B;this._more||(this.yytext="",this.match="");for(var j=this._currentRules(),R=0;R<j.length;R++)if(N=this._input.match(this.rules[j[R]]),N&&(!L||N[0].length>L[0].length)){if(L=N,B=R,this.options.backtrack_lexer){if(_=this.test_match(N,j[R]),_!==!1)return _;if(this._backtrack){L=!1;continue}else return!1}else if(!this.options.flex)break}return L?(_=this.test_match(L,j[B]),_!==!1?_:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text.
`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var L=this.next();return L||this.lex()},begin:function(L){this.conditionStack.push(L)},popState:function(){var L=this.conditionStack.length-1;return L>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(L){return L=this.conditionStack.length-1-Math.abs(L||0),L>=0?this.conditionStack[L]:"INITIAL"},pushState:function(L){this.begin(L)},stateStackSize:function(){return this.conditionStack.length},options:{easy_keword_rules:!0},performAction:function(L,N,B,j){switch(B){case 0:return this.pushState("csv"),4;case 1:return 10;case 2:return 5;case 3:return 12;case 4:return this.pushState("escaped_text"),18;case 5:return 20;case 6:return this.popState("escaped_text"),18;case 7:return 19}},rules:[/^(?:sankey-beta\b)/,/^(?:$)/,/^(?:((\u000D\u000A)|(\u000A)))/,/^(?:(\u002C))/,/^(?:(\u0022))/,/^(?:([\u0020-\u0021\u0023-\u002B\u002D-\u007E])*)/,/^(?:(\u0022)(?!(\u0022)))/,/^(?:(([\u0020-\u0021\u0023-\u002B\u002D-\u007E])|(\u002C)|(\u000D)|(\u000A)|(\u0022)(\u0022))*)/],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 E}();v.lexer=m;function b(){this.yy={}}return b.prototype=v,v.Parser=b,new b}();Wgt.parser=Wgt;const UK=Wgt;let WK=[],KK=[],vL={};const wWe=()=>{WK=[],KK=[],vL={},ap()};class mWe{constructor(a,f,p=0){this.source=a,this.target=f,this.value=p}}const yWe=(i,a,f)=>{WK.push(new mWe(i,a,f))};class xWe{constructor(a){this.ID=a}}const kWe={nodesMap:vL,getConfig:()=>Le().sankey,getNodes:()=>KK,getLinks:()=>WK,getGraph:()=>({nodes:KK.map(i=>({id:i.ID})),links:WK.map(i=>({source:i.source.ID,target:i.target.ID,value:i.value}))}),addLink:yWe,findOrCreateNode:i=>(i=Yr.sanitizeText(i,Le()),vL[i]||(vL[i]=new xWe(i),KK.push(vL[i])),vL[i]),getAccTitle:op,setAccTitle:cg,getAccDescription:up,setAccDescription:cp,getDiagramTitle:Db,setDiagramTitle:Z2,clear:wWe};function e$t(i,a){let f;if(a===void 0)for(const p of i)p!=null&&(f<p||f===void 0&&p>=p)&&(f=p);else{let p=-1;for(let v of i)(v=a(v,++p,i))!=null&&(f<v||f===void 0&&v>=v)&&(f=v)}return f}function n$t(i,a){let f;if(a===void 0)for(const p of i)p!=null&&(f>p||f===void 0&&p>=p)&&(f=p);else{let p=-1;for(let v of i)(v=a(v,++p,i))!=null&&(f>v||f===void 0&&v>=v)&&(f=v)}return f}function Kgt(i,a){let f=0;if(a===void 0)for(let p of i)(p=+p)&&(f+=p);else{let p=-1;for(let v of i)(v=+a(v,++p,i))&&(f+=v)}return f}function EWe(i){return i.target.depth}function TWe(i){return i.depth}function CWe(i,a){return a-1-i.height}function r$t(i,a){return i.sourceLinks.length?i.depth:a-1}function _We(i){return i.targetLinks.length?i.depth:i.sourceLinks.length?n$t(i.sourceLinks,EWe)-1:0}function YK(i){return function(){return i}}function i$t(i,a){return XK(i.source,a.source)||i.index-a.index}function s$t(i,a){return XK(i.target,a.target)||i.index-a.index}function XK(i,a){return i.y0-a.y0}function Ygt(i){return i.value}function SWe(i){return i.index}function AWe(i){return i.nodes}function LWe(i){return i.links}function a$t(i,a){const f=i.get(a);if(!f)throw new Error("missing: "+a);return f}function o$t({nodes:i}){for(const a of i){let f=a.y0,p=f;for(const v of a.sourceLinks)v.y0=f+v.width/2,f+=v.width;for(const v of a.targetLinks)v.y1=p+v.width/2,p+=v.width}}function MWe(){let i=0,a=0,f=1,p=1,v=24,m=8,b,E=SWe,_=r$t,L,N,B=AWe,j=LWe,R=6;function z(){const Nt={nodes:B.apply(null,arguments),links:j.apply(null,arguments)};return K(Nt),it(Nt),st(Nt),ut(Nt),yt(Nt),o$t(Nt),Nt}z.update=function(Nt){return o$t(Nt),Nt},z.nodeId=function(Nt){return arguments.length?(E=typeof Nt=="function"?Nt:YK(Nt),z):E},z.nodeAlign=function(Nt){return arguments.length?(_=typeof Nt=="function"?Nt:YK(Nt),z):_},z.nodeSort=function(Nt){return arguments.length?(L=Nt,z):L},z.nodeWidth=function(Nt){return arguments.length?(v=+Nt,z):v},z.nodePadding=function(Nt){return arguments.length?(m=b=+Nt,z):m},z.nodes=function(Nt){return arguments.length?(B=typeof Nt=="function"?Nt:YK(Nt),z):B},z.links=function(Nt){return arguments.length?(j=typeof Nt=="function"?Nt:YK(Nt),z):j},z.linkSort=function(Nt){return arguments.length?(N=Nt,z):N},z.size=function(Nt){return arguments.length?(i=a=0,f=+Nt[0],p=+Nt[1],z):[f-i,p-a]},z.extent=function(Nt){return arguments.length?(i=+Nt[0][0],f=+Nt[1][0],a=+Nt[0][1],p=+Nt[1][1],z):[[i,a],[f,p]]},z.iterations=function(Nt){return arguments.length?(R=+Nt,z):R};function K({nodes:Nt,links:qt}){for(const[Z,Tt]of Nt.entries())Tt.index=Z,Tt.sourceLinks=[],Tt.targetLinks=[];const Ct=new Map(Nt.map((Z,Tt)=>[E(Z,Tt,Nt),Z]));for(const[Z,Tt]of qt.entries()){Tt.index=Z;let{source:Ht,target:It}=Tt;typeof Ht!="object"&&(Ht=Tt.source=a$t(Ct,Ht)),typeof It!="object"&&(It=Tt.target=a$t(Ct,It)),Ht.sourceLinks.push(Tt),It.targetLinks.push(Tt)}if(N!=null)for(const{sourceLinks:Z,targetLinks:Tt}of Nt)Z.sort(N),Tt.sort(N)}function it({nodes:Nt}){for(const qt of Nt)qt.value=qt.fixedValue===void 0?Math.max(Kgt(qt.sourceLinks,Ygt),Kgt(qt.targetLinks,Ygt)):qt.fixedValue}function st({nodes:Nt}){const qt=Nt.length;let Ct=new Set(Nt),Z=new Set,Tt=0;for(;Ct.size;){for(const Ht of Ct){Ht.depth=Tt;for(const{target:It}of Ht.sourceLinks)Z.add(It)}if(++Tt>qt)throw new Error("circular link");Ct=Z,Z=new Set}}function ut({nodes:Nt}){const qt=Nt.length;let Ct=new Set(Nt),Z=new Set,Tt=0;for(;Ct.size;){for(const Ht of Ct){Ht.height=Tt;for(const{source:It}of Ht.targetLinks)Z.add(It)}if(++Tt>qt)throw new Error("circular link");Ct=Z,Z=new Set}}function bt({nodes:Nt}){const qt=e$t(Nt,Tt=>Tt.depth)+1,Ct=(f-i-v)/(qt-1),Z=new Array(qt);for(const Tt of Nt){const Ht=Math.max(0,Math.min(qt-1,Math.floor(_.call(null,Tt,qt))));Tt.layer=Ht,Tt.x0=i+Ht*Ct,Tt.x1=Tt.x0+v,Z[Ht]?Z[Ht].push(Tt):Z[Ht]=[Tt]}if(L)for(const Tt of Z)Tt.sort(L);return Z}function mt(Nt){const qt=n$t(Nt,Ct=>(p-a-(Ct.length-1)*b)/Kgt(Ct,Ygt));for(const Ct of Nt){let Z=a;for(const Tt of Ct){Tt.y0=Z,Tt.y1=Z+Tt.value*qt,Z=Tt.y1+b;for(const Ht of Tt.sourceLinks)Ht.width=Ht.value*qt}Z=(p-Z+b)/(Ct.length+1);for(let Tt=0;Tt<Ct.length;++Tt){const Ht=Ct[Tt];Ht.y0+=Z*(Tt+1),Ht.y1+=Z*(Tt+1)}xt(Ct)}}function yt(Nt){const qt=bt(Nt);b=Math.min(m,(p-a)/(e$t(qt,Ct=>Ct.length)-1)),mt(qt);for(let Ct=0;Ct<R;++Ct){const Z=Math.pow(.99,Ct),Tt=Math.max(1-Z,(Ct+1)/R);ht(qt,Z,Tt),dt(qt,Z,Tt)}}function dt(Nt,qt,Ct){for(let Z=1,Tt=Nt.length;Z<Tt;++Z){const Ht=Nt[Z];for(const It of Ht){let Ft=0,ke=0;for(const{source:Me,value:ve}of It.targetLinks){let Ge=ve*(It.layer-Me.layer);Ft+=nt(Me,It)*Ge,ke+=Ge}if(!(ke>0))continue;let pn=(Ft/ke-It.y0)*qt;It.y0+=pn,It.y1+=pn,U(It)}L===void 0&&Ht.sort(XK),wt(Ht,Ct)}}function ht(Nt,qt,Ct){for(let Z=Nt.length,Tt=Z-2;Tt>=0;--Tt){const Ht=Nt[Tt];for(const It of Ht){let Ft=0,ke=0;for(const{target:Me,value:ve}of It.sourceLinks){let Ge=ve*(Me.layer-It.layer);Ft+=Ot(It,Me)*Ge,ke+=Ge}if(!(ke>0))continue;let pn=(Ft/ke-It.y0)*qt;It.y0+=pn,It.y1+=pn,U(It)}L===void 0&&Ht.sort(XK),wt(Ht,Ct)}}function wt(Nt,qt){const Ct=Nt.length>>1,Z=Nt[Ct];pt(Nt,Z.y0-b,Ct-1,qt),X(Nt,Z.y1+b,Ct+1,qt),pt(Nt,p,Nt.length-1,qt),X(Nt,a,0,qt)}function X(Nt,qt,Ct,Z){for(;Ct<Nt.length;++Ct){const Tt=Nt[Ct],Ht=(qt-Tt.y0)*Z;Ht>1e-6&&(Tt.y0+=Ht,Tt.y1+=Ht),qt=Tt.y1+b}}function pt(Nt,qt,Ct,Z){for(;Ct>=0;--Ct){const Tt=Nt[Ct],Ht=(Tt.y1-qt)*Z;Ht>1e-6&&(Tt.y0-=Ht,Tt.y1-=Ht),qt=Tt.y0-b}}function U({sourceLinks:Nt,targetLinks:qt}){if(N===void 0){for(const{source:{sourceLinks:Ct}}of qt)Ct.sort(s$t);for(const{target:{targetLinks:Ct}}of Nt)Ct.sort(i$t)}}function xt(Nt){if(N===void 0)for(const{sourceLinks:qt,targetLinks:Ct}of Nt)qt.sort(s$t),Ct.sort(i$t)}function nt(Nt,qt){let Ct=Nt.y0-(Nt.sourceLinks.length-1)*b/2;for(const{target:Z,width:Tt}of Nt.sourceLinks){if(Z===qt)break;Ct+=Tt+b}for(const{source:Z,width:Tt}of qt.targetLinks){if(Z===Nt)break;Ct-=Tt}return Ct}function Ot(Nt,qt){let Ct=qt.y0-(qt.targetLinks.length-1)*b/2;for(const{source:Z,width:Tt}of qt.targetLinks){if(Z===Nt)break;Ct+=Tt+b}for(const{target:Z,width:Tt}of Nt.sourceLinks){if(Z===qt)break;Ct-=Tt}return Ct}return z}var Xgt=Math.PI,Qgt=2*Xgt,MT=1e-6,IWe=Qgt-MT;function Zgt(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function c$t(){return new Zgt}Zgt.prototype=c$t.prototype={constructor:Zgt,moveTo:function(i,a){this._+="M"+(this._x0=this._x1=+i)+","+(this._y0=this._y1=+a)},closePath:function(){this._x1!==null&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function(i,a){this._+="L"+(this._x1=+i)+","+(this._y1=+a)},quadraticCurveTo:function(i,a,f,p){this._+="Q"+ +i+","+ +a+","+(this._x1=+f)+","+(this._y1=+p)},bezierCurveTo:function(i,a,f,p,v,m){this._+="C"+ +i+","+ +a+","+ +f+","+ +p+","+(this._x1=+v)+","+(this._y1=+m)},arcTo:function(i,a,f,p,v){i=+i,a=+a,f=+f,p=+p,v=+v;var m=this._x1,b=this._y1,E=f-i,_=p-a,L=m-i,N=b-a,B=L*L+N*N;if(v<0)throw new Error("negative radius: "+v);if(this._x1===null)this._+="M"+(this._x1=i)+","+(this._y1=a);else if(B>MT)if(!(Math.abs(N*E-_*L)>MT)||!v)this._+="L"+(this._x1=i)+","+(this._y1=a);else{var j=f-m,R=p-b,z=E*E+_*_,K=j*j+R*R,it=Math.sqrt(z),st=Math.sqrt(B),ut=v*Math.tan((Xgt-Math.acos((z+B-K)/(2*it*st)))/2),bt=ut/st,mt=ut/it;Math.abs(bt-1)>MT&&(this._+="L"+(i+bt*L)+","+(a+bt*N)),this._+="A"+v+","+v+",0,0,"+ +(N*j>L*R)+","+(this._x1=i+mt*E)+","+(this._y1=a+mt*_)}},arc:function(i,a,f,p,v,m){i=+i,a=+a,f=+f,m=!!m;var b=f*Math.cos(p),E=f*Math.sin(p),_=i+b,L=a+E,N=1^m,B=m?p-v:v-p;if(f<0)throw new Error("negative radius: "+f);this._x1===null?this._+="M"+_+","+L:(Math.abs(this._x1-_)>MT||Math.abs(this._y1-L)>MT)&&(this._+="L"+_+","+L),f&&(B<0&&(B=B%Qgt+Qgt),B>IWe?this._+="A"+f+","+f+",0,1,"+N+","+(i-b)+","+(a-E)+"A"+f+","+f+",0,1,"+N+","+(this._x1=_)+","+(this._y1=L):B>MT&&(this._+="A"+f+","+f+",0,"+ +(B>=Xgt)+","+N+","+(this._x1=i+f*Math.cos(v))+","+(this._y1=a+f*Math.sin(v))))},rect:function(i,a,f,p){this._+="M"+(this._x0=this._x1=+i)+","+(this._y0=this._y1=+a)+"h"+ +f+"v"+ +p+"h"+-f+"Z"},toString:function(){return this._}};function u$t(i){return function(){return i}}function DWe(i){return i[0]}function OWe(i){return i[1]}var NWe=Array.prototype.slice;function PWe(i){return i.source}function FWe(i){return i.target}function BWe(i){var a=PWe,f=FWe,p=DWe,v=OWe,m=null;function b(){var E,_=NWe.call(arguments),L=a.apply(this,_),N=f.apply(this,_);if(m||(m=E=c$t()),i(m,+p.apply(this,(_[0]=L,_)),+v.apply(this,_),+p.apply(this,(_[0]=N,_)),+v.apply(this,_)),E)return m=null,E+""||null}return b.source=function(E){return arguments.length?(a=E,b):a},b.target=function(E){return arguments.length?(f=E,b):f},b.x=function(E){return arguments.length?(p=typeof E=="function"?E:u$t(+E),b):p},b.y=function(E){return arguments.length?(v=typeof E=="function"?E:u$t(+E),b):v},b.context=function(E){return arguments.length?(m=E??null,b):m},b}function RWe(i,a,f,p,v){i.moveTo(a,f),i.bezierCurveTo(a=(a+p)/2,f,a,v,p,v)}function jWe(){return BWe(RWe)}function $We(i){return[i.source.x1,i.y0]}function zWe(i){return[i.target.x0,i.y1]}function qWe(){return jWe().source($We).target(zWe)}const Jgt=class{static next(i){return new Jgt(i+ ++Jgt.count)}constructor(i){this.id=i,this.href=`#${i}`}toString(){return"url("+this.href+")"}};let tpt=Jgt;tpt.count=0;const HWe={left:TWe,right:CWe,center:_We,justify:r$t},GWe={draw:function(i,a,f,p){const{securityLevel:v,sankey:m}=Le(),b=oT.sankey;let E;v==="sandbox"&&(E=yr("#i"+a));const _=yr(v==="sandbox"?E.nodes()[0].contentDocument.body:"body"),L=v==="sandbox"?_.select(`[id="${a}"]`):yr(`[id="${a}"]`),N=(m==null?void 0:m.width)??b.width,B=(m==null?void 0:m.height)??b.width,j=(m==null?void 0:m.useMaxWidth)??b.useMaxWidth,R=(m==null?void 0:m.nodeAlignment)??b.nodeAlignment,z=(m==null?void 0:m.prefix)??b.prefix,K=(m==null?void 0:m.suffix)??b.suffix,it=(m==null?void 0:m.showValues)??b.showValues;og(L,B,N,j);const st=p.db.getGraph(),ut=HWe[R],bt=10;MWe().nodeId(pt=>pt.id).nodeWidth(bt).nodePadding(10+(it?15:0)).nodeAlign(ut).extent([[0,0],[N,B]])(st);const yt=x1t(S7e);L.append("g").attr("class","nodes").selectAll(".node").data(st.nodes).join("g").attr("class","node").attr("id",pt=>(pt.uid=tpt.next("node-")).id).attr("transform",function(pt){return"translate("+pt.x0+","+pt.y0+")"}).attr("x",pt=>pt.x0).attr("y",pt=>pt.y0).append("rect").attr("height",pt=>pt.y1-pt.y0).attr("width",pt=>pt.x1-pt.x0).attr("fill",pt=>yt(pt.id));const dt=({id:pt,value:U})=>it?`${pt}
${z}${Math.round(U*100)/100}${K}`:pt;L.append("g").attr("class","node-labels").attr("font-family","sans-serif").attr("font-size",14).selectAll("text").data(st.nodes).join("text").attr("x",pt=>pt.x0<N/2?pt.x1+6:pt.x0-6).attr("y",pt=>(pt.y1+pt.y0)/2).attr("dy",`${it?"0":"0.35"}em`).attr("text-anchor",pt=>pt.x0<N/2?"start":"end").text(dt);const ht=L.append("g").attr("class","links").attr("fill","none").attr("stroke-opacity",.5).selectAll(".link").data(st.links).join("g").attr("class","link").style("mix-blend-mode","multiply"),wt=(m==null?void 0:m.linkColor)||"gradient";if(wt==="gradient"){const pt=ht.append("linearGradient").attr("id",U=>(U.uid=tpt.next("linearGradient-")).id).attr("gradientUnits","userSpaceOnUse").attr("x1",U=>U.source.x1).attr("x2",U=>U.target.x0);pt.append("stop").attr("offset","0%").attr("stop-color",U=>yt(U.source.id)),pt.append("stop").attr("offset","100%").attr("stop-color",U=>yt(U.target.id))}let X;switch(wt){case"gradient":X=pt=>pt.uid;break;case"source":X=pt=>yt(pt.source.id);break;case"target":X=pt=>yt(pt.target.id);break;default:X=wt}ht.append("path").attr("d",qWe()).attr("stroke",X).attr("stroke-width",pt=>Math.max(1,pt.width))}},VWe=i=>i.replaceAll(/^[^\S\n\r]+|[^\S\n\r]+$/g,"").replaceAll(/([\n\r])+/g,`
`).trim(),UWe=UK.parse.bind(UK);UK.parse=i=>UWe(VWe(i));const WWe=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:UK,db:kWe,renderer:GWe}},Symbol.toStringTag,{value:"Module"}));return Ob});
