@datagrok/bio 2.21.7 → 2.21.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/dist/package-test.js +1 -1
- package/dist/package-test.js.map +1 -1
- package/dist/package.js +2 -2
- package/dist/package.js.map +1 -1
- package/package.json +2 -2
- package/src/widgets/sequence-scrolling-widget.ts +18 -13
- package/test-console-output-1.log +304 -304
- package/test-record-1.mp4 +0 -0
package/dist/package.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
var bio;(()=>{var t={8924:(t,e,n)=>{"use strict";var i=n(7362);class r extends i.e{static get Lesk(){return void 0===this.lesk&&(this.lesk=this.makePalette([[["G","A","S","T"],"orange"],[["C","V","I","L","P","F","Y","M","W"],"all_green"],[["N","Q","H"],"magenta"],[["D","E"],"red"],[["K","R"],"all_blue"]],!1,r)),this.lesk}static get GrokGroups(){return void 0===this.grokGroups&&(this.grokGroups=this.makePalette([[["C","U"],"yellow"],[["G","P"],"red"],[["A","V","I","L","M","F","Y","W"],"all_green"],[["R","H","K"],"light_blue"],[["D","E"],"dark_blue"],[["S","T","N","Q"],"orange"]],!1,r)),this.grokGroups}static get RasMol(){return void 0===this.rasMol&&(this.rasMol=new r({D:"#E60A0A",E:"#E60A0A",C:"#E6E600",M:"#E6E600",K:"#145AFF",R:"#145AFF",S:"#FA9600",T:"#FA9600",F:"#3232AA",Y:"#3232AA",N:"#00DCDC",Q:"#00DCDC",G:"#EBEBEB",L:"#0F820F",V:"#0F820F",I:"#0F820F",A:"#C8C8C8",W:"#B45AB4",H:"#8282D2",P:"#DC9682",others:"#BEA06E"})),this.rasMol}get(t){const e=t in r.aaSynonyms?r.aaSynonyms[t]:t;return super.get(e)}}r.aaSynonyms={MeNle:"L",MeA:"A",MeG:"G",MeF:"F"};class o{static getPalette(t="grok"){switch(t){case"grok":return r.GrokGroups;case"lesk":return r.Lesk;default:throw new Error(`ChemPalette: scheme \`${t}\` does not exist`)}}static getInnerOuter(t){let e=0,n="",i="";for(const r of t)"("==r?e++:")"==r?e--:e?n+=r:i+=r;return isNaN(parseInt(n))?[i,n]:[i,""]}static getColorAAPivot(t="",e="grok"){const n=this.getPalette(e);let[i,r]=this.getInnerOuter(t);if(i=i.length>6?`${i.slice(0,3)}...`:i,r=r.length>6?`${r.slice(0,3)}...`:r,1==t.length||"("==t[1]){const e=t[0]?.toUpperCase();return e in n?[n.get(e),e,r,1]:[this.undefinedColor,i,r,1]}if("d"==t[0]&&t[1]in n&&(2==t.length||"("==t[2])){const e=t[1]?.toUpperCase();return e in n?[n.get(e),e,r,2]:[this.undefinedColor,i,r,2]}if(t.substring(0,3)in this.AAFullNames&&(3==t.length||"("==t[3])){const e=this.AAFullNames[t.substring(0,3)];return e in n?[n.get(e),e,r,3]:[this.undefinedColor,i,r,3]}if(t[0]?.toLowerCase()==t[0]&&t.substring(1,3)in this.AAFullNames&&(4==t.length||"("==t[4])){const e=this.AAFullNames[t.substring(1,3)];return e in n?[n.get(e),e,r,4]:[this.undefinedColor,i,r,4]}return[this.undefinedColor,i,r,0]}}o.SemType="Aminoacids",o.SemTypeMultipleAlignment="AminoacidsMultipleAlignment",o.undefinedColor="rgb(100,100,100)",o.Names={G:"Glycine",L:"Leucine",Y:"Tyrosine",S:"Serine",E:"Glutamic acid",Q:"Glutamine",D:"Aspartic acid",N:"Asparagine",F:"Phenylalanine",A:"Alanine",K:"Lysine",R:"Arginine",H:"Histidine",C:"Cysteine",V:"Valine",P:"Proline",W:"Tryptophan",I:"Isoleucine",M:"Methionine",T:"Threonine"},o.AASmiles={G:"NCC(=O)O",L:"N[C@H](CC(C)C)C(=O)O",Y:"NC(CC1=CC=C(O)C=C1)C(=O)O",S:"NC(CO)C(=O)O",E:"N[C@@H](CCC(O)=O)C(=O)O",Q:"N[C@@H](CCC(N)=O)C(=O)O",D:"N[C@@H](CC(O)=O)C(=O)O",N:"N[C@@H](CC(N)=O)C(=O)O",F:"NC(CC1=CC=CC=C1)C(=O)O",A:"N[C@H](C)C(=O)O",K:"NC(CCCCN)C(=O)O",R:"N[C@H](CCCNC(=N)C)C(=O)O",H:"NC(CC1=CN=C[N]1)C(=O)O",C:"N[C@@H](CS)C(=O)O",V:"NC(C(C)C)C(=O)O",P:"N(CCC1)C1C(=O)O",W:"N[C@@H](Cc1c2ccccc2n([H])c1)C(=O)O",I:"N[C@H]([C@H](C)CC)C(=O)O",M:"NC(CCSC)C(=O)O",T:"NC(C(O)C)C(=O)O"},o.AASmilesTruncated={G:"*C*",L:"CC(C)C[C@H](*)*",Y:"C1=CC(=CC=C1CC(*)*)O",S:"OCC(*)C*",E:"*[C@@H](CCC(O)=O)*",Q:"*N[C@@H](CCC(N)=O)*",D:"*[C@@H](CC(O)=O)*",N:"*[C@@H](CC(N)=O)*",F:"C1=CC=C(C=C1)CC(*)*",A:"C[C@H](*)*",K:"C(CCN)CC(*)*",R:"*[C@H](CCCNC(=N)C)*",H:"C1=C(NC=N1)CC(*)*",C:"C([C@@H](*)*)S",V:"CC(C)C(*)*",P:"C1CCN(*)C1*",W:"*[C@@H](Cc1c2ccccc2n([H])c1)*",I:"CC[C@H](C)[C@H](*)*",M:"CSCCC(*)*",T:"CC(O)C(*)*"},o.AAFullNames={Ala:"A",Arg:"R",Asn:"N",Asp:"D",Cys:"C",Gln:"Q",Glu:"E",Gly:"G",His:"H",Ile:"I",Leu:"L",Lys:"K",Met:"M",Phe:"F",Pro:"P",Ser:"S",Thr:"T",Trp:"W",Tyr:"Y",Val:"V"}},6717:(t,e,n)=>{"use strict";n.d(e,{j:()=>r});var i=n(6082);async function r(){const t=i.Func.find({package:"Chem",name:"getRdKitModule"});if(0===t.length)throw new Error('Package "Chem" must be installed for getRdKitModule.');return(await t[0].prepare().call()).getOutputParamValue()}},3599:(t,e,n)=>{"use strict";n.d(e,{o:()=>i.o});var i=n(6869)},9124:(t,e,n)=>{"use strict";n.d(e,{b2:()=>o,fA:()=>s});var i=n(7389),r=n(6082);async function o(){const t="Helm",e=r.Func.find({package:t,name:"getHelmHelper"});if(0===e.length)throw new Error(`Package '${t}' must be installed for HelmHelper.`);return(await e[0].prepare().call()).getOutputParamValue()}function s(t,e){if(!t)throw new Error("Argument 'a' of type Atom or HelmType is mandatory.");let n,i;const r=t;return"ATOM"===r.T?(n=r.biotype(),i=r.elem):(n=t,i=e),[n,i]}r.JsInputBase,Error,i.input.helmAsync=async function(t,e){return(await o()).createHelmInput(t,e)}},8438:(t,e,n)=>{"use strict";function i(t){return t.startsWith("[")&&t.endsWith("]")?t.slice(1,-1):t}n.d(e,{D:()=>i})},8123:(t,e,n)=>{"use strict";n.d(e,{u:()=>i});const i={V2K_RGP_SHIFT:8,V2K_RGP_LINE:"M RGP",V2K_A_LINE:"A ",V3K_COUNTS_SHIFT:14,V3K_IDX_SHIFT:7,V3K_HEADER_FIRST_LINE:"\nDatagrok macromolecule handler\n\n",V3K_HEADER_SECOND_LINE:" 0 0 0 0 0 0 999 V3000\n",V3K_BEGIN_CTAB_BLOCK:"M V30 BEGIN CTAB\n",V3K_END_CTAB_BLOCK:"M V30 END CTAB\n",V3K_BEGIN_COUNTS_LINE:"M V30 COUNTS ",V3K_COUNTS_LINE_ENDING:" 0 0 0\n",V3K_BEGIN_ATOM_BLOCK:"M V30 BEGIN ATOM\n",V3K_END_ATOM_BLOCK:"M V30 END ATOM\n",V3K_BEGIN_BOND_BLOCK:"M V30 BEGIN BOND\n",V3K_END_BOND_BLOCK:"M V30 END BOND\n",V3K_BOND_CONFIG:" CFG=",V3K_BEGIN_DATA_LINE:"M V30 ",V3K_END:"M END",PRECISION_FACTOR:1e4,DEOXYRIBOSE:{polymerType:"RNA",symbol:"d"},RIBOSE:{polymerType:"RNA",symbol:"r"},PHOSPHATE:{polymerType:"RNA",symbol:"p"},OXYGEN:"O",HYDROGEN:"H"}},4356:(t,e,n)=>{"use strict";n.d(e,{Eu:()=>a,ub:()=>s});var i=n(4328);const r="Libraries";let o=Promise.resolve();async function s(){let t;return o=o.then((async()=>{const e=i.userSettings.getValue(r,"Settings",!0);t=e?JSON.parse(e):{exclude:[],explicit:[],duplicateMonomerPreferences:{}},t.exclude=t.exclude instanceof Array?t.exclude:[],t.explicit=t.explicit instanceof Array?t.explicit:[],t.duplicateMonomerPreferences=t.duplicateMonomerPreferences instanceof Object?t.duplicateMonomerPreferences:{},console.debug(`Bio: getUserLibSettings()\n${JSON.stringify(t,void 0,2)}`)})),await o,t}async function a(t){o=o.then((async()=>{console.debug(`Bio: setUserLibSettings()\n${JSON.stringify(t,void 0,2)}`),i.userSettings.add(r,"Settings",JSON.stringify(t),!0)})),await o}},5553:(t,e,n)=>{"use strict";n.d(e,{Qc:()=>A,WN:()=>S});var i=n(1991),r=n.n(i);const o="object"==typeof performance&&performance&&"function"==typeof performance.now?performance:Date,s=new Set,a="object"==typeof process&&process?process:{},l=(t,e,n,i)=>{"function"==typeof a.emitWarning?a.emitWarning(t,e,n,i):console.error(`[${n}] ${e}: ${t}`)};let c=globalThis.AbortController,h=globalThis.AbortSignal;if(void 0===c){h=class{onabort;_onabort=[];reason;aborted=!1;addEventListener(t,e){this._onabort.push(e)}},c=class{constructor(){e()}signal=new h;abort(t){if(!this.signal.aborted){this.signal.reason=t,this.signal.aborted=!0;for(const e of this.signal._onabort)e(t);this.signal.onabort?.(t)}}};let t="1"!==a.env?.LRU_CACHE_IGNORE_AC_WARNING;const e=()=>{t&&(t=!1,l("AbortController is not defined. If using lru-cache in node 14, load an AbortController polyfill from the `node-abort-controller` package. A minimal polyfill is provided for use by LRUCache.fetch(), but it should not be relied upon in other contexts (eg, passing it to other APIs that use AbortController/AbortSignal might have undesirable effects). You may disable this with LRU_CACHE_IGNORE_AC_WARNING=1 in the env.","NO_ABORT_CONTROLLER","ENOTSUP",e))}}Symbol("type");const u=t=>t&&t===Math.floor(t)&&t>0&&isFinite(t),d=t=>u(t)?t<=Math.pow(2,8)?Uint8Array:t<=Math.pow(2,16)?Uint16Array:t<=Math.pow(2,32)?Uint32Array:t<=Number.MAX_SAFE_INTEGER?p:null:null;class p extends Array{constructor(t){super(t),this.fill(0)}}class m{heap;length;static#t=!1;static create(t){const e=d(t);if(!e)return[];m.#t=!0;const n=new m(t,e);return m.#t=!1,n}constructor(t,e){if(!m.#t)throw new TypeError("instantiate Stack using Stack.create(n)");this.heap=new e(t),this.length=0}push(t){this.heap[this.length++]=t}pop(){return this.heap[--this.length]}}class f{#e;#n;#i;#r;#o;#s;ttl;ttlResolution;ttlAutopurge;updateAgeOnGet;updateAgeOnHas;allowStale;noDisposeOnSet;noUpdateTTL;maxEntrySize;sizeCalculation;noDeleteOnFetchRejection;noDeleteOnStaleGet;allowStaleOnFetchAbort;allowStaleOnFetchRejection;ignoreFetchAbort;#a;#l;#c;#h;#u;#d;#p;#m;#f;#g;#y;#b;#v;#w;#C;#A;#S;static unsafeExposeInternals(t){return{starts:t.#v,ttls:t.#w,sizes:t.#b,keyMap:t.#c,keyList:t.#h,valList:t.#u,next:t.#d,prev:t.#p,get head(){return t.#m},get tail(){return t.#f},free:t.#g,isBackgroundFetch:e=>t.#x(e),backgroundFetch:(e,n,i,r)=>t.#E(e,n,i,r),moveToTail:e=>t.#M(e),indexes:e=>t.#_(e),rindexes:e=>t.#I(e),isStale:e=>t.#T(e)}}get max(){return this.#e}get maxSize(){return this.#n}get calculatedSize(){return this.#l}get size(){return this.#a}get fetchMethod(){return this.#o}get memoMethod(){return this.#s}get dispose(){return this.#i}get disposeAfter(){return this.#r}constructor(t){const{max:e=0,ttl:n,ttlResolution:i=1,ttlAutopurge:r,updateAgeOnGet:o,updateAgeOnHas:a,allowStale:c,dispose:h,disposeAfter:p,noDisposeOnSet:g,noUpdateTTL:y,maxSize:b=0,maxEntrySize:v=0,sizeCalculation:w,fetchMethod:C,memoMethod:A,noDeleteOnFetchRejection:S,noDeleteOnStaleGet:x,allowStaleOnFetchRejection:E,allowStaleOnFetchAbort:M,ignoreFetchAbort:_}=t;if(0!==e&&!u(e))throw new TypeError("max option must be a nonnegative integer");const I=e?d(e):Array;if(!I)throw new Error("invalid max value: "+e);if(this.#e=e,this.#n=b,this.maxEntrySize=v||this.#n,this.sizeCalculation=w,this.sizeCalculation){if(!this.#n&&!this.maxEntrySize)throw new TypeError("cannot set sizeCalculation without setting maxSize or maxEntrySize");if("function"!=typeof this.sizeCalculation)throw new TypeError("sizeCalculation set to non-function")}if(void 0!==A&&"function"!=typeof A)throw new TypeError("memoMethod must be a function if defined");if(this.#s=A,void 0!==C&&"function"!=typeof C)throw new TypeError("fetchMethod must be a function if specified");if(this.#o=C,this.#A=!!C,this.#c=new Map,this.#h=new Array(e).fill(void 0),this.#u=new Array(e).fill(void 0),this.#d=new I(e),this.#p=new I(e),this.#m=0,this.#f=0,this.#g=m.create(e),this.#a=0,this.#l=0,"function"==typeof h&&(this.#i=h),"function"==typeof p?(this.#r=p,this.#y=[]):(this.#r=void 0,this.#y=void 0),this.#C=!!this.#i,this.#S=!!this.#r,this.noDisposeOnSet=!!g,this.noUpdateTTL=!!y,this.noDeleteOnFetchRejection=!!S,this.allowStaleOnFetchRejection=!!E,this.allowStaleOnFetchAbort=!!M,this.ignoreFetchAbort=!!_,0!==this.maxEntrySize){if(0!==this.#n&&!u(this.#n))throw new TypeError("maxSize must be a positive integer if specified");if(!u(this.maxEntrySize))throw new TypeError("maxEntrySize must be a positive integer if specified");this.#L()}if(this.allowStale=!!c,this.noDeleteOnStaleGet=!!x,this.updateAgeOnGet=!!o,this.updateAgeOnHas=!!a,this.ttlResolution=u(i)||0===i?i:1,this.ttlAutopurge=!!r,this.ttl=n||0,this.ttl){if(!u(this.ttl))throw new TypeError("ttl must be a positive integer if specified");this.#N()}if(0===this.#e&&0===this.ttl&&0===this.#n)throw new TypeError("At least one of max, maxSize, or ttl is required");if(!this.ttlAutopurge&&!this.#e&&!this.#n){const t="LRU_CACHE_UNBOUNDED";(t=>!s.has(t))(t)&&(s.add(t),l("TTL caching without ttlAutopurge, max, or maxSize can result in unbounded memory consumption.","UnboundedCacheWarning",t,f))}}getRemainingTTL(t){return this.#c.has(t)?1/0:0}#N(){const t=new p(this.#e),e=new p(this.#e);this.#w=t,this.#v=e,this.#P=(n,i,r=o.now())=>{if(e[n]=0!==i?r:0,t[n]=i,0!==i&&this.ttlAutopurge){const t=setTimeout((()=>{this.#T(n)&&this.#$(this.#h[n],"expire")}),i+1);t.unref&&t.unref()}},this.#R=n=>{e[n]=0!==t[n]?o.now():0},this.#O=(r,o)=>{if(t[o]){const s=t[o],a=e[o];if(!s||!a)return;r.ttl=s,r.start=a,r.now=n||i();const l=r.now-a;r.remainingTTL=s-l}};let n=0;const i=()=>{const t=o.now();if(this.ttlResolution>0){n=t;const e=setTimeout((()=>n=0),this.ttlResolution);e.unref&&e.unref()}return t};this.getRemainingTTL=r=>{const o=this.#c.get(r);if(void 0===o)return 0;const s=t[o],a=e[o];return s&&a?s-((n||i())-a):1/0},this.#T=r=>{const o=e[r],s=t[r];return!!s&&!!o&&(n||i())-o>s}}#R=()=>{};#O=()=>{};#P=()=>{};#T=()=>!1;#L(){const t=new p(this.#e);this.#l=0,this.#b=t,this.#k=e=>{this.#l-=t[e],t[e]=0},this.#G=(t,e,n,i)=>{if(this.#x(e))return 0;if(!u(n)){if(!i)throw new TypeError("invalid size value (must be positive integer). When maxSize or maxEntrySize is used, sizeCalculation or size must be set.");if("function"!=typeof i)throw new TypeError("sizeCalculation must be a function");if(n=i(e,t),!u(n))throw new TypeError("sizeCalculation return invalid (expect positive integer)")}return n},this.#F=(e,n,i)=>{if(t[e]=n,this.#n){const n=this.#n-t[e];for(;this.#l>n;)this.#H(!0)}this.#l+=t[e],i&&(i.entrySize=n,i.totalCalculatedSize=this.#l)}}#k=t=>{};#F=(t,e,n)=>{};#G=(t,e,n,i)=>{if(n||i)throw new TypeError("cannot set size without setting maxSize or maxEntrySize on cache");return 0};*#_({allowStale:t=this.allowStale}={}){if(this.#a)for(let e=this.#f;this.#B(e)&&(!t&&this.#T(e)||(yield e),e!==this.#m);)e=this.#p[e]}*#I({allowStale:t=this.allowStale}={}){if(this.#a)for(let e=this.#m;this.#B(e)&&(!t&&this.#T(e)||(yield e),e!==this.#f);)e=this.#d[e]}#B(t){return void 0!==t&&this.#c.get(this.#h[t])===t}*entries(){for(const t of this.#_())void 0===this.#u[t]||void 0===this.#h[t]||this.#x(this.#u[t])||(yield[this.#h[t],this.#u[t]])}*rentries(){for(const t of this.#I())void 0===this.#u[t]||void 0===this.#h[t]||this.#x(this.#u[t])||(yield[this.#h[t],this.#u[t]])}*keys(){for(const t of this.#_()){const e=this.#h[t];void 0===e||this.#x(this.#u[t])||(yield e)}}*rkeys(){for(const t of this.#I()){const e=this.#h[t];void 0===e||this.#x(this.#u[t])||(yield e)}}*values(){for(const t of this.#_())void 0===this.#u[t]||this.#x(this.#u[t])||(yield this.#u[t])}*rvalues(){for(const t of this.#I())void 0===this.#u[t]||this.#x(this.#u[t])||(yield this.#u[t])}[Symbol.iterator](){return this.entries()}[Symbol.toStringTag]="LRUCache";find(t,e={}){for(const n of this.#_()){const i=this.#u[n],r=this.#x(i)?i.__staleWhileFetching:i;if(void 0!==r&&t(r,this.#h[n],this))return this.get(this.#h[n],e)}}forEach(t,e=this){for(const n of this.#_()){const i=this.#u[n],r=this.#x(i)?i.__staleWhileFetching:i;void 0!==r&&t.call(e,r,this.#h[n],this)}}rforEach(t,e=this){for(const n of this.#I()){const i=this.#u[n],r=this.#x(i)?i.__staleWhileFetching:i;void 0!==r&&t.call(e,r,this.#h[n],this)}}purgeStale(){let t=!1;for(const e of this.#I({allowStale:!0}))this.#T(e)&&(this.#$(this.#h[e],"expire"),t=!0);return t}info(t){const e=this.#c.get(t);if(void 0===e)return;const n=this.#u[e],i=this.#x(n)?n.__staleWhileFetching:n;if(void 0===i)return;const r={value:i};if(this.#w&&this.#v){const t=this.#w[e],n=this.#v[e];if(t&&n){const e=t-(o.now()-n);r.ttl=e,r.start=Date.now()}}return this.#b&&(r.size=this.#b[e]),r}dump(){const t=[];for(const e of this.#_({allowStale:!0})){const n=this.#h[e],i=this.#u[e],r=this.#x(i)?i.__staleWhileFetching:i;if(void 0===r||void 0===n)continue;const s={value:r};if(this.#w&&this.#v){s.ttl=this.#w[e];const t=o.now()-this.#v[e];s.start=Math.floor(Date.now()-t)}this.#b&&(s.size=this.#b[e]),t.unshift([n,s])}return t}load(t){this.clear();for(const[e,n]of t){if(n.start){const t=Date.now()-n.start;n.start=o.now()-t}this.set(e,n.value,n)}}set(t,e,n={}){if(void 0===e)return this.delete(t),this;const{ttl:i=this.ttl,start:r,noDisposeOnSet:o=this.noDisposeOnSet,sizeCalculation:s=this.sizeCalculation,status:a}=n;let{noUpdateTTL:l=this.noUpdateTTL}=n;const c=this.#G(t,e,n.size||0,s);if(this.maxEntrySize&&c>this.maxEntrySize)return a&&(a.set="miss",a.maxEntrySizeExceeded=!0),this.#$(t,"set"),this;let h=0===this.#a?void 0:this.#c.get(t);if(void 0===h)h=0===this.#a?this.#f:0!==this.#g.length?this.#g.pop():this.#a===this.#e?this.#H(!1):this.#a,this.#h[h]=t,this.#u[h]=e,this.#c.set(t,h),this.#d[this.#f]=h,this.#p[h]=this.#f,this.#f=h,this.#a++,this.#F(h,c,a),a&&(a.set="add"),l=!1;else{this.#M(h);const n=this.#u[h];if(e!==n){if(this.#A&&this.#x(n)){n.__abortController.abort(new Error("replaced"));const{__staleWhileFetching:e}=n;void 0===e||o||(this.#C&&this.#i?.(e,t,"set"),this.#S&&this.#y?.push([e,t,"set"]))}else o||(this.#C&&this.#i?.(n,t,"set"),this.#S&&this.#y?.push([n,t,"set"]));if(this.#k(h),this.#F(h,c,a),this.#u[h]=e,a){a.set="replace";const t=n&&this.#x(n)?n.__staleWhileFetching:n;void 0!==t&&(a.oldValue=t)}}else a&&(a.set="update")}if(0===i||this.#w||this.#N(),this.#w&&(l||this.#P(h,i,r),a&&this.#O(a,h)),!o&&this.#S&&this.#y){const t=this.#y;let e;for(;e=t?.shift();)this.#r?.(...e)}return this}pop(){try{for(;this.#a;){const t=this.#u[this.#m];if(this.#H(!0),this.#x(t)){if(t.__staleWhileFetching)return t.__staleWhileFetching}else if(void 0!==t)return t}}finally{if(this.#S&&this.#y){const t=this.#y;let e;for(;e=t?.shift();)this.#r?.(...e)}}}#H(t){const e=this.#m,n=this.#h[e],i=this.#u[e];return this.#A&&this.#x(i)?i.__abortController.abort(new Error("evicted")):(this.#C||this.#S)&&(this.#C&&this.#i?.(i,n,"evict"),this.#S&&this.#y?.push([i,n,"evict"])),this.#k(e),t&&(this.#h[e]=void 0,this.#u[e]=void 0,this.#g.push(e)),1===this.#a?(this.#m=this.#f=0,this.#g.length=0):this.#m=this.#d[e],this.#c.delete(n),this.#a--,e}has(t,e={}){const{updateAgeOnHas:n=this.updateAgeOnHas,status:i}=e,r=this.#c.get(t);if(void 0!==r){const t=this.#u[r];if(this.#x(t)&&void 0===t.__staleWhileFetching)return!1;if(!this.#T(r))return n&&this.#R(r),i&&(i.has="hit",this.#O(i,r)),!0;i&&(i.has="stale",this.#O(i,r))}else i&&(i.has="miss");return!1}peek(t,e={}){const{allowStale:n=this.allowStale}=e,i=this.#c.get(t);if(void 0===i||!n&&this.#T(i))return;const r=this.#u[i];return this.#x(r)?r.__staleWhileFetching:r}#E(t,e,n,i){const r=void 0===e?void 0:this.#u[e];if(this.#x(r))return r;const o=new c,{signal:s}=n;s?.addEventListener("abort",(()=>o.abort(s.reason)),{signal:o.signal});const a={signal:o.signal,options:n,context:i},l=(i,r=!1)=>{const{aborted:s}=o.signal,l=n.ignoreFetchAbort&&void 0!==i;if(n.status&&(s&&!r?(n.status.fetchAborted=!0,n.status.fetchError=o.signal.reason,l&&(n.status.fetchAbortIgnored=!0)):n.status.fetchResolved=!0),s&&!l&&!r)return h(o.signal.reason);const c=u;return this.#u[e]===u&&(void 0===i?c.__staleWhileFetching?this.#u[e]=c.__staleWhileFetching:this.#$(t,"fetch"):(n.status&&(n.status.fetchUpdated=!0),this.set(t,i,a.options))),i},h=i=>{const{aborted:r}=o.signal,s=r&&n.allowStaleOnFetchAbort,a=s||n.allowStaleOnFetchRejection,l=a||n.noDeleteOnFetchRejection,c=u;if(this.#u[e]===u&&(l&&void 0!==c.__staleWhileFetching?s||(this.#u[e]=c.__staleWhileFetching):this.#$(t,"fetch")),a)return n.status&&void 0!==c.__staleWhileFetching&&(n.status.returnedStale=!0),c.__staleWhileFetching;if(c.__returned===c)throw i};n.status&&(n.status.fetchDispatched=!0);const u=new Promise(((e,i)=>{const s=this.#o?.(t,r,a);s&&s instanceof Promise&&s.then((t=>e(void 0===t?void 0:t)),i),o.signal.addEventListener("abort",(()=>{n.ignoreFetchAbort&&!n.allowStaleOnFetchAbort||(e(void 0),n.allowStaleOnFetchAbort&&(e=t=>l(t,!0)))}))})).then(l,(t=>(n.status&&(n.status.fetchRejected=!0,n.status.fetchError=t),h(t)))),d=Object.assign(u,{__abortController:o,__staleWhileFetching:r,__returned:void 0});return void 0===e?(this.set(t,d,{...a.options,status:void 0}),e=this.#c.get(t)):this.#u[e]=d,d}#x(t){if(!this.#A)return!1;const e=t;return!!e&&e instanceof Promise&&e.hasOwnProperty("__staleWhileFetching")&&e.__abortController instanceof c}async fetch(t,e={}){const{allowStale:n=this.allowStale,updateAgeOnGet:i=this.updateAgeOnGet,noDeleteOnStaleGet:r=this.noDeleteOnStaleGet,ttl:o=this.ttl,noDisposeOnSet:s=this.noDisposeOnSet,size:a=0,sizeCalculation:l=this.sizeCalculation,noUpdateTTL:c=this.noUpdateTTL,noDeleteOnFetchRejection:h=this.noDeleteOnFetchRejection,allowStaleOnFetchRejection:u=this.allowStaleOnFetchRejection,ignoreFetchAbort:d=this.ignoreFetchAbort,allowStaleOnFetchAbort:p=this.allowStaleOnFetchAbort,context:m,forceRefresh:f=!1,status:g,signal:y}=e;if(!this.#A)return g&&(g.fetch="get"),this.get(t,{allowStale:n,updateAgeOnGet:i,noDeleteOnStaleGet:r,status:g});const b={allowStale:n,updateAgeOnGet:i,noDeleteOnStaleGet:r,ttl:o,noDisposeOnSet:s,size:a,sizeCalculation:l,noUpdateTTL:c,noDeleteOnFetchRejection:h,allowStaleOnFetchRejection:u,allowStaleOnFetchAbort:p,ignoreFetchAbort:d,status:g,signal:y};let v=this.#c.get(t);if(void 0===v){g&&(g.fetch="miss");const e=this.#E(t,v,b,m);return e.__returned=e}{const e=this.#u[v];if(this.#x(e)){const t=n&&void 0!==e.__staleWhileFetching;return g&&(g.fetch="inflight",t&&(g.returnedStale=!0)),t?e.__staleWhileFetching:e.__returned=e}const r=this.#T(v);if(!f&&!r)return g&&(g.fetch="hit"),this.#M(v),i&&this.#R(v),g&&this.#O(g,v),e;const o=this.#E(t,v,b,m),s=void 0!==o.__staleWhileFetching&&n;return g&&(g.fetch=r?"stale":"refresh",s&&r&&(g.returnedStale=!0)),s?o.__staleWhileFetching:o.__returned=o}}async forceFetch(t,e={}){const n=await this.fetch(t,e);if(void 0===n)throw new Error("fetch() returned undefined");return n}memo(t,e={}){const n=this.#s;if(!n)throw new Error("no memoMethod provided to constructor");const{context:i,forceRefresh:r,...o}=e,s=this.get(t,o);if(!r&&void 0!==s)return s;const a=n(t,s,{options:o,context:i});return this.set(t,a,o),a}get(t,e={}){const{allowStale:n=this.allowStale,updateAgeOnGet:i=this.updateAgeOnGet,noDeleteOnStaleGet:r=this.noDeleteOnStaleGet,status:o}=e,s=this.#c.get(t);if(void 0!==s){const e=this.#u[s],a=this.#x(e);return o&&this.#O(o,s),this.#T(s)?(o&&(o.get="stale"),a?(o&&n&&void 0!==e.__staleWhileFetching&&(o.returnedStale=!0),n?e.__staleWhileFetching:void 0):(r||this.#$(t,"expire"),o&&n&&(o.returnedStale=!0),n?e:void 0)):(o&&(o.get="hit"),a?e.__staleWhileFetching:(this.#M(s),i&&this.#R(s),e))}o&&(o.get="miss")}#D(t,e){this.#p[e]=t,this.#d[t]=e}#M(t){t!==this.#f&&(t===this.#m?this.#m=this.#d[t]:this.#D(this.#p[t],this.#d[t]),this.#D(this.#f,t),this.#f=t)}delete(t){return this.#$(t,"delete")}#$(t,e){let n=!1;if(0!==this.#a){const i=this.#c.get(t);if(void 0!==i)if(n=!0,1===this.#a)this.#V(e);else{this.#k(i);const n=this.#u[i];if(this.#x(n)?n.__abortController.abort(new Error("deleted")):(this.#C||this.#S)&&(this.#C&&this.#i?.(n,t,e),this.#S&&this.#y?.push([n,t,e])),this.#c.delete(t),this.#h[i]=void 0,this.#u[i]=void 0,i===this.#f)this.#f=this.#p[i];else if(i===this.#m)this.#m=this.#d[i];else{const t=this.#p[i];this.#d[t]=this.#d[i];const e=this.#d[i];this.#p[e]=this.#p[i]}this.#a--,this.#g.push(i)}}if(this.#S&&this.#y?.length){const t=this.#y;let e;for(;e=t?.shift();)this.#r?.(...e)}return n}clear(){return this.#V("delete")}#V(t){for(const e of this.#I({allowStale:!0})){const n=this.#u[e];if(this.#x(n))n.__abortController.abort(new Error("deleted"));else{const i=this.#h[e];this.#C&&this.#i?.(n,i,t),this.#S&&this.#y?.push([n,i,t])}}if(this.#c.clear(),this.#u.fill(void 0),this.#h.fill(void 0),this.#w&&this.#v&&(this.#w.fill(0),this.#v.fill(0)),this.#b&&this.#b.fill(0),this.#m=0,this.#f=0,this.#g.length=0,this.#l=0,this.#a=0,this.#S&&this.#y){const t=this.#y;let e;for(;e=t?.shift();)this.#r?.(...e)}}}function g(t){window.$monomerHover=t}var y=n(2003),b=n(6077),v=n(3561),w=n(9235);const C="MonomerHoverLinks";async function A(t,e,n,i,o,s=!1){const a=i.getSeqHandler(t),l=a.alphabet==y.YI.RNA||a.alphabet==y.YI.DNA,c=a.isHelm()&&l,h=!a.isHelm()&&l,u=t=>null==t?null:c?s?t:Math.floor(t/3):h&&s?3*t+1:t,d=s?await i.getHelmToMolfileConverter(n):null,p=new f({max:100});function m(t,e){const a=t.get(e);if(null==a)return null;let l=p.get(a);return l||p.set(a,l=function(t,e){const a=i.getSeqHandler(t);if(s){const t=a.getHelm(e);return i.helmToAtomicLevelSingle(t,d,!1,!1).monomers}{const t=a.getSplitted(e),i=a.defaultBiotype,s=r().count(0).take(t.length).map((e=>({position:e,symbol:t.getCanonical(e),biotype:i}))).toArray(),l=a.alphabet,c=l==y.YI.RNA||l==y.YI.DNA?"RNA":"PEPTIDE",h=(0,b.eM)([s],c,l,n,o);return(0,v.gU)(s,h,l,c).monomers}}(t,e)),l}const A={targetCol:e,handler:(e,i,r)=>{const o=r.grid,s=e.tableRowIndex,a=e.gridRow,l=o.cell(r.name,a),c=null!==(h=window.$monomerHover)&&void 0!==h?h:null;var h;if(!c||c&&(c.dataFrameId!=t.dataFrame.id||c.gridRowIdx!=a||c.seqColName!=t.name||c.seqPosition!=i?.position)){if(c&&(g(null),c.gridCell.render()),!i)return g(null),!0;g({gridCell:l,dataFrameId:t.dataFrame.id,gridRowIdx:a,seqColName:t.name,seqPosition:u(i?.position)??-1,getSubstruct:()=>{if(!i||"*"===i.symbol)return;const e=m(t,s);if(!e)return;const r=e.get(u(i?.position));return r?(0,w.H)([r],n):{atoms:[],bonds:[],highlightAtomColors:[],highlightBondColors:[]}}}),l.render()}return!0},getSubstruct:i=>{if("true"!=e.getTag(".sequence-src-highlight-monomers"))return;if(null==i)return;if(!t.get(i))return;const r=m(t,i);return r?(0,w.H)(r.values(),n):void 0}};return function(t,e){let n=t[C];n||(n=t[C]=[]),n.push(e),t[C]=n}(t.temp,A),function(t,e){let n=t["substruct-providers"];n||(n=t["substruct-providers"]=[]),n.push(e),t["substruct-providers"]=n}(e.temp,A),A}function S(t,e){try{const n=t.tableColumn;if(!n)return;const i=function(t){return t.temp[C]??[]}(n);for(let n=i.length-1;n>=0;--n){const r=i[n],o=t.grid.col(r.targetCol.name);if(o&&!r.handler(t,e,o))break}}catch(t){console.error(t)}}},6718:(t,e,n)=>{"use strict";n.d(e,{A7:()=>p,pj:()=>h,uL:()=>u,uX:()=>c});var i=n(6082),r=n(4328),o=n(6295),s=n(3151),a=n(3077),l=n(439);function c(t){const e=[];for(let n=0;n<t.rowCount;n++){const i={};Object.keys(s.Ec).forEach((e=>{if("symbol"===e){const r=t.get(s.Ec[e],n);i[e]="."===r?t.get(s.yw,n):r}else if("rgroups"===e){const r=t.get(s.Ec[e],n).split("\n"),o=[];r.forEach((t=>{const e={},n=t.substring(t.lastIndexOf("]")+1),i=t.match(/\[R(\d+)\]/)[1];e.capGroupSmiles="H"===n?`[*:${i}][H]`:`O[*:${i}]`,e.alternateId="H"===n?`R${i}-H`:`R${i}-OH`,e.capGroupName="H"===n?"H":"OH",e.label=`R${i}`,o.push(e)})),i[e]=o}else s.Ec[e]&&(i[e]=t.get(s.Ec[e],n))})),i.author??(i.author=""),i.id??(i.id=0),i.smiles??(i.smiles=""),i.monomerType??(i.monomerType="Backbone"),i.createDate??(i.createDate=null),e.push(i)}return e}async function h(){const t=i.Func.find({package:"Bio",name:"getMonomerLibHelper"});if(0===t.length)throw new Error('Package "Bio" must be installed for MonomerLibHelper.');return(await t[0].prepare().call()).getOutputParamValue()}async function u(t,e,n){t instanceof i.Column&&(t=(0,a.R)(t,n).columns.toList());const o=(await h()).getMonomerLib(),s=new Array(t.length),c=t[0].length,u=new Float32Array(c);for(let n=0;n<t.length;++n){const a=n<e.length?e.getCanonical(n):l._S,h=o.getMonomer("PEPTIDE",a)?.smiles??"",d=t[n],p=d.getRawData(),m=d.categories,f=m.indexOf("");if(s[n]={categories:m,data:p,emptyIndex:f},void 0===a)continue;const g=i.Column.fromStrings("smiles",m.map((t=>o.getMonomer("PEPTIDE",t)?.smiles??""))),y=(i.DataFrame.fromColumns([g]),await r.chem.getSimilarities(g,h)),b=y?y.getRawData():null;for(let t=0;t<c;++t){const e=p[t];a!==l._S&&e!==f?u[t]+=b[e]:a===l._S&&e===f&&(u[t]+=1)}}for(let n=0;n<u.length;++n){let r=u[n]/e.length;for(let o=0;o<t.length;++o){const t=s[o];if(o>=e.length&&t.data[n]!==t.emptyIndex||t.data[n]===t.emptyIndex&&o<e.length){r=i.FLOAT_NULL;break}}u[n]=r}return i.Column.fromFloat32Array("Similarity",u)}async function d(t){const e=(await h()).getMonomerLib(),n=[],o={},s=t.map((t=>e.getMonomer("PEPTIDE",t)?.smiles??"")),a=i.Column.fromStrings("smiles",s);for(let e=0;e<s.length;++e){o[t[e]]=e;const i=s[e],l=""===i?new Array(s.length).fill(0):(await r.chem.getSimilarities(a,i)).getRawData();l[e]=1,n[e]=Array.from(l)}return{scoringMatrix:n,alphabetIndexes:o}}async function p(t,e="Morgan"){const n=(await h()).getMonomerLib(),r=new Array(t.length).fill(0).map((()=>new Array(t.length).fill(0))),s={},a=t.map((t=>n.getMonomer("PEPTIDE",t)?.molfile||n.getMonomer("PEPTIDE",t)?.smiles||"")),l=i.Func.find({package:"Chem",name:"getFingerprints"})[0];if(!l)return console.warn('Function "Chem:getFingerprints" is not found in chem package. falling back to Morgan fingerprints'),await d(t);const c=i.Column.fromStrings("smiles",a),u=(i.DataFrame.fromColumns([c]),(await l.apply({col:c,fingerprintType:e}))?.entries);if(!u)return console.warn(`${e} Fingerprints could not be calculated for monomers from chem package.\n falling back to Morgan fingerprints`),await d(t);for(let e=0;e<u.length;++e)if(r[e][e]=1,s[t[e]]=e,u[e])for(let t=e+1;t<u.length;++t)u[t]&&(r[e][t]=r[t][e]=(0,o.$1)(u[e],u[t]));return{scoringMatrix:r,alphabetIndexes:s}}},6197:(t,e,n)=>{"use strict";n.d(e,{Y:()=>r});var i=n(3599);function r(t){let e;switch(t){case i.o.BASE:case i.o.SUGAR:case i.o.LINKER:case i.o.NUCLEOTIDE:case"nucleotide":e="RNA";break;case i.o.AA:e="PEPTIDE";break;case i.o.CHEM:e="CHEM";break;case i.o.BLOB:e="BLOB";break;default:e="PEPTIDE",console.warn(`Unexpected HelmType '${t}'`)}return e}},9235:(t,e,n)=>{"use strict";n.d(e,{H:()=>c,R:()=>l});var i=n(6082),r=n(1991),o=n.n(r),s=n(330),a=n(3599);async function l(t,e,r,l,c,h,u){const d=t.length,p=t.dataFrame,m=Math.max(navigator.hardwareConcurrency-2,1),f=new Array(m).fill(null).map((()=>new Worker(new URL(n.p+n.u(455),n.b)))),g=d/m,y=new Array(m),b=h.getSeqHandler(t),v="RNA"==l?a.o.NUCLEOTIDE:a.o.AA,w=o().count(0).take(t.length).map((t=>{const e=b.getSplitted(t);return o().count(0).take(e.length).map((t=>({position:t,symbol:e.getCanonical(t),biotype:v}))).toArray()})).toArray();for(let t=0;t<m;t++){const n=f[t],i=Math.floor(t*g),o=t===m-1?d:Math.floor((t+1)*g);y[t]=new Promise((t=>{n.onmessage=e=>{t(e.data)}})),n.postMessage({seqList:w,monomersDict:e,alphabet:r,polymerType:l,start:i,end:o})}const C=[],A=[];await Promise.all(y).then((t=>{for(const e of t)C.push(...e.molfiles),A.push(...e.warnings)})),setTimeout((()=>{f.forEach((t=>{t.terminate()}))}),0);const S=(0,s.qj)(p,t.name),x=i.Column.fromType(i.COLUMN_TYPE.STRING,S,t.length).init((t=>C[t]?.molfile));return x.semType=i.SEMTYPE.MOLECULE,x.meta.units=i.UNITS.Molecule.MOLBLOCK,x.setTag(".sequence-src-col",t.name),{molCol:x,warnings:A}}function c(t,e){const n={},r={};for(const o of t){const t=e.getWebEditorMonomer(o.biotype,o.symbol).backgroundcolor,a=(0,s.vG)(t??i.Color.toRgb(i.Color.mouseOverRows))??[1,0,0,.7];for(const t of o.atoms)n[t]=a;for(const t of o.bonds)r[t]=a}return{atoms:Object.keys(n).map((t=>parseInt(t))),bonds:Object.keys(r).map((t=>parseInt(t))),highlightAtomColors:n,highlightBondColors:r}}},3561:(t,e,n)=>{"use strict";n.d(e,{Hb:()=>l,YN:()=>f,gU:()=>c});var i=n(8123),r=n(294),o=n(3151),s=n(439),a=n(6197);function l(t,e,n){const r=new Map;for(const a of t.getMonomerSymbolsByType(e)){const l=t.getMonomer(e,a);if("RNA"===e&&("Branch"===l.monomerType||n===s.YI.DNA&&l.symbol===i.u.DEOXYRIBOSE.symbol||n===s.YI.RNA&&l.symbol===i.u.RIBOSE.symbol||l.symbol===i.u.PHOSPHATE.symbol)||"PEPTIDE"===e&&"Branch"!==l.monomerType){const t={};o.f6.forEach((e=>{t[e]=l[e]})),r.set(l.symbol,t)}}return r}function c(t,e,n,o){if(0===t.length)return r.vF.createEmpty();const l=m,{atomCount:c,bondCount:u,needsCapping:p}=l(t,e,n,o),g=new Array(c),y=new Array(u);let b,v=null,w=null;"PEPTIDE"===o?b=h:(b=d,v=n===s.YI.DNA?(0,r.xb)(e,i.u.DEOXYRIBOSE):(0,r.xb)(e,i.u.RIBOSE),w=(0,r.xb)(e,i.u.PHOSPHATE));const C={i:0,nodeShift:0,bondShift:0,backbonePositionShift:new Array(2).fill(0),branchPositionShift:new Array(2).fill(0),backboneAttachNode:0,branchAttachNode:0,flipFactor:1},A={sugar:v,phosphate:w,seqLength:t.length,atomCount:c,bondCount:u},S=new r.Cg,x=[];let E=0;for(C.i=0;C.i<A.seqLength;++C.i){const n=t[C.i];if(n.symbol===s._S)continue;const i=(0,r.xb)(e,{symbol:n.symbol,polymerType:(0,a.Y)(n.biotype)}),o=C.nodeShift,l=C.bondShift;b(i,g,y,C,A),i.stereoAtoms?.forEach((t=>x.push(t+E))),E+=i.atoms.x.length;const c=C.nodeShift-o,h=new Array(c);for(let t=0;t<c;++t)h[t]=o+t;const u=C.bondShift-l,d=new Array(u);for(let t=0;t<u;++t)d[t]=l+t;S.set(C.i,{biotype:n.biotype,symbol:n.symbol,atoms:h,bonds:d})}p&&function(t,e,n,r){const o=n.nodeShift+1;t[r.atomCount]=i.u.V3K_BEGIN_DATA_LINE+o+" "+i.u.OXYGEN+" "+f(n.backbonePositionShift[0])+" "+n.flipFactor*f(n.backbonePositionShift[1])+" 0.000000 0\n";const s=n.backboneAttachNode,a=o;e[r.bondCount]=i.u.V3K_BEGIN_DATA_LINE+n.bondShift+" 1 "+s+" "+a+"\n"}(g,y,C,A);const M=i.u.V3K_BEGIN_COUNTS_LINE+c+" "+u+i.u.V3K_COUNTS_LINE_ENDING;let _="";return _+=i.u.V3K_HEADER_FIRST_LINE,_+=i.u.V3K_HEADER_SECOND_LINE,_+=i.u.V3K_BEGIN_CTAB_BLOCK,_+=M,_+=i.u.V3K_BEGIN_ATOM_BLOCK,_+=g.join(""),_+=i.u.V3K_END_ATOM_BLOCK,_+=i.u.V3K_BEGIN_BOND_BLOCK,_+=y.join(""),_+=i.u.V3K_END_BOND_BLOCK,x.length>0&&(_+=function(t){const e=[];let n=`M V30 MDLV30/STEABS ATOMS=(${t.length}`;for(let i=0;i<t.length;i++){const r=`${n} ${t[i]}`;r.length>76?(e.push(`${n} -\n`),n=`M V30 ${t[i]}`):n=r,i===t.length-1&&e.push(`${n})\n`)}return`M V30 BEGIN COLLECTION\n${e.join("")}M V30 END COLLECTION\n`}(x)),_+=i.u.V3K_END_CTAB_BLOCK,_+=i.u.V3K_END,{molfile:_,monomers:S}}function h(t,e,n,i){i.flipFactor=(-1)**(i.i%2),u(t,e,n,i)}function u(t,e,n,r){!function(t,e,n){for(let r=0;r<t.atoms.atomTypes.length;++r){const o=n.nodeShift+r+1;e[n.nodeShift+r]=i.u.V3K_BEGIN_DATA_LINE+o+" "+t.atoms.atomTypes[r]+" "+f(n.backbonePositionShift[0]+t.atoms.x[r])+" "+f(n.backbonePositionShift[1]+n.flipFactor*t.atoms.y[r])+" "+t.atoms.kwargs[r]}}(t,e,r),p(t,n,r),function(t,e,n){if(0!==n.backboneAttachNode){const r=n.bondShift,o=n.backboneAttachNode,s=t.meta.terminalNodes[0]+n.nodeShift;e[n.bondShift-1]=i.u.V3K_BEGIN_DATA_LINE+r+" 1 "+o+" "+s+"\n"}}(t,n,r),null!==t.meta.branchShift&&t.meta.terminalNodes.length>2&&function(t,e){e.branchAttachNode=e.nodeShift+t.meta.terminalNodes[2];for(let n=0;n<2;++n)e.branchPositionShift[n]=e.backbonePositionShift[n]+t.meta.branchShift[n]}(t,r),function(t,e){e.backboneAttachNode=e.nodeShift+t.meta.terminalNodes[1],e.bondShift+=t.bonds.atomPairs.length+1,e.nodeShift+=t.atoms.atomTypes.length,e.backbonePositionShift[0]+=t.meta.backboneShift?.[0]??0,e.backbonePositionShift[1]+=e.flipFactor*(t.meta.backboneShift?.[1]??0)}(t,r)}function d(t,e,n,r,o){if(0===r.i)u(o.sugar,e,n,r);else for(const t of[o.phosphate,o.sugar])u(t,e,n,r);!function(t,e,n,r){(function(t,e,n){for(let r=0;r<t.atoms.atomTypes.length;++r){const o=n.nodeShift+r+1;e[n.nodeShift+r]=i.u.V3K_BEGIN_DATA_LINE+o+" "+t.atoms.atomTypes[r]+" "+f(n.branchPositionShift[0]+t.atoms.x[r])+" "+f(n.branchPositionShift[1]+n.flipFactor*t.atoms.y[r])+" "+t.atoms.kwargs[r]}})(t,e,r),p(t,n,r),function(t,e,n){const r=n.bondShift,o=n.branchAttachNode,s=t.meta.terminalNodes[0]+n.nodeShift;e[r-1]=i.u.V3K_BEGIN_DATA_LINE+r+" 1 "+o+" "+s+"\n"}(t,n,r);const o=r.bondShift,s=r.branchAttachNode,a=t.meta.terminalNodes[0]+r.nodeShift;n[o-1]=i.u.V3K_BEGIN_DATA_LINE+o+" 1 "+s+" "+a+"\n",r.bondShift+=t.bonds.atomPairs.length+1,r.nodeShift+=t.atoms.atomTypes.length}(t,e,n,r)}function p(t,e,n){for(let r=0;r<t.bonds.atomPairs.length;++r){const o=n.bondShift+r+1,s=t.bonds.atomPairs[r][0]+n.nodeShift,a=t.bonds.atomPairs[r][1]+n.nodeShift;let l="";if(t.bonds.bondConfiguration.has(r)){let e=t.bonds.bondConfiguration.get(r);n.flipFactor<0&&(e=1===e?3:1),l=" CFG="+e}const c=t.bonds.kwargs.has(r)?" "+t.bonds.kwargs.get(r):"";e[n.bondShift+r]=i.u.V3K_BEGIN_DATA_LINE+o+" "+t.bonds.bondTypes[r]+" "+s+" "+a+l+c+"\n"}}function m(t,e,n,o){let l=0,c=0,h=0,u=!0,d=null;for(const n of t)if(n.symbol!==s._S){if("*"==n.symbol)throw new Error("Gap canonical symbol is '', not '*");d=(0,r.xb)(e,{symbol:n.symbol,polymerType:(0,a.Y)(n.biotype)}),l+=d.atoms.x.length,c+=d.bonds.bondTypes.length,h++}if("PEPTIDE"===o)l+=1,c+=h,h>0&&(d?.meta?.rNodes?.length??0)<2&&(u=!1,l-=1,c-=1);else{const o=n===s.YI.DNA?(0,r.xb)(e,i.u.DEOXYRIBOSE):(0,r.xb)(e,i.u.RIBOSE),a=(0,r.xb)(e,i.u.PHOSPHATE);l+=(t.length-1)*a.atoms.x.length,l+=t.length*o.atoms.x.length,l+=1,c+=(t.length-1)*a.bonds.bondTypes.length,c+=t.length*o.bonds.bondTypes.length,c-=1,c+=3*t.length}return{atomCount:l,bondCount:c,needsCapping:u}}function f(t){return Math.round(i.u.PRECISION_FACTOR*t)/i.u.PRECISION_FACTOR}},6077:(t,e,n)=>{"use strict";n.d(e,{C4:()=>m,eM:()=>f});var i=n(4328),r=n(6082),o=n(1991),s=n.n(o),a=n(439),l=n(3561),c=n(9235),h=n(294),u=n(9192),d=n(330),p=n(8123);async function m(t,e,n,o,l){if(e.semType!==r.SEMTYPE.MACROMOLECULE)return{molCol:null,warnings:[`Only the ${r.SEMTYPE.MACROMOLECULE} columns can be converted to atomic level, the chosen column has semType '${e.semType}'`]};let h=e;const p=o.getSeqHandler(e);let m,g;p.notation!==a.Hi.SEPARATOR&&(h=p.convert(a.Hi.SEPARATOR,"."),h.name=e.name);try{g=o.getSeqHandler(h).alphabet,m=(0,d.pz)(g)}catch(t){const[e,n]=(0,u.AP)(t);return{molCol:null,warnings:[e]}}const y=function(t,e){const n=t.length,r=new Array(n),o=e.getSeqHandler(t);let a=!1;const l=o.defaultBiotype;for(let t=0;t<n;++t){const e=o.getSplitted(t);a||(a=0===e.length),r[t]=s().count(0).take(e.length).filter((t=>!e.isGap(t))).map((t=>({position:t,biotype:l,symbol:e.getCanonical(t)}))).toArray()}return a&&i.shell.warning(`Some values in the "${t.name}" column are empty`),r}(h,o),b=f(y,m,g,n,l),v=h.length,w=await(0,c.R)(h,b,g,m,n,o,l);return w.warnings.length>.05*v&&i.shell.warning(`Molfile conversion resulted in ${w.warnings.length} errors`),w}function f(t,e,n,i,r){const o=(0,l.Hb)(i,e,n),s={},c={value:null};if("RNA"===e){const t=n===a.YI.RNA?[p.u.RIBOSE,p.u.PHOSPHATE]:[p.u.DEOXYRIBOSE,p.u.PHOSPHATE];for(const n of t)g(s,n.symbol,o,r,e,c)}for(let n=0;n<t.length;++n){const i=t[n];for(const t of i){const n=t.symbol;if(""!==n)try{if("RNA"===e&&3===n.split(/\(|\)/).filter((t=>!!t)).length){const t=n.split(/\(|\)/)[1];g(s,t,o,r,e,c),s[e]?.[t]&&(s[e][n]=s[e][t])}else g(s,n,o,r,e,c)}catch(t){const e=t instanceof Error?t.message:t.toString(),i=t instanceof Error?t.stack:void 0;throw console.error(`bio lib: getMonomersDictFromLib() sym='${n}', error:\n${e}\n${i}`),new Error(`Can't get monomer '${n}' from library: ${e}`)}}}return s}function g(t,e,n,i,r,o){const s={polymerType:r,symbol:e};if(!(0,h.bq)(t,s)){const a=function(t,e,n,i,r){if(e.has(t)){const s=e.get(t),a=function(t){const e=[];for(const n of t){let t=n.capGroupSmiles;t||(t=n.capGroupSMILES),t=t.replace(/(\[|\]|\*|:|\d)/g,"").replace("OH","O").replace("Oh","O"),e.push(t)}return e}(s.rgroups),c=(o=s.molfile).includes("V3000")?function(t){const e=new Map,n=/M V30 (\d+) R#.+RGROUPS=\((\d+) (\d+)\).*/gm;let i;for(;null!==(i=n.exec(t));)i.index===n.lastIndex&&n.lastIndex++,e.set(parseInt(i[1]),parseInt(i[3]));return e}(o):function(t){const e=new Map;let n=t.indexOf(p.u.V2K_A_LINE,0),i=n;for(;-1!==n;){i=t.indexOf("\n",n);const r=parseInt(t.substring(n,i).replace(/^A\s+/,""));n=t.indexOf("R",i),i=t.indexOf("\n",n);const o=parseInt(t.substring(n,i).replace(/^R/,""));e.set(r,o),n=t.indexOf(p.u.V2K_A_LINE,i)}for(n=t.indexOf(p.u.V2K_RGP_LINE,0),i=t.indexOf("\n",n);-1!==n;){n+=p.u.V2K_RGP_SHIFT,i=t.indexOf("\n",n);const r=t.substring(n,i).replaceAll(/\s+/g," ").split(" ").map((t=>parseInt(t))).slice(1);for(let t=0;t<r.length;t+=2){if(e.has(r[t])&&e.get(r[t])!==r[t+1])throw new Error(`r-group index ${r[t]} has already been added with a different value`);e.set(r[t],r[t+1])}n=t.indexOf(p.u.V2K_RGP_LINE,i)}return e}(o),h=s.molfile.includes("V3000")?s.molfile:function(t,e){const n=e.get_mol(function(t){return t.split("\n").map((t=>{const e=t.indexOf(" R# "),n=t.indexOf(" R ");if(-1===e&&-1===n)return t;const i=-1!==e?e:n,r=t.split("");for(let t=i+5;t<r.length;t++)" "!==r[t]&&(r[t]="0");return r.join("")})).join("\n")}(t)),i=n.get_v3Kmolblock();return n.delete(),i}(function(t){let e=t.indexOf(p.u.V2K_A_LINE,0);-1===e&&(e=t.indexOf(p.u.V2K_RGP_LINE));const n=t.indexOf(p.u.V3K_END,e);return t.substring(0,e)+t.substring(n)}(s.molfile),n),u=function(t){let e=(t=t.replaceAll("\r","")).indexOf(p.u.V3K_BEGIN_COUNTS_LINE)+p.u.V3K_COUNTS_SHIFT,n=t.indexOf(" ",e+1);const i=parseInt(t.substring(e,n));return e=n+1,n=t.indexOf(" ",e+1),{atomCount:i,bondCount:parseInt(t.substring(e,n))}}(h),d=function(t,e){const n=new Array(e),i=new Float32Array(e),r=new Float32Array(e),o=new Array(e);let s=t.indexOf(p.u.V3K_BEGIN_ATOM_BLOCK);s=t.indexOf("\n",s);let a=s;for(let l=0;l<e;l++){s=t.indexOf(p.u.V3K_BEGIN_DATA_LINE,s)+p.u.V3K_IDX_SHIFT,a=t.indexOf(" ",s),s=a+1,a=t.indexOf(" ",s),n[l]=t.substring(s,a);const e=new Array(2);for(let n=0;n<2;++n)s=a+1,a=t.indexOf(" ",s),e[n]=parseFloat(t.substring(s,a));i[l]=e[0],r[l]=e[1],s=a,a=t.indexOf("\n",s)+1,o[l]=t.slice(s,a),s=a}return{atomTypes:n,x:i,y:r,kwargs:o}}(h,u.atomCount),m=function(t,e){const n=new Uint32Array(e),i=new Array(e),r=new Map,o=new Map;let s=t.indexOf(p.u.V3K_BEGIN_BOND_BLOCK);s=t.indexOf("\n",s);let a=s;for(let l=0;l<e;++l){const e=new Array(3);s=t.indexOf(p.u.V3K_BEGIN_DATA_LINE,a)+p.u.V3K_IDX_SHIFT,a=t.indexOf(" ",s);for(let n=0;n<3;++n)s=a+1,a=Math.min(t.indexOf("\n",s),t.indexOf(" ",s)),e[n]=parseInt(t.slice(s,a));n[l]=e[0],i[l]=e.slice(1);const c=t.indexOf("\n",s);let h=t.slice(a,c),u=h.indexOf(p.u.V3K_BOND_CONFIG);if(-1!==u){u=h.indexOf("=",u)+1;let t=h.indexOf(" ",u);-1===t&&(t=h.length);const e=parseInt(h.slice(u,t));r.set(l,e);const n=p.u.V3K_BOND_CONFIG+e.toString();h=h.replace(n,"")}h||o.set(l,h)}return{bondTypes:n,atomPairs:i,bondConfiguration:r,kwargs:o}}(h,u.bondCount),f=function(t,e,n,i){const r={backboneShift:null,branchShift:null,terminalNodes:[],rNodes:[]};return function(t,e,n){for(const[i,r]of n)t.atomTypes[i-1]=e[r-1]}(t,n,i),function(t,e){e.rNodes=Array.from(t.keys());for(let n=0;n<e.rNodes.length;n++)for(const i of[1,2])if(t.get(e.rNodes[n])===i){const t=e.rNodes[i-1];e.rNodes[i-1]=e.rNodes[n],e.rNodes[n]=t}}(i,r),y(e,r),r}(d,m,a,c),g=function(t){let e=[],n=t.indexOf("M V30 MDLV30/STEABS ATOMS=(");for(;-1!==n;){n+=28;const i=t.indexOf(")",n);e=e.concat(t.substring(n,i).split(" ").slice(1).map((t=>parseInt(t)))),n=i,n=t.indexOf("M V30 MDLV30/STEABS ATOMS=(",n)}return e}(h),v={atoms:d,bonds:m,meta:f,stereoAtoms:g};return"PEPTIDE"===i?function(t){const e=t.meta.terminalNodes[0]-1,n=t.meta.rNodes[0]-1,i=t.atoms.x,r=t.atoms.y;M(t,-i[e],-r[e]);const o=A(i[n],r[n]);S(t.atoms,-o),i[t.meta.rNodes[1]-1]<0&&x(t);const s=function(t){const e=function(t){const e=new Map;for(const n of t.bonds.atomPairs)for(let t=0;t<2;t++){const i=n[t],r=n[(t+1)%2];e.has(i)?e.get(i)?.push(r):e.set(i,new Array(1).fill(r))}return e}(t);let n=0;const i=t.atoms.atomTypes.length;let r=0;if(t.meta.terminalNodes.length<2)return null;for(;0===n;){const o=e.get(t.meta.terminalNodes[1])[r];if(t.atoms.atomTypes[o-1]===p.u.OXYGEN&&o!==t.meta.rNodes[1]&&(n=o),r++,r>i)return null}return n}(t);null!=s&&(function(t,e){t.atoms.y[t.meta.rNodes[1]-1]<0&&t.atoms.y[e-1]<0&&(function(t){E(t,!0)}(t),S(t.atoms,-function(t,e){return A(t,e)+Math.PI/2}(t.atoms.x[t.meta.terminalNodes[1]-1],t.atoms.y[t.meta.terminalNodes[1]-1])))}(t,s),function(t,e){const n=t.atoms.x;n[t.meta.rNodes[1]-1]>n[e-1]&&function(t,e,n){const i=e-1,r=n-1,o=t.atoms.x,s=t.atoms.y,a=o[i],l=s[i];o[i]=o[r],s[i]=s[r],o[r]=a,s[r]=l}(t,e,t.meta.rNodes[1])}(t,s))}(v):t===p.u.RIBOSE.symbol||t===p.u.DEOXYRIBOSE.symbol?function(t,e){const n=t.atoms.x,i=t.atoms.y;let r=t.meta.terminalNodes[0]-1;const o=t.meta.rNodes[1]-1;M(t,-n[r],-i[r]);const s=A(n[t.meta.rNodes[2]-1],i[t.meta.rNodes[2]-1]);S(t.atoms,-s),n[t.meta.rNodes[0]-1]>n[t.meta.rNodes[1]-1]&&x(t);const a=A(n[o],i[o]);S(t.atoms,3*Math.PI/2-a),e.value=function(t){const e=t.atoms.x,n=t.atoms.y,i=t.meta.rNodes[2]-1,r=t.meta.terminalNodes[2]-1,o=e[i]-e[r],s=n[i]-n[r];return Math.atan2(o,s)}(t),r=t.meta.terminalNodes[0]-1,M(t,-n[r],-i[r])}(v,r):t===p.u.PHOSPHATE.symbol?function(t){const e=t.meta.rNodes[1]-1,n=t.meta.rNodes[0]-1,i=t.atoms.x,r=t.atoms.y;M(t,-i[e],-r[e]);const o=A(i[n],r[n]);S(t.atoms,Math.PI/2-o)}(v):function(t,e){const n=t.atoms.x,i=t.atoms.y,r=t.meta.terminalNodes[0]-1,o=t.meta.rNodes[0]-1;M(t,-n[r],-i[r]);const s=A(n[o],i[o]),a=e.value;if(!a)throw new Error("The value of sugarBranchToOYAngle is null");S(t.atoms,Math.PI-s+a);const c=function(t,e){return(0,l.YN)(Math.sqrt((t.x-e.x)**2+(t.y-e.y)**2))}({x:n[t.meta.rNodes[0]-1],y:i[t.meta.rNodes[0]-1]},{x:n[t.meta.terminalNodes[0]-1],y:i[t.meta.terminalNodes[0]-1]});if(1!=c)for(let t=0;t<n.length;++t)n[t]=(0,l.YN)(n[t]/c),i[t]=(0,l.YN)(i[t]/c)}(v,r),function(t,e,n){"PEPTIDE"===t?(b(e,t),w(e,e.meta.rNodes[1])):n===p.u.RIBOSE.symbol||n===p.u.DEOXYRIBOSE.symbol?(w(e,e.meta.rNodes[1]),e.meta.rNodes[1]=e.meta.terminalNodes[1],y(e.bonds,e.meta),b(e,t),w(e,e.meta.rNodes[1]),w(e,e.meta.rNodes[0]),w(e,e.meta.rNodes[2])):n===p.u.PHOSPHATE.symbol&&(e.meta.terminalNodes[0]=e.meta.rNodes[0],M(e,-e.atoms.x[e.meta.terminalNodes[0]-1],-e.atoms.y[e.meta.terminalNodes[0]-1]),b(e,t),w(e,e.meta.rNodes[1]))}(i,v,t),function(t){let e=0;for(;e<t.atoms.atomTypes.length;)t.atoms.atomTypes[e]===p.u.HYDROGEN&&(w(t,e+1),--e),++e}(v),function(t){let e=0;for(;e<t.atoms.atomTypes.length;)"oh"===t.atoms.atomTypes[e]?.toLowerCase()&&(t.atoms.atomTypes[e]="O"),"?"===t.atoms.atomTypes[e]&&(t.atoms.atomTypes[e]="H"),++e}(v),function(t){const e=" RGROUPS=(1 1)";for(let n=0;n<(t.atoms.kwargs?.length??0);n++){const i=t.atoms.kwargs[n];i&&i.includes(e)&&(t.atoms.kwargs[n]=i.replace(e,""))}}(v),v}var o;return null}(e,n,i,r,o);if(!a)throw new Error(`Monomer with symbol '${e}' is absent the monomer library`);(0,h.LQ)(t,s,a)}}function y(t,e){const n=e.rNodes;e.terminalNodes=new Array(n.length).fill(0);const i=e.terminalNodes,r=t.atomPairs;let o=0,s=0;for(;o<r.length&&s<i.length;){for(let t=0;t<i.length;++t)for(let e=0;e<2;++e)r[o][e]===n[t]&&(i[t]=r[o][(e+1)%2],n.length,++s);++o}}function b(t,e){t.meta.rNodes.length>1&&(t.meta.backboneShift=v(t,t.meta.rNodes[1]-1,t.meta.terminalNodes[0]-1)),"RNA"===e&&t.meta.rNodes.length>2&&(t.meta.branchShift=v(t,t.meta.rNodes[2]-1,t.meta.terminalNodes[0]-1))}function v(t,e,n){return[(0,l.YN)(t.atoms.x[e]-t.atoms.x[n]),(0,l.YN)(t.atoms.y[e]-t.atoms.y[n])]}function w(t,e){if(void 0!==e){const n=e-1,i=t.atoms,r=t.bonds,o=t.meta;i.atomTypes.splice(n,1),i.x=C(Float32Array,i.x,n,1),i.y=C(Float32Array,i.y,n,1),i.kwargs.splice(n,1);for(let t=0;t<o.terminalNodes.length;++t)o.terminalNodes[t]>e?--o.terminalNodes[t]:o.terminalNodes[t]===e&&(o.terminalNodes[t]=-1);for(let t=0;t<o.rNodes.length;++t)o.rNodes[t]>e?--o.rNodes[t]:o.rNodes[t]===e&&(o.rNodes[t]=-1);let s=0;for(;s<r.atomPairs.length;){const t=r.atomPairs[s][0],n=r.atomPairs[s][1];t===e||n===e?(r.atomPairs.splice(s,1),r.bondTypes=C(Uint32Array,r.bondTypes,s,1),r.bondConfiguration.has(s)&&r.bondConfiguration.delete(s),r.kwargs.has(s)&&r.kwargs.delete(s),--s):(r.atomPairs[s][0]=t>e?t-1:t,r.atomPairs[s][1]=n>e?n-1:n),++s}let a=Array.from(r.bondConfiguration.keys());a.forEach((t=>{if(r.bondConfiguration.has(t)&&t>n){const e=r.bondConfiguration.get(t);r.bondConfiguration.delete(t),r.bondConfiguration.set(t-1,e)}})),a=Array.from(r.kwargs.keys()),a.forEach((t=>{if(r.kwargs.has(t)&&t>n){const e=r.kwargs.get(t);r.kwargs.delete(t),r.kwargs.set(t-1,e)}}))}}function C(t,e,n,i){const r=new t(e.length-i);let o=0,s=0;for(;o<e.length;)o===n&&(o+=i),r[s]=e[o],++s,++o;return r}function A(t,e){let n;if(0===t)n=e>0?0:Math.PI;else if(0===e)n=t>0?-Math.PI/2:Math.PI/2;else{const i=e/t,r=Math.atan(i);n=t<0?Math.PI/2+r:-Math.PI/2+r}return n}function S(t,e){if(0!==e){const n=t.x,i=t.y,r=Math.cos(e),o=Math.sin(e);for(let t=0;t<n.length;++t){const e=n[t];n[t]=(0,l.YN)(e*r-i[t]*o),i[t]=(0,l.YN)(e*o+i[t]*r)}}}function x(t){E(t,!1)}function E(t,e){if(e){const e=t.atoms.y;for(let t=0;t<e.length;t++)e[t]=-e[t]}else{const e=t.atoms.x;for(let t=0;t<e.length;t++)e[t]=-e[t]}const n=t.bonds.bondConfiguration;for(const[t,e]of n){const i=1===e?3:1;n.set(t,i)}}function M(t,e,n){const i=t.atoms.x,r=t.atoms.y;for(let t=0;t<i.length;++t)i[t]=(0,l.YN)(i[t]+e),void 0!==n&&(r[t]=(0,l.YN)(r[t]+n))}},294:(t,e,n)=>{"use strict";function i(t,e){return t[e.polymerType]?.[e.symbol]}function r(t,e){return!!t[e.polymerType]?.[e.symbol]}function o(t,e,n){let i=t[e.polymerType];i||(i=t[e.polymerType]={}),i[e.symbol]=n}n.d(e,{Cg:()=>s,LQ:()=>o,bq:()=>r,vF:()=>a,xb:()=>i});class s extends Map{constructor(t){super(t)}}class a{constructor(t,e){this.molfile=t,this.monomers=e}static createEmpty(){return new a("",new s(null))}}},330:(t,e,n)=>{"use strict";n.d(e,{kA:()=>r,pz:()=>s,qj:()=>o,vG:()=>a});var i=n(2003);function r(t,e){return t?t.columns.getUnusedName(e):e}function o(t,e){return r(t,`molfile(${e})`)}function s(t){let e;if(t===i.YI.PT||t===i.YI.UN)e="PEPTIDE";else{if(t!==i.YI.RNA&&t!==i.YI.DNA)throw new Error(`Unexpected alphabet '${t}'.`);e="RNA"}return e}function a(t){const e=7===t.length?/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(t):/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(t);return e?[parseInt(e[1],16)/256,parseInt(e[2],16)/256,parseInt(e[3],16)/256,e.length>4?parseInt(e[4],16)/256:.3]:null}},1093:(t,e,n)=>{"use strict";n(7362);class i{}i.SemType="Nucleotides",i.SemTypeMultipleAlignment="NucleotidesMultipleAlignment",i.Names={A:"Adenine",C:"Cytosine",G:"Guanine",T:"Thymine",U:"Uracil"}},7362:(t,e,n)=>{"use strict";n.d(e,{e:()=>i});class i{static makePalette(t,e=!1,n=i){const r={};return t.forEach((t=>{const n=t[0],i=t[1];n.forEach(((t,n)=>{r[t]=this.colourPalette[i][e?0:n]}))})),new n(r)}constructor(t){this._palette=t}get(t,e){return this._palette[t]}}i.undefinedColor="rgb(100,100,100)",i.colourPalette={orange:["rgb(255,187,120)","rgb(245,167,100)","rgb(235,137,70)","rgb(205, 111, 71)"],all_green:["rgb(44,160,44)","rgb(74,160,74)","rgb(23,103,57)","rgb(30,110,96)","rgb(60,131,95)","rgb(24,110,79)","rgb(152,223,138)","rgb(182, 223, 138)","rgb(152, 193, 138)"],all_blue:["rgb(31,119,180)","rgb(23,190,207)","rgb(122, 102, 189)","rgb(158,218,229)","rgb(141, 124, 217)","rgb(31, 120, 150)"],magenta:["rgb(162,106,192)","rgb(197,165,224)","rgb(208,113,218)"],red:["rgb(214,39,40)","rgb(255,152,150)"],st_blue:["rgb(23,190,207)","rgb(158,218,229)","rgb(31,119,180)"],dark_blue:["rgb(31,119,180)","rgb(31, 120, 150)"],light_blue:["rgb(23,190,207)","rgb(158,218,229)","rgb(108, 218, 229)","rgb(23,190,227)"],lilac_blue:["rgb(124,102,211)","rgb(149,134,217)","rgb(97, 81, 150)"],dark_green:["rgb(23,103,57)","rgb(30,110,96)","rgb(60,131,95)","rgb(24,110,79)"],green:["rgb(44,160,44)","rgb(74,160,74)"],light_green:["rgb(152,223,138)","rgb(182, 223, 138)","rgb(152, 193, 138)"],st_green:["rgb(44,160,44)","rgb(152,223,138)","rgb(39, 174, 96)","rgb(74,160,74)"],pink:["rgb(247,182,210)"],brown:["rgb(140,86,75)","rgb(102, 62, 54)"],gray:["rgb(127,127,127)","rgb(199,199,199)","rgb(196,156,148)","rgb(222, 222, 180)"],yellow:["rgb(188,189,34)"],white:["rgb(230,230,230)"]}},4574:(t,e,n)=>{"use strict";n.d(e,{O:()=>o,n:()=>r});var i=n(1858);class r{constructor(t,e=!0,n){return this.substructure=t,this.readOnly=e,this.logger=n,new Proxy(this,{set:(t,e,n)=>{if(this.logger?.debug(`BioFilterProps.set ${e.toString()}( '${n}' )`),this.readOnly)throw new Error("Properties are immutable.");return t[e]=n,!0}})}}class o{constructor(){this.onChanged=new i.Subject,this._props=null,this._propsChanging=!1}get props(){return this._props||(this._props=this.emptyProps),this._props}set props(t){this._propsChanging=!0;try{this._props=t,this.applyProps(),this.onChanged.next()}finally{this._propsChanging=!1}}saveProps(){const t={};for(const[e,n]of Object.entries(this.props))"_onChanged"!==e&&"logger"!==e&&(t[e]=this.props[e]);return t}async detach(){}get filterSummary(){return this.props.substructure}get isFiltering(){return""!==this.props.substructure}resetFilter(){this.props=this.emptyProps,this.onChanged.next()}}},4152:(t,e,n)=>{"use strict";var i=n(6082),r=n(7362),o=n(6718);function s(t,e=!0){if(null==t)return"rgb(100,100,100)";const n=i.Color.fromHtml(t);if(e){const t=i.Color.g(n),e=i.Color.r(n),r=i.Color.b(n),o=Math.sqrt(Math.pow(0-e,2)+Math.pow(0-t,2)+Math.pow(0-r,2));if(o>210)return`rgb(${e/o*210},${t/o*210},${r/o*210})`}return i.Color.toRgb(n)}class a{static hashCode(t){let e=0;if(0===t.length)return e;for(let n=0;n<t.length;n++)e=(e<<5)-e+t.charCodeAt(n),e|=0;return e}}class l{}class c extends l{static get palette(){return c._pallete||(c._pallete=c.buildPalette()),c._pallete}static buildPalette(){return(0,o.pj)().then((t=>{t.awaitLoaded(1/0).then((()=>{const e=t.getMonomerLib();e.onChanged.subscribe((()=>{c.customMonomerColors={},c.polymerTypes=e.getPolymerTypes();for(const t of this.polymerTypes){const n=e.getMonomerSymbolsByType(t);for(const i of n){const n=e.getMonomer(t,i);n?.meta?.colors?.default?.background&&(this.customMonomerColors[i]||(this.customMonomerColors[i]={}),this.customMonomerColors[i][t]=s(n.meta.colors.default.background))}}}))}))})),[].concat(...Object.values(r.e.colourPalette))}get(t,e){const n=c.palette.length,i=c.customMonomerColors[t],r=e??"PEPTIDE";if(i&&i[r])return i[r];const o=a.hashCode(t)%n;return s(c.palette[o])}}c._pallete=null,c.customMonomerColors={},c.polymerTypes=[]},6642:(t,e,n)=>{"use strict";n.d(e,{BG:()=>s,sD:()=>l});var i=n(4328),r=n(1858),o=n(8070);function s(t){let e=null,n=null;try{n=t.dart?t.gridColumn:null,e=n?n.temp:null}catch{[n,e]=[null,null]}const i=t.cell.column;if(e=e??(i?i.temp:null),!e)throw new Error("Grid cell renderer back store (GridColumn or Column) not found.");return[n,i,e]}class a{onKeyDown(t,e){}onKeyPress(t,e){}onMouseEnter(t,e){}onMouseLeave(t,e){}onMouseDown(t,e){}onMouseUp(t,e){}onMouseMove(t,e){}onClick(t,e){}onDoubleClick(t,e){}}class l extends a{constructor(t,e,n){super(),this.gridCol=t,this.tableCol=e,this.logger=n,this.subs=[],this.dirty=!0,this.destroyed=!1,this.viewerId=++l.viewerCounter,this.errors=[],this._onRendered=new r.Subject,this.tableCol&&this.tableCol.dataFrame&&(this.subs.push(this.tableCol.dataFrame.onDataChanged.subscribe((()=>{this.dirty=!0}))),this.subs.push(this.tableCol.dataFrame.onColumnsRemoved.subscribe((t=>{try{this.destroyed||!this.tableCol||this.tableCol.dataFrame||this.destroy()}catch(t){this.logger.error(t)}})))),this.tableCol&&this.subs.push(i.events.onTableRemoved.subscribe((t=>{try{const e=t.args.dataFrame;this.tableCol?.dataFrame.id!==e.id||this.destroyed||this.destroy()}catch(t){this.logger.error(t)}}))),this.gridCol&&this.subs.push(i.events.onViewRemoving.subscribe((t=>{try{const e=t.args.view;this.gridCol?.dart&&this.gridCol.grid&&this.gridCol?.grid?.dart&&this.gridCol?.grid?.view?.id===e.id&&!this.destroyed&&this.destroy()}catch(t){this.logger.error(t)}})))}toLog(){return`${this.constructor.name}<${this.viewerId}>`}destroy(){for(const t of this.subs)t.unsubscribe();this.destroyed=!0}invalidateGrid(){this.gridCol&&this.gridCol.dart&&this.gridCol.grid?.invalidate()}reset(){this.dirty=!1}get onRendered(){return this._onRendered}invalidate(t){this.invalidateGrid()}async awaitRendered(t=1e4,e=`${t} timeout`){const n=`${this.toLog()}.awaitRendered()`;if(this.logger.debug(`${n}, start, testEvent before`),await(0,o.PE)(this._onRendered,(()=>{}),(()=>{this.invalidate()}),t,`${n}, ${e}`),this.errors.length>0){const t=this.errors[0];throw this.errors=[],t}this.logger.debug(`${n}, end`)}}l.viewerCounter=-1},673:(t,e,n)=>{"use strict";n.d(e,{s:()=>i});const i={true:"1",false:"0"}},6882:(t,e,n)=>{"use strict";n.d(e,{Jy:()=>b,S$:()=>y,U0:()=>v});var i=n(7389),r=n(6082),o=n(1991),s=n.n(o),a=n(8312),l=n(2003),c=n(6642),h=n(6718),u=n(9192),d=n(3856),p=n(673),m=n(3599),f=n(5553),g=n(9713);const y="rgb(100,100,100)";class b extends c.sD{get separatorWidth(){return this.props?.fontCharWidth?this.props?.fontCharWidth:5}constructor(t,e,n,i,o){super(t,e,n),this.monomerLengthLimit=i,this.propsProvider=o,this.colWidth=0,this._monomerLengthList=null,this._processedMaxVisibleSeqLength=0,this._monomerLengthMap={},this._monomerStructureMap={},this.sysMonomerLib=null,this.padding=5,this._leftThreeDotsPadding=0,this.props=this.propsProvider(),this._processedRows=r.BitSet.create(this.tableCol.length),this.gridCol&&this.subs.push(this.gridCol.grid.onAfterDrawContent.subscribe((()=>{this._onRendered.next()}))),this.tableCol&&this.gridCol&&(this.subs.push(this.tableCol.dataFrame.onCurrentRowChanged.subscribe((()=>{const t=this.tableCol.dataFrame;this.gridCol.grid,-1===t.currentRowIdx&&(this.tableCol.temp["reference-sequence"]=null,this.tableCol.temp["current-word"]=null,this.invalidateGrid())}))),this.subs.push(r.debounce(this.tableCol.dataFrame.onMetadataChanged.pipe(g.filter((t=>t.args.source===this.tableCol&&t.args.key===l.gp.positionShift))),200).subscribe((t=>{this.reset()}))))}async init(){await Promise.all([(async()=>{this.seqHelper=await(0,a.Q)(),this.invalidateGrid()})(),(async()=>{const t=await(0,h.pj)();this.sysMonomerLib=t.getMonomerLib()})()]),this.subs.push(this.sysMonomerLib.onChanged.subscribe((()=>{this.reset()}))),this.reset()}static getFontSettings(t){let e=12;return t&&t.temp[".mm.cellRenderer.fontSize"]&&"number"==typeof t.temp[".mm.cellRenderer.fontSize"]&&!isNaN(t.temp[".mm.cellRenderer.fontSize"])&&(e=Math.max(t.temp[".mm.cellRenderer.fontSize"],1)),{font:`${e}px monospace`,fontWidth:.6*e}}toLog(){return`MonomerPlacer<${this.viewerId}>`}getMonomerLib(){return this.tableCol.temp[".mm.cellRenderer.overriddenLibrary"]??this.sysMonomerLib}reset(){this.propsProvider&&(this.props=this.propsProvider()),this._processedRows=r.BitSet.create(this.tableCol.length),this._monomerLengthList=null,this._monomerLengthMap={},this._monomerStructureMap={},super.reset(),this.invalidateGrid()}invalidateGrid(){this.gridCol&&this.gridCol.dart&&this.gridCol.grid?.invalidate()}getCellMonomerLengths(t,e){const n=this.seqHelper.getSeqHandler(this.tableCol);if(this.colWidth<e&&(this.colWidth=e,this.dirty=!0),this.dirty)try{this.reset()}catch(t){const[e,n]=(0,u.AP)(t);this.logger.error(e,void 0,n)}const i=n.isMsa()?this.getCellMonomerLengthsForSeqMsa():this.getCellMonomerLengthsForSeq(t);return[i,this.getSummedMonomerLengths(i)]}getSummedMonomerLengths(t){const e=new Array(t.length+1);e[0]=this.padding;for(let n=1;n<e.length;n++)e[n]=e[n-1]+t[n-1];let n=e[0];for(let t=1;t<e.length;t++)e[t]?n=e[t]:e[t]=n;return e}getCellMonomerLengthsForSeq(t){this.toLog(),null===this._monomerLengthList&&(this._monomerLengthList=new Array(this.tableCol.length).fill(null));const e=this.positionShift,n=this.seqHelper.getSeqHandler(this.tableCol),i=this.props.separatorWidth+1*this.props.fontCharWidth,r=Math.ceil(this.colWidth/i)+e,o=n.getSplitted(t),s=Math.min(r,o.length);let a=this._monomerLengthList[t];if(null===a||a.length!=s-e){a=this._monomerLengthList[t]=new Array(o.length);let i=0;for(let t=e;t<s;++t){const r=o.getOriginal(t),s=this.props.monomerToShort(r,this.monomerLengthLimit),l=(n.isSeparator()?this.separatorWidth:this.props.separatorWidth)+s.length*this.props.fontCharWidth;if(a[t-e]=l,i+=l,i>this.colWidth)break}}return a}getCellMonomerLengthsForSeqValue(t,e){const n=this.seqHelper.getSeqHandler(this.tableCol),i=this.props.separatorWidth+1*this.props.fontCharWidth,r=this.positionShift,o=Math.ceil(e/i)+r,s=n.splitter(t),a=Math.min(o,s.length),l=new Array(a-r);let c=0;for(let t=r;t<a;++t){const i=s.getOriginal(t),o=this.props.monomerToShort(i,this.monomerLengthLimit),a=(n.isSeparator()?this.separatorWidth:this.props.separatorWidth)+o.length*this.props.fontCharWidth;if(l[t-r]=a,c+=a,c>e)break}return l}getCellMonomerLengthsForSeqMsa(){var t;this.toLog(),null===this._monomerLengthList&&(this._monomerLengthList=new Array(1).fill(null)),(t=this._monomerLengthList)[0]??(t[0]=new Array(0));const e=this._monomerLengthList[0],{startIdx:n,endIdx:i}=(()=>{try{const t=this.gridCol&&this.gridCol.dart?this.gridCol.grid:null;return t&&t.dart?{startIdx:Math.max(Math.floor((t?.vertScroll.min??0)-10),0),endIdx:Math.min(Math.ceil((t?.vertScroll.max??0)+10),this.tableCol.length)}:{startIdx:0,endIdx:Math.min(this.tableCol.length,10)}}catch(t){return{startIdx:0,endIdx:Math.min(this.tableCol.length,10)}}})(),r=this.props.separatorWidth+1*this.props.fontCharWidth,o=this.positionShift,s=Math.ceil(this.colWidth/r)+o;for(let t=n;t<i;t++){if(this._processedRows.get(t)&&s<=this._processedMaxVisibleSeqLength)continue;const n=this.seqHelper.getSeqHandler(this.tableCol).getSplitted(t,s),i=Math.min(s,n.length);i-o>e.length&&e.push(...new Array(i-o-e.length).fill(r));let a=0;for(let t=o;t<i;++t){const i=n.getOriginal(t),r=this.props.monomerToShort(i,this.monomerLengthLimit),s=this.props.separatorWidth+r.length*this.props.fontCharWidth;if(e[t-o]=Math.max(e[t-o]??0,s),a+=s,a>=this.colWidth)break}this._processedMaxVisibleSeqLength=Math.max(this._processedMaxVisibleSeqLength,s),this._processedRows.set(t,!0)}return e}getPosition(t,e,n,i){const[r,o]=this.getCellMonomerLengths(t,n);return 0===this.seqHelper.getSeqHandler(this.tableCol).getSplitted(t).length?null:function(t,e,n){if((n??0)>0&&e<(t[0]??0)+n)return-1;e-=n??0;let i,r=100,o=0,s=t.length-1;for(;o<=s;){if(i=Math.floor((s+o)/2),t[i]<=e&&e<t[i+1])return i;if(e<t[i]?s=i-1:o=i+1,--r<=0)throw new Error(`Get position for pointer x = ${e} searching has not converged on ${JSON.stringify(t)}. `)}return null}(o,e,i)}setMonomerLengthLimit(t){this.monomerLengthLimit!=t&&(this.monomerLengthLimit=t,this.dirty=!0)}setSeparatorWidth(t){this.separatorWidth!=t&&(this.props.separatorWidth=t,this.dirty=!0)}get positionShift(){const t=Number.parseInt(this.tableCol?.tags[l.gp.positionShift]??"0")??0;return isNaN(t)?0:Math.max(t,0)}render(t,e,n,i,r,o,a){const c=o.grid?.canvas===t.canvas;if(!this.seqHelper)return;const h=this.gridCol,m=this.tableCol,f=window.devicePixelRatio,g=this.positionShift,b=`${this.toLog()}.render()`;this.logger.debug(`${b}, start`);let w=this.monomerLengthLimit;if(d.gp.maxMonomerLength in m.tags){const t=parseInt(m.getTag(d.gp.maxMonomerLength));w=!isNaN(t)&&t?t:50}if(".mm.cellRenderer.maxMonomerLength"in m.temp){const t=m.temp[".mm.cellRenderer.maxMonomerLength"];w=!isNaN(t)&&t?t:50}t.save();try{const a=this.seqHelper.getSeqHandler(m);if(m.temp[".mm.cellRenderer.settingsChanged"]===p.s.true||this.monomerLengthLimit!=w){let t=0;const e=8;t=m.temp[".mm.cellRenderer.gapLength"]??t,this.setMonomerLengthLimit(w),this.setSeparatorWidth(a.isMsa()?e:t),m.temp[".mm.cellRenderer.settingsChanged"]=p.s.false}let[u,b]=this.getCellMonomerLengths(o.tableRowIndex,i);u.length;const C=o.cell.value,A=o.cell.rowIndex,S=(m.getTag(l.gp.alphabet),50);c&&(i=v(h?.grid,t,e,i,f)),t.beginPath(),t.rect(e+this.padding,n+this.padding,i-this.padding-1,r-2*this.padding),t.clip(),t.font=this.props?.font??"12px monospace",t.textBaseline="top";const x=m.meta.units,E=m.getTag(l.gp.aligned),M=m.getTag(l.gp.separator)??"",_=this.props.separatorWidth+1*this.props.fontCharWidth,I=Math.ceil(i/_)+g,T=m.temp["reference-sequence"],L=this.tableCol.temp["current-word"];L&&-1===m?.dataFrame?.currentRowIdx&&(this.tableCol.temp["current-word"]=null);const N=(()=>{const t=a.getSplitter(I)(null!=T&&""!=T?T:L??"");return s().count(0).take(t.length).slice(g).map((e=>t.getOriginal(e))).toArray()})(),P=c?a.getSplitted(A):a.splitter(C);c||(b=this.getSummedMonomerLengths(this.getCellMonomerLengthsForSeqValue(C,i)));let $=d.yg.classic;E&&E.includes("MSA")&&x==l.Hi.SEPARATOR&&($=d.yg.MSA),this._leftThreeDotsPadding=g>0?t.measureText("...").width:0;const R=Number.parseInt(m.getTag(l.gp.selectedPosition)??"-200"),O=Math.min(P.length,I);for(let s=g;s<O;++s){const l=s<P.length?P.getOriginal(s):a.defaultGapOriginal,c=s<P.length?P.getCanonical(s):a.defaultGapOriginal;let h=y;const u=this.getMonomerLib();if(u){const t=a.defaultBiotype;h=u.getMonomerTextColor(t,c)}t.fillStyle=y;const p={color:h,pivot:0,left:!0,transparencyRate:1,separator:M,last:s===P.length-1,drawStyle:$,maxWord:b,wordIdx:s-g,gridCell:o,referenceSequence:N,maxLengthOfMonomer:w,monomerTextSizeMap:this._monomerLengthMap,logger:this.logger,selectedPosition:isNaN(R)||R<1?void 0:R-g};if((0,d.oZ)(t,l,e+this.padding+this._leftThreeDotsPadding,n,i,r,p),S>i)break}if(g>0){const s={color:y,pivot:0,left:!0,transparencyRate:1,separator:M,last:!1,drawStyle:$,maxWord:b,wordIdx:0,gridCell:o,maxLengthOfMonomer:w,monomerTextSizeMap:this._monomerLengthMap,logger:this.logger};(0,d.oZ)(t,"...",e+this.padding,n,i,r,s)}}catch(t){const[e,n]=(0,u.AP)(t);this.logger.error(e,void 0,n),this.errors.push(t)}finally{t.restore()}}onMouseMove(t,e){const n=`${this.toLog()}.onMouseMove()`;if(!this.seqHelper||null==t.tableRowIndex)return;const r=this.positionShift,o=t.bounds,s=e.offsetX-t.gridColumn.left+(t.gridColumn.left-o.x),a=r>0&&(this._leftThreeDotsPadding??0)>0?this._leftThreeDotsPadding:0,c=this.getPosition(t.tableRowIndex,s,o.width,a);this.logger.debug(`${n}, start, argsX: ${s}, left: ${c}`);const h=this.seqHelper.getSeqHandler(this.tableCol),u=h.getSplitted(t.tableRowIndex);if(null!==c&&c>=0&&c+r<u.length){const n=h.alphabet??l.YI.UN,o={position:c,biotype:n===l.YI.RNA||n===l.YI.DNA?m.o.NUCLEOTIDE:m.o.AA,symbol:u.getCanonical(c+r)},s=[];let a=this._monomerStructureMap[o.symbol];{const t=this.getMonomerLib();a=this._monomerStructureMap[o.symbol]=t?t.getTooltip(o.biotype,o.symbol):i.divText("Monomer library is not available")}s.push(a),i.tooltip.show(i.divV(s),e.x+16,e.y+16),(0,f.WN)(t,o)}else-1===c?i.tooltip.show(i.divText(`${Math.min(r,u.length)} hidden monomers`),e.x+16,e.y+16):i.tooltip.hide(),(0,f.WN)(t,null)}}function v(t,e,n,i,r){return t?Math.max(Math.min(t.canvas.width/r-n,i)):Math.max(e.canvas.width/r-n,0)}},3856:(t,e,n)=>{"use strict";n.d(e,{Mn:()=>l,gp:()=>a,oZ:()=>u,yg:()=>c});var i=n(7278);const r="#808080",o="rgb(0,0,0)",s=i.zS;var a,l,c;!function(t){t.maxMonomerLength=".mm.cellRenderer.maxMonomerLength"}(a||(a={})),function(t){t.applyToBackground=".m.cellRenderer.applyToBackground"}(l||(l={})),function(t){t.MSA="MSA",t.classic="classic"}(c||(c={}));const h=new class{constructor(){this.color="rgb(100,100,100)",this.pivot=0,this.left=!1,this.transparencyRate=1,this.separator="",this.last=!1,this.drawStyle=c.classic,this.maxWord=[],this.wordIdx=0,this.gridCell=null,this.referenceSequence=null,this.maxLengthOfMonomer=null,this.monomerTextSizeMap={},this.logger=void 0,this.selectedPosition=void 0}};function u(t,e,n,i,a,l,u){var d,p,m;const f=Object.assign(Object.assign({},h),u);u.logger?.debug("Bio: printLeftOrCentered(), start"),t.textAlign="start";let g=e.substring(0),y=f.last?"":f.separator;f.drawStyle===c.MSA&&(y="");let b=!0,v=!0,w="difference";if(null!=f.gridCell&&null!=f.gridCell.cell.column&&(b=f.gridCell.cell.column.temp["color-code"]??!0,v=f.gridCell.cell.column.temp["compare-with-current"]??!0,w=f.gridCell.cell.column.temp["highlight-difference"]??"difference"),f.referenceSequence){const t=f.referenceSequence[f.wordIdx];v&&f.referenceSequence.length>0&&"difference"===w&&(f.transparencyRate=g==t?.3:f.transparencyRate),v&&f.referenceSequence.length>0&&"equal"===w&&(f.transparencyRate=g!=t?.3:f.transparencyRate)}null!=f.maxLengthOfMonomer&&(g=s(g,f.maxLengthOfMonomer));const C=g+y;(d=f.monomerTextSizeMap)[C]??(d[C]=t.measureText(C));let A=f.monomerTextSizeMap[C];(p=f.monomerTextSizeMap)[g]??(p[g]=t.measureText(g));let S=f.monomerTextSizeMap[g].width;const x=l/2-(A.fontBoundingBoxAscent+A.fontBoundingBoxDescent)/2+1;(m=f.monomerTextSizeMap)[y]??(m[y]=t.measureText(y));const E=f.monomerTextSizeMap[y].width;function M(e,s){f.selectedPosition===f.wordIdx+1&&(t.fillStyle="rgba(60, 177, 115, 0.2)",t.fillRect(n+e,i,S,l));const a=b?f.color:o;t.fillStyle=a,t.globalAlpha=f.transparencyRate,f.drawStyle===c.classic&&(t.fillText(g,n+e,i+x),t.fillStyle=r,t.fillText(y,n+s,i+x)),f.drawStyle===c.MSA&&t.fillText(g,n+e,i+x)}A=A.width,f.drawStyle===c.MSA&&(S=f.maxWord[f.wordIdx],A=f.maxWord[f.wordIdx]);const _=(f.maxWord[f.wordIdx]??0)-(f.maxWord[0]??0);if(f.left||A>a)return M(_,_+S),n+_+S+E;{const t=(a-A)/2;return M(t,t+S),n+_+t+S}}},3151:(t,e,n)=>{"use strict";n.d(e,{EK:()=>l,Ec:()=>o,f6:()=>i,pe:()=>s,q7:()=>a,yw:()=>r});const i=["symbol","molfile","rgroups","name"],r="MonomerName",o={monomerType:null,smiles:null,name:"Name",author:null,molfile:"molecule",naturalAnalog:"MonomerNaturalAnalogCode",rgroups:"MonomerCaps",createDate:null,id:null,polymerType:"MonomerType",symbol:"MonomerName"},s={monomerType:"Backbone",smiles:"",name:"",author:"Datagrok",molfile:"",naturalAnalog:"",rgroups:[],createDate:null,id:0,polymerType:"PEPTIDE",symbol:""},a="p",l=new RegExp(`[rd]\\((\\w)\\)${a}?`,"g")},9192:(t,e,n)=>{"use strict";function i(t){return"string"==typeof t||t instanceof String?t:"StateError"===t.constructor.name?t.message:"StateError"===t.constructor.name&&"$thrownJsError"in t?i(t.$thrownJsError):t instanceof Error?t.message:t.toString()}function r(t){return t instanceof Error?t.stack:"StateError"===t.constructor.name&&"$thrownJsError"in t?r(t.$thrownJsError):void 0}function o(t){return[i(t),r(t)]}n.d(e,{AP:()=>o})},3516:(t,e,n)=>{"use strict";n.d(e,{m:()=>o});var i=n(6082),r=n(439);class o{get descriptionsArray(){return this._descriptionsArray}get sequencesArray(){return this._sequencesArray}parseMacromolecule(t,e){return this._fileContent.slice(t,e).split(/\s/).join("")}parseColumns(){const t=/^>(.*)$/gm;let e,n=0;for(;e=t.exec(this._fileContent);){const i=this._fileContent.substring(e.index+1,t.lastIndex);this._descriptionsArray.push(i),0!==n&&this._sequencesArray.push(this.parseMacromolecule(n,e.index)),n=t.lastIndex+1}this._sequencesArray.push(this.parseMacromolecule(n,-1))}importFasta(){const t=i.Column.fromStrings("description",this.descriptionsArray),e=i.Column.fromStrings("sequence",this.sequencesArray);return e.semType=i.SEMTYPE.MACROMOLECULE,e.meta.units=r.Hi.FASTA,[i.DataFrame.fromColumns([t,e])]}constructor(t){this._descriptionsArray=[],this._sequencesArray=[],this._fileContent=t,this.parseColumns()}}},6873:(t,e,n)=>{"use strict";n.d(e,{Hx:()=>h,dW:()=>c});var i=n(6082),r=n(1991),o=n.n(r),s=n(2003),a=n(7278),l=n(439);function c(t=10**5){const e="meI/hHis/Aca/N//dE/Thr_PO3H2/Aca/D-Tyr_Et/Tyr_ab-dehydroMe".repeat(Math.ceil(t/10)).slice(0,-1),n=i.Column.fromList(i.COLUMN_TYPE.STRING,"MSA",new Array(100).fill(e));n.semType=i.SEMTYPE.MACROMOLECULE,n.meta.units=s.Hi.SEPARATOR,n.setTag(s.gp.separator,"/"),n.setTag(s.gp.alphabet,s.YI.UN),n.setTag(s.gp.alphabetIsMultichar,"true");const r=[];return r.push(n),r.push(i.Column.fromList(i.COLUMN_TYPE.FLOAT,"Activity",new Array(100).fill(7.30751))),r}function h(t,e=s.Hi.SEPARATOR,n=s.YI.PT,r=(e===s.Hi.SEPARATOR?"-":void 0),c=void 0,h="seq",u=100,d=10**6){const p=n===s.YI.UN?c?.getMonomerSymbolsByType("PEPTIDE")??[]:Array.from((0,s.Qf)(n)),m=p.length,f=i.Column.fromType(i.COLUMN_TYPE.STRING,h,u);f.semType=i.SEMTYPE.MACROMOLECULE,f.meta.units=e,f.setTag(s.gp.alphabet,n),e==s.Hi.SEPARATOR&&f.setTag(s.gp.separator,r);const g=t.getSeqHandler(f);for(let t=0;t<u;t++){const n=o().count(0).take(d).map((t=>p[Math.floor(Math.random()*m)])).toArray(),i=g.joiner(new a.Mu(n,l.b9[e]));f.set(t,i)}return f}},439:(t,e,n)=>{"use strict";n.d(e,{B5:()=>l,Hi:()=>i,Vl:()=>c,YI:()=>r,_S:()=>u,b9:()=>d,gp:()=>o,q7:()=>h,z1:()=>a});var i,r,o,s=n(2738);!function(t){t.FASTA="fasta",t.SEPARATOR="separator",t.HELM="helm",t.CUSTOM="custom"}(i||(i={})),function(t){t.DNA="DNA",t.RNA="RNA",t.PT="PT",t.UN="UN"}(r||(r={})),function(t){t.aligned="aligned",t.alphabet="alphabet",t.alphabetSize=".alphabetSize",t.alphabetIsMultichar=".alphabetIsMultichar",t.separator="separator",t.isHelmCompatible=".isHelmCompatible",t.positionNames=".positionNames",t.positionLabels=".positionLabels",t.regions=".regions",t.positionShift=".positionShift",t.selectedPosition=".selectedPosition"}(o||(o={}));const a=", ",l=/(?:\[([A-Za-z0-9_\-,()]+)\])|([A-Za-z\-])/g,c=new class{constructor(){this.fasta={peptide:new Set(["G","L","Y","S","E","Q","D","N","F","A","K","R","H","C","V","P","W","I","M","T"]),dna:new Set(["A","C","G","T"]),rna:new Set(["A","C","G","U"])}}},h=[new s.a(r.PT,c.fasta.peptide,.5),new s.a(r.DNA,c.fasta.dna,.55),new s.a(r.RNA,c.fasta.rna,.55)],u="",d={[i.FASTA]:"-",[i.SEPARATOR]:"",[i.HELM]:"*"}},2003:(t,e,n)=>{"use strict";n.d(e,{Hi:()=>i.Hi,J9:()=>r.J9,Qf:()=>r.Qf,YI:()=>i.YI,dh:()=>r.dh,gp:()=>i.gp,mn:()=>r.mn,q7:()=>i.q7,qp:()=>r.qp,z1:()=>i.z1,zS:()=>r.zS});var i=n(439),r=n(7278)},2738:(t,e,n)=>{"use strict";n.d(e,{X:()=>r,a:()=>i});class i{constructor(t,e,n){this.name=t,this.alphabet=e,this.cutoff=n}}class r extends i{constructor(t,e,n){super(t.name,t.alphabet,t.cutoff),this.freq=e,this.similarity=n}}},7278:(t,e,n)=>{"use strict";n.d(e,{Iv:()=>y,J9:()=>p,Mu:()=>u,Qf:()=>w,dh:()=>f,mn:()=>S,p0:()=>A,pc:()=>C,qp:()=>g,tm:()=>m,zS:()=>v});var i=n(6082),r=n(1991),o=n.n(r),s=n(3527),a=n(3629),l=n(2738),c=n(439),h=(n(8924),n(1093),n(4152),n(8438));class u{get length(){return this.mList.length}isGap(t){return this.getOriginal(t)===this.gapOriginalMonomer}getCanonical(t){if(this.length<=t)throw new Error("Index out of bounds");const e=this.mList[t];return e!==this.gapOriginalMonomer?e:c._S}getOriginal(t){if(this.length<=t)throw new Error("Index out of bounds");return this.mList[t]}constructor(t,e){this.mList=t,this.gapOriginalMonomer=e}}class d{get length(){return this.seqS.length}isGap(t){return this.getOriginal(t)===c.b9[c.Hi.FASTA]}getCanonical(t){if(this.length<=t)throw new Error("Index out of bounds");return this.isGap(t)?c._S:this.seqS[t]}getOriginal(t){if(this.length<=t)throw new Error("Index out of bounds");return this.seqS[t]}constructor(t){this.seqS=t}}const p=t=>{const e=o()(t.toString().matchAll(c.B5)).map((t=>t[2]??t[1])).toArray();return new u(e,c.b9[c.Hi.FASTA])},m=t=>t?new d(t):new u([],c.b9[c.Hi.FASTA]);function f(t,e=void 0){return n=>{if(n){let i;const r=new RegExp(`(?<=^|\\${t})("-"|'-'|[^\\${t}]*)(?=\\${t}|$)`,"g");return void 0!==e?(r.lastIndex=0,i=o()(n.matchAll(r)).take(e).map((t=>t[0])).toArray()):i=n.replaceAll('"-"',"").replaceAll("'-'","").split(t,e),new u(i,c.b9[c.Hi.SEPARATOR])}return new u([],c.b9[c.Hi.SEPARATOR])}}const g=t=>{const e=t.split("$")[0].split("|"),n=o()(e.map((t=>(t.match(/(?<=\{).+(?=})/)?.[0]?.split(".")??[]).map((t=>(0,h.D)(t)))))).flatten().toArray();return new u(n,c.b9[c.Hi.HELM])};function y(t,e,n=void 0){if(t.toLowerCase().startsWith(c.Hi.FASTA))return p;if(t.toLowerCase().startsWith(c.Hi.SEPARATOR))return f(e,n);if(t.toLowerCase().startsWith(c.Hi.HELM))return g;throw new Error(`Unexpected units ${t} .`)}const b=/([^\W_]+)/g;function v(t,e){if(t.length<=e)return t;const n=t.match(b),i=t.length>e||(n?.length??0)>1,r=n?.[0]??" ";return i?r.substring(0,e-1)+"…":r}function w(t){switch(t){case c.YI.DNA:return c.Vl.fasta.dna;case c.YI.RNA:return c.Vl.fasta.rna;case c.YI.PT:return c.Vl.fasta.peptide;default:throw new Error(`Unsupported alphabet '${t}'.`)}}function C(t,e,n="-"){const i=e.map((e=>{const i=function(t,e,n="-"){const i=new Set([...new Set(Object.keys(t)),...e]);i.delete(n);const r=[],o=[];for(const n of i)r.push(n in t?t[n]:0),o.push(e.has(n)?1:0);const l=new s.Mi(r),c=new s.Mi(o);return(0,a.KE)(l,c)/((0,a.wQ)(l)*(0,a.wQ)(c))}(t,e.alphabet,n);return new l.X(e,t,i)}));let r;const o=Math.max(...i.map((t=>t.similarity>t.cutoff?t.similarity:-1)));return r=o>0?i.find((t=>t.similarity===o)).name:c.YI.UN,r}function A(t,e,n="-"){const i=Object.keys(t),r=/\(|\)/;return C(i.filter((t=>3===t.split(r).filter((t=>!!t)).length)).length>.8*i.length?Object.entries(t).reduce(((t,[e,n])=>{const i=e.split(r)[1];return i&&(t[i]=n),t}),{}):t,e,n)}function S(t){const e=t.columns.bySemTypeAll(i.SEMTYPE.MACROMOLECULE);let n=e.find((t=>{const e=t.meta.units;return!!e&&-1!==e.indexOf("MSA")}))??null;return!n&&e.length>0&&(n=e[0]),n}},8312:(t,e,n)=>{"use strict";n.d(e,{Q:()=>r});var i=n(6082);async function r(){const t=i.Func.find({package:"Bio",name:"getSeqHelper"});if(0===t.length)throw new Error("Package 'Bio' must be installed for SeqHelper.");return(await t[0].prepare().call()).getOutputParamValue()}},3077:(t,e,n)=>{"use strict";n.d(e,{R:()=>r});var i=n(6082);function r(t,e){const n=t=>{const e=s.columns.addNewString((t+1).toString());return r.push(e),e},r=[],o=t.length,s=i.DataFrame.create(o),a=e.getSeqHandler(t);for(let t=0;t<o;++t){const e=a.getSplitted(t);for(let i=0;i<e.length;++i){const o=e.getCanonical(i);((r[i]??null)||n(i)).set(t,o,!1)}}return s}},7602:(t,e,n)=>{"use strict";n.d(e,{g:()=>o});var i,r=n(9192);!function(t){t[t.error=0]="error",t[t.warning=1]="warning",t[t.info=2]="info",t[t.debug=3]="debug"}(i||(i={}));class o{constructor(t){this.logger=t,this.promise=Promise.resolve(),this.errors=[],this.syncCounter=0}sync(t,e){const n=++this.syncCounter;this.logger.debug(`${t}, SYNC syncId = ${n}, IN `),this.promise=this.promise.then((async()=>{this.logger.debug(`${t}, SYNC syncId = ${n}, START `),await e(),this.logger.debug(`${t}, SYNC syncId = ${n}, END `)})).catch((e=>{const[i,o]=(0,r.AP)(e);this.logger.error(`${t}, SYNC syncId = ${n}, ERROR:\n${i}`,void 0,o),this.errors.push(e)}))}resetErrors(){const t=this.errors;return this.errors=[],t}}},4326:(t,e,n)=>{"use strict";n.d(e,{Fo:()=>h,Lp:()=>o,P4:()=>s,fH:()=>r,gp:()=>i,lT:()=>l,mH:()=>a});var i,r,o,s,a,l,c=n(6082);!function(t){t.tooltipWebLogo=".tooltipWebLogo"}(i||(i={})),function(t){t.Entropy="Entropy",t.full="100%"}(r||(r={})),function(t){t.TOP="top",t.MIDDLE="middle",t.BOTTOM="bottom"}(o||(o={})),function(t){t.LEFT="left",t.CENTER="center",t.RIGHT="right"}(s||(s={})),function(t){t.AUTO="auto",t.ON="on",t.OFF="off"}(a||(a={})),function(t){t.Filtered="Filtered",t.Selected="Selected"}(l||(l={}));const h=new class{constructor(){this.sequenceColumnName=null,this.valueAggrType=c.AGG.TOTAL_COUNT,this.valueColumnName="Activity",this.startPositionName=null,this.endPositionName=null,this.skipEmptySequences=!0,this.skipEmptyPositions=!1,this.shrinkEmptyTail=!0,this.backgroundColor=4294967295,this.positionHeight=r.Entropy,this.positionWidth=20,this.verticalAlignment=o.MIDDLE,this.horizontalAlignment=s.CENTER,this.fixWidth=!1,this.fitArea=!0,this.minHeight=25,this.maxHeight=300,this.maxMonomerLetters=5,this.showPositionLabels=!0,this.positionMarginState=a.AUTO,this.positionMargin=0,this.filterSource=l.Filtered}}},6869:(t,e,n)=>{"use strict";var i;n.d(e,{o:()=>i}),function(t){t.BASE="HELM_BASE",t.SUGAR="HELM_SUGAR",t.LINKER="HELM_LINKER",t.AA="HELM_AA",t.CHEM="HELM_CHEM",t.BLOB="HELM_BLOB",t.NUCLEOTIDE="HELM_NUCLETIDE"}(i||(i={}))},5540:(t,e,n)=>{"use strict";t=n.hmd(t);var i,r=(i="undefined"!=typeof document&&document.currentScript?document.currentScript.src:void 0,function(t={}){var e,n,r=void 0!==t?t:{};r.ready=new Promise((function(t,i){e=t,n=i}));var o,s=Object.assign({},r),a="object"==typeof window,l="function"==typeof importScripts,c=("object"==typeof process&&"object"==typeof process.versions&&process.versions.node,"");(a||l)&&(l?c=self.location.href:"undefined"!=typeof document&&document.currentScript&&(c=document.currentScript.src),i&&(c=i),c=0!==c.indexOf("blob:")?c.substr(0,c.replace(/[?#].*/,"").lastIndexOf("/")+1):"",l&&(o=t=>{var e=new XMLHttpRequest;return e.open("GET",t,!1),e.responseType="arraybuffer",e.send(null),new Uint8Array(e.response)})),r.print||console.log.bind(console);var h,u,d=r.printErr||console.warn.bind(console);Object.assign(r,s),s=null,r.arguments&&r.arguments,r.thisProgram&&r.thisProgram,r.quit&&r.quit,r.wasmBinary&&(h=r.wasmBinary),r.noExitRuntime,"object"!=typeof WebAssembly&&M("no native wasm support detected");var p,m,f,g=!1;function y(){var t=u.buffer;r.HEAP8=p=new Int8Array(t),r.HEAP16=new Int16Array(t),r.HEAP32=new Int32Array(t),r.HEAPU8=m=new Uint8Array(t),r.HEAPU16=new Uint16Array(t),r.HEAPU32=f=new Uint32Array(t),r.HEAPF32=new Float32Array(t),r.HEAPF64=new Float64Array(t)}var b,v,w=[],C=[],A=[],S=0,x=null,E=null;function M(t){r.onAbort&&r.onAbort(t),d(t="Aborted("+t+")"),g=!0,t+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(t);throw n(e),e}function _(t){return t.startsWith("data:application/octet-stream;base64,")}function I(t){try{if(t==b&&h)return new Uint8Array(h);if(o)return o(t);throw"both async and sync fetching of the wasm failed"}catch(t){M(t)}}function T(t,e,n){return function(t){return h||!a&&!l||"function"!=typeof fetch?Promise.resolve().then((function(){return I(t)})):fetch(t,{credentials:"same-origin"}).then((function(e){if(!e.ok)throw"failed to load wasm binary file at '"+t+"'";return e.arrayBuffer()})).catch((function(){return I(t)}))}(t).then((function(t){return WebAssembly.instantiate(t,e)})).then((function(t){return t})).then(n,(function(t){d("failed to asynchronously prepare wasm: "+t),M(t)}))}function L(t){for(;t.length>0;)t.shift()(r)}function N(t){this.excPtr=t,this.ptr=t-24,this.set_type=function(t){f[this.ptr+4>>2]=t},this.get_type=function(){return f[this.ptr+4>>2]},this.set_destructor=function(t){f[this.ptr+8>>2]=t},this.get_destructor=function(){return f[this.ptr+8>>2]},this.set_caught=function(t){t=t?1:0,p[this.ptr+12|0]=t},this.get_caught=function(){return 0!=p[this.ptr+12|0]},this.set_rethrown=function(t){t=t?1:0,p[this.ptr+13|0]=t},this.get_rethrown=function(){return 0!=p[this.ptr+13|0]},this.init=function(t,e){this.set_adjusted_ptr(0),this.set_type(t),this.set_destructor(e)},this.set_adjusted_ptr=function(t){f[this.ptr+16>>2]=t},this.get_adjusted_ptr=function(){return f[this.ptr+16>>2]},this.get_exception_ptr=function(){if(D(this.get_type()))return f[this.excPtr>>2];var t=this.get_adjusted_ptr();return 0!==t?t:this.excPtr}}function P(t){var e=u.buffer;try{return u.grow(t-e.byteLength+65535>>>16),y(),1}catch(t){}}function $(t){return r["_"+t]}_(b="wasmDbscan.wasm")||(v=b,b=r.locateFile?r.locateFile(v,c):c+v);var R="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function O(t,e,n,i,r){var o={string:t=>{var e=0;return null!=t&&0!==t&&(e=function(t){var e=function(t){for(var e=0,n=0;n<t.length;++n){var i=t.charCodeAt(n);i<=127?e++:i<=2047?e+=2:i>=55296&&i<=57343?(e+=4,++n):e+=3}return e}(t)+1,n=B(e);return function(t,e,n){!function(t,e,n,i){if(!(i>0))return 0;for(var r=n+i-1,o=0;o<t.length;++o){var s=t.charCodeAt(o);if(s>=55296&&s<=57343&&(s=65536+((1023&s)<<10)|1023&t.charCodeAt(++o)),s<=127){if(n>=r)break;e[n++]=s}else if(s<=2047){if(n+1>=r)break;e[n++]=192|s>>6,e[n++]=128|63&s}else if(s<=65535){if(n+2>=r)break;e[n++]=224|s>>12,e[n++]=128|s>>6&63,e[n++]=128|63&s}else{if(n+3>=r)break;e[n++]=240|s>>18,e[n++]=128|s>>12&63,e[n++]=128|s>>6&63,e[n++]=128|63&s}}e[n]=0}(t,m,e,n)}(t,n,e),n}(t)),e},array:t=>{var e,n,i=B(t.length);return e=t,n=i,p.set(e,n),i}},s=$(t),a=[],l=0;if(i)for(var c=0;c<i.length;c++){var h=o[n[c]];h?(0===l&&(l=F()),a[c]=h(i[c])):a[c]=i[c]}var u=s.apply(null,a);return function(t){return 0!==l&&H(l),function(t){return"string"===e?(n=t)?function(t,e,n){for(var i=e+n,r=e;t[r]&&!(r>=i);)++r;if(r-e>16&&t.buffer&&R)return R.decode(t.subarray(e,r));for(var o="";e<r;){var s=t[e++];if(128&s){var a=63&t[e++];if(192!=(224&s)){var l=63&t[e++];if((s=224==(240&s)?(15&s)<<12|a<<6|l:(7&s)<<18|a<<12|l<<6|63&t[e++])<65536)o+=String.fromCharCode(s);else{var c=s-65536;o+=String.fromCharCode(55296|c>>10,56320|1023&c)}}else o+=String.fromCharCode((31&s)<<6|a)}else o+=String.fromCharCode(s)}return o}(m,n,i):"":"boolean"===e?Boolean(t):t;var n,i}(t)}(u)}var k,G={__cxa_throw:function(t,e,n){throw new N(t).init(e,n),t},abort:function(){M("")},emscripten_memcpy_big:function(t,e,n){m.copyWithin(t,e,e+n)},emscripten_resize_heap:function(t){var e,n=m.length,i=2147483648;if((t>>>=0)>i)return!1;for(var r=1;r<=4;r*=2){var o=n*(1+.2/r);if(o=Math.min(o,t+100663296),P(Math.min(i,(e=Math.max(t,o))+(65536-e%65536)%65536)))return!0}return!1}},F=(function(){var t,e,i,o,s={env:G,wasi_snapshot_preview1:G};function a(t,e){var n,i=t.exports;return r.asm=i,u=r.asm.memory,y(),r.asm.__indirect_function_table,n=r.asm.__wasm_call_ctors,C.unshift(n),function(){if(S--,r.monitorRunDependencies&&r.monitorRunDependencies(S),0==S&&(null!==x&&(clearInterval(x),x=null),E)){var t=E;E=null,t()}}(),i}if(S++,r.monitorRunDependencies&&r.monitorRunDependencies(S),r.instantiateWasm)try{return r.instantiateWasm(s,a)}catch(t){d("Module.instantiateWasm callback failed with error: "+t),n(t)}(t=h,e=b,i=s,o=function(t){a(t.instance)},t||"function"!=typeof WebAssembly.instantiateStreaming||_(e)||"function"!=typeof fetch?T(e,i,o):fetch(e,{credentials:"same-origin"}).then((function(t){return WebAssembly.instantiateStreaming(t,i).then(o,(function(t){return d("wasm streaming compile failed: "+t),d("falling back to ArrayBuffer instantiation"),T(e,i,o)}))}))).catch(n)}(),r._dbscan=function(){return(r._dbscan=r.asm.dbscan).apply(null,arguments)},r._malloc=function(){return(r._malloc=r.asm.malloc).apply(null,arguments)},r._free=function(){return(r._free=r.asm.free).apply(null,arguments)},function(){return(F=r.asm.stackSave).apply(null,arguments)}),H=function(){return(H=r.asm.stackRestore).apply(null,arguments)},B=function(){return(B=r.asm.stackAlloc).apply(null,arguments)},D=function(){return(D=r.asm.__cxa_is_pointer_type).apply(null,arguments)};function V(){function t(){k||(k=!0,r.calledRun=!0,g||(L(C),e(r),r.onRuntimeInitialized&&r.onRuntimeInitialized(),function(){if(r.postRun)for("function"==typeof r.postRun&&(r.postRun=[r.postRun]);r.postRun.length;)t=r.postRun.shift(),A.unshift(t);var t;L(A)}()))}S>0||(function(){if(r.preRun)for("function"==typeof r.preRun&&(r.preRun=[r.preRun]);r.preRun.length;)t=r.preRun.shift(),w.unshift(t);var t;L(w)}(),S>0||(r.setStatus?(r.setStatus("Running..."),setTimeout((function(){setTimeout((function(){r.setStatus("")}),1),t()}),1)):t()))}if(r.ccall=O,r.cwrap=function(t,e,n,i){var r=!n||n.every((t=>"number"===t||"boolean"===t));return"string"!==e&&r&&!i?$(t):function(){return O(t,e,n,arguments)}},E=function t(){k||V(),k||(E=t)},r.preInit)for("function"==typeof r.preInit&&(r.preInit=[r.preInit]);r.preInit.length>0;)r.preInit.pop()();return V(),t.ready});"object"==typeof exports?t.exports=r:"function"==typeof define&&n.amdO?define([],(function(){return r})):"object"==typeof exports&&(exports.exportCppDbscanLib=r)},6295:(t,e,n)=>{"use strict";n.d(e,{$1:()=>a,Hf:()=>u,Hr:()=>M,Ii:()=>y,Qj:()=>f,T6:()=>E,TK:()=>S,be:()=>g,gt:()=>w,iS:()=>s,ij:()=>C,jL:()=>h,lO:()=>m,lP:()=>v,rR:()=>b,tO:()=>l,v_:()=>c,w_:()=>d,yK:()=>A,zn:()=>p});var i=n(8774),r=n(8498),o=n(6863);r.aT.Tanimoto,r.aT.Dice,r.aT.Asymmetric,r.aT.BraunBlanquet,r.aT.Cosine,r.aT.Kulczynski,r.aT.McConnaughey,r.aT.RogotGoldberg,r.aT.Russel,r.aT.Sokal,r.aT.Hamming,r.aT.Euclidean,r.aT.Tanimoto,r.aT.Dice,r.aT.Asymmetric,r.aT.BraunBlanquet,r.aT.Cosine,r.aT.Kulczynski,r.aT.McConnaughey,r.aT.RogotGoldberg,r.aT.Russel,r.aT.Sokal,r.aT.Hamming,r.aT.Euclidean;const s=[r.aT.Tanimoto,r.aT.Dice,r.aT.Cosine];function a(t,e){const n=t.trueCount()+e.trueCount();if(0==n)return 1;const i=t.andWithCountBits(e,!0);return i/(n-i)}function l(t,e){return 1-a(t,e)}function c(t,e){return x(a(new i.A(t,32*t.length),new i.A(e,32*e.length)))}function h(t,e){let n=0;for(let i=0;i<t.length;i++)n+=Math.pow(t[i]-e[i],2);return Math.sqrt(n)}function u(t,e){let n=0;for(let i=0;i<t.length;i++)n+=Math.abs(t[i]-e[i]);return n}function d(t,e){let n=0,i=0,r=0;for(let o=0;o<t.length;o++)n+=t[o]*e[o],i+=t[o]*t[o],r+=e[o]*e[o];return(1-n/(Math.sqrt(i)*Math.sqrt(r)))/2}function p(t,e){return 1-function(t,e){const n=t.trueCount()+e.trueCount();return 0==n?0:2*t.andWithCountBits(e,!0)/n}(t,e)}function m(t,e){return 1-function(t,e){const n=t.trueCount()*e.trueCount();return 0==n?0:t.andWithCountBits(e,!0)/Math.sqrt(n)}(t,e)}function f(t,e){return Math.sqrt(t.trueCount()+e.trueCount()-2*t.andWithCountBits(e,!0))}function g(t,e){return t.trueCount()+e.trueCount()-2*t.andWithCountBits(e,!0)}function y(t,e){return 1-function(t,e){const n=t.trueCount()+e.trueCount(),i=t.andWithCountBits(e,!0);return i/(2*n-3*i)}(t,e)}function b(t,e){return x(function(t,e){const n=t.trueCount()+e.trueCount(),i=t.trueCount()*e.trueCount();return 0==i?0:t.andWithCountBits(e,!0)*n/(2*i)}(t,e))}function v(t,e){return x(function(t,e){const n=t.trueCount()+e.trueCount(),i=t.trueCount()*e.trueCount();return 0==i?0:(t.andWithCountBits(e,!0)*n-i)/i}(t,e))}function w(t,e){return 1-function(t,e){const n=Math.min(t.trueCount(),e.trueCount());return 0==n?0:t.andWithCountBits(e,!0)/n}(t,e)}function C(t,e){return x(function(t,e){const n=Math.max(t.trueCount(),e.trueCount());return 0==n?0:t.andWithCountBits(e,!0)/n}(t,e))}function A(t,e){return x(function(t,e){return 0==t.length?0:t.andWithCountBits(e,!0)/t.length}(t,e))}function S(t,e){return x(function(t,e){const n=t.andWithCountBits(e,!0),i=t.countBits(!0)+e.countBits(!0),r=t.length,o=r-i+n;return n==r||o==r?1:n/i+o/(2*r-i)}(t,e))}function x(t){return t<=0?3402823e32:1/t-1}function E(t){if(t&&null!=t.range&&t.range>0){const e=t.range;return(t,n)=>Math.abs(t-n)/e}return(t,e)=>Math.abs(t-e)}function M(t){const e=function(t){const e=t?.mostCommon??new Set;return(t,n)=>{const i=t.length,r=n.length;let o=0,s=0,a=0;for(;s<i&&a<r;)t[s]===n[a]?(e?.has(t[s])||++o,++s,++a):t[s]<n[a]?++s:++a;return o}}(t);return(t,n)=>0===n.length||0===t.length?1e4:Math.min(t.length,n.length)/(e(t,n)+1e-4)}r.aT.Tanimoto,r.aT.Asymmetric,r.aT.Cosine,r.aT.Sokal,o.Z.HAMMING,o.Z.LEVENSHTEIN,o.Z.MONOMER_CHEMICAL_DISTANCE,o.Z.NEEDLEMANN_WUNSCH},684:(t,e,n)=>{"use strict";n.d(e,{C0:()=>o,GP:()=>i,Gi:()=>a,YP:()=>c,_X:()=>s,n3:()=>r,vb:()=>l});const i="dim-red-preprocessing-function",r="supportedSemTypes",o="supportedTypes",s="supportedUnits",a="supportedDistanceFunctions",l="bypassLargeDataWarning",c="show-scatterplot-progress"},6863:(t,e,n)=>{"use strict";function i(t={}){const e=function(){if(!t||!t.scoringMatrix||!t.alphabetIndexes)return(t,e)=>t===e?0:1;if(t.scoringMatrix.length!==Object.keys(t.alphabetIndexes).length)throw new Error("Scoring matrix and alphabet indexes should have the same length");const e=t.alphabetIndexes,n=t.scoringMatrix,i=Math.min(...Object.keys(e).map((t=>t.charCodeAt(0))))+1,r=new Float32Array((n.length+i)*(n.length+i));return Object.entries(e).forEach((([t,i])=>{const o=n[i];Object.entries(e).forEach((([e,i])=>{r[t.charCodeAt(0)*n.length+e.charCodeAt(0)]=o[i]}))})),(t,e)=>1-r[t.charCodeAt(0)*n.length+e.charCodeAt(0)]}(),n=t?.threshold??0;return(t,i)=>{let r=0;const o=t.length,s=i.length,a=Math.ceil(Math.max(o,s)*(1-n));o!==s&&(r=Math.abs(o-s));let l=0;for(let n=0;n<Math.min(o,s);n++)if(t[n]!==i[n]&&(l+=e(t[n],i[n]),l>a))return 1;return l+=r,l/=Math.max(o,s),l}}n.d(e,{Z:()=>s,V:()=>a});var r=n(2787);const o={gapOpen:1,gapExtend:.6,scoringMatrix:[[4,-1,-2,-2,0,-1,-1,0,-2,-1,-1,-1,-1,-2,-1,1,0,-3,-2,0,-2,-1,0,-4],[-1,5,0,-2,-3,1,0,-2,0,-3,-2,2,-1,-3,-2,-1,-1,-3,-2,-3,-1,0,-1,-4],[-2,0,6,1,-3,0,0,0,1,-3,-3,0,-2,-3,-2,1,0,-4,-2,-3,3,0,-1,-4],[-2,-2,1,6,-3,0,2,-1,-1,-3,-4,-1,-3,-3,-1,0,-1,-4,-3,-3,4,1,-1,-4],[0,-3,-3,-3,9,-3,-4,-3,-3,-1,-1,-3,-1,-2,-3,-1,-1,-2,-2,-1,-3,-3,-2,-4],[-1,1,0,0,-3,5,2,-2,0,-3,-2,1,0,-3,-1,0,-1,-2,-1,-2,0,3,-1,-4],[-1,0,0,2,-4,2,5,-2,0,-3,-3,1,-2,-3,-1,0,-1,-3,-2,-2,1,4,-1,-4],[0,-2,0,-1,-3,-2,-2,6,-2,-4,-4,-2,-3,-3,-2,0,-2,-2,-3,-3,-1,-2,-1,-4],[-2,0,1,-1,-3,0,0,-2,8,-3,-3,-1,-2,-1,-2,-1,-2,-2,2,-3,0,0,-1,-4],[-1,-3,-3,-3,-1,-3,-3,-4,-3,4,2,-3,1,0,-3,-2,-1,-3,-1,3,-3,-3,-1,-4],[-1,-2,-3,-4,-1,-2,-3,-4,-3,2,4,-2,2,0,-3,-2,-1,-2,-1,1,-4,-3,-1,-4],[-1,2,0,-1,-3,1,1,-2,-1,-3,-2,5,-1,-3,-1,0,-1,-3,-2,-2,0,1,-1,-4],[-1,-1,-2,-3,-1,0,-2,-3,-2,1,2,-1,5,0,-2,-1,-1,-1,-1,1,-3,-1,-1,-4],[-2,-3,-3,-3,-2,-3,-3,-3,-1,0,0,-3,0,6,-4,-2,-2,1,3,-1,-3,-3,-1,-4],[-1,-2,-2,-1,-3,-1,-1,-2,-2,-3,-3,-1,-2,-4,7,-1,-1,-4,-3,-2,-2,-1,-2,-4],[1,-1,1,0,-1,0,0,0,-1,-2,-2,0,-1,-2,-1,4,1,-3,-2,-2,0,0,0,-4],[0,-1,0,-1,-1,-1,-1,-2,-2,-1,-1,-1,-1,-2,-1,1,5,-2,-2,0,-1,-1,0,-4],[-3,-3,-4,-4,-2,-2,-3,-2,-2,-3,-2,-3,-1,1,-4,-3,-2,11,2,-3,-4,-3,-2,-4],[-2,-2,-2,-3,-2,-1,-2,-3,2,-1,-1,-2,-1,3,-3,-2,-2,2,7,-1,-3,-2,-1,-4],[0,-3,-3,-3,-1,-2,-2,-3,-3,3,1,-2,1,-1,-2,-2,0,-3,-1,4,-3,-2,-1,-4],[-2,-1,3,4,-3,0,1,-1,0,-3,-4,0,-3,-3,-2,0,-1,-4,-3,-3,4,1,-1,-4],[-1,0,0,1,-3,3,4,-2,0,-3,-3,1,-1,-3,-1,0,-1,-3,-2,-2,1,4,-1,-4],[0,-1,-1,-1,-2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-2,0,0,-2,-1,-1,-1,-1,-1,-4],[-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,1]],alphabetIndexes:{A:0,R:1,N:2,D:3,C:4,Q:5,E:6,G:7,H:8,I:9,L:10,K:11,M:12,F:13,P:14,S:15,T:16,W:17,Y:18,V:19,B:20,Z:21,X:22,"*":23}};var s;!function(t){t.HAMMING="Hamming",t.LEVENSHTEIN="Levenshtein",t.NEEDLEMANN_WUNSCH="Needlemann-Wunsch",t.MONOMER_CHEMICAL_DISTANCE="Monomer chemical distance"}(s||(s={}));const a={[s.HAMMING]:i,[s.LEVENSHTEIN]:function(){return(t,e)=>(0,r.I)(t,e)/Math.max(t.length,e.length)},[s.NEEDLEMANN_WUNSCH]:function(t){const e=new Uint16Array(65536),{gapOpen:n,gapExtend:i,scoringMatrix:r,alphabetIndexes:s}={...o,...t};Object.entries(s).forEach((([t,n])=>e[t.charCodeAt(0)]=n));const a=[new Float32Array(1e4),new Float32Array(1e4)];return(t,o)=>{const s=new Array(t.length+1).fill(!1),l=new Array(t.length+1).fill(!1);let c=0,h=1;for(let e=1;e<t.length+1;e++)a[0][e]=-i-(e-1)*i,a[1][e]=0;a[0][0]=0;for(let u=1;u<o.length+1;u++){a[h][0]=-i-(u-1)*i;for(let d=1;d<t.length+1;d++){const p=a[c][d-1]+r[e[t.charCodeAt(d-1)]][e[o.charCodeAt(u-1)]],m=a[c][d]-(s[d]||1===u||u===o.length?i:n),f=a[h][d-1]-(l[d-1]||1===d||d===t.length?i:n);a[h][d]=Math.max(p,f,m),a[h][d]===p?(s[d]=!1,l[d]=!1):a[h][d]===f?(s[d]=!1,l[d]=!0):(s[d]=!0,l[d]=!1)}c=h,h=(h+1)%2}const u=Math.min(t.length,o.length);return(u-a[c][t.length])/u}},[s.MONOMER_CHEMICAL_DISTANCE]:i}},8060:(t,e,n)=>{"use strict";n.d(e,{S:()=>i});const i="dimensionality-reducer-terminate-event"},9039:(t,e,n)=>{"use strict";var i;n.d(e,{c:()=>i}),function(t){t.UMAP="UMAP",t.T_SNE="t-SNE"}(i||(i={}))},8498:(t,e,n)=>{"use strict";var i,r,o,s,a,l,c;n.d(e,{EG:()=>a,Pn:()=>r,RR:()=>l,Wn:()=>c,aT:()=>o,m6:()=>s,xL:()=>i}),function(t){t.Levenshtein="Levenshtein",t.JaroWinkler="Jaro-Winkler",t.Manhattan="Manhattan String",t.Onehot="One-Hot"}(i||(i={})),function(t){t.Euclidean="Euclidean",t.Manhattan="Manhattan",t.Cosine="Vector Cosine"}(r||(r={})),function(t){t.Tanimoto="Tanimoto",t.Dice="Dice",t.Asymmetric="Asymmetric",t.BraunBlanquet="Braun-Blanquet",t.Cosine="Cosine",t.Kulczynski="Kulczynski",t.McConnaughey="Mc-Connaughey",t.RogotGoldberg="Rogot-Goldberg",t.Russel="Russel",t.Sokal="Sokal",t.Hamming="Hamming",t.Euclidean="Euclidean BitArray"}(o||(o={})),function(t){t.TanimotoIntArray="TanimotoIntArray"}(s||(s={})),function(t){t.Vector="Vector",t.String="String",t.BitArray="BitArray",t.MacroMolecule="MacroMolecule",t.Number="Number",t.IntArray="IntArray",t.NumberArray="NumberArray"}(a||(a={})),function(t){t.Difference="Difference"}(l||(l={})),function(t){t.CommonItems="Common Items"}(c||(c={}))},2780:(t,e,n)=>{"use strict";n(8498),n(9336)},9336:(t,e,n)=>{"use strict";var i=n(2787),r=n(944),o=n(6295),s=n(6863),a=n(8498);const l={[a.Pn.Euclidean]:o.jL,[a.Pn.Manhattan]:o.Hf,[a.Pn.Cosine]:o.w_},c={[a.xL.Levenshtein]:i.I,[a.xL.JaroWinkler]:r.Vb,[a.xL.Manhattan]:function(t,e){if(t.length!==e.length)return 1;{let n=0;for(let i=1;i<t.length;i++)n+=t[i]==e[i]?0:1;return n/t.length}},[a.xL.Onehot]:function(t,e){return t===e?0:1}},h={[a.aT.Tanimoto]:o.tO,[a.aT.Dice]:o.zn,[a.aT.Asymmetric]:o.gt,[a.aT.BraunBlanquet]:o.ij,[a.aT.Cosine]:o.lO,[a.aT.Kulczynski]:o.rR,[a.aT.McConnaughey]:o.lP,[a.aT.RogotGoldberg]:o.TK,[a.aT.Russel]:o.yK,[a.aT.Sokal]:o.Ii,[a.aT.Hamming]:o.be,[a.aT.Euclidean]:o.Qj},u={[a.m6.TanimotoIntArray]:o.v_},d={[a.RR.Difference]:o.T6},p={[a.Wn.CommonItems]:o.Hr},m={[a.EG.Vector]:{[a.Pn.Euclidean]:l[a.Pn.Euclidean],[a.Pn.Manhattan]:l[a.Pn.Manhattan],[a.Pn.Cosine]:l[a.Pn.Cosine]},[a.EG.String]:{[a.xL.Levenshtein]:c[a.xL.Levenshtein],[a.xL.JaroWinkler]:c[a.xL.JaroWinkler],[a.xL.Manhattan]:c[a.xL.Manhattan],[a.xL.Onehot]:c[a.xL.Onehot]},[a.EG.BitArray]:{[a.aT.Tanimoto]:h[a.aT.Tanimoto],[a.aT.Dice]:h[a.aT.Dice],[a.aT.Asymmetric]:h[a.aT.Asymmetric],[a.aT.BraunBlanquet]:h[a.aT.BraunBlanquet],[a.aT.Cosine]:h[a.aT.Cosine],[a.aT.Kulczynski]:h[a.aT.Kulczynski],[a.aT.McConnaughey]:h[a.aT.McConnaughey],[a.aT.RogotGoldberg]:h[a.aT.RogotGoldberg],[a.aT.Russel]:h[a.aT.Russel],[a.aT.Sokal]:h[a.aT.Sokal]},[a.EG.MacroMolecule]:{[s.Z.HAMMING]:s.V[s.Z.HAMMING],[s.Z.LEVENSHTEIN]:s.V[s.Z.LEVENSHTEIN],[s.Z.NEEDLEMANN_WUNSCH]:s.V[s.Z.NEEDLEMANN_WUNSCH],[s.Z.MONOMER_CHEMICAL_DISTANCE]:s.V[s.Z.MONOMER_CHEMICAL_DISTANCE]},[a.EG.Number]:{[a.RR.Difference]:d[a.RR.Difference]},[a.EG.IntArray]:{[a.m6.TanimotoIntArray]:u[a.m6.TanimotoIntArray]},[a.EG.NumberArray]:{[a.Wn.CommonItems]:p[a.Wn.CommonItems]}};Object.keys(m).reduce(((t,e)=>{for(const n of Object.keys(m[e]))t[n]=e;return t}),{})},8774:(t,e,n)=>{"use strict";n.d(e,{A:()=>i});class i{constructor(t,e=!1){if(this._length=0,this._version=0,this._updateLevel=0,this._selectedCount=0,this._selectedCountVersion=-1,this._selectedIndexesVersion=-1,this._versionedName="",this._versionedNameVersion=-1,this.SHRINK_THRESHOLD=256,"number"==typeof t){const n=t,r=i._createBuffer(n);if(e)for(let t=0;t<r.length;t++)r[t]=-1;this._data=r,this._length=n}else{if(!(t instanceof Uint32Array))throw new Error("Invalid constructor");this._data=t,this._length=e}}getRawData(){return this._data}assureGoez(t,e){if(t<0)throw new Error(`${e} should be greater than zero`)}assureInRange(t,e,n,i){if(t<e||t>n)throw new Error(`Argument ${i} (${t}) out of range (${e}, ${n})`)}copy(t,e,n){for(let i=0;i<n;i++)e[i]=t[i]}copyFrom(t){if(this._length!=t._length)throw new Error(`Lengths differ (${this._length} != ${t._length})`);this.copy(t._data,this._data,this.lengthInInts),this._version++}get length(){return this._length}get buffer(){return this._data}set buffer(t){this._data=t,this._version++}get version(){return this._version}set version(t){this._version=t}incrementVersion(t=!0){this._version++}get lengthInInts(){return Math.floor((this._length+31)/32)}get versionedName(){return this._version==this._versionedNameVersion?this._versionedName:""}set versionedName(t){this._versionedName=t,this._versionedNameVersion=this._version}get self(){return this}setLength(t){if(t<0)throw new Error("should be >= 0");if(t==this._length)return;const e=Math.floor((t+31)/32);if(e>this._data.length||e+this.SHRINK_THRESHOLD<this._data.length){const t=new Uint32Array(e);this.copy(this._data,t,e>this._data.length?this._data.length:e),this._data=t}t>this._length&&(this._length%32>0&&(this._data[this.lengthInInts-1]&=(1<<(this._length%32&31))-1),this._data.fill(0,this.lengthInInts,e)),this._length=t,this._version++}static fromAnd(t,e){if(t._length!=e._length)throw new Error(`Lengths differ (${t._length} != ${e._length})`);const n=new i(t._length);n._length=t._length,n._data=i._createBuffer(n._length),n._version=0;const r=t.lengthInInts;for(let i=0;i<r;i++)n._data[i]=t._data[i]&e._data[i];return n}static _createBuffer(t){return new Uint32Array(Math.floor((t+31)/32))}static fromValues(t){const e=new i(t.length);e._version=0;for(let n=0;n<e._length;n++)t[n]&&(e._data[Math.floor(n/32)]|=1<<(n%32&31));return e}static fromSeq(t,e){const n=new i(t);for(let i=0;i<t;++i)n.setBit(i,e(i));return n._version=0,n}static fromString(t){return i.fromSeq(t.length,(e=>"1"==t.charAt(e)))}static fromUint32Array(t,e){const n=new i(t);return n._data=e,n}static fromBytes(t){const e=t.length,n=new i(8*e);n._data=new Uint32Array(Math.floor((e+3)/4)),n._length=8*e;let r=0,o=0;for(;e-o>=4;)n._data[r++]=255&t[o]|(255&t[o+1])<<8|(255&t[o+2])<<16|(255&t[o+3])<<24,o+=4;return e-o==3&&(n._data[r]=(255&t[o+2])<<16),e-o==2&&(n._data[r]|=(255&t[o+1])<<8),e-o==1&&(n._data[r]|=255&t[o]),n._version=0,n}toString(){return`${this._length} bits, ${this.countBits(!0)} set`}equals(t){if(this==t)return!0;if(null==t)return!1;if(this._length!=t._length)return!1;if(0==this._length)return!0;for(let e=0;e<this._data.length-1;e++)if(this._data[e]!=t._data[e])return!1;for(let e=8*(this._data.length-1);e<this._length;e++)if(this.getBit(e)!=t.getBit(e))return!1;return!0}clone(){const t=new i(0,!1);return t._data=Uint32Array.from(this._data),t._length=this._length,t._version=this._version,t}init(t,e){this.setAll(!1,!1);for(let e=0;e<this._length;e++)t(e)&&(this._data[Math.floor(e/32)]|=1<<(e%32&31));return this.incrementVersion(e),this}invert(t=!0){for(let t=0;t<this._data.length;t++)this._data[t]^=-1;this.incrementVersion(t)}setAll(t,e=!1){const n=t?-1:0,i=this.lengthInInts;for(let t=0;t<i;t++)this._data[t]=n;this.incrementVersion(e)}setIndexes(t,e=!0,n=!0,i=!0){n&&this.setAll(!e,!1);for(const n of t)this.setFast(n,e);this.incrementVersion(i)}everyIndex(t,e=!0){for(const n of t)if(this.getBit(n)!=e)return!1;return!0}anyIndex(t,e=!0){for(const n of t)if(this.getBit(n)==e)return!0;return!1}setWhere(t,e=!0,n=!0,i=!0,r=!0){if(n&&r&&this.setAll(!e,!1),r)for(let n=0;n<this._length;n++)t(n)&&this.setFast(n,e);else for(let n=0;n<this._length;n++)this.setFast(n,t(n)?e:!e);this.incrementVersion(i)}getRange(t,e){this.assureInRange(t,0,this._length-1,"from"),this.assureInRange(e,0,this._length,"to");const n=[];for(let i=t;i<e;++i)n.push(this.getBit(i));return i.fromValues(n)}getRangeAsList(t,e){this.assureInRange(t,0,this._length-1,"from"),this.assureInRange(e,0,this._length,"to");const n=[];for(let i=t;i<e;++i)n.push(this.getBit(i));return n}setRange(t,e,n,i=!0){this.assureInRange(t,0,this._length-1,"from"),this.assureInRange(e,0,this._length-1,"to");const r=Math.min(t,e),o=Math.max(t,e);if(n)for(let t=r;t<=o;t++)this.setTrue(t);else for(let t=r;t<=o;t++)this.setFalse(t);return this.incrementVersion(i),this}setRandom(t,e,n=!0){if(t<0||t>this._length)throw new Error("n must be >= 0 && <= Count");t>this._length/2&&this.setRandom(this._length-t,!e),this.setAll(!e);for(let n=0;n<t;){const t=Math.floor(Math.random()*this._length);this.getBit(t)!=e&&(this.setFast(t,e),n++)}this.incrementVersion(n)}and(t,e=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");for(let e=0,n=this.lengthInInts;e<n;e++)this._data[e]&=t._data[e];return this.incrementVersion(e),this}andNot(t,e=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");const n=this.lengthInInts;for(let e=0;e<n;e++)this._data[e]&=~t._data[e];return this.incrementVersion(e),this}notAnd(t,e=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");for(let e=0,n=this.lengthInInts;e<n;e++)this._data[e]=~this._data[e]&t._data[e];return this.incrementVersion(e),this}not(t=!0){for(let t=0,e=this.lengthInInts;t<e;t++)this._data[t]=~this._data[t];return this.incrementVersion(t),this}or(t,e=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");for(let e=0,n=this.lengthInInts;e<n;e++)this._data[e]|=t._data[e];return this.incrementVersion(e),this}xor(t,e=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");for(let e=0,n=this.lengthInInts;e<n;e++)this._data[e]^=t._data[e];return this.incrementVersion(e),this}insertAt(t,e,n=!1){if(this.assureInRange(t,0,this._length,"pos"),0==e)return;const i=this._length;this.setLength(this._length+e);for(let n=i-1;n>=t;n--)this.setBit(n+e,this.getBit(n));for(let i=t;i<t+e;i++)this.setBit(i,n)}removeAt(t,e=1){if(e<0)throw new Error("n cannot be negative");if(this.assureInRange(t,0,this._length-e,"pos"),this.contains(!0))for(let n=t;n<this._length-e;n++)this.setBit(n,this.getBit(n+e));this.setLength(this._length-e)}removeByMask(t,e=!0){if(this._length!=t.length)throw new Error("length != mask.length");if(t==this)this.setLength(t.countBits(!e)),this.setAll(!e);else{let n=0;for(let i=-1;-1!=(i=t.findNext(i,!e));)this.setFast(n++,this.getBit(i));this._length=n,this._version++}return this}getBit(t){return!!(this._data[Math.floor(t/32)]&1<<(31&t))}setBit(t,e,n=!0){this.setFast(t,e),this._version++}setFast(t,e){e?this._data[Math.floor(t/32)]|=1<<(31&t):this._data[Math.floor(t/32)]&=~(1<<(31&t))}setTrue(t){this._data[Math.floor(t/32)]|=1<<(31&t)}setFalse(t){this._data[Math.floor(t/32)]&=~(1<<(31&t))}trueCount(){return this.countBits(!0)}falseCount(){return this.countBits(!1)}countBits(t){if(0==this._length)return 0;if(this._selectedCountVersion!=this._version){this._selectedCount=0;const t=this.lengthInInts;let e=0;for(;e<t-1;e++)for(let t=this._data[e];0!=t;t>>>=8)this._selectedCount+=i._onBitCount[255&t];let n=this._data[e];const r=31&this._length;for(0!=r&&(n&=~(4294967295<<r));0!=n;n>>>=8)this._selectedCount+=i._onBitCount[255&n];this._selectedCountVersion=this._version}return t?this._selectedCount:this._length-this._selectedCount}countWhere(t){let e=0;if(this.trueCount()==this._length)for(let n=0;n<this._length;n++)e+=t(n)?1:0;else for(let n=-1;-1!=(n=this.findNext(n,!0));)e+=t(n)?1:0;return e}andWithCountBits(t,e){if(0==this._length)return 0;let n=0;const r=this.lengthInInts;let o=0;for(;o<r-1;o++)for(let e=this._data[o]&t._data[o];0!=e;e>>>=8)n+=i._onBitCount[255&e];let s=this._data[o]&t._data[o];const a=31&this._length;for(0!=a&&(s&=~(4294967295<<a));0!=s;s>>>=8)n+=i._onBitCount[255&s];return e?n:this._length-n}clear(){this.setLength(0)}contains(t){return this.findNext(-1,t)>=0}get allTrue(){return this.countBits(!0)==this._length}get allFalse(){return this.countBits(!1)==this._length}get anyTrue(){return this.countBits(!0)>0}get anyFalse(){return this.countBits(!1)>0}findNext(t,e=!0){if(this.assureInRange(t,-1,this._length,"index"),t>=this._length-1)return-1;let n=31&(t=t<0?0:t+1);const r=this.lengthInInts;for(let o=Math.floor(t/32);o<r;o++){let r=e?this._data[o]:~this._data[o];if(0!=n)r&=4294967295<<n&4294967295,n=0;else if(!e&&-4294967296==r)continue;for(let e=0;0!=r;e+=8,r>>>=8){const n=i._firstOnBit[255&r];if(n>=0)return(t=n+32*o+e)>=this._length?-1:t}}return-1}findPrev(t,e=!0){if(0==t)return-1;this.assureInRange(t,-1,this._length,"index");let n=1+(t=t<0?this._length-1:t-1)&31;for(let r=Math.floor(t/32);r>=0;r--){let t=e?this._data[r]:~this._data[r];0!=n&&(t&=~(4294967295<<n),n=0);for(let e=24;0!=t;e-=8,t<<=8){const n=i._lastOnBit[t>>>24];if(n>=0)return n+32*r+e}}return-1}}i._onBitCount=Int8Array.from([0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,4,5,5,6,5,6,6,7,5,6,6,7,6,7,7,8]),i._firstOnBit=Int8Array.from([-1,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0]),i._lastOnBit=Int8Array.from([-1,0,1,1,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7])},8070:(t,e,n)=>{"use strict";n.d(e,{cb:()=>a,PE:()=>s}),n(4328);var i=n(6082);n(9982),i.DataFrame.fromCsv('countries,fasta,smiles,molregno,LON,Zip Code,Street Address Line 1,ImageUrl,user_id,error_message,xray,flag,magnitude,CS-id,pdb_id,accel_a,time_offset,chart,fit,Questions,empty_number,empty_string\nBelgium,MSNFHNEHVMQFYRNNLKTKGVFGRQ,CC(C(=O)OCCCc1cccnc1)c2cccc(c2)C(=O)c3ccccc3,1480014,36.276729583740234,995042300,14016 ROUTE 31W,https://datagrok.ai/img/slides/access-db-connect.png,id,ErrorMessage,"COMPND \nATOM \nEND",flag,1,1,1QBS,1,1.23,<chart></chart>,"{""series"":[{""name"":""Run:2023-08-08"",""fitFunction"":""sigmoid"",""fitLineColor"":""#1f77b4"",""pointColor"":""#1f77b4"",""showPoints"":""points"",""parameters"":[2.497360340644872, 1.7058694986686864, 5.278052678195135, 0.16000320889028383],""points"":[{""x"":0.10000000149011612,""y"":2.374499797821045},{""x"":0.6000000238418579,""y"":2.6242473125457764},{""x"":1.100000023841858,""y"":2.367267608642578},{""x"":1.600000023841858,""y"":2.6723148822784424},{""x"":2.0999999046325684,""y"":2.6537344455718994},{""x"":2.5999999046325684,""y"":2.3651671409606934},{""x"":3.0999999046325684,""y"":2.5654284954071045},{""x"":3.5999999046325684,""y"":2.4160959720611572},{""x"":4.099999904632568,""y"":2.286726713180542},{""x"":4.599999904632568,""y"":2.5100042819976807},{""x"":5.099999904632568,""y"":1.6676985025405884},{""x"":5.599999904632568,""y"":0.680136501789093},{""x"":6.099999904632568,""y"":0.3391543924808502},{""x"":6.599999904632568,""y"":0.09038983285427094},{""x"":7.099999904632568,""y"":0.19802775979042053}]},{""name"":""Run:2023-08-08"",""fitLineColor"":""#ffbb78"",""pointColor"":""#ffbb78"",""showPoints"":""points"",""parameters"":[7.525235855508179, 1.3186911876809984, 5.335672608564294, 0.7860743343958098],""points"":[{""x"":0.10000000149011612,""y"":7.988070487976074},{""x"":0.6000000238418579,""y"":7.018453121185303},{""x"":1.100000023841858,""y"":8.115279197692871},{""x"":1.600000023841858,""y"":7.486658096313477},{""x"":2.0999999046325684,""y"":7.396438121795654},{""x"":2.5999999046325684,""y"":7.477052211761475},{""x"":3.0999999046325684,""y"":6.913095474243164},{""x"":3.5999999046325684,""y"":8.01385498046875},{""x"":4.099999904632568,""y"":6.985900402069092},{""x"":4.599999904632568,""y"":6.970335960388184},{""x"":5.099999904632568,""y"":5.448817253112793},{""x"":5.599999904632568,""y"":2.5534818172454834},{""x"":6.099999904632568,""y"":1.893947958946228},{""x"":6.599999904632568,""y"":0.6340042352676392},{""x"":7.099999904632568,""y"":0.8403874039649963}]}],""chartOptions"":{""xAxisName"":""Conc."",""yAxisName"":""Activity"",""title"":""Dose-Response curves""}}",text,100,abc\nBurundi,MDYKETLLMPKTDFPMRGGLPNKEPQIQEKW,COc1ccc2cc(ccc2c1)C(C)C(=O)Oc3ccc(C)cc3OC,1480015,36.276729583740234,995073444,80 STATE HIGHWAY 310,https://datagrok.ai/img/slides/access-db-connect.png,id,ErrorMessage,"COMPND \nATOM \nEND",flag,2,2,1ZP8,2,1.23,<chart></chart>,"{""series"":[{""name"":""Run:2023-08-08"",""fitFunction"":""sigmoid"",""fitLineColor"":""#1f77b4"",""pointColor"":""#1f77b4"",""showPoints"":""points"",""parameters"":[4.431460753103398, 2.1691498799246745, 5.266445597102774, 0.7825762827017926],""points"":[{""x"":0.10000000149011612,""y"":4.751083850860596},{""x"":0.6000000238418579,""y"":4.203000068664551},{""x"":1.100000023841858,""y"":4.415858745574951},{""x"":1.600000023841858,""y"":4.68414306640625},{""x"":2.0999999046325684,""y"":4.198400974273682},{""x"":2.5999999046325684,""y"":4.179222106933594},{""x"":3.0999999046325684,""y"":4.638473987579346},{""x"":3.5999999046325684,""y"":4.708553314208984},{""x"":4.099999904632568,""y"":4.291589260101318},{""x"":4.599999904632568,""y"":4.038082599639893},{""x"":5.099999904632568,""y"":3.4349939823150635},{""x"":5.599999904632568,""y"":1.2194708585739136},{""x"":6.099999904632568,""y"":1.1920831203460693},{""x"":6.599999904632568,""y"":0.5352635979652405},{""x"":7.099999904632568,""y"":0.3346920311450958}]},{""name"":""Run:2023-08-08"",""fitLineColor"":""#ffbb78"",""pointColor"":""#ffbb78"",""showPoints"":""points"",""parameters"":[2.339458017970126, -1.0734184310171178, 4.746332950550934, 0.2482416857595658],""points"":[{""x"":0.10000000149011612,""y"":0.2139337658882141},{""x"":0.6000000238418579,""y"":0.4269562065601349},{""x"":1.100000023841858,""y"":0.2441573292016983},{""x"":1.600000023841858,""y"":0.146635964512825},{""x"":2.0999999046325684,""y"":0.08818462491035461},{""x"":2.5999999046325684,""y"":0.2560656666755676},{""x"":3.0999999046325684,""y"":0.42434045672416687},{""x"":3.5999999046325684,""y"":0.37111231684684753},{""x"":4.099999904632568,""y"":0.5581737160682678},{""x"":4.599999904632568,""y"":1.183590054512024},{""x"":5.099999904632568,""y"":1.5629843473434448},{""x"":5.599999904632568,""y"":2.3211288452148438},{""x"":6.099999904632568,""y"":2.229961633682251},{""x"":6.599999904632568,""y"":2.2560226917266846},{""x"":7.099999904632568,""y"":2.2142398357391357}]}],""chartOptions"":{""xAxisName"":""Conc."",""yAxisName"":""Activity"",""title"":""Dose-Response curves""}}",text,,\nCameroon,MIEVFLFGIVLGLIPITLAGLFVTAYLQYRRGDQLDL,COc1ccc2cc(ccc2c1)C(C)C(=O)OCCCc3cccnc3,1480016,36.26095962524414,995153596,30-56 WHITESTONE EXPY,https://datagrok.ai/img/slides/access-db-connect.png,id,ErrorMessage,"COMPND \nATOM \nEND",flag,3,3,2BDJ,3,1.23,<chart></chart>,"{""series"":[{""name"":""Run:2023-08-08"",""fitFunction"":""sigmoid"",""fitLineColor"":""#1f77b4"",""pointColor"":""#1f77b4"",""showPoints"":""points"",""parameters"":[4.6760652578642325, 0.9046956320756703, 5.651408971856738, 0.07738846012184185],""points"":[{""x"":0.10000000149011612,""y"":4.32425594329834},{""x"":0.6000000238418579,""y"":4.668442249298096},{""x"":1.100000023841858,""y"":4.379785060882568},{""x"":1.600000023841858,""y"":5.0345139503479},{""x"":2.0999999046325684,""y"":4.878653526306152},{""x"":2.5999999046325684,""y"":4.3451313972473145},{""x"":3.0999999046325684,""y"":4.336992263793945},{""x"":3.5999999046325684,""y"":5.037430286407471},{""x"":4.099999904632568,""y"":5.0092692375183105},{""x"":4.599999904632568,""y"":4.151902675628662},{""x"":5.099999904632568,""y"":3.4066951274871826},{""x"":5.599999904632568,""y"":2.3732759952545166},{""x"":6.099999904632568,""y"":1.673728108406067},{""x"":6.599999904632568,""y"":0.48574790358543396},{""x"":7.099999904632568,""y"":0.2783052325248718}]},{""name"":""Run:2023-08-08"",""fitLineColor"":""#ffbb78"",""pointColor"":""#ffbb78"",""showPoints"":""points"",""parameters"":[2.938395863010111, -1.4658480661392117, 5.462702751996584, 0.3473139023615039],""points"":[{""x"":0.10000000149011612,""y"":0.4941710829734802},{""x"":0.6000000238418579,""y"":0.15323974192142487},{""x"":1.100000023841858,""y"":0.46373432874679565},{""x"":1.600000023841858,""y"":0.3370431363582611},{""x"":2.0999999046325684,""y"":0.5179030299186707},{""x"":2.5999999046325684,""y"":0.27899765968322754},{""x"":3.0999999046325684,""y"":0.22075064480304718},{""x"":3.5999999046325684,""y"":0.5789918899536133},{""x"":4.099999904632568,""y"":0.21169911324977875},{""x"":4.599999904632568,""y"":0.27857646346092224},{""x"":5.099999904632568,""y"":1.0906332731246948},{""x"":5.599999904632568,""y"":1.8520300388336182},{""x"":6.099999904632568,""y"":2.7177059650421143},{""x"":6.599999904632568,""y"":2.8680918216705322},{""x"":7.099999904632568,""y"":3.2413077354431152}]}],""chartOptions"":{""xAxisName"":""Conc."",""yAxisName"":""Activity"",""title"":""Dose-Response curves""}}",text,,\nCanada,MMELVLKTIIGPIVVGVVLRIVDKWLNKDK,CC(C(=O)NCCS)c1cccc(c1)C(=O)c2ccccc2,1480017,36.26095962524414,99515,30-56 WHITESTONE EXPY,https://datagrok.ai/img/slides/access-db-connect.png,id,ErrorMessage,"COMPND \nATOM \nEND",flag,4,4,1IAN,4,1.23,<chart></chart>,"{""series"":[{""name"":""Run:2023-08-08"",""fitFunction"":""sigmoid"",""fitLineColor"":""#1f77b4"",""pointColor"":""#1f77b4"",""showPoints"":""points"",""parameters"":[0.8597390975430008, 1.0957625732481946, 5.260537067987958, 0.07974187998177736],""points"":[{""x"":0.10000000149011612,""y"":0.8190152645111084},{""x"":0.6000000238418579,""y"":0.8421689867973328},{""x"":1.100000023841858,""y"":0.8740922212600708},{""x"":1.600000023841858,""y"":0.8924275040626526},{""x"":2.0999999046325684,""y"":0.8249067664146423},{""x"":2.5999999046325684,""y"":0.9327669143676758},{""x"":3.0999999046325684,""y"":0.8522974252700806},{""x"":3.5999999046325684,""y"":0.8174492716789246},{""x"":4.099999904632568,""y"":0.8394647240638733},{""x"":4.599999904632568,""y"":0.7139387726783752},{""x"":5.099999904632568,""y"":0.5561167597770691},{""x"":5.599999904632568,""y"":0.3276226818561554},{""x"":6.099999904632568,""y"":0.12479474395513535},{""x"":6.599999904632568,""y"":0.13006797432899475},{""x"":7.099999904632568,""y"":0.059702079743146896}]},{""name"":""Run:2023-08-08"",""fitLineColor"":""#ffbb78"",""pointColor"":""#ffbb78"",""showPoints"":""points"",""parameters"":[5.760930219582546, 1.6591793293833013, 4.667155929720851, 0.7858109544121652],""points"":[{""x"":0.10000000149011612,""y"":6.156993389129639},{""x"":0.6000000238418579,""y"":5.236701965332031},{""x"":1.100000023841858,""y"":6.010560512542725},{""x"":1.600000023841858,""y"":5.495512962341309},{""x"":2.0999999046325684,""y"":6.087770462036133},{""x"":2.5999999046325684,""y"":5.79986572265625},{""x"":3.0999999046325684,""y"":5.597546577453613},{""x"":3.5999999046325684,""y"":5.520902156829834},{""x"":4.099999904632568,""y"":5.360654354095459},{""x"":4.599999904632568,""y"":3.5539746284484863},{""x"":5.099999904632568,""y"":1.577236294746399},{""x"":5.599999904632568,""y"":1.0001264810562134},{""x"":6.099999904632568,""y"":0.9305797815322876},{""x"":6.599999904632568,""y"":0.6033638715744019},{""x"":7.099999904632568,""y"":0.4203685522079468}]}],""chartOptions"":{""xAxisName"":""Conc."",""yAxisName"":""Activity"",""title"":""Dose-Response curves""}}",text,,\nColombia,MDRTDEVSNHTHDKPTLTWFEEIFEEYHSPFHN,FC(F)(F)c1ccc(OC2CCNCC2)cc1,1480029,36.3309440612793,995152050,1 COURT HOUSE SQUARE,https://datagrok.ai/img/slides/access-db-connect.png,id,ErrorMessage,"COMPND \nATOM \nEND",flag,5,5,4UJ1,5,1.23,<chart></chart>,"{""series"":[{""name"":""Run:2023-08-08"",""fitFunction"":""sigmoid"",""fitLineColor"":""#1f77b4"",""pointColor"":""#1f77b4"",""showPoints"":""points"",""parameters"":[6.4995088314153655, 2.4270351004539914, 5.178659535348579, 0.625653346241577],""points"":[{""x"":0.10000000149011612,""y"":6.496231555938721},{""x"":0.6000000238418579,""y"":6.42543363571167},{""x"":1.100000023841858,""y"":7.040063858032227},{""x"":1.600000023841858,""y"":6.1115403175354},{""x"":2.0999999046325684,""y"":6.680728435516357},{""x"":2.5999999046325684,""y"":6.406774520874023},{""x"":3.0999999046325684,""y"":6.611269474029541},{""x"":3.5999999046325684,""y"":5.889094352722168},{""x"":4.099999904632568,""y"":6.75344705581665},{""x"":4.599999904632568,""y"":6.361435890197754},{""x"":5.099999904632568,""y"":4.1666975021362305},{""x"":5.599999904632568,""y"":1.172118902206421},{""x"":6.099999904632568,""y"":0.801048994064331},{""x"":6.599999904632568,""y"":0.4640021026134491},{""x"":7.099999904632568,""y"":0.0010357667924836278}]},{""name"":""Run:2023-08-08"",""fitLineColor"":""#ffbb78"",""pointColor"":""#ffbb78"",""showPoints"":""points"",""parameters"":[1.4734381347446401, 1.1649805188074196, 4.82958608866421, 0.09500545496710007],""points"":[{""x"":0.10000000149011612,""y"":1.5279096364974976},{""x"":0.6000000238418579,""y"":1.3559974431991577},{""x"":1.100000023841858,""y"":1.5246378183364868},{""x"":1.600000023841858,""y"":1.5567657947540283},{""x"":2.0999999046325684,""y"":1.4114240407943726},{""x"":2.5999999046325684,""y"":1.4045010805130005},{""x"":3.0999999046325684,""y"":1.4769829511642456},{""x"":3.5999999046325684,""y"":1.4875500202178955},{""x"":4.099999904632568,""y"":1.2991987466812134},{""x"":4.599999904632568,""y"":0.922961413860321},{""x"":5.099999904632568,""y"":0.6520044803619385},{""x"":5.599999904632568,""y"":0.15350978076457977},{""x"":6.099999904632568,""y"":0.1078903079032898},{""x"":6.599999904632568,""y"":0.17276449501514435},{""x"":7.099999904632568,""y"":0.14066608250141144}]}],""chartOptions"":{""xAxisName"":""Conc."",""yAxisName"":""Activity"",""title"":""Dose-Response curves""}}",text,,\nCosta Rica,MKSTKEEIQTIKTLLKDSRTAKYHKRLQIVL,CC(C)Cc1ccc(cc1)C(C)C(=O)N2CCCC2C(=O)OCCCc3ccccc3,1480018,36.3309440612793,995084218,4041 SOUTHWESTERN BLVD,https://datagrok.ai/img/slides/access-db-connect.png,id,ErrorMessage,"COMPND \nATOM \nEND",flag,6,6,2BPW,6,1.23,<chart></chart>,"{""series"":[{""name"":""Run:2023-08-08"",""fitFunction"":""sigmoid"",""fitLineColor"":""#1f77b4"",""pointColor"":""#1f77b4"",""showPoints"":""points"",""parameters"":[2.4833641843311227, -1.8945978742090062, 4.671127708092568, 0.24159861311815153],""points"":[{""x"":0.10000000149011612,""y"":0.0969524160027504},{""x"":0.6000000238418579,""y"":0.028483040630817413},{""x"":1.100000023841858,""y"":0.22087176144123077},{""x"":1.600000023841858,""y"":0.0068915546871721745},{""x"":2.0999999046325684,""y"":0.4305879771709442},{""x"":2.5999999046325684,""y"":0.44774115085601807},{""x"":3.0999999046325684,""y"":0.45346319675445557},{""x"":3.5999999046325684,""y"":0.2370593100786209},{""x"":4.099999904632568,""y"":0.4657953977584839},{""x"":4.599999904632568,""y"":1.155200719833374},{""x"":5.099999904632568,""y"":2.2294070720672607},{""x"":5.599999904632568,""y"":2.4311530590057373},{""x"":6.099999904632568,""y"":2.33846116065979},{""x"":6.599999904632568,""y"":2.608201026916504},{""x"":7.099999904632568,""y"":2.8136143684387207}]},{""name"":""Run:2023-08-08"",""fitLineColor"":""#ffbb78"",""pointColor"":""#ffbb78"",""showPoints"":""points"",""parameters"":[5.224573521642033, 1.4454033924198528, 5.6014197746076535, 0.2823216054197577],""points"":[{""x"":0.10000000149011612,""y"":4.95027494430542},{""x"":0.6000000238418579,""y"":5.1754679679870605},{""x"":1.100000023841858,""y"":5.276752948760986},{""x"":1.600000023841858,""y"":5.589294910430908},{""x"":2.0999999046325684,""y"":5.616994857788086},{""x"":2.5999999046325684,""y"":5.120813846588135},{""x"":3.0999999046325684,""y"":5.340766906738281},{""x"":3.5999999046325684,""y"":4.876471042633057},{""x"":4.099999904632568,""y"":4.94999361038208},{""x"":4.599999904632568,""y"":5.162564754486084},{""x"":5.099999904632568,""y"":4.399557590484619},{""x"":5.599999904632568,""y"":2.7977969646453857},{""x"":6.099999904632568,""y"":1.0229872465133667},{""x"":6.599999904632568,""y"":0.48275601863861084},{""x"":7.099999904632568,""y"":0.10408931970596313}]}],""chartOptions"":{""xAxisName"":""Conc."",""yAxisName"":""Activity"",""title"":""Dose-Response curves""}}",text,,\nCuba,MHAILRYFIRRLFYHIFYKIYSLISKKHQSLPSDVRQF,COc1ccc2c(c1)c(CC(=O)N3CCCC3C(=O)Oc4ccc(C)cc4OC)c(C)n2C(=O)c5ccc(Cl)cc5,1480019,36.33115768432617,995081928,1227 US HIGHWAY 11,https://datagrok.ai/img/slides/access-db-connect.png,id,ErrorMessage,"COMPND \nATOM \nEND",flag,7,7,1QBS,7,1.23,<chart></chart>,"{""series"":[{""name"":""Run:2023-08-08"",""fitFunction"":""sigmoid"",""fitLineColor"":""#1f77b4"",""pointColor"":""#1f77b4"",""showPoints"":""points"",""parameters"":[3.320838679713925, -1.2421619987316728, 4.831325425225256, 0.3236011098403072],""points"":[{""x"":0.10000000149011612,""y"":0.3727470338344574},{""x"":0.6000000238418579,""y"":0.12365014106035233},{""x"":1.100000023841858,""y"":0.48422467708587646},{""x"":1.600000023841858,""y"":0.2264465093612671},{""x"":2.0999999046325684,""y"":0.16821794211864471},{""x"":2.5999999046325684,""y"":0.3879014551639557},{""x"":3.0999999046325684,""y"":0.5470244884490967},{""x"":3.5999999046325684,""y"":0.3419053554534912},{""x"":4.099999904632568,""y"":0.7655120491981506},{""x"":4.599999904632568,""y"":1.2346516847610474},{""x"":5.099999904632568,""y"":2.453336715698242},{""x"":5.599999904632568,""y"":2.9565491676330566},{""x"":6.099999904632568,""y"":3.335299491882324},{""x"":6.599999904632568,""y"":3.240290880203247},{""x"":7.099999904632568,""y"":3.1107218265533447}]},{""name"":""Run:2023-08-08"",""fitLineColor"":""#ffbb78"",""pointColor"":""#ffbb78"",""showPoints"":""points"",""parameters"":[3.6401853521511094, 1.26211588875013, 5.399028074402744, 0.5089580830068091],""points"":[{""x"":0.10000000149011612,""y"":3.8585598468780518},{""x"":0.6000000238418579,""y"":3.6077206134796143},{""x"":1.100000023841858,""y"":3.855252265930176},{""x"":1.600000023841858,""y"":3.619039297103882},{""x"":2.0999999046325684,""y"":3.839388370513916},{""x"":2.5999999046325684,""y"":3.335283041000366},{""x"":3.0999999046325684,""y"":3.571141481399536},{""x"":3.5999999046325684,""y"":3.4155046939849854},{""x"":4.099999904632568,""y"":3.7316646575927734},{""x"":4.599999904632568,""y"":3.0680155754089355},{""x"":5.099999904632568,""y"":2.891066551208496},{""x"":5.599999904632568,""y"":1.6022753715515137},{""x"":6.099999904632568,""y"":0.7652576565742493},{""x"":6.599999904632568,""y"":0.6875326037406921},{""x"":7.099999904632568,""y"":0.5828871726989746}]}],""chartOptions"":{""xAxisName"":""Conc."",""yAxisName"":""Activity"",""title"":""Dose-Response curves""}}",text,,\nItaly,MSNFHNEHVMQFYRNNLKTKGVFGRQ,CC(C)Cc1ccc(cc1)C(C)C(=O)N2CCCC2C(=O)OCCO[N+](=O)[O-],1480020,36.33115768432617,99502,"168-46 91ST AVE., 2ND FLR",https://datagrok.ai/img/slides/access-db-connect.png,id,ErrorMessage,"COMPND \nATOM \nEND",flag,8,8,1ZP8,8,1.23,<chart></chart>,"{""series"":[{""name"":""Run:2023-08-08"",""fitFunction"":""sigmoid"",""fitLineColor"":""#1f77b4"",""pointColor"":""#1f77b4"",""showPoints"":""points"",""parameters"":[2.293592105923809, 1.3781586549141835, 5.1025898038676605, 0.03493851245291291],""points"":[{""x"":0.10000000149011612,""y"":2.1287283897399902},{""x"":0.6000000238418579,""y"":2.267972230911255},{""x"":1.100000023841858,""y"":2.398442506790161},{""x"":1.600000023841858,""y"":2.5130622386932373},{""x"":2.0999999046325684,""y"":2.3255116939544678},{""x"":2.5999999046325684,""y"":2.127340793609619},{""x"":3.0999999046325684,""y"":2.47259783744812},{""x"":3.5999999046325684,""y"":2.131181478500366},{""x"":4.099999904632568,""y"":2.090421438217163},{""x"":4.599999904632568,""y"":2.02299165725708},{""x"":5.099999904632568,""y"":1.1105059385299683},{""x"":5.599999904632568,""y"":0.4494485855102539},{""x"":6.099999904632568,""y"":0.1375635862350464},{""x"":6.599999904632568,""y"":0.036351121962070465},{""x"":7.099999904632568,""y"":0.1619771122932434}]},{""name"":""Run:2023-08-08"",""fitLineColor"":""#ffbb78"",""pointColor"":""#ffbb78"",""showPoints"":""points"",""parameters"":[5.953125499439879, 1.2528620255306528, 5.187637440149802, 0.3110348753260886],""points"":[{""x"":0.10000000149011612,""y"":5.6585283279418945},{""x"":0.6000000238418579,""y"":5.911152362823486},{""x"":1.100000023841858,""y"":5.924920082092285},{""x"":1.600000023841858,""y"":5.8469438552856445},{""x"":2.0999999046325684,""y"":5.929472923278809},{""x"":2.5999999046325684,""y"":6.190037727355957},{""x"":3.0999999046325684,""y"":6.236179828643799},{""x"":3.5999999046325684,""y"":6.141019344329834},{""x"":4.099999904632568,""y"":5.295210838317871},{""x"":4.599999904632568,""y"":5.265801906585693},{""x"":5.099999904632568,""y"":3.3722851276397705},{""x"":5.599999904632568,""y"":1.8299226760864258},{""x"":6.099999904632568,""y"":0.32690900564193726},{""x"":6.599999904632568,""y"":0.6274543404579163},{""x"":7.099999904632568,""y"":0.8441857099533081}]}],""chartOptions"":{""xAxisName"":""Conc."",""yAxisName"":""Activity"",""title"":""Dose-Response curves""}}",text,,\nRwanda,MPNSEPASLLELFNSIATQGELVRSLKAGNASK,CC(C)Cc1ccc(cc1)C(C)C(=O)N2CCCC2C(=O)OCCO,1480021,36.33137130737305,995037247,"168-46 91ST AVE., 2ND FLR",https://datagrok.ai/img/slides/access-db-connect.png,id,ErrorMessage,"COMPND \nATOM \nEND",flag,9,9,2BDJ,9,1.23,<chart></chart>,"{""series"":[{""name"":""Run:2023-08-08"",""fitFunction"":""sigmoid"",""fitLineColor"":""#1f77b4"",""pointColor"":""#1f77b4"",""showPoints"":""points"",""parameters"":[3.8209972202654474, 1.3779216716448506, 5.299882228439686, 0.06040645519069608],""points"":[{""x"":0.10000000149011612,""y"":3.7821109294891357},{""x"":0.6000000238418579,""y"":3.542433023452759},{""x"":1.100000023841858,""y"":3.7008674144744873},{""x"":1.600000023841858,""y"":3.717301607131958},{""x"":2.0999999046325684,""y"":4.024452209472656},{""x"":2.5999999046325684,""y"":4.013899326324463},{""x"":3.0999999046325684,""y"":3.945094347000122},{""x"":3.5999999046325684,""y"":3.866621971130371},{""x"":4.099999904632568,""y"":3.7461626529693604},{""x"":4.599999904632568,""y"":3.3454740047454834},{""x"":5.099999904632568,""y"":2.61944317817688},{""x"":5.599999904632568,""y"":0.999405026435852},{""x"":6.099999904632568,""y"":0.46259793639183044},{""x"":6.599999904632568,""y"":0.054134611040353775},{""x"":7.099999904632568,""y"":0.05711187422275543}]},{""name"":""Run:2023-08-08"",""fitLineColor"":""#ffbb78"",""pointColor"":""#ffbb78"",""showPoints"":""points"",""parameters"":[5.6318079657726035, 1.8495493770000595, 5.391793312471116, 0.17060707587348442],""points"":[{""x"":0.10000000149011612,""y"":5.458079814910889},{""x"":0.6000000238418579,""y"":5.554427146911621},{""x"":1.100000023841858,""y"":5.799983024597168},{""x"":1.600000023841858,""y"":5.364140033721924},{""x"":2.0999999046325684,""y"":5.864485740661621},{""x"":2.5999999046325684,""y"":5.4509806632995605},{""x"":3.0999999046325684,""y"":5.702574729919434},{""x"":3.5999999046325684,""y"":5.7314534187316895},{""x"":4.099999904632568,""y"":5.5123443603515625},{""x"":4.599999904632568,""y"":5.724395751953125},{""x"":5.099999904632568,""y"":4.354506969451904},{""x"":5.599999904632568,""y"":1.7307666540145874},{""x"":6.099999904632568,""y"":0.6305936574935913},{""x"":6.599999904632568,""y"":0.035183437168598175},{""x"":7.099999904632568,""y"":0.7575169205665588}]}],""chartOptions"":{""xAxisName"":""Conc."",""yAxisName"":""Activity"",""title"":""Dose-Response curves""}}",text,,\nSwitzerland,IRVVGRYLIEVWKAAGMDMDKVLFLWSSDEI,CN1CCC(CC1)Oc2ccc(cc2)C(F)(F)F,1480028,36.33137130737305,99504,92-11 179TH PLACE,https://datagrok.ai/img/slides/access-db-connect.png,id,ErrorMessage,"COMPND \nATOM \nEND",flag,9,10,1IAN,10,1.23,<chart></chart>,"{""series"":[{""name"":""Run:2023-08-08"",""fitFunction"":""sigmoid"",""fitLineColor"":""#1f77b4"",""pointColor"":""#1f77b4"",""showPoints"":""points"",""parameters"":[1.1190255865097471, 2.3163895161544437, 5.4968866182279195, 0.2035204047289052],""points"":[{""x"":0.10000000149011612,""y"":1.1057683229446411},{""x"":0.6000000238418579,""y"":1.1019697189331055},{""x"":1.100000023841858,""y"":1.0818607807159424},{""x"":1.600000023841858,""y"":1.062997817993164},{""x"":2.0999999046325684,""y"":1.046447515487671},{""x"":2.5999999046325684,""y"":1.1217249631881714},{""x"":3.0999999046325684,""y"":1.2166996002197266},{""x"":3.5999999046325684,""y"":1.215477705001831},{""x"":4.099999904632568,""y"":1.0581893920898438},{""x"":4.599999904632568,""y"":1.1747995615005493},{""x"":5.099999904632568,""y"":1.0181127786636353},{""x"":5.599999904632568,""y"":0.5344523191452026},{""x"":6.099999904632568,""y"":0.2569526433944702},{""x"":6.599999904632568,""y"":0.1912207305431366},{""x"":7.099999904632568,""y"":0.15060538053512573}]},{""name"":""Run:2023-08-08"",""fitLineColor"":""#ffbb78"",""pointColor"":""#ffbb78"",""showPoints"":""points"",""parameters"":[3.1038581025805785, 2.0032224204185245, 5.087602825989163, 0.13277988512492753],""points"":[{""x"":0.10000000149011612,""y"":3.0498509407043457},{""x"":0.6000000238418579,""y"":2.805217742919922},{""x"":1.100000023841858,""y"":3.3415253162384033},{""x"":1.600000023841858,""y"":3.0549843311309814},{""x"":2.0999999046325684,""y"":3.250074863433838},{""x"":2.5999999046325684,""y"":3.0432586669921875},{""x"":3.0999999046325684,""y"":3.265852451324463},{""x"":3.5999999046325684,""y"":2.9475724697113037},{""x"":4.099999904632568,""y"":3.1929898262023926},{""x"":4.599999904632568,""y"":2.7460060119628906},{""x"":5.099999904632568,""y"":1.6175861358642578},{""x"":5.599999904632568,""y"":0.3006608486175537},{""x"":6.099999904632568,""y"":0.3444803059101105},{""x"":6.599999904632568,""y"":0.015537971630692482},{""x"":7.099999904632568,""y"":0.5527358055114746}]}],""chartOptions"":{""xAxisName"":""Conc."",""yAxisName"":""Activity"",""title"":""Dose-Response curves""}}",text,,\n,,,,,,,,,,,,,,,,,,,,,').columns.add(i.Column.fromList(i.TYPE.BYTE_ARRAY,"BinaryImage",Array.from(new Uint8Array(11))));var r,o=function(t,e,n,i){return new(n||(n=Promise))((function(r,o){function s(t){try{l(i.next(t))}catch(t){o(t)}}function a(t){try{l(i.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?r(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,a)}l((i=i.apply(t,e||[])).next())}))};function s(t,e,n,i=0,r="timeout"){return o(this,void 0,void 0,(function*(){return new Promise(((o,s)=>{const a=t.subscribe((t=>{try{e(t),o("OK")}catch(t){s(t)}finally{a.unsubscribe(),clearTimeout(l)}})),l=setTimeout((()=>{a.unsubscribe(),s(r)}),i);n()}))}))}function a(t){return o(this,void 0,void 0,(function*(){yield new Promise((e=>setTimeout(e,t)))}))}console.log.bind(console),console.info.bind(console),console.warn.bind(console),console.error.bind(console),function(t){t.notNull=function(t,e){if(null==t)throw new Error(`${null==e?"Value":e} not defined`)}}(r||(r={})),i.DataFrame.fromColumns([i.Column.fromStrings("col",["val1","val2","val3"])])},3527:(t,e,n)=>{"use strict";n.d(e,{Mi:()=>i});class i extends Float32Array{}},3629:(t,e,n)=>{"use strict";n.d(e,{KE:()=>a,S8:()=>l,dC:()=>o,vA:()=>r,wQ:()=>s});var i=n(3527);function r(t=!1,e="Assertion error."){if(!t)throw new Error(e)}function o(t,e,n=1){const o=t.length;r(o==e.length,"Vector lengths do not match.");const s=new i.Mi(o);for(let i=0;i<t.length;++i)s[i]=t[i]+n*e[i];return s}function s(t){let e=0;for(let n=0;n<t.length;n++)e+=t[n]*t[n];return Math.sqrt(e)}function a(t,e){if(t.length!=e.length)throw new Error("The dimensionality of the vectors must match");let n=0;for(let i=0;i<t.length;i++)n+=t[i]*e[i];return n}function l(t){const e=t.length;let n=0,i=0;for(let r=0;r<e;++r)n+=t[r],i+=Math.pow(t[r],2);const r=n/e,o=1/Math.sqrt(i/e-Math.pow(r,2));for(let n=0;n<e;++n)t[n]=(t[n]-r)*o;return t}},1913:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(3282),r=n(9029),o=n(1520),s=n(2586),a=n(8708),l=n(2023),c="errorMessage",h=new i.Name("emUsed"),u={required:"missingProperty",dependencies:"property",dependentRequired:"property"},d=/\$\{[^}]+\}/,p=/\$\{([^}]+)\}/g,m=/^""\s*\+\s*|\s*\+\s*""$/g;const f=(t,e={})=>{if(!t.opts.allErrors)throw new Error("ajv-errors: Ajv option allErrors must be true");if(t.opts.jsPropertySyntax)throw new Error("ajv-errors: ajv option jsPropertySyntax is not supported");return t.addKeyword(function(t){return{keyword:c,schemaType:["string","object"],post:!0,code(e){const{gen:n,data:f,schema:g,schemaValue:y,it:b}=e;if(!1===b.createErrors)return;const v=g,w=r.strConcat(l.default.instancePath,b.errorPath);function C(t,e){return r.and(i._`${t}.keyword !== ${c}`,i._`!${t}.${h}`,i._`${t}.instancePath === ${w}`,i._`${t}.keyword in ${e}`,i._`${t}.schemaPath.indexOf(${b.errSchemaPath}) === 0`,i._`/^\\/[^\\/]*$/.test(${t}.schemaPath.slice(${b.errSchemaPath.length}))`)}function A(t,e){const i=[];for(const n in t){const t=e[n];d.test(t)&&i.push([n,x(t)])}return n.object(...i)}function S(t){return d.test(t)?new o._Code(o.safeStringify(t).replace(p,((t,e)=>`" + JSON.stringify(${s.getData(e,b)}) + "`)).replace(m,"")):i.stringify(t)}function x(t){return i._`function(){return ${S(t)}}`}n.if(i._`${l.default.errors} > 0`,(()=>{if("object"==typeof v){const[o,s]=function(t){let e,n;for(const i in t){if("properties"===i||"items"===i)continue;const r=t[i];if("object"==typeof r){e||(e={});const t=e[i]={};for(const e in r)t[e]=[]}else n||(n={}),n[i]=[]}return[e,n]}(v);s&&function(r){const o=n.const("emErrors",i.stringify(r)),s=n.const("templates",A(r,g));n.forOf("err",l.default.vErrors,(t=>n.if(C(t,o),(()=>n.code(i._`${o}[${t}.keyword].push(${t})`).assign(i._`${t}.${h}`,!0)))));const{singleError:c}=t;if(c){const t=n.let("message",i._`""`),r=n.let("paramsErrors",i._`[]`);u((e=>{n.if(t,(()=>n.code(i._`${t} += ${"string"==typeof c?c:";"}`))),n.code(i._`${t} += ${d(e)}`),n.assign(r,i._`${r}.concat(${o}[${e}])`)})),a.reportError(e,{message:t,params:i._`{errors: ${r}}`})}else u((t=>a.reportError(e,{message:d(t),params:i._`{errors: ${o}[${t}]}`})));function u(t){n.forIn("key",o,(e=>n.if(i._`${o}[${e}].length`,(()=>t(e)))))}function d(t){return i._`${t} in ${s} ? ${s}[${t}]() : ${y}[${t}]`}}(s),o&&function(t){const r=n.const("emErrors",i.stringify(t)),o=[];for(const e in t)o.push([e,A(t[e],g[e])]);const s=n.const("templates",n.object(...o)),c=n.scopeValue("obj",{ref:u,code:i.stringify(u)}),d=n.let("emPropParams"),p=n.let("emParamsErrors");n.forOf("err",l.default.vErrors,(t=>n.if(C(t,r),(()=>{n.assign(d,i._`${c}[${t}.keyword]`),n.assign(p,i._`${r}[${t}.keyword][${t}.params[${d}]]`),n.if(p,(()=>n.code(i._`${p}.push(${t})`).assign(i._`${t}.${h}`,!0)))})))),n.forIn("key",r,(t=>n.forIn("keyProp",i._`${r}[${t}]`,(o=>{n.assign(p,i._`${r}[${t}][${o}]`),n.if(i._`${p}.length`,(()=>{const r=n.const("tmpl",i._`${s}[${t}] && ${s}[${t}][${o}]`);a.reportError(e,{message:i._`${r} ? ${r}() : ${y}[${t}][${o}]`,params:i._`{errors: ${p}}`})}))}))))}(o),function(t){const{props:o,items:s}=t;if(!o&&!s)return;const u=i._`typeof ${f} == "object"`,d=i._`Array.isArray(${f})`,p=n.let("emErrors");let m,b;const v=n.let("templates");function C(t,e){n.assign(p,i.stringify(t)),n.assign(v,A(t,e))}o&&s?(m=n.let("emChildKwd"),n.if(u),n.if(d,(()=>{C(s,g.items),n.assign(m,i.str`items`)}),(()=>{C(o,g.properties),n.assign(m,i.str`properties`)})),b=i._`[${m}]`):s?(n.if(d),C(s,g.items),b=i._`.items`):o&&(n.if(r.and(u,r.not(d))),C(o,g.properties),b=i._`.properties`),n.forOf("err",l.default.vErrors,(t=>function(t,e,o){n.if(r.and(i._`${t}.keyword !== ${c}`,i._`!${t}.${h}`,i._`${t}.instancePath.indexOf(${w}) === 0`),(()=>{const r=n.scopeValue("pattern",{ref:/^\/([^/]*)(?:\/|$)/,code:i._`new RegExp("^\\\/([^/]*)(?:\\\/|$)")`}),s=n.const("emMatches",i._`${r}.exec(${t}.instancePath.slice(${w}.length))`),a=n.const("emChild",i._`${s} && ${s}[1].replace(/~1/g, "/").replace(/~0/g, "~")`);n.if(i._`${a} !== undefined && ${a} in ${e}`,(()=>o(a)))}))}(t,p,(e=>n.code(i._`${p}[${e}].push(${t})`).assign(i._`${t}.${h}`,!0))))),n.forIn("key",p,(t=>n.if(i._`${p}[${t}].length`,(()=>{a.reportError(e,{message:i._`${t} in ${v} ? ${v}[${t}]() : ${y}${b}[${t}]`,params:i._`{errors: ${p}[${t}]}`}),n.assign(i._`${l.default.vErrors}[${l.default.errors}-1].instancePath`,i._`${w} + "/" + ${t}.replace(/~/g, "~0").replace(/\\//g, "~1")`)})))),n.endIf()}(function({properties:t,items:e}){const n={};if(t){n.props={};for(const e in t)n.props[e]=[]}if(e){n.items={};for(let t=0;t<e.length;t++)n.items[t]=[]}return n}(v))}const o="string"==typeof v?v:v._;o&&function(t){const o=n.const("emErrs",i._`[]`);n.forOf("err",l.default.vErrors,(t=>n.if(function(t){return r.and(i._`${t}.keyword !== ${c}`,i._`!${t}.${h}`,r.or(i._`${t}.instancePath === ${w}`,r.and(i._`${t}.instancePath.indexOf(${w}) === 0`,i._`${t}.instancePath[${w}.length] === "/"`)),i._`${t}.schemaPath.indexOf(${b.errSchemaPath}) === 0`,i._`${t}.schemaPath[${b.errSchemaPath}.length] === "/"`)}(t),(()=>n.code(i._`${o}.push(${t})`).assign(i._`${t}.${h}`,!0))))),n.if(i._`${o}.length`,(()=>a.reportError(e,{message:S(t),params:i._`{errors: ${o}}`})))}(o),t.keepErrors||function(){const t=n.const("emErrs",i._`[]`);n.forOf("err",l.default.vErrors,(e=>n.if(i._`!${e}.${h}`,(()=>n.code(i._`${t}.push(${e})`))))),n.assign(l.default.vErrors,t).assign(l.default.errors,i._`${t}.length`)}()}))},metaSchema:{anyOf:[{type:"string"},{type:"object",properties:{properties:{$ref:"#/$defs/stringMap"},items:{$ref:"#/$defs/stringList"},required:{$ref:"#/$defs/stringOrMap"},dependencies:{$ref:"#/$defs/stringOrMap"}},additionalProperties:{type:"string"}}],$defs:{stringMap:{type:"object",additionalProperties:{type:"string"}},stringOrMap:{anyOf:[{type:"string"},{$ref:"#/$defs/stringMap"}]},stringList:{type:"array",items:{type:"string"}}}}}}(e))};e.default=f,t.exports=f,t.exports.default=f},7433:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.MissingRefError=e.ValidationError=e.CodeGen=e.Name=e.nil=e.stringify=e.str=e._=e.KeywordCxt=e.Ajv2020=void 0;const i=n(4042),r=n(6105),o=n(6653),s=n(9572),a="https://json-schema.org/draft/2020-12/schema";class l extends i.default{constructor(t={}){super({...t,dynamicRef:!0,next:!0,unevaluated:!0})}_addVocabularies(){super._addVocabularies(),r.default.forEach((t=>this.addVocabulary(t))),this.opts.discriminator&&this.addKeyword(o.default)}_addDefaultMetaSchema(){super._addDefaultMetaSchema();const{$data:t,meta:e}=this.opts;e&&(s.default.call(this,t),this.refs["http://json-schema.org/schema"]=a)}defaultMeta(){return this.opts.defaultMeta=super.defaultMeta()||(this.getSchema(a)?a:void 0)}}e.Ajv2020=l,t.exports=e=l,t.exports.Ajv2020=l,Object.defineProperty(e,"__esModule",{value:!0}),e.default=l;var c=n(2586);Object.defineProperty(e,"KeywordCxt",{enumerable:!0,get:function(){return c.KeywordCxt}});var h=n(9029);Object.defineProperty(e,"_",{enumerable:!0,get:function(){return h._}}),Object.defineProperty(e,"str",{enumerable:!0,get:function(){return h.str}}),Object.defineProperty(e,"stringify",{enumerable:!0,get:function(){return h.stringify}}),Object.defineProperty(e,"nil",{enumerable:!0,get:function(){return h.nil}}),Object.defineProperty(e,"Name",{enumerable:!0,get:function(){return h.Name}}),Object.defineProperty(e,"CodeGen",{enumerable:!0,get:function(){return h.CodeGen}});var u=n(3558);Object.defineProperty(e,"ValidationError",{enumerable:!0,get:function(){return u.default}});var d=n(4551);Object.defineProperty(e,"MissingRefError",{enumerable:!0,get:function(){return d.default}})},3282:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.MissingRefError=e.ValidationError=e.CodeGen=e.Name=e.nil=e.stringify=e.str=e._=e.KeywordCxt=e.Ajv=void 0;const i=n(4042),r=n(6144),o=n(6653),s=n(2079),a=["/properties"],l="http://json-schema.org/draft-07/schema";class c extends i.default{_addVocabularies(){super._addVocabularies(),r.default.forEach((t=>this.addVocabulary(t))),this.opts.discriminator&&this.addKeyword(o.default)}_addDefaultMetaSchema(){if(super._addDefaultMetaSchema(),!this.opts.meta)return;const t=this.opts.$data?this.$dataMetaSchema(s,a):s;this.addMetaSchema(t,l,!1),this.refs["http://json-schema.org/schema"]=l}defaultMeta(){return this.opts.defaultMeta=super.defaultMeta()||(this.getSchema(l)?l:void 0)}}e.Ajv=c,t.exports=e=c,t.exports.Ajv=c,Object.defineProperty(e,"__esModule",{value:!0}),e.default=c;var h=n(2586);Object.defineProperty(e,"KeywordCxt",{enumerable:!0,get:function(){return h.KeywordCxt}});var u=n(9029);Object.defineProperty(e,"_",{enumerable:!0,get:function(){return u._}}),Object.defineProperty(e,"str",{enumerable:!0,get:function(){return u.str}}),Object.defineProperty(e,"stringify",{enumerable:!0,get:function(){return u.stringify}}),Object.defineProperty(e,"nil",{enumerable:!0,get:function(){return u.nil}}),Object.defineProperty(e,"Name",{enumerable:!0,get:function(){return u.Name}}),Object.defineProperty(e,"CodeGen",{enumerable:!0,get:function(){return u.CodeGen}});var d=n(3558);Object.defineProperty(e,"ValidationError",{enumerable:!0,get:function(){return d.default}});var p=n(4551);Object.defineProperty(e,"MissingRefError",{enumerable:!0,get:function(){return p.default}})},1520:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.regexpCode=e.getEsmExportName=e.getProperty=e.safeStringify=e.stringify=e.strConcat=e.addCodeArg=e.str=e._=e.nil=e._Code=e.Name=e.IDENTIFIER=e._CodeOrName=void 0;class n{}e._CodeOrName=n,e.IDENTIFIER=/^[a-z$_][a-z$_0-9]*$/i;class i extends n{constructor(t){if(super(),!e.IDENTIFIER.test(t))throw new Error("CodeGen: name must be a valid identifier");this.str=t}toString(){return this.str}emptyStr(){return!1}get names(){return{[this.str]:1}}}e.Name=i;class r extends n{constructor(t){super(),this._items="string"==typeof t?[t]:t}toString(){return this.str}emptyStr(){if(this._items.length>1)return!1;const t=this._items[0];return""===t||'""'===t}get str(){var t;return null!==(t=this._str)&&void 0!==t?t:this._str=this._items.reduce(((t,e)=>`${t}${e}`),"")}get names(){var t;return null!==(t=this._names)&&void 0!==t?t:this._names=this._items.reduce(((t,e)=>(e instanceof i&&(t[e.str]=(t[e.str]||0)+1),t)),{})}}function o(t,...e){const n=[t[0]];let i=0;for(;i<e.length;)l(n,e[i]),n.push(t[++i]);return new r(n)}e._Code=r,e.nil=new r(""),e._=o;const s=new r("+");function a(t,...e){const n=[h(t[0])];let i=0;for(;i<e.length;)n.push(s),l(n,e[i]),n.push(s,h(t[++i]));return function(t){let e=1;for(;e<t.length-1;){if(t[e]===s){const n=c(t[e-1],t[e+1]);if(void 0!==n){t.splice(e-1,3,n);continue}t[e++]="+"}e++}}(n),new r(n)}function l(t,e){var n;e instanceof r?t.push(...e._items):e instanceof i?t.push(e):t.push("number"==typeof(n=e)||"boolean"==typeof n||null===n?n:h(Array.isArray(n)?n.join(","):n))}function c(t,e){if('""'===e)return t;if('""'===t)return e;if("string"==typeof t){if(e instanceof i||'"'!==t[t.length-1])return;return"string"!=typeof e?`${t.slice(0,-1)}${e}"`:'"'===e[0]?t.slice(0,-1)+e.slice(1):void 0}return"string"!=typeof e||'"'!==e[0]||t instanceof i?void 0:`"${t}${e.slice(1)}`}function h(t){return JSON.stringify(t).replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}e.str=a,e.addCodeArg=l,e.strConcat=function(t,e){return e.emptyStr()?t:t.emptyStr()?e:a`${t}${e}`},e.stringify=function(t){return new r(h(t))},e.safeStringify=h,e.getProperty=function(t){return"string"==typeof t&&e.IDENTIFIER.test(t)?new r(`.${t}`):o`[${t}]`},e.getEsmExportName=function(t){if("string"==typeof t&&e.IDENTIFIER.test(t))return new r(`${t}`);throw new Error(`CodeGen: invalid export name: ${t}, use explicit $id name mapping`)},e.regexpCode=function(t){return new r(t.toString())}},9029:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.or=e.and=e.not=e.CodeGen=e.operators=e.varKinds=e.ValueScopeName=e.ValueScope=e.Scope=e.Name=e.regexpCode=e.stringify=e.getProperty=e.nil=e.strConcat=e.str=e._=void 0;const i=n(1520),r=n(7845);var o=n(1520);Object.defineProperty(e,"_",{enumerable:!0,get:function(){return o._}}),Object.defineProperty(e,"str",{enumerable:!0,get:function(){return o.str}}),Object.defineProperty(e,"strConcat",{enumerable:!0,get:function(){return o.strConcat}}),Object.defineProperty(e,"nil",{enumerable:!0,get:function(){return o.nil}}),Object.defineProperty(e,"getProperty",{enumerable:!0,get:function(){return o.getProperty}}),Object.defineProperty(e,"stringify",{enumerable:!0,get:function(){return o.stringify}}),Object.defineProperty(e,"regexpCode",{enumerable:!0,get:function(){return o.regexpCode}}),Object.defineProperty(e,"Name",{enumerable:!0,get:function(){return o.Name}});var s=n(7845);Object.defineProperty(e,"Scope",{enumerable:!0,get:function(){return s.Scope}}),Object.defineProperty(e,"ValueScope",{enumerable:!0,get:function(){return s.ValueScope}}),Object.defineProperty(e,"ValueScopeName",{enumerable:!0,get:function(){return s.ValueScopeName}}),Object.defineProperty(e,"varKinds",{enumerable:!0,get:function(){return s.varKinds}}),e.operators={GT:new i._Code(">"),GTE:new i._Code(">="),LT:new i._Code("<"),LTE:new i._Code("<="),EQ:new i._Code("==="),NEQ:new i._Code("!=="),NOT:new i._Code("!"),OR:new i._Code("||"),AND:new i._Code("&&"),ADD:new i._Code("+")};class a{optimizeNodes(){return this}optimizeNames(t,e){return this}}class l extends a{constructor(t,e,n){super(),this.varKind=t,this.name=e,this.rhs=n}render({es5:t,_n:e}){const n=t?r.varKinds.var:this.varKind,i=void 0===this.rhs?"":` = ${this.rhs}`;return`${n} ${this.name}${i};`+e}optimizeNames(t,e){if(t[this.name.str])return this.rhs&&(this.rhs=N(this.rhs,t,e)),this}get names(){return this.rhs instanceof i._CodeOrName?this.rhs.names:{}}}class c extends a{constructor(t,e,n){super(),this.lhs=t,this.rhs=e,this.sideEffects=n}render({_n:t}){return`${this.lhs} = ${this.rhs};`+t}optimizeNames(t,e){if(!(this.lhs instanceof i.Name)||t[this.lhs.str]||this.sideEffects)return this.rhs=N(this.rhs,t,e),this}get names(){return L(this.lhs instanceof i.Name?{}:{...this.lhs.names},this.rhs)}}class h extends c{constructor(t,e,n,i){super(t,n,i),this.op=e}render({_n:t}){return`${this.lhs} ${this.op}= ${this.rhs};`+t}}class u extends a{constructor(t){super(),this.label=t,this.names={}}render({_n:t}){return`${this.label}:`+t}}class d extends a{constructor(t){super(),this.label=t,this.names={}}render({_n:t}){return`break${this.label?` ${this.label}`:""};`+t}}class p extends a{constructor(t){super(),this.error=t}render({_n:t}){return`throw ${this.error};`+t}get names(){return this.error.names}}class m extends a{constructor(t){super(),this.code=t}render({_n:t}){return`${this.code};`+t}optimizeNodes(){return`${this.code}`?this:void 0}optimizeNames(t,e){return this.code=N(this.code,t,e),this}get names(){return this.code instanceof i._CodeOrName?this.code.names:{}}}class f extends a{constructor(t=[]){super(),this.nodes=t}render(t){return this.nodes.reduce(((e,n)=>e+n.render(t)),"")}optimizeNodes(){const{nodes:t}=this;let e=t.length;for(;e--;){const n=t[e].optimizeNodes();Array.isArray(n)?t.splice(e,1,...n):n?t[e]=n:t.splice(e,1)}return t.length>0?this:void 0}optimizeNames(t,e){const{nodes:n}=this;let i=n.length;for(;i--;){const r=n[i];r.optimizeNames(t,e)||(P(t,r.names),n.splice(i,1))}return n.length>0?this:void 0}get names(){return this.nodes.reduce(((t,e)=>T(t,e.names)),{})}}class g extends f{render(t){return"{"+t._n+super.render(t)+"}"+t._n}}class y extends f{}class b extends g{}b.kind="else";class v extends g{constructor(t,e){super(e),this.condition=t}render(t){let e=`if(${this.condition})`+super.render(t);return this.else&&(e+="else "+this.else.render(t)),e}optimizeNodes(){super.optimizeNodes();const t=this.condition;if(!0===t)return this.nodes;let e=this.else;if(e){const t=e.optimizeNodes();e=this.else=Array.isArray(t)?new b(t):t}return e?!1===t?e instanceof v?e:e.nodes:this.nodes.length?this:new v($(t),e instanceof v?[e]:e.nodes):!1!==t&&this.nodes.length?this:void 0}optimizeNames(t,e){var n;if(this.else=null===(n=this.else)||void 0===n?void 0:n.optimizeNames(t,e),super.optimizeNames(t,e)||this.else)return this.condition=N(this.condition,t,e),this}get names(){const t=super.names;return L(t,this.condition),this.else&&T(t,this.else.names),t}}v.kind="if";class w extends g{}w.kind="for";class C extends w{constructor(t){super(),this.iteration=t}render(t){return`for(${this.iteration})`+super.render(t)}optimizeNames(t,e){if(super.optimizeNames(t,e))return this.iteration=N(this.iteration,t,e),this}get names(){return T(super.names,this.iteration.names)}}class A extends w{constructor(t,e,n,i){super(),this.varKind=t,this.name=e,this.from=n,this.to=i}render(t){const e=t.es5?r.varKinds.var:this.varKind,{name:n,from:i,to:o}=this;return`for(${e} ${n}=${i}; ${n}<${o}; ${n}++)`+super.render(t)}get names(){const t=L(super.names,this.from);return L(t,this.to)}}class S extends w{constructor(t,e,n,i){super(),this.loop=t,this.varKind=e,this.name=n,this.iterable=i}render(t){return`for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})`+super.render(t)}optimizeNames(t,e){if(super.optimizeNames(t,e))return this.iterable=N(this.iterable,t,e),this}get names(){return T(super.names,this.iterable.names)}}class x extends g{constructor(t,e,n){super(),this.name=t,this.args=e,this.async=n}render(t){return`${this.async?"async ":""}function ${this.name}(${this.args})`+super.render(t)}}x.kind="func";class E extends f{render(t){return"return "+super.render(t)}}E.kind="return";class M extends g{render(t){let e="try"+super.render(t);return this.catch&&(e+=this.catch.render(t)),this.finally&&(e+=this.finally.render(t)),e}optimizeNodes(){var t,e;return super.optimizeNodes(),null===(t=this.catch)||void 0===t||t.optimizeNodes(),null===(e=this.finally)||void 0===e||e.optimizeNodes(),this}optimizeNames(t,e){var n,i;return super.optimizeNames(t,e),null===(n=this.catch)||void 0===n||n.optimizeNames(t,e),null===(i=this.finally)||void 0===i||i.optimizeNames(t,e),this}get names(){const t=super.names;return this.catch&&T(t,this.catch.names),this.finally&&T(t,this.finally.names),t}}class _ extends g{constructor(t){super(),this.error=t}render(t){return`catch(${this.error})`+super.render(t)}}_.kind="catch";class I extends g{render(t){return"finally"+super.render(t)}}function T(t,e){for(const n in e)t[n]=(t[n]||0)+(e[n]||0);return t}function L(t,e){return e instanceof i._CodeOrName?T(t,e.names):t}function N(t,e,n){return t instanceof i.Name?o(t):(r=t)instanceof i._Code&&r._items.some((t=>t instanceof i.Name&&1===e[t.str]&&void 0!==n[t.str]))?new i._Code(t._items.reduce(((t,e)=>(e instanceof i.Name&&(e=o(e)),e instanceof i._Code?t.push(...e._items):t.push(e),t)),[])):t;var r;function o(t){const i=n[t.str];return void 0===i||1!==e[t.str]?t:(delete e[t.str],i)}}function P(t,e){for(const n in e)t[n]=(t[n]||0)-(e[n]||0)}function $(t){return"boolean"==typeof t||"number"==typeof t||null===t?!t:i._`!${G(t)}`}I.kind="finally",e.CodeGen=class{constructor(t,e={}){this._values={},this._blockStarts=[],this._constants={},this.opts={...e,_n:e.lines?"\n":""},this._extScope=t,this._scope=new r.Scope({parent:t}),this._nodes=[new y]}toString(){return this._root.render(this.opts)}name(t){return this._scope.name(t)}scopeName(t){return this._extScope.name(t)}scopeValue(t,e){const n=this._extScope.value(t,e);return(this._values[n.prefix]||(this._values[n.prefix]=new Set)).add(n),n}getScopeValue(t,e){return this._extScope.getValue(t,e)}scopeRefs(t){return this._extScope.scopeRefs(t,this._values)}scopeCode(){return this._extScope.scopeCode(this._values)}_def(t,e,n,i){const r=this._scope.toName(e);return void 0!==n&&i&&(this._constants[r.str]=n),this._leafNode(new l(t,r,n)),r}const(t,e,n){return this._def(r.varKinds.const,t,e,n)}let(t,e,n){return this._def(r.varKinds.let,t,e,n)}var(t,e,n){return this._def(r.varKinds.var,t,e,n)}assign(t,e,n){return this._leafNode(new c(t,e,n))}add(t,n){return this._leafNode(new h(t,e.operators.ADD,n))}code(t){return"function"==typeof t?t():t!==i.nil&&this._leafNode(new m(t)),this}object(...t){const e=["{"];for(const[n,r]of t)e.length>1&&e.push(","),e.push(n),(n!==r||this.opts.es5)&&(e.push(":"),(0,i.addCodeArg)(e,r));return e.push("}"),new i._Code(e)}if(t,e,n){if(this._blockNode(new v(t)),e&&n)this.code(e).else().code(n).endIf();else if(e)this.code(e).endIf();else if(n)throw new Error('CodeGen: "else" body without "then" body');return this}elseIf(t){return this._elseNode(new v(t))}else(){return this._elseNode(new b)}endIf(){return this._endBlockNode(v,b)}_for(t,e){return this._blockNode(t),e&&this.code(e).endFor(),this}for(t,e){return this._for(new C(t),e)}forRange(t,e,n,i,o=(this.opts.es5?r.varKinds.var:r.varKinds.let)){const s=this._scope.toName(t);return this._for(new A(o,s,e,n),(()=>i(s)))}forOf(t,e,n,o=r.varKinds.const){const s=this._scope.toName(t);if(this.opts.es5){const t=e instanceof i.Name?e:this.var("_arr",e);return this.forRange("_i",0,i._`${t}.length`,(e=>{this.var(s,i._`${t}[${e}]`),n(s)}))}return this._for(new S("of",o,s,e),(()=>n(s)))}forIn(t,e,n,o=(this.opts.es5?r.varKinds.var:r.varKinds.const)){if(this.opts.ownProperties)return this.forOf(t,i._`Object.keys(${e})`,n);const s=this._scope.toName(t);return this._for(new S("in",o,s,e),(()=>n(s)))}endFor(){return this._endBlockNode(w)}label(t){return this._leafNode(new u(t))}break(t){return this._leafNode(new d(t))}return(t){const e=new E;if(this._blockNode(e),this.code(t),1!==e.nodes.length)throw new Error('CodeGen: "return" should have one node');return this._endBlockNode(E)}try(t,e,n){if(!e&&!n)throw new Error('CodeGen: "try" without "catch" and "finally"');const i=new M;if(this._blockNode(i),this.code(t),e){const t=this.name("e");this._currNode=i.catch=new _(t),e(t)}return n&&(this._currNode=i.finally=new I,this.code(n)),this._endBlockNode(_,I)}throw(t){return this._leafNode(new p(t))}block(t,e){return this._blockStarts.push(this._nodes.length),t&&this.code(t).endBlock(e),this}endBlock(t){const e=this._blockStarts.pop();if(void 0===e)throw new Error("CodeGen: not in self-balancing block");const n=this._nodes.length-e;if(n<0||void 0!==t&&n!==t)throw new Error(`CodeGen: wrong number of nodes: ${n} vs ${t} expected`);return this._nodes.length=e,this}func(t,e=i.nil,n,r){return this._blockNode(new x(t,e,n)),r&&this.code(r).endFunc(),this}endFunc(){return this._endBlockNode(x)}optimize(t=1){for(;t-- >0;)this._root.optimizeNodes(),this._root.optimizeNames(this._root.names,this._constants)}_leafNode(t){return this._currNode.nodes.push(t),this}_blockNode(t){this._currNode.nodes.push(t),this._nodes.push(t)}_endBlockNode(t,e){const n=this._currNode;if(n instanceof t||e&&n instanceof e)return this._nodes.pop(),this;throw new Error(`CodeGen: not in block "${e?`${t.kind}/${e.kind}`:t.kind}"`)}_elseNode(t){const e=this._currNode;if(!(e instanceof v))throw new Error('CodeGen: "else" without "if"');return this._currNode=e.else=t,this}get _root(){return this._nodes[0]}get _currNode(){const t=this._nodes;return t[t.length-1]}set _currNode(t){const e=this._nodes;e[e.length-1]=t}},e.not=$;const R=k(e.operators.AND);e.and=function(...t){return t.reduce(R)};const O=k(e.operators.OR);function k(t){return(e,n)=>e===i.nil?n:n===i.nil?e:i._`${G(e)} ${t} ${G(n)}`}function G(t){return t instanceof i.Name?t:i._`(${t})`}e.or=function(...t){return t.reduce(O)}},7845:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ValueScope=e.ValueScopeName=e.Scope=e.varKinds=e.UsedValueState=void 0;const i=n(1520);class r extends Error{constructor(t){super(`CodeGen: "code" for ${t} not defined`),this.value=t.value}}var o;!function(t){t[t.Started=0]="Started",t[t.Completed=1]="Completed"}(o||(e.UsedValueState=o={})),e.varKinds={const:new i.Name("const"),let:new i.Name("let"),var:new i.Name("var")};class s{constructor({prefixes:t,parent:e}={}){this._names={},this._prefixes=t,this._parent=e}toName(t){return t instanceof i.Name?t:this.name(t)}name(t){return new i.Name(this._newName(t))}_newName(t){return`${t}${(this._names[t]||this._nameGroup(t)).index++}`}_nameGroup(t){var e,n;if((null===(n=null===(e=this._parent)||void 0===e?void 0:e._prefixes)||void 0===n?void 0:n.has(t))||this._prefixes&&!this._prefixes.has(t))throw new Error(`CodeGen: prefix "${t}" is not allowed in this scope`);return this._names[t]={prefix:t,index:0}}}e.Scope=s;class a extends i.Name{constructor(t,e){super(e),this.prefix=t}setValue(t,{property:e,itemIndex:n}){this.value=t,this.scopePath=i._`.${new i.Name(e)}[${n}]`}}e.ValueScopeName=a;const l=i._`\n`;e.ValueScope=class extends s{constructor(t){super(t),this._values={},this._scope=t.scope,this.opts={...t,_n:t.lines?l:i.nil}}get(){return this._scope}name(t){return new a(t,this._newName(t))}value(t,e){var n;if(void 0===e.ref)throw new Error("CodeGen: ref must be passed in value");const i=this.toName(t),{prefix:r}=i,o=null!==(n=e.key)&&void 0!==n?n:e.ref;let s=this._values[r];if(s){const t=s.get(o);if(t)return t}else s=this._values[r]=new Map;s.set(o,i);const a=this._scope[r]||(this._scope[r]=[]),l=a.length;return a[l]=e.ref,i.setValue(e,{property:r,itemIndex:l}),i}getValue(t,e){const n=this._values[t];if(n)return n.get(e)}scopeRefs(t,e=this._values){return this._reduceValues(e,(e=>{if(void 0===e.scopePath)throw new Error(`CodeGen: name "${e}" has no value`);return i._`${t}${e.scopePath}`}))}scopeCode(t=this._values,e,n){return this._reduceValues(t,(t=>{if(void 0===t.value)throw new Error(`CodeGen: name "${t}" has no value`);return t.value.code}),e,n)}_reduceValues(t,n,s={},a){let l=i.nil;for(const c in t){const h=t[c];if(!h)continue;const u=s[c]=s[c]||new Map;h.forEach((t=>{if(u.has(t))return;u.set(t,o.Started);let s=n(t);if(s){const n=this.opts.es5?e.varKinds.var:e.varKinds.const;l=i._`${l}${n} ${t} = ${s};${this.opts._n}`}else{if(!(s=null==a?void 0:a(t)))throw new r(t);l=i._`${l}${s}${this.opts._n}`}u.set(t,o.Completed)}))}return l}}},8708:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.extendErrors=e.resetErrorsCount=e.reportExtraError=e.reportError=e.keyword$DataError=e.keywordError=void 0;const i=n(9029),r=n(4227),o=n(2023);function s(t,e){const n=t.const("err",e);t.if(i._`${o.default.vErrors} === null`,(()=>t.assign(o.default.vErrors,i._`[${n}]`)),i._`${o.default.vErrors}.push(${n})`),t.code(i._`${o.default.errors}++`)}function a(t,e){const{gen:n,validateName:r,schemaEnv:o}=t;o.$async?n.throw(i._`new ${t.ValidationError}(${e})`):(n.assign(i._`${r}.errors`,e),n.return(!1))}e.keywordError={message:({keyword:t})=>i.str`must pass "${t}" keyword validation`},e.keyword$DataError={message:({keyword:t,schemaType:e})=>e?i.str`"${t}" keyword must be ${e} ($data)`:i.str`"${t}" keyword is invalid ($data)`},e.reportError=function(t,n=e.keywordError,r,o){const{it:l}=t,{gen:h,compositeRule:u,allErrors:d}=l,p=c(t,n,r);(null!=o?o:u||d)?s(h,p):a(l,i._`[${p}]`)},e.reportExtraError=function(t,n=e.keywordError,i){const{it:r}=t,{gen:l,compositeRule:h,allErrors:u}=r;s(l,c(t,n,i)),h||u||a(r,o.default.vErrors)},e.resetErrorsCount=function(t,e){t.assign(o.default.errors,e),t.if(i._`${o.default.vErrors} !== null`,(()=>t.if(e,(()=>t.assign(i._`${o.default.vErrors}.length`,e)),(()=>t.assign(o.default.vErrors,null)))))},e.extendErrors=function({gen:t,keyword:e,schemaValue:n,data:r,errsCount:s,it:a}){if(void 0===s)throw new Error("ajv implementation error");const l=t.name("err");t.forRange("i",s,o.default.errors,(s=>{t.const(l,i._`${o.default.vErrors}[${s}]`),t.if(i._`${l}.instancePath === undefined`,(()=>t.assign(i._`${l}.instancePath`,(0,i.strConcat)(o.default.instancePath,a.errorPath)))),t.assign(i._`${l}.schemaPath`,i.str`${a.errSchemaPath}/${e}`),a.opts.verbose&&(t.assign(i._`${l}.schema`,n),t.assign(i._`${l}.data`,r))}))};const l={keyword:new i.Name("keyword"),schemaPath:new i.Name("schemaPath"),params:new i.Name("params"),propertyName:new i.Name("propertyName"),message:new i.Name("message"),schema:new i.Name("schema"),parentSchema:new i.Name("parentSchema")};function c(t,e,n){const{createErrors:r}=t.it;return!1===r?i._`{}`:function(t,e,n={}){const{gen:r,it:s}=t,a=[h(s,n),u(t,n)];return function(t,{params:e,message:n},r){const{keyword:s,data:a,schemaValue:c,it:h}=t,{opts:u,propertyName:d,topSchemaRef:p,schemaPath:m}=h;r.push([l.keyword,s],[l.params,"function"==typeof e?e(t):e||i._`{}`]),u.messages&&r.push([l.message,"function"==typeof n?n(t):n]),u.verbose&&r.push([l.schema,c],[l.parentSchema,i._`${p}${m}`],[o.default.data,a]),d&&r.push([l.propertyName,d])}(t,e,a),r.object(...a)}(t,e,n)}function h({errorPath:t},{instancePath:e}){const n=e?i.str`${t}${(0,r.getErrorPath)(e,r.Type.Str)}`:t;return[o.default.instancePath,(0,i.strConcat)(o.default.instancePath,n)]}function u({keyword:t,it:{errSchemaPath:e}},{schemaPath:n,parentSchema:o}){let s=o?e:i.str`${e}/${t}`;return n&&(s=i.str`${s}${(0,r.getErrorPath)(n,r.Type.Str)}`),[l.schemaPath,s]}},3835:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.resolveSchema=e.getCompilingSchema=e.resolveRef=e.compileSchema=e.SchemaEnv=void 0;const i=n(9029),r=n(3558),o=n(2023),s=n(6939),a=n(4227),l=n(2586);class c{constructor(t){var e;let n;this.refs={},this.dynamicAnchors={},"object"==typeof t.schema&&(n=t.schema),this.schema=t.schema,this.schemaId=t.schemaId,this.root=t.root||this,this.baseId=null!==(e=t.baseId)&&void 0!==e?e:(0,s.normalizeId)(null==n?void 0:n[t.schemaId||"$id"]),this.schemaPath=t.schemaPath,this.localRefs=t.localRefs,this.meta=t.meta,this.$async=null==n?void 0:n.$async,this.refs={}}}function h(t){const e=d.call(this,t);if(e)return e;const n=(0,s.getFullPath)(this.opts.uriResolver,t.root.baseId),{es5:a,lines:c}=this.opts.code,{ownProperties:h}=this.opts,u=new i.CodeGen(this.scope,{es5:a,lines:c,ownProperties:h});let p;t.$async&&(p=u.scopeValue("Error",{ref:r.default,code:i._`require("ajv/dist/runtime/validation_error").default`}));const m=u.scopeName("validate");t.validateName=m;const f={gen:u,allErrors:this.opts.allErrors,data:o.default.data,parentData:o.default.parentData,parentDataProperty:o.default.parentDataProperty,dataNames:[o.default.data],dataPathArr:[i.nil],dataLevel:0,dataTypes:[],definedProperties:new Set,topSchemaRef:u.scopeValue("schema",!0===this.opts.code.source?{ref:t.schema,code:(0,i.stringify)(t.schema)}:{ref:t.schema}),validateName:m,ValidationError:p,schema:t.schema,schemaEnv:t,rootId:n,baseId:t.baseId||n,schemaPath:i.nil,errSchemaPath:t.schemaPath||(this.opts.jtd?"":"#"),errorPath:i._`""`,opts:this.opts,self:this};let g;try{this._compilations.add(t),(0,l.validateFunctionCode)(f),u.optimize(this.opts.code.optimize);const e=u.toString();g=`${u.scopeRefs(o.default.scope)}return ${e}`,this.opts.code.process&&(g=this.opts.code.process(g,t));const n=new Function(`${o.default.self}`,`${o.default.scope}`,g)(this,this.scope.get());if(this.scope.value(m,{ref:n}),n.errors=null,n.schema=t.schema,n.schemaEnv=t,t.$async&&(n.$async=!0),!0===this.opts.code.source&&(n.source={validateName:m,validateCode:e,scopeValues:u._values}),this.opts.unevaluated){const{props:t,items:e}=f;n.evaluated={props:t instanceof i.Name?void 0:t,items:e instanceof i.Name?void 0:e,dynamicProps:t instanceof i.Name,dynamicItems:e instanceof i.Name},n.source&&(n.source.evaluated=(0,i.stringify)(n.evaluated))}return t.validate=n,t}catch(e){throw delete t.validate,delete t.validateName,g&&this.logger.error("Error compiling schema, function code:",g),e}finally{this._compilations.delete(t)}}function u(t){return(0,s.inlineRef)(t.schema,this.opts.inlineRefs)?t.schema:t.validate?t:h.call(this,t)}function d(t){for(const i of this._compilations)if(n=t,(e=i).schema===n.schema&&e.root===n.root&&e.baseId===n.baseId)return i;var e,n}function p(t,e){let n;for(;"string"==typeof(n=this.refs[e]);)e=n;return n||this.schemas[e]||m.call(this,t,e)}function m(t,e){const n=this.opts.uriResolver.parse(e),i=(0,s._getFullPath)(this.opts.uriResolver,n);let r=(0,s.getFullPath)(this.opts.uriResolver,t.baseId,void 0);if(Object.keys(t.schema).length>0&&i===r)return g.call(this,n,t);const o=(0,s.normalizeId)(i),a=this.refs[o]||this.schemas[o];if("string"==typeof a){const e=m.call(this,t,a);if("object"!=typeof(null==e?void 0:e.schema))return;return g.call(this,n,e)}if("object"==typeof(null==a?void 0:a.schema)){if(a.validate||h.call(this,a),o===(0,s.normalizeId)(e)){const{schema:e}=a,{schemaId:n}=this.opts,i=e[n];return i&&(r=(0,s.resolveUrl)(this.opts.uriResolver,r,i)),new c({schema:e,schemaId:n,root:t,baseId:r})}return g.call(this,n,a)}}e.SchemaEnv=c,e.compileSchema=h,e.resolveRef=function(t,e,n){var i;n=(0,s.resolveUrl)(this.opts.uriResolver,e,n);const r=t.refs[n];if(r)return r;let o=p.call(this,t,n);if(void 0===o){const r=null===(i=t.localRefs)||void 0===i?void 0:i[n],{schemaId:s}=this.opts;r&&(o=new c({schema:r,schemaId:s,root:t,baseId:e}))}return void 0!==o?t.refs[n]=u.call(this,o):void 0},e.getCompilingSchema=d,e.resolveSchema=m;const f=new Set(["properties","patternProperties","enum","dependencies","definitions"]);function g(t,{baseId:e,schema:n,root:i}){var r;if("/"!==(null===(r=t.fragment)||void 0===r?void 0:r[0]))return;for(const i of t.fragment.slice(1).split("/")){if("boolean"==typeof n)return;const t=n[(0,a.unescapeFragment)(i)];if(void 0===t)return;const r="object"==typeof(n=t)&&n[this.opts.schemaId];!f.has(i)&&r&&(e=(0,s.resolveUrl)(this.opts.uriResolver,e,r))}let o;if("boolean"!=typeof n&&n.$ref&&!(0,a.schemaHasRulesButRef)(n,this.RULES)){const t=(0,s.resolveUrl)(this.opts.uriResolver,e,n.$ref);o=m.call(this,i,t)}const{schemaId:l}=this.opts;return o=o||new c({schema:n,schemaId:l,root:i,baseId:e}),o.schema!==o.root.schema?o:void 0}},2023:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(9029),r={data:new i.Name("data"),valCxt:new i.Name("valCxt"),instancePath:new i.Name("instancePath"),parentData:new i.Name("parentData"),parentDataProperty:new i.Name("parentDataProperty"),rootData:new i.Name("rootData"),dynamicAnchors:new i.Name("dynamicAnchors"),vErrors:new i.Name("vErrors"),errors:new i.Name("errors"),this:new i.Name("this"),self:new i.Name("self"),scope:new i.Name("scope"),json:new i.Name("json"),jsonPos:new i.Name("jsonPos"),jsonLen:new i.Name("jsonLen"),jsonPart:new i.Name("jsonPart")};e.default=r},4551:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(6939);class r extends Error{constructor(t,e,n,r){super(r||`can't resolve reference ${n} from id ${e}`),this.missingRef=(0,i.resolveUrl)(t,e,n),this.missingSchema=(0,i.normalizeId)((0,i.getFullPath)(t,this.missingRef))}}e.default=r},6939:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.getSchemaRefs=e.resolveUrl=e.normalizeId=e._getFullPath=e.getFullPath=e.inlineRef=void 0;const i=n(4227),r=n(2017),o=n(7106),s=new Set(["type","format","pattern","maxLength","minLength","maxProperties","minProperties","maxItems","minItems","maximum","minimum","uniqueItems","multipleOf","required","enum","const"]);e.inlineRef=function(t,e=!0){return"boolean"==typeof t||(!0===e?!l(t):!!e&&c(t)<=e)};const a=new Set(["$ref","$recursiveRef","$recursiveAnchor","$dynamicRef","$dynamicAnchor"]);function l(t){for(const e in t){if(a.has(e))return!0;const n=t[e];if(Array.isArray(n)&&n.some(l))return!0;if("object"==typeof n&&l(n))return!0}return!1}function c(t){let e=0;for(const n in t){if("$ref"===n)return 1/0;if(e++,!s.has(n)&&("object"==typeof t[n]&&(0,i.eachItem)(t[n],(t=>e+=c(t))),e===1/0))return 1/0}return e}function h(t,e="",n){!1!==n&&(e=p(e));const i=t.parse(e);return u(t,i)}function u(t,e){return t.serialize(e).split("#")[0]+"#"}e.getFullPath=h,e._getFullPath=u;const d=/#\/?$/;function p(t){return t?t.replace(d,""):""}e.normalizeId=p,e.resolveUrl=function(t,e,n){return n=p(n),t.resolve(e,n)};const m=/^[a-z_][-a-z0-9._]*$/i;e.getSchemaRefs=function(t,e){if("boolean"==typeof t)return{};const{schemaId:n,uriResolver:i}=this.opts,s=p(t[n]||e),a={"":s},l=h(i,s,!1),c={},u=new Set;return o(t,{allKeys:!0},((t,e,i,r)=>{if(void 0===r)return;const o=l+e;let s=a[r];function h(e){const n=this.opts.uriResolver.resolve;if(e=p(s?n(s,e):e),u.has(e))throw f(e);u.add(e);let i=this.refs[e];return"string"==typeof i&&(i=this.refs[i]),"object"==typeof i?d(t,i.schema,e):e!==p(o)&&("#"===e[0]?(d(t,c[e],e),c[e]=t):this.refs[e]=o),e}function g(t){if("string"==typeof t){if(!m.test(t))throw new Error(`invalid anchor "${t}"`);h.call(this,`#${t}`)}}"string"==typeof t[n]&&(s=h.call(this,t[n])),g.call(this,t.$anchor),g.call(this,t.$dynamicAnchor),a[e]=s})),c;function d(t,e,n){if(void 0!==e&&!r(t,e))throw f(n)}function f(t){return new Error(`reference "${t}" resolves to more than one schema`)}}},396:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.getRules=e.isJSONType=void 0;const n=new Set(["string","number","integer","boolean","null","object","array"]);e.isJSONType=function(t){return"string"==typeof t&&n.has(t)},e.getRules=function(){const t={number:{type:"number",rules:[]},string:{type:"string",rules:[]},array:{type:"array",rules:[]},object:{type:"object",rules:[]}};return{types:{...t,integer:!0,boolean:!0,null:!0},rules:[{rules:[]},t.number,t.string,t.array,t.object],post:{rules:[]},all:{},keywords:{}}}},4227:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.checkStrictMode=e.getErrorPath=e.Type=e.useFunc=e.setEvaluated=e.evaluatedPropsToName=e.mergeEvaluated=e.eachItem=e.unescapeJsonPointer=e.escapeJsonPointer=e.escapeFragment=e.unescapeFragment=e.schemaRefOrVal=e.schemaHasRulesButRef=e.schemaHasRules=e.checkUnknownRules=e.alwaysValidSchema=e.toHash=void 0;const i=n(9029),r=n(1520);function o(t,e=t.schema){const{opts:n,self:i}=t;if(!n.strictSchema)return;if("boolean"==typeof e)return;const r=i.RULES.keywords;for(const n in e)r[n]||m(t,`unknown keyword: "${n}"`)}function s(t,e){if("boolean"==typeof t)return!t;for(const n in t)if(e[n])return!0;return!1}function a(t){return"number"==typeof t?`${t}`:t.replace(/~/g,"~0").replace(/\//g,"~1")}function l(t){return t.replace(/~1/g,"/").replace(/~0/g,"~")}function c({mergeNames:t,mergeToName:e,mergeValues:n,resultToName:r}){return(o,s,a,l)=>{const c=void 0===a?s:a instanceof i.Name?(s instanceof i.Name?t(o,s,a):e(o,s,a),a):s instanceof i.Name?(e(o,a,s),s):n(s,a);return l!==i.Name||c instanceof i.Name?c:r(o,c)}}function h(t,e){if(!0===e)return t.var("props",!0);const n=t.var("props",i._`{}`);return void 0!==e&&u(t,n,e),n}function u(t,e,n){Object.keys(n).forEach((n=>t.assign(i._`${e}${(0,i.getProperty)(n)}`,!0)))}e.toHash=function(t){const e={};for(const n of t)e[n]=!0;return e},e.alwaysValidSchema=function(t,e){return"boolean"==typeof e?e:0===Object.keys(e).length||(o(t,e),!s(e,t.self.RULES.all))},e.checkUnknownRules=o,e.schemaHasRules=s,e.schemaHasRulesButRef=function(t,e){if("boolean"==typeof t)return!t;for(const n in t)if("$ref"!==n&&e.all[n])return!0;return!1},e.schemaRefOrVal=function({topSchemaRef:t,schemaPath:e},n,r,o){if(!o){if("number"==typeof n||"boolean"==typeof n)return n;if("string"==typeof n)return i._`${n}`}return i._`${t}${e}${(0,i.getProperty)(r)}`},e.unescapeFragment=function(t){return l(decodeURIComponent(t))},e.escapeFragment=function(t){return encodeURIComponent(a(t))},e.escapeJsonPointer=a,e.unescapeJsonPointer=l,e.eachItem=function(t,e){if(Array.isArray(t))for(const n of t)e(n);else e(t)},e.mergeEvaluated={props:c({mergeNames:(t,e,n)=>t.if(i._`${n} !== true && ${e} !== undefined`,(()=>{t.if(i._`${e} === true`,(()=>t.assign(n,!0)),(()=>t.assign(n,i._`${n} || {}`).code(i._`Object.assign(${n}, ${e})`)))})),mergeToName:(t,e,n)=>t.if(i._`${n} !== true`,(()=>{!0===e?t.assign(n,!0):(t.assign(n,i._`${n} || {}`),u(t,n,e))})),mergeValues:(t,e)=>!0===t||{...t,...e},resultToName:h}),items:c({mergeNames:(t,e,n)=>t.if(i._`${n} !== true && ${e} !== undefined`,(()=>t.assign(n,i._`${e} === true ? true : ${n} > ${e} ? ${n} : ${e}`))),mergeToName:(t,e,n)=>t.if(i._`${n} !== true`,(()=>t.assign(n,!0===e||i._`${n} > ${e} ? ${n} : ${e}`))),mergeValues:(t,e)=>!0===t||Math.max(t,e),resultToName:(t,e)=>t.var("items",e)})},e.evaluatedPropsToName=h,e.setEvaluated=u;const d={};var p;function m(t,e,n=t.opts.strictSchema){if(n){if(e=`strict mode: ${e}`,!0===n)throw new Error(e);t.self.logger.warn(e)}}e.useFunc=function(t,e){return t.scopeValue("func",{ref:e,code:d[e.code]||(d[e.code]=new r._Code(e.code))})},function(t){t[t.Num=0]="Num",t[t.Str=1]="Str"}(p||(e.Type=p={})),e.getErrorPath=function(t,e,n){if(t instanceof i.Name){const r=e===p.Num;return n?r?i._`"[" + ${t} + "]"`:i._`"['" + ${t} + "']"`:r?i._`"/" + ${t}`:i._`"/" + ${t}.replace(/~/g, "~0").replace(/\\//g, "~1")`}return n?(0,i.getProperty)(t).toString():"/"+a(t)},e.checkStrictMode=m},7887:(t,e)=>{"use strict";function n(t,e){return e.rules.some((e=>i(t,e)))}function i(t,e){var n;return void 0!==t[e.keyword]||(null===(n=e.definition.implements)||void 0===n?void 0:n.some((e=>void 0!==t[e])))}Object.defineProperty(e,"__esModule",{value:!0}),e.shouldUseRule=e.shouldUseGroup=e.schemaHasRulesForType=void 0,e.schemaHasRulesForType=function({schema:t,self:e},i){const r=e.RULES.types[i];return r&&!0!==r&&n(t,r)},e.shouldUseGroup=n,e.shouldUseRule=i},8727:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.boolOrEmptySchema=e.topBoolOrEmptySchema=void 0;const i=n(8708),r=n(9029),o=n(2023),s={message:"boolean schema is false"};function a(t,e){const{gen:n,data:r}=t,o={gen:n,keyword:"false schema",data:r,schema:!1,schemaCode:!1,schemaValue:!1,params:{},it:t};(0,i.reportError)(o,s,void 0,e)}e.topBoolOrEmptySchema=function(t){const{gen:e,schema:n,validateName:i}=t;!1===n?a(t,!1):"object"==typeof n&&!0===n.$async?e.return(o.default.data):(e.assign(r._`${i}.errors`,null),e.return(!0))},e.boolOrEmptySchema=function(t,e){const{gen:n,schema:i}=t;!1===i?(n.var(e,!1),a(t)):n.var(e,!0)}},208:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.reportTypeError=e.checkDataTypes=e.checkDataType=e.coerceAndCheckDataType=e.getJSONTypes=e.getSchemaTypes=e.DataType=void 0;const i=n(396),r=n(7887),o=n(8708),s=n(9029),a=n(4227);var l;function c(t){const e=Array.isArray(t)?t:t?[t]:[];if(e.every(i.isJSONType))return e;throw new Error("type must be JSONType or JSONType[]: "+e.join(","))}!function(t){t[t.Correct=0]="Correct",t[t.Wrong=1]="Wrong"}(l||(e.DataType=l={})),e.getSchemaTypes=function(t){const e=c(t.type);if(e.includes("null")){if(!1===t.nullable)throw new Error("type: null contradicts nullable: false")}else{if(!e.length&&void 0!==t.nullable)throw new Error('"nullable" cannot be used without "type"');!0===t.nullable&&e.push("null")}return e},e.getJSONTypes=c,e.coerceAndCheckDataType=function(t,e){const{gen:n,data:i,opts:o}=t,a=function(t,e){return e?t.filter((t=>h.has(t)||"array"===e&&"array"===t)):[]}(e,o.coerceTypes),c=e.length>0&&!(0===a.length&&1===e.length&&(0,r.schemaHasRulesForType)(t,e[0]));if(c){const r=d(e,i,o.strictNumbers,l.Wrong);n.if(r,(()=>{a.length?function(t,e,n){const{gen:i,data:r,opts:o}=t,a=i.let("dataType",s._`typeof ${r}`),l=i.let("coerced",s._`undefined`);"array"===o.coerceTypes&&i.if(s._`${a} == 'object' && Array.isArray(${r}) && ${r}.length == 1`,(()=>i.assign(r,s._`${r}[0]`).assign(a,s._`typeof ${r}`).if(d(e,r,o.strictNumbers),(()=>i.assign(l,r))))),i.if(s._`${l} !== undefined`);for(const t of n)(h.has(t)||"array"===t&&"array"===o.coerceTypes)&&c(t);function c(t){switch(t){case"string":return void i.elseIf(s._`${a} == "number" || ${a} == "boolean"`).assign(l,s._`"" + ${r}`).elseIf(s._`${r} === null`).assign(l,s._`""`);case"number":return void i.elseIf(s._`${a} == "boolean" || ${r} === null
|
|
1
|
+
var bio;(()=>{var t={8924:(t,e,n)=>{"use strict";var i=n(7362);class r extends i.e{static get Lesk(){return void 0===this.lesk&&(this.lesk=this.makePalette([[["G","A","S","T"],"orange"],[["C","V","I","L","P","F","Y","M","W"],"all_green"],[["N","Q","H"],"magenta"],[["D","E"],"red"],[["K","R"],"all_blue"]],!1,r)),this.lesk}static get GrokGroups(){return void 0===this.grokGroups&&(this.grokGroups=this.makePalette([[["C","U"],"yellow"],[["G","P"],"red"],[["A","V","I","L","M","F","Y","W"],"all_green"],[["R","H","K"],"light_blue"],[["D","E"],"dark_blue"],[["S","T","N","Q"],"orange"]],!1,r)),this.grokGroups}static get RasMol(){return void 0===this.rasMol&&(this.rasMol=new r({D:"#E60A0A",E:"#E60A0A",C:"#E6E600",M:"#E6E600",K:"#145AFF",R:"#145AFF",S:"#FA9600",T:"#FA9600",F:"#3232AA",Y:"#3232AA",N:"#00DCDC",Q:"#00DCDC",G:"#EBEBEB",L:"#0F820F",V:"#0F820F",I:"#0F820F",A:"#C8C8C8",W:"#B45AB4",H:"#8282D2",P:"#DC9682",others:"#BEA06E"})),this.rasMol}get(t){const e=t in r.aaSynonyms?r.aaSynonyms[t]:t;return super.get(e)}}r.aaSynonyms={MeNle:"L",MeA:"A",MeG:"G",MeF:"F"};class o{static getPalette(t="grok"){switch(t){case"grok":return r.GrokGroups;case"lesk":return r.Lesk;default:throw new Error(`ChemPalette: scheme \`${t}\` does not exist`)}}static getInnerOuter(t){let e=0,n="",i="";for(const r of t)"("==r?e++:")"==r?e--:e?n+=r:i+=r;return isNaN(parseInt(n))?[i,n]:[i,""]}static getColorAAPivot(t="",e="grok"){const n=this.getPalette(e);let[i,r]=this.getInnerOuter(t);if(i=i.length>6?`${i.slice(0,3)}...`:i,r=r.length>6?`${r.slice(0,3)}...`:r,1==t.length||"("==t[1]){const e=t[0]?.toUpperCase();return e in n?[n.get(e),e,r,1]:[this.undefinedColor,i,r,1]}if("d"==t[0]&&t[1]in n&&(2==t.length||"("==t[2])){const e=t[1]?.toUpperCase();return e in n?[n.get(e),e,r,2]:[this.undefinedColor,i,r,2]}if(t.substring(0,3)in this.AAFullNames&&(3==t.length||"("==t[3])){const e=this.AAFullNames[t.substring(0,3)];return e in n?[n.get(e),e,r,3]:[this.undefinedColor,i,r,3]}if(t[0]?.toLowerCase()==t[0]&&t.substring(1,3)in this.AAFullNames&&(4==t.length||"("==t[4])){const e=this.AAFullNames[t.substring(1,3)];return e in n?[n.get(e),e,r,4]:[this.undefinedColor,i,r,4]}return[this.undefinedColor,i,r,0]}}o.SemType="Aminoacids",o.SemTypeMultipleAlignment="AminoacidsMultipleAlignment",o.undefinedColor="rgb(100,100,100)",o.Names={G:"Glycine",L:"Leucine",Y:"Tyrosine",S:"Serine",E:"Glutamic acid",Q:"Glutamine",D:"Aspartic acid",N:"Asparagine",F:"Phenylalanine",A:"Alanine",K:"Lysine",R:"Arginine",H:"Histidine",C:"Cysteine",V:"Valine",P:"Proline",W:"Tryptophan",I:"Isoleucine",M:"Methionine",T:"Threonine"},o.AASmiles={G:"NCC(=O)O",L:"N[C@H](CC(C)C)C(=O)O",Y:"NC(CC1=CC=C(O)C=C1)C(=O)O",S:"NC(CO)C(=O)O",E:"N[C@@H](CCC(O)=O)C(=O)O",Q:"N[C@@H](CCC(N)=O)C(=O)O",D:"N[C@@H](CC(O)=O)C(=O)O",N:"N[C@@H](CC(N)=O)C(=O)O",F:"NC(CC1=CC=CC=C1)C(=O)O",A:"N[C@H](C)C(=O)O",K:"NC(CCCCN)C(=O)O",R:"N[C@H](CCCNC(=N)C)C(=O)O",H:"NC(CC1=CN=C[N]1)C(=O)O",C:"N[C@@H](CS)C(=O)O",V:"NC(C(C)C)C(=O)O",P:"N(CCC1)C1C(=O)O",W:"N[C@@H](Cc1c2ccccc2n([H])c1)C(=O)O",I:"N[C@H]([C@H](C)CC)C(=O)O",M:"NC(CCSC)C(=O)O",T:"NC(C(O)C)C(=O)O"},o.AASmilesTruncated={G:"*C*",L:"CC(C)C[C@H](*)*",Y:"C1=CC(=CC=C1CC(*)*)O",S:"OCC(*)C*",E:"*[C@@H](CCC(O)=O)*",Q:"*N[C@@H](CCC(N)=O)*",D:"*[C@@H](CC(O)=O)*",N:"*[C@@H](CC(N)=O)*",F:"C1=CC=C(C=C1)CC(*)*",A:"C[C@H](*)*",K:"C(CCN)CC(*)*",R:"*[C@H](CCCNC(=N)C)*",H:"C1=C(NC=N1)CC(*)*",C:"C([C@@H](*)*)S",V:"CC(C)C(*)*",P:"C1CCN(*)C1*",W:"*[C@@H](Cc1c2ccccc2n([H])c1)*",I:"CC[C@H](C)[C@H](*)*",M:"CSCCC(*)*",T:"CC(O)C(*)*"},o.AAFullNames={Ala:"A",Arg:"R",Asn:"N",Asp:"D",Cys:"C",Gln:"Q",Glu:"E",Gly:"G",His:"H",Ile:"I",Leu:"L",Lys:"K",Met:"M",Phe:"F",Pro:"P",Ser:"S",Thr:"T",Trp:"W",Tyr:"Y",Val:"V"}},6717:(t,e,n)=>{"use strict";n.d(e,{j:()=>r});var i=n(6082);async function r(){const t=i.Func.find({package:"Chem",name:"getRdKitModule"});if(0===t.length)throw new Error('Package "Chem" must be installed for getRdKitModule.');return(await t[0].prepare().call()).getOutputParamValue()}},3599:(t,e,n)=>{"use strict";n.d(e,{o:()=>i.o});var i=n(6869)},9124:(t,e,n)=>{"use strict";n.d(e,{b2:()=>o,fA:()=>s});var i=n(7389),r=n(6082);async function o(){const t="Helm",e=r.Func.find({package:t,name:"getHelmHelper"});if(0===e.length)throw new Error(`Package '${t}' must be installed for HelmHelper.`);return(await e[0].prepare().call()).getOutputParamValue()}function s(t,e){if(!t)throw new Error("Argument 'a' of type Atom or HelmType is mandatory.");let n,i;const r=t;return"ATOM"===r.T?(n=r.biotype(),i=r.elem):(n=t,i=e),[n,i]}r.JsInputBase,Error,i.input.helmAsync=async function(t,e){return(await o()).createHelmInput(t,e)}},8438:(t,e,n)=>{"use strict";function i(t){return t.startsWith("[")&&t.endsWith("]")?t.slice(1,-1):t}n.d(e,{D:()=>i})},8123:(t,e,n)=>{"use strict";n.d(e,{u:()=>i});const i={V2K_RGP_SHIFT:8,V2K_RGP_LINE:"M RGP",V2K_A_LINE:"A ",V3K_COUNTS_SHIFT:14,V3K_IDX_SHIFT:7,V3K_HEADER_FIRST_LINE:"\nDatagrok macromolecule handler\n\n",V3K_HEADER_SECOND_LINE:" 0 0 0 0 0 0 999 V3000\n",V3K_BEGIN_CTAB_BLOCK:"M V30 BEGIN CTAB\n",V3K_END_CTAB_BLOCK:"M V30 END CTAB\n",V3K_BEGIN_COUNTS_LINE:"M V30 COUNTS ",V3K_COUNTS_LINE_ENDING:" 0 0 0\n",V3K_BEGIN_ATOM_BLOCK:"M V30 BEGIN ATOM\n",V3K_END_ATOM_BLOCK:"M V30 END ATOM\n",V3K_BEGIN_BOND_BLOCK:"M V30 BEGIN BOND\n",V3K_END_BOND_BLOCK:"M V30 END BOND\n",V3K_BOND_CONFIG:" CFG=",V3K_BEGIN_DATA_LINE:"M V30 ",V3K_END:"M END",PRECISION_FACTOR:1e4,DEOXYRIBOSE:{polymerType:"RNA",symbol:"d"},RIBOSE:{polymerType:"RNA",symbol:"r"},PHOSPHATE:{polymerType:"RNA",symbol:"p"},OXYGEN:"O",HYDROGEN:"H"}},4356:(t,e,n)=>{"use strict";n.d(e,{Eu:()=>a,ub:()=>s});var i=n(4328);const r="Libraries";let o=Promise.resolve();async function s(){let t;return o=o.then((async()=>{const e=i.userSettings.getValue(r,"Settings",!0);t=e?JSON.parse(e):{exclude:[],explicit:[],duplicateMonomerPreferences:{}},t.exclude=t.exclude instanceof Array?t.exclude:[],t.explicit=t.explicit instanceof Array?t.explicit:[],t.duplicateMonomerPreferences=t.duplicateMonomerPreferences instanceof Object?t.duplicateMonomerPreferences:{},console.debug(`Bio: getUserLibSettings()\n${JSON.stringify(t,void 0,2)}`)})),await o,t}async function a(t){o=o.then((async()=>{console.debug(`Bio: setUserLibSettings()\n${JSON.stringify(t,void 0,2)}`),i.userSettings.add(r,"Settings",JSON.stringify(t),!0)})),await o}},5553:(t,e,n)=>{"use strict";n.d(e,{Qc:()=>A,WN:()=>S});var i=n(1991),r=n.n(i);const o="object"==typeof performance&&performance&&"function"==typeof performance.now?performance:Date,s=new Set,a="object"==typeof process&&process?process:{},l=(t,e,n,i)=>{"function"==typeof a.emitWarning?a.emitWarning(t,e,n,i):console.error(`[${n}] ${e}: ${t}`)};let c=globalThis.AbortController,h=globalThis.AbortSignal;if(void 0===c){h=class{onabort;_onabort=[];reason;aborted=!1;addEventListener(t,e){this._onabort.push(e)}},c=class{constructor(){e()}signal=new h;abort(t){if(!this.signal.aborted){this.signal.reason=t,this.signal.aborted=!0;for(const e of this.signal._onabort)e(t);this.signal.onabort?.(t)}}};let t="1"!==a.env?.LRU_CACHE_IGNORE_AC_WARNING;const e=()=>{t&&(t=!1,l("AbortController is not defined. If using lru-cache in node 14, load an AbortController polyfill from the `node-abort-controller` package. A minimal polyfill is provided for use by LRUCache.fetch(), but it should not be relied upon in other contexts (eg, passing it to other APIs that use AbortController/AbortSignal might have undesirable effects). You may disable this with LRU_CACHE_IGNORE_AC_WARNING=1 in the env.","NO_ABORT_CONTROLLER","ENOTSUP",e))}}Symbol("type");const u=t=>t&&t===Math.floor(t)&&t>0&&isFinite(t),d=t=>u(t)?t<=Math.pow(2,8)?Uint8Array:t<=Math.pow(2,16)?Uint16Array:t<=Math.pow(2,32)?Uint32Array:t<=Number.MAX_SAFE_INTEGER?p:null:null;class p extends Array{constructor(t){super(t),this.fill(0)}}class m{heap;length;static#t=!1;static create(t){const e=d(t);if(!e)return[];m.#t=!0;const n=new m(t,e);return m.#t=!1,n}constructor(t,e){if(!m.#t)throw new TypeError("instantiate Stack using Stack.create(n)");this.heap=new e(t),this.length=0}push(t){this.heap[this.length++]=t}pop(){return this.heap[--this.length]}}class f{#e;#n;#i;#r;#o;#s;ttl;ttlResolution;ttlAutopurge;updateAgeOnGet;updateAgeOnHas;allowStale;noDisposeOnSet;noUpdateTTL;maxEntrySize;sizeCalculation;noDeleteOnFetchRejection;noDeleteOnStaleGet;allowStaleOnFetchAbort;allowStaleOnFetchRejection;ignoreFetchAbort;#a;#l;#c;#h;#u;#d;#p;#m;#f;#g;#y;#b;#v;#w;#C;#A;#S;static unsafeExposeInternals(t){return{starts:t.#v,ttls:t.#w,sizes:t.#b,keyMap:t.#c,keyList:t.#h,valList:t.#u,next:t.#d,prev:t.#p,get head(){return t.#m},get tail(){return t.#f},free:t.#g,isBackgroundFetch:e=>t.#x(e),backgroundFetch:(e,n,i,r)=>t.#E(e,n,i,r),moveToTail:e=>t.#M(e),indexes:e=>t.#_(e),rindexes:e=>t.#I(e),isStale:e=>t.#T(e)}}get max(){return this.#e}get maxSize(){return this.#n}get calculatedSize(){return this.#l}get size(){return this.#a}get fetchMethod(){return this.#o}get memoMethod(){return this.#s}get dispose(){return this.#i}get disposeAfter(){return this.#r}constructor(t){const{max:e=0,ttl:n,ttlResolution:i=1,ttlAutopurge:r,updateAgeOnGet:o,updateAgeOnHas:a,allowStale:c,dispose:h,disposeAfter:p,noDisposeOnSet:g,noUpdateTTL:y,maxSize:b=0,maxEntrySize:v=0,sizeCalculation:w,fetchMethod:C,memoMethod:A,noDeleteOnFetchRejection:S,noDeleteOnStaleGet:x,allowStaleOnFetchRejection:E,allowStaleOnFetchAbort:M,ignoreFetchAbort:_}=t;if(0!==e&&!u(e))throw new TypeError("max option must be a nonnegative integer");const I=e?d(e):Array;if(!I)throw new Error("invalid max value: "+e);if(this.#e=e,this.#n=b,this.maxEntrySize=v||this.#n,this.sizeCalculation=w,this.sizeCalculation){if(!this.#n&&!this.maxEntrySize)throw new TypeError("cannot set sizeCalculation without setting maxSize or maxEntrySize");if("function"!=typeof this.sizeCalculation)throw new TypeError("sizeCalculation set to non-function")}if(void 0!==A&&"function"!=typeof A)throw new TypeError("memoMethod must be a function if defined");if(this.#s=A,void 0!==C&&"function"!=typeof C)throw new TypeError("fetchMethod must be a function if specified");if(this.#o=C,this.#A=!!C,this.#c=new Map,this.#h=new Array(e).fill(void 0),this.#u=new Array(e).fill(void 0),this.#d=new I(e),this.#p=new I(e),this.#m=0,this.#f=0,this.#g=m.create(e),this.#a=0,this.#l=0,"function"==typeof h&&(this.#i=h),"function"==typeof p?(this.#r=p,this.#y=[]):(this.#r=void 0,this.#y=void 0),this.#C=!!this.#i,this.#S=!!this.#r,this.noDisposeOnSet=!!g,this.noUpdateTTL=!!y,this.noDeleteOnFetchRejection=!!S,this.allowStaleOnFetchRejection=!!E,this.allowStaleOnFetchAbort=!!M,this.ignoreFetchAbort=!!_,0!==this.maxEntrySize){if(0!==this.#n&&!u(this.#n))throw new TypeError("maxSize must be a positive integer if specified");if(!u(this.maxEntrySize))throw new TypeError("maxEntrySize must be a positive integer if specified");this.#L()}if(this.allowStale=!!c,this.noDeleteOnStaleGet=!!x,this.updateAgeOnGet=!!o,this.updateAgeOnHas=!!a,this.ttlResolution=u(i)||0===i?i:1,this.ttlAutopurge=!!r,this.ttl=n||0,this.ttl){if(!u(this.ttl))throw new TypeError("ttl must be a positive integer if specified");this.#N()}if(0===this.#e&&0===this.ttl&&0===this.#n)throw new TypeError("At least one of max, maxSize, or ttl is required");if(!this.ttlAutopurge&&!this.#e&&!this.#n){const t="LRU_CACHE_UNBOUNDED";(t=>!s.has(t))(t)&&(s.add(t),l("TTL caching without ttlAutopurge, max, or maxSize can result in unbounded memory consumption.","UnboundedCacheWarning",t,f))}}getRemainingTTL(t){return this.#c.has(t)?1/0:0}#N(){const t=new p(this.#e),e=new p(this.#e);this.#w=t,this.#v=e,this.#P=(n,i,r=o.now())=>{if(e[n]=0!==i?r:0,t[n]=i,0!==i&&this.ttlAutopurge){const t=setTimeout((()=>{this.#T(n)&&this.#$(this.#h[n],"expire")}),i+1);t.unref&&t.unref()}},this.#R=n=>{e[n]=0!==t[n]?o.now():0},this.#O=(r,o)=>{if(t[o]){const s=t[o],a=e[o];if(!s||!a)return;r.ttl=s,r.start=a,r.now=n||i();const l=r.now-a;r.remainingTTL=s-l}};let n=0;const i=()=>{const t=o.now();if(this.ttlResolution>0){n=t;const e=setTimeout((()=>n=0),this.ttlResolution);e.unref&&e.unref()}return t};this.getRemainingTTL=r=>{const o=this.#c.get(r);if(void 0===o)return 0;const s=t[o],a=e[o];return s&&a?s-((n||i())-a):1/0},this.#T=r=>{const o=e[r],s=t[r];return!!s&&!!o&&(n||i())-o>s}}#R=()=>{};#O=()=>{};#P=()=>{};#T=()=>!1;#L(){const t=new p(this.#e);this.#l=0,this.#b=t,this.#k=e=>{this.#l-=t[e],t[e]=0},this.#G=(t,e,n,i)=>{if(this.#x(e))return 0;if(!u(n)){if(!i)throw new TypeError("invalid size value (must be positive integer). When maxSize or maxEntrySize is used, sizeCalculation or size must be set.");if("function"!=typeof i)throw new TypeError("sizeCalculation must be a function");if(n=i(e,t),!u(n))throw new TypeError("sizeCalculation return invalid (expect positive integer)")}return n},this.#F=(e,n,i)=>{if(t[e]=n,this.#n){const n=this.#n-t[e];for(;this.#l>n;)this.#H(!0)}this.#l+=t[e],i&&(i.entrySize=n,i.totalCalculatedSize=this.#l)}}#k=t=>{};#F=(t,e,n)=>{};#G=(t,e,n,i)=>{if(n||i)throw new TypeError("cannot set size without setting maxSize or maxEntrySize on cache");return 0};*#_({allowStale:t=this.allowStale}={}){if(this.#a)for(let e=this.#f;this.#B(e)&&(!t&&this.#T(e)||(yield e),e!==this.#m);)e=this.#p[e]}*#I({allowStale:t=this.allowStale}={}){if(this.#a)for(let e=this.#m;this.#B(e)&&(!t&&this.#T(e)||(yield e),e!==this.#f);)e=this.#d[e]}#B(t){return void 0!==t&&this.#c.get(this.#h[t])===t}*entries(){for(const t of this.#_())void 0===this.#u[t]||void 0===this.#h[t]||this.#x(this.#u[t])||(yield[this.#h[t],this.#u[t]])}*rentries(){for(const t of this.#I())void 0===this.#u[t]||void 0===this.#h[t]||this.#x(this.#u[t])||(yield[this.#h[t],this.#u[t]])}*keys(){for(const t of this.#_()){const e=this.#h[t];void 0===e||this.#x(this.#u[t])||(yield e)}}*rkeys(){for(const t of this.#I()){const e=this.#h[t];void 0===e||this.#x(this.#u[t])||(yield e)}}*values(){for(const t of this.#_())void 0===this.#u[t]||this.#x(this.#u[t])||(yield this.#u[t])}*rvalues(){for(const t of this.#I())void 0===this.#u[t]||this.#x(this.#u[t])||(yield this.#u[t])}[Symbol.iterator](){return this.entries()}[Symbol.toStringTag]="LRUCache";find(t,e={}){for(const n of this.#_()){const i=this.#u[n],r=this.#x(i)?i.__staleWhileFetching:i;if(void 0!==r&&t(r,this.#h[n],this))return this.get(this.#h[n],e)}}forEach(t,e=this){for(const n of this.#_()){const i=this.#u[n],r=this.#x(i)?i.__staleWhileFetching:i;void 0!==r&&t.call(e,r,this.#h[n],this)}}rforEach(t,e=this){for(const n of this.#I()){const i=this.#u[n],r=this.#x(i)?i.__staleWhileFetching:i;void 0!==r&&t.call(e,r,this.#h[n],this)}}purgeStale(){let t=!1;for(const e of this.#I({allowStale:!0}))this.#T(e)&&(this.#$(this.#h[e],"expire"),t=!0);return t}info(t){const e=this.#c.get(t);if(void 0===e)return;const n=this.#u[e],i=this.#x(n)?n.__staleWhileFetching:n;if(void 0===i)return;const r={value:i};if(this.#w&&this.#v){const t=this.#w[e],n=this.#v[e];if(t&&n){const e=t-(o.now()-n);r.ttl=e,r.start=Date.now()}}return this.#b&&(r.size=this.#b[e]),r}dump(){const t=[];for(const e of this.#_({allowStale:!0})){const n=this.#h[e],i=this.#u[e],r=this.#x(i)?i.__staleWhileFetching:i;if(void 0===r||void 0===n)continue;const s={value:r};if(this.#w&&this.#v){s.ttl=this.#w[e];const t=o.now()-this.#v[e];s.start=Math.floor(Date.now()-t)}this.#b&&(s.size=this.#b[e]),t.unshift([n,s])}return t}load(t){this.clear();for(const[e,n]of t){if(n.start){const t=Date.now()-n.start;n.start=o.now()-t}this.set(e,n.value,n)}}set(t,e,n={}){if(void 0===e)return this.delete(t),this;const{ttl:i=this.ttl,start:r,noDisposeOnSet:o=this.noDisposeOnSet,sizeCalculation:s=this.sizeCalculation,status:a}=n;let{noUpdateTTL:l=this.noUpdateTTL}=n;const c=this.#G(t,e,n.size||0,s);if(this.maxEntrySize&&c>this.maxEntrySize)return a&&(a.set="miss",a.maxEntrySizeExceeded=!0),this.#$(t,"set"),this;let h=0===this.#a?void 0:this.#c.get(t);if(void 0===h)h=0===this.#a?this.#f:0!==this.#g.length?this.#g.pop():this.#a===this.#e?this.#H(!1):this.#a,this.#h[h]=t,this.#u[h]=e,this.#c.set(t,h),this.#d[this.#f]=h,this.#p[h]=this.#f,this.#f=h,this.#a++,this.#F(h,c,a),a&&(a.set="add"),l=!1;else{this.#M(h);const n=this.#u[h];if(e!==n){if(this.#A&&this.#x(n)){n.__abortController.abort(new Error("replaced"));const{__staleWhileFetching:e}=n;void 0===e||o||(this.#C&&this.#i?.(e,t,"set"),this.#S&&this.#y?.push([e,t,"set"]))}else o||(this.#C&&this.#i?.(n,t,"set"),this.#S&&this.#y?.push([n,t,"set"]));if(this.#k(h),this.#F(h,c,a),this.#u[h]=e,a){a.set="replace";const t=n&&this.#x(n)?n.__staleWhileFetching:n;void 0!==t&&(a.oldValue=t)}}else a&&(a.set="update")}if(0===i||this.#w||this.#N(),this.#w&&(l||this.#P(h,i,r),a&&this.#O(a,h)),!o&&this.#S&&this.#y){const t=this.#y;let e;for(;e=t?.shift();)this.#r?.(...e)}return this}pop(){try{for(;this.#a;){const t=this.#u[this.#m];if(this.#H(!0),this.#x(t)){if(t.__staleWhileFetching)return t.__staleWhileFetching}else if(void 0!==t)return t}}finally{if(this.#S&&this.#y){const t=this.#y;let e;for(;e=t?.shift();)this.#r?.(...e)}}}#H(t){const e=this.#m,n=this.#h[e],i=this.#u[e];return this.#A&&this.#x(i)?i.__abortController.abort(new Error("evicted")):(this.#C||this.#S)&&(this.#C&&this.#i?.(i,n,"evict"),this.#S&&this.#y?.push([i,n,"evict"])),this.#k(e),t&&(this.#h[e]=void 0,this.#u[e]=void 0,this.#g.push(e)),1===this.#a?(this.#m=this.#f=0,this.#g.length=0):this.#m=this.#d[e],this.#c.delete(n),this.#a--,e}has(t,e={}){const{updateAgeOnHas:n=this.updateAgeOnHas,status:i}=e,r=this.#c.get(t);if(void 0!==r){const t=this.#u[r];if(this.#x(t)&&void 0===t.__staleWhileFetching)return!1;if(!this.#T(r))return n&&this.#R(r),i&&(i.has="hit",this.#O(i,r)),!0;i&&(i.has="stale",this.#O(i,r))}else i&&(i.has="miss");return!1}peek(t,e={}){const{allowStale:n=this.allowStale}=e,i=this.#c.get(t);if(void 0===i||!n&&this.#T(i))return;const r=this.#u[i];return this.#x(r)?r.__staleWhileFetching:r}#E(t,e,n,i){const r=void 0===e?void 0:this.#u[e];if(this.#x(r))return r;const o=new c,{signal:s}=n;s?.addEventListener("abort",(()=>o.abort(s.reason)),{signal:o.signal});const a={signal:o.signal,options:n,context:i},l=(i,r=!1)=>{const{aborted:s}=o.signal,l=n.ignoreFetchAbort&&void 0!==i;if(n.status&&(s&&!r?(n.status.fetchAborted=!0,n.status.fetchError=o.signal.reason,l&&(n.status.fetchAbortIgnored=!0)):n.status.fetchResolved=!0),s&&!l&&!r)return h(o.signal.reason);const c=u;return this.#u[e]===u&&(void 0===i?c.__staleWhileFetching?this.#u[e]=c.__staleWhileFetching:this.#$(t,"fetch"):(n.status&&(n.status.fetchUpdated=!0),this.set(t,i,a.options))),i},h=i=>{const{aborted:r}=o.signal,s=r&&n.allowStaleOnFetchAbort,a=s||n.allowStaleOnFetchRejection,l=a||n.noDeleteOnFetchRejection,c=u;if(this.#u[e]===u&&(l&&void 0!==c.__staleWhileFetching?s||(this.#u[e]=c.__staleWhileFetching):this.#$(t,"fetch")),a)return n.status&&void 0!==c.__staleWhileFetching&&(n.status.returnedStale=!0),c.__staleWhileFetching;if(c.__returned===c)throw i};n.status&&(n.status.fetchDispatched=!0);const u=new Promise(((e,i)=>{const s=this.#o?.(t,r,a);s&&s instanceof Promise&&s.then((t=>e(void 0===t?void 0:t)),i),o.signal.addEventListener("abort",(()=>{n.ignoreFetchAbort&&!n.allowStaleOnFetchAbort||(e(void 0),n.allowStaleOnFetchAbort&&(e=t=>l(t,!0)))}))})).then(l,(t=>(n.status&&(n.status.fetchRejected=!0,n.status.fetchError=t),h(t)))),d=Object.assign(u,{__abortController:o,__staleWhileFetching:r,__returned:void 0});return void 0===e?(this.set(t,d,{...a.options,status:void 0}),e=this.#c.get(t)):this.#u[e]=d,d}#x(t){if(!this.#A)return!1;const e=t;return!!e&&e instanceof Promise&&e.hasOwnProperty("__staleWhileFetching")&&e.__abortController instanceof c}async fetch(t,e={}){const{allowStale:n=this.allowStale,updateAgeOnGet:i=this.updateAgeOnGet,noDeleteOnStaleGet:r=this.noDeleteOnStaleGet,ttl:o=this.ttl,noDisposeOnSet:s=this.noDisposeOnSet,size:a=0,sizeCalculation:l=this.sizeCalculation,noUpdateTTL:c=this.noUpdateTTL,noDeleteOnFetchRejection:h=this.noDeleteOnFetchRejection,allowStaleOnFetchRejection:u=this.allowStaleOnFetchRejection,ignoreFetchAbort:d=this.ignoreFetchAbort,allowStaleOnFetchAbort:p=this.allowStaleOnFetchAbort,context:m,forceRefresh:f=!1,status:g,signal:y}=e;if(!this.#A)return g&&(g.fetch="get"),this.get(t,{allowStale:n,updateAgeOnGet:i,noDeleteOnStaleGet:r,status:g});const b={allowStale:n,updateAgeOnGet:i,noDeleteOnStaleGet:r,ttl:o,noDisposeOnSet:s,size:a,sizeCalculation:l,noUpdateTTL:c,noDeleteOnFetchRejection:h,allowStaleOnFetchRejection:u,allowStaleOnFetchAbort:p,ignoreFetchAbort:d,status:g,signal:y};let v=this.#c.get(t);if(void 0===v){g&&(g.fetch="miss");const e=this.#E(t,v,b,m);return e.__returned=e}{const e=this.#u[v];if(this.#x(e)){const t=n&&void 0!==e.__staleWhileFetching;return g&&(g.fetch="inflight",t&&(g.returnedStale=!0)),t?e.__staleWhileFetching:e.__returned=e}const r=this.#T(v);if(!f&&!r)return g&&(g.fetch="hit"),this.#M(v),i&&this.#R(v),g&&this.#O(g,v),e;const o=this.#E(t,v,b,m),s=void 0!==o.__staleWhileFetching&&n;return g&&(g.fetch=r?"stale":"refresh",s&&r&&(g.returnedStale=!0)),s?o.__staleWhileFetching:o.__returned=o}}async forceFetch(t,e={}){const n=await this.fetch(t,e);if(void 0===n)throw new Error("fetch() returned undefined");return n}memo(t,e={}){const n=this.#s;if(!n)throw new Error("no memoMethod provided to constructor");const{context:i,forceRefresh:r,...o}=e,s=this.get(t,o);if(!r&&void 0!==s)return s;const a=n(t,s,{options:o,context:i});return this.set(t,a,o),a}get(t,e={}){const{allowStale:n=this.allowStale,updateAgeOnGet:i=this.updateAgeOnGet,noDeleteOnStaleGet:r=this.noDeleteOnStaleGet,status:o}=e,s=this.#c.get(t);if(void 0!==s){const e=this.#u[s],a=this.#x(e);return o&&this.#O(o,s),this.#T(s)?(o&&(o.get="stale"),a?(o&&n&&void 0!==e.__staleWhileFetching&&(o.returnedStale=!0),n?e.__staleWhileFetching:void 0):(r||this.#$(t,"expire"),o&&n&&(o.returnedStale=!0),n?e:void 0)):(o&&(o.get="hit"),a?e.__staleWhileFetching:(this.#M(s),i&&this.#R(s),e))}o&&(o.get="miss")}#D(t,e){this.#p[e]=t,this.#d[t]=e}#M(t){t!==this.#f&&(t===this.#m?this.#m=this.#d[t]:this.#D(this.#p[t],this.#d[t]),this.#D(this.#f,t),this.#f=t)}delete(t){return this.#$(t,"delete")}#$(t,e){let n=!1;if(0!==this.#a){const i=this.#c.get(t);if(void 0!==i)if(n=!0,1===this.#a)this.#V(e);else{this.#k(i);const n=this.#u[i];if(this.#x(n)?n.__abortController.abort(new Error("deleted")):(this.#C||this.#S)&&(this.#C&&this.#i?.(n,t,e),this.#S&&this.#y?.push([n,t,e])),this.#c.delete(t),this.#h[i]=void 0,this.#u[i]=void 0,i===this.#f)this.#f=this.#p[i];else if(i===this.#m)this.#m=this.#d[i];else{const t=this.#p[i];this.#d[t]=this.#d[i];const e=this.#d[i];this.#p[e]=this.#p[i]}this.#a--,this.#g.push(i)}}if(this.#S&&this.#y?.length){const t=this.#y;let e;for(;e=t?.shift();)this.#r?.(...e)}return n}clear(){return this.#V("delete")}#V(t){for(const e of this.#I({allowStale:!0})){const n=this.#u[e];if(this.#x(n))n.__abortController.abort(new Error("deleted"));else{const i=this.#h[e];this.#C&&this.#i?.(n,i,t),this.#S&&this.#y?.push([n,i,t])}}if(this.#c.clear(),this.#u.fill(void 0),this.#h.fill(void 0),this.#w&&this.#v&&(this.#w.fill(0),this.#v.fill(0)),this.#b&&this.#b.fill(0),this.#m=0,this.#f=0,this.#g.length=0,this.#l=0,this.#a=0,this.#S&&this.#y){const t=this.#y;let e;for(;e=t?.shift();)this.#r?.(...e)}}}function g(t){window.$monomerHover=t}var y=n(2003),b=n(6077),v=n(3561),w=n(9235);const C="MonomerHoverLinks";async function A(t,e,n,i,o,s=!1){const a=i.getSeqHandler(t),l=a.alphabet==y.YI.RNA||a.alphabet==y.YI.DNA,c=a.isHelm()&&l,h=!a.isHelm()&&l,u=t=>null==t?null:c?s?t:Math.floor(t/3):h&&s?3*t+1:t,d=s?await i.getHelmToMolfileConverter(n):null,p=new f({max:100});function m(t,e){const a=t.get(e);if(null==a)return null;let l=p.get(a);return l||p.set(a,l=function(t,e){const a=i.getSeqHandler(t);if(s){const t=a.getHelm(e);return i.helmToAtomicLevelSingle(t,d,!1,!1).monomers}{const t=a.getSplitted(e),i=a.defaultBiotype,s=r().count(0).take(t.length).map((e=>({position:e,symbol:t.getCanonical(e),biotype:i}))).toArray(),l=a.alphabet,c=l==y.YI.RNA||l==y.YI.DNA?"RNA":"PEPTIDE",h=(0,b.eM)([s],c,l,n,o);return(0,v.gU)(s,h,l,c).monomers}}(t,e)),l}const A={targetCol:e,handler:(e,i,r)=>{const o=r.grid,s=e.tableRowIndex,a=e.gridRow,l=o.cell(r.name,a),c=null!==(h=window.$monomerHover)&&void 0!==h?h:null;var h;if(!c||c&&(c.dataFrameId!=t.dataFrame.id||c.gridRowIdx!=a||c.seqColName!=t.name||c.seqPosition!=i?.position)){if(c&&(g(null),c.gridCell.render()),!i)return g(null),!0;g({gridCell:l,dataFrameId:t.dataFrame.id,gridRowIdx:a,seqColName:t.name,seqPosition:u(i?.position)??-1,getSubstruct:()=>{if(!i||"*"===i.symbol)return;const e=m(t,s);if(!e)return;const r=e.get(u(i?.position));return r?(0,w.H)([r],n):{atoms:[],bonds:[],highlightAtomColors:[],highlightBondColors:[]}}}),l.render()}return!0},getSubstruct:i=>{if("true"!=e.getTag(".sequence-src-highlight-monomers"))return;if(null==i)return;if(!t.get(i))return;const r=m(t,i);return r?(0,w.H)(r.values(),n):void 0}};return function(t,e){let n=t[C];n||(n=t[C]=[]),n.push(e),t[C]=n}(t.temp,A),function(t,e){let n=t["substruct-providers"];n||(n=t["substruct-providers"]=[]),n.push(e),t["substruct-providers"]=n}(e.temp,A),A}function S(t,e){try{const n=t.tableColumn;if(!n)return;const i=function(t){return t.temp[C]??[]}(n);for(let n=i.length-1;n>=0;--n){const r=i[n],o=t.grid.col(r.targetCol.name);if(o&&!r.handler(t,e,o))break}}catch(t){console.error(t)}}},6718:(t,e,n)=>{"use strict";n.d(e,{A7:()=>p,pj:()=>h,uL:()=>u,uX:()=>c});var i=n(6082),r=n(4328),o=n(6295),s=n(3151),a=n(3077),l=n(439);function c(t){const e=[];for(let n=0;n<t.rowCount;n++){const i={};Object.keys(s.Ec).forEach((e=>{if("symbol"===e){const r=t.get(s.Ec[e],n);i[e]="."===r?t.get(s.yw,n):r}else if("rgroups"===e){const r=t.get(s.Ec[e],n).split("\n"),o=[];r.forEach((t=>{const e={},n=t.substring(t.lastIndexOf("]")+1),i=t.match(/\[R(\d+)\]/)[1];e.capGroupSmiles="H"===n?`[*:${i}][H]`:`O[*:${i}]`,e.alternateId="H"===n?`R${i}-H`:`R${i}-OH`,e.capGroupName="H"===n?"H":"OH",e.label=`R${i}`,o.push(e)})),i[e]=o}else s.Ec[e]&&(i[e]=t.get(s.Ec[e],n))})),i.author??(i.author=""),i.id??(i.id=0),i.smiles??(i.smiles=""),i.monomerType??(i.monomerType="Backbone"),i.createDate??(i.createDate=null),e.push(i)}return e}async function h(){const t=i.Func.find({package:"Bio",name:"getMonomerLibHelper"});if(0===t.length)throw new Error('Package "Bio" must be installed for MonomerLibHelper.');return(await t[0].prepare().call()).getOutputParamValue()}async function u(t,e,n){t instanceof i.Column&&(t=(0,a.R)(t,n).columns.toList());const o=(await h()).getMonomerLib(),s=new Array(t.length),c=t[0].length,u=new Float32Array(c);for(let n=0;n<t.length;++n){const a=n<e.length?e.getCanonical(n):l._S,h=o.getMonomer("PEPTIDE",a)?.smiles??"",d=t[n],p=d.getRawData(),m=d.categories,f=m.indexOf("");if(s[n]={categories:m,data:p,emptyIndex:f},void 0===a)continue;const g=i.Column.fromStrings("smiles",m.map((t=>o.getMonomer("PEPTIDE",t)?.smiles??""))),y=(i.DataFrame.fromColumns([g]),await r.chem.getSimilarities(g,h)),b=y?y.getRawData():null;for(let t=0;t<c;++t){const e=p[t];a!==l._S&&e!==f?u[t]+=b[e]:a===l._S&&e===f&&(u[t]+=1)}}for(let n=0;n<u.length;++n){let r=u[n]/e.length;for(let o=0;o<t.length;++o){const t=s[o];if(o>=e.length&&t.data[n]!==t.emptyIndex||t.data[n]===t.emptyIndex&&o<e.length){r=i.FLOAT_NULL;break}}u[n]=r}return i.Column.fromFloat32Array("Similarity",u)}async function d(t){const e=(await h()).getMonomerLib(),n=[],o={},s=t.map((t=>e.getMonomer("PEPTIDE",t)?.smiles??"")),a=i.Column.fromStrings("smiles",s);for(let e=0;e<s.length;++e){o[t[e]]=e;const i=s[e],l=""===i?new Array(s.length).fill(0):(await r.chem.getSimilarities(a,i)).getRawData();l[e]=1,n[e]=Array.from(l)}return{scoringMatrix:n,alphabetIndexes:o}}async function p(t,e="Morgan"){const n=(await h()).getMonomerLib(),r=new Array(t.length).fill(0).map((()=>new Array(t.length).fill(0))),s={},a=t.map((t=>n.getMonomer("PEPTIDE",t)?.molfile||n.getMonomer("PEPTIDE",t)?.smiles||"")),l=i.Func.find({package:"Chem",name:"getFingerprints"})[0];if(!l)return console.warn('Function "Chem:getFingerprints" is not found in chem package. falling back to Morgan fingerprints'),await d(t);const c=i.Column.fromStrings("smiles",a),u=(i.DataFrame.fromColumns([c]),(await l.apply({col:c,fingerprintType:e}))?.entries);if(!u)return console.warn(`${e} Fingerprints could not be calculated for monomers from chem package.\n falling back to Morgan fingerprints`),await d(t);for(let e=0;e<u.length;++e)if(r[e][e]=1,s[t[e]]=e,u[e])for(let t=e+1;t<u.length;++t)u[t]&&(r[e][t]=r[t][e]=(0,o.$1)(u[e],u[t]));return{scoringMatrix:r,alphabetIndexes:s}}},6197:(t,e,n)=>{"use strict";n.d(e,{Y:()=>r});var i=n(3599);function r(t){let e;switch(t){case i.o.BASE:case i.o.SUGAR:case i.o.LINKER:case i.o.NUCLEOTIDE:case"nucleotide":e="RNA";break;case i.o.AA:e="PEPTIDE";break;case i.o.CHEM:e="CHEM";break;case i.o.BLOB:e="BLOB";break;default:e="PEPTIDE",console.warn(`Unexpected HelmType '${t}'`)}return e}},9235:(t,e,n)=>{"use strict";n.d(e,{H:()=>c,R:()=>l});var i=n(6082),r=n(1991),o=n.n(r),s=n(330),a=n(3599);async function l(t,e,r,l,c,h,u){const d=t.length,p=t.dataFrame,m=Math.max(navigator.hardwareConcurrency-2,1),f=new Array(m).fill(null).map((()=>new Worker(new URL(n.p+n.u(455),n.b)))),g=d/m,y=new Array(m),b=h.getSeqHandler(t),v="RNA"==l?a.o.NUCLEOTIDE:a.o.AA,w=o().count(0).take(t.length).map((t=>{const e=b.getSplitted(t);return o().count(0).take(e.length).map((t=>({position:t,symbol:e.getCanonical(t),biotype:v}))).toArray()})).toArray();for(let t=0;t<m;t++){const n=f[t],i=Math.floor(t*g),o=t===m-1?d:Math.floor((t+1)*g);y[t]=new Promise((t=>{n.onmessage=e=>{t(e.data)}})),n.postMessage({seqList:w,monomersDict:e,alphabet:r,polymerType:l,start:i,end:o})}const C=[],A=[];await Promise.all(y).then((t=>{for(const e of t)C.push(...e.molfiles),A.push(...e.warnings)})),setTimeout((()=>{f.forEach((t=>{t.terminate()}))}),0);const S=(0,s.qj)(p,t.name),x=i.Column.fromType(i.COLUMN_TYPE.STRING,S,t.length).init((t=>C[t]?.molfile));return x.semType=i.SEMTYPE.MOLECULE,x.meta.units=i.UNITS.Molecule.MOLBLOCK,x.setTag(".sequence-src-col",t.name),{molCol:x,warnings:A}}function c(t,e){const n={},r={};for(const o of t){const t=e.getWebEditorMonomer(o.biotype,o.symbol).backgroundcolor,a=(0,s.vG)(t??i.Color.toRgb(i.Color.mouseOverRows))??[1,0,0,.7];for(const t of o.atoms)n[t]=a;for(const t of o.bonds)r[t]=a}return{atoms:Object.keys(n).map((t=>parseInt(t))),bonds:Object.keys(r).map((t=>parseInt(t))),highlightAtomColors:n,highlightBondColors:r}}},3561:(t,e,n)=>{"use strict";n.d(e,{Hb:()=>l,YN:()=>f,gU:()=>c});var i=n(8123),r=n(294),o=n(3151),s=n(439),a=n(6197);function l(t,e,n){const r=new Map;for(const a of t.getMonomerSymbolsByType(e)){const l=t.getMonomer(e,a);if("RNA"===e&&("Branch"===l.monomerType||n===s.YI.DNA&&l.symbol===i.u.DEOXYRIBOSE.symbol||n===s.YI.RNA&&l.symbol===i.u.RIBOSE.symbol||l.symbol===i.u.PHOSPHATE.symbol)||"PEPTIDE"===e&&"Branch"!==l.monomerType){const t={};o.f6.forEach((e=>{t[e]=l[e]})),r.set(l.symbol,t)}}return r}function c(t,e,n,o){if(0===t.length)return r.vF.createEmpty();const l=m,{atomCount:c,bondCount:u,needsCapping:p}=l(t,e,n,o),g=new Array(c),y=new Array(u);let b,v=null,w=null;"PEPTIDE"===o?b=h:(b=d,v=n===s.YI.DNA?(0,r.xb)(e,i.u.DEOXYRIBOSE):(0,r.xb)(e,i.u.RIBOSE),w=(0,r.xb)(e,i.u.PHOSPHATE));const C={i:0,nodeShift:0,bondShift:0,backbonePositionShift:new Array(2).fill(0),branchPositionShift:new Array(2).fill(0),backboneAttachNode:0,branchAttachNode:0,flipFactor:1},A={sugar:v,phosphate:w,seqLength:t.length,atomCount:c,bondCount:u},S=new r.Cg,x=[];let E=0;for(C.i=0;C.i<A.seqLength;++C.i){const n=t[C.i];if(n.symbol===s._S)continue;const i=(0,r.xb)(e,{symbol:n.symbol,polymerType:(0,a.Y)(n.biotype)}),o=C.nodeShift,l=C.bondShift;b(i,g,y,C,A),i.stereoAtoms?.forEach((t=>x.push(t+E))),E+=i.atoms.x.length;const c=C.nodeShift-o,h=new Array(c);for(let t=0;t<c;++t)h[t]=o+t;const u=C.bondShift-l,d=new Array(u);for(let t=0;t<u;++t)d[t]=l+t;S.set(C.i,{biotype:n.biotype,symbol:n.symbol,atoms:h,bonds:d})}p&&function(t,e,n,r){const o=n.nodeShift+1;t[r.atomCount]=i.u.V3K_BEGIN_DATA_LINE+o+" "+i.u.OXYGEN+" "+f(n.backbonePositionShift[0])+" "+n.flipFactor*f(n.backbonePositionShift[1])+" 0.000000 0\n";const s=n.backboneAttachNode,a=o;e[r.bondCount]=i.u.V3K_BEGIN_DATA_LINE+n.bondShift+" 1 "+s+" "+a+"\n"}(g,y,C,A);const M=i.u.V3K_BEGIN_COUNTS_LINE+c+" "+u+i.u.V3K_COUNTS_LINE_ENDING;let _="";return _+=i.u.V3K_HEADER_FIRST_LINE,_+=i.u.V3K_HEADER_SECOND_LINE,_+=i.u.V3K_BEGIN_CTAB_BLOCK,_+=M,_+=i.u.V3K_BEGIN_ATOM_BLOCK,_+=g.join(""),_+=i.u.V3K_END_ATOM_BLOCK,_+=i.u.V3K_BEGIN_BOND_BLOCK,_+=y.join(""),_+=i.u.V3K_END_BOND_BLOCK,x.length>0&&(_+=function(t){const e=[];let n=`M V30 MDLV30/STEABS ATOMS=(${t.length}`;for(let i=0;i<t.length;i++){const r=`${n} ${t[i]}`;r.length>76?(e.push(`${n} -\n`),n=`M V30 ${t[i]}`):n=r,i===t.length-1&&e.push(`${n})\n`)}return`M V30 BEGIN COLLECTION\n${e.join("")}M V30 END COLLECTION\n`}(x)),_+=i.u.V3K_END_CTAB_BLOCK,_+=i.u.V3K_END,{molfile:_,monomers:S}}function h(t,e,n,i){i.flipFactor=(-1)**(i.i%2),u(t,e,n,i)}function u(t,e,n,r){!function(t,e,n){for(let r=0;r<t.atoms.atomTypes.length;++r){const o=n.nodeShift+r+1;e[n.nodeShift+r]=i.u.V3K_BEGIN_DATA_LINE+o+" "+t.atoms.atomTypes[r]+" "+f(n.backbonePositionShift[0]+t.atoms.x[r])+" "+f(n.backbonePositionShift[1]+n.flipFactor*t.atoms.y[r])+" "+t.atoms.kwargs[r]}}(t,e,r),p(t,n,r),function(t,e,n){if(0!==n.backboneAttachNode){const r=n.bondShift,o=n.backboneAttachNode,s=t.meta.terminalNodes[0]+n.nodeShift;e[n.bondShift-1]=i.u.V3K_BEGIN_DATA_LINE+r+" 1 "+o+" "+s+"\n"}}(t,n,r),null!==t.meta.branchShift&&t.meta.terminalNodes.length>2&&function(t,e){e.branchAttachNode=e.nodeShift+t.meta.terminalNodes[2];for(let n=0;n<2;++n)e.branchPositionShift[n]=e.backbonePositionShift[n]+t.meta.branchShift[n]}(t,r),function(t,e){e.backboneAttachNode=e.nodeShift+t.meta.terminalNodes[1],e.bondShift+=t.bonds.atomPairs.length+1,e.nodeShift+=t.atoms.atomTypes.length,e.backbonePositionShift[0]+=t.meta.backboneShift?.[0]??0,e.backbonePositionShift[1]+=e.flipFactor*(t.meta.backboneShift?.[1]??0)}(t,r)}function d(t,e,n,r,o){if(0===r.i)u(o.sugar,e,n,r);else for(const t of[o.phosphate,o.sugar])u(t,e,n,r);!function(t,e,n,r){(function(t,e,n){for(let r=0;r<t.atoms.atomTypes.length;++r){const o=n.nodeShift+r+1;e[n.nodeShift+r]=i.u.V3K_BEGIN_DATA_LINE+o+" "+t.atoms.atomTypes[r]+" "+f(n.branchPositionShift[0]+t.atoms.x[r])+" "+f(n.branchPositionShift[1]+n.flipFactor*t.atoms.y[r])+" "+t.atoms.kwargs[r]}})(t,e,r),p(t,n,r),function(t,e,n){const r=n.bondShift,o=n.branchAttachNode,s=t.meta.terminalNodes[0]+n.nodeShift;e[r-1]=i.u.V3K_BEGIN_DATA_LINE+r+" 1 "+o+" "+s+"\n"}(t,n,r);const o=r.bondShift,s=r.branchAttachNode,a=t.meta.terminalNodes[0]+r.nodeShift;n[o-1]=i.u.V3K_BEGIN_DATA_LINE+o+" 1 "+s+" "+a+"\n",r.bondShift+=t.bonds.atomPairs.length+1,r.nodeShift+=t.atoms.atomTypes.length}(t,e,n,r)}function p(t,e,n){for(let r=0;r<t.bonds.atomPairs.length;++r){const o=n.bondShift+r+1,s=t.bonds.atomPairs[r][0]+n.nodeShift,a=t.bonds.atomPairs[r][1]+n.nodeShift;let l="";if(t.bonds.bondConfiguration.has(r)){let e=t.bonds.bondConfiguration.get(r);n.flipFactor<0&&(e=1===e?3:1),l=" CFG="+e}const c=t.bonds.kwargs.has(r)?" "+t.bonds.kwargs.get(r):"";e[n.bondShift+r]=i.u.V3K_BEGIN_DATA_LINE+o+" "+t.bonds.bondTypes[r]+" "+s+" "+a+l+c+"\n"}}function m(t,e,n,o){let l=0,c=0,h=0,u=!0,d=null;for(const n of t)if(n.symbol!==s._S){if("*"==n.symbol)throw new Error("Gap canonical symbol is '', not '*");d=(0,r.xb)(e,{symbol:n.symbol,polymerType:(0,a.Y)(n.biotype)}),l+=d.atoms.x.length,c+=d.bonds.bondTypes.length,h++}if("PEPTIDE"===o)l+=1,c+=h,h>0&&(d?.meta?.rNodes?.length??0)<2&&(u=!1,l-=1,c-=1);else{const o=n===s.YI.DNA?(0,r.xb)(e,i.u.DEOXYRIBOSE):(0,r.xb)(e,i.u.RIBOSE),a=(0,r.xb)(e,i.u.PHOSPHATE);l+=(t.length-1)*a.atoms.x.length,l+=t.length*o.atoms.x.length,l+=1,c+=(t.length-1)*a.bonds.bondTypes.length,c+=t.length*o.bonds.bondTypes.length,c-=1,c+=3*t.length}return{atomCount:l,bondCount:c,needsCapping:u}}function f(t){return Math.round(i.u.PRECISION_FACTOR*t)/i.u.PRECISION_FACTOR}},6077:(t,e,n)=>{"use strict";n.d(e,{C4:()=>m,eM:()=>f});var i=n(4328),r=n(6082),o=n(1991),s=n.n(o),a=n(439),l=n(3561),c=n(9235),h=n(294),u=n(9192),d=n(330),p=n(8123);async function m(t,e,n,o,l){if(e.semType!==r.SEMTYPE.MACROMOLECULE)return{molCol:null,warnings:[`Only the ${r.SEMTYPE.MACROMOLECULE} columns can be converted to atomic level, the chosen column has semType '${e.semType}'`]};let h=e;const p=o.getSeqHandler(e);let m,g;p.notation!==a.Hi.SEPARATOR&&(h=p.convert(a.Hi.SEPARATOR,"."),h.name=e.name);try{g=o.getSeqHandler(h).alphabet,m=(0,d.pz)(g)}catch(t){const[e,n]=(0,u.AP)(t);return{molCol:null,warnings:[e]}}const y=function(t,e){const n=t.length,r=new Array(n),o=e.getSeqHandler(t);let a=!1;const l=o.defaultBiotype;for(let t=0;t<n;++t){const e=o.getSplitted(t);a||(a=0===e.length),r[t]=s().count(0).take(e.length).filter((t=>!e.isGap(t))).map((t=>({position:t,biotype:l,symbol:e.getCanonical(t)}))).toArray()}return a&&i.shell.warning(`Some values in the "${t.name}" column are empty`),r}(h,o),b=f(y,m,g,n,l),v=h.length,w=await(0,c.R)(h,b,g,m,n,o,l);return w.warnings.length>.05*v&&i.shell.warning(`Molfile conversion resulted in ${w.warnings.length} errors`),w}function f(t,e,n,i,r){const o=(0,l.Hb)(i,e,n),s={},c={value:null};if("RNA"===e){const t=n===a.YI.RNA?[p.u.RIBOSE,p.u.PHOSPHATE]:[p.u.DEOXYRIBOSE,p.u.PHOSPHATE];for(const n of t)g(s,n.symbol,o,r,e,c)}for(let n=0;n<t.length;++n){const i=t[n];for(const t of i){const n=t.symbol;if(""!==n)try{if("RNA"===e&&3===n.split(/\(|\)/).filter((t=>!!t)).length){const t=n.split(/\(|\)/)[1];g(s,t,o,r,e,c),s[e]?.[t]&&(s[e][n]=s[e][t])}else g(s,n,o,r,e,c)}catch(t){const e=t instanceof Error?t.message:t.toString(),i=t instanceof Error?t.stack:void 0;throw console.error(`bio lib: getMonomersDictFromLib() sym='${n}', error:\n${e}\n${i}`),new Error(`Can't get monomer '${n}' from library: ${e}`)}}}return s}function g(t,e,n,i,r,o){const s={polymerType:r,symbol:e};if(!(0,h.bq)(t,s)){const a=function(t,e,n,i,r){if(e.has(t)){const s=e.get(t),a=function(t){const e=[];for(const n of t){let t=n.capGroupSmiles;t||(t=n.capGroupSMILES),t=t.replace(/(\[|\]|\*|:|\d)/g,"").replace("OH","O").replace("Oh","O"),e.push(t)}return e}(s.rgroups),c=(o=s.molfile).includes("V3000")?function(t){const e=new Map,n=/M V30 (\d+) R#.+RGROUPS=\((\d+) (\d+)\).*/gm;let i;for(;null!==(i=n.exec(t));)i.index===n.lastIndex&&n.lastIndex++,e.set(parseInt(i[1]),parseInt(i[3]));return e}(o):function(t){const e=new Map;let n=t.indexOf(p.u.V2K_A_LINE,0),i=n;for(;-1!==n;){i=t.indexOf("\n",n);const r=parseInt(t.substring(n,i).replace(/^A\s+/,""));n=t.indexOf("R",i),i=t.indexOf("\n",n);const o=parseInt(t.substring(n,i).replace(/^R/,""));e.set(r,o),n=t.indexOf(p.u.V2K_A_LINE,i)}for(n=t.indexOf(p.u.V2K_RGP_LINE,0),i=t.indexOf("\n",n);-1!==n;){n+=p.u.V2K_RGP_SHIFT,i=t.indexOf("\n",n);const r=t.substring(n,i).replaceAll(/\s+/g," ").split(" ").map((t=>parseInt(t))).slice(1);for(let t=0;t<r.length;t+=2){if(e.has(r[t])&&e.get(r[t])!==r[t+1])throw new Error(`r-group index ${r[t]} has already been added with a different value`);e.set(r[t],r[t+1])}n=t.indexOf(p.u.V2K_RGP_LINE,i)}return e}(o),h=s.molfile.includes("V3000")?s.molfile:function(t,e){const n=e.get_mol(function(t){return t.split("\n").map((t=>{const e=t.indexOf(" R# "),n=t.indexOf(" R ");if(-1===e&&-1===n)return t;const i=-1!==e?e:n,r=t.split("");for(let t=i+5;t<r.length;t++)" "!==r[t]&&(r[t]="0");return r.join("")})).join("\n")}(t)),i=n.get_v3Kmolblock();return n.delete(),i}(function(t){let e=t.indexOf(p.u.V2K_A_LINE,0);-1===e&&(e=t.indexOf(p.u.V2K_RGP_LINE));const n=t.indexOf(p.u.V3K_END,e);return t.substring(0,e)+t.substring(n)}(s.molfile),n),u=function(t){let e=(t=t.replaceAll("\r","")).indexOf(p.u.V3K_BEGIN_COUNTS_LINE)+p.u.V3K_COUNTS_SHIFT,n=t.indexOf(" ",e+1);const i=parseInt(t.substring(e,n));return e=n+1,n=t.indexOf(" ",e+1),{atomCount:i,bondCount:parseInt(t.substring(e,n))}}(h),d=function(t,e){const n=new Array(e),i=new Float32Array(e),r=new Float32Array(e),o=new Array(e);let s=t.indexOf(p.u.V3K_BEGIN_ATOM_BLOCK);s=t.indexOf("\n",s);let a=s;for(let l=0;l<e;l++){s=t.indexOf(p.u.V3K_BEGIN_DATA_LINE,s)+p.u.V3K_IDX_SHIFT,a=t.indexOf(" ",s),s=a+1,a=t.indexOf(" ",s),n[l]=t.substring(s,a);const e=new Array(2);for(let n=0;n<2;++n)s=a+1,a=t.indexOf(" ",s),e[n]=parseFloat(t.substring(s,a));i[l]=e[0],r[l]=e[1],s=a,a=t.indexOf("\n",s)+1,o[l]=t.slice(s,a),s=a}return{atomTypes:n,x:i,y:r,kwargs:o}}(h,u.atomCount),m=function(t,e){const n=new Uint32Array(e),i=new Array(e),r=new Map,o=new Map;let s=t.indexOf(p.u.V3K_BEGIN_BOND_BLOCK);s=t.indexOf("\n",s);let a=s;for(let l=0;l<e;++l){const e=new Array(3);s=t.indexOf(p.u.V3K_BEGIN_DATA_LINE,a)+p.u.V3K_IDX_SHIFT,a=t.indexOf(" ",s);for(let n=0;n<3;++n)s=a+1,a=Math.min(t.indexOf("\n",s),t.indexOf(" ",s)),e[n]=parseInt(t.slice(s,a));n[l]=e[0],i[l]=e.slice(1);const c=t.indexOf("\n",s);let h=t.slice(a,c),u=h.indexOf(p.u.V3K_BOND_CONFIG);if(-1!==u){u=h.indexOf("=",u)+1;let t=h.indexOf(" ",u);-1===t&&(t=h.length);const e=parseInt(h.slice(u,t));r.set(l,e);const n=p.u.V3K_BOND_CONFIG+e.toString();h=h.replace(n,"")}h||o.set(l,h)}return{bondTypes:n,atomPairs:i,bondConfiguration:r,kwargs:o}}(h,u.bondCount),f=function(t,e,n,i){const r={backboneShift:null,branchShift:null,terminalNodes:[],rNodes:[]};return function(t,e,n){for(const[i,r]of n)t.atomTypes[i-1]=e[r-1]}(t,n,i),function(t,e){e.rNodes=Array.from(t.keys());for(let n=0;n<e.rNodes.length;n++)for(const i of[1,2])if(t.get(e.rNodes[n])===i){const t=e.rNodes[i-1];e.rNodes[i-1]=e.rNodes[n],e.rNodes[n]=t}}(i,r),y(e,r),r}(d,m,a,c),g=function(t){let e=[],n=t.indexOf("M V30 MDLV30/STEABS ATOMS=(");for(;-1!==n;){n+=28;const i=t.indexOf(")",n);e=e.concat(t.substring(n,i).split(" ").slice(1).map((t=>parseInt(t)))),n=i,n=t.indexOf("M V30 MDLV30/STEABS ATOMS=(",n)}return e}(h),v={atoms:d,bonds:m,meta:f,stereoAtoms:g};return"PEPTIDE"===i?function(t){const e=t.meta.terminalNodes[0]-1,n=t.meta.rNodes[0]-1,i=t.atoms.x,r=t.atoms.y;M(t,-i[e],-r[e]);const o=A(i[n],r[n]);S(t.atoms,-o),i[t.meta.rNodes[1]-1]<0&&x(t);const s=function(t){const e=function(t){const e=new Map;for(const n of t.bonds.atomPairs)for(let t=0;t<2;t++){const i=n[t],r=n[(t+1)%2];e.has(i)?e.get(i)?.push(r):e.set(i,new Array(1).fill(r))}return e}(t);let n=0;const i=t.atoms.atomTypes.length;let r=0;if(t.meta.terminalNodes.length<2)return null;for(;0===n;){const o=e.get(t.meta.terminalNodes[1])[r];if(t.atoms.atomTypes[o-1]===p.u.OXYGEN&&o!==t.meta.rNodes[1]&&(n=o),r++,r>i)return null}return n}(t);null!=s&&(function(t,e){t.atoms.y[t.meta.rNodes[1]-1]<0&&t.atoms.y[e-1]<0&&(function(t){E(t,!0)}(t),S(t.atoms,-function(t,e){return A(t,e)+Math.PI/2}(t.atoms.x[t.meta.terminalNodes[1]-1],t.atoms.y[t.meta.terminalNodes[1]-1])))}(t,s),function(t,e){const n=t.atoms.x;n[t.meta.rNodes[1]-1]>n[e-1]&&function(t,e,n){const i=e-1,r=n-1,o=t.atoms.x,s=t.atoms.y,a=o[i],l=s[i];o[i]=o[r],s[i]=s[r],o[r]=a,s[r]=l}(t,e,t.meta.rNodes[1])}(t,s))}(v):t===p.u.RIBOSE.symbol||t===p.u.DEOXYRIBOSE.symbol?function(t,e){const n=t.atoms.x,i=t.atoms.y;let r=t.meta.terminalNodes[0]-1;const o=t.meta.rNodes[1]-1;M(t,-n[r],-i[r]);const s=A(n[t.meta.rNodes[2]-1],i[t.meta.rNodes[2]-1]);S(t.atoms,-s),n[t.meta.rNodes[0]-1]>n[t.meta.rNodes[1]-1]&&x(t);const a=A(n[o],i[o]);S(t.atoms,3*Math.PI/2-a),e.value=function(t){const e=t.atoms.x,n=t.atoms.y,i=t.meta.rNodes[2]-1,r=t.meta.terminalNodes[2]-1,o=e[i]-e[r],s=n[i]-n[r];return Math.atan2(o,s)}(t),r=t.meta.terminalNodes[0]-1,M(t,-n[r],-i[r])}(v,r):t===p.u.PHOSPHATE.symbol?function(t){const e=t.meta.rNodes[1]-1,n=t.meta.rNodes[0]-1,i=t.atoms.x,r=t.atoms.y;M(t,-i[e],-r[e]);const o=A(i[n],r[n]);S(t.atoms,Math.PI/2-o)}(v):function(t,e){const n=t.atoms.x,i=t.atoms.y,r=t.meta.terminalNodes[0]-1,o=t.meta.rNodes[0]-1;M(t,-n[r],-i[r]);const s=A(n[o],i[o]),a=e.value;if(!a)throw new Error("The value of sugarBranchToOYAngle is null");S(t.atoms,Math.PI-s+a);const c=function(t,e){return(0,l.YN)(Math.sqrt((t.x-e.x)**2+(t.y-e.y)**2))}({x:n[t.meta.rNodes[0]-1],y:i[t.meta.rNodes[0]-1]},{x:n[t.meta.terminalNodes[0]-1],y:i[t.meta.terminalNodes[0]-1]});if(1!=c)for(let t=0;t<n.length;++t)n[t]=(0,l.YN)(n[t]/c),i[t]=(0,l.YN)(i[t]/c)}(v,r),function(t,e,n){"PEPTIDE"===t?(b(e,t),w(e,e.meta.rNodes[1])):n===p.u.RIBOSE.symbol||n===p.u.DEOXYRIBOSE.symbol?(w(e,e.meta.rNodes[1]),e.meta.rNodes[1]=e.meta.terminalNodes[1],y(e.bonds,e.meta),b(e,t),w(e,e.meta.rNodes[1]),w(e,e.meta.rNodes[0]),w(e,e.meta.rNodes[2])):n===p.u.PHOSPHATE.symbol&&(e.meta.terminalNodes[0]=e.meta.rNodes[0],M(e,-e.atoms.x[e.meta.terminalNodes[0]-1],-e.atoms.y[e.meta.terminalNodes[0]-1]),b(e,t),w(e,e.meta.rNodes[1]))}(i,v,t),function(t){let e=0;for(;e<t.atoms.atomTypes.length;)t.atoms.atomTypes[e]===p.u.HYDROGEN&&(w(t,e+1),--e),++e}(v),function(t){let e=0;for(;e<t.atoms.atomTypes.length;)"oh"===t.atoms.atomTypes[e]?.toLowerCase()&&(t.atoms.atomTypes[e]="O"),"?"===t.atoms.atomTypes[e]&&(t.atoms.atomTypes[e]="H"),++e}(v),function(t){const e=" RGROUPS=(1 1)";for(let n=0;n<(t.atoms.kwargs?.length??0);n++){const i=t.atoms.kwargs[n];i&&i.includes(e)&&(t.atoms.kwargs[n]=i.replace(e,""))}}(v),v}var o;return null}(e,n,i,r,o);if(!a)throw new Error(`Monomer with symbol '${e}' is absent the monomer library`);(0,h.LQ)(t,s,a)}}function y(t,e){const n=e.rNodes;e.terminalNodes=new Array(n.length).fill(0);const i=e.terminalNodes,r=t.atomPairs;let o=0,s=0;for(;o<r.length&&s<i.length;){for(let t=0;t<i.length;++t)for(let e=0;e<2;++e)r[o][e]===n[t]&&(i[t]=r[o][(e+1)%2],n.length,++s);++o}}function b(t,e){t.meta.rNodes.length>1&&(t.meta.backboneShift=v(t,t.meta.rNodes[1]-1,t.meta.terminalNodes[0]-1)),"RNA"===e&&t.meta.rNodes.length>2&&(t.meta.branchShift=v(t,t.meta.rNodes[2]-1,t.meta.terminalNodes[0]-1))}function v(t,e,n){return[(0,l.YN)(t.atoms.x[e]-t.atoms.x[n]),(0,l.YN)(t.atoms.y[e]-t.atoms.y[n])]}function w(t,e){if(void 0!==e){const n=e-1,i=t.atoms,r=t.bonds,o=t.meta;i.atomTypes.splice(n,1),i.x=C(Float32Array,i.x,n,1),i.y=C(Float32Array,i.y,n,1),i.kwargs.splice(n,1);for(let t=0;t<o.terminalNodes.length;++t)o.terminalNodes[t]>e?--o.terminalNodes[t]:o.terminalNodes[t]===e&&(o.terminalNodes[t]=-1);for(let t=0;t<o.rNodes.length;++t)o.rNodes[t]>e?--o.rNodes[t]:o.rNodes[t]===e&&(o.rNodes[t]=-1);let s=0;for(;s<r.atomPairs.length;){const t=r.atomPairs[s][0],n=r.atomPairs[s][1];t===e||n===e?(r.atomPairs.splice(s,1),r.bondTypes=C(Uint32Array,r.bondTypes,s,1),r.bondConfiguration.has(s)&&r.bondConfiguration.delete(s),r.kwargs.has(s)&&r.kwargs.delete(s),--s):(r.atomPairs[s][0]=t>e?t-1:t,r.atomPairs[s][1]=n>e?n-1:n),++s}let a=Array.from(r.bondConfiguration.keys());a.forEach((t=>{if(r.bondConfiguration.has(t)&&t>n){const e=r.bondConfiguration.get(t);r.bondConfiguration.delete(t),r.bondConfiguration.set(t-1,e)}})),a=Array.from(r.kwargs.keys()),a.forEach((t=>{if(r.kwargs.has(t)&&t>n){const e=r.kwargs.get(t);r.kwargs.delete(t),r.kwargs.set(t-1,e)}}))}}function C(t,e,n,i){const r=new t(e.length-i);let o=0,s=0;for(;o<e.length;)o===n&&(o+=i),r[s]=e[o],++s,++o;return r}function A(t,e){let n;if(0===t)n=e>0?0:Math.PI;else if(0===e)n=t>0?-Math.PI/2:Math.PI/2;else{const i=e/t,r=Math.atan(i);n=t<0?Math.PI/2+r:-Math.PI/2+r}return n}function S(t,e){if(0!==e){const n=t.x,i=t.y,r=Math.cos(e),o=Math.sin(e);for(let t=0;t<n.length;++t){const e=n[t];n[t]=(0,l.YN)(e*r-i[t]*o),i[t]=(0,l.YN)(e*o+i[t]*r)}}}function x(t){E(t,!1)}function E(t,e){if(e){const e=t.atoms.y;for(let t=0;t<e.length;t++)e[t]=-e[t]}else{const e=t.atoms.x;for(let t=0;t<e.length;t++)e[t]=-e[t]}const n=t.bonds.bondConfiguration;for(const[t,e]of n){const i=1===e?3:1;n.set(t,i)}}function M(t,e,n){const i=t.atoms.x,r=t.atoms.y;for(let t=0;t<i.length;++t)i[t]=(0,l.YN)(i[t]+e),void 0!==n&&(r[t]=(0,l.YN)(r[t]+n))}},294:(t,e,n)=>{"use strict";function i(t,e){return t[e.polymerType]?.[e.symbol]}function r(t,e){return!!t[e.polymerType]?.[e.symbol]}function o(t,e,n){let i=t[e.polymerType];i||(i=t[e.polymerType]={}),i[e.symbol]=n}n.d(e,{Cg:()=>s,LQ:()=>o,bq:()=>r,vF:()=>a,xb:()=>i});class s extends Map{constructor(t){super(t)}}class a{constructor(t,e){this.molfile=t,this.monomers=e}static createEmpty(){return new a("",new s(null))}}},330:(t,e,n)=>{"use strict";n.d(e,{kA:()=>r,pz:()=>s,qj:()=>o,vG:()=>a});var i=n(2003);function r(t,e){return t?t.columns.getUnusedName(e):e}function o(t,e){return r(t,`molfile(${e})`)}function s(t){let e;if(t===i.YI.PT||t===i.YI.UN)e="PEPTIDE";else{if(t!==i.YI.RNA&&t!==i.YI.DNA)throw new Error(`Unexpected alphabet '${t}'.`);e="RNA"}return e}function a(t){const e=7===t.length?/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(t):/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(t);return e?[parseInt(e[1],16)/256,parseInt(e[2],16)/256,parseInt(e[3],16)/256,e.length>4?parseInt(e[4],16)/256:.3]:null}},1093:(t,e,n)=>{"use strict";n(7362);class i{}i.SemType="Nucleotides",i.SemTypeMultipleAlignment="NucleotidesMultipleAlignment",i.Names={A:"Adenine",C:"Cytosine",G:"Guanine",T:"Thymine",U:"Uracil"}},7362:(t,e,n)=>{"use strict";n.d(e,{e:()=>i});class i{static makePalette(t,e=!1,n=i){const r={};return t.forEach((t=>{const n=t[0],i=t[1];n.forEach(((t,n)=>{r[t]=this.colourPalette[i][e?0:n]}))})),new n(r)}constructor(t){this._palette=t}get(t,e){return this._palette[t]}}i.undefinedColor="rgb(100,100,100)",i.colourPalette={orange:["rgb(255,187,120)","rgb(245,167,100)","rgb(235,137,70)","rgb(205, 111, 71)"],all_green:["rgb(44,160,44)","rgb(74,160,74)","rgb(23,103,57)","rgb(30,110,96)","rgb(60,131,95)","rgb(24,110,79)","rgb(152,223,138)","rgb(182, 223, 138)","rgb(152, 193, 138)"],all_blue:["rgb(31,119,180)","rgb(23,190,207)","rgb(122, 102, 189)","rgb(158,218,229)","rgb(141, 124, 217)","rgb(31, 120, 150)"],magenta:["rgb(162,106,192)","rgb(197,165,224)","rgb(208,113,218)"],red:["rgb(214,39,40)","rgb(255,152,150)"],st_blue:["rgb(23,190,207)","rgb(158,218,229)","rgb(31,119,180)"],dark_blue:["rgb(31,119,180)","rgb(31, 120, 150)"],light_blue:["rgb(23,190,207)","rgb(158,218,229)","rgb(108, 218, 229)","rgb(23,190,227)"],lilac_blue:["rgb(124,102,211)","rgb(149,134,217)","rgb(97, 81, 150)"],dark_green:["rgb(23,103,57)","rgb(30,110,96)","rgb(60,131,95)","rgb(24,110,79)"],green:["rgb(44,160,44)","rgb(74,160,74)"],light_green:["rgb(152,223,138)","rgb(182, 223, 138)","rgb(152, 193, 138)"],st_green:["rgb(44,160,44)","rgb(152,223,138)","rgb(39, 174, 96)","rgb(74,160,74)"],pink:["rgb(247,182,210)"],brown:["rgb(140,86,75)","rgb(102, 62, 54)"],gray:["rgb(127,127,127)","rgb(199,199,199)","rgb(196,156,148)","rgb(222, 222, 180)"],yellow:["rgb(188,189,34)"],white:["rgb(230,230,230)"]}},4574:(t,e,n)=>{"use strict";n.d(e,{O:()=>o,n:()=>r});var i=n(1858);class r{constructor(t,e=!0,n){return this.substructure=t,this.readOnly=e,this.logger=n,new Proxy(this,{set:(t,e,n)=>{if(this.logger?.debug(`BioFilterProps.set ${e.toString()}( '${n}' )`),this.readOnly)throw new Error("Properties are immutable.");return t[e]=n,!0}})}}class o{constructor(){this.onChanged=new i.Subject,this._props=null,this._propsChanging=!1}get props(){return this._props||(this._props=this.emptyProps),this._props}set props(t){this._propsChanging=!0;try{this._props=t,this.applyProps(),this.onChanged.next()}finally{this._propsChanging=!1}}saveProps(){const t={};for(const[e,n]of Object.entries(this.props))"_onChanged"!==e&&"logger"!==e&&(t[e]=this.props[e]);return t}async detach(){}get filterSummary(){return this.props.substructure}get isFiltering(){return""!==this.props.substructure}resetFilter(){this.props=this.emptyProps,this.onChanged.next()}}},4152:(t,e,n)=>{"use strict";var i=n(6082),r=n(7362),o=n(6718);function s(t,e=!0){if(null==t)return"rgb(100,100,100)";const n=i.Color.fromHtml(t);if(e){const t=i.Color.g(n),e=i.Color.r(n),r=i.Color.b(n),o=Math.sqrt(Math.pow(0-e,2)+Math.pow(0-t,2)+Math.pow(0-r,2));if(o>210)return`rgb(${e/o*210},${t/o*210},${r/o*210})`}return i.Color.toRgb(n)}class a{static hashCode(t){let e=0;if(0===t.length)return e;for(let n=0;n<t.length;n++)e=(e<<5)-e+t.charCodeAt(n),e|=0;return e}}class l{}class c extends l{static get palette(){return c._pallete||(c._pallete=c.buildPalette()),c._pallete}static buildPalette(){return(0,o.pj)().then((t=>{t.awaitLoaded(1/0).then((()=>{const e=t.getMonomerLib();e.onChanged.subscribe((()=>{c.customMonomerColors={},c.polymerTypes=e.getPolymerTypes();for(const t of this.polymerTypes){const n=e.getMonomerSymbolsByType(t);for(const i of n){const n=e.getMonomer(t,i);n?.meta?.colors?.default?.background&&(this.customMonomerColors[i]||(this.customMonomerColors[i]={}),this.customMonomerColors[i][t]=s(n.meta.colors.default.background))}}}))}))})),[].concat(...Object.values(r.e.colourPalette))}get(t,e){const n=c.palette.length,i=c.customMonomerColors[t],r=e??"PEPTIDE";if(i&&i[r])return i[r];const o=a.hashCode(t)%n;return s(c.palette[o])}}c._pallete=null,c.customMonomerColors={},c.polymerTypes=[]},6642:(t,e,n)=>{"use strict";n.d(e,{BG:()=>s,sD:()=>l});var i=n(4328),r=n(1858),o=n(8070);function s(t){let e=null,n=null;try{n=t.dart?t.gridColumn:null,e=n?n.temp:null}catch{[n,e]=[null,null]}const i=t.cell.column;if(e=e??(i?i.temp:null),!e)throw new Error("Grid cell renderer back store (GridColumn or Column) not found.");return[n,i,e]}class a{onKeyDown(t,e){}onKeyPress(t,e){}onMouseEnter(t,e){}onMouseLeave(t,e){}onMouseDown(t,e){}onMouseUp(t,e){}onMouseMove(t,e){}onClick(t,e){}onDoubleClick(t,e){}}class l extends a{constructor(t,e,n){super(),this.gridCol=t,this.tableCol=e,this.logger=n,this.subs=[],this.dirty=!0,this.destroyed=!1,this.viewerId=++l.viewerCounter,this.errors=[],this._onRendered=new r.Subject,this.tableCol&&this.tableCol.dataFrame&&(this.subs.push(this.tableCol.dataFrame.onDataChanged.subscribe((()=>{this.dirty=!0}))),this.subs.push(this.tableCol.dataFrame.onColumnsRemoved.subscribe((t=>{try{this.destroyed||!this.tableCol||this.tableCol.dataFrame||this.destroy()}catch(t){this.logger.error(t)}})))),this.tableCol&&this.subs.push(i.events.onTableRemoved.subscribe((t=>{try{const e=t.args.dataFrame;this.tableCol?.dataFrame.id!==e.id||this.destroyed||this.destroy()}catch(t){this.logger.error(t)}}))),this.gridCol&&this.subs.push(i.events.onViewRemoving.subscribe((t=>{try{const e=t.args.view;this.gridCol?.dart&&this.gridCol.grid&&this.gridCol?.grid?.dart&&this.gridCol?.grid?.view?.id===e.id&&!this.destroyed&&this.destroy()}catch(t){this.logger.error(t)}})))}toLog(){return`${this.constructor.name}<${this.viewerId}>`}destroy(){for(const t of this.subs)t.unsubscribe();this.destroyed=!0}invalidateGrid(){this.gridCol&&this.gridCol.dart&&this.gridCol.grid?.invalidate()}reset(){this.dirty=!1}get onRendered(){return this._onRendered}invalidate(t){this.invalidateGrid()}async awaitRendered(t=1e4,e=`${t} timeout`){const n=`${this.toLog()}.awaitRendered()`;if(this.logger.debug(`${n}, start, testEvent before`),await(0,o.PE)(this._onRendered,(()=>{}),(()=>{this.invalidate()}),t,`${n}, ${e}`),this.errors.length>0){const t=this.errors[0];throw this.errors=[],t}this.logger.debug(`${n}, end`)}}l.viewerCounter=-1},673:(t,e,n)=>{"use strict";n.d(e,{s:()=>i});const i={true:"1",false:"0"}},6882:(t,e,n)=>{"use strict";n.d(e,{Jy:()=>b,S$:()=>y,U0:()=>v});var i=n(7389),r=n(6082),o=n(1991),s=n.n(o),a=n(8312),l=n(2003),c=n(6642),h=n(6718),u=n(9192),d=n(3856),p=n(673),m=n(3599),f=n(5553),g=n(9713);const y="rgb(100,100,100)";class b extends c.sD{get separatorWidth(){return this.props?.fontCharWidth?this.props?.fontCharWidth:5}constructor(t,e,n,i,o){super(t,e,n),this.monomerLengthLimit=i,this.propsProvider=o,this.colWidth=0,this._monomerLengthList=null,this._processedMaxVisibleSeqLength=0,this._monomerLengthMap={},this._monomerStructureMap={},this.sysMonomerLib=null,this.padding=5,this._leftThreeDotsPadding=0,this.props=this.propsProvider(),this._processedRows=r.BitSet.create(this.tableCol.length),this.gridCol&&this.subs.push(this.gridCol.grid.onAfterDrawContent.subscribe((()=>{this._onRendered.next()}))),this.tableCol&&this.gridCol&&(this.subs.push(this.tableCol.dataFrame.onCurrentRowChanged.subscribe((()=>{const t=this.tableCol.dataFrame;this.gridCol.grid,-1===t.currentRowIdx&&(this.tableCol.temp["reference-sequence"]=null,this.tableCol.temp["current-word"]=null,this.invalidateGrid())}))),this.subs.push(r.debounce(this.tableCol.dataFrame.onMetadataChanged.pipe(g.filter((t=>t.args.source===this.tableCol&&t.args.key===l.gp.positionShift))),200).subscribe((t=>{this.reset()}))))}async init(){await Promise.all([(async()=>{this.seqHelper=await(0,a.Q)(),this.invalidateGrid()})(),(async()=>{const t=await(0,h.pj)();this.sysMonomerLib=t.getMonomerLib()})()]),this.subs.push(this.sysMonomerLib.onChanged.subscribe((()=>{this.reset()}))),this.reset()}static getFontSettings(t){let e=12;return t&&t.temp[".mm.cellRenderer.fontSize"]&&"number"==typeof t.temp[".mm.cellRenderer.fontSize"]&&!isNaN(t.temp[".mm.cellRenderer.fontSize"])&&(e=Math.max(t.temp[".mm.cellRenderer.fontSize"],1)),{font:`${e}px monospace`,fontWidth:.6*e}}toLog(){return`MonomerPlacer<${this.viewerId}>`}getMonomerLib(){return this.tableCol.temp[".mm.cellRenderer.overriddenLibrary"]??this.sysMonomerLib}reset(){this.propsProvider&&(this.props=this.propsProvider()),this._processedRows=r.BitSet.create(this.tableCol.length),this._monomerLengthList=null,this._monomerLengthMap={},this._monomerStructureMap={},super.reset(),this.invalidateGrid()}invalidateGrid(){this.gridCol&&this.gridCol.dart&&this.gridCol.grid?.invalidate()}getCellMonomerLengths(t,e){const n=this.seqHelper.getSeqHandler(this.tableCol);if(this.colWidth<e&&(this.colWidth=e,this.dirty=!0),this.dirty)try{this.reset()}catch(t){const[e,n]=(0,u.AP)(t);this.logger.error(e,void 0,n)}const i=n.isMsa()?this.getCellMonomerLengthsForSeqMsa():this.getCellMonomerLengthsForSeq(t);return[i,this.getSummedMonomerLengths(i)]}getSummedMonomerLengths(t){const e=new Array(t.length+1);e[0]=this.padding;for(let n=1;n<e.length;n++)e[n]=e[n-1]+t[n-1];let n=e[0];for(let t=1;t<e.length;t++)e[t]?n=e[t]:e[t]=n;return e}getCellMonomerLengthsForSeq(t){this.toLog(),null===this._monomerLengthList&&(this._monomerLengthList=new Array(this.tableCol.length).fill(null));const e=this.positionShift,n=this.seqHelper.getSeqHandler(this.tableCol),i=this.props.separatorWidth+1*this.props.fontCharWidth,r=Math.ceil(this.colWidth/i)+e,o=n.getSplitted(t),s=Math.min(r,o.length);let a=this._monomerLengthList[t];if(null===a||a.length!=s-e){a=this._monomerLengthList[t]=new Array(o.length);let i=0;for(let t=e;t<s;++t){const r=o.getOriginal(t),s=this.props.monomerToShort(r,this.monomerLengthLimit),l=(n.isSeparator()?this.separatorWidth:this.props.separatorWidth)+s.length*this.props.fontCharWidth;if(a[t-e]=l,i+=l,i>this.colWidth)break}}return a}getCellMonomerLengthsForSeqValue(t,e){const n=this.seqHelper.getSeqHandler(this.tableCol),i=this.props.separatorWidth+1*this.props.fontCharWidth,r=this.positionShift,o=Math.ceil(e/i)+r,s=n.splitter(t),a=Math.min(o,s.length),l=new Array(a-r);let c=0;for(let t=r;t<a;++t){const i=s.getOriginal(t),o=this.props.monomerToShort(i,this.monomerLengthLimit),a=(n.isSeparator()?this.separatorWidth:this.props.separatorWidth)+o.length*this.props.fontCharWidth;if(l[t-r]=a,c+=a,c>e)break}return l}getCellMonomerLengthsForSeqMsa(){var t;this.toLog(),null===this._monomerLengthList&&(this._monomerLengthList=new Array(1).fill(null)),(t=this._monomerLengthList)[0]??(t[0]=new Array(0));const e=this._monomerLengthList[0],{startIdx:n,endIdx:i}=(()=>{try{const t=this.gridCol&&this.gridCol.dart?this.gridCol.grid:null;return t&&t.dart?{startIdx:Math.max(Math.floor((t?.vertScroll.min??0)-10),0),endIdx:Math.min(Math.ceil((t?.vertScroll.max??0)+10),this.tableCol.length)}:{startIdx:0,endIdx:Math.min(this.tableCol.length,10)}}catch(t){return{startIdx:0,endIdx:Math.min(this.tableCol.length,10)}}})(),r=this.props.separatorWidth+1*this.props.fontCharWidth,o=this.positionShift,s=Math.ceil(this.colWidth/r)+o;for(let t=n;t<i;t++){if(this._processedRows.get(t)&&s<=this._processedMaxVisibleSeqLength)continue;const n=this.seqHelper.getSeqHandler(this.tableCol).getSplitted(t,s),i=Math.min(s,n.length);i-o>e.length&&e.push(...new Array(i-o-e.length).fill(r));let a=0;for(let t=o;t<i;++t){const i=n.getOriginal(t),r=this.props.monomerToShort(i,this.monomerLengthLimit),s=this.props.separatorWidth+r.length*this.props.fontCharWidth;if(e[t-o]=Math.max(e[t-o]??0,s),a+=s,a>=this.colWidth)break}this._processedMaxVisibleSeqLength=Math.max(this._processedMaxVisibleSeqLength,s),this._processedRows.set(t,!0)}return e}getPosition(t,e,n,i){const[r,o]=this.getCellMonomerLengths(t,n);return 0===this.seqHelper.getSeqHandler(this.tableCol).getSplitted(t).length?null:function(t,e,n){if((n??0)>0&&e<(t[0]??0)+n)return-1;e-=n??0;let i,r=100,o=0,s=t.length-1;for(;o<=s;){if(i=Math.floor((s+o)/2),t[i]<=e&&e<t[i+1])return i;if(e<t[i]?s=i-1:o=i+1,--r<=0)throw new Error(`Get position for pointer x = ${e} searching has not converged on ${JSON.stringify(t)}. `)}return null}(o,e,i)}setMonomerLengthLimit(t){this.monomerLengthLimit!=t&&(this.monomerLengthLimit=t,this.dirty=!0)}setSeparatorWidth(t){this.separatorWidth!=t&&(this.props.separatorWidth=t,this.dirty=!0)}get positionShift(){const t=Number.parseInt(this.tableCol?.tags[l.gp.positionShift]??"0")??0;return isNaN(t)?0:Math.max(t,0)}render(t,e,n,i,r,o,a){const c=o.grid?.canvas===t.canvas;if(!this.seqHelper)return;const h=this.gridCol,m=this.tableCol,f=window.devicePixelRatio,g=this.positionShift,b=`${this.toLog()}.render()`;this.logger.debug(`${b}, start`);let w=this.monomerLengthLimit;if(d.gp.maxMonomerLength in m.tags){const t=parseInt(m.getTag(d.gp.maxMonomerLength));w=!isNaN(t)&&t?t:50}if(".mm.cellRenderer.maxMonomerLength"in m.temp){const t=m.temp[".mm.cellRenderer.maxMonomerLength"];w=!isNaN(t)&&t?t:50}t.save();try{const a=this.seqHelper.getSeqHandler(m);if(m.temp[".mm.cellRenderer.settingsChanged"]===p.s.true||this.monomerLengthLimit!=w){let t=0;const e=8;t=m.temp[".mm.cellRenderer.gapLength"]??t,this.setMonomerLengthLimit(w),this.setSeparatorWidth(a.isMsa()?e:t),m.temp[".mm.cellRenderer.settingsChanged"]=p.s.false}let[u,b]=this.getCellMonomerLengths(o.tableRowIndex,i);u.length;const C=o.cell.value,A=o.cell.rowIndex,S=(m.getTag(l.gp.alphabet),50);c&&(i=v(h?.grid,t,e,i,f)),t.beginPath(),t.rect(e+this.padding,n,i-this.padding-1,r),t.clip(),t.font=this.props?.font??"12px monospace",t.textBaseline="top";const x=m.meta.units,E=m.getTag(l.gp.aligned),M=m.getTag(l.gp.separator)??"",_=this.props.separatorWidth+1*this.props.fontCharWidth,I=Math.ceil(i/_)+g,T=m.temp["reference-sequence"],L=this.tableCol.temp["current-word"];L&&-1===m?.dataFrame?.currentRowIdx&&(this.tableCol.temp["current-word"]=null);const N=(()=>{const t=a.getSplitter(I)(null!=T&&""!=T?T:L??"");return s().count(0).take(t.length).slice(g).map((e=>t.getOriginal(e))).toArray()})(),P=c?a.getSplitted(A):a.splitter(C);c||(b=this.getSummedMonomerLengths(this.getCellMonomerLengthsForSeqValue(C,i)));let $=d.yg.classic;E&&E.includes("MSA")&&x==l.Hi.SEPARATOR&&($=d.yg.MSA),this._leftThreeDotsPadding=this.shouldRenderShiftedThreeDots(g)?t.measureText("...").width:0;const R=Number.parseInt(m.getTag(l.gp.selectedPosition)??"-200"),O=Math.min(P.length,I);for(let s=g;s<O;++s){const l=s<P.length?P.getOriginal(s):a.defaultGapOriginal,c=s<P.length?P.getCanonical(s):a.defaultGapOriginal;let h=y;const u=this.getMonomerLib();if(u){const t=a.defaultBiotype;h=u.getMonomerTextColor(t,c)}t.fillStyle=y;const p={color:h,pivot:0,left:!0,transparencyRate:1,separator:M,last:s===P.length-1,drawStyle:$,maxWord:b,wordIdx:s-g,gridCell:o,referenceSequence:N,maxLengthOfMonomer:w,monomerTextSizeMap:this._monomerLengthMap,logger:this.logger,selectedPosition:isNaN(R)||R<1?void 0:R-g};if((0,d.oZ)(t,l,e+this.padding+this._leftThreeDotsPadding,n,i,r,p),S>i)break}if(this.shouldRenderShiftedThreeDots(g)){const s={color:y,pivot:0,left:!0,transparencyRate:1,separator:M,last:!1,drawStyle:$,maxWord:b,wordIdx:0,gridCell:o,maxLengthOfMonomer:w,monomerTextSizeMap:this._monomerLengthMap,logger:this.logger};(0,d.oZ)(t,"...",e+this.padding,n,i,r,s)}}catch(t){const[e,n]=(0,u.AP)(t);this.logger.error(e,void 0,n),this.errors.push(t)}finally{t.restore()}}shouldRenderShiftedThreeDots(t){return t>0&&(!this.gridCol||!this.gridCol.dart||!this.gridCol.grid||!this.gridCol.grid.dart||(this.gridCol.grid.props.colHeaderHeight??0)<=50)}onMouseMove(t,e){const n=`${this.toLog()}.onMouseMove()`;if(!this.seqHelper||null==t.tableRowIndex)return;const r=this.positionShift,o=t.bounds,s=e.offsetX-t.gridColumn.left+(t.gridColumn.left-o.x),a=this.shouldRenderShiftedThreeDots(r)&&(this._leftThreeDotsPadding??0)>0?this._leftThreeDotsPadding:0,c=this.getPosition(t.tableRowIndex,s,o.width,a);this.logger.debug(`${n}, start, argsX: ${s}, left: ${c}`);const h=this.seqHelper.getSeqHandler(this.tableCol),u=h.getSplitted(t.tableRowIndex);if(null!==c&&c>=0&&c+r<u.length){const n=h.alphabet??l.YI.UN,o={position:c,biotype:n===l.YI.RNA||n===l.YI.DNA?m.o.NUCLEOTIDE:m.o.AA,symbol:u.getCanonical(c+r)},s=[];let a=this._monomerStructureMap[o.symbol];{const t=this.getMonomerLib();a=this._monomerStructureMap[o.symbol]=t?t.getTooltip(o.biotype,o.symbol):i.divText("Monomer library is not available")}s.push(a),i.tooltip.show(i.divV(s),e.x+16,e.y+16),(0,f.WN)(t,o)}else-1===c?i.tooltip.show(i.divText(`${Math.min(r,u.length)} hidden monomers`),e.x+16,e.y+16):i.tooltip.hide(),(0,f.WN)(t,null)}}function v(t,e,n,i,r){return t?Math.max(Math.min(t.canvas.width/r-n,i)):Math.max(e.canvas.width/r-n,0)}},3856:(t,e,n)=>{"use strict";n.d(e,{Mn:()=>c,gp:()=>l,oZ:()=>d,yg:()=>h});var i=n(6082),r=n(7278);const o="#808080",s="rgb(0,0,0)",a=r.zS;var l,c,h;!function(t){t.maxMonomerLength=".mm.cellRenderer.maxMonomerLength"}(l||(l={})),function(t){t.applyToBackground=".m.cellRenderer.applyToBackground"}(c||(c={})),function(t){t.MSA="MSA",t.classic="classic"}(h||(h={}));const u=new class{constructor(){this.color="rgb(100,100,100)",this.pivot=0,this.left=!1,this.transparencyRate=1,this.separator="",this.last=!1,this.drawStyle=h.classic,this.maxWord=[],this.wordIdx=0,this.gridCell=null,this.referenceSequence=null,this.maxLengthOfMonomer=null,this.monomerTextSizeMap={},this.logger=void 0,this.selectedPosition=void 0}};function d(t,e,n,r,l,c,d){var p,m,f;const g=Object.assign(Object.assign({},u),d);d.logger?.debug("Bio: printLeftOrCentered(), start"),t.textAlign="start";let y=e.substring(0),b=g.last?"":g.separator;g.drawStyle===h.MSA&&(b="");let v=!0,w=!0,C="difference";if(null!=g.gridCell&&null!=g.gridCell.cell.column&&(v=g.gridCell.cell.column.temp["color-code"]??!0,w=g.gridCell.cell.column.temp["compare-with-current"]??!0,C=g.gridCell.cell.column.temp["highlight-difference"]??"difference"),g.referenceSequence){const t=g.referenceSequence[g.wordIdx];w&&g.referenceSequence.length>0&&"difference"===C&&(g.transparencyRate=y==t?.3:g.transparencyRate),w&&g.referenceSequence.length>0&&"equal"===C&&(g.transparencyRate=y!=t?.3:g.transparencyRate)}null!=g.maxLengthOfMonomer&&(y=a(y,g.maxLengthOfMonomer));const A=y+b;(p=g.monomerTextSizeMap)[A]??(p[A]=t.measureText(A));let S=g.monomerTextSizeMap[A];(m=g.monomerTextSizeMap)[y]??(m[y]=t.measureText(y));let x=g.monomerTextSizeMap[y].width;const E=c/2-(S.fontBoundingBoxAscent+S.fontBoundingBoxDescent)/2+1;(f=g.monomerTextSizeMap)[b]??(f[b]=t.measureText(b));const M=g.monomerTextSizeMap[b].width;function _(e,a){let l=v?g.color:s;g.selectedPosition===g.wordIdx+1&&(t.fillStyle="rgba(60, 177, 115, 0.2)",t.fillRect(n+e-4,r-5,g.monomerTextSizeMap[y].width+8,c+10),l=i.Color.toHtml(i.Color.setAlpha(i.Color.fromHtml(l),255))),t.fillStyle=l,t.globalAlpha=g.transparencyRate,g.drawStyle===h.classic&&(t.fillText(y,n+e,r+E),t.fillStyle=o,t.fillText(b,n+a,r+E)),g.drawStyle===h.MSA&&t.fillText(y,n+e,r+E)}S=S.width,g.drawStyle===h.MSA&&(x=g.maxWord[g.wordIdx],S=g.maxWord[g.wordIdx]);const I=(g.maxWord[g.wordIdx]??0)-(g.maxWord[0]??0);if(g.left||S>l)return _(I,I+x),n+I+x+M;{const t=(l-S)/2;return _(t,t+x),n+I+t+x}}},3151:(t,e,n)=>{"use strict";n.d(e,{EK:()=>l,Ec:()=>o,f6:()=>i,pe:()=>s,q7:()=>a,yw:()=>r});const i=["symbol","molfile","rgroups","name"],r="MonomerName",o={monomerType:null,smiles:null,name:"Name",author:null,molfile:"molecule",naturalAnalog:"MonomerNaturalAnalogCode",rgroups:"MonomerCaps",createDate:null,id:null,polymerType:"MonomerType",symbol:"MonomerName"},s={monomerType:"Backbone",smiles:"",name:"",author:"Datagrok",molfile:"",naturalAnalog:"",rgroups:[],createDate:null,id:0,polymerType:"PEPTIDE",symbol:""},a="p",l=new RegExp(`[rd]\\((\\w)\\)${a}?`,"g")},9192:(t,e,n)=>{"use strict";function i(t){return"string"==typeof t||t instanceof String?t:"StateError"===t.constructor.name?t.message:"StateError"===t.constructor.name&&"$thrownJsError"in t?i(t.$thrownJsError):t instanceof Error?t.message:t.toString()}function r(t){return t instanceof Error?t.stack:"StateError"===t.constructor.name&&"$thrownJsError"in t?r(t.$thrownJsError):void 0}function o(t){return[i(t),r(t)]}n.d(e,{AP:()=>o})},3516:(t,e,n)=>{"use strict";n.d(e,{m:()=>o});var i=n(6082),r=n(439);class o{get descriptionsArray(){return this._descriptionsArray}get sequencesArray(){return this._sequencesArray}parseMacromolecule(t,e){return this._fileContent.slice(t,e).split(/\s/).join("")}parseColumns(){const t=/^>(.*)$/gm;let e,n=0;for(;e=t.exec(this._fileContent);){const i=this._fileContent.substring(e.index+1,t.lastIndex);this._descriptionsArray.push(i),0!==n&&this._sequencesArray.push(this.parseMacromolecule(n,e.index)),n=t.lastIndex+1}this._sequencesArray.push(this.parseMacromolecule(n,-1))}importFasta(){const t=i.Column.fromStrings("description",this.descriptionsArray),e=i.Column.fromStrings("sequence",this.sequencesArray);return e.semType=i.SEMTYPE.MACROMOLECULE,e.meta.units=r.Hi.FASTA,[i.DataFrame.fromColumns([t,e])]}constructor(t){this._descriptionsArray=[],this._sequencesArray=[],this._fileContent=t,this.parseColumns()}}},6873:(t,e,n)=>{"use strict";n.d(e,{Hx:()=>h,dW:()=>c});var i=n(6082),r=n(1991),o=n.n(r),s=n(2003),a=n(7278),l=n(439);function c(t=10**5){const e="meI/hHis/Aca/N//dE/Thr_PO3H2/Aca/D-Tyr_Et/Tyr_ab-dehydroMe".repeat(Math.ceil(t/10)).slice(0,-1),n=i.Column.fromList(i.COLUMN_TYPE.STRING,"MSA",new Array(100).fill(e));n.semType=i.SEMTYPE.MACROMOLECULE,n.meta.units=s.Hi.SEPARATOR,n.setTag(s.gp.separator,"/"),n.setTag(s.gp.alphabet,s.YI.UN),n.setTag(s.gp.alphabetIsMultichar,"true");const r=[];return r.push(n),r.push(i.Column.fromList(i.COLUMN_TYPE.FLOAT,"Activity",new Array(100).fill(7.30751))),r}function h(t,e=s.Hi.SEPARATOR,n=s.YI.PT,r=(e===s.Hi.SEPARATOR?"-":void 0),c=void 0,h="seq",u=100,d=10**6){const p=n===s.YI.UN?c?.getMonomerSymbolsByType("PEPTIDE")??[]:Array.from((0,s.Qf)(n)),m=p.length,f=i.Column.fromType(i.COLUMN_TYPE.STRING,h,u);f.semType=i.SEMTYPE.MACROMOLECULE,f.meta.units=e,f.setTag(s.gp.alphabet,n),e==s.Hi.SEPARATOR&&f.setTag(s.gp.separator,r);const g=t.getSeqHandler(f);for(let t=0;t<u;t++){const n=o().count(0).take(d).map((t=>p[Math.floor(Math.random()*m)])).toArray(),i=g.joiner(new a.Mu(n,l.b9[e]));f.set(t,i)}return f}},439:(t,e,n)=>{"use strict";n.d(e,{B5:()=>l,Hi:()=>i,Vl:()=>c,YI:()=>r,_S:()=>u,b9:()=>d,gp:()=>o,q7:()=>h,z1:()=>a});var i,r,o,s=n(2738);!function(t){t.FASTA="fasta",t.SEPARATOR="separator",t.HELM="helm",t.CUSTOM="custom"}(i||(i={})),function(t){t.DNA="DNA",t.RNA="RNA",t.PT="PT",t.UN="UN"}(r||(r={})),function(t){t.aligned="aligned",t.alphabet="alphabet",t.alphabetSize=".alphabetSize",t.alphabetIsMultichar=".alphabetIsMultichar",t.separator="separator",t.isHelmCompatible=".isHelmCompatible",t.positionNames=".positionNames",t.positionLabels=".positionLabels",t.regions=".regions",t.positionShift=".positionShift",t.selectedPosition=".selectedPosition"}(o||(o={}));const a=", ",l=/(?:\[([A-Za-z0-9_\-,()]+)\])|([A-Za-z\-])/g,c=new class{constructor(){this.fasta={peptide:new Set(["G","L","Y","S","E","Q","D","N","F","A","K","R","H","C","V","P","W","I","M","T"]),dna:new Set(["A","C","G","T"]),rna:new Set(["A","C","G","U"])}}},h=[new s.a(r.PT,c.fasta.peptide,.5),new s.a(r.DNA,c.fasta.dna,.55),new s.a(r.RNA,c.fasta.rna,.55)],u="",d={[i.FASTA]:"-",[i.SEPARATOR]:"",[i.HELM]:"*"}},2003:(t,e,n)=>{"use strict";n.d(e,{Hi:()=>i.Hi,J9:()=>r.J9,Qf:()=>r.Qf,YI:()=>i.YI,dh:()=>r.dh,gp:()=>i.gp,mn:()=>r.mn,q7:()=>i.q7,qp:()=>r.qp,z1:()=>i.z1,zS:()=>r.zS});var i=n(439),r=n(7278)},2738:(t,e,n)=>{"use strict";n.d(e,{X:()=>r,a:()=>i});class i{constructor(t,e,n){this.name=t,this.alphabet=e,this.cutoff=n}}class r extends i{constructor(t,e,n){super(t.name,t.alphabet,t.cutoff),this.freq=e,this.similarity=n}}},7278:(t,e,n)=>{"use strict";n.d(e,{Iv:()=>y,J9:()=>p,Mu:()=>u,Qf:()=>w,dh:()=>f,mn:()=>S,p0:()=>A,pc:()=>C,qp:()=>g,tm:()=>m,zS:()=>v});var i=n(6082),r=n(1991),o=n.n(r),s=n(3527),a=n(3629),l=n(2738),c=n(439),h=(n(8924),n(1093),n(4152),n(8438));class u{get length(){return this.mList.length}isGap(t){return this.getOriginal(t)===this.gapOriginalMonomer}getCanonical(t){if(this.length<=t)throw new Error("Index out of bounds");const e=this.mList[t];return e!==this.gapOriginalMonomer?e:c._S}getOriginal(t){if(this.length<=t)throw new Error("Index out of bounds");return this.mList[t]}constructor(t,e){this.mList=t,this.gapOriginalMonomer=e}}class d{get length(){return this.seqS.length}isGap(t){return this.getOriginal(t)===c.b9[c.Hi.FASTA]}getCanonical(t){if(this.length<=t)throw new Error("Index out of bounds");return this.isGap(t)?c._S:this.seqS[t]}getOriginal(t){if(this.length<=t)throw new Error("Index out of bounds");return this.seqS[t]}constructor(t){this.seqS=t}}const p=t=>{const e=o()(t.toString().matchAll(c.B5)).map((t=>t[2]??t[1])).toArray();return new u(e,c.b9[c.Hi.FASTA])},m=t=>t?new d(t):new u([],c.b9[c.Hi.FASTA]);function f(t,e=void 0){return n=>{if(n){let i;const r=new RegExp(`(?<=^|\\${t})("-"|'-'|[^\\${t}]*)(?=\\${t}|$)`,"g");return void 0!==e?(r.lastIndex=0,i=o()(n.matchAll(r)).take(e).map((t=>t[0])).toArray()):i=n.replaceAll('"-"',"").replaceAll("'-'","").split(t,e),new u(i,c.b9[c.Hi.SEPARATOR])}return new u([],c.b9[c.Hi.SEPARATOR])}}const g=t=>{const e=t.split("$")[0].split("|"),n=o()(e.map((t=>(t.match(/(?<=\{).+(?=})/)?.[0]?.split(".")??[]).map((t=>(0,h.D)(t)))))).flatten().toArray();return new u(n,c.b9[c.Hi.HELM])};function y(t,e,n=void 0){if(t.toLowerCase().startsWith(c.Hi.FASTA))return p;if(t.toLowerCase().startsWith(c.Hi.SEPARATOR))return f(e,n);if(t.toLowerCase().startsWith(c.Hi.HELM))return g;throw new Error(`Unexpected units ${t} .`)}const b=/([^\W_]+)/g;function v(t,e){if(t.length<=e)return t;const n=t.match(b),i=t.length>e||(n?.length??0)>1,r=n?.[0]??" ";return i?r.substring(0,e-1)+"…":r}function w(t){switch(t){case c.YI.DNA:return c.Vl.fasta.dna;case c.YI.RNA:return c.Vl.fasta.rna;case c.YI.PT:return c.Vl.fasta.peptide;default:throw new Error(`Unsupported alphabet '${t}'.`)}}function C(t,e,n="-"){const i=e.map((e=>{const i=function(t,e,n="-"){const i=new Set([...new Set(Object.keys(t)),...e]);i.delete(n);const r=[],o=[];for(const n of i)r.push(n in t?t[n]:0),o.push(e.has(n)?1:0);const l=new s.Mi(r),c=new s.Mi(o);return(0,a.KE)(l,c)/((0,a.wQ)(l)*(0,a.wQ)(c))}(t,e.alphabet,n);return new l.X(e,t,i)}));let r;const o=Math.max(...i.map((t=>t.similarity>t.cutoff?t.similarity:-1)));return r=o>0?i.find((t=>t.similarity===o)).name:c.YI.UN,r}function A(t,e,n="-"){const i=Object.keys(t),r=/\(|\)/;return C(i.filter((t=>3===t.split(r).filter((t=>!!t)).length)).length>.8*i.length?Object.entries(t).reduce(((t,[e,n])=>{const i=e.split(r)[1];return i&&(t[i]=n),t}),{}):t,e,n)}function S(t){const e=t.columns.bySemTypeAll(i.SEMTYPE.MACROMOLECULE);let n=e.find((t=>{const e=t.meta.units;return!!e&&-1!==e.indexOf("MSA")}))??null;return!n&&e.length>0&&(n=e[0]),n}},8312:(t,e,n)=>{"use strict";n.d(e,{Q:()=>r});var i=n(6082);async function r(){const t=i.Func.find({package:"Bio",name:"getSeqHelper"});if(0===t.length)throw new Error("Package 'Bio' must be installed for SeqHelper.");return(await t[0].prepare().call()).getOutputParamValue()}},3077:(t,e,n)=>{"use strict";n.d(e,{R:()=>r});var i=n(6082);function r(t,e){const n=t=>{const e=s.columns.addNewString((t+1).toString());return r.push(e),e},r=[],o=t.length,s=i.DataFrame.create(o),a=e.getSeqHandler(t);for(let t=0;t<o;++t){const e=a.getSplitted(t);for(let i=0;i<e.length;++i){const o=e.getCanonical(i);((r[i]??null)||n(i)).set(t,o,!1)}}return s}},7602:(t,e,n)=>{"use strict";n.d(e,{g:()=>o});var i,r=n(9192);!function(t){t[t.error=0]="error",t[t.warning=1]="warning",t[t.info=2]="info",t[t.debug=3]="debug"}(i||(i={}));class o{constructor(t){this.logger=t,this.promise=Promise.resolve(),this.errors=[],this.syncCounter=0}sync(t,e){const n=++this.syncCounter;this.logger.debug(`${t}, SYNC syncId = ${n}, IN `),this.promise=this.promise.then((async()=>{this.logger.debug(`${t}, SYNC syncId = ${n}, START `),await e(),this.logger.debug(`${t}, SYNC syncId = ${n}, END `)})).catch((e=>{const[i,o]=(0,r.AP)(e);this.logger.error(`${t}, SYNC syncId = ${n}, ERROR:\n${i}`,void 0,o),this.errors.push(e)}))}resetErrors(){const t=this.errors;return this.errors=[],t}}},4326:(t,e,n)=>{"use strict";n.d(e,{Fo:()=>h,Lp:()=>o,P4:()=>s,fH:()=>r,gp:()=>i,lT:()=>l,mH:()=>a});var i,r,o,s,a,l,c=n(6082);!function(t){t.tooltipWebLogo=".tooltipWebLogo"}(i||(i={})),function(t){t.Entropy="Entropy",t.full="100%"}(r||(r={})),function(t){t.TOP="top",t.MIDDLE="middle",t.BOTTOM="bottom"}(o||(o={})),function(t){t.LEFT="left",t.CENTER="center",t.RIGHT="right"}(s||(s={})),function(t){t.AUTO="auto",t.ON="on",t.OFF="off"}(a||(a={})),function(t){t.Filtered="Filtered",t.Selected="Selected"}(l||(l={}));const h=new class{constructor(){this.sequenceColumnName=null,this.valueAggrType=c.AGG.TOTAL_COUNT,this.valueColumnName="Activity",this.startPositionName=null,this.endPositionName=null,this.skipEmptySequences=!0,this.skipEmptyPositions=!1,this.shrinkEmptyTail=!0,this.backgroundColor=4294967295,this.positionHeight=r.Entropy,this.positionWidth=20,this.verticalAlignment=o.MIDDLE,this.horizontalAlignment=s.CENTER,this.fixWidth=!1,this.fitArea=!0,this.minHeight=25,this.maxHeight=300,this.maxMonomerLetters=5,this.showPositionLabels=!0,this.positionMarginState=a.AUTO,this.positionMargin=0,this.filterSource=l.Filtered}}},6869:(t,e,n)=>{"use strict";var i;n.d(e,{o:()=>i}),function(t){t.BASE="HELM_BASE",t.SUGAR="HELM_SUGAR",t.LINKER="HELM_LINKER",t.AA="HELM_AA",t.CHEM="HELM_CHEM",t.BLOB="HELM_BLOB",t.NUCLEOTIDE="HELM_NUCLETIDE"}(i||(i={}))},5540:(t,e,n)=>{"use strict";t=n.hmd(t);var i,r=(i="undefined"!=typeof document&&document.currentScript?document.currentScript.src:void 0,function(t={}){var e,n,r=void 0!==t?t:{};r.ready=new Promise((function(t,i){e=t,n=i}));var o,s=Object.assign({},r),a="object"==typeof window,l="function"==typeof importScripts,c=("object"==typeof process&&"object"==typeof process.versions&&process.versions.node,"");(a||l)&&(l?c=self.location.href:"undefined"!=typeof document&&document.currentScript&&(c=document.currentScript.src),i&&(c=i),c=0!==c.indexOf("blob:")?c.substr(0,c.replace(/[?#].*/,"").lastIndexOf("/")+1):"",l&&(o=t=>{var e=new XMLHttpRequest;return e.open("GET",t,!1),e.responseType="arraybuffer",e.send(null),new Uint8Array(e.response)})),r.print||console.log.bind(console);var h,u,d=r.printErr||console.warn.bind(console);Object.assign(r,s),s=null,r.arguments&&r.arguments,r.thisProgram&&r.thisProgram,r.quit&&r.quit,r.wasmBinary&&(h=r.wasmBinary),r.noExitRuntime,"object"!=typeof WebAssembly&&M("no native wasm support detected");var p,m,f,g=!1;function y(){var t=u.buffer;r.HEAP8=p=new Int8Array(t),r.HEAP16=new Int16Array(t),r.HEAP32=new Int32Array(t),r.HEAPU8=m=new Uint8Array(t),r.HEAPU16=new Uint16Array(t),r.HEAPU32=f=new Uint32Array(t),r.HEAPF32=new Float32Array(t),r.HEAPF64=new Float64Array(t)}var b,v,w=[],C=[],A=[],S=0,x=null,E=null;function M(t){r.onAbort&&r.onAbort(t),d(t="Aborted("+t+")"),g=!0,t+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(t);throw n(e),e}function _(t){return t.startsWith("data:application/octet-stream;base64,")}function I(t){try{if(t==b&&h)return new Uint8Array(h);if(o)return o(t);throw"both async and sync fetching of the wasm failed"}catch(t){M(t)}}function T(t,e,n){return function(t){return h||!a&&!l||"function"!=typeof fetch?Promise.resolve().then((function(){return I(t)})):fetch(t,{credentials:"same-origin"}).then((function(e){if(!e.ok)throw"failed to load wasm binary file at '"+t+"'";return e.arrayBuffer()})).catch((function(){return I(t)}))}(t).then((function(t){return WebAssembly.instantiate(t,e)})).then((function(t){return t})).then(n,(function(t){d("failed to asynchronously prepare wasm: "+t),M(t)}))}function L(t){for(;t.length>0;)t.shift()(r)}function N(t){this.excPtr=t,this.ptr=t-24,this.set_type=function(t){f[this.ptr+4>>2]=t},this.get_type=function(){return f[this.ptr+4>>2]},this.set_destructor=function(t){f[this.ptr+8>>2]=t},this.get_destructor=function(){return f[this.ptr+8>>2]},this.set_caught=function(t){t=t?1:0,p[this.ptr+12|0]=t},this.get_caught=function(){return 0!=p[this.ptr+12|0]},this.set_rethrown=function(t){t=t?1:0,p[this.ptr+13|0]=t},this.get_rethrown=function(){return 0!=p[this.ptr+13|0]},this.init=function(t,e){this.set_adjusted_ptr(0),this.set_type(t),this.set_destructor(e)},this.set_adjusted_ptr=function(t){f[this.ptr+16>>2]=t},this.get_adjusted_ptr=function(){return f[this.ptr+16>>2]},this.get_exception_ptr=function(){if(D(this.get_type()))return f[this.excPtr>>2];var t=this.get_adjusted_ptr();return 0!==t?t:this.excPtr}}function P(t){var e=u.buffer;try{return u.grow(t-e.byteLength+65535>>>16),y(),1}catch(t){}}function $(t){return r["_"+t]}_(b="wasmDbscan.wasm")||(v=b,b=r.locateFile?r.locateFile(v,c):c+v);var R="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function O(t,e,n,i,r){var o={string:t=>{var e=0;return null!=t&&0!==t&&(e=function(t){var e=function(t){for(var e=0,n=0;n<t.length;++n){var i=t.charCodeAt(n);i<=127?e++:i<=2047?e+=2:i>=55296&&i<=57343?(e+=4,++n):e+=3}return e}(t)+1,n=B(e);return function(t,e,n){!function(t,e,n,i){if(!(i>0))return 0;for(var r=n+i-1,o=0;o<t.length;++o){var s=t.charCodeAt(o);if(s>=55296&&s<=57343&&(s=65536+((1023&s)<<10)|1023&t.charCodeAt(++o)),s<=127){if(n>=r)break;e[n++]=s}else if(s<=2047){if(n+1>=r)break;e[n++]=192|s>>6,e[n++]=128|63&s}else if(s<=65535){if(n+2>=r)break;e[n++]=224|s>>12,e[n++]=128|s>>6&63,e[n++]=128|63&s}else{if(n+3>=r)break;e[n++]=240|s>>18,e[n++]=128|s>>12&63,e[n++]=128|s>>6&63,e[n++]=128|63&s}}e[n]=0}(t,m,e,n)}(t,n,e),n}(t)),e},array:t=>{var e,n,i=B(t.length);return e=t,n=i,p.set(e,n),i}},s=$(t),a=[],l=0;if(i)for(var c=0;c<i.length;c++){var h=o[n[c]];h?(0===l&&(l=F()),a[c]=h(i[c])):a[c]=i[c]}var u=s.apply(null,a);return function(t){return 0!==l&&H(l),function(t){return"string"===e?(n=t)?function(t,e,n){for(var i=e+n,r=e;t[r]&&!(r>=i);)++r;if(r-e>16&&t.buffer&&R)return R.decode(t.subarray(e,r));for(var o="";e<r;){var s=t[e++];if(128&s){var a=63&t[e++];if(192!=(224&s)){var l=63&t[e++];if((s=224==(240&s)?(15&s)<<12|a<<6|l:(7&s)<<18|a<<12|l<<6|63&t[e++])<65536)o+=String.fromCharCode(s);else{var c=s-65536;o+=String.fromCharCode(55296|c>>10,56320|1023&c)}}else o+=String.fromCharCode((31&s)<<6|a)}else o+=String.fromCharCode(s)}return o}(m,n,i):"":"boolean"===e?Boolean(t):t;var n,i}(t)}(u)}var k,G={__cxa_throw:function(t,e,n){throw new N(t).init(e,n),t},abort:function(){M("")},emscripten_memcpy_big:function(t,e,n){m.copyWithin(t,e,e+n)},emscripten_resize_heap:function(t){var e,n=m.length,i=2147483648;if((t>>>=0)>i)return!1;for(var r=1;r<=4;r*=2){var o=n*(1+.2/r);if(o=Math.min(o,t+100663296),P(Math.min(i,(e=Math.max(t,o))+(65536-e%65536)%65536)))return!0}return!1}},F=(function(){var t,e,i,o,s={env:G,wasi_snapshot_preview1:G};function a(t,e){var n,i=t.exports;return r.asm=i,u=r.asm.memory,y(),r.asm.__indirect_function_table,n=r.asm.__wasm_call_ctors,C.unshift(n),function(){if(S--,r.monitorRunDependencies&&r.monitorRunDependencies(S),0==S&&(null!==x&&(clearInterval(x),x=null),E)){var t=E;E=null,t()}}(),i}if(S++,r.monitorRunDependencies&&r.monitorRunDependencies(S),r.instantiateWasm)try{return r.instantiateWasm(s,a)}catch(t){d("Module.instantiateWasm callback failed with error: "+t),n(t)}(t=h,e=b,i=s,o=function(t){a(t.instance)},t||"function"!=typeof WebAssembly.instantiateStreaming||_(e)||"function"!=typeof fetch?T(e,i,o):fetch(e,{credentials:"same-origin"}).then((function(t){return WebAssembly.instantiateStreaming(t,i).then(o,(function(t){return d("wasm streaming compile failed: "+t),d("falling back to ArrayBuffer instantiation"),T(e,i,o)}))}))).catch(n)}(),r._dbscan=function(){return(r._dbscan=r.asm.dbscan).apply(null,arguments)},r._malloc=function(){return(r._malloc=r.asm.malloc).apply(null,arguments)},r._free=function(){return(r._free=r.asm.free).apply(null,arguments)},function(){return(F=r.asm.stackSave).apply(null,arguments)}),H=function(){return(H=r.asm.stackRestore).apply(null,arguments)},B=function(){return(B=r.asm.stackAlloc).apply(null,arguments)},D=function(){return(D=r.asm.__cxa_is_pointer_type).apply(null,arguments)};function V(){function t(){k||(k=!0,r.calledRun=!0,g||(L(C),e(r),r.onRuntimeInitialized&&r.onRuntimeInitialized(),function(){if(r.postRun)for("function"==typeof r.postRun&&(r.postRun=[r.postRun]);r.postRun.length;)t=r.postRun.shift(),A.unshift(t);var t;L(A)}()))}S>0||(function(){if(r.preRun)for("function"==typeof r.preRun&&(r.preRun=[r.preRun]);r.preRun.length;)t=r.preRun.shift(),w.unshift(t);var t;L(w)}(),S>0||(r.setStatus?(r.setStatus("Running..."),setTimeout((function(){setTimeout((function(){r.setStatus("")}),1),t()}),1)):t()))}if(r.ccall=O,r.cwrap=function(t,e,n,i){var r=!n||n.every((t=>"number"===t||"boolean"===t));return"string"!==e&&r&&!i?$(t):function(){return O(t,e,n,arguments)}},E=function t(){k||V(),k||(E=t)},r.preInit)for("function"==typeof r.preInit&&(r.preInit=[r.preInit]);r.preInit.length>0;)r.preInit.pop()();return V(),t.ready});"object"==typeof exports?t.exports=r:"function"==typeof define&&n.amdO?define([],(function(){return r})):"object"==typeof exports&&(exports.exportCppDbscanLib=r)},6295:(t,e,n)=>{"use strict";n.d(e,{$1:()=>a,Hf:()=>u,Hr:()=>M,Ii:()=>y,Qj:()=>f,T6:()=>E,TK:()=>S,be:()=>g,gt:()=>w,iS:()=>s,ij:()=>C,jL:()=>h,lO:()=>m,lP:()=>v,rR:()=>b,tO:()=>l,v_:()=>c,w_:()=>d,yK:()=>A,zn:()=>p});var i=n(8774),r=n(8498),o=n(6863);r.aT.Tanimoto,r.aT.Dice,r.aT.Asymmetric,r.aT.BraunBlanquet,r.aT.Cosine,r.aT.Kulczynski,r.aT.McConnaughey,r.aT.RogotGoldberg,r.aT.Russel,r.aT.Sokal,r.aT.Hamming,r.aT.Euclidean,r.aT.Tanimoto,r.aT.Dice,r.aT.Asymmetric,r.aT.BraunBlanquet,r.aT.Cosine,r.aT.Kulczynski,r.aT.McConnaughey,r.aT.RogotGoldberg,r.aT.Russel,r.aT.Sokal,r.aT.Hamming,r.aT.Euclidean;const s=[r.aT.Tanimoto,r.aT.Dice,r.aT.Cosine];function a(t,e){const n=t.trueCount()+e.trueCount();if(0==n)return 1;const i=t.andWithCountBits(e,!0);return i/(n-i)}function l(t,e){return 1-a(t,e)}function c(t,e){return x(a(new i.A(t,32*t.length),new i.A(e,32*e.length)))}function h(t,e){let n=0;for(let i=0;i<t.length;i++)n+=Math.pow(t[i]-e[i],2);return Math.sqrt(n)}function u(t,e){let n=0;for(let i=0;i<t.length;i++)n+=Math.abs(t[i]-e[i]);return n}function d(t,e){let n=0,i=0,r=0;for(let o=0;o<t.length;o++)n+=t[o]*e[o],i+=t[o]*t[o],r+=e[o]*e[o];return(1-n/(Math.sqrt(i)*Math.sqrt(r)))/2}function p(t,e){return 1-function(t,e){const n=t.trueCount()+e.trueCount();return 0==n?0:2*t.andWithCountBits(e,!0)/n}(t,e)}function m(t,e){return 1-function(t,e){const n=t.trueCount()*e.trueCount();return 0==n?0:t.andWithCountBits(e,!0)/Math.sqrt(n)}(t,e)}function f(t,e){return Math.sqrt(t.trueCount()+e.trueCount()-2*t.andWithCountBits(e,!0))}function g(t,e){return t.trueCount()+e.trueCount()-2*t.andWithCountBits(e,!0)}function y(t,e){return 1-function(t,e){const n=t.trueCount()+e.trueCount(),i=t.andWithCountBits(e,!0);return i/(2*n-3*i)}(t,e)}function b(t,e){return x(function(t,e){const n=t.trueCount()+e.trueCount(),i=t.trueCount()*e.trueCount();return 0==i?0:t.andWithCountBits(e,!0)*n/(2*i)}(t,e))}function v(t,e){return x(function(t,e){const n=t.trueCount()+e.trueCount(),i=t.trueCount()*e.trueCount();return 0==i?0:(t.andWithCountBits(e,!0)*n-i)/i}(t,e))}function w(t,e){return 1-function(t,e){const n=Math.min(t.trueCount(),e.trueCount());return 0==n?0:t.andWithCountBits(e,!0)/n}(t,e)}function C(t,e){return x(function(t,e){const n=Math.max(t.trueCount(),e.trueCount());return 0==n?0:t.andWithCountBits(e,!0)/n}(t,e))}function A(t,e){return x(function(t,e){return 0==t.length?0:t.andWithCountBits(e,!0)/t.length}(t,e))}function S(t,e){return x(function(t,e){const n=t.andWithCountBits(e,!0),i=t.countBits(!0)+e.countBits(!0),r=t.length,o=r-i+n;return n==r||o==r?1:n/i+o/(2*r-i)}(t,e))}function x(t){return t<=0?3402823e32:1/t-1}function E(t){if(t&&null!=t.range&&t.range>0){const e=t.range;return(t,n)=>Math.abs(t-n)/e}return(t,e)=>Math.abs(t-e)}function M(t){const e=function(t){const e=t?.mostCommon??new Set;return(t,n)=>{const i=t.length,r=n.length;let o=0,s=0,a=0;for(;s<i&&a<r;)t[s]===n[a]?(e?.has(t[s])||++o,++s,++a):t[s]<n[a]?++s:++a;return o}}(t);return(t,n)=>0===n.length||0===t.length?1e4:Math.min(t.length,n.length)/(e(t,n)+1e-4)}r.aT.Tanimoto,r.aT.Asymmetric,r.aT.Cosine,r.aT.Sokal,o.Z.HAMMING,o.Z.LEVENSHTEIN,o.Z.MONOMER_CHEMICAL_DISTANCE,o.Z.NEEDLEMANN_WUNSCH},684:(t,e,n)=>{"use strict";n.d(e,{C0:()=>o,GP:()=>i,Gi:()=>a,YP:()=>c,_X:()=>s,n3:()=>r,vb:()=>l});const i="dim-red-preprocessing-function",r="supportedSemTypes",o="supportedTypes",s="supportedUnits",a="supportedDistanceFunctions",l="bypassLargeDataWarning",c="show-scatterplot-progress"},6863:(t,e,n)=>{"use strict";function i(t={}){const e=function(){if(!t||!t.scoringMatrix||!t.alphabetIndexes)return(t,e)=>t===e?0:1;if(t.scoringMatrix.length!==Object.keys(t.alphabetIndexes).length)throw new Error("Scoring matrix and alphabet indexes should have the same length");const e=t.alphabetIndexes,n=t.scoringMatrix,i=Math.min(...Object.keys(e).map((t=>t.charCodeAt(0))))+1,r=new Float32Array((n.length+i)*(n.length+i));return Object.entries(e).forEach((([t,i])=>{const o=n[i];Object.entries(e).forEach((([e,i])=>{r[t.charCodeAt(0)*n.length+e.charCodeAt(0)]=o[i]}))})),(t,e)=>1-r[t.charCodeAt(0)*n.length+e.charCodeAt(0)]}(),n=t?.threshold??0;return(t,i)=>{let r=0;const o=t.length,s=i.length,a=Math.ceil(Math.max(o,s)*(1-n));o!==s&&(r=Math.abs(o-s));let l=0;for(let n=0;n<Math.min(o,s);n++)if(t[n]!==i[n]&&(l+=e(t[n],i[n]),l>a))return 1;return l+=r,l/=Math.max(o,s),l}}n.d(e,{Z:()=>s,V:()=>a});var r=n(2787);const o={gapOpen:1,gapExtend:.6,scoringMatrix:[[4,-1,-2,-2,0,-1,-1,0,-2,-1,-1,-1,-1,-2,-1,1,0,-3,-2,0,-2,-1,0,-4],[-1,5,0,-2,-3,1,0,-2,0,-3,-2,2,-1,-3,-2,-1,-1,-3,-2,-3,-1,0,-1,-4],[-2,0,6,1,-3,0,0,0,1,-3,-3,0,-2,-3,-2,1,0,-4,-2,-3,3,0,-1,-4],[-2,-2,1,6,-3,0,2,-1,-1,-3,-4,-1,-3,-3,-1,0,-1,-4,-3,-3,4,1,-1,-4],[0,-3,-3,-3,9,-3,-4,-3,-3,-1,-1,-3,-1,-2,-3,-1,-1,-2,-2,-1,-3,-3,-2,-4],[-1,1,0,0,-3,5,2,-2,0,-3,-2,1,0,-3,-1,0,-1,-2,-1,-2,0,3,-1,-4],[-1,0,0,2,-4,2,5,-2,0,-3,-3,1,-2,-3,-1,0,-1,-3,-2,-2,1,4,-1,-4],[0,-2,0,-1,-3,-2,-2,6,-2,-4,-4,-2,-3,-3,-2,0,-2,-2,-3,-3,-1,-2,-1,-4],[-2,0,1,-1,-3,0,0,-2,8,-3,-3,-1,-2,-1,-2,-1,-2,-2,2,-3,0,0,-1,-4],[-1,-3,-3,-3,-1,-3,-3,-4,-3,4,2,-3,1,0,-3,-2,-1,-3,-1,3,-3,-3,-1,-4],[-1,-2,-3,-4,-1,-2,-3,-4,-3,2,4,-2,2,0,-3,-2,-1,-2,-1,1,-4,-3,-1,-4],[-1,2,0,-1,-3,1,1,-2,-1,-3,-2,5,-1,-3,-1,0,-1,-3,-2,-2,0,1,-1,-4],[-1,-1,-2,-3,-1,0,-2,-3,-2,1,2,-1,5,0,-2,-1,-1,-1,-1,1,-3,-1,-1,-4],[-2,-3,-3,-3,-2,-3,-3,-3,-1,0,0,-3,0,6,-4,-2,-2,1,3,-1,-3,-3,-1,-4],[-1,-2,-2,-1,-3,-1,-1,-2,-2,-3,-3,-1,-2,-4,7,-1,-1,-4,-3,-2,-2,-1,-2,-4],[1,-1,1,0,-1,0,0,0,-1,-2,-2,0,-1,-2,-1,4,1,-3,-2,-2,0,0,0,-4],[0,-1,0,-1,-1,-1,-1,-2,-2,-1,-1,-1,-1,-2,-1,1,5,-2,-2,0,-1,-1,0,-4],[-3,-3,-4,-4,-2,-2,-3,-2,-2,-3,-2,-3,-1,1,-4,-3,-2,11,2,-3,-4,-3,-2,-4],[-2,-2,-2,-3,-2,-1,-2,-3,2,-1,-1,-2,-1,3,-3,-2,-2,2,7,-1,-3,-2,-1,-4],[0,-3,-3,-3,-1,-2,-2,-3,-3,3,1,-2,1,-1,-2,-2,0,-3,-1,4,-3,-2,-1,-4],[-2,-1,3,4,-3,0,1,-1,0,-3,-4,0,-3,-3,-2,0,-1,-4,-3,-3,4,1,-1,-4],[-1,0,0,1,-3,3,4,-2,0,-3,-3,1,-1,-3,-1,0,-1,-3,-2,-2,1,4,-1,-4],[0,-1,-1,-1,-2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-2,0,0,-2,-1,-1,-1,-1,-1,-4],[-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,1]],alphabetIndexes:{A:0,R:1,N:2,D:3,C:4,Q:5,E:6,G:7,H:8,I:9,L:10,K:11,M:12,F:13,P:14,S:15,T:16,W:17,Y:18,V:19,B:20,Z:21,X:22,"*":23}};var s;!function(t){t.HAMMING="Hamming",t.LEVENSHTEIN="Levenshtein",t.NEEDLEMANN_WUNSCH="Needlemann-Wunsch",t.MONOMER_CHEMICAL_DISTANCE="Monomer chemical distance"}(s||(s={}));const a={[s.HAMMING]:i,[s.LEVENSHTEIN]:function(){return(t,e)=>(0,r.I)(t,e)/Math.max(t.length,e.length)},[s.NEEDLEMANN_WUNSCH]:function(t){const e=new Uint16Array(65536),{gapOpen:n,gapExtend:i,scoringMatrix:r,alphabetIndexes:s}={...o,...t};Object.entries(s).forEach((([t,n])=>e[t.charCodeAt(0)]=n));const a=[new Float32Array(1e4),new Float32Array(1e4)];return(t,o)=>{const s=new Array(t.length+1).fill(!1),l=new Array(t.length+1).fill(!1);let c=0,h=1;for(let e=1;e<t.length+1;e++)a[0][e]=-i-(e-1)*i,a[1][e]=0;a[0][0]=0;for(let u=1;u<o.length+1;u++){a[h][0]=-i-(u-1)*i;for(let d=1;d<t.length+1;d++){const p=a[c][d-1]+r[e[t.charCodeAt(d-1)]][e[o.charCodeAt(u-1)]],m=a[c][d]-(s[d]||1===u||u===o.length?i:n),f=a[h][d-1]-(l[d-1]||1===d||d===t.length?i:n);a[h][d]=Math.max(p,f,m),a[h][d]===p?(s[d]=!1,l[d]=!1):a[h][d]===f?(s[d]=!1,l[d]=!0):(s[d]=!0,l[d]=!1)}c=h,h=(h+1)%2}const u=Math.min(t.length,o.length);return(u-a[c][t.length])/u}},[s.MONOMER_CHEMICAL_DISTANCE]:i}},8060:(t,e,n)=>{"use strict";n.d(e,{S:()=>i});const i="dimensionality-reducer-terminate-event"},9039:(t,e,n)=>{"use strict";var i;n.d(e,{c:()=>i}),function(t){t.UMAP="UMAP",t.T_SNE="t-SNE"}(i||(i={}))},8498:(t,e,n)=>{"use strict";var i,r,o,s,a,l,c;n.d(e,{EG:()=>a,Pn:()=>r,RR:()=>l,Wn:()=>c,aT:()=>o,m6:()=>s,xL:()=>i}),function(t){t.Levenshtein="Levenshtein",t.JaroWinkler="Jaro-Winkler",t.Manhattan="Manhattan String",t.Onehot="One-Hot"}(i||(i={})),function(t){t.Euclidean="Euclidean",t.Manhattan="Manhattan",t.Cosine="Vector Cosine"}(r||(r={})),function(t){t.Tanimoto="Tanimoto",t.Dice="Dice",t.Asymmetric="Asymmetric",t.BraunBlanquet="Braun-Blanquet",t.Cosine="Cosine",t.Kulczynski="Kulczynski",t.McConnaughey="Mc-Connaughey",t.RogotGoldberg="Rogot-Goldberg",t.Russel="Russel",t.Sokal="Sokal",t.Hamming="Hamming",t.Euclidean="Euclidean BitArray"}(o||(o={})),function(t){t.TanimotoIntArray="TanimotoIntArray"}(s||(s={})),function(t){t.Vector="Vector",t.String="String",t.BitArray="BitArray",t.MacroMolecule="MacroMolecule",t.Number="Number",t.IntArray="IntArray",t.NumberArray="NumberArray"}(a||(a={})),function(t){t.Difference="Difference"}(l||(l={})),function(t){t.CommonItems="Common Items"}(c||(c={}))},2780:(t,e,n)=>{"use strict";n(8498),n(9336)},9336:(t,e,n)=>{"use strict";var i=n(2787),r=n(944),o=n(6295),s=n(6863),a=n(8498);const l={[a.Pn.Euclidean]:o.jL,[a.Pn.Manhattan]:o.Hf,[a.Pn.Cosine]:o.w_},c={[a.xL.Levenshtein]:i.I,[a.xL.JaroWinkler]:r.Vb,[a.xL.Manhattan]:function(t,e){if(t.length!==e.length)return 1;{let n=0;for(let i=1;i<t.length;i++)n+=t[i]==e[i]?0:1;return n/t.length}},[a.xL.Onehot]:function(t,e){return t===e?0:1}},h={[a.aT.Tanimoto]:o.tO,[a.aT.Dice]:o.zn,[a.aT.Asymmetric]:o.gt,[a.aT.BraunBlanquet]:o.ij,[a.aT.Cosine]:o.lO,[a.aT.Kulczynski]:o.rR,[a.aT.McConnaughey]:o.lP,[a.aT.RogotGoldberg]:o.TK,[a.aT.Russel]:o.yK,[a.aT.Sokal]:o.Ii,[a.aT.Hamming]:o.be,[a.aT.Euclidean]:o.Qj},u={[a.m6.TanimotoIntArray]:o.v_},d={[a.RR.Difference]:o.T6},p={[a.Wn.CommonItems]:o.Hr},m={[a.EG.Vector]:{[a.Pn.Euclidean]:l[a.Pn.Euclidean],[a.Pn.Manhattan]:l[a.Pn.Manhattan],[a.Pn.Cosine]:l[a.Pn.Cosine]},[a.EG.String]:{[a.xL.Levenshtein]:c[a.xL.Levenshtein],[a.xL.JaroWinkler]:c[a.xL.JaroWinkler],[a.xL.Manhattan]:c[a.xL.Manhattan],[a.xL.Onehot]:c[a.xL.Onehot]},[a.EG.BitArray]:{[a.aT.Tanimoto]:h[a.aT.Tanimoto],[a.aT.Dice]:h[a.aT.Dice],[a.aT.Asymmetric]:h[a.aT.Asymmetric],[a.aT.BraunBlanquet]:h[a.aT.BraunBlanquet],[a.aT.Cosine]:h[a.aT.Cosine],[a.aT.Kulczynski]:h[a.aT.Kulczynski],[a.aT.McConnaughey]:h[a.aT.McConnaughey],[a.aT.RogotGoldberg]:h[a.aT.RogotGoldberg],[a.aT.Russel]:h[a.aT.Russel],[a.aT.Sokal]:h[a.aT.Sokal]},[a.EG.MacroMolecule]:{[s.Z.HAMMING]:s.V[s.Z.HAMMING],[s.Z.LEVENSHTEIN]:s.V[s.Z.LEVENSHTEIN],[s.Z.NEEDLEMANN_WUNSCH]:s.V[s.Z.NEEDLEMANN_WUNSCH],[s.Z.MONOMER_CHEMICAL_DISTANCE]:s.V[s.Z.MONOMER_CHEMICAL_DISTANCE]},[a.EG.Number]:{[a.RR.Difference]:d[a.RR.Difference]},[a.EG.IntArray]:{[a.m6.TanimotoIntArray]:u[a.m6.TanimotoIntArray]},[a.EG.NumberArray]:{[a.Wn.CommonItems]:p[a.Wn.CommonItems]}};Object.keys(m).reduce(((t,e)=>{for(const n of Object.keys(m[e]))t[n]=e;return t}),{})},8774:(t,e,n)=>{"use strict";n.d(e,{A:()=>i});class i{constructor(t,e=!1){if(this._length=0,this._version=0,this._updateLevel=0,this._selectedCount=0,this._selectedCountVersion=-1,this._selectedIndexesVersion=-1,this._versionedName="",this._versionedNameVersion=-1,this.SHRINK_THRESHOLD=256,"number"==typeof t){const n=t,r=i._createBuffer(n);if(e)for(let t=0;t<r.length;t++)r[t]=-1;this._data=r,this._length=n}else{if(!(t instanceof Uint32Array))throw new Error("Invalid constructor");this._data=t,this._length=e}}getRawData(){return this._data}assureGoez(t,e){if(t<0)throw new Error(`${e} should be greater than zero`)}assureInRange(t,e,n,i){if(t<e||t>n)throw new Error(`Argument ${i} (${t}) out of range (${e}, ${n})`)}copy(t,e,n){for(let i=0;i<n;i++)e[i]=t[i]}copyFrom(t){if(this._length!=t._length)throw new Error(`Lengths differ (${this._length} != ${t._length})`);this.copy(t._data,this._data,this.lengthInInts),this._version++}get length(){return this._length}get buffer(){return this._data}set buffer(t){this._data=t,this._version++}get version(){return this._version}set version(t){this._version=t}incrementVersion(t=!0){this._version++}get lengthInInts(){return Math.floor((this._length+31)/32)}get versionedName(){return this._version==this._versionedNameVersion?this._versionedName:""}set versionedName(t){this._versionedName=t,this._versionedNameVersion=this._version}get self(){return this}setLength(t){if(t<0)throw new Error("should be >= 0");if(t==this._length)return;const e=Math.floor((t+31)/32);if(e>this._data.length||e+this.SHRINK_THRESHOLD<this._data.length){const t=new Uint32Array(e);this.copy(this._data,t,e>this._data.length?this._data.length:e),this._data=t}t>this._length&&(this._length%32>0&&(this._data[this.lengthInInts-1]&=(1<<(this._length%32&31))-1),this._data.fill(0,this.lengthInInts,e)),this._length=t,this._version++}static fromAnd(t,e){if(t._length!=e._length)throw new Error(`Lengths differ (${t._length} != ${e._length})`);const n=new i(t._length);n._length=t._length,n._data=i._createBuffer(n._length),n._version=0;const r=t.lengthInInts;for(let i=0;i<r;i++)n._data[i]=t._data[i]&e._data[i];return n}static _createBuffer(t){return new Uint32Array(Math.floor((t+31)/32))}static fromValues(t){const e=new i(t.length);e._version=0;for(let n=0;n<e._length;n++)t[n]&&(e._data[Math.floor(n/32)]|=1<<(n%32&31));return e}static fromSeq(t,e){const n=new i(t);for(let i=0;i<t;++i)n.setBit(i,e(i));return n._version=0,n}static fromString(t){return i.fromSeq(t.length,(e=>"1"==t.charAt(e)))}static fromUint32Array(t,e){const n=new i(t);return n._data=e,n}static fromBytes(t){const e=t.length,n=new i(8*e);n._data=new Uint32Array(Math.floor((e+3)/4)),n._length=8*e;let r=0,o=0;for(;e-o>=4;)n._data[r++]=255&t[o]|(255&t[o+1])<<8|(255&t[o+2])<<16|(255&t[o+3])<<24,o+=4;return e-o==3&&(n._data[r]=(255&t[o+2])<<16),e-o==2&&(n._data[r]|=(255&t[o+1])<<8),e-o==1&&(n._data[r]|=255&t[o]),n._version=0,n}toString(){return`${this._length} bits, ${this.countBits(!0)} set`}equals(t){if(this==t)return!0;if(null==t)return!1;if(this._length!=t._length)return!1;if(0==this._length)return!0;for(let e=0;e<this._data.length-1;e++)if(this._data[e]!=t._data[e])return!1;for(let e=8*(this._data.length-1);e<this._length;e++)if(this.getBit(e)!=t.getBit(e))return!1;return!0}clone(){const t=new i(0,!1);return t._data=Uint32Array.from(this._data),t._length=this._length,t._version=this._version,t}init(t,e){this.setAll(!1,!1);for(let e=0;e<this._length;e++)t(e)&&(this._data[Math.floor(e/32)]|=1<<(e%32&31));return this.incrementVersion(e),this}invert(t=!0){for(let t=0;t<this._data.length;t++)this._data[t]^=-1;this.incrementVersion(t)}setAll(t,e=!1){const n=t?-1:0,i=this.lengthInInts;for(let t=0;t<i;t++)this._data[t]=n;this.incrementVersion(e)}setIndexes(t,e=!0,n=!0,i=!0){n&&this.setAll(!e,!1);for(const n of t)this.setFast(n,e);this.incrementVersion(i)}everyIndex(t,e=!0){for(const n of t)if(this.getBit(n)!=e)return!1;return!0}anyIndex(t,e=!0){for(const n of t)if(this.getBit(n)==e)return!0;return!1}setWhere(t,e=!0,n=!0,i=!0,r=!0){if(n&&r&&this.setAll(!e,!1),r)for(let n=0;n<this._length;n++)t(n)&&this.setFast(n,e);else for(let n=0;n<this._length;n++)this.setFast(n,t(n)?e:!e);this.incrementVersion(i)}getRange(t,e){this.assureInRange(t,0,this._length-1,"from"),this.assureInRange(e,0,this._length,"to");const n=[];for(let i=t;i<e;++i)n.push(this.getBit(i));return i.fromValues(n)}getRangeAsList(t,e){this.assureInRange(t,0,this._length-1,"from"),this.assureInRange(e,0,this._length,"to");const n=[];for(let i=t;i<e;++i)n.push(this.getBit(i));return n}setRange(t,e,n,i=!0){this.assureInRange(t,0,this._length-1,"from"),this.assureInRange(e,0,this._length-1,"to");const r=Math.min(t,e),o=Math.max(t,e);if(n)for(let t=r;t<=o;t++)this.setTrue(t);else for(let t=r;t<=o;t++)this.setFalse(t);return this.incrementVersion(i),this}setRandom(t,e,n=!0){if(t<0||t>this._length)throw new Error("n must be >= 0 && <= Count");t>this._length/2&&this.setRandom(this._length-t,!e),this.setAll(!e);for(let n=0;n<t;){const t=Math.floor(Math.random()*this._length);this.getBit(t)!=e&&(this.setFast(t,e),n++)}this.incrementVersion(n)}and(t,e=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");for(let e=0,n=this.lengthInInts;e<n;e++)this._data[e]&=t._data[e];return this.incrementVersion(e),this}andNot(t,e=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");const n=this.lengthInInts;for(let e=0;e<n;e++)this._data[e]&=~t._data[e];return this.incrementVersion(e),this}notAnd(t,e=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");for(let e=0,n=this.lengthInInts;e<n;e++)this._data[e]=~this._data[e]&t._data[e];return this.incrementVersion(e),this}not(t=!0){for(let t=0,e=this.lengthInInts;t<e;t++)this._data[t]=~this._data[t];return this.incrementVersion(t),this}or(t,e=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");for(let e=0,n=this.lengthInInts;e<n;e++)this._data[e]|=t._data[e];return this.incrementVersion(e),this}xor(t,e=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");for(let e=0,n=this.lengthInInts;e<n;e++)this._data[e]^=t._data[e];return this.incrementVersion(e),this}insertAt(t,e,n=!1){if(this.assureInRange(t,0,this._length,"pos"),0==e)return;const i=this._length;this.setLength(this._length+e);for(let n=i-1;n>=t;n--)this.setBit(n+e,this.getBit(n));for(let i=t;i<t+e;i++)this.setBit(i,n)}removeAt(t,e=1){if(e<0)throw new Error("n cannot be negative");if(this.assureInRange(t,0,this._length-e,"pos"),this.contains(!0))for(let n=t;n<this._length-e;n++)this.setBit(n,this.getBit(n+e));this.setLength(this._length-e)}removeByMask(t,e=!0){if(this._length!=t.length)throw new Error("length != mask.length");if(t==this)this.setLength(t.countBits(!e)),this.setAll(!e);else{let n=0;for(let i=-1;-1!=(i=t.findNext(i,!e));)this.setFast(n++,this.getBit(i));this._length=n,this._version++}return this}getBit(t){return!!(this._data[Math.floor(t/32)]&1<<(31&t))}setBit(t,e,n=!0){this.setFast(t,e),this._version++}setFast(t,e){e?this._data[Math.floor(t/32)]|=1<<(31&t):this._data[Math.floor(t/32)]&=~(1<<(31&t))}setTrue(t){this._data[Math.floor(t/32)]|=1<<(31&t)}setFalse(t){this._data[Math.floor(t/32)]&=~(1<<(31&t))}trueCount(){return this.countBits(!0)}falseCount(){return this.countBits(!1)}countBits(t){if(0==this._length)return 0;if(this._selectedCountVersion!=this._version){this._selectedCount=0;const t=this.lengthInInts;let e=0;for(;e<t-1;e++)for(let t=this._data[e];0!=t;t>>>=8)this._selectedCount+=i._onBitCount[255&t];let n=this._data[e];const r=31&this._length;for(0!=r&&(n&=~(4294967295<<r));0!=n;n>>>=8)this._selectedCount+=i._onBitCount[255&n];this._selectedCountVersion=this._version}return t?this._selectedCount:this._length-this._selectedCount}countWhere(t){let e=0;if(this.trueCount()==this._length)for(let n=0;n<this._length;n++)e+=t(n)?1:0;else for(let n=-1;-1!=(n=this.findNext(n,!0));)e+=t(n)?1:0;return e}andWithCountBits(t,e){if(0==this._length)return 0;let n=0;const r=this.lengthInInts;let o=0;for(;o<r-1;o++)for(let e=this._data[o]&t._data[o];0!=e;e>>>=8)n+=i._onBitCount[255&e];let s=this._data[o]&t._data[o];const a=31&this._length;for(0!=a&&(s&=~(4294967295<<a));0!=s;s>>>=8)n+=i._onBitCount[255&s];return e?n:this._length-n}clear(){this.setLength(0)}contains(t){return this.findNext(-1,t)>=0}get allTrue(){return this.countBits(!0)==this._length}get allFalse(){return this.countBits(!1)==this._length}get anyTrue(){return this.countBits(!0)>0}get anyFalse(){return this.countBits(!1)>0}findNext(t,e=!0){if(this.assureInRange(t,-1,this._length,"index"),t>=this._length-1)return-1;let n=31&(t=t<0?0:t+1);const r=this.lengthInInts;for(let o=Math.floor(t/32);o<r;o++){let r=e?this._data[o]:~this._data[o];if(0!=n)r&=4294967295<<n&4294967295,n=0;else if(!e&&-4294967296==r)continue;for(let e=0;0!=r;e+=8,r>>>=8){const n=i._firstOnBit[255&r];if(n>=0)return(t=n+32*o+e)>=this._length?-1:t}}return-1}findPrev(t,e=!0){if(0==t)return-1;this.assureInRange(t,-1,this._length,"index");let n=1+(t=t<0?this._length-1:t-1)&31;for(let r=Math.floor(t/32);r>=0;r--){let t=e?this._data[r]:~this._data[r];0!=n&&(t&=~(4294967295<<n),n=0);for(let e=24;0!=t;e-=8,t<<=8){const n=i._lastOnBit[t>>>24];if(n>=0)return n+32*r+e}}return-1}}i._onBitCount=Int8Array.from([0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,4,5,5,6,5,6,6,7,5,6,6,7,6,7,7,8]),i._firstOnBit=Int8Array.from([-1,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0]),i._lastOnBit=Int8Array.from([-1,0,1,1,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7])},8070:(t,e,n)=>{"use strict";n.d(e,{cb:()=>a,PE:()=>s}),n(4328);var i=n(6082);n(9982),i.DataFrame.fromCsv('countries,fasta,smiles,molregno,LON,Zip Code,Street Address Line 1,ImageUrl,user_id,error_message,xray,flag,magnitude,CS-id,pdb_id,accel_a,time_offset,chart,fit,Questions,empty_number,empty_string\nBelgium,MSNFHNEHVMQFYRNNLKTKGVFGRQ,CC(C(=O)OCCCc1cccnc1)c2cccc(c2)C(=O)c3ccccc3,1480014,36.276729583740234,995042300,14016 ROUTE 31W,https://datagrok.ai/img/slides/access-db-connect.png,id,ErrorMessage,"COMPND \nATOM \nEND",flag,1,1,1QBS,1,1.23,<chart></chart>,"{""series"":[{""name"":""Run:2023-08-08"",""fitFunction"":""sigmoid"",""fitLineColor"":""#1f77b4"",""pointColor"":""#1f77b4"",""showPoints"":""points"",""parameters"":[2.497360340644872, 1.7058694986686864, 5.278052678195135, 0.16000320889028383],""points"":[{""x"":0.10000000149011612,""y"":2.374499797821045},{""x"":0.6000000238418579,""y"":2.6242473125457764},{""x"":1.100000023841858,""y"":2.367267608642578},{""x"":1.600000023841858,""y"":2.6723148822784424},{""x"":2.0999999046325684,""y"":2.6537344455718994},{""x"":2.5999999046325684,""y"":2.3651671409606934},{""x"":3.0999999046325684,""y"":2.5654284954071045},{""x"":3.5999999046325684,""y"":2.4160959720611572},{""x"":4.099999904632568,""y"":2.286726713180542},{""x"":4.599999904632568,""y"":2.5100042819976807},{""x"":5.099999904632568,""y"":1.6676985025405884},{""x"":5.599999904632568,""y"":0.680136501789093},{""x"":6.099999904632568,""y"":0.3391543924808502},{""x"":6.599999904632568,""y"":0.09038983285427094},{""x"":7.099999904632568,""y"":0.19802775979042053}]},{""name"":""Run:2023-08-08"",""fitLineColor"":""#ffbb78"",""pointColor"":""#ffbb78"",""showPoints"":""points"",""parameters"":[7.525235855508179, 1.3186911876809984, 5.335672608564294, 0.7860743343958098],""points"":[{""x"":0.10000000149011612,""y"":7.988070487976074},{""x"":0.6000000238418579,""y"":7.018453121185303},{""x"":1.100000023841858,""y"":8.115279197692871},{""x"":1.600000023841858,""y"":7.486658096313477},{""x"":2.0999999046325684,""y"":7.396438121795654},{""x"":2.5999999046325684,""y"":7.477052211761475},{""x"":3.0999999046325684,""y"":6.913095474243164},{""x"":3.5999999046325684,""y"":8.01385498046875},{""x"":4.099999904632568,""y"":6.985900402069092},{""x"":4.599999904632568,""y"":6.970335960388184},{""x"":5.099999904632568,""y"":5.448817253112793},{""x"":5.599999904632568,""y"":2.5534818172454834},{""x"":6.099999904632568,""y"":1.893947958946228},{""x"":6.599999904632568,""y"":0.6340042352676392},{""x"":7.099999904632568,""y"":0.8403874039649963}]}],""chartOptions"":{""xAxisName"":""Conc."",""yAxisName"":""Activity"",""title"":""Dose-Response curves""}}",text,100,abc\nBurundi,MDYKETLLMPKTDFPMRGGLPNKEPQIQEKW,COc1ccc2cc(ccc2c1)C(C)C(=O)Oc3ccc(C)cc3OC,1480015,36.276729583740234,995073444,80 STATE HIGHWAY 310,https://datagrok.ai/img/slides/access-db-connect.png,id,ErrorMessage,"COMPND \nATOM \nEND",flag,2,2,1ZP8,2,1.23,<chart></chart>,"{""series"":[{""name"":""Run:2023-08-08"",""fitFunction"":""sigmoid"",""fitLineColor"":""#1f77b4"",""pointColor"":""#1f77b4"",""showPoints"":""points"",""parameters"":[4.431460753103398, 2.1691498799246745, 5.266445597102774, 0.7825762827017926],""points"":[{""x"":0.10000000149011612,""y"":4.751083850860596},{""x"":0.6000000238418579,""y"":4.203000068664551},{""x"":1.100000023841858,""y"":4.415858745574951},{""x"":1.600000023841858,""y"":4.68414306640625},{""x"":2.0999999046325684,""y"":4.198400974273682},{""x"":2.5999999046325684,""y"":4.179222106933594},{""x"":3.0999999046325684,""y"":4.638473987579346},{""x"":3.5999999046325684,""y"":4.708553314208984},{""x"":4.099999904632568,""y"":4.291589260101318},{""x"":4.599999904632568,""y"":4.038082599639893},{""x"":5.099999904632568,""y"":3.4349939823150635},{""x"":5.599999904632568,""y"":1.2194708585739136},{""x"":6.099999904632568,""y"":1.1920831203460693},{""x"":6.599999904632568,""y"":0.5352635979652405},{""x"":7.099999904632568,""y"":0.3346920311450958}]},{""name"":""Run:2023-08-08"",""fitLineColor"":""#ffbb78"",""pointColor"":""#ffbb78"",""showPoints"":""points"",""parameters"":[2.339458017970126, -1.0734184310171178, 4.746332950550934, 0.2482416857595658],""points"":[{""x"":0.10000000149011612,""y"":0.2139337658882141},{""x"":0.6000000238418579,""y"":0.4269562065601349},{""x"":1.100000023841858,""y"":0.2441573292016983},{""x"":1.600000023841858,""y"":0.146635964512825},{""x"":2.0999999046325684,""y"":0.08818462491035461},{""x"":2.5999999046325684,""y"":0.2560656666755676},{""x"":3.0999999046325684,""y"":0.42434045672416687},{""x"":3.5999999046325684,""y"":0.37111231684684753},{""x"":4.099999904632568,""y"":0.5581737160682678},{""x"":4.599999904632568,""y"":1.183590054512024},{""x"":5.099999904632568,""y"":1.5629843473434448},{""x"":5.599999904632568,""y"":2.3211288452148438},{""x"":6.099999904632568,""y"":2.229961633682251},{""x"":6.599999904632568,""y"":2.2560226917266846},{""x"":7.099999904632568,""y"":2.2142398357391357}]}],""chartOptions"":{""xAxisName"":""Conc."",""yAxisName"":""Activity"",""title"":""Dose-Response curves""}}",text,,\nCameroon,MIEVFLFGIVLGLIPITLAGLFVTAYLQYRRGDQLDL,COc1ccc2cc(ccc2c1)C(C)C(=O)OCCCc3cccnc3,1480016,36.26095962524414,995153596,30-56 WHITESTONE EXPY,https://datagrok.ai/img/slides/access-db-connect.png,id,ErrorMessage,"COMPND \nATOM \nEND",flag,3,3,2BDJ,3,1.23,<chart></chart>,"{""series"":[{""name"":""Run:2023-08-08"",""fitFunction"":""sigmoid"",""fitLineColor"":""#1f77b4"",""pointColor"":""#1f77b4"",""showPoints"":""points"",""parameters"":[4.6760652578642325, 0.9046956320756703, 5.651408971856738, 0.07738846012184185],""points"":[{""x"":0.10000000149011612,""y"":4.32425594329834},{""x"":0.6000000238418579,""y"":4.668442249298096},{""x"":1.100000023841858,""y"":4.379785060882568},{""x"":1.600000023841858,""y"":5.0345139503479},{""x"":2.0999999046325684,""y"":4.878653526306152},{""x"":2.5999999046325684,""y"":4.3451313972473145},{""x"":3.0999999046325684,""y"":4.336992263793945},{""x"":3.5999999046325684,""y"":5.037430286407471},{""x"":4.099999904632568,""y"":5.0092692375183105},{""x"":4.599999904632568,""y"":4.151902675628662},{""x"":5.099999904632568,""y"":3.4066951274871826},{""x"":5.599999904632568,""y"":2.3732759952545166},{""x"":6.099999904632568,""y"":1.673728108406067},{""x"":6.599999904632568,""y"":0.48574790358543396},{""x"":7.099999904632568,""y"":0.2783052325248718}]},{""name"":""Run:2023-08-08"",""fitLineColor"":""#ffbb78"",""pointColor"":""#ffbb78"",""showPoints"":""points"",""parameters"":[2.938395863010111, -1.4658480661392117, 5.462702751996584, 0.3473139023615039],""points"":[{""x"":0.10000000149011612,""y"":0.4941710829734802},{""x"":0.6000000238418579,""y"":0.15323974192142487},{""x"":1.100000023841858,""y"":0.46373432874679565},{""x"":1.600000023841858,""y"":0.3370431363582611},{""x"":2.0999999046325684,""y"":0.5179030299186707},{""x"":2.5999999046325684,""y"":0.27899765968322754},{""x"":3.0999999046325684,""y"":0.22075064480304718},{""x"":3.5999999046325684,""y"":0.5789918899536133},{""x"":4.099999904632568,""y"":0.21169911324977875},{""x"":4.599999904632568,""y"":0.27857646346092224},{""x"":5.099999904632568,""y"":1.0906332731246948},{""x"":5.599999904632568,""y"":1.8520300388336182},{""x"":6.099999904632568,""y"":2.7177059650421143},{""x"":6.599999904632568,""y"":2.8680918216705322},{""x"":7.099999904632568,""y"":3.2413077354431152}]}],""chartOptions"":{""xAxisName"":""Conc."",""yAxisName"":""Activity"",""title"":""Dose-Response curves""}}",text,,\nCanada,MMELVLKTIIGPIVVGVVLRIVDKWLNKDK,CC(C(=O)NCCS)c1cccc(c1)C(=O)c2ccccc2,1480017,36.26095962524414,99515,30-56 WHITESTONE EXPY,https://datagrok.ai/img/slides/access-db-connect.png,id,ErrorMessage,"COMPND \nATOM \nEND",flag,4,4,1IAN,4,1.23,<chart></chart>,"{""series"":[{""name"":""Run:2023-08-08"",""fitFunction"":""sigmoid"",""fitLineColor"":""#1f77b4"",""pointColor"":""#1f77b4"",""showPoints"":""points"",""parameters"":[0.8597390975430008, 1.0957625732481946, 5.260537067987958, 0.07974187998177736],""points"":[{""x"":0.10000000149011612,""y"":0.8190152645111084},{""x"":0.6000000238418579,""y"":0.8421689867973328},{""x"":1.100000023841858,""y"":0.8740922212600708},{""x"":1.600000023841858,""y"":0.8924275040626526},{""x"":2.0999999046325684,""y"":0.8249067664146423},{""x"":2.5999999046325684,""y"":0.9327669143676758},{""x"":3.0999999046325684,""y"":0.8522974252700806},{""x"":3.5999999046325684,""y"":0.8174492716789246},{""x"":4.099999904632568,""y"":0.8394647240638733},{""x"":4.599999904632568,""y"":0.7139387726783752},{""x"":5.099999904632568,""y"":0.5561167597770691},{""x"":5.599999904632568,""y"":0.3276226818561554},{""x"":6.099999904632568,""y"":0.12479474395513535},{""x"":6.599999904632568,""y"":0.13006797432899475},{""x"":7.099999904632568,""y"":0.059702079743146896}]},{""name"":""Run:2023-08-08"",""fitLineColor"":""#ffbb78"",""pointColor"":""#ffbb78"",""showPoints"":""points"",""parameters"":[5.760930219582546, 1.6591793293833013, 4.667155929720851, 0.7858109544121652],""points"":[{""x"":0.10000000149011612,""y"":6.156993389129639},{""x"":0.6000000238418579,""y"":5.236701965332031},{""x"":1.100000023841858,""y"":6.010560512542725},{""x"":1.600000023841858,""y"":5.495512962341309},{""x"":2.0999999046325684,""y"":6.087770462036133},{""x"":2.5999999046325684,""y"":5.79986572265625},{""x"":3.0999999046325684,""y"":5.597546577453613},{""x"":3.5999999046325684,""y"":5.520902156829834},{""x"":4.099999904632568,""y"":5.360654354095459},{""x"":4.599999904632568,""y"":3.5539746284484863},{""x"":5.099999904632568,""y"":1.577236294746399},{""x"":5.599999904632568,""y"":1.0001264810562134},{""x"":6.099999904632568,""y"":0.9305797815322876},{""x"":6.599999904632568,""y"":0.6033638715744019},{""x"":7.099999904632568,""y"":0.4203685522079468}]}],""chartOptions"":{""xAxisName"":""Conc."",""yAxisName"":""Activity"",""title"":""Dose-Response curves""}}",text,,\nColombia,MDRTDEVSNHTHDKPTLTWFEEIFEEYHSPFHN,FC(F)(F)c1ccc(OC2CCNCC2)cc1,1480029,36.3309440612793,995152050,1 COURT HOUSE SQUARE,https://datagrok.ai/img/slides/access-db-connect.png,id,ErrorMessage,"COMPND \nATOM \nEND",flag,5,5,4UJ1,5,1.23,<chart></chart>,"{""series"":[{""name"":""Run:2023-08-08"",""fitFunction"":""sigmoid"",""fitLineColor"":""#1f77b4"",""pointColor"":""#1f77b4"",""showPoints"":""points"",""parameters"":[6.4995088314153655, 2.4270351004539914, 5.178659535348579, 0.625653346241577],""points"":[{""x"":0.10000000149011612,""y"":6.496231555938721},{""x"":0.6000000238418579,""y"":6.42543363571167},{""x"":1.100000023841858,""y"":7.040063858032227},{""x"":1.600000023841858,""y"":6.1115403175354},{""x"":2.0999999046325684,""y"":6.680728435516357},{""x"":2.5999999046325684,""y"":6.406774520874023},{""x"":3.0999999046325684,""y"":6.611269474029541},{""x"":3.5999999046325684,""y"":5.889094352722168},{""x"":4.099999904632568,""y"":6.75344705581665},{""x"":4.599999904632568,""y"":6.361435890197754},{""x"":5.099999904632568,""y"":4.1666975021362305},{""x"":5.599999904632568,""y"":1.172118902206421},{""x"":6.099999904632568,""y"":0.801048994064331},{""x"":6.599999904632568,""y"":0.4640021026134491},{""x"":7.099999904632568,""y"":0.0010357667924836278}]},{""name"":""Run:2023-08-08"",""fitLineColor"":""#ffbb78"",""pointColor"":""#ffbb78"",""showPoints"":""points"",""parameters"":[1.4734381347446401, 1.1649805188074196, 4.82958608866421, 0.09500545496710007],""points"":[{""x"":0.10000000149011612,""y"":1.5279096364974976},{""x"":0.6000000238418579,""y"":1.3559974431991577},{""x"":1.100000023841858,""y"":1.5246378183364868},{""x"":1.600000023841858,""y"":1.5567657947540283},{""x"":2.0999999046325684,""y"":1.4114240407943726},{""x"":2.5999999046325684,""y"":1.4045010805130005},{""x"":3.0999999046325684,""y"":1.4769829511642456},{""x"":3.5999999046325684,""y"":1.4875500202178955},{""x"":4.099999904632568,""y"":1.2991987466812134},{""x"":4.599999904632568,""y"":0.922961413860321},{""x"":5.099999904632568,""y"":0.6520044803619385},{""x"":5.599999904632568,""y"":0.15350978076457977},{""x"":6.099999904632568,""y"":0.1078903079032898},{""x"":6.599999904632568,""y"":0.17276449501514435},{""x"":7.099999904632568,""y"":0.14066608250141144}]}],""chartOptions"":{""xAxisName"":""Conc."",""yAxisName"":""Activity"",""title"":""Dose-Response curves""}}",text,,\nCosta Rica,MKSTKEEIQTIKTLLKDSRTAKYHKRLQIVL,CC(C)Cc1ccc(cc1)C(C)C(=O)N2CCCC2C(=O)OCCCc3ccccc3,1480018,36.3309440612793,995084218,4041 SOUTHWESTERN BLVD,https://datagrok.ai/img/slides/access-db-connect.png,id,ErrorMessage,"COMPND \nATOM \nEND",flag,6,6,2BPW,6,1.23,<chart></chart>,"{""series"":[{""name"":""Run:2023-08-08"",""fitFunction"":""sigmoid"",""fitLineColor"":""#1f77b4"",""pointColor"":""#1f77b4"",""showPoints"":""points"",""parameters"":[2.4833641843311227, -1.8945978742090062, 4.671127708092568, 0.24159861311815153],""points"":[{""x"":0.10000000149011612,""y"":0.0969524160027504},{""x"":0.6000000238418579,""y"":0.028483040630817413},{""x"":1.100000023841858,""y"":0.22087176144123077},{""x"":1.600000023841858,""y"":0.0068915546871721745},{""x"":2.0999999046325684,""y"":0.4305879771709442},{""x"":2.5999999046325684,""y"":0.44774115085601807},{""x"":3.0999999046325684,""y"":0.45346319675445557},{""x"":3.5999999046325684,""y"":0.2370593100786209},{""x"":4.099999904632568,""y"":0.4657953977584839},{""x"":4.599999904632568,""y"":1.155200719833374},{""x"":5.099999904632568,""y"":2.2294070720672607},{""x"":5.599999904632568,""y"":2.4311530590057373},{""x"":6.099999904632568,""y"":2.33846116065979},{""x"":6.599999904632568,""y"":2.608201026916504},{""x"":7.099999904632568,""y"":2.8136143684387207}]},{""name"":""Run:2023-08-08"",""fitLineColor"":""#ffbb78"",""pointColor"":""#ffbb78"",""showPoints"":""points"",""parameters"":[5.224573521642033, 1.4454033924198528, 5.6014197746076535, 0.2823216054197577],""points"":[{""x"":0.10000000149011612,""y"":4.95027494430542},{""x"":0.6000000238418579,""y"":5.1754679679870605},{""x"":1.100000023841858,""y"":5.276752948760986},{""x"":1.600000023841858,""y"":5.589294910430908},{""x"":2.0999999046325684,""y"":5.616994857788086},{""x"":2.5999999046325684,""y"":5.120813846588135},{""x"":3.0999999046325684,""y"":5.340766906738281},{""x"":3.5999999046325684,""y"":4.876471042633057},{""x"":4.099999904632568,""y"":4.94999361038208},{""x"":4.599999904632568,""y"":5.162564754486084},{""x"":5.099999904632568,""y"":4.399557590484619},{""x"":5.599999904632568,""y"":2.7977969646453857},{""x"":6.099999904632568,""y"":1.0229872465133667},{""x"":6.599999904632568,""y"":0.48275601863861084},{""x"":7.099999904632568,""y"":0.10408931970596313}]}],""chartOptions"":{""xAxisName"":""Conc."",""yAxisName"":""Activity"",""title"":""Dose-Response curves""}}",text,,\nCuba,MHAILRYFIRRLFYHIFYKIYSLISKKHQSLPSDVRQF,COc1ccc2c(c1)c(CC(=O)N3CCCC3C(=O)Oc4ccc(C)cc4OC)c(C)n2C(=O)c5ccc(Cl)cc5,1480019,36.33115768432617,995081928,1227 US HIGHWAY 11,https://datagrok.ai/img/slides/access-db-connect.png,id,ErrorMessage,"COMPND \nATOM \nEND",flag,7,7,1QBS,7,1.23,<chart></chart>,"{""series"":[{""name"":""Run:2023-08-08"",""fitFunction"":""sigmoid"",""fitLineColor"":""#1f77b4"",""pointColor"":""#1f77b4"",""showPoints"":""points"",""parameters"":[3.320838679713925, -1.2421619987316728, 4.831325425225256, 0.3236011098403072],""points"":[{""x"":0.10000000149011612,""y"":0.3727470338344574},{""x"":0.6000000238418579,""y"":0.12365014106035233},{""x"":1.100000023841858,""y"":0.48422467708587646},{""x"":1.600000023841858,""y"":0.2264465093612671},{""x"":2.0999999046325684,""y"":0.16821794211864471},{""x"":2.5999999046325684,""y"":0.3879014551639557},{""x"":3.0999999046325684,""y"":0.5470244884490967},{""x"":3.5999999046325684,""y"":0.3419053554534912},{""x"":4.099999904632568,""y"":0.7655120491981506},{""x"":4.599999904632568,""y"":1.2346516847610474},{""x"":5.099999904632568,""y"":2.453336715698242},{""x"":5.599999904632568,""y"":2.9565491676330566},{""x"":6.099999904632568,""y"":3.335299491882324},{""x"":6.599999904632568,""y"":3.240290880203247},{""x"":7.099999904632568,""y"":3.1107218265533447}]},{""name"":""Run:2023-08-08"",""fitLineColor"":""#ffbb78"",""pointColor"":""#ffbb78"",""showPoints"":""points"",""parameters"":[3.6401853521511094, 1.26211588875013, 5.399028074402744, 0.5089580830068091],""points"":[{""x"":0.10000000149011612,""y"":3.8585598468780518},{""x"":0.6000000238418579,""y"":3.6077206134796143},{""x"":1.100000023841858,""y"":3.855252265930176},{""x"":1.600000023841858,""y"":3.619039297103882},{""x"":2.0999999046325684,""y"":3.839388370513916},{""x"":2.5999999046325684,""y"":3.335283041000366},{""x"":3.0999999046325684,""y"":3.571141481399536},{""x"":3.5999999046325684,""y"":3.4155046939849854},{""x"":4.099999904632568,""y"":3.7316646575927734},{""x"":4.599999904632568,""y"":3.0680155754089355},{""x"":5.099999904632568,""y"":2.891066551208496},{""x"":5.599999904632568,""y"":1.6022753715515137},{""x"":6.099999904632568,""y"":0.7652576565742493},{""x"":6.599999904632568,""y"":0.6875326037406921},{""x"":7.099999904632568,""y"":0.5828871726989746}]}],""chartOptions"":{""xAxisName"":""Conc."",""yAxisName"":""Activity"",""title"":""Dose-Response curves""}}",text,,\nItaly,MSNFHNEHVMQFYRNNLKTKGVFGRQ,CC(C)Cc1ccc(cc1)C(C)C(=O)N2CCCC2C(=O)OCCO[N+](=O)[O-],1480020,36.33115768432617,99502,"168-46 91ST AVE., 2ND FLR",https://datagrok.ai/img/slides/access-db-connect.png,id,ErrorMessage,"COMPND \nATOM \nEND",flag,8,8,1ZP8,8,1.23,<chart></chart>,"{""series"":[{""name"":""Run:2023-08-08"",""fitFunction"":""sigmoid"",""fitLineColor"":""#1f77b4"",""pointColor"":""#1f77b4"",""showPoints"":""points"",""parameters"":[2.293592105923809, 1.3781586549141835, 5.1025898038676605, 0.03493851245291291],""points"":[{""x"":0.10000000149011612,""y"":2.1287283897399902},{""x"":0.6000000238418579,""y"":2.267972230911255},{""x"":1.100000023841858,""y"":2.398442506790161},{""x"":1.600000023841858,""y"":2.5130622386932373},{""x"":2.0999999046325684,""y"":2.3255116939544678},{""x"":2.5999999046325684,""y"":2.127340793609619},{""x"":3.0999999046325684,""y"":2.47259783744812},{""x"":3.5999999046325684,""y"":2.131181478500366},{""x"":4.099999904632568,""y"":2.090421438217163},{""x"":4.599999904632568,""y"":2.02299165725708},{""x"":5.099999904632568,""y"":1.1105059385299683},{""x"":5.599999904632568,""y"":0.4494485855102539},{""x"":6.099999904632568,""y"":0.1375635862350464},{""x"":6.599999904632568,""y"":0.036351121962070465},{""x"":7.099999904632568,""y"":0.1619771122932434}]},{""name"":""Run:2023-08-08"",""fitLineColor"":""#ffbb78"",""pointColor"":""#ffbb78"",""showPoints"":""points"",""parameters"":[5.953125499439879, 1.2528620255306528, 5.187637440149802, 0.3110348753260886],""points"":[{""x"":0.10000000149011612,""y"":5.6585283279418945},{""x"":0.6000000238418579,""y"":5.911152362823486},{""x"":1.100000023841858,""y"":5.924920082092285},{""x"":1.600000023841858,""y"":5.8469438552856445},{""x"":2.0999999046325684,""y"":5.929472923278809},{""x"":2.5999999046325684,""y"":6.190037727355957},{""x"":3.0999999046325684,""y"":6.236179828643799},{""x"":3.5999999046325684,""y"":6.141019344329834},{""x"":4.099999904632568,""y"":5.295210838317871},{""x"":4.599999904632568,""y"":5.265801906585693},{""x"":5.099999904632568,""y"":3.3722851276397705},{""x"":5.599999904632568,""y"":1.8299226760864258},{""x"":6.099999904632568,""y"":0.32690900564193726},{""x"":6.599999904632568,""y"":0.6274543404579163},{""x"":7.099999904632568,""y"":0.8441857099533081}]}],""chartOptions"":{""xAxisName"":""Conc."",""yAxisName"":""Activity"",""title"":""Dose-Response curves""}}",text,,\nRwanda,MPNSEPASLLELFNSIATQGELVRSLKAGNASK,CC(C)Cc1ccc(cc1)C(C)C(=O)N2CCCC2C(=O)OCCO,1480021,36.33137130737305,995037247,"168-46 91ST AVE., 2ND FLR",https://datagrok.ai/img/slides/access-db-connect.png,id,ErrorMessage,"COMPND \nATOM \nEND",flag,9,9,2BDJ,9,1.23,<chart></chart>,"{""series"":[{""name"":""Run:2023-08-08"",""fitFunction"":""sigmoid"",""fitLineColor"":""#1f77b4"",""pointColor"":""#1f77b4"",""showPoints"":""points"",""parameters"":[3.8209972202654474, 1.3779216716448506, 5.299882228439686, 0.06040645519069608],""points"":[{""x"":0.10000000149011612,""y"":3.7821109294891357},{""x"":0.6000000238418579,""y"":3.542433023452759},{""x"":1.100000023841858,""y"":3.7008674144744873},{""x"":1.600000023841858,""y"":3.717301607131958},{""x"":2.0999999046325684,""y"":4.024452209472656},{""x"":2.5999999046325684,""y"":4.013899326324463},{""x"":3.0999999046325684,""y"":3.945094347000122},{""x"":3.5999999046325684,""y"":3.866621971130371},{""x"":4.099999904632568,""y"":3.7461626529693604},{""x"":4.599999904632568,""y"":3.3454740047454834},{""x"":5.099999904632568,""y"":2.61944317817688},{""x"":5.599999904632568,""y"":0.999405026435852},{""x"":6.099999904632568,""y"":0.46259793639183044},{""x"":6.599999904632568,""y"":0.054134611040353775},{""x"":7.099999904632568,""y"":0.05711187422275543}]},{""name"":""Run:2023-08-08"",""fitLineColor"":""#ffbb78"",""pointColor"":""#ffbb78"",""showPoints"":""points"",""parameters"":[5.6318079657726035, 1.8495493770000595, 5.391793312471116, 0.17060707587348442],""points"":[{""x"":0.10000000149011612,""y"":5.458079814910889},{""x"":0.6000000238418579,""y"":5.554427146911621},{""x"":1.100000023841858,""y"":5.799983024597168},{""x"":1.600000023841858,""y"":5.364140033721924},{""x"":2.0999999046325684,""y"":5.864485740661621},{""x"":2.5999999046325684,""y"":5.4509806632995605},{""x"":3.0999999046325684,""y"":5.702574729919434},{""x"":3.5999999046325684,""y"":5.7314534187316895},{""x"":4.099999904632568,""y"":5.5123443603515625},{""x"":4.599999904632568,""y"":5.724395751953125},{""x"":5.099999904632568,""y"":4.354506969451904},{""x"":5.599999904632568,""y"":1.7307666540145874},{""x"":6.099999904632568,""y"":0.6305936574935913},{""x"":6.599999904632568,""y"":0.035183437168598175},{""x"":7.099999904632568,""y"":0.7575169205665588}]}],""chartOptions"":{""xAxisName"":""Conc."",""yAxisName"":""Activity"",""title"":""Dose-Response curves""}}",text,,\nSwitzerland,IRVVGRYLIEVWKAAGMDMDKVLFLWSSDEI,CN1CCC(CC1)Oc2ccc(cc2)C(F)(F)F,1480028,36.33137130737305,99504,92-11 179TH PLACE,https://datagrok.ai/img/slides/access-db-connect.png,id,ErrorMessage,"COMPND \nATOM \nEND",flag,9,10,1IAN,10,1.23,<chart></chart>,"{""series"":[{""name"":""Run:2023-08-08"",""fitFunction"":""sigmoid"",""fitLineColor"":""#1f77b4"",""pointColor"":""#1f77b4"",""showPoints"":""points"",""parameters"":[1.1190255865097471, 2.3163895161544437, 5.4968866182279195, 0.2035204047289052],""points"":[{""x"":0.10000000149011612,""y"":1.1057683229446411},{""x"":0.6000000238418579,""y"":1.1019697189331055},{""x"":1.100000023841858,""y"":1.0818607807159424},{""x"":1.600000023841858,""y"":1.062997817993164},{""x"":2.0999999046325684,""y"":1.046447515487671},{""x"":2.5999999046325684,""y"":1.1217249631881714},{""x"":3.0999999046325684,""y"":1.2166996002197266},{""x"":3.5999999046325684,""y"":1.215477705001831},{""x"":4.099999904632568,""y"":1.0581893920898438},{""x"":4.599999904632568,""y"":1.1747995615005493},{""x"":5.099999904632568,""y"":1.0181127786636353},{""x"":5.599999904632568,""y"":0.5344523191452026},{""x"":6.099999904632568,""y"":0.2569526433944702},{""x"":6.599999904632568,""y"":0.1912207305431366},{""x"":7.099999904632568,""y"":0.15060538053512573}]},{""name"":""Run:2023-08-08"",""fitLineColor"":""#ffbb78"",""pointColor"":""#ffbb78"",""showPoints"":""points"",""parameters"":[3.1038581025805785, 2.0032224204185245, 5.087602825989163, 0.13277988512492753],""points"":[{""x"":0.10000000149011612,""y"":3.0498509407043457},{""x"":0.6000000238418579,""y"":2.805217742919922},{""x"":1.100000023841858,""y"":3.3415253162384033},{""x"":1.600000023841858,""y"":3.0549843311309814},{""x"":2.0999999046325684,""y"":3.250074863433838},{""x"":2.5999999046325684,""y"":3.0432586669921875},{""x"":3.0999999046325684,""y"":3.265852451324463},{""x"":3.5999999046325684,""y"":2.9475724697113037},{""x"":4.099999904632568,""y"":3.1929898262023926},{""x"":4.599999904632568,""y"":2.7460060119628906},{""x"":5.099999904632568,""y"":1.6175861358642578},{""x"":5.599999904632568,""y"":0.3006608486175537},{""x"":6.099999904632568,""y"":0.3444803059101105},{""x"":6.599999904632568,""y"":0.015537971630692482},{""x"":7.099999904632568,""y"":0.5527358055114746}]}],""chartOptions"":{""xAxisName"":""Conc."",""yAxisName"":""Activity"",""title"":""Dose-Response curves""}}",text,,\n,,,,,,,,,,,,,,,,,,,,,').columns.add(i.Column.fromList(i.TYPE.BYTE_ARRAY,"BinaryImage",Array.from(new Uint8Array(11))));var r,o=function(t,e,n,i){return new(n||(n=Promise))((function(r,o){function s(t){try{l(i.next(t))}catch(t){o(t)}}function a(t){try{l(i.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?r(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,a)}l((i=i.apply(t,e||[])).next())}))};function s(t,e,n,i=0,r="timeout"){return o(this,void 0,void 0,(function*(){return new Promise(((o,s)=>{const a=t.subscribe((t=>{try{e(t),o("OK")}catch(t){s(t)}finally{a.unsubscribe(),clearTimeout(l)}})),l=setTimeout((()=>{a.unsubscribe(),s(r)}),i);n()}))}))}function a(t){return o(this,void 0,void 0,(function*(){yield new Promise((e=>setTimeout(e,t)))}))}console.log.bind(console),console.info.bind(console),console.warn.bind(console),console.error.bind(console),function(t){t.notNull=function(t,e){if(null==t)throw new Error(`${null==e?"Value":e} not defined`)}}(r||(r={})),i.DataFrame.fromColumns([i.Column.fromStrings("col",["val1","val2","val3"])])},3527:(t,e,n)=>{"use strict";n.d(e,{Mi:()=>i});class i extends Float32Array{}},3629:(t,e,n)=>{"use strict";n.d(e,{KE:()=>a,S8:()=>l,dC:()=>o,vA:()=>r,wQ:()=>s});var i=n(3527);function r(t=!1,e="Assertion error."){if(!t)throw new Error(e)}function o(t,e,n=1){const o=t.length;r(o==e.length,"Vector lengths do not match.");const s=new i.Mi(o);for(let i=0;i<t.length;++i)s[i]=t[i]+n*e[i];return s}function s(t){let e=0;for(let n=0;n<t.length;n++)e+=t[n]*t[n];return Math.sqrt(e)}function a(t,e){if(t.length!=e.length)throw new Error("The dimensionality of the vectors must match");let n=0;for(let i=0;i<t.length;i++)n+=t[i]*e[i];return n}function l(t){const e=t.length;let n=0,i=0;for(let r=0;r<e;++r)n+=t[r],i+=Math.pow(t[r],2);const r=n/e,o=1/Math.sqrt(i/e-Math.pow(r,2));for(let n=0;n<e;++n)t[n]=(t[n]-r)*o;return t}},1913:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(3282),r=n(9029),o=n(1520),s=n(2586),a=n(8708),l=n(2023),c="errorMessage",h=new i.Name("emUsed"),u={required:"missingProperty",dependencies:"property",dependentRequired:"property"},d=/\$\{[^}]+\}/,p=/\$\{([^}]+)\}/g,m=/^""\s*\+\s*|\s*\+\s*""$/g;const f=(t,e={})=>{if(!t.opts.allErrors)throw new Error("ajv-errors: Ajv option allErrors must be true");if(t.opts.jsPropertySyntax)throw new Error("ajv-errors: ajv option jsPropertySyntax is not supported");return t.addKeyword(function(t){return{keyword:c,schemaType:["string","object"],post:!0,code(e){const{gen:n,data:f,schema:g,schemaValue:y,it:b}=e;if(!1===b.createErrors)return;const v=g,w=r.strConcat(l.default.instancePath,b.errorPath);function C(t,e){return r.and(i._`${t}.keyword !== ${c}`,i._`!${t}.${h}`,i._`${t}.instancePath === ${w}`,i._`${t}.keyword in ${e}`,i._`${t}.schemaPath.indexOf(${b.errSchemaPath}) === 0`,i._`/^\\/[^\\/]*$/.test(${t}.schemaPath.slice(${b.errSchemaPath.length}))`)}function A(t,e){const i=[];for(const n in t){const t=e[n];d.test(t)&&i.push([n,x(t)])}return n.object(...i)}function S(t){return d.test(t)?new o._Code(o.safeStringify(t).replace(p,((t,e)=>`" + JSON.stringify(${s.getData(e,b)}) + "`)).replace(m,"")):i.stringify(t)}function x(t){return i._`function(){return ${S(t)}}`}n.if(i._`${l.default.errors} > 0`,(()=>{if("object"==typeof v){const[o,s]=function(t){let e,n;for(const i in t){if("properties"===i||"items"===i)continue;const r=t[i];if("object"==typeof r){e||(e={});const t=e[i]={};for(const e in r)t[e]=[]}else n||(n={}),n[i]=[]}return[e,n]}(v);s&&function(r){const o=n.const("emErrors",i.stringify(r)),s=n.const("templates",A(r,g));n.forOf("err",l.default.vErrors,(t=>n.if(C(t,o),(()=>n.code(i._`${o}[${t}.keyword].push(${t})`).assign(i._`${t}.${h}`,!0)))));const{singleError:c}=t;if(c){const t=n.let("message",i._`""`),r=n.let("paramsErrors",i._`[]`);u((e=>{n.if(t,(()=>n.code(i._`${t} += ${"string"==typeof c?c:";"}`))),n.code(i._`${t} += ${d(e)}`),n.assign(r,i._`${r}.concat(${o}[${e}])`)})),a.reportError(e,{message:t,params:i._`{errors: ${r}}`})}else u((t=>a.reportError(e,{message:d(t),params:i._`{errors: ${o}[${t}]}`})));function u(t){n.forIn("key",o,(e=>n.if(i._`${o}[${e}].length`,(()=>t(e)))))}function d(t){return i._`${t} in ${s} ? ${s}[${t}]() : ${y}[${t}]`}}(s),o&&function(t){const r=n.const("emErrors",i.stringify(t)),o=[];for(const e in t)o.push([e,A(t[e],g[e])]);const s=n.const("templates",n.object(...o)),c=n.scopeValue("obj",{ref:u,code:i.stringify(u)}),d=n.let("emPropParams"),p=n.let("emParamsErrors");n.forOf("err",l.default.vErrors,(t=>n.if(C(t,r),(()=>{n.assign(d,i._`${c}[${t}.keyword]`),n.assign(p,i._`${r}[${t}.keyword][${t}.params[${d}]]`),n.if(p,(()=>n.code(i._`${p}.push(${t})`).assign(i._`${t}.${h}`,!0)))})))),n.forIn("key",r,(t=>n.forIn("keyProp",i._`${r}[${t}]`,(o=>{n.assign(p,i._`${r}[${t}][${o}]`),n.if(i._`${p}.length`,(()=>{const r=n.const("tmpl",i._`${s}[${t}] && ${s}[${t}][${o}]`);a.reportError(e,{message:i._`${r} ? ${r}() : ${y}[${t}][${o}]`,params:i._`{errors: ${p}}`})}))}))))}(o),function(t){const{props:o,items:s}=t;if(!o&&!s)return;const u=i._`typeof ${f} == "object"`,d=i._`Array.isArray(${f})`,p=n.let("emErrors");let m,b;const v=n.let("templates");function C(t,e){n.assign(p,i.stringify(t)),n.assign(v,A(t,e))}o&&s?(m=n.let("emChildKwd"),n.if(u),n.if(d,(()=>{C(s,g.items),n.assign(m,i.str`items`)}),(()=>{C(o,g.properties),n.assign(m,i.str`properties`)})),b=i._`[${m}]`):s?(n.if(d),C(s,g.items),b=i._`.items`):o&&(n.if(r.and(u,r.not(d))),C(o,g.properties),b=i._`.properties`),n.forOf("err",l.default.vErrors,(t=>function(t,e,o){n.if(r.and(i._`${t}.keyword !== ${c}`,i._`!${t}.${h}`,i._`${t}.instancePath.indexOf(${w}) === 0`),(()=>{const r=n.scopeValue("pattern",{ref:/^\/([^/]*)(?:\/|$)/,code:i._`new RegExp("^\\\/([^/]*)(?:\\\/|$)")`}),s=n.const("emMatches",i._`${r}.exec(${t}.instancePath.slice(${w}.length))`),a=n.const("emChild",i._`${s} && ${s}[1].replace(/~1/g, "/").replace(/~0/g, "~")`);n.if(i._`${a} !== undefined && ${a} in ${e}`,(()=>o(a)))}))}(t,p,(e=>n.code(i._`${p}[${e}].push(${t})`).assign(i._`${t}.${h}`,!0))))),n.forIn("key",p,(t=>n.if(i._`${p}[${t}].length`,(()=>{a.reportError(e,{message:i._`${t} in ${v} ? ${v}[${t}]() : ${y}${b}[${t}]`,params:i._`{errors: ${p}[${t}]}`}),n.assign(i._`${l.default.vErrors}[${l.default.errors}-1].instancePath`,i._`${w} + "/" + ${t}.replace(/~/g, "~0").replace(/\\//g, "~1")`)})))),n.endIf()}(function({properties:t,items:e}){const n={};if(t){n.props={};for(const e in t)n.props[e]=[]}if(e){n.items={};for(let t=0;t<e.length;t++)n.items[t]=[]}return n}(v))}const o="string"==typeof v?v:v._;o&&function(t){const o=n.const("emErrs",i._`[]`);n.forOf("err",l.default.vErrors,(t=>n.if(function(t){return r.and(i._`${t}.keyword !== ${c}`,i._`!${t}.${h}`,r.or(i._`${t}.instancePath === ${w}`,r.and(i._`${t}.instancePath.indexOf(${w}) === 0`,i._`${t}.instancePath[${w}.length] === "/"`)),i._`${t}.schemaPath.indexOf(${b.errSchemaPath}) === 0`,i._`${t}.schemaPath[${b.errSchemaPath}.length] === "/"`)}(t),(()=>n.code(i._`${o}.push(${t})`).assign(i._`${t}.${h}`,!0))))),n.if(i._`${o}.length`,(()=>a.reportError(e,{message:S(t),params:i._`{errors: ${o}}`})))}(o),t.keepErrors||function(){const t=n.const("emErrs",i._`[]`);n.forOf("err",l.default.vErrors,(e=>n.if(i._`!${e}.${h}`,(()=>n.code(i._`${t}.push(${e})`))))),n.assign(l.default.vErrors,t).assign(l.default.errors,i._`${t}.length`)}()}))},metaSchema:{anyOf:[{type:"string"},{type:"object",properties:{properties:{$ref:"#/$defs/stringMap"},items:{$ref:"#/$defs/stringList"},required:{$ref:"#/$defs/stringOrMap"},dependencies:{$ref:"#/$defs/stringOrMap"}},additionalProperties:{type:"string"}}],$defs:{stringMap:{type:"object",additionalProperties:{type:"string"}},stringOrMap:{anyOf:[{type:"string"},{$ref:"#/$defs/stringMap"}]},stringList:{type:"array",items:{type:"string"}}}}}}(e))};e.default=f,t.exports=f,t.exports.default=f},7433:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.MissingRefError=e.ValidationError=e.CodeGen=e.Name=e.nil=e.stringify=e.str=e._=e.KeywordCxt=e.Ajv2020=void 0;const i=n(4042),r=n(6105),o=n(6653),s=n(9572),a="https://json-schema.org/draft/2020-12/schema";class l extends i.default{constructor(t={}){super({...t,dynamicRef:!0,next:!0,unevaluated:!0})}_addVocabularies(){super._addVocabularies(),r.default.forEach((t=>this.addVocabulary(t))),this.opts.discriminator&&this.addKeyword(o.default)}_addDefaultMetaSchema(){super._addDefaultMetaSchema();const{$data:t,meta:e}=this.opts;e&&(s.default.call(this,t),this.refs["http://json-schema.org/schema"]=a)}defaultMeta(){return this.opts.defaultMeta=super.defaultMeta()||(this.getSchema(a)?a:void 0)}}e.Ajv2020=l,t.exports=e=l,t.exports.Ajv2020=l,Object.defineProperty(e,"__esModule",{value:!0}),e.default=l;var c=n(2586);Object.defineProperty(e,"KeywordCxt",{enumerable:!0,get:function(){return c.KeywordCxt}});var h=n(9029);Object.defineProperty(e,"_",{enumerable:!0,get:function(){return h._}}),Object.defineProperty(e,"str",{enumerable:!0,get:function(){return h.str}}),Object.defineProperty(e,"stringify",{enumerable:!0,get:function(){return h.stringify}}),Object.defineProperty(e,"nil",{enumerable:!0,get:function(){return h.nil}}),Object.defineProperty(e,"Name",{enumerable:!0,get:function(){return h.Name}}),Object.defineProperty(e,"CodeGen",{enumerable:!0,get:function(){return h.CodeGen}});var u=n(3558);Object.defineProperty(e,"ValidationError",{enumerable:!0,get:function(){return u.default}});var d=n(4551);Object.defineProperty(e,"MissingRefError",{enumerable:!0,get:function(){return d.default}})},3282:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.MissingRefError=e.ValidationError=e.CodeGen=e.Name=e.nil=e.stringify=e.str=e._=e.KeywordCxt=e.Ajv=void 0;const i=n(4042),r=n(6144),o=n(6653),s=n(2079),a=["/properties"],l="http://json-schema.org/draft-07/schema";class c extends i.default{_addVocabularies(){super._addVocabularies(),r.default.forEach((t=>this.addVocabulary(t))),this.opts.discriminator&&this.addKeyword(o.default)}_addDefaultMetaSchema(){if(super._addDefaultMetaSchema(),!this.opts.meta)return;const t=this.opts.$data?this.$dataMetaSchema(s,a):s;this.addMetaSchema(t,l,!1),this.refs["http://json-schema.org/schema"]=l}defaultMeta(){return this.opts.defaultMeta=super.defaultMeta()||(this.getSchema(l)?l:void 0)}}e.Ajv=c,t.exports=e=c,t.exports.Ajv=c,Object.defineProperty(e,"__esModule",{value:!0}),e.default=c;var h=n(2586);Object.defineProperty(e,"KeywordCxt",{enumerable:!0,get:function(){return h.KeywordCxt}});var u=n(9029);Object.defineProperty(e,"_",{enumerable:!0,get:function(){return u._}}),Object.defineProperty(e,"str",{enumerable:!0,get:function(){return u.str}}),Object.defineProperty(e,"stringify",{enumerable:!0,get:function(){return u.stringify}}),Object.defineProperty(e,"nil",{enumerable:!0,get:function(){return u.nil}}),Object.defineProperty(e,"Name",{enumerable:!0,get:function(){return u.Name}}),Object.defineProperty(e,"CodeGen",{enumerable:!0,get:function(){return u.CodeGen}});var d=n(3558);Object.defineProperty(e,"ValidationError",{enumerable:!0,get:function(){return d.default}});var p=n(4551);Object.defineProperty(e,"MissingRefError",{enumerable:!0,get:function(){return p.default}})},1520:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.regexpCode=e.getEsmExportName=e.getProperty=e.safeStringify=e.stringify=e.strConcat=e.addCodeArg=e.str=e._=e.nil=e._Code=e.Name=e.IDENTIFIER=e._CodeOrName=void 0;class n{}e._CodeOrName=n,e.IDENTIFIER=/^[a-z$_][a-z$_0-9]*$/i;class i extends n{constructor(t){if(super(),!e.IDENTIFIER.test(t))throw new Error("CodeGen: name must be a valid identifier");this.str=t}toString(){return this.str}emptyStr(){return!1}get names(){return{[this.str]:1}}}e.Name=i;class r extends n{constructor(t){super(),this._items="string"==typeof t?[t]:t}toString(){return this.str}emptyStr(){if(this._items.length>1)return!1;const t=this._items[0];return""===t||'""'===t}get str(){var t;return null!==(t=this._str)&&void 0!==t?t:this._str=this._items.reduce(((t,e)=>`${t}${e}`),"")}get names(){var t;return null!==(t=this._names)&&void 0!==t?t:this._names=this._items.reduce(((t,e)=>(e instanceof i&&(t[e.str]=(t[e.str]||0)+1),t)),{})}}function o(t,...e){const n=[t[0]];let i=0;for(;i<e.length;)l(n,e[i]),n.push(t[++i]);return new r(n)}e._Code=r,e.nil=new r(""),e._=o;const s=new r("+");function a(t,...e){const n=[h(t[0])];let i=0;for(;i<e.length;)n.push(s),l(n,e[i]),n.push(s,h(t[++i]));return function(t){let e=1;for(;e<t.length-1;){if(t[e]===s){const n=c(t[e-1],t[e+1]);if(void 0!==n){t.splice(e-1,3,n);continue}t[e++]="+"}e++}}(n),new r(n)}function l(t,e){var n;e instanceof r?t.push(...e._items):e instanceof i?t.push(e):t.push("number"==typeof(n=e)||"boolean"==typeof n||null===n?n:h(Array.isArray(n)?n.join(","):n))}function c(t,e){if('""'===e)return t;if('""'===t)return e;if("string"==typeof t){if(e instanceof i||'"'!==t[t.length-1])return;return"string"!=typeof e?`${t.slice(0,-1)}${e}"`:'"'===e[0]?t.slice(0,-1)+e.slice(1):void 0}return"string"!=typeof e||'"'!==e[0]||t instanceof i?void 0:`"${t}${e.slice(1)}`}function h(t){return JSON.stringify(t).replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}e.str=a,e.addCodeArg=l,e.strConcat=function(t,e){return e.emptyStr()?t:t.emptyStr()?e:a`${t}${e}`},e.stringify=function(t){return new r(h(t))},e.safeStringify=h,e.getProperty=function(t){return"string"==typeof t&&e.IDENTIFIER.test(t)?new r(`.${t}`):o`[${t}]`},e.getEsmExportName=function(t){if("string"==typeof t&&e.IDENTIFIER.test(t))return new r(`${t}`);throw new Error(`CodeGen: invalid export name: ${t}, use explicit $id name mapping`)},e.regexpCode=function(t){return new r(t.toString())}},9029:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.or=e.and=e.not=e.CodeGen=e.operators=e.varKinds=e.ValueScopeName=e.ValueScope=e.Scope=e.Name=e.regexpCode=e.stringify=e.getProperty=e.nil=e.strConcat=e.str=e._=void 0;const i=n(1520),r=n(7845);var o=n(1520);Object.defineProperty(e,"_",{enumerable:!0,get:function(){return o._}}),Object.defineProperty(e,"str",{enumerable:!0,get:function(){return o.str}}),Object.defineProperty(e,"strConcat",{enumerable:!0,get:function(){return o.strConcat}}),Object.defineProperty(e,"nil",{enumerable:!0,get:function(){return o.nil}}),Object.defineProperty(e,"getProperty",{enumerable:!0,get:function(){return o.getProperty}}),Object.defineProperty(e,"stringify",{enumerable:!0,get:function(){return o.stringify}}),Object.defineProperty(e,"regexpCode",{enumerable:!0,get:function(){return o.regexpCode}}),Object.defineProperty(e,"Name",{enumerable:!0,get:function(){return o.Name}});var s=n(7845);Object.defineProperty(e,"Scope",{enumerable:!0,get:function(){return s.Scope}}),Object.defineProperty(e,"ValueScope",{enumerable:!0,get:function(){return s.ValueScope}}),Object.defineProperty(e,"ValueScopeName",{enumerable:!0,get:function(){return s.ValueScopeName}}),Object.defineProperty(e,"varKinds",{enumerable:!0,get:function(){return s.varKinds}}),e.operators={GT:new i._Code(">"),GTE:new i._Code(">="),LT:new i._Code("<"),LTE:new i._Code("<="),EQ:new i._Code("==="),NEQ:new i._Code("!=="),NOT:new i._Code("!"),OR:new i._Code("||"),AND:new i._Code("&&"),ADD:new i._Code("+")};class a{optimizeNodes(){return this}optimizeNames(t,e){return this}}class l extends a{constructor(t,e,n){super(),this.varKind=t,this.name=e,this.rhs=n}render({es5:t,_n:e}){const n=t?r.varKinds.var:this.varKind,i=void 0===this.rhs?"":` = ${this.rhs}`;return`${n} ${this.name}${i};`+e}optimizeNames(t,e){if(t[this.name.str])return this.rhs&&(this.rhs=N(this.rhs,t,e)),this}get names(){return this.rhs instanceof i._CodeOrName?this.rhs.names:{}}}class c extends a{constructor(t,e,n){super(),this.lhs=t,this.rhs=e,this.sideEffects=n}render({_n:t}){return`${this.lhs} = ${this.rhs};`+t}optimizeNames(t,e){if(!(this.lhs instanceof i.Name)||t[this.lhs.str]||this.sideEffects)return this.rhs=N(this.rhs,t,e),this}get names(){return L(this.lhs instanceof i.Name?{}:{...this.lhs.names},this.rhs)}}class h extends c{constructor(t,e,n,i){super(t,n,i),this.op=e}render({_n:t}){return`${this.lhs} ${this.op}= ${this.rhs};`+t}}class u extends a{constructor(t){super(),this.label=t,this.names={}}render({_n:t}){return`${this.label}:`+t}}class d extends a{constructor(t){super(),this.label=t,this.names={}}render({_n:t}){return`break${this.label?` ${this.label}`:""};`+t}}class p extends a{constructor(t){super(),this.error=t}render({_n:t}){return`throw ${this.error};`+t}get names(){return this.error.names}}class m extends a{constructor(t){super(),this.code=t}render({_n:t}){return`${this.code};`+t}optimizeNodes(){return`${this.code}`?this:void 0}optimizeNames(t,e){return this.code=N(this.code,t,e),this}get names(){return this.code instanceof i._CodeOrName?this.code.names:{}}}class f extends a{constructor(t=[]){super(),this.nodes=t}render(t){return this.nodes.reduce(((e,n)=>e+n.render(t)),"")}optimizeNodes(){const{nodes:t}=this;let e=t.length;for(;e--;){const n=t[e].optimizeNodes();Array.isArray(n)?t.splice(e,1,...n):n?t[e]=n:t.splice(e,1)}return t.length>0?this:void 0}optimizeNames(t,e){const{nodes:n}=this;let i=n.length;for(;i--;){const r=n[i];r.optimizeNames(t,e)||(P(t,r.names),n.splice(i,1))}return n.length>0?this:void 0}get names(){return this.nodes.reduce(((t,e)=>T(t,e.names)),{})}}class g extends f{render(t){return"{"+t._n+super.render(t)+"}"+t._n}}class y extends f{}class b extends g{}b.kind="else";class v extends g{constructor(t,e){super(e),this.condition=t}render(t){let e=`if(${this.condition})`+super.render(t);return this.else&&(e+="else "+this.else.render(t)),e}optimizeNodes(){super.optimizeNodes();const t=this.condition;if(!0===t)return this.nodes;let e=this.else;if(e){const t=e.optimizeNodes();e=this.else=Array.isArray(t)?new b(t):t}return e?!1===t?e instanceof v?e:e.nodes:this.nodes.length?this:new v($(t),e instanceof v?[e]:e.nodes):!1!==t&&this.nodes.length?this:void 0}optimizeNames(t,e){var n;if(this.else=null===(n=this.else)||void 0===n?void 0:n.optimizeNames(t,e),super.optimizeNames(t,e)||this.else)return this.condition=N(this.condition,t,e),this}get names(){const t=super.names;return L(t,this.condition),this.else&&T(t,this.else.names),t}}v.kind="if";class w extends g{}w.kind="for";class C extends w{constructor(t){super(),this.iteration=t}render(t){return`for(${this.iteration})`+super.render(t)}optimizeNames(t,e){if(super.optimizeNames(t,e))return this.iteration=N(this.iteration,t,e),this}get names(){return T(super.names,this.iteration.names)}}class A extends w{constructor(t,e,n,i){super(),this.varKind=t,this.name=e,this.from=n,this.to=i}render(t){const e=t.es5?r.varKinds.var:this.varKind,{name:n,from:i,to:o}=this;return`for(${e} ${n}=${i}; ${n}<${o}; ${n}++)`+super.render(t)}get names(){const t=L(super.names,this.from);return L(t,this.to)}}class S extends w{constructor(t,e,n,i){super(),this.loop=t,this.varKind=e,this.name=n,this.iterable=i}render(t){return`for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})`+super.render(t)}optimizeNames(t,e){if(super.optimizeNames(t,e))return this.iterable=N(this.iterable,t,e),this}get names(){return T(super.names,this.iterable.names)}}class x extends g{constructor(t,e,n){super(),this.name=t,this.args=e,this.async=n}render(t){return`${this.async?"async ":""}function ${this.name}(${this.args})`+super.render(t)}}x.kind="func";class E extends f{render(t){return"return "+super.render(t)}}E.kind="return";class M extends g{render(t){let e="try"+super.render(t);return this.catch&&(e+=this.catch.render(t)),this.finally&&(e+=this.finally.render(t)),e}optimizeNodes(){var t,e;return super.optimizeNodes(),null===(t=this.catch)||void 0===t||t.optimizeNodes(),null===(e=this.finally)||void 0===e||e.optimizeNodes(),this}optimizeNames(t,e){var n,i;return super.optimizeNames(t,e),null===(n=this.catch)||void 0===n||n.optimizeNames(t,e),null===(i=this.finally)||void 0===i||i.optimizeNames(t,e),this}get names(){const t=super.names;return this.catch&&T(t,this.catch.names),this.finally&&T(t,this.finally.names),t}}class _ extends g{constructor(t){super(),this.error=t}render(t){return`catch(${this.error})`+super.render(t)}}_.kind="catch";class I extends g{render(t){return"finally"+super.render(t)}}function T(t,e){for(const n in e)t[n]=(t[n]||0)+(e[n]||0);return t}function L(t,e){return e instanceof i._CodeOrName?T(t,e.names):t}function N(t,e,n){return t instanceof i.Name?o(t):(r=t)instanceof i._Code&&r._items.some((t=>t instanceof i.Name&&1===e[t.str]&&void 0!==n[t.str]))?new i._Code(t._items.reduce(((t,e)=>(e instanceof i.Name&&(e=o(e)),e instanceof i._Code?t.push(...e._items):t.push(e),t)),[])):t;var r;function o(t){const i=n[t.str];return void 0===i||1!==e[t.str]?t:(delete e[t.str],i)}}function P(t,e){for(const n in e)t[n]=(t[n]||0)-(e[n]||0)}function $(t){return"boolean"==typeof t||"number"==typeof t||null===t?!t:i._`!${G(t)}`}I.kind="finally",e.CodeGen=class{constructor(t,e={}){this._values={},this._blockStarts=[],this._constants={},this.opts={...e,_n:e.lines?"\n":""},this._extScope=t,this._scope=new r.Scope({parent:t}),this._nodes=[new y]}toString(){return this._root.render(this.opts)}name(t){return this._scope.name(t)}scopeName(t){return this._extScope.name(t)}scopeValue(t,e){const n=this._extScope.value(t,e);return(this._values[n.prefix]||(this._values[n.prefix]=new Set)).add(n),n}getScopeValue(t,e){return this._extScope.getValue(t,e)}scopeRefs(t){return this._extScope.scopeRefs(t,this._values)}scopeCode(){return this._extScope.scopeCode(this._values)}_def(t,e,n,i){const r=this._scope.toName(e);return void 0!==n&&i&&(this._constants[r.str]=n),this._leafNode(new l(t,r,n)),r}const(t,e,n){return this._def(r.varKinds.const,t,e,n)}let(t,e,n){return this._def(r.varKinds.let,t,e,n)}var(t,e,n){return this._def(r.varKinds.var,t,e,n)}assign(t,e,n){return this._leafNode(new c(t,e,n))}add(t,n){return this._leafNode(new h(t,e.operators.ADD,n))}code(t){return"function"==typeof t?t():t!==i.nil&&this._leafNode(new m(t)),this}object(...t){const e=["{"];for(const[n,r]of t)e.length>1&&e.push(","),e.push(n),(n!==r||this.opts.es5)&&(e.push(":"),(0,i.addCodeArg)(e,r));return e.push("}"),new i._Code(e)}if(t,e,n){if(this._blockNode(new v(t)),e&&n)this.code(e).else().code(n).endIf();else if(e)this.code(e).endIf();else if(n)throw new Error('CodeGen: "else" body without "then" body');return this}elseIf(t){return this._elseNode(new v(t))}else(){return this._elseNode(new b)}endIf(){return this._endBlockNode(v,b)}_for(t,e){return this._blockNode(t),e&&this.code(e).endFor(),this}for(t,e){return this._for(new C(t),e)}forRange(t,e,n,i,o=(this.opts.es5?r.varKinds.var:r.varKinds.let)){const s=this._scope.toName(t);return this._for(new A(o,s,e,n),(()=>i(s)))}forOf(t,e,n,o=r.varKinds.const){const s=this._scope.toName(t);if(this.opts.es5){const t=e instanceof i.Name?e:this.var("_arr",e);return this.forRange("_i",0,i._`${t}.length`,(e=>{this.var(s,i._`${t}[${e}]`),n(s)}))}return this._for(new S("of",o,s,e),(()=>n(s)))}forIn(t,e,n,o=(this.opts.es5?r.varKinds.var:r.varKinds.const)){if(this.opts.ownProperties)return this.forOf(t,i._`Object.keys(${e})`,n);const s=this._scope.toName(t);return this._for(new S("in",o,s,e),(()=>n(s)))}endFor(){return this._endBlockNode(w)}label(t){return this._leafNode(new u(t))}break(t){return this._leafNode(new d(t))}return(t){const e=new E;if(this._blockNode(e),this.code(t),1!==e.nodes.length)throw new Error('CodeGen: "return" should have one node');return this._endBlockNode(E)}try(t,e,n){if(!e&&!n)throw new Error('CodeGen: "try" without "catch" and "finally"');const i=new M;if(this._blockNode(i),this.code(t),e){const t=this.name("e");this._currNode=i.catch=new _(t),e(t)}return n&&(this._currNode=i.finally=new I,this.code(n)),this._endBlockNode(_,I)}throw(t){return this._leafNode(new p(t))}block(t,e){return this._blockStarts.push(this._nodes.length),t&&this.code(t).endBlock(e),this}endBlock(t){const e=this._blockStarts.pop();if(void 0===e)throw new Error("CodeGen: not in self-balancing block");const n=this._nodes.length-e;if(n<0||void 0!==t&&n!==t)throw new Error(`CodeGen: wrong number of nodes: ${n} vs ${t} expected`);return this._nodes.length=e,this}func(t,e=i.nil,n,r){return this._blockNode(new x(t,e,n)),r&&this.code(r).endFunc(),this}endFunc(){return this._endBlockNode(x)}optimize(t=1){for(;t-- >0;)this._root.optimizeNodes(),this._root.optimizeNames(this._root.names,this._constants)}_leafNode(t){return this._currNode.nodes.push(t),this}_blockNode(t){this._currNode.nodes.push(t),this._nodes.push(t)}_endBlockNode(t,e){const n=this._currNode;if(n instanceof t||e&&n instanceof e)return this._nodes.pop(),this;throw new Error(`CodeGen: not in block "${e?`${t.kind}/${e.kind}`:t.kind}"`)}_elseNode(t){const e=this._currNode;if(!(e instanceof v))throw new Error('CodeGen: "else" without "if"');return this._currNode=e.else=t,this}get _root(){return this._nodes[0]}get _currNode(){const t=this._nodes;return t[t.length-1]}set _currNode(t){const e=this._nodes;e[e.length-1]=t}},e.not=$;const R=k(e.operators.AND);e.and=function(...t){return t.reduce(R)};const O=k(e.operators.OR);function k(t){return(e,n)=>e===i.nil?n:n===i.nil?e:i._`${G(e)} ${t} ${G(n)}`}function G(t){return t instanceof i.Name?t:i._`(${t})`}e.or=function(...t){return t.reduce(O)}},7845:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ValueScope=e.ValueScopeName=e.Scope=e.varKinds=e.UsedValueState=void 0;const i=n(1520);class r extends Error{constructor(t){super(`CodeGen: "code" for ${t} not defined`),this.value=t.value}}var o;!function(t){t[t.Started=0]="Started",t[t.Completed=1]="Completed"}(o||(e.UsedValueState=o={})),e.varKinds={const:new i.Name("const"),let:new i.Name("let"),var:new i.Name("var")};class s{constructor({prefixes:t,parent:e}={}){this._names={},this._prefixes=t,this._parent=e}toName(t){return t instanceof i.Name?t:this.name(t)}name(t){return new i.Name(this._newName(t))}_newName(t){return`${t}${(this._names[t]||this._nameGroup(t)).index++}`}_nameGroup(t){var e,n;if((null===(n=null===(e=this._parent)||void 0===e?void 0:e._prefixes)||void 0===n?void 0:n.has(t))||this._prefixes&&!this._prefixes.has(t))throw new Error(`CodeGen: prefix "${t}" is not allowed in this scope`);return this._names[t]={prefix:t,index:0}}}e.Scope=s;class a extends i.Name{constructor(t,e){super(e),this.prefix=t}setValue(t,{property:e,itemIndex:n}){this.value=t,this.scopePath=i._`.${new i.Name(e)}[${n}]`}}e.ValueScopeName=a;const l=i._`\n`;e.ValueScope=class extends s{constructor(t){super(t),this._values={},this._scope=t.scope,this.opts={...t,_n:t.lines?l:i.nil}}get(){return this._scope}name(t){return new a(t,this._newName(t))}value(t,e){var n;if(void 0===e.ref)throw new Error("CodeGen: ref must be passed in value");const i=this.toName(t),{prefix:r}=i,o=null!==(n=e.key)&&void 0!==n?n:e.ref;let s=this._values[r];if(s){const t=s.get(o);if(t)return t}else s=this._values[r]=new Map;s.set(o,i);const a=this._scope[r]||(this._scope[r]=[]),l=a.length;return a[l]=e.ref,i.setValue(e,{property:r,itemIndex:l}),i}getValue(t,e){const n=this._values[t];if(n)return n.get(e)}scopeRefs(t,e=this._values){return this._reduceValues(e,(e=>{if(void 0===e.scopePath)throw new Error(`CodeGen: name "${e}" has no value`);return i._`${t}${e.scopePath}`}))}scopeCode(t=this._values,e,n){return this._reduceValues(t,(t=>{if(void 0===t.value)throw new Error(`CodeGen: name "${t}" has no value`);return t.value.code}),e,n)}_reduceValues(t,n,s={},a){let l=i.nil;for(const c in t){const h=t[c];if(!h)continue;const u=s[c]=s[c]||new Map;h.forEach((t=>{if(u.has(t))return;u.set(t,o.Started);let s=n(t);if(s){const n=this.opts.es5?e.varKinds.var:e.varKinds.const;l=i._`${l}${n} ${t} = ${s};${this.opts._n}`}else{if(!(s=null==a?void 0:a(t)))throw new r(t);l=i._`${l}${s}${this.opts._n}`}u.set(t,o.Completed)}))}return l}}},8708:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.extendErrors=e.resetErrorsCount=e.reportExtraError=e.reportError=e.keyword$DataError=e.keywordError=void 0;const i=n(9029),r=n(4227),o=n(2023);function s(t,e){const n=t.const("err",e);t.if(i._`${o.default.vErrors} === null`,(()=>t.assign(o.default.vErrors,i._`[${n}]`)),i._`${o.default.vErrors}.push(${n})`),t.code(i._`${o.default.errors}++`)}function a(t,e){const{gen:n,validateName:r,schemaEnv:o}=t;o.$async?n.throw(i._`new ${t.ValidationError}(${e})`):(n.assign(i._`${r}.errors`,e),n.return(!1))}e.keywordError={message:({keyword:t})=>i.str`must pass "${t}" keyword validation`},e.keyword$DataError={message:({keyword:t,schemaType:e})=>e?i.str`"${t}" keyword must be ${e} ($data)`:i.str`"${t}" keyword is invalid ($data)`},e.reportError=function(t,n=e.keywordError,r,o){const{it:l}=t,{gen:h,compositeRule:u,allErrors:d}=l,p=c(t,n,r);(null!=o?o:u||d)?s(h,p):a(l,i._`[${p}]`)},e.reportExtraError=function(t,n=e.keywordError,i){const{it:r}=t,{gen:l,compositeRule:h,allErrors:u}=r;s(l,c(t,n,i)),h||u||a(r,o.default.vErrors)},e.resetErrorsCount=function(t,e){t.assign(o.default.errors,e),t.if(i._`${o.default.vErrors} !== null`,(()=>t.if(e,(()=>t.assign(i._`${o.default.vErrors}.length`,e)),(()=>t.assign(o.default.vErrors,null)))))},e.extendErrors=function({gen:t,keyword:e,schemaValue:n,data:r,errsCount:s,it:a}){if(void 0===s)throw new Error("ajv implementation error");const l=t.name("err");t.forRange("i",s,o.default.errors,(s=>{t.const(l,i._`${o.default.vErrors}[${s}]`),t.if(i._`${l}.instancePath === undefined`,(()=>t.assign(i._`${l}.instancePath`,(0,i.strConcat)(o.default.instancePath,a.errorPath)))),t.assign(i._`${l}.schemaPath`,i.str`${a.errSchemaPath}/${e}`),a.opts.verbose&&(t.assign(i._`${l}.schema`,n),t.assign(i._`${l}.data`,r))}))};const l={keyword:new i.Name("keyword"),schemaPath:new i.Name("schemaPath"),params:new i.Name("params"),propertyName:new i.Name("propertyName"),message:new i.Name("message"),schema:new i.Name("schema"),parentSchema:new i.Name("parentSchema")};function c(t,e,n){const{createErrors:r}=t.it;return!1===r?i._`{}`:function(t,e,n={}){const{gen:r,it:s}=t,a=[h(s,n),u(t,n)];return function(t,{params:e,message:n},r){const{keyword:s,data:a,schemaValue:c,it:h}=t,{opts:u,propertyName:d,topSchemaRef:p,schemaPath:m}=h;r.push([l.keyword,s],[l.params,"function"==typeof e?e(t):e||i._`{}`]),u.messages&&r.push([l.message,"function"==typeof n?n(t):n]),u.verbose&&r.push([l.schema,c],[l.parentSchema,i._`${p}${m}`],[o.default.data,a]),d&&r.push([l.propertyName,d])}(t,e,a),r.object(...a)}(t,e,n)}function h({errorPath:t},{instancePath:e}){const n=e?i.str`${t}${(0,r.getErrorPath)(e,r.Type.Str)}`:t;return[o.default.instancePath,(0,i.strConcat)(o.default.instancePath,n)]}function u({keyword:t,it:{errSchemaPath:e}},{schemaPath:n,parentSchema:o}){let s=o?e:i.str`${e}/${t}`;return n&&(s=i.str`${s}${(0,r.getErrorPath)(n,r.Type.Str)}`),[l.schemaPath,s]}},3835:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.resolveSchema=e.getCompilingSchema=e.resolveRef=e.compileSchema=e.SchemaEnv=void 0;const i=n(9029),r=n(3558),o=n(2023),s=n(6939),a=n(4227),l=n(2586);class c{constructor(t){var e;let n;this.refs={},this.dynamicAnchors={},"object"==typeof t.schema&&(n=t.schema),this.schema=t.schema,this.schemaId=t.schemaId,this.root=t.root||this,this.baseId=null!==(e=t.baseId)&&void 0!==e?e:(0,s.normalizeId)(null==n?void 0:n[t.schemaId||"$id"]),this.schemaPath=t.schemaPath,this.localRefs=t.localRefs,this.meta=t.meta,this.$async=null==n?void 0:n.$async,this.refs={}}}function h(t){const e=d.call(this,t);if(e)return e;const n=(0,s.getFullPath)(this.opts.uriResolver,t.root.baseId),{es5:a,lines:c}=this.opts.code,{ownProperties:h}=this.opts,u=new i.CodeGen(this.scope,{es5:a,lines:c,ownProperties:h});let p;t.$async&&(p=u.scopeValue("Error",{ref:r.default,code:i._`require("ajv/dist/runtime/validation_error").default`}));const m=u.scopeName("validate");t.validateName=m;const f={gen:u,allErrors:this.opts.allErrors,data:o.default.data,parentData:o.default.parentData,parentDataProperty:o.default.parentDataProperty,dataNames:[o.default.data],dataPathArr:[i.nil],dataLevel:0,dataTypes:[],definedProperties:new Set,topSchemaRef:u.scopeValue("schema",!0===this.opts.code.source?{ref:t.schema,code:(0,i.stringify)(t.schema)}:{ref:t.schema}),validateName:m,ValidationError:p,schema:t.schema,schemaEnv:t,rootId:n,baseId:t.baseId||n,schemaPath:i.nil,errSchemaPath:t.schemaPath||(this.opts.jtd?"":"#"),errorPath:i._`""`,opts:this.opts,self:this};let g;try{this._compilations.add(t),(0,l.validateFunctionCode)(f),u.optimize(this.opts.code.optimize);const e=u.toString();g=`${u.scopeRefs(o.default.scope)}return ${e}`,this.opts.code.process&&(g=this.opts.code.process(g,t));const n=new Function(`${o.default.self}`,`${o.default.scope}`,g)(this,this.scope.get());if(this.scope.value(m,{ref:n}),n.errors=null,n.schema=t.schema,n.schemaEnv=t,t.$async&&(n.$async=!0),!0===this.opts.code.source&&(n.source={validateName:m,validateCode:e,scopeValues:u._values}),this.opts.unevaluated){const{props:t,items:e}=f;n.evaluated={props:t instanceof i.Name?void 0:t,items:e instanceof i.Name?void 0:e,dynamicProps:t instanceof i.Name,dynamicItems:e instanceof i.Name},n.source&&(n.source.evaluated=(0,i.stringify)(n.evaluated))}return t.validate=n,t}catch(e){throw delete t.validate,delete t.validateName,g&&this.logger.error("Error compiling schema, function code:",g),e}finally{this._compilations.delete(t)}}function u(t){return(0,s.inlineRef)(t.schema,this.opts.inlineRefs)?t.schema:t.validate?t:h.call(this,t)}function d(t){for(const i of this._compilations)if(n=t,(e=i).schema===n.schema&&e.root===n.root&&e.baseId===n.baseId)return i;var e,n}function p(t,e){let n;for(;"string"==typeof(n=this.refs[e]);)e=n;return n||this.schemas[e]||m.call(this,t,e)}function m(t,e){const n=this.opts.uriResolver.parse(e),i=(0,s._getFullPath)(this.opts.uriResolver,n);let r=(0,s.getFullPath)(this.opts.uriResolver,t.baseId,void 0);if(Object.keys(t.schema).length>0&&i===r)return g.call(this,n,t);const o=(0,s.normalizeId)(i),a=this.refs[o]||this.schemas[o];if("string"==typeof a){const e=m.call(this,t,a);if("object"!=typeof(null==e?void 0:e.schema))return;return g.call(this,n,e)}if("object"==typeof(null==a?void 0:a.schema)){if(a.validate||h.call(this,a),o===(0,s.normalizeId)(e)){const{schema:e}=a,{schemaId:n}=this.opts,i=e[n];return i&&(r=(0,s.resolveUrl)(this.opts.uriResolver,r,i)),new c({schema:e,schemaId:n,root:t,baseId:r})}return g.call(this,n,a)}}e.SchemaEnv=c,e.compileSchema=h,e.resolveRef=function(t,e,n){var i;n=(0,s.resolveUrl)(this.opts.uriResolver,e,n);const r=t.refs[n];if(r)return r;let o=p.call(this,t,n);if(void 0===o){const r=null===(i=t.localRefs)||void 0===i?void 0:i[n],{schemaId:s}=this.opts;r&&(o=new c({schema:r,schemaId:s,root:t,baseId:e}))}return void 0!==o?t.refs[n]=u.call(this,o):void 0},e.getCompilingSchema=d,e.resolveSchema=m;const f=new Set(["properties","patternProperties","enum","dependencies","definitions"]);function g(t,{baseId:e,schema:n,root:i}){var r;if("/"!==(null===(r=t.fragment)||void 0===r?void 0:r[0]))return;for(const i of t.fragment.slice(1).split("/")){if("boolean"==typeof n)return;const t=n[(0,a.unescapeFragment)(i)];if(void 0===t)return;const r="object"==typeof(n=t)&&n[this.opts.schemaId];!f.has(i)&&r&&(e=(0,s.resolveUrl)(this.opts.uriResolver,e,r))}let o;if("boolean"!=typeof n&&n.$ref&&!(0,a.schemaHasRulesButRef)(n,this.RULES)){const t=(0,s.resolveUrl)(this.opts.uriResolver,e,n.$ref);o=m.call(this,i,t)}const{schemaId:l}=this.opts;return o=o||new c({schema:n,schemaId:l,root:i,baseId:e}),o.schema!==o.root.schema?o:void 0}},2023:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(9029),r={data:new i.Name("data"),valCxt:new i.Name("valCxt"),instancePath:new i.Name("instancePath"),parentData:new i.Name("parentData"),parentDataProperty:new i.Name("parentDataProperty"),rootData:new i.Name("rootData"),dynamicAnchors:new i.Name("dynamicAnchors"),vErrors:new i.Name("vErrors"),errors:new i.Name("errors"),this:new i.Name("this"),self:new i.Name("self"),scope:new i.Name("scope"),json:new i.Name("json"),jsonPos:new i.Name("jsonPos"),jsonLen:new i.Name("jsonLen"),jsonPart:new i.Name("jsonPart")};e.default=r},4551:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(6939);class r extends Error{constructor(t,e,n,r){super(r||`can't resolve reference ${n} from id ${e}`),this.missingRef=(0,i.resolveUrl)(t,e,n),this.missingSchema=(0,i.normalizeId)((0,i.getFullPath)(t,this.missingRef))}}e.default=r},6939:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.getSchemaRefs=e.resolveUrl=e.normalizeId=e._getFullPath=e.getFullPath=e.inlineRef=void 0;const i=n(4227),r=n(2017),o=n(7106),s=new Set(["type","format","pattern","maxLength","minLength","maxProperties","minProperties","maxItems","minItems","maximum","minimum","uniqueItems","multipleOf","required","enum","const"]);e.inlineRef=function(t,e=!0){return"boolean"==typeof t||(!0===e?!l(t):!!e&&c(t)<=e)};const a=new Set(["$ref","$recursiveRef","$recursiveAnchor","$dynamicRef","$dynamicAnchor"]);function l(t){for(const e in t){if(a.has(e))return!0;const n=t[e];if(Array.isArray(n)&&n.some(l))return!0;if("object"==typeof n&&l(n))return!0}return!1}function c(t){let e=0;for(const n in t){if("$ref"===n)return 1/0;if(e++,!s.has(n)&&("object"==typeof t[n]&&(0,i.eachItem)(t[n],(t=>e+=c(t))),e===1/0))return 1/0}return e}function h(t,e="",n){!1!==n&&(e=p(e));const i=t.parse(e);return u(t,i)}function u(t,e){return t.serialize(e).split("#")[0]+"#"}e.getFullPath=h,e._getFullPath=u;const d=/#\/?$/;function p(t){return t?t.replace(d,""):""}e.normalizeId=p,e.resolveUrl=function(t,e,n){return n=p(n),t.resolve(e,n)};const m=/^[a-z_][-a-z0-9._]*$/i;e.getSchemaRefs=function(t,e){if("boolean"==typeof t)return{};const{schemaId:n,uriResolver:i}=this.opts,s=p(t[n]||e),a={"":s},l=h(i,s,!1),c={},u=new Set;return o(t,{allKeys:!0},((t,e,i,r)=>{if(void 0===r)return;const o=l+e;let s=a[r];function h(e){const n=this.opts.uriResolver.resolve;if(e=p(s?n(s,e):e),u.has(e))throw f(e);u.add(e);let i=this.refs[e];return"string"==typeof i&&(i=this.refs[i]),"object"==typeof i?d(t,i.schema,e):e!==p(o)&&("#"===e[0]?(d(t,c[e],e),c[e]=t):this.refs[e]=o),e}function g(t){if("string"==typeof t){if(!m.test(t))throw new Error(`invalid anchor "${t}"`);h.call(this,`#${t}`)}}"string"==typeof t[n]&&(s=h.call(this,t[n])),g.call(this,t.$anchor),g.call(this,t.$dynamicAnchor),a[e]=s})),c;function d(t,e,n){if(void 0!==e&&!r(t,e))throw f(n)}function f(t){return new Error(`reference "${t}" resolves to more than one schema`)}}},396:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.getRules=e.isJSONType=void 0;const n=new Set(["string","number","integer","boolean","null","object","array"]);e.isJSONType=function(t){return"string"==typeof t&&n.has(t)},e.getRules=function(){const t={number:{type:"number",rules:[]},string:{type:"string",rules:[]},array:{type:"array",rules:[]},object:{type:"object",rules:[]}};return{types:{...t,integer:!0,boolean:!0,null:!0},rules:[{rules:[]},t.number,t.string,t.array,t.object],post:{rules:[]},all:{},keywords:{}}}},4227:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.checkStrictMode=e.getErrorPath=e.Type=e.useFunc=e.setEvaluated=e.evaluatedPropsToName=e.mergeEvaluated=e.eachItem=e.unescapeJsonPointer=e.escapeJsonPointer=e.escapeFragment=e.unescapeFragment=e.schemaRefOrVal=e.schemaHasRulesButRef=e.schemaHasRules=e.checkUnknownRules=e.alwaysValidSchema=e.toHash=void 0;const i=n(9029),r=n(1520);function o(t,e=t.schema){const{opts:n,self:i}=t;if(!n.strictSchema)return;if("boolean"==typeof e)return;const r=i.RULES.keywords;for(const n in e)r[n]||m(t,`unknown keyword: "${n}"`)}function s(t,e){if("boolean"==typeof t)return!t;for(const n in t)if(e[n])return!0;return!1}function a(t){return"number"==typeof t?`${t}`:t.replace(/~/g,"~0").replace(/\//g,"~1")}function l(t){return t.replace(/~1/g,"/").replace(/~0/g,"~")}function c({mergeNames:t,mergeToName:e,mergeValues:n,resultToName:r}){return(o,s,a,l)=>{const c=void 0===a?s:a instanceof i.Name?(s instanceof i.Name?t(o,s,a):e(o,s,a),a):s instanceof i.Name?(e(o,a,s),s):n(s,a);return l!==i.Name||c instanceof i.Name?c:r(o,c)}}function h(t,e){if(!0===e)return t.var("props",!0);const n=t.var("props",i._`{}`);return void 0!==e&&u(t,n,e),n}function u(t,e,n){Object.keys(n).forEach((n=>t.assign(i._`${e}${(0,i.getProperty)(n)}`,!0)))}e.toHash=function(t){const e={};for(const n of t)e[n]=!0;return e},e.alwaysValidSchema=function(t,e){return"boolean"==typeof e?e:0===Object.keys(e).length||(o(t,e),!s(e,t.self.RULES.all))},e.checkUnknownRules=o,e.schemaHasRules=s,e.schemaHasRulesButRef=function(t,e){if("boolean"==typeof t)return!t;for(const n in t)if("$ref"!==n&&e.all[n])return!0;return!1},e.schemaRefOrVal=function({topSchemaRef:t,schemaPath:e},n,r,o){if(!o){if("number"==typeof n||"boolean"==typeof n)return n;if("string"==typeof n)return i._`${n}`}return i._`${t}${e}${(0,i.getProperty)(r)}`},e.unescapeFragment=function(t){return l(decodeURIComponent(t))},e.escapeFragment=function(t){return encodeURIComponent(a(t))},e.escapeJsonPointer=a,e.unescapeJsonPointer=l,e.eachItem=function(t,e){if(Array.isArray(t))for(const n of t)e(n);else e(t)},e.mergeEvaluated={props:c({mergeNames:(t,e,n)=>t.if(i._`${n} !== true && ${e} !== undefined`,(()=>{t.if(i._`${e} === true`,(()=>t.assign(n,!0)),(()=>t.assign(n,i._`${n} || {}`).code(i._`Object.assign(${n}, ${e})`)))})),mergeToName:(t,e,n)=>t.if(i._`${n} !== true`,(()=>{!0===e?t.assign(n,!0):(t.assign(n,i._`${n} || {}`),u(t,n,e))})),mergeValues:(t,e)=>!0===t||{...t,...e},resultToName:h}),items:c({mergeNames:(t,e,n)=>t.if(i._`${n} !== true && ${e} !== undefined`,(()=>t.assign(n,i._`${e} === true ? true : ${n} > ${e} ? ${n} : ${e}`))),mergeToName:(t,e,n)=>t.if(i._`${n} !== true`,(()=>t.assign(n,!0===e||i._`${n} > ${e} ? ${n} : ${e}`))),mergeValues:(t,e)=>!0===t||Math.max(t,e),resultToName:(t,e)=>t.var("items",e)})},e.evaluatedPropsToName=h,e.setEvaluated=u;const d={};var p;function m(t,e,n=t.opts.strictSchema){if(n){if(e=`strict mode: ${e}`,!0===n)throw new Error(e);t.self.logger.warn(e)}}e.useFunc=function(t,e){return t.scopeValue("func",{ref:e,code:d[e.code]||(d[e.code]=new r._Code(e.code))})},function(t){t[t.Num=0]="Num",t[t.Str=1]="Str"}(p||(e.Type=p={})),e.getErrorPath=function(t,e,n){if(t instanceof i.Name){const r=e===p.Num;return n?r?i._`"[" + ${t} + "]"`:i._`"['" + ${t} + "']"`:r?i._`"/" + ${t}`:i._`"/" + ${t}.replace(/~/g, "~0").replace(/\\//g, "~1")`}return n?(0,i.getProperty)(t).toString():"/"+a(t)},e.checkStrictMode=m},7887:(t,e)=>{"use strict";function n(t,e){return e.rules.some((e=>i(t,e)))}function i(t,e){var n;return void 0!==t[e.keyword]||(null===(n=e.definition.implements)||void 0===n?void 0:n.some((e=>void 0!==t[e])))}Object.defineProperty(e,"__esModule",{value:!0}),e.shouldUseRule=e.shouldUseGroup=e.schemaHasRulesForType=void 0,e.schemaHasRulesForType=function({schema:t,self:e},i){const r=e.RULES.types[i];return r&&!0!==r&&n(t,r)},e.shouldUseGroup=n,e.shouldUseRule=i},8727:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.boolOrEmptySchema=e.topBoolOrEmptySchema=void 0;const i=n(8708),r=n(9029),o=n(2023),s={message:"boolean schema is false"};function a(t,e){const{gen:n,data:r}=t,o={gen:n,keyword:"false schema",data:r,schema:!1,schemaCode:!1,schemaValue:!1,params:{},it:t};(0,i.reportError)(o,s,void 0,e)}e.topBoolOrEmptySchema=function(t){const{gen:e,schema:n,validateName:i}=t;!1===n?a(t,!1):"object"==typeof n&&!0===n.$async?e.return(o.default.data):(e.assign(r._`${i}.errors`,null),e.return(!0))},e.boolOrEmptySchema=function(t,e){const{gen:n,schema:i}=t;!1===i?(n.var(e,!1),a(t)):n.var(e,!0)}},208:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.reportTypeError=e.checkDataTypes=e.checkDataType=e.coerceAndCheckDataType=e.getJSONTypes=e.getSchemaTypes=e.DataType=void 0;const i=n(396),r=n(7887),o=n(8708),s=n(9029),a=n(4227);var l;function c(t){const e=Array.isArray(t)?t:t?[t]:[];if(e.every(i.isJSONType))return e;throw new Error("type must be JSONType or JSONType[]: "+e.join(","))}!function(t){t[t.Correct=0]="Correct",t[t.Wrong=1]="Wrong"}(l||(e.DataType=l={})),e.getSchemaTypes=function(t){const e=c(t.type);if(e.includes("null")){if(!1===t.nullable)throw new Error("type: null contradicts nullable: false")}else{if(!e.length&&void 0!==t.nullable)throw new Error('"nullable" cannot be used without "type"');!0===t.nullable&&e.push("null")}return e},e.getJSONTypes=c,e.coerceAndCheckDataType=function(t,e){const{gen:n,data:i,opts:o}=t,a=function(t,e){return e?t.filter((t=>h.has(t)||"array"===e&&"array"===t)):[]}(e,o.coerceTypes),c=e.length>0&&!(0===a.length&&1===e.length&&(0,r.schemaHasRulesForType)(t,e[0]));if(c){const r=d(e,i,o.strictNumbers,l.Wrong);n.if(r,(()=>{a.length?function(t,e,n){const{gen:i,data:r,opts:o}=t,a=i.let("dataType",s._`typeof ${r}`),l=i.let("coerced",s._`undefined`);"array"===o.coerceTypes&&i.if(s._`${a} == 'object' && Array.isArray(${r}) && ${r}.length == 1`,(()=>i.assign(r,s._`${r}[0]`).assign(a,s._`typeof ${r}`).if(d(e,r,o.strictNumbers),(()=>i.assign(l,r))))),i.if(s._`${l} !== undefined`);for(const t of n)(h.has(t)||"array"===t&&"array"===o.coerceTypes)&&c(t);function c(t){switch(t){case"string":return void i.elseIf(s._`${a} == "number" || ${a} == "boolean"`).assign(l,s._`"" + ${r}`).elseIf(s._`${r} === null`).assign(l,s._`""`);case"number":return void i.elseIf(s._`${a} == "boolean" || ${r} === null
|
|
2
2
|
|| (${a} == "string" && ${r} && ${r} == +${r})`).assign(l,s._`+${r}`);case"integer":return void i.elseIf(s._`${a} === "boolean" || ${r} === null
|
|
3
3
|
|| (${a} === "string" && ${r} && ${r} == +${r} && !(${r} % 1))`).assign(l,s._`+${r}`);case"boolean":return void i.elseIf(s._`${r} === "false" || ${r} === 0 || ${r} === null`).assign(l,!1).elseIf(s._`${r} === "true" || ${r} === 1`).assign(l,!0);case"null":return i.elseIf(s._`${r} === "" || ${r} === 0 || ${r} === false`),void i.assign(l,null);case"array":i.elseIf(s._`${a} === "string" || ${a} === "number"
|
|
4
4
|
|| ${a} === "boolean" || ${r} === null`).assign(l,s._`[${r}]`)}}i.else(),m(t),i.endIf(),i.if(s._`${l} !== undefined`,(()=>{i.assign(r,l),function({gen:t,parentData:e,parentDataProperty:n},i){t.if(s._`${e} !== undefined`,(()=>t.assign(s._`${e}[${n}]`,i)))}(t,l)}))}(t,e,a):m(t)}))}return c};const h=new Set(["string","number","integer","boolean","null"]);function u(t,e,n,i=l.Correct){const r=i===l.Correct?s.operators.EQ:s.operators.NEQ;let o;switch(t){case"null":return s._`${e} ${r} null`;case"array":o=s._`Array.isArray(${e})`;break;case"object":o=s._`${e} && typeof ${e} == "object" && !Array.isArray(${e})`;break;case"integer":o=a(s._`!(${e} % 1) && !isNaN(${e})`);break;case"number":o=a();break;default:return s._`typeof ${e} ${r} ${t}`}return i===l.Correct?o:(0,s.not)(o);function a(t=s.nil){return(0,s.and)(s._`typeof ${e} == "number"`,t,n?s._`isFinite(${e})`:s.nil)}}function d(t,e,n,i){if(1===t.length)return u(t[0],e,n,i);let r;const o=(0,a.toHash)(t);if(o.array&&o.object){const t=s._`typeof ${e} != "object"`;r=o.null?t:s._`!${e} || ${t}`,delete o.null,delete o.array,delete o.object}else r=s.nil;o.number&&delete o.integer;for(const t in o)r=(0,s.and)(r,u(t,e,n,i));return r}e.checkDataType=u,e.checkDataTypes=d;const p={message:({schema:t})=>`must be ${t}`,params:({schema:t,schemaValue:e})=>"string"==typeof t?s._`{type: ${t}}`:s._`{type: ${e}}`};function m(t){const e=function(t){const{gen:e,data:n,schema:i}=t,r=(0,a.schemaRefOrVal)(t,i,"type");return{gen:e,keyword:"type",data:n,schema:i.type,schemaCode:r,schemaValue:r,parentSchema:i,params:{},it:t}}(t);(0,o.reportError)(e,p)}e.reportTypeError=m},7870:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.assignDefaults=void 0;const i=n(9029),r=n(4227);function o(t,e,n){const{gen:o,compositeRule:s,data:a,opts:l}=t;if(void 0===n)return;const c=i._`${a}${(0,i.getProperty)(e)}`;if(s)return void(0,r.checkStrictMode)(t,`default is ignored for: ${c}`);let h=i._`${c} === undefined`;"empty"===l.useDefaults&&(h=i._`${h} || ${c} === null || ${c} === ""`),o.if(h,i._`${c} = ${(0,i.stringify)(n)}`)}e.assignDefaults=function(t,e){const{properties:n,items:i}=t.schema;if("object"===e&&n)for(const e in n)o(t,e,n[e].default);else"array"===e&&Array.isArray(i)&&i.forEach(((e,n)=>o(t,n,e.default)))}},2586:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.getData=e.KeywordCxt=e.validateFunctionCode=void 0;const i=n(8727),r=n(208),o=n(7887),s=n(208),a=n(7870),l=n(3673),c=n(4495),h=n(9029),u=n(2023),d=n(6939),p=n(4227),m=n(8708);function f({gen:t,validateName:e,schema:n,schemaEnv:i,opts:r},o){r.code.es5?t.func(e,h._`${u.default.data}, ${u.default.valCxt}`,i.$async,(()=>{t.code(h._`"use strict"; ${g(n,r)}`),function(t,e){t.if(u.default.valCxt,(()=>{t.var(u.default.instancePath,h._`${u.default.valCxt}.${u.default.instancePath}`),t.var(u.default.parentData,h._`${u.default.valCxt}.${u.default.parentData}`),t.var(u.default.parentDataProperty,h._`${u.default.valCxt}.${u.default.parentDataProperty}`),t.var(u.default.rootData,h._`${u.default.valCxt}.${u.default.rootData}`),e.dynamicRef&&t.var(u.default.dynamicAnchors,h._`${u.default.valCxt}.${u.default.dynamicAnchors}`)}),(()=>{t.var(u.default.instancePath,h._`""`),t.var(u.default.parentData,h._`undefined`),t.var(u.default.parentDataProperty,h._`undefined`),t.var(u.default.rootData,u.default.data),e.dynamicRef&&t.var(u.default.dynamicAnchors,h._`{}`)}))}(t,r),t.code(o)})):t.func(e,h._`${u.default.data}, ${function(t){return h._`{${u.default.instancePath}="", ${u.default.parentData}, ${u.default.parentDataProperty}, ${u.default.rootData}=${u.default.data}${t.dynamicRef?h._`, ${u.default.dynamicAnchors}={}`:h.nil}}={}`}(r)}`,i.$async,(()=>t.code(g(n,r)).code(o)))}function g(t,e){const n="object"==typeof t&&t[e.schemaId];return n&&(e.code.source||e.code.process)?h._`/*# sourceURL=${n} */`:h.nil}function y({schema:t,self:e}){if("boolean"==typeof t)return!t;for(const n in t)if(e.RULES.all[n])return!0;return!1}function b(t){return"boolean"!=typeof t.schema}function v(t){(0,p.checkUnknownRules)(t),function(t){const{schema:e,errSchemaPath:n,opts:i,self:r}=t;e.$ref&&i.ignoreKeywordsWithRef&&(0,p.schemaHasRulesButRef)(e,r.RULES)&&r.logger.warn(`$ref: keywords ignored in schema at path "${n}"`)}(t)}function w(t,e){if(t.opts.jtd)return A(t,[],!1,e);const n=(0,r.getSchemaTypes)(t.schema);A(t,n,!(0,r.coerceAndCheckDataType)(t,n),e)}function C({gen:t,schemaEnv:e,schema:n,errSchemaPath:i,opts:r}){const o=n.$comment;if(!0===r.$comment)t.code(h._`${u.default.self}.logger.log(${o})`);else if("function"==typeof r.$comment){const n=h.str`${i}/$comment`,r=t.scopeValue("root",{ref:e.root});t.code(h._`${u.default.self}.opts.$comment(${o}, ${n}, ${r}.schema)`)}}function A(t,e,n,i){const{gen:r,schema:a,data:l,allErrors:c,opts:d,self:m}=t,{RULES:f}=m;function g(p){(0,o.shouldUseGroup)(a,p)&&(p.type?(r.if((0,s.checkDataType)(p.type,l,d.strictNumbers)),S(t,p),1===e.length&&e[0]===p.type&&n&&(r.else(),(0,s.reportTypeError)(t)),r.endIf()):S(t,p),c||r.if(h._`${u.default.errors} === ${i||0}`))}!a.$ref||!d.ignoreKeywordsWithRef&&(0,p.schemaHasRulesButRef)(a,f)?(d.jtd||function(t,e){!t.schemaEnv.meta&&t.opts.strictTypes&&(function(t,e){e.length&&(t.dataTypes.length?(e.forEach((e=>{x(t.dataTypes,e)||E(t,`type "${e}" not allowed by context "${t.dataTypes.join(",")}"`)})),function(t,e){const n=[];for(const i of t.dataTypes)x(e,i)?n.push(i):e.includes("integer")&&"number"===i&&n.push("integer");t.dataTypes=n}(t,e)):t.dataTypes=e)}(t,e),t.opts.allowUnionTypes||function(t,e){e.length>1&&(2!==e.length||!e.includes("null"))&&E(t,"use allowUnionTypes to allow union type keyword")}(t,e),function(t,e){const n=t.self.RULES.all;for(const i in n){const r=n[i];if("object"==typeof r&&(0,o.shouldUseRule)(t.schema,r)){const{type:n}=r.definition;n.length&&!n.some((t=>{return i=t,(n=e).includes(i)||"number"===i&&n.includes("integer");var n,i}))&&E(t,`missing type "${n.join(",")}" for keyword "${i}"`)}}}(t,t.dataTypes))}(t,e),r.block((()=>{for(const t of f.rules)g(t);g(f.post)}))):r.block((()=>_(t,"$ref",f.all.$ref.definition)))}function S(t,e){const{gen:n,schema:i,opts:{useDefaults:r}}=t;r&&(0,a.assignDefaults)(t,e.type),n.block((()=>{for(const n of e.rules)(0,o.shouldUseRule)(i,n)&&_(t,n.keyword,n.definition,e.type)}))}function x(t,e){return t.includes(e)||"integer"===e&&t.includes("number")}function E(t,e){e+=` at "${t.schemaEnv.baseId+t.errSchemaPath}" (strictTypes)`,(0,p.checkStrictMode)(t,e,t.opts.strictTypes)}e.validateFunctionCode=function(t){b(t)&&(v(t),y(t))?function(t){const{schema:e,opts:n,gen:i}=t;f(t,(()=>{n.$comment&&e.$comment&&C(t),function(t){const{schema:e,opts:n}=t;void 0!==e.default&&n.useDefaults&&n.strictSchema&&(0,p.checkStrictMode)(t,"default is ignored in the schema root")}(t),i.let(u.default.vErrors,null),i.let(u.default.errors,0),n.unevaluated&&function(t){const{gen:e,validateName:n}=t;t.evaluated=e.const("evaluated",h._`${n}.evaluated`),e.if(h._`${t.evaluated}.dynamicProps`,(()=>e.assign(h._`${t.evaluated}.props`,h._`undefined`))),e.if(h._`${t.evaluated}.dynamicItems`,(()=>e.assign(h._`${t.evaluated}.items`,h._`undefined`)))}(t),w(t),function(t){const{gen:e,schemaEnv:n,validateName:i,ValidationError:r,opts:o}=t;n.$async?e.if(h._`${u.default.errors} === 0`,(()=>e.return(u.default.data)),(()=>e.throw(h._`new ${r}(${u.default.vErrors})`))):(e.assign(h._`${i}.errors`,u.default.vErrors),o.unevaluated&&function({gen:t,evaluated:e,props:n,items:i}){n instanceof h.Name&&t.assign(h._`${e}.props`,n),i instanceof h.Name&&t.assign(h._`${e}.items`,i)}(t),e.return(h._`${u.default.errors} === 0`))}(t)}))}(t):f(t,(()=>(0,i.topBoolOrEmptySchema)(t)))};class M{constructor(t,e,n){if((0,l.validateKeywordUsage)(t,e,n),this.gen=t.gen,this.allErrors=t.allErrors,this.keyword=n,this.data=t.data,this.schema=t.schema[n],this.$data=e.$data&&t.opts.$data&&this.schema&&this.schema.$data,this.schemaValue=(0,p.schemaRefOrVal)(t,this.schema,n,this.$data),this.schemaType=e.schemaType,this.parentSchema=t.schema,this.params={},this.it=t,this.def=e,this.$data)this.schemaCode=t.gen.const("vSchema",L(this.$data,t));else if(this.schemaCode=this.schemaValue,!(0,l.validSchemaType)(this.schema,e.schemaType,e.allowUndefined))throw new Error(`${n} value must be ${JSON.stringify(e.schemaType)}`);("code"in e?e.trackErrors:!1!==e.errors)&&(this.errsCount=t.gen.const("_errs",u.default.errors))}result(t,e,n){this.failResult((0,h.not)(t),e,n)}failResult(t,e,n){this.gen.if(t),n?n():this.error(),e?(this.gen.else(),e(),this.allErrors&&this.gen.endIf()):this.allErrors?this.gen.endIf():this.gen.else()}pass(t,e){this.failResult((0,h.not)(t),void 0,e)}fail(t){if(void 0===t)return this.error(),void(this.allErrors||this.gen.if(!1));this.gen.if(t),this.error(),this.allErrors?this.gen.endIf():this.gen.else()}fail$data(t){if(!this.$data)return this.fail(t);const{schemaCode:e}=this;this.fail(h._`${e} !== undefined && (${(0,h.or)(this.invalid$data(),t)})`)}error(t,e,n){if(e)return this.setParams(e),this._error(t,n),void this.setParams({});this._error(t,n)}_error(t,e){(t?m.reportExtraError:m.reportError)(this,this.def.error,e)}$dataError(){(0,m.reportError)(this,this.def.$dataError||m.keyword$DataError)}reset(){if(void 0===this.errsCount)throw new Error('add "trackErrors" to keyword definition');(0,m.resetErrorsCount)(this.gen,this.errsCount)}ok(t){this.allErrors||this.gen.if(t)}setParams(t,e){e?Object.assign(this.params,t):this.params=t}block$data(t,e,n=h.nil){this.gen.block((()=>{this.check$data(t,n),e()}))}check$data(t=h.nil,e=h.nil){if(!this.$data)return;const{gen:n,schemaCode:i,schemaType:r,def:o}=this;n.if((0,h.or)(h._`${i} === undefined`,e)),t!==h.nil&&n.assign(t,!0),(r.length||o.validateSchema)&&(n.elseIf(this.invalid$data()),this.$dataError(),t!==h.nil&&n.assign(t,!1)),n.else()}invalid$data(){const{gen:t,schemaCode:e,schemaType:n,def:i,it:r}=this;return(0,h.or)(function(){if(n.length){if(!(e instanceof h.Name))throw new Error("ajv implementation error");const t=Array.isArray(n)?n:[n];return h._`${(0,s.checkDataTypes)(t,e,r.opts.strictNumbers,s.DataType.Wrong)}`}return h.nil}(),function(){if(i.validateSchema){const n=t.scopeValue("validate$data",{ref:i.validateSchema});return h._`!${n}(${e})`}return h.nil}())}subschema(t,e){const n=(0,c.getSubschema)(this.it,t);(0,c.extendSubschemaData)(n,this.it,t),(0,c.extendSubschemaMode)(n,t);const r={...this.it,...n,items:void 0,props:void 0};return function(t,e){b(t)&&(v(t),y(t))?function(t,e){const{schema:n,gen:i,opts:r}=t;r.$comment&&n.$comment&&C(t),function(t){const e=t.schema[t.opts.schemaId];e&&(t.baseId=(0,d.resolveUrl)(t.opts.uriResolver,t.baseId,e))}(t),function(t){if(t.schema.$async&&!t.schemaEnv.$async)throw new Error("async schema in sync schema")}(t);const o=i.const("_errs",u.default.errors);w(t,o),i.var(e,h._`${o} === ${u.default.errors}`)}(t,e):(0,i.boolOrEmptySchema)(t,e)}(r,e),r}mergeEvaluated(t,e){const{it:n,gen:i}=this;n.opts.unevaluated&&(!0!==n.props&&void 0!==t.props&&(n.props=p.mergeEvaluated.props(i,t.props,n.props,e)),!0!==n.items&&void 0!==t.items&&(n.items=p.mergeEvaluated.items(i,t.items,n.items,e)))}mergeValidEvaluated(t,e){const{it:n,gen:i}=this;if(n.opts.unevaluated&&(!0!==n.props||!0!==n.items))return i.if(e,(()=>this.mergeEvaluated(t,h.Name))),!0}}function _(t,e,n,i){const r=new M(t,n,e);"code"in n?n.code(r,i):r.$data&&n.validate?(0,l.funcKeywordCode)(r,n):"macro"in n?(0,l.macroKeywordCode)(r,n):(n.compile||n.validate)&&(0,l.funcKeywordCode)(r,n)}e.KeywordCxt=M;const I=/^\/(?:[^~]|~0|~1)*$/,T=/^([0-9]+)(#|\/(?:[^~]|~0|~1)*)?$/;function L(t,{dataLevel:e,dataNames:n,dataPathArr:i}){let r,o;if(""===t)return u.default.rootData;if("/"===t[0]){if(!I.test(t))throw new Error(`Invalid JSON-pointer: ${t}`);r=t,o=u.default.rootData}else{const s=T.exec(t);if(!s)throw new Error(`Invalid JSON-pointer: ${t}`);const a=+s[1];if(r=s[2],"#"===r){if(a>=e)throw new Error(l("property/index",a));return i[e-a]}if(a>e)throw new Error(l("data",a));if(o=n[e-a],!r)return o}let s=o;const a=r.split("/");for(const t of a)t&&(o=h._`${o}${(0,h.getProperty)((0,p.unescapeJsonPointer)(t))}`,s=h._`${s} && ${o}`);return s;function l(t,n){return`Cannot access ${t} ${n} levels up, current level is ${e}`}}e.getData=L},3673:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.validateKeywordUsage=e.validSchemaType=e.funcKeywordCode=e.macroKeywordCode=void 0;const i=n(9029),r=n(2023),o=n(5765),s=n(8708);function a(t){const{gen:e,data:n,it:r}=t;e.if(r.parentData,(()=>e.assign(n,i._`${r.parentData}[${r.parentDataProperty}]`)))}function l(t,e,n){if(void 0===n)throw new Error(`keyword "${e}" failed to compile`);return t.scopeValue("keyword","function"==typeof n?{ref:n}:{ref:n,code:(0,i.stringify)(n)})}e.macroKeywordCode=function(t,e){const{gen:n,keyword:r,schema:o,parentSchema:s,it:a}=t,c=e.macro.call(a.self,o,s,a),h=l(n,r,c);!1!==a.opts.validateSchema&&a.self.validateSchema(c,!0);const u=n.name("valid");t.subschema({schema:c,schemaPath:i.nil,errSchemaPath:`${a.errSchemaPath}/${r}`,topSchemaRef:h,compositeRule:!0},u),t.pass(u,(()=>t.error(!0)))},e.funcKeywordCode=function(t,e){var n;const{gen:c,keyword:h,schema:u,parentSchema:d,$data:p,it:m}=t;!function({schemaEnv:t},e){if(e.async&&!t.$async)throw new Error("async keyword in sync schema")}(m,e);const f=!p&&e.compile?e.compile.call(m.self,u,d,m):e.validate,g=l(c,h,f),y=c.let("valid");function b(n=(e.async?i._`await `:i.nil)){const s=m.opts.passContext?r.default.this:r.default.self,a=!("compile"in e&&!p||!1===e.schema);c.assign(y,i._`${n}${(0,o.callValidateCode)(t,g,s,a)}`,e.modifying)}function v(t){var n;c.if((0,i.not)(null!==(n=e.valid)&&void 0!==n?n:y),t)}t.block$data(y,(function(){if(!1===e.errors)b(),e.modifying&&a(t),v((()=>t.error()));else{const n=e.async?function(){const t=c.let("ruleErrs",null);return c.try((()=>b(i._`await `)),(e=>c.assign(y,!1).if(i._`${e} instanceof ${m.ValidationError}`,(()=>c.assign(t,i._`${e}.errors`)),(()=>c.throw(e))))),t}():function(){const t=i._`${g}.errors`;return c.assign(t,null),b(i.nil),t}();e.modifying&&a(t),v((()=>function(t,e){const{gen:n}=t;n.if(i._`Array.isArray(${e})`,(()=>{n.assign(r.default.vErrors,i._`${r.default.vErrors} === null ? ${e} : ${r.default.vErrors}.concat(${e})`).assign(r.default.errors,i._`${r.default.vErrors}.length`),(0,s.extendErrors)(t)}),(()=>t.error()))}(t,n)))}})),t.ok(null!==(n=e.valid)&&void 0!==n?n:y)},e.validSchemaType=function(t,e,n=!1){return!e.length||e.some((e=>"array"===e?Array.isArray(t):"object"===e?t&&"object"==typeof t&&!Array.isArray(t):typeof t==e||n&&void 0===t))},e.validateKeywordUsage=function({schema:t,opts:e,self:n,errSchemaPath:i},r,o){if(Array.isArray(r.keyword)?!r.keyword.includes(o):r.keyword!==o)throw new Error("ajv implementation error");const s=r.dependencies;if(null==s?void 0:s.some((e=>!Object.prototype.hasOwnProperty.call(t,e))))throw new Error(`parent schema must have dependencies of ${o}: ${s.join(",")}`);if(r.validateSchema&&!r.validateSchema(t[o])){const t=`keyword "${o}" value is invalid at path "${i}": `+n.errorsText(r.validateSchema.errors);if("log"!==e.validateSchema)throw new Error(t);n.logger.error(t)}}},4495:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.extendSubschemaMode=e.extendSubschemaData=e.getSubschema=void 0;const i=n(9029),r=n(4227);e.getSubschema=function(t,{keyword:e,schemaProp:n,schema:o,schemaPath:s,errSchemaPath:a,topSchemaRef:l}){if(void 0!==e&&void 0!==o)throw new Error('both "keyword" and "schema" passed, only one allowed');if(void 0!==e){const o=t.schema[e];return void 0===n?{schema:o,schemaPath:i._`${t.schemaPath}${(0,i.getProperty)(e)}`,errSchemaPath:`${t.errSchemaPath}/${e}`}:{schema:o[n],schemaPath:i._`${t.schemaPath}${(0,i.getProperty)(e)}${(0,i.getProperty)(n)}`,errSchemaPath:`${t.errSchemaPath}/${e}/${(0,r.escapeFragment)(n)}`}}if(void 0!==o){if(void 0===s||void 0===a||void 0===l)throw new Error('"schemaPath", "errSchemaPath" and "topSchemaRef" are required with "schema"');return{schema:o,schemaPath:s,topSchemaRef:l,errSchemaPath:a}}throw new Error('either "keyword" or "schema" must be passed')},e.extendSubschemaData=function(t,e,{dataProp:n,dataPropType:o,data:s,dataTypes:a,propertyName:l}){if(void 0!==s&&void 0!==n)throw new Error('both "data" and "dataProp" passed, only one allowed');const{gen:c}=e;if(void 0!==n){const{errorPath:s,dataPathArr:a,opts:l}=e;h(c.let("data",i._`${e.data}${(0,i.getProperty)(n)}`,!0)),t.errorPath=i.str`${s}${(0,r.getErrorPath)(n,o,l.jsPropertySyntax)}`,t.parentDataProperty=i._`${n}`,t.dataPathArr=[...a,t.parentDataProperty]}function h(n){t.data=n,t.dataLevel=e.dataLevel+1,t.dataTypes=[],e.definedProperties=new Set,t.parentData=e.data,t.dataNames=[...e.dataNames,n]}void 0!==s&&(h(s instanceof i.Name?s:c.let("data",s,!0)),void 0!==l&&(t.propertyName=l)),a&&(t.dataTypes=a)},e.extendSubschemaMode=function(t,{jtdDiscriminator:e,jtdMetadata:n,compositeRule:i,createErrors:r,allErrors:o}){void 0!==i&&(t.compositeRule=i),void 0!==r&&(t.createErrors=r),void 0!==o&&(t.allErrors=o),t.jtdDiscriminator=e,t.jtdMetadata=n}},4042:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.CodeGen=e.Name=e.nil=e.stringify=e.str=e._=e.KeywordCxt=void 0;var i=n(2586);Object.defineProperty(e,"KeywordCxt",{enumerable:!0,get:function(){return i.KeywordCxt}});var r=n(9029);Object.defineProperty(e,"_",{enumerable:!0,get:function(){return r._}}),Object.defineProperty(e,"str",{enumerable:!0,get:function(){return r.str}}),Object.defineProperty(e,"stringify",{enumerable:!0,get:function(){return r.stringify}}),Object.defineProperty(e,"nil",{enumerable:!0,get:function(){return r.nil}}),Object.defineProperty(e,"Name",{enumerable:!0,get:function(){return r.Name}}),Object.defineProperty(e,"CodeGen",{enumerable:!0,get:function(){return r.CodeGen}});const o=n(3558),s=n(4551),a=n(396),l=n(3835),c=n(9029),h=n(6939),u=n(208),d=n(4227),p=n(3837),m=n(5944),f=(t,e)=>new RegExp(t,e);f.code="new RegExp";const g=["removeAdditional","useDefaults","coerceTypes"],y=new Set(["validate","serialize","parse","wrapper","root","schema","keyword","pattern","formats","validate$data","func","obj","Error"]),b={errorDataPath:"",format:"`validateFormats: false` can be used instead.",nullable:'"nullable" keyword is supported by default.',jsonPointers:"Deprecated jsPropertySyntax can be used instead.",extendRefs:"Deprecated ignoreKeywordsWithRef can be used instead.",missingRefs:"Pass empty schema with $id that should be ignored to ajv.addSchema.",processCode:"Use option `code: {process: (code, schemaEnv: object) => string}`",sourceCode:"Use option `code: {source: true}`",strictDefaults:"It is default now, see option `strict`.",strictKeywords:"It is default now, see option `strict`.",uniqueItems:'"uniqueItems" keyword is always validated.',unknownFormats:"Disable strict mode or pass `true` to `ajv.addFormat` (or `formats` option).",cache:"Map is used as cache, schema object as key.",serialize:"Map is used as cache, schema object as key.",ajvErrors:"It is default now."},v={ignoreKeywordsWithRef:"",jsPropertySyntax:"",unicode:'"minLength"/"maxLength" account for unicode characters by default.'};function w(t){var e,n,i,r,o,s,a,l,c,h,u,d,p,g,y,b,v,w,C,A,S,x,E,M,_;const I=t.strict,T=null===(e=t.code)||void 0===e?void 0:e.optimize,L=!0===T||void 0===T?1:T||0,N=null!==(i=null===(n=t.code)||void 0===n?void 0:n.regExp)&&void 0!==i?i:f,P=null!==(r=t.uriResolver)&&void 0!==r?r:m.default;return{strictSchema:null===(s=null!==(o=t.strictSchema)&&void 0!==o?o:I)||void 0===s||s,strictNumbers:null===(l=null!==(a=t.strictNumbers)&&void 0!==a?a:I)||void 0===l||l,strictTypes:null!==(h=null!==(c=t.strictTypes)&&void 0!==c?c:I)&&void 0!==h?h:"log",strictTuples:null!==(d=null!==(u=t.strictTuples)&&void 0!==u?u:I)&&void 0!==d?d:"log",strictRequired:null!==(g=null!==(p=t.strictRequired)&&void 0!==p?p:I)&&void 0!==g&&g,code:t.code?{...t.code,optimize:L,regExp:N}:{optimize:L,regExp:N},loopRequired:null!==(y=t.loopRequired)&&void 0!==y?y:200,loopEnum:null!==(b=t.loopEnum)&&void 0!==b?b:200,meta:null===(v=t.meta)||void 0===v||v,messages:null===(w=t.messages)||void 0===w||w,inlineRefs:null===(C=t.inlineRefs)||void 0===C||C,schemaId:null!==(A=t.schemaId)&&void 0!==A?A:"$id",addUsedSchema:null===(S=t.addUsedSchema)||void 0===S||S,validateSchema:null===(x=t.validateSchema)||void 0===x||x,validateFormats:null===(E=t.validateFormats)||void 0===E||E,unicodeRegExp:null===(M=t.unicodeRegExp)||void 0===M||M,int32range:null===(_=t.int32range)||void 0===_||_,uriResolver:P}}class C{constructor(t={}){this.schemas={},this.refs={},this.formats={},this._compilations=new Set,this._loading={},this._cache=new Map,t=this.opts={...t,...w(t)};const{es5:e,lines:n}=this.opts.code;this.scope=new c.ValueScope({scope:{},prefixes:y,es5:e,lines:n}),this.logger=function(t){if(!1===t)return I;if(void 0===t)return console;if(t.log&&t.warn&&t.error)return t;throw new Error("logger must implement log, warn and error methods")}(t.logger);const i=t.validateFormats;t.validateFormats=!1,this.RULES=(0,a.getRules)(),A.call(this,b,t,"NOT SUPPORTED"),A.call(this,v,t,"DEPRECATED","warn"),this._metaOpts=_.call(this),t.formats&&E.call(this),this._addVocabularies(),this._addDefaultMetaSchema(),t.keywords&&M.call(this,t.keywords),"object"==typeof t.meta&&this.addMetaSchema(t.meta),x.call(this),t.validateFormats=i}_addVocabularies(){this.addKeyword("$async")}_addDefaultMetaSchema(){const{$data:t,meta:e,schemaId:n}=this.opts;let i=p;"id"===n&&(i={...p},i.id=i.$id,delete i.$id),e&&t&&this.addMetaSchema(i,i[n],!1)}defaultMeta(){const{meta:t,schemaId:e}=this.opts;return this.opts.defaultMeta="object"==typeof t?t[e]||t:void 0}validate(t,e){let n;if("string"==typeof t){if(n=this.getSchema(t),!n)throw new Error(`no schema with key or ref "${t}"`)}else n=this.compile(t);const i=n(e);return"$async"in n||(this.errors=n.errors),i}compile(t,e){const n=this._addSchema(t,e);return n.validate||this._compileSchemaEnv(n)}compileAsync(t,e){if("function"!=typeof this.opts.loadSchema)throw new Error("options.loadSchema should be a function");const{loadSchema:n}=this.opts;return i.call(this,t,e);async function i(t,e){await r.call(this,t.$schema);const n=this._addSchema(t,e);return n.validate||o.call(this,n)}async function r(t){t&&!this.getSchema(t)&&await i.call(this,{$ref:t},!0)}async function o(t){try{return this._compileSchemaEnv(t)}catch(e){if(!(e instanceof s.default))throw e;return a.call(this,e),await l.call(this,e.missingSchema),o.call(this,t)}}function a({missingSchema:t,missingRef:e}){if(this.refs[t])throw new Error(`AnySchema ${t} is loaded but ${e} cannot be resolved`)}async function l(t){const n=await c.call(this,t);this.refs[t]||await r.call(this,n.$schema),this.refs[t]||this.addSchema(n,t,e)}async function c(t){const e=this._loading[t];if(e)return e;try{return await(this._loading[t]=n(t))}finally{delete this._loading[t]}}}addSchema(t,e,n,i=this.opts.validateSchema){if(Array.isArray(t)){for(const e of t)this.addSchema(e,void 0,n,i);return this}let r;if("object"==typeof t){const{schemaId:e}=this.opts;if(r=t[e],void 0!==r&&"string"!=typeof r)throw new Error(`schema ${e} must be string`)}return e=(0,h.normalizeId)(e||r),this._checkUnique(e),this.schemas[e]=this._addSchema(t,n,e,i,!0),this}addMetaSchema(t,e,n=this.opts.validateSchema){return this.addSchema(t,e,!0,n),this}validateSchema(t,e){if("boolean"==typeof t)return!0;let n;if(n=t.$schema,void 0!==n&&"string"!=typeof n)throw new Error("$schema must be a string");if(n=n||this.opts.defaultMeta||this.defaultMeta(),!n)return this.logger.warn("meta-schema not available"),this.errors=null,!0;const i=this.validate(n,t);if(!i&&e){const t="schema is invalid: "+this.errorsText();if("log"!==this.opts.validateSchema)throw new Error(t);this.logger.error(t)}return i}getSchema(t){let e;for(;"string"==typeof(e=S.call(this,t));)t=e;if(void 0===e){const{schemaId:n}=this.opts,i=new l.SchemaEnv({schema:{},schemaId:n});if(e=l.resolveSchema.call(this,i,t),!e)return;this.refs[t]=e}return e.validate||this._compileSchemaEnv(e)}removeSchema(t){if(t instanceof RegExp)return this._removeAllSchemas(this.schemas,t),this._removeAllSchemas(this.refs,t),this;switch(typeof t){case"undefined":return this._removeAllSchemas(this.schemas),this._removeAllSchemas(this.refs),this._cache.clear(),this;case"string":{const e=S.call(this,t);return"object"==typeof e&&this._cache.delete(e.schema),delete this.schemas[t],delete this.refs[t],this}case"object":{const e=t;this._cache.delete(e);let n=t[this.opts.schemaId];return n&&(n=(0,h.normalizeId)(n),delete this.schemas[n],delete this.refs[n]),this}default:throw new Error("ajv.removeSchema: invalid parameter")}}addVocabulary(t){for(const e of t)this.addKeyword(e);return this}addKeyword(t,e){let n;if("string"==typeof t)n=t,"object"==typeof e&&(this.logger.warn("these parameters are deprecated, see docs for addKeyword"),e.keyword=n);else{if("object"!=typeof t||void 0!==e)throw new Error("invalid addKeywords parameters");if(n=(e=t).keyword,Array.isArray(n)&&!n.length)throw new Error("addKeywords: keyword must be string or non-empty array")}if(L.call(this,n,e),!e)return(0,d.eachItem)(n,(t=>N.call(this,t))),this;$.call(this,e);const i={...e,type:(0,u.getJSONTypes)(e.type),schemaType:(0,u.getJSONTypes)(e.schemaType)};return(0,d.eachItem)(n,0===i.type.length?t=>N.call(this,t,i):t=>i.type.forEach((e=>N.call(this,t,i,e)))),this}getKeyword(t){const e=this.RULES.all[t];return"object"==typeof e?e.definition:!!e}removeKeyword(t){const{RULES:e}=this;delete e.keywords[t],delete e.all[t];for(const n of e.rules){const e=n.rules.findIndex((e=>e.keyword===t));e>=0&&n.rules.splice(e,1)}return this}addFormat(t,e){return"string"==typeof e&&(e=new RegExp(e)),this.formats[t]=e,this}errorsText(t=this.errors,{separator:e=", ",dataVar:n="data"}={}){return t&&0!==t.length?t.map((t=>`${n}${t.instancePath} ${t.message}`)).reduce(((t,n)=>t+e+n)):"No errors"}$dataMetaSchema(t,e){const n=this.RULES.all;t=JSON.parse(JSON.stringify(t));for(const i of e){const e=i.split("/").slice(1);let r=t;for(const t of e)r=r[t];for(const t in n){const e=n[t];if("object"!=typeof e)continue;const{$data:i}=e.definition,o=r[t];i&&o&&(r[t]=O(o))}}return t}_removeAllSchemas(t,e){for(const n in t){const i=t[n];e&&!e.test(n)||("string"==typeof i?delete t[n]:i&&!i.meta&&(this._cache.delete(i.schema),delete t[n]))}}_addSchema(t,e,n,i=this.opts.validateSchema,r=this.opts.addUsedSchema){let o;const{schemaId:s}=this.opts;if("object"==typeof t)o=t[s];else{if(this.opts.jtd)throw new Error("schema must be object");if("boolean"!=typeof t)throw new Error("schema must be object or boolean")}let a=this._cache.get(t);if(void 0!==a)return a;n=(0,h.normalizeId)(o||n);const c=h.getSchemaRefs.call(this,t,n);return a=new l.SchemaEnv({schema:t,schemaId:s,meta:e,baseId:n,localRefs:c}),this._cache.set(a.schema,a),r&&!n.startsWith("#")&&(n&&this._checkUnique(n),this.refs[n]=a),i&&this.validateSchema(t,!0),a}_checkUnique(t){if(this.schemas[t]||this.refs[t])throw new Error(`schema with key or id "${t}" already exists`)}_compileSchemaEnv(t){if(t.meta?this._compileMetaSchema(t):l.compileSchema.call(this,t),!t.validate)throw new Error("ajv implementation error");return t.validate}_compileMetaSchema(t){const e=this.opts;this.opts=this._metaOpts;try{l.compileSchema.call(this,t)}finally{this.opts=e}}}function A(t,e,n,i="error"){for(const r in t){const o=r;o in e&&this.logger[i](`${n}: option ${r}. ${t[o]}`)}}function S(t){return t=(0,h.normalizeId)(t),this.schemas[t]||this.refs[t]}function x(){const t=this.opts.schemas;if(t)if(Array.isArray(t))this.addSchema(t);else for(const e in t)this.addSchema(t[e],e)}function E(){for(const t in this.opts.formats){const e=this.opts.formats[t];e&&this.addFormat(t,e)}}function M(t){if(Array.isArray(t))this.addVocabulary(t);else{this.logger.warn("keywords option as map is deprecated, pass array");for(const e in t){const n=t[e];n.keyword||(n.keyword=e),this.addKeyword(n)}}}function _(){const t={...this.opts};for(const e of g)delete t[e];return t}C.ValidationError=o.default,C.MissingRefError=s.default,e.default=C;const I={log(){},warn(){},error(){}},T=/^[a-z_$][a-z0-9_$:-]*$/i;function L(t,e){const{RULES:n}=this;if((0,d.eachItem)(t,(t=>{if(n.keywords[t])throw new Error(`Keyword ${t} is already defined`);if(!T.test(t))throw new Error(`Keyword ${t} has invalid name`)})),e&&e.$data&&!("code"in e)&&!("validate"in e))throw new Error('$data keyword must have "code" or "validate" function')}function N(t,e,n){var i;const r=null==e?void 0:e.post;if(n&&r)throw new Error('keyword with "post" flag cannot have "type"');const{RULES:o}=this;let s=r?o.post:o.rules.find((({type:t})=>t===n));if(s||(s={type:n,rules:[]},o.rules.push(s)),o.keywords[t]=!0,!e)return;const a={keyword:t,definition:{...e,type:(0,u.getJSONTypes)(e.type),schemaType:(0,u.getJSONTypes)(e.schemaType)}};e.before?P.call(this,s,a,e.before):s.rules.push(a),o.all[t]=a,null===(i=e.implements)||void 0===i||i.forEach((t=>this.addKeyword(t)))}function P(t,e,n){const i=t.rules.findIndex((t=>t.keyword===n));i>=0?t.rules.splice(i,0,e):(t.rules.push(e),this.logger.warn(`rule ${n} is not defined`))}function $(t){let{metaSchema:e}=t;void 0!==e&&(t.$data&&this.opts.$data&&(e=O(e)),t.validateSchema=this.compile(e,!0))}const R={$ref:"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#"};function O(t){return{anyOf:[t,R]}}},9572:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(1678),r=n(7216),o=n(9547),s=n(8226),a=n(518),l=n(4588),c=n(5707),h=n(7082),u=["/properties"];e.default=function(t){return[i,r,o,s,a,e(this,l),c,e(this,h)].forEach((t=>this.addMetaSchema(t,void 0,!1))),this;function e(e,n){return t?e.$dataMetaSchema(n,u):n}}},6250:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(2017);i.code='require("ajv/dist/runtime/equal").default',e.default=i},3853:(t,e)=>{"use strict";function n(t){const e=t.length;let n,i=0,r=0;for(;r<e;)i++,n=t.charCodeAt(r++),n>=55296&&n<=56319&&r<e&&(n=t.charCodeAt(r),56320==(64512&n)&&r++);return i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=n,n.code='require("ajv/dist/runtime/ucs2length").default'},5944:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(8343);i.code='require("ajv/dist/runtime/uri").default',e.default=i},3558:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});class n extends Error{constructor(t){super("validation failed"),this.errors=t,this.ajv=this.validation=!0}}e.default=n},5457:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.validateAdditionalItems=void 0;const i=n(9029),r=n(4227),o={keyword:"additionalItems",type:"array",schemaType:["boolean","object"],before:"uniqueItems",error:{message:({params:{len:t}})=>i.str`must NOT have more than ${t} items`,params:({params:{len:t}})=>i._`{limit: ${t}}`},code(t){const{parentSchema:e,it:n}=t,{items:i}=e;Array.isArray(i)?s(t,i):(0,r.checkStrictMode)(n,'"additionalItems" is ignored when "items" is not an array of schemas')}};function s(t,e){const{gen:n,schema:o,data:s,keyword:a,it:l}=t;l.items=!0;const c=n.const("len",i._`${s}.length`);if(!1===o)t.setParams({len:e.length}),t.pass(i._`${c} <= ${e.length}`);else if("object"==typeof o&&!(0,r.alwaysValidSchema)(l,o)){const o=n.var("valid",i._`${c} <= ${e.length}`);n.if((0,i.not)(o),(()=>function(o){n.forRange("i",e.length,c,(e=>{t.subschema({keyword:a,dataProp:e,dataPropType:r.Type.Num},o),l.allErrors||n.if((0,i.not)(o),(()=>n.break()))}))}(o))),t.ok(o)}}e.validateAdditionalItems=s,e.default=o},8660:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(5765),r=n(9029),o=n(2023),s=n(4227),a={keyword:"additionalProperties",type:["object"],schemaType:["boolean","object"],allowUndefined:!0,trackErrors:!0,error:{message:"must NOT have additional properties",params:({params:t})=>r._`{additionalProperty: ${t.additionalProperty}}`},code(t){const{gen:e,schema:n,parentSchema:a,data:l,errsCount:c,it:h}=t;if(!c)throw new Error("ajv implementation error");const{allErrors:u,opts:d}=h;if(h.props=!0,"all"!==d.removeAdditional&&(0,s.alwaysValidSchema)(h,n))return;const p=(0,i.allSchemaProperties)(a.properties),m=(0,i.allSchemaProperties)(a.patternProperties);function f(t){e.code(r._`delete ${l}[${t}]`)}function g(i){if("all"===d.removeAdditional||d.removeAdditional&&!1===n)f(i);else{if(!1===n)return t.setParams({additionalProperty:i}),t.error(),void(u||e.break());if("object"==typeof n&&!(0,s.alwaysValidSchema)(h,n)){const n=e.name("valid");"failing"===d.removeAdditional?(y(i,n,!1),e.if((0,r.not)(n),(()=>{t.reset(),f(i)}))):(y(i,n),u||e.if((0,r.not)(n),(()=>e.break())))}}}function y(e,n,i){const r={keyword:"additionalProperties",dataProp:e,dataPropType:s.Type.Str};!1===i&&Object.assign(r,{compositeRule:!0,createErrors:!1,allErrors:!1}),t.subschema(r,n)}e.forIn("key",l,(n=>{p.length||m.length?e.if(function(n){let o;if(p.length>8){const t=(0,s.schemaRefOrVal)(h,a.properties,"properties");o=(0,i.isOwnProperty)(e,t,n)}else o=p.length?(0,r.or)(...p.map((t=>r._`${n} === ${t}`))):r.nil;return m.length&&(o=(0,r.or)(o,...m.map((e=>r._`${(0,i.usePattern)(t,e)}.test(${n})`)))),(0,r.not)(o)}(n),(()=>g(n))):g(n)})),t.ok(r._`${c} === ${o.default.errors}`)}};e.default=a},5844:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(4227),r={keyword:"allOf",schemaType:"array",code(t){const{gen:e,schema:n,it:r}=t;if(!Array.isArray(n))throw new Error("ajv implementation error");const o=e.name("valid");n.forEach(((e,n)=>{if((0,i.alwaysValidSchema)(r,e))return;const s=t.subschema({keyword:"allOf",schemaProp:n},o);t.ok(o),t.mergeEvaluated(s)}))}};e.default=r},6505:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i={keyword:"anyOf",schemaType:"array",trackErrors:!0,code:n(5765).validateUnion,error:{message:"must match a schema in anyOf"}};e.default=i},2661:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(9029),r=n(4227),o={keyword:"contains",type:"array",schemaType:["object","boolean"],before:"uniqueItems",trackErrors:!0,error:{message:({params:{min:t,max:e}})=>void 0===e?i.str`must contain at least ${t} valid item(s)`:i.str`must contain at least ${t} and no more than ${e} valid item(s)`,params:({params:{min:t,max:e}})=>void 0===e?i._`{minContains: ${t}}`:i._`{minContains: ${t}, maxContains: ${e}}`},code(t){const{gen:e,schema:n,parentSchema:o,data:s,it:a}=t;let l,c;const{minContains:h,maxContains:u}=o;a.opts.next?(l=void 0===h?1:h,c=u):l=1;const d=e.const("len",i._`${s}.length`);if(t.setParams({min:l,max:c}),void 0===c&&0===l)return void(0,r.checkStrictMode)(a,'"minContains" == 0 without "maxContains": "contains" keyword ignored');if(void 0!==c&&l>c)return(0,r.checkStrictMode)(a,'"minContains" > "maxContains" is always invalid'),void t.fail();if((0,r.alwaysValidSchema)(a,n)){let e=i._`${d} >= ${l}`;return void 0!==c&&(e=i._`${e} && ${d} <= ${c}`),void t.pass(e)}a.items=!0;const p=e.name("valid");function m(){const t=e.name("_valid"),n=e.let("count",0);f(t,(()=>e.if(t,(()=>function(t){e.code(i._`${t}++`),void 0===c?e.if(i._`${t} >= ${l}`,(()=>e.assign(p,!0).break())):(e.if(i._`${t} > ${c}`,(()=>e.assign(p,!1).break())),1===l?e.assign(p,!0):e.if(i._`${t} >= ${l}`,(()=>e.assign(p,!0))))}(n)))))}function f(n,i){e.forRange("i",0,d,(e=>{t.subschema({keyword:"contains",dataProp:e,dataPropType:r.Type.Num,compositeRule:!0},n),i()}))}void 0===c&&1===l?f(p,(()=>e.if(p,(()=>e.break())))):0===l?(e.let(p,!0),void 0!==c&&e.if(i._`${s}.length > 0`,m)):(e.let(p,!1),m()),t.result(p,(()=>t.reset()))}};e.default=o},3025:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.validateSchemaDeps=e.validatePropertyDeps=e.error=void 0;const i=n(9029),r=n(4227),o=n(5765);e.error={message:({params:{property:t,depsCount:e,deps:n}})=>{const r=1===e?"property":"properties";return i.str`must have ${r} ${n} when property ${t} is present`},params:({params:{property:t,depsCount:e,deps:n,missingProperty:r}})=>i._`{property: ${t},
|
|
5
5
|
missingProperty: ${r},
|
|
6
6
|
depsCount: ${e},
|
|
7
|
-
deps: ${n}}`};const s={keyword:"dependencies",type:"object",schemaType:"object",error:e.error,code(t){const[e,n]=function({schema:t}){const e={},n={};for(const i in t)"__proto__"!==i&&((Array.isArray(t[i])?e:n)[i]=t[i]);return[e,n]}(t);a(t,e),l(t,n)}};function a(t,e=t.schema){const{gen:n,data:r,it:s}=t;if(0===Object.keys(e).length)return;const a=n.let("missing");for(const l in e){const c=e[l];if(0===c.length)continue;const h=(0,o.propertyInData)(n,r,l,s.opts.ownProperties);t.setParams({property:l,depsCount:c.length,deps:c.join(", ")}),s.allErrors?n.if(h,(()=>{for(const e of c)(0,o.checkReportMissingProp)(t,e)})):(n.if(i._`${h} && (${(0,o.checkMissingProp)(t,c,a)})`),(0,o.reportMissingProp)(t,a),n.else())}}function l(t,e=t.schema){const{gen:n,data:i,keyword:s,it:a}=t,l=n.name("valid");for(const c in e)(0,r.alwaysValidSchema)(a,e[c])||(n.if((0,o.propertyInData)(n,i,c,a.opts.ownProperties),(()=>{const e=t.subschema({keyword:s,schemaProp:c},l);t.mergeValidEvaluated(e,l)}),(()=>n.var(l,!0))),t.ok(l))}e.validatePropertyDeps=a,e.validateSchemaDeps=l,e.default=s},4845:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(3025),r={keyword:"dependentSchemas",type:"object",schemaType:"object",code:t=>(0,i.validateSchemaDeps)(t)};e.default=r},1239:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(9029),r=n(4227),o={keyword:"if",schemaType:["object","boolean"],trackErrors:!0,error:{message:({params:t})=>i.str`must match "${t.ifClause}" schema`,params:({params:t})=>i._`{failingKeyword: ${t.ifClause}}`},code(t){const{gen:e,parentSchema:n,it:o}=t;void 0===n.then&&void 0===n.else&&(0,r.checkStrictMode)(o,'"if" without "then" and "else" is ignored');const a=s(o,"then"),l=s(o,"else");if(!a&&!l)return;const c=e.let("valid",!0),h=e.name("_valid");if(function(){const e=t.subschema({keyword:"if",compositeRule:!0,createErrors:!1,allErrors:!1},h);t.mergeEvaluated(e)}(),t.reset(),a&&l){const n=e.let("ifClause");t.setParams({ifClause:n}),e.if(h,u("then",n),u("else",n))}else a?e.if(h,u("then")):e.if((0,i.not)(h),u("else"));function u(n,r){return()=>{const o=t.subschema({keyword:n},h);e.assign(c,h),t.mergeValidEvaluated(o,c),r?e.assign(r,i._`${n}`):t.setParams({ifClause:n})}}t.pass(c,(()=>t.error(!0)))}};function s(t,e){const n=t.schema[e];return void 0!==n&&!(0,r.alwaysValidSchema)(t,n)}e.default=o},6378:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(5457),r=n(5354),o=n(494),s=n(3966),a=n(2661),l=n(3025),c=n(2094),h=n(8660),u=n(117),d=n(5333),p=n(7923),m=n(6505),f=n(6163),g=n(5844),y=n(1239),b=n(4426);e.default=function(t=!1){const e=[p.default,m.default,f.default,g.default,y.default,b.default,c.default,h.default,l.default,u.default,d.default];return t?e.push(r.default,s.default):e.push(i.default,o.default),e.push(a.default),e}},494:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.validateTuple=void 0;const i=n(9029),r=n(4227),o=n(5765),s={keyword:"items",type:"array",schemaType:["object","array","boolean"],before:"uniqueItems",code(t){const{schema:e,it:n}=t;if(Array.isArray(e))return a(t,"additionalItems",e);n.items=!0,(0,r.alwaysValidSchema)(n,e)||t.ok((0,o.validateArray)(t))}};function a(t,e,n=t.schema){const{gen:o,parentSchema:s,data:a,keyword:l,it:c}=t;!function(t){const{opts:i,errSchemaPath:o}=c,s=n.length,a=s===t.minItems&&(s===t.maxItems||!1===t[e]);if(i.strictTuples&&!a){const t=`"${l}" is ${s}-tuple, but minItems or maxItems/${e} are not specified or different at path "${o}"`;(0,r.checkStrictMode)(c,t,i.strictTuples)}}(s),c.opts.unevaluated&&n.length&&!0!==c.items&&(c.items=r.mergeEvaluated.items(o,n.length,c.items));const h=o.name("valid"),u=o.const("len",i._`${a}.length`);n.forEach(((e,n)=>{(0,r.alwaysValidSchema)(c,e)||(o.if(i._`${u} > ${n}`,(()=>t.subschema({keyword:l,schemaProp:n,dataProp:n},h))),t.ok(h))}))}e.validateTuple=a,e.default=s},3966:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(9029),r=n(4227),o=n(5765),s=n(5457),a={keyword:"items",type:"array",schemaType:["object","boolean"],before:"uniqueItems",error:{message:({params:{len:t}})=>i.str`must NOT have more than ${t} items`,params:({params:{len:t}})=>i._`{limit: ${t}}`},code(t){const{schema:e,parentSchema:n,it:i}=t,{prefixItems:a}=n;i.items=!0,(0,r.alwaysValidSchema)(i,e)||(a?(0,s.validateAdditionalItems)(t,a):t.ok((0,o.validateArray)(t)))}};e.default=a},7923:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(4227),r={keyword:"not",schemaType:["object","boolean"],trackErrors:!0,code(t){const{gen:e,schema:n,it:r}=t;if((0,i.alwaysValidSchema)(r,n))return void t.fail();const o=e.name("valid");t.subschema({keyword:"not",compositeRule:!0,createErrors:!1,allErrors:!1},o),t.failResult(o,(()=>t.reset()),(()=>t.error()))},error:{message:"must NOT be valid"}};e.default=r},6163:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(9029),r=n(4227),o={keyword:"oneOf",schemaType:"array",trackErrors:!0,error:{message:"must match exactly one schema in oneOf",params:({params:t})=>i._`{passingSchemas: ${t.passing}}`},code(t){const{gen:e,schema:n,parentSchema:o,it:s}=t;if(!Array.isArray(n))throw new Error("ajv implementation error");if(s.opts.discriminator&&o.discriminator)return;const a=n,l=e.let("valid",!1),c=e.let("passing",null),h=e.name("_valid");t.setParams({passing:c}),e.block((function(){a.forEach(((n,o)=>{let a;(0,r.alwaysValidSchema)(s,n)?e.var(h,!0):a=t.subschema({keyword:"oneOf",schemaProp:o,compositeRule:!0},h),o>0&&e.if(i._`${h} && ${l}`).assign(l,!1).assign(c,i._`[${c}, ${o}]`).else(),e.if(h,(()=>{e.assign(l,!0),e.assign(c,o),a&&t.mergeEvaluated(a,i.Name)}))}))})),t.result(l,(()=>t.reset()),(()=>t.error(!0)))}};e.default=o},5333:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(5765),r=n(9029),o=n(4227),s=n(4227),a={keyword:"patternProperties",type:"object",schemaType:"object",code(t){const{gen:e,schema:n,data:a,parentSchema:l,it:c}=t,{opts:h}=c,u=(0,i.allSchemaProperties)(n),d=u.filter((t=>(0,o.alwaysValidSchema)(c,n[t])));if(0===u.length||d.length===u.length&&(!c.opts.unevaluated||!0===c.props))return;const p=h.strictSchema&&!h.allowMatchingProperties&&l.properties,m=e.name("valid");!0===c.props||c.props instanceof r.Name||(c.props=(0,s.evaluatedPropsToName)(e,c.props));const{props:f}=c;function g(t){for(const e in p)new RegExp(t).test(e)&&(0,o.checkStrictMode)(c,`property ${e} matches pattern ${t} (use allowMatchingProperties)`)}function y(n){e.forIn("key",a,(o=>{e.if(r._`${(0,i.usePattern)(t,n)}.test(${o})`,(()=>{const i=d.includes(n);i||t.subschema({keyword:"patternProperties",schemaProp:n,dataProp:o,dataPropType:s.Type.Str},m),c.opts.unevaluated&&!0!==f?e.assign(r._`${f}[${o}]`,!0):i||c.allErrors||e.if((0,r.not)(m),(()=>e.break()))}))}))}!function(){for(const t of u)p&&g(t),c.allErrors?y(t):(e.var(m,!0),y(t),e.if(m))}()}};e.default=a},5354:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(494),r={keyword:"prefixItems",type:"array",schemaType:["array"],before:"uniqueItems",code:t=>(0,i.validateTuple)(t,"items")};e.default=r},117:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(2586),r=n(5765),o=n(4227),s=n(8660),a={keyword:"properties",type:"object",schemaType:"object",code(t){const{gen:e,schema:n,parentSchema:a,data:l,it:c}=t;"all"===c.opts.removeAdditional&&void 0===a.additionalProperties&&s.default.code(new i.KeywordCxt(c,s.default,"additionalProperties"));const h=(0,r.allSchemaProperties)(n);for(const t of h)c.definedProperties.add(t);c.opts.unevaluated&&h.length&&!0!==c.props&&(c.props=o.mergeEvaluated.props(e,(0,o.toHash)(h),c.props));const u=h.filter((t=>!(0,o.alwaysValidSchema)(c,n[t])));if(0===u.length)return;const d=e.name("valid");for(const n of u)p(n)?m(n):(e.if((0,r.propertyInData)(e,l,n,c.opts.ownProperties)),m(n),c.allErrors||e.else().var(d,!0),e.endIf()),t.it.definedProperties.add(n),t.ok(d);function p(t){return c.opts.useDefaults&&!c.compositeRule&&void 0!==n[t].default}function m(e){t.subschema({keyword:"properties",schemaProp:e,dataProp:e},d)}}};e.default=a},2094:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(9029),r=n(4227),o={keyword:"propertyNames",type:"object",schemaType:["object","boolean"],error:{message:"property name must be valid",params:({params:t})=>i._`{propertyName: ${t.propertyName}}`},code(t){const{gen:e,schema:n,data:o,it:s}=t;if((0,r.alwaysValidSchema)(s,n))return;const a=e.name("valid");e.forIn("key",o,(n=>{t.setParams({propertyName:n}),t.subschema({keyword:"propertyNames",data:n,dataTypes:["string"],propertyName:n,compositeRule:!0},a),e.if((0,i.not)(a),(()=>{t.error(!0),s.allErrors||e.break()}))})),t.ok(a)}};e.default=o},4426:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(4227),r={keyword:["then","else"],schemaType:["object","boolean"],code({keyword:t,parentSchema:e,it:n}){void 0===e.if&&(0,i.checkStrictMode)(n,`"${t}" without "if" is ignored`)}};e.default=r},5765:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.validateUnion=e.validateArray=e.usePattern=e.callValidateCode=e.schemaProperties=e.allSchemaProperties=e.noPropertyInData=e.propertyInData=e.isOwnProperty=e.hasPropFunc=e.reportMissingProp=e.checkMissingProp=e.checkReportMissingProp=void 0;const i=n(9029),r=n(4227),o=n(2023),s=n(4227);function a(t){return t.scopeValue("func",{ref:Object.prototype.hasOwnProperty,code:i._`Object.prototype.hasOwnProperty`})}function l(t,e,n){return i._`${a(t)}.call(${e}, ${n})`}function c(t,e,n,r){const o=i._`${e}${(0,i.getProperty)(n)} === undefined`;return r?(0,i.or)(o,(0,i.not)(l(t,e,n))):o}function h(t){return t?Object.keys(t).filter((t=>"__proto__"!==t)):[]}e.checkReportMissingProp=function(t,e){const{gen:n,data:r,it:o}=t;n.if(c(n,r,e,o.opts.ownProperties),(()=>{t.setParams({missingProperty:i._`${e}`},!0),t.error()}))},e.checkMissingProp=function({gen:t,data:e,it:{opts:n}},r,o){return(0,i.or)(...r.map((r=>(0,i.and)(c(t,e,r,n.ownProperties),i._`${o} = ${r}`))))},e.reportMissingProp=function(t,e){t.setParams({missingProperty:e},!0),t.error()},e.hasPropFunc=a,e.isOwnProperty=l,e.propertyInData=function(t,e,n,r){const o=i._`${e}${(0,i.getProperty)(n)} !== undefined`;return r?i._`${o} && ${l(t,e,n)}`:o},e.noPropertyInData=c,e.allSchemaProperties=h,e.schemaProperties=function(t,e){return h(e).filter((n=>!(0,r.alwaysValidSchema)(t,e[n])))},e.callValidateCode=function({schemaCode:t,data:e,it:{gen:n,topSchemaRef:r,schemaPath:s,errorPath:a},it:l},c,h,u){const d=u?i._`${t}, ${e}, ${r}${s}`:e,p=[[o.default.instancePath,(0,i.strConcat)(o.default.instancePath,a)],[o.default.parentData,l.parentData],[o.default.parentDataProperty,l.parentDataProperty],[o.default.rootData,o.default.rootData]];l.opts.dynamicRef&&p.push([o.default.dynamicAnchors,o.default.dynamicAnchors]);const m=i._`${d}, ${n.object(...p)}`;return h!==i.nil?i._`${c}.call(${h}, ${m})`:i._`${c}(${m})`};const u=i._`new RegExp`;e.usePattern=function({gen:t,it:{opts:e}},n){const r=e.unicodeRegExp?"u":"",{regExp:o}=e.code,a=o(n,r);return t.scopeValue("pattern",{key:a.toString(),ref:a,code:i._`${"new RegExp"===o.code?u:(0,s.useFunc)(t,o)}(${n}, ${r})`})},e.validateArray=function(t){const{gen:e,data:n,keyword:o,it:s}=t,a=e.name("valid");if(s.allErrors){const t=e.let("valid",!0);return l((()=>e.assign(t,!1))),t}return e.var(a,!0),l((()=>e.break())),a;function l(s){const l=e.const("len",i._`${n}.length`);e.forRange("i",0,l,(n=>{t.subschema({keyword:o,dataProp:n,dataPropType:r.Type.Num},a),e.if((0,i.not)(a),s)}))}},e.validateUnion=function(t){const{gen:e,schema:n,keyword:o,it:s}=t;if(!Array.isArray(n))throw new Error("ajv implementation error");if(n.some((t=>(0,r.alwaysValidSchema)(s,t)))&&!s.opts.unevaluated)return;const a=e.let("valid",!1),l=e.name("_valid");e.block((()=>n.forEach(((n,r)=>{const s=t.subschema({keyword:o,schemaProp:r,compositeRule:!0},l);e.assign(a,i._`${a} || ${l}`),t.mergeValidEvaluated(s,l)||e.if((0,i.not)(a))})))),t.result(a,(()=>t.reset()),(()=>t.error(!0)))}},3463:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const n={keyword:"id",code(){throw new Error('NOT SUPPORTED: keyword "id", use "$id" for schema ID')}};e.default=n},2128:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(3463),r=n(3693),o=["$schema","$id","$defs","$vocabulary",{keyword:"$comment"},"definitions",i.default,r.default];e.default=o},3693:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.callRef=e.getValidate=void 0;const i=n(4551),r=n(5765),o=n(9029),s=n(2023),a=n(3835),l=n(4227),c={keyword:"$ref",schemaType:"string",code(t){const{gen:e,schema:n,it:r}=t,{baseId:s,schemaEnv:l,validateName:c,opts:d,self:p}=r,{root:m}=l;if(("#"===n||"#/"===n)&&s===m.baseId)return function(){if(l===m)return u(t,c,l,l.$async);const n=e.scopeValue("root",{ref:m});return u(t,o._`${n}.validate`,m,m.$async)}();const f=a.resolveRef.call(p,m,s,n);if(void 0===f)throw new i.default(r.opts.uriResolver,s,n);return f instanceof a.SchemaEnv?function(e){const n=h(t,e);u(t,n,e,e.$async)}(f):function(i){const r=e.scopeValue("schema",!0===d.code.source?{ref:i,code:(0,o.stringify)(i)}:{ref:i}),s=e.name("valid"),a=t.subschema({schema:i,dataTypes:[],schemaPath:o.nil,topSchemaRef:r,errSchemaPath:n},s);t.mergeEvaluated(a),t.ok(s)}(f)}};function h(t,e){const{gen:n}=t;return e.validate?n.scopeValue("validate",{ref:e.validate}):o._`${n.scopeValue("wrapper",{ref:e})}.validate`}function u(t,e,n,i){const{gen:a,it:c}=t,{allErrors:h,schemaEnv:u,opts:d}=c,p=d.passContext?s.default.this:o.nil;function m(t){const e=o._`${t}.errors`;a.assign(s.default.vErrors,o._`${s.default.vErrors} === null ? ${e} : ${s.default.vErrors}.concat(${e})`),a.assign(s.default.errors,o._`${s.default.vErrors}.length`)}function f(t){var e;if(!c.opts.unevaluated)return;const i=null===(e=null==n?void 0:n.validate)||void 0===e?void 0:e.evaluated;if(!0!==c.props)if(i&&!i.dynamicProps)void 0!==i.props&&(c.props=l.mergeEvaluated.props(a,i.props,c.props));else{const e=a.var("props",o._`${t}.evaluated.props`);c.props=l.mergeEvaluated.props(a,e,c.props,o.Name)}if(!0!==c.items)if(i&&!i.dynamicItems)void 0!==i.items&&(c.items=l.mergeEvaluated.items(a,i.items,c.items));else{const e=a.var("items",o._`${t}.evaluated.items`);c.items=l.mergeEvaluated.items(a,e,c.items,o.Name)}}i?function(){if(!u.$async)throw new Error("async schema referenced by sync schema");const n=a.let("valid");a.try((()=>{a.code(o._`await ${(0,r.callValidateCode)(t,e,p)}`),f(e),h||a.assign(n,!0)}),(t=>{a.if(o._`!(${t} instanceof ${c.ValidationError})`,(()=>a.throw(t))),m(t),h||a.assign(n,!1)})),t.ok(n)}():t.result((0,r.callValidateCode)(t,e,p),(()=>f(e)),(()=>m(e)))}e.getValidate=h,e.callRef=u,e.default=c},6653:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(9029),r=n(7652),o=n(3835),s=n(4551),a=n(4227),l={keyword:"discriminator",type:"object",schemaType:"object",error:{message:({params:{discrError:t,tagName:e}})=>t===r.DiscrError.Tag?`tag "${e}" must be string`:`value of tag "${e}" must be in oneOf`,params:({params:{discrError:t,tag:e,tagName:n}})=>i._`{error: ${t}, tag: ${n}, tagValue: ${e}}`},code(t){const{gen:e,data:n,schema:l,parentSchema:c,it:h}=t,{oneOf:u}=c;if(!h.opts.discriminator)throw new Error("discriminator: requires discriminator option");const d=l.propertyName;if("string"!=typeof d)throw new Error("discriminator: requires propertyName");if(l.mapping)throw new Error("discriminator: mapping is not supported");if(!u)throw new Error("discriminator: requires oneOf keyword");const p=e.let("valid",!1),m=e.const("tag",i._`${n}${(0,i.getProperty)(d)}`);function f(n){const r=e.name("valid"),o=t.subschema({keyword:"oneOf",schemaProp:n},r);return t.mergeEvaluated(o,i.Name),r}e.if(i._`typeof ${m} == "string"`,(()=>function(){const n=function(){var t;const e={},n=r(c);let i=!0;for(let e=0;e<u.length;e++){let c=u[e];if((null==c?void 0:c.$ref)&&!(0,a.schemaHasRulesButRef)(c,h.self.RULES)){const t=c.$ref;if(c=o.resolveRef.call(h.self,h.schemaEnv.root,h.baseId,t),c instanceof o.SchemaEnv&&(c=c.schema),void 0===c)throw new s.default(h.opts.uriResolver,h.baseId,t)}const p=null===(t=null==c?void 0:c.properties)||void 0===t?void 0:t[d];if("object"!=typeof p)throw new Error(`discriminator: oneOf subschemas (or referenced schemas) must have "properties/${d}"`);i=i&&(n||r(c)),l(p,e)}if(!i)throw new Error(`discriminator: "${d}" must be required`);return e;function r({required:t}){return Array.isArray(t)&&t.includes(d)}function l(t,e){if(t.const)p(t.const,e);else{if(!t.enum)throw new Error(`discriminator: "properties/${d}" must have "const" or "enum"`);for(const n of t.enum)p(n,e)}}function p(t,n){if("string"!=typeof t||t in e)throw new Error(`discriminator: "${d}" values must be unique strings`);e[t]=n}}();e.if(!1);for(const t in n)e.elseIf(i._`${m} === ${t}`),e.assign(p,f(n[t]));e.else(),t.error(!1,{discrError:r.DiscrError.Mapping,tag:m,tagName:d}),e.endIf()}()),(()=>t.error(!1,{discrError:r.DiscrError.Tag,tag:m,tagName:d}))),t.ok(p)}};e.default=l},7652:(t,e)=>{"use strict";var n;Object.defineProperty(e,"__esModule",{value:!0}),e.DiscrError=void 0,function(t){t.Tag="tag",t.Mapping="mapping"}(n||(e.DiscrError=n={}))},6105:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(2128),r=n(7060),o=n(6378),s=n(5520),a=n(5413),l=n(3265),c=n(7532),h=n(9857),u=[s.default,i.default,r.default,(0,o.default)(!0),c.default,h.metadataVocabulary,h.contentVocabulary,a.default,l.default];e.default=u},6144:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(2128),r=n(7060),o=n(6378),s=n(7532),a=n(9857),l=[i.default,r.default,(0,o.default)(),s.default,a.metadataVocabulary,a.contentVocabulary];e.default=l},2476:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.dynamicAnchor=void 0;const i=n(9029),r=n(2023),o=n(3835),s=n(3693),a={keyword:"$dynamicAnchor",schemaType:"string",code:t=>l(t,t.schema)};function l(t,e){const{gen:n,it:a}=t;a.schemaEnv.root.dynamicAnchors[e]=!0;const l=i._`${r.default.dynamicAnchors}${(0,i.getProperty)(e)}`,c="#"===a.errSchemaPath?a.validateName:function(t){const{schemaEnv:e,schema:n,self:i}=t.it,{root:r,baseId:a,localRefs:l,meta:c}=e.root,{schemaId:h}=i.opts,u=new o.SchemaEnv({schema:n,schemaId:h,root:r,baseId:a,localRefs:l,meta:c});return o.compileSchema.call(i,u),(0,s.getValidate)(t,u)}(t);n.if(i._`!${l}`,(()=>n.assign(l,c)))}e.dynamicAnchor=l,e.default=a},3252:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.dynamicRef=void 0;const i=n(9029),r=n(2023),o=n(3693),s={keyword:"$dynamicRef",schemaType:"string",code:t=>a(t,t.schema)};function a(t,e){const{gen:n,keyword:s,it:a}=t;if("#"!==e[0])throw new Error(`"${s}" only supports hash fragment reference`);const l=e.slice(1);if(a.allErrors)c();else{const e=n.let("valid",!1);c(e),t.ok(e)}function c(t){if(a.schemaEnv.root.dynamicAnchors[l]){const e=n.let("_v",i._`${r.default.dynamicAnchors}${(0,i.getProperty)(l)}`);n.if(e,h(e,t),h(a.validateName,t))}else h(a.validateName,t)()}function h(e,i){return i?()=>n.block((()=>{(0,o.callRef)(t,e),n.let(i,!0)})):()=>(0,o.callRef)(t,e)}}e.dynamicRef=a,e.default=s},5520:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(2476),r=n(3252),o=n(2721),s=n(3799),a=[i.default,r.default,o.default,s.default];e.default=a},2721:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(2476),r=n(4227),o={keyword:"$recursiveAnchor",schemaType:"boolean",code(t){t.schema?(0,i.dynamicAnchor)(t,""):(0,r.checkStrictMode)(t.it,"$recursiveAnchor: false is ignored")}};e.default=o},3799:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(3252),r={keyword:"$recursiveRef",schemaType:"string",code:t=>(0,i.dynamicRef)(t,t.schema)};e.default=r},4737:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(9029),r={keyword:"format",type:["number","string"],schemaType:"string",$data:!0,error:{message:({schemaCode:t})=>i.str`must match format "${t}"`,params:({schemaCode:t})=>i._`{format: ${t}}`},code(t,e){const{gen:n,data:r,$data:o,schema:s,schemaCode:a,it:l}=t,{opts:c,errSchemaPath:h,schemaEnv:u,self:d}=l;c.validateFormats&&(o?function(){const o=n.scopeValue("formats",{ref:d.formats,code:c.code.formats}),s=n.const("fDef",i._`${o}[${a}]`),l=n.let("fType"),h=n.let("format");n.if(i._`typeof ${s} == "object" && !(${s} instanceof RegExp)`,(()=>n.assign(l,i._`${s}.type || "string"`).assign(h,i._`${s}.validate`)),(()=>n.assign(l,i._`"string"`).assign(h,s))),t.fail$data((0,i.or)(!1===c.strictSchema?i.nil:i._`${a} && !${h}`,function(){const t=u.$async?i._`(${s}.async ? await ${h}(${r}) : ${h}(${r}))`:i._`${h}(${r})`,n=i._`(typeof ${h} == "function" ? ${t} : ${h}.test(${r}))`;return i._`${h} && ${h} !== true && ${l} === ${e} && !${n}`}()))}():function(){const o=d.formats[s];if(!o)return void function(){if(!1!==c.strictSchema)throw new Error(t());function t(){return`unknown format "${s}" ignored in schema at path "${h}"`}d.logger.warn(t())}();if(!0===o)return;const[a,l,p]=function(t){const e=t instanceof RegExp?(0,i.regexpCode)(t):c.code.formats?i._`${c.code.formats}${(0,i.getProperty)(s)}`:void 0,r=n.scopeValue("formats",{key:s,ref:t,code:e});return"object"!=typeof t||t instanceof RegExp?["string",t,r]:[t.type||"string",t.validate,i._`${r}.validate`]}(o);a===e&&t.pass(function(){if("object"==typeof o&&!(o instanceof RegExp)&&o.async){if(!u.$async)throw new Error("async format in sync schema");return i._`await ${p}(${r})`}return"function"==typeof l?i._`${p}(${r})`:i._`${p}.test(${r})`}())}())}};e.default=r},7532:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=[n(4737).default];e.default=i},9857:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.contentVocabulary=e.metadataVocabulary=void 0,e.metadataVocabulary=["title","description","default","deprecated","readOnly","writeOnly","examples"],e.contentVocabulary=["contentMediaType","contentEncoding","contentSchema"]},5413:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(1846),r=n(4845),o=n(2626),s=[i.default,r.default,o.default];e.default=s},3265:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(392),r=n(3445),o=[i.default,r.default];e.default=o},3445:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(9029),r=n(4227),o={keyword:"unevaluatedItems",type:"array",schemaType:["boolean","object"],error:{message:({params:{len:t}})=>i.str`must NOT have more than ${t} items`,params:({params:{len:t}})=>i._`{limit: ${t}}`},code(t){const{gen:e,schema:n,data:o,it:s}=t,a=s.items||0;if(!0===a)return;const l=e.const("len",i._`${o}.length`);if(!1===n)t.setParams({len:a}),t.fail(i._`${l} > ${a}`);else if("object"==typeof n&&!(0,r.alwaysValidSchema)(s,n)){const n=e.var("valid",i._`${l} <= ${a}`);e.if((0,i.not)(n),(()=>function(n,o){e.forRange("i",o,l,(o=>{t.subschema({keyword:"unevaluatedItems",dataProp:o,dataPropType:r.Type.Num},n),s.allErrors||e.if((0,i.not)(n),(()=>e.break()))}))}(n,a))),t.ok(n)}s.items=!0}};e.default=o},392:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(9029),r=n(4227),o=n(2023),s={keyword:"unevaluatedProperties",type:"object",schemaType:["boolean","object"],trackErrors:!0,error:{message:"must NOT have unevaluated properties",params:({params:t})=>i._`{unevaluatedProperty: ${t.unevaluatedProperty}}`},code(t){const{gen:e,schema:n,data:s,errsCount:a,it:l}=t;if(!a)throw new Error("ajv implementation error");const{allErrors:c,props:h}=l;function u(o){if(!1===n)return t.setParams({unevaluatedProperty:o}),t.error(),void(c||e.break());if(!(0,r.alwaysValidSchema)(l,n)){const n=e.name("valid");t.subschema({keyword:"unevaluatedProperties",dataProp:o,dataPropType:r.Type.Str},n),c||e.if((0,i.not)(n),(()=>e.break()))}}h instanceof i.Name?e.if(i._`${h} !== true`,(()=>e.forIn("key",s,(t=>e.if(function(t,e){return i._`!${t} || !${t}[${e}]`}(h,t),(()=>u(t))))))):!0!==h&&e.forIn("key",s,(t=>void 0===h?u(t):e.if(function(t,e){const n=[];for(const r in t)!0===t[r]&&n.push(i._`${e} !== ${r}`);return(0,i.and)(...n)}(h,t),(()=>u(t))))),l.props=!0,t.ok(i._`${a} === ${o.default.errors}`)}};e.default=s},7935:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(9029),r=n(4227),o=n(6250),s={keyword:"const",$data:!0,error:{message:"must be equal to constant",params:({schemaCode:t})=>i._`{allowedValue: ${t}}`},code(t){const{gen:e,data:n,$data:s,schemaCode:a,schema:l}=t;s||l&&"object"==typeof l?t.fail$data(i._`!${(0,r.useFunc)(e,o.default)}(${n}, ${a})`):t.fail(i._`${l} !== ${n}`)}};e.default=s},1846:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(3025),r={keyword:"dependentRequired",type:"object",schemaType:"object",error:i.error,code:t=>(0,i.validatePropertyDeps)(t)};e.default=r},8643:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(9029),r=n(4227),o=n(6250),s={keyword:"enum",schemaType:"array",$data:!0,error:{message:"must be equal to one of the allowed values",params:({schemaCode:t})=>i._`{allowedValues: ${t}}`},code(t){const{gen:e,data:n,$data:s,schema:a,schemaCode:l,it:c}=t;if(!s&&0===a.length)throw new Error("enum must have non-empty array");const h=a.length>=c.opts.loopEnum;let u;const d=()=>null!=u?u:u=(0,r.useFunc)(e,o.default);let p;if(h||s)p=e.let("valid"),t.block$data(p,(function(){e.assign(p,!1),e.forOf("v",l,(t=>e.if(i._`${d()}(${n}, ${t})`,(()=>e.assign(p,!0).break()))))}));else{if(!Array.isArray(a))throw new Error("ajv implementation error");const t=e.const("vSchema",l);p=(0,i.or)(...a.map(((e,r)=>function(t,e){const r=a[e];return"object"==typeof r&&null!==r?i._`${d()}(${n}, ${t}[${e}])`:i._`${n} === ${r}`}(t,r))))}t.pass(p)}};e.default=s},7060:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(5882),r=n(3439),o=n(7307),s=n(422),a=n(4486),l=n(4003),c=n(1163),h=n(617),u=n(7935),d=n(8643),p=[i.default,r.default,o.default,s.default,a.default,l.default,c.default,h.default,{keyword:"type",schemaType:["string","array"]},{keyword:"nullable",schemaType:"boolean"},u.default,d.default];e.default=p},2626:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(4227),r={keyword:["maxContains","minContains"],type:"array",schemaType:"number",code({keyword:t,parentSchema:e,it:n}){void 0===e.contains&&(0,i.checkStrictMode)(n,`"${t}" without "contains" is ignored`)}};e.default=r},1163:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(9029),r={keyword:["maxItems","minItems"],type:"array",schemaType:"number",$data:!0,error:{message({keyword:t,schemaCode:e}){const n="maxItems"===t?"more":"fewer";return i.str`must NOT have ${n} than ${e} items`},params:({schemaCode:t})=>i._`{limit: ${t}}`},code(t){const{keyword:e,data:n,schemaCode:r}=t,o="maxItems"===e?i.operators.GT:i.operators.LT;t.fail$data(i._`${n}.length ${o} ${r}`)}};e.default=r},7307:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(9029),r=n(4227),o=n(3853),s={keyword:["maxLength","minLength"],type:"string",schemaType:"number",$data:!0,error:{message({keyword:t,schemaCode:e}){const n="maxLength"===t?"more":"fewer";return i.str`must NOT have ${n} than ${e} characters`},params:({schemaCode:t})=>i._`{limit: ${t}}`},code(t){const{keyword:e,data:n,schemaCode:s,it:a}=t,l="maxLength"===e?i.operators.GT:i.operators.LT,c=!1===a.opts.unicode?i._`${n}.length`:i._`${(0,r.useFunc)(t.gen,o.default)}(${n})`;t.fail$data(i._`${c} ${l} ${s}`)}};e.default=s},5882:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(9029),r=i.operators,o={maximum:{okStr:"<=",ok:r.LTE,fail:r.GT},minimum:{okStr:">=",ok:r.GTE,fail:r.LT},exclusiveMaximum:{okStr:"<",ok:r.LT,fail:r.GTE},exclusiveMinimum:{okStr:">",ok:r.GT,fail:r.LTE}},s={message:({keyword:t,schemaCode:e})=>i.str`must be ${o[t].okStr} ${e}`,params:({keyword:t,schemaCode:e})=>i._`{comparison: ${o[t].okStr}, limit: ${e}}`},a={keyword:Object.keys(o),type:"number",schemaType:"number",$data:!0,error:s,code(t){const{keyword:e,data:n,schemaCode:r}=t;t.fail$data(i._`${n} ${o[e].fail} ${r} || isNaN(${n})`)}};e.default=a},4486:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(9029),r={keyword:["maxProperties","minProperties"],type:"object",schemaType:"number",$data:!0,error:{message({keyword:t,schemaCode:e}){const n="maxProperties"===t?"more":"fewer";return i.str`must NOT have ${n} than ${e} properties`},params:({schemaCode:t})=>i._`{limit: ${t}}`},code(t){const{keyword:e,data:n,schemaCode:r}=t,o="maxProperties"===e?i.operators.GT:i.operators.LT;t.fail$data(i._`Object.keys(${n}).length ${o} ${r}`)}};e.default=r},3439:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(9029),r={keyword:"multipleOf",type:"number",schemaType:"number",$data:!0,error:{message:({schemaCode:t})=>i.str`must be multiple of ${t}`,params:({schemaCode:t})=>i._`{multipleOf: ${t}}`},code(t){const{gen:e,data:n,schemaCode:r,it:o}=t,s=o.opts.multipleOfPrecision,a=e.let("res"),l=s?i._`Math.abs(Math.round(${a}) - ${a}) > 1e-${s}`:i._`${a} !== parseInt(${a})`;t.fail$data(i._`(${r} === 0 || (${a} = ${n}/${r}, ${l}))`)}};e.default=r},422:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(5765),r=n(9029),o={keyword:"pattern",type:"string",schemaType:"string",$data:!0,error:{message:({schemaCode:t})=>r.str`must match pattern "${t}"`,params:({schemaCode:t})=>r._`{pattern: ${t}}`},code(t){const{data:e,$data:n,schema:o,schemaCode:s,it:a}=t,l=a.opts.unicodeRegExp?"u":"",c=n?r._`(new RegExp(${s}, ${l}))`:(0,i.usePattern)(t,o);t.fail$data(r._`!${c}.test(${e})`)}};e.default=o},4003:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(5765),r=n(9029),o=n(4227),s={keyword:"required",type:"object",schemaType:"array",$data:!0,error:{message:({params:{missingProperty:t}})=>r.str`must have required property '${t}'`,params:({params:{missingProperty:t}})=>r._`{missingProperty: ${t}}`},code(t){const{gen:e,schema:n,schemaCode:s,data:a,$data:l,it:c}=t,{opts:h}=c;if(!l&&0===n.length)return;const u=n.length>=h.loopRequired;if(c.allErrors?function(){if(u||l)t.block$data(r.nil,d);else for(const e of n)(0,i.checkReportMissingProp)(t,e)}():function(){const o=e.let("missing");if(u||l){const n=e.let("valid",!0);t.block$data(n,(()=>function(n,o){t.setParams({missingProperty:n}),e.forOf(n,s,(()=>{e.assign(o,(0,i.propertyInData)(e,a,n,h.ownProperties)),e.if((0,r.not)(o),(()=>{t.error(),e.break()}))}),r.nil)}(o,n))),t.ok(n)}else e.if((0,i.checkMissingProp)(t,n,o)),(0,i.reportMissingProp)(t,o),e.else()}(),h.strictRequired){const e=t.parentSchema.properties,{definedProperties:i}=t.it;for(const t of n)if(void 0===(null==e?void 0:e[t])&&!i.has(t)){const e=`required property "${t}" is not defined at "${c.schemaEnv.baseId+c.errSchemaPath}" (strictRequired)`;(0,o.checkStrictMode)(c,e,c.opts.strictRequired)}}function d(){e.forOf("prop",s,(n=>{t.setParams({missingProperty:n}),e.if((0,i.noPropertyInData)(e,a,n,h.ownProperties),(()=>t.error()))}))}}};e.default=s},617:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(208),r=n(9029),o=n(4227),s=n(6250),a={keyword:"uniqueItems",type:"array",schemaType:"boolean",$data:!0,error:{message:({params:{i:t,j:e}})=>r.str`must NOT have duplicate items (items ## ${e} and ${t} are identical)`,params:({params:{i:t,j:e}})=>r._`{i: ${t}, j: ${e}}`},code(t){const{gen:e,data:n,$data:a,schema:l,parentSchema:c,schemaCode:h,it:u}=t;if(!a&&!l)return;const d=e.let("valid"),p=c.items?(0,i.getSchemaTypes)(c.items):[];function m(o,s){const a=e.name("item"),l=(0,i.checkDataTypes)(p,a,u.opts.strictNumbers,i.DataType.Wrong),c=e.const("indices",r._`{}`);e.for(r._`;${o}--;`,(()=>{e.let(a,r._`${n}[${o}]`),e.if(l,r._`continue`),p.length>1&&e.if(r._`typeof ${a} == "string"`,r._`${a} += "_"`),e.if(r._`typeof ${c}[${a}] == "number"`,(()=>{e.assign(s,r._`${c}[${a}]`),t.error(),e.assign(d,!1).break()})).code(r._`${c}[${a}] = ${o}`)}))}function f(i,a){const l=(0,o.useFunc)(e,s.default),c=e.name("outer");e.label(c).for(r._`;${i}--;`,(()=>e.for(r._`${a} = ${i}; ${a}--;`,(()=>e.if(r._`${l}(${n}[${i}], ${n}[${a}])`,(()=>{t.error(),e.assign(d,!1).break(c)}))))))}t.block$data(d,(function(){const i=e.let("i",r._`${n}.length`),o=e.let("j");t.setParams({i,j:o}),e.assign(d,!0),e.if(r._`${i} > 1`,(()=>(p.length>0&&!p.some((t=>"object"===t||"array"===t))?m:f)(i,o)))}),r._`${h} === false`),t.ok(d)}};e.default=a},5488:(t,e,n)=>{"use strict";n.d(e,{A:()=>a});var i=n(1354),r=n.n(i),o=n(6314),s=n.n(o)()(r());s.push([t.id,"\n.ui-form.ui-tooltip .ui-input-root > label.ui-input-label:not(:empty) {\n /* min-width: 30px; /* Breaks right margin /**/\n}\n\n.ui-form.ui-tooltip .ui-input-root > div.ui-input-text:not(:empty) {\n margin-top: 6px;\n}","",{version:3,sources:["webpack://./css/cell-renderer.css"],names:[],mappings:";AACA;IACI,8CAA8C;AAClD;;AAEA;IACI,eAAe;AACnB",sourcesContent:["\n.ui-form.ui-tooltip .ui-input-root > label.ui-input-label:not(:empty) {\n /* min-width: 30px; /* Breaks right margin /**/\n}\n\n.ui-form.ui-tooltip .ui-input-root > div.ui-input-text:not(:empty) {\n margin-top: 6px;\n}"],sourceRoot:""}]);const a=s},5999:(t,e,n)=>{"use strict";n.d(e,{A:()=>a});var i=n(1354),r=n.n(i),o=n(6314),s=n.n(o)()(r());s.push([t.id,".macromolecule-cell-comp-analysis-host{\n max-height: 250px;\n overflow-y: scroll;\n}\n\n.macromolecule-cell-comp-analysis-bar{\n height: inherit;\n display: block;\n margin-top: 1.5px;\n margin-bottom: 1.5px;\n margin-right: 3px;\n}\n\n.macromolecule-cell-comp-analysis-value{\n display: flex;\n}","",{version:3,sources:["webpack://./css/composition-analysis.css"],names:[],mappings:"AAAA;IACI,iBAAiB;IACjB,kBAAkB;AACtB;;AAEA;IACI,eAAe;IACf,cAAc;IACd,iBAAiB;IACjB,oBAAoB;IACpB,iBAAiB;AACrB;;AAEA;IACI,aAAa;AACjB",sourcesContent:[".macromolecule-cell-comp-analysis-host{\n max-height: 250px;\n overflow-y: scroll;\n}\n\n.macromolecule-cell-comp-analysis-bar{\n height: inherit;\n display: block;\n margin-top: 1.5px;\n margin-bottom: 1.5px;\n margin-right: 3px;\n}\n\n.macromolecule-cell-comp-analysis-value{\n display: flex;\n}"],sourceRoot:""}]);const a=s},857:(t,e,n)=>{"use strict";n.d(e,{A:()=>a});var i=n(1354),r=n.n(i),o=n(6314),s=n.n(o)()(r());s.push([t.id,".monomer-manager-root .grok-sketcher {\n min-width: unset !important;\n}\n\n.monomer-manager-root {\n width: 100% !important;\n height: 100% !important;\n}\n\n.monomer-manager-sketcher .ketcher-host {\n height: 100% !important;\n width: unset !important;\n} \n\n.monomer-manager-root > div:first-child {\n flex-basis: 40% !important;\n}\n.monomer-manager-root > div:nth-child(2) {\n flex-basis: 60% !important;\n}\n\n.monomer-manager-root > div:first-child > .ui-form {\n max-width: unset !important;\n}\n\n.monomer-card-info-row {\n width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n margin-bottom: 10px;\n}\n\n.monomer-card-info-row > div:nth-child(2) {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.monomer-card-info-row > div:nth-child(1) {\n font-weight: bold;\n margin-right: 5px;\n text-wrap: nowrap;\n}\n\n.duplicate-monomer-symbol-row {\n visibility: visible !important;\n}\n\n.monomer-card-root {\n border: 2px solid var(--grey-2);\n border-radius: 5px;\n padding: 5px;\n margin: 5px;\n overflow: hidden;\n align-items: center;\n cursor: pointer;\n width: 200px;\n height: 300px;\n min-width: 200px;\n min-height: 300px;\n}\n\n.duplicate-monomers-virtual-view {\n width: 100% !important;\n overflow-x: clip;\n overflow-y: auto;\n}\n\n.monomer-manager-form-tab-control input.d4-invalid {\n background: #ff000030;\n}\n\n.monomer-lib-controls-form .ui-input-root {\n flex-wrap: nowrap !important;\n}","",{version:3,sources:["webpack://./css/monomer-manager.css"],names:[],mappings:"AAAA;IACI,2BAA2B;AAC/B;;AAEA;IACI,sBAAsB;IACtB,uBAAuB;AAC3B;;AAEA;IACI,uBAAuB;IACvB,uBAAuB;AAC3B;;AAEA;IACI,0BAA0B;AAC9B;AACA;IACI,0BAA0B;AAC9B;;AAEA;IACI,2BAA2B;AAC/B;;AAEA;IACI,WAAW;IACX,gBAAgB;IAChB,uBAAuB;IACvB,mBAAmB;AACvB;;AAEA;IACI,mBAAmB;IACnB,gBAAgB;IAChB,uBAAuB;AAC3B;;AAEA;IACI,iBAAiB;IACjB,iBAAiB;IACjB,iBAAiB;AACrB;;AAEA;IACI,8BAA8B;AAClC;;AAEA;IACI,+BAA+B;IAC/B,kBAAkB;IAClB,YAAY;IACZ,WAAW;IACX,gBAAgB;IAChB,mBAAmB;IACnB,eAAe;IACf,YAAY;IACZ,aAAa;IACb,gBAAgB;IAChB,iBAAiB;AACrB;;AAEA;IACI,sBAAsB;IACtB,gBAAgB;IAChB,gBAAgB;AACpB;;AAEA;IACI,qBAAqB;AACzB;;AAEA;IACI,4BAA4B;AAChC",sourcesContent:[".monomer-manager-root .grok-sketcher {\n min-width: unset !important;\n}\n\n.monomer-manager-root {\n width: 100% !important;\n height: 100% !important;\n}\n\n.monomer-manager-sketcher .ketcher-host {\n height: 100% !important;\n width: unset !important;\n} \n\n.monomer-manager-root > div:first-child {\n flex-basis: 40% !important;\n}\n.monomer-manager-root > div:nth-child(2) {\n flex-basis: 60% !important;\n}\n\n.monomer-manager-root > div:first-child > .ui-form {\n max-width: unset !important;\n}\n\n.monomer-card-info-row {\n width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n margin-bottom: 10px;\n}\n\n.monomer-card-info-row > div:nth-child(2) {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.monomer-card-info-row > div:nth-child(1) {\n font-weight: bold;\n margin-right: 5px;\n text-wrap: nowrap;\n}\n\n.duplicate-monomer-symbol-row {\n visibility: visible !important;\n}\n\n.monomer-card-root {\n border: 2px solid var(--grey-2);\n border-radius: 5px;\n padding: 5px;\n margin: 5px;\n overflow: hidden;\n align-items: center;\n cursor: pointer;\n width: 200px;\n height: 300px;\n min-width: 200px;\n min-height: 300px;\n}\n\n.duplicate-monomers-virtual-view {\n width: 100% !important;\n overflow-x: clip;\n overflow-y: auto;\n}\n\n.monomer-manager-form-tab-control input.d4-invalid {\n background: #ff000030;\n}\n\n.monomer-lib-controls-form .ui-input-root {\n flex-wrap: nowrap !important;\n}"],sourceRoot:""}]);const a=s},6369:(t,e,n)=>{"use strict";n.d(e,{A:()=>a});var i=n(1354),r=n.n(i),o=n(6314),s=n.n(o)()(r());s.push([t.id,".kalign-version {\n margin-bottom: 0;\n text-align: end;\n font-size: 12px;\n opacity: 0.8;\n}\nbutton.msa-params-button.ui-btn {\n justify-content: end;\n}","",{version:3,sources:["webpack://./css/msa.css"],names:[],mappings:"AAAA;IACI,gBAAgB;IAChB,eAAe;IACf,eAAe;IACf,YAAY;AAChB;AACA;IACI,oBAAoB;AACxB",sourcesContent:[".kalign-version {\n margin-bottom: 0;\n text-align: end;\n font-size: 12px;\n opacity: 0.8;\n}\nbutton.msa-params-button.ui-btn {\n justify-content: end;\n}"],sourceRoot:""}]);const a=s},7939:(t,e,n)=>{"use strict";n.d(e,{A:()=>a});var i=n(1354),r=n.n(i),o=n(6314),s=n.n(o)()(r());s.push([t.id,".scatter_plot_link {\n right: 10px;\n}\n\n.cliffs_div {\n flex-grow: initial!important;\n justify-content: flex-end;\n flex-wrap: wrap;\n}\n\n.cliffs_grid {\n margin: 0!important;\n}\n\n.ml-dim-reduction-settings-input i.grok-icon.grok-font-icon-settings {\n font-size: 18px;\n position: absolute;\n height: 28px;\n}\n\n.ml-dim-reduction-settings-input i.grok-icon.grok-font-icon-settings:not(.ml-dim-reduction-column-editor-input-root i) {\n left: -20px;\n}\n.dlg-dimensionality-reduction.ui-form, .dlg-markov-clustering.ui-form, .dlg-markov-clustering.ui-form .ui-form, .dlg-dimensionality-reduction.ui-form .ui-form {\n max-width: unset;\n}\n\n.ml-dim-reduction-column-editor-input-root label {\n display: none !important;\n}\n\n.dim-reduction-dialog-form > .ui-input-root, .dim-reduction-dialog-form > div > .ui-input-root {\n margin-left: 10px;\n}\n\n.ml-dim-reduction-column-editor-input-root input, .ml-dim-reduction-column-editor-input-root select {\n margin-left: 20px !important;\n}\n\nh3.ml-dim-reduction-column-editor-input-root {\n margin: 0 !important;\n}\n\n.ml-dim-reduction-column-editor-root, .ml-dim-reduction-column-editor-header-root {\n display: flex;\n flex-direction: row;\n align-items: center;\n margin-bottom: 10px !important;\n width: 700px !important;\n}\n\n.ml-dim-reduction-column-editor-column-title {\n text-overflow: ellipsis;\n overflow: hidden;\n}\n\n.ml-dim-reduction-column-editor-header-root > h1:not(:first-child) {\n margin-left: 20px !important;\n}\n\n.ml-dim-reduction-column-editor-table-root .header > td:not(:first-child) {\n padding-left: 32px;\n}","",{version:3,sources:["webpack://./node_modules/@datagrok-libraries/ml/css/styles.css"],names:[],mappings:"AAAA;IACI,WAAW;AACf;;AAEA;IACI,4BAA4B;IAC5B,yBAAyB;IACzB,eAAe;AACnB;;AAEA;GACG,mBAAmB;AACtB;;AAEA;IACI,eAAe;IACf,kBAAkB;IAClB,YAAY;AAChB;;AAEA;IACI,WAAW;AACf;AACA;IACI,gBAAgB;AACpB;;AAEA;IACI,wBAAwB;AAC5B;;AAEA;IACI,iBAAiB;AACrB;;AAEA;IACI,4BAA4B;AAChC;;AAEA;IACI,oBAAoB;AACxB;;AAEA;IACI,aAAa;IACb,mBAAmB;IACnB,mBAAmB;IACnB,8BAA8B;IAC9B,uBAAuB;AAC3B;;AAEA;IACI,uBAAuB;IACvB,gBAAgB;AACpB;;AAEA;IACI,4BAA4B;AAChC;;AAEA;IACI,kBAAkB;AACtB",sourcesContent:[".scatter_plot_link {\n right: 10px;\n}\n\n.cliffs_div {\n flex-grow: initial!important;\n justify-content: flex-end;\n flex-wrap: wrap;\n}\n\n.cliffs_grid {\n margin: 0!important;\n}\n\n.ml-dim-reduction-settings-input i.grok-icon.grok-font-icon-settings {\n font-size: 18px;\n position: absolute;\n height: 28px;\n}\n\n.ml-dim-reduction-settings-input i.grok-icon.grok-font-icon-settings:not(.ml-dim-reduction-column-editor-input-root i) {\n left: -20px;\n}\n.dlg-dimensionality-reduction.ui-form, .dlg-markov-clustering.ui-form, .dlg-markov-clustering.ui-form .ui-form, .dlg-dimensionality-reduction.ui-form .ui-form {\n max-width: unset;\n}\n\n.ml-dim-reduction-column-editor-input-root label {\n display: none !important;\n}\n\n.dim-reduction-dialog-form > .ui-input-root, .dim-reduction-dialog-form > div > .ui-input-root {\n margin-left: 10px;\n}\n\n.ml-dim-reduction-column-editor-input-root input, .ml-dim-reduction-column-editor-input-root select {\n margin-left: 20px !important;\n}\n\nh3.ml-dim-reduction-column-editor-input-root {\n margin: 0 !important;\n}\n\n.ml-dim-reduction-column-editor-root, .ml-dim-reduction-column-editor-header-root {\n display: flex;\n flex-direction: row;\n align-items: center;\n margin-bottom: 10px !important;\n width: 700px !important;\n}\n\n.ml-dim-reduction-column-editor-column-title {\n text-overflow: ellipsis;\n overflow: hidden;\n}\n\n.ml-dim-reduction-column-editor-header-root > h1:not(:first-child) {\n margin-left: 20px !important;\n}\n\n.ml-dim-reduction-column-editor-table-root .header > td:not(:first-child) {\n padding-left: 32px;\n}"],sourceRoot:""}]);const a=s},3017:(t,e,n)=>{"use strict";n.d(e,{A:()=>a});var i=n(1354),r=n.n(i),o=n(6314),s=n.n(o)()(r());s.push([t.id,".monomer-lib-controls-form {\n margin-left: auto;\n margin-right: auto;\n display: flex;\n flex-direction: column;\n align-items: center;\n min-width: 220px;\n width: 100%;\n\n}\n","",{version:3,sources:["webpack://./src/utils/monomer-lib/library-file-manager/style.css"],names:[],mappings:"AAAA;EACE,iBAAiB;EACjB,kBAAkB;EAClB,aAAa;EACb,sBAAsB;EACtB,mBAAmB;EACnB,gBAAgB;EAChB,WAAW;;AAEb",sourcesContent:[".monomer-lib-controls-form {\n margin-left: auto;\n margin-right: auto;\n display: flex;\n flex-direction: column;\n align-items: center;\n min-width: 220px;\n width: 100%;\n\n}\n"],sourceRoot:""}]);const a=s},6314:t=>{"use strict";t.exports=function(t){var e=[];return e.toString=function(){return this.map((function(e){var n="",i=void 0!==e[5];return e[4]&&(n+="@supports (".concat(e[4],") {")),e[2]&&(n+="@media ".concat(e[2]," {")),i&&(n+="@layer".concat(e[5].length>0?" ".concat(e[5]):""," {")),n+=t(e),i&&(n+="}"),e[2]&&(n+="}"),e[4]&&(n+="}"),n})).join("")},e.i=function(t,n,i,r,o){"string"==typeof t&&(t=[[null,t,void 0]]);var s={};if(i)for(var a=0;a<this.length;a++){var l=this[a][0];null!=l&&(s[l]=!0)}for(var c=0;c<t.length;c++){var h=[].concat(t[c]);i&&s[h[0]]||(void 0!==o&&(void 0===h[5]||(h[1]="@layer".concat(h[5].length>0?" ".concat(h[5]):""," {").concat(h[1],"}")),h[5]=o),n&&(h[2]?(h[1]="@media ".concat(h[2]," {").concat(h[1],"}"),h[2]=n):h[2]=n),r&&(h[4]?(h[1]="@supports (".concat(h[4],") {").concat(h[1],"}"),h[4]=r):h[4]="".concat(r)),e.push(h))}},e}},1354:t=>{"use strict";t.exports=function(t){var e=t[1],n=t[3];if(!n)return e;if("function"==typeof btoa){var i=btoa(unescape(encodeURIComponent(JSON.stringify(n)))),r="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(i),o="/*# ".concat(r," */");return[e].concat([o]).join("\n")}return[e].join("\n")}},2017:t=>{"use strict";t.exports=function t(e,n){if(e===n)return!0;if(e&&n&&"object"==typeof e&&"object"==typeof n){if(e.constructor!==n.constructor)return!1;var i,r,o;if(Array.isArray(e)){if((i=e.length)!=n.length)return!1;for(r=i;0!=r--;)if(!t(e[r],n[r]))return!1;return!0}if(e.constructor===RegExp)return e.source===n.source&&e.flags===n.flags;if(e.valueOf!==Object.prototype.valueOf)return e.valueOf()===n.valueOf();if(e.toString!==Object.prototype.toString)return e.toString()===n.toString();if((i=(o=Object.keys(e)).length)!==Object.keys(n).length)return!1;for(r=i;0!=r--;)if(!Object.prototype.hasOwnProperty.call(n,o[r]))return!1;for(r=i;0!=r--;){var s=o[r];if(!t(e[s],n[s]))return!1}return!0}return e!=e&&n!=n}},9982:function(t,e,n){var i;!function(){var e={};!function(t){"use strict";t.__esModule=!0,t.digestLength=32,t.blockSize=64;var e=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]);function n(t,n,i,r,o){for(var s,a,l,c,h,u,d,p,m,f,g,y,b;o>=64;){for(s=n[0],a=n[1],l=n[2],c=n[3],h=n[4],u=n[5],d=n[6],p=n[7],f=0;f<16;f++)g=r+4*f,t[f]=(255&i[g])<<24|(255&i[g+1])<<16|(255&i[g+2])<<8|255&i[g+3];for(f=16;f<64;f++)y=((m=t[f-2])>>>17|m<<15)^(m>>>19|m<<13)^m>>>10,b=((m=t[f-15])>>>7|m<<25)^(m>>>18|m<<14)^m>>>3,t[f]=(y+t[f-7]|0)+(b+t[f-16]|0);for(f=0;f<64;f++)y=(((h>>>6|h<<26)^(h>>>11|h<<21)^(h>>>25|h<<7))+(h&u^~h&d)|0)+(p+(e[f]+t[f]|0)|0)|0,b=((s>>>2|s<<30)^(s>>>13|s<<19)^(s>>>22|s<<10))+(s&a^s&l^a&l)|0,p=d,d=u,u=h,h=c+y|0,c=l,l=a,a=s,s=y+b|0;n[0]+=s,n[1]+=a,n[2]+=l,n[3]+=c,n[4]+=h,n[5]+=u,n[6]+=d,n[7]+=p,r+=64,o-=64}return r}var i=function(){function e(){this.digestLength=t.digestLength,this.blockSize=t.blockSize,this.state=new Int32Array(8),this.temp=new Int32Array(64),this.buffer=new Uint8Array(128),this.bufferLength=0,this.bytesHashed=0,this.finished=!1,this.reset()}return e.prototype.reset=function(){return this.state[0]=1779033703,this.state[1]=3144134277,this.state[2]=1013904242,this.state[3]=2773480762,this.state[4]=1359893119,this.state[5]=2600822924,this.state[6]=528734635,this.state[7]=1541459225,this.bufferLength=0,this.bytesHashed=0,this.finished=!1,this},e.prototype.clean=function(){for(var t=0;t<this.buffer.length;t++)this.buffer[t]=0;for(t=0;t<this.temp.length;t++)this.temp[t]=0;this.reset()},e.prototype.update=function(t,e){if(void 0===e&&(e=t.length),this.finished)throw new Error("SHA256: can't update because hash was finished.");var i=0;if(this.bytesHashed+=e,this.bufferLength>0){for(;this.bufferLength<64&&e>0;)this.buffer[this.bufferLength++]=t[i++],e--;64===this.bufferLength&&(n(this.temp,this.state,this.buffer,0,64),this.bufferLength=0)}for(e>=64&&(i=n(this.temp,this.state,t,i,e),e%=64);e>0;)this.buffer[this.bufferLength++]=t[i++],e--;return this},e.prototype.finish=function(t){if(!this.finished){var e=this.bytesHashed,i=this.bufferLength,r=e/536870912|0,o=e<<3,s=e%64<56?64:128;this.buffer[i]=128;for(var a=i+1;a<s-8;a++)this.buffer[a]=0;this.buffer[s-8]=r>>>24&255,this.buffer[s-7]=r>>>16&255,this.buffer[s-6]=r>>>8&255,this.buffer[s-5]=r>>>0&255,this.buffer[s-4]=o>>>24&255,this.buffer[s-3]=o>>>16&255,this.buffer[s-2]=o>>>8&255,this.buffer[s-1]=o>>>0&255,n(this.temp,this.state,this.buffer,0,s),this.finished=!0}for(a=0;a<8;a++)t[4*a+0]=this.state[a]>>>24&255,t[4*a+1]=this.state[a]>>>16&255,t[4*a+2]=this.state[a]>>>8&255,t[4*a+3]=this.state[a]>>>0&255;return this},e.prototype.digest=function(){var t=new Uint8Array(this.digestLength);return this.finish(t),t},e.prototype._saveState=function(t){for(var e=0;e<this.state.length;e++)t[e]=this.state[e]},e.prototype._restoreState=function(t,e){for(var n=0;n<this.state.length;n++)this.state[n]=t[n];this.bytesHashed=e,this.finished=!1,this.bufferLength=0},e}();t.Hash=i;var r=function(){function t(t){this.inner=new i,this.outer=new i,this.blockSize=this.inner.blockSize,this.digestLength=this.inner.digestLength;var e=new Uint8Array(this.blockSize);if(t.length>this.blockSize)(new i).update(t).finish(e).clean();else for(var n=0;n<t.length;n++)e[n]=t[n];for(n=0;n<e.length;n++)e[n]^=54;for(this.inner.update(e),n=0;n<e.length;n++)e[n]^=106;for(this.outer.update(e),this.istate=new Uint32Array(8),this.ostate=new Uint32Array(8),this.inner._saveState(this.istate),this.outer._saveState(this.ostate),n=0;n<e.length;n++)e[n]=0}return t.prototype.reset=function(){return this.inner._restoreState(this.istate,this.inner.blockSize),this.outer._restoreState(this.ostate,this.outer.blockSize),this},t.prototype.clean=function(){for(var t=0;t<this.istate.length;t++)this.ostate[t]=this.istate[t]=0;this.inner.clean(),this.outer.clean()},t.prototype.update=function(t){return this.inner.update(t),this},t.prototype.finish=function(t){return this.outer.finished?this.outer.finish(t):(this.inner.finish(t),this.outer.update(t,this.digestLength).finish(t)),this},t.prototype.digest=function(){var t=new Uint8Array(this.digestLength);return this.finish(t),t},t}();function o(t){var e=(new i).update(t),n=e.digest();return e.clean(),n}function s(t,e){var n=new r(t).update(e),i=n.digest();return n.clean(),i}function a(t,e,n,i){var r=i[0];if(0===r)throw new Error("hkdf: cannot expand more");e.reset(),r>1&&e.update(t),n&&e.update(n),e.update(i),e.finish(t),i[0]++}t.HMAC=r,t.hash=o,t.default=o,t.hmac=s;var l=new Uint8Array(t.digestLength);t.hkdf=function(t,e,n,i){void 0===e&&(e=l),void 0===i&&(i=32);for(var o=new Uint8Array([1]),c=s(e,t),h=new r(c),u=new Uint8Array(h.digestLength),d=u.length,p=new Uint8Array(i),m=0;m<i;m++)d===u.length&&(a(u,h,n,o),d=0),p[m]=u[d++];return h.clean(),u.fill(0),o.fill(0),p},t.pbkdf2=function(t,e,n,i){for(var o=new r(t),s=o.digestLength,a=new Uint8Array(4),l=new Uint8Array(s),c=new Uint8Array(s),h=new Uint8Array(i),u=0;u*s<i;u++){var d=u+1;a[0]=d>>>24&255,a[1]=d>>>16&255,a[2]=d>>>8&255,a[3]=d>>>0&255,o.reset(),o.update(e),o.update(a),o.finish(c);for(var p=0;p<s;p++)l[p]=c[p];for(p=2;p<=n;p++){o.reset(),o.update(c).finish(c);for(var m=0;m<s;m++)l[m]^=c[m]}for(p=0;p<s&&u*s+p<i;p++)h[u*s+p]=l[p]}for(u=0;u<s;u++)l[u]=c[u]=0;for(u=0;u<4;u++)a[u]=0;return o.clean(),h}}(e);var r=e.default;for(var o in e)r[o]=e[o];"object"==typeof t.exports?t.exports=r:void 0===(i=function(){return r}.call(e,n,e,t))||(t.exports=i)}()},2787:(t,e,n)=>{"use strict";n.d(e,{I:()=>r});const i=new Uint32Array(65536),r=(t,e)=>{if(t.length<e.length){const n=e;e=t,t=n}return 0===e.length?t.length:t.length<=32?((t,e)=>{const n=t.length,r=e.length,o=1<<n-1;let s=-1,a=0,l=n,c=n;for(;c--;)i[t.charCodeAt(c)]|=1<<c;for(c=0;c<r;c++){let t=i[e.charCodeAt(c)];const n=t|a;t|=(t&s)+s^s,a|=~(t|s),s&=t,a&o&&l++,s&o&&l--,a=a<<1|1,s=s<<1|~(n|a),a&=n}for(c=n;c--;)i[t.charCodeAt(c)]=0;return l})(t,e):((t,e)=>{const n=e.length,r=t.length,o=[],s=[],a=Math.ceil(n/32),l=Math.ceil(r/32);for(let t=0;t<a;t++)s[t]=-1,o[t]=0;let c=0;for(;c<l-1;c++){let a=0,l=-1;const h=32*c,u=Math.min(32,r)+h;for(let e=h;e<u;e++)i[t.charCodeAt(e)]|=1<<e;for(let t=0;t<n;t++){const n=i[e.charCodeAt(t)],r=s[t/32|0]>>>t&1,c=o[t/32|0]>>>t&1,h=n|a,u=((n|c)&l)+l^l|n|c;let d=a|~(u|l),p=l&u;d>>>31^r&&(s[t/32|0]^=1<<t),p>>>31^c&&(o[t/32|0]^=1<<t),d=d<<1|r,p=p<<1|c,l=p|~(h|d),a=d&h}for(let e=h;e<u;e++)i[t.charCodeAt(e)]=0}let h=0,u=-1;const d=32*c,p=Math.min(32,r-d)+d;for(let e=d;e<p;e++)i[t.charCodeAt(e)]|=1<<e;let m=r;for(let t=0;t<n;t++){const n=i[e.charCodeAt(t)],a=s[t/32|0]>>>t&1,l=o[t/32|0]>>>t&1,c=n|h,d=((n|l)&u)+u^u|n|l;let p=h|~(d|u),f=u&d;m+=p>>>r-1&1,m-=f>>>r-1&1,p>>>31^a&&(s[t/32|0]^=1<<t),f>>>31^l&&(o[t/32|0]^=1<<t),p=p<<1|a,f=f<<1|l,u=f|~(c|p),h=p&c}for(let e=d;e<p;e++)i[t.charCodeAt(e)]=0;return m})(t,e)}},9937:t=>{t.exports={linLogMode:!1,outboundAttractionDistribution:!1,adjustSizes:!1,edgeWeightInfluence:1,scalingRatio:1,strongGravityMode:!1,gravity:1,slowDown:1,barnesHutOptimize:!1,barnesHutTheta:.5}},1782:(t,e)=>{e.assign=function(t){t=t||{};var e,n,i,r=Array.prototype.slice.call(arguments).slice(1);for(e=0,i=r.length;e<i;e++)if(r[e])for(n in r[e])t[n]=r[e][n];return t},e.validateSettings=function(t){return"linLogMode"in t&&"boolean"!=typeof t.linLogMode?{message:"the `linLogMode` setting should be a boolean."}:"outboundAttractionDistribution"in t&&"boolean"!=typeof t.outboundAttractionDistribution?{message:"the `outboundAttractionDistribution` setting should be a boolean."}:"adjustSizes"in t&&"boolean"!=typeof t.adjustSizes?{message:"the `adjustSizes` setting should be a boolean."}:"edgeWeightInfluence"in t&&"number"!=typeof t.edgeWeightInfluence?{message:"the `edgeWeightInfluence` setting should be a number."}:!("scalingRatio"in t)||"number"==typeof t.scalingRatio&&t.scalingRatio>=0?"strongGravityMode"in t&&"boolean"!=typeof t.strongGravityMode?{message:"the `strongGravityMode` setting should be a boolean."}:!("gravity"in t)||"number"==typeof t.gravity&&t.gravity>=0?"slowDown"in t&&!("number"==typeof t.slowDown||t.slowDown>=0)?{message:"the `slowDown` setting should be a number >= 0."}:"barnesHutOptimize"in t&&"boolean"!=typeof t.barnesHutOptimize?{message:"the `barnesHutOptimize` setting should be a boolean."}:!("barnesHutTheta"in t)||"number"==typeof t.barnesHutTheta&&t.barnesHutTheta>=0?null:{message:"the `barnesHutTheta` setting should be a number >= 0."}:{message:"the `gravity` setting should be a number >= 0."}:{message:"the `scalingRatio` setting should be a number >= 0."}},e.graphToByteArrays=function(t,e){var n,i=t.order,r=t.size,o={},s=new Float32Array(10*i),a=new Float32Array(3*r);return n=0,t.forEachNode((function(t,e){o[t]=n,s[n]=e.x,s[n+1]=e.y,s[n+2]=0,s[n+3]=0,s[n+4]=0,s[n+5]=0,s[n+6]=1,s[n+7]=1,s[n+8]=e.size||1,s[n+9]=e.fixed?1:0,n+=10})),n=0,t.forEachEdge((function(t,i,r,l,c,h,u){var d=o[r],p=o[l],m=e(t,i,r,l,c,h,u);s[d+6]+=m,s[p+6]+=m,a[n]=d,a[n+1]=p,a[n+2]=m,n+=3})),{nodes:s,edges:a}},e.assignLayoutChanges=function(t,e,n){var i=0;t.updateEachNodeAttributes((function(t,r){return r.x=e[i],r.y=e[i+1],i+=10,n?n(t,r):r}))},e.readGraphPositions=function(t,e){var n=0;t.forEachNode((function(t,i){e[n]=i.x,e[n+1]=i.y,n+=10}))},e.collectLayoutChanges=function(t,e,n){for(var i=t.nodes(),r={},o=0,s=0,a=e.length;o<a;o+=10){if(n){var l=Object.assign({},t.getNodeAttributes(i[s]));l.x=e[o],l.y=e[o+1],l=n(i[s],l),r[i[s]]={x:l.x,y:l.y}}else r[i[s]]={x:e[o],y:e[o+1]};s++}return r},e.createWorker=function(t){var e=window.URL||window.webkitURL,n=t.toString(),i=e.createObjectURL(new Blob(["("+n+").call(this);"],{type:"text/javascript"})),r=new Worker(i);return e.revokeObjectURL(i),r}},8903:(t,e,n)=>{var i=n(1736),r=n(8153).Fd,o=n(2561),s=n(1782),a=n(9937);function l(t,e,n){if(!i(e))throw new Error("graphology-layout-forceatlas2: the given graph is not a valid graphology instance.");"number"==typeof n&&(n={iterations:n});var l=n.iterations;if("number"!=typeof l)throw new Error("graphology-layout-forceatlas2: invalid number of iterations.");if(l<=0)throw new Error("graphology-layout-forceatlas2: you should provide a positive number of iterations.");var c=r("getEdgeWeight"in n?n.getEdgeWeight:"weight").fromEntry,h="function"==typeof n.outputReducer?n.outputReducer:null,u=s.assign({},a,n.settings),d=s.validateSettings(u);if(d)throw new Error("graphology-layout-forceatlas2: "+d.message);var p,m=s.graphToByteArrays(e,c);for(p=0;p<l;p++)o(u,m.nodes,m.edges);if(!t)return s.collectLayoutChanges(e,m.nodes);s.assignLayoutChanges(e,m.nodes,h)}var c=l.bind(null,!1);c.assign=l.bind(null,!0),c.inferSettings=function(t){var e="number"==typeof t?t:t.order;return{barnesHutOptimize:e>2e3,strongGravityMode:!0,gravity:.05,scalingRatio:10,slowDown:1+Math.log(e)}},t.exports=c},2561:t=>{var e=10;t.exports=function(t,n,i){var r,o,s,a,l,c,h,u,d,p,m,f,g,y,b,v,w,C,A,S,x,E,M,_=n.length,I=i.length,T=t.adjustSizes,L=t.barnesHutTheta*t.barnesHutTheta,N=[];for(s=0;s<_;s+=e)n[s+4]=n[s+2],n[s+5]=n[s+3],n[s+2]=0,n[s+3]=0;if(t.outboundAttractionDistribution){for(m=0,s=0;s<_;s+=e)m+=n[s+6];m/=_/e}if(t.barnesHutOptimize){var P,$,R,O=1/0,k=-1/0,G=1/0,F=-1/0;for(s=0;s<_;s+=e)O=Math.min(O,n[s+0]),k=Math.max(k,n[s+0]),G=Math.min(G,n[s+1]),F=Math.max(F,n[s+1]);var H=k-O,B=F-G;for(H>B?F=(G-=(H-B)/2)+H:k=(O-=(B-H)/2)+B,N[0]=-1,N[1]=(O+k)/2,N[2]=(G+F)/2,N[3]=Math.max(k-O,F-G),N[4]=-1,N[5]=-1,N[6]=0,N[7]=0,N[8]=0,r=1,s=0;s<_;s+=e)for(o=0,R=3;;){if(!(N[o+5]>=0)){if(N[o+0]<0){N[o+0]=s;break}if(N[o+5]=9*r,u=N[o+3]/2,N[(d=N[o+5])+0]=-1,N[d+1]=N[o+1]-u,N[d+2]=N[o+2]-u,N[d+3]=u,N[d+4]=d+9,N[d+5]=-1,N[d+6]=0,N[d+7]=0,N[d+8]=0,N[(d+=9)+0]=-1,N[d+1]=N[o+1]-u,N[d+2]=N[o+2]+u,N[d+3]=u,N[d+4]=d+9,N[d+5]=-1,N[d+6]=0,N[d+7]=0,N[d+8]=0,N[(d+=9)+0]=-1,N[d+1]=N[o+1]+u,N[d+2]=N[o+2]-u,N[d+3]=u,N[d+4]=d+9,N[d+5]=-1,N[d+6]=0,N[d+7]=0,N[d+8]=0,N[(d+=9)+0]=-1,N[d+1]=N[o+1]+u,N[d+2]=N[o+2]+u,N[d+3]=u,N[d+4]=N[o+4],N[d+5]=-1,N[d+6]=0,N[d+7]=0,N[d+8]=0,r+=4,P=n[N[o+0]+0]<N[o+1]?n[N[o+0]+1]<N[o+2]?N[o+5]:N[o+5]+9:n[N[o+0]+1]<N[o+2]?N[o+5]+18:N[o+5]+27,N[o+6]=n[N[o+0]+6],N[o+7]=n[N[o+0]+0],N[o+8]=n[N[o+0]+1],N[P+0]=N[o+0],N[o+0]=-1,P===($=n[s+0]<N[o+1]?n[s+1]<N[o+2]?N[o+5]:N[o+5]+9:n[s+1]<N[o+2]?N[o+5]+18:N[o+5]+27)){if(R--){o=P;continue}R=3;break}N[$+0]=s;break}P=n[s+0]<N[o+1]?n[s+1]<N[o+2]?N[o+5]:N[o+5]+9:n[s+1]<N[o+2]?N[o+5]+18:N[o+5]+27,N[o+7]=(N[o+7]*N[o+6]+n[s+0]*n[s+6])/(N[o+6]+n[s+6]),N[o+8]=(N[o+8]*N[o+6]+n[s+1]*n[s+6])/(N[o+6]+n[s+6]),N[o+6]+=n[s+6],o=P}}if(t.barnesHutOptimize){for(f=t.scalingRatio,s=0;s<_;s+=e)for(o=0;;)if(N[o+5]>=0){if(v=Math.pow(n[s+0]-N[o+7],2)+Math.pow(n[s+1]-N[o+8],2),4*(p=N[o+3])*p/v<L){if(g=n[s+0]-N[o+7],y=n[s+1]-N[o+8],!0===T?v>0?(w=f*n[s+6]*N[o+6]/v,n[s+2]+=g*w,n[s+3]+=y*w):v<0&&(w=-f*n[s+6]*N[o+6]/Math.sqrt(v),n[s+2]+=g*w,n[s+3]+=y*w):v>0&&(w=f*n[s+6]*N[o+6]/v,n[s+2]+=g*w,n[s+3]+=y*w),(o=N[o+4])<0)break;continue}o=N[o+5]}else if((c=N[o+0])>=0&&c!==s&&(v=(g=n[s+0]-n[c+0])*g+(y=n[s+1]-n[c+1])*y,!0===T?v>0?(w=f*n[s+6]*n[c+6]/v,n[s+2]+=g*w,n[s+3]+=y*w):v<0&&(w=-f*n[s+6]*n[c+6]/Math.sqrt(v),n[s+2]+=g*w,n[s+3]+=y*w):v>0&&(w=f*n[s+6]*n[c+6]/v,n[s+2]+=g*w,n[s+3]+=y*w)),(o=N[o+4])<0)break}else for(f=t.scalingRatio,a=0;a<_;a+=e)for(l=0;l<a;l+=e)g=n[a+0]-n[l+0],y=n[a+1]-n[l+1],!0===T?(v=Math.sqrt(g*g+y*y)-n[a+8]-n[l+8])>0?(w=f*n[a+6]*n[l+6]/v/v,n[a+2]+=g*w,n[a+3]+=y*w,n[l+2]-=g*w,n[l+3]-=y*w):v<0&&(w=100*f*n[a+6]*n[l+6],n[a+2]+=g*w,n[a+3]+=y*w,n[l+2]-=g*w,n[l+3]-=y*w):(v=Math.sqrt(g*g+y*y))>0&&(w=f*n[a+6]*n[l+6]/v/v,n[a+2]+=g*w,n[a+3]+=y*w,n[l+2]-=g*w,n[l+3]-=y*w);for(d=t.gravity/t.scalingRatio,f=t.scalingRatio,s=0;s<_;s+=e)w=0,g=n[s+0],y=n[s+1],v=Math.sqrt(Math.pow(g,2)+Math.pow(y,2)),t.strongGravityMode?v>0&&(w=f*n[s+6]*d):v>0&&(w=f*n[s+6]*d/v),n[s+2]-=g*w,n[s+3]-=y*w;for(f=1*(t.outboundAttractionDistribution?m:1),h=0;h<I;h+=3)a=i[h+0],l=i[h+1],u=i[h+2],b=Math.pow(u,t.edgeWeightInfluence),g=n[a+0]-n[l+0],y=n[a+1]-n[l+1],!0===T?(v=Math.sqrt(g*g+y*y)-n[a+8]-n[l+8],t.linLogMode?t.outboundAttractionDistribution?v>0&&(w=-f*b*Math.log(1+v)/v/n[a+6]):v>0&&(w=-f*b*Math.log(1+v)/v):t.outboundAttractionDistribution?v>0&&(w=-f*b/n[a+6]):v>0&&(w=-f*b)):(v=Math.sqrt(Math.pow(g,2)+Math.pow(y,2)),t.linLogMode?t.outboundAttractionDistribution?v>0&&(w=-f*b*Math.log(1+v)/v/n[a+6]):v>0&&(w=-f*b*Math.log(1+v)/v):t.outboundAttractionDistribution?(v=1,w=-f*b/n[a+6]):(v=1,w=-f*b)),v>0&&(n[a+2]+=g*w,n[a+3]+=y*w,n[l+2]-=g*w,n[l+3]-=y*w);if(!0===T)for(s=0;s<_;s+=e)1!==n[s+9]&&((C=Math.sqrt(Math.pow(n[s+2],2)+Math.pow(n[s+3],2)))>10&&(n[s+2]=10*n[s+2]/C,n[s+3]=10*n[s+3]/C),A=n[s+6]*Math.sqrt((n[s+4]-n[s+2])*(n[s+4]-n[s+2])+(n[s+5]-n[s+3])*(n[s+5]-n[s+3])),S=Math.sqrt((n[s+4]+n[s+2])*(n[s+4]+n[s+2])+(n[s+5]+n[s+3])*(n[s+5]+n[s+3]))/2,x=.1*Math.log(1+S)/(1+Math.sqrt(A)),E=n[s+0]+n[s+2]*(x/t.slowDown),n[s+0]=E,M=n[s+1]+n[s+3]*(x/t.slowDown),n[s+1]=M);else for(s=0;s<_;s+=e)1!==n[s+9]&&(A=n[s+6]*Math.sqrt((n[s+4]-n[s+2])*(n[s+4]-n[s+2])+(n[s+5]-n[s+3])*(n[s+5]-n[s+3])),S=Math.sqrt((n[s+4]+n[s+2])*(n[s+4]+n[s+2])+(n[s+5]+n[s+3])*(n[s+5]+n[s+3]))/2,x=n[s+7]*Math.log(1+S)/(1+Math.sqrt(A)),n[s+7]=Math.min(1,Math.sqrt(x*(Math.pow(n[s+2],2)+Math.pow(n[s+3],2))/(1+Math.sqrt(A)))),E=n[s+0]+n[s+2]*(x/t.slowDown),n[s+0]=E,M=n[s+1]+n[s+3]*(x/t.slowDown),n[s+1]=M);return{}}},8153:(t,e)=>{function n(t){return"number"!=typeof t||isNaN(t)?1:t}e.Fd=function(t){return function(t,e){var n={},i=function(t){return void 0===t?e:t};"function"==typeof e&&(i=e);var r=function(e){return i(e[t])},o=function(){return i(void 0)};return"string"==typeof t?(n.fromAttributes=r,n.fromGraph=function(t,e){return r(t.getEdgeAttributes(e))},n.fromEntry=function(t,e){return r(e)},n.fromPartialEntry=n.fromEntry,n.fromMinimalEntry=n.fromEntry):"function"==typeof t?(n.fromAttributes=function(){throw new Error("graphology-utils/getters/createEdgeValueGetter: irrelevant usage.")},n.fromGraph=function(e,n){var r=e.extremities(n);return i(t(n,e.getEdgeAttributes(n),r[0],r[1],e.getNodeAttributes(r[0]),e.getNodeAttributes(r[1]),e.isUndirected(n)))},n.fromEntry=function(e,n,r,o,s,a,l){return i(t(e,n,r,o,s,a,l))},n.fromPartialEntry=function(e,n,r,o){return i(t(e,n,r,o))},n.fromMinimalEntry=function(e,n){return i(t(e,n))}):(n.fromAttributes=o,n.fromGraph=o,n.fromEntry=o,n.fromMinimalEntry=o),n}(t,n)}},1736:t=>{t.exports=function(t){return null!==t&&"object"==typeof t&&"function"==typeof t.addUndirectedEdgeWithKey&&"function"==typeof t.dropNode&&"boolean"==typeof t.multi}},934:function(t){t.exports=function(){"use strict";function t(e){return(t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(e)}function e(t,e){t.prototype=Object.create(e.prototype),t.prototype.constructor=t,i(t,e)}function n(t){return n=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},n(t)}function i(t,e){return i=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},i(t,e)}function r(t,e,n){return r=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}()?Reflect.construct.bind():function(t,e,n){var r=[null];r.push.apply(r,e);var o=new(Function.bind.apply(t,r));return n&&i(o,n.prototype),o},r.apply(null,arguments)}function o(t){var e="function"==typeof Map?new Map:void 0;return o=function(t){if(null===t||(o=t,-1===Function.toString.call(o).indexOf("[native code]")))return t;var o;if("function"!=typeof t)throw new TypeError("Super expression must either be null or a function");if(void 0!==e){if(e.has(t))return e.get(t);e.set(t,s)}function s(){return r(t,arguments,n(this).constructor)}return s.prototype=Object.create(t.prototype,{constructor:{value:s,enumerable:!1,writable:!0,configurable:!0}}),i(s,t)},o(t)}function s(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}var a=function(){for(var t=arguments[0],e=1,n=arguments.length;e<n;e++)if(arguments[e])for(var i in arguments[e])t[i]=arguments[e][i];return t};function l(t,e,n,i){var r=t._nodes.get(e),o=null;return r?o="mixed"===i?r.out&&r.out[n]||r.undirected&&r.undirected[n]:"directed"===i?r.out&&r.out[n]:r.undirected&&r.undirected[n]:o}function c(e){return"object"===t(e)&&null!==e}function h(t){var e;for(e in t)return!1;return!0}function u(t,e,n){Object.defineProperty(t,e,{enumerable:!1,configurable:!1,writable:!0,value:n})}function d(t,e,n){var i={enumerable:!0,configurable:!0};"function"==typeof n?i.get=n:(i.value=n,i.writable=!1),Object.defineProperty(t,e,i)}function p(t){return!(!c(t)||t.attributes&&!Array.isArray(t.attributes))}"function"==typeof Object.assign&&(a=Object.assign);var m,f={exports:{}},g="object"==typeof Reflect?Reflect:null,y=g&&"function"==typeof g.apply?g.apply:function(t,e,n){return Function.prototype.apply.call(t,e,n)};m=g&&"function"==typeof g.ownKeys?g.ownKeys:Object.getOwnPropertySymbols?function(t){return Object.getOwnPropertyNames(t).concat(Object.getOwnPropertySymbols(t))}:function(t){return Object.getOwnPropertyNames(t)};var b=Number.isNaN||function(t){return t!=t};function v(){v.init.call(this)}f.exports=v,f.exports.once=function(t,e){return new Promise((function(n,i){function r(n){t.removeListener(e,o),i(n)}function o(){"function"==typeof t.removeListener&&t.removeListener("error",r),n([].slice.call(arguments))}T(t,e,o,{once:!0}),"error"!==e&&function(t,e){"function"==typeof t.on&&T(t,"error",e,{once:!0})}(t,r)}))},v.EventEmitter=v,v.prototype._events=void 0,v.prototype._eventsCount=0,v.prototype._maxListeners=void 0;var w=10;function C(t){if("function"!=typeof t)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof t)}function A(t){return void 0===t._maxListeners?v.defaultMaxListeners:t._maxListeners}function S(t,e,n,i){var r,o,s,a;if(C(n),void 0===(o=t._events)?(o=t._events=Object.create(null),t._eventsCount=0):(void 0!==o.newListener&&(t.emit("newListener",e,n.listener?n.listener:n),o=t._events),s=o[e]),void 0===s)s=o[e]=n,++t._eventsCount;else if("function"==typeof s?s=o[e]=i?[n,s]:[s,n]:i?s.unshift(n):s.push(n),(r=A(t))>0&&s.length>r&&!s.warned){s.warned=!0;var l=new Error("Possible EventEmitter memory leak detected. "+s.length+" "+String(e)+" listeners added. Use emitter.setMaxListeners() to increase limit");l.name="MaxListenersExceededWarning",l.emitter=t,l.type=e,l.count=s.length,a=l,console&&console.warn&&console.warn(a)}return t}function x(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function E(t,e,n){var i={fired:!1,wrapFn:void 0,target:t,type:e,listener:n},r=x.bind(i);return r.listener=n,i.wrapFn=r,r}function M(t,e,n){var i=t._events;if(void 0===i)return[];var r=i[e];return void 0===r?[]:"function"==typeof r?n?[r.listener||r]:[r]:n?function(t){for(var e=new Array(t.length),n=0;n<e.length;++n)e[n]=t[n].listener||t[n];return e}(r):I(r,r.length)}function _(t){var e=this._events;if(void 0!==e){var n=e[t];if("function"==typeof n)return 1;if(void 0!==n)return n.length}return 0}function I(t,e){for(var n=new Array(e),i=0;i<e;++i)n[i]=t[i];return n}function T(t,e,n,i){if("function"==typeof t.on)i.once?t.once(e,n):t.on(e,n);else{if("function"!=typeof t.addEventListener)throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof t);t.addEventListener(e,(function r(o){i.once&&t.removeEventListener(e,r),n(o)}))}}function L(t){if("function"!=typeof t)throw new Error("obliterator/iterator: expecting a function!");this.next=t}Object.defineProperty(v,"defaultMaxListeners",{enumerable:!0,get:function(){return w},set:function(t){if("number"!=typeof t||t<0||b(t))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+t+".");w=t}}),v.init=function(){void 0!==this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},v.prototype.setMaxListeners=function(t){if("number"!=typeof t||t<0||b(t))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+t+".");return this._maxListeners=t,this},v.prototype.getMaxListeners=function(){return A(this)},v.prototype.emit=function(t){for(var e=[],n=1;n<arguments.length;n++)e.push(arguments[n]);var i="error"===t,r=this._events;if(void 0!==r)i=i&&void 0===r.error;else if(!i)return!1;if(i){var o;if(e.length>0&&(o=e[0]),o instanceof Error)throw o;var s=new Error("Unhandled error."+(o?" ("+o.message+")":""));throw s.context=o,s}var a=r[t];if(void 0===a)return!1;if("function"==typeof a)y(a,this,e);else{var l=a.length,c=I(a,l);for(n=0;n<l;++n)y(c[n],this,e)}return!0},v.prototype.addListener=function(t,e){return S(this,t,e,!1)},v.prototype.on=v.prototype.addListener,v.prototype.prependListener=function(t,e){return S(this,t,e,!0)},v.prototype.once=function(t,e){return C(e),this.on(t,E(this,t,e)),this},v.prototype.prependOnceListener=function(t,e){return C(e),this.prependListener(t,E(this,t,e)),this},v.prototype.removeListener=function(t,e){var n,i,r,o,s;if(C(e),void 0===(i=this._events))return this;if(void 0===(n=i[t]))return this;if(n===e||n.listener===e)0==--this._eventsCount?this._events=Object.create(null):(delete i[t],i.removeListener&&this.emit("removeListener",t,n.listener||e));else if("function"!=typeof n){for(r=-1,o=n.length-1;o>=0;o--)if(n[o]===e||n[o].listener===e){s=n[o].listener,r=o;break}if(r<0)return this;0===r?n.shift():function(t,e){for(;e+1<t.length;e++)t[e]=t[e+1];t.pop()}(n,r),1===n.length&&(i[t]=n[0]),void 0!==i.removeListener&&this.emit("removeListener",t,s||e)}return this},v.prototype.off=v.prototype.removeListener,v.prototype.removeAllListeners=function(t){var e,n,i;if(void 0===(n=this._events))return this;if(void 0===n.removeListener)return 0===arguments.length?(this._events=Object.create(null),this._eventsCount=0):void 0!==n[t]&&(0==--this._eventsCount?this._events=Object.create(null):delete n[t]),this;if(0===arguments.length){var r,o=Object.keys(n);for(i=0;i<o.length;++i)"removeListener"!==(r=o[i])&&this.removeAllListeners(r);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if("function"==typeof(e=n[t]))this.removeListener(t,e);else if(void 0!==e)for(i=e.length-1;i>=0;i--)this.removeListener(t,e[i]);return this},v.prototype.listeners=function(t){return M(this,t,!0)},v.prototype.rawListeners=function(t){return M(this,t,!1)},v.listenerCount=function(t,e){return"function"==typeof t.listenerCount?t.listenerCount(e):_.call(t,e)},v.prototype.listenerCount=_,v.prototype.eventNames=function(){return this._eventsCount>0?m(this._events):[]},"undefined"!=typeof Symbol&&(L.prototype[Symbol.iterator]=function(){return this}),L.of=function(){var t=arguments,e=t.length,n=0;return new L((function(){return n>=e?{done:!0}:{done:!1,value:t[n++]}}))},L.empty=function(){return new L((function(){return{done:!0}}))},L.fromSequence=function(t){var e=0,n=t.length;return new L((function(){return e>=n?{done:!0}:{done:!1,value:t[e++]}}))},L.is=function(t){return t instanceof L||"object"==typeof t&&null!==t&&"function"==typeof t.next};var N=L,P={};P.ARRAY_BUFFER_SUPPORT="undefined"!=typeof ArrayBuffer,P.SYMBOL_SUPPORT="undefined"!=typeof Symbol;var $=N,R=P,O=R.ARRAY_BUFFER_SUPPORT,k=R.SYMBOL_SUPPORT,G=function(t){var e=function(t){return"string"==typeof t||Array.isArray(t)||O&&ArrayBuffer.isView(t)?$.fromSequence(t):"object"!=typeof t||null===t?null:k&&"function"==typeof t[Symbol.iterator]?t[Symbol.iterator]():"function"==typeof t.next?t:null}(t);if(!e)throw new Error("obliterator: target is not iterable nor a valid iterator.");return e},F=G,H=function(t,e){for(var n,i=arguments.length>1?e:1/0,r=i!==1/0?new Array(i):[],o=0,s=F(t);;){if(o===i)return r;if((n=s.next()).done)return o!==e&&(r.length=o),r;r[o++]=n.value}},B=function(t){function n(e){var n;return(n=t.call(this)||this).name="GraphError",n.message=e,n}return e(n,t),n}(o(Error)),D=function(t){function n(e){var i;return(i=t.call(this,e)||this).name="InvalidArgumentsGraphError","function"==typeof Error.captureStackTrace&&Error.captureStackTrace(s(i),n.prototype.constructor),i}return e(n,t),n}(B),V=function(t){function n(e){var i;return(i=t.call(this,e)||this).name="NotFoundGraphError","function"==typeof Error.captureStackTrace&&Error.captureStackTrace(s(i),n.prototype.constructor),i}return e(n,t),n}(B),j=function(t){function n(e){var i;return(i=t.call(this,e)||this).name="UsageGraphError","function"==typeof Error.captureStackTrace&&Error.captureStackTrace(s(i),n.prototype.constructor),i}return e(n,t),n}(B);function U(t,e){this.key=t,this.attributes=e,this.clear()}function W(t,e){this.key=t,this.attributes=e,this.clear()}function q(t,e){this.key=t,this.attributes=e,this.clear()}function z(t,e,n,i,r){this.key=e,this.attributes=r,this.undirected=t,this.source=n,this.target=i}function Y(t,e,n,i,r,o,s){var a,l,c,h;if(i=""+i,0===n){if(!(a=t._nodes.get(i)))throw new V("Graph.".concat(e,': could not find the "').concat(i,'" node in the graph.'));c=r,h=o}else if(3===n){if(r=""+r,!(l=t._edges.get(r)))throw new V("Graph.".concat(e,': could not find the "').concat(r,'" edge in the graph.'));var u=l.source.key,d=l.target.key;if(i===u)a=l.target;else{if(i!==d)throw new V("Graph.".concat(e,': the "').concat(i,'" node is not attached to the "').concat(r,'" edge (').concat(u,", ").concat(d,")."));a=l.source}c=o,h=s}else{if(!(l=t._edges.get(i)))throw new V("Graph.".concat(e,': could not find the "').concat(i,'" edge in the graph.'));a=1===n?l.source:l.target,c=r,h=o}return[a,c,h]}U.prototype.clear=function(){this.inDegree=0,this.outDegree=0,this.undirectedDegree=0,this.undirectedLoops=0,this.directedLoops=0,this.in={},this.out={},this.undirected={}},W.prototype.clear=function(){this.inDegree=0,this.outDegree=0,this.directedLoops=0,this.in={},this.out={}},q.prototype.clear=function(){this.undirectedDegree=0,this.undirectedLoops=0,this.undirected={}},z.prototype.attach=function(){var t="out",e="in";this.undirected&&(t=e="undirected");var n=this.source.key,i=this.target.key;this.source[t][i]=this,this.undirected&&n===i||(this.target[e][n]=this)},z.prototype.attachMulti=function(){var t="out",e="in",n=this.source.key,i=this.target.key;this.undirected&&(t=e="undirected");var r=this.source[t],o=r[i];if(void 0===o)return r[i]=this,void(this.undirected&&n===i||(this.target[e][n]=this));o.previous=this,this.next=o,r[i]=this,this.target[e][n]=this},z.prototype.detach=function(){var t=this.source.key,e=this.target.key,n="out",i="in";this.undirected&&(n=i="undirected"),delete this.source[n][e],delete this.target[i][t]},z.prototype.detachMulti=function(){var t=this.source.key,e=this.target.key,n="out",i="in";this.undirected&&(n=i="undirected"),void 0===this.previous?void 0===this.next?(delete this.source[n][e],delete this.target[i][t]):(this.next.previous=void 0,this.source[n][e]=this.next,this.target[i][t]=this.next):(this.previous.next=this.next,void 0!==this.next&&(this.next.previous=this.previous))};var K=[{name:function(t){return"get".concat(t,"Attribute")},attacher:function(t,e,n){t.prototype[e]=function(t,i,r){var o=Y(this,e,n,t,i,r),s=o[0],a=o[1];return s.attributes[a]}}},{name:function(t){return"get".concat(t,"Attributes")},attacher:function(t,e,n){t.prototype[e]=function(t,i){return Y(this,e,n,t,i)[0].attributes}}},{name:function(t){return"has".concat(t,"Attribute")},attacher:function(t,e,n){t.prototype[e]=function(t,i,r){var o=Y(this,e,n,t,i,r),s=o[0],a=o[1];return s.attributes.hasOwnProperty(a)}}},{name:function(t){return"set".concat(t,"Attribute")},attacher:function(t,e,n){t.prototype[e]=function(t,i,r,o){var s=Y(this,e,n,t,i,r,o),a=s[0],l=s[1],c=s[2];return a.attributes[l]=c,this.emit("nodeAttributesUpdated",{key:a.key,type:"set",attributes:a.attributes,name:l}),this}}},{name:function(t){return"update".concat(t,"Attribute")},attacher:function(t,e,n){t.prototype[e]=function(t,i,r,o){var s=Y(this,e,n,t,i,r,o),a=s[0],l=s[1],c=s[2];if("function"!=typeof c)throw new D("Graph.".concat(e,": updater should be a function."));var h=a.attributes,u=c(h[l]);return h[l]=u,this.emit("nodeAttributesUpdated",{key:a.key,type:"set",attributes:a.attributes,name:l}),this}}},{name:function(t){return"remove".concat(t,"Attribute")},attacher:function(t,e,n){t.prototype[e]=function(t,i,r){var o=Y(this,e,n,t,i,r),s=o[0],a=o[1];return delete s.attributes[a],this.emit("nodeAttributesUpdated",{key:s.key,type:"remove",attributes:s.attributes,name:a}),this}}},{name:function(t){return"replace".concat(t,"Attributes")},attacher:function(t,e,n){t.prototype[e]=function(t,i,r){var o=Y(this,e,n,t,i,r),s=o[0],a=o[1];if(!c(a))throw new D("Graph.".concat(e,": provided attributes are not a plain object."));return s.attributes=a,this.emit("nodeAttributesUpdated",{key:s.key,type:"replace",attributes:s.attributes}),this}}},{name:function(t){return"merge".concat(t,"Attributes")},attacher:function(t,e,n){t.prototype[e]=function(t,i,r){var o=Y(this,e,n,t,i,r),s=o[0],l=o[1];if(!c(l))throw new D("Graph.".concat(e,": provided attributes are not a plain object."));return a(s.attributes,l),this.emit("nodeAttributesUpdated",{key:s.key,type:"merge",attributes:s.attributes,data:l}),this}}},{name:function(t){return"update".concat(t,"Attributes")},attacher:function(t,e,n){t.prototype[e]=function(t,i,r){var o=Y(this,e,n,t,i,r),s=o[0],a=o[1];if("function"!=typeof a)throw new D("Graph.".concat(e,": provided updater is not a function."));return s.attributes=a(s.attributes),this.emit("nodeAttributesUpdated",{key:s.key,type:"update",attributes:s.attributes}),this}}}],Z=[{name:function(t){return"get".concat(t,"Attribute")},attacher:function(t,e,n){t.prototype[e]=function(t,i){var r;if("mixed"!==this.type&&"mixed"!==n&&n!==this.type)throw new j("Graph.".concat(e,": cannot find this type of edges in your ").concat(this.type," graph."));if(arguments.length>2){if(this.multi)throw new j("Graph.".concat(e,": cannot use a {source,target} combo when asking about an edge's attributes in a MultiGraph since we cannot infer the one you want information about."));var o=""+t,s=""+i;if(i=arguments[2],!(r=l(this,o,s,n)))throw new V("Graph.".concat(e,': could not find an edge for the given path ("').concat(o,'" - "').concat(s,'").'))}else{if("mixed"!==n)throw new j("Graph.".concat(e,": calling this method with only a key (vs. a source and target) does not make sense since an edge with this key could have the other type."));if(t=""+t,!(r=this._edges.get(t)))throw new V("Graph.".concat(e,': could not find the "').concat(t,'" edge in the graph.'))}return r.attributes[i]}}},{name:function(t){return"get".concat(t,"Attributes")},attacher:function(t,e,n){t.prototype[e]=function(t){var i;if("mixed"!==this.type&&"mixed"!==n&&n!==this.type)throw new j("Graph.".concat(e,": cannot find this type of edges in your ").concat(this.type," graph."));if(arguments.length>1){if(this.multi)throw new j("Graph.".concat(e,": cannot use a {source,target} combo when asking about an edge's attributes in a MultiGraph since we cannot infer the one you want information about."));var r=""+t,o=""+arguments[1];if(!(i=l(this,r,o,n)))throw new V("Graph.".concat(e,': could not find an edge for the given path ("').concat(r,'" - "').concat(o,'").'))}else{if("mixed"!==n)throw new j("Graph.".concat(e,": calling this method with only a key (vs. a source and target) does not make sense since an edge with this key could have the other type."));if(t=""+t,!(i=this._edges.get(t)))throw new V("Graph.".concat(e,': could not find the "').concat(t,'" edge in the graph.'))}return i.attributes}}},{name:function(t){return"has".concat(t,"Attribute")},attacher:function(t,e,n){t.prototype[e]=function(t,i){var r;if("mixed"!==this.type&&"mixed"!==n&&n!==this.type)throw new j("Graph.".concat(e,": cannot find this type of edges in your ").concat(this.type," graph."));if(arguments.length>2){if(this.multi)throw new j("Graph.".concat(e,": cannot use a {source,target} combo when asking about an edge's attributes in a MultiGraph since we cannot infer the one you want information about."));var o=""+t,s=""+i;if(i=arguments[2],!(r=l(this,o,s,n)))throw new V("Graph.".concat(e,': could not find an edge for the given path ("').concat(o,'" - "').concat(s,'").'))}else{if("mixed"!==n)throw new j("Graph.".concat(e,": calling this method with only a key (vs. a source and target) does not make sense since an edge with this key could have the other type."));if(t=""+t,!(r=this._edges.get(t)))throw new V("Graph.".concat(e,': could not find the "').concat(t,'" edge in the graph.'))}return r.attributes.hasOwnProperty(i)}}},{name:function(t){return"set".concat(t,"Attribute")},attacher:function(t,e,n){t.prototype[e]=function(t,i,r){var o;if("mixed"!==this.type&&"mixed"!==n&&n!==this.type)throw new j("Graph.".concat(e,": cannot find this type of edges in your ").concat(this.type," graph."));if(arguments.length>3){if(this.multi)throw new j("Graph.".concat(e,": cannot use a {source,target} combo when asking about an edge's attributes in a MultiGraph since we cannot infer the one you want information about."));var s=""+t,a=""+i;if(i=arguments[2],r=arguments[3],!(o=l(this,s,a,n)))throw new V("Graph.".concat(e,': could not find an edge for the given path ("').concat(s,'" - "').concat(a,'").'))}else{if("mixed"!==n)throw new j("Graph.".concat(e,": calling this method with only a key (vs. a source and target) does not make sense since an edge with this key could have the other type."));if(t=""+t,!(o=this._edges.get(t)))throw new V("Graph.".concat(e,': could not find the "').concat(t,'" edge in the graph.'))}return o.attributes[i]=r,this.emit("edgeAttributesUpdated",{key:o.key,type:"set",attributes:o.attributes,name:i}),this}}},{name:function(t){return"update".concat(t,"Attribute")},attacher:function(t,e,n){t.prototype[e]=function(t,i,r){var o;if("mixed"!==this.type&&"mixed"!==n&&n!==this.type)throw new j("Graph.".concat(e,": cannot find this type of edges in your ").concat(this.type," graph."));if(arguments.length>3){if(this.multi)throw new j("Graph.".concat(e,": cannot use a {source,target} combo when asking about an edge's attributes in a MultiGraph since we cannot infer the one you want information about."));var s=""+t,a=""+i;if(i=arguments[2],r=arguments[3],!(o=l(this,s,a,n)))throw new V("Graph.".concat(e,': could not find an edge for the given path ("').concat(s,'" - "').concat(a,'").'))}else{if("mixed"!==n)throw new j("Graph.".concat(e,": calling this method with only a key (vs. a source and target) does not make sense since an edge with this key could have the other type."));if(t=""+t,!(o=this._edges.get(t)))throw new V("Graph.".concat(e,': could not find the "').concat(t,'" edge in the graph.'))}if("function"!=typeof r)throw new D("Graph.".concat(e,": updater should be a function."));return o.attributes[i]=r(o.attributes[i]),this.emit("edgeAttributesUpdated",{key:o.key,type:"set",attributes:o.attributes,name:i}),this}}},{name:function(t){return"remove".concat(t,"Attribute")},attacher:function(t,e,n){t.prototype[e]=function(t,i){var r;if("mixed"!==this.type&&"mixed"!==n&&n!==this.type)throw new j("Graph.".concat(e,": cannot find this type of edges in your ").concat(this.type," graph."));if(arguments.length>2){if(this.multi)throw new j("Graph.".concat(e,": cannot use a {source,target} combo when asking about an edge's attributes in a MultiGraph since we cannot infer the one you want information about."));var o=""+t,s=""+i;if(i=arguments[2],!(r=l(this,o,s,n)))throw new V("Graph.".concat(e,': could not find an edge for the given path ("').concat(o,'" - "').concat(s,'").'))}else{if("mixed"!==n)throw new j("Graph.".concat(e,": calling this method with only a key (vs. a source and target) does not make sense since an edge with this key could have the other type."));if(t=""+t,!(r=this._edges.get(t)))throw new V("Graph.".concat(e,': could not find the "').concat(t,'" edge in the graph.'))}return delete r.attributes[i],this.emit("edgeAttributesUpdated",{key:r.key,type:"remove",attributes:r.attributes,name:i}),this}}},{name:function(t){return"replace".concat(t,"Attributes")},attacher:function(t,e,n){t.prototype[e]=function(t,i){var r;if("mixed"!==this.type&&"mixed"!==n&&n!==this.type)throw new j("Graph.".concat(e,": cannot find this type of edges in your ").concat(this.type," graph."));if(arguments.length>2){if(this.multi)throw new j("Graph.".concat(e,": cannot use a {source,target} combo when asking about an edge's attributes in a MultiGraph since we cannot infer the one you want information about."));var o=""+t,s=""+i;if(i=arguments[2],!(r=l(this,o,s,n)))throw new V("Graph.".concat(e,': could not find an edge for the given path ("').concat(o,'" - "').concat(s,'").'))}else{if("mixed"!==n)throw new j("Graph.".concat(e,": calling this method with only a key (vs. a source and target) does not make sense since an edge with this key could have the other type."));if(t=""+t,!(r=this._edges.get(t)))throw new V("Graph.".concat(e,': could not find the "').concat(t,'" edge in the graph.'))}if(!c(i))throw new D("Graph.".concat(e,": provided attributes are not a plain object."));return r.attributes=i,this.emit("edgeAttributesUpdated",{key:r.key,type:"replace",attributes:r.attributes}),this}}},{name:function(t){return"merge".concat(t,"Attributes")},attacher:function(t,e,n){t.prototype[e]=function(t,i){var r;if("mixed"!==this.type&&"mixed"!==n&&n!==this.type)throw new j("Graph.".concat(e,": cannot find this type of edges in your ").concat(this.type," graph."));if(arguments.length>2){if(this.multi)throw new j("Graph.".concat(e,": cannot use a {source,target} combo when asking about an edge's attributes in a MultiGraph since we cannot infer the one you want information about."));var o=""+t,s=""+i;if(i=arguments[2],!(r=l(this,o,s,n)))throw new V("Graph.".concat(e,': could not find an edge for the given path ("').concat(o,'" - "').concat(s,'").'))}else{if("mixed"!==n)throw new j("Graph.".concat(e,": calling this method with only a key (vs. a source and target) does not make sense since an edge with this key could have the other type."));if(t=""+t,!(r=this._edges.get(t)))throw new V("Graph.".concat(e,': could not find the "').concat(t,'" edge in the graph.'))}if(!c(i))throw new D("Graph.".concat(e,": provided attributes are not a plain object."));return a(r.attributes,i),this.emit("edgeAttributesUpdated",{key:r.key,type:"merge",attributes:r.attributes,data:i}),this}}},{name:function(t){return"update".concat(t,"Attributes")},attacher:function(t,e,n){t.prototype[e]=function(t,i){var r;if("mixed"!==this.type&&"mixed"!==n&&n!==this.type)throw new j("Graph.".concat(e,": cannot find this type of edges in your ").concat(this.type," graph."));if(arguments.length>2){if(this.multi)throw new j("Graph.".concat(e,": cannot use a {source,target} combo when asking about an edge's attributes in a MultiGraph since we cannot infer the one you want information about."));var o=""+t,s=""+i;if(i=arguments[2],!(r=l(this,o,s,n)))throw new V("Graph.".concat(e,': could not find an edge for the given path ("').concat(o,'" - "').concat(s,'").'))}else{if("mixed"!==n)throw new j("Graph.".concat(e,": calling this method with only a key (vs. a source and target) does not make sense since an edge with this key could have the other type."));if(t=""+t,!(r=this._edges.get(t)))throw new V("Graph.".concat(e,': could not find the "').concat(t,'" edge in the graph.'))}if("function"!=typeof i)throw new D("Graph.".concat(e,": provided updater is not a function."));return r.attributes=i(r.attributes),this.emit("edgeAttributesUpdated",{key:r.key,type:"update",attributes:r.attributes}),this}}}],X=N,J=G,Q=function(){var t=arguments,e=null,n=-1;return new X((function(){for(var i=null;;){if(null===e){if(++n>=t.length)return{done:!0};e=J(t[n])}if(!0!==(i=e.next()).done)break;e=null}return i}))},tt=[{name:"edges",type:"mixed"},{name:"inEdges",type:"directed",direction:"in"},{name:"outEdges",type:"directed",direction:"out"},{name:"inboundEdges",type:"mixed",direction:"in"},{name:"outboundEdges",type:"mixed",direction:"out"},{name:"directedEdges",type:"directed"},{name:"undirectedEdges",type:"undirected"}];function et(t,e,n,i){var r=!1;for(var o in e)if(o!==i){var s=e[o];if(r=n(s.key,s.attributes,s.source.key,s.target.key,s.source.attributes,s.target.attributes,s.undirected),t&&r)return s.key}}function nt(t,e,n,i){var r,o,s,a=!1;for(var l in e)if(l!==i){r=e[l];do{if(o=r.source,s=r.target,a=n(r.key,r.attributes,o.key,s.key,o.attributes,s.attributes,r.undirected),t&&a)return r.key;r=r.next}while(void 0!==r)}}function it(t,e){var n,i=Object.keys(t),r=i.length,o=0;return new N((function(){do{if(n)n=n.next;else{if(o>=r)return{done:!0};var s=i[o++];if(s===e){n=void 0;continue}n=t[s]}}while(!n);return{done:!1,value:{edge:n.key,attributes:n.attributes,source:n.source.key,target:n.target.key,sourceAttributes:n.source.attributes,targetAttributes:n.target.attributes,undirected:n.undirected}}}))}function rt(t,e,n,i){var r=e[n];if(r){var o=r.source,s=r.target;return i(r.key,r.attributes,o.key,s.key,o.attributes,s.attributes,r.undirected)&&t?r.key:void 0}}function ot(t,e,n,i){var r=e[n];if(r){var o=!1;do{if(o=i(r.key,r.attributes,r.source.key,r.target.key,r.source.attributes,r.target.attributes,r.undirected),t&&o)return r.key;r=r.next}while(void 0!==r)}}function st(t,e){var n=t[e];return void 0!==n.next?new N((function(){if(!n)return{done:!0};var t={edge:n.key,attributes:n.attributes,source:n.source.key,target:n.target.key,sourceAttributes:n.source.attributes,targetAttributes:n.target.attributes,undirected:n.undirected};return n=n.next,{done:!1,value:t}})):N.of({edge:n.key,attributes:n.attributes,source:n.source.key,target:n.target.key,sourceAttributes:n.source.attributes,targetAttributes:n.target.attributes,undirected:n.undirected})}function at(t,e,n,i){if(0!==e.size)for(var r,o,s="mixed"!==n&&n!==e.type,a="undirected"===n,l=!1,c=e._edges.values();!0!==(r=c.next()).done;)if(o=r.value,!s||o.undirected===a){var h=o,u=h.key,d=h.attributes,p=h.source,m=h.target;if(l=i(u,d,p.key,m.key,p.attributes,m.attributes,o.undirected),t&&l)return u}}function lt(t,e,n,i,r,o){var s,a=e?nt:et;if("undirected"!==n){if("out"!==i&&(s=a(t,r.in,o),t&&s))return s;if("in"!==i&&(s=a(t,r.out,o,i?void 0:r.key),t&&s))return s}if("directed"!==n&&(s=a(t,r.undirected,o),t&&s))return s}function ct(t,e,n,i,r,o,s){var a,l=n?ot:rt;if("undirected"!==e){if(void 0!==r.in&&"out"!==i&&(a=l(t,r.in,o,s),t&&a))return a;if(void 0!==r.out&&"in"!==i&&(i||r.key!==o)&&(a=l(t,r.out,o,s),t&&a))return a}if("directed"!==e&&void 0!==r.undirected&&(a=l(t,r.undirected,o,s),t&&a))return a}var ht=[{name:"neighbors",type:"mixed"},{name:"inNeighbors",type:"directed",direction:"in"},{name:"outNeighbors",type:"directed",direction:"out"},{name:"inboundNeighbors",type:"mixed",direction:"in"},{name:"outboundNeighbors",type:"mixed",direction:"out"},{name:"directedNeighbors",type:"directed"},{name:"undirectedNeighbors",type:"undirected"}];function ut(){this.A=null,this.B=null}function dt(t,e,n,i,r){for(var o in i){var s=i[o],a=s.source,l=s.target,c=a===n?l:a;if(!e||!e.has(c.key)){var h=r(c.key,c.attributes);if(t&&h)return c.key}}}function pt(t,e,n,i,r){if("mixed"!==e){if("undirected"===e)return dt(t,null,i,i.undirected,r);if("string"==typeof n)return dt(t,null,i,i[n],r)}var o,s=new ut;if("undirected"!==e){if("out"!==n){if(o=dt(t,null,i,i.in,r),t&&o)return o;s.wrap(i.in)}if("in"!==n){if(o=dt(t,s,i,i.out,r),t&&o)return o;s.wrap(i.out)}}if("directed"!==e&&(o=dt(t,s,i,i.undirected,r),t&&o))return o}function mt(t,e,n){var i=Object.keys(n),r=i.length,o=0;return new N((function(){var s=null;do{if(o>=r)return t&&t.wrap(n),{done:!0};var a=n[i[o++]],l=a.source,c=a.target;s=l===e?c:l,t&&t.has(s.key)&&(s=null)}while(null===s);return{done:!1,value:{neighbor:s.key,attributes:s.attributes}}}))}function ft(t,e,n,i,r){for(var o,s,a,l,c,h,u,d=i._nodes.values(),p=i.type;!0!==(o=d.next()).done;){var m=!1;if(s=o.value,"undirected"!==p)for(a in l=s.out){c=l[a];do{if(h=c.target,m=!0,u=r(s.key,h.key,s.attributes,h.attributes,c.key,c.attributes,c.undirected),t&&u)return c;c=c.next}while(c)}if("directed"!==p)for(a in l=s.undirected)if(!(e&&s.key>a)){c=l[a];do{if((h=c.target).key!==a&&(h=c.source),m=!0,u=r(s.key,h.key,s.attributes,h.attributes,c.key,c.attributes,c.undirected),t&&u)return c;c=c.next}while(c)}if(n&&!m&&(u=r(s.key,null,s.attributes,null,null,null,null),t&&u))return null}}function gt(t){if(!c(t))throw new D('Graph.import: invalid serialized node. A serialized node should be a plain object with at least a "key" property.');if(!("key"in t))throw new D("Graph.import: serialized node is missing its key.");if("attributes"in t&&(!c(t.attributes)||null===t.attributes))throw new D("Graph.import: invalid attributes. Attributes should be a plain object, null or omitted.")}function yt(t){if(!c(t))throw new D('Graph.import: invalid serialized edge. A serialized edge should be a plain object with at least a "source" & "target" property.');if(!("source"in t))throw new D("Graph.import: serialized edge is missing its source.");if(!("target"in t))throw new D("Graph.import: serialized edge is missing its target.");if("attributes"in t&&(!c(t.attributes)||null===t.attributes))throw new D("Graph.import: invalid attributes. Attributes should be a plain object, null or omitted.");if("undirected"in t&&"boolean"!=typeof t.undirected)throw new D("Graph.import: invalid undirectedness information. Undirected should be boolean or omitted.")}ut.prototype.wrap=function(t){null===this.A?this.A=t:null===this.B&&(this.B=t)},ut.prototype.has=function(t){return null!==this.A&&t in this.A||null!==this.B&&t in this.B};var bt,vt=(bt=255&Math.floor(256*Math.random()),function(){return bt++}),wt=new Set(["directed","undirected","mixed"]),Ct=new Set(["domain","_events","_eventsCount","_maxListeners"]),At={allowSelfLoops:!0,multi:!1,type:"mixed"};function St(t,e,n){var i=new t.NodeDataClass(e,n);return t._nodes.set(e,i),t.emit("nodeAdded",{key:e,attributes:n}),i}function xt(t,e,n,i,r,o,s,a){if(!i&&"undirected"===t.type)throw new j("Graph.".concat(e,": you cannot add a directed edge to an undirected graph. Use the #.addEdge or #.addUndirectedEdge instead."));if(i&&"directed"===t.type)throw new j("Graph.".concat(e,": you cannot add an undirected edge to a directed graph. Use the #.addEdge or #.addDirectedEdge instead."));if(a&&!c(a))throw new D("Graph.".concat(e,': invalid attributes. Expecting an object but got "').concat(a,'"'));if(o=""+o,s=""+s,a=a||{},!t.allowSelfLoops&&o===s)throw new j("Graph.".concat(e,': source & target are the same ("').concat(o,"\"), thus creating a loop explicitly forbidden by this graph 'allowSelfLoops' option set to false."));var l=t._nodes.get(o),h=t._nodes.get(s);if(!l)throw new V("Graph.".concat(e,': source node "').concat(o,'" not found.'));if(!h)throw new V("Graph.".concat(e,': target node "').concat(s,'" not found.'));var u={key:null,undirected:i,source:o,target:s,attributes:a};if(n)r=t._edgeKeyGenerator();else if(r=""+r,t._edges.has(r))throw new j("Graph.".concat(e,': the "').concat(r,'" edge already exists in the graph.'));if(!t.multi&&(i?void 0!==l.undirected[s]:void 0!==l.out[s]))throw new j("Graph.".concat(e,': an edge linking "').concat(o,'" to "').concat(s,"\" already exists. If you really want to add multiple edges linking those nodes, you should create a multi graph by using the 'multi' option."));var d=new z(i,r,l,h,a);t._edges.set(r,d);var p=o===s;return i?(l.undirectedDegree++,h.undirectedDegree++,p&&(l.undirectedLoops++,t._undirectedSelfLoopCount++)):(l.outDegree++,h.inDegree++,p&&(l.directedLoops++,t._directedSelfLoopCount++)),t.multi?d.attachMulti():d.attach(),i?t._undirectedSize++:t._directedSize++,u.key=r,t.emit("edgeAdded",u),r}function Et(t,e,n,i,r,o,s,l,h){if(!i&&"undirected"===t.type)throw new j("Graph.".concat(e,": you cannot merge/update a directed edge to an undirected graph. Use the #.mergeEdge/#.updateEdge or #.addUndirectedEdge instead."));if(i&&"directed"===t.type)throw new j("Graph.".concat(e,": you cannot merge/update an undirected edge to a directed graph. Use the #.mergeEdge/#.updateEdge or #.addDirectedEdge instead."));if(l)if(h){if("function"!=typeof l)throw new D("Graph.".concat(e,': invalid updater function. Expecting a function but got "').concat(l,'"'))}else if(!c(l))throw new D("Graph.".concat(e,': invalid attributes. Expecting an object but got "').concat(l,'"'));var u;if(o=""+o,s=""+s,h&&(u=l,l=void 0),!t.allowSelfLoops&&o===s)throw new j("Graph.".concat(e,': source & target are the same ("').concat(o,"\"), thus creating a loop explicitly forbidden by this graph 'allowSelfLoops' option set to false."));var d,p,m=t._nodes.get(o),f=t._nodes.get(s);if(!n&&(d=t._edges.get(r))){if(!(d.source.key===o&&d.target.key===s||i&&d.source.key===s&&d.target.key===o))throw new j("Graph.".concat(e,': inconsistency detected when attempting to merge the "').concat(r,'" edge with "').concat(o,'" source & "').concat(s,'" target vs. ("').concat(d.source.key,'", "').concat(d.target.key,'").'));p=d}if(p||t.multi||!m||(p=i?m.undirected[s]:m.out[s]),p){var g=[p.key,!1,!1,!1];if(h?!u:!l)return g;if(h){var y=p.attributes;p.attributes=u(y),t.emit("edgeAttributesUpdated",{type:"replace",key:p.key,attributes:p.attributes})}else a(p.attributes,l),t.emit("edgeAttributesUpdated",{type:"merge",key:p.key,attributes:p.attributes,data:l});return g}l=l||{},h&&u&&(l=u(l));var b={key:null,undirected:i,source:o,target:s,attributes:l};if(n)r=t._edgeKeyGenerator();else if(r=""+r,t._edges.has(r))throw new j("Graph.".concat(e,': the "').concat(r,'" edge already exists in the graph.'));var v=!1,w=!1;m||(m=St(t,o,{}),v=!0,o===s&&(f=m,w=!0)),f||(f=St(t,s,{}),w=!0),d=new z(i,r,m,f,l),t._edges.set(r,d);var C=o===s;return i?(m.undirectedDegree++,f.undirectedDegree++,C&&(m.undirectedLoops++,t._undirectedSelfLoopCount++)):(m.outDegree++,f.inDegree++,C&&(m.directedLoops++,t._directedSelfLoopCount++)),t.multi?d.attachMulti():d.attach(),i?t._undirectedSize++:t._directedSize++,b.key=r,t.emit("edgeAdded",b),[r,!0,v,w]}function Mt(t,e){t._edges.delete(e.key);var n=e.source,i=e.target,r=e.attributes,o=e.undirected,s=n===i;o?(n.undirectedDegree--,i.undirectedDegree--,s&&(n.undirectedLoops--,t._undirectedSelfLoopCount--)):(n.outDegree--,i.inDegree--,s&&(n.directedLoops--,t._directedSelfLoopCount--)),t.multi?e.detachMulti():e.detach(),o?t._undirectedSize--:t._directedSize--,t.emit("edgeDropped",{key:e.key,attributes:r,source:n.key,target:i.key,undirected:o})}var _t=function(n){function i(t){var e;if(e=n.call(this)||this,"boolean"!=typeof(t=a({},At,t)).multi)throw new D("Graph.constructor: invalid 'multi' option. Expecting a boolean but got \"".concat(t.multi,'".'));if(!wt.has(t.type))throw new D('Graph.constructor: invalid \'type\' option. Should be one of "mixed", "directed" or "undirected" but got "'.concat(t.type,'".'));if("boolean"!=typeof t.allowSelfLoops)throw new D("Graph.constructor: invalid 'allowSelfLoops' option. Expecting a boolean but got \"".concat(t.allowSelfLoops,'".'));var i="mixed"===t.type?U:"directed"===t.type?W:q;u(s(e),"NodeDataClass",i);var r="geid_"+vt()+"_",o=0;return u(s(e),"_attributes",{}),u(s(e),"_nodes",new Map),u(s(e),"_edges",new Map),u(s(e),"_directedSize",0),u(s(e),"_undirectedSize",0),u(s(e),"_directedSelfLoopCount",0),u(s(e),"_undirectedSelfLoopCount",0),u(s(e),"_edgeKeyGenerator",(function(){var t;do{t=r+o++}while(e._edges.has(t));return t})),u(s(e),"_options",t),Ct.forEach((function(t){return u(s(e),t,e[t])})),d(s(e),"order",(function(){return e._nodes.size})),d(s(e),"size",(function(){return e._edges.size})),d(s(e),"directedSize",(function(){return e._directedSize})),d(s(e),"undirectedSize",(function(){return e._undirectedSize})),d(s(e),"selfLoopCount",(function(){return e._directedSelfLoopCount+e._undirectedSelfLoopCount})),d(s(e),"directedSelfLoopCount",(function(){return e._directedSelfLoopCount})),d(s(e),"undirectedSelfLoopCount",(function(){return e._undirectedSelfLoopCount})),d(s(e),"multi",e._options.multi),d(s(e),"type",e._options.type),d(s(e),"allowSelfLoops",e._options.allowSelfLoops),d(s(e),"implementation",(function(){return"graphology"})),e}e(i,n);var r=i.prototype;return r._resetInstanceCounters=function(){this._directedSize=0,this._undirectedSize=0,this._directedSelfLoopCount=0,this._undirectedSelfLoopCount=0},r.hasNode=function(t){return this._nodes.has(""+t)},r.hasDirectedEdge=function(t,e){if("undirected"===this.type)return!1;if(1===arguments.length){var n=""+t,i=this._edges.get(n);return!!i&&!i.undirected}if(2===arguments.length){t=""+t,e=""+e;var r=this._nodes.get(t);return!!r&&r.out.hasOwnProperty(e)}throw new D("Graph.hasDirectedEdge: invalid arity (".concat(arguments.length,", instead of 1 or 2). You can either ask for an edge id or for the existence of an edge between a source & a target."))},r.hasUndirectedEdge=function(t,e){if("directed"===this.type)return!1;if(1===arguments.length){var n=""+t,i=this._edges.get(n);return!!i&&i.undirected}if(2===arguments.length){t=""+t,e=""+e;var r=this._nodes.get(t);return!!r&&r.undirected.hasOwnProperty(e)}throw new D("Graph.hasDirectedEdge: invalid arity (".concat(arguments.length,", instead of 1 or 2). You can either ask for an edge id or for the existence of an edge between a source & a target."))},r.hasEdge=function(t,e){if(1===arguments.length){var n=""+t;return this._edges.has(n)}if(2===arguments.length){t=""+t,e=""+e;var i=this._nodes.get(t);return!!i&&(void 0!==i.out&&i.out.hasOwnProperty(e)||void 0!==i.undirected&&i.undirected.hasOwnProperty(e))}throw new D("Graph.hasEdge: invalid arity (".concat(arguments.length,", instead of 1 or 2). You can either ask for an edge id or for the existence of an edge between a source & a target."))},r.directedEdge=function(t,e){if("undirected"!==this.type){if(t=""+t,e=""+e,this.multi)throw new j("Graph.directedEdge: this method is irrelevant with multigraphs since there might be multiple edges between source & target. See #.directedEdges instead.");var n=this._nodes.get(t);if(!n)throw new V('Graph.directedEdge: could not find the "'.concat(t,'" source node in the graph.'));if(!this._nodes.has(e))throw new V('Graph.directedEdge: could not find the "'.concat(e,'" target node in the graph.'));var i=n.out&&n.out[e]||void 0;return i?i.key:void 0}},r.undirectedEdge=function(t,e){if("directed"!==this.type){if(t=""+t,e=""+e,this.multi)throw new j("Graph.undirectedEdge: this method is irrelevant with multigraphs since there might be multiple edges between source & target. See #.undirectedEdges instead.");var n=this._nodes.get(t);if(!n)throw new V('Graph.undirectedEdge: could not find the "'.concat(t,'" source node in the graph.'));if(!this._nodes.has(e))throw new V('Graph.undirectedEdge: could not find the "'.concat(e,'" target node in the graph.'));var i=n.undirected&&n.undirected[e]||void 0;return i?i.key:void 0}},r.edge=function(t,e){if(this.multi)throw new j("Graph.edge: this method is irrelevant with multigraphs since there might be multiple edges between source & target. See #.edges instead.");t=""+t,e=""+e;var n=this._nodes.get(t);if(!n)throw new V('Graph.edge: could not find the "'.concat(t,'" source node in the graph.'));if(!this._nodes.has(e))throw new V('Graph.edge: could not find the "'.concat(e,'" target node in the graph.'));var i=n.out&&n.out[e]||n.undirected&&n.undirected[e]||void 0;if(i)return i.key},r.areDirectedNeighbors=function(t,e){t=""+t,e=""+e;var n=this._nodes.get(t);if(!n)throw new V('Graph.areDirectedNeighbors: could not find the "'.concat(t,'" node in the graph.'));return"undirected"!==this.type&&(e in n.in||e in n.out)},r.areOutNeighbors=function(t,e){t=""+t,e=""+e;var n=this._nodes.get(t);if(!n)throw new V('Graph.areOutNeighbors: could not find the "'.concat(t,'" node in the graph.'));return"undirected"!==this.type&&e in n.out},r.areInNeighbors=function(t,e){t=""+t,e=""+e;var n=this._nodes.get(t);if(!n)throw new V('Graph.areInNeighbors: could not find the "'.concat(t,'" node in the graph.'));return"undirected"!==this.type&&e in n.in},r.areUndirectedNeighbors=function(t,e){t=""+t,e=""+e;var n=this._nodes.get(t);if(!n)throw new V('Graph.areUndirectedNeighbors: could not find the "'.concat(t,'" node in the graph.'));return"directed"!==this.type&&e in n.undirected},r.areNeighbors=function(t,e){t=""+t,e=""+e;var n=this._nodes.get(t);if(!n)throw new V('Graph.areNeighbors: could not find the "'.concat(t,'" node in the graph.'));return"undirected"!==this.type&&(e in n.in||e in n.out)||"directed"!==this.type&&e in n.undirected},r.areInboundNeighbors=function(t,e){t=""+t,e=""+e;var n=this._nodes.get(t);if(!n)throw new V('Graph.areInboundNeighbors: could not find the "'.concat(t,'" node in the graph.'));return"undirected"!==this.type&&e in n.in||"directed"!==this.type&&e in n.undirected},r.areOutboundNeighbors=function(t,e){t=""+t,e=""+e;var n=this._nodes.get(t);if(!n)throw new V('Graph.areOutboundNeighbors: could not find the "'.concat(t,'" node in the graph.'));return"undirected"!==this.type&&e in n.out||"directed"!==this.type&&e in n.undirected},r.inDegree=function(t){t=""+t;var e=this._nodes.get(t);if(!e)throw new V('Graph.inDegree: could not find the "'.concat(t,'" node in the graph.'));return"undirected"===this.type?0:e.inDegree},r.outDegree=function(t){t=""+t;var e=this._nodes.get(t);if(!e)throw new V('Graph.outDegree: could not find the "'.concat(t,'" node in the graph.'));return"undirected"===this.type?0:e.outDegree},r.directedDegree=function(t){t=""+t;var e=this._nodes.get(t);if(!e)throw new V('Graph.directedDegree: could not find the "'.concat(t,'" node in the graph.'));return"undirected"===this.type?0:e.inDegree+e.outDegree},r.undirectedDegree=function(t){t=""+t;var e=this._nodes.get(t);if(!e)throw new V('Graph.undirectedDegree: could not find the "'.concat(t,'" node in the graph.'));return"directed"===this.type?0:e.undirectedDegree},r.inboundDegree=function(t){t=""+t;var e=this._nodes.get(t);if(!e)throw new V('Graph.inboundDegree: could not find the "'.concat(t,'" node in the graph.'));var n=0;return"directed"!==this.type&&(n+=e.undirectedDegree),"undirected"!==this.type&&(n+=e.inDegree),n},r.outboundDegree=function(t){t=""+t;var e=this._nodes.get(t);if(!e)throw new V('Graph.outboundDegree: could not find the "'.concat(t,'" node in the graph.'));var n=0;return"directed"!==this.type&&(n+=e.undirectedDegree),"undirected"!==this.type&&(n+=e.outDegree),n},r.degree=function(t){t=""+t;var e=this._nodes.get(t);if(!e)throw new V('Graph.degree: could not find the "'.concat(t,'" node in the graph.'));var n=0;return"directed"!==this.type&&(n+=e.undirectedDegree),"undirected"!==this.type&&(n+=e.inDegree+e.outDegree),n},r.inDegreeWithoutSelfLoops=function(t){t=""+t;var e=this._nodes.get(t);if(!e)throw new V('Graph.inDegreeWithoutSelfLoops: could not find the "'.concat(t,'" node in the graph.'));return"undirected"===this.type?0:e.inDegree-e.directedLoops},r.outDegreeWithoutSelfLoops=function(t){t=""+t;var e=this._nodes.get(t);if(!e)throw new V('Graph.outDegreeWithoutSelfLoops: could not find the "'.concat(t,'" node in the graph.'));return"undirected"===this.type?0:e.outDegree-e.directedLoops},r.directedDegreeWithoutSelfLoops=function(t){t=""+t;var e=this._nodes.get(t);if(!e)throw new V('Graph.directedDegreeWithoutSelfLoops: could not find the "'.concat(t,'" node in the graph.'));return"undirected"===this.type?0:e.inDegree+e.outDegree-2*e.directedLoops},r.undirectedDegreeWithoutSelfLoops=function(t){t=""+t;var e=this._nodes.get(t);if(!e)throw new V('Graph.undirectedDegreeWithoutSelfLoops: could not find the "'.concat(t,'" node in the graph.'));return"directed"===this.type?0:e.undirectedDegree-2*e.undirectedLoops},r.inboundDegreeWithoutSelfLoops=function(t){t=""+t;var e=this._nodes.get(t);if(!e)throw new V('Graph.inboundDegreeWithoutSelfLoops: could not find the "'.concat(t,'" node in the graph.'));var n=0,i=0;return"directed"!==this.type&&(n+=e.undirectedDegree,i+=2*e.undirectedLoops),"undirected"!==this.type&&(n+=e.inDegree,i+=e.directedLoops),n-i},r.outboundDegreeWithoutSelfLoops=function(t){t=""+t;var e=this._nodes.get(t);if(!e)throw new V('Graph.outboundDegreeWithoutSelfLoops: could not find the "'.concat(t,'" node in the graph.'));var n=0,i=0;return"directed"!==this.type&&(n+=e.undirectedDegree,i+=2*e.undirectedLoops),"undirected"!==this.type&&(n+=e.outDegree,i+=e.directedLoops),n-i},r.degreeWithoutSelfLoops=function(t){t=""+t;var e=this._nodes.get(t);if(!e)throw new V('Graph.degreeWithoutSelfLoops: could not find the "'.concat(t,'" node in the graph.'));var n=0,i=0;return"directed"!==this.type&&(n+=e.undirectedDegree,i+=2*e.undirectedLoops),"undirected"!==this.type&&(n+=e.inDegree+e.outDegree,i+=2*e.directedLoops),n-i},r.source=function(t){t=""+t;var e=this._edges.get(t);if(!e)throw new V('Graph.source: could not find the "'.concat(t,'" edge in the graph.'));return e.source.key},r.target=function(t){t=""+t;var e=this._edges.get(t);if(!e)throw new V('Graph.target: could not find the "'.concat(t,'" edge in the graph.'));return e.target.key},r.extremities=function(t){t=""+t;var e=this._edges.get(t);if(!e)throw new V('Graph.extremities: could not find the "'.concat(t,'" edge in the graph.'));return[e.source.key,e.target.key]},r.opposite=function(t,e){t=""+t,e=""+e;var n=this._edges.get(e);if(!n)throw new V('Graph.opposite: could not find the "'.concat(e,'" edge in the graph.'));var i=n.source.key,r=n.target.key;if(t===i)return r;if(t===r)return i;throw new V('Graph.opposite: the "'.concat(t,'" node is not attached to the "').concat(e,'" edge (').concat(i,", ").concat(r,")."))},r.hasExtremity=function(t,e){t=""+t,e=""+e;var n=this._edges.get(t);if(!n)throw new V('Graph.hasExtremity: could not find the "'.concat(t,'" edge in the graph.'));return n.source.key===e||n.target.key===e},r.isUndirected=function(t){t=""+t;var e=this._edges.get(t);if(!e)throw new V('Graph.isUndirected: could not find the "'.concat(t,'" edge in the graph.'));return e.undirected},r.isDirected=function(t){t=""+t;var e=this._edges.get(t);if(!e)throw new V('Graph.isDirected: could not find the "'.concat(t,'" edge in the graph.'));return!e.undirected},r.isSelfLoop=function(t){t=""+t;var e=this._edges.get(t);if(!e)throw new V('Graph.isSelfLoop: could not find the "'.concat(t,'" edge in the graph.'));return e.source===e.target},r.addNode=function(t,e){var n=function(t,e,n){if(n&&!c(n))throw new D('Graph.addNode: invalid attributes. Expecting an object but got "'.concat(n,'"'));if(e=""+e,n=n||{},t._nodes.has(e))throw new j('Graph.addNode: the "'.concat(e,'" node already exist in the graph.'));var i=new t.NodeDataClass(e,n);return t._nodes.set(e,i),t.emit("nodeAdded",{key:e,attributes:n}),i}(this,t,e);return n.key},r.mergeNode=function(t,e){if(e&&!c(e))throw new D('Graph.mergeNode: invalid attributes. Expecting an object but got "'.concat(e,'"'));t=""+t,e=e||{};var n=this._nodes.get(t);return n?(e&&(a(n.attributes,e),this.emit("nodeAttributesUpdated",{type:"merge",key:t,attributes:n.attributes,data:e})),[t,!1]):(n=new this.NodeDataClass(t,e),this._nodes.set(t,n),this.emit("nodeAdded",{key:t,attributes:e}),[t,!0])},r.updateNode=function(t,e){if(e&&"function"!=typeof e)throw new D('Graph.updateNode: invalid updater function. Expecting a function but got "'.concat(e,'"'));t=""+t;var n=this._nodes.get(t);if(n){if(e){var i=n.attributes;n.attributes=e(i),this.emit("nodeAttributesUpdated",{type:"replace",key:t,attributes:n.attributes})}return[t,!1]}var r=e?e({}):{};return n=new this.NodeDataClass(t,r),this._nodes.set(t,n),this.emit("nodeAdded",{key:t,attributes:r}),[t,!0]},r.dropNode=function(t){t=""+t;var e,n=this._nodes.get(t);if(!n)throw new V('Graph.dropNode: could not find the "'.concat(t,'" node in the graph.'));if("undirected"!==this.type){for(var i in n.out){e=n.out[i];do{Mt(this,e),e=e.next}while(e)}for(var r in n.in){e=n.in[r];do{Mt(this,e),e=e.next}while(e)}}if("directed"!==this.type)for(var o in n.undirected){e=n.undirected[o];do{Mt(this,e),e=e.next}while(e)}this._nodes.delete(t),this.emit("nodeDropped",{key:t,attributes:n.attributes})},r.dropEdge=function(t){var e;if(arguments.length>1){var n=""+arguments[0],i=""+arguments[1];if(!(e=l(this,n,i,this.type)))throw new V('Graph.dropEdge: could not find the "'.concat(n,'" -> "').concat(i,'" edge in the graph.'))}else if(t=""+t,!(e=this._edges.get(t)))throw new V('Graph.dropEdge: could not find the "'.concat(t,'" edge in the graph.'));return Mt(this,e),this},r.dropDirectedEdge=function(t,e){if(arguments.length<2)throw new j("Graph.dropDirectedEdge: it does not make sense to try and drop a directed edge by key. What if the edge with this key is undirected? Use #.dropEdge for this purpose instead.");if(this.multi)throw new j("Graph.dropDirectedEdge: cannot use a {source,target} combo when dropping an edge in a MultiGraph since we cannot infer the one you want to delete as there could be multiple ones.");var n=l(this,t=""+t,e=""+e,"directed");if(!n)throw new V('Graph.dropDirectedEdge: could not find a "'.concat(t,'" -> "').concat(e,'" edge in the graph.'));return Mt(this,n),this},r.dropUndirectedEdge=function(t,e){if(arguments.length<2)throw new j("Graph.dropUndirectedEdge: it does not make sense to drop a directed edge by key. What if the edge with this key is undirected? Use #.dropEdge for this purpose instead.");if(this.multi)throw new j("Graph.dropUndirectedEdge: cannot use a {source,target} combo when dropping an edge in a MultiGraph since we cannot infer the one you want to delete as there could be multiple ones.");var n=l(this,t,e,"undirected");if(!n)throw new V('Graph.dropUndirectedEdge: could not find a "'.concat(t,'" -> "').concat(e,'" edge in the graph.'));return Mt(this,n),this},r.clear=function(){this._edges.clear(),this._nodes.clear(),this._resetInstanceCounters(),this.emit("cleared")},r.clearEdges=function(){for(var t,e=this._nodes.values();!0!==(t=e.next()).done;)t.value.clear();this._edges.clear(),this._resetInstanceCounters(),this.emit("edgesCleared")},r.getAttribute=function(t){return this._attributes[t]},r.getAttributes=function(){return this._attributes},r.hasAttribute=function(t){return this._attributes.hasOwnProperty(t)},r.setAttribute=function(t,e){return this._attributes[t]=e,this.emit("attributesUpdated",{type:"set",attributes:this._attributes,name:t}),this},r.updateAttribute=function(t,e){if("function"!=typeof e)throw new D("Graph.updateAttribute: updater should be a function.");var n=this._attributes[t];return this._attributes[t]=e(n),this.emit("attributesUpdated",{type:"set",attributes:this._attributes,name:t}),this},r.removeAttribute=function(t){return delete this._attributes[t],this.emit("attributesUpdated",{type:"remove",attributes:this._attributes,name:t}),this},r.replaceAttributes=function(t){if(!c(t))throw new D("Graph.replaceAttributes: provided attributes are not a plain object.");return this._attributes=t,this.emit("attributesUpdated",{type:"replace",attributes:this._attributes}),this},r.mergeAttributes=function(t){if(!c(t))throw new D("Graph.mergeAttributes: provided attributes are not a plain object.");return a(this._attributes,t),this.emit("attributesUpdated",{type:"merge",attributes:this._attributes,data:t}),this},r.updateAttributes=function(t){if("function"!=typeof t)throw new D("Graph.updateAttributes: provided updater is not a function.");return this._attributes=t(this._attributes),this.emit("attributesUpdated",{type:"update",attributes:this._attributes}),this},r.updateEachNodeAttributes=function(t,e){if("function"!=typeof t)throw new D("Graph.updateEachNodeAttributes: expecting an updater function.");if(e&&!p(e))throw new D("Graph.updateEachNodeAttributes: invalid hints. Expecting an object having the following shape: {attributes?: [string]}");for(var n,i,r=this._nodes.values();!0!==(n=r.next()).done;)(i=n.value).attributes=t(i.key,i.attributes);this.emit("eachNodeAttributesUpdated",{hints:e||null})},r.updateEachEdgeAttributes=function(t,e){if("function"!=typeof t)throw new D("Graph.updateEachEdgeAttributes: expecting an updater function.");if(e&&!p(e))throw new D("Graph.updateEachEdgeAttributes: invalid hints. Expecting an object having the following shape: {attributes?: [string]}");for(var n,i,r,o,s=this._edges.values();!0!==(n=s.next()).done;)r=(i=n.value).source,o=i.target,i.attributes=t(i.key,i.attributes,r.key,o.key,r.attributes,o.attributes,i.undirected);this.emit("eachEdgeAttributesUpdated",{hints:e||null})},r.forEachAdjacencyEntry=function(t){if("function"!=typeof t)throw new D("Graph.forEachAdjacencyEntry: expecting a callback.");ft(!1,!1,!1,this,t)},r.forEachAdjacencyEntryWithOrphans=function(t){if("function"!=typeof t)throw new D("Graph.forEachAdjacencyEntryWithOrphans: expecting a callback.");ft(!1,!1,!0,this,t)},r.forEachAssymetricAdjacencyEntry=function(t){if("function"!=typeof t)throw new D("Graph.forEachAssymetricAdjacencyEntry: expecting a callback.");ft(!1,!0,!1,this,t)},r.forEachAssymetricAdjacencyEntryWithOrphans=function(t){if("function"!=typeof t)throw new D("Graph.forEachAssymetricAdjacencyEntryWithOrphans: expecting a callback.");ft(!1,!0,!0,this,t)},r.nodes=function(){return"function"==typeof Array.from?Array.from(this._nodes.keys()):H(this._nodes.keys(),this._nodes.size)},r.forEachNode=function(t){if("function"!=typeof t)throw new D("Graph.forEachNode: expecting a callback.");for(var e,n,i=this._nodes.values();!0!==(e=i.next()).done;)t((n=e.value).key,n.attributes)},r.findNode=function(t){if("function"!=typeof t)throw new D("Graph.findNode: expecting a callback.");for(var e,n,i=this._nodes.values();!0!==(e=i.next()).done;)if(t((n=e.value).key,n.attributes))return n.key},r.mapNodes=function(t){if("function"!=typeof t)throw new D("Graph.mapNode: expecting a callback.");for(var e,n,i=this._nodes.values(),r=new Array(this.order),o=0;!0!==(e=i.next()).done;)n=e.value,r[o++]=t(n.key,n.attributes);return r},r.someNode=function(t){if("function"!=typeof t)throw new D("Graph.someNode: expecting a callback.");for(var e,n,i=this._nodes.values();!0!==(e=i.next()).done;)if(t((n=e.value).key,n.attributes))return!0;return!1},r.everyNode=function(t){if("function"!=typeof t)throw new D("Graph.everyNode: expecting a callback.");for(var e,n,i=this._nodes.values();!0!==(e=i.next()).done;)if(!t((n=e.value).key,n.attributes))return!1;return!0},r.filterNodes=function(t){if("function"!=typeof t)throw new D("Graph.filterNodes: expecting a callback.");for(var e,n,i=this._nodes.values(),r=[];!0!==(e=i.next()).done;)t((n=e.value).key,n.attributes)&&r.push(n.key);return r},r.reduceNodes=function(t,e){if("function"!=typeof t)throw new D("Graph.reduceNodes: expecting a callback.");if(arguments.length<2)throw new D("Graph.reduceNodes: missing initial value. You must provide it because the callback takes more than one argument and we cannot infer the initial value from the first iteration, as you could with a simple array.");for(var n,i,r=e,o=this._nodes.values();!0!==(n=o.next()).done;)r=t(r,(i=n.value).key,i.attributes);return r},r.nodeEntries=function(){var t=this._nodes.values();return new N((function(){var e=t.next();if(e.done)return e;var n=e.value;return{value:{node:n.key,attributes:n.attributes},done:!1}}))},r.export=function(){var t=this,e=new Array(this._nodes.size),n=0;this._nodes.forEach((function(t,i){e[n++]=function(t,e){var n={key:t};return h(e.attributes)||(n.attributes=a({},e.attributes)),n}(i,t)}));var i=new Array(this._edges.size);return n=0,this._edges.forEach((function(e,r){i[n++]=function(t,e,n){var i={key:e,source:n.source.key,target:n.target.key};return h(n.attributes)||(i.attributes=a({},n.attributes)),"mixed"===t&&n.undirected&&(i.undirected=!0),i}(t.type,r,e)})),{options:{type:this.type,multi:this.multi,allowSelfLoops:this.allowSelfLoops},attributes:this.getAttributes(),nodes:e,edges:i}},r.import=function(t){var e,n,r,o,s,a=this,l=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(t instanceof i)return t.forEachNode((function(t,e){l?a.mergeNode(t,e):a.addNode(t,e)})),t.forEachEdge((function(t,e,n,i,r,o,s){l?s?a.mergeUndirectedEdgeWithKey(t,n,i,e):a.mergeDirectedEdgeWithKey(t,n,i,e):s?a.addUndirectedEdgeWithKey(t,n,i,e):a.addDirectedEdgeWithKey(t,n,i,e)})),this;if(!c(t))throw new D("Graph.import: invalid argument. Expecting a serialized graph or, alternatively, a Graph instance.");if(t.attributes){if(!c(t.attributes))throw new D("Graph.import: invalid attributes. Expecting a plain object.");l?this.mergeAttributes(t.attributes):this.replaceAttributes(t.attributes)}if(t.nodes){if(r=t.nodes,!Array.isArray(r))throw new D("Graph.import: invalid nodes. Expecting an array.");for(e=0,n=r.length;e<n;e++){gt(o=r[e]);var h=o,u=h.key,d=h.attributes;l?this.mergeNode(u,d):this.addNode(u,d)}}if(t.edges){var p=!1;if("undirected"===this.type&&(p=!0),r=t.edges,!Array.isArray(r))throw new D("Graph.import: invalid edges. Expecting an array.");for(e=0,n=r.length;e<n;e++){yt(s=r[e]);var m=s,f=m.source,g=m.target,y=m.attributes,b=m.undirected,v=void 0===b?p:b;"key"in s?(l?v?this.mergeUndirectedEdgeWithKey:this.mergeDirectedEdgeWithKey:v?this.addUndirectedEdgeWithKey:this.addDirectedEdgeWithKey).call(this,s.key,f,g,y):(l?v?this.mergeUndirectedEdge:this.mergeDirectedEdge:v?this.addUndirectedEdge:this.addDirectedEdge).call(this,f,g,y)}}return this},r.nullCopy=function(t){var e=new i(a({},this._options,t));return e.replaceAttributes(a({},this.getAttributes())),e},r.emptyCopy=function(t){var e=this.nullCopy(t);return this._nodes.forEach((function(t,n){var i=a({},t.attributes);t=new e.NodeDataClass(n,i),e._nodes.set(n,t)})),e},r.copy=function(t){if("string"==typeof(t=t||{}).type&&t.type!==this.type&&"mixed"!==t.type)throw new j('Graph.copy: cannot create an incompatible copy from "'.concat(this.type,'" type to "').concat(t.type,'" because this would mean losing information about the current graph.'));if("boolean"==typeof t.multi&&t.multi!==this.multi&&!0!==t.multi)throw new j("Graph.copy: cannot create an incompatible copy by downgrading a multi graph to a simple one because this would mean losing information about the current graph.");if("boolean"==typeof t.allowSelfLoops&&t.allowSelfLoops!==this.allowSelfLoops&&!0!==t.allowSelfLoops)throw new j("Graph.copy: cannot create an incompatible copy from a graph allowing self loops to one that does not because this would mean losing information about the current graph.");for(var e,n,i=this.emptyCopy(t),r=this._edges.values();!0!==(e=r.next()).done;)xt(i,"copy",!1,(n=e.value).undirected,n.key,n.source.key,n.target.key,a({},n.attributes));return i},r.toJSON=function(){return this.export()},r.toString=function(){return"[object Graph]"},r.inspect=function(){var e=this,n={};this._nodes.forEach((function(t,e){n[e]=t.attributes}));var i={},r={};this._edges.forEach((function(t,n){var o,s=t.undirected?"--":"->",a="",l=t.source.key,c=t.target.key;t.undirected&&l>c&&(o=l,l=c,c=o);var h="(".concat(l,")").concat(s,"(").concat(c,")");n.startsWith("geid_")?e.multi&&(void 0===r[h]?r[h]=0:r[h]++,a+="".concat(r[h],". ")):a+="[".concat(n,"]: "),i[a+=h]=t.attributes}));var o={};for(var s in this)this.hasOwnProperty(s)&&!Ct.has(s)&&"function"!=typeof this[s]&&"symbol"!==t(s)&&(o[s]=this[s]);return o.attributes=this._attributes,o.nodes=n,o.edges=i,u(o,"constructor",this.constructor),o},i}(f.exports.EventEmitter);"undefined"!=typeof Symbol&&(_t.prototype[Symbol.for("nodejs.util.inspect.custom")]=_t.prototype.inspect),[{name:function(t){return"".concat(t,"Edge")},generateKey:!0},{name:function(t){return"".concat(t,"DirectedEdge")},generateKey:!0,type:"directed"},{name:function(t){return"".concat(t,"UndirectedEdge")},generateKey:!0,type:"undirected"},{name:function(t){return"".concat(t,"EdgeWithKey")}},{name:function(t){return"".concat(t,"DirectedEdgeWithKey")},type:"directed"},{name:function(t){return"".concat(t,"UndirectedEdgeWithKey")},type:"undirected"}].forEach((function(t){["add","merge","update"].forEach((function(e){var n=t.name(e),i="add"===e?xt:Et;t.generateKey?_t.prototype[n]=function(r,o,s){return i(this,n,!0,"undirected"===(t.type||this.type),null,r,o,s,"update"===e)}:_t.prototype[n]=function(r,o,s,a){return i(this,n,!1,"undirected"===(t.type||this.type),r,o,s,a,"update"===e)}}))})),function(t){K.forEach((function(e){var n=e.name,i=e.attacher;i(t,n("Node"),0),i(t,n("Source"),1),i(t,n("Target"),2),i(t,n("Opposite"),3)}))}(_t),function(t){Z.forEach((function(e){var n=e.name,i=e.attacher;i(t,n("Edge"),"mixed"),i(t,n("DirectedEdge"),"directed"),i(t,n("UndirectedEdge"),"undirected")}))}(_t),function(t){tt.forEach((function(e){!function(t,e){var n=e.name,i=e.type,r=e.direction;t.prototype[n]=function(t,e){if("mixed"!==i&&"mixed"!==this.type&&i!==this.type)return[];if(!arguments.length)return function(t,e){if(0===t.size)return[];if("mixed"===e||e===t.type)return"function"==typeof Array.from?Array.from(t._edges.keys()):H(t._edges.keys(),t._edges.size);for(var n,i,r="undirected"===e?t.undirectedSize:t.directedSize,o=new Array(r),s="undirected"===e,a=t._edges.values(),l=0;!0!==(n=a.next()).done;)(i=n.value).undirected===s&&(o[l++]=i.key);return o}(this,i);if(1===arguments.length){t=""+t;var o=this._nodes.get(t);if(void 0===o)throw new V("Graph.".concat(n,': could not find the "').concat(t,'" node in the graph.'));return function(t,e,n,i){var r=[];return lt(!1,t,e,n,i,(function(t){r.push(t)})),r}(this.multi,"mixed"===i?this.type:i,r,o)}if(2===arguments.length){t=""+t,e=""+e;var s=this._nodes.get(t);if(!s)throw new V("Graph.".concat(n,': could not find the "').concat(t,'" source node in the graph.'));if(!this._nodes.has(e))throw new V("Graph.".concat(n,': could not find the "').concat(e,'" target node in the graph.'));return function(t,e,n,i,r){var o=[];return ct(!1,t,e,n,i,r,(function(t){o.push(t)})),o}(i,this.multi,r,s,e)}throw new D("Graph.".concat(n,": too many arguments (expecting 0, 1 or 2 and got ").concat(arguments.length,")."))}}(t,e),function(t,e){var n=e.name,i=e.type,r=e.direction,o="forEach"+n[0].toUpperCase()+n.slice(1,-1);t.prototype[o]=function(t,e,n){if("mixed"===i||"mixed"===this.type||i===this.type){if(1===arguments.length)return at(!1,this,i,n=t);if(2===arguments.length){t=""+t,n=e;var s=this._nodes.get(t);if(void 0===s)throw new V("Graph.".concat(o,': could not find the "').concat(t,'" node in the graph.'));return lt(!1,this.multi,"mixed"===i?this.type:i,r,s,n)}if(3===arguments.length){t=""+t,e=""+e;var a=this._nodes.get(t);if(!a)throw new V("Graph.".concat(o,': could not find the "').concat(t,'" source node in the graph.'));if(!this._nodes.has(e))throw new V("Graph.".concat(o,': could not find the "').concat(e,'" target node in the graph.'));return ct(!1,i,this.multi,r,a,e,n)}throw new D("Graph.".concat(o,": too many arguments (expecting 1, 2 or 3 and got ").concat(arguments.length,")."))}};var s="map"+n[0].toUpperCase()+n.slice(1);t.prototype[s]=function(){var t,e=Array.prototype.slice.call(arguments),n=e.pop();if(0===e.length){var r=0;"directed"!==i&&(r+=this.undirectedSize),"undirected"!==i&&(r+=this.directedSize),t=new Array(r);var s=0;e.push((function(e,i,r,o,a,l,c){t[s++]=n(e,i,r,o,a,l,c)}))}else t=[],e.push((function(e,i,r,o,s,a,l){t.push(n(e,i,r,o,s,a,l))}));return this[o].apply(this,e),t};var a="filter"+n[0].toUpperCase()+n.slice(1);t.prototype[a]=function(){var t=Array.prototype.slice.call(arguments),e=t.pop(),n=[];return t.push((function(t,i,r,o,s,a,l){e(t,i,r,o,s,a,l)&&n.push(t)})),this[o].apply(this,t),n};var l="reduce"+n[0].toUpperCase()+n.slice(1);t.prototype[l]=function(){var t,e,n=Array.prototype.slice.call(arguments);if(n.length<2||n.length>4)throw new D("Graph.".concat(l,": invalid number of arguments (expecting 2, 3 or 4 and got ").concat(n.length,")."));if("function"==typeof n[n.length-1]&&"function"!=typeof n[n.length-2])throw new D("Graph.".concat(l,": missing initial value. You must provide it because the callback takes more than one argument and we cannot infer the initial value from the first iteration, as you could with a simple array."));2===n.length?(t=n[0],e=n[1],n=[]):3===n.length?(t=n[1],e=n[2],n=[n[0]]):4===n.length&&(t=n[2],e=n[3],n=[n[0],n[1]]);var i=e;return n.push((function(e,n,r,o,s,a,l){i=t(i,e,n,r,o,s,a,l)})),this[o].apply(this,n),i}}(t,e),function(t,e){var n=e.name,i=e.type,r=e.direction,o="find"+n[0].toUpperCase()+n.slice(1,-1);t.prototype[o]=function(t,e,n){if("mixed"!==i&&"mixed"!==this.type&&i!==this.type)return!1;if(1===arguments.length)return at(!0,this,i,n=t);if(2===arguments.length){t=""+t,n=e;var s=this._nodes.get(t);if(void 0===s)throw new V("Graph.".concat(o,': could not find the "').concat(t,'" node in the graph.'));return lt(!0,this.multi,"mixed"===i?this.type:i,r,s,n)}if(3===arguments.length){t=""+t,e=""+e;var a=this._nodes.get(t);if(!a)throw new V("Graph.".concat(o,': could not find the "').concat(t,'" source node in the graph.'));if(!this._nodes.has(e))throw new V("Graph.".concat(o,': could not find the "').concat(e,'" target node in the graph.'));return ct(!0,i,this.multi,r,a,e,n)}throw new D("Graph.".concat(o,": too many arguments (expecting 1, 2 or 3 and got ").concat(arguments.length,")."))};var s="some"+n[0].toUpperCase()+n.slice(1,-1);t.prototype[s]=function(){var t=Array.prototype.slice.call(arguments),e=t.pop();return t.push((function(t,n,i,r,o,s,a){return e(t,n,i,r,o,s,a)})),!!this[o].apply(this,t)};var a="every"+n[0].toUpperCase()+n.slice(1,-1);t.prototype[a]=function(){var t=Array.prototype.slice.call(arguments),e=t.pop();return t.push((function(t,n,i,r,o,s,a){return!e(t,n,i,r,o,s,a)})),!this[o].apply(this,t)}}(t,e),function(t,e){var n=e.name,i=e.type,r=e.direction,o=n.slice(0,-1)+"Entries";t.prototype[o]=function(t,e){if("mixed"!==i&&"mixed"!==this.type&&i!==this.type)return N.empty();if(!arguments.length)return function(t,e){if(0===t.size)return N.empty();var n="mixed"!==e&&e!==t.type,i="undirected"===e,r=t._edges.values();return new N((function(){for(var t,e;;){if((t=r.next()).done)return t;if(e=t.value,!n||e.undirected===i)break}return{value:{edge:e.key,attributes:e.attributes,source:e.source.key,target:e.target.key,sourceAttributes:e.source.attributes,targetAttributes:e.target.attributes,undirected:e.undirected},done:!1}}))}(this,i);if(1===arguments.length){t=""+t;var n=this._nodes.get(t);if(!n)throw new V("Graph.".concat(o,': could not find the "').concat(t,'" node in the graph.'));return function(t,e,n){var i=N.empty();return"undirected"!==t&&("out"!==e&&void 0!==n.in&&(i=Q(i,it(n.in))),"in"!==e&&void 0!==n.out&&(i=Q(i,it(n.out,e?void 0:n.key)))),"directed"!==t&&void 0!==n.undirected&&(i=Q(i,it(n.undirected))),i}(i,r,n)}if(2===arguments.length){t=""+t,e=""+e;var s=this._nodes.get(t);if(!s)throw new V("Graph.".concat(o,': could not find the "').concat(t,'" source node in the graph.'));if(!this._nodes.has(e))throw new V("Graph.".concat(o,': could not find the "').concat(e,'" target node in the graph.'));return function(t,e,n,i){var r=N.empty();return"undirected"!==t&&(void 0!==n.in&&"out"!==e&&i in n.in&&(r=Q(r,st(n.in,i))),void 0!==n.out&&"in"!==e&&i in n.out&&(e||n.key!==i)&&(r=Q(r,st(n.out,i)))),"directed"!==t&&void 0!==n.undirected&&i in n.undirected&&(r=Q(r,st(n.undirected,i))),r}(i,r,s,e)}throw new D("Graph.".concat(o,": too many arguments (expecting 0, 1 or 2 and got ").concat(arguments.length,")."))}}(t,e)}))}(_t),function(t){ht.forEach((function(e){(function(t,e){var n=e.name,i=e.type,r=e.direction;t.prototype[n]=function(t){if("mixed"!==i&&"mixed"!==this.type&&i!==this.type)return[];t=""+t;var e=this._nodes.get(t);if(void 0===e)throw new V("Graph.".concat(n,': could not find the "').concat(t,'" node in the graph.'));return function(t,e,n){if("mixed"!==t){if("undirected"===t)return Object.keys(n.undirected);if("string"==typeof e)return Object.keys(n[e])}var i=[];return pt(!1,t,e,n,(function(t){i.push(t)})),i}("mixed"===i?this.type:i,r,e)}})(t,e),function(t,e){var n=e.name,i=e.type,r=e.direction,o="forEach"+n[0].toUpperCase()+n.slice(1,-1);t.prototype[o]=function(t,e){if("mixed"===i||"mixed"===this.type||i===this.type){t=""+t;var n=this._nodes.get(t);if(void 0===n)throw new V("Graph.".concat(o,': could not find the "').concat(t,'" node in the graph.'));pt(!1,"mixed"===i?this.type:i,r,n,e)}};var s="map"+n[0].toUpperCase()+n.slice(1);t.prototype[s]=function(t,e){var n=[];return this[o](t,(function(t,i){n.push(e(t,i))})),n};var a="filter"+n[0].toUpperCase()+n.slice(1);t.prototype[a]=function(t,e){var n=[];return this[o](t,(function(t,i){e(t,i)&&n.push(t)})),n};var l="reduce"+n[0].toUpperCase()+n.slice(1);t.prototype[l]=function(t,e,n){if(arguments.length<3)throw new D("Graph.".concat(l,": missing initial value. You must provide it because the callback takes more than one argument and we cannot infer the initial value from the first iteration, as you could with a simple array."));var i=n;return this[o](t,(function(t,n){i=e(i,t,n)})),i}}(t,e),function(t,e){var n=e.name,i=e.type,r=e.direction,o=n[0].toUpperCase()+n.slice(1,-1),s="find"+o;t.prototype[s]=function(t,e){if("mixed"===i||"mixed"===this.type||i===this.type){t=""+t;var n=this._nodes.get(t);if(void 0===n)throw new V("Graph.".concat(s,': could not find the "').concat(t,'" node in the graph.'));return pt(!0,"mixed"===i?this.type:i,r,n,e)}};var a="some"+o;t.prototype[a]=function(t,e){return!!this[s](t,e)};var l="every"+o;t.prototype[l]=function(t,e){return!this[s](t,(function(t,n){return!e(t,n)}))}}(t,e),function(t,e){var n=e.name,i=e.type,r=e.direction,o=n.slice(0,-1)+"Entries";t.prototype[o]=function(t){if("mixed"!==i&&"mixed"!==this.type&&i!==this.type)return N.empty();t=""+t;var e=this._nodes.get(t);if(void 0===e)throw new V("Graph.".concat(o,': could not find the "').concat(t,'" node in the graph.'));return function(t,e,n){if("mixed"!==t){if("undirected"===t)return mt(null,n,n.undirected);if("string"==typeof e)return mt(null,n,n[e])}var i=N.empty(),r=new ut;return"undirected"!==t&&("out"!==e&&(i=Q(i,mt(r,n,n.in))),"in"!==e&&(i=Q(i,mt(r,n,n.out)))),"directed"!==t&&(i=Q(i,mt(r,n,n.undirected))),i}("mixed"===i?this.type:i,r,e)}}(t,e)}))}(_t);var It=function(t){function n(e){var n=a({type:"directed"},e);if("multi"in n&&!1!==n.multi)throw new D("DirectedGraph.from: inconsistent indication that the graph should be multi in given options!");if("directed"!==n.type)throw new D('DirectedGraph.from: inconsistent "'+n.type+'" type in given options!');return t.call(this,n)||this}return e(n,t),n}(_t),Tt=function(t){function n(e){var n=a({type:"undirected"},e);if("multi"in n&&!1!==n.multi)throw new D("UndirectedGraph.from: inconsistent indication that the graph should be multi in given options!");if("undirected"!==n.type)throw new D('UndirectedGraph.from: inconsistent "'+n.type+'" type in given options!');return t.call(this,n)||this}return e(n,t),n}(_t),Lt=function(t){function n(e){var n=a({multi:!0},e);if("multi"in n&&!0!==n.multi)throw new D("MultiGraph.from: inconsistent indication that the graph should be simple in given options!");return t.call(this,n)||this}return e(n,t),n}(_t),Nt=function(t){function n(e){var n=a({type:"directed",multi:!0},e);if("multi"in n&&!0!==n.multi)throw new D("MultiDirectedGraph.from: inconsistent indication that the graph should be simple in given options!");if("directed"!==n.type)throw new D('MultiDirectedGraph.from: inconsistent "'+n.type+'" type in given options!');return t.call(this,n)||this}return e(n,t),n}(_t),Pt=function(t){function n(e){var n=a({type:"undirected",multi:!0},e);if("multi"in n&&!0!==n.multi)throw new D("MultiUndirectedGraph.from: inconsistent indication that the graph should be simple in given options!");if("undirected"!==n.type)throw new D('MultiUndirectedGraph.from: inconsistent "'+n.type+'" type in given options!');return t.call(this,n)||this}return e(n,t),n}(_t);function $t(t){t.from=function(e,n){var i=a({},e.options,n),r=new t(i);return r.import(e),r}}return $t(_t),$t(It),$t(Tt),$t(Lt),$t(Nt),$t(Pt),_t.Graph=_t,_t.DirectedGraph=It,_t.UndirectedGraph=Tt,_t.MultiGraph=Lt,_t.MultiDirectedGraph=Nt,_t.MultiUndirectedGraph=Pt,_t.InvalidArgumentsGraphError=D,_t.NotFoundGraphError=V,_t.UsageGraphError=j,_t}()},944:(t,e)=>{"use strict";e.Vb=void 0,e.Vb=function(t,e,n){var i=function(t,e,n){if(0===t.length||0===e.length)return 0;if(n&&!n.caseSensitive&&(t=t.toUpperCase(),e=e.toUpperCase()),t===e)return 1;for(var i=0,r=t.length,o=e.length,s=Math.floor(Math.max(r,o)/2)-1,a=new Array(r),l=new Array(o),c=0;c<r;c++)for(var h=Math.max(0,c-s);h<=Math.min(o,c+s+1);h++)if(!a[c]&&!l[h]&&t[c]===e[h]){++i,a[c]=l[h]=!0;break}if(0===i)return 0;var u=0,d=0;for(c=0;c<r;c++)if(a[c]){for(;!l[d];)d++;t.charAt(c)!==e.charAt(d++)&&u++}return(i/r+i/o+(i-(u/=2))/i)/3}(t,e,n),r=0;if(i>.7){for(var o=Math.min(t.length,e.length),s=0;t[s]===e[s]&&s<4&&s<o;)++r,s++;i+=.1*r*(1-i)}return i}},7106:t=>{"use strict";var e=t.exports=function(t,e,i){"function"==typeof e&&(i=e,e={}),n(e,"function"==typeof(i=e.cb||i)?i:i.pre||function(){},i.post||function(){},t,"",t)};function n(t,i,r,o,s,a,l,c,h,u){if(o&&"object"==typeof o&&!Array.isArray(o)){for(var d in i(o,s,a,l,c,h,u),o){var p=o[d];if(Array.isArray(p)){if(d in e.arrayKeywords)for(var m=0;m<p.length;m++)n(t,i,r,p[m],s+"/"+d+"/"+m,a,s,d,o,m)}else if(d in e.propsKeywords){if(p&&"object"==typeof p)for(var f in p)n(t,i,r,p[f],s+"/"+d+"/"+f.replace(/~/g,"~0").replace(/\//g,"~1"),a,s,d,o,f)}else(d in e.keywords||t.allKeys&&!(d in e.skipKeywords))&&n(t,i,r,p,s+"/"+d,a,s,d,o)}r(o,s,a,l,c,h,u)}}e.keywords={additionalItems:!0,items:!0,contains:!0,additionalProperties:!0,propertyNames:!0,not:!0,if:!0,then:!0,else:!0},e.arrayKeywords={items:!0,allOf:!0,anyOf:!0,oneOf:!0},e.propsKeywords={$defs:!0,definitions:!0,properties:!0,patternProperties:!0,dependencies:!0},e.skipKeywords={default:!0,enum:!0,const:!0,required:!0,maximum:!0,minimum:!0,exclusiveMaximum:!0,exclusiveMinimum:!0,multipleOf:!0,maxLength:!0,minLength:!0,pattern:!0,format:!0,maxItems:!0,minItems:!0,uniqueItems:!0,maxProperties:!0,minProperties:!0}},5072:t=>{"use strict";var e=[];function n(t){for(var n=-1,i=0;i<e.length;i++)if(e[i].identifier===t){n=i;break}return n}function i(t,i){for(var o={},s=[],a=0;a<t.length;a++){var l=t[a],c=i.base?l[0]+i.base:l[0],h=o[c]||0,u="".concat(c," ").concat(h);o[c]=h+1;var d=n(u),p={css:l[1],media:l[2],sourceMap:l[3],supports:l[4],layer:l[5]};if(-1!==d)e[d].references++,e[d].updater(p);else{var m=r(p,i);i.byIndex=a,e.splice(a,0,{identifier:u,updater:m,references:1})}s.push(u)}return s}function r(t,e){var n=e.domAPI(e);return n.update(t),function(e){if(e){if(e.css===t.css&&e.media===t.media&&e.sourceMap===t.sourceMap&&e.supports===t.supports&&e.layer===t.layer)return;n.update(t=e)}else n.remove()}}t.exports=function(t,r){var o=i(t=t||[],r=r||{});return function(t){t=t||[];for(var s=0;s<o.length;s++){var a=n(o[s]);e[a].references--}for(var l=i(t,r),c=0;c<o.length;c++){var h=n(o[c]);0===e[h].references&&(e[h].updater(),e.splice(h,1))}o=l}}},7659:t=>{"use strict";var e={};t.exports=function(t,n){var i=function(t){if(void 0===e[t]){var n=document.querySelector(t);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement)try{n=n.contentDocument.head}catch(t){n=null}e[t]=n}return e[t]}(t);if(!i)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");i.appendChild(n)}},540:t=>{"use strict";t.exports=function(t){var e=document.createElement("style");return t.setAttributes(e,t.attributes),t.insert(e,t.options),e}},5056:(t,e,n)=>{"use strict";t.exports=function(t){var e=n.nc;e&&t.setAttribute("nonce",e)}},7825:t=>{"use strict";t.exports=function(t){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var e=t.insertStyleElement(t);return{update:function(n){!function(t,e,n){var i="";n.supports&&(i+="@supports (".concat(n.supports,") {")),n.media&&(i+="@media ".concat(n.media," {"));var r=void 0!==n.layer;r&&(i+="@layer".concat(n.layer.length>0?" ".concat(n.layer):""," {")),i+=n.css,r&&(i+="}"),n.media&&(i+="}"),n.supports&&(i+="}");var o=n.sourceMap;o&&"undefined"!=typeof btoa&&(i+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(o))))," */")),e.styleTagTransform(i,t,e.options)}(e,t,n)},remove:function(){!function(t){if(null===t.parentNode)return!1;t.parentNode.removeChild(t)}(e)}}}},1113:t=>{"use strict";t.exports=function(t,e){if(e.styleSheet)e.styleSheet.cssText=t;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(t))}}},1407:(t,e,n)=>{"use strict";n.d(e,{R:()=>a});var i=n(4328),r=n(6082),o=n(439);const s=31;async function a(t,e,n=!1,o){const a=e.getSeqHandler(t);let c;o??=new Map;const h=a.isHelm()?e.getSeqMonomers(t):Object.keys(a.stats.freq).filter((t=>""!==t));for(let t=0;t<h.length;t++)o.has(h[t])||o.set(h[t],`${o.size+1}`);if(a.isHelm())c=await i.functions.call("HELM:getMolFiles",{col:t}),c=function(t,e,n=!1){const i=new Array(t.length);for(let r=0;r<t.length;r++){let o=0,a=0,l="\n Datagrok macromolecule handler\n\n 0 0 0 0 0 0 999 V3000\nM V30 BEGIN CTAB\n";const c=t.get(r);o=c.indexOf("\n",o)+1,o=c.indexOf("\n",o)+1,o=c.indexOf("\n",o)+1;const h=parseInt(c.substring(o,o+3)),u=parseInt(c.substring(o+3,o+6));l+=`M V30 COUNTS ${h} ${u} 0 0 0\n`,l+="M V30 BEGIN ATOM\n";for(let t=0;t<h;t++){o=c.indexOf("\n",o)+1+s,a=c.indexOf(" ",o);const i=c.substring(o,a);l+=n?`M V30 ${t+1} R${e.get(i)} 0.000 0.000 0 0\n`:`M V30 ${t+1} At 0.000 0.000 0 0 MASS=${e.get(i)}\n`}l+="M V30 END ATOM\n",l+="M V30 BEGIN BOND\n";for(let t=0;t<u;t++){o=c.indexOf("\n",o)+1;const e=parseInt(c.substring(o,o+3).trim()),n=parseInt(c.substring(o+3,o+6).trim());l+=`M V30 ${t+1} ${parseInt(c.substring(o+6,o+9).trim())} ${e} ${n}\n`}l+="M V30 END BOND\n",l+="M V30 END CTAB\n",l+="M END",i[r]=l}return i}(c,o,n);else{c=new Array(t.length);for(let e=0;e<t.length;e++){const t=l(a.getSplitted(e),o,n);c[e]=t}}return r.Column.fromStrings("monomericMols",c)}function l(t,e,n=!1){let i="\n Datagrok macromolecule handler\n\n 0 0 0 0 0 0 999 V3000\nM V30 BEGIN CTAB\n";i+=`M V30 COUNTS ${t.length} ${t.length?t.length-1:0} 0 0 0\n`,i+="M V30 BEGIN ATOM\n";for(let r=0;r<t.length;r++){const s=t.getCanonical(r);s!==o._S&&(i+=n?`M V30 ${r+1} R${e.get(s)} 0.000 0.000 0 0\n`:`M V30 ${r+1} At 0.000 0.000 0 0 MASS=${e.get(s)}\n`)}i+="M V30 END ATOM\n",i+="M V30 BEGIN BOND\n";for(let e=0;e<t.length-1;e++)i+=`M V30 ${e+1} 1 ${e+1} ${e+2}\n`;return i+="M V30 END BOND\n",i+="M V30 END CTAB\n",i+="M END",i}},6766:(t,e,n)=>{"use strict";n.r(e),n.d(e,{GetRegionEditor:()=>Xi,SeqActivityCliffsEditor:()=>tr,SeqPaletteCustom:()=>ji,SequenceSpaceEditor:()=>Qi,SplitToMonomersEditor:()=>Ji,SubsequenceSearchTopMenu:()=>Or,_package:()=>Di,activityCliffs:()=>dr,addCopyMenu:()=>Qr,alignSequences:()=>wr,bioSubstructureFilter:()=>Ur,bioSubstructureFilterTest:()=>Wr,compositionAnalysis:()=>Cr,compositionAnalysisWidget:()=>or,convertColumnAction:()=>Er,convertDialog:()=>xr,customSequenceCellRenderer:()=>er,demoBioActivityCliffs:()=>no,demoBioAtomicLevel:()=>io,demoBioSequenceSpace:()=>eo,demoBioSimilarityDiversity:()=>to,detectMacromoleculeProbe:()=>ao,diversitySearchTopMenu:()=>$r,diversitySearchViewer:()=>Pr,fastaSequenceCellRenderer:()=>nr,getBioLib:()=>zi,getHelmMonomers:()=>Tr,getMolFromHelm:()=>co,getMonomerLibHelper:()=>Vi,getRegion:()=>hr,getRegionApp:()=>Yr,getRegionHelmApp:()=>Kr,getRegionPanel:()=>Ki,getRegionTopMenu:()=>ur,getSeqHandler:()=>Yi,getSeqHelper:()=>lo,helmPreprocessingFunction:()=>mr,importBam:()=>Sr,importFasta:()=>Ar,initBio:()=>Wi,libraryPanel:()=>Zi,longSeqTableFasta:()=>Xr,longSeqTableHelm:()=>Jr,longSeqTableSeparator:()=>Zr,macroMolColumnPropertyPanel:()=>rr,macromoleculeDifferenceCellRenderer:()=>sr,macromoleculePreprocessingFunction:()=>pr,manageLibrariesApp:()=>Dr,manageLibrariesAppTreeBrowser:()=>Vr,manageLibrariesView:()=>Hr,manageMonomerLibraries:()=>Fr,manageMonomersView:()=>Br,monomerCellRenderer:()=>Mr,multipleSequenceAlignmentDialog:()=>vr,saveAsFasta:()=>jr,sdfToJsonLib:()=>ro,searchSubsequenceEditor:()=>Rr,separatorSequenceCellRenderer:()=>ir,seq2atomic:()=>oo,seqIdentity:()=>so,sequenceAlignment:()=>ar,sequenceIdentityScoring:()=>kr,sequenceSimilarityScoring:()=>Gr,sequenceSpaceTopMenu:()=>fr,sequenceTooltip:()=>qi,similaritySearchTopMenu:()=>Nr,similaritySearchViewer:()=>Lr,splitToMonomersTopMenu:()=>Ir,test1:()=>ho,testDetectMacromolecule:()=>_r,toAtomicLevel:()=>gr,toAtomicLevelAction:()=>yr,toAtomicLevelPanel:()=>br,vdRegionsViewer:()=>cr,webLogoAggApp:()=>zr,webLogoLargeApp:()=>qr,webLogoViewer:()=>lr});var i,r,o=n(4328),s=n(7389),a=n(6082),l=n(684),c=n(9039);(r=i||(i={})).EUCLIDEAN="EUCLIDEAN",r.MANHATTAN="MANHATTAN";var h=n(1858),u=n(5072),d=n.n(u),p=n(7825),m=n.n(p),f=n(7659),g=n.n(f),y=n(5056),b=n.n(y),v=n(540),w=n.n(v),C=n(1113),A=n.n(C),S=n(7939),x={};x.styleTagTransform=A(),x.setAttributes=b(),x.insert=g().bind(null,"head"),x.domAPI=m(),x.insertStyleElement=w(),d()(S.A,x),S.A&&S.A.locals&&S.A.locals;var E=function(t,e,n,i){return new(n||(n=Promise))((function(r,o){function s(t){try{l(i.next(t))}catch(t){o(t)}}function a(t){try{l(i.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?r(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,a)}l((i=i.apply(t,e||[])).next())}))};let M=null,_=null;function I(t,e){return t&&""!=t?t:e}n(2780);class T{constructor(){this.learningRate={uiName:"Learninig rate",value:1,tooltip:"The initial learning rate for the embedding optimization"},this.nEpochs={uiName:"Epochs",value:0,tooltip:"The number of epochs to optimize embeddings via SGD. Computed automatically if set to 0"},this.nNeighbors={uiName:"Neighbors",value:15,tooltip:"The number of nearest neighbors to construct the fuzzy manifold"},this.spread={uiName:"Spread",value:1,tooltip:"The effective scale of embedded points, used with min distance to control \n the clumped/dispersed nature of the embedding"},this.minDist={uiName:"Min distance",value:.1,tooltip:"The effective minimum distance between embedded points, \n used with spread to control the clumped/dispersed nature of the embedding"},this.randomSeed={uiName:"Random seed",value:null,tooltip:"Random seed",type:"string"},this.useWebGPU={uiName:"Use WebGPU",value:!1,tooltip:"Use WebGPU for Distance and UMAP computations",type:"boolean",disableTooltip:"WebGPU is not available"},function(){return E(this,void 0,void 0,(function*(){if(!navigator.gpu)return console.error("WebGPU is not supported in this browser"),null;if(!M&&(M=yield navigator.gpu.requestAdapter(),null==M))return null;let t=null;return"info"in M&&(t=M.info),t?I(t.description,I(t.vendor,"No GPU description available")):"No GPU description available"}))}().then((t=>{t?(this.useWebGPU.tooltip+=` (${t})`,this.useWebGPU.value=!0):(this.useWebGPU.value=!1,this.useWebGPU.disable=!0)}))}}class L{constructor(){this.epsilon={uiName:"Epsilon",value:10,tooltip:"Epsilon is learning rate"},this.perplexity={uiName:"Perplexity",value:30,tooltip:"Roughly how many neighbors each point influences"}}}Promise.resolve(),n(934),n(8903);const N="MCL";a.SEMTYPE.MOLECULE,a.SEMTYPE.MACROMOLECULE;class P{constructor(){this.epsilon={uiName:"Epsilon",value:.01,tooltip:"Minimum distance between cluster points",min:0,max:2,step:.005},this.minPts={uiName:"Minimum points",value:4,tooltip:"Minimum number of points in cluster",min:1,max:1e3,step:1}}}class ${get algorithmOptions(){const t=this.methodsParams[this.methodInput.value],e={};return Object.keys(t).forEach((n=>{null!=t[n].value&&(e[n]=t[n].value)})),e}get dbScanOptions(){return{dbScanEpsilon:this.dbScanParams.epsilon.value??.01,dbScanMinPts:this.dbScanParams.minPts.value??4}}constructor(t={}){this.editorSettings={},this.plotEmbeddingsInput=s.input.bool("Plot embeddings",{value:!0}),this.clusterEmbeddingsInput=s.input.bool("Cluster embeddings",{value:!0}),this.preprocessingFunctionInputRoot=null,this.methods=[c.c.UMAP,c.c.T_SNE],this.columnFunctionsMap={},this.supportedFunctions={},this.availableMetrics=[],this.methodSettingsDiv=s.inputs([]),this.dbScanSettingsDiv=s.inputs([]),this.preprocessingFuncSettingsDiv=s.inputs([]),this.preprocessingFunctionSettings={},this.methodsParams={[c.c.UMAP]:new T,[c.c.T_SNE]:new L},this.dbScanParams=new P,this.editorSettings=t,this.editorSettings.enableMCL&&this.methods.push(N),a.Func.find({tags:[l.GP]}).forEach((t=>{const e=t.options.get(l.n3)??"",n=t.friendlyName??t.name,i=t.options.get(l.C0)??"",r=t.options.get(l._X)??"",o=t.options.get(l.Gi)??"";this.editorSettings.semtype&&!e.includes(this.editorSettings.semtype)||this.editorSettings.type&&!i.includes(this.editorSettings.type)||this.editorSettings.units&&!r.includes(this.editorSettings.units)||(this.supportedFunctions[n]={func:t,semTypes:e?e.split(","):[],types:i?i.split(","):[],units:r?r.split(","):[],distanceFunctions:o?o.split(","):[]})})),this.tableInput=s.input.table("Table",{value:o.shell.tv.dataFrame,items:o.shell.tables,onValueChanged:()=>{this.onTableInputChanged()}}),this.onTableInputChanged(),this.regenerateColInput(),this.onColumnInputChanged();let e=!1,n=!1;this.methodInput=s.input.choice("Method",{value:c.c.UMAP,items:this.methods,onValueChanged:t=>{e&&this.createAlgorithmSettingsDiv(this.methodSettingsDiv,this.methodsParams[t])}}),this.methodSettingsIcon=s.icons.settings((()=>{e=!e,e?this.createAlgorithmSettingsDiv(this.methodSettingsDiv,this.methodsParams[this.methodInput.value]):s.empty(this.methodSettingsDiv)}),"Modify methods parameters"),this.dbScanSettingsIcon=s.icons.settings((()=>{n=!n,n?this.createAlgorithmSettingsDiv(this.dbScanSettingsDiv,this.dbScanParams):s.empty(this.dbScanSettingsDiv)}),"Modify clustering parameters"),this.clusterEmbeddingsInput.classList.add("ml-dim-reduction-settings-input"),this.clusterEmbeddingsInput.root.prepend(this.dbScanSettingsIcon),this.methodInput.root.classList.add("ml-dim-reduction-settings-input"),this.methodInput.root.prepend(this.methodSettingsIcon),this.methodSettingsDiv=s.inputs([]);const i=this.columnFunctionsMap[this.colInput.value.name];this.preprocessingFunctionInput=s.input.choice("Encoding function",{value:i[0],items:i,onValueChanged:()=>{this.onPreprocessingFunctionChanged()}});let r=!1;this.preprocessingFunctionInputRoot||(this.preprocessingFunctionInputRoot=this.preprocessingFunctionInput.root,r=!0),r||(s.empty(this.preprocessingFunctionInputRoot),Array.from(this.preprocessingFunctionInput.root.children).forEach((t=>this.preprocessingFunctionInputRoot.append(t)))),this.preprocessingFunctionInputRoot.classList.add("ml-dim-reduction-settings-input");let h=!1;this.preprocessingFuncSettingsIcon=s.icons.settings((async()=>{h?s.empty(this.preprocessingFuncSettingsDiv):await this.createPreprocessingFuncParamsDiv(this.preprocessingFuncSettingsDiv,this.supportedFunctions[this.preprocessingFunctionInput.value].func),h=!h}),"Modify encoding function parameters"),this.preprocessingFunctionInputRoot.prepend(this.preprocessingFuncSettingsIcon),this.similarityMetricInput=s.input.choice("Similarity",{value:"",items:[]}),this.similarityMetricInput.nullable=!1,this.similarityMetricInputRoot||(this.similarityMetricInputRoot=this.similarityMetricInput.root),this.onPreprocessingFunctionChanged()}getColInput(){const t=this.tableInput.value?.columns.toList().find((t=>!!this.columnFunctionsMap[t.name]))??null,e=s.input.column("Column",{table:this.tableInput.value,value:t,onValueChanged:()=>this.onColumnInputChanged(),filter:t=>!!this.columnFunctionsMap[t.name]});return this.colInputRoot||(this.colInputRoot=e.root),e}regenerateColInput(){let t=!1;this.colInputRoot&&(t=!0,s.empty(this.colInputRoot)),this.colInput=this.getColInput(),t&&Array.from(this.colInput.root.children).forEach((t=>this.colInputRoot.append(t))),this.onColumnInputChanged()}onTableInputChanged(){const t=this.tableInput.value;t&&(this.columnFunctionsMap={},t.columns.toList().forEach((t=>{Object.keys(this.supportedFunctions).forEach((e=>{const n=this.supportedFunctions[e].semTypes,i=this.supportedFunctions[e].types,r=this.supportedFunctions[e].units,o=!n.length||t.semType&&n.includes(t.semType),s=!i.length||i.includes(t.type),a=!r.length||t.meta.units&&r.includes(t.meta.units);o&&s&&a&&(this.columnFunctionsMap[t.name]||(this.columnFunctionsMap[t.name]=[]),this.columnFunctionsMap[t.name].push(e))}))})),this.regenerateColInput())}onColumnInputChanged(){const t=this.colInput.value;if(!t)return;const e=this.columnFunctionsMap[t.name];this.preprocessingFunctionInput=s.input.choice("Preprocessing function",{value:e[0],items:e,onValueChanged:()=>{this.onPreprocessingFunctionChanged()}});let n=!1;this.preprocessingFunctionInputRoot||(this.preprocessingFunctionInputRoot=this.preprocessingFunctionInput.root,n=!0),n||(s.empty(this.preprocessingFunctionInputRoot),Array.from(this.preprocessingFunctionInput.root.children).forEach((t=>this.preprocessingFunctionInputRoot.append(t)))),this.onPreprocessingFunctionChanged()}onPreprocessingFunctionChanged(){s.empty(this.preprocessingFuncSettingsDiv),this.preprocessingFunctionSettings={};const t=this.preprocessingFunctionInput.value,e=this.supportedFunctions[t].distanceFunctions;this.availableMetrics=[...e],this.similarityMetricInput=s.input.choice("Similarity",{value:this.availableMetrics[0],items:this.availableMetrics}),this.similarityMetricInput.nullable=!1,this.similarityMetricInputRoot||(this.similarityMetricInputRoot=this.similarityMetricInput.root),s.empty(this.similarityMetricInputRoot),Array.from(this.similarityMetricInput.root.children).forEach((t=>this.similarityMetricInputRoot.append(t))),this.preprocessingFuncSettingsIcon&&(this.supportedFunctions[t].func.inputs.length<3?this.preprocessingFuncSettingsIcon.style.display="none":this.preprocessingFuncSettingsIcon.style.display="flex")}createAlgorithmSettingsDiv(t,e){return s.empty(t),Object.keys(e).forEach((n=>{const i=e[n],r="string"===i.type?s.input.string(i.uiName,{value:i.value??"",onValueChanged:t=>{i.value=t}}):"boolean"===i.type?s.input.bool(i.uiName,{value:i.value??!1,onValueChanged:t=>{i.value=t}}):s.input.float(i.uiName,{value:i.value,onValueChanged:t=>{i.value=t}});t.append(r.root),i.disable?(r.enabled=!1,s.tooltip.bind(r.input??r.root,i.disableTooltip??"")):s.tooltip.bind(r.input??r.root,i.tooltip)})),t}async createPreprocessingFuncParamsDiv(t,e){if(s.empty(t),e.inputs.length<3)return s.div();const n=e.prepare(),i=await n.buildEditor(s.div());for(let r=2;r<e.inputs.length;r++){const o=e.inputs[r];(this.preprocessingFunctionSettings[o.name]||n.inputParams[e.inputs[r].name].value||o.defaultValue)&&(this.preprocessingFunctionSettings[o.name]=this.preprocessingFunctionSettings[o.name]??n.inputParams[o.name].value??o.defaultValue);const s=i.find((t=>t.property.name===o.name));s&&(null!==this.preprocessingFunctionSettings[o.name]&&void 0!==this.preprocessingFunctionSettings[o.name]&&(s.value=this.preprocessingFunctionSettings[o.name]),s.onChanged.subscribe((t=>{this.preprocessingFunctionSettings[o.name]=t})),t.append(s.root))}return t}getEditor(){return s.div([this.tableInput,this.colInputRoot,this.preprocessingFunctionInputRoot,this.preprocessingFuncSettingsDiv,this.methodInput,this.methodSettingsDiv,this.similarityMetricInputRoot,this.plotEmbeddingsInput,this.clusterEmbeddingsInput,this.dbScanSettingsDiv],{style:{minWidth:"420px"},classes:"ui-form dim-reduction-dialog-form"})}getParams(){return{table:this.tableInput.value,col:this.colInput.value,methodName:this.methodInput.value,preprocessingFunction:this.supportedFunctions[this.preprocessingFunctionInput.value].func,similarityMetric:this.similarityMetricInput.value,plotEmbeddings:this.plotEmbeddingsInput.value,clusterEmbeddings:this.clusterEmbeddingsInput.value,options:{...this.algorithmOptions,...this.dbScanOptions,preprocessingFuncArgs:this.preprocessingFunctionSettings??{}}}}getInput(){return{table:this.tableInput.value.name,col:this.colInput.value.name,methodName:this.methodInput.value,preprocessingFunction:this.preprocessingFunctionInput.value,similarityMetric:this.similarityMetricInput.value,plotEmbeddings:this.plotEmbeddingsInput.value,clusterEmbeddings:this.clusterEmbeddingsInput.value,options:{...this.algorithmOptions,...this.dbScanOptions,preprocessingFuncArgs:this.preprocessingFunctionSettings??{}}}}getStringInput(){return JSON.stringify(this.getInput())}async applyStringInput(t){try{const e=JSON.parse(t);await this.applyInput(e)}catch(t){o.shell.error("Error applying input from history"),console.error(t)}}async applyInput(t){try{const e=this.tableInput.value?.col(t.col);if(!e)throw new Error("Column not found");this.colInput.value=e,this.preprocessingFunctionInput.value=t.preprocessingFunction,this.similarityMetricInput.value=t.similarityMetric,this.plotEmbeddingsInput.value=t.plotEmbeddings,this.clusterEmbeddingsInput.value=t.clusterEmbeddings;const n=this.methodsParams[this.methodInput.value];Object.keys(n).forEach((e=>{null!=t.options[e]&&(this.methodsParams[t.methodName][e].value=t.options[e])})),this.methodInput.value=t.methodName,this.preprocessingFunctionSettings=t.options.preprocessingFuncArgs,await this.createPreprocessingFuncParamsDiv(this.preprocessingFuncSettingsDiv,this.supportedFunctions[this.preprocessingFunctionInput.value].func)}catch(t){o.shell.error("Error applying input from history"),console.error(t)}}}var R=n(9713),O=n(6295);const k=t=>null==t;function G(t,e,n,i){if(n>t[t.length-1])return;const r=t.findIndex((t=>n<t));t.pop(),t.splice(r,0,n),e.pop(),e.splice(r,0,i)}class F{constructor(t=!0,e=!0){const i=navigator.hardwareConcurrency;this._workerCount=t?Math.max(i-2,1):1,this._workers=new Array(this._workerCount).fill(null).map((()=>new Worker(new URL(n.p+n.u(793),n.b)))),this._terminateOnComplete=e}async calc(t,e,n=!0,r){return await this.calcMulti([t],[e],n,[r??{}],[1],i.MANHATTAN)}async calcMulti(t,e,n=!0,r=[{}],o=[1],s=i.MANHATTAN){if(t.length<1)throw new Error("values must contain at least one array");if(e.length!==t.length||r.length!==t.length||o.length!==t.length)throw new Error("values, fnNames, weights and opts must have the same length");return new Promise((async(i,a)=>{try{const a=t[0].length,l=new Array(this._workerCount),c=a*(a-1)/2;this._workerCount=Math.min(this._workerCount,c);const h=c/this._workerCount,u=new Float32Array(c);let d=0,p=1,m=0,f=Number.MIN_VALUE;for(let n=0;n<this._workerCount;n++){const i=Math.floor(n*h),g=n===this._workerCount-1?c:Math.floor((n+1)*h),y=d,b=p;n!==this._workerCount-1&&(d=a-2-Math.floor(Math.sqrt(-8*g+4*a*(a-1)-7)/2-.5),p=g-a*d+Math.floor((d+1)*(d+2)/2)),this._workers[n].postMessage({values:t,fnNames:e,startRow:y,startCol:b,chunckSize:g-i,opts:r,weights:o,aggregationMethod:s}),l[n]=new Promise(((t,e)=>{this._workers[n].onmessage=({data:{error:r,distanceMatrixData:o,min:s,max:a}})=>{this._terminateOnComplete&&setTimeout((()=>this._workers[n].terminate())),r?e(r):(u.set(o,i),s<m&&(m=s),a>f&&(f=a),t())}}))}await Promise.all(l),n&&u.forEach(((t,e)=>{u[e]=(t-m)/(f-m)})),i(u)}catch(t){a(t)}}))}terminate(){this._workers.forEach((t=>t.terminate()))}}class H{constructor(){this._workerCount=Math.max(navigator.hardwareConcurrency-2,1)}static pruneSparseMatrix(t,e=1e6){const n=200,i=new Uint32Array(n),r=t.distance.length,o=t.distance;for(let t=0;t<r;t++)i[Math.floor(o[t]*n)]++;let s=0,a=0;for(let t=0;t<n&&(s+=i[t],a=t,!(s>=e));t++);const l=new Uint32Array(s),c=new Uint32Array(s),h=new Float32Array(s),u=t.i,d=t.j;let p=0;const m=(a+1)/n;for(let t=0;t<r;t++)o[t]<m&&(l[p]=u[t],c[p]=d[t],h[p]=o[t],p++);return{i:l,j:c,distance:h}}async calcMultiColumn(t,e,r,o=[{}],s=[1],a=i.EUCLIDEAN){const l=t[0].length*(t[0].length-1)/2,c=Math.floor(l/this._workerCount),h=t[0].length>2e4?await this.getMinimalThreshold(t,e,o,s,a):0;r<h&&(console.log(`using threshold ${h}`),r=h),o.forEach(((t,e)=>o[e].threshold=r));const u=new Array(this._workerCount),d=new Array(this._workerCount).fill(null).map((()=>new Worker(new URL(n.p+n.u(111),n.b))));for(let n=0;n<this._workerCount;n++)u[n]=new Promise(((i,h)=>{const u=n*c,p=n===this._workerCount-1?l:(n+1)*c;p<=u&&i({i:new Int32Array(0),j:new Int32Array(0),distance:new Float32Array(0),idx:n}),d[n].postMessage({values:t,startIdx:u,endIdx:p,threshold:r,fnNames:e,opts:o,weights:s,aggregationMethod:a}),d[n].onmessage=({data:{error:t,i:e,j:r,distance:o}})=>{t?(d[n].terminate(),h(t)):(d[n].terminate(),i({i:e,j:r,distance:o,idx:n}))}}));const p=await Promise.all(u),m=p.reduce(((t,e)=>t+e.i.length),0),f=new Int32Array(m),g=new Int32Array(m),y=new Float32Array(m);let b=0;for(const t of p)f.set(t.i,b),g.set(t.j,b),y.set(t.distance,b),b+=t.i.length;return{i:f,j:g,distance:y}}async calc(t,e,n,i={}){return await this.calcMultiColumn([t],[e],n,[i],[1])}async getKNN(t,e,n=15,i={}){return await this.multiColumnKNN([t],[e],n,[i],[1])}async getThresholdKNN(t,e,n=.8,i={}){return await this.multiColumnThresholdKnn([t],[e],n,[i],[1])}async multiColumnThresholdKnn(t,e,r=.8,o,s,a=i.EUCLIDEAN){if(t.length!==e.length||t.length!==o.length||t.length!==s.length)throw new Error("values, distance functions, options and weights arrays should have the same length");if(t.some((e=>e.length!==t[0].length)))throw new Error("all values arrays should have the same length");const l=t[0].length*(t[0].length-1)/2,c=Math.floor(l/this._workerCount),h=new Array(this._workerCount),u=new Array(this._workerCount).fill(null).map((()=>new Worker(new URL(n.p+n.u(603),n.b))));for(let n=0;n<this._workerCount;n++)h[n]=new Promise(((i,h)=>{const d=n*c,p=n===this._workerCount-1?l:(n+1)*c;p<=d&&i({knnDistances:new Array(0),knnIndexes:new Array(0)}),u[n].postMessage({values:t,startIdx:d,endIdx:p,fnNames:e,opts:o,threshold:r,weights:s,aggregationMethod:a}),u[n].onmessage=({data:{error:t,knnDistances:e,knnIndexes:r}})=>{t?(u[n].terminate(),h(t)):(u[n].terminate(),i({knnDistances:e,knnIndexes:r}))}}));const d=await Promise.all(h),p=new Int32Array(t[0].length);for(const e of d)for(let n=0;n<t[0].length;++n)p[n]+=e.knnIndexes[n]?.length??0;const m={knnDistances:new Array(t[0].length).fill(null).map(((t,e)=>new Array(p[e]))),knnIndexes:new Array(t[0].length).fill(null).map(((t,e)=>new Array(p[e])))};for(const e of d)for(let n=0;n<t[0].length;++n)for(let t=0;t<(e.knnDistances[n]?.length??0);++t)m.knnDistances[n][p[n]-1]=e.knnDistances[n][t],m.knnIndexes[n][p[n]-1]=e.knnIndexes[n][t],p[n]-=1;return m}async multiColumnSingleValueKNN(t,e,r,o=15,s,a,l=i.EUCLIDEAN){if(t.length!==r.length||t.length!==s.length||t.length!==a.length)throw new Error("values, distance functions, options and weights arrays should have the same length");if(t.some((e=>e.length!==t[0].length)))throw new Error("all values arrays should have the same length");const c=new Array(this._workerCount).fill(null).map((()=>new Worker(new URL(n.p+n.u(810),n.b)))),h=new Array(this._workerCount),u=t[0].length,d=t.map((t=>t[e])),p=Math.ceil(u/this._workerCount);for(let e=0;e<this._workerCount;e++)h[e]=new Promise(((n,i)=>{const h=e*p,m=e===this._workerCount-1?u:(e+1)*p;m<=h&&n({knnDistances:new Array(0),knnIndexes:new Array(0)}),c[e].postMessage({values:t.map((t=>t.slice(h,m))),target:d,fnNames:r,opts:s,nNeighbours:o,weights:a,aggregationMethod:l,startIdx:h}),c[e].onmessage=({data:{error:t,knnDistances:r,knnIndexes:o}})=>{t?(c[e].terminate(),i(t)):(c[e].terminate(),n({knnDistances:r,knnIndexes:o}))}}));const m=await Promise.all(h),f={knnDistances:new Array(o).fill(99999),knnIndexes:new Array(o).fill(-1)};for(const t of m)for(let e=0;e<(t.knnDistances?.length??0);++e)G(f.knnDistances,f.knnIndexes,t.knnDistances[e],t.knnIndexes[e]);return f}async multiColumnKNN(t,e,r=15,o,s,a=i.EUCLIDEAN){if(t.length!==e.length||t.length!==o.length||t.length!==s.length)throw new Error("values, distance functions, options and weights arrays should have the same length");if(t.some((e=>e.length!==t[0].length)))throw new Error("all values arrays should have the same length");const l=t[0].length*(t[0].length-1)/2,c=Math.floor(l/this._workerCount),h=new Array(this._workerCount),u=new Array(this._workerCount).fill(null).map((()=>new Worker(new URL(n.p+n.u(950),n.b))));for(let n=0;n<this._workerCount;n++)h[n]=new Promise(((i,h)=>{const d=n*c,p=n===this._workerCount-1?l:(n+1)*c;p<=d&&i({knnDistances:new Array(0),knnIndexes:new Array(0)}),u[n].postMessage({values:t,startIdx:d,endIdx:p,fnNames:e,opts:o,nNeighbours:r,weights:s,aggregationMethod:a}),u[n].onmessage=({data:{error:t,knnDistances:e,knnIndexes:r}})=>{t?(u[n].terminate(),h(t)):(u[n].terminate(),i({knnDistances:e,knnIndexes:r}))}}));const d=await Promise.all(h),p={knnDistances:new Array(t[0].length).fill(null).map((()=>new Array(r).fill(99999))),knnIndexes:new Array(t[0].length).fill(null).map((()=>new Array(r).fill(-1)))};for(const e of d)for(let n=0;n<t[0].length;++n)for(let t=0;t<(e.knnDistances[n]?.length??0);++t)G(p.knnDistances[n],p.knnIndexes[n],e.knnDistances[n][t],e.knnIndexes[n][t]);return p}async getSampleDistances(t,e,r=[],o,s=i.EUCLIDEAN){const a=new Array(this._workerCount).fill(null).map((()=>new Worker(new URL(n.p+n.u(778),n.b))));try{const n=t[0].length*(t[0].length-1)/2,i=Math.floor(n/this._workerCount),l=1e6,c=Math.max(Math.min(n/1e3,l),Math.min(n,l)),h=Math.floor(c/this._workerCount),u=new Array(this._workerCount);for(let l=0;l<this._workerCount;l++)u[l]=new Promise(((c,u)=>{const d=l*i,p=l===this._workerCount-1?n:(l+1)*i;a[l].postMessage({values:t,startIdx:d,endIdx:p,sampleLength:h,fnNames:e,opts:r,weights:o,aggregationMethod:s}),a[l].onmessage=({data:{error:t,distance:e}})=>{a[l].terminate(),t?u(t):c({distance:e})}}));const d=await Promise.all(u),p=d.reduce(((t,e)=>t+e.distance.length),0),m=new Float32Array(p);let f=0;for(const t of d)m.set(t.distance,f),f+=t.distance.length;return m.sort(),m}catch(t){return a?.forEach((t=>t?.terminate())),console.error(t),new Float32Array(1).fill(.5)}}async getMinimalThreshold(t,e,n=[],r,o=i.EUCLIDEAN){try{const i=t.length*(t.length-1)/2,s=await this.getSampleDistances(t,e,n,r,o);return 1-s[Math.floor(7e7/i*s.length)]}catch(t){return console.error(t),.5}}static calcSync(t,e,n,i){const r=[],o=[],s=[];let a=0,l=0,c=0;const h=t.length*(t.length-1)/2;for(;a<h;){const e=k(t[l])||k(t[c])?1:n(t[l],t[c]);1-e>=i&&(r.push(l),o.push(c),s.push(e)),a++,c++,c===t.length&&(l++,c=l+1)}return{i:new Int32Array(r),j:new Int32Array(o),distance:new Float32Array(s)}}}var B,D,V=n(8774);(D=B||(B={})).none="none",D.bold="bold",D.dashed="dashed";class j{get currentLineId(){return this._currentLineIdx}set currentLineId(t){t!==this._currentLineIdx&&(this._currentLineIdx=t,this.sp.render(this.ctx))}set linesToRender(t){this.updateLines(t),this.sp.render(this.ctx)}set linesVisibility(t){this.visibility=t,this.sp.render(this.ctx)}constructor(t,e,n,i,r=B.none){var o;this._currentLineIdx=-1,this.lineClicked=new h.Subject,this.lineHover=new h.Subject,this.mouseOverLineId=-1,this.arrowWidth=15,this.sp=t,this.xAxisCol=this.sp.dataFrame.columns.byName(e),this.yAxisCol=this.sp.dataFrame.columns.byName(n),this.canvas=this.sp.getInfo().canvas,this.ctx=this.canvas.getContext("2d"),this.currentLineStyle=r,this.updateLines(i),this.visibility=null!==(o=i.visibility)&&void 0!==o?o:new V.A(this.lines.from.length),i.visibility||this.visibility.setAll(!0,!1),i.arrowSize&&(this.arrowWidth=i.arrowSize),this.canvas.onmousedown=t=>{var e;(null===(e=this.lines)||void 0===e?void 0:e.skipMouseOverDetection)&&(this.mouseOverLineId=this.checkCoordsOnLine(t.offsetX,t.offsetY)),-1!==this.mouseOverLineId&&this.lineClicked.next({x:t.clientX,y:t.clientY,id:this.mouseOverLineId,event:t})},this.canvas.onmousemove=t=>{var e;this.mouseOverLineId=(null===(e=this.lines)||void 0===e?void 0:e.skipMouseOverDetection)?-1:this.checkCoordsOnLine(t.offsetX,t.offsetY),-1!==this.mouseOverLineId&&this.lineHover.next({x:t.clientX,y:t.clientY,id:this.mouseOverLineId,event:t})},t.onEvent("d4-before-draw-scene").subscribe((t=>{this.renderLines()}))}updateLines(t){this.lines=t,this.multipleLinesCounts=new Uint8Array(this.lines.from.length),t.skipMultiLineCalculation?this.multipleLinesCounts.fill(0):this.createMultiLinesIndices()}renderLines(){var t,e,n,i,r,o,s,a,l,c,h,u,d,p,m,f,g;const y=this.lines.colors||this.lines.widths||this.lines.opacities||this.lines.drawArrowsArr;y||(this.ctx.lineWidth=null!==(t=this.lines.width)&&void 0!==t?t:1,this.ctx.strokeStyle=`rgba(${null!==(e=this.lines.color)&&void 0!==e?e:"0,128,0"},${null!==(n=this.lines.opacity)&&void 0!==n?n:1})`);const b=this.sp.dataFrame.filter,v=Math.pow(null!==(i=this.lines.shortLineThreshold)&&void 0!==i?i:5,2);for(let t=0;t<this.lines.from.length;t++)if(b.get(this.lines.from[t])&&b.get(this.lines.to[t])&&this.visibility.getBit(t)){let e=0;const n=this.sp.getMarkerSize(this.lines.from[t])/2,i=this.sp.getMarkerSize(this.lines.to[t])/2,b=this.sp.pointToScreen(this.lines.from[t]);let w=null==b?void 0:b.x,C=null==b?void 0:b.y;const A=this.sp.pointToScreen(this.lines.to[t]);let S=null==A?void 0:A.x,x=null==A?void 0:A.y;const E=Math.min(this.sp.viewBox.width,this.sp.viewBox.height);if(this.ctx.beginPath(),w&&C&&S&&x&&Math.hypot(S-w,x-C)/E>.01){if(y){const e=(null===(r=this.lines.colors)||void 0===r?void 0:r[t])?null===(o=this.lines.colors)||void 0===o?void 0:o[t]:null!==(s=this.lines.color)&&void 0!==s?s:"0,128,0",n=(null===(a=this.lines.opacities)||void 0===a?void 0:a[t])?null===(l=this.lines.opacities)||void 0===l?void 0:l[t]:null!==(c=this.lines.opacity)&&void 0!==c?c:1;this.ctx.strokeStyle=`rgba(${e},${n})`,this.ctx.lineWidth=(null===(h=this.lines.widths)||void 0===h?void 0:h[t])?null===(u=this.lines.widths)||void 0===u?void 0:u[t]:null!==(d=this.lines.width)&&void 0!==d?d:1}t===this._currentLineIdx&&this.toggleCurrentLineStyle(!0);const b=this.multipleLinesCounts[t];let A=null;if(b){e=this.getLineLength(w,C,S,x);const r=this.getPointOnDistance(w,C,S,x,i,e),o=this.getPointOnDistance(S,x,w,C,n,e);w=r.x,C=r.y,S=o.x,x=o.y,A=this.lines.from[t]>this.lines.to[t]?this.findControlPoint(b,w,C,S,x,t):this.findControlPoint(b,S,x,w,C,t),this.ctx.moveTo(w,C),this.ctx.quadraticCurveTo(A.x,A.y,S,x)}else(!this.lines.skipShortLines||Math.pow(S-w,2)+Math.pow(x-C,2)>v)&&(this.ctx.moveTo(w,C),this.ctx.lineTo(S,x));if((null!==(p=this.lines.drawArrows)&&void 0!==p?p:null===(m=this.lines.drawArrowsArr)||void 0===m?void 0:m.getBit(t))&&(e||(e=this.getLineLength(w,C,S,x)),e>this.arrowWidth)){const t=b?null:this.getPointOnDistance(w,C,S,x,i,e),n=b?A.x:w,r=b?A.y:C;this.canvasArrow(this.ctx,null!==(f=null==t?void 0:t.x)&&void 0!==f?f:w,null!==(g=null==t?void 0:t.y)&&void 0!==g?g:C,n,r)}this.ctx.stroke(),this.ctx.closePath(),t===this._currentLineIdx&&this.toggleCurrentLineStyle(!1)}}this.fillLeftBottomRect()}toggleCurrentLineStyle(t){switch(this.currentLineStyle){case B.bold:t?this.ctx.lineWidth+=2:this.ctx.lineWidth-=2;break;case B.dashed:t?this.ctx.setLineDash([5,5]):this.ctx.setLineDash([]);break;default:return}}fillLeftBottomRect(){const t=new Path2D;t.rect(this.sp.yAxisBox.minX,this.sp.yAxisBox.maxY,this.sp.yAxisBox.width,this.sp.xAxisBox.height),this.ctx.fillStyle="white",this.ctx.beginPath(),this.ctx.fill(t),this.ctx.closePath()}createMultiLinesIndices(){const t={};for(let e=0;e<this.lines.from.length;e++){let n=0,i=0;this.lines.from[e]<this.lines.to[e]?(n=this.lines.from[e],i=this.lines.to[e]):(n=this.lines.to[e],i=this.lines.from[e]),t[`${n}|${i}`]?(1===t[`${n}|${i}`].length&&(this.multipleLinesCounts[t[`${n}|${i}`][0]]=1,t[`${n}|${i}`].push(1)),this.multipleLinesCounts[e]=++t[`${n}|${i}`][1]):t[`${n}|${i}`]=[e]}}checkCoordsOnLine(t,e){let n=-1,i=null,r=null;const o=this.sp.dataFrame.filter;for(let s=0;s<this.lines.from.length;s++)if(o.get(this.lines.from[s])&&o.get(this.lines.to[s])&&this.visibility.getBit(s)){const o=this.sp.getMarkerSize(this.lines.from[s])/2,a=this.sp.getMarkerSize(this.lines.to[s])/2,l=this.sp.worldToScreen(this.xAxisCol.get(this.lines.from[s]),this.yAxisCol.get(this.lines.from[s])),c=this.sp.worldToScreen(this.xAxisCol.get(this.lines.to[s]),this.yAxisCol.get(this.lines.to[s]));if(this.multipleLinesCounts[s]){const n=this.getLineLength(l.x,l.y,c.x,c.y),i=this.getPointOnDistance(l.x,l.y,c.x,c.y,a,n),h=this.getPointOnDistance(c.x,c.y,null==l?void 0:l.x,null==l?void 0:l.y,o,n),u=this.lines.from[s]>this.lines.to[s]?this.findControlPoint(this.multipleLinesCounts[s],i.x,i.y,h.x,h.y,s):this.findControlPoint(this.multipleLinesCounts[s],h.x,h.y,i.x,i.y,s);r=this.calculateDistToCurveLine(s,t,e,i,h,u)}else r=this.calculateDistToStraightLine(t,e,l,c);(!i&&null!==r&&r<5||i&&null!==r&&r<i)&&(i=r,n=s)}return n}calculateDistToStraightLine(t,e,n,i){const r=Math.min(n.x,i.x),o=Math.max(n.x,i.x),s=Math.min(n.y,i.y),a=Math.max(n.y,i.y);return t>=r-2&&t<=o+2&&e>=s-2&&e<=a+2?this.distToStraightLineSegment(t,e,n,i):null}distToStraightLineSegment(t,e,n,i){const r=(t,e,n,i)=>Math.pow(t-n,2)+Math.pow(e-i,2),o=r(n.x,n.y,i.x,i.y);if(0==o)return r(t,e,n.x,n.y);let s=((t-n.x)*(i.x-n.x)+(e-n.y)*(i.y-n.y))/o;return s=Math.max(0,Math.min(1,s)),r(t,e,n.x+s*(i.x-n.x),n.y+s*(i.y-n.y))}calculateDistToCurveLine(t,e,n,i,r,o){const s=Math.min(i.x,r.x,o.x),a=Math.max(i.x,r.x,o.x),l=Math.min(i.y,r.y,o.y),c=Math.max(i.y,r.y,o.y);if(e>=s-2&&e<=a+2&&n>=l-2&&n<=c+2){const t=a-s,h=c-l;return this.calculateDistToCurveInRect(e,n,i,o,r,t,h)}return null}calculateDistToCurveInRect(t,e,n,i,r,o,s){const a=Math.floor((o+s)/3),l=1/a,c=new Uint32Array(a),h=new Uint32Array(a),u=new Uint32Array(a);let d=null;const p=new V.A(a);for(let o=0;o<c.length;o++){const s=o*l,a=Math.pow(1-s,2)*n.x+2*s*(1-s)*i.x+Math.pow(s,2)*r.x,p=Math.pow(1-s,2)*n.y+2*s*(1-s)*i.y+Math.pow(s,2)*r.y,m=Math.abs(t-a),f=Math.abs(e-p),g=m+f;(!d||d>g)&&(d=g),u[o]=Math.max(m,f),c[o]=a,h[o]=p}for(let t=0;t<c.length;t++)u[t]<d&&p.setBit(t,!0,!1);let m=null;for(let n=-1;-1!==(n=p.findNext(n));){const i=Math.hypot(c[n]-t,h[n]-e);(!m||m>i)&&(m=i)}return m}getLineLength(t,e,n,i){return Math.sqrt(Math.pow(n-t,2)+Math.pow(i-e,2))}getPointOnDistance(t,e,n,i,r,o){const s=n-r*((n-t)/o),l=i-r*((i-e)/o);return new a.Point(s,l)}findControlPoint(t,e,n,i,r,o){const s=e+(i-e)/2,l=n+(r-n)/2;let c=s-e,h=l-n;const u=Math.sqrt(c*c+h*h);c/=u,h/=u;const d=50*Math.ceil(t/2);return t%2==0?new a.Point(s+d/2*h,l-d/2*c):new a.Point(s-d/2*h,l+d/2*c)}canvasArrow(t,e,n,i,r){const o=Math.atan2(i-e,r-n)+Math.PI;t.moveTo(e-this.arrowWidth*Math.sin(o-Math.PI/10),n-this.arrowWidth*Math.cos(o-Math.PI/10)),t.lineTo(e,n),t.lineTo(e-this.arrowWidth*Math.sin(o+Math.PI/10),n-this.arrowWidth*Math.cos(o+Math.PI/10))}}var U,W,q=n(8060),z=n(3629);async function Y(t,e,i,r,s,a,l){let c=await async function(t,e,i,r,s,a,l){if(!a.distanceFnArgs)throw new Error("options.distanceFnArgs must be defined");if(t.length!==e.length||t.length!==a.distanceFnArgs.length||t.length!==r.length)throw new Error("data, metrics and options and weights must have the same length");return new Promise((function(c,h){const u=new Worker(new URL(n.p+n.u(234),n.b));u.postMessage({columnsData:t,distanceMetrics:e,method:i,options:a,weights:r,aggregationMethod:s});const d=o.events.onCustomEvent(q.S).subscribe((()=>{try{u?.terminate()}finally{d.unsubscribe()}}));u.onmessage=({data:{error:t,embedding:e,epochNum:n,epochsLength:i}})=>{k(n)||k(i)?(d.unsubscribe(),t?h(t):c(e),setTimeout((()=>u.terminate()),100)):l&&l(n,i,e)}}))}(t,i,e,r,s,a,l);return c=c.map((t=>(0,z.S8)(t))),c}(W=U||(U={})).EUCLIDEAN="EUCLIDEAN",W.MANHATTAN="MANHATTAN";const K={[U.EUCLIDEAN]:function(t){return`\n var sum = 0.0;\n for (var i = 0u; i < ${t}; i = i + 1u) {\n sum = sum + distances[i] * distances[i] * computeInfo.weights[i] * computeInfo.weights[i];\n }\n return sqrt(sum);\n `},[U.MANHATTAN]:function(t){return`\n var sum = 0.0;\n for (var i = 0u; i < ${t}; i = i + 1u) {\n sum = sum + abs(distances[i]) * computeInfo.weights[i];\n }\n return sum;\n `}};var Z,X;(X=Z||(Z={})).HAMMING="Hamming",X.EUCLIDEAN="Euclidean",X.VECTOR_COSINE="Vector Cosine",X.MANHATTAN="Manhattan",X.TANIMOTO="Tanimoto",X.LEVENSTEIN="Levenshtein",X.NEEDLEMAN_WUNSCH="Needlemann-Wunsch",X.MONOMER_CHEMICAL_DISTANCE="Monomer chemical distance",X.SOKAL="Sokal",X.COSINE="Cosine",X.ASYMMETRIC="Asymmetric",X.Difference="Difference",X.OneHot="One-Hot";const J={[Z.HAMMING]:function(t,e){return`\n let aLength: u32 = computeInfo.entrySizes[${e}][aIndex];\n let bLength: u32 = computeInfo.entrySizes[${e}][bIndex];\n let maxLength: u32 = max(aLength, bLength);\n let minLength: u32 = min(aLength, bLength);\n let sizeDiff: u32 = maxLength - minLength;\n \n let maxIntDistance = ceil(maxDistance * f32(maxLength)) - f32(sizeDiff);\n\n var diff: f32 = 0.0;\n for (var i = 0u; i < ${t}; i = i + 1u) {\n diff = diff + f32(a[i] != b[i]);\n if (diff > maxIntDistance) {\n return 1.0;\n }\n }\n diff += f32(sizeDiff);\n return diff / ${t};\n `},[Z.EUCLIDEAN]:function(t,e){return`\n var dist: f32 = 0.0;\n for (var i = 0u; i < ${t}; i = i + 1u) {\n dist = dist + f32(a[i] - b[i]) * f32(a[i] - b[i]);\n }\n return sqrt(dist);\n `},[Z.MANHATTAN]:function(t,e){return`\n var dist: f32 = 0.0;\n for (var i = 0u; i < ${t}; i = i + 1u) {\n dist = dist + abs(f32(a[i] - b[i]));\n }\n return dist;\n `},[Z.VECTOR_COSINE]:function(t,e){return`\n var dist: f32 = 0.0;\n var productSum: f32 = 0.0;\n var aSquareSum: f32 = 0.0;\n var bSquareSum: f32 = 0.0;\n for (var i = 0u; i < ${t}; i = i + 1u) {\n productSum = productSum + f32(a[i] * b[i]);\n aSquareSum = aSquareSum + f32(a[i] * a[i]);\n bSquareSum = bSquareSum + f32(b[i] * b[i]);\n }\n var sim = productSum / (sqrt(aSquareSum) * sqrt(bSquareSum));\n return (1.0 - sim) / 2.0;\n `},[Z.TANIMOTO]:function(t,e){return`\n var onBitsa: u32 = 0u;\n var onBitsb: u32 = 0u;\n for (var i = 0u; i < ${t}u; i = i + 1u) {\n onBitsa = onBitsa + countOneBits(a[i]);\n onBitsb = onBitsb + countOneBits(b[i]);\n }\n\n if (onBitsa == 0u && onBitsb == 0u) {\n return 0.0;\n }\n\n let totalOnBits = onBitsa + onBitsb;\n var commonBits: u32 = 0u;\n for (var i = 0u; i < ${t}u; i = i + 1u) {\n commonBits = commonBits + countOneBits(a[i] & b[i]);\n }\n\n return 1.0 - f32(commonBits) / f32(totalOnBits - commonBits);\n `},[Z.LEVENSTEIN]:function(t,e){return`\n let aLength: u32 = computeInfo.entrySizes[${e}][aIndex];\n let bLength: u32 = computeInfo.entrySizes[${e}][bIndex];\n let maxLength: u32 = max(aLength, bLength);\n let minLength: u32 = min(aLength, bLength);\n\n let maxIntDistance = ceil(maxDistance * f32(maxLength));\n\n // we will store two arrays as matrix and swap the working indices per pass.\n // this way we can reduce memory usage per computation to just O(aLength)\n // the grid will have aLength + 1 columns and bLength + 1 rows\n // this will be guaranteed by iteration, but the array sizes must be known at compile time, so we will use a fixed size of maxArraySize\n var dynamicPassMat: array<array<f32, ${t+1}u>, 2>; // initialize to 0\n \n var prevIndex: u32 = 0;\n var curIndex: u32 = 1; // we will swap these indices per pass\n\n // initialize the first row\n for (var i = 0u; i <= aLength; i = i + 1u) {\n dynamicPassMat[prevIndex][i] = f32(i);\n }\n\n // iterate over the rows\n for (var i = 1u; i <= bLength; i = i + 1u) {\n dynamicPassMat[curIndex][0] = f32(i);\n var minEntry: f32 = f32(maxLength);\n let prevRow = &dynamicPassMat[prevIndex];\n let curRow = &dynamicPassMat[curIndex];\n let bMon = u32(b[i - 1]);\n for (var j = 1u; j <= aLength; j = j + 1u) {\n var cost: f32 = f32(a[j - 1] != bMon);\n var res: f32 = min(\n min(\n (*prevRow)[j] + 1.0, // deletion\n (*curRow)[j - 1] + 1.0, // insertion\n ),\n (*prevRow)[j - 1] + cost // substitution\n );\n (*curRow)[j] = res;\n if (res < minEntry) {\n minEntry = res;\n }\n }\n // swap the indices\n let temp: u32 = prevIndex;\n prevIndex = curIndex;\n curIndex = temp;\n if (minEntry > maxIntDistance) {\n return 1.0;\n }\n }\n\n return dynamicPassMat[prevIndex][aLength] / f32(maxLength);\n `},[Z.NEEDLEMAN_WUNSCH]:function(t,e){return`\n let aLength: u32 = computeInfo.entrySizes[${e}][aIndex];\n let bLength: u32 = computeInfo.entrySizes[${e}][bIndex];\n let maxLength: u32 = max(aLength, bLength);\n let minLength: u32 = min(aLength, bLength);\n \n let maxIntDistance = ceil(maxDistance * f32(maxLength));\n // we will store two arrays as matrix and swap the working indices per pass.\n // this way we can reduce memory usage per computation to just O(aLength)\n // the grid will have aLength + 1 columns and bLength + 1 rows\n // this will be guaranteed by iteration, but the array sizes must be known at compile time, so we will use a fixed size of maxArraySize\n var dynamicPassMat: array<array<f32, ${t+1}u>, 2>; // initialize to 0\n \n // we need to keep track of which operation led to the current cell\n // i.e. whether we came from the left, top or diagonal to assign gap open/gap extend penalty\n var verticalGaps: array<u32, ${t+1}u>;\n var horizontalGaps: array<u32, ${t+1}u>;\n\n let gapOpenPenalty: f32 = suppInfo.gapOpenPenalty${e};\n let gapExtensionPenalty: f32 = suppInfo.gapExtensionPenalty${e};\n var prevIndex: u32 = 0;\n var curIndex: u32 = 1; // we will swap these indices per pass\n // initialize the first row\n for (var i = 0u; i <= aLength; i = i + 1u) {\n dynamicPassMat[prevIndex][i] = gapExtensionPenalty + f32(i - 1) * gapExtensionPenalty; // accounting for the fact that left and right gaps are less costly\n dynamicPassMat[curIndex][i] = 0.0;\n }\n dynamicPassMat[0][0] = 0.0;\n\n let simMatrix = &suppInfo.similarityMatrix${e}; // using pointers make things faster\n // iterate over the rows\n for (var i = 1u; i <= bLength; i = i + 1u) {\n let prevRow = &dynamicPassMat[prevIndex];\n let curRow = &dynamicPassMat[curIndex];\n (*curRow)[0] = gapExtensionPenalty + f32(i - 1) * gapExtensionPenalty;\n var minEntry: f32 = f32(maxLength);\n let monB = u32(b[i - 1]);\n for (var j = 1u; j <= aLength; j = j + 1u) {\n let monA = u32(a[j - 1]);\n \n let cost: f32 = (*prevRow)[j - 1] + 1f - (*simMatrix)[monA][monB];\n var top = (*prevRow)[j]; // deletion\n if (verticalGaps[j] > 0 || i == 1 || i == bLength) {\n top = top + gapExtensionPenalty;\n } else {\n top = top + gapOpenPenalty;\n }\n var left = (*curRow)[j - 1]; // insertion\n if (horizontalGaps[j - 1] > 0 || j == 1 || j == aLength) {\n left = left + gapExtensionPenalty;\n } else {\n left = left + gapOpenPenalty;\n }\n var res: f32 = min(\n min(\n top, // deletion\n left, // insertion\n ),\n cost // substitution\n );\n (*curRow)[j] = res;\n if (res < minEntry) {\n minEntry = res;\n }\n // update the horizontal and vertical gaps\n if (res == cost) {\n verticalGaps[j] = 0;\n horizontalGaps[j] = 0;\n } else if (res == left) {\n verticalGaps[j] = 0;\n horizontalGaps[j] = 1;\n } else {\n verticalGaps[j] = 1;\n horizontalGaps[j] = 0;\n }\n }\n // swap the indices\n let temp: u32 = prevIndex;\n prevIndex = curIndex;\n curIndex = temp;\n if (minEntry > maxIntDistance) {\n return 1.0;\n }\n }\n return dynamicPassMat[prevIndex][aLength] / f32(minLength);\n\n `},[Z.MONOMER_CHEMICAL_DISTANCE]:function(t,e){return`\n let aLength: u32 = computeInfo.entrySizes[${e}][aIndex];\n let bLength: u32 = computeInfo.entrySizes[${e}][bIndex];\n let maxLength: u32 = max(aLength, bLength);\n let minLength: u32 = min(aLength, bLength);\n let sizeDiff: u32 = maxLength - minLength;\n \n let maxIntDistance = ceil(maxDistance * f32(maxLength)) - f32(sizeDiff);\n\n let simMatrix = &(suppInfo.similarityMatrix${e}); // using pointers make things faster\n var diff: f32 = 0.0;\n for (var i = 0u; i < ${t}; i = i + 1u) {\n diff = diff + 1.0 - (*simMatrix)[u32(a[i])][u32(b[i])];\n if (diff > maxIntDistance) {\n return 1.0;\n }\n }\n diff += f32(sizeDiff);\n return diff / ${t};\n `},[Z.SOKAL]:function(t,e){return`\n var onBitsa: u32 = 0u;\n var onBitsb: u32 = 0u;\n for (var i = 0u; i < ${t}u; i = i + 1u) {\n onBitsa = onBitsa + countOneBits(a[i]);\n onBitsb = onBitsb + countOneBits(b[i]);\n }\n let total = onBitsa + onBitsb;\n if (total == 0u) {\n return 1.0;\n }\n var commonBits: u32 = 0u;\n for (var i = 0u; i < ${t}u; i = i + 1u) {\n commonBits = commonBits + countOneBits(a[i] & b[i]);\n }\n return 1.0 - f32(commonBits) / f32(total * 2 - commonBits * 3);\n `},[Z.COSINE]:function(t,e){return`\n var onBitsa: u32 = 0u;\n var onBitsb: u32 = 0u;\n for (var i = 0u; i < ${t}u; i = i + 1u) {\n onBitsa = onBitsa + countOneBits(a[i]);\n onBitsb = onBitsb + countOneBits(b[i]);\n }\n let total = onBitsa * onBitsb; // p.s. here total is taken by multiplying\n if (total == 0u) {\n return 1.0;\n }\n var commonBits: u32 = 0u;\n for (var i = 0u; i < ${t}u; i = i + 1u) {\n commonBits = commonBits + countOneBits(a[i] & b[i]);\n }\n return 1.0 - f32(commonBits) / sqrt(f32(total));\n `},[Z.ASYMMETRIC]:function(t,e){return`\n var onBitsa: u32 = 0u;\n var onBitsb: u32 = 0u;\n for (var i = 0u; i < ${t}u; i = i + 1u) {\n onBitsa = onBitsa + countOneBits(a[i]);\n onBitsb = onBitsb + countOneBits(b[i]);\n }\n let min = min(onBitsa, onBitsb);\n if (min == 0u) {\n return 1.0;\n }\n var commonBits: u32 = 0u;\n for (var i = 0u; i < ${t}u; i = i + 1u) {\n commonBits = commonBits + countOneBits(a[i] & b[i]);\n }\n return 1.0 - f32(commonBits) / f32(min);\n `},[Z.Difference]:function(t,e){return`\n let range = suppInfo.range${e};\n return f32(abs(f32(a[0]) - f32(b[0])) / range);\n `},[Z.OneHot]:function(t,e){return`\n let aLength: u32 = computeInfo.entrySizes[${e}][aIndex];\n let bLength: u32 = computeInfo.entrySizes[${e}][bIndex];\n if (aLength != bLength) {\n return 1.0;\n }\n for (var i = 0u; i < aLength; i = i + 1u) {\n if(a[i] != b[i]) {\n return 1.0;\n }\n }\n return 0.0;\n `}},Q={[Z.HAMMING]:t=>Math.ceil(t/30),[Z.EUCLIDEAN]:t=>Math.ceil(t/30),[Z.MANHATTAN]:t=>Math.ceil(t/30),[Z.TANIMOTO]:t=>Math.ceil(t/30),[Z.SOKAL]:t=>Math.ceil(t/30),[Z.COSINE]:t=>Math.ceil(t/30),[Z.ASYMMETRIC]:t=>Math.ceil(t/30),[Z.LEVENSTEIN]:t=>Math.ceil(t*t/60),[Z.NEEDLEMAN_WUNSCH]:t=>Math.ceil(t*t/60),[Z.MONOMER_CHEMICAL_DISTANCE]:t=>Math.ceil(t/25),[Z.Difference]:t=>1,[Z.OneHot]:t=>Math.ceil(t/40),[Z.VECTOR_COSINE]:t=>Math.ceil(t/30)},tt={STRING:new Set([Z.HAMMING,Z.LEVENSTEIN,Z.NEEDLEMAN_WUNSCH,Z.MONOMER_CHEMICAL_DISTANCE,Z.OneHot]),UINT32ARRAY:new Set([Z.HAMMING,Z.EUCLIDEAN,Z.MANHATTAN,Z.MONOMER_CHEMICAL_DISTANCE,Z.LEVENSTEIN,Z.NEEDLEMAN_WUNSCH,Z.TANIMOTO,Z.COSINE,Z.VECTOR_COSINE,Z.SOKAL,Z.ASYMMETRIC,Z.OneHot,Z.Difference]),INT32ARRAY:new Set([Z.EUCLIDEAN,Z.MANHATTAN,Z.OneHot,Z.Difference,Z.VECTOR_COSINE]),FLOAT32ARRAY:new Set([Z.EUCLIDEAN,Z.MANHATTAN,Z.Difference,Z.VECTOR_COSINE]),NUMBER:new Set([Z.EUCLIDEAN,Z.MANHATTAN,Z.Difference]),BITARRAY:new Set([Z.TANIMOTO,Z.COSINE,Z.SOKAL,Z.ASYMMETRIC])};var et=function(t,e,n,i){return new(n||(n=Promise))((function(r,o){function s(t){try{l(i.next(t))}catch(t){o(t)}}function a(t){try{l(i.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?r(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,a)}l((i=i.apply(t,e||[])).next())}))};function nt(t,e,n,i){return t.map(((t,i)=>`\n fn distanceScript${i}(aIndex: u32, bIndex: u32) -> f32 {\n let a = computeInfo.data${i}[aIndex];\n let b = computeInfo.data${i}[bIndex];\n let maxDistance: f32 = ${n};\n ${J[t](e[i],i)}\n }\n `)).join("\n")+"\n"+`\n fn combinedDistance(aIndex: u32, bIndex: u32) -> f32 {\n var distances: array<f32, ${t.length}>;\n ${t.map(((t,e)=>`distances[${e}] = distanceScript${e}(aIndex, bIndex);`)).join("\n")}\n ${K[i](t.length)}\n }\n \n `}var it=n(1991),rt=n.n(it);let ot=0;const st="cliffsDf",at=new h.Subject,lt="Δ activity",ct="SALI",ht="Similarity",ut="line index",dt=["From","To"],pt="filterCliffs";async function mt(t,e,i,r,l,c,h,u,d,p,m,f,g,y,b,v,w){ot++;const C=c/100;let A,S=!1;const x=f.inputs,I=await f.apply({[x[0].name]:e,[x[1].name]:h,...d.preprocessingFuncArgs??{}});let T=[];if(u===N){const e=await function(t,e,i,r,o,s,a=10,l=!1,c=2){const h=new Worker(new URL(n.p+n.u(980),n.b));let u;return h.postMessage({data:t,threshold:e,weights:i,aggregationMethod:r,distanceFns:o,distanceFnArgs:s,maxIterations:a,useWebGPU:l,inflate:c}),{promise:new Promise(((t,e)=>{u=t,h.onmessage=e=>{setTimeout((()=>h.terminate()),100),t(e.data.res)},h.onerror=t=>{setTimeout((()=>h.terminate()),100),e(t)}})),terminate:()=>{try{u(null),h.terminate()}catch(t){console.error(t)}}}}([I.entries],c,[1],"MANHATTAN",[h],[I.options??{}],d?.maxIterations??5,d.useWebGPU??!1).promise;t.columns.addNewInt(t.columns.getUnusedName("MCL Cluster")).init((t=>e.clusters[t])),T=[e.embedX,e.embedY]}else T=await Y([I.entries],u,[h],[1],"MANHATTAN",{...d,distanceFnArgs:[I.options??{}]});if(T.length!==i.length)throw new Error("Number of axes names should be equal to number of embedding dimensions");for(let e=0;e<T.length;++e)t.columns.addNewFloat(i[e]).init((t=>T[e][t]));let L=null;if(d.useWebGPU)try{L=await function(t,e=.8,n,i,r,o){return et(this,void 0,void 0,(function*(){const s=yield function(){return E(this,void 0,void 0,(function*(){if(!navigator.gpu)return console.error("WebGPU is not supported in this browser"),null;if(!M&&(M=yield navigator.gpu.requestAdapter({powerPreference:"high-performance"}),null==M))return null;let t=!1;if(_&&(_.lost.then((()=>{t=!0})),yield new Promise((t=>setTimeout(t,10)))),!_||t){const t=1e9,e=M.limits,n=e.maxBufferSize,i=e.maxStorageBufferBindingSize;try{return _=yield M.requestDevice({requiredLimits:{maxBufferSize:Math.min(n,t),maxStorageBufferBindingSize:Math.min(i,t)}}),_}catch(t){return console.error("Failed to create device with required limits",t),_=yield M.requestDevice(),_}}return _}))}();if(!s)return null;const a=Object.values(Z);if(n.some((t=>!a.includes(t))))throw new Error("Invalid distance metrics provided: "+n.join(", "));if(!Object.values(U).includes(i))throw new Error("Invalid aggregation function provided: "+i);const l=1-e;if(o.length!==t.length||o.length!==n.length||o.length!==r.length)throw new Error("Options, weigths and distance functions must be provided for each column");if(t.some((e=>e.length!==t[0].length)))throw new Error("All entry lists must be the same length");const c=t.length,h=t[0].length,u=t.map(((t,e)=>function(t,e=Z.HAMMING,n,i={gapOpenPenalty:1,gapExtensionPenalty:.6}){var r,o;let s=null;const a=t.some((t=>"string"==typeof t))?(s="STRING",t.map((t=>new Uint32Array(t.split("").map((t=>t.charCodeAt(0))))))):t.some((t=>"number"==typeof t))?(s="NUMBER",t.map((t=>new Float32Array([t])))):"object"==typeof t[0]&&t.some((t=>"_data"in t&&"_length"in t))?(s="BITARRAY",t.map((t=>t._data))):t.some((t=>t instanceof Float32Array))?(s="FLOAT32ARRAY",t):t.some((t=>t instanceof Uint32Array))?(s="UINT32ARRAY",t):t.some((t=>t instanceof Int32Array))?(s="INT32ARRAY",t):void 0;if(!a||!s)throw new Error("Invalid entry type, could not determine entry type from input list");const l=a[0]instanceof Int32Array?"INT32ARRAY":a[0]instanceof Float32Array?"FLOAT32ARRAY":"UINT32ARRAY",c=new Uint32Array(a.map((t=>t.length)));if(!tt[s]||!tt[s].has(e))throw new Error(`Distance metric '${e}' not supported for entry type '${s}'`);const h=c.reduce(((t,e)=>Math.max(t,e)),0),u=Q[e](h),d="INT32ARRAY"===l?Int32Array:"FLOAT32ARRAY"===l?Float32Array:Uint32Array,p=new d(a.length*h);a.forEach(((t,e)=>{p.set(t,e*h)}));let m="",f=0,g="FLOAT32ARRAY",y=null;if(e===Z.NEEDLEMAN_WUNSCH||e===Z.MONOMER_CHEMICAL_DISTANCE){let t=i.scoringMatrix&&i.alphabetIndexes?Object.keys(i.alphabetIndexes).reduce(((t,e)=>Math.max(t,e.charCodeAt(0))),0):-1;if(!i.alphabetIndexes||!i.scoringMatrix){for(let e=0;e<p.length;e++)p[e]>t&&(t=p[e]);i.scoringMatrix=new Array(t+1).fill(null).map((()=>new Array(t+1).fill(0))),i.alphabetIndexes={};for(let t=0;t<i.scoringMatrix.length;t++)i.scoringMatrix[t][t]=1,i.alphabetIndexes[String.fromCharCode(t)]=t}const e=(t+1)*(t+1),s=new Array(t+1).fill(null).map((()=>new Float32Array(t+1)));for(let e=0;e<t+1;e++)s[e][e]=1;const a=i.alphabetIndexes;for(const t of Object.keys(a))for(const e of Object.keys(a))t!==e&&(s[t.charCodeAt(0)][e.charCodeAt(0)]=i.scoringMatrix[a[t]][a[e]]);f=2+e,g="FLOAT32ARRAY",y=new Float32Array(f),y[0]=null!==(r=i.gapOpenPenalty)&&void 0!==r?r:1,y[1]=null!==(o=i.gapExtensionPenalty)&&void 0!==o?o:.6;let l=2;for(let t=0;t<s.length;t++)y.set(s[t],l),l+=s[t].length;m=`\n gapOpenPenalty${n}: f32,\n gapExtensionPenalty${n}: f32,\n similarityMatrix${n}: array<array<f32, ${t+1}>, ${t+1}>`}else if(e===Z.Difference){if(!i.range||"number"!=typeof i.range||i.range<=0){const t=p.reduce(((t,e)=>Math.min(t,e)),p[0]),e=p.reduce(((t,e)=>Math.max(t,e)),p[0]);i.range=e-t}i.range<=0&&(i.range=1),f=1,g="FLOAT32ARRAY",y=new Float32Array([i.range]),m=`\n range${n}: f32`}const b=p instanceof Int32Array?"i32":p instanceof Float32Array?"f32":"u32",v=`data${n}: array<array<${b}, ${h}>, ${a.length}>`;return{flatSourceArray:p,sourceArraySize:p.length,maxEntryLen:h,arraySizes:c,complexity:u,suppInfoBuffer:y,suppInfoSize:f,suppInfoType:g,suppInfoStructWgsl:m,entryType:s,dataTypeWGSL:b,dataStructWgsl:v,EncodedArrayConstructor:d}}(t,n[e],e,o[e])));if(0===c)throw new Error("No columns provided. Please provide at least one column of data.");1===c&&(i=U.MANHATTAN);let d=u.map((t=>t.suppInfoStructWgsl)).filter((t=>!!t&&""!=t)).join(",\n"),p=!1;d&&""!=d.trim()||(p=!0,d="\ndummy: f32\n");const m=u.map((t=>t.dataStructWgsl)).filter((t=>!!t&&""!=t)).join(",\n"),f=new Uint32Array(c*h);u.forEach(((t,e)=>{f.set(t.arraySizes,e*h)}));const g=1e4,y=100,b=u.reduce(((t,e)=>t+e.complexity),0),v=Math.ceil(6e3/b),w=Math.ceil(Math.sqrt(Math.ceil(100))),C=10*w,A=h*(h-1)/2,S=Math.ceil(A/g),x=s.createShaderModule({label:"Sparse matrix compute shader",code:`\n // each thread will perform 100 iterations at one time, comparing 100 pairs of entries.\n // in total, each thread will perform at most ${S} comparisons.\n // first is the result struct, containing is, js, and distances. each array with length of 100,\n // and also integer for how many pairs were found to be below threshold.\n struct SparseResult {\n i: array<array<u32, 100>, 10000>,\n j: array<array<u32, 100>, 10000>,\n distances: array<array<f32, 100>, 10000>,\n found: array<u32, 10000>,\n done: array<u32, 10000>\n }\n // struct for the data\n struct ComputeInfo {\n // start at cols and rows, and end at cols and rows for each thread, these will be calculated on cpu and passed to gpu.\n startAtCols: array<u32, 10000>,\n startAtRows: array<u32, 10000>,\n endAtCols: array<u32, 10000>,\n endAtRows: array<u32, 10000>,\n\n // the ACTUALLY sizes of each entry\n entrySizes: array<array<u32, ${h}>, ${c}>,\n // the weights for each entry\n weights: array<f32, ${c}>,\n // the data for each entry\n ${m} // an example of the dataWgsl would be:\n //data0: array<array<u32,20>,100>,\n //data1: array<array<u32,20>,100>\n }\n\n // struct for the supplementary information\n struct SuppInfo {\n // struct containing all the supplementary info, like scoring matrix, alphabet indexes, range, etc.\n ${d}\n };\n\n @group(0) @binding(0) var<storage, read_write> computeInfo: ComputeInfo;\n @group(0) @binding(1) var<storage, read_write> suppInfo: SuppInfo;\n @group(0) @binding(2) var<storage, read_write> results: SparseResult;\n @compute @workgroup_size(10, 10) fn calcSparseMatrix(\n @builtin(global_invocation_id) id: vec3<u32>\n ) {\n ${p?"let otherDummy = suppInfo.dummy * 2;":""} // just to make sure that the suppInfo is not optimized out\n let threadCol = id.x;\n let threadRow = id.y;\n let linearIndex = threadRow * ${C} + threadCol;\n if (linearIndex >= 10000) {\n return; // if we are out of bounds, return\n } \n var startAtCol: u32 = computeInfo.startAtCols[linearIndex];\n var startAtRow: u32 = computeInfo.startAtRows[linearIndex];\n let endAtCol: u32 = min(computeInfo.endAtCols[linearIndex], ${h}u);\n let endAtRow: u32 = min(computeInfo.endAtRows[linearIndex], ${h}u);\n let is = &results.i[linearIndex];\n let js = &results.j[linearIndex];\n let distances = &results.distances[linearIndex];\n results.found[linearIndex] = 0; // initialize the found counter\n var found: u32 = 0;\n if (results.done[linearIndex] > 0) {\n return; // if we are done, return\n }\n for (var i = 0; i < ${v}; i++) {\n if (startAtCol >= endAtCol && startAtRow >= endAtRow) {\n results.done[linearIndex] = 1;\n break;\n }\n if (found >= 100) {\n break;\n }\n let dist = combinedDistance(startAtCol, startAtRow);\n if (dist <= ${l}) {\n (*is)[found] = startAtCol;\n (*js)[found] = startAtRow;\n (*distances)[found] = dist;\n found = found + 1;\n }\n startAtCol = startAtCol + 1;\n if (startAtCol >= ${h}u) {\n startAtRow += 1;\n startAtCol = startAtRow + 1;\n }\n }\n results.found[linearIndex] = found;\n // update the startAtCols and startAtRows\n computeInfo.startAtCols[linearIndex] = startAtCol;\n computeInfo.startAtRows[linearIndex] = startAtRow;\n\n }\n\n // this will generate the distance script for each distance metric and then combine them into one\n ${nt(n,u.map((t=>t.maxEntryLen)),l,i)}\n\n\n `}),I=s.createComputePipeline({label:"sparse matrix compute pipeline",layout:"auto",compute:{module:x,entryPoint:"calcSparseMatrix"}}),T=new Uint32Array(g),L=new Uint32Array(g),N=new Uint32Array(g),P=new Uint32Array(g),$=Math.floor(A/g);let R=0,O=1;console.time("GPUthreadStarts");for(let t=0;t<g;t++){const e=9999===t?A-1:(t+1)*$,n=h-2-Math.floor(Math.sqrt(-8*e+4*h*(h-1)-7)/2-.5),i=e-h*n+Math.floor((n+1)*(n+2)/2);T[t]=O,L[t]=R,N[t]=i,P[t]=n,R=n,O=i}console.timeEnd("GPUthreadStarts");const k=4e4+h*c+c+u.reduce(((t,e)=>t+e.sourceArraySize),0),G=u.reduce(((t,e)=>t+e.suppInfoSize),0),F=1e6,H=k*Uint32Array.BYTES_PER_ELEMENT;let B=H;const D=15&H;0!==D&&(B+=16-D);const V=s.createBuffer({label:"compute info buffer",size:B,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST,mappedAtCreation:!0}),j=V.getMappedRange();let W=0;new Uint32Array(j,W,g).set(T),W+=g*Uint32Array.BYTES_PER_ELEMENT,new Uint32Array(j,W,g).set(L),W+=g*Uint32Array.BYTES_PER_ELEMENT,new Uint32Array(j,W,g).set(N),W+=g*Uint32Array.BYTES_PER_ELEMENT,new Uint32Array(j,W,g).set(P),W+=g*Uint32Array.BYTES_PER_ELEMENT,new Uint32Array(j,W,f.length).set(f),W+=f.length*Uint32Array.BYTES_PER_ELEMENT,new Float32Array(j,W,c).set(r),W+=c*Float32Array.BYTES_PER_ELEMENT;for(const t of u){const e=t.EncodedArrayConstructor,n=t.sourceArraySize;new e(j,W,n).set(t.flatSourceArray),W+=n*e.BYTES_PER_ELEMENT}V.unmap();const q=G*Uint32Array.BYTES_PER_ELEMENT;let z=q;const Y=15&q;0!==Y&&(z+=16-Y),z=Math.max(z,16);const K=s.createBuffer({label:"supp info buffer",size:z,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST,mappedAtCreation:!0}),X=K.getMappedRange();let J=0;for(const t of u)t.suppInfoBuffer&&t.suppInfoBuffer.byteLength>0&&t.suppInfoSize>0&&(new("UINT32ARRAY"===t.suppInfoType?Uint32Array:Float32Array)(X,J,t.suppInfoBuffer.length).set(t.suppInfoBuffer),J+=t.suppInfoBuffer.byteLength);0===J&&new Uint32Array(X,0,4).set([1,1,1,1]),K.unmap();const et=302e4*Uint32Array.BYTES_PER_ELEMENT;let it=et;const rt=15&et;0!==rt&&(it+=16-rt);const ot=s.createBuffer({label:"results buffer",size:it,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC}),st=s.createBindGroup({label:"bindGroup for sparse matrix buffer",layout:I.getBindGroupLayout(0),entries:[{binding:0,resource:{buffer:V}},{binding:1,resource:{buffer:K}},{binding:2,resource:{buffer:ot}}]}),at=s.createBuffer({label:"results out buffer",size:ot.size,usage:GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST}),lt=[],ct=[],ht=[];let ut=!1;for(;!ut;){const t=s.createCommandEncoder({label:"distance encoder"}),e=t.beginComputePass({label:"distance compute pass"});e.setPipeline(I),e.setBindGroup(0,st),e.dispatchWorkgroups(w,w),e.end(),t.copyBufferToBuffer(ot,0,at,0,at.size);const n=t.finish();s.queue.submit([n]),yield s.queue.onSubmittedWorkDone(),yield at.mapAsync(GPUMapMode.READ);const i=at.getMappedRange();let r=0;const o=new Uint32Array(i,r,F);r+=F*Uint32Array.BYTES_PER_ELEMENT;const a=new Uint32Array(i,r,F);r+=F*Uint32Array.BYTES_PER_ELEMENT;const l=new Float32Array(i,r,F);r+=F*Float32Array.BYTES_PER_ELEMENT;const c=new Uint32Array(i,r,g);r+=g*Uint32Array.BYTES_PER_ELEMENT,ut=new Uint32Array(i,r,g).every((t=>1===t));const h=c.reduce(((t,e)=>t+e),0),u=new Uint32Array(h),d=new Uint32Array(h),p=new Float32Array(h);let m=0;for(let t=0;t<c.length;t++){const e=c[t];0!==e&&(u.set(o.subarray(t*y,t*y+e),m),d.set(a.subarray(t*y,t*y+e),m),p.set(l.subarray(t*y,t*y+e),m),m+=e)}lt.push(u),ct.push(d),ht.push(p),at.unmap()}const dt=lt.reduce(((t,e)=>t+e.length),0),pt=new Uint32Array(dt),mt=new Uint32Array(dt),ft=new Float32Array(dt);let gt=0;for(let t=0;t<lt.length;t++)pt.set(lt[t],gt),mt.set(ct[t],gt),ft.set(ht[t],gt),gt+=lt[t].length;return V.destroy(),K.destroy(),ot.destroy(),at.destroy(),{i:pt,j:mt,distance:ft}}))}([I.entries],C,[h],U.MANHATTAN,[1],[I.options??{}])}catch(t){console.error(t)}L||(d.useWebGPU&&console.error("WebGPU sparse matrix calculation failed, falling back to CPU implementation"),L=await(new H).calc(I.entries,h,C,I.options));const P=await async function(t,e){const n=t.distance.map(((n,i)=>{const r=Math.abs(e.get(t.i[i])-e.get(t.j[i]));return 0!=n?r/n:1/0})),i=t.distance.map((t=>1-t)),r=t.i,o=t.j,s=a.BitSet.create(e.length);return t.distance.forEach(((e,n)=>{s.set(t.i[n],!0),s.set(t.j[n],!0)})),{simVals:i,saliVals:n,n1:r,n2:o,cliffsBitSet:s}}(L,l),$=function(t,e,n,i,r,o,s){const l=new Array(t).fill(0);for(let t=0;t!=i.length;++t)n[t]!=1/0&&(s.get(i[t])>s.get(r[t])?l[i[t]]+=n[t]:l[r[t]]+=n[t]);return a.Column.fromList("double",e,l)}(e.length,`sali_${i[0].substring(i[0].lastIndexOf("_"))}`,P.saliVals,P.n1,P.n2,0,l);t.columns.add($);const O=P.cliffsBitSet,k=function(t){const e=t.filter((t=>t!==1/0)),n=e.reduce(((t,e)=>Math.min(t,e)),Number.MAX_VALUE);return{max:e.reduce(((t,e)=>Math.max(t,e)),n),min:n}}(P.saliVals),G=.8/(k.max-k.min),F=o.shell.getTableView(t.name),D=F.addViewer(a.VIEWER.SCATTER_PLOT,{xColumnName:i[0],yColumnName:i[1],size:$.name,color:l.name,showXSelector:!1,showYSelector:!1,showSizeSelector:!1,showColorSelector:!1,markerMinSize:5,markerMaxSize:25,title:r}),V=function(t,e,n,i,r,o,s,l){const c={from:new Uint32Array(e.n1.length),to:new Uint32Array(e.n1.length),opacities:new Float32Array(e.n1.length),colors:new Array(e.n1.length),widths:new Float32Array(e.n1.length)};for(let n=0;n<e.n1.length;n++)c.from[n]=e.n1[n],c.to[n]=e.n2[n],c.opacities[n]=e.saliVals[n]===1/0?1:.2+(e.saliVals[n]-s.min)*l,c.colors[n]=t.selection.get(c.from[n])&&t.selection.get(c.to[n])?"255,255,0":"0,128,0",c.widths[n]=1;const h=a.DataFrame.create(c.from.length);return dt.forEach(((t,e)=>{h.columns.addNewString(t).init((t=>n.get(0===e?c.from[t]:c.to[t]))),function(t,e){Object.keys(e).forEach((n=>{t.tags[n]=e[n]}))}(h.col(t),o),h.col(t).semType=r})),h.columns.addNewFloat(lt).init((t=>Math.abs(i.get(c.from[t])-i.get(c.to[t])))),h.columns.addNewInt(ut).init((t=>t)),h.columns.addNewFloat(ct).init((t=>e.saliVals[t])),h.columns.addNewFloat(ht).init((t=>e.simVals[t])),h.name=`${st}${ot}`,{lines:c,linesDf:h}}(t,P,e,l,p,m,k,G);V.lines.skipMultiLineCalculation=!0,V.linesDf.col(ct).setTag("description","Structure−Activity Landscape Index (activity difference divided by 1 minus similarity)");const W=new j(D,i[0],i[1],V.lines,B.none),q=b?b(V.linesDf,dt).sort([ct],[!1]):V.linesDf.plot.grid().sort([ct],[!1]);q.col(ut)&&(q.col(ut).visible=!1),t.temp[".cliffsDfGrid"]=q;const z=s.button(`${V.linesDf.rowCount} cliffs`,(()=>{const t=rt()(F.viewers).some((t=>t.dataFrame.name===`${st}${ot}`));w&&!t&&F.addViewer(q),F.dockManager.dock(q,"down",null,"Activity cliffs",v??.2)}));z.classList.add("scatter_plot_link","cliffs_grid");const K=s.input.toggle("Show only cliffs",{value:!1,onValueChanged:e=>{e?(D.dataFrame.setTag(pt,i[0]),t.filter.and(O),at.next(i[0])):(D.dataFrame.setTag(pt,""),t.filter.setAll(!0),at.next(""))}});D.root.prepend(s.divH([z,K.root],"cliffs_div")),at.subscribe((t=>{K.enabled=""===t||t===i[0]}));let X=!1;D.onEvent("d4-before-draw-scene").subscribe((e=>{X?X=!1:K.value&&(setTimeout((()=>{t.filter.and(O)}),100),X=!0)}));const J=o.events.onViewerClosed.subscribe((t=>{t.args.viewer===D&&(F.dockManager.close(q.root),J.unsubscribe(),F.subs=F.subs.filter((t=>t!==J)))}));return F.subs.push(J),V.linesDf.onCurrentCellChanged.subscribe((()=>{for(let t=0;t<V.linesDf.rowCount;t++)V.lines.widths[t]=t===V.linesDf.currentRowIdx?3:1;W.linesToRender=V.lines;const n=V.linesDf.currentCol&&V.linesDf.currentCol.name===dt[1]?V.lines.to:V.lines.from,r=-1!==V.linesDf.currentRowIdx?V.linesDf.currentRowIdx:null;if(D.dataFrame.currentRowIdx=r?n[r]:-1,null!==r){const n=V.linesDf.currentRowIdx;W.currentLineId=n;const{zoomLeft:a,zoomRight:c,zoomTop:h,zoomBottom:u}=function(t,e,n,i,r,o){const s=Math.abs(n-r),a=Math.abs(i-o),l=t/s,c=e/a,h=Math.min(l,c),u=t/h*5,d=e/h*5,p=(n<r?n:r)+s/2-u/2,m=(i>o?i:o)-a/2+d/2;return{zoomLeft:p,zoomRight:p+u,zoomTop:m,zoomBottom:m-d}}(D.viewport.width,D.viewport.height,D.dataFrame.get(i[0],V.lines.from[n]),D.dataFrame.get(i[1],V.lines.from[n]),D.dataFrame.get(i[0],V.lines.to[n]),D.dataFrame.get(i[1],V.lines.to[n]));D.zoom(a,h,c,u),K.value?t.filter.and(O):!0===K.enabled&&t.filter.setAll(!0),setTimeout((()=>{!function(t,e,n,i,r,a,l,c,h){const u=e.getPane("Cliff Details");s.empty(u.root);const d=h({points:[n,i],lineId:r,df:t,seqCol:a,activityCol:l,sali:c});u.root.append(d),setTimeout((()=>{o.shell.o=e.root}),500)}(t,A,V.lines.from[r],V.lines.to[r],r,e,l,V.linesDf.get(ct,r),y);const n=D.dataFrame.getSortedOrder(F.grid.sortByColumns,F.grid.sortTypes);F.grid.scrollToCell(e.name,n.indexOf(D.dataFrame.currentRowIdx))}),1e3)}})),V.linesDf.onSelectionChanged.subscribe((e=>{setTimeout((()=>(()=>{const e=a.BitSet.create(t.rowCount);for(let t=0;t<V.linesDf.rowCount;t++){const n=V.linesDf.selection.get(t);n&&(e.set(V.lines.from[t],!0),e.set(V.lines.to[t],!0)),V.lines.colors[t]=n?"255,255,0":"0,128,0"}t.selection.copyFrom(e),W.linesToRender=V.lines})()),100)})),t.onSelectionChanged.subscribe((e=>{!1===t.selection.anyTrue&&"number"==typeof e&&(S?S=!1:(t=>{t.selection.setAll(!1);for(let t=0;t<V.lines.colors.length;t++)V.lines.colors[t]="0,128,0";W.linesToRender=V.lines})(q.dataFrame))})),W.lineClicked.subscribe((e=>{if(S=!0,W.currentLineId=e.id,-1!==e.id){const n=V.linesDf.selection.clone();setTimeout((()=>{e.event.ctrlKey?(n.set(e.id,!n.get(e.id)),V.linesDf.selection.copyFrom(n)):(V.linesDf.currentRowIdx!==e.id&&(V.linesDf.currentRowIdx=e.id,t.currentRowIdx=V.lines.from[e.id]),V.linesDf.selection.copyFrom(n));const i=V.linesDf.getSortedOrder(q.sortByColumns,q.sortTypes);q.scrollToCell(dt[0],i.indexOf(e.id))}),500)}})),W.lineHover.pipe((0,R.debounceTime)(500)).subscribe((n=>{-1!==n.id&&-1===t.mouseOverRowIdx&&s.tooltip.show(g({lineId:n.id,points:[V.lines.from[n.id],V.lines.to[n.id]],df:t,seqCol:e,activityCol:l}),n.x,n.y)})),D.addProperty("similarityLimit","double",C),A=function(){const t=s.accordion(),e=s.element("i");return e.className="grok-icon svg-icon svg-view-layout",t.addTitle(s.span([e,s.label("Activity cliffs")])),t.addPane("Cliff Details",(()=>s.divText("Cliff has not been selected")),!0),o.shell.o=t.root,t}(),D}var ft,gt=n(2003),yt=n(3516),bt=n(6718),vt=n(3077),wt=n(439);!function(t){t.IDENTITY="identity",t.SIMILARITY="similarity"}(ft||(ft={}));var Ct=n(9192);class At{constructor(){this.maxIterations={uiName:"Max iterations",value:0,tooltip:"Maximum iterations for MCL process.Default is \n 0 which will construct the clusters with plain sparse matrix. Values greater than 0 will \n perform MCL with the given number of iterations and will result in trans-cluster activity cliff lines."},this.useWebGPU={uiName:"Use WebGPU",value:!1,tooltip:"Use WebGPU for MCL calculation. (Experimental)",type:"boolean"}}}class St extends ${constructor(t={}){super({...t,enableMCL:!0});const e=this.tableInput.value.columns.numericalNoDateTime;this.activitiesInput=s.input.column("Activities",{table:this.tableInput.value,value:a.Utils.firstOrNull(e),filter:t=>Array.from(e).includes(t)}),this.activitiesInputRoot=this.activitiesInput.root,this.similarityInput=s.input.int("Similarity cutoff",{value:80}),this.methodsParams[N]=new At}onTableInputChanged(){if(super.onTableInputChanged(),this.activitiesInputRoot){s.empty(this.activitiesInputRoot);const t=this.tableInput.value.columns.numerical;this.activitiesInput=s.input.column("Activities",{table:this.tableInput.value,value:a.Utils.firstOrNull(t),filter:e=>Array.from(t).includes(e)}),Array.from(this.activitiesInput.root.children).forEach((t=>this.activitiesInputRoot.append(t)))}}getEditor(){return s.div([this.tableInput,this.colInputRoot,this.preprocessingFunctionInputRoot,this.preprocessingFuncSettingsDiv,this.activitiesInputRoot,this.similarityMetricInputRoot,this.methodInput,this.methodSettingsDiv,this.similarityMetricInputRoot,this.similarityInput],{style:{minWidth:"320px"},classes:"ui-form dim-reduction-dialog-form"})}getParams(){return{...super.getParams(),activities:this.activitiesInput.value,similarityThreshold:this.similarityInput.value}}getInput(){return{...super.getInput(),activityCol:this.activitiesInput.value.name,simThreshold:this.similarityInput.value}}async applyInput(t){super.applyInput(t),this.activitiesInput.value=this.tableInput.value.col(t.activityCol),this.similarityInput.value=t.simThreshold}}var xt,Et,Mt,_t=function(t,e,n,i){return new(n||(n=Promise))((function(r,o){function s(t){try{l(i.next(t))}catch(t){o(t)}}function a(t){try{l(i.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?r(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,a)}l((i=i.apply(t,e||[])).next())}))};function It(t){const e=["Embed_X","Embed_Y"],n=t.columns.names().filter((t=>t.includes(e[0]))).length+1;return e.map((t=>`${t}_${n}`))}function Tt(t,e){return`${e} (${t.length>4?`${t.length} columns`:t.map((t=>t.name)).join(", ")})`}n(5540),function(t){t.ADD="ADD",t.SUB="SUB",t.MULT="MULT"}(xt||(xt={})),function(t){t.SQUARE="SQUARE",t.INVERSE="INVERSE",t.TRANSPOSE="TRANSPOSE",t.NORM="NORM",t.COLUMN_NORM="COLUMN_NORM"}(Et||(Et={})),function(t){t.SCALARMULT="SCALARMULT",t.SCALARADD="SCALARADD",t.SCALARPOW="SCALARPOW"}(Mt||(Mt={})),Object.prototype.toString;var Lt=n(6873),Nt=n(4356),Pt=n(6717),$t=n(4870),Rt=n(3856),Ot=n(6882),kt=n(7278),Gt=n(5553),Ft=n(6642),Ht=n(3599),Bt=n(673),Dt=n(8312);class Vt extends Ft.sD{monomerLib=null;seqHelper=null;constructor(t,e){super(t,e,Di.logger),(0,bt.pj)().then((t=>{this.monomerLib=t.getMonomerLib(),this.dirty=!0,this.gridCol?.grid?.invalidate(),this.subs.push(this.monomerLib.onChanged.subscribe((()=>{this.dirty=!0,this.gridCol?.grid?.invalidate()})))})),(0,Dt.Q)().then((t=>{this.seqHelper=t,this.dirty=!0,this.gridCol?.grid?.invalidate()}))}}var jt=n(4139);const Ut=new class{constructor(){this.seqHandler="seq-handler",this.notationProvider="seq-handler.notation-provider"}};class Wt extends a.SemanticValue{get value(){return this.seqHandler.column.get(this.rowIdx)}set value(t){this.seqHandler.column.set(this.rowIdx,t)}get helm(){return this.seqHandler.getHelm(this.rowIdx)}isDna(){return this.seqHandler.alphabet===wt.YI.DNA}isRna(){return this.seqHandler.alphabet===wt.YI.RNA}isNaturalPeptide(){return this.seqHandler.alphabet===wt.YI.PT}isHelm(){return this.seqHandler.isHelm()}constructor(t,e){if(null==e.column.dataFrame)throw new Error("Attribute .dataFrame is required for SeqValueBase from cell");const n=e.column.dataFrame.cell(t,e.column.name);super(a.SemanticValue.fromTableCell(n).dart),this.rowIdx=t,this.seqHandler=e}getSplitted(){return this.seqHandler.getSplitted(this.rowIdx)}getSplittedWithSugarsAndPhosphates(){if(!this.isDna()&&!this.isRna())return this.getSplitted();const t=(0,kt.qp)(this.helm),e=[],n=/\(|\)/;for(let i=0;i<t.length;i++){const r=t.getOriginal(i),o=r.split(n).filter((t=>!!t));3===o.length?(e.push(o[0]),e.push(o[1]),e.push(o[2])):e.push(r)}return new kt.Mu(e,this.seqHandler.defaultGapOriginal)}}const qt=gt.zS;function zt(t){const e=!rt().enumerate(t).some((([e,n])=>e.length>1&&0!=n&&n!=t.length-1)),n=[],i=e?"":" ";for(const[e,r]of rt().enumerate(t)){let o=e;r<t.length&&(o+=`${e?"":"-"}${i}`),n.push(o)}return[n,e]}class Yt extends a.GridCellRenderer{seqHelper;get name(){return"sequence"}get cellType(){return"sequence"}get defaultHeight(){return 30}get defaultWidth(){return 230}hasMouseOver=!1;constructor(){super(),this.seqHelper=Di.seqHelper}getRendererBack(t){const[e,n,i]=(0,Ft.BG)(t);if(n.meta.units!==gt.Hi.CUSTOM)return i.rendererBack;let r=null;return this.seqHelper&&(r=this.seqHelper.getSeqHandler(n).getRendererBack(e,n)),r}onClick(t,e){if(t.cell.column.temp["current-word"]=t.cell.value,t.grid.invalidate(),t.cell.column.meta.units===gt.Hi.CUSTOM){const n=this.getRendererBack(t);n?.onClick(t,e)}}onMouseEnter(t,e){const n=this.getRendererBack(t);n?.onMouseEnter(t,e),this.hasMouseOver=!0}onMouseMove(t,e){const n=this.getRendererBack(t);n?.onMouseMove(t,e)}onMouseLeave(t,e){if((0,Gt.WN)(t,null),t?.grid){const e=t.grid.onEvent("d4-grid-show-tooltip").subscribe((t=>{e.unsubscribe(),this.hasMouseOver&&t.preventDefault()}))}this.hasMouseOver=!1}onDoubleClick(t,e){const n=this.getRendererBack(t);n?.onDoubleClick(t,e)}onKeyDown(t,e){const n=this.getRendererBack(t);n?.onKeyDown(t,e)}onKeyPress(t,e){const n=this.getRendererBack(t);n?.onKeyPress(t,e)}renderInt(t,e,n,i,r,o,s){const[a,l,c]=(0,Ft.BG)(o);if(!l)return;const h=l.temp,u=this.seqHelper.getSeqHandler(l);let d=(Di.properties?Di.properties.maxMonomerLength:4)??50;if(Rt.gp.maxMonomerLength in l.tags){const t=parseInt(l.getTag(Rt.gp.maxMonomerLength));d=!isNaN(t)&&t?t:50}if(".mm.cellRenderer.maxMonomerLength"in h){const t=h[".mm.cellRenderer.maxMonomerLength"];d=!isNaN(t)&&t?t:50}let p=c.rendererBack;p||(p=c.rendererBack=new Ot.Jy(a,l,Di.logger,d,(()=>{const{font:t,fontWidth:e}=Ot.Jy.getFontSettings(l);return{font:t,fontCharWidth:e,separatorWidth:u.isMsa()?8:0,monomerToShort:qt}})),l.temp[".mm.cellRenderer.settingsChanged"],Bt.s.true,p.init().then((()=>{}))),p.render(t,e,n,i,r,o,s)}render(t,e,n,i,r,o,s){if(o.cell.column?.meta?.units!==gt.Hi.CUSTOM)this.renderInt(t,e,n,i,r,o,s);else{const a=this.getRendererBack(o);a?.render(t,e,n,i,r,o,s)}}}class Kt extends Vt{constructor(t,e){super(t,e)}render(t,e,n,i,r,o,s){const a=window.devicePixelRatio,l=o.grid,c=o.cell.value??"",h=this.tableCol.tags[gt.gp.separator],u=this.tableCol.meta.units;i=(0,Ot.U0)(l,t,e,i,a);const[d,p]=c.split("#"),m=this.tableCol.temp[Ut.notationProvider]?.separatorSplitter??(0,kt.Iv)(u,h),f=m(d),g=m(p),y=rt().count(0).take(f.length).map((t=>f.getCanonical(t))).toArray(),b=rt().count(0).take(g.length).map((t=>g.getCanonical(t))).toArray(),v=this.tableCol.getTag(gt.gp.alphabet);Xt(t,e,n,i,r,y,b,v===gt.YI.RNA||v===gt.YI.DNA?Ht.o.NUCLEOTIDE:Ht.o.AA,this.monomerLib,void 0,void 0)}async awaitRendered(t=1e4,e=`${t} timeout`){return Promise.resolve()}static getOrCreate(t){const[e,n,i]=(0,Ft.BG)(t);let r=i.rendererBack;return r||(r=i.rendererBack=new Kt(e,n)),r}}class Zt extends a.GridCellRenderer{get name(){return"MacromoleculeDifferenceCR"}get cellType(){return jt.uF.MACROMOLECULE_DIFFERENCE}get defaultHeight(){return 30}get defaultWidth(){return 230}render(t,e,n,i,r,o,s){Kt.getOrCreate(o).render(t,e,n,i,r,o,s)}}function Xt(t,e,n,i,r,o,s,a,l,c,h){if(o.length!==s.length){const t=function(t,e){let n=0,i=0;const r=t.length>e.length?t:e,o=t.length>e.length?e:t;for(let t=0;t<o.length;t++)r[t]===o[t]&&n++;const s=r.length-o.length;for(let t=r.length-1;t>s;t--)r[t]===o[t-s]&&i++;const a=new Array(Math.abs(t.length-e.length)).fill(wt.b9[gt.Hi.FASTA]);function l(t){return n>i?t.concat(a):a.concat(t)}return t.length>e.length?e=l(rt()(e).toArray()):t=l(rt()(t).toArray()),{subParts1:t,subParts2:e}}(o,s);o=t.subParts1,s=t.subParts2}const u=t.measureText(zt(o).join("")),d=t.measureText(zt(s).join("")),p=Math.max(u.width,d.width);c&&(i=p+4*o.length,t.canvas.width=p+4*o.length);let m=Math.max(e,e+(i-(p+4*o.length))/2)+5;const f=Math.max(n,n+(r-28)/2);t.save();try{t.beginPath(),t.rect(e,n,c?p+4*o.length:i,r),t.clip(),t.font="12px monospace",t.textBaseline="top";const u=7;for(let e=0;e<o.length;e++){const n=o[e],c=s[e];let d=Ot.S$;if(l&&(d=l.getMonomerTextColor(a,n)),n!=c){let o=Ot.S$;l&&(o=l.getMonomerTextColor(a,c));const s=(0,Rt.oZ)(t,n,m,f-u,i,r,{color:d,pivot:0,left:!0}),p=(0,Rt.oZ)(t,c,m,f+u,i,r,{color:o,pivot:0,left:!0});m=Math.max(p,s),h&&(h[e]=Jt(n,c,d,o,f,u,r))}else m=(0,Rt.oZ)(t,n,m,f,i,r,{color:d,pivot:0,left:!0,transparencyRate:.5});m+=4}}finally{t.restore()}}function Jt(t,e,n,i,r,o,s){const a=document.createElement("canvas"),l=a.getContext("2d");l.font="12px monospace";const c=l.measureText(zt([t]).join("")).width,h=l.measureText(zt([e]).join("")).width,u=Math.max(c,h);return a.height=s,a.width=u+4,l.font="12px monospace",l.textBaseline="top",(0,Rt.oZ)(l,t,0,r-o,u,s,{color:n,pivot:0,left:!0}),(0,Rt.oZ)(l,e,0,r+o,u,s,{color:i,pivot:0,left:!0}),a}var Qt,te=n(8070),ee=n(4326);!function(t){t.Unknown="unknown",t.FR="framework",t.CDR="cdr"}(Qt||(Qt={}));const ne=new class{constructor(){this.regionTypes=[Qt.CDR],this.chains=["Heavy","Light"],this.skipEmptyPositions=!1,this.fitWidth=!1,this.positionWidth=16,this.positionHeight=ee.fH.Entropy,this.filterSource=ee.Fo.filterSource}};var ie=n(7602),re=n(250);const oe=Qt;var se,ae;!function(t){t.STYLE="Style",t.BEHAVIOR="Behavior",t.LAYOUT="Layout",t.DATA="Data"}(se||(se={})),function(t){t.skipEmptyPositions="skipEmptyPositions",t.regionTypes="regionTypes",t.chains="chains",t.fitWidth="fitWidth",t.positionWidth="positionWidth",t.positionHeight="positionHeight",t.filterSource="filterSource"}(ae||(ae={}));const le=ne;class ce extends a.JsViewer{viewed=!1;regionsFg=null;regionsRoot=null;isOpened=!1;panelNode=null;regions=[];regionTypes;chains;skipEmptyPositions;fitWidth;positionWidth;positionHeight;filterSource;constructor(){super(),this.skipEmptyPositions=this.bool(ae.skipEmptyPositions,le.skipEmptyPositions,{category:se.DATA}),this.regionTypes=this.stringList(ae.regionTypes,le.regionTypes,{category:se.DATA,choices:Object.values(oe).filter((t=>t!=oe.Unknown))}),this.chains=this.stringList(ae.chains,le.chains,{category:se.DATA,choices:["Heavy","Light"]}),this.fitWidth=this.bool(ae.fitWidth,le.fitWidth,{category:se.LAYOUT}),this.positionWidth=this.float(ae.positionWidth,le.positionWidth,{category:se.LAYOUT,editor:"slider",min:0,max:64,description:"Internal WebLogo viewers property width of position."}),this.positionHeight=this.string(ae.positionHeight,le.positionHeight,{category:se.LAYOUT,choices:Object.keys(ee.fH)}),this.filterSource=this.string(ae.filterSource,le.filterSource,{category:se.BEHAVIOR,choices:Object.values(ee.lT)}),this.viewSyncer=new ie.g(Di.logger)}static viewerCounter=-1;viewerId=++ce.viewerCounter;viewerToLog(){return`VdRegionsViewer<${this.viewerId}>`}async init(){this.subs.push((0,h.fromEvent)(this.root,"mousemove").subscribe(this.rootOnMouseMove.bind(this)))}detach(){const t=`${this.viewerToLog()}.detach()`,e=super.detach.bind(this);this.viewSyncer.sync(`${t}`,(async()=>{this.setDataInProgress||(this.viewed&&(await this.destroyView("detach"),this.viewed=!1),e())}))}onTableAttached(){super.onTableAttached(),this.setData(this.regions)}onPropertyChanged(t){if(super.onPropertyChanged(t),t){switch(t.name){case ae.regionTypes:case ae.chains:this.setData(this.regions)}switch(t.name){case ae.skipEmptyPositions:for(let t=0;t<this.logos.length;++t)for(const e of this.chains)this.logos[t][e].setOptions({[re.n5.skipEmptyPositions]:this.skipEmptyPositions});this.calcSize();break;case ae.fitWidth:case ae.positionWidth:this.calcSize();break;case ae.positionHeight:for(let t=0;t<this.logos.length;++t)for(const e of this.chains)this.logos[t][e].setOptions({[re.n5.positionHeight]:this.positionHeight});this.calcSize();break;case ae.filterSource:this.filterSourceInput.value=this.filterSource;break;default:this.setData(this.regions)}}else console.warn("Bio: VdRegionsViewer.onPropertyChanged() property is null")}setData(t){const e=`${this.viewerToLog()}.setData()`;Di.logger.debug(`${e}, in, regions.length = ${t.length}`),this.viewSyncer.sync(`${e}`,(async()=>{if(!this.setDataInProgress){this.setDataInProgress=!0;try{this.viewed&&(await this.destroyView("setData"),this.viewed=!1),this.regions=t,this.viewed||(await this.buildView("setData"),this.viewed=!0)}finally{this.setDataInProgress=!1}}}))}viewSyncer;setDataInProgress=!1;host=null;filterSourceInput;mainLayout=null;logos=[];viewSubs=[];async destroyView(t){Di.logger.debug(`Bio: VdRegionsViewer.destroyView( mainLayout = ${this.mainLayout?"value":"none"} ), purpose = '${t}', this.regions.length = ${this.regions.length}`),this.filterSourceInput&&s.empty(this.filterSourceInput.root),null!=this.mainLayout&&(this.mainLayout.remove(),this.host.remove(),this.host=null,this.mainLayout=null);for(const t of this.viewSubs)t.unsubscribe()}async buildView(t){Di.logger.debug(`Bio: VdRegionsViewer.buildView() begin, purpose = '${t}', this.regions.length = ${this.regions.length}`);const e=this.regions.filter((t=>this.regionTypes.includes(t.type))),n=Array.from(new Set(e.map((t=>t.order)))).sort(),i=[];for(let t=0;t<n.length;t++)for(const r of this.chains){const o=e.find((e=>e.order==n[t]&&e.chain==r));i.push((async()=>{const e=await this.dataFrame.plot.fromType("WebLogo",{sequenceColumnName:o.sequenceColumnName,startPositionName:o.positionStartName,endPositionName:o.positionEndName,fixWidth:!0,skipEmptyPositions:this.skipEmptyPositions,positionWidth:this.positionWidth,positionHeight:this.positionHeight,filterSource:this.filterSource});return e.onSizeChanged.subscribe((()=>{this.calcSize()})),[t,r,e]})())}const r=await Promise.all(i);this.logos=new Array(n.length);for(let t=0;t<n.length;++t)this.logos[t]={};for(const[t,e,n]of r)this.logos[t][e]=n,this.viewSubs.push(n.onFreqsCalculated.subscribe((()=>{this.calcSize()})));this.mainLayout=s.table(this.chains,(t=>[...n.length>0?[s.div(t,{style:{transform:"rotate(-90deg)",font:"12px Roboto, Roboto Local, sans-serif",textAlign:"center",width:"16px",marginTop:"24px",marginLeft:"6px"}})]:[],...[...Array(n.length).keys()].map((e=>{const n=this.logos[e][t];return n.root.style.height="100%",s.div([n.root],{style:{marginTop:"4px",marginBottom:"4px"}})}))]),["",...[...Array(n.length).keys()].map((t=>e.find((e=>e.order==n[t]&&e.chain==this.chains[0])).name||"Name"))]),this.mainLayout.className="mlb-vd-regions-viewer-table2",this.filterSourceInput=s.input.choice("Data source",{value:this.filterSource,items:Object.values(ee.lT),onValueChanged:this.filterSourceInputOnValueChanged.bind(this)}),this.filterSourceInput.root.style.position="absolute",this.filterSourceInput.root.style.right="9px",this.filterSourceInput.root.style.top="-4px",Math.ceil(255*Math.random()).toString(16),this.host=s.div([this.mainLayout,this.filterSourceInput.root],{}),this.root.appendChild(this.host),this.root.style.overflowX="auto",this.calcSize(),this.viewSubs.push(s.onSizeChanged(this.root).subscribe(this.rootOnSizeChanged.bind(this))),Di.logger.debug("Bio: VdRegionsViewer.buildView() end")}calcSizeRequested=!1;calcSize(){Di.logger.debug("Bio: VdRegionsViewer.calcSize(), start");const t=()=>{if(!this.host)return;const t=(this.root.clientHeight-54)/this.chains.length;let e=0;for(let n=0;n<this.logos.length;n++){for(const e of this.chains)this.logos[n][e].root.style.height=`${t}px`;e+=Math.max(...this.chains.map((t=>this.logos[n][t].Length)))}if(this.fitWidth){if(this.logos.length>0&&e>0){const t=22,n=13,i=9,r=(this.root.clientWidth-t-(this.logos.length-1)*i-n)/e;for(let t=0;t<this.logos.length;t++)for(const e of this.chains){const n=this.logos[t][e];n.setOptions({[re.n5.positionWidth]:r-n.positionMarginValue}),n.root.style.width=r*n.Length+"px"}}this.host.style.setProperty("overflow","hidden","important")}else{for(let t=0;t<this.logos.length;t++)for(const e of this.chains)this.logos[t][e].setOptions({[re.n5.positionWidth]:this.positionWidth});this.host.style.removeProperty("overflow")}0===this.positionWidth?this.host.style.setProperty("overflow-x","hidden","important"):this.host.style.removeProperty("overflow-x")};this.calcSizeRequested||(this.calcSizeRequested=!0,window.setTimeout((()=>{t(),this.calcSizeRequested=!1}),0))}rootOnSizeChanged(t){this.calcSize()}rootOnMouseMove(t){}filterSourceInputOnValueChanged(){const t=`${this.viewerToLog()}.filterSourceInputOnValueChanged()`,e=this.filterSourceInput.value;this.viewSyncer.sync(`${t}`,(async()=>{if(this.filterSource!==e){this.props.getProperty(ae.filterSource).set(this,e);for(let t=0;t<this.logos.length;t++)for(let e=0;e<this.chains.length;e++){const n=this.chains[e];this.logos[t][n].setOptions({[re.n5.filterSource]:this.filterSource})}}}))}_onRendered=new h.Subject;get onRendered(){return this._onRendered}invalidate(t){const e=`${this.viewerToLog()}.invalidate(${t?` <- ${t} `:""})`;this.viewSyncer.sync(`${e}`,(async()=>{this._onRendered.next()}))}async awaitRendered(t=5e3){await(0,te.PE)(this.onRendered,(()=>{}),(()=>{this.invalidate()}),t);const e=this.viewSyncer.resetErrors();if(e.length>0)throw e[0]}}var he=n(6625),ue=n(6863);async function de(t,e,n="Morgan"){const i=t.length,r=Di.seqHelper.getSeqHandler(t),o=Array(i);let s=1;const a=new Map,l=t.categories,c=t.getRawData();for(let e=0;e<i;e++){if(null===l[c[e]]||t.isNone(e)){o[e]=null;continue}o[e]="";const n=r.getSplitted(e);for(let t=0;t<n.length;t++){const i=n.getCanonical(t);a.has(i)||(a.set(i,String.fromCharCode(s)),s++),o[e]+=a.get(i)}}let h={};if(e===ue.Z.MONOMER_CHEMICAL_DISTANCE||e===ue.Z.NEEDLEMANN_WUNSCH){const t=Array.from(a.keys()),e=await(0,bt.A7)(t,n),i={};Object.entries(e.alphabetIndexes).forEach((([t,e])=>{i[a.get(t)]=e}));const r=o.reduce(((t,e)=>Math.max(t,e.length)),0);h={scoringMatrix:e.scoringMatrix,alphabetIndexes:i,maxLength:r}}return{seqList:o,options:h}}var pe=n(8115);function me(t){const e=s.divH([],{style:{gap:"10px"}}),n=s.divV([s.divText(t.seqCol.name),s.divText(t.activityCol.name)]);return n.style.fontWeight="bold",n.style.display="flex",n.style.justifyContent="space-between",e.append(n),t.points.forEach((n=>{const i=s.divText(t.activityCol.get(n).toFixed(2));i.style.display="flex",i.style.justifyContent="left",i.style.paddingLeft="30px",e.append(s.divV([s.divText(t.seqCol.get(n)),i]))})),e}function fe(t){const e=s.div();e.append(s.divText(t.seqCol.name,{style:{fontWeight:"bold"}}));const n=new Array(2);t.points.forEach(((e,i)=>{n[i]=t.activityCol.get(e)}));const i={},r=Di.seqHelper.getSeqHandler(t.seqCol),o=r.defaultBiotype,a=ye(r.getSplitted(t.points[0]),r.getSplitted(t.points[1]),o,i);return e.append(s.div(a,{style:{width:"300px",overflow:"scroll"}})),e.append(be(i)),e.append(ge("Activity delta",Math.abs(n[0]-n[1]))),e.append(ge("Cliff",t.sali)),e}function ge(t,e){return s.divH([s.divText(`${t}: `,{style:{fontWeight:"bold",paddingRight:"5px"}}),s.divText(e.toFixed(2))],{style:{paddingTop:"10px"}})}function ye(t,e,n,i){const r=document.createElement("canvas"),o=r.getContext("2d");r.height=30;const s=Di.monomerLib;return Xt(o,0,0,0,30,rt().count(0).take(t.length).map((e=>t.getCanonical(e))).toArray(),rt().count(0).take(e.length).map((t=>e.getCanonical(t))).toArray(),n,s,!0,i),r}function be(t){const e=s.div();if(Object.keys(t).length>0){const n=s.divV([]);n.append(s.divH([s.divText("Pos",{style:{fontWeight:"bold",width:"30px",borderBottom:"1px solid"}}),s.divText("Difference",{style:{fontWeight:"bold",borderBottom:"1px solid"}})]));for(const e of Object.keys(t))t[e].style.borderBottom="1px solid lightgray",n.append(s.divH([s.divText((parseInt(e)+1).toString(),{style:{width:"30px",borderBottom:"1px solid lightgray"}}),t[e]]));e.append(n)}return e}function ve(t,e){const n=a.Column.string("seq_diff",t.rowCount).init((n=>`${t.get(e[0],n)}#${t.get(e[1],n)}`));n.semType="MacromoleculeDifference",n.meta.units=t.col(e[0]).meta.units,n.setTag(gt.gp.separator,t.col(e[0]).getTag(gt.gp.separator)),t.columns.add(n);const i=t.plot.grid();return i.col(e[0]).visible=!1,i.col(e[1]).visible=!1,i}class we extends a.JsViewer{constructor(t,e){super(),this.name="",this.semType="",this.initialized=!1,this.gridSelect=!1,this.maxLimit=100,this.recomputeOnCurrentRowChange=!0,this.skipRecomputingProperies=[],this.debounceTimer=null,this.computeRequested=!1,this.renderPromise=Promise.resolve(),this.limit=this.int("limit",10,{min:1,max:this.maxLimit}),this.targetColumnName=this.string("targetColumnName",null,{...e?{semType:e}:{}}),this.name=t,this.semType=e}init(){this.initialized=!0}detach(){this.subs.forEach((t=>t.unsubscribe()))}async onTableAttached(){if(this.init(),this.dataFrame){this.subs.push(a.debounce(this.dataFrame.onRowsRemoved,50).subscribe((t=>this.render(!0))));const t="diversity"!==this.name;this.subs.push(a.debounce(this.dataFrame.onCurrentRowChanged,50).subscribe((e=>{this.gridSelect||this.render(t)}))),this.subs.push(a.debounce(this.dataFrame.selection.onChanged,50).subscribe((t=>this.render(!1)))),this.subs.push(a.debounce(s.onSizeChanged(this.root),50).subscribe((t=>this.render(!1)))),this.targetColumnName??(this.targetColumnName=this.dataFrame.columns.bySemType(this.semType).name),this.targetColumn=this.dataFrame.col(this.targetColumnName),this.getProperty("limit").fromOptions({min:1,max:this.maxLimit})}this.render()}onPropertyChanged(t){if(super.onPropertyChanged(t),this.initialized){if("targetColumnName"===t.name){const e=this.dataFrame.col(t.get(this));e.semType===this.semType&&(this.targetColumn=e)}this.debouncedRender()}}debouncedRender(t=!0){this.debounceTimer&&clearTimeout(this.debounceTimer),this.debounceTimer=setTimeout((()=>{this.render(t),this.debounceTimer=null}),100)}render(t=!0){this.renderPromise=this.renderPromise.then((async()=>{this.computeRequested=this.computeRequested||t,await this.renderInt(t)}))}async renderInt(t){}beforeRender(){return!(!this.initialized||this.dataFrame&&this.targetColumnName&&this.dataFrame.col(this.targetColumnName).semType!==this.semType&&(o.shell.error(`${this.targetColumnName} is not ${this.semType} type`),1))}}class Ce extends we{distanceMetric;fingerprint;metricsProperties=["distanceMetric","fingerprint"];fingerprintChoices=["Morgan","Pattern"];tags=[a.TAGS.UNITS,gt.gp.aligned,gt.gp.separator,gt.gp.alphabet,"cell.renderer"];preComputeDistanceMatrix=!1;constructor(t,e){super(t,e),this.fingerprint=this.string("fingerprint",this.fingerprintChoices[0],{choices:this.fingerprintChoices}),this.distanceMetric=this.string("distanceMetric",O.iS[0],{choices:O.iS})}async onTableAttached(){super.onTableAttached(),this.dataFrame&&(this.preComputeDistanceMatrix=this.dataFrame.rowCount<=22e3)}}const Ae={gapPenalty:1,matchScore:1,gapSymbol:wt.b9[wt.Hi.FASTA],localAlignment:!1};class Se extends Ce{seqHelper;cutoff;hotSearch;similarColumnLabel;sketchedMolecule="";curIdx=0;molCol=null;idxs=null;scores=null;gridSelect=!1;targetMoleculeIdx=0;computeCompleted=new h.Subject;distanceMatrixComputed=!1;mmDistanceMatrix;knn;kPrevNeighbors=0;demo;analysisGrid;subInited=!1;constructor(t,e){super("similarity",a.SEMTYPE.MACROMOLECULE),this.seqHelper=t,this.cutoff=this.float("cutoff",.01,{min:0,max:1}),this.hotSearch=this.bool("hotSearch",!0),this.similarColumnLabel=this.string("similarColumnLabel",null),this.demo=e}init(){this.hotSearch=!0,this.initialized=!0}async renderInt(t){if(this.beforeRender()&&this.targetColumn&&(this.curIdx=-1==this.dataFrame.currentRowIdx?0:this.dataFrame.currentRowIdx,t&&!this.gridSelect)){this.targetMoleculeIdx=(this.dataFrame.currentRowIdx??-1)<0?0:this.dataFrame.currentRowIdx,await this.computeByMM();const t=null!=this.similarColumnLabel?this.similarColumnLabel:`similar (${this.targetColumn})`;this.molCol=a.Column.string(t,this.idxs.length).init((t=>this.targetColumn?.get(this.idxs?.get(t)))),this.molCol.semType=a.SEMTYPE.MACROMOLECULE,this.tags.forEach((t=>this.molCol.setTag(t,this.targetColumn.getTag(t))));const e=a.DataFrame.fromColumns([this.idxs,this.molCol,this.scores]);await e.meta.detectSemanticTypes(),await o.data.detectSemanticTypes(e),this.molCol.temp["reference-sequence"]=this.targetColumn.get(this.targetMoleculeIdx),this.molCol.temp[".mm.cellRenderer.maxMonomerLength"]=4;let n=null;e.onCurrentRowChanged.subscribe((t=>{n&&clearTimeout(n),(e.currentRowIdx??-1)<0||(this.dataFrame.currentRowIdx=e.col("indexes").get(e.currentRowIdx),n=setTimeout((()=>{this.createPropertyPanel(e)}),300),this.gridSelect=!0)})),this.analysisGrid?(this.analysisGrid.dataFrame=e,this.analysisGrid.invalidate()):(this.analysisGrid=e.plot.grid(),(0,$t.Ku)(this.root,this.analysisGrid.root)),this.analysisGrid.col("indexes").visible=!1,(0,$t.Kd)(this.analysisGrid,this.molCol.name,450,30,!0);const i=this.idxs?.getRawData().findIndex((t=>t==this.targetMoleculeIdx));this.analysisGrid.cell("score",i).cell.value=null;const r=o.shell.tv;this.subInited||(r.grid.root.addEventListener("click",(t=>{this.gridSelect=!1})),this.subInited=!0),this.computeCompleted.next(!0)}}async computeByMM(){const t=this.targetColumn.length,e=Math.min(this.limit,t-1);if(!this.knn||this.kPrevNeighbors!==e){const n=(await de(this.targetColumn,ue.Z.LEVENSHTEIN)).seqList;this.kPrevNeighbors=e,this.knn=await(new H).getKNN(n,ue.Z.LEVENSHTEIN,Math.min(this.limit,t-1))}const n=new Array(e).fill(0).map(((t,e)=>({idx:this.knn.knnIndexes[this.targetMoleculeIdx][e],score:1-this.knn.knnDistances[this.targetMoleculeIdx][e]})));n.sort(((t,e)=>e.score-t.score)),n.unshift({idx:this.targetMoleculeIdx,score:a.FLOAT_NULL}),this.idxs=a.Column.int("indexes",e+1).init((t=>n[t].idx)),this.scores=a.Column.float("score",e+1).init((t=>n[t].score))}createPropertyPanel(t){const e=s.div(),n={},i=this.molCol?.name,r=t.col(i),a=this.seqHelper.getSeqHandler(this.targetColumn),l=this.seqHelper.getSeqHandler(r),c=a.getSplitted(this.targetMoleculeIdx),h=l.getSplitted(t.currentRowIdx),u=function(t,e,n={}){const i={...Ae,...n},r=t.length,o=e.length,s=Array(r+1).fill(0).map((()=>Array(o+1).fill(0)));let a=-9999,l=[1,1];for(let n=1;n<r+1;n++)for(let r=1;r<o+1;r++)s[n][r]=Math.max(0,s[n-1][r-1]+(t.getCanonical(n-1)===e.getCanonical(r-1)?i.matchScore:-i.matchScore),s[n-1][r]-i.gapPenalty,s[n][r-1]-i.gapPenalty),s[n][r]>=a&&(a=s[n][r],l=[n,r]);let c=i.localAlignment?l[0]:r,h=i.localAlignment?l[1]:o,u=new Array(0),d=new Array(0);for(;c>0&&h>0;){const n=Math.max(s[c-1][h-1],s[c-1][h],s[c][h-1]);s[c][h]==s[c-1][h-1]+i.matchScore&&n==s[c-1][h-1]?(u.push(t.getCanonical(c-1)),d.push(e.getCanonical(h-1)),c-=1,h-=1):s[c][h]==s[c-1][h]-i.gapPenalty?(d.push(i.gapSymbol),u.push(t.getCanonical(c-1)),c-=1):s[c][h]==s[c][h-1]-i.gapPenalty?(u.push(i.gapSymbol),d.push(e.getCanonical(h-1)),h-=1):(u.push(t.getCanonical(c-1)),d.push(e.getCanonical(h-1)),c-=1,h-=1)}u=[...rt().count(0).take(c).map((e=>t.getCanonical(e))),...u.reverse(),...i.localAlignment?rt().count(l[0]).take(r).map((e=>t.getCanonical(e))):[]],d=[...rt().count(0).take(h).map((t=>e.getCanonical(t))),...d.reverse(),...i.localAlignment?rt().count(l[1]).take(o).map((t=>e.getCanonical(t))):[]];const p=c,m=h;return p>m?d=[...new Array(p-m).fill(i.gapSymbol.valueOf()),...d]:u=[...new Array(m-p).fill(i.gapSymbol.valueOf()),...u],d.length>u.length?u.push(...new Array(d.length-u.length).fill(i.gapSymbol.valueOf())):d.push(...new Array(u.length-d.length).fill(i.gapSymbol.valueOf())),{seq1:u.join(""),seq2:d.join(""),seq1Splitted:new kt.Mu(u,i.gapSymbol),seq2Splitted:new kt.Mu(d,i.gapSymbol)}}(c,h),d=ye(u.seq1Splitted,u.seq2Splitted,l.defaultBiotype,n);e.append(s.div(d,{style:{width:"300px",overflow:"scroll"}})),c.length!==h.length&&e.append(s.divV([s.divText("Different sequence length:",{style:{fontWeight:"bold"}}),s.divText(`target: ${c.length} monomers`),s.divText(`selected: ${h.length} monomers`)],{style:{paddingBottom:"10px"}})),e.append(be(n));const p=s.accordion(),m=s.element("i");m.className="grok-icon svg-icon svg-view-layout",p.addTitle(s.span([m,s.label("Similarity search")])),p.addPane("Differences",(()=>e),!0),o.shell.o=p.root}}var xe=n(1407);class Ee extends Ce{seqHelper;diverseColumnLabel;renderMolIds=null;columnNames=[];computeCompleted=new h.Subject;constructor(t){super("diversity",a.SEMTYPE.MACROMOLECULE),this.seqHelper=t,this.diverseColumnLabel=this.string("diverseColumnLabel",null)}async renderInt(t){if(this.beforeRender()&&this.dataFrame&&t&&this.targetColumn){const t=this.seqHelper.getSeqHandler(this.targetColumn);await(t.isFasta()?this.computeByMM():this.computeByChem());const e=null!=this.diverseColumnLabel?this.diverseColumnLabel:`diverse (${this.targetColumnName})`,n=a.Column.string(e,this.renderMolIds.length).init((t=>this.targetColumn?.get(this.renderMolIds[t])));n.semType=a.SEMTYPE.MACROMOLECULE,this.tags.forEach((t=>n.setTag(t,this.targetColumn.getTag(t))));const i=a.DataFrame.fromColumns([n]);n.temp[".mm.cellRenderer.maxMonomerLength"]=4,i.onCurrentRowChanged.subscribe((t=>{this.dataFrame.currentRowIdx=this.renderMolIds[i.currentRowIdx]}));const r=i.plot.grid();(0,$t.Kd)(r,n.name,450,30),(0,$t.Ku)(this.root,r.root),this.computeCompleted.next(!0)}}async computeByChem(){const t=await(0,xe.R)(this.targetColumn,this.seqHelper);a.DataFrame.fromColumns([t]),this.renderMolIds=await o.functions.call("Chem:callChemDiversitySearch",{col:t,metricName:this.distanceMetric,limit:this.limit,fingerprint:this.fingerprint})}async computeByMM(){const t=(await de(this.targetColumn,ue.Z.LEVENSHTEIN)).seqList,e=new F(!0,!1),n=await e.calc(t,ue.Z.LEVENSHTEIN);e.terminate();const i=this.targetColumn.length,r=(o=i,(t,e)=>o*t+e-Math.floor((t+2)*(t+1)/2));var o;this.renderMolIds=function(t,e,n){function i(t,e){let n=null,i=null;for(const r of t){const t=e(r);(null==i||t>i)&&(n=r,i=t)}return n}const r=[(s=t-1,Math.floor(function(t){return Math.random()*t}(s)))],o=new Set;var s;for(let e=0;e<t;++e)r.includes(e)||o.add(e);for(;r.length<e;){const t=i(o.values(),(t=>Math.min.apply(Math,r.map((function(e,i){return n(t,e)})))));null!=t&&(r.push(t),o.delete(t))}return r}(i,Math.min(i,this.limit),((t,e)=>this.targetColumn.isNone(t)||this.targetColumn.isNone(e)?0:n[r(t,e)]))}}var Me,_e=n(5433),Ie=n(3890),Te=n(1687);!function(t){t.TYPE="V2000",t[t.NUM_OF_HEADER_LINES=3]="NUM_OF_HEADER_LINES",t[t.NUM_OF_COUNTS_DIGITS=3]="NUM_OF_COUNTS_DIGITS",t[t.ATOM_TYPE_COL=4]="ATOM_TYPE_COL",t[t.FIRST_BONDED_ATOM_COL=1]="FIRST_BONDED_ATOM_COL",t[t.BOND_TYPE_COL=3]="BOND_TYPE_COL",t[t.RGP_SHIFT=8]="RGP_SHIFT",t[t.MAX_ATOM_COUNT=999]="MAX_ATOM_COUNT",t.RGP_LINE_START="M RGP",t.ATOM_ALIAS_LINE_START="A ",t.END="M END"}(Me||(Me={}));class Le{constructor(t){this.init(t)}init(t){this.fileContent=t.replace(/\r/g,""),this._atomCount=void 0,this._atomTypes=void 0,this._bondCount=void 0,this._bondTypes=void 0,this.xyzAtomCoordinates=void 0,this._pairsOfBondedAtoms=void 0}get atomCount(){return void 0===this._atomCount&&this.setAtomAndBondCounts(),this._atomCount}get bondCount(){return void 0===this._bondCount&&this.setAtomAndBondCounts(),this._bondCount}get x(){var t;return null!==(t=this.xyzAtomCoordinates)&&void 0!==t||(this.xyzAtomCoordinates=this.parseAtomCoordinates()),this.xyzAtomCoordinates.x}get y(){var t;return null!==(t=this.xyzAtomCoordinates)&&void 0!==t||(this.xyzAtomCoordinates=this.parseAtomCoordinates()),this.xyzAtomCoordinates.y}get z(){var t;return null!==(t=this.xyzAtomCoordinates)&&void 0!==t||(this.xyzAtomCoordinates=this.parseAtomCoordinates()),this.xyzAtomCoordinates.z}get atomTypes(){var t;return null!==(t=this._atomTypes)&&void 0!==t||(this._atomTypes=this.parseAtomTypes()),this._atomTypes}get pairsOfBondedAtoms(){var t;return null!==(t=this._pairsOfBondedAtoms)&&void 0!==t||(this._pairsOfBondedAtoms=this.parseBondedAtomPairs()),this._pairsOfBondedAtoms}get bondTypes(){var t;return null!==(t=this._bondTypes)&&void 0!==t||(this._bondTypes=this.parseBondTypes()),this._bondTypes}setAtomAndBondCounts(){const{atomCount:t,bondCount:e}=this.parseAtomAndBondCounts();this._atomCount=t,this._bondCount=e}getNextColumnIdx(t){for(;!this.isWhitespace(t);)++t;for(;this.isWhitespace(t);)++t;return t}shiftIdxToSpecifiedColumn(t,e){let n=t;const i=this.isWhitespace(n)?e:e-1;for(let t=0;t<i;t++)n=this.getNextColumnIdx(n);return n}parseAtomTypes(){const t=this.atomCount,e=new Array(t);let n=this.getAtomBlockIdx();for(let i=0;i<t;i++)n=this.shiftIdxToAtomType(n),e[i]=this.parseAtomType(n),n=this.getNextLineIdx(n);return e}parseAtomCoordinates(){const t=new Float32Array(this.atomCount),e=new Float32Array(this.atomCount),n=new Float32Array(this.atomCount);let i=this.getAtomBlockIdx();for(let r=0;r<this.atomCount;r++){i=this.shiftIdxToXColumn(i);for(const o of[t,e,n])o[r]=this.parseFloatValue(i),i=this.getNextColumnIdx(i);i=this.getNextLineIdx(i)}return{x:t,y:e,z:n}}parseBondedAtomPairs(){const t=new Array(this.bondCount);let e=this.getBondBlockIdx();for(let n=0;n<this.bondCount;n++){e=this.shiftIdxToBondedAtomsPair(e);const i=new Uint16Array(2);i[0]=this.parseIntValue(e),e=this.getNextColumnIdx(e),i[1]=this.parseIntValue(e),t[n]=i,e=this.getNextLineIdx(e)}return t}parseBondTypes(){const t=this.bondCount,e=new Uint16Array(t);let n=this.getBondBlockIdx();for(let i=0;i<t;i++)n=this.shiftIdxToBondType(n),e[i]=this.parseIntValue(n),n=this.getNextLineIdx(n);return e}isWhitespace(t){const e=this.fileContent[t];return" "===e||"\t"===e}getNextLineIdx(t){return"\n"!==this.fileContent[t]?this.fileContent.indexOf("\n",t)+1:t+1}parseFloatValue(t){return this.parseNumericValue(parseFloat,t)}parseIntValue(t){return this.parseNumericValue(parseInt,t)}parseNumericValue(t,e){let n=e+1;for(;!this.isWhitespace(n);)++n;return t(this.fileContent.substring(e,n))}}class Ne extends Le{constructor(t){super(t),this.init(t)}init(t){super.init(t)}parseAtomType(t){let e=t,n=e;return this.isQuote(e)?(n=this.getNextIdenticalChar(e),e++):n=this.fileContent.indexOf(" ",n),this.fileContent.substring(e,n)}isQuote(t){const e=this.fileContent[t].charCodeAt(0);return 39===e||34===e}getNextIdenticalChar(t){const e=this.fileContent[t];return e?this.fileContent.indexOf(e,t+1):-1}isQuery(){return this.isQueryOrFragment(((t,e)=>{return 39===t||34===t||76===t&&!((n=this.fileContent.charCodeAt(e+1))>64&&n<91||n>96&&n<123);var n}))}isFragment(){return this.isQueryOrFragment((t=>82===t||42===t))}isQueryOrFragment(t){const e=this.atomCount;let n=this.getAtomBlockIdx();for(let i=0;i<e;i++){if(n=this.shiftIdxToAtomType(n),t(this.fileContent.charCodeAt(n),n))return!0;n=this.getNextLineIdx(n)}return!1}}class Pe extends Ne{constructor(t){super(t)}getAtomLines(){const t=this.getAtomBlockIdx(),e=this.getBondBlockIdx();return this.fileContent.substring(t,e).split("\n").slice(0,this.atomCount)}getBondLines(){const t=this.getBondBlockIdx();return this.fileContent.substring(t).split("\n").slice(0,this.bondCount)}getRGroupIdToAtomicIdxMap(){const t=new Map,e=this.fileContent.split("\n");e.filter((t=>t.startsWith(Me.RGP_LINE_START))).forEach((e=>{const n=this.getAtomIdxToRgpIdxList(e);for(const[e,i]of n){if(t.has(e))throw new Error(`R group ${e} is already in the map`);t.set(e,i)}}));const n=e.map(((t,e)=>{if(t.startsWith(Me.ATOM_ALIAS_LINE_START))return e})).filter((t=>void 0!==t)),i=n.map((t=>e[t])),r=n.map((t=>e[t+1]));i.forEach(((e,n)=>{const i=parseInt(e.split(/\s+/)[1])-1,o=parseInt(r[n].substring(1));if(t.has(o))throw new Error(`R group ${o} is already in the map`);t.set(o,i)}));const o=this.getRGroupAtomicIndices().filter((e=>!Array.from(t.values()).includes(e)));if(0!==o.length)throw new Error(`Unaccounted R group indices: ${o}`);return t}getAtomIdxToRgpIdxList(t){const e=t.split(/\s+/).filter((t=>t)).slice(3).map((t=>parseInt(t))),n=new Array(e.length/2);for(let t=0;t<e.length;t+=2)n[t/2]=[e[t+1],e[t]-1];return n}getRGroupAtomicIndices(){return this.atomTypes.map(((t,e)=>{if(t.includes("R#"))return e})).filter((t=>void 0!==t))}static isValidMolfile(t){return-1!==t.indexOf(Me.TYPE)&&-1!==t.indexOf(Me.END)}shiftIdxToAtomType(t){return this.shiftIdxToSpecifiedColumn(t,Me.ATOM_TYPE_COL)}getCountsLineIdx(){let t=0;for(let e=0;e<Me.NUM_OF_HEADER_LINES;++e)t=this.getNextLineIdx(t);return t}getAtomBlockIdx(){let t=this.getCountsLineIdx();return t=this.getNextLineIdx(t),t}shiftIdxToXColumn(t){return this.getNextColumnIdx(t)}shiftIdxToBondedAtomsPair(t){return this.shiftIdxToSpecifiedColumn(t,Me.FIRST_BONDED_ATOM_COL)}shiftIdxToBondType(t){return this.shiftIdxToSpecifiedColumn(t,Me.BOND_TYPE_COL)}getBondBlockIdx(){let t=this.getAtomBlockIdx();for(let e=0;e<this.atomCount;e++)t=this.getNextLineIdx(t);return t}parseAtomAndBondCounts(){let t=this.getCountsLineIdx(),e=t+Me.NUM_OF_COUNTS_DIGITS;const n=parseInt(this.fileContent.substring(t,e));return t=e,e+=Me.NUM_OF_COUNTS_DIGITS,{atomCount:n,bondCount:parseInt(this.fileContent.substring(t,e))}}}class $e extends Ne{constructor(t){super(t),this.init(t)}getAtomLines(){const t=this.getAtomBlockIdx(),e=this.getBondBlockIdx();return this.fileContent.substring(t,e).split("\n").slice(0,this.atomCount)}getBondLines(){const t=this.getBondBlockIdx();return this.fileContent.substring(t).split("\n").slice(0,this.bondCount)}getRGroupIdToAtomicIdxMap(){const t=new Map;return this.getAtomLines().forEach(((e,n)=>{const i=e.match(/RGROUPS=\(([\d\s]+)\)/);if(i){const e=i[1].split(/\s+/).map((t=>parseInt(t)));if(e.length>2)throw new Error(`R group data ${e} has more than 2 elements`);const r=e[1];if(t.has(r))throw new Error(`R group ${r} is already in the map`);t.set(r,n)}})),t}shiftIdxToAtomType(t){return this.shiftIdxToSpecifiedColumn(t,4)}getCountsLineIdx(){return this.fileContent.indexOf("M V30 COUNTS ")}getAtomBlockIdx(){let t=this.fileContent.indexOf("M V30 BEGIN ATOM");return t=this.getNextLineIdx(t),t}shiftIdxToXColumn(t){let e=this.shiftIdxToAtomType(t);return this.isQuote(e)?(e=this.getNextIdenticalChar(e),e=this.getNextColumnIdx(e),e):this.shiftIdxToSpecifiedColumn(t,5)}shiftIdxToBondedAtomsPair(t){return this.shiftIdxToSpecifiedColumn(t,5)}shiftIdxToBondType(t){return this.shiftIdxToSpecifiedColumn(t,4)}getBondBlockIdx(){return this.getNextLineIdx(this.fileContent.indexOf("M V30 BEGIN BOND"))}static isValidMolfile(t){return-1!==t.indexOf("V3000")&&-1!==t.indexOf("M END")}parseAtomAndBondCounts(){let t=this.fileContent.indexOf("M V30 COUNTS ")+14,e=this.fileContent.indexOf(" ",t+1);const n=parseInt(this.fileContent.substring(t,e));return t=e+1,e=this.fileContent.indexOf(" ",t+1),{atomCount:n,bondCount:parseInt(this.fileContent.substring(t,e))}}}class Re{constructor(){}static getInstance(t){if(Re.isMolfileV2K(t))return new Pe(t);if(Re.isMolfileV3K(t))return new $e(t);throw new Error("Malformed molfile")}static isMolfileV2K(t){return Pe.isValidMolfile(t)}static isMolfileV3K(t){return $e.isValidMolfile(t)}}var Oe=n(6197),ke=n(9124),Ge=n(3527);class Fe{biotype;id;n;m;type;mt;smiles;get issmiles(){return!!this.smiles}at={R1:"H",R2:"H",R3:"H",R4:"H",R5:"H",R6:"H",R7:"H",R8:"H",R9:"H"};get rs(){return Object.keys(this.at).length}constructor(t,e,n="missing",i=void 0,r=void 0,o=void 0,s){if(this.biotype=t,this.id=e,this.n=n,this.m=i,this.type=r,this.mt=o,this.smiles=s,!this.id)throw new Error("Invalid arg undefined [id].")}static objCounter=-1;objId=++Fe.objCounter;className="WebEditorMonomerDummy";toLog(){return`Helm: ${this.className}<${this.objId}>`}}class He extends Fe{backgroundcolor="#FFFFFF";linecolor="#808080";textcolor="#808080";constructor(t){super(t,"*","gap")}}class Be extends Fe{backgroundcolor="#808080";linecolor="#000000";textcolor="#000000";constructor(t,e){super(t,e,"ambiguous")}}class De extends Fe{backgroundcolor="#FF4444";linecolor="#800000";textcolor="#FFFFFF";constructor(t,e,n){super(t,e,"missing"),n&&(this.backgroundcolor="#C0C0C0",this.linecolor="#404040",this.textcolor="#404040")}}class Ve extends Fe{backgroundcolor="#FFFF44";linecolor="#800000";textcolor="#000000";constructor(t,e){super(t,e,"broken")}}class je{id;m;n;na;type;mt;at;smiles;get rs(){return Object.keys(this.at).length}get issmiles(){return!!this.smiles}linecolor;backgroundcolor;textcolor;constructor(t,e,n,i,r,o,s,a){this.id=t,this.m=e,this.n=n,this.na=i,this.type=r,this.mt=o,this.at=s,this.smiles=a}static fromMonomer(t,e,n){let i={};const r=e.symbol,o=e.smiles;if(e.rgroups.length>0)e.rgroups.forEach((t=>{i[t.label]=t.capGroupName}));else{if(!o){if(e.lib)return new Ve(t,r);throw new Error("Unexpected missing monomer without .lib")}i=n.getRS(o)}const s=new je(e.symbol,e.molfile,e.name,e.naturalAnalog,e.polymerType,e.monomerType,i),a=n.getMonomerColors(t,e.symbol);return a&&(s.textcolor=a?.textcolor,s.linecolor=a?.linecolor,s.backgroundcolor=a?.backgroundcolor),s}}const Ue={[Ht.o.BASE]:{A:"#20E040",G:"#040404",T:"#FF8080",C:"#2060FF",U:"#FF8080"},[Ht.o.NUCLEOTIDE]:{A:"#20E040",G:"#040404",T:"#FF8080",C:"#2060FF",U:"#FF8080"},[Ht.o.LINKER]:{P:"#9aa5e1",p:"#9aa5e1"},[Ht.o.SUGAR]:{R:"#7a85c1",r:"#7a85c1"},[Ht.o.AA]:{A:"rgb(44,160,44)",R:"rgb(23,190,207)",N:"rgb(235,137,70)",D:"rgb(31,119,180)",C:"rgb(188,189,34)",E:"rgb(31, 120, 150)",Q:"rgb(205, 111, 71)",G:"rgb(214,39,40)",H:"rgb(158,218,229)",I:"rgb(23,103,57)",L:"rgb(30,110,96)",K:"rgb(108, 218, 229)",M:"rgb(60,131,95)",F:"rgb(24,110,79)",P:"rgb(255,152,150)",S:"rgb(255,187,120)",T:"rgb(245,167,100)",W:"rgb(182, 223, 138)",Y:"rgb(152,223,138)",V:"rgb(74,160,74)"},[Ht.o.CHEM]:{R:"#eeeeee"},[Ht.o.BLOB]:{B:"#999999",G:"#e2e2e2"}},We=/[\w()]+/,qe=RegExp(String.raw`\(${We}(,${We})+\)`),ze=t=>{const e=s.canvas(250,250);return o.chem.canvasMol(0,0,250,250,e,t),e},Ye=new Ge.Mi([255,255,255]),Ke=new Ge.Mi([0,0,0]),Ze=.7*(0,z.wQ)(Ye);class Xe{_monomers;source;_isEmpty;get isEmpty(){return this._isEmpty}_onChanged=new h.Subject;get onChanged(){return this._onChanged}constructor(t,e){this._monomers=t,this.source=e,this._isEmpty=!this._monomers||0===Object.keys(this._monomers).length||Object.entries(this._monomers).every((([t,e])=>0===Object.keys(e).length));for(const[t,e]of Object.entries(this._monomers))for(const[t,n]of Object.entries(e))n.lib=this}getMonomerSymbolsByType(t){return Object.keys(this._monomers[t])}addMissingMonomer(t,e){let n=this._monomers[t];n||(n=this._monomers[t]={});let i=e;return e==wt._S||e===wt.b9[wt.Hi.HELM]?i="Gap":("PEPTIDE"===t&&"X"===e||"RNA"===t&&"N"===e)&&(i="Any"),n[e]={symbol:e,name:i,molfile:"",author:"MISSING",id:-1,rgroups:rt().count(1).take(9).map((t=>({capGroupSmiles:"",alternateId:"",capGroupName:"",label:`R${t.toString()}`}))).toArray(),smiles:"",polymerType:t,monomerType:void 0,createDate:null}}getMonomer(t,e){let n=e;"RNA"==t&&"R"==n&&(n="r"),"RNA"==t&&"P"==n&&(n="p");let i=null;if(t){const e=this._monomers[t];i=e?e[n]:null}else{Di.logger.warning(`Bio: MonomerLib.getMonomer() symbol '${e}', polymerType not specified.`);for(const[t,e]of Object.entries(this._monomers))if(i=e[n],i)break}return i}getWebEditorMonomer(t,e){const[n,i]=(0,ke.fA)(t,e),r=(0,Oe.Y)(n);let o=this.getMonomer(r,i);if(o&&n==Ht.o.LINKER&&2!=o.rgroups.length)return null;if(o&&n==Ht.o.SUGAR&&3!=o.rgroups.length)return null;o||(o=this.addMissingMonomer(r,i));let s=o.wem??null;return s||(i===wt._S||"*"==i?s=o.wem=new He(n):n===Ht.o.NUCLEOTIDE&&"N"===i||n===Ht.o.AA&&"X"===i||(Ht.o.CHEM,0)||qe.test(i)?s=o.wem=new Be(n,i):o.lib||(s=o.wem=new De(n,i,this.isEmpty)),s||(s=o.wem=je.fromMonomer(n,o,this))),s}getTooltip(t,e){const n=(0,Oe.Y)(t),i=s.div([],{classes:"ui-form ui-tooltip"}),r=this.getWebEditorMonomer(t,e),o=this.getMonomer(n,e);if(o){const t=o.symbol,[e,n,a]=(o.name,r?[r.textcolor,r.backgroundcolor,r.linecolor]:["#202020","#A0A0A0","#202020"]);let l;if(i.append(s.divH([s.div([t],{style:{textWrap:"nowrap",marginLeft:"4px",marginRight:"4px",color:e,backgroundColor:n,borderColor:a,borderWidth:"1px",borderStyle:"solid",borderRadius:"2px",padding:"3px",minWidth:"24px",textAlign:"center"}}),s.div([o.name],{style:{padding:"4px"}})],{style:{display:"flex",flexDirection:"row",justifyContent:"left"}})),l=o.molfile?ze(o.molfile):o.smiles?s.divV([ze(o.smiles),s.divText("from smiles",{style:{fontSize:"smaller"}})]):s.divText("No structure",{style:{margin:"6px"}}),i.append(s.div(l,{style:{display:"flex",flexDirection:"row",justifyContent:"center",margin:"6px"}})),o.symbol!=wt._S){let t=o.lib?.source;t?(t.endsWith(".json")&&(t=t.substring(0,t.length-5)),t=t.replace(/_/g," ").replace(/-/g," ").replace(/([a-z])([a-z])([A-Z])/g,"$1$2 $3"),i.append(s.divText(t))):i.append(s.divText("Missed in libraries"))}}else i.append(s.divV([s.divText(`Monomer '${e}' of type '${n}' not found.`),s.divText("Open the Context Panel, then expand Manage Libraries")]));return i}getMonomerTextColor(t,e){const n=this.getMonomerColors(t,e),i=t=>{const e=/rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)/.exec(t);if(e)return[parseInt(e[1]),parseInt(e[2]),parseInt(e[3])];const n=a.Color.fromHtml(t);return[a.Color.r(n),a.Color.g(n),a.Color.b(n)]},r=i(n.textcolor),o=new Ge.Mi([...r.map((t=>t+1))]),s=(0,z.KE)(o,Ye)/((0,z.wQ)(o)*(0,z.wQ)(Ye)),l=i(n.backgroundcolor),c=new Ge.Mi([...l.map((t=>t+.01))]);let h;h=(0,z.KE)(c,Ye)/((0,z.wQ)(c)*(0,z.wQ)(Ye))<s?l:r;let u=new Ge.Mi(h);const d=(0,z.wQ)(u);return d>Ze&&(u=(0,z.dC)(Ke,u,Ze/d)),`rgb(${u[0]}, ${u[1]}, ${u[2]})`}getMonomerColors(t,e){const n="default";let i=n;const r=(0,Oe.Y)(t),o=this.getMonomer(r,e);let s;if(o){if(o.meta&&o.meta.colors){const t=o.meta.colors;n in t||(i="default"),s=t[i]}if(!s){const e=Ue[t],n=e?.[o.symbol];n&&(s={textColor:a.Color.toHtml(a.Color.getContrastColor(a.Color.fromHtml(n))),lineColor:"#202020",backgroundColor:n})}const e=o.naturalAnalog;if(!s&&e)return this.getMonomerColors(t,e)}return s||(s={textColor:"#202020",lineColor:"#202020",backgroundColor:"#A0A0A0"}),{textcolor:s.text??s.textColor,linecolor:s.line??s.lineColor,backgroundcolor:s.background??s.backgroundColor}}getRS(t){const e=t.match(/(?<=\[)[^\][]*(?=])/gm),n={};let i,r="";if(e)for(let t=0;t<e.length;t++)if(null!=e[t]&&/\d/.test(e[t])){i=e[t][e[t].length-1],e[t]=e[t].replace(/[0-9]/g,"");for(let n=0;n<e[t].length;n++)":"!=e[t][n]&&(r+=e[t][n]);n["R"+i]=r,r=""}return n}}var Je=n(5488),Qe={};Qe.styleTagTransform=A(),Qe.setAttributes=b(),Qe.insert=g().bind(null,"head"),Qe.domAPI=m(),Qe.insertStyleElement=w(),d()(Je.A,Qe),Je.A&&Je.A.locals&&Je.A.locals;class tn extends Xe{error;_duplicateMonomers={};get duplicateMonomers(){return this._duplicateMonomers}_duplicatesHandled=!0;get duplicatesHandled(){return this._duplicatesHandled}duplicatesNotified=!1;constructor(t,e,n=void 0){super(t,e),this.error=n}toJSON(){const t=[];for(const e of Object.values(this._monomers))for(const n of Object.values(e))t.push({...n,lib:void 0,wem:void 0});return t}getMonomer(t,e){let n=e;"RNA"==t&&"R"==n&&(n="r"),"RNA"==t&&"P"==n&&(n="p");let i=null;if(t){const e=this._monomers[t];i=e?.[n]??null}else{Di.logger.warning(`Bio: MonomerLib.getMonomer() symbol '${e}', polymerType not specified.`);for(const[t,e]of Object.entries(this._monomers))if(i=e[n],i)break}return i}_monomerSets=null;getMonomerSet(t){const e=(0,Oe.Y)(t);if(this._monomerSets||(this._monomerSets={}),!(t in this._monomerSets))for(const[t,n]of Object.entries(this._monomers[e]));return this._monomerSets[t]}getPolymerTypes(){return Object.keys(this._monomers)}getMonomerMolsByPolymerType(t){const e={};return Object.keys(this._monomers[t]??{}).forEach((n=>{e[n]=this._monomers[t][n].molfile})),e}getMonomerSymbolsByRGroup(t,e,n){let i=this.getMonomerSymbolsByType(e).map((t=>this.getMonomer(e,t)));return i=i.filter((t=>null!==t)),0===i.length?[]:(i=i.filter((e=>{if(!e?.rgroups)return!1;let n=e?.rgroups.length>=t;var i;return i=Re.getInstance(e.molfile).atomTypes,i.map(((t,e)=>"R#"===t?e:-1)).filter((t=>-1!==t)),n&&=!0,n})),i.map((t=>t?.symbol)))}_updateLibInt(t){const e=t.getPolymerTypes(),n=this.getPolymerTypes();e.forEach((e=>{n.includes(e)||(this._monomers[e]={}),t.getMonomerSymbolsByType(e).forEach((n=>{this._monomers[e][n]&&(this._duplicateMonomers[e]??={},this._duplicateMonomers[e][n]??=[this._monomers[e][n]],this._duplicateMonomers[e][n].push(t.getMonomer(e,n))),this._monomers[e][n]=t.getMonomer(e,n)}))})),this._isEmpty=this.isEmpty&&t.isEmpty}updateLibs(t,e=!1){e&&(this._monomers={},this._isEmpty=!0),this._duplicateMonomers={};for(const e of t)e.error||this._updateLibInt(e);Object.entries(this.duplicateMonomers).length>0?(0,Nt.ub)().then((t=>{this.assignDuplicatePreferences(t)})):this._duplicatesHandled=!0,this._onChanged.next()}assignDuplicatePreferences(t){let e=!0;for(const n in this.duplicateMonomers)for(const i in this.duplicateMonomers[n])if(t.duplicateMonomerPreferences?.[n]?.[i]){const r=t.duplicateMonomerPreferences[n][i],o=this.duplicateMonomers[n][i].find((t=>t.lib?.source===r));o?this._monomers[n][i]=o:e=!1}else e=!1;return this._duplicatesHandled=e,e}clear(){this._monomers={},this._onChanged.next()}getSummaryObj(){const t={},e=this.getPolymerTypes();for(const n of e)t[n]=this.getMonomerSymbolsByType(n).length;return t}getSummaryDf(){const t=this.getPolymerTypes(),e=new Array(t.length);for(const[n,i]of rt().enumerate(t))e[i]=this.getMonomerSymbolsByType(n).length;return a.DataFrame.fromColumns([a.Column.fromStrings("polymerType",t),a.Column.fromList(a.COLUMN_TYPE.INT,"count",e)])}getSummary(){const t=this.getPolymerTypes();return 0==t.length?"empty":t.map((t=>`${t} ${this.getMonomerSymbolsByType(t).length}`)).join("\n")}static overrideCounter=0;override(t,e){return new en(t,`override: ${++tn.overrideCounter}, ${e}`,this)}}class en extends Xe{data;base;constructor(t,e,n){super(t,e),this.data=t,this.base=n}get onChanged(){return this.base.onChanged}getMonomerSymbolsByType(t){const e=this.base.getMonomerSymbolsByType(t);for(const n of Object.keys(this.data[t]??{}))e.includes(n)||e.push(n);return e}addMissingMonomer(t,e){return this.base.addMissingMonomer(t,e)}getMonomer(t,e){const n=this.data[t]?.[e];return n??this.base.getMonomer(t,e)}}class nn{monomerLib;symbol;polymerType;monomerType;monomerLinks;monomers;error=null;constructor(t,e,n,i,r){this.monomerLib=t,this.symbol=e,this.polymerType=n,this.monomerType=i,this.monomerLinks=r;try{this.monomers=this.monomerLinks.map((t=>{const n=this.monomerLib.getMonomer(this.polymerType,t.symbol);if(!n)throw new Error("Monomer not found: ");if(n.lib?.source!=t.source)throw new Error(`Monomer '${e}' found in different library.`);return n}))}catch(t){const[e,n]=(0,Ct.AP)(t);this.error=e,this.monomers=[]}}}class rn{description;placeholders;source;error;constructor(t,e,n=void 0,i=void 0){this.description=t,this.placeholders=e,this.source=n,this.error=i}updateSets(t,e=!1){e&&(this.placeholders=[]);for(const e of t)e.error||this._updateSetInt(e)}_updateSetInt(t){for(const e of t.placeholders)this.placeholders.push(e)}}var on=n(7433),sn=n.n(on),an=n(1913),ln=n.n(an);class cn{helmMonomerSchema;validateMonomerSchema;constructor(t){this.helmMonomerSchema=t;const e=new(sn())({allErrors:!0,strictTuples:!1,allowUnionTypes:!0});ln()(e),this.validateMonomerSchema=e.compile(this.helmMonomerSchema)}validateFile(t,e){const n=this.parseJson(t,e);return null!==n&&(Array.isArray(n)?this.validateJsonContent(n,e):(console.warn(`Bio: Monomer Library File Validator file '${e}': Invalid JSON format: The file must contain an array of monomers.`),!1))}parseJson(t,e){try{return JSON.parse(t)}catch(t){return console.error(`Bio: Monomer Library File Validator file '${e}': Invalid JSON format:`,t),null}}validateJsonContent(t,e){let n=!0;const i=new Set;for(const r of t){const t=r.symbol??r.id??r.name??"#N/A";if(n=this.validateMonomerSchema(r),!n){console.warn(`Bio: Monomer Library File Validator file ${e}, monomer '${t}' violating JSON schema:`,r,"\nError reason: ",JSON.stringify(this.validateMonomerSchema.errors??{}),`\nThere may be other errors in ${e} since the validation is stopped after the first error.`," Please, verify that the monomer library file satisfies the JSON schema");break}const o=`${r.polymerType??""}-${t}`;i.has(o)&&console.warn(`Bio: Monomer Library File Validator file ${e}, monomer '${t}' is duplicated.`,"Please, verify that the monomer library file does not contain duplicated monomer symbols."),i.add(o)}return n}}var hn=n(8604);class un{fileValidator;libHelper;eventManager;logger;filesPromise=Promise.resolve();initializedPromise=Promise.resolve();constructor(t,e,n,i){let r;this.fileValidator=t,this.libHelper=e,this.eventManager=n,this.logger=i;let o=!1;this.initializedPromise=Promise.race([a.delay(1e3),new Promise((t=>r=t))]),this.eventManager.updateValidLibraryFileListRequested$.subscribe((()=>{this.updateValidLibList().then((()=>{})),o||(o=!0,r())})),this.eventManager.updateValidSetFileListRequested$.subscribe((()=>{this.updateValidSetList().then((()=>{}))}))}static objCounter=-1;objId=++un.objCounter;toLog(){return`MonomerLibFileManager<${this.objId}>`}static async create(t,e,n){const i=await o.dapi.files.readAsText(hn.gt),r=JSON.parse(i),s=new cn(r);return new un(s,t,e,n)}async addLibraryFile(t,e,n=!0){try{if(await o.dapi.files.exists(hn.so+`${e}`))return void o.shell.error(`File ${e} already exists`);await this.validateAgainstHELM(t,e),await o.dapi.files.writeAsText(hn.so+`${e}`,t),await this.updateValidLibList(),await o.dapi.files.exists(hn.so+`${e}`)?o.shell.info(`Added ${e} HELM library`):o.shell.error(`Failed to add ${e} library`)}catch(t){console.error(t),o.shell.error(`Failed to add ${e} library`)}}async deleteLibraryFile(t){try{await o.dapi.files.delete(hn.so+`${t}`),await this.updateValidLibList(),o.shell.info(`Deleted ${t} library`)}catch(e){console.error(e),await o.dapi.files.exists(hn.so+`${t}`)?o.shell.error(`Failed to delete ${t} library`):o.shell.warning(`File ${t} already deleted, refresh the list`)}}async loadLibraryFromFile(t,e){let n=[];const i=new a.FileSource(t),r=await i.readAsText(e);n=JSON.parse(r);const o={},s=[];return n.forEach((t=>{const e=t.polymerType,n=t.symbol;s.includes(e)||(o[e]={},s.push(e)),o[e][n]=t})),new tn(o,e)}async loadSetFromFile(t,e,n){let i={};const r=new a.FileSource(e),o=await r.readAsText(n);i=JSON.parse(o);const s=i.description,l=Object.entries(i.placeholders).map((([e,n])=>{const i=e,r=n.polymerType,o=n.monomerType,s=n.set;return new nn(t,i,r,o,s)}));return new rn(s,l)}getValidLibraryPaths(){return this.eventManager.getValidLibPathList()}getValidSetPaths(){return this.eventManager.getValidSetPathList()}async getValidLibraryPathsAsynchronously(){return await this.eventManager.getValidLibraryPathsAsynchronously()}async updateValidLibList(){const t=`${this.toLog()}.updateValidLibList()`;return this.logger.debug(`${t}, start`),this.filesPromise=this.filesPromise.then((async()=>{this.logger.debug(`${t}, IN`);const e=[],n=await this.getLibFileListAtLocation();if(!this.libListHasChanged(n))return void this.logger.debug(`${t}, end, not changed`);for(const t of n){if(!t.endsWith(".json")){e.push(t);continue}const n=await o.dapi.files.readAsText(hn.so+`${t}`);this.isValidHELMLibrary(n,t)||e.push(t)}const i=n.filter((t=>!e.includes(t)));if(this.libListHasChanged(i)&&(this.eventManager.changeValidLibPathList(i),await this.libHelper.loadMonomerLib(!0)),i.some((t=>!t.endsWith(".json")))&&this.logger.warning(`Wrong validation: ${i}`),e.length>0){const t=`Invalid monomer library files in ${hn.so}, consider fixing or removing them: ${e.join(", ")}`;this.logger.warning(t)}this.logger.debug(`${t}, OUT`)})),this.logger.debug(`${t}, end`),this.filesPromise}async updateValidSetList(){const t=`${this.toLog()}.updateValidSetList()`;return Di.logger.debug(`${t}, start`),this.filesPromise=this.filesPromise.then((async()=>{Di.logger.debug(`${t}, IN`);const e=[],n=await this.getSetFileListAtLocation();if(!this.setListHasChanged(n))return void Di.logger.debug(`${t}, end, not changed`);for(const t of n)t.endsWith(".json")?await o.dapi.files.readAsText(hn.Es+`${t}`):e.push(t);const i=n.filter((t=>!e.includes(t)));this.setListHasChanged(i)&&(this.eventManager.changeValidSetPathList(i),this.libHelper.loadMonomerSets(!0)),Di.logger.debug(`${t}, OUT`)})),Di.logger.debug(`${t}, end`),this.filesPromise}libListHasChanged(t){const e=this.eventManager.getValidLibPathList();return t.length!==e.length||t.some(((t,n)=>t!==e[n]))}setListHasChanged(t){const e=this.eventManager.getValidSetPathList();return t.length!==e.length||t.some(((t,n)=>t!==e[n]))}async validateAgainstHELM(t,e){if(!this.isValidHELMLibrary(t,e))throw new Error(`File ${e} does not satisfy HELM standard`)}isValidHELMLibrary(t,e){return this.fileValidator.validateFile(t,e)}async getLibFileListAtLocation(){const t=`${this.toLog()}.getLibFileListAtLocation()`;this.logger.debug(`${t}, start`);const e=await o.dapi.files.list(hn.so).then((t=>t.filter((t=>t.isFile)).map((t=>t.fullPath)))),n=[];return n.push(...e),n.map((t=>t.substring(hn.so.length)))}async getSetFileListAtLocation(){const t=`${this.toLog()}.getSetFileListAtLocation()`;this.logger.debug(`${t}, start`);const e=await o.dapi.files.list(hn.Es).then((t=>t.map((t=>t.fullPath)))),n=[];return n.push(...e),n.map((t=>t.substring(hn.Es.length)))}}class dn{constructor(){}static _instance;static getInstance(){return dn._instance||(dn._instance=new dn),dn._instance}_libFilesUpdateSubject$=new h.BehaviorSubject([]);_setFilesUpdateSubject$=new h.BehaviorSubject([]);_addLibraryFilesSubject$=new h.Subject;_librarySelectionSubject$=new h.Subject;getValidLibPathList(){return this._libFilesUpdateSubject$.getValue()}getValidSetPathList(){return this._setFilesUpdateSubject$.getValue()}async getValidLibraryPathsAsynchronously(){return new Promise((t=>{const e=this._libFilesUpdateSubject$.pipe((0,R.skip)(1)).subscribe((n=>{t(n),e.unsubscribe()}))}))}changeValidLibPathList(t){this._libFilesUpdateSubject$.next(t)}changeValidSetPathList(t){this._setFilesUpdateSubject$.next(t)}get updateUIControlsRequested$(){return this._libFilesUpdateSubject$.pipe()}get updateValidLibraryFileListRequested$(){return this._libFilesUpdateSubject$.pipe()}get updateValidSetFileListRequested$(){return this._setFilesUpdateSubject$.pipe()}get addLibraryFileRequested$(){return this._addLibraryFilesSubject$.pipe()}addLibraryFile(){this._addLibraryFilesSubject$.next()}get librarySelectionRequested$(){return this._librarySelectionSubject$}updateLibrarySelectionStatus(t,e){this._librarySelectionSubject$.next([t,e])}}class pn{logger;_monomerLib=new tn({},"MAIN");_monomerSets=new rn("MAIN",[]);_initialLoadCompleted=!1;get initialLoadCompleted(){return this._initialLoadCompleted}_eventManager;get eventManager(){return this._eventManager}async awaitLoaded(t=1/0){return t=t===1/0?6e4:t,await Promise.race([(async()=>{const t=await this.getFileManager();return await t.filesPromise,!0})(),(async()=>(await(0,te.cb)(t),!1))()]).then((e=>{if(!e)throw new Error(`Loading monomer libraries timeout ${t} ms.`)}))}constructor(t){this.logger=t}static objCounter=-1;objId=(()=>{if(++pn.objCounter>0)throw new Error("MonomerLibManager MUST be a singleton.");return pn.objCounter})();toLog(){return`MonomerLibManager<${this.objId}>`}getMonomerLib(){return this._monomerLib}getBioLib(){return this.getMonomerLib()}getMonomerSets(){return this._monomerSets}get duplicateMonomers(){return this._monomerLib.duplicateMonomers}get duplicatesHandled(){return this._monomerLib.duplicatesHandled}assignDuplicatePreferances(t){this._monomerLib.assignDuplicatePreferences(t)}_fileManagerPromise;async getFileManager(){return void 0===this._fileManagerPromise&&(this._fileManagerPromise=(async()=>{const t=await un.create(this,this._eventManager,this.logger);return await t.initializedPromise,t})()),this._fileManagerPromise}loadLibrariesPromise=Promise.resolve();async loadMonomerLib(t=!1){const e=`${this.toLog()}.loadMonomerLib()`;return this.logger.debug(`${e}, start`),this.loadLibrariesPromise=this.loadLibrariesPromise.then((async()=>{this.logger.debug(`${e}, IN`);const n=a.TaskBarProgressIndicator.create("Loading monomers ...");try{const[[e],i]=await Promise.all([await this.getFileManager().then((t=>[t.getValidLibraryPaths()])),(0,Nt.ub)()]),r=e.filter((t=>{const e=!i.exclude.includes(t),n=0===i.explicit.length||i.explicit.includes(t);return e&&n}));let o=0;const s=r.length,[a]=await Promise.all([Promise.all(r.map((t=>this.readLibrary(hn.so,t).catch((e=>{const n=`Loading monomers from '${t}' error: ${e instanceof Error?e.message:e.toString()}`;return new tn({},t,n)})).finally((()=>{n.update(Math.round(100*++o/s),`Loading monomers ${o}/${s}`)})))))]);this._monomerLib.updateLibs(a,t),this._initialLoadCompleted=!0}catch(t){const e=`Loading monomer libraries error: ${t instanceof Error?t.message:t.toString()}`;o.shell.warning(e);const n=t instanceof Error?t.stack:void 0;this.logger.error(e,void 0,n)}finally{n.close(),this.logger.debug(`${e}, OUT`)}})),this.logger.debug(`${e}, end`),this.loadLibrariesPromise}async loadLibraries(t){return this.loadMonomerLib(t)}loadSetsPromise=Promise.resolve();async loadMonomerSets(t=!1){const e=`${this.toLog()}.loadMonomerSets()`;return this.logger.debug(`${e}, start`),this.loadSetsPromise=this.loadSetsPromise.then((async()=>{this.logger.debug(`${e}, IN`);const t=a.TaskBarProgressIndicator.create("Loading monomer sets ...");try{const[[e]]=await Promise.all([await this.getFileManager().then((t=>[t.getValidSetPaths()]))]),n=e.filter((t=>!0));let i=0;const r=n.length,[o]=await Promise.all([Promise.all(n.map((e=>this.readSet(hn.Es,e).catch((t=>{const n=`Loading monomer sets from '${e}' error: ${t instanceof Error?t.message:t.toString()}`;return new rn("Broken monomer set",[],e,n)})).finally((()=>{t.update(Math.round(100*++i/r),`Loading monomers ${i}/${r}`)})))))]);this._monomerSets.updateSets(o)}catch(t){const e=`Loading monomer sets error: ${t instanceof Error?t.message:t.toString()}`;o.shell.warning(e);const n=t instanceof Error?t.stack:void 0;this.logger.error(e,void 0,n)}finally{t.close(),this.logger.debug(`${e}, OUT`)}})),this.logger.debug(`${e}, end`),this.loadSetsPromise}async readLibrary(t,e){const n=await this.getFileManager();return await n.loadLibraryFromFile(t,e)}async readSet(t,e){const n=await this.getFileManager();return await n.loadSetFromFile(this._monomerLib,t,e)}async selectSpecifiedLibraries(t){const e=await this.getInvalidFileNames(t);if(e.length>0)throw new Error(`Cannot select libraries ${e}: no such library in the list`);const n=await(0,Nt.ub)();n.exclude=(await this.getFileManager()).getValidLibraryPaths().filter((e=>!t.includes(e))),await(0,Nt.Eu)(n)}async getInvalidFileNames(t){const e=(await this.getFileManager()).getValidLibraryPaths();return t.filter((t=>!e.includes(t)))}async loadMonomerLibForTests(){await(0,Nt.Eu)(hn.G3),await this.awaitLoaded(1e4),await this.loadMonomerLib(!0)}static async getInstance(){let t=window.$monomerLibHelperPromise;return null==t&&(t=window.$monomerLibHelperPromise=(async()=>{const t=new pn(Di.logger);return t._eventManager=dn.getInstance(),t})()),t}}var mn=n(1757),fn=n.n(mn),gn=n(3017),yn={};yn.styleTagTransform=A(),yn.setAttributes=b(),yn.insert=g().bind(null,"head"),yn.domAPI=m(),yn.insertStyleElement=w(),d()(gn.A,yn),gn.A&&gn.A.locals&&gn.A.locals;var bn=n(3151);class vn{constructor(t,e=[],n={}){this.onItemChanged=new h.Subject,this.onAddingItemChanged=new h.Subject,this.onItemAdded=new h.Subject,this.onItemRemoved=new h.Subject,this.options={removeButtonTooltip:"Remove item",addButtonTooltip:"Add item",allowAdd:!0,allowRemove:!0},this.addingItemInputs={},this.properties=t,this.options=Object.assign(Object.assign({},this.options),n),this._root=s.divV([],{style:{display:"grid",gridTemplateColumns:`repeat(${this.properties.length}, 1fr)`,alignItems:"center",gap:"12px"},classes:"ui-items-grid"}),this._items=e,this.render()}get root(){return this._root}get items(){return this._items}set items(t){this._items=t,this.render()}addItem(t,e=!0){this._items.push(t),this.render(),e&&this.onItemAdded.next(t)}removeItem(t,e=!0){-1!==this._items.indexOf(t)&&(this._items.splice(this._items.indexOf(t),1),this.render(),e&&this.onItemRemoved.next(t))}removeAtIndex(t,e=!0){if(t<0||t>=this._items.length)return;const n=this._items.splice(t,1);this.render(),e&&this.onItemRemoved.next(n[0])}removeAllItems(){this._items=[],this.render()}render(){var t,e,n,i,r;if(s.empty(this._root),!this.options.horizontalInputNames)for(const n of this.properties){let i=null!==(t=n.caption)&&void 0!==t?t:n.name;(null===(e=this.options.customLabels)||void 0===e?void 0:e[n.name])&&(i=this.options.customLabels[n.name]);const r=s.divText(i);r.style.fontWeight="bold",this._root.appendChild(r)}for(const t of this._items){const e=this.getItemDiv(t);for(const t of e)this._root.appendChild(t)}if(this.options.allowAdd){const t=this.getItemDiv(null!==(r=null===(i=(n=this.options).newItemFunction)||void 0===i?void 0:i.call(n))&&void 0!==r?r:void 0,!0);for(const e of t)this._root.appendChild(e)}}get addingItem(){const t={};return Object.keys(this.addingItemInputs).forEach((e=>{t[e]=this.addingItemInputs[e].value})),t}getItemDiv(t={},e){var n,i;const r=[],o={};let l=null;for(const c of this.properties){void 0===t[c.name]&&(t[c.name]=null);const h=(null===(n=this.options.customInputs)||void 0===n?void 0:n[c.name])?this.options.customInputs[c.name](t):s.input.forProperty(c,t),u=null===(i=this.options.validators)||void 0===i?void 0:i[c.name];u&&h.addValidator(u),r.push(this.options.horizontalInputNames?h.root:this.hideLabel(h.root)),c.propertyType!==a.TYPE.BOOL&&"color"!==c.name.toLowerCase()&&h.input&&(h.input.style.width="100%"),o[c.name]=h,h.onChanged.subscribe((()=>{t[c.name]=h.value,e?this.onAddingItemChanged.next({item:t,fieldName:c.name}):this.onItemChanged.next({item:t,fieldName:c.name})})),h.root.style.alignItems="center",l=h}let c=null;if(e)this.addingItemInputs=o,c=s.icons.add((()=>{const t=this.options.newItemFunction?this.options.newItemFunction():{};Object.keys(o).forEach((e=>{t[e]=o[e].value})),this._items.push(t),this.onItemAdded.next(t),this.render()}),this.options.addButtonTooltip);else{if(!this.options.allowRemove)return r;c=s.icons.delete((()=>{this._items.splice(this._items.indexOf(t),1),this.onItemRemoved.next(t),this.render()}),this.options.removeButtonTooltip)}return l&&l.addOptions?l.addOptions(c):null==l||l.root.appendChild(c),c.style.color="#2083d5",r}hideLabel(t){return t.getElementsByTagName("label")[0]&&t.removeChild(t.getElementsByTagName("label")[0]),t}hasErrors(){return this._root.querySelectorAll(".d4-invalid").length>0}}const wn={A:new V.A(new Uint32Array([2,0,0,0,16,0,0,0,134217728,0,0,0,32,0,33554432,0,0,0,0,0,1024,0,0,0,262144,128,0,0,0,0,0,0,0,2,0,0,524288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1048576,0,536870912,0,0,0,0]),2048),C:new V.A(new Uint32Array([2,0,65536,0,0,0,0,32,0,0,2,0,32,0,0,0,0,0,0,0,1024,0,0,0,262144,128,0,0,0,0,0,0,0,65536,0,0,524288,0,0,0,0,0,0,0,524288,524288,0,0,0,0,0,0,0,0,0,0,0,34603008,0,536870912,64,0,0,0]),2048),D:new V.A(new Uint32Array([2,0,65600,0,0,0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,1024,0,0,0,262400,128,0,0,0,0,0,0,0,0,0,2097152,524288,0,0,0,1024,0,0,0,524288,0,0,0,0,0,0,0,0,0,512,0,0,34603008,0,536870912,0,0,0,0]),2048),E:new V.A(new Uint32Array([2,0,65536,0,0,0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,1024,0,0,8,262144,128,0,0,16,134217728,0,0,0,0,0,0,524288,0,0,0,128,0,0,0,524288,0,0,0,268435456,0,0,0,0,0,512,2147483648,0,34603008,0,536870912,0,0,0,0]),2048),F:new V.A(new Uint32Array([2,0,98304,0,0,0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,1024,0,0,0,262144,128,33554432,0,0,0,0,33554432,0,1024,1,0,524288,32768,32,0,0,0,0,16,524288,0,0,0,0,0,0,0,0,0,71303168,0,0,34603008,131072,536870912,0,0,0,0]),2048),G:new V.A(new Uint32Array([134217728,0,65536,0,0,0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,1024,0,0,0,0,128,0,0,0,0,2097216,0,0,0,0,0,524288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,512,0,0,0,0,536870912,0,0,0,0]),2048),H:new V.A(new Uint32Array([2,0,1073840128,0,0,0,0,0,0,0,0,67108864,32,0,0,0,0,0,0,0,1024,0,512,0,262144,192,0,268435456,0,0,8200,0,0,0,67108864,0,524296,0,32,0,0,0,0,16,524288,0,0,2147483648,0,0,8,0,0,0,0,0,0,34603008,131072,536870920,4194304,0,0,0]),2048),I:new V.A(new Uint32Array([2,0,65536,0,0,0,0,0,150994944,64,0,0,32,0,0,0,0,0,0,0,1024,0,8388608,0,327680,128,0,0,0,0,0,0,0,2,0,524288,524288,0,0,0,0,0,0,0,0,0,0,0,256,0,0,0,0,8388608,0,33554432,0,1048576,0,536870912,0,0,0,0]),2048),K:new V.A(new Uint32Array([2,0,65536,0,0,0,0,0,0,0,0,0,268435488,0,0,0,0,0,0,0,1024,0,0,8,262144,128,0,0,0,0,2097152,0,0,67108864,0,0,524288,0,0,0,8,0,0,0,524288,0,0,8192,0,0,0,0,0,0,0,2147483648,0,34668544,0,545259520,0,0,0,0]),2048),L:new V.A(new Uint32Array([2,0,65536,0,0,0,0,0,134217728,0,0,0,32,512,0,0,0,0,0,0,1024,256,0,8388608,262400,128,0,0,0,0,0,0,0,2,0,0,524288,0,0,0,0,0,0,0,524288,0,0,0,0,0,0,0,0,0,0,0,0,42991616,0,536870912,0,0,0,0]),2048),M:new V.A(new Uint32Array([2050,0,65536,1048576,0,0,0,0,0,0,0,0,1056,0,0,0,0,0,0,0,1024,0,0,8,262144,128,0,0,0,0,0,536870912,0,2,0,0,1074266112,0,0,0,0,0,0,0,524288,0,0,0,4194304,0,0,0,0,0,0,2147483648,0,34603008,0,536870912,4194304,0,0,0]),2048),N:new V.A(new Uint32Array([2,0,65536,0,4096,0,0,0,0,0,0,16777216,32,0,0,0,0,0,0,0,1024,0,0,0,262400,128,0,0,0,0,0,0,0,0,0,0,524288,0,0,0,1024,0,0,0,524288,0,0,0,0,0,0,0,0,0,0,0,0,34603008,0,536871936,67108864,0,0,0]),2048),P:new V.A(new Uint32Array([0,0,1024,0,0,0,0,0,0,131072,0,1024,32,0,0,0,0,512,0,0,1024,0,0,64,0,128,0,0,1073741824,0,0,138412032,16,0,67108864,0,0,0,0,0,0,8192,0,0,8388608,0,0,8,0,0,0,0,0,0,256,0,0,0,0,553648128,0,0,0,0]),2048),Q:new V.A(new Uint32Array([2,0,65536,0,4096,0,0,0,0,0,0,0,32,0,0,0,0,2,0,0,1024,0,0,8,262144,128,0,0,16,0,0,0,0,0,0,0,524288,0,0,0,0,0,0,0,524288,0,0,0,268435456,0,0,0,0,0,16777216,2147483648,0,34603008,0,536871936,0,0,0,0]),2048),R:new V.A(new Uint32Array([2,0,65536,0,4096,0,32,0,0,0,0,0,268435488,0,0,0,0,0,0,32768,134218752,0,16,8,262144,128,0,1073741824,0,0,8388608,0,0,0,65536,0,524289,0,0,0,0,0,0,0,524288,2048,0,0,0,0,0,0,0,0,0,2147483648,0,34603008,1048576,545259520,0,0,0,0]),2048),S:new V.A(new Uint32Array([2,0,65536,0,0,0,1073741824,0,0,0,0,0,32,0,0,4,0,0,0,0,1024,0,0,0,262144,128,0,0,0,0,0,0,0,0,0,0,524288,0,0,1048576,0,0,0,0,524288,0,0,0,0,0,0,0,0,0,8388608,0,0,34603008,0,536870912,0,0,0,0]),2048),T:new V.A(new Uint32Array([2,0,0,0,0,0,0,8,134217728,0,0,67108864,32,0,0,0,0,0,0,0,1024,0,8388608,0,262144,128,0,0,0,0,0,0,0,2,0,524288,524288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,536870912,0,0,0,0,1048576,67108864,536870912,0,0,0,0]),2048),V:new V.A(new Uint32Array([2,0,0,0,0,0,0,0,134217728,0,0,0,32,0,0,0,0,0,0,0,1024,0,8388608,0,262144,128,0,0,0,0,0,1073741824,128,2,0,524288,524288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8192,0,1048576,0,536870912,0,0,0,0]),2048),W:new V.A(new Uint32Array([2,0,98304,8388608,0,0,0,0,0,0,256,4096,32,0,0,0,0,0,0,0,1024,0,0,0,262144,192,0,0,0,0,0,0,0,0,67108865,0,524288,32768,32,0,0,0,8224,16,524288,0,0,0,0,32,128,0,2097152,0,4194304,8388608,0,34603008,8519680,536870912,131072,262144,0,0]),2048),Y:new V.A(new Uint32Array([2,0,98304,0,0,0,0,0,0,4194304,0,0,32,0,0,0,0,0,0,0,1024,0,0,512,262144,128,33554432,0,0,0,0,33554432,0,0,0,0,524288,0,32,0,0,2,0,16,524288,0,0,0,0,0,4,0,0,0,71303168,262144,0,34603008,131072,536870912,0,0,0,0]),2048)},Cn={RNA:{A:new V.A(new Uint32Array([0,0,0,0,0,0,0,0,0,1024,0,67108864,0,0,0,512,0,0,0,8388608,0,0,512,0,0,64,4,0,0,0,4,0,0,0,67108864,0,524289,0,0,0,0,0,0,16,0,659456,0,256,0,16,0,0,0,268435456,0,0,262144,0,131072,0,0,0,8388608,0]),2048),C:new V.A(new Uint32Array([0,1073741824,0,0,0,0,0,2147483648,4,67108864,0,67108864,0,256,0,0,0,0,0,0,1024,0,128,0,0,64,0,0,0,0,0,0,0,0,67108864,0,524289,0,65536,0,0,0,0,16,0,131072,0,4,0,0,0,0,0,0,4194304,0,0,2147483648,131072,0,4096,0,0,0]),2048),G:new V.A(new Uint32Array([0,0,0,0,1024,0,0,0,0,67109888,16384,67108864,0,0,0,0,0,0,0,33562624,1024,33554432,512,16384,0,64,4,0,0,33554432,0,0,0,0,67108864,0,524289,0,0,0,0,0,0,16,0,135168,0,268435456,0,0,0,0,0,268435456,131072,0,0,2147483648,131072,0,0,0,8388608,0]),2048),T:new V.A(new Uint32Array([8388608,0,0,0,0,0,0,0,0,67108864,0,0,0,4,0,0,0,0,0,0,1024,0,0,16384,0,64,0,0,0,0,0,0,0,2,67108864,0,0,0,0,0,0,0,0,40976,0,0,0,0,0,0,0,0,0,67108864,131072,524288,0,0,8519680,0,1,33554432,1048576,0]),2048),U:new V.A(new Uint32Array([0,0,131072,1073741824,0,0,0,0,0,67108864,0,0,0,0,0,0,0,0,0,0,1024,0,128,0,0,64,0,0,0,0,0,0,0,32768,67108864,0,0,0,0,0,0,0,0,16,0,0,0,4,0,0,2048,0,0,0,4341760,0,0,0,131072,0,0,33554432,1048576,0]),2048)},PEPTIDE:wn};async function An(t,e,n=0){if(!Object.keys(Cn).includes(e))return null;const i=await async function(t){const e=a.Func.find({package:"Chem",name:"getMorganFingerprint"})?.[0];if(!e)return null;try{const n=(await e.apply({molString:t}))?.getBuffer().buffer;if(n)return new V.A(new Uint32Array(n),2048)}catch(t){return null}}(t);if(!i)return null;if(!Cn[e])return null;const r=Cn[e];let o=0,s=null;for(const[t,e]of Object.entries(r)){const r=(0,O.$1)(i,e);r>o&&r>=n&&(o=r,s=t)}return s}var Sn,xn=n(857),En={};En.styleTagTransform=A(),En.setAttributes=b(),En.insert=g().bind(null,"head"),En.domAPI=m(),En.insertStyleElement=w(),d()(xn.A,En),xn.A&&xn.A.locals&&xn.A.locals,function(t){t.MONOMER="Monomer",t.SYMBOL="Symbol",t.NAME="Name",t.R_GROUPS="~R-Groups",t.MONOMER_TYPE="Monomer Type",t.POLYMER_TYPE="Polymer Type",t.NATURAL_ANALOG="Natural Analog",t.AUTHOR="Author",t.CREATE_DATE="Create Date",t.ID="ID",t.META="Meta",t.SOURCE="Source"}(Sn||(Sn={}));const Mn={[Sn.MONOMER]:a.COLUMN_TYPE.STRING,[Sn.SYMBOL]:a.COLUMN_TYPE.STRING,[Sn.NAME]:a.COLUMN_TYPE.STRING,[Sn.R_GROUPS]:a.COLUMN_TYPE.STRING,[Sn.MONOMER_TYPE]:a.COLUMN_TYPE.STRING,[Sn.POLYMER_TYPE]:a.COLUMN_TYPE.STRING,[Sn.NATURAL_ANALOG]:a.COLUMN_TYPE.STRING,[Sn.AUTHOR]:a.COLUMN_TYPE.STRING,[Sn.CREATE_DATE]:a.COLUMN_TYPE.DATE_TIME,[Sn.ID]:a.COLUMN_TYPE.INT,[Sn.META]:a.COLUMN_TYPE.STRING,[Sn.SOURCE]:a.COLUMN_TYPE.STRING};class _n{monomerLibManamger;adjustTable(){this.tv?.dataFrame&&(o.data.detectSemanticTypes(this.tv.dataFrame),this.tv.dataFrame.meta.detectSemanticTypes()),setTimeout((()=>{this.tv?.grid&&(this.tv.grid.props.allowEdit=!1,this.tv.grid.col(Sn.NAME).width=100,this.tv.grid.col(Sn.SYMBOL).width=70)}),200)}static VIEW_NAME="Manage Monomers";_newMonomer=bn.pe;_newMonomerForm;monomerLib;tv=null;libInput;static instance;activeMonomerLib=null;constructor(t){this.monomerLibManamger=t,this.monomerLib=t.getBioLib(),this._newMonomerForm=new Pn(t,(()=>this.activeMonomerLib),(async t=>{const e=await this.getMonomersDf(this.libInput.value);this.tv?.dataFrame&&(this.tv.dataFrame=e,this.adjustTable(),null!=t&&setTimeout((()=>{const n=e.col(Sn.SYMBOL).toList().indexOf(t);-1!==n&&(this.tv?.grid.scrollToCell(e.columns.byIndex(0),n),e.currentRow=e.rows.get(n))}),500))}),(()=>this.tv?.dataFrame))}static async getInstance(){if(!this.instance){const t=await pn.getInstance();await t.awaitLoaded(),await t.loadLibrariesPromise,this.instance=new _n(t)}return this.instance}static async getNewInstance(){const t=await pn.getInstance();return await t.awaitLoaded(),await t.loadLibrariesPromise,new _n(t)}async createNewMonomerLib(t,e){this.tv?.grid&&s.setUpdateIndicator(this.tv.grid.root,!0);try{const n=JSON.stringify(e.map((t=>({...t,lib:void 0,wem:void 0}))),null,2);t.endsWith(".json")||(t+=".json"),await(await this.monomerLibManamger.getFileManager()).addLibraryFile(n,t),await o.dapi.files.writeAsText(hn.so+t,n),await this.monomerLibManamger.loadLibraries(!1),o.shell.v=await this.getViewRoot(t)}catch(t){o.shell.error("Error creating library"),console.error(t)}finally{this.tv?.grid&&s.setUpdateIndicator(this.tv.grid.root,!1)}}async createNewLibDialog(t){const e=(await this.monomerLibManamger.getFileManager()).getValidLibraryPaths(),n=s.input.string("Library Name",{placeholder:"Enter library name",nullable:!1,onValueChanged:()=>{const t=i(n.value);r.getButton("Create")?.classList?.toggle("d4-disabled",!!t)}});function i(t){return t&&t.trim()?t.endsWith(".json")&&e.includes(t)||e.includes(t+".json")?"Library with this name already exists":null:"Library name cannot be empty"}n.addValidator(i);const r=s.dialog("Create New Library").add(n).addButton("Create",(async()=>{const e=i(n.value);if(e)o.shell.warning(e);else{try{await this.createNewMonomerLib(function(){let t=n.value;return t.endsWith(".json")||(t+=".json"),t}(),t??[])}catch(t){o.shell.error("Error creating library"),console.error(t)}r.close()}})).show();r.getButton("Create")?.classList?.toggle("d4-disabled",!0)}get newMonomer(){return this._newMonomer}getNewMonomerForm(){return this._newMonomerForm}async getMonomersTableView(t,e=!0){const n=await this.getMonomersDf(t);return this.tv=a.TableView.create(n,e),this.adjustTable(),this.tv.subs.push(o.events.onContextMenu.subscribe((({args:t})=>{if(!t||!t.menu||!t.context||t.context.type!==a.VIEWER.GRID||!t.context.tableView||t.context.tableView.id!==(this.tv.id??"")||!t.item||!t.item.isTableCell||(t.item.tableRowIndex??-1)<0)return;const e=t.item.tableRowIndex;t.menu.item("Edit Monomer",(async()=>{await this.editMonomer(this.tv.dataFrame.rows.get(e))})),this.tv.dataFrame.selection.trueCount>0?(t.menu.item("Remove Selected Monomers",(async()=>{const t=await Promise.all(Array.from(this.tv.dataFrame.selection.getSelectedIndexes()).map((t=>Gn(this.tv.dataFrame.rows.get(t)))));this._newMonomerForm.removeMonomers(t,this.libInput.value)})),t.menu.item("Selection To New Library",(async()=>{const t=await Promise.all(Array.from(this.tv.dataFrame.selection.getSelectedIndexes()).map((t=>Gn(this.tv.dataFrame.rows.get(t)))));this.createNewLibDialog(t)}))):t.menu.item("Remove Monomer",(async()=>{const t=await Gn(this.tv.dataFrame.rows.get(e));this._newMonomerForm.removeMonomers([t],this.libInput.value)}))}))),this.tv.grid&&(this.tv.grid.props.allowEdit=!1),this.tv}static closeAllMonomerManagers(){Array.from(o.shell.tableViews??[]).filter((t=>t.name===_n.VIEW_NAME)).forEach((t=>t.close()))}findActiveManagerView(){if(!this.tv)return null;const t=Array.from(o.shell.tableViews??[]).find((t=>t.id===this.tv.id));return t?o.shell.v=t:_n.closeAllMonomerManagers(),t??null}_skipLibInputOnchange=!1;async getViewRoot(t,e=!0){const n=(await this.monomerLibManamger.getFileManager()).getValidLibraryPaths();if(this._newMonomerForm.molSketcher.resize(),e&&(this.tv=this.findActiveManagerView())&&(t??this.libInput.value)){try{this._skipLibInputOnchange=!0,this.libInput&&(this.libInput.items=n),t&&(this.libInput.value=t)}catch(t){o.shell.error("Error updating library list"),console.error(t)}finally{this._skipLibInputOnchange=!1}const e=await this.getMonomersDf(t);return this.tv.dataFrame=e,this.adjustTable(),this.tv}t??=n[0],this.tv=await this.getMonomersTableView(t,e);let i=this.tv.getRibbonPanels();i.forEach(((t,e)=>{i[e]=t.filter((t=>0!==t.getElementsByClassName("grok-icon-filter").length))})),i=i.filter((t=>t.length>0));const r=s.icons.add((()=>{this._newMonomerForm.setEmptyMonomer()}),"Add New Monomer"),l=s.icons.edit((async()=>{(this.tv?.dataFrame?.currentRowIdx??-1)<0||await this.editMonomer(this.tv.dataFrame.rows.get(this.tv.dataFrame.currentRowIdx))}),"Edit Monomer"),c=s.icons.delete((async()=>{const t=this.tv?.dataFrame?.currentRowIdx??-1,e=Array.from(this.tv?.dataFrame?.selection?.getSelectedIndexes()??[]);if(t<0&&0===e.length)return;if(e.length>0){const t=await Promise.all(e.map((t=>Gn(this.tv.dataFrame.rows.get(t)))));return void await this._newMonomerForm.removeMonomers(t,this.libInput.value)}const n=await Gn(this.tv.dataFrame.rows.get(t));await this._newMonomerForm.removeMonomers([n],this.libInput.value)}));s.tooltip.bind(c,(()=>(this.tv?.dataFrame?.selection?.trueCount??0)>0?"Delete selected monomers":"Delete monomer"));const h=s.iconFA("arrow-to-bottom",(async()=>{const t=this.libInput.value;if(!t)return o.shell.error("No library selected");let e=null;try{e=await o.dapi.files.readAsText(hn.so+t)}catch(e){return o.shell.error(`Error reading library ${t}`),console.error(e)}if(!e)return o.shell.error(`Library ${t} is empty`);a.Utils.download(t,e,"text/plain")}),"Download Monomer Library");i.push([r,l,c,h]),this.tv.setRibbonPanels(i),this.tv.name=_n.VIEW_NAME,this.libInput=s.input.choice("Monomer Library",{value:t,items:n,nullable:!1,onValueChanged:async()=>{try{if(this._skipLibInputOnchange)return;const t=await this.getMonomersDf(this.libInput.value);this.tv.dataFrame=t,this.adjustTable()}catch(t){console.error(t)}}}),this.libInput.addOptions(s.icons.add((()=>{this.createNewLibDialog()}),"Create new monomer library..."));const u=this._newMonomerForm.form;return u.prepend(this.libInput.root),s.tools.waitForElementInDom(this.tv.root).then((()=>{this.tv.dockManager.dock(u,a.DOCK_TYPE.LEFT,null,void 0,.4)})),this.tv}async editMonomer(t){return this._newMonomer=await Gn(t),this._newMonomerForm.setMonomer(this._newMonomer),this._newMonomer}async getMonomersDf(t){this.tv?.grid&&s.setUpdateIndicator(this.tv.grid.root,!0);try{if(t??=(await this.monomerLibManamger.getFileManager()).getValidLibraryPaths()[0],this.activeMonomerLib=await this.monomerLibManamger.readLibrary(hn.so,t),!this.activeMonomerLib)return o.shell.error(`Library ${t} not found`),a.DataFrame.create();const e=this.activeMonomerLib.getPolymerTypes().flatMap((t=>this.activeMonomerLib.getMonomerSymbolsByType(t).map((e=>this.activeMonomerLib.getMonomer(t,e))))),n=a.DataFrame.create(e.length),i=new Set;for(const t of e)t.rgroups.forEach((t=>{t.label&&i.add(t.label)}));const r=Array.from(i);r.sort();for(const[t,e]of Object.entries(Mn))if(n.columns.addNew(t,e),t===Sn.R_GROUPS)for(const t of r)n.columns.addNew(t,a.COLUMN_TYPE.STRING);n.col(Sn.SYMBOL).semType="Monomer",n.col(Sn.SYMBOL).setTag(Rt.Mn.applyToBackground,"true");for(let t=0;t<e.length;t++){let i=Rn(e[t].rgroups,e[t].smiles,e[t].molfile);i=In(i),e[t].rgroups=Nn(e[t].rgroups);const o=r.map((n=>{const i=e[t].rgroups.find((t=>t.label===n));return i?Ln(i,"capGroupSmiles"):""}));let s=null;if(e[t].createDate)try{s=Date.parse(e[t].createDate)}catch(n){console.error(`Error parsing date ${e[t].createDate}`)}n.rows.setValues(t,[i,e[t].symbol,e[t].name,JSON.stringify(e[t].rgroups??[]),...o,e[t].monomerType,e[t].polymerType,e[t].naturalAnalog,e[t].author,s,e[t].id,JSON.stringify(e[t].meta??{}),e[t].lib?.source??""]);try{s&&n.col(Sn.CREATE_DATE)?.set(t,s,!1)}catch(n){console.error(`Error setting date ${e[t].createDate}`)}}return n.col(Sn.MONOMER).semType=a.SEMTYPE.MOLECULE,r.forEach((t=>{n.col(t).semType=a.SEMTYPE.MOLECULE})),n.currentRowIdx=-1,n.onCurrentRowChanged.subscribe((async t=>{try{if(-1===n.currentRowIdx||this._newMonomerForm.molChanged)return;await this.editMonomer(n.rows.get(n.currentRowIdx))}catch(t){console.error(t)}})),n}catch(t){throw o.shell.error("Error creating monomers dataframe"),console.error(t),t}finally{this.tv?.grid&&s.setUpdateIndicator(this.tv.grid.root,!1)}}resetCurrentRowFollowing(){this._newMonomerForm.molChanged=!1}}function In(t){let e=t.replaceAll(/\[R[1-9]\]/g,(t=>`[*:${t[2]}]`));return e=e.replaceAll(/\[\d\*\]/g,(t=>`[*:${t[1]}]`)),e.replaceAll(/\[\d\*\:\d\]/g,(t=>`[*:${t[1]}]`))}const Tn=["alternateId","capGroupName","capGroupSMILES","label"];function Ln(t,e){const n=Object.keys(t).find((t=>t.toLowerCase()===e.toLowerCase()));if(n)return t[n]}function Nn(t){return t.map((t=>{const e=function(t,e){const n={};return t.forEach((t=>{const i=Object.keys(e).find((e=>e.toLowerCase()===t.toLowerCase()));i&&(n[t]=e[i])})),n}(Tn,t),n=Ln(e,"capGroupSMILES"),i=Ln(e,"alternateId"),r=Ln(e,"capGroupName"),o=Ln(e,"label")??"R1";if(n&&i&&r||o.length<2)return e;if(i&&-1!==i.indexOf(`${o}-`)){const t=i.replace(`${o}-`,"");r||(e.capGroupName=t),n||(e.capGroupSMILES=`[*:${o.substring(1)}][${t}]`)}else r&&(n||(e.capGroupSMILES=`[*:${o.substring(1)}][${r}]`),i||(e.alternateId=`${o}-${r}`));return e})).sort(((t,e)=>t.label?.localeCompare(e.label??"")??0))}class Pn{monomerLibManager;getMonomerLib;refreshTable;getMonomersDataFrame;molSketcher;monomerTypeInput;polymerTypeInput;monomerSymbolInput;monomerNameInput;monomerIdInput;monomerNaturalAnalogInput;rgroupsGrid;metaGrid;colors;colorsEditor;saveButton;rgroupsGridRoot;_molChanged=!1;get molChanged(){return this._molChanged}set molChanged(t){this._molChanged=t}saveValidationResult=null;triggerMolChange=!0;inputsTabControl;constructor(t,e,n,i){this.monomerLibManager=t,this.getMonomerLib=e,this.refreshTable=n,this.getMonomersDataFrame=i,this.colors={line:"#000000",background:"#000000",text:"#000000"},this.colorsEditor=new Fn(this.colors),this.molSketcher=new a.chem.Sketcher,this.molSketcher.root.classList.add("monomer-manager-sketcher"),this.polymerTypeInput=s.input.choice("Polymer Type",{value:"PEPTIDE",items:["PEPTIDE","RNA","CHEM","BLOB","G"],onValueChanged:()=>this.onMonomerInputChanged(),nullable:!1}),this.monomerTypeInput=s.input.choice("Monomer Type",{value:"Backbone",items:["Backbone","Branch","Terminal"],onValueChanged:()=>this.onMonomerInputChanged(),nullable:!1}),this.monomerSymbolInput=s.input.string("Monomer Symbol",{nullable:!1,onValueChanged:()=>this.onMonomerInputChanged()}),this.monomerNameInput=s.input.string("Monomer Name",{nullable:!1,onValueChanged:()=>this.onMonomerInputChanged()}),this.monomerNameInput.nullable=!1,this.monomerIdInput=s.input.int("Monomer ID",{nullable:!0,value:0,onValueChanged:()=>this.onMonomerInputChanged()}),this.monomerNaturalAnalogInput=s.input.string("Natural Analog",{nullable:!0,onValueChanged:()=>this.onMonomerInputChanged()}),this.saveButton=s.bigButton("Save",(async()=>{const t=this.validateInputs();t?o.shell.warning(t):await this.saveMonomer()})),this.molSketcher.subs.push(this.molSketcher.onChanged.subscribe((async()=>{if(this.triggerMolChange){try{this.rgroupsGridRoot.style.display="none";const t=this.inputsTabControl.panes.find((t=>"r-groups"===t.name?.toLowerCase()));t&&t.header.style.removeProperty("background-color");let e=this.molSketcher.getSmiles();if(!e)return this.rgroupsGrid.items=[],this.rgroupsGrid.render(),this.saveValidationResult="Monomer molecule is required",void this.invalidateSaveButton();e=Rn([],e);const n=this.findRgroupsInSmiles(e);if(0===n.length)return this.rgroupsGrid.items=[],this.rgroupsGrid.render(),this.saveValidationResult="At least one R-group is required",t&&t.header.style.setProperty("background-color","#ff000030"),void this.invalidateSaveButton();if(new Set(n.map((t=>t[0]))).size!==n.length)return this.saveValidationResult="Duplicate R-groups are not allowed",this.rgroupsGridRoot.style.display="flex",t&&t.header.style.setProperty("background-color","#ff000030"),void this.invalidateSaveButton();const i=n.map((t=>Number.parseInt(t[0].match(/[1-9]/g)[0]))).map((t=>this.rgroupsGrid.items.find((e=>e.label===`R${t}`))??{capGroupSMILES:`[*:${t}][H]`,alternateId:`R${t}-H`,capGroupName:"H",label:`R${t}`}));this.rgroupsGrid.items=i.sort(((t,e)=>t.label?.localeCompare(e.label??"")??0)),this.rgroupsGrid.render(),this.rgroupsGridRoot.style.display="flex";const r=await An(kn(e,i),this.polymerTypeInput.value??"");r&&(this.monomerNaturalAnalogInput.value=r)}catch(t){console.error(t)}this.onMonomerInputChanged(),this._molChanged=!0}else this.triggerMolChange=!0})));const r=[a.Property.js("capGroupSMILES",a.TYPE.STRING,{caption:"R-group SMILES",nullable:!1}),a.Property.js("alternateId",a.TYPE.STRING,{caption:"Alternate ID",nullable:!1}),a.Property.js("capGroupName",a.TYPE.STRING,{caption:"R-group name",nullable:!1}),a.Property.js("label",a.TYPE.STRING,{fieldName:"R-group Label",nullable:!1,userEditable:!1})];this.rgroupsGrid=new vn(r,[],{allowAdd:!1,allowRemove:!1,validators:{capGroupSMILES:t=>t?o.chem.checkSmiles(t)?null:"Invalid SMILES":"Cap group smiles is required",alternateId:t=>t?null:"Alternate ID is required",capGroupName:t=>t?null:"Cap group name is required",label:t=>t?null:"R-group label is required"},customLabels:{capGroupSMILES:"R-group SMILES",alternateId:"Alternate ID",capGroupName:"Cap Group Name",label:"Label"}}),this.rgroupsGrid.onItemChanged.subscribe((()=>this.onMonomerInputChanged())),this.rgroupsGridRoot=s.divV([this.rgroupsGrid.root]),this.rgroupsGridRoot.style.display="none";const l=[a.Property.js("Property",a.TYPE.STRING,{caption:"Property",nullable:!0}),a.Property.js("Value",a.TYPE.STRING,{caption:"Value",nullable:!0})];this.metaGrid=new vn(l,[]),this.onMonomerInputChanged();const c=s.divV([this.polymerTypeInput,this.monomerTypeInput,this.monomerSymbolInput,this.monomerNameInput,this.monomerIdInput,this.monomerNaturalAnalogInput]);this.inputsTabControl=s.tabControl({Monomer:c,"R-groups":this.rgroupsGridRoot,Meta:s.divV([this.metaGrid.root]),Colors:this.colorsEditor.form},!1)}invalidateSaveButton(){this.saveValidationResult?this.saveButton.classList.add("d4-disabled"):this.saveButton.classList.remove("d4-disabled")}onMonomerInputChanged(){setTimeout((()=>{this.saveValidationResult=this.validateInputs(),this.invalidateSaveButton();const t=this.polymerTypeInput.value&&this.polymerTypeInput.value&&!!this.getMonomerLib()?.getMonomer(this.polymerTypeInput.value,this.monomerSymbolInput.value);this.saveButton.textContent=t?"Save Monomer":"Add Monomer"}),200)}setEmptyMonomer(){this.triggerMolChange=!1,this.molSketcher.setSmiles(""),this.monomerSymbolInput.value="",this.monomerNameInput.value="",this.monomerIdInput.value=null,this.monomerNaturalAnalogInput.value=null,this.rgroupsGrid.items=[],this.metaGrid.items=[],this.rgroupsGrid.render(),this.metaGrid.render(),this.rgroupsGridRoot.style.display="none",this.onMonomerInputChanged(),this.colorsEditor.colors={line:"#000000",background:"#000000",text:"#000000"}}setMonomer(t){this.triggerMolChange=!1,this.molSketcher.setSmiles(t.smiles),this.polymerTypeInput.value=t.polymerType,this.monomerTypeInput.value=t.monomerType,this.monomerSymbolInput.value=t.symbol,this.monomerNameInput.value=t.name,this.monomerIdInput.value=t.id,this.monomerNaturalAnalogInput.value=t.naturalAnalog??null,this.rgroupsGrid.items=Nn(t.rgroups),this.metaGrid.items=Object.entries(t.meta??{}).filter((([t,e])=>"colors"!==t?.toLowerCase())).map((([t,e])=>({Property:t,Value:e}))),this.rgroupsGrid.render(),this.metaGrid.render(),this.rgroupsGridRoot.style.display="flex",this.onMonomerInputChanged(),!t.naturalAnalog&&t.polymerType&&An(kn(t.smiles,this.rgroupsGrid.items),t.polymerType).then((t=>{t&&(this.monomerNaturalAnalogInput.value=t)}));const e=t.meta?.colors??"";let n={};try{n=e?JSON.parse(e)?.default:{}}catch(t){console.error(t)}this.colorsEditor.colors={line:n.line??"#000000",background:n.background??"#000000",text:n.text??"#000000"}}validateInputs(){const t=this.inputsTabControl.panes.find((t=>"r-groups"===t.name?.toLowerCase()));if(t&&t.header.style.removeProperty("background-color"),!this.molSketcher.getSmiles())return"Monomer Molecule field is required";for(const t of[this.polymerTypeInput,this.monomerTypeInput,this.monomerSymbolInput,this.monomerNameInput])if(null==t.value||""===t.value)return`${t.caption} field is required`;let e=null;if(this.rgroupsGrid.items.length<1&&(e="At least one R-group is required"),!e)t:for(const t of this.rgroupsGrid.items)for(const[n,i]of Object.entries(t))if(!i){e=`R-group ${n} field is required for ${t.label}`;break t}return!e&&this.rgroupsGrid.hasErrors()&&(e="R-group fields contain errors"),e?(t&&t.header.style.setProperty("background-color","#ff000030"),e):null}findRgroupsInSmiles(t){return[...Array.from(t.matchAll(/\[[1-9]\*\]/g)),...Array.from(t.matchAll(/\[\*\:[1-9]\]/g))]}get form(){this.inputsTabControl.root.classList.add("monomer-manager-form-tab-control"),this.inputsTabControl.header.style.marginBottom="10px";const t=s.buttonsInput([this.saveButton]);return s.tooltip.bind(t,(()=>this.saveValidationResult??"Save monomer to library")),s.divV([this.molSketcher.root,this.inputsTabControl.root,t],{classes:"ui-form",style:{paddingLeft:"10px",overflow:"scroll",maxWidth:"unset"}})}get fieldInputs(){return{molecule:this.molSketcher,polymerType:this.polymerTypeInput,monomerType:this.monomerTypeInput,symbol:this.monomerSymbolInput,name:this.monomerNameInput,id:this.monomerIdInput,naturalAnalog:this.monomerNaturalAnalogInput}}get metaInputs(){return[]}get rgroupInputs(){return[]}getMonomerInfoTable(t){const e=Rn(t.rgroups,t.smiles,t.molfile),n=o.chem.drawMolecule(e,150,150),i=s.tableFromMap({name:t.name,author:t.author,createDate:t.createDate});return s.divH([n,i],{style:{alignItems:"center"}})}async removeMonomers(t,e,n=!0){let i=[];try{const t=await o.dapi.files.readAsText(hn.so+e);i=JSON.parse(t)}catch(t){return o.shell.error(`Error reading library ${e}`),console.error(t)}const r=t.map((t=>$n(i,(e=>e.symbol===t.symbol&&e.polymerType===t.polymerType))));for(let n=0;n<r.length;n++)if(-1===r[n])return void o.shell.error(`Monomer ${t[n].symbol} not found in library ${e}`);const a=r.map((t=>i[t])),l=s.divV(a.map((t=>this.getMonomerInfoTable(t))),{style:{maxHeight:"500px",overflow:"scroll"}}),c=a.length>1,h=c?`Are you sure you want to remove monomers ${a.map((t=>t.symbol)).join(", ")} from ${e} library?`:`Are you sure you want to remove monomer with symbol ${a[0].symbol} from ${e} library?`,u=s.dialog("Remove Monomer"+(c?"s":"")).add(s.h1(h)).add(l).addButton("Remove",(async()=>{i=i.filter((t=>!a.includes(t))),await o.dapi.files.writeAsText(hn.so+e,JSON.stringify(i,null,2)),await(await pn.getInstance()).loadLibraries(!0),await this.refreshTable(),n&&o.shell.info(`Monomer${c?"s":""} ${a.map((t=>t.symbol)).join(", ")} ${c?"were":"was"} successfully removed from ${e} library`),u.close()})).show()}async addMonomerToLib(t,e){let n=[];try{const t=await o.dapi.files.readAsText(hn.so+e);n=JSON.parse(t)}catch(t){return o.shell.error(`Error reading library ${e}`),console.error(t)}const i=$n(n,(e=>e.symbol===t.symbol&&e.polymerType===t.polymerType)),r=this.getMonomersDataFrame()?.col(Sn.MONOMER)?.toList()?.findIndex((e=>e===t.smiles)),a=async()=>{try{const i=n.findIndex((e=>e.symbol===t.symbol&&e.polymerType===t.polymerType));i>=0?n[i]={...t,lib:void 0,wem:void 0}:n.push({...t,lib:void 0,wem:void 0}),await o.dapi.files.writeAsText(hn.so+e,JSON.stringify(n,null,2)),await(await pn.getInstance()).loadLibraries(!0),await this.refreshTable(t.symbol),this._molChanged=!1,o.shell.info(`Monomer ${t.symbol} was successfully saved in library ${e}`)}catch(t){o.shell.error("Error saving monomer"),console.error(t)}this.onMonomerInputChanged()};let l=null,c="";if(i>=0)l=this.getMonomerInfoTable(n[i]),c=`Monomer with symbol '${t.symbol}' already exists in library ${e}.\nAre you sure you want to overwrite it?`;else if((r??-1)>=0){const t=await Gn(this.getMonomersDataFrame().rows.get(r));l=this.getMonomerInfoTable(t),c=`Monomer with the same structure already exists in library ${e} with different symbol (${t.symbol}).\nAre you sure you want to duplicate it?`}if(l){const t=s.dialog("Save Monomer").add(s.divText(c)).add(l).addButton("Save",(()=>{t.close(),a()})).show()}else await a()}async saveMonomer(){let t=this.molSketcher.getSmiles();if(!t||!o.chem.checkSmiles(t))return void o.shell.warning("Invalid SMILES");t=Rn([],t);let e=o.chem.convert(t,a.chem.Notation.Smiles,a.chem.Notation.MolBlock);e=On(e);const n={};this.metaGrid.items.filter((t=>!!t.Property&&!!t.Value)).forEach((t=>{n[t.Property]=t.Value}));const i=this.metaGrid.addingItem;i&&i.Property&&i.Value&&(n[i.Property]=i.Value),"#000000"===this.colorsEditor.colors.line&&"#000000"===this.colorsEditor.colors.background&&"#000000"===this.colorsEditor.colors.text||(n.colors={default:this.colorsEditor.colors});const r={symbol:this.monomerSymbolInput.value,name:this.monomerNameInput.value,molfile:e,smiles:t,polymerType:this.polymerTypeInput.value,monomerType:this.monomerTypeInput.value,naturalAnalog:this.monomerNaturalAnalogInput.value?this.monomerNaturalAnalogInput.value:void 0,id:this.monomerIdInput.value??0,rgroups:this.rgroupsGrid.items,author:a.User.current().friendlyName,createDate:(new Date).toISOString(),meta:n},s=this.getMonomerLib()?.source;s?await this.addMonomerToLib(r,s):o.shell.warning("Monomer library source is not specified")}}function $n(t,e){let n=-1;for(let i=t.length-1;i>=0;i--)if(e(t[i])){n=i;break}return n}function Rn(t,e,n){const i=!e||!o.chem.checkSmiles(e);if(i&&!n)throw new Error("Both SMILES and MOL block are empty or malformed");let r=i?o.chem.convert(n,a.chem.Notation.Unknown,a.chem.Notation.Smiles):e;return r=function(t,e){let n=t;return e.forEach((t=>{const e=t.label[1]??"1",i=new RegExp(`\\[\\${t.capGroupName}:${e}\\]`,"g");n=n.replace(i,`[*:${e}]`)})),n=n.replaceAll(/\[\d[A-Z]{1,2}\]/g,(t=>`[*:${t[1]}]`)),n}(r,t),r=In(r),i?r:o.chem.convert(r,a.chem.Notation.Unknown,a.chem.Notation.Smiles)}function On(t){const e=t.split("\n"),n=e.findIndex((t=>t.startsWith("M")&&t.includes("ISO")));if(-1!==n){const t=e[n].indexOf("ISO");e[n]=e[n].substring(0,t)+"RGP"+e[n].substring(t+3)}const i=e.findIndex((t=>t.includes("V2000")||t.includes("V3000"))),r=Number.parseInt(e[i].trim().split(" ")[0]),o={};for(let t=i+1;t<i+1+r;t++){const n=e[t].indexOf("R ");if(-1===n)continue;"#"!==e[t][n+1]&&(e[t]=e[t].replace("R ","R#"));const r=e[t].trim().split(" ").map((t=>t.trim())).filter(Boolean);if(o[t-i]=1,r.length<14)continue;const s=Number.parseInt(r[13]);Number.isNaN(s)||(o[t-i]=s)}const s=Object.keys(o);if(-1===e.findIndex((t=>t.startsWith("M")&&t.includes("RGP")))){const t=`M RGP${s.length.toString().padStart(3," ")}${Object.entries(o).map((([t,e])=>`${t.toString().padStart(4," ")}${e.toString().padStart(4," ")}`)).join("")}`,n=e.findIndex((t=>t.startsWith("M")&&t.includes("END")));e.splice(n,0,t)}return s.filter((t=>!!Number.parseInt(t))).map((t=>Number.parseInt(t)+i)).forEach((t=>{const n=e[t].split(" "),i=n.findIndex((t=>"R#"===t));if(-1!==i){for(let t=i+1;t<n.length;t++)n[t]&&1==n[t].length&&(Number.parseInt(n[t])??0)>0&&(n[t]="0");e[t]=n.join(" ")}})),e.join("\n")}function kn(t,e){let n=t;return e.forEach((t=>{const e=t.label[1]??"1",i=Ln(t,"capGroupName");n=n.replace(`[*:${e}]`,`[${i}]`)})),n}async function Gn(t){let e;try{e=JSON.parse(t.get(Sn.META)??"{}");for(const t in e)"object"==typeof e[t]&&(e[t]=JSON.stringify(e[t])),("string"!=typeof e[t]||e[t]!==a.INT_NULL.toString()&&e[t]!==a.FLOAT_NULL.toString())&&("number"!=typeof e[t]||e[t]!==a.INT_NULL&&e[t]!==a.FLOAT_NULL)||(e[t]=null)}catch(t){console.error(t)}const n=t.get(Sn.MONOMER);if(!n)throw new Error("Monomer SMILES is empty");let i="";try{i=o.chem.convert(n,a.chem.Notation.Smiles,a.chem.Notation.MolBlock),i=On(i)}catch(t){o.shell.error(`Error converting SMILES to molfile, \n ${n}`),console.error(t)}let r=t.get(Sn.NATURAL_ANALOG);const s=t.get(Sn.POLYMER_TYPE);let l=[];try{if(l=JSON.parse(t.get(Sn.R_GROUPS)??"[]"),!r&&s){const t=await An(kn(n,l),s);t&&(r=t)}}catch(t){l??=[]}return{symbol:t.get(Sn.SYMBOL),name:t.get(Sn.NAME),molfile:i,smiles:n,polymerType:s,monomerType:t.get(Sn.MONOMER_TYPE),naturalAnalog:r,id:t.get(Sn.ID),rgroups:l,meta:e,author:t.get(Sn.AUTHOR),createDate:t.get(Sn.CREATE_DATE)}}class Fn{_colors;_colorInputs;constructor(t){this._colors=t,this._colorInputs={line:s.input.color("Line",{value:t.line,onValueChanged:t=>this._colors.line=t}),background:s.input.color("Background",{value:t.background,onValueChanged:t=>this._colors.background=t}),text:s.input.color("Text",{value:t.text,onValueChanged:t=>this._colors.text=t})}}get colors(){return this._colors}set colors(t){const e={line:a.Color.toHtml(a.Color.fromHtml(t.line??"#000000")),background:a.Color.toHtml(a.Color.fromHtml(t.background??"#000000")),text:a.Color.toHtml(a.Color.fromHtml(t.text??"#000000"))};this._colors=e;for(const t in this._colorInputs)this._colorInputs[t].value=e[t]}get colorsMetaFormat(){return{colors:{default:this._colors}}}get form(){return s.form(Object.values(this._colorInputs))}}class Hn{monomer;root=s.divV([],{classes:"monomer-card-root"});_selected=!1;get selected(){return this._selected}set selected(t){this._selected=t,this.root.style.border=t?"2px solid var(--green-2)":"2px solid var(--grey-2)"}constructor(t){this.monomer=t}render(){s.empty(this.root);const t=this.monomer.smiles&&o.chem.checkSmiles(this.monomer.smiles)?o.chem.drawMolecule(this.monomer.smiles,200,200):o.chem.drawMolecule(this.monomer.molfile??"",200,200);this.root.appendChild(t);const e=s.divH([s.divText("Monomer Name: "),s.divText(this.monomer.name)],{classes:"monomer-card-info-row"});if(this.root.appendChild(e),s.tooltip.bind(e,this.monomer.name),this.monomer.lib?.source){const t=s.divH([s.divText("Source: "),s.divText(this.monomer.lib.source)],{classes:"monomer-card-info-row"});this.root.appendChild(t),s.tooltip.bind(t,this.monomer.lib.source)}const n=s.divH([s.divText("Polymer Type: "),s.divText(this.monomer.polymerType)],{classes:"monomer-card-info-row"});this.root.appendChild(n),s.tooltip.bind(n,this.monomer.polymerType),s.tooltip.bind(this.root,"Select Monomer")}}class Bn{monomerSymbol;monomers;root=s.divH([],{style:{alignItems:"center",width:"100%",overflow:"hidden",visibility:"visible"},classes:"duplicate-monomer-symbol-row"});monomerCards;constructor(t,e,n,i){this.monomerSymbol=t,this.monomers=e,this.monomerCards=e.map((t=>new Hn(t)));const r=s.divH([],{style:{overflowX:"auto",width:"100%"}}),o=s.h1(t,{style:{lineHeight:"2em",fontSize:"1.5em",marginRight:"20px",width:"100px",overflow:"hidden",textOverflow:"elipsis"}});s.tooltip.bind(o,t),this.root.appendChild(o),this.root.appendChild(r),this.monomerCards.forEach((t=>{t.root.onclick=()=>{this.monomerCards.forEach((t=>t.selected=!1)),t.selected=!0,i(t.monomer)},n&&t.monomer===n&&(t.selected=!0),r.appendChild(t.root)}))}render(){this.monomerCards.forEach((t=>t.render()))}}class Dn{monomerCardRows=[];saveSettingsPromise=Promise.resolve();searchInput;_root;monomers;settings;filteredMonomerRows=[];static _instance;vv;static async getInstance(){return Dn._instance||(Dn._instance=new Dn,await Dn._instance.refresh(),(await pn.getInstance()).getMonomerLib().onChanged.subscribe((async()=>await Dn._instance.refresh()))),Dn._instance.refresh(),Dn._instance}async refresh(){this.settings=await(0,Nt.ub)();const t=await pn.getInstance();await t.awaitLoaded(),await t.loadLibrariesPromise,this.monomers=t.duplicateMonomers,this.monomerCardRows=[];for(const e in this.monomers)for(const n in this.monomers[e]){const i=this.settings.duplicateMonomerPreferences?.[e]?.[n]??null,r=i?this.monomers[e][n].find((t=>t.lib?.source===i))??null:null;this.monomerCardRows.push(new Bn(n,this.monomers[e][n],r,(async i=>{this.saveSettingsPromise=this.saveSettingsPromise.then((async()=>{i.lib?.source&&(this.settings.duplicateMonomerPreferences=this.settings.duplicateMonomerPreferences??{},this.settings.duplicateMonomerPreferences[e]=this.settings.duplicateMonomerPreferences[e]??{},this.settings.duplicateMonomerPreferences[e][n]=i.lib.source,await(0,Nt.Eu)(this.settings),o.shell.info(`Monomer '${i.name}' from source '${i.lib.source}' selected for symbol '${n}'.`),t.assignDuplicatePreferances(this.settings))}))})))}if(this.filteredMonomerRows=this.monomerCardRows,this.vv)this.vv.setData(this.filteredMonomerRows.length,(t=>(this.filteredMonomerRows[t].render(),this.filteredMonomerRows[t].root)));else{this.vv=s.virtualView(this.monomerCardRows.length,(t=>(this.monomerCardRows[t].render(),this.monomerCardRows[t].root))),this.vv.root.classList.add("duplicate-monomers-virtual-view"),this.searchInput=s.input.string("Search",{placeholder:"Monomer Symbol",value:"",onValueChanged:()=>t(this.searchInput.value)}),this.searchInput.root.style.justifyContent="center",this.searchInput.input.style.width="200px",this._root=s.divV([s.h1("Manage Duplicate Monomer Symbols",{style:{textAlign:"center"}}),this.searchInput.root,s.divV([this.vv.root],{style:{overflowY:"auto",height:"100%"}})],{style:{height:"100%"}});const t=t=>{this.filteredMonomerRows=this.monomerCardRows.filter((e=>e.monomerSymbol.toLowerCase().includes(t.toLowerCase()))),this.vv.setData(this.filteredMonomerRows.length,(t=>(this.filteredMonomerRows[t].render(),this.filteredMonomerRows[t].root)))}}}constructor(){}get root(){return this._root}}async function Vn(){await qn.showDialog()}async function jn(t=!0){return await zn.showView(t)}class Un{_fileManager;_widget;get widget(){return this._widget}constructor(){}static instancePromise;static async getInstance(){return void 0===Un.instancePromise&&(Un.instancePromise=(async()=>{const t=new Un,e=await(0,bt.pj)();return t._fileManager=await e.getFileManager(),t._widget=await t.createWidget(),t})()),Un.instancePromise}static async reloadWidget(){const t=await Un.getInstance();t._widget=await t.createWidget()}async createWidget(){const t=await this.getWidgetContent();return(await(0,bt.pj)()).eventManager.addLibraryFileRequested$.subscribe((()=>this.promptToAddLibraryFiles())),new a.Widget(t)}async getWidgetContent(){const t=await Wn.createControlsForm();return fn()(t).addClass("monomer-lib-controls-form"),setTimeout((()=>{t&&fn()(t)&&fn()(t).removeClass("ui-form-condensed")}),200),s.divV([t])}async promptToAddLibraryFiles(){a.Utils.openFile({accept:".json",open:async t=>{const e=await t.text(),n=t.name,i=a.TaskBarProgressIndicator.create(`Adding ${n} as a monomer library`);try{await this._fileManager.addLibraryFile(e,n)}catch(t){o.shell.error(`File ${n} is not a valid monomer library, verify it is aligned to HELM JSON schema.`)}finally{i.close()}}})}}class Wn{fileManager;userLibSettings;constructor(t,e){this.fileManager=t,this.userLibSettings=e,this.fileManager.eventManager.updateUIControlsRequested$.subscribe((()=>{this.updateControlsForm()})),this.fileManager.eventManager.librarySelectionRequested$.subscribe((([t,e])=>{this.updateLibrarySelectionStatus(e,t)}))}toLog(){return"LibraryControlsManager<#>"}static async createControlsForm(){Di.logger.debug("LibraryControlsForm.createControlsForm(), start");const[t,e]=await Promise.all([(0,bt.pj)().then((t=>t.getFileManager())),await(0,Nt.ub)()]);return new Wn(t,e)._createControlsForm()}_createControlsForm(){const t=this.createLibraryControls(),e=s.wideForm(t,void 0);return fn()(e).addClass("monomer-lib-controls-form"),e}updateControlsForm(){const t=this._createControlsForm();fn()(".monomer-lib-controls-form").replaceWith(t)}createLibraryControls(){return this.fileManager.getValidLibraryPaths().map((t=>this.createLibInput(t)))}createLibInput(t){const e=`${this.toLog()}.createLibInput()`;Di.logger.debug(`${e}, libFileName = '${t}', start`);const n=!this.userLibSettings.exclude.includes(t),i=s.input.bool(t,{value:n,onValueChanged:()=>{this.fileManager.eventManager.updateLibrarySelectionStatus(t,i.value)}});s.tooltip.bind(i.root,`Include monomers from ${t}`);const r=s.iconFA("trash-alt",(()=>this.promptForLibraryDeletion(t))),a=s.icons.edit((async()=>{o.shell.v=await(await _n.getInstance()).getViewRoot(t)}),"Edit monomer library");return s.tooltip.bind(r,`Delete ${t}`),i.addOptions(a),i.addOptions(r),Di.logger.debug(`${e}, libFileName = '${t}', end`),i}async updateLibrarySelectionStatus(t,e){this.updateLibrarySettings(t,e),await(0,Nt.Eu)(this.userLibSettings);const n=await(0,bt.pj)();await n.loadMonomerLib(!0),o.shell.info("Monomer library user settings saved")}updateLibrarySettings(t,e){t?this.userLibSettings.exclude=this.userLibSettings.exclude.filter((t=>t!==e)):this.userLibSettings.exclude.includes(e)||this.userLibSettings.exclude.push(e)}promptForLibraryDeletion(t){s.dialog("Warning").add(s.divText(`Delete file ${t}?`)).onOK((async()=>{try{const e=a.TaskBarProgressIndicator.create(`Deleting ${t} library`);await this.updateLibrarySelectionStatus(!1,t),await this.fileManager.deleteLibraryFile(t),e.close()}catch(e){console.error(e),o.shell.error(`Failed to delete ${t} library`)}})).showModal(!1)}}class qn{constructor(){}static _instance;dialog;closeDialogSubject$=new h.Subject;static async showDialog(){qn._instance||(qn._instance=new qn,qn._instance.closeDialogSubject$.subscribe((()=>{qn._instance.dialog=void 0}))),qn._instance.dialog||(qn._instance.dialog=await qn._instance.getDialog()),qn._instance.dialog.show()}async getDialog(){const t=dn.getInstance(),e=(await Un.getInstance()).widget,n=s.dialog({title:"Manage monomer libraries",helpUrl:"/help/datagrok/solutions/domains/bio/bio.md#manage-monomer-libraries"});fn()(n.root).css("width","350px"),n.clear(),n.addButton("Add",(()=>t.addLibraryFile()),void 0,"Upload new HELM monomer library"),n.add(e);const i=n.onClose.subscribe((()=>{this.closeDialogSubject$.next(),i.unsubscribe()}));return n}}class zn{constructor(){}static _instance;static viewName="Manage Monomer Libraries";_view;_duplicateManager;libManager;async getView(t=!0){const e=dn.getInstance(),n=(await Un.getInstance()).widget,i=s.bigButton("Add",(()=>e.addLibraryFile()),"Upload new HELM monomer library"),r=s.bigButton("Merge",(()=>{this.mergeSelectedLibs()}),"Merge selected libraries into one"),l=s.splitH([s.divV([n.root,s.buttonsInput([i,r])],{classes:"ui-form"}),this._duplicateManager.root],{style:{width:"100%",height:"100%"}},!0);return this._view=a.View.fromRoot(l),this._view.name=zn.viewName,t&&o.shell.addView(this._view),s.tools.waitForElementInDom(l).then((()=>{setTimeout((()=>{const t=Array.from(l.children).filter((t=>t.classList.contains("ui-box")));if(2!==t.length)return;const[e,n]=t,i=e.getBoundingClientRect().width+n.getBoundingClientRect().width,r=.3*i;e.style.width=`${r}px`;const o=i-r;n.style.width=`${o}px`}),100),this._view.subs.push(o.events.onCurrentViewChanged.subscribe((()=>{try{const t=zn._instance;t&&t._view&&"id"in o.shell.v&&o.shell.v.id===t._view.id&&t._duplicateManager?.refresh()}catch(t){console.error(t)}})))})),this._view}static async showView(t=!0){return zn._instance||(zn._instance=new zn),zn._instance._duplicateManager||(zn._instance._duplicateManager=await Dn.getInstance()),zn._instance.libManager||(zn._instance.libManager=await pn.getInstance()),t&&zn._instance._view&&Array.from(o.shell.views).find((t=>t.id&&t.id===zn._instance._view.id))?(o.shell.v=zn._instance._view,await zn._instance._duplicateManager.refresh(),zn._instance._view):(zn.closeExistingViews(),zn._instance.getView(t))}static closeExistingViews(){Array.from(o.shell.views).filter((t=>t.name===zn.viewName)).forEach((t=>t.close()))}async mergeSelectedLibs(){const t="Library with this name already exists",e=await pn.getInstance();if(await e.awaitLoaded(),await e.loadLibrariesPromise,!e.duplicatesHandled)return void o.shell.warning("Selected libraries contain repeating symbols with different monomers.\n Please choose the correct monomer for each symbol using duplicate monomomer manager.");const n=e.getBioLib().toJSON(),i=s.dialog("Merge selected libraries"),r=s.input.string("Library Name",{placeholder:"Enter new library name",nullable:!1,onValueChanged:()=>{const e=h(r.value);i.getButton("Download")?.classList?.toggle("d4-disabled",!!e&&e!==t),i.getButton("Save")?.classList?.toggle("d4-disabled",!!e)}}),l=(await this.libManager.getFileManager()).getValidLibraryPaths();function c(){let t=r.value;return t.endsWith(".json")||(t+=".json"),t}function h(e){return e&&e.trim()?e.endsWith(".json")&&l.includes(e)||l.includes(e+".json")?t:null:"Library name cannot be empty"}r.addValidator(h),i.add(r).add(s.divText(`Total monomers: ${n.length}`)).addButton("Download",(()=>{a.Utils.download(c(),JSON.stringify(n))})).addButton("Save",(async()=>{i.close();const t=c(),e=JSON.stringify(n),r=await this.libManager.getFileManager();this._view&&s.setUpdateIndicator(this._view.root,!0);try{await r.addLibraryFile(e,t,!1);const n=await(0,Nt.ub)();n.exclude=l,await(0,Nt.Eu)(n),await this.libManager.loadLibraries(!0),await Un.reloadWidget()}catch(e){o.shell.error(`Failed to save library ${t}. see console for details.`),console.error(e)}finally{this._view&&s.setUpdateIndicator(this._view.root,!1)}})).show(),i.getButton("Download")?.classList?.add("d4-disabled"),i.getButton("Save")?.classList?.add("d4-disabled")}}var Yn,Kn=function(t,e,n,i){return new(n||(n=Promise))((function(r,o){function s(t){try{l(i.next(t))}catch(t){o(t)}}function a(t){try{l(i.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?r(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,a)}l((i=i.apply(t,e||[])).next())}))};class Zn{_setBreadcrumbsInViewName(){var t,e;const n=["Home","Demo",...(null!==(t=this._path)&&void 0!==t?t:"").split("/")],i=s.breadcrumbs(n);if(i.onPathClick.subscribe((t=>Kn(this,void 0,void 0,(function*(){const e=t[t.length-1];if(e===i.path[i.path.length-1])return;const n=o.shell.browsePanel.mainTree.getOrCreateGroup("Apps").getOrCreateGroup("Demo");n.currentItem="Demo"===e?n:n.items.find((t=>t.text===e))})))),o.shell.v){if(0!==i.path.length&&"Home"===i.path[0]){const t=s.iconFA("home",(()=>{o.shell.v.close(),o.shell.v=a.View.createByType(a.VIEW_TYPE.HOME)}));t.classList.add("demo-breadcrumbs-home-element"),i.root.firstElementChild.replaceWith(t)}const t=null===(e=o.shell.v.ribbonMenu.root.parentElement)||void 0===e?void 0:e.getElementsByClassName("d4-ribbon-name")[0];t&&(t.textContent="",t.appendChild(i.root))}}constructor(t,e,n=!1,i){var r,o;this.name="",this.description="",this._isAutomatic=!1,this._autoStartFirstStep=!1,this._currentStep=0,this._isStopped=!1,this._isCancelled=!1,this._isStepProcessed=!1,this._root=s.div([],{id:"demo-script",classes:"tutorials-root tutorials-track demo-app-script"}),this._steps=[],this._mainHeader=s.panel([],"tutorials-main-header"),this._header=s.h2(""),this._headerDiv=s.divH([],"tutorials-root-header"),this._stopStartBtn=s.button(s.iconFA("pause"),(()=>Kn(this,void 0,void 0,(function*(){return yield this._changeStopState()}))),"Play / pause"),this._restartBtn=s.button(s.iconFA("redo"),(()=>Kn(this,void 0,void 0,(function*(){return yield this._restartScript()}))),"Restart"),this._nextStepBtn=s.button(s.iconFA("play"),(()=>Kn(this,void 0,void 0,(function*(){this._isStepProcessed||(yield this._nextStep())}))),"Next step"),this._activity=s.panel([],"tutorials-root-description"),this._progressDiv=s.divV([],"tutorials-root-progress"),this._progress=s.element("progress"),this._progressSteps=s.divText(""),this._closeBtn=s.button(s.iconFA("chevron-left"),(()=>this._closeDock()),"Back to demo"),this.DEMO_PATH="apps/Tutorials/Demo",this.name=t,this.description=e,this._isAutomatic=n,this._autoStartFirstStep=null!==(r=null==i?void 0:i.autoStartFirstStep)&&void 0!==r&&r,this._path=null!==(o=null==i?void 0:i.path)&&void 0!==o?o:"",this._progress.max=0,this._progress.value=1,Zn.currentObject=this}get steps(){return this._steps}get stepNumber(){return this._steps.length}_addHeader(){this._createHeaderDiv(),this._createProgressDiv(),this._mainHeader.append(this._headerDiv,this._progressDiv)}_createHeaderDiv(){this._header.innerText=this.name,this._headerDiv.append(this._closeBtn),this._headerDiv.append(this._header),this._nextStepBtn.firstChild.className="grok-icon fas fa-play",this._headerDiv.append(this._isAutomatic?this._stopStartBtn:this._nextStepBtn)}_createProgressDiv(){this._progress.max=this.stepNumber,this._progressDiv.append(this._progress),this._progressSteps=s.divText(`Step: ${this._progress.value} of ${this.stepNumber}`),this._progressDiv.append(this._progressSteps)}_addDescription(){var t;this._activity.append(s.div(this.description,"tutorials-root-description"));for(let e=0;e<this.stepNumber;e++){let n=s.iconFA("clock");this._isAutomatic||0===e&&(n=s.iconFA("play",(()=>this._nextStep()),"Next step"),n.className="grok-icon fas fa-play");const i=s.div(this._steps[e].name,"grok-tutorial-entry-instruction"),r=s.div(null===(t=this._steps[e].options)||void 0===t?void 0:t.description,"grok-tutorial-step-description hidden"),o=s.divH([n,i],"grok-tutorial-entry");this._activity.append(o,r)}}_initRoot(){o.shell.windows.showContextPanel=!0,o.shell.windows.showHelp=!1,this._node=o.shell.dockManager.dock(this._root,a.DOCK_TYPE.FILL,o.shell.dockManager.findNode(o.shell.browsePanel.root),this.name),this._node.container.containerElement.classList.add("tutorials-demo-script-container"),this._addHeader(),this._root.append(this._mainHeader),this._addDescription(),this._root.append(this._activity)}_setViewParams(){var t;o.shell.v&&(o.shell.v.name=this.name,o.shell.v.path=`${this.DEMO_PATH}/${(null!==(t=this._path)&&void 0!==t?t:"").replaceAll(" ","-")}`,this._setBreadcrumbsInViewName())}_nextStep(){return Kn(this,void 0,void 0,(function*(){var t,e;this._isStepProcessed=!0,this._isAutomatic||(this._nextStepBtn.classList.add("disabled"),this._nextStepBtn.firstChild.classList.add("fa-disabled"));const n=this._activity.getElementsByClassName("grok-tutorial-entry")[this._currentStep],i=this._activity.getElementsByClassName("grok-icon")[this._currentStep],r=this._activity.getElementsByClassName("grok-tutorial-step-description")[this._currentStep];i.className="grok-icon far fa-spinner-third fa-spin",r.classList.remove("hidden"),r.classList.add("visible");const l=n,c=(null===(t=this._steps[this._currentStep].options)||void 0===t?void 0:t.delay)?null===(e=this._steps[this._currentStep].options)||void 0===e?void 0:e.delay:2e3;try{this._setViewParams(),yield this._steps[this._currentStep].func(),this._setViewParams()}catch(t){console.error(t)}this._scrollTo(this._root,l.offsetTop-this._mainHeader.offsetHeight),this._isAutomatic&&(yield this._countdown(n,i,c),yield(0,te.cb)(c));const h=s.iconFA("check");if(i.replaceWith(h),h.className="grok-icon far fa-check",this._progress.value++,this._progressSteps.innerText=`Step: ${this._progress.value} of ${this.stepNumber}`,this._currentStep++,this._isStepProcessed=!1,this._currentStep!==this.stepNumber){if(!this._isAutomatic){const t=this._activity.getElementsByClassName("grok-icon")[this._currentStep],e=s.iconFA("play",(()=>this._nextStep()),"Next step");e.className="grok-icon fas fa-play",t.replaceWith(e),this._nextStepBtn.classList.remove("disabled"),this._nextStepBtn.firstChild.classList.remove("fa-disabled")}o.shell.v instanceof a.TableView&&(yield o.data.detectSemanticTypes(o.shell.tv.dataFrame))}else this._isAutomatic?this._stopStartBtn.replaceWith(this._restartBtn):this._nextStepBtn.replaceWith(this._restartBtn)}))}_startScript(){return Kn(this,void 0,void 0,(function*(){for(let t=this._currentStep;t<this.stepNumber&&!this._isStopped&&!this._isCancelled;t++)yield this._nextStep()}))}_scrollTo(t,e){t.focus(),t.scrollTop=e}_countdown(t,e,n){return Kn(this,void 0,void 0,(function*(){const i=s.div([],"demo-script-countdown");e.classList.add("hidden");let r=n/1e3;const o=this._createSVGIndicator(r);i.append(o),t.prepend(i);const a=setInterval((()=>{r--,0===r&&(clearInterval(a),i.remove(),e.classList.remove("hidden"),e.classList.add("visible"))}),1e3)}))}_createSVGIndicator(t){const e=document.createElementNS("http://www.w3.org/2000/svg","svg"),n=document.createElementNS("http://www.w3.org/2000/svg","circle");return n.setAttributeNS(null,"cx","7"),n.setAttributeNS(null,"cy","7"),n.setAttributeNS(null,"r","6"),n.setAttributeNS(null,"style",`animation: countdown ${t}s linear infinite forwards`),e.append(n),e}_changeStopState(){return Kn(this,void 0,void 0,(function*(){const t=this._stopStartBtn.getElementsByClassName("grok-icon");t[0].className="grok-icon fas fa-play",this._isStopped=!this._isStopped,this._isStopped||(t[0].className="grok-icon fal fa-pause",this._isStepProcessed||(yield this._startScript()))}))}_restartScript(){return Kn(this,void 0,void 0,(function*(){o.shell.dockManager.close(this._node),this._clearRoot(),this._setInitParams(),yield this.start()}))}_clearRoot(){this._root=s.div([],{id:"demo-script",classes:"tutorials-root tutorials-track demo-app-script"}),this._mainHeader=s.panel([],"tutorials-main-header"),this._header=s.h2(""),this._headerDiv=s.divH([],"tutorials-root-header"),this._activity=s.panel([],"tutorials-root-description"),this._progressDiv=s.divV([],"tutorials-root-progress"),this._progress=s.element("progress"),this._progressSteps=s.divText(""),this._progress.max=0,this._progress.value=1}_setInitParams(){this._currentStep=0,this._isStopped=!1,this._isCancelled=!1,this._stopStartBtn.getElementsByClassName("grok-icon")[0].className="grok-icon fal fa-pause",this._nextStepBtn.classList.remove("disabled")}_closeDock(){o.shell.dockManager.close(this._node),this.cancelScript()}cancelScript(){this._isCancelled=!0,Zn.currentObject=null}step(t,e,n){return this._steps[this.steps.length]={name:t,func:e,options:n},this}start(){return Kn(this,void 0,void 0,(function*(){this._initRoot(),o.shell.v.name===this.name&&(o.shell.v.close(),this._node=o.shell.dockManager.dock(this._root,a.DOCK_TYPE.FILL,o.shell.dockManager.findNode(o.shell.browsePanel.root),this.name)),this._isAutomatic?yield this._startScript():this._autoStartFirstStep&&(yield this._nextStep())}))}}Zn.currentObject=null,function(t){t.X="Embed_X",t.Y="Embed_Y"}(Yn||(Yn={}));var Xn=n(966),Jn=n(608),Qn=n(1619);class ti{urlParams;funcName;options;df;view;constructor(t,e,n={}){this.urlParams=t,this.funcName=e,this.options=n}async init(t){this.df=t,await this.buildView()}async buildView(){const t=rt()(this.urlParams.entries()).map((([t,e])=>`${t}=${encodeURIComponent(e)}`)).toArray().join("&");this.view=o.shell.addTableView(this.df),this.view.path=this.view.basePath=`func/${Di.name}.${this.funcName}?${t}`;const e={...this.options,sequenceColumnName:"sequence"};for(const[t,n]of this.urlParams.entries())switch(t){case re.n5.fixWidth:case re.n5.fitArea:e[t]=["1","on","true"].includes(n.toLowerCase());break;default:e[t]=n}const n=await this.view.dataFrame.plot.fromType("WebLogo",e);this.view.dockManager.dock(n,a.DOCK_TYPE.DOWN,null,"WebLogo",.35)}}class ei{tableInput;seqColInput;funcParamsDiv;get funcParams(){return{table:this.tableInput.value,sequence:this.seqColInput.value}}get paramsUI(){return this.funcParamsDiv}constructor(){this.tableInput=s.input.table("Table",{value:o.shell.tv.dataFrame,onValueChanged:()=>{this.onTableInputChanged()}});const t=this.tableInput.value.columns.bySemType(a.SEMTYPE.MACROMOLECULE);this.seqColInput=s.input.column("Sequence",{table:this.tableInput.value,value:t,filter:t=>t.semType===a.SEMTYPE.MACROMOLECULE}),this.funcParamsDiv=s.inputs([this.tableInput,this.seqColInput],{style:{minWidth:"320px"}})}onTableInputChanged(){this.seqColInput=s.input.column("Sequence",{table:this.tableInput.value,value:this.tableInput.value.columns.bySemType(a.SEMTYPE.MACROMOLECULE)})}}var ni=n(6869);new class{tooltipHandlerTemp="tooltip-handler.Monomer"};class ii extends Vt{constructor(t,e){super(t,e)}render(t,e,n,i,r,o,s){t.save();try{if(!o.isTableCell)return;const s=o.cell?.column&&o.cell.column?.dart&&"true"===o.cell.column.getTag(Rt.Mn.applyToBackground);t.font="12px monospace",t.textBaseline="middle",t.textAlign="center";const a=o.cell.value;if(!a||a==wt._S)return;let l=Ot.S$,c="rgb(255, 255, 255)";if(this.monomerLib){const t=this.tableCol.getTag(wt.gp.alphabet),e=t===gt.YI.RNA||t===gt.YI.DNA?ni.o.NUCLEOTIDE:ni.o.AA;if(s){const t=this.monomerLib.getMonomerColors(e,a);l=t?.textcolor??l,c=t?.backgroundcolor??c}else l=this.monomerLib.getMonomerTextColor(e,a)}const h=Math.max(2,Math.floor(.15*i));s&&(t.fillStyle=c,t.fillRect(e,n,i,r)),t.fillStyle=l,t.fillText((0,gt.zS)(a,h),e+i/2,n+r/2,i)}finally{t.restore()}}onMouseMove(t,e){if(t.grid.dart!=this.gridCol?.grid.dart||t.gridColumn.dart!=this.gridCol?.dart||!t.tableColumn||!t.isTableCell)return!1;const n=t.tableColumn.getTag(wt.gp.alphabet),i=t.cell.value,r=t.grid.canvas.getBoundingClientRect(),o=t.bounds.right+r.left-4,a=t.bounds.bottom+r.top-4;if(i==wt._S)return s.tooltip.show(s.divText("gap"),o,a),!0;if(!this.monomerLib)return s.tooltip.show(s.divText("Monomer library is not available."),o,a),!0;const l=n===gt.YI.RNA||n===gt.YI.DNA?ni.o.NUCLEOTIDE:ni.o.AA,c=this.monomerLib.getTooltip(l,i);return s.tooltip.show(c,o,a),!0}async awaitRendered(t=1e4,e=`${t} timeout`){return Promise.resolve()}static getOrCreate(t){const[e,n,i]=(0,Ft.BG)(t);let r=i.rendererBack;return r||(r=i.rendererBack=new ii(e,n)),r}}class ri extends a.GridCellRenderer{get name(){return jt.uF.MONOMER}get cellType(){return jt.uF.MONOMER}get defaultHeight(){return 15}get defaultWidth(){return 40}render(t,e,n,i,r,o,s){ii.getOrCreate(o).render(t,e,n,i,r,o,s)}onMouseMove(t,e){ii.getOrCreate(t).onMouseMove(t,e)}}class oi{constructor(t,e,n=""){this.target=t,this.debugEnabled=e,this.prefix=n}error(t,e,n){return this.target.error(this.prefix+t,e,n)}warning(t,e){return this.target.warning(this.prefix+t,e)}info(t,e){return this.target.info(this.prefix+t,e)}debug(t,e){if(this.debugEnabled)return this.target.debug(this.prefix+t,e)}}class si extends Map{_onPropertyChanged=new h.Subject;get onPropertyChanged(){return this._onPropertyChanged}get fontSize(){const t=super.get("FontSize");return t&&!isNaN(t)?Number.parseInt(t):12}set fontSize(t){super.set("FontSize",t),this._onPropertyChanged.next("FontSize")}get maxMonomerLength(){const t=super.get("MaxMonomerLength");return"long"===t?null:parseInt(t)}set maxMonomerLength(t){const e=null===t?"long":t.toString();super.set("MaxMonomerLength",e),this._onPropertyChanged.next("MaxMonomerLength")}get tooltipWebLogo(){return super.get("TooltipWebLogo")}set tooltipWebLogo(t){super.set("TooltipWebLogo",t),this._onPropertyChanged.next("TooltipWebLogo")}get defaultSeparator(){return super.get("DefaultSeparator")}set defaultSeparator(t){if(1!==t.length)throw new Error("The separator must be of length one.");super.set("DefaultSeparator",t),this._onPropertyChanged.next("DefaultSeparator")}constructor(t){super(Object.entries(t))}}class ai extends a.Package{_properties;_seqHelper;get seqHelper(){if(!this._seqHelper)throw new Error("Package Bio .seqHelper is not initialized.");return this._seqHelper}_monomerLib;get monomerLib(){if(!this._monomerLib)throw new Error("Package Bio .monomerLib is not initialized.");return this._monomerLib}_monomerSets;get monomerSets(){if(!this._monomerSets)throw new Error("Package Bio .monomerSets is not initialized.");return this._monomerSets}_rdKitModule;get rdKitModule(){if(!this._rdKitModule)throw new Error("Package Bio .rdKitModule is not initialized.");return this._rdKitModule}get properties(){return this._properties}set properties(t){this._properties=t}_initialized=!1;get initialized(){return this._initialized}constructor(t={debug:!1}){super(),super._logger=new oi(super.logger,t.debug)}completeInit(t,e,n,i){this._seqHelper=t,this._monomerLib=e,this._monomerSets=n,this._rdKitModule=i,this._initialized=!0}handleErrorUI(t){const[e,n]=(0,Ct.AP)(t);o.shell.error(e),this.logger.error(e,void 0,n)}}var li=n(2174);class ci extends a.Widget{seqCol;seqHelper;viewed=!1;wlViewer=null;constructor(t,e){super(s.divV([])),this.seqCol=t,this.seqHelper=e}async init(){const t=this.seqHelper.getSeqHandler(this.seqCol),e=Di.properties.tooltipWebLogo,n=this.seqCol.getTag(ee.gp.tooltipWebLogo);!1===e||["false","off","disable","disabled"].includes(n)||(this.wlViewer=await this.seqCol.dataFrame.plot.fromType("WebLogo",{sequenceColumnName:this.seqCol.name,backgroundColor:0,positionHeight:"Entropy",positionWidth:t.getAlphabetIsMultichar()?24:16,fixWidth:!0,fitArea:!1,positionNames:"",endPositionName:"50"}),this.wlViewer.root.style.height="50px",this.root.appendChild(this.wlViewer.root),this.root.style.width="100%")}detach(){this.wlViewer&&(this.wlViewer.detach(),this.wlViewer=null),super.detach()}}function hi(t,e,n,i){const r=Di.seqHelper.getSeqHandler(t);let o=null,s=null;for(let t=0;t<r.posList.length;++t)r.posList[t]==e&&(o=t),r.posList[t]==n&&(s=t);if(null===o&&null!==e)throw new Error(`Start position ${e} not found.`);if(null===s&&null!==n)throw new Error(`End position ${n} not found.`);if(r.posList.length<s)throw new Error(`End position ${s} exceeds positions length`);const a=i||`${t.name}: (${e??""}-${n??""})`;return r.getRegion(o,s,a)}const ui={df:a.DataFrame.fromCsv("seq,value\nATCCGTCGT,0.5\nTGTTCGTCA,0.4\nATGGTCGTA,0.7\nATCCGTGCA,0.1"),colName:"seq",positionNames:["1","1A","1C","2","4","4A","4B","5","6"].join(gt.z1),regions:[{name:"first region",start:"1",end:"2"},{name:"second region",start:"1C",end:"4"},{name:"overlapping second",start:"1C",end:"4A"},{name:"whole sequence",start:"1",end:"6"},{name:"bad start",start:"0",end:"6"},{name:"bad end",start:"1",end:"4C"},{name:"bad start & end",start:"0",end:"4C"}]};class di{urlParams;funcName;view;data;constructor(t,e){this.urlParams=t,this.funcName=e}async init(t){this.data=t??ui;const e=this.data.df.getCol(this.data.colName);this.data.positionNames&&e.setTag(gt.gp.positionNames,this.data.positionNames),this.data.regions&&e.setTag(gt.gp.regions,JSON.stringify(this.data.regions)),await this.buildView()}async buildView(){await o.data.detectSemanticTypes(this.data.df),this.view=o.shell.addTableView(this.data.df),this.view.path=this.view.basePath=`func/${Di.name}.${this.funcName}`;const t=await this.view.dataFrame.plot.fromType("WebLogo",{sequenceColumnName:this.data.colName});this.view.dockManager.dock(t,a.DOCK_TYPE.DOWN,null,"WebLogo",.35)}}class pi{call;seqHelper;inputs=new class{table;sequence;region;start;end;name};constructor(t,e){this.call=t,this.seqHelper=e;const n=t=>this.call.inputParams[t].property.description;this.inputs.table=s.input.table("Table",{value:this.call.inputParams.table.value??o.shell.tv.dataFrame});const i=this.call.inputParams.sequence.value??this.inputs.table.value.columns.bySemType(a.SEMTYPE.MACROMOLECULE);this.inputs.sequence=s.input.column("Sequence",{table:o.shell.tv.dataFrame,value:i,onValueChanged:this.sequenceInputChanged.bind(this),filter:t=>t.semType===a.SEMTYPE.MACROMOLECULE}),this.inputs.start=s.input.choice("Start",{onValueChanged:this.startInputChanged.bind(this)}),this.inputs.end=s.input.choice("End",{onValueChanged:this.endInputChanged.bind(this)}),this.inputs.region=s.input.choice("Region",{value:null,items:[],onValueChanged:this.regionInputChanged.bind(this)}),this.inputs.name=s.input.string("Column name",{value:this.getDefaultName(),onValueChanged:this.nameInputChanged.bind(this),clearIcon:!0}),this.inputs.name.onInput.subscribe((()=>this.nameInputInput.bind(this)));for(const t in this.call.inputParams)s.tooltip.bind(this.inputs[t].captionLabel,n(t));this.sequenceInputChanged()}sequenceInputChanged(){const t=this.inputs.sequence.value;t&&this.seqHelper.getSeqHandler(t),this.updateRegionItems(),this.updateStartEndInputItems(),this.updateRegion(!0),this.updateNameInput()}fixRegion=!1;regionInputChanged(){this.fixRegion=!0;try{const t=this.inputs.region.stringValue,e=t?JSON.parse(t):null;if(null!==e)this.inputs.start.value=e?.start,this.inputs.end.value=e?.end;else{const t=this.seqHelper.getSeqHandler(this.inputs.sequence.value);this.inputs.start.value=t.posList[0],this.inputs.end.value=t.posList[t.posList.length-1]}}finally{this.fixRegion=!1}}startInputChanged(){this.updateRegion(!1),this.updateNameInput()}endInputChanged(){this.updateRegion(!1),this.updateNameInput()}nameInputChanged(){this.defaultNameUpdating||(this.defaultName=!1)}nameInputInput(){this.inputs.name.value||(this.defaultName=!0,this.inputs.name.input.focus())}updateStartEndInputItems(){const t=this.inputs.sequence.value,e=t?this.seqHelper.getSeqHandler(t):null,n=this.inputs.start.input,i=this.inputs.end.input;for(let t=n.options.length-1;t>=0;--t)n.options.remove(t);for(let t=i.options.length-1;t>=0;--t)i.options.remove(t);for(const t of e?.posList??[]){const e=document.createElement("option"),r=document.createElement("option");e.text=r.text=t,e.value=r.value=t,n.options.add(e),i.options.add(r)}n.value=e?.posList[0]??"",i.value=e?.posList[e?.posList.length-1]??""}updateRegionItems(){const t=this.inputs.sequence.value,e=t?t.getTag(gt.gp.regions):null,n=e?JSON.parse(e):null,i=this.inputs.region.input;for(let t=i.options.length-1;t>=0;--t)i.options.remove(t);const r=document.createElement("option");if(r.text="",r.value=JSON.stringify(null),i.options.add(r),null!=n){this.inputs.region.root.style.removeProperty("display");for(const t of n){const e=document.createElement("option");e.text=`${t.name}: ${t.start}-${t.end}`,e.value=JSON.stringify(t),i.options.add(e)}}else this.inputs.region.root.style.display="none"}updateRegion(t){const e=this.inputs.start.stringValue??"",n=this.inputs.end.stringValue??"";if(!this.fixRegion){const t=this.inputs.region.input;t.selectedIndex=-1;for(let i=t.options.length-1;i>=0;--i){const r=t.options[i],o=JSON.parse(r.value);o&&e===o.start&&n===o.end&&(t.selectedIndex=i)}}}defaultName=!0;defaultNameUpdating=!1;updateNameInput(){this.defaultNameUpdating=!0;try{this.defaultName&&(this.inputs.name.value=this.getDefaultName())}finally{this.defaultNameUpdating=!1}}getDefaultName(){const t=this.inputs.region.stringValue,e=t?JSON.parse(t):null,n=this.inputs.sequence.value,i=this.inputs.start.stringValue??"",r=this.inputs.end.stringValue??"";return null!=e?`${n.name}(${e.name}): ${e.start}-${e.end}`:`${n?.name}: (${i}-${r})`}getParams(){return{table:this.inputs.table.value,sequence:this.inputs.sequence.value,start:this.getStart(),end:this.getEnd(),name:this.getName()}}getStart(){return this.inputs.start.stringValue}getEnd(){return this.inputs.end.stringValue}getName(){const t=this.inputs.name.stringValue;return""==t?null:t}dialog(){const t=s.inputs(Object.values(this.inputs),{style:{minWidth:"320px"}});s.dialog({title:"Get Region"}).add(t).onOK((()=>{(async()=>{const t=this.getParams();await this.call.func.prepare(t).call(!0)})().catch((t=>{Di.handleErrorUI(t)}))})).show()}widget(){const t=s.inputs(Object.entries(this.inputs).filter((([t,e])=>!["table","sequence"].includes(t))).map((([t,e])=>e))),e=s.button("Get Region",(()=>{(async()=>{const t=this.getParams();await this.call.func.prepare(t).call(!0)})().catch((t=>{Di.handleErrorUI(t)}))}));return a.Widget.fromRoot(s.divV([t,s.div(e)]))}}var mi=n(8754);async function fi(t,e,n,i,r){const o=await async function(t,e,n,i,r){const o=(0,vt.R)(e,r),s=r.getSeqHandler(e).getNewColumnFromList("ref",[n]),l=r.getSeqHandler(s).getSplitted(0),c=i===ft.IDENTITY?function(t,e){const n=e.columns.length,i=new Array(n),r=new Array(n),o=new Array(n);for(let s=0;s<n;++s){const n=e.columns.byIndex(s);i[s]=n.getRawData(),r[s]=n.categories.indexOf("");const a=s<t.length?t.getOriginal(s):wt._S;o[s]=n.categories.indexOf(a)}const s=a.Column.float("Identity",e.rowCount),l=s.getRawData();for(let n=0;n<e.rowCount;++n){l[n]=0;for(let e=0;e<t.length;++e)(i[e]?i[e][n]:0)===o[e]&&++l[n];l[n]/=t.length}return s}(l,o):i===ft.SIMILARITY?await async function(t,e,n){const i=e.columns.toList();return await(0,bt.uL)(i,t,n)}(l,o,r):null;if(null===c)throw new Error(`In bio library: Unknown sequence scoring method: ${i}`);return c.name=t.columns.getUnusedName(c.name),t.columns.add(c),c}(t,e,n,i,r);for(let t=0;t<o.length;t++)e.isNone(t)&&o.set(t,null,!1);return o}var gi=n(294),yi=n(330);const bi=OCL;var vi=n(9099);class wi{monomerSymbol;constructor(t){this.monomerSymbol=t}atoms;bonds;rGroups;get atomCount(){return this.atoms.count}get bondCount(){return this.bonds.count}shiftR1GroupToOrigin(){const t=this.rGroups.getAtomicIdx(1);if(null===t)throw new Error(`Cannot find R1 group for monomer ${this.monomerSymbol}`);const{x:e,y:n}=this.atoms.atomCoordinates[t];this.atoms.shift({x:-e,y:-n})}alignR2AlongX(){const t=this.rGroups.getAtomicIdx(2);if(null===t)throw new Error(`Cannot find R2 group for monomer ${this.monomerSymbol}`);const e=this.atoms.atomCoordinates[t],n=e.y/e.x,i=Math.atan(n);if(isNaN(i))throw new Error(`Cannot calculate angle for R2 group for monomer ${this.monomerSymbol}`);this.rotateCoordinates(-i)}shiftMonomerToDefaultPosition(){this.shiftR1GroupToOrigin(),null!==this.rGroups.getAtomicIdx(2)&&this.alignR2AlongX()}deleteBondLineWithSpecifiedRGroup(t){this.rGroups.deleteBondLineWithSpecifiedRGroup(t)}shiftCoordinates(t){this.atoms.shift(t)}rotateCoordinates(t){this.atoms.rotate(t)}getBondLines(){return this.bonds.getBondLines()}getAtomLines(){return this.atoms.atomLines}removeRGroups(t){this.rGroups.removeRGroups(t)}replaceRGroupWithAttachmentAtom(t,e){this.rGroups.replaceRGroupWithAttachmentAtom(t,e)}getAttachmentAtomByRGroupId(t){return this.rGroups.getAttachmentAtomIdByRGroupId(t)}shiftBonds(t){this.bonds.shift(t)}capRGroups(t){this.rGroups.capRGroups(t)}}var Ci=n(6956);class Ai{atoms;bonds;constructor(t,e,n){this.atoms=e,this.bonds=n,this.rGroupIdToAtomicIndexMap=t.getRGroupIdToAtomicIdxMap()}rGroupIdToAtomicIndexMap;rGroupBondPositionMap=new Map;getAtomicIdx(t){const e=this.rGroupIdToAtomicIndexMap.get(t);return void 0===e?null:e}removeRGroupsFromAtomBlock(t){t.forEach((t=>{if(void 0===this.rGroupIdToAtomicIndexMap.get(t))throw new Error(`Cannot find atomic index for R group ${t}`)}));const e=Array.from(this.rGroupIdToAtomicIndexMap.entries()).filter((([e,n])=>t.includes(e))).map((([t,e])=>e));this.atoms.deleteAtoms(e)}removeRGroups(t){this.removeRGroupsFromAtomBlock(t),t.forEach((t=>{const e=this.replaceRGroupInBondsByDummy(t);this.rGroupBondPositionMap.set(t,e)}))}replaceRGroupInBondsByDummy(t){const e=this.rGroupIdToAtomicIndexMap.get(t);if(this.rGroupBondPositionMap.has(t))throw new Error(`R group ${t} is already handled`);const n=this.bonds.getPositionsInBonds(e+1);if(0===n.length)throw new Error(`Cannot find position for R group ${t}`);if(n.length>1)throw new Error(`More than one position for R group ${t}`);const i=n[0];return this.bonds.replacePositionsInBondsByDummy([i]),this.bonds.removeAtomIdFromBonds(e+1),this.removeRGroupFromAtomicIdxMap(t,e),i}removeRGroupFromAtomicIdxMap(t,e){this.rGroupIdToAtomicIndexMap.delete(t);for(const[t,n]of this.rGroupIdToAtomicIndexMap)n>e&&this.rGroupIdToAtomicIndexMap.set(t,n-1)}deleteBondLineWithSpecifiedRGroup(t){const e=this.rGroupBondPositionMap.get(t);if(!e)throw new Error(`Cannot find position for R group ${t}`);const{bondLineIdx:n}=e;this.bonds.deleteBondLines([n]),this.rGroupBondPositionMap.delete(t),this.rGroupIdToAtomicIndexMap.delete(t),this.rGroupBondPositionMap.forEach((t=>{t.bondLineIdx>n&&(t.bondLineIdx-=1)}))}replaceRGroupWithAttachmentAtom(t,e){const n=this.rGroupBondPositionMap.get(t);if(!n)throw new Error(`Cannot find position for R group ${t}`);const{bondLineIdx:i,nodeIdx:r}=n;this.bonds.bondedAtoms[i][r]=e}getAttachmentAtomIdByRGroupId(t){const e=this.rGroupBondPositionMap.get(t);if(!e)throw new Error(`Cannot find position for R group ${t}`);const{bondLineIdx:n,nodeIdx:i}=e;return this.bonds.bondedAtoms[n][(i+1)%2]}capRGroups(t){this.rGroupIdToAtomicIndexMap.forEach(((e,n)=>{const i=t[n-1];i===Ci.mP?(this.removeRGroups([n]),this.deleteBondLineWithSpecifiedRGroup(n)):this.atoms.replaceRGroupSymbolByElement(e,i)}))}}class Si{coordinates=[];rawAtomLines=[];get count(){return this.coordinates.length}get atomCoordinates(){return this.coordinates}replaceRGroupSymbolByElement(t,e){this.rawAtomLines[t]=this.rawAtomLines[t].replace("R#",e)}deleteAtoms(t){this.coordinates=this.coordinates.filter(((e,n)=>!t.includes(n))),this.rawAtomLines=this.rawAtomLines.filter(((e,n)=>!t.includes(n)))}shift(t){this.coordinates=this.coordinates.map((e=>{const n=e.x+t.x,i=e.y+t.y;if(isNaN(n)||isNaN(i))throw new Error(`Cannot shift coordinates by ${t.x}, ${t.y}`);return{x:n,y:i}}))}rotate(t){this.coordinates=this.coordinates.map((e=>{const n=e.x,i=e.y,r=n*Math.cos(t)-i*Math.sin(t),o=n*Math.sin(t)+i*Math.cos(t);if(isNaN(r)||isNaN(o))throw new Error(`Cannot rotate coordinates by ${t}`);return{x:r,y:o}}))}}class xi extends Si{constructor(t){super(),this.rawAtomLines=t.getAtomLines(),this.coordinates=this.rawAtomLines.map((t=>({x:parseFloat(t.substring(0,10)),y:parseFloat(t.substring(10,20))})))}get atomLines(){return this.rawAtomLines.map(((t,e)=>{const n=this.coordinates[e];return`${n.x.toFixed(4).padStart(10," ")}${n.y.toFixed(4).padStart(10," ")}${t.substring(20)}`}))}}class Ei{bondedAtomPairs=[];rawBondLines=[];get count(){return this.bondedAtomPairs.length}get bondedAtoms(){return this.bondedAtomPairs}deleteBondLines(t){this.rawBondLines=this.rawBondLines.filter(((e,n)=>!t.includes(n))),this.bondedAtomPairs=this.bondedAtomPairs.filter(((e,n)=>!t.includes(n)))}getPositionsInBonds(t){const e=[];return this.bondedAtomPairs.forEach(((n,i)=>{n.forEach(((n,r)=>{n===t&&e.push({bondLineIdx:i,nodeIdx:r})}))})),e}replacePositionsInBondsByDummy(t,e){void 0===e&&(e=-1),t.forEach((t=>{const{bondLineIdx:n,nodeIdx:i}=t;this.bondedAtomPairs[n][i]=e}))}removeAtomIdFromBonds(t){this.bondedAtomPairs=this.bondedAtomPairs.map((e=>e.map((e=>e>t?e-1:e))))}shift(t){this.bondedAtomPairs=this.bondedAtomPairs.map((e=>e.map((e=>e+t))))}}class Mi extends Ei{constructor(t){super(),this.rawBondLines=t.getBondLines(),this.bondedAtomPairs=this.rawBondLines.map((t=>[parseInt(t.substring(0,3)),parseInt(t.substring(3,6))]))}getBondLines(){return this.bondedAtomPairs.map(((t,e)=>{if(t.some((t=>-1===t)))throw new Error(`Bonded pair ${t} contains -1`);return`${t[0].toString().padStart(3," ")}${t[1].toString().padStart(3," ")}${this.rawBondLines[e].substring(6)}`}))}}class _i extends wi{constructor(t,e){super(e);const n=Re.getInstance(t);this.atoms=new xi(n),this.bonds=new Mi(n),this.rGroups=new Ai(n,this.atoms,this.bonds),this.shiftMonomerToDefaultPosition()}}class Ii extends Si{molfileHandler;constructor(t){super(),this.molfileHandler=t,this.rawAtomLines=t.getAtomLines(),this.coordinates=this.getCoordinates()}getCoordinates(){const t=this.molfileHandler.x,e=this.molfileHandler.y;return Array.from(t).map(((t,n)=>({x:t,y:e[n]})))}get atomLines(){const t=/^(M V30 [^-]*)(-?\d+\.\d+)( )(-?\d+\.\d+)( -?\d+\.\d+.*)$/,e=/\sRGROUPS=\(\d+(\s+\d+)*\)/;return this.rawAtomLines.map(((n,i)=>{const r=this.coordinates[i],o=r.x.toFixed(4)+"00",s=r.y.toFixed(4)+"00";return n.replace(t,((t,e,n,i,r,a)=>e+o+i+s+a)).replace(e,"")}))}replaceRGroupSymbolByElement(t,e){super.replaceRGroupSymbolByElement(t,e);const n=this.rawAtomLines[t].substring(3).split(" ");n.length>7&&(this.rawAtomLines[t]=`M ${n.slice(0,7).join(" ")}`)}}class Ti extends Ei{molfileHandler;constructor(t){super(),this.molfileHandler=t,this.rawBondLines=t.getBondLines(),this.bondedAtomPairs=this.getBondedAtomPairs()}getBondedAtomPairs(){return this.molfileHandler.pairsOfBondedAtoms.map((t=>[t[0],t[1]]))}getBondLines(){const t=/^(M\s+V30\s+\d+\s+\d+\s+)(\d+)(\s+)(\d+)(.*)$/;return this.bondedAtomPairs.map(((e,n)=>{if(e.some((t=>-1===t)))throw new Error(`Bonded pair ${e} contains -1`);return this.rawBondLines[n].replace(t,((t,n,i,r,o,s)=>`${n}${e[0]}${r}${e[1]}${s}`))}))}}class Li extends wi{constructor(t,e){super(e);const n=Re.getInstance(t);this.atoms=new Ii(n),this.bonds=new Ti(n),this.rGroups=new Ai(n,this.atoms,this.bonds),this.shiftMonomerToDefaultPosition()}}class Ni{static getInstance(t,e){if(Re.isMolfileV2K(t))return new _i(t,e);if(Re.isMolfileV3K(t))return new Li(t,e);throw new Error("Unsupported molfile version")}}class Pi{monomerSymbol;monomerIdx;helm;monomerLib;molfileWrapper;capGroupElements=[];static molfileV2KToV3KCache=new Map;constructor(t,e,n,i,r,o){this.monomerSymbol=t,this.monomerIdx=e,this.helm=n,this.monomerLib=o;const s=this.getLibraryMonomerObject();let a=s.molfile;Re.isMolfileV2K(a)&&(a=this.convertMolfileToV3KFormat(a,t,r)),this.molfileWrapper=Ni.getInstance(a,t),this.capGroupElements=this.getCapGroupElements(s),this.removeRGroups(n.bondedRGroupsMap[e]),this.capRemainingRGroups(),this.shiftCoordinates(i)}get atomCount(){return this.molfileWrapper.atomCount}get bondCount(){return this.molfileWrapper.bondCount}convertMolfileToV3KFormat(t,e,n){if(Pi.molfileV2KToV3KCache.has(t))return Pi.molfileV2KToV3KCache.get(t);let i=null;try{if(i=n.get_mol(t,JSON.stringify({mergeQueryHs:!0})),i){const e=i.get_v3Kmolblock();return Pi.molfileV2KToV3KCache.set(t,e),e}throw new Error(`Cannot convert ${e} to molV3000`)}finally{i?.delete()}}getLibraryMonomerObject(){const t=this.helm.getPolymerTypeByMonomerIdx(this.monomerIdx),e=this.monomerLib.getMonomer(t,this.monomerSymbol);if(!e)throw new Error(`Monomer ${this.monomerSymbol} is not found in the library`);return e}getCapGroupElements(t){return t.rgroups.map((t=>(t.capGroupSmiles||t.capGroupSMILES).replace(/(\[|\]|\*|:|\d)/g,"")))}shiftCoordinates(t){this.molfileWrapper.shiftCoordinates(t)}getAtomLines(){return this.molfileWrapper.getAtomLines()}getBondLines(){return this.molfileWrapper.getBondLines()}removeRGroups(t){this.molfileWrapper.removeRGroups(t)}capRemainingRGroups(){this.molfileWrapper.capRGroups(this.capGroupElements)}replaceRGroupWithAttachmentAtom(t,e){this.molfileWrapper.replaceRGroupWithAttachmentAtom(t,e)}getAttachmentAtomByRGroupId(t){return this.molfileWrapper.getAttachmentAtomByRGroupId(t)}deleteBondLineWithSpecifiedRGroup(t){this.molfileWrapper.deleteBondLineWithSpecifiedRGroup(t)}shiftBonds(t){this.molfileWrapper.shiftBonds(t)}}class $i{rdKitModule;monomerLib;constructor(t,e,n){this.rdKitModule=e,this.monomerLib=n,this.helm=new vi.f(t)}monomerWrappers=[];helm;addMonomer(t,e,n){if(t===wt.b9[gt.Hi.HELM])return;const i=this.monomerWrappers.length,r=new Pi(t,i,this.helm,n,this.rdKitModule,this.monomerLib);this.monomerWrappers.push(r)}getAtomNumberShifts(){const t=[];let e=0;return this.monomerWrappers.forEach((n=>{t.push(e),e+=n.getAtomLines().length})),t}restoreBondsBetweenMonomers(){this.helm.bondData.forEach((t=>{const e=t.map((t=>t.monomerIdx)),n=t.map((t=>t.rGroupId)),i=e.map((t=>this.monomerWrappers[t])),r=i[1].getAttachmentAtomByRGroupId(n[1]);i[0].replaceRGroupWithAttachmentAtom(n[0],r),i[1].deleteBondLineWithSpecifiedRGroup(n[1])}))}compileToMolfile(){const t=[],e=[],n=this.getAtomNumberShifts();this.monomerWrappers.forEach(((t,e)=>{t.shiftBonds(n[e])})),this.restoreBondsBetweenMonomers();const i=new gi.Cg;for(const[n,r]of rt().enumerate(this.monomerWrappers)){const o=t.length,s=e.length;t.push(...n.getAtomLines()),e.push(...n.getBondLines());const a="RNA"==this.helm.getPolymerTypeByMonomerIdx(r)?Ht.o.NUCLEOTIDE:Ht.o.AA;i.set(r,{biotype:a,symbol:n.monomerSymbol,atoms:rt().count(o).take(n.atomCount).toArray(),bonds:rt().count(s).take(n.bondCount).toArray()})}const r=t.length,o=e.length;return{molfile:[this.getV3KHeader(r,o),this.getV3KAtomBlock(t),this.getV3KBondBlock(e),"M V30 END CTAB\nM END"].join("\n"),monomers:i}}getV3KHeader(t,e){return`\n Datagrok\n\n 0 0 0 0 0 0 0 0 0 0999 V3000\nM V30 BEGIN CTAB\nM V30 COUNTS ${t} ${e} 0 0 1`}getV3KAtomBlock(t){const e=/^(M V30 )(\d+)( .*)$/;return["M V30 BEGIN ATOM",...t.map(((t,n)=>{const i=n+1;return t.replace(e,((t,e,n,r)=>e+i+r))})),"M V30 END ATOM"].join("\n")}getV3KBondBlock(t){const e=/^(M V30 )(\d+)( .*)$/;return["M V30 BEGIN BOND",...t.map(((t,n)=>{const i=n+1;return t.replace(e,((t,e,n,r)=>e+i+r))})),"M V30 END BOND"].join("\n")}}class Ri{constructor(t){this.molfileHandler=Re.getInstance(t)}molfileHandler;get monomerSymbols(){return this.molfileHandler.atomTypes}getMonomerShifts(t){return{x:this.molfileHandler.x[t],y:this.molfileHandler.y[t]}}}class Oi{helmHelper;rdKitModule;monomerLib;constructor(t,e,n){this.helmHelper=t,this.rdKitModule=e,this.monomerLib=n}convertToSmiles(t){const e=t.dataFrame,n=this.getSmilesList(t),i=`smiles(${t.name})`,r=e?e.columns.getUnusedName(i):i;return a.Column.fromStrings(r,n.map((t=>null===t?"":t)))}getSmilesList(t){return this.convertToMolfileV3KColumn(t).toList().map((t=>a.chem.convert(t,a.chem.Notation.MolBlock,a.chem.Notation.Smiles)))}molV3KtoMolV3KOCL(t){try{if(!t)return"";return bi.Molecule.fromMolfile(t).toMolfileV3().replace("STERAC1","STEABS")}catch(t){const[e,n]=(0,Ct.AP)(t);return Di.logger.error(e,void 0,n),""}}getMolV3000ViaOCL(t,e){const n=t.map((t=>{if(null===t)return"";const e=t.get_v3Kmolblock();return t.delete(),e})),i=new Array(n.length),r=a.TaskBarProgressIndicator.create("Handling chirality...");for(let t=0;t<n.length;t++){i[t]=this.molV3KtoMolV3KOCL(n[t]);const e=t/n.length*100;r.update(e,`${e?.toFixed(2)}% of molecules completed`)}return r.close(),a.Column.fromStrings(e,i)}convertToRdKitBeautifiedMolfileColumn(t,e,n,i){const r=t.dataFrame,o=this.convertToMolfileV3KColumn(t).toList().map((t=>{if(""===t)return null;const e=n.get_mol(t);return e?(e.set_new_coords(),e.normalize_depiction(1),e.straighten_depiction(!0),e):null})),s=`molfile(${t.name})`,l=r?r.columns.getUnusedName(s):s;return e?this.getMolV3000ViaOCL(o,l):a.Column.fromStrings(l,o.map((t=>{if(null===t)return"";const e=t.get_v3Kmolblock();return t.delete(),e})))}convertToMolfileV3KColumn(t){const e=t.dataFrame,n=this.convertToMolfileV3K(t.toList()).map((t=>t.molfile)),i=(0,yi.kA)(e,`molfileV3K(${t.name})`);return a.Column.fromList("string",i,n)}convertToMolfileV3K(t){const e=new Array(t.length);for(let n=0;n<t.length;++n){const i=t[n];if(!i){e[n]=gi.vF.createEmpty();continue}let r;try{r=this.getPolymerMolfile(i)}catch(t){const[e,n]=(0,Ct.AP)(t);Di.logger.error(e,void 0,n),r=gi.vF.createEmpty()}e[n]=r}return e}getPolymerGraphColumn(t){const e=t.toList(),n=this.helmHelper.getMolfiles(e);return a.Column.fromStrings("mols",n)}getPolymerMolfile(t){const e=this.helmHelper.removeGaps(t),n=e.resHelm,i=new Map;for(const[t,n]of e.monomerMap?.entries()??[])i.set(n,t);const r=this.helmHelper.getMolfiles([n])[0],o=new Ri(r),s=new $i(n,this.rdKitModule,this.monomerLib);o.monomerSymbols.forEach(((t,e)=>{const n=o.getMonomerShifts(e);s.addMonomer(t,e,n)}));const a=s.compileToMolfile(),l=new gi.Cg;for(const[t,e]of a.monomers.entries()){const n=i.get(t);l.set(n,e)}return new gi.vF(a.molfile,l)}}class ki{seqHelper;_column;_units;_notation;_defaultGapOriginal;notationProvider;_splitter=null;constructor(t,e){if(this.seqHelper=e,t.type!==a.TYPE.STRING)throw new Error(`Unexpected column type '${t.type}', must be '${a.TYPE.STRING}'.`);this._column=t;const n=this._column.meta.units;if(!n)throw new Error("Units are not specified in column");this._units=n,this._notation=this.getNotation(),this.isCustom()&&(this.notationProvider=this.column.temp[Ut.notationProvider]??null);const i=this.isFasta()?wt.b9[gt.Hi.FASTA]:this.isSeparator()?wt.b9[gt.Hi.SEPARATOR]:this.isHelm()?wt.b9[gt.Hi.HELM]:this.isCustom()?this.notationProvider?.defaultGapOriginal??wt.b9[gt.Hi.SEPARATOR]:void 0;if(null==i)throw new Error(`Unexpected defaultGapOriginal for notation '${this.notation}'`);if(this._defaultGapOriginal=i,!this.column.tags.has(gt.gp.aligned)||!this.column.tags.has(gt.gp.alphabet)||!this.column.tags.has(gt.gp.alphabetIsMultichar)&&!this.isHelm()&&this.alphabet===gt.YI.UN)if(this.isFasta())this.seqHelper.setUnitsToFastaColumn(this);else if(this.isSeparator()){const e=t.getTag(gt.gp.separator);this.seqHelper.setUnitsToSeparatorColumn(this,e)}else if(this.isHelm())this.seqHelper.setUnitsToHelmColumn(this);else{if(!this.isCustom())throw new Error(`Unexpected units '${this.column.meta.units}'.`);this.notationProvider.setUnits(this)}if(!this.column.tags.has(gt.gp.alphabetIsMultichar))if(this.isHelm())this.column.setTag(gt.gp.alphabetIsMultichar,"true");else if(["UN"].includes(this.alphabet))throw new Error(`For column '${this.column.name}' of alphabet '${this.alphabet}' tag '${gt.gp.alphabetIsMultichar}' is mandatory.`);this.columnVersion=this.column.version,!this.isSeparator()||this.isCustom()&&this.notationProvider||t.temp.seqHandlerRefined||(this.refineSeparatorNotation(),t.temp.seqHandlerRefined=!0)}async refineSeparatorNotation(){const t=((t,e,n)=>{const i={};let r=!0,o=null;for(const e of t){const t=e?n(e):[];if(null===o?o=t.length:t.length!==o&&(r=!1),t.length>=3)for(const e of t)e in i||(i[e]=0),i[e]+=1}return{freq:i,sameLength:r}})([...new Set((this.column.length<100?rt().count(0).take(Math.min(100,this.column.length)).map((t=>this.column.get(t))):this.column.categories.slice(0,100)).map((t=>t?t.substring(0,500):"")).filter((t=>0!==t.length)))],0,(t=>t.split(this.separator)));let e=!1;const n=[{package:"SequenceTranslator",name:"refineNotationProviderForHarmonizedSequence"}];for(const i of n)try{const n=a.Func.find(i);if(0===n.length)continue;const r=n[0].prepare({col:this.column,stats:t,separator:this.separator}),o=(await r.call()).getOutputParamValue();e||=o}catch(t){console.error(t)}e&&(delete this.column.temp[Ut.seqHandler],this.column.fireValuesChanged())}static setTags(t){const e=t.column.meta.units;if([gt.Hi.FASTA,gt.Hi.SEPARATOR].includes(e)){if(!t.column.getTag(gt.gp.alphabet)&&0===Object.keys(t.stats.freq).length)throw new Error("Alphabet is empty and not annotated.");let e=t.column.getTag(gt.gp.aligned);null===e&&(e=t.stats.sameLength?"SEQ.MSA":"SEQ",t.column.setTag(gt.gp.aligned,e));let n=t.column.getTag(gt.gp.alphabet);if(null===n&&(n=(0,kt.pc)(t.stats.freq,gt.q7),t.column.setTag(gt.gp.alphabet,n)),n===gt.YI.UN){const e=Object.keys(t.stats.freq).length,n=Object.keys(t.stats.freq).some((t=>t.length>1));t.column.setTag(gt.gp.alphabetSize,e.toString()),t.column.setTag(gt.gp.alphabetIsMultichar,n?"true":"false")}}else if(e===gt.Hi.HELM){let e=t.column.getTag(gt.gp.alphabet);null===e&&(e=(0,kt.p0)(t.stats.freq,gt.q7,t.defaultGapOriginal),t.column.setTag(gt.gp.alphabet,e))}}get column(){return this._column}get length(){return this._column.length}get units(){return this._units}get notation(){return this._notation}get defaultGapOriginal(){return this._defaultGapOriginal}get separator(){const t=this.column.getTag(gt.gp.separator)??void 0;if(this.notation===gt.Hi.SEPARATOR&&void 0===t)throw new Error(`Separator is mandatory for column '${this.column.name}' of notation '${this.notation}'.`);return t}get aligned(){const t=this.column.getTag(gt.gp.aligned);if(!t&&(this.isFasta()||this.isSeparator()))throw new Error("Tag aligned not set");return t}get alphabet(){const t=this.column.getTag(gt.gp.alphabet);if(!t&&(this.isFasta()||this.isSeparator()))throw new Error("Tag alphabet not set");return t}get defaultBiotype(){return this.alphabet===gt.YI.RNA||this.alphabet===gt.YI.DNA?Ht.o.NUCLEOTIDE:Ht.o.AA}get helmCompatible(){return this.column.getTag(gt.gp.isHelmCompatible)}getAlphabetSize(){if(this.notation==gt.Hi.HELM||this.alphabet==gt.YI.UN){const t=this.column.getTag(gt.gp.alphabetSize);let e;if(t)e=parseInt(t);else{const t=this.stats;e=Object.keys(t.freq).length}return e}switch(this.alphabet){case gt.YI.PT:return 20;case gt.YI.DNA:case gt.YI.RNA:return 4;case"NT":return console.warn("Unexpected alphabet 'NT'."),4;default:throw new Error(`Unexpected alphabet '${this.alphabet}'.`)}}getAlphabetIsMultichar(){return this.notation===gt.Hi.HELM||this.alphabet===gt.YI.UN&&"true"===this.column.getTag(gt.gp.alphabetIsMultichar)}cached=!0;_splitted=null;columnVersion=null;getSplitted(t,e){if(this.cached&&void 0===e){this.column.version===this.columnVersion&&null!==this._splitted||(this.columnVersion=this.column.version,this._splitted=new Array(this.column.length));let e=this._splitted[t]?this._splitted[t].deref():void 0;if(!e){const n=this.column.get(t);e=this.splitter(n),this._splitted[t]=new WeakRef(e)}return e}{const n=this.column.get(t);return this.getSplitter(e)(n)}}getValue(t,e){return this.column.get(t),new Wt(t,this)}getHelm(t){let e;const n=this.column.get(t);return e=this.notation===gt.Hi.HELM?n:this.notation===gt.Hi.CUSTOM?this.notationProvider.getHelm(n,{}):this.getConverter(gt.Hi.HELM)(n),e}_stats=null;get stats(){if(null===this._stats){const t={};let e=!0,n=null;const i=this.column.length;for(let r=0;r<i;++r){const i=this.getSplitted(r);null==n?n=i.length:i.length!==n&&(e=!1);for(let e=0;e<i.length;++e){const n=i.getCanonical(e);n in t||(t[n]=0),t[n]+=1}}this._stats={freq:t,sameLength:e}}return this._stats}_maxLength=null;get maxLength(){return null===this._maxLength&&(this._maxLength=0===this.column.length?0:Math.max(...rt().count(0).take(this.column.length).map((t=>this.getSplitted(t).length)))),this._maxLength}_posList=null;get posList(){if(null===this._posList){const t=this.column.getTag(gt.gp.positionNames);this._posList=t?t.split(gt.z1).map((t=>t.trim())):rt().count(1).take(this.maxLength).map((t=>t.toString())).toArray()}return this._posList}isFasta(){return this.notation===gt.Hi.FASTA}isSeparator(){return this.notation===gt.Hi.SEPARATOR||!!this.separator}isHelm(){return this.notation===gt.Hi.HELM}isCustom(){return this.notation===gt.Hi.CUSTOM}isRna(){return this.alphabet===gt.YI.RNA}isDna(){return this.alphabet===gt.YI.DNA}isPeptide(){return this.alphabet===gt.YI.PT}isMsa(){return!!this.aligned&&this.aligned.toUpperCase().includes("MSA")}isHelmCompatible(){return"true"===this.helmCompatible}isGap(t){return!t||t===this._defaultGapOriginal}getNotation(){if(this.units.toLowerCase().startsWith(gt.Hi.FASTA))return gt.Hi.FASTA;if(this.units.toLowerCase().startsWith(gt.Hi.SEPARATOR))return gt.Hi.SEPARATOR;if(this.units.toLowerCase().startsWith(gt.Hi.HELM))return gt.Hi.HELM;if(this.units.toLowerCase().startsWith(gt.Hi.CUSTOM))return gt.Hi.CUSTOM;throw new Error(`Column '${this.column.name}' has unexpected notation '${this.units}'.`)}getHelmWrappers(){return[this.isDna()||this.isRna()||this.isHelmCompatible()?"RNA1{":"PEPTIDE1{",this.isDna()?"d(":this.isRna()?"r(":"",this.isDna()||this.isRna()?")p":"","}$$$$"]}getNewColumn(t,e,n,i){const r=this.column,o=t.toLowerCase()+"("+r.name+")",s=n??r.dataFrame?.columns.getUnusedName(o)??o,l=a.Column.fromList("string",s,i??new Array(this.column.length).fill(""));if(l.semType=a.SEMTYPE.MACROMOLECULE,l.meta.units=t,t===gt.Hi.SEPARATOR){if(!e)throw new Error(`Notation '${gt.Hi.SEPARATOR}' requires separator value.`);l.setTag(gt.gp.separator,e)}l.setTag(a.TAGS.CELL_RENDERER,t===gt.Hi.HELM?"helm":"sequence");const c=r.getTag(gt.gp.aligned);c&&l.setTag(gt.gp.aligned,c);let h=r.getTag(gt.gp.alphabet);h||this.notation!==gt.Hi.HELM||t===gt.Hi.HELM||(h=gt.YI.UN),null!=h&&l.setTag(gt.gp.alphabet,h);let u=r.getTag(gt.gp.alphabetSize);null!=h&&u&&l.setTag(gt.gp.alphabetSize,u);const d=r.getTag(gt.gp.alphabetIsMultichar);return null!=h&&void 0!==d&&l.setTag(gt.gp.alphabetIsMultichar,d),t==gt.Hi.HELM&&(u=this.getAlphabetSize().toString(),l.setTag(gt.gp.alphabetSize,u)),l}getNewColumnFromList(t,e){return this.getNewColumn(this.notation,this.separator,t,e)}static unitsStringIsValid(t){return t=t.toLowerCase(),[gt.Hi.FASTA,gt.Hi.SEPARATOR,gt.Hi.HELM].some((e=>t.startsWith(e.toLowerCase())))}static getNewColumnFromParams(t,e,n){if(!ki.unitsStringIsValid(n))throw new Error("Invalid format of 'units' parameter");const i=a.Column.fromList("string",e,new Array(t).fill(""));return i.semType=a.SEMTYPE.MACROMOLECULE,i.meta.units=n,i}get splitter(){return null===this._splitter&&(this._splitter=this.getSplitter()),this._splitter}getSplitter(t){let e=null;if(e=this.notationProvider?this.notationProvider.splitter:null,e)return e;if(this.units.toLowerCase().startsWith(gt.Hi.FASTA))return null===this.column.getTag(gt.gp.alphabet)||this.getAlphabetIsMultichar()?gt.J9:kt.tm;if(this.units.toLowerCase().startsWith(gt.Hi.SEPARATOR))return(0,gt.dh)(this.separator,t);if(this.units.toLowerCase().startsWith(gt.Hi.HELM))return gt.qp;throw new Error(`Unexpected units ${this.units} .`)}split(t){return this.splitter(t)}getDistanceFunctionName(){if(!this.isFasta())throw new Error("Only FASTA notation is supported");if(this.isMsa())return ue.Z.HAMMING;switch(this.alphabet){case gt.YI.DNA:case gt.YI.RNA:case gt.YI.PT:}return ue.Z.LEVENSHTEIN}getDistanceFunction(){return ue.V[this.getDistanceFunctionName()]()}async checkHelmCompatibility(){if(this.column.tags.has(gt.gp.isHelmCompatible))return"true"===this.column.getTag(gt.gp.isHelmCompatible);const t=(await(0,bt.pj)()).getMonomerLib().getMonomerSymbolsByType("PEPTIDE"),e=new Set(t),n=((0,gt.dh)(this.separator),new Set),i=this.column.length,r=this.column.getRawData();for(let t=0;t<i;++t){const i=r[t];if(!(i in n)){n.add(i);const r=this.getSplitted(t);for(let t=0;t<r.length;++t){const n=r.getCanonical(t);if(!e.has(n))return this.column.setTag(gt.gp.isHelmCompatible,"false"),!1}}}return this.column.setTag(gt.gp.isHelmCompatible,"true"),!0}toFasta(t){return t===gt.Hi.FASTA}toSeparator(t){return t===gt.Hi.SEPARATOR}toHelm(t){return t===gt.Hi.HELM}convertHelmToFastaSeparator(t,e,n,i){i||(i=this.toFasta(e)?wt.b9[gt.Hi.FASTA]:wt.b9[gt.Hi.SEPARATOR]),n||(n=this.toFasta(e)?"":this.separator);const r=t.startsWith("RNA"),o=(0,gt.qp)(t),s=[];for(let t=0;t<o.length;++t){let n=o.getOriginal(t);if(r&&(n=n.replace(bn.EK,"$1")),n===wt.b9[gt.Hi.HELM])s.push(i);else if(this.toFasta(e)&&n.length>1){const t="["+n+"]";s.push(t)}else s.push(n)}return s.join(n)}convert(t,e){const n=this.getJoiner({notation:t,separator:e}),i=this.getNewColumn(t,e);return i.init((t=>{const e=this.getSplitted(t);return n(e)})),i}getRegion(t,e,n){const i=this.getNewColumn(this.notation,this.separator);i.name=n;const r=t??0,o=e??this.maxLength-1,s=this.getJoiner(),a=o-r+1,l=wt.b9[this.notation];i.init((t=>{const e=this.getSplitted(t),n=new Array(a);for(let t=0;t<a;++t){const i=r+t;n[t]=i<e.length?e.getOriginal(i):l}return s(new kt.Mu(n,l))}));const c=t=>{const e=t.split(",").map((t=>t.trim())),n=new Array(a);for(let t=0;t<a;++t){const i=r+t;n[t]=i<e.length?e[i]:"?"}return n.join(gt.z1)},h=this.column.getTag(gt.gp.positionNames);h&&i.setTag(gt.gp.positionNames,c(h));const u=this.column.getTag(gt.gp.positionLabels);return u&&i.setTag(gt.gp.positionLabels,c(u)),i}_joiner=void 0;get joiner(){return this._joiner||(this._joiner=this.getJoiner()),this._joiner}getJoiner(t){const e=t?t.notation:this.notation,n=t?t.separator:this.separator;let i;const r=this;switch(e){case gt.Hi.FASTA:i=function(t){return r.joinToFasta(t,r.isHelm())};break;case gt.Hi.SEPARATOR:if(!n)throw new Error(`Separator is mandatory for notation '${e}'.`);i=function(t){return Gi(t,n,r.isHelm())};break;case gt.Hi.HELM:{const t=r.alphabet===gt.YI.DNA||r.alphabet===gt.YI.RNA,e=r.getHelmWrappers();i=function(n){return Fi(n,e,t)};break}default:throw new Error(`Unexpected notation '${e}'.`)}return i}getConverter(t,e=void 0){if(t===gt.Hi.SEPARATOR&&!e)throw new Error(`Target separator is not specified for target units '${gt.Hi.SEPARATOR}'.`);const n=this;if(t===gt.Hi.FASTA)return function(t){return n.convertToFasta(t)};if(t===gt.Hi.HELM)return function(t){return n.convertToHelm(t)};if(t===gt.Hi.SEPARATOR)return function(t){return n.convertToSeparator(t,e)};throw new Error}static forColumn(t,e){let n=t.temp[Ut.seqHandler];return n&&n.columnVersion===t.version||(n=t.temp[Ut.seqHandler]=new ki(t,e)),n}joinToFasta(t,e){const n=new Array(t.length);for(let i=0;i<t.length;++i){const r=t.getOriginal(i);let o=t.getOriginal(i);e&&(o=o.replace(bn.EK,"$1")),r===wt._S?o=wt.b9[gt.Hi.FASTA]:r===bn.q7?o="":o.length>1&&(o="["+o+"]"),n[i]=o}return n.join("")}convertToFasta(t){const e=this.splitter,n=this.isHelm()?this.splitterAsHelmNucl(t):e(t);return this.joinToFasta(n,this.isHelm())}convertToSeparator(t,e){return Gi(this.isHelm()?this.splitterAsHelmNucl(t):this.splitter(t),e,this.isHelm())}convertToHelm(t){if(this.notation==gt.Hi.HELM)return t;const e=this.getHelmWrappers(),n=t.startsWith("DNA")||t.startsWith("RNA");return Fi(this.splitter(t),e,n)}splitterAsHelmNucl(t){const e=this.splitter(t),n=new Array(e.length),i=t.startsWith("DNA"),r=t.startsWith("RNA");for(let t=0;t<e.length;++t){let o=e.getOriginal(t);(i||r)&&(o=o.replace(bn.EK,"$1"),o=o===bn.q7?null:o),n[t]=o||null}return new kt.Mu(n.filter((t=>!!t)),wt.b9[gt.Hi.HELM])}getRendererBack(t,e){const n=this.column.temp;let i=n.rendererBack;return i||(i=n.rendererBack=this.notationProvider.createCellRendererBack(t,e)),i}}function Gi(t,e,n){const i=new Array(t.length);for(let e=0;e<t.length;++e){const r=t.getCanonical(e);let o=t.getOriginal(e);n&&(o=o.replace(bn.EK,"$1")),r===wt._S?o=wt.b9[gt.Hi.SEPARATOR]:r===bn.q7&&(o=""),i[e]=o}return i.join(e)}function Fi(t,e,n){const[i,r,o,s]=e,a=new Array(t.length);for(let e=0;e<t.length;++e){const i=t.getCanonical(e);let s=t.getOriginal(e);i===wt._S?s=wt.b9[gt.Hi.HELM]:(n&&(s=s.replace(bn.EK,"$1")),s=1===s.length?`${r}${s}${o}`:`${r}[${s}]${o}`),a[e]=s}return`${i}${a.join(".")}${s}`}class Hi{libHelper;rdKitModule;constructor(t,e){this.libHelper=t,this.rdKitModule=e}getSeqHandler(t){return ki.forColumn(t,this)}getSeqMonomers(t){const e=this.getSeqHandler(t);return Object.keys(e.stats.freq)}async getHelmToMolfileConverter(t){const e=await(0,ke.b2)();return new Oi(e,this.rdKitModule,t)}helmToAtomicLevelSingle(t,e,n,i=!0){if(!t)return gi.vF.createEmpty();const r=e.convertToMolfileV3K([t])[0];if(!r||!r.molfile)return gi.vF.createEmpty();let o=null;try{let t=r.molfile;if(i){if(o=this.rdKitModule.get_mol(t),!o)return gi.vF.createEmpty();o.set_new_coords(),o.normalize_depiction(1),o.straighten_depiction(!0),t=o.get_v3Kmolblock()}return n&&(t=e.molV3KtoMolV3KOCL(t)),new gi.vF(t,r.monomers)}catch(t){const[e,n]=(0,Ct.AP)(t);return Di.logger.error(e,void 0,n),gi.vF.createEmpty()}finally{o?.delete()}}async helmToAtomicLevel(t,e,n,i){const r=i??this.libHelper.getMonomerLib(),s=t.dataFrame,l=(0,yi.qj)(s,t.name),c=await this.getHelmToMolfileConverter(r),h=t.toList(),u=new Array(t.length),d=a.Func.find({package:"Chem",name:"beautifyMols"})[0],p=a.Func.find({package:"Chem",name:"convertToV3KViaOCL"})[0];for(let n=0;n<t.length;n++)u[n]=this.helmToAtomicLevelSingle(h[n],c,e&&!p,!d).molfile;if(d){const e=await d.apply({mols:u});if(e&&Array.isArray(e)&&e.length===t.length)for(let n=0;n<t.length;n++)e[n]&&(u[n]=e[n])}if(e&&p){const e=await p.apply({mols:u});if(e&&Array.isArray(e)&&e.length===t.length)for(let n=0;n<t.length;n++)e[n]&&(u[n]=e[n]);else o.shell.warning("OCL function returned an unexpected result")}const m=a.Column.fromStrings(l,u);return m.semType=a.SEMTYPE.MOLECULE,m.meta.units=a.UNITS.Molecule.MOLBLOCK,m.setTag(".sequence-src-col",t.name),{molCol:m,warnings:[]}}setUnitsToFastaColumn(t){if(t.column.semType!==a.SEMTYPE.MACROMOLECULE||t.column.meta.units!==gt.Hi.FASTA)throw new Error(`The column of notation '${gt.Hi.FASTA}' must be '${a.SEMTYPE.MACROMOLECULE}'.`);t.column.meta.units=gt.Hi.FASTA,ki.setTags(t)}setUnitsToSeparatorColumn(t,e){if(t.column.semType!==a.SEMTYPE.MACROMOLECULE||t.column.meta.units!==gt.Hi.SEPARATOR)throw new Error(`The column of notation '${gt.Hi.SEPARATOR}' must be '${a.SEMTYPE.MACROMOLECULE}'.`);if(!e)throw new Error(`The column of notation '${gt.Hi.SEPARATOR}' must have the separator tag.`);t.column.meta.units=gt.Hi.SEPARATOR,t.column.setTag(gt.gp.separator,e),ki.setTags(t)}setUnitsToHelmColumn(t){if(t.column.semType!==a.SEMTYPE.MACROMOLECULE)throw new Error(`The column of notation '${gt.Hi.HELM}' must be '${a.SEMTYPE.MACROMOLECULE}'`);t.column.meta.units=gt.Hi.HELM,ki.setTags(t)}}class Bi{constructor(t){this.canvas=null,this.ctx=null,this.config={x:t.x||0,y:t.y||0,width:t.width||0,height:t.height||0,windowStartPosition:t.windowStartPosition||1,positionWidth:t.positionWidth||15,totalPositions:t.totalPositions||5e3,headerHeight:t.headerHeight||50,sliderHeight:t.sliderHeight||8,currentPosition:t.currentPosition||1,cellBackground:void 0===t.cellBackground||t.cellBackground,sliderColor:t.sliderColor||"rgba(220, 220, 220, 0.4)",onPositionChange:t.onPositionChange||((t,e)=>{}),...t},this.eventElement=s.div(),this.eventElement.style.position="absolute",this.config.canvas.parentElement?.appendChild(this.eventElement),this.state={isDragging:!1,dragStartX:0},this.init()}init(){if(this.canvas=this.config.canvas,!this.canvas)return void console.error("canvas not found.");const t=this.canvas.getContext("2d");t?(this.ctx=t,this.eventElement.addEventListener("mousedown",this.handleMouseDown.bind(this)),this.eventElement.addEventListener("mousemove",this.handleMouseMove.bind(this)),this.eventElement.addEventListener("mouseup",this.handleMouseUp.bind(this)),this.eventElement.addEventListener("mouseleave",this.handleMouseUp.bind(this)),this.eventElement.addEventListener("click",this.handleClick.bind(this)),this.eventElement.addEventListener("wheel",this.handleMouseWheel.bind(this)),window.addEventListener("keydown",this.handleKeyDown.bind(this))):console.error("Failed to get 2D context from canvas")}get isValid(){return!!this.canvas&&!!this.ctx&&this.config.height>=this.config.headerHeight}draw(t,e,n,i,r,o,s){if(this.config.x==t&&this.config.y==e&&this.config.width==n&&this.config.height==i&&this.config.currentPosition==r&&this.config.windowStartPosition==o||Object.assign(this.config,{x:t,y:e,width:n,height:i,currentPosition:r,windowStartPosition:o}),!this.isValid)return void(this.eventElement.style.display="none");this.ctx.save(),this.ctx.clearRect(t,e,n,i),this.ctx.translate(t,e),this.ctx.rect(0,0,n,i),this.ctx.clip();const a=n,l=i,c=this.config.headerHeight-this.config.sliderHeight;this.ctx.fillStyle=this.config.sliderColor,this.ctx.fillRect(0,c,a,this.config.sliderHeight);const h=Math.floor(this.config.width/this.config.positionWidth),u=Math.max(1,this.config.windowStartPosition),d=this.config.totalPositions-h,p=d<=0?0:u/this.config.totalPositions*(a-this.sliderWidth),m=d<=0?a:this.sliderWidth;if(this.ctx.fillStyle="rgba(150, 150, 150, 0.5)",this.ctx.fillRect(p,c,m,this.config.sliderHeight),this.config.currentPosition>=1&&this.config.currentPosition<=this.config.totalPositions){const t=(this.config.currentPosition-1)/(this.config.totalPositions-1),e=Math.round(t*a);this.ctx.fillStyle="#3CB173",this.ctx.fillRect(e-1,c-2,3,this.config.sliderHeight+4)}for(let t=0;t<h;t++){const e=u+t;if(e>this.config.totalPositions)break;const n=t*this.config.positionWidth,i=this.config.positionWidth,r=n+i/2;this.config.cellBackground&&(this.ctx.fillStyle=t%2==0?"rgba(248, 248, 248, 0.3)":"rgba(242, 242, 242, 0.2)",this.ctx.fillRect(n,5,i,Math.min(this.config.headerHeight-5,l-5)-this.config.sliderHeight),this.ctx.strokeStyle="rgba(220, 220, 220, 0.7)",this.ctx.beginPath(),this.ctx.moveTo(n,5),this.ctx.lineTo(n,Math.min(this.config.headerHeight,l)-this.config.sliderHeight),this.ctx.stroke()),this.ctx.fillStyle="#999999",this.ctx.beginPath(),this.ctx.arc(r,10,1,0,2*Math.PI),this.ctx.fill(),(e===this.config.currentPosition||(1===e||e%10==0)&&Math.abs(e-this.config.currentPosition)>1)&&(this.ctx.fillStyle="#333333",this.ctx.font="12px monospace",this.ctx.textAlign="center",this.ctx.textBaseline="middle",this.ctx.fillText(e.toString(),r,20)),e===this.config.currentPosition&&(this.ctx.fillStyle="rgba(60, 177, 115, 0.2)",this.ctx.fillRect(n,0,i,c))}this.ctx.restore(),s.preventDefault(),this.eventElement.style.display="block",this.eventElement.style.left=`${this.config.x}px`,this.eventElement.style.top=`${this.config.y}px`,this.eventElement.style.width=`${this.config.width}px`,this.eventElement.style.height=`${this.config.height}px`}getCoords(t){const e=this.canvas.getBoundingClientRect();return{x:t.clientX-e.left-this.config.x,y:t.clientY-e.top-this.config.y}}isInHeaderArea(t){const{x:e,y:n}=this.getCoords(t);return e>=0&&e<=this.config.width&&n>=0&&n<=this.config.headerHeight}get positionWidth(){return this.config.positionWidth}set positionWidth(t){this.config.positionWidth=t}isInSliderArea(t){const{y:e}=this.getCoords(t),n=this.config.headerHeight-this.config.sliderHeight;return e>n&&e<n+this.config.sliderHeight}get sliderWidth(){const t=this.config.width/this.config.totalPositions*(this.config.width/this.config.positionWidth);return Math.max(t,20)}isInSliderDraggableArea(t){const{x:e,y:n}=this.getCoords(t),i=this.config.headerHeight-this.config.sliderHeight,r=(this.config.windowStartPosition-1)*((this.config.width-this.sliderWidth)/this.config.totalPositions),o=r+this.sliderWidth;return n>i&&n<i+this.config.sliderHeight&&e>=r&&e<o}handleMouseDown(t){if(!this.isValid)return;const{x:e}=this.getCoords(t);this.isInSliderDraggableArea(t)&&(this.state.isDragging=!0,this.state.dragStartX=e,this.handleSliderDrag(e),t.preventDefault(),t.stopPropagation(),t.stopImmediatePropagation())}handleMouseWheel(t){if(this.isValid&&this.isInHeaderArea(t)){t.preventDefault(),t.stopPropagation(),t.stopImmediatePropagation();const e=t.shiftKey?Math.sign(t.deltaY):Math.sign(t.deltaX||t.deltaY),n=t.shiftKey?3:1,i=this.config.windowStartPosition+e*n,r=Math.floor(this.config.width/this.config.positionWidth),o=this.config.totalPositions-r+1;this.config.windowStartPosition=Math.max(1,Math.min(o,i)),"function"==typeof this.config.onPositionChange&&this.config.onPositionChange(this.config.currentPosition,this.getWindowRange())}}handleMouseMove(t){if(!this.state.isDragging||!this.isValid)return;const e=this.canvas.getBoundingClientRect(),n=t.clientX-e.left-this.config.x;this.handleSliderDrag(n),t.preventDefault(),t.stopPropagation(),t.stopImmediatePropagation()}handleKeyDown(t){if(this.isValid&&!(this.config.currentPosition<1)){if("ArrowLeft"===t.key||"ArrowRight"===t.key){t.preventDefault(),t.stopPropagation(),t.stopImmediatePropagation();const e="ArrowLeft"===t.key?-1:1,n=Math.min(Math.max(this.config.currentPosition+e,1),this.config.totalPositions);if(n===this.config.currentPosition)return;this.config.currentPosition=n;const i=Math.floor(this.config.width/this.config.positionWidth),r=this.config.windowStartPosition;(n<r||n>r+i-1)&&(this.config.windowStartPosition=e<0?n:Math.max(1,n-i+1))}else{if("Escape"!==t.key)return;this.config.currentPosition=-2,t.preventDefault(),t.stopPropagation(),t.stopImmediatePropagation()}"function"==typeof this.config.onPositionChange&&this.config.onPositionChange(this.config.currentPosition,this.getWindowRange())}}handleMouseUp(){this.state.isDragging=!1}handleSliderDrag(t){if(!this.isValid)return;const e=this.sliderWidth,n=this.config.width-e,i=Math.max(0,Math.min(this.config.width,t)),r=n/this.config.totalPositions,o=Math.floor(this.config.width/this.config.positionWidth);this.config.windowStartPosition=Math.max(1,Math.min(Math.round((i-e/2)/r),this.config.totalPositions-o+1)),"function"==typeof this.config.onPositionChange&&this.config.onPositionChange(this.config.currentPosition,this.getWindowRange())}get headerHeight(){return this.config.headerHeight}set headerHeight(t){this.config.headerHeight=t}handleClick(t){if(!this.isValid)return;const{x:e,y:n}=this.getCoords(t);if(n<this.config.headerHeight-this.config.sliderHeight&&n>=0){const t=this.config.positionWidth,n=Math.round(e/t-.5),i=this.config.windowStartPosition+n;i>=1&&i<=this.config.totalPositions&&(this.config.currentPosition=i,"function"==typeof this.config.onPositionChange&&this.config.onPositionChange(this.config.currentPosition,this.getWindowRange()))}}getWindowRange(){return{start:this.config.windowStartPosition,end:Math.min(this.config.totalPositions,this.config.windowStartPosition+Math.floor(this.config.width/this.config.positionWidth))}}updateConfig(t){Object.assign(this.config,t),this.config.currentPosition=Math.min(this.config.currentPosition,this.config.totalPositions),"function"==typeof this.config.onPositionChange&&this.config.onPositionChange(this.config.currentPosition,this.getWindowRange())}getCurrentPosition(){return this.config.currentPosition}setCurrentPosition(t){this.config.currentPosition=Math.max(1,Math.min(this.config.totalPositions,t)),"function"==typeof this.config.onPositionChange&&this.config.onPositionChange(this.config.currentPosition,this.getWindowRange())}}const Di=new ai;async function Vi(){return await pn.getInstance()}class ji{_palette;constructor(t){this._palette=t}get(t){return this._palette[t]}}let Ui=null;async function Wi(){null===Ui&&(Ui=async function(){const t="Bio: _package.initBio()";Di.logger.debug(`${t}, start`);const e=window.performance.now(),n=await(0,Pt.j)(),i=await Di.getProperties(),r=new si(i);Di.properties=r;const s=await pn.getInstance(),l=await(0,Nt.ub)();l.explicit&&(l.explicit=[],await(0,Nt.Eu)(l)),await s.awaitLoaded(1/0),s.initialLoadCompleted||await s.loadMonomerLib(),s.loadMonomerSets();const c=s.getMonomerLib(),h=s.getMonomerSets(),u=window.performance.now();Di.logger.debug(`${t}, loading ET: ${u-e} ms`);const d=new Hi(s,n);Di.completeInit(d,c,h,n),Di.logger.debug(`${t}, end`),function(){const t=t=>{setTimeout((()=>{if(t.isDetached)return;const e=t.dataFrame;if(!e)return;const n=e.columns.bySemTypeAll(a.SEMTYPE.MACROMOLECULE);for(const e of n){const n=Di.seqHelper.getSeqHandler(e);if(!n)continue;if(n.isHelm()||n.alphabet===gt.YI.UN)continue;const i=t.col(e.name);if(!i)continue;let r=!1;const o=(t,e)=>Number.isNaN(t)?e:t,s=()=>o(Math.max(Number.parseInt(e.getTag(gt.gp.positionShift)??"0"),0),0)+1,l=()=>o(Number.parseInt(e.getTag(gt.gp.selectedPosition)??"-2"),-2),c=()=>Ot.Jy.getFontSettings(e).fontWidth;let h=0;for(let t=0;t<Math.min(30,e.categories.length);t++){const t=Math.floor(Math.random()*e.categories.length-1),i=n.splitter(e.categories[t]);i&&(h=Math.max(h,i.length))}if(h<50)continue;const u=40,d=new Bi({canvas:t.overlay,headerHeight:u,totalPositions:h+1,onPositionChange:(n,i)=>{setTimeout((()=>{const o=s(),c=l();if(o!==i.start&&e.setTag(gt.gp.positionShift,(i.start-1).toString()),n>=0&&c!==n&&(e.setTag(gt.gp.selectedPosition,n.toString()),!r&&t.tableView)){r=!0;const n=t.tableView.addViewer("Sequence Position Statistics",{sequenceColumnName:e.name});t.tableView.dockManager.dock(n,a.DOCK_TYPE.DOWN,null,"Sequence Position Statistics",.4)}}))}});t.props.colHeaderHeight=65,setTimeout((()=>{t.isDetached||(i.width=400)}),300),t.sub(t.onCellRender.subscribe((n=>{const r=n.cell;if(!r||!r.isColHeader||r?.gridColumn?.name!==i?.name)return;const o=n.bounds;if(!o||o.height<=50)return;const a=o.height-u;if(a>20){d.headerHeight=o.height-20;const n=t.overlay.getContext("2d");if(!n)return;n.save(),n.rect(o.x,o.y,o.width,20),n.clip(),n.font=t.props.colHeaderFont??"bold 13px Roboto, Roboto Local",n.fillStyle="#4a4a49",n.textAlign="center",n.textBaseline="middle";const i=o.x+o.width/2,r=o.y+10;n.fillText(e.name??"",i,r),n.restore()}else d.headerHeight=Math.max(u,o.height);const h=Math.max(0,a??0)>20?20:0,p=c();d.positionWidth=p+8;const m=s();d.draw(o.x,o.y+h,o.width,o.height-h,l(),m,n)})))}}),1e3)},e=(o.events.onViewerAdded.subscribe((e=>{if(!(e.args&&e.args.viewer instanceof a.Grid))return;const n=e.args.viewer;t(n)})),o.shell.tableViews);for(const n of e){const e=n?.grid;e&&t(e)}}()}()),await Ui}function qi(t){const e=new ci(t,Di.seqHelper);return e.init().then((()=>{})).catch((t=>{const e=t instanceof Error?t.message:t.toString();o.shell.error(e)})),e}function zi(){return Di.monomerLib}function Yi(t){return Di.seqHelper.getSeqHandler(t)}function Ki(t){const e="getRegionTopMenu",n=a.Func.find({package:Di.name,name:e});if(1!==n.length)throw new Error(`Package '${Di.name}' func '${e}' not found`);const i=n[0].prepare({table:t.dataFrame,sequence:t});return new pi(i,Di.seqHelper).widget()}async function Zi(t){return async function(){const t=s.label("Manage monomer libraries");return fn()(t).addClass("d4-link-action"),t.onclick=async()=>await Vn(),new a.Widget(t)}()}function Xi(t){try{new pi(t,Di.seqHelper).dialog()}catch(t){const e=t instanceof Error?t.message:t.toString(),n=t instanceof Error?t.stack:void 0;o.shell.error(`Get region editor error: ${e}`),Di.logger.error(e,void 0,n)}}function Ji(t){const e=new ei;s.dialog({title:"Split to Monomers"}).add(e.paramsUI).onOK((async()=>t.func.prepare(e.funcParams).call(!0))).show()}function Qi(t){const e=new $({semtype:a.SEMTYPE.MACROMOLECULE}),n=s.dialog({title:"Sequence Space"}).add(e.getEditor()).onOK((async()=>{const n=e.getParams();return t.func.prepare({molecules:n.col,table:n.table,methodName:n.methodName,similarityMetric:n.similarityMetric,plotEmbeddings:n.plotEmbeddings,options:n.options,preprocessingFunction:n.preprocessingFunction,clusterEmbeddings:n.clusterEmbeddings}).call()}));n.history((()=>({editorSettings:e.getStringInput()})),(t=>e.applyStringInput(t.editorSettings))),n.show()}function tr(t){const e=new St({semtype:a.SEMTYPE.MACROMOLECULE}),n=s.dialog({title:"Activity Cliffs"}).add(e.getEditor()).onOK((async()=>{const n=e.getParams();return t.func.prepare({table:n.table,molecules:n.col,activities:n.activities,similarity:n.similarityThreshold,methodName:n.methodName,similarityMetric:n.similarityMetric,preprocessingFunction:n.preprocessingFunction,options:n.options}).call()}));n.history((()=>({editorSettings:e.getStringInput()})),(t=>e.applyStringInput(t.editorSettings))),n.show()}function er(){return new Yt}function nr(){return new Yt}function ir(){return new Yt}function rr(t){return function(t){const e=Array.from(t.dataFrame.columns).filter((t=>t.semType===a.SEMTYPE.MOLECULE)).map((t=>t.name));new Set(e).delete(t.name);let n=Di.properties?Di.properties.maxMonomerLength:4;if(Rt.gp.maxMonomerLength in t.tags){const e=parseInt(t.getTag(Rt.gp.maxMonomerLength));n=isNaN(e)?n:e}if(".mm.cellRenderer.maxMonomerLength"in t.temp){const e=parseInt(t.temp[".mm.cellRenderer.maxMonomerLength"]);n=isNaN(e)?n:e}const i=s.input.int("Max Monomer Length",{value:n,nullable:!0,min:1,max:50,step:1,onValueChanged:e=>{if(0==e)setTimeout((()=>{i.value=null}),0);else{const n=e??"",i=null==n?"":n.toString();t.temp[".mm.cellRenderer.maxMonomerLength"]=i,t.temp[".mm.cellRenderer.settingsChanged"]=Bt.s.true,t.dataFrame.fireValuesChanged()}},tooltipText:"The max length of monomer symbol displayed without shortening, empty to no limit"});let r=Di.properties?Di.properties.fontSize:12;".mm.cellRenderer.fontSize"in t.temp&&t.temp[".mm.cellRenderer.fontSize"]&&!isNaN(t.temp[".mm.cellRenderer.fontSize"])&&(r=t.temp[".mm.cellRenderer.fontSize"]);const o=s.input.int("Font Size",{value:r,nullable:!0,min:1,max:50,step:1,onValueChanged:e=>{if(e&&e>0){const n=e??12;t.temp[".mm.cellRenderer.fontSize"]=n,t.temp[".mm.cellRenderer.settingsChanged"]=Bt.s.true,t.dataFrame.fireValuesChanged()}},tooltipText:"The font size of monomer symbol in sequence renderer"}),l=s.input.int("Monomer Margin",{value:t.temp[".mm.cellRenderer.gapLength"]??0,onValueChanged:e=>{t.temp[".mm.cellRenderer.gapLength"]=e,t.temp[".mm.cellRenderer.settingsChanged"]=Bt.s.true,t.dataFrame.fireValuesChanged()},tooltipText:"The size of margin between monomers (in pixels)"}),c=s.input.bool("Color Code",{value:null==t?.temp["color-code"]||t.temp["color-code"],onValueChanged:e=>{t.temp["color-code"]=e,t.dataFrame.fireValuesChanged()},tooltipText:"Color code"}),h=s.input.string("Reference Sequence",{value:null!=t?.temp["reference-sequence"]?t?.temp["reference-sequence"]:"",nullable:!0,onValueChanged:e=>{t.temp["reference-sequence"]=e,t.dataFrame.fireValuesChanged()},tooltipText:"Reference sequence is not empty, then the sequence will be render \nas a difference from the reference sequence"}),u=s.input.bool("Compare with current",{value:null==t?.temp["compare-with-current"]||t.temp["compare-with-current"],onValueChanged:e=>{t.temp["compare-with-current"]=e,t.dataFrame.fireValuesChanged()},tooltipText:'When on, all sequences get rendered in the "diff" mode'}),d=s.inputs([o,i,l,h,c,u]);return new a.Widget(d)}(t)}function or(t){return(0,li.j)(t,Di.monomerLib,Di.seqHelper)}function sr(){return new Zt}function ar(t,e,n,i,r){const o=new he.$(i,r,n,e);return"Local alignment"==t?o.smithWaterman():o.needlemanWunsch()}function lr(){return new re.oP}function cr(){return new ce}function hr(t,e,n,i){return hi(t,e??null,n??null,i??null)}async function ur(t,e,n,i,r){const s=hi(e,n??null,i??null,r??null);e.dataFrame.columns.add(s),await o.data.detectSemanticTypes(e.dataFrame)}async function dr(t,e,n,i,r,h,u,d,p){if(!(0,Xn.V)(e,"Activity Cliffs"))return;const m=It(t),f={units:e.meta.units,aligned:e.getTag(gt.gp.aligned),separator:e.getTag(gt.gp.separator),alphabet:e.getTag(gt.gp.alphabet)},g=h,y=e,b=async()=>await mt(t,y,m,"Activity cliffs",n,i,g,r,{...d??{}},a.SEMTYPE.MACROMOLECULE,f,u,me,fe,ve,void 0,p),v=r===c.c.UMAP?2e5:2e4,w=r===c.c.UMAP?5e3:2e3;if(t.rowCount>v)return void o.shell.warning(`Too many rows, maximum for sequence activity cliffs is ${v}`);const C=a.TaskBarProgressIndicator.create("Running sequence activity cliffs ...");return new Promise(((e,n)=>{t.rowCount>w&&!d?.[l.vb]?s.dialog().add(s.divText("Activity cliffs analysis might take several minutes.\n Do you want to continue?")).onOK((async()=>{b().then((t=>e(t))).catch((t=>n(t)))})).onCancel((()=>{e(void 0)})).show():b().then((t=>e(t))).catch((t=>n(t)))})).catch((t=>{const[e,n]=(0,Ct.AP)(t);throw Di.logger.error(e,void 0,n),t})).finally((()=>{C.close()}))}async function pr(t,e,n=1,i=.6,r="Morgan"){if(t.semType!==a.SEMTYPE.MACROMOLECULE)return{entries:t.toList(),options:{}};const{seqList:o,options:s}=await de(t,e,r);return{entries:o,options:{...s,gapOpen:n,gapExtend:i}}}async function mr(t,e){t.version!==t.temp["last-invalidated-version"]&&await(0,pe.BQ)(t,Di.seqHelper,!1);const n=t.temp["monomeric-mols"],i=await o.functions.call("Chem:getMorganFingerprints",{molColumn:n}),r=new Array(i.length).fill(null);for(let t=0;t<i.length;t++){if(i.isNone(t)||!i.get(t))continue;const e=i.get(t);r[t]=V.A.fromUint32Array(e.length,new Uint32Array(e.getBuffer().buffer))}return{entries:r,options:{}}}async function fr(t,e,i,r,c,h,u,d,p){const m=o.shell.tv.dataFrame==t?o.shell.tv:void 0;if((0,Xn.V)(e,"Sequence Space"))return h||(h=a.Func.find({name:"macromoleculePreprocessingFunction",package:"Bio"})[0]),u??={},await async function(t,e,i,r,c,h,u,d=!0,p=!1,m={preprocessingFuncArgs:[]},f={},g=null,y={},b){const v={showXAxis:!1,showYAxis:!1,showXSelector:!1,showYSelector:!1};if(e.length!==r.length||e.length!==h.length||e.length!==c.length||e.length!==m.preprocessingFuncArgs.length)throw new Error("columns, metrics and preprocessing functions, weights and function argumentsmust have the same length");const w=d?f.tableView??o.shell.tableView(t.name)??o.shell.addTableView(t):null,C=async()=>{const C=a.TaskBarProgressIndicator.create(`Initializing ${f.scatterPlotName??"dimensionality reduction"} ...`);let A;try{const S=It(t);function x(n,r,o){let c=null,h=null;t.columns.names().includes(S[0])?(c=t.columns.byName(S[0]),h=t.columns.byName(S[1])):(c=t.columns.add(a.Column.float(S[0],t.rowCount)),h=t.columns.add(a.Column.float(S[1],t.rowCount)),d&&!A&&(A=w.scatterPlot({...v,x:S[0],y:S[1],title:f.scatterPlotName??Tt(e,i)}))),f[l.YP]&&(A?.root&&s.setUpdateIndicator(A.root,!1),c.init((t=>o[0]?o[0][t]:void 0)),h.init((t=>o[1]?o[1][t]:void 0)));const u=n/r*100;C.update(u,`Running ${f.scatterPlotName??"dimensionality reduction"}... ${u.toFixed(0)}%`)}async function E(){t.columns.add(a.Column.float(S[0],t.rowCount)),t.columns.add(a.Column.float(S[1],t.rowCount));let n=null;d&&(A=w.scatterPlot({...v,x:S[0],y:S[1],title:f.scatterPlotName??Tt(e,i)}),s.setUpdateIndicator(A.root,!0));const p=o.events.onViewerClosed.subscribe((t=>{const e=t.args.viewer;e?.getOptions()?.look?.title&&A?.getOptions()?.look?.title&&e?.getOptions()?.look?.title===A?.getOptions()?.look?.title&&(o.events.fireCustomEvent(q.S,{}),p.unsubscribe(),n?.(),C.close())})),g=new Promise((async(o,s)=>{try{n=o;const s=[];let a=r,d=c,p=u;if(b&&e.every((t=>t.isNumerical))){const n=e.map((t=>t.toList())),i=new Array(t.rowCount).fill(0).map(((t,n)=>new Float32Array(e.length)));for(let r=0;r<e.length;++r)for(let e=0;e<t.rowCount;++e)i[e][r]=n[r][e];m.distanceFnArgs=[{}],s.push({entries:i,options:{}}),a=[b],d=[1],p="MANHATTAN"}else for(let t=0;t<h.length;++t){const n=h[t];if(m.distanceFnArgs||(m.distanceFnArgs=[]),n){const i=n.inputs[0].name,o=n.inputs[1].name,{entries:a,options:l}=await n.apply({[i]:e[t],[o]:r[t],...m.preprocessingFuncArgs[t]??{}});s.push({entries:a,options:l}),m.distanceFnArgs.push(l)}else{const n=e[t].toList(),i={};s.push({entries:n,options:i}),m.distanceFnArgs.push(i)}}o(await Y(s.map((t=>t.entries)),i,a,d,u,m,f[l.vb]?void 0:x))}catch(t){s(t)}})),y=await g;return C.close(),p.unsubscribe(),y}const M=await E();if(p&&M){const _=a.TaskBarProgressIndicator.create("Clustering embeddings ...");try{const I=await function(t,e,i,r){return _t(this,void 0,void 0,(function*(){return new Promise((function(o,s){const a=new Worker(new URL(n.p+n.u(682),n.b));a.postMessage({embedX:t,embedY:e,minPts:r,epsilon:i}),a.onmessage=({data:{error:t,clusters:e}})=>{a.terminate(),t?s(t):o(e)}}))}))}(M[0],M[1],m.dbScanEpsilon??.01,m.dbScanMinPts??4),T=t.columns.getUnusedName("Cluster (DBSCAN)");t.columns.addNewString(T).init((t=>I[t].toString())),A&&(A.props.colorColumnName=T)}catch(L){o.shell.error("Clustering embeddings failed"),console.error(L)}finally{_.close()}}if(M){const N=t.columns.byName(S[0]),P=t.columns.byName(S[1]);if(N.init((t=>M[0][t])),P.init((t=>M[1][t])),g)try{const $=g.inputs[0].name,R=g.inputs[1].name;await g.prepare({[$]:N,[R]:P,...y}).call(!0)}catch(O){o.shell.error("Post-processing failed"),console.error(O)}if(A)return s.setUpdateIndicator(A.root,!1),A.helpUrl="/help/compute/sequence-space",A}}catch(k){o.shell.error("Dimensionality reduction failed"),console.error(k),C.close(),A&&s.setUpdateIndicator(A.root,!1)}};return new Promise((async(e,n)=>{try{if(f.fastRowCount&&t.rowCount>f.fastRowCount&&!f[l.vb])s.dialog().add(s.divText("Analysis might take several minutes. Do you want to continue?")).onOK((async()=>{try{const t=await C();e(t)}catch(t){n(t)}})).onCancel((()=>e(void 0))).show();else{const t=await C();e(t)}}catch(t){n(t)}}))}(t,[e],i,[r],[1],[h],"MANHATTAN",c,d??!1,{...u,preprocessingFuncArgs:[u.preprocessingFuncArgs??{}]},{fastRowCount:1e4,scatterPlotName:"Sequence space",bypassLargeDataWarning:u?.[l.vb],tableView:m})}async function gr(t,e,n,i=!1){const r=a.TaskBarProgressIndicator.create("Converting to atomic level ...");try{await Ui;const r=e.temp[".mm.cellRenderer.overriddenLibrary"]??Di.monomerLib,o=Di.seqHelper,s=Di.rdKitModule;await(0,mi.V)(t,e,n,i,r,o,s)}finally{r.close()}}async function yr(t){if(!t?.dataFrame)throw new Error("Sequence column is not found or its data frame is not empty");const e=a.Func.find({name:"toAtomicLevel",package:"Bio"})[0];if(!e)throw new Error("To Atomic level Function not found");e.prepare({table:t.dataFrame,seqCol:t}).edit()}async function br(t){return async function(t){const e=s.divText(""),n=a.Widget.fromRoot(e);try{if(!t||!t.value)return e.innerText="No sequence provided",n;if(!(t.cell&&t.cell.dart&&t.cell.dataFrame&&t.cell.column))return e.innerText="Atomic level conversion requeires a sequence column",n;if(![gt.Hi.FASTA,gt.Hi.SEPARATOR,gt.Hi.HELM].includes(t.cell.column.meta.units?.toLowerCase()??""))return e.innerText="Unsupported sequence notation. please use Bio | Polytool | Convert",n;const i=(await lo()).getSeqHandler(t.cell.column);if(!i)return e.innerText="No sequence handler found",n;if((i.getSplitted(t.cell.rowIndex,50)?.length??100)>40)return e.innerText="Maximum number of monomers is 40",n;const r=a.Column.fromStrings("singleVal",[t.value]),l=a.DataFrame.fromColumns([r]);if(Object.entries(t.cell.column.tags).forEach((([t,e])=>{r.setTag(t,e)})),await gr(l,r,t.cell.column.meta.units===gt.Hi.HELM,!1),l.columns.length<2)return e.innerText="No structure generated",n;const c=l.columns.byIndex(1),h=c.get(0);if(!h)return e.innerText="No structure generated",n;c.semType=a.SEMTYPE.MOLECULE;const u=a.SemanticValue.fromTableCell(l.cell(0,c.name)),d=s.panels.infoPanel(u);let p=null;d&&(p=a.Widget.fromRoot(d.root));const m=o.chem.drawMolecule(h,300,300,!1);return m.style.cursor="pointer",s.tooltip.bind(m,"Click to expand"),m.onclick=()=>{const t=window.innerWidth-200,e=window.innerHeight-200,n=o.chem.drawMolecule(h,t,e,!1);s.dialog({title:"Molecule"}).add(n).showModal(!0)},p&&p.root.prepend(m),p??a.Widget.fromRoot(m)}catch(t){Di.logger.error(t)}return e.innerText="No Structure generated",n}(t)}function vr(){(0,Qn.D)({},Di.seqHelper).catch((t=>{const[e,n]=(0,Ct.AP)(t);if(t instanceof Jn.Ap)return o.shell.warning(t.element),void Di.logger.warning(e);o.shell.error(e),Di.logger.error(e,void 0,n)}))}async function wr(t=null,e=null,n){return(0,Qn.D)({col:t,clustersCol:e,...n},Di.seqHelper)}async function Cr(){const t=o.shell.tv,e=t.dataFrame.columns.toList().filter((t=>t.semType==a.SEMTYPE.MACROMOLECULE&&(Di.seqHelper.getSeqHandler(t),!0))),n=async e=>{if(!(0,Xn.V)(e,"Composition"))return;const n=t.addViewer("WebLogo",{sequenceColumnName:e.name});o.shell.tv.dockManager.dock(n,a.DOCK_TYPE.DOWN,null,"Composition analysis",.25)};let i=null;if(0!=e.length){if(e.length>1){const t=e.map((t=>t.name)),i=e.find((t=>Di.seqHelper.getSeqHandler(t).isMsa())),r=s.input.choice("Column",{value:i?i.name:t[0],items:t});s.dialog({title:"Composition Analysis",helpUrl:"https://datagrok.ai/help/datagrok/solutions/domains/bio/#sequence-composition"}).add(s.div([r])).onOK((async()=>{const t=e.find((t=>t.name==r.value))??null;t&&await n(t)})).show()}else i=e[0];i&&await n(i)}else o.shell.error("Current table does not contain sequences")}function Ar(t){return new yt.m(t).importFasta()}function Sr(t){return console.log(t),[]}function xr(){const t=(0,$t.me)()[0];(0,_e.C)(t,Di.seqHelper)}function Er(t){(0,_e.C)(t,Di.seqHelper)}function Mr(){return new ri}async function _r(t){const e=a.TaskBarProgressIndicator.create("Test detectMacromolecule..."),n=(await o.dapi.files.list(t,!0,"")).filter((t=>t.fileName.endsWith(".csv")));let i=0;const r=[];for(const s of n)try{const e=await o.dapi.files.readAsText(t+s.fullPath),n=a.DataFrame.fromCsv(e);for(const t of n.columns)await o.functions.call("Bio:detectMacromolecule",{col:t})===a.SEMTYPE.MACROMOLECULE&&r.push({file:s.path,result:"detected",column:t.name,message:`units: ${t.meta.units}`})}catch(t){r.push({file:s.path,result:"error",column:null,message:t instanceof Error?t.message:t.toString()})}finally{i+=1,e.update(100*i/n.length,`Test ${s.fileName}`)}o.shell.info("Test Demo:Files for detectMacromolecule finished."),e.close();const s=a.DataFrame.fromObjects(r);return s.name=`datasets_detectMacromolecule_${t}`,s}async function Ir(t,e){return await async function(t,e){if(await(0,te.cb)(10),!(0,Xn.V)(e,"Sequence space"))return t;const n=Di.seqHelper,i=(0,vt.R)(e,n);i.name="splitToMonomers";const r=e.dataFrame;for(const t of i.columns)t.semType=jt.uF.MONOMER,t.setTag(wt.gp.alphabet,e.getTag(wt.gp.alphabet));const s=/(\d+)(?: \((\d+)\))?/,l=t=>{s.lastIndex=0;const e=t.match(s);return e?`${e[1]} (${parseInt(e[2]??"0")+1})`:t};for(let t=0;t<i.columns.length;t++){const n=i.columns.byIndex(t);n.semType=jt.uF.MONOMER,n.setTag(wt.gp.alphabet,e.getTag(wt.gp.alphabet));const o=100;let s=0;for(;r.columns.byName(n.name)&&s<o;)n.name=l(n.name),s++;r.columns.add(n)}await o.data.detectSemanticTypes(r);for(let t=0;t<i.columns.length;t++){const e=i.columns.byIndex(t);e.setTag(a.TAGS.CELL_RENDERER,"Monomer"),e.setTag(".use-as-filter","false")}return r}(t,e)}function Tr(t){return Di.seqHelper.getSeqMonomers(t)}function Lr(){return new Se(Di.seqHelper)}function Nr(){const t=o.shell.v,e=t.addViewer("Sequence Similarity Search");t.dockManager.dock(e,"down")}function Pr(){return new Ee(Di.seqHelper)}function $r(){const t=o.shell.v,e=t.addViewer("Sequence Diversity Search");t.dockManager.dock(e,"down")}function Rr(t){const e=(0,$t.me)();1===e.length?t.func.prepare({macromolecules:e[0]}).call(!0):new pe.a7(e,Di.seqHelper)}function Or(t){o.shell.tv.getFiltersGroup({createDefaultFilters:!1}).updateOrAdd({type:"Bio:bioSubstructureFilter",column:t.name,columnName:t.name}),o.shell.tv.grid.scrollToCell(t,0)}async function kr(t,e,n){const i=Di.seqHelper;return fi(t,e,n,ft.IDENTITY,i)}async function Gr(t,e,n){const i=Di.seqHelper;return fi(t,e,n,ft.SIMILARITY,i)}async function Fr(){Vn()}async function Hr(){await jn()}async function Br(){const t=await _n.getInstance();await t.getViewRoot()}async function Dr(){return await jn(!1)}async function Vr(t,e){(await(await pn.getInstance()).getFileManager()).getValidLibraryPaths().forEach((e=>{const n=e.endsWith(".json")?e.substring(0,e.length-5):e;t.item(n).onSelected.subscribe((async()=>{const t=await _n.getInstance();await t.getViewRoot(e,!0),t.resetCurrentRowFollowing()}))}))}function jr(){(0,Ie.TE)()}function Ur(){return new Te._i(Di.seqHelper,Di.logger)}function Wr(){return new Te._i(Di.seqHelper,Di.logger)}async function qr(){const t=a.TaskBarProgressIndicator.create("WebLogo");try{const t=new URLSearchParams(window.location.search),e=new ti(t,"webLogoLargeApp"),n=await Di.files.readCsv("data/sample_PT_100000x5.csv");await o.data.detectSemanticTypes(n),await e.init(n)}finally{t.close()}}async function zr(){const t=a.TaskBarProgressIndicator.create("WebLogo ...");try{const t=new URLSearchParams(window.location.search),e=new ti(t,"webLogoAggApp"),n=await Di.files.readCsv("samples/FASTA_PT_activity.csv");await o.data.detectSemanticTypes(n),await e.init(n)}finally{t.close()}}async function Yr(){const t=a.TaskBarProgressIndicator.create("getRegion ...");try{const t=new URLSearchParams(window.location.search),e=new di(t,"getRegionApp");await e.init()}finally{t.close()}}async function Kr(){const t=a.TaskBarProgressIndicator.create("getRegion ...");try{const t=new URLSearchParams(window.location.search),e=await Di.files.readCsv("samples/HELM_empty_vals.csv"),n=new di(t,"getRegionHelmApp");await n.init({df:e,colName:"HELM"})}finally{t.close()}}function Zr(){const t=a.DataFrame.fromColumns((0,Lt.dW)());o.shell.addTableView(t)}function Xr(){const t=a.DataFrame.fromColumns([(0,Lt.Hx)(Di.seqHelper,gt.Hi.FASTA)]);o.shell.addTableView(t)}function Jr(){const t=a.DataFrame.fromColumns([(0,Lt.Hx)(Di.seqHelper,gt.Hi.HELM)]);o.shell.addTableView(t)}function Qr(t,e){!function(t,e,n){const i=n.getSeqHandler(t.column),r=Object.values(gt.Hi).filter((t=>t!==i.units));e.group("Copy").items(r,(e=>{const i=t.column,r=t.rowIndex,s=n.getSeqHandler(i),a=e===gt.Hi.SEPARATOR?Di.properties.defaultSeparator:void 0,l=s.getJoiner({notation:e,separator:a})(s.getSplitted(r));navigator.clipboard?(navigator.clipboard.writeText(l),o.shell.info(`Value of notation '${e}' copied to clipboard`)):o.shell.warning("The clipboard functionality requires a secure origin — either HTTPS or localhost")}))}(t,e,Di.seqHelper)}async function to(){await async function(){const t=await Di.files.readCsv("samples/peptides-non-natural.csv");t.name="Similarity and Diversity Demo",t.col("activity").setTag("format","3 significant digits"),t.col("sequence").temp[".mm.cellRenderer.maxMonomerLength"]=4;const e=o.shell.addTableView(t);await t.meta.detectSemanticTypes(),await o.data.detectSemanticTypes(t);const n=e.addViewer("Sequence Similarity Search",{limit:20}),i=e.dockManager.dock(n,a.DOCK_TYPE.RIGHT,null,"Similarity search",.45);(0,$t.Kd)(e.grid,"sequence",500,30);const r=e.addViewer("Sequence Diversity Search",{limit:20});e.dockManager.dock(r,a.DOCK_TYPE.DOWN,i,"Diversity search",.4),o.functions.call("Dendrogram:HierarchicalClustering",{df:o.shell.t,colNameList:["sequence"],distance:"euclidian",linkage:"complete"})}()}async function eo(){await async function(){const t=await o.functions.eval("Bio:SeqSpaceDemo"),e=await o.dapi.projects.find(t.id);await e.open(),o.shell.windows.help.showHelp("/help/datagrok/solutions/domains/bio/bio.md#sequence-space")}()}async function no(){await async function(){const t=await Di.files.readCsv("tests/helm_cyclic_cliffs.csv");t.name="Activity Cliffs Demo",await o.data.detectSemanticTypes(t),await t.meta.detectSemanticTypes();const e=o.shell.addTableView(t);s.setUpdateIndicator(e.root,!0);try{const n=a.Func.find({name:"macromoleculePreprocessingFunction",package:"Bio"})[0],i=await dr(t,t.getCol("Sequence"),t.getCol("Activity"),96,c.c.UMAP,ue.Z.MONOMER_CHEMICAL_DISTANCE,n,{},!0);e.dockManager.dock(i,a.DOCK_TYPE.RIGHT,null,"Activity Cliffs",.65),await a.delay(100),fn()(i.root).find("button.scatter_plot_link,cliffs_grid").get()[0].click(),await a.delay(100),e.grid.props.rowHeight=180,e.grid.col("sequence")&&(e.grid.col("sequence").width=300),e.grid.col("structure")&&(e.grid.col("structure").width=300);const r=Array.from(e.viewers).find((t=>t!==e.grid&&t.type===a.VIEWER.GRID));r&&(r.props.rowHeight=40,r.col("seq_diff").width=600,e.dockManager.dock(r,a.DOCK_TYPE.DOWN,null,"Cliffs",.35),e.dockManager.dock(i,a.DOCK_TYPE.RIGHT,null,"Activity Cliffs",.55))}catch(t){!function(t){const e=t instanceof Error?t.message:t.toString(),n=t instanceof Error?t.stack:void 0;o.shell.error(e),Di.logger.error(t.message,void 0,n)}(t)}finally{s.setUpdateIndicator(e.root,!1)}o.shell.windows.help.showHelp("/help/datagrok/solutions/domains/bio/bio.md#activity-cliffs")}()}async function io(){await async function(){const t=await Di.files.readCsv("samples/HELM_BI_CYCLIC.csv");t.name="To Atomic Level",await t.meta.detectSemanticTypes(),await o.data.detectSemanticTypes(t);const e=o.shell.addTableView(t),n=t.col("HELM");await gr(t,n,!0,!1),(0,$t.Kd)(e.grid,"molfile(HELM)",500,300,!0),(0,$t.Kd)(e.grid,"HELM",500,void 0,!0),o.shell.info("Hover over monomers in HELM column to highlight them in molecular structure.",{timeout:10}),o.shell.windows.help.showHelp("/help/datagrok/solutions/domains/bio/bio.md#get-atomic-level-structure")}()}async function ro(t){const e=(0,bt.uX)(t),n=JSON.stringify(e);a.Utils.download(`${t.name}.json`,n)}async function oo(t,e){if(!t.trim())return"";try{const n=a.Column.fromList(a.COLUMN_TYPE.STRING,"helm",[t]),i=a.DataFrame.fromColumns([n]),r=await o.functions.call("Bio:detectMacromolecule",{col:n});r&&(n.semType=r);const s=(await Vi()).getMonomerLib(),l=Di.seqHelper,c=await(0,Pt.j)(),h=(await(0,mi.V)(i,n,e,!1,s,l,c))?.molCol?.get(0);return h??void 0}catch(t){const[e,n]=(0,Ct.AP)(t);throw Di.logger.error(e,void 0,n),t}}async function so(t,e){if(!t.trim())return null;try{const n=a.Column.fromList(a.COLUMN_TYPE.STRING,"seq",[t]),i=a.DataFrame.fromColumns([n]);if(!await o.functions.call("Bio:detectMacromolecule",{col:n}))throw new Error("Macromolecule required");return(await fi(i,n,e,ft.IDENTITY,Di.seqHelper)).get(0)}catch(t){const[e,n]=(0,Ct.AP)(t);throw Di.logger.error(e,void 0,n),t}}async function ao(t,e,n){const i=await t.readAsString();await async function(t,e,n){const i=a.TaskBarProgressIndicator.create("detectMacromolecule probe ...");try{let r=0;const s=await o.functions.call("Bio:detectMacromoleculeEnableStore");let l=0;for(let c=0;c<n;++c){const h=a.DataFrame.fromCsv(t),u=e?h.getCol(e):h.columns.byIndex(0);await o.functions.call("Bio:detectMacromolecule",{col:u})!==a.SEMTYPE.MACROMOLECULE&&(++l,console.warn(`Reject reason: ${s.last.rejectReason}`));const d=c/n;d-r>=.1&&(r=d,i.update(100*d,`detectMacromolecule probe ${l}/${c}/${n} ...`),await(0,te.cb)(0))}l>0?o.shell.warning(`detectMacromolecule failed ${l} / ${n}`):o.shell.info(`detectMacromolecule success ${n}`)}finally{i.close()}}(i,e,n)}async function lo(){return await Wi(),Di.seqHelper}function co(t,e,n){return async function(t,e,n=!0,i){const r=Di.seqHelper,o=(await r.getHelmToMolfileConverter(i)).convertToRdKitBeautifiedMolfileColumn(e,n,Di.rdKitModule,i);return o.semType=a.SEMTYPE.MOLECULE,o}(0,e,n,Di.monomerLib)}function ho(){return Di.logger.debug("Bio:test1() function"),{value:"value1"}}},6625:(t,e,n)=>{"use strict";n.d(e,{$:()=>o});class i{value;parentI;parentJ;constructor(){this.value=0,this.parentI=0,this.parentJ=0}}class r{seq1;seq2;score;constructor(t,e,n){this.seq1=t,this.seq2=e,this.score=n}}class o{seq1="";seq2="";gap=1;len1=0;len2=0;step=1;alignGrid=[];scores=[];dpGrid=[];connections={};BLOSUM45=[[5,-2,-1,-2,-1,-1,-1,0,-2,-1,-1,-1,-1,-2,-1,1,0,-2,-2,0,-1,-1,0,-5],[-2,7,0,-1,-3,1,0,-2,0,-3,-2,3,-1,-2,-2,-1,-1,-2,-1,-2,-1,0,-1,-5],[-1,0,6,2,-2,0,0,0,1,-2,-3,0,-2,-2,-2,1,0,-4,-2,-3,4,0,-1,-5],[-2,-1,2,7,-3,0,2,-1,0,-4,-3,0,-3,-4,-1,0,-1,-4,-2,-3,5,1,-1,-5],[-1,-3,-2,-3,12,-3,-3,-3,-3,-3,-2,-3,-2,-2,-4,-1,-1,-5,-3,-1,-2,-3,-2,-5],[-1,1,0,0,-3,6,2,-2,1,-2,-2,1,0,-4,-1,0,-1,-2,-1,-3,0,4,-1,-5],[-1,0,0,2,-3,2,6,-2,0,-3,-2,1,-2,-3,0,0,-1,-3,-2,-3,1,4,-1,-5],[0,-2,0,-1,-3,-2,-2,7,-2,-4,-3,-2,-2,-3,-2,0,-2,-2,-3,-3,-1,-2,-1,-5],[-2,0,1,0,-3,1,0,-2,10,-3,-2,-1,0,-2,-2,-1,-2,-3,2,-3,0,0,-1,-5],[-1,-3,-2,-4,-3,-2,-3,-4,-3,5,2,-3,2,0,-2,-2,-1,-2,0,3,-3,-3,-1,-5],[-1,-2,-3,-3,-2,-2,-2,-3,-2,2,5,-3,2,1,-3,-3,-1,-2,0,1,-3,-2,-1,-5],[-1,3,0,0,-3,1,1,-2,-1,-3,-3,5,-1,-3,-1,-1,-1,-2,-1,-2,0,1,-1,-5],[-1,-1,-2,-3,-2,0,-2,-2,0,2,2,-1,6,0,-2,-2,-1,-2,0,1,-2,-1,-1,-5],[-2,-2,-2,-4,-2,-4,-3,-3,-2,0,1,-3,0,8,-3,-2,-1,1,3,0,-3,-3,-1,-5],[-1,-2,-2,-1,-4,-1,0,-2,-2,-2,-3,-1,-2,-3,9,-1,-1,-3,-3,-3,-2,-1,-1,-5],[1,-1,1,0,-1,0,0,0,-1,-2,-3,-1,-2,-2,-1,4,2,-4,-2,-1,0,0,0,-5],[0,-1,0,-1,-1,-1,-1,-2,-2,-1,-1,-1,-1,-1,-1,2,5,-3,-1,0,0,-1,0,-5],[-2,-2,-4,-4,-5,-2,-3,-2,-3,-2,-2,-2,-2,1,-3,-4,-3,15,3,-3,-4,-2,-2,-5],[-2,-1,-2,-2,-3,-1,-2,-3,2,0,0,-1,0,3,-3,-2,-1,3,8,-1,-2,-2,-1,-5],[0,-2,-3,-3,-1,-3,-3,-3,-3,3,1,-2,1,0,-3,-1,0,-3,-1,5,-3,-3,-1,-5],[-1,-1,4,5,-2,0,1,-1,0,-3,-3,0,-2,-3,-2,0,0,-4,-2,-3,4,2,-1,-5],[-1,0,0,1,-3,4,4,-2,0,-3,-2,1,-1,-3,-1,0,-1,-2,-2,-3,2,4,-1,-5],[0,-1,-1,-1,-2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,-2,-1,-1,-1,-1,-1,-5],[-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,1]];BLOSUM50=[[5,-2,-1,-2,-1,-1,-1,0,-2,-1,-2,-1,-1,-3,-1,1,0,-3,-2,0,-2,-1,-1,-5],[-2,7,-1,-2,-4,1,0,-3,0,-4,-3,3,-2,-3,-3,-1,-1,-3,-1,-3,-1,0,-1,-5],[-1,-1,7,2,-2,0,0,0,1,-3,-4,0,-2,-4,-2,1,0,-4,-2,-3,4,0,-1,-5],[-2,-2,2,8,-4,0,2,-1,-1,-4,-4,-1,-4,-5,-1,0,-1,-5,-3,-4,5,1,-1,-5],[-1,-4,-2,-4,13,-3,-3,-3,-3,-2,-2,-3,-2,-2,-4,-1,-1,-5,-3,-1,-3,-3,-2,-5],[-1,1,0,0,-3,7,2,-2,1,-3,-2,2,0,-4,-1,0,-1,-1,-1,-3,0,4,-1,-5],[-1,0,0,2,-3,2,6,-3,0,-4,-3,1,-2,-3,-1,-1,-1,-3,-2,-3,1,5,-1,-5],[0,-3,0,-1,-3,-2,-3,8,-2,-4,-4,-2,-3,-4,-2,0,-2,-3,-3,-4,-1,-2,-2,-5],[-2,0,1,-1,-3,1,0,-2,10,-4,-3,0,-1,-1,-2,-1,-2,-3,2,-4,0,0,-1,-5],[-1,-4,-3,-4,-2,-3,-4,-4,-4,5,2,-3,2,0,-3,-3,-1,-3,-1,4,-4,-3,-1,-5],[-2,-3,-4,-4,-2,-2,-3,-4,-3,2,5,-3,3,1,-4,-3,-1,-2,-1,1,-4,-3,-1,-5],[-1,3,0,-1,-3,2,1,-2,0,-3,-3,6,-2,-4,-1,0,-1,-3,-2,-3,0,1,-1,-5],[-1,-2,-2,-4,-2,0,-2,-3,-1,2,3,-2,7,0,-3,-2,-1,-1,0,1,-3,-1,-1,-5],[-3,-3,-4,-5,-2,-4,-3,-4,-1,0,1,-4,0,8,-4,-3,-2,1,4,-1,-4,-4,-2,-5],[-1,-3,-2,-1,-4,-1,-1,-2,-2,-3,-4,-1,-3,-4,10,-1,-1,-4,-3,-3,-2,-1,-2,-5],[1,-1,1,0,-1,0,-1,0,-1,-3,-3,0,-2,-3,-1,5,2,-4,-2,-2,0,0,-1,-5],[0,-1,0,-1,-1,-1,-1,-2,-2,-1,-1,-1,-1,-2,-1,2,5,-3,-2,0,0,-1,0,-5],[-3,-3,-4,-5,-5,-1,-3,-3,-3,-3,-2,-3,-1,1,-4,-4,-3,15,2,-3,-5,-2,-3,-5],[-2,-1,-2,-3,-3,-1,-2,-3,2,-1,-1,-2,0,4,-3,-2,-2,2,8,-1,-3,-2,-1,-5],[0,-3,-3,-4,-1,-3,-3,-4,-4,4,1,-3,1,-1,-3,-2,0,-3,-1,5,-4,-3,-1,-5],[-2,-1,4,5,-3,0,1,-1,0,-4,-4,0,-3,-4,-2,0,0,-5,-3,-4,5,2,-1,-5],[-1,0,0,1,-3,4,5,-2,0,-3,-3,1,-1,-4,-1,0,-1,-2,-2,-3,2,5,-1,-5],[-1,-1,-1,-1,-2,-1,-1,-2,-1,-1,-1,-1,-1,-2,-2,-1,0,-3,-1,-1,-1,-1,-1,-5],[-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,1]];BLOSUM62=[[4,-1,-2,-2,0,-1,-1,0,-2,-1,-1,-1,-1,-2,-1,1,0,-3,-2,0,-2,-1,0,-4],[-1,5,0,-2,-3,1,0,-2,0,-3,-2,2,-1,-3,-2,-1,-1,-3,-2,-3,-1,0,-1,-4],[-2,0,6,1,-3,0,0,0,1,-3,-3,0,-2,-3,-2,1,0,-4,-2,-3,3,0,-1,-4],[-2,-2,1,6,-3,0,2,-1,-1,-3,-4,-1,-3,-3,-1,0,-1,-4,-3,-3,4,1,-1,-4],[0,-3,-3,-3,9,-3,-4,-3,-3,-1,-1,-3,-1,-2,-3,-1,-1,-2,-2,-1,-3,-3,-2,-4],[-1,1,0,0,-3,5,2,-2,0,-3,-2,1,0,-3,-1,0,-1,-2,-1,-2,0,3,-1,-4],[-1,0,0,2,-4,2,5,-2,0,-3,-3,1,-2,-3,-1,0,-1,-3,-2,-2,1,4,-1,-4],[0,-2,0,-1,-3,-2,-2,6,-2,-4,-4,-2,-3,-3,-2,0,-2,-2,-3,-3,-1,-2,-1,-4],[-2,0,1,-1,-3,0,0,-2,8,-3,-3,-1,-2,-1,-2,-1,-2,-2,2,-3,0,0,-1,-4],[-1,-3,-3,-3,-1,-3,-3,-4,-3,4,2,-3,1,0,-3,-2,-1,-3,-1,3,-3,-3,-1,-4],[-1,-2,-3,-4,-1,-2,-3,-4,-3,2,4,-2,2,0,-3,-2,-1,-2,-1,1,-4,-3,-1,-4],[-1,2,0,-1,-3,1,1,-2,-1,-3,-2,5,-1,-3,-1,0,-1,-3,-2,-2,0,1,-1,-4],[-1,-1,-2,-3,-1,0,-2,-3,-2,1,2,-1,5,0,-2,-1,-1,-1,-1,1,-3,-1,-1,-4],[-2,-3,-3,-3,-2,-3,-3,-3,-1,0,0,-3,0,6,-4,-2,-2,1,3,-1,-3,-3,-1,-4],[-1,-2,-2,-1,-3,-1,-1,-2,-2,-3,-3,-1,-2,-4,7,-1,-1,-4,-3,-2,-2,-1,-2,-4],[1,-1,1,0,-1,0,0,0,-1,-2,-2,0,-1,-2,-1,4,1,-3,-2,-2,0,0,0,-4],[0,-1,0,-1,-1,-1,-1,-2,-2,-1,-1,-1,-1,-2,-1,1,5,-2,-2,0,-1,-1,0,-4],[-3,-3,-4,-4,-2,-2,-3,-2,-2,-3,-2,-3,-1,1,-4,-3,-2,11,2,-3,-4,-3,-2,-4],[-2,-2,-2,-3,-2,-1,-2,-3,2,-1,-1,-2,-1,3,-3,-2,-2,2,7,-1,-3,-2,-1,-4],[0,-3,-3,-3,-1,-2,-2,-3,-3,3,1,-2,1,-1,-2,-2,0,-3,-1,4,-3,-2,-1,-4],[-2,-1,3,4,-3,0,1,-1,0,-3,-4,0,-3,-3,-2,0,-1,-4,-3,-3,4,1,-1,-4],[-1,0,0,1,-3,3,4,-2,0,-3,-3,1,-1,-3,-1,0,-1,-3,-2,-2,1,4,-1,-4],[0,-1,-1,-1,-2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-2,0,0,-2,-1,-1,-1,-1,-1,-4],[-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,1]];BLOSUM80=[[7,-3,-3,-3,-1,-2,-2,0,-3,-3,-3,-1,-2,-4,-1,2,0,-5,-4,-1,-3,-2,-1,-8],[-3,9,-1,-3,-6,1,-1,-4,0,-5,-4,3,-3,-5,-3,-2,-2,-5,-4,-4,-2,0,-2,-8],[-3,-1,9,2,-5,0,-1,-1,1,-6,-6,0,-4,-6,-4,1,0,-7,-4,-5,5,-1,-2,-8],[-3,-3,2,10,-7,-1,2,-3,-2,-7,-7,-2,-6,-6,-3,-1,-2,-8,-6,-6,6,1,-3,-8],[-1,-6,-5,-7,13,-5,-7,-6,-7,-2,-3,-6,-3,-4,-6,-2,-2,-5,-5,-2,-6,-7,-4,-8],[-2,1,0,-1,-5,9,3,-4,1,-5,-4,2,-1,-5,-3,-1,-1,-4,-3,-4,-1,5,-2,-8],[-2,-1,-1,2,-7,3,8,-4,0,-6,-6,1,-4,-6,-2,-1,-2,-6,-5,-4,1,6,-2,-8],[0,-4,-1,-3,-6,-4,-4,9,-4,-7,-7,-3,-5,-6,-5,-1,-3,-6,-6,-6,-2,-4,-3,-8],[-3,0,1,-2,-7,1,0,-4,12,-6,-5,-1,-4,-2,-4,-2,-3,-4,3,-5,-1,0,-2,-8],[-3,-5,-6,-7,-2,-5,-6,-7,-6,7,2,-5,2,-1,-5,-4,-2,-5,-3,4,-6,-6,-2,-8],[-3,-4,-6,-7,-3,-4,-6,-7,-5,2,6,-4,3,0,-5,-4,-3,-4,-2,1,-7,-5,-2,-8],[-1,3,0,-2,-6,2,1,-3,-1,-5,-4,8,-3,-5,-2,-1,-1,-6,-4,-4,-1,1,-2,-8],[-2,-3,-4,-6,-3,-1,-4,-5,-4,2,3,-3,9,0,-4,-3,-1,-3,-3,1,-5,-3,-2,-8],[-4,-5,-6,-6,-4,-5,-6,-6,-2,-1,0,-5,0,10,-6,-4,-4,0,4,-2,-6,-6,-3,-8],[-1,-3,-4,-3,-6,-3,-2,-5,-4,-5,-5,-2,-4,-6,12,-2,-3,-7,-6,-4,-4,-2,-3,-8],[2,-2,1,-1,-2,-1,-1,-1,-2,-4,-4,-1,-3,-4,-2,7,2,-6,-3,-3,0,-1,-1,-8],[0,-2,0,-2,-2,-1,-2,-3,-3,-2,-3,-1,-1,-4,-3,2,8,-5,-3,0,-1,-2,-1,-8],[-5,-5,-7,-8,-5,-4,-6,-6,-4,-5,-4,-6,-3,0,-7,-6,-5,16,3,-5,-8,-5,-5,-8],[-4,-4,-4,-6,-5,-3,-5,-6,3,-3,-2,-4,-3,4,-6,-3,-3,3,11,-3,-5,-4,-3,-8],[-1,-4,-5,-6,-2,-4,-4,-6,-5,4,1,-4,1,-2,-4,-3,0,-5,-3,7,-6,-4,-2,-8],[-3,-2,5,6,-6,-1,1,-2,-1,-6,-7,-1,-5,-6,-4,0,-1,-8,-5,-6,6,0,-3,-8],[-2,0,-1,1,-7,5,6,-4,0,-6,-5,1,-3,-6,-2,-1,-2,-5,-4,-4,0,6,-1,-8],[-1,-2,-2,-3,-4,-2,-2,-3,-2,-2,-2,-2,-2,-3,-3,-1,-1,-5,-3,-2,-3,-1,-2,-8],[-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,1]];BLOSUM90=[[5,-2,-2,-3,-1,-1,-1,0,-2,-2,-2,-1,-2,-3,-1,1,0,-4,-3,-1,-2,-1,-1,-6],[-2,6,-1,-3,-5,1,-1,-3,0,-4,-3,2,-2,-4,-3,-1,-2,-4,-3,-3,-2,0,-2,-6],[-2,-1,7,1,-4,0,-1,-1,0,-4,-4,0,-3,-4,-3,0,0,-5,-3,-4,4,-1,-2,-6],[-3,-3,1,7,-5,-1,1,-2,-2,-5,-5,-1,-4,-5,-3,-1,-2,-6,-4,-5,4,0,-2,-6],[-1,-5,-4,-5,9,-4,-6,-4,-5,-2,-2,-4,-2,-3,-4,-2,-2,-4,-4,-2,-4,-5,-3,-6],[-1,1,0,-1,-4,7,2,-3,1,-4,-3,1,0,-4,-2,-1,-1,-3,-3,-3,-1,4,-1,-6],[-1,-1,-1,1,-6,2,6,-3,-1,-4,-4,0,-3,-5,-2,-1,-1,-5,-4,-3,0,4,-2,-6],[0,-3,-1,-2,-4,-3,-3,6,-3,-5,-5,-2,-4,-5,-3,-1,-3,-4,-5,-5,-2,-3,-2,-6],[-2,0,0,-2,-5,1,-1,-3,8,-4,-4,-1,-3,-2,-3,-2,-2,-3,1,-4,-1,0,-2,-6],[-2,-4,-4,-5,-2,-4,-4,-5,-4,5,1,-4,1,-1,-4,-3,-1,-4,-2,3,-5,-4,-2,-6],[-2,-3,-4,-5,-2,-3,-4,-5,-4,1,5,-3,2,0,-4,-3,-2,-3,-2,0,-5,-4,-2,-6],[-1,2,0,-1,-4,1,0,-2,-1,-4,-3,6,-2,-4,-2,-1,-1,-5,-3,-3,-1,1,-1,-6],[-2,-2,-3,-4,-2,0,-3,-4,-3,1,2,-2,7,-1,-3,-2,-1,-2,-2,0,-4,-2,-1,-6],[-3,-4,-4,-5,-3,-4,-5,-5,-2,-1,0,-4,-1,7,-4,-3,-3,0,3,-2,-4,-4,-2,-6],[-1,-3,-3,-3,-4,-2,-2,-3,-3,-4,-4,-2,-3,-4,8,-2,-2,-5,-4,-3,-3,-2,-2,-6],[1,-1,0,-1,-2,-1,-1,-1,-2,-3,-3,-1,-2,-3,-2,5,1,-4,-3,-2,0,-1,-1,-6],[0,-2,0,-2,-2,-1,-1,-3,-2,-1,-2,-1,-1,-3,-2,1,6,-4,-2,-1,-1,-1,-1,-6],[-4,-4,-5,-6,-4,-3,-5,-4,-3,-4,-3,-5,-2,0,-5,-4,-4,11,2,-3,-6,-4,-3,-6],[-3,-3,-3,-4,-4,-3,-4,-5,1,-2,-2,-3,-2,3,-4,-3,-2,2,8,-3,-4,-3,-2,-6],[-1,-3,-4,-5,-2,-3,-3,-5,-4,3,0,-3,0,-2,-3,-2,-1,-3,-3,5,-4,-3,-2,-6],[-2,-2,4,4,-4,-1,0,-2,-1,-5,-5,-1,-4,-4,-3,0,-1,-6,-4,-4,4,0,-2,-6],[-1,0,-1,0,-5,4,4,-3,0,-4,-4,1,-2,-4,-2,-1,-1,-4,-3,-3,0,4,-1,-6],[-1,-2,-2,-2,-3,-1,-2,-2,-2,-2,-2,-1,-1,-2,-2,-1,-1,-3,-2,-2,-2,-1,-2,-6],[-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,1]];NUCLEOTIDES=[[1,-1,-1,-1],[-1,1,-1,-1],[-1,-1,1,-1],[-1,-1,-1,1]];PAM30=[[6,-7,-4,-3,-6,-4,-2,-2,-7,-5,-6,-7,-5,-8,-2,0,-1,-13,-8,-2,-3,-3,-3,-17],[-7,8,-6,-10,-8,-2,-9,-9,-2,-5,-8,0,-4,-9,-4,-3,-6,-2,-10,-8,-7,-4,-6,-17],[-4,-6,8,2,-11,-3,-2,-3,0,-5,-7,-1,-9,-9,-6,0,-2,-8,-4,-8,6,-3,-3,-17],[-3,-10,2,8,-14,-2,2,-3,-4,-7,-12,-4,-11,-15,-8,-4,-5,-15,-11,-8,6,1,-5,-17],[-6,-8,-11,-14,10,-14,-14,-9,-7,-6,-15,-14,-13,-13,-8,-3,-8,-15,-4,-6,-12,-14,-9,-17],[-4,-2,-3,-2,-14,8,1,-7,1,-8,-5,-3,-4,-13,-3,-5,-5,-13,-12,-7,-3,6,-5,-17],[-2,-9,-2,2,-14,1,8,-4,-5,-5,-9,-4,-7,-14,-5,-4,-6,-17,-8,-6,1,6,-5,-17],[-2,-9,-3,-3,-9,-7,-4,6,-9,-11,-10,-7,-8,-9,-6,-2,-6,-15,-14,-5,-3,-5,-5,-17],[-7,-2,0,-4,-7,1,-5,-9,9,-9,-6,-6,-10,-6,-4,-6,-7,-7,-3,-6,-1,-1,-5,-17],[-5,-5,-5,-7,-6,-8,-5,-11,-9,8,-1,-6,-1,-2,-8,-7,-2,-14,-6,2,-6,-6,-5,-17],[-6,-8,-7,-12,-15,-5,-9,-10,-6,-1,7,-8,1,-3,-7,-8,-7,-6,-7,-2,-9,-7,-6,-17],[-7,0,-1,-4,-14,-3,-4,-7,-6,-6,-8,7,-2,-14,-6,-4,-3,-12,-9,-9,-2,-4,-5,-17],[-5,-4,-9,-11,-13,-4,-7,-8,-10,-1,1,-2,11,-4,-8,-5,-4,-13,-11,-1,-10,-5,-5,-17],[-8,-9,-9,-15,-13,-13,-14,-9,-6,-2,-3,-14,-4,9,-10,-6,-9,-4,2,-8,-10,-13,-8,-17],[-2,-4,-6,-8,-8,-3,-5,-6,-4,-8,-7,-6,-8,-10,8,-2,-4,-14,-13,-6,-7,-4,-5,-17],[0,-3,0,-4,-3,-5,-4,-2,-6,-7,-8,-4,-5,-6,-2,6,0,-5,-7,-6,-1,-5,-3,-17],[-1,-6,-2,-5,-8,-5,-6,-6,-7,-2,-7,-3,-4,-9,-4,0,7,-13,-6,-3,-3,-6,-4,-17],[-13,-2,-8,-15,-15,-13,-17,-15,-7,-14,-6,-12,-13,-4,-14,-5,-13,13,-5,-15,-10,-14,-11,-17],[-8,-10,-4,-11,-4,-12,-8,-14,-3,-6,-7,-9,-11,2,-13,-7,-6,-5,10,-7,-6,-9,-7,-17],[-2,-8,-8,-8,-6,-7,-6,-5,-6,2,-2,-9,-1,-8,-6,-6,-3,-15,-7,7,-8,-6,-5,-17],[-3,-7,6,6,-12,-3,1,-3,-1,-6,-9,-2,-10,-10,-7,-1,-3,-10,-6,-8,6,0,-5,-17],[-3,-4,-3,1,-14,6,6,-5,-1,-6,-7,-4,-5,-13,-4,-5,-6,-14,-9,-6,0,6,-5,-17],[-3,-6,-3,-5,-9,-5,-5,-5,-5,-5,-6,-5,-5,-8,-5,-3,-4,-11,-7,-5,-5,-5,-5,-17],[-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,1]];PAM70=[[5,-4,-2,-1,-4,-2,-1,0,-4,-2,-4,-4,-3,-6,0,1,1,-9,-5,-1,-1,-1,-2,-11],[-4,8,-3,-6,-5,0,-5,-6,0,-3,-6,2,-2,-7,-2,-1,-4,0,-7,-5,-4,-2,-3,-11],[-2,-3,6,3,-7,-1,0,-1,1,-3,-5,0,-5,-6,-3,1,0,-6,-3,-5,5,-1,-2,-11],[-1,-6,3,6,-9,0,3,-1,-1,-5,-8,-2,-7,-10,-4,-1,-2,-10,-7,-5,5,2,-3,-11],[-4,-5,-7,-9,9,-9,-9,-6,-5,-4,-10,-9,-9,-8,-5,-1,-5,-11,-2,-4,-8,-9,-6,-11],[-2,0,-1,0,-9,7,2,-4,2,-5,-3,-1,-2,-9,-1,-3,-3,-8,-8,-4,-1,5,-2,-11],[-1,-5,0,3,-9,2,6,-2,-2,-4,-6,-2,-4,-9,-3,-2,-3,-11,-6,-4,2,5,-3,-11],[0,-6,-1,-1,-6,-4,-2,6,-6,-6,-7,-5,-6,-7,-3,0,-3,-10,-9,-3,-1,-3,-3,-11],[-4,0,1,-1,-5,2,-2,-6,8,-6,-4,-3,-6,-4,-2,-3,-4,-5,-1,-4,0,1,-3,-11],[-2,-3,-3,-5,-4,-5,-4,-6,-6,7,1,-4,1,0,-5,-4,-1,-9,-4,3,-4,-4,-3,-11],[-4,-6,-5,-8,-10,-3,-6,-7,-4,1,6,-5,2,-1,-5,-6,-4,-4,-4,0,-6,-4,-4,-11],[-4,2,0,-2,-9,-1,-2,-5,-3,-4,-5,6,0,-9,-4,-2,-1,-7,-7,-6,-1,-2,-3,-11],[-3,-2,-5,-7,-9,-2,-4,-6,-6,1,2,0,10,-2,-5,-3,-2,-8,-7,0,-6,-3,-3,-11],[-6,-7,-6,-10,-8,-9,-9,-7,-4,0,-1,-9,-2,8,-7,-4,-6,-2,4,-5,-7,-9,-5,-11],[0,-2,-3,-4,-5,-1,-3,-3,-2,-5,-5,-4,-5,-7,7,0,-2,-9,-9,-3,-4,-2,-3,-11],[1,-1,1,-1,-1,-3,-2,0,-3,-4,-6,-2,-3,-4,0,5,2,-3,-5,-3,0,-2,-1,-11],[1,-4,0,-2,-5,-3,-3,-3,-4,-1,-4,-1,-2,-6,-2,2,6,-8,-4,-1,-1,-3,-2,-11],[-9,0,-6,-10,-11,-8,-11,-10,-5,-9,-4,-7,-8,-2,-9,-3,-8,13,-3,-10,-7,-10,-7,-11],[-5,-7,-3,-7,-2,-8,-6,-9,-1,-4,-4,-7,-7,4,-9,-5,-4,-3,9,-5,-4,-7,-5,-11],[-1,-5,-5,-5,-4,-4,-4,-3,-4,3,0,-6,0,-5,-3,-3,-1,-10,-5,6,-5,-4,-2,-11],[-1,-4,5,5,-8,-1,2,-1,0,-4,-6,-1,-6,-7,-4,0,-1,-7,-4,-5,5,1,-2,-11],[-1,-2,-1,2,-9,5,5,-3,1,-4,-4,-2,-3,-9,-2,-2,-3,-10,-7,-4,1,5,-3,-11],[-2,-3,-2,-3,-6,-2,-3,-3,-3,-3,-4,-3,-3,-5,-3,-1,-2,-7,-5,-2,-2,-3,-3,-11],[-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,1]];PAM250=[[2,-2,0,0,-2,0,0,1,-1,-1,-2,-1,-1,-3,1,1,1,-6,-3,0,0,0,0,-8],[-2,6,0,-1,-4,1,-1,-3,2,-2,-3,3,0,-4,0,0,-1,2,-4,-2,-1,0,-1,-8],[0,0,2,2,-4,1,1,0,2,-2,-3,1,-2,-3,0,1,0,-4,-2,-2,2,1,0,-8],[0,-1,2,4,-5,2,3,1,1,-2,-4,0,-3,-6,-1,0,0,-7,-4,-2,3,3,-1,-8],[-2,-4,-4,-5,12,-5,-5,-3,-3,-2,-6,-5,-5,-4,-3,0,-2,-8,0,-2,-4,-5,-3,-8],[0,1,1,2,-5,4,2,-1,3,-2,-2,1,-1,-5,0,-1,-1,-5,-4,-2,1,3,-1,-8],[0,-1,1,3,-5,2,4,0,1,-2,-3,0,-2,-5,-1,0,0,-7,-4,-2,3,3,-1,-8],[1,-3,0,1,-3,-1,0,5,-2,-3,-4,-2,-3,-5,0,1,0,-7,-5,-1,0,0,-1,-8],[-1,2,2,1,-3,3,1,-2,6,-2,-2,0,-2,-2,0,-1,-1,-3,0,-2,1,2,-1,-8],[-1,-2,-2,-2,-2,-2,-2,-3,-2,5,2,-2,2,1,-2,-1,0,-5,-1,4,-2,-2,-1,-8],[-2,-3,-3,-4,-6,-2,-3,-4,-2,2,6,-3,4,2,-3,-3,-2,-2,-1,2,-3,-3,-1,-8],[-1,3,1,0,-5,1,0,-2,0,-2,-3,5,0,-5,-1,0,0,-3,-4,-2,1,0,-1,-8],[-1,0,-2,-3,-5,-1,-2,-3,-2,2,4,0,6,0,-2,-2,-1,-4,-2,2,-2,-2,-1,-8],[-3,-4,-3,-6,-4,-5,-5,-5,-2,1,2,-5,0,9,-5,-3,-3,0,7,-1,-4,-5,-2,-8],[1,0,0,-1,-3,0,-1,0,0,-2,-3,-1,-2,-5,6,1,0,-6,-5,-1,-1,0,-1,-8],[1,0,1,0,0,-1,0,1,-1,-1,-3,0,-2,-3,1,2,1,-2,-3,-1,0,0,0,-8],[1,-1,0,0,-2,-1,0,0,-1,0,-2,0,-1,-3,0,1,3,-5,-3,0,0,-1,0,-8],[-6,2,-4,-7,-8,-5,-7,-7,-3,-5,-2,-3,-4,0,-6,-2,-5,17,0,-6,-5,-6,-4,-8],[-3,-4,-2,-4,0,-4,-4,-5,0,-1,-1,-4,-2,7,-5,-3,-3,0,10,-2,-3,-4,-2,-8],[0,-2,-2,-2,-2,-2,-2,-1,-2,4,2,-2,2,-1,-1,-1,0,-6,-2,4,-2,-2,-1,-8],[0,-1,2,3,-4,1,3,0,1,-2,-3,1,-2,-4,-1,0,0,-5,-3,-2,3,2,-1,-8],[0,0,1,3,-5,3,3,0,2,-2,-3,0,-2,-5,0,0,-1,-6,-4,-2,2,3,-1,-8],[0,-1,0,-1,-3,-1,-1,-1,-1,-1,-1,-1,-1,-2,-1,0,0,-4,-2,-1,-1,-1,-1,-8],[-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,1]];SCHNEIDER=[[11.6,-2.7,9.7,-1.7,-2.7,-6.4,-3.9,-5.6,5.1,-5,3.6,-4.2,-6.3,-13,-7.1,-11.5,.4,-6,-1.9,-5.3,-8.5,-11.2,-8.9,-10.8,2.1,0,1.4,.2,-10.2,-13.5,-13,-12.5,-2.6,-8.5,-5,-8.1,-6.3,-9.9,-7.5,-9,-7.1,-10.2,-8.2,-9.2,-8.2,-12.5,-11.1,-11.4,-50,-14.8,-50,-13.8,-7.3,-10.1,-8.4,-9.1,-50,-13,-13.5,-12.4,-10.7,-18.1,-11.8,-17.2],[-2.7,13,-3.3,10.9,-3.5,-.4,-3.3,-1.8,-5.4,4.6,-5.5,3,-10.2,-7.9,-9.9,-9.6,-5,.5,-5.5,-1,-10.3,-8.1,-9.4,-9.6,-8.1,-5,-7.3,-6.3,-13.4,-11.3,-14.4,-12.9,-6.3,.8,-6.4,-1.1,-7.4,-5,-6.2,-6.5,-5.6,-1.6,-4.7,-3,-10.8,-8.7,-11.9,-10,-50,-6.2,-50,-7.5,-6.3,-4.3,-6.2,-5.4,-50,-7,-16.3,-8.2,-13.2,-12.3,-13.1,-13.3],[9.7,-3.3,11.6,-2.8,-4.5,-6.7,-3.1,-6.9,3.3,-5.5,4.8,-5.1,-8.9,-13.2,-5.7,-12.6,-1.5,-6.1,-.6,-6.1,-10,-11.8,-8.6,-11.9,1.2,.5,2.2,.1,-11.8,-14,-11.9,-13.4,-4.9,-9.1,-3.4,-8.9,-8,-10,-7.2,-10,-9.1,-10.2,-7.1,-9.9,-10.1,-13,-10.6,-12.7,-50,-14.9,-50,-14.4,-8.9,-10.8,-8.9,-10.4,-50,-13.1,-11.8,-13,-12.4,-19.4,-11.5,-17.8],[-1.7,10.9,-2.8,12.9,-2.7,-2.2,-2.8,.2,-4.8,2.9,-5.2,5.2,-9.1,-9.5,-9,-7,-4,-1,-5,1,-9,-8.8,-8.9,-7.7,-7,-6.8,-7.1,-4.3,-12.4,-12.9,-13.9,-10,-4.9,-.7,-5.6,1.4,-6,-6.5,-6.2,-4.8,-5.1,-3.2,-5,-1.2,-9.8,-9.9,-11.3,-8.2,-50,-7.6,-50,-5.1,-5.5,-5.8,-5.9,-4.2,-50,-8.3,-15.5,-5.9,-11.6,-14.2,-12,-11.6],[-2.7,-3.5,-4.5,-2.7,11.7,9,10.6,9.6,-3.2,-.7,-5.1,-.4,.7,-4.6,-.4,-3.6,-4.8,-8.9,-6.5,-7.8,-1.4,-4.1,-2.9,-3.3,-8,-9.1,-8,-8.2,-6,-9.3,-7.7,-8.5,-6.4,-10.1,-7.5,-8.6,2.8,-.7,.9,.1,-5.9,-7.3,-6.5,-6.5,-.4,-3.9,-2.6,-3.1,-50,-14.6,-50,-12.6,2.9,.1,1.8,1,-50,-9.2,-13.6,-7.7,-4.8,-12.2,-6.2,-11],[-6.4,-.4,-6.7,-2.2,9,12.3,9.8,9.6,-7.1,2.4,-7.2,.3,-2.9,-1.2,-3,-3.3,-7.6,-6.7,-8.1,-7.9,-4.9,-1.9,-4.5,-3.8,-9.5,-7.8,-9.3,-8.9,-9.4,-7.1,-9,-9,-9.4,-7.5,-9.3,-9.2,-.7,2.6,.2,-.1,-8,-4.6,-7.7,-6.1,-3.6,-1,-4.1,-3.1,-50,-11.6,-50,-11.6,.2,2.3,.4,.5,-50,-6.5,-15.3,-7.8,-8.4,-9.5,-8.3,-11.1],[-3.9,-3.3,-3.1,-2.8,10.6,9.8,12.2,9.8,-4.9,.1,-3.6,-.2,-1.7,-4.1,.9,-3.5,-5.9,-8.9,-5.6,-8.5,-3.9,-3.9,-2.2,-4.5,-7.3,-7.5,-6.4,-8.5,-7.1,-8.2,-6.7,-7.8,-7.9,-9.1,-7.1,-9.4,.9,-.2,2.5,-.3,-6.9,-6.5,-5.5,-6.8,-1.7,-3.4,-1.7,-2.8,-50,-13,-50,-11.5,1.5,.7,2.7,.6,-50,-8.9,-12.1,-7.4,-6.1,-11.5,-5.4,-10.4],[-5.6,-1.8,-6.9,.2,9.6,9.6,9.8,11.6,-6.6,.9,-7.2,2.5,-2.3,-3.4,-2.3,-.6,-6.5,-8.2,-8,-6.3,-3.7,-3.5,-3.9,-1.6,-9.9,-8.9,-9.6,-7,-8.6,-8.9,-8.8,-6.8,-8.6,-8.2,-8.8,-6.8,.3,.1,.2,2.4,-7.4,-6.2,-6.9,-4.4,-2.9,-2.9,-3.5,-.9,-50,-12.2,-50,-10.1,1.2,.6,1.2,2.4,-50,-7.6,-16.1,-5.8,-7.2,-10.8,-7.4,-9],[5.1,-5.4,3.3,-4.8,-3.2,-7.1,-4.9,-6.6,13.3,-2.8,11.2,-1.9,-5.7,-12.5,-7.2,-11.6,-.7,-4.8,-3.1,-4.3,-10,-11.6,-8.8,-11.7,10.5,7.7,9.1,8.5,-9.8,-12.7,-11.7,-11.8,-6.3,-11.4,-8.8,-11,-7.5,-10.3,-8.3,-9.9,-1.9,-6.7,-4.1,-6.4,-7.9,-12.5,-11.4,-11.7,-50,-14,-50,-13.2,-8.5,-10.4,-9.1,-9.6,-50,-9.8,-7.7,-8.8,-10.3,-17.9,-11.8,-16],[-5,4.6,-5.5,2.9,-.7,2.4,.1,.9,-2.8,12.8,-2.6,11,-8.4,-6.3,-8.3,-7.7,-6.1,-2.9,-6.5,-4.2,-8.5,-5.9,-7.5,-7.7,-5.5,-2.4,-5.5,-4.1,-12.9,-10.3,-12.7,-11.3,-7.4,-3.1,-7.4,-4.9,-4.4,-1.8,-3.5,-3.5,-1.6,3,-.8,.9,-8.4,-6.3,-9.6,-7.3,-50,-9,-50,-9.7,-2.3,-.2,-1.2,-1.5,-50,-.7,-13.3,-2,-11.8,-11.9,-12.3,-12.7],[3.6,-5.5,4.8,-5.2,-5.1,-7.2,-3.6,-7.2,11.2,-2.6,13.4,-2.1,-7.7,-12.5,-5.3,-11.9,-2.2,-4.4,-1.9,-4.8,-10.2,-11.5,-8.1,-12,9.3,8.2,10,8,-10.8,-11.9,-10.7,-12.4,-8.2,-11.8,-6.9,-11.5,-8.4,-9.9,-7.1,-10.6,-4.7,-6.8,-1.2,-7,-9.8,-11.6,-9.6,-12.1,-50,-14.1,-50,-12.7,-10,-10.8,-8.8,-10.5,-50,-9.2,-4.2,-9.3,-11,-18.2,-11.1,-16.1],[-4.2,3,-5.1,5.2,-.4,.3,-.2,2.5,-1.9,11,-2.1,13.2,-7.6,-8.5,-8,-5.3,-5.6,-4.5,-6.8,-2.4,-7.8,-7.9,-7.9,-6.2,-5.7,-5.1,-5.4,-2.1,-12.4,-12.3,-13.1,-10.1,-6.6,-4.4,-6.9,-2.6,-3.6,-3.8,-3.7,-2,-1.4,.8,-.9,3,-8.2,-8.1,-9.2,-5.8,-50,-10.1,-50,-7.4,-1.7,-2,-1.5,-.5,-50,-2.1,-12.6,-.4,-11.6,-13.9,-11.4,-11.1],[-6.3,-10.2,-8.9,-9.1,.7,-2.9,-1.7,-2.3,-5.7,-8.4,-7.7,-7.6,13.2,9.6,3.5,9.7,-8.7,-12.4,-10.7,-10.7,-7.8,-10.2,-8.8,-9.6,-9.5,-11.9,-10.9,-10.5,2.3,-.4,-.2,-.3,-9.7,-15.5,-11.4,-13.7,-3,-6.4,-4.1,-5.4,-9.6,-11.9,-10.5,-11.8,6.2,3.3,3.7,3.6,-50,-13.6,-50,-11.9,-5.6,-8.8,-7.2,-8.9,-50,-12.4,-14.1,-11.6,2.8,-6.4,.5,-5.2],[-13,-7.9,-13.2,-9.5,-4.6,-1.2,-4.1,-3.4,-12.5,-6.3,-12.5,-8.5,9.6,12.7,.2,10.5,-12.4,-11.6,-13.2,-12,-12.4,-10.1,-11.6,-12,-15.1,-13.1,-14.3,-13.4,-1.4,1.4,-1.6,-.5,-14.9,-14.3,-15.2,-16.8,-7.7,-4.7,-6.3,-6.6,-14.6,-10.8,-12.8,-13,2.3,6,2.5,3.6,-50,-11.2,-50,-11.9,-10.5,-9.2,-10.5,-10.5,-50,-10.3,-16.2,-11.3,-1.7,-3.7,-2.5,-5.4],[-7.1,-9.9,-5.7,-9,-.4,-3,.9,-2.3,-7.2,-8.3,-5.3,-8,3.5,.2,14.3,1,-7.3,-11.2,-6.9,-9.7,-8.5,-10.2,-7.7,-9.8,-10,-10.4,-8.4,-10.2,1,-.6,1.7,-.5,-11.1,-14.8,-9.7,-14.5,-3.7,-5.8,-3.1,-5.6,-10.4,-11.5,-8.2,-11.1,.6,-1.6,1.6,-1.1,-50,-12.4,-50,-11.5,-5.5,-8,-4.9,-7.2,-50,-12.4,-10.3,-11.6,.7,-6.8,2.4,-6],[-11.5,-9.6,-12.6,-7,-3.6,-3.3,-3.5,-.6,-11.6,-7.7,-11.9,-5.3,9.7,10.5,1,12.6,-12,-12.2,-12.5,-9.7,-11.1,-11.2,-11.9,-9.4,-12.9,-14.3,-14,-11.9,-1,-.4,-1.6,1.2,-13.9,-15.4,-13.7,-12.6,-6.2,-6.7,-6.3,-4.4,-13,-12.2,-13,-10.4,2.9,3.8,2.5,5.8,-50,-12.5,-50,-10.2,-9.6,-9.7,-9.6,-8.3,-50,-11.6,-15.4,-9.4,-1.1,-5.4,-1.6,-3.3],[.4,-5,-1.5,-4,-4.8,-7.6,-5.9,-6.5,-.7,-6.1,-2.2,-5.6,-8.7,-12.4,-7.3,-12,12.8,2.3,10.2,3,0,-3.4,-.7,-3.2,2.5,-.8,.9,.2,-3,-7.2,-5.7,-6.1,-.2,-6.6,-1.8,-6,-5.3,-8.2,-5.7,-7.6,-6.7,-9.6,-7.5,-9.3,-7.1,-10.5,-9.6,-9.4,-50,-8.1,-50,-7.2,-4.3,-6.8,-5.7,-6.3,-50,-9.5,-9.6,-8.9,-6.2,-12.8,-6.8,-11.8],[-6,.5,-6.1,-1,-8.9,-6.7,-8.9,-8.2,-4.8,-2.9,-4.4,-4.5,-12.4,-11.6,-11.2,-12.2,2.3,14.6,1.9,12.9,-5.5,-2.6,-4.1,-4.7,-1.2,3,-1.1,1.6,-8,-4.7,-8.7,-6,-8.2,-4.7,-7.8,-6.7,-10,-8.3,-8.9,-9.9,-10.8,-7.1,-10,-9.2,-11.6,-10.1,-12.3,-11.9,-50,2.2,-50,.9,-7.9,-5.9,-7.4,-6.9,-50,-4.6,-11.6,-5.6,-9.7,-5.9,-9.9,-7.3],[-1.9,-5.5,-.6,-5,-6.5,-8.1,-5.6,-8,-3.1,-6.5,-1.9,-6.8,-10.7,-13.2,-6.9,-12.5,10.2,1.9,11.9,2.1,-2.3,-4.1,-.5,-4.6,-.1,-.9,2.4,-.8,-5.1,-6.9,-4.8,-6.7,-2.3,-7.1,-.8,-7.2,-7.2,-8,-5.6,-8.5,-9.4,-9.7,-7.2,-9.8,-9.2,-11.1,-9.5,-10.7,-50,-8.7,-50,-8.6,-6.1,-7.5,-5.5,-7.7,-50,-10.4,-7.7,-10,-7.3,-13.6,-6.4,-13.3],[-5.3,-1,-6.1,1,-7.8,-7.9,-8.5,-6.3,-4.3,-4.2,-4.8,-2.4,-10.7,-12,-9.7,-9.7,3,12.9,2.1,14.7,-4.9,-3.8,-4,-2.4,-1,.8,-1.3,3.4,-7.6,-5.7,-8.1,-3.5,-6.8,-5.8,-7.2,-4.2,-8.9,-10.2,-8.4,-8.2,-9.9,-8.4,-9.7,-6.4,-11.1,-11.1,-11.8,-10,-50,.4,-50,2.6,-7.2,-7,-7.4,-5.1,-50,-5.7,-9.8,-3.2,-8.4,-7.4,-8.9,-5.9],[-8.5,-10.3,-10,-9,-1.4,-4.9,-3.9,-3.7,-10,-8.5,-10.2,-7.8,-7.8,-12.4,-8.5,-11.1,0,-5.5,-2.3,-4.9,12.6,10,11.1,10.5,-6,-8.3,-6.9,-7.5,-2.2,-7.4,-5.3,-5.9,-8.9,-12.5,-9.4,-11.6,-.7,-3.9,-2.3,-3,-9.1,-9.8,-9.2,-9.5,-5.6,-9,-8,-8.5,-50,-15.3,-50,-14.1,2.3,-1.4,.3,-.5,-50,-13.6,-14.3,-11.5,-5.3,-13.7,-6.1,-12.7],[-11.2,-8.1,-11.8,-8.8,-4.1,-1.9,-3.9,-3.5,-11.6,-5.9,-11.5,-7.9,-10.2,-10.1,-10.2,-11.2,-3.4,-2.6,-4.1,-3.8,10,13.1,10.7,10.6,-8.1,-5.2,-8,-6.7,-6.1,-3.7,-7.5,-5.6,-11.1,-10.3,-10.6,-11.9,-3.2,-1,-2.2,-2.8,-10.5,-8.1,-9.4,-9.5,-8.3,-6.9,-9.4,-8.8,-50,-11.3,-50,-12.8,-.6,2.2,-.3,.1,-50,-10.1,-17.5,-11.1,-8.6,-9.9,-8.6,-11.9],[-8.9,-9.4,-8.6,-8.9,-2.9,-4.5,-2.2,-3.9,-8.8,-7.5,-8.1,-7.9,-8.8,-11.6,-7.7,-11.9,-.7,-4.1,-.5,-4,11.1,10.7,13.2,10.4,-5.7,-5.8,-3.5,-6.1,-3.6,-6.5,-3.3,-5.5,-9.4,-11,-8.7,-11.2,-1.8,-2.7,.7,-3,-9.1,-8.2,-7.3,-9.4,-7.2,-8.2,-7.2,-8.2,-50,-13.2,-50,-13.3,.5,-.9,1.8,-.6,-50,-11.4,-11.1,-10.5,-6.1,-12.9,-5,-11.9],[-10.8,-9.6,-11.9,-7.7,-3.3,-3.8,-4.5,-1.6,-11.7,-7.7,-12,-6.2,-9.6,-12,-9.8,-9.4,-3.2,-4.7,-4.6,-2.4,10.5,10.6,10.4,12.6,-8.2,-7.9,-9,-4.7,-6.1,-6,-7.5,-2.9,-10.9,-12.2,-11.2,-10.9,-2.4,-2.9,-2.7,-.9,-10.4,-9.7,-10.2,-8,-8.4,-9.1,-9.3,-6.5,-50,-13.3,-50,-11,-0,-.4,-.4,2.3,-50,-10.9,-17.2,-8.3,-8.3,-12.7,-7.8,-9.3],[2.1,-8.1,1.2,-7,-8,-9.5,-7.3,-9.9,10.5,-5.5,9.3,-5.7,-9.5,-15.1,-10,-12.9,2.5,-1.2,-.1,-1,-6,-8.1,-5.7,-8.2,13.8,11.3,11.8,12.1,-6,-9.1,-9,-9.5,-8.9,-13.4,-10,-13.1,-9.9,-11.7,-9.8,-12.8,-5.9,-9.4,-6.5,-8.1,-10.7,-14,-13.3,-13.9,-50,-11.9,-50,-9.7,-8.9,-10.8,-9,-11.1,-50,-6.5,-5.3,-6.3,-10.5,-16.2,-10.4,-15.2],[0,-5,.5,-6.8,-9.1,-7.8,-7.5,-8.9,7.7,-2.4,8.2,-5.1,-11.9,-13.1,-10.4,-14.3,-.8,3,-.9,.8,-8.3,-5.2,-5.8,-7.9,11.3,15,11.2,12.8,-9.7,-5.3,-9.2,-7.8,-11.7,-10.6,-10.1,-12.2,-11.7,-8.8,-8.9,-11.8,-9.3,-5,-8,-8.2,-13.6,-11.4,-12.8,-13,-50,-7.2,-50,-8.4,-11,-7.7,-8.7,-10.2,-50,-1.5,-7.1,-4.9,-11.2,-11.6,-11.6,-15],[1.4,-7.3,2.2,-7.1,-8,-9.3,-6.4,-9.6,9.1,-5.5,10,-5.4,-10.9,-14.3,-8.4,-14,.9,-1.1,2.4,-1.3,-6.9,-8,-3.5,-9,11.8,11.2,13.4,11.4,-7.3,-8.8,-6.5,-8.5,-10,-12.5,-7.8,-12.5,-9.6,-11,-7.1,-10.7,-7.9,-8,-4.3,-9.4,-11.4,-12.3,-10.9,-12.9,-50,-11.8,-50,-11.2,-9.4,-9.8,-7.3,-10.5,-50,-6.2,-2.2,-6.7,-9.8,-15.2,-8.5,-14.9],[.2,-6.3,.1,-4.3,-8.2,-8.9,-8.5,-7,8.5,-4.1,8,-2.1,-10.5,-13.4,-10.2,-11.9,.2,1.6,-.8,3.4,-7.5,-6.7,-6.1,-4.7,12.1,12.8,11.4,14.7,-8.7,-7.4,-9.4,-5.3,-9.9,-11.8,-10.5,-10.3,-9.9,-10.1,-9.3,-9.3,-8.1,-7.2,-8,-5.2,-12,-12.1,-12.6,-10.9,-50,-7.9,-50,-5.3,-9.3,-8.8,-8.9,-7,-50,-3.6,-7.1,-1.2,-10.2,-12.7,-9.9,-11],[-10.2,-13.4,-11.8,-12.4,-6,-9.4,-7.1,-8.6,-9.8,-12.9,-10.8,-12.4,2.3,-1.4,1,-1,-3,-8,-5.1,-7.6,-2.2,-6.1,-3.6,-6.1,-6,-9.7,-7.3,-8.7,11.2,7.9,8.9,8.1,-12.1,-17.4,-13.2,-16.8,-6.3,-9.5,-7.5,-8.8,-12.7,-15.2,-13.1,-14.2,0,-3.1,-1.8,-3.1,-50,-10.7,-50,-9.3,-4.6,-8.9,-5.9,-8.3,-50,-12.8,-9.6,-10.6,9.5,-3.2,8.2,-2.8],[-13.5,-11.3,-14,-12.9,-9.3,-7.1,-8.2,-8.9,-12.7,-10.3,-11.9,-12.3,-.4,1.4,-.6,-.4,-7.2,-4.7,-6.9,-5.7,-7.4,-3.7,-6.5,-6,-9.1,-5.3,-8.8,-7.4,7.9,11.9,7.8,9.3,-15.2,-15.1,-14.6,-17.2,-9.7,-7.3,-8.2,-9.2,-15,-12.8,-14.1,-14.9,-2.8,.2,-2.9,-2.3,-50,-7.4,-50,-8.7,-9.4,-7.3,-9.4,-9.4,-50,-8,-11.9,-9.7,6.5,.5,6.4,-1.8],[-13,-14.4,-11.9,-13.9,-7.7,-9,-6.7,-8.8,-11.7,-12.7,-10.7,-13.1,-.2,-1.6,1.7,-1.6,-5.7,-8.7,-4.8,-8.1,-5.3,-7.5,-3.3,-7.5,-9,-9.2,-6.5,-9.4,8.9,7.8,10.1,7.8,-14.3,-17.7,-13,-17.8,-8,-9.4,-6.2,-9.2,-15.1,-14.9,-12.2,-14.9,-1.8,-3.2,-.8,-3.2,-50,-10.8,-50,-9.9,-7.3,-9.6,-6.4,-9.4,-50,-12.3,-8.7,-11.3,7.6,-3.3,8.7,-2.9],[-12.5,-12.9,-13.4,-10,-8.5,-9,-7.8,-6.8,-11.8,-11.3,-12.4,-10.1,-.3,-.5,-.5,1.2,-6.1,-6,-6.7,-3.5,-5.9,-5.6,-5.5,-2.9,-9.5,-7.8,-8.5,-5.3,8.1,9.3,7.8,11.8,-14.4,-15.7,-14.5,-14.6,-8.4,-8.7,-7.9,-7.1,-14.3,-13.8,-13.8,-12.3,-2.4,-2.2,-2.9,-.2,-50,-8.9,-50,-7.1,-8.1,-9.1,-8.7,-6.6,-50,-9.7,-11.4,-8,6.8,-1.8,6.9,.4],[-2.6,-6.3,-4.9,-4.9,-6.4,-9.4,-7.9,-8.6,-6.3,-7.4,-8.2,-6.6,-9.7,-14.9,-11.1,-13.9,-.2,-8.2,-2.3,-6.8,-8.9,-11.1,-9.4,-10.9,-8.9,-11.7,-10,-9.9,-12.1,-15.2,-14.3,-14.4,11.1,2.9,9.2,3.5,-3,-7,-4.3,-6.2,-2.2,-6.6,-3.7,-5.7,-6,-10.4,-8.6,-9.5,-50,-15.5,-50,-13.9,-7.8,-10.5,-8.7,-9.6,-50,-16.5,-17.1,-14.8,-12.1,-18.9,-12.4,-17.4],[-8.5,.8,-9.1,-.7,-10.1,-7.5,-9.1,-8.2,-11.4,-3.1,-11.8,-4.4,-15.5,-14.3,-14.8,-15.4,-6.6,-4.7,-7.1,-5.8,-12.5,-10.3,-11,-12.2,-13.4,-10.6,-12.5,-11.8,-17.4,-15.1,-17.7,-15.7,2.9,12.5,3.1,10.3,-7.7,-5.2,-6.2,-7.3,-5.4,-1.7,-5.4,-3.7,-11.6,-9.1,-13,-10.8,-50,-10.3,-50,-11.2,-9.8,-8.3,-9.1,-9.7,-50,-12.7,-20.6,-13.1,-16,-16.6,-17,-18.4],[-5,-6.4,-3.4,-5.6,-7.5,-9.3,-7.1,-8.8,-8.8,-7.4,-6.9,-6.9,-11.4,-15.2,-9.7,-13.7,-1.8,-7.8,-.8,-7.2,-9.4,-10.6,-8.7,-11.2,-10,-10.1,-7.8,-10.5,-13.2,-14.6,-13,-14.5,9.2,3.1,10.8,3,-4.5,-6.7,-2.7,-6.7,-5,-6.8,-2.5,-6.7,-7.5,-10.4,-7.4,-10.2,-50,-15.5,-50,-14.2,-8.9,-10.2,-8.5,-10,-50,-15.6,-15.3,-15.5,-13,-18.8,-12.6,-18.3],[-8.1,-1.1,-8.9,1.4,-8.6,-9.2,-9.4,-6.8,-11,-4.9,-11.5,-2.6,-13.7,-16.8,-14.5,-12.6,-6,-6.7,-7.2,-4.2,-11.6,-11.9,-11.2,-10.9,-13.1,-12.2,-12.5,-10.3,-16.8,-17.2,-17.8,-14.6,3.5,10.3,3,12.4,-6.9,-7.5,-6.8,-4.9,-5.4,-4.2,-5.4,-1.3,-10.8,-11.5,-12.4,-8.2,-50,-12.5,-50,-8.9,-9.2,-10,-9.4,-7.9,-50,-14.3,-19.9,-11.4,-16.2,-19.2,-15.8,-15.9],[-6.3,-7.4,-8,-6,2.8,-.7,.9,.3,-7.5,-4.4,-8.4,-3.6,-3,-7.7,-3.7,-6.2,-5.3,-10,-7.2,-8.9,-.7,-3.2,-1.8,-2.4,-9.9,-11.7,-9.6,-9.9,-6.3,-9.7,-8,-8.4,-3,-7.7,-4.5,-6.9,11.3,8.2,9.4,9.1,-1,-3.3,-1.8,-2.4,1.5,-2.1,-.4,-1.1,-50,-14.5,-50,-12.9,2.8,-0,1.4,.7,-50,-8.7,-14.1,-7.5,-5.2,-12.5,-6.5,-10.7],[-9.9,-5,-10,-6.5,-.7,2.6,-.2,.1,-10.3,-1.8,-9.9,-3.8,-6.4,-4.7,-5.8,-6.7,-8.2,-8.3,-8,-10.2,-3.9,-1,-2.7,-2.9,-11.7,-8.8,-11,-10.1,-9.5,-7.3,-9.4,-8.7,-7,-5.2,-6.7,-7.5,8.2,11.6,8.8,9.1,-3.7,-.9,-3.1,-3,-2,1.2,-2.3,-1.3,-50,-12.1,-50,-12.6,.1,2.5,.7,.6,-50,-6,-14.8,-7.5,-8.6,-9.4,-8.5,-11.2],[-7.5,-6.2,-7.2,-6.2,.9,.2,2.5,.2,-8.3,-3.5,-7.1,-3.7,-4.1,-6.3,-3.1,-6.3,-5.7,-8.9,-5.6,-8.4,-2.3,-2.2,.7,-2.7,-9.8,-8.9,-7.1,-9.3,-7.5,-8.2,-6.2,-7.9,-4.3,-6.2,-2.7,-6.8,9.4,8.8,12.1,8.8,-2.1,-2,.1,-2.4,0,-1.1,1.3,-.8,-50,-11.9,-50,-12.6,1.2,.7,3.5,.8,-50,-7.1,-12.4,-7.1,-7.1,-10.6,-5,-10.6],[-9,-6.5,-10,-4.8,.1,-.1,-.3,2.4,-9.9,-3.5,-10.6,-2,-5.4,-6.6,-5.6,-4.4,-7.6,-9.9,-8.5,-8.2,-3,-2.8,-3,-.9,-12.8,-11.8,-10.7,-9.3,-8.8,-9.2,-9.2,-7.1,-6.2,-7.3,-6.7,-4.9,9.1,9.1,8.8,11.2,-3.1,-3,-3.3,-1,-1.1,-1.4,-2,1.2,-50,-12.8,-50,-10.9,.8,.5,.7,2.3,-50,-7.5,-16.5,-5.9,-7.8,-11.1,-7.8,-9],[-7.1,-5.6,-9.1,-5.1,-5.9,-8,-6.9,-7.4,-1.9,-1.6,-4.7,-1.4,-9.6,-14.6,-10.4,-13,-6.7,-10.8,-9.4,-9.9,-9.1,-10.5,-9.1,-10.4,-5.9,-9.3,-7.9,-8.1,-12.7,-15,-15.1,-14.3,-2.2,-5.4,-5,-5.4,-1,-3.7,-2.1,-3.1,12.8,9.6,11.1,10.1,-4.8,-9.4,-8.1,-8.6,-50,-18.3,-50,-15.4,-5.9,-7.5,-6.6,-7.1,-50,-9.5,-11.7,-8.4,-12.5,-17.3,-13.2,-15.4],[-10.2,-1.6,-10.2,-3.2,-7.3,-4.6,-6.5,-6.2,-6.7,3,-6.8,.8,-11.9,-10.8,-11.5,-12.2,-9.6,-7.1,-9.7,-8.4,-9.8,-8.1,-8.2,-9.7,-9.4,-5,-8,-7.2,-15.2,-12.8,-14.9,-13.8,-6.6,-1.7,-6.8,-4.2,-3.3,-.9,-2,-3,9.6,12.8,9.7,10.5,-8.5,-5.6,-9.3,-7.8,-50,-12.7,-50,-13.8,-6.8,-5.1,-5.3,-6.5,-50,-4.1,-12.8,-5.8,-14.4,-14.1,-13.6,-14.8],[-8.2,-4.7,-7.1,-5,-6.5,-7.7,-5.5,-6.9,-4.1,-.8,-1.2,-.9,-10.5,-12.8,-8.2,-13,-7.5,-10,-7.2,-9.7,-9.2,-9.4,-7.3,-10.2,-6.5,-8,-4.3,-8,-13.1,-14.1,-12.2,-13.8,-3.7,-5.4,-2.5,-5.4,-1.8,-3.1,.1,-3.3,11.1,9.7,12.9,9.8,-5.5,-8.1,-5.4,-7.8,-50,-16.4,-50,-14.8,-5.9,-7.1,-4.7,-7.2,-50,-8.4,-6.4,-8.1,-12.1,-16.2,-10.3,-15.8],[-9.2,-3,-9.9,-1.2,-6.5,-6.1,-6.8,-4.4,-6.4,.9,-7,3,-11.8,-13,-11.1,-10.4,-9.3,-9.2,-9.8,-6.4,-9.5,-9.5,-9.4,-8,-8.1,-8.2,-9.4,-5.2,-14.2,-14.9,-14.9,-12.3,-5.7,-3.7,-6.7,-1.3,-2.4,-3,-2.4,-1,10.1,10.5,9.8,13.1,-7.2,-8,-8.4,-5,-50,-14.7,-50,-11.4,-6.3,-6.7,-5.8,-5,-50,-6.1,-13.4,-3.6,-13,-16,-13.7,-13.3],[-8.2,-10.8,-10.1,-9.8,-.4,-3.6,-1.7,-2.9,-7.9,-8.4,-9.8,-8.2,6.2,2.3,.6,2.9,-7.1,-11.6,-9.2,-11.1,-5.6,-8.3,-7.2,-8.4,-10.7,-13.6,-11.4,-12,0,-2.8,-1.8,-2.4,-6,-11.6,-7.5,-10.8,1.5,-2,0,-1.1,-4.8,-8.5,-5.5,-7.2,11.9,8.6,10,9,-50,-14.2,-50,-12.8,-4.1,-7.4,-5.7,-6.5,-50,-11,-14.3,-9.9,1.4,-7.9,-.7,-6.8],[-12.5,-8.7,-13,-9.9,-3.9,-1,-3.4,-2.9,-12.5,-6.3,-11.6,-8.1,3.3,6,-1.6,3.8,-10.5,-10.1,-11.1,-11.1,-9,-6.9,-8.2,-9.1,-14,-11.4,-12.3,-12.1,-3.1,.2,-3.2,-2.2,-10.4,-9.1,-10.4,-11.5,-2.1,1.2,-1.1,-1.4,-9.4,-5.6,-8.1,-8,8.6,12.4,8.6,9.5,-50,-10.4,-50,-11.6,-7.2,-5.7,-7.5,-7.4,-50,-8.6,-15.7,-9.7,-3,-3.7,-3.2,-5.9],[-11.1,-11.9,-10.6,-11.3,-2.6,-4.1,-1.7,-3.5,-11.4,-9.6,-9.6,-9.2,3.7,2.5,1.6,2.5,-9.6,-12.3,-9.5,-11.8,-8,-9.4,-7.2,-9.3,-13.3,-12.8,-10.9,-12.6,-1.8,-2.9,-.8,-2.9,-8.6,-13,-7.4,-12.4,-.4,-2.3,1.3,-2,-8.1,-9.3,-5.4,-8.4,10,8.6,11.4,8.9,-50,-13.7,-50,-13.2,-6.1,-8.1,-5.5,-7.5,-50,-11.3,-12.7,-10.1,-1.6,-7.8,-.3,-7.2],[-11.4,-10,-12.7,-8.2,-3.1,-3.1,-2.8,-.9,-11.7,-7.3,-12.1,-5.8,3.6,3.6,-1.1,5.8,-9.4,-11.9,-10.7,-10,-8.5,-8.8,-8.2,-6.5,-13.9,-13,-12.9,-10.9,-3.1,-2.3,-3.2,-.2,-9.5,-10.8,-10.2,-8.2,-1.1,-1.3,-.8,1.2,-8.6,-7.8,-7.8,-5,9,9.5,8.9,12,-50,-13,-50,-10.3,-6.2,-7,-7.1,-5.4,-50,-9.3,-14,-8.2,-2.4,-6.3,-2.4,-3.9],[-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,33.3,-50,30.6,-50,-50,-50,-50,-50,29.2,-50,-50,-50,-50,-50,-50,-50],[-14.8,-6.2,-14.9,-7.6,-14.6,-11.6,-13,-12.2,-14,-9,-14.1,-10.1,-13.6,-11.2,-12.4,-12.5,-8.1,2.2,-8.7,.4,-15.3,-11.3,-13.2,-13.3,-11.9,-7.2,-11.8,-7.9,-10.7,-7.4,-10.8,-8.9,-15.5,-10.3,-15.5,-12.5,-14.5,-12.1,-11.9,-12.8,-18.3,-12.7,-16.4,-14.7,-14.2,-10.4,-13.7,-13,-50,15.1,-50,13.3,-9.9,-5.8,-8.9,-7.6,-50,-1.5,-7.8,-3,-8.1,3.6,-9.4,2],[-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,30.6,-50,35.2,-50,-50,-50,-50,-50,28.5,-50,-50,-50,-50,-50,-50,-50],[-13.8,-7.5,-14.4,-5.1,-12.6,-11.6,-11.5,-10.1,-13.2,-9.7,-12.7,-7.4,-11.9,-11.9,-11.5,-10.2,-7.2,.9,-8.6,2.6,-14.1,-12.8,-13.3,-11,-9.7,-8.4,-11.2,-5.3,-9.3,-8.7,-9.9,-7.1,-13.9,-11.2,-14.2,-8.9,-12.9,-12.6,-12.6,-10.9,-15.4,-13.8,-14.8,-11.4,-12.8,-11.6,-13.2,-10.3,-50,13.3,-50,15.2,-8.6,-7,-8.4,-4.8,-50,-3,-7.1,-.1,-7.3,2.3,-8.7,3.9],[-7.3,-6.3,-8.9,-5.5,2.9,.2,1.5,1.2,-8.5,-2.3,-10,-1.7,-5.6,-10.5,-5.5,-9.6,-4.3,-7.9,-6.1,-7.2,2.3,-.6,.5,-0,-8.9,-11,-9.4,-9.3,-4.6,-9.4,-7.3,-8.1,-7.8,-9.8,-8.9,-9.2,2.8,.1,1.2,.8,-5.9,-6.8,-5.9,-6.3,-4.1,-7.2,-6.1,-6.2,-50,-9.9,-50,-8.6,12.5,9.4,11,9.8,-50,-4.8,-8.7,-3.5,-0,-8.6,-2.1,-7],[-10.1,-4.3,-10.8,-5.8,.1,2.3,.7,.6,-10.4,-.2,-10.8,-2,-8.8,-9.2,-8,-9.7,-6.8,-5.9,-7.5,-7,-1.4,2.2,-.9,-.4,-10.8,-7.7,-9.8,-8.8,-8.9,-7.3,-9.6,-9.1,-10.5,-8.3,-10.2,-10,-0,2.5,.7,.5,-7.5,-5.1,-7.1,-6.7,-7.4,-5.7,-8.1,-7,-50,-5.8,-50,-7,9.4,12.7,10.1,10,-50,-1.5,-11.3,-3.3,-5.4,-4.2,-5.6,-6.8],[-8.4,-6.2,-8.9,-5.9,1.8,.4,2.7,1.2,-9.1,-1.2,-8.8,-1.5,-7.2,-10.5,-4.9,-9.6,-5.7,-7.4,-5.5,-7.4,.3,-.3,1.8,-.4,-9,-8.7,-7.3,-8.9,-5.9,-9.4,-6.4,-8.7,-8.7,-9.1,-8.5,-9.4,1.4,.7,3.5,.7,-6.6,-5.3,-4.7,-5.8,-5.7,-7.5,-5.5,-7.1,-50,-8.9,-50,-8.4,11,10.1,13.2,10.2,-50,-4.2,-6.1,-3.6,-3.5,-8.4,-1.2,-6.8],[-9.1,-5.4,-10.4,-4.2,1,.5,.6,2.4,-9.6,-1.5,-10.5,-.5,-8.9,-10.5,-7.2,-8.3,-6.3,-6.9,-7.7,-5.1,-.5,.1,-.6,2.3,-11.1,-10.2,-10.5,-7,-8.3,-9.4,-9.4,-6.6,-9.6,-9.7,-10,-7.9,.7,.6,.8,2.3,-7.1,-6.5,-7.2,-5,-6.5,-7.4,-7.5,-5.4,-50,-7.6,-50,-4.8,9.8,10,10.2,12.1,-50,-3.1,-11.4,-.7,-4.6,-6.6,-4.9,-3.9],[-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,29.2,-50,28.5,-50,-50,-50,-50,-50,33.3,-50,-50,-50,-50,-50,-50,-50],[-13,-7,-13.1,-8.3,-9.2,-6.5,-8.9,-7.6,-9.8,-.7,-9.2,-2.1,-12.4,-10.3,-12.4,-11.6,-9.5,-4.6,-10.4,-5.7,-13.6,-10.1,-11.4,-10.9,-6.5,-1.5,-6.2,-3.6,-12.8,-8,-12.3,-9.7,-16.5,-12.7,-15.6,-14.3,-8.7,-6,-7.1,-7.5,-9.5,-4.1,-8.4,-6.1,-11,-8.6,-11.3,-9.3,-50,-1.5,-50,-3,-4.8,-1.5,-4.2,-3.1,-50,16.4,-5.1,14.2,-10.1,-4.3,-10,-5.4],[-13.5,-16.3,-11.8,-15.5,-13.6,-15.3,-12.1,-16.1,-7.7,-13.3,-4.2,-12.6,-14.1,-16.2,-10.3,-15.4,-9.6,-11.6,-7.7,-9.8,-14.3,-17.5,-11.1,-17.2,-5.3,-7.1,-2.2,-7.1,-9.6,-11.9,-8.7,-11.4,-17.1,-20.6,-15.3,-19.9,-14.1,-14.8,-12.4,-16.5,-11.7,-12.8,-6.4,-13.4,-14.3,-15.7,-12.7,-14,-50,-7.8,-50,-7.1,-8.7,-11.3,-6.1,-11.4,-50,-5.1,18.6,-4.8,-8.6,-8.1,-4.5,-7.3],[-12.4,-8.2,-13,-5.9,-7.7,-7.8,-7.4,-5.8,-8.8,-2,-9.3,-.4,-11.6,-11.3,-11.6,-9.4,-8.9,-5.6,-10,-3.2,-11.5,-11.1,-10.5,-8.3,-6.3,-4.9,-6.7,-1.2,-10.6,-9.7,-11.3,-8,-14.8,-13.1,-15.5,-11.4,-7.5,-7.5,-7.1,-5.9,-8.4,-5.8,-8.1,-3.6,-9.9,-9.7,-10.1,-8.2,-50,-3,-50,-.1,-3.5,-3.3,-3.6,-.7,-50,14.2,-4.8,16.4,-8.9,-5.8,-8.9,-3.4],[-10.7,-13.2,-12.4,-11.6,-4.8,-8.4,-6.1,-7.2,-10.3,-11.8,-11,-11.6,2.8,-1.7,.7,-1.1,-6.2,-9.7,-7.3,-8.4,-5.3,-8.6,-6.1,-8.3,-10.5,-11.2,-9.8,-10.2,9.5,6.5,7.6,6.8,-12.1,-16,-13,-16.2,-5.2,-8.6,-7.1,-7.8,-12.5,-14.4,-12.1,-13,1.4,-3,-1.6,-2.4,-50,-8.1,-50,-7.3,-0,-5.4,-3.5,-4.6,-50,-10.1,-8.6,-8.9,13.2,-.9,9.7,-.3],[-18.1,-12.3,-19.4,-14.2,-12.2,-9.5,-11.5,-10.8,-17.9,-11.9,-18.2,-13.9,-6.4,-3.7,-6.8,-5.4,-12.8,-5.9,-13.6,-7.4,-13.7,-9.9,-12.9,-12.7,-16.2,-11.6,-15.2,-12.7,-3.2,.5,-3.3,-1.8,-18.9,-16.6,-18.8,-19.2,-12.5,-9.4,-10.6,-11.1,-17.3,-14.1,-16.2,-16,-7.9,-3.7,-7.8,-6.3,-50,3.6,-50,2.3,-8.6,-4.2,-8.4,-6.6,-50,-4.3,-8.1,-5.8,-.9,14.2,-1.8,11.6],[-11.8,-13.1,-11.5,-12,-6.2,-8.3,-5.4,-7.4,-11.8,-12.3,-11.1,-11.4,.5,-2.5,2.4,-1.6,-6.8,-9.9,-6.4,-8.9,-6.1,-8.6,-5,-7.8,-10.4,-11.6,-8.5,-9.9,8.2,6.4,8.7,6.9,-12.4,-17,-12.6,-15.8,-6.5,-8.5,-5,-7.8,-13.2,-13.6,-10.3,-13.7,-.7,-3.2,-.3,-2.4,-50,-9.4,-50,-8.7,-2.1,-5.6,-1.2,-4.9,-50,-10,-4.5,-8.9,9.7,-1.8,11.3,-.9],[-17.2,-13.3,-17.8,-11.6,-11,-11.1,-10.4,-9,-16,-12.7,-16.1,-11.1,-5.2,-5.4,-6,-3.3,-11.8,-7.3,-13.3,-5.9,-12.7,-11.9,-11.9,-9.3,-15.2,-15,-14.9,-11,-2.8,-1.8,-2.9,.4,-17.4,-18.4,-18.3,-15.9,-10.7,-11.2,-10.6,-9,-15.4,-14.8,-15.8,-13.3,-6.8,-5.9,-7.2,-3.9,-50,2,-50,3.9,-7,-6.8,-6.8,-3.9,-50,-5.4,-7.3,-3.4,-.3,11.6,-.9,14.1]];TRANS=[[5,0,0,4],[0,5,4,0],[0,4,5,0],[4,0,0,5]];CONBLO={A:0,R:1,N:2,D:3,C:4,Q:5,E:6,G:7,H:8,I:9,L:10,K:11,M:12,F:13,P:14,S:15,T:16,W:17,Y:18,V:19,B:20,Z:21,X:22,"*":23};CONNUCL={A:0,T:1,C:2,G:3};CONSCHN={AAA:0,AAC:1,AAG:2,AAT:3,ACA:4,ACC:5,ACG:6,ACT:7,AGA:8,AGC:9,AGG:10,AGT:11,ATA:12,ATC:13,ATG:14,ATT:15,CAA:16,CAC:17,CAG:18,CAT:19,CCA:20,CCC:21,CCG:22,CCT:23,CGA:24,CGC:25,CGG:26,CGT:27,CTA:28,CTC:29,CTG:30,CTT:31,GAA:32,GAC:33,GAG:34,GAT:35,GCA:36,GCC:37,GCG:38,GCT:39,GGA:40,GGC:41,GGG:42,GGT:43,GTA:44,GTC:45,GTG:46,GTT:47,TAA:48,TAC:49,TAG:50,TAT:51,TCA:52,TCC:53,TCG:54,TCT:55,TGA:56,TGC:57,TGG:58,TGT:59,TTA:60,TTC:61,TTG:62,TTT:63};fillNeedleman(){for(let t=0;t<=this.len1;t++)this.dpGrid[t][0].value=-t*this.gap,this.dpGrid[t][0].parentI=t-1,this.dpGrid[t][0].parentJ=0;for(let t=1;t<=this.len2;t++)this.dpGrid[0][t].value=-t*this.gap,this.dpGrid[0][t].parentI=0,this.dpGrid[0][t].parentJ=t-1}fillOne(t,e){this.dpGrid[t][e].value=Math.max(this.dpGrid[t-1][e-1].value+this.scores[t-1][e-1],Math.max(this.dpGrid[t-1][e].value-this.gap,this.dpGrid[t][e-1].value-this.gap)),this.dpGrid[t][e].value==this.dpGrid[t-1][e-1].value+this.scores[t-1][e-1]?(this.dpGrid[t][e].parentI=t-1,this.dpGrid[t][e].parentJ=e-1):this.dpGrid[t][e].value==this.dpGrid[t-1][e].value-this.gap?(this.dpGrid[t][e].parentI=t-1,this.dpGrid[t][e].parentJ=e):(this.dpGrid[t][e].parentI=t,this.dpGrid[t][e].parentJ=e-1)}gridFromName(t){switch(t){case"BLOSUM45":this.alignGrid=this.BLOSUM45,this.connections=this.CONBLO,this.step=1;break;case"BLOSUM50":this.alignGrid=this.BLOSUM50,this.connections=this.CONBLO,this.step=1;break;case"BLOSUM62":this.alignGrid=this.BLOSUM62,this.connections=this.CONBLO,this.step=1;break;case"BLOSUM80":this.alignGrid=this.BLOSUM80,this.connections=this.CONBLO,this.step=1;break;case"BLOSUM90":this.alignGrid=this.BLOSUM90,this.connections=this.CONBLO,this.step=1;break;case"PAM30":this.alignGrid=this.PAM30,this.connections=this.CONBLO,this.step=1;break;case"PAM70":this.alignGrid=this.PAM70,this.connections=this.CONBLO,this.step=1;break;case"PAM250":this.alignGrid=this.PAM250,this.connections=this.CONBLO,this.step=1;break;case"NUCLEOTIDES":this.alignGrid=this.NUCLEOTIDES,this.connections=this.CONNUCL,this.step=1;break;case"TRANS":this.alignGrid=this.TRANS,this.connections=this.CONNUCL,this.step=1;break;case"SCHNEIDER":this.alignGrid=this.SCHNEIDER,this.connections=this.CONSCHN,this.step=3}this.fillScores()}constructResult(t,e){let n="",i="",o="";const s=this.dpGrid[t][e].value;for(let t=0;t<this.step;t++)o+="|";for(;t>0||e>0;){this.dpGrid[t][e].parentI==t?(n=o+n,i=this.seq2.substr((e-1)*this.step,this.step)+i):this.dpGrid[t][e].parentJ==e?(i=o+i,n=this.seq1.substr((t-1)*this.step,this.step)+n):(n=t-1>=0?this.seq1.substr((t-1)*this.step,this.step)+n:o+n,i=e-1>=0?this.seq2.substr((e-1)*this.step,this.step)+i:o+i);const r=t;t=this.dpGrid[t][e].parentI,e=this.dpGrid[r][e].parentJ}return new r(n,i,s)}fillScores(){this.scores=[];for(let t=0;t<this.len1;t++){this.scores.push([]);for(let e=0;e<this.len2;e++)this.scores[t].push(this.alignGrid[this.connections[this.seq1.substr(t*this.step,this.step)]][this.connections[this.seq2.substr(e*this.step,this.step)]])}}typeRec(){if(/[ATGC]*/.test(this.seq1)&&/[ATGC]*/.test(this.seq2))return"NUCLEOTIDES";if(/[ARNDCQEGHILKMFPSTWYVBZX*]*/.test(this.seq1)&&/[ARNDCQEGHILKMFPSTWYVBZX*]*/.test(this.seq2))return"BLOSUM62";throw Error("Can't recognize sequence type")}needlemanWunsch(){this.dpGrid=[];for(let t=0;t<this.len1+1;t++){const t=[];for(let e=0;e<this.len2+1;e++)t.push(new i);this.dpGrid.push(t)}this.fillNeedleman();for(let t=1;t<=this.len1;t++)for(let e=1;e<=this.len2;e++)this.fillOne(t,e);return this.constructResult(this.len1,this.len2)}smithWaterman(){this.dpGrid=[];for(let t=0;t<this.len1+1;t++){const t=[];for(let e=0;e<this.len2+1;e++)t.push(new i);this.dpGrid.push(t)}let t=0,e=0,n=0;for(let i=1;i<=this.len1;i++)for(let r=1;r<=this.len2;r++)this.fillOne(i,r),this.dpGrid[i][r].value<=0?(this.dpGrid[i][r].value=0,this.dpGrid[i][r].parentI=0,this.dpGrid[i][r].parentJ=0):0==this.dpGrid[this.dpGrid[i][r].parentI][this.dpGrid[i][r].parentJ].value&&(this.dpGrid[i][r].parentI=0,this.dpGrid[i][r].parentJ=0),this.dpGrid[i][r].value>t&&(t=this.dpGrid[i][r].value,e=i,n=r);return this.constructResult(e,n)}setSequences(t,e){this.seq1=t,this.seq2=e,this.len1=this.seq1.length/this.step,this.len2=this.seq2.length/this.step,this.fillScores()}setGap(t){this.gap=t}setMethod(t=""){"AUTO"==t&&(t=this.typeRec()),this.gridFromName(t)}constructor(t,e,n,i=""){this.setMethod(i),this.setSequences(t,e),this.setGap(n)}}},8115:(t,e,n)=>{"use strict";n.d(e,{BQ:()=>m,a7:()=>u,if:()=>p,nI:()=>d});var i=n(4328),r=n(7389),o=n(6082),s=n(8070),a=n(2003),l=n(1407),c=n(4870);const h="substr_helm";class u{seqHelper;units;separator;inputsDiv;substructureInput;separatorInput;editHelmLink;columnsInput;grid;col;dialog;constructor(t,e){this.seqHelper=e,this.col=t[0],this.createUI()}editHelmLinkAction(){(0,c.Ku)(this.inputsDiv,this.grid.root),r.tools.waitForElementInDom(this.grid.root).then((()=>{setTimeout((()=>{this.grid.cell(h,0).element.children[0].dispatchEvent(new KeyboardEvent("keydown",{key:"Enter"}))}),100)}))}updateInputs(){const t=this.units===a.Hi.HELM?r.divV([this.columnsInput,this.editHelmLink]):this.units===a.Hi.SEPARATOR?r.inputs([this.columnsInput,this.substructureInput,this.separatorInput]):r.inputs([this.columnsInput,this.substructureInput]);(0,c.Ku)(this.inputsDiv,t)}updateNotationDiv(){this.units=this.col.meta.units,this.separator=this.col.getTag(a.gp.separator);const t=this.dialog.root.getElementsByClassName("notation-text")[0];t&&(t.textContent=`Notation: ${this.units}`)}createUI(){const t=i.shell.tv.dataFrame;this.columnsInput=r.input.column("Column",{table:t,value:this.col,onValueChanged:t=>{this.col=t,this.updateNotationDiv(),this.updateInputs()},filter:t=>t.semType===o.SEMTYPE.MACROMOLECULE}),this.substructureInput=r.input.string("Substructure",{value:""}),this.editHelmLink=r.link("Edit helm",(()=>this.editHelmLinkAction()),void 0,{style:{position:"relative",left:"95px"}});const e=o.DataFrame.create(1);e.columns.addNewString(h).init((t=>"")),e.col(h).semType=this.col.semType,e.col(h).meta.units=a.Hi.HELM,this.grid=e.plot.grid(),this.separatorInput=r.input.string("Separator",{value:this.separator}),this.inputsDiv=r.div(),this.units=this.col.meta.units,this.separator=this.col.getTag(a.gp.separator),this.updateInputs(),this.dialog=r.dialog("Substructure Search").add(r.divV([r.divText(`Notation: ${this.units}`,"notation-text"),this.inputsDiv])).onOK((async()=>{let t,n=this.units===a.Hi.HELM?e.get(h,0):this.substructureInput.value;this.units===a.Hi.SEPARATOR&&this.separatorInput.value!==this.separator&&this.separatorInput.value&&(n=n.replaceAll(this.separatorInput.value,this.separator)),t=this.units===a.Hi.HELM?await p(n,this.col,this.seqHelper):d(n,this.col),this.col.dataFrame.filter.and(t)})).show()}}function d(t,e,n){const i=n?function(t,e){const n=`${e}`.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&"),i=t.charAt(0)===e,r=t.charAt(t.length-1)===e,o=t.replace(new RegExp(`^${n}|${n}$`,"g"),"");return i?r?`${n}${o}${n}`:`${n}${o}${n}|${n}${o}$`:r?`^${o}${n}|${n}${o}${n}`:`^${o}${n}|${n}${o}${n}|${n}${o}$`}(t,n):t,r=o.BitSet.create(e.length);for(let n=0;n<e.length;n++){const o=e.get(n);(o.match(i)||o===t)&&r.set(n,!0,!1)}return r}async function p(t,e,n){e.version!==e.temp["last-invalidated-version"]&&await m(e,n,!0);const r=o.Column.string("helm",1).init((e=>t));r.semType=o.SEMTYPE.MACROMOLECULE,r.meta.units=a.Hi.HELM;const s=await(0,l.R)(r,n,!0,e.temp["monomers-dict"]);return(await i.functions.call("Chem:searchSubstructure",{molStringsColumn:e.temp["monomeric-mols"],molString:s.get(0),molBlockFailover:""})).get(0)}async function m(t,e,n){const i=o.TaskBarProgressIndicator.create(`Invalidating molfiles for ${t.name}`);try{await(0,s.cb)(10);const i=new Map,r=await(0,l.R)(t,e,n,i);t.temp["monomeric-mols"]=r,t.temp["monomers-dict"]=i,t.temp["last-invalidated-version"]=t.version}finally{i.close()}}},966:(t,e,n)=>{"use strict";n.d(e,{V:()=>s,l:()=>a});var i=n(4328),r=n(6082),o=n(6766);function s(t,e,n=[],r=[],s=!0){const l=o._package.seqHelper,[c,h]=a(t,e,l,n,r);return s&&!c&&i.shell.warning(h),c}function a(t,e,n,o=[],s=[]){let a=!0,l="";if(t.semType!==r.SEMTYPE.MACROMOLECULE)i.shell.warning(e+" analysis is allowed for Macromolecules semantic type"),a=!1;else{const i=n.getSeqHandler(t),r=i.notation;if(o.length>0&&!o.some((t=>r.toUpperCase()==t.toUpperCase())))l=`${e} + ' analysis is allowed for Macromolecules with notation ${0==o.length?"any notation":`notation${o.length>1?"s":""} ${o.map((t=>`"${t}"`)).join(", ")} `}.`,a=!1;else if(!i.isHelm()){const t=i.alphabet;s.length>0&&!s.some((e=>t.toUpperCase()==e.toUpperCase()))&&(l=`${e} + ' analysis is allowed for Macromolecules with alphabet ${0==s.length?"any alphabet":`alphabet${s.length>1?"s":""} ${s.map((t=>`"${t}"`)).join(", ")}.`}.`,a=!1)}}return[a,l]}},4139:(t,e,n)=>{"use strict";n.d(e,{HX:()=>h,J:()=>a,b9:()=>c,uF:()=>o});var i,r,o,s,a,l=n(8152);!function(t){t.SPLIT_COL="~split",t.ACTIVITY="~activity",t.ACTIVITY_SCALED="activity_scaled",t.ALIGNED_SEQUENCE="~aligned_sequence",t.AMINO_ACID_RESIDUE="AAR",t.POSITION="Pos",t.P_VALUE="pValue",t.MEAN_DIFFERENCE="Mean difference"}(i||(i={})),function(t){t.AAR="AAR",t.POSITION="Pos",t.SELECTION="selection"}(r||(r={})),function(t){t.MONOMER="Monomer",t.MACROMOLECULE_DIFFERENCE="MacromoleculeDifference",t.ACTIVITY="activity",t.ACTIVITY_SCALED="activityScaled"}(o||(o={})),function(t){t.CELL_CHANGING="isCellChanging"}(s||(s={})),function(t){t.SEPARATOR="."}(a||(a={}));const c="3.3.1",h={pepsea:{gapOpen:1.53,gapExtend:0,method:l.ZY[0]},kalign:{gapOpen:-1,gapExtend:-1,terminalGap:-1}}},5433:(t,e,n)=>{"use strict";n.d(e,{C:()=>u});var i=n(6082),r=n(7389),o=n(4328),s=n(1757),a=n.n(s),l=n(2003);let c=null,h=[];function u(t,e){let n=t??o.shell.t.columns.bySemType("Macromolecule");if(!n)throw new Error("No column with Macromolecule semantic type found");let s=e.getSeqHandler(n),u=s.notation;const d=r.divText("Current notation: "+u,{style:{"text-align":"center","font-weight":"bold","font-size":"14px",padding:"5px"}}),p=[l.Hi.FASTA,l.Hi.SEPARATOR,l.Hi.HELM],m=r.input.column("Column",{table:o.shell.t,value:n,filter:t=>t.semType===i.SEMTYPE.MACROMOLECULE,nullable:!1,onValueChanged:t=>(n=t,s=e.getSeqHandler(n),u=s.notation,u===l.Hi.HELM&&(y.value="/"),d.textContent="Current notation: "+u,g=p.filter((t=>t!==u)),v=r.input.choice("Convert to",{value:g[0],items:g,onValueChanged:b}),b(),c?.clear(),void c?.add(r.div([d,m.root,v.root,y.root])))}),f=["-",".","/"];let g=p.filter((t=>t!==u));const y=r.input.choice("Separator",{value:f[0],items:f}),b=()=>{v.value!==l.Hi.SEPARATOR?a()(y.root).hide():a()(y.root).show()};let v=r.input.choice("Convert to",{value:g[0],items:g,onValueChanged:b});b(),v.onChanged.subscribe((()=>{b()})),null==c&&(c=r.dialog("Convert Sequence Notation").add(r.div([d,m.root,v.root,y.root])).onOK((async()=>{const t=v.value,i=t===l.Hi.SEPARATOR?y.value:void 0;await async function(t,e,n,i){const r=e.getSeqHandler(t).convert(n,i);t.dataFrame.columns.add(r);const s=await o.functions.call("Bio:detectMacromolecule",{col:r});return s&&(r.semType=s),await o.data.detectSemanticTypes(t.dataFrame),r}(n,e,t,i)})).show({x:350,y:100}),h.push(c.onClose.subscribe((t=>{h.forEach((t=>{t.unsubscribe()})),h=[],c=null}))))}},536:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r});var i=n(6956);class r{constructor(t){const e=t.split(i.xe).filter((t=>t));e.forEach((t=>this.validateConnectionItem(t))),this.connectionItems=e}connectionItems;validateConnectionItem(t){const e="(PEPTIDE|RNA)",n=new RegExp(`${e}[0-9]+,${e}[0-9]+,[0-9]+:R[0-9]+-[0-9]+:R[0-9]+`,"g");if(!t.match(n))throw new Error(`Cannot parse connection item from ${t}`)}getConnectionData(){const t=[];return this.connectionItems.forEach((e=>{const n=[],i=e.split(",");i[2].split("-").forEach(((t,e)=>{const r=i[e],o=t.split(":"),s={monomerIdx:parseInt(o[0])-1,rGroupId:parseInt(o[1].slice(1))};n.push({polymerId:r,bond:s})})),t.push(n)})),t}}},6956:(t,e,n)=>{"use strict";n.d(e,{mP:()=>o,pk:()=>r,xe:()=>i});const i="|",r="$",o="H"},9099:(t,e,n)=>{"use strict";n.d(e,{f:()=>s});var i=n(536),r=n(6956),o=n(9034);class s{helmString;constructor(t){this.helmString=t;const e=this.helmString.split(r.pk),n=e[0].split(r.xe);this.simplePolymers=n.map((t=>new o.d(t))),this.connectionList=new i.Z(e[1]),this.bondData=this.getBondData(),this.bondedRGroupsMap=this.getBondedRGroupsMap()}bondData;simplePolymers;connectionList;bondedRGroupsMap;getBondedRGroupsMap(){const t=this.simplePolymers.map((t=>t.monomers.length)).reduce(((t,e)=>t+e),0),e=Array.from({length:t},(()=>[]));return this.bondData.forEach((t=>{t.forEach((t=>{const n=t.monomerIdx,i=t.rGroupId;e[n].push(i)}))})),e}toString(){return this.helmString}getPolymerTypeByMonomerIdx(t){return this.getSimplePolymerByMonomerIdx(t).polymerType}getSimplePolymerByMonomerIdx(t){const e=this.getMonomerIdxShifts(),n=Object.values(e).sort(((t,e)=>t-e)).find((e=>t>=e));if(void 0===n)throw new Error(`Cannot find simple polymer for monomer ${t}`);const i=Object.keys(e).find((t=>e[t]===n));return this.simplePolymers.find((t=>t.id===i))}shiftBondMonomerIds(t,e){e.forEach((e=>{e.forEach((e=>{e.monomerIdx+=t}))}))}getMonomerIdxShifts(){const t={};let e=0;return this.simplePolymers.forEach((n=>{t[n.id]=e,e+=n.monomers.length})),t}getBondData(){const t=this.getMonomerIdxShifts(),e=[];return this.simplePolymers.forEach((n=>{const i=n.getBondData(),r=t[n.id];this.shiftBondMonomerIds(r,i),e.push(...i)})),this.connectionList.getConnectionData().forEach((n=>{const i=[];n.forEach((e=>{const n=t[e.polymerId],r=e.bond;r.monomerIdx+=n,i.push(r)})),e.push(i)})),e}}},9034:(t,e,n)=>{"use strict";n.d(e,{d:()=>r});var i=n(8438);class r{simplePolymer;isNucleotideSequence=!1;constructor(t){this.simplePolymer=t,this.polymerType=this.getPolymerType(),this.isNucleotideSequence="RNA"===this.polymerType,this.idx=this.getIdx();const{monomers:e,monomerTypes:n}=this.getMonomerSymbolsAndTypes();this.monomers=e,this.monomerTypes=n}polymerType;monomers;idx;monomerTypes;get id(){return this.polymerType+this.idx.toString()}getPolymerType(){const t=new RegExp("(PEPTIDE|RNA)[0-9]+{"),e=this.simplePolymer.match(t);if(!e)throw new Error(`Unsupported polymer type in ${this.simplePolymer}`);return e[1]}getIdx(){const t=new RegExp(`${this.polymerType}([0-9]+){`),e=this.simplePolymer.match(t);if(!e)throw new Error(`Cannot parse simple polymer id from ${this.simplePolymer}`);return parseInt(e[1])}getMonomerSymbolsAndTypes(){const t=new RegExp(`${this.polymerType}${this.idx}{|}`,"g"),e=this.simplePolymer.replace(t,"").split("."),n=[],r=[];return e.forEach((t=>{if(this.isNucleotideSequence){const e=t.split(/\(|\)/).filter((t=>!!t)).map((t=>(0,i.D)(t)));n.push(...e),e.forEach(((t,e)=>r.push(e%3==1?"Branch":"Backbone")))}else n.push((0,i.D)(t)),r.push("Backbone")})),{monomers:n,monomerTypes:r}}getBondData(){const t=[],e=this.monomerTypes.map(((t,e)=>{if("Backbone"===t)return e})).filter((t=>void 0!==t)),n=this.monomerTypes.map(((t,e)=>{if("Branch"===t)return e})).filter((t=>void 0!==t));for(let n=0;n<e.length-1;n++){const i=e[n],r=e[n+1];t.push([{monomerIdx:i,rGroupId:2},{monomerIdx:r,rGroupId:1}])}for(let e=0;e<n.length;e++){const i=n[e],r=i-1;t.push([{monomerIdx:r,rGroupId:3},{monomerIdx:i,rGroupId:1}])}return t}}},8604:(t,e,n)=>{"use strict";n.d(e,{Es:()=>r,G3:()=>s,gt:()=>o,so:()=>i});const i="System:AppData/Bio/monomer-libraries/",r="System:AppData/Bio/monomer-sets/",o="System:AppData/Bio/tests/libraries/HELMmonomerSchema.json",s={explicit:["HELMCoreLibrary.json","polytool-lib.json"],exclude:[],duplicateMonomerPreferences:{}}},1619:(t,e,n)=>{"use strict";n.d(e,{D:()=>_});var i=n(4328),r=n(6082),o=n(7389),s=n(8070),a=n(2003),l=n(608),c=n(8152),h=n(966),u=n(4139),d=n(5072),p=n.n(d),m=n(7825),f=n.n(m),g=n(7659),y=n.n(g),b=n(5056),v=n.n(b),w=n(540),C=n.n(w),A=n(1113),S=n.n(A),x=n(6369),E={};E.styleTagTransform=S(),E.setAttributes=v(),E.insert=y().bind(null,"head"),E.domAPI=f(),E.insertStyleElement=C(),p()(x.A,E),x.A&&x.A.locals&&x.A.locals;var M=n(6766);async function _(t,e){return new Promise((async(n,a)=>{t.clustersCol??=null,t.pepsea??={},t.pepsea.method??=u.HX.pepsea.method,t.pepsea.gapOpen??=u.HX.pepsea.gapOpen,t.pepsea.gapExtend??=u.HX.pepsea.gapExtend;const h=t.col?.dataFrame??i.shell.t,d=t.col??h.columns.bySemType(r.SEMTYPE.MACROMOLECULE);if(null==d){const t="Multiple Sequence Alignment analysis requires a dataset with a macromolecule column.";return i.shell.warning(t),void a(new l.Ap(o.divText(t)))}const p=o.input.choice("Method",{value:t.pepsea.method,items:c.ZY});p.setTooltip("Alignment method");const m=o.input.float("Terminal gap",{value:t?.kalign?.terminalGap});m.setTooltip("Penalty for opening a gap at the beginning or end of the sequence");const f=o.p(`Kalign version: ${u.b9}`,"kalign-version"),g=o.input.float("Gap open",{value:t.pepsea.gapOpen});g.setTooltip("Gap opening penalty at group-to-group alignment");const y=o.input.float("Gap extend",{value:t.pepsea.gapExtend});y.setTooltip("Gap extension penalty to skip the alignment");const b=o.inputs([g,y,m]),v=o.button("Alignment parameters",(()=>{b.hidden=!b.hidden,[g,y,m].forEach((t=>{t.root.style.removeProperty("max-width"),t.captionLabel.style.removeProperty("max-width")}))}),"Adjust alignment parameters such as penalties for opening and extending gaps");v.classList.add("msa-params-button"),b.hidden=!0,v.prepend(o.icons.settings((()=>null)));const w=[p.root.style],C=[m.root.style,f.style];let A,S=d;const x=o.input.column("Sequence",{table:h,value:d,onValueChanged:async t=>{if(!t||t.semType!==r.SEMTYPE.MACROMOLECULE)return _.disabled=!0,await(0,s.cb)(0),void(x.value=S);S=t,_.disabled=!1,A=await T(x.value,h,e,w,C,p,E,g,y,m)},filter:t=>t.semType===r.SEMTYPE.MACROMOLECULE});x.setTooltip("Sequences column to use for alignment");const E=o.input.column("Clusters",{table:h,value:t.clustersCol});E.nullable=!0;const M=o.dialog("MSA").add(x).add(E).add(p).add(b).add(v).add(f).onOK((async()=>{await I(x,h,A,n,a)})),_=M.getButton("OK");if(x.fireChanged(),t.col)return A=await T(t.col,h,e,w,C,p,E,g,y,m),void await I(x,h,A,n,a);M.show()}))}async function I(t,e,n,o,s){let a=null;const l=r.TaskBarProgressIndicator.create("Analyze for MSA ...");try{if(t.fireChanged(),t.value.semType!==r.SEMTYPE.MACROMOLECULE)throw new Error("Chosen column has to be of Macromolecule semantic type");if(void 0===n)throw new Error("Invalid column format");if(a=await n(),null==a)return s("PepSeA container has not started");e.columns.add(a),await i.data.detectSemanticTypes(e),o(a)}catch(t){s(t)}finally{l.close()}}async function T(t,e,n,o,s,d,p,m,f,g){try{if(t.semType!==r.SEMTYPE.MACROMOLECULE)return;const i=e.columns.getUnusedName(`msa(${t.name})`);if((0,h.l)(t,t.name,n,[a.Hi.FASTA,a.Hi.SEPARATOR],[a.YI.DNA,a.YI.RNA,a.YI.PT])[0]){L(o,s,"kalign"),m.value=null,f.value=null,g.value=null;const e=n.getSeqHandler(t),r=e.isFasta()?t:e.convert(a.Hi.FASTA);return async()=>await(0,l.eE)(r,!1,i,p.value)}if((0,h.l)(t,t.name,n,[a.Hi.HELM],[])[0])return L(o,s,"pepsea"),m.value??=u.HX.pepsea.gapOpen,f.value??=u.HX.pepsea.gapExtend,async()=>(0,c.GD)(t,i,d.value,m.value,f.value,p.value);if((0,h.l)(t,t.name,n,[a.Hi.SEPARATOR],[a.YI.UN])[0]){const e=n.getSeqHandler(t).convert(a.Hi.HELM);return L(o,s,"pepsea"),m.value??=u.HX.pepsea.gapOpen,f.value??=u.HX.pepsea.gapExtend,async()=>(0,c.GD)(e,i,d.value,m.value,f.value,p.value)}return m.value=null,f.value=null,g.value=null,void L(o,s,"kalign")}catch(t){const e=t instanceof Error?t.message:t.toString();i.shell.error(e),M._package.logger.error(e)}}function L(t,e,n){if("kalign"===n){for(const e of t)e.display="none";for(const t of e)t.removeProperty("display")}else{for(const t of e)t.display="none";for(const e of t)e.removeProperty("display")}}},608:(t,e,n)=>{"use strict";n.d(e,{Ap:()=>G,aZ:()=>D,eE:()=>H});var i=n(7389),r=n(6082),o=n(1991),s=n.n(o),a=n(3516),l=n(2003);const c=Symbol("Comlink.proxy"),h=Symbol("Comlink.endpoint"),u=Symbol("Comlink.releaseProxy"),d=Symbol("Comlink.thrown"),p=t=>"object"==typeof t&&null!==t||"function"==typeof t,m=new Map([["proxy",{canHandle:t=>p(t)&&t[c],serialize(t){const{port1:e,port2:n}=new MessageChannel;return f(t,e),[n,[n]]},deserialize:t=>(t.start(),y(t))}],["throw",{canHandle:t=>p(t)&&d in t,serialize({value:t}){let e;return e=t instanceof Error?{isError:!0,value:{message:t.message,name:t.name,stack:t.stack}}:{isError:!1,value:t},[e,[]]},deserialize(t){throw t.isError?Object.assign(new Error(t.value.message),t.value):t.value}}]]);function f(t,e=self){e.addEventListener("message",(function n(i){if(!i||!i.data)return;const{id:r,type:o,path:s}=Object.assign({path:[]},i.data),a=(i.data.argumentList||[]).map(x);let l;try{const e=s.slice(0,-1).reduce(((t,e)=>t[e]),t),n=s.reduce(((t,e)=>t[e]),t);switch(o){case"GET":l=n;break;case"SET":e[s.slice(-1)[0]]=x(i.data.value),l=!0;break;case"APPLY":l=n.apply(e,a);break;case"CONSTRUCT":l=function(t){return Object.assign(t,{[c]:!0})}(new n(...a));break;case"ENDPOINT":{const{port1:e,port2:n}=new MessageChannel;f(t,n),l=function(t,e){return A.set(t,e),t}(e,[e])}break;case"RELEASE":l=void 0;break;default:return}}catch(t){l={value:t,[d]:0}}Promise.resolve(l).catch((t=>({value:t,[d]:0}))).then((t=>{const[i,s]=S(t);e.postMessage(Object.assign(Object.assign({},i),{id:r}),s),"RELEASE"===o&&(e.removeEventListener("message",n),g(e))}))})),e.start&&e.start()}function g(t){(function(t){return"MessagePort"===t.constructor.name})(t)&&t.close()}function y(t,e){return v(t,[],e)}function b(t){if(t)throw new Error("Proxy has been released and is not useable")}function v(t,e=[],n=function(){}){let i=!1;const r=new Proxy(n,{get(n,o){if(b(i),o===u)return()=>E(t,{type:"RELEASE",path:e.map((t=>t.toString()))}).then((()=>{g(t),i=!0}));if("then"===o){if(0===e.length)return{then:()=>r};const n=E(t,{type:"GET",path:e.map((t=>t.toString()))}).then(x);return n.then.bind(n)}return v(t,[...e,o])},set(n,r,o){b(i);const[s,a]=S(o);return E(t,{type:"SET",path:[...e,r].map((t=>t.toString())),value:s},a).then(x)},apply(n,r,o){b(i);const s=e[e.length-1];if(s===h)return E(t,{type:"ENDPOINT"}).then(x);if("bind"===s)return v(t,e.slice(0,-1));const[a,l]=C(o);return E(t,{type:"APPLY",path:e.map((t=>t.toString())),argumentList:a},l).then(x)},construct(n,r){b(i);const[o,s]=C(r);return E(t,{type:"CONSTRUCT",path:e.map((t=>t.toString())),argumentList:o},s).then(x)}});return r}function w(t){return Array.prototype.concat.apply([],t)}function C(t){const e=t.map(S);return[e.map((t=>t[0])),w(e.map((t=>t[1])))]}const A=new WeakMap;function S(t){for(const[e,n]of m)if(n.canHandle(t)){const[i,r]=n.serialize(t);return[{type:"HANDLER",name:e,value:i},r]}return[{type:"RAW",value:t},A.get(t)||[]]}function x(t){switch(t.type){case"HANDLER":return m.get(t.name).deserialize(t.value);case"RAW":return t.value}}function E(t,e,n){return new Promise((i=>{const r=new Array(4).fill(0).map((()=>Math.floor(Math.random()*Number.MAX_SAFE_INTEGER).toString(16))).join("-");t.addEventListener("message",(function e(n){!n.data||!n.data.id||n.data.id!==r||(t.removeEventListener("message",e),i(n.data))})),t.start&&t.start(),t.postMessage(Object.assign({id:r},e),n)}))}const M="KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2NvbnN0ICQ9U3ltYm9sKCJDb21saW5rLnByb3h5IiksQT1TeW1ib2woIkNvbWxpbmsuZW5kcG9pbnQiKSxSPVN5bWJvbCgiQ29tbGluay5yZWxlYXNlUHJveHkiKSx5PVN5bWJvbCgiQ29tbGluay50aHJvd24iKSxfPWU9PnR5cGVvZiBlPT0ib2JqZWN0IiYmZSE9PW51bGx8fHR5cGVvZiBlPT0iZnVuY3Rpb24iLEw9e2NhbkhhbmRsZTplPT5fKGUpJiZlWyRdLHNlcmlhbGl6ZShlKXtjb25zdHtwb3J0MTpyLHBvcnQyOml9PW5ldyBNZXNzYWdlQ2hhbm5lbDtyZXR1cm4gdyhlLHIpLFtpLFtpXV19LGRlc2VyaWFsaXplKGUpe3JldHVybiBlLnN0YXJ0KCksQyhlKX19LE89e2NhbkhhbmRsZTplPT5fKGUpJiZ5IGluIGUsc2VyaWFsaXplKHt2YWx1ZTplfSl7bGV0IHI7cmV0dXJuIGUgaW5zdGFuY2VvZiBFcnJvcj9yPXtpc0Vycm9yOiEwLHZhbHVlOnttZXNzYWdlOmUubWVzc2FnZSxuYW1lOmUubmFtZSxzdGFjazplLnN0YWNrfX06cj17aXNFcnJvcjohMSx2YWx1ZTplfSxbcixbXV19LGRlc2VyaWFsaXplKGUpe3Rocm93IGUuaXNFcnJvcj9PYmplY3QuYXNzaWduKG5ldyBFcnJvcihlLnZhbHVlLm1lc3NhZ2UpLGUudmFsdWUpOmUudmFsdWV9fSxFPW5ldyBNYXAoW1sicHJveHkiLExdLFsidGhyb3ciLE9dXSk7ZnVuY3Rpb24gdyhlLHI9c2VsZil7ci5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiBpKHMpe2lmKCFzfHwhcy5kYXRhKXJldHVybjtjb25zdHtpZDpvLHR5cGU6YSxwYXRoOm59PU9iamVjdC5hc3NpZ24oe3BhdGg6W119LHMuZGF0YSksYz0ocy5kYXRhLmFyZ3VtZW50TGlzdHx8W10pLm1hcChtKTtsZXQgbDt0cnl7Y29uc3QgdT1uLnNsaWNlKDAsLTEpLnJlZHVjZSgoZCxwKT0+ZFtwXSxlKSxmPW4ucmVkdWNlKChkLHApPT5kW3BdLGUpO3N3aXRjaChhKXtjYXNlIkdFVCI6bD1mO2JyZWFrO2Nhc2UiU0VUIjp1W24uc2xpY2UoLTEpWzBdXT1tKHMuZGF0YS52YWx1ZSksbD0hMDticmVhaztjYXNlIkFQUExZIjpsPWYuYXBwbHkodSxjKTticmVhaztjYXNlIkNPTlNUUlVDVCI6e2NvbnN0IGQ9bmV3IGYoLi4uYyk7bD16KGQpfWJyZWFrO2Nhc2UiRU5EUE9JTlQiOntjb25zdHtwb3J0MTpkLHBvcnQyOnB9PW5ldyBNZXNzYWdlQ2hhbm5lbDt3KGUscCksbD1OKGQsW2RdKX1icmVhaztjYXNlIlJFTEVBU0UiOmw9dm9pZCAwO2JyZWFrO2RlZmF1bHQ6cmV0dXJufX1jYXRjaCh1KXtsPXt2YWx1ZTp1LFt5XTowfX1Qcm9taXNlLnJlc29sdmUobCkuY2F0Y2godT0+KHt2YWx1ZTp1LFt5XTowfSkpLnRoZW4odT0+e2NvbnN0W2YsZF09Uyh1KTtyLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxmKSx7aWQ6b30pLGQpLGE9PT0iUkVMRUFTRSImJihyLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGkpLE0ocikpfSl9KSxyLnN0YXJ0JiZyLnN0YXJ0KCl9ZnVuY3Rpb24gVChlKXtyZXR1cm4gZS5jb25zdHJ1Y3Rvci5uYW1lPT09Ik1lc3NhZ2VQb3J0In1mdW5jdGlvbiBNKGUpe1QoZSkmJmUuY2xvc2UoKX1mdW5jdGlvbiBDKGUscil7cmV0dXJuIGIoZSxbXSxyKX1mdW5jdGlvbiBoKGUpe2lmKGUpdGhyb3cgbmV3IEVycm9yKCJQcm94eSBoYXMgYmVlbiByZWxlYXNlZCBhbmQgaXMgbm90IHVzZWFibGUiKX1mdW5jdGlvbiBiKGUscj1bXSxpPWZ1bmN0aW9uKCl7fSl7bGV0IHM9ITE7Y29uc3Qgbz1uZXcgUHJveHkoaSx7Z2V0KGEsbil7aWYoaChzKSxuPT09UilyZXR1cm4oKT0+ZyhlLHt0eXBlOiJSRUxFQVNFIixwYXRoOnIubWFwKGM9PmMudG9TdHJpbmcoKSl9KS50aGVuKCgpPT57TShlKSxzPSEwfSk7aWYobj09PSJ0aGVuIil7aWYoci5sZW5ndGg9PT0wKXJldHVybnt0aGVuOigpPT5vfTtjb25zdCBjPWcoZSx7dHlwZToiR0VUIixwYXRoOnIubWFwKGw9PmwudG9TdHJpbmcoKSl9KS50aGVuKG0pO3JldHVybiBjLnRoZW4uYmluZChjKX1yZXR1cm4gYihlLFsuLi5yLG5dKX0sc2V0KGEsbixjKXtoKHMpO2NvbnN0W2wsdV09UyhjKTtyZXR1cm4gZyhlLHt0eXBlOiJTRVQiLHBhdGg6Wy4uLnIsbl0ubWFwKGY9PmYudG9TdHJpbmcoKSksdmFsdWU6bH0sdSkudGhlbihtKX0sYXBwbHkoYSxuLGMpe2gocyk7Y29uc3QgbD1yW3IubGVuZ3RoLTFdO2lmKGw9PT1BKXJldHVybiBnKGUse3R5cGU6IkVORFBPSU5UIn0pLnRoZW4obSk7aWYobD09PSJiaW5kIilyZXR1cm4gYihlLHIuc2xpY2UoMCwtMSkpO2NvbnN0W3UsZl09RihjKTtyZXR1cm4gZyhlLHt0eXBlOiJBUFBMWSIscGF0aDpyLm1hcChkPT5kLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDp1fSxmKS50aGVuKG0pfSxjb25zdHJ1Y3QoYSxuKXtoKHMpO2NvbnN0W2MsbF09RihuKTtyZXR1cm4gZyhlLHt0eXBlOiJDT05TVFJVQ1QiLHBhdGg6ci5tYXAodT0+dS50b1N0cmluZygpKSxhcmd1bWVudExpc3Q6Y30sbCkudGhlbihtKX19KTtyZXR1cm4gb31mdW5jdGlvbiBEKGUpe3JldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLGUpfWZ1bmN0aW9uIEYoZSl7Y29uc3Qgcj1lLm1hcChTKTtyZXR1cm5bci5tYXAoaT0+aVswXSksRChyLm1hcChpPT5pWzFdKSldfWNvbnN0IFA9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gTihlLHIpe3JldHVybiBQLnNldChlLHIpLGV9ZnVuY3Rpb24geihlKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihlLHtbJF06ITB9KX1mdW5jdGlvbiBTKGUpe2Zvcihjb25zdFtyLGldb2YgRSlpZihpLmNhbkhhbmRsZShlKSl7Y29uc3RbcyxvXT1pLnNlcmlhbGl6ZShlKTtyZXR1cm5be3R5cGU6IkhBTkRMRVIiLG5hbWU6cix2YWx1ZTpzfSxvXX1yZXR1cm5be3R5cGU6IlJBVyIsdmFsdWU6ZX0sUC5nZXQoZSl8fFtdXX1mdW5jdGlvbiBtKGUpe3N3aXRjaChlLnR5cGUpe2Nhc2UiSEFORExFUiI6cmV0dXJuIEUuZ2V0KGUubmFtZSkuZGVzZXJpYWxpemUoZS52YWx1ZSk7Y2FzZSJSQVciOnJldHVybiBlLnZhbHVlfX1mdW5jdGlvbiBnKGUscixpKXtyZXR1cm4gbmV3IFByb21pc2Uocz0+e2NvbnN0IG89VSgpO2UuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gYShuKXshbi5kYXRhfHwhbi5kYXRhLmlkfHxuLmRhdGEuaWQhPT1vfHwoZS5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixhKSxzKG4uZGF0YSkpfSksZS5zdGFydCYmZS5zdGFydCgpLGUucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbih7aWQ6b30sciksaSl9KX1mdW5jdGlvbiBVKCl7cmV0dXJuIG5ldyBBcnJheSg0KS5maWxsKDApLm1hcCgoKT0+TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKk51bWJlci5NQVhfU0FGRV9JTlRFR0VSKS50b1N0cmluZygxNikpLmpvaW4oIi0iKX1jb25zdCBXPWFzeW5jKCk9PldlYkFzc2VtYmx5LnZhbGlkYXRlKG5ldyBVaW50OEFycmF5KFswLDk3LDExNSwxMDksMSwwLDAsMCwxLDUsMSw5NiwwLDEsMTIzLDMsMiwxLDAsMTAsMTAsMSw4LDAsNjUsMCwyNTMsMTUsMjUzLDk4LDExXSkpLGs9ImVhZ2VyIix4PSJsYXp5IixqPXtzc3c6WyJzaW1kIl0sbWluaW1hcDI6WyJzaW1kIl19LHQ9e3Rvb2xzOltdLGNvbmZpZzp7fSxmaWxlczpbXSxiYXNlOnt9LGZzOnt9LGFzeW5jIGluaXQoKXtpZih0LnRvb2xzLmxlbmd0aD09PTApdGhyb3ciRXhwZWN0aW5nIGF0IGxlYXN0IDEgdG9vbC4iO2lmKG5ldyBTZXQodC50b29scy5tYXAocj0+YCR7ci50b29sfS8ke3IucHJvZ3JhbXx8ci50b29sfWApKS5zaXplIT09dC50b29scy5sZW5ndGgpdGhyb3ciRm91bmQgZHVwbGljYXRlIHRvb2xzOyBjYW4gb25seSBoYXZlIGVhY2ggdG9vbC9wcm9ncmFtIGNvbWJpbmF0aW9uIGF0IG1vc3Qgb25jZS4iO2lmKHQuYmFzZT10LnRvb2xzLmZpbmQocj0+ci5yZWluaXQhPT0hMCksIXQuYmFzZSl0aHJvdyJDb3VsZCBub3QgZmluZCBhIHRvb2wgd2l0aCBgcmVpbml0OiBmYWxzZWAgdG8gdXNlIGFzIHRoZSBiYXNlIG1vZHVsZS4gVG8gZml4IHRoaXMgaXNzdWUsIGluY2x1ZGUgdGhlIHRvb2wgYGJhc2UvMS4wLjBgIHdoZW4gaW5pdGlhbGl6aW5nIEFpb2xpLiI7cmV0dXJuIHQuYmFzZS5pc0Jhc2VNb2R1bGU9ITAsYXdhaXQgdGhpcy5fc2V0dXAodC5iYXNlKSxhd2FpdCB0aGlzLl9pbml0TW9kdWxlcygpLHQuX2xvZygiUmVhZHkiKSwhMH0sYXN5bmMgX2luaXRNb2R1bGVzKCl7YXdhaXQgUHJvbWlzZS5hbGwodC50b29scy5tYXAodGhpcy5fc2V0dXApKSxhd2FpdCB0aGlzLl9zZXR1cEZTKCl9LG1vdW50KGU9W10pe2NvbnN0IHI9YCR7dC5jb25maWcuZGlyU2hhcmVkfSR7dC5jb25maWcuZGlyRGF0YX1gLGk9YCR7dC5jb25maWcuZGlyU2hhcmVkfSR7dC5jb25maWcuZGlyTW91bnRlZH1gO2xldCBzPVtdLG89W10sYT1bXTshQXJyYXkuaXNBcnJheShlKSYmIShlIGluc3RhbmNlb2YgRmlsZUxpc3QpJiYoZT1bZV0pLHQuX2xvZyhgTW91bnRpbmcgJHtlLmxlbmd0aH0gZmlsZXNgKTtmb3IobGV0IG4gb2YgZSl7aWYobiBpbnN0YW5jZW9mIEZpbGV8fChuPT1udWxsP3ZvaWQgMDpuLmRhdGEpaW5zdGFuY2VvZiBCbG9iJiZuLm5hbWV8fHR5cGVvZihuPT1udWxsP3ZvaWQgMDpuLmRhdGEpPT0ic3RyaW5nIiYmbi5uYW1lKXR5cGVvZihuPT1udWxsP3ZvaWQgMDpuLmRhdGEpPT0ic3RyaW5nIiYmKG4uZGF0YT1uZXcgQmxvYihbbi5kYXRhXSx7dHlwZToidGV4dC9wbGFpbiJ9KSkscy5wdXNoKG4pO2Vsc2UgaWYobi5uYW1lJiZuLnVybClvLnB1c2gobik7ZWxzZSBpZih0eXBlb2Ygbj09InN0cmluZyImJm4uc3RhcnRzV2l0aCgiaHR0cCIpKW49e3VybDpuLG5hbWU6bi5zcGxpdCgiLy8iKS5wb3AoKS5yZXBsYWNlKC9cLy9nLCItIil9LG8ucHVzaChuKTtlbHNlIHRocm93J0Nhbm5vdCBtb3VudCBmaWxlKHMpIHNwZWNpZmllZC4gTXVzdCBiZSBhIEZpbGUsIEJsb2IsIGEgVVJMIHN0cmluZywgb3IgeyBuYW1lOiAiZmlsZS50eHQiLCBkYXRhOiAic3RyaW5nIiB9Lic7YS5wdXNoKG4ubmFtZSl9dHJ5e3QuZnMudW5tb3VudChpKX1jYXRjaHt9Zm9yKGxldCBuIG9mIG8pdC5mcy5jcmVhdGVMYXp5RmlsZShyLG4ubmFtZSxuLnVybCwhMCwhMCk7cmV0dXJuIHQuZmlsZXM9dC5maWxlcy5jb25jYXQocyksdC5iYXNlLm1vZHVsZS5GUy5tb3VudCh0LmJhc2UubW9kdWxlLldPUktFUkZTLHtmaWxlczp0LmZpbGVzLmZpbHRlcihuPT5uIGluc3RhbmNlb2YgRmlsZSksYmxvYnM6dC5maWxlcy5maWx0ZXIobj0+KG49PW51bGw/dm9pZCAwOm4uZGF0YSlpbnN0YW5jZW9mIEJsb2IpfSxpKSxzLm1hcChuPT57Y29uc3QgYz1gJHtpfS8ke24ubmFtZX1gLGw9YCR7cn0vJHtuLm5hbWV9YDt0cnl7dC5mcy51bmxpbmsobCl9Y2F0Y2h7fXQuX2xvZyhgQ3JlYXRpbmcgc3ltbGluazogJHtsfSAtLT4gJHtjfWApLHQuZnMuc3ltbGluayhjLGwpfSksYS5tYXAobj0+YCR7cn0vJHtufWApfSxhc3luYyBleGVjKGUscj1udWxsKXtpZih0Ll9sb2coYEV4ZWN1dGluZyAlYyR7ZX0lYyBhcmdzPSR7cn1gLCJjb2xvcjpkYXJrYmx1ZTsgZm9udC13ZWlnaHQ6Ym9sZCIsIiIpLCFlKXRocm93IkV4cGVjdGluZyBhIGNvbW1hbmQiO2xldCBpPWU7cj09bnVsbCYmKHI9ZS5zcGxpdCgiICIpLGk9ci5zaGlmdCgpKTtjb25zdCBzPXQudG9vbHMuZmluZChhPT57dmFyIGM7bGV0IG49aTtyZXR1cm4oKGM9YT09bnVsbD92b2lkIDA6YS5mZWF0dXJlcyk9PW51bGw/dm9pZCAwOmMuc2ltZCk9PT0hMCYmKG49YCR7bn0tc2ltZGApLGEucHJvZ3JhbT09bn0pO2lmKHM9PW51bGwpdGhyb3dgUHJvZ3JhbSAke2l9IG5vdCBmb3VuZC5gO3Muc3Rkb3V0PSIiLHMuc3RkZXJyPSIiLHMubG9hZGluZz09eCYmKHMubG9hZGluZz1rLGF3YWl0IHRoaXMuX2luaXRNb2R1bGVzKCkpO3RyeXtzLm1vZHVsZS5jYWxsTWFpbihyKX1jYXRjaChhKXtjb25zb2xlLmVycm9yKGEpfXRyeXtzLm1vZHVsZS5GUy5jbG9zZShzLm1vZHVsZS5GUy5zdHJlYW1zWzFdKSxzLm1vZHVsZS5GUy5jbG9zZShzLm1vZHVsZS5GUy5zdHJlYW1zWzJdKX1jYXRjaHt9cy5tb2R1bGUuRlMuc3RyZWFtc1sxXT1zLm1vZHVsZS5GUy5vcGVuKCIvZGV2L3N0ZG91dCIsInciKSxzLm1vZHVsZS5GUy5zdHJlYW1zWzJdPXMubW9kdWxlLkZTLm9wZW4oIi9kZXYvc3RkZXJyIiwidyIpO2xldCBvPXtzdGRvdXQ6cy5zdGRvdXQsc3RkZXJyOnMuc3RkZXJyfTtyZXR1cm4gdC5jb25maWcucHJpbnRJbnRlcmxlYXZlZCYmKG89cy5zdGRvdXQpLHMucmVpbml0PT09ITAmJmF3YWl0IHRoaXMucmVpbml0KHMudG9vbCksb30sY2F0KGUpe3JldHVybiB0Ll9maWxlb3AoImNhdCIsZSl9LGxzKGUpe3JldHVybiB0Ll9maWxlb3AoImxzIixlKX0sZG93bmxvYWQoZSl7cmV0dXJuIHQuX2ZpbGVvcCgiZG93bmxvYWQiLGUpfSxwd2QoKXtyZXR1cm4gdC5mcy5jd2QoKX0sY2QoZSl7Zm9yKGxldCByIG9mIHQudG9vbHMpIXIubW9kdWxlfHxyLm1vZHVsZS5GUy5jaGRpcihlKX0sbWtkaXIoZSl7cmV0dXJuIHQuZnMubWtkaXIoZSksITB9LHJlYWQoe3BhdGg6ZSxsZW5ndGg6cixmbGFnOmk9InIiLG9mZnNldDpzPTAscG9zaXRpb246bz0wfSl7Y29uc3QgYT10LmZzLm9wZW4oZSxpKSxuPW5ldyBVaW50OEFycmF5KHIpO3JldHVybiB0LmZzLnJlYWQoYSxuLHMscixvKSx0LmZzLmNsb3NlKGEpLG59LHdyaXRlKHtwYXRoOmUsYnVmZmVyOnIsZmxhZzppPSJ3KyIsb2Zmc2V0OnM9MCxwb3NpdGlvbjpvPTB9KXtjb25zdCBhPXQuZnMub3BlbihlLGkpO3QuZnMud3JpdGUoYSxyLHMsci5sZW5ndGgsbyksdC5mcy5jbG9zZShhKX0sYXN5bmMgcmVpbml0KGUpe2NvbnN0IHI9dC50b29scy5maW5kKHM9PnMudG9vbD09ZSksaT10LmJhc2UubW9kdWxlLkZTLmN3ZCgpO09iamVjdC5hc3NpZ24ocixyLmNvbmZpZyksci5yZWFkeT0hMSxhd2FpdCB0aGlzLmluaXQoKSxyLmlzQmFzZU1vZHVsZSYmdGhpcy5tb3VudCgpLHRoaXMuY2QoaSl9LF9zdGRpblR4dDoiIixfc3RkaW5QdHI6MCxnZXQgc3RkaW4oKXtyZXR1cm4gdC5fc3RkaW5UeHR9LHNldCBzdGRpbihlPSIiKXt0Ll9sb2coYFNldHRpbmcgc3RkaW4gdG8gJWMke2V9JWNgLCJjb2xvcjpkYXJrYmx1ZSIsIiIpLHQuX3N0ZGluVHh0PWUsdC5fc3RkaW5QdHI9MH0sYXN5bmMgX3NldHVwKGUpe2lmKGUucmVhZHkpcmV0dXJuO2lmKHQuX2xvZyhgU2V0dGluZyB1cCAke2UudG9vbH0gKGJhc2UgPSAke2UuaXNCYXNlTW9kdWxlPT09ITB9KS4uLmApLGUuY29uZmlnPU9iamVjdC5hc3NpZ24oe30sZSksZS51cmxQcmVmaXh8fChlLnVybFByZWZpeD1gJHt0LmNvbmZpZy51cmxDRE59LyR7ZS50b29sfS8ke2UudmVyc2lvbn1gKSxlLnByb2dyYW18fChlLnByb2dyYW09ZS50b29sKSxlLmZlYXR1cmVzfHwoZS5mZWF0dXJlcz17fSwoaltlLnByb2dyYW1dfHxbXSkuaW5jbHVkZXMoInNpbWQiKSYmKGF3YWl0IFcoKT8oZS5wcm9ncmFtKz0iLXNpbWQiLGUuZmVhdHVyZXMuc2ltZD0hMCk6dC5fbG9nKGBXZWJBc3NlbWJseSBTSU1EIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBicm93c2VyOyB3aWxsIGxvYWQgbm9uLVNJTUQgdmVyc2lvbiBvZiAke2UucHJvZ3JhbX0uYCkpKSxlLmlzQmFzZU1vZHVsZSYmKGUubG9hZGluZz1rKSxlLmxvYWRpbmc9PT14KXt0Ll9sb2coYFdpbGwgbGF6eS1sb2FkICR7ZS50b29sfTsgc2tpcHBpbmcgaW5pdGlhbGl6YXRpb24uYCk7cmV0dXJufXNlbGYuaW1wb3J0U2NyaXB0cyhgJHtlLnVybFByZWZpeH0vJHtlLnByb2dyYW19LmpzYCksZS5tb2R1bGU9YXdhaXQgTW9kdWxlKHt0aGlzUHJvZ3JhbTplLnByb2dyYW0sbG9jYXRlRmlsZTooaSxzKT0+YCR7ZS51cmxQcmVmaXh9LyR7aX1gLHN0ZGluOigpPT50Ll9zdGRpblB0cjx0LnN0ZGluLmxlbmd0aD90LnN0ZGluLmNoYXJDb2RlQXQodC5fc3RkaW5QdHIrKyk6KHQuc3RkaW49IiIsbnVsbCkscHJpbnQ6aT0+e3QuY29uZmlnLnByaW50U3RyZWFtP3Bvc3RNZXNzYWdlKHt0eXBlOiJiaW93YXNtIix2YWx1ZTp7c3Rkb3V0Oml9fSk6ZS5zdGRvdXQrPWkrYApgfSxwcmludEVycjppPT57Y29uc3Qgcz10LmNvbmZpZy5wcmludEludGVybGVhdmVkPyJzdGRvdXQiOiJzdGRlcnIiO3QuY29uZmlnLnByaW50U3RyZWFtP3Bvc3RNZXNzYWdlKHt0eXBlOiJiaW93YXNtIix2YWx1ZTp7W3NdOml9fSk6ZVtzXSs9aStgCmB9fSk7Y29uc3Qgcj1lLm1vZHVsZS5GUztlLmlzQmFzZU1vZHVsZT8odC5fbG9nKGBTZXR0aW5nIHVwICR7ZS50b29sfSB3aXRoIGJhc2UgbW9kdWxlIGZpbGVzeXN0ZW0uLi5gKSxyLm1rZGlyKHQuY29uZmlnLmRpclNoYXJlZCw1MTEpLHIubWtkaXIoYCR7dC5jb25maWcuZGlyU2hhcmVkfS8ke3QuY29uZmlnLmRpckRhdGF9YCw1MTEpLHIubWtkaXIoYCR7dC5jb25maWcuZGlyU2hhcmVkfS8ke3QuY29uZmlnLmRpck1vdW50ZWR9YCw1MTEpLHIuY2hkaXIoYCR7dC5jb25maWcuZGlyU2hhcmVkfS8ke3QuY29uZmlnLmRpckRhdGF9YCksdC5mcz1yKToodC5fbG9nKGBTZXR0aW5nIHVwICR7ZS50b29sfSB3aXRoIGZpbGVzeXN0ZW0uLi5gKSxyLm1rZGlyKHQuY29uZmlnLmRpclNoYXJlZCksci5tb3VudChlLm1vZHVsZS5QUk9YWUZTLHtyb290OnQuY29uZmlnLmRpclNoYXJlZCxmczp0LmZzfSx0LmNvbmZpZy5kaXJTaGFyZWQpLHIuY2hkaXIodC5mcy5jd2QoKSkpLGUuc3Rkb3V0PSIiLGUuc3RkZXJyPSIiLGUucmVhZHk9ITB9LGFzeW5jIF9zZXR1cEZTKCl7Y29uc3QgZT10LmZzO2ZvcihsZXQgciBvZiB0LnRvb2xzKXtpZighci5yZWFkeSljb250aW51ZTtjb25zdCBpPXIubW9kdWxlLkZTLHM9YC8ke3IudG9vbH1gLG89YCR7dC5jb25maWcuZGlyU2hhcmVkfSR7c31gOyFpLmFuYWx5emVQYXRoKHMpLmV4aXN0c3x8ZS5hbmFseXplUGF0aChvKS5leGlzdHN8fCh0Ll9sb2coYE1vdW50aW5nICR7c30gb250byAke3QuYmFzZS50b29sfSBmaWxlc3lzdGVtIGF0ICR7b31gKSxlLm1rZGlyKG8pLGUubW91bnQodC5iYXNlLm1vZHVsZS5QUk9YWUZTLHtyb290OnMsZnM6aX0sbykpfX0sX2ZpbGVvcChlLHIpe3QuX2xvZyhgUnVubmluZyAke2V9ICR7cn1gKTtjb25zdCBpPXQuZnMuYW5hbHl6ZVBhdGgocik7aWYoIWkuZXhpc3RzKXJldHVybiB0Ll9sb2coYEZpbGUgJHtyfSBub3QgZm91bmQuYCksITE7c3dpdGNoKGUpe2Nhc2UiY2F0IjpyZXR1cm4gdC5mcy5yZWFkRmlsZShyLHtlbmNvZGluZzoidXRmOCJ9KTtjYXNlImxzIjpyZXR1cm4gdC5mcy5pc0ZpbGUoaS5vYmplY3QubW9kZSk/dC5mcy5zdGF0KHIpOnQuZnMucmVhZGRpcihyKTtjYXNlImRvd25sb2FkIjpjb25zdCBzPW5ldyBCbG9iKFt0aGlzLmNhdChyKV0pO3JldHVybiBVUkwuY3JlYXRlT2JqZWN0VVJMKHMpfXJldHVybiExfSxfbG9nKGUpe2lmKCF0LmNvbmZpZy5kZWJ1ZylyZXR1cm47bGV0IHI9Wy4uLmFyZ3VtZW50c107ci5zaGlmdCgpLGNvbnNvbGUubG9nKGAlY1tXZWJXb3JrZXJdJWMgJHtlfWAsImZvbnQtd2VpZ2h0OmJvbGQiLCIiLC4uLnIpfX07dyh0KX0pKCk7Cg==",_=typeof window<"u"&&window.Blob&&new Blob([atob(M)],{type:"text/javascript;charset=utf-8"});function I(){const t=_&&(window.URL||window.webkitURL).createObjectURL(_);try{return t?new Worker(t):new Worker("data:application/javascript;base64,"+M)}finally{t&&(window.URL||window.webkitURL).revokeObjectURL(t)}}const T={urlCDN:"https://biowasm.com/cdn/v3",urlCDNStg:"https://stg.biowasm.com/cdn/v3",dirShared:"/shared",dirMounted:"/mnt",dirData:"/data",printInterleaved:!0,printStream:!1,callback:null,debug:!1,env:"prd"};class L{constructor(t,e={}){if(null==t)throw"Expecting array of tools as input to Aioli constructor.";return Array.isArray(t)||(t=[t]),e=Object.assign({},T,e),t=t.map(this._parseTool),"stg"===e.env&&(e.urlCDN=e.urlCDNStg),this.tools=t,this.config=e,null!=this.config.callback&&(this.callback=this.config.callback),delete this.config.callback,this.init()}async init(){const t=new I;this.callback&&(t.onmessage=t=>{"biowasm"===t.data.type&&this.callback(t.data.value)});const e=y(t);return e.tools=this.tools,e.config=this.config,await e.init(),e}_parseTool(t){if("string"!=typeof t)return t;const e=t.split("/");if(2!=e.length&&3!=e.length)throw"Expecting '<tool>/<version>' or '<tool>/<program>/<version>'";return{tool:e[0],program:3==e.length?e[1]:e[0],version:e[e.length-1]}}}var N=n(3629);class P{static getAvailableScales(){return Object.entries(this.scales).map((([t,e])=>t))}static getScale(t){return(0,N.vA)(!(void 0===this.scales[t]),`Scale '${t}' was not found.`),this.scales[t]}}P.scales={WimleyWhite:{"-":0,A:.17,C:-.24,D:-.07,E:-.01,F:-1.13,G:.01,H:.17,I:-.31,K:.99,L:-.56,M:-.23,N:.42,P:.45,Q:.58,R:.81,S:.13,T:.14,V:.07,W:-1.85,Y:-.94},categorial:{"-":0,A:1,C:2,D:3,E:4,F:5,G:6,H:7,I:8,K:9,L:10,M:11,N:12,P:13,Q:14,R:15,S:16,T:17,V:18,W:19,Y:20}};class ${constructor(t="categorial"){this.aa2num=P.getScale(t),this.num2aa={},Object.entries(this.aa2num).forEach((([t,e])=>this.num2aa[e]=t))}static _truncateSequence(t){let e=0,n=t.length;const i=["NH2","COOH"];if(t.startsWith(i[0])){const n=i[0].length;(0,N.vA)("-"==t[n],`Wrong sequence format: ${i[0]} without following '-' in '${t}'.`),e=n}if(t.endsWith(i[1])){const e=i[1].length+1;(0,N.vA)("-"==t[n-e],`Wrong sequence format: ${i[1]} without '-' precending in '${t}'.`),n-=e}return t.substring(e,n)}static _dropDefises(t){return t.replace(/(-)([^-]+)/g,"$2")}static clean(t){return $._dropDefises($._truncateSequence(t))}encode(t){const e=t.length,n=new Array(e).fill(0);for(let i=0;i<e;++i){const e=t[i];(0,N.vA)(e in this.aa2num,`Unknown char '${e}' found in sequence '${t}'`),n[i]=this.encodeLettter(e)}return n}encodeLettter(t){return this.aa2num[t]}decode(t){let e="";for(let n=0;n<t.length;++n){const i=t[n];(0,N.vA)(i in this.num2aa,`Unknown code '${i}' found in vector '${t}'`),e+=this.num2aa[i]}return e}}var R=n(4139);const O="input.fa",k="result.fasta";class G extends Error{element;constructor(t,e){super(t.innerText,e),this.element=t}}function F(t){return t.reduce(((t,e,n)=>t+`>sample${n+1}\n${e}\n`),"")}async function H(t,e=!1,n="",i=null,o,s,c){let h=t.toList();e&&(h=h.map((t=>$.clean(t).replace(/\-/g,""))));const u=t.length;i??=r.Column.string("Clusters",u).init("0"),i.type!=r.COLUMN_TYPE.STRING&&(i=i.convertTo(r.TYPE.STRING)),i.compact();const d=i.categories,p=i.getRawData(),m=new Array(d.length),f=new Array(d.length);for(let t=0;t<u;++t){const e=p[t];(m[e]??=[]).push(h[t]),(f[e]??=[]).push(t)}D(f,d);const g=await new L(["base/1.0.0",{tool:"kalign",version:R.b9,reinit:!0}]),y=r.Column.string(n,u);for(let t=0;t<d.length;++t){const e=F(m[t]);await g.fs.writeFile(O,e);const n=`${void 0!==o?` --gpo ${o}`:""}${void 0!==s?` --gpe ${s}`:""}${void 0!==c?` --tgpe ${c}`:""}`,i=await g.exec(`kalign ${O} -f fasta -o ${k}${n}`);console.warn(i);const r=await g.cat(k);if(!r){const t=B(i,1);throw new Error(t)}const l=new a.m(r).sequencesArray,h=f[t];for(let t=0;t<l.length;++t)y.set(h[t],l[t])}const b=t.meta.units,v=t.getTag(l.gp.alphabet);return y.meta.units=b,y.setTag(l.gp.aligned,"SEQ.MSA"),y.setTag(l.gp.alphabet,v),y.semType=r.SEMTYPE.MACROMOLECULE,y}function B(t,e){const n=[],i=/^.+ERROR : (.+)$/gm;let r;for(;null!=(r=i.exec(t))&&(void 0===e||n.length<e);)n.push(r[1]);return n.join("\n")}function D(t,e){const n=t.map(((t,e)=>[t,e])).filter((([t,e])=>1==t.length)).map((([t,e])=>e));if(n.length>0){const t=i.div([i.divText(`MSA analysis is not available on single sequence clusters #${n.length}:`),...s()(n).take(3).map((t=>{let r=e[t];return r.length>25&&(r=r.slice(0,25)+"..."),i.divText(`"${r}"${t<n.length-1?", ":"."}`)})).toArray(),...n.length>3?[i.divText("...")]:[]]);throw new G(t)}}},8152:(t,e,n)=>{"use strict";n.d(e,{GD:()=>d,ZY:()=>h});var i=n(4328),r=n(6082),o=n(2003),s=n(608),a=n(4139),l=n(6766);const c=new class{dcName="bio";async getDockerContainer(){return await i.dapi.docker.dockerContainers.filter(this.dcName).first()}},h=["mafft --auto","mafft","linsi","ginsi","einsi","fftns","fftnsi","nwns","nwnsi"],u=["AlignedSeq","AlignedSubpeptide","HELM","ID","PolymerID"];async function d(t,e,n="ginsi",i=1.53,l=0,h=null,d){const m=await c.getDockerContainer(),f=t.length;h??=r.Column.int("Clusters",f).init(0),h.type!=r.COLUMN_TYPE.STRING&&(h=h.convertTo(r.TYPE.STRING));const g=h.categories,y=h.getRawData(),b=new Array(g.length),v=new Array(g.length);for(let e=0;e<f;++e){const n=y[e],i=g[n];if(""===i)continue;const r=g.indexOf(i),o=t.get(e);o&&((b[r]??=[]).push({ID:e.toString(),HELM:o}),(v[n]??=[]).push(e))}(0,s.aZ)(v,g);const w=new Array(f);for(const t of b){const e=(await p(m.id,t,n,i,l,d)).Alignment;for(const t of e)w[parseInt(t.ID)]=Object.entries(t).filter((t=>!u.includes(t[0]))).map((t=>"-"!==t[1]?t[1]:"")).join(a.J.SEPARATOR)}const C=r.Column.fromStrings(e,w);return C.meta.units=o.Hi.SEPARATOR,C.setTag(o.gp.separator,a.J.SEPARATOR),C.setTag(o.gp.aligned,"SEQ.MSA"),C.setTag(o.gp.alphabet,o.YI.UN),C.setTag(o.gp.alphabetIsMultichar,"true"),C.semType=r.SEMTYPE.MACROMOLECULE,C}async function p(t,e,n,r,o,s){const a={method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(e)},c=`/align?method=${n}&gap_open=${r}&gap_extend=${o}`,h=window.performance.now(),u=await i.dapi.docker.dockerContainers.fetchProxy(t,c,a),d=window.performance.now();l._package.logger.debug(`Bio: requestAlignedObjects() dockerContainers.fetchProxy(), ET: ${d-h} ms`);const p="application/json"===u.headers.get("content-type");if(!u.ok&&p){const t=await u.json(),e=t["pepsea-error"];if(e)throw new Error(`PepSeA error: ${e}`);const n=t["datagrok-error"];if(n)throw new Error(`Datagrok error: ${n}`);throw new Error(u.statusText)}if(!u.ok&&!p){const t=await u.text();throw new Error(`Error: ${t}`)}if(!p){const t=await u.text();throw new Error(`Error: PepSeA expected JSON response, got '${t}'.`)}const m=await u.json();if("pepsea-stderr"in m){const t=m["pepsea-stderr"];s?.warning(t)}return m}},3890:(t,e,n)=>{"use strict";n.d(e,{TE:()=>h});var i=n(6082),r=n(7389),o=n(4328),s=n(1991),a=n.n(s),l=n(6766);const c=60;function h(){const t=o.shell.tv.grid,e=a().count(0).take(t.columns.length).map((e=>t.columns.byIndex(e))).filter((t=>!!t.column&&t.column.semType!==i.SEMTYPE.MACROMOLECULE)).toArray(),n=e.find((t=>-1!==t.name.toLowerCase().indexOf("id"))),s=n?[n.name]:[],h=r.input.multiChoice("Seq id columns",{value:s,items:e.map((t=>t.name))}),d=a().count(0).take(t.columns.length).map((e=>t.columns.byIndex(e))).filter((t=>{const e=t.column;return!(!e||e.semType!==i.SEMTYPE.MACROMOLECULE)&&l._package.seqHelper.getSeqHandler(e).isFasta()})).toArray(),p=d.length>0?d[0].name:[],m=r.input.choice("Seq column",{value:p,items:d.map((t=>t.name))}),f=r.input.int("FASTA line width",{value:c});r.dialog({title:"Save as FASTA"}).add(r.inputs([h,m,f])).onOK((()=>{const e=h.value?h.value.map((e=>t.columns.byName(e).column)):[],n=m.value?t.columns.byName(m.value).column:null,i=f.value??c;n||o.shell.warning("Seq column is mandatory to save as FASTA.");const r=function(t,e,n=c,i="\n"){const r=[];for(let o=0;o<e.length;o++){const s=t.map((t=>t.get(o).toString())).join("|"),a=u(e.getSplitted(o),n);r.push(`>${s}${i}`);for(const t of a)r.push(`${t}${i}`)}return"".concat(...r)}(e,l._package.seqHelper.getSeqHandler(n),i),s=document.createElement("a");s.setAttribute("href",`data:text/plain;charset=utf-8,${encodeURIComponent(r)}`),s.setAttribute("download",`${t.dataFrame.name}.fasta`),s.click()})).show()}function u(t,e=c){let n=0;const i=t.length,r=[];for(;n<i;){const i=a().count(n).take(Math.min(t.length-n,e)).map((e=>t.getOriginal(e))).toArray(),o=i.map((t=>t.length>1?`[${t}]`:t)).reduce(((t,e)=>t+e),"");r.push(o),n+=i.length}return r}},8754:(t,e,n)=>{"use strict";n.d(e,{V:()=>h});var i=n(4328),r=n(6077),o=n(2003),s=n(8312),a=n(5553),l=n(966),c=n(330);async function h(t,e,n,h,u,d,p){let m;if(n){const n=await(0,s.Q)(),i=n.getSeqHandler(e);let r,a;i.isHelm()?r=e:(a=e.name,e.name=`__${a}`,r=i.convert(o.Hi.HELM),r.name=a,t.columns.add(r,!1));try{m=await n.helmToAtomicLevel(r,!0,!0,u)}finally{r!==e&&(t.columns.remove(r.name),e.name=a)}}else{if(!(0,l.l)(e,"To Atomic Level",d)[0])return{molCol:null,warnings:["Column is not suitable"]};m=await(0,r.C4)(t,e,u,d,p)}if(m.molCol){const r=(0,c.qj)(t,e.name);m.molCol.name=r,t.columns.add(m.molCol,!0),await(0,a.Qc)(e,m.molCol,u,d,p,n),m.molCol.setTag(".sequence-src-highlight-monomers",String(h)),await i.data.detectSemanticTypes(t)}return m}},4870:(t,e,n)=>{"use strict";n.d(e,{Kd:()=>a,Ku:()=>s,me:()=>o});var i=n(4328),r=n(6082);function o(){const t=i.shell.t.columns.bySemTypeAll(r.SEMTYPE.MACROMOLECULE);return null===t?(i.shell.error("Current table does not contain macromolecules"),[]):t}function s(t,e){t.innerHTML="",t.append(e)}function a(t,e,n,i,r){const o=()=>{const r=t.col(e);r&&(r.width=n),i&&(t.props.rowHeight=i)};if(r)return void o();const s=t.onAfterDrawOverlay.subscribe((()=>{s.unsubscribe(),setTimeout((()=>{o()}))}))}},250:(t,e,n)=>{"use strict";n.d(e,{n5:()=>v,oP:()=>I});var i=n(4328),r=n(7389),o=n(6082),s=n(1757),a=n.n(s),l=n(1991),c=n.n(l),h=n(1858),u=n(2003),d=n(4326);function p(t){var e;return"string"==typeof t||t instanceof String?t:("object"==typeof t||t instanceof Object)&&"$thrownJsError"in t?p(t.$thrownJsError):t instanceof Error?null!==(e=t.stack)&&void 0!==e?e:t.message:t.toString()}var m=n(8070),f=n(7602),g=n(439),y=n(6882);var b,v,w=n(2174),C=n(6766);function A(t,e,n){return Math.abs(t-e)<=n}HTMLCanvasElement.prototype.getCursorPosition=function(t,e){const n=this.getBoundingClientRect();return new o.Point((t.clientX-n.left)*e,(t.clientY-n.top)*e)},o.Rect.prototype.contains=function(t,e){return this.left<=t&&t<=this.right&&this.top<=e&&e<=this.bottom};class S{rowCount;value;plotValue;valueList=null;valueIdx=0;bounds;constructor(t=0,e){this.value=this.rowCount=t,this.bounds=e}push(t){this.valueList||(this.valueList=new Array(this.rowCount),this.valueIdx=0),this.valueList[this.valueIdx]=t,++this.valueIdx}aggregate(t){this.value=t(this.valueList)??0,this.valueList=null}}class x{pos;name;_label;get label(){return this._label?this._label:this.name}_freqs;sumRowCount=0;sumPlotValue;sumPlotValueForHeight;constructor(t,e,n,i){this.pos=t,this.name=e,this._freqs=n??{},i?.sumRowCount&&(this.sumRowCount=i.sumRowCount),i?.sumValueForHeight&&(this.sumPlotValue=i.sumValueForHeight),i?.label&&(this._label=i.label)}getMonomers(){return Object.keys(this._freqs)}hasMonomer(t){return t in this._freqs}getFreq(t){let e=this._freqs[t];return e||(e=this._freqs[t]=new S),e}aggregate(t){const e=function(t){return e=>{const n=function(t){let e;const n="agg";return e=t instanceof Float32Array?o.Column.fromFloat32Array(n,t):t instanceof Int32Array?o.Column.fromInt32Array(n,t):o.Column.fromList(o.COLUMN_TYPE.FLOAT,n,t),e}(e);return n.aggregate(t)}}(t);for(const[t,n]of Object.entries(this._freqs))n.aggregate(e)}getMinValue(){return Math.min(...Object.values(this._freqs).map((t=>t.value)))}calcPlotValue(t){for(const e of Object.values(this._freqs))e.plotValue=e.value-t}calcHeights(t){this.sumPlotValue=0;for(const t of Object.values(this._freqs))this.sumPlotValue+=t.plotValue;if(this.sumPlotValueForHeight=0,t===d.fH.Entropy){const t=Object.keys(this._freqs).length,e=.01*this.sumPlotValue,n=e/t;for(const t of Object.values(this._freqs)){const i=(t.plotValue+n)/(this.sumPlotValue+e);this.sumPlotValueForHeight+=-i*Math.log2(i)}}else if(t===d.fH.full)for(const[t,e]of Object.entries(this._freqs)){const t=e.plotValue/this.sumPlotValue;this.sumPlotValueForHeight+=t}}calcScreen(t,e,n,i,r,s,a,l,c){const h=i===d.fH.Entropy?n*(r-this.sumPlotValueForHeight)/r:n;let u=c*l+(n-h-1);const p=Object.entries(this._freqs).sort(((t,e)=>t[0]!==g._S&&e[0]!==g._S?e[1].value-t[1].value:t[0]===g._S&&e[0]===g._S?0:t[0]===g._S?-1:1));for(const[n,i]of p){const n=h*i.plotValue/this.sumPlotValue;i.bounds=new o.Rect((t-e)*l*s,u,a*l,n),u+=n}}render(t,e,n,i,r,o,s){for(const[a,l]of Object.entries(this._freqs))if(a!==g._S){const c=(0,u.zS)(a,s),h=l.bounds,d=h.left;let p=y.S$;o&&(p=o.getMonomerTextColor(r,a)),t.resetTransform(),t.strokeStyle="lightgray",t.lineWidth=1,t.rect(d,h.top,h.width,h.height),t.fillStyle=p,t.textAlign="left",t.font=e;const m=t.measureText(c);t.setTransform(h.width/m.width,0,0,h.height/i,d,h.top),t.fillText(c,0,-n)}}getMonomerAt(t,e){const n=Object.entries(this._freqs).find((([n,i])=>i.bounds.contains(t,e)));return n?n[0]:void 0}buildCompositionTable(t,e){if("-"in this._freqs)throw new Error("Unexpected monomer symbol '-'.");return(0,w.F)(Object.assign({},...Object.entries(this._freqs).map((([t,e])=>({[t]:e.rowCount})))),t,e)}}!function(t){t.STYLE="Style",t.BEHAVIOR="Behavior",t.LAYOUT="Layout",t.DATA="Data"}(b||(b={})),function(t){t.sequenceColumnName="sequenceColumnName",t.valueAggrType="valueAggrType",t.valueColumnName="valueColumnName",t.startPositionName="startPositionName",t.endPositionName="endPositionName",t.skipEmptySequences="skipEmptySequences",t.skipEmptyPositions="skipEmptyPositions",t.shrinkEmptyTail="shrinkEmptyTail",t.backgroundColor="backgroundColor",t.positionHeight="positionHeight",t.positionWidth="positionWidth",t.verticalAlignment="verticalAlignment",t.horizontalAlignment="horizontalAlignment",t.fixWidth="fixWidth",t.fitArea="fitArea",t.minHeight="minHeight",t.maxHeight="maxHeight",t.maxMonomerLetters="maxMonomerLetters",t.showPositionLabels="showPositionLabels",t.positionMarginState="positionMarginState",t.positionMargin="positionMargin",t.filterSource="filterSource"}(v||(v={}));const E=d.Fo;var M;!function(t){t[t.None=0]="None",t[t.Render=1]="Render",t[t.Layout=1]="Layout",t[t.Freqs=2]="Freqs"}(M||(M={}));const _=new class{render=20};class I extends o.JsViewer{static residuesSet="nucleotides";viewed=!1;seqHelper;seqHandler;initialized=!1;monomerLib=null;host;msgHost;canvas;slider;textBaseline;seqCol=null;positions=[];visibleSlider=!1;allowResize=!0;turnOfResizeForOneSetValue=!1;sequenceColumnName;valueAggrType;valueColumnName;skipEmptySequences;skipEmptyPositions;positionWidth;_positionWidth;_positionWidthWithMargin;get positionWidthWithMargin(){return this._positionWidthWithMargin}minHeight;backgroundColor=4294967295;maxHeight;maxMonomerLetters;showPositionLabels;positionMarginState;positionMargin=0;_positionMargin;startPositionName;endPositionName;fixWidth;verticalAlignment;horizontalAlignment;fitArea;shrinkEmptyTail;positionHeight;filterSource;positionNames=[];positionLabels=void 0;startPosition=-1;endPosition=-1;error=null;get Length(){return this.skipEmptyPositions?this.positions.length:this.startPosition<=this.endPosition?this.endPosition-this.startPosition+1:0}get positionMarginValue(){return this.positionMarginState===d.mH.AUTO&&!0===this.seqHandler.getAlphabetIsMultichar()||this.positionMarginState===d.mH.ON?this.positionMargin:0}constructor(){super(),this.seqHelper=C._package.seqHelper,this.textBaseline="top",this.seqHandler=null,this.sequenceColumnName=this.string(v.sequenceColumnName,E.sequenceColumnName,{category:b.DATA,semType:o.SEMTYPE.MACROMOLECULE,description:"Column with sequences"});const t=[o.AGG.KEY,o.AGG.PIVOT,o.AGG.MISSING_VALUE_COUNT,o.AGG.SKEW,o.AGG.KURT,o.AGG.SELECTED_ROWS_COUNT],e=Object.values(o.AGG).filter((e=>!t.includes(e)));this.valueColumnName=this.string(v.valueColumnName,E.valueColumnName,{category:b.DATA,columnTypeFilter:"numerical",description:"Column with values used in aggregation for position heights"}),this.valueAggrType=this.string(v.valueAggrType,E.valueAggrType,{category:b.DATA,choices:e,description:"Aggregation method for value column"}),this.startPositionName=this.string(v.startPositionName,E.startPositionName,{category:b.DATA,description:"Position or column name for start position. If column with given name is found, its values will be used as start position. If number is supplied, it will be used as start position of WebLogo."}),this.endPositionName=this.string(v.endPositionName,E.endPositionName,{category:b.DATA,description:"Position or column name for end position. If column with given name is found, its values will be used as end position. If number is supplied, it will be used as end position of WebLogo."}),this.skipEmptySequences=this.bool(v.skipEmptySequences,E.skipEmptySequences,{category:b.DATA,description:"Skip sequences which are empty in all positions"}),this.skipEmptyPositions=this.bool(v.skipEmptyPositions,E.skipEmptyPositions,{category:b.DATA,description:"Skip positions which are empty in all sequences"}),this.shrinkEmptyTail=this.bool(v.shrinkEmptyTail,E.shrinkEmptyTail,{category:b.DATA,description:"Skip empty tail (if found for all sequences within a subset) in WebLogo"}),this.backgroundColor=this.int(v.backgroundColor,E.backgroundColor,{category:b.STYLE,description:"Background color of WebLogo canvas"}),this.positionHeight=this.string(v.positionHeight,E.positionHeight,{category:b.STYLE,choices:Object.values(d.fH),description:"Monomer-Position height mode. Entropy of 100%(full height)"}),this._positionWidth=this.positionWidth=this.float(v.positionWidth,E.positionWidth,{category:b.LAYOUT,editor:"slider",min:4,max:100,description:'Width of position in WebLogo. If "Fit Area" is enabled, width will be calculated to fit horizontal space'}),this.verticalAlignment=this.string(v.verticalAlignment,E.verticalAlignment,{category:b.LAYOUT,choices:Object.values(d.Lp)}),this.horizontalAlignment=this.string(v.horizontalAlignment,E.horizontalAlignment,{category:b.LAYOUT,choices:Object.values(d.P4)}),this.fixWidth=this.bool(v.fixWidth,E.fixWidth,{category:b.LAYOUT,userEditable:!1}),this.fitArea=this.bool(v.fitArea,E.fitArea,{category:b.LAYOUT,description:"Fit WebLogo to the horizontal space. Calculates position width as maximum between provided width value and value needed to fit whole horizontal space."}),this.minHeight=this.int(v.minHeight,E.minHeight,{category:b.LAYOUT,editor:"slider",min:10,max:250,description:"Minimum height of WebLogo"}),this.maxHeight=this.int(v.maxHeight,E.maxHeight,{category:b.LAYOUT,editor:"slider",min:25,max:Math.max(window.innerHeight??0,1e3),nullable:!0,description:"Maximum height of WebLogo"}),this.maxMonomerLetters=this.int(v.maxMonomerLetters,E.maxMonomerLetters,{category:b.LAYOUT,editor:"slider",min:1,max:40,description:"Maximum monomer letters to display before shortening"}),this.showPositionLabels=this.bool(v.showPositionLabels,E.showPositionLabels,{category:b.LAYOUT,description:"Show position labels on top of the weblogo"}),this.positionMarginState=this.string(v.positionMarginState,E.positionMarginState,{category:b.LAYOUT,choices:Object.values(d.mH),description:"Calculate optimal margins between positions or turn it on/off"});let n=0;"auto"===this.positionMarginState&&(n=4),this.positionMargin=this.int(v.positionMargin,n,{category:b.LAYOUT,min:0,max:25,description:"Margin between positions in WebLogo"}),this.filterSource=this.string(v.filterSource,E.filterSource,{category:b.BEHAVIOR,choices:Object.values(d.lT),description:"Data source for weblogo. Selected or filtered rows."}),this.slider=r.rangeSlider(0,100,0,20,!1,{style:"barbell"}),this.canvas=r.canvas(),this.canvas.classList.value="bio-wl-canvas",this.canvas.style.width="100%",(0,C.getMonomerLibHelper)().then((t=>{this.monomerLib=t.getMonomerLib(),this.render(M.Render,"monomerLib"),this.subs.push(this.monomerLib.onChanged.subscribe((()=>{this.render(M.Render,"monomerLib changed")})))})),this.viewSyncer=new f.g(C._package.logger)}static viewerCounter=-1;viewerId=++I.viewerCounter;toLog(){return`WebLogoViewer<${this.viewerId}>`}setData(){const t=`${this.toLog()}.setData()`;C._package.logger.debug(`${t}, in`),this.viewSyncer.sync(`${t}`,(async()=>{if(!this.setDataInProgress){this.setDataInProgress=!0;try{this.viewed&&(this.renderRequestSub.unsubscribe(),await this.destroyView(),this.viewed=!1),this.updateSeqCol(),this.updateEditors(),this.viewed||(await this.buildView(),this.viewed=!0)}finally{this.setDataInProgress=!1}}})),C._package.logger.debug(`${t}, out`)}viewSyncer;setDataInProgress=!1;viewSubs=[];async destroyView(){for(const t of this.viewSubs)t.unsubscribe();this.viewSubs=[];const t=this.dataFrame?"data":"null";C._package.logger.debug(`${this.toLog()}.destroyView( dataFrame = ${t} ) start`),this.host.remove(),this.msgHost=void 0,this.host=void 0,C._package.logger.debug(`${this.toLog()}.destroyView() end`)}async buildView(){const t=this.dataFrame?"data":"null";C._package.logger.debug(`${this.toLog()}.buildView( dataFrame = ${t} ) start`),window.devicePixelRatio,this.viewSubs.push(o.debounce(this.renderRequest,_.render).subscribe(this.renderRequestOnDebounce.bind(this))),this.helpUrl="/help/visualize/viewers/web-logo.md",this.msgHost=r.div("No message",{classes:"bio-wl-msg"}),this.msgHost.style.display="none",this.canvas=r.canvas(),this.canvas.style.width="100%",this.slider.root.style.position="absolute",this.slider.root.style.zIndex="999",this.slider.root.style.display="none",this.slider.root.style.height="0.7em",this.visibleSlider=!1,this.host=r.div([this.msgHost,this.canvas],{classes:"bio-wl-host",style:{display:"flex",flexDirection:"row",flexGrow:"0",flexWrap:"wrap"}}),this.root.append(this.host),this.root.append(this.slider.root),this.error&&(this.msgHost.innerText=this.error.message,r.tooltip.bind(this.msgHost,this.error.stack),this.msgHost.style.setProperty("display",null)),this.dataFrame&&(this.viewSubs.push(this.dataFrame.filter.onChanged.subscribe(this.dataFrameFilterOnChanged.bind(this))),this.viewSubs.push(this.dataFrame.selection.onChanged.subscribe(this.dataFrameSelectionOnChanged.bind(this)))),this.viewSubs.push(r.onSizeChanged(this.root).subscribe(this.rootOnSizeChanged.bind(this))),this.viewSubs.push(this.slider.onValuesChanged.subscribe(this.sliderOnValuesChanged.bind(this))),this.viewSubs.push((0,h.fromEvent)(this.canvas,"mousemove").subscribe(this.canvasOnMouseMove.bind(this))),this.viewSubs.push((0,h.fromEvent)(this.canvas,"mousedown").subscribe(this.canvasOnMouseDown.bind(this))),this.viewSubs.push((0,h.fromEvent)(this.canvas,"wheel").subscribe(this.canvasOnWheel.bind(this))),this.render(M.Freqs,"buildView"),C._package.logger.debug(`${this.toLog()}.buildView() end`)}lastSize={width:-1,height:-1};rootOnSizeChanged(t){const e={width:t.target.clientWidth,height:t.target.clientHeight};this.lastSize.width==e.width&&this.lastSize.height==e.height||(C._package.logger.debug(`${this.toLog()}.rootOnSizeChanged(), ${JSON.stringify(e)}, start `),this.render(M.Layout,"rootOnSizeChanged")),this.lastSize=e}updateEditors(){this.props.getProperty(v.valueColumnName).choices=c()(this.dataFrame.columns.numerical).map((t=>t.name)).toArray()}updateSeqCol(){if(this.dataFrame&&(this.seqCol=this.sequenceColumnName?this.dataFrame.col(this.sequenceColumnName):null,null==this.seqCol&&(this.seqCol=(0,u.mn)(this.dataFrame),this.sequenceColumnName=this.seqCol?this.seqCol.name:null),this.seqCol)){try{this.seqHandler=this.seqHelper.getSeqHandler(this.seqCol),this.render(M.Freqs,"updateSeqCol()"),this.error=null}catch(t){throw this.seqCol=null,this.error=t instanceof Error?t:new Error(t.toString()),t}this.seqCol||(this.seqHandler=null,this.positionNames=[],this.positionLabels=[],this.startPosition=-1,this.endPosition=-1)}}getFilter(){let t;switch(this.filterSource){case d.lT.Filtered:t=this.dataFrame.filter;break;case d.lT.Selected:t=0===this.dataFrame.selection.trueCount?this.dataFrame.filter:this.dataFrame.selection}return t}setSliderVisibility(t){t?(this.slider.root.style.display="inherit",this.visibleSlider=!0):(this.slider.root.style.display="none",this.visibleSlider=!1)}calcLayout(t){this.host&&this.canvas&&this.slider&&(this.host.classList.remove("bio-wl-fixWidth","bio-wl-fitArea"),this.canvas.classList.remove("bio-wl-fixWidth","bio-wl-fitArea"),this._positionWidth=this.positionWidth,this._positionMargin=this.positionMargin,this._positionWidthWithMargin=this._positionWidth+this.positionMarginValue,this.fixWidth?this.calcLayoutFixWidth(t):this.calcLayoutNoFitArea(t),this.slider.root.style.width=`${this.host.clientWidth}px`)}calcLayoutFixWidth(t){if(!this.host||!this.canvas||!this.slider)return;this.host.classList.add("bio-wl-fixWidth"),this.canvas.classList.add("bio-wl-fitArea");const e=this._positionWidthWithMargin*this.Length,n=Math.min(Math.max(this.minHeight,this.root.clientHeight),this.maxHeight??this.root.clientHeight);this.host.style.justifyContent=d.P4.LEFT,this.host.style.removeProperty("margin-left"),this.host.style.removeProperty("margin-top"),this.host.style.width=this.canvas.style.width=`${e}px`,this.host.style.height=this.canvas.style.height=`${n}px`,this.host.style.left=this.canvas.style.left="0",this.host.style.top=this.canvas.style.top="0",this.host.style.setProperty("overflow","hidden","important"),this.slider.root.style.display="none",this.slider.setValues(0,Math.max(0,this.Length-1),0,Math.max(0,this.Length-1)),this.canvas.width=e*t,this.canvas.height=n*t}calcLayoutNoFitArea(t){if(!this.host||!this.canvas||!this.slider)return;let e=this._positionWidthWithMargin*this.Length,n=Math.min(this.root.clientWidth,e);this.fitArea&&e<this.root.clientWidth&&(this._positionWidth=Math.floor(this._positionWidth*this.root.clientWidth/e),this._positionWidthWithMargin=this._positionWidth+this.positionMarginValue,e=this._positionWidthWithMargin*this.Length,n=Math.min(this.root.clientWidth,e));const i=Math.min(Math.max(this.minHeight,this.root.clientHeight),this.maxHeight??this.root.clientHeight);this.canvas.style.width=`${n}px`,this.canvas.style.height=`${i}px`,this.host.style.width=`${this.root.clientWidth}px`,this.host.style.height=`${this.root.clientHeight}px`,this.host.style.justifyContent=this.horizontalAlignment,this.host.style.alignContent=this.verticalAlignment===d.Lp.TOP?"start":this.verticalAlignment===d.Lp.MIDDLE?"center":this.verticalAlignment===d.Lp.BOTTOM?"end":"inherit",this.root.clientHeight<this.minHeight&&(this.host.style.alignContent="start",this.host.style.width=`${n+8}px`);const r=e>n;if(this.setSliderVisibility(r),r){this.slider.root.style.removeProperty("display"),this.host.style.justifyContent="left",this.host.style.height=this.root.clientHeight-this.slider.root.offsetHeight+"px",this.canvas.style.height=i-this.slider.root.offsetHeight+"px",this.slider.root.style.top=`${this.host.offsetHeight}px`;let t=Math.min(Math.max(0,this.slider.min),this.Length-.001),e=Math.min(Math.max(0,this.slider.max),this.Length-.001);const n=this.canvas.clientWidth/this._positionWidthWithMargin;e=Math.min(Math.max(t,0)+n,this.Length-.001),t=Math.max(0,Math.min(e,this.Length-.001)-n),this.safeUpdateSlider(0,Math.max(this.Length-.001),t,e)}else this.safeUpdateSlider(0,Math.max(0,this.Length-.001),0,Math.max(0,this.Length-.001));this.canvas.width=n*t,this.canvas.height=i*t}calcLayoutFitArea(t){if(!this.host||!this.canvas||!this.slider)return;const e=this._positionWidth*this.Length,n=Math.min(Math.max(this.minHeight,this.root.clientHeight),this.maxHeight??this.root.clientHeight),i=e>0?(this.root.clientWidth-this.positionMarginValue*this.Length)/e:0,r=this.root.clientHeight/n,o=Math.max(1,Math.min(i,r));this._positionWidth=this.positionWidth*o,this._positionWidthWithMargin=this._positionWidth+this.positionMarginValue;const s=(this._positionWidth+this.positionMarginValue)*this.Length,a=o*n,l=Math.min(this.root.clientWidth,s);this.canvas.style.width=`${l}px`,this.canvas.style.height=`${a}px`,this.host.style.width=`${l}px`,this.host.style.height=`${this.root.clientHeight}px`,this.host.style.justifyContent=this.horizontalAlignment,this.host.style.alignContent=this.verticalAlignment===d.Lp.TOP?"start":this.verticalAlignment===d.Lp.MIDDLE?"center":this.verticalAlignment===d.Lp.BOTTOM?"end":"inherit",this.root.clientHeight<this.minHeight&&(this.host.style.alignContent="start",this.host.style.width=`${l+6}px`),this.host.style.width=`${this.host}px`;const c=s>l;if(this.setSliderVisibility(c),c){this.slider.root.style.removeProperty("display"),this.host.style.justifyContent="left",this.host.style.height=this.root.clientHeight-this.slider.root.offsetHeight+"px",this.slider.root.style.top=`${this.host.offsetHeight}px`;let t=Math.min(Math.max(0,this.slider.min),this.Length-.001),e=Math.min(Math.max(0,this.slider.max),this.Length-.001);const n=this.root.clientWidth/this._positionWidthWithMargin;e=Math.min(Math.max(t,0)+n,this.Length-.001),t=Math.max(0,Math.min(e,this.Length-.001)-n),this.safeUpdateSlider(0,Math.max(0,this.Length-.001),t,e)}else this.safeUpdateSlider(0,Math.max(0,this.Length-.001),0,Math.max(0,this.Length-.001));this.canvas.width=l*t,this.canvas.height=a*t}safeUpdateSlider(t,e,n,i){A(t,this.slider.minRange,.1)&&A(e,this.slider.maxRange,.1)&&A(n,this.slider.min,.1)&&A(i,this.slider.max,.1)||this.slider.setValues(t,e,n,i)}onPropertyChanged(t){switch(super.onPropertyChanged(t),t.name){case v.sequenceColumnName:this.updateSeqCol();break;case v.sequenceColumnName:case v.startPositionName:case v.endPositionName:case v.filterSource:case v.shrinkEmptyTail:case v.skipEmptyPositions:case v.positionHeight:case v.valueColumnName:case v.valueAggrType:this.render(M.Freqs,`onPropertyChanged( ${t.name} )`);break;case v.minHeight:case v.maxHeight:case v.maxMonomerLetters:case v.positionWidth:case v.showPositionLabels:case v.fixWidth:case v.fitArea:case v.horizontalAlignment:case v.verticalAlignment:case v.positionMargin:case v.positionMarginState:this.render(M.Layout,`onPropertyChanged(${t.name})`);break;case v.backgroundColor:this.render(M.Render,`onPropertyChanged(${t.name})`)}}onTableAttached(){C._package.logger.debug(`${this.toLog()}.onTableAttached(), `),super.onTableAttached(),this.setData()}detach(){const t=`${this.toLog()}.detach()`;C._package.logger.debug(`${t}, in`);const e=super.detach.bind(this);this.viewSyncer.sync(`${t}`,(async()=>{this.setDataInProgress||(this.viewed&&(await this.destroyView(),this.viewed=!1),e())})),C._package.logger.debug(`${t}, out`)}_onSizeChanged=new h.Subject;get onSizeChanged(){return this._onSizeChanged}_onFreqsCalculated=new h.Subject;get onFreqsCalculated(){return this._onFreqsCalculated}_onLayoutCalculated=new h.Subject;get onLayoutCalculated(){return this._onLayoutCalculated}getMonomer(t,e){const n=t.x,i=Math.floor(t.x/(this._positionWidthWithMargin*e)+Math.floor(this.slider.min)),r=this.positions[i];if(!r)return[null,null,null];const o=r.getMonomerAt(n,t.y);return void 0===o?[r,null,null]:[r,o,r.getFreq(o)]}_nullSequence(t="X"){return this.skipEmptySequences?"":new Array(this.Length).fill(t).join("")}_removeEmptyPositions(){this.skipEmptyPositions&&(this.positions=c()(this.positions).filter((t=>!t.hasMonomer(g._S)||t.getFreq(g._S).rowCount!==t.sumRowCount)).toArray())}requestedRenderLevel=M.Freqs;renderRequest=new h.Subject;renderRequestSub;render(t,e){C._package.logger.debug(`${this.toLog()}.render( recalcLevelVal=${t}, reason='${e}' )`),this.requestedRenderLevel=Math.max(this.requestedRenderLevel,t),this.renderRequest.next(this.requestedRenderLevel)}async renderInt(t){if(C._package.logger.debug(`${this.toLog()}.render.renderInt( renderLevel=${t} ), start `),this.msgHost&&(this.msgHost.style.display="none"),!this.seqCol||!this.dataFrame||null==this.host||null==this.slider)return;const e=window.devicePixelRatio,n=this.showPositionLabels?12:0;if(t>=M.Freqs&&(()=>{if(C._package.logger.debug(`${this.toLog()}.render.calculateFreqsInt(), start `),!this.host||!this.seqCol||!this.dataFrame)return;const t=this.seqCol.getTag(u.gp.positionNames),e=this.seqCol.getTag(u.gp.positionLabels);let n;!t&&this.endPositionName&&/\d+/.test(this.endPositionName)?n=Number(this.endPositionName):t&&this.endPositionName&&(n=t.split(u.z1).indexOf(this.endPositionName),n=-1!==n?n:void 0);const i=this.getFilter(),r=0===i.trueCount?this.seqHandler.maxLength:c().count(0).take(this.seqHandler.length).map((t=>{const e=this.seqHandler.getSplitted(t,n);return i.get(t)&&e?e.length:0})).reduce(((t,e)=>Math.max(t,e)),0);this.positionNames=t?t.split(u.z1).map((t=>t.trim())):[...Array(r).keys()].map((t=>`${t+1}`)),this.positionLabels=e?e.split(u.z1).map((t=>t.trim())):void 0,this.startPosition=this.startPositionName&&this.positionNames&&this.positionNames.includes(this.startPositionName)?this.positionNames.indexOf(this.startPositionName):0,this.endPosition=this.endPositionName&&this.positionNames&&this.positionNames.includes(this.endPositionName)?this.positionNames.indexOf(this.endPositionName):r-1;const s=this.startPosition<=this.endPosition?this.endPosition-this.startPosition+1:0;this.seqHandler=this.seqHelper.getSeqHandler(this.seqCol);const a=this.startPosition<=this.endPosition?this.endPosition-this.startPosition+1:0;this.positions=new Array(a);for(let t=0;t<s;t++){const e=this.positionNames[this.startPosition+t],n=this.positionLabels?this.positionLabels[this.startPosition+t]:void 0;this.positions[t]=new x(this.startPosition+t,e,{},{label:n})}this.dataFrame.rowCount;const l=i.getSelectedIndexes();for(let t=0;t<s;++t){for(const e of l){const n=this.seqHandler.getSplitted(e),i=t+this.startPosition<n.length?n.getCanonical(this.startPosition+t):this.seqHandler.defaultGapOriginal,r=this.seqHandler.defaultGapOriginal===i?g._S:i,o=this.positions[t],s=o.getFreq(r);++o.sumRowCount,s.value=++s.rowCount}if(this.valueAggrType===o.AGG.TOTAL_COUNT)continue;let e=null;try{e=this.dataFrame.getCol(this.valueColumnName),e.matches("numerical")||(e=null)}catch{e=null}if(e){for(const n of l){const i=this.seqHandler.getSplitted(n),r=t+this.startPosition<i.length?i.getCanonical(this.startPosition+t):this.seqHandler.defaultGapOriginal,o=this.seqHandler.defaultGapOriginal===r?g._S:r,s=e.get(n);this.positions[t].getFreq(o).push(s)}this.positions[t].aggregate(this.valueAggrType)}}const h=this.valueAggrType===o.AGG.TOTAL_COUNT?0:Math.min(0,Math.min(...this.positions.map((t=>t.getMinValue()))));for(let t=0;t<s;++t)this.positions[t].calcPlotValue(h),this.positions[t].calcHeights(this.positionHeight);this._removeEmptyPositions(),this._onFreqsCalculated.next()})(),this.calcLayout(e),-1===this.startPosition)return;const r=Math.max(Math.floor(this.slider.min),0),s=Math.min(this.positions.length-1,Math.floor(this.slider.max));t>=M.Layout&&((t,e,n,r)=>{C._package.logger.debug(`${this.toLog()}.render.calculateLayoutInt(), start `);const s=this.canvas.height-r*n;let a;if(this.valueAggrType===o.AGG.TOTAL_COUNT){const t=this.seqHandler.getAlphabetSize();this.positionHeight==d.fH.Entropy&&null==t&&i.shell.error("WebLogo: alphabet is undefined."),a=Math.log2(t)}else a=Math.max(...c().count(t).takeWhile((t=>t<=e)).map((t=>this.positions[t].sumPlotValueForHeight)));for(let i=t;i<=e;++i)i in this.positions?this.positions[i].calcScreen(i,this.slider.min,s,this.positionHeight,a,this._positionWidthWithMargin,this._positionWidth,n,r):C._package.logger.warning(`${this.toLog()}.render.calculateLayoutInt() this.positions.length = ${this.positions.length}, jPos = ${i}`);C._package.logger.debug(`${this.toLog()}.render.calculateLayoutInt(), end `),this._onLayoutCalculated.next()})(r,s,window.devicePixelRatio,n);const a=this.canvas.getContext("2d");if(a){a.save();try{this.Length,a.resetTransform(),a.fillStyle=function(t){const e=o.Color.a(t);return`#${(16777215&t).toString(16).padStart(6,"0")}`+e.toString(16).padStart(2,"0")}(this.backgroundColor),a.fillRect(0,0,this.canvas.width,this.canvas.height),a.textBaseline=this.textBaseline;const t=10*e;a.resetTransform(),a.fillStyle="black",a.textAlign="center",a.font=`${t.toFixed(1)}px Roboto, Roboto Local, sans-serif`,n>0&&this.positions.length>0&&function(t,e,n,i,r,o,s,a){t.save();try{t.textAlign="center";let l=null,c=null;for(let e=Math.floor(s);e<=Math.floor(a);e++){const n=o[e],i=t.measureText(n.name),r=i.actualBoundingBoxDescent-i.actualBoundingBoxAscent;l=null===l?i.width:Math.max(l,i.width),c=null===c?r:Math.max(c,r)}const h=l<i*e-2?1:(i*e-2)/l;for(let l=Math.floor(s);l<=Math.floor(a);l++){const a=o[l],u=(l-s)*n*e+i*e/2,d=(r*e-c)/2;t.setTransform(h,0,0,1,u,d),t.measureText(a.label),t.fillText(a.label,0,0)}}finally{t.restore()}}(a,e,this._positionWidthWithMargin,this._positionWidth,n,this.positions,this.slider.min,this.slider.max);const i="16px Roboto, Roboto Local, sans-serif",l=.25,c=12.2,h=this.seqHandler.defaultBiotype;for(let t=r;t<=s;t++)this.positions[t].render(a,i,l,c,h,this.monomerLib,this.maxMonomerLetters)}finally{a.restore()}C._package.logger.debug(`${this.toLog()}.render.renderInt( recalcLevel=${t} ), end`)}}renderRequestOnDebounce(t){const e=`${this.toLog()}.renderRequestOnDebounce()`;"HTML"!==a()(this.root).offsetParent().get()[0]?.tagName?(this.requestedRenderLevel=M.None,this.viewSyncer.sync(e,(async()=>{await this.renderInt(t)}))):C._package.logger.warning(`${e}, $(this.root).offsetParent() is the 'HTML' tag.`)}_lastWidth;_lastHeight;sliderOnValuesChanged(t){try{const t={minRange:this.slider.minRange,min:this.slider.min,max:this.slider.max,maxRange:this.slider.maxRange};if(this.canvas&&this.canvas.offsetWidth>0&&(this._positionWidthWithMargin??0)>0){const e=t.max-t.min,n=this.canvas.offsetWidth/e-this.positionMarginValue;A(n,this.positionWidth,.1)?this.render(M.Layout,"sliderOnValuesChanged"):this.getProperty(v.positionWidth)?.set(this,n)}}catch(t){const e=p(t);C._package.logger.error(`${this.toLog()}.sliderOnValuesChanged() error:\n`+e)}}dataFrameFilterOnChanged(t){C._package.logger.debug(`${this.toLog()}.dataFrameFilterChanged()`);try{this.filterSource===d.lT.Filtered&&this.render(M.Freqs,"dataFrameFilterOnChanged")}catch(t){const e=p(t);C._package.logger.error(`${this.toLog()}.dataFrameFilterOnChanged() error:\n`+e)}}dataFrameSelectionOnChanged(t){C._package.logger.debug(`${this.toLog()}.dataFrameSelectionOnChanged()`);try{this.filterSource===d.lT.Selected&&this.render(M.Freqs,"dataFrameSelectionOnChanged")}catch(t){const e=p(t);C._package.logger.error(`${this.toLog()}.dataFrameSelectionOnChanged() error:\n`+e)}}canvasOnMouseMove(t){if(!this.monomerLib||!this.seqHandler)return;const e=window.devicePixelRatio;try{const n=t,i=this.canvas.getCursorPosition(n,e),[s,a]=this.getMonomer(i,e),l=this.showPositionLabels?12*e:0;if(null!==s&&null===a&&0<=i.y&&i.y<=l){const t=[r.divText(`Position ${s.label}`)];if(this.valueAggrType===o.AGG.TOTAL_COUNT){const e=this.seqHandler.defaultBiotype;t.push(s.buildCompositionTable(e,this.monomerLib))}const e=r.divV(t);e.style.maxHeight="80vh",r.tooltip.show(e,n.x+16,n.y+16)}else if(null!==s&&a&&this.dataFrame&&this.seqCol&&this.seqHandler){const t=s.getFreq(a),e=[r.div(`${a}`),r.div(`${t.rowCount} rows`)];this.valueAggrType!==o.AGG.TOTAL_COUNT&&e.push(r.div(`${this.valueAggrType}: ${t.value.toFixed(3)}`));const i=r.divV(e);r.tooltip.show(i,n.x+16,n.y+16)}else r.tooltip.hide()}catch(t){const e=p(t);C._package.logger.error(`${this.toLog()}.canvasOnMouseMove() error:\n`+e)}}canvasOnMouseDown(t){try{const e=t,n=window.devicePixelRatio,[i,r]=this.getMonomer(this.canvas.getCursorPosition(e,n),n);if(null!==i&&null!==r&&this.dataFrame&&this.seqCol&&this.seqHandler){const t=o.BitSet.create(this.dataFrame.selection.length,(t=>function(t,e,n,i,r,o){const s=e.getSplitted(i),a=o.pos<s.length?s.getCanonical(o.pos):null;return null!==a&&a===r}(this.dataFrame,this.seqHandler,this.getFilter(),t,r,i)));this.dataFrame.selection.init((e=>t.get(e)))}}catch(t){const e=p(t);C._package.logger.error(`${this.toLog()}.canvasOnMouseDown() error:\n`+e)}}canvasOnWheel(t){const e=window.devicePixelRatio;try{if(!this.visibleSlider)return;const n=this.canvas.width/(this._positionWidthWithMargin*e),i=t.deltaY/100*Math.max(Math.floor(n/5),1);this.slider.scrollBy(this.slider.min+i)}catch(t){const e=p(t);C._package.logger.error(`${this.toLog()}.canvasOnWheel() error:\n`+e)}}_onRendered=new h.Subject;get onRendered(){return this._onRendered}invalidate(t){const e=`invalidate(${t?` <- ${t} `:""})`,n=`${this.toLog()}.${e}`;this.render(M.None,e),this.viewSyncer.sync(`${n}`,(async()=>{this._onRendered.next()}))}async awaitRendered(t=5e3){await(0,m.PE)(this.onRendered,(()=>{}),(()=>{this.invalidate()}),t);const e=this.viewSyncer.resetErrors();if(e.length>0)throw e[0]}}},1687:(t,e,n)=>{"use strict";n.d(e,{_i:()=>x});var i=n(7389),r=n(6082),o=n(4328),s=n(1991),a=n.n(s),l=n(1858),c=n(2003),h=n(8070),u=n(7602),d=n(8115),p=n(4574),m=n(1757),f=n.n(m),g=n(9124),y=n(9192),b=n(4870),v=n(6766);class w extends p.O{seqHelper;emptyProps=new p.n("",void 0,v._package.logger);helmEditor;_filterPanel=i.div("",{style:{cursor:"pointer"}});logger;static viewerCounter=-1;viewerId=++w.viewerCounter;viewerToLog(){return`HelmBioFilter<${this.viewerId}>`}get type(){return"HelmBioFilter"}constructor(t){super(),this.seqHelper=t,this.logger=v._package.logger}viewSubs=[];async detach(){await super.detach();for(const t of this.viewSubs)t.unsubscribe()}async attach(){this.viewerToLog();try{const t=await(0,g.b2)();let e,n;this.helmEditor=t.createHelmWebEditor(),this.logger.warning("TEST: HelmBioFilter.init().sync() waitForElementInDom waiting..."),await i.tools.waitForElementInDom(this._filterPanel),this.logger.warning("TEST: HelmBioFilter.init().sync() waitForElementInDom ready"),this.updateFilterPanel(),this.viewSubs.push((0,l.fromEvent)(this._filterPanel,"click").subscribe((()=>{e=i.div(),n=t.createWebEditorApp(e,this.props.substructure),i.dialog({showHeader:!1,showFooter:!0}).add(e).onOK((()=>{try{const t=n.canvas.getHelm(!0).replace(/<\/span>/g,"").replace(/<span style='background:#bbf;'>/g,"");this.props=new p.n(t,void 0,v._package.logger)}catch(t){this.logger.error(t)}finally{f()(e).empty(),e=null,n=null}})).onCancel((()=>{f()(e).empty(),e=null,n=null})).show({modal:!0,fullScreen:!0})}))),this.viewSubs.push(i.onSizeChanged(this._filterPanel).subscribe((t=>{try{if(n){const t=n.canvas.getHelm(!0).replace(/<\/span>/g,"").replace(/<span style='background:#bbf;'>/g,"");this.updateFilterPanel(t)}}catch(t){const[e,n]=(0,y.AP)(t);this.logger.error(e,void 0,n)}})))}catch(t){const[e,n]=(0,y.AP)(t),r=this._filterPanel;r.innerText="error",r.classList.add("d4-error"),i.tooltip.bind(r,e)}}applyProps(){this.helmEditor&&this.updateFilterPanel(this.props.substructure)}get filterPanel(){return this._filterPanel}updateFilterPanel(t){if(!this.helmEditor)throw new Error("helmEditor is not created, the filter is not in dom yet");const e=this._filterPanel.parentElement.clientWidth<100?100:this._filterPanel.parentElement.clientWidth,n=e/2;if(t)(0,b.Ku)(this._filterPanel,this.helmEditor.host),this.helmEditor.editor.setHelm(t),this.helmEditor.resizeEditor(e,n);else{const t=i.divText("Click to edit","helm-substructure-filter");(0,b.Ku)(this._filterPanel,t)}}async substructureSearch(t){const e=`${this.viewerToLog()}.substructureSearch( column = <${t.name}> )`;v._package.logger.debug(`${e}, start`);try{return await(0,h.cb)(10),await(0,d.if)(this.props.substructure,t,this.seqHelper)}finally{v._package.logger.debug(`${e}, end`)}}}const C="bio-substructure-filter";class A{props;filterId;dataFrameId;columnName;bitset;constructor(t,e,n,i,r){this.props=t,this.filterId=e,this.dataFrameId=n,this.columnName=i,this.bitset=r}}class S extends p.n{separator;constructor(t,e,n){super(t,!1,n),this.separator=e,this.readOnly=!0}}class x extends r.Filter{seqHelper;logger;bioFilter=null;bitset=null;loader;notation=void 0;filterSyncer;get calculating(){return"initial"==this.loader.style.display}set calculating(t){this.loader.style.display=t?"initial":"none"}get filterSummary(){return this.bioFilter.filterSummary}get isFiltering(){return super.isFiltering&&(this.bioFilter?.isFiltering??!1)}get isReadyToApplyFilter(){return!this.calculating&&null!=this.bitset}get debounceTime(){if(null==this.column)return 1e3;const t=this.column.length;return t<500?0:t>1e4?1e3:Math.floor((t-500)/9500*1e3)}constructor(t,e){super(),this.seqHelper=t,this.logger=e,this.root=i.divV([]),this.loader=i.loader(),this.calculating=!1,this.filterSyncer=new u.g(this.logger)}static filterCounter=-1;filterId=++x.filterCounter;filterToLog(){return`BioSubstructureFilter<${this.filterId}>`}viewSubs=[];attach(t){const e=super.attach.bind(this),n=`${this.filterToLog()}.attach()`;this.filterSyncer.sync(n,(async()=>{e(t),this.column||(this.columnName?this.column=this.dataFrame.getCol(this.columnName):this.column=t.columns.bySemType(r.SEMTYPE.MACROMOLECULE)),this.seqHelper.getSeqHandler(this.column),this.columnName??=this.column?.name,this.notation??=this.column?.meta.units,this.bioFilter=this.notation===c.Hi.FASTA?new E:this.notation===c.Hi.SEPARATOR?new M(this.column.getTag(c.gp.separator)):new w(this.seqHelper),this.root.appendChild(this.bioFilter.filterPanel),this.root.appendChild(this.loader),await this.bioFilter.attach(),this.viewSubs.push(r.debounce(this.bioFilter.onChanged,this.debounceTime).subscribe(this.bioFilterOnChangedDebounced.bind(this))),this.viewSubs.push(o.events.onResetFilterRequest.subscribe(this.grokEventsOnResetFilterRequest.bind(this))),this.viewSubs.push(o.events.onCustomEvent(C).subscribe(this.filterOnSync.bind(this)))}))}detach(){const t=super.detach.bind(this),e=`${this.filterToLog()}.detach()`;this.filterSyncer.sync(e,(async()=>{for(const t of this.viewSubs)t.unsubscribe();this.viewSubs=[],t(),this.bioFilter&&this.bioFilter.detach(),this.bioFilter=null}))}filterOnSync(t){t.filterId!==this.filterId&&t.dataFrameId===this.dataFrame.id&&t.columnName===this.columnName&&(this.bioFilter.props=t.props)}applyFilter(){const t=`${this.filterToLog()}.applyFilter()`;this.logger.debug(`${t}, IN`),this.bitset&&!this.isDetached&&this.dataFrame?.filter.and(this.bitset)}saveState(){const t=`${this.filterToLog()}.saveState()`,e=super.saveState();return this.logger.debug(`${t}, super.state = ${JSON.stringify(e)}`),e.props=this.bioFilter.saveProps(),e}applyState(t){const e=`${this.filterToLog()}.applyState()`;super.applyState(t),this.filterSyncer.sync(e,(async()=>{t.props&&this.bioFilter&&(this.bioFilter.props=r.toJs(t.props??{}))}))}fireFilterSync(){const t=`${this.filterToLog()}.fireFilterSync()`;this.logger.debug(`${t}, bioFilter = ${this.bioFilter?this.bioFilter.constructor.name:"null"}`+(this.bioFilter?`, props = ${JSON.stringify(this.bioFilter.saveProps())}`:"")),o.events.fireCustomEvent(C,new A(this.bioFilter.props,this.filterId,this.dataFrame.id,this.columnName,this.bitset))}bioFilterOnChangedDebounced(){if(!this.dataFrame)return;const t=`${this.filterToLog()}.bioFilterOnChangedDebounced()`;if(this.logger.debug(`${t}, start, isFiltering = ${this.isFiltering}, props = ${JSON.stringify(this.bioFilter.saveProps())}`),!this.isFiltering)return this.bitset=null,void this.dataFrame.rows.requestFilter();a()(this.dataFrame.rows.filters).has(`${this.columnName}: ${this.filterSummary}`)||this.filterSyncer.sync(t,(async()=>{this.calculating=!0;try{this.logger.debug(`${t}, before substructureSearch`),this.bitset=await(this.bioFilter?.substructureSearch(this.column)),this.logger.debug(`${t}, after substructureSearch`),this.calculating=!1,this.fireFilterSync(),this.dataFrame?.rows.requestFilter()}finally{this.calculating=!1,this.logger.debug(`${t}, end`)}}))}grokEventsOnResetFilterRequest(){const t=`${this.filterToLog()}.grokEventsOnResetFilterRequest()`;this.logger.debug(`${t}`),this.bioFilter?.resetFilter()}_onRendered=new l.Subject;get onRendered(){return this._onRendered}invalidate(t){const e=`${this.filterToLog()}.invalidate(${t?` <- ${t} `:""})`;this.filterSyncer.sync(e,(async()=>{this._onRendered.next()}))}async awaitRendered(t=1e4){const e=`awaitRendered( ${t} )`,n=`${this.filterToLog()}.${e}`;await(0,h.cb)(10),await(0,h.PE)(this.onRendered,(()=>{this.logger.debug(`${n}, _onRendered event caught`)}),(()=>{this.invalidate(e)}),t,`${n} timeout`);const i=this.filterSyncer.resetErrors();if(i.length>0)throw i[0]}}class E extends p.O{emptyProps=new p.n("",void 0,v._package.logger);substructureInput;get type(){return"FastaBioFilter"}constructor(){super(),this.substructureInput=i.input.string("",{value:"",onValueChanged:t=>{window.setTimeout((()=>{this.props=new p.n(t,void 0,v._package.logger),this._propsChanging||this.onChanged.next()}),0)},placeholder:"Substructure"})}applyProps(){this.substructureInput.value!==this.props.substructure&&(this.substructureInput.value=this.props.substructure)}get filterPanel(){return this.substructureInput.root}get isFiltering(){return""!==this.substructureInput.value}async substructureSearch(t){return(0,d.nI)(this.props.substructure,t)}async attach(){}async detach(){await super.detach()}}class M extends p.O{emptyProps=new S("",void 0,v._package.logger);substructureInput;separatorInput;colSeparator="";get type(){return"SeparatorBioFilter"}constructor(t){super(),this.substructureInput=i.input.string("",{value:"",onValueChanged:t=>{this.props=new S(t,this.props.separator,v._package.logger),setTimeout((()=>{this._propsChanging||this.onChanged.next()}))},placeholder:"Substructure"}),this.separatorInput=i.input.string("",{value:this.colSeparator=t,onValueChanged:t=>{const e=t||"";this.props=new S(this.props.substructure,e,v._package.logger),setTimeout((()=>{this._propsChanging||this.onChanged.next()}))},placeholder:"Separator"})}applyProps(){this.substructureInput.value!==this.props.substructure&&(this.substructureInput.value=this.props.substructure);const t=this.props.separator??this.colSeparator;this.separatorInput.value!==t&&(this.separatorInput.value=t)}get filterSummary(){return this.props.separator?this.props.separator:this.colSeparator,`${this.props.substructure}, {sep}`}get isFiltering(){return""!==this.props.substructure}resetFilter(){this.props=new S("",void 0,v._package.logger)}get filterPanel(){return i.divV([this.substructureInput.root,this.separatorInput.root])}get substructure(){return this.separatorInput.value&&this.separatorInput.value!==this.colSeparator?this.substructureInput.value.replaceAll(this.separatorInput.value,this.colSeparator):this.substructureInput.value}set substructure(t){this.substructureInput.value=t}async substructureSearch(t){return(0,d.nI)(this.substructure,t,this.colSeparator)}async attach(){}async detach(){await super.detach()}}},2174:(t,e,n)=>{"use strict";n.d(e,{F:()=>E,j:()=>x});var i=n(7389),r=n(6082),o=n(1991),s=n.n(o),a=n(2003),l=n(439),c=n(3599),h=n(5072),u=n.n(h),d=n(7825),p=n.n(d),m=n(7659),f=n.n(m),g=n(5056),y=n.n(g),b=n(540),v=n.n(b),w=n(1113),C=n.n(w),A=n(5999),S={};function x(t,e,n){const o=i.div();o.classList.add("macromolecule-cell-comp-analysis-host");const l=t.cell.column.tags[a.gp.alphabet],h=l===a.YI.DNA||l===a.YI.RNA?c.o.NUCLEOTIDE:c.o.AA,u={},d=n.getSeqHandler(t.cell.column),p=t.cell.rowIndex,m=d.getSplitted(p);s().count(0).take(m.length).filter((t=>!m.isGap(t))).forEach((t=>{let e=m.getCanonical(t);h===c.o.NUCLEOTIDE&&d.isHelm()&&"("===e[1]&&")"===e[e.length-2]&&(e=e.substring(2,e.length-2));const n=u[e]||0;u[e]=n+1}));const f=E(u,h,e);return Array.from(f.rows).forEach((t=>{const e=t.getElementsByClassName("macromolecule-cell-comp-analysis-bar")[0].style.backgroundColor;t.cells[0].style.color=e})),o.appendChild(f),new r.Widget(o)}function E(t,e,n){let o=0,s=null;for(const e of Object.values(t))o+=e,s=null===s?e:Math.max(s,e);const a=s/o,c=Object.assign({},...Array.from(Object.entries(t)).sort(((t,e)=>e[1]-t[1])).map((([t,s])=>{const c=s/o,h=n.getWebEditorMonomer(e,t).backgroundcolor,u=i.div("",{classes:"macromolecule-cell-comp-analysis-bar"});u.style.width=50*c/a+"px",u.style.backgroundColor=h,l._S===t&&(u.style.borderWidth="1px",u.style.borderStyle="solid",u.style.borderColor=r.Color.toHtml(r.Color.lightGray));const d=l._S===t?"-":t,p=i.div(`${(100*c).toFixed(2)}%`),m=i.div([u,p],{classes:"macromolecule-cell-comp-analysis-value"});return{[d]:m}}))),h=i.tableFromMap(c);return Array.from(h.rows).forEach((t=>{const e=t.getElementsByClassName("macromolecule-cell-comp-analysis-bar")[0].style.backgroundColor;t.cells[0].style.color=e})),h}S.styleTagTransform=C(),S.setAttributes=y(),S.insert=f().bind(null,"head"),S.domAPI=p(),S.insertStyleElement=v(),u()(A.A,S),A.A&&A.A.locals&&A.A.locals},1757:t=>{"use strict";t.exports=$},6082:t=>{"use strict";t.exports=DG},4328:t=>{"use strict";t.exports=grok},1858:t=>{"use strict";t.exports=rxjs},9713:t=>{"use strict";t.exports=rxjs.operators},7389:t=>{"use strict";t.exports=ui},1991:t=>{"use strict";t.exports=wu},8343:(t,e,n)=>{"use strict";const{normalizeIPv6:i,normalizeIPv4:r,removeDotSegments:o,recomposeAuthority:s,normalizeComponentEncoding:a}=n(4834),l=n(343);function c(t,e,n,i){const r={};return i||(t=p(h(t,n),n),e=p(h(e,n),n)),!(n=n||{}).tolerant&&e.scheme?(r.scheme=e.scheme,r.userinfo=e.userinfo,r.host=e.host,r.port=e.port,r.path=o(e.path||""),r.query=e.query):(void 0!==e.userinfo||void 0!==e.host||void 0!==e.port?(r.userinfo=e.userinfo,r.host=e.host,r.port=e.port,r.path=o(e.path||""),r.query=e.query):(e.path?("/"===e.path.charAt(0)?r.path=o(e.path):(void 0===t.userinfo&&void 0===t.host&&void 0===t.port||t.path?t.path?r.path=t.path.slice(0,t.path.lastIndexOf("/")+1)+e.path:r.path=e.path:r.path="/"+e.path,r.path=o(r.path)),r.query=e.query):(r.path=t.path,void 0!==e.query?r.query=e.query:r.query=t.query),r.userinfo=t.userinfo,r.host=t.host,r.port=t.port),r.scheme=t.scheme),r.fragment=e.fragment,r}function h(t,e){const n={host:t.host,scheme:t.scheme,userinfo:t.userinfo,port:t.port,path:t.path,query:t.query,nid:t.nid,nss:t.nss,uuid:t.uuid,fragment:t.fragment,reference:t.reference,resourceName:t.resourceName,secure:t.secure,error:""},i=Object.assign({},e),r=[],a=l[(i.scheme||n.scheme||"").toLowerCase()];a&&a.serialize&&a.serialize(n,i),void 0!==n.path&&(i.skipEscape?n.path=unescape(n.path):(n.path=escape(n.path),void 0!==n.scheme&&(n.path=n.path.split("%3A").join(":")))),"suffix"!==i.reference&&n.scheme&&r.push(n.scheme,":");const c=s(n);if(void 0!==c&&("suffix"!==i.reference&&r.push("//"),r.push(c),n.path&&"/"!==n.path.charAt(0)&&r.push("/")),void 0!==n.path){let t=n.path;i.absolutePath||a&&a.absolutePath||(t=o(t)),void 0===c&&(t=t.replace(/^\/\//u,"/%2F")),r.push(t)}return void 0!==n.query&&r.push("?",n.query),void 0!==n.fragment&&r.push("#",n.fragment),r.join("")}const u=Array.from({length:127},((t,e)=>/[^!"$&'()*+,\-.;=_`a-z{}~]/u.test(String.fromCharCode(e)))),d=/^(?:([^#/:?]+):)?(?:\/\/((?:([^#/?@]*)@)?(\[[^#/?\]]+\]|[^#/:?]*)(?::(\d*))?))?([^#?]*)(?:\?([^#]*))?(?:#((?:.|[\n\r])*))?/u;function p(t,e){const n=Object.assign({},e),o={scheme:void 0,userinfo:void 0,host:"",port:void 0,path:"",query:void 0,fragment:void 0},s=-1!==t.indexOf("%");let a=!1;"suffix"===n.reference&&(t=(n.scheme?n.scheme+":":"")+"//"+t);const c=t.match(d);if(c){if(o.scheme=c[1],o.userinfo=c[3],o.host=c[4],o.port=parseInt(c[5],10),o.path=c[6]||"",o.query=c[7],o.fragment=c[8],isNaN(o.port)&&(o.port=c[5]),o.host){const t=r(o.host);if(!1===t.isIPV4){const e=i(t.host);o.host=e.host.toLowerCase(),a=e.isIPV6}else o.host=t.host,a=!0}void 0!==o.scheme||void 0!==o.userinfo||void 0!==o.host||void 0!==o.port||void 0!==o.query||o.path?void 0===o.scheme?o.reference="relative":void 0===o.fragment?o.reference="absolute":o.reference="uri":o.reference="same-document",n.reference&&"suffix"!==n.reference&&n.reference!==o.reference&&(o.error=o.error||"URI is not a "+n.reference+" reference.");const t=l[(n.scheme||o.scheme||"").toLowerCase()];if(!(n.unicodeSupport||t&&t.unicodeSupport)&&o.host&&(n.domainHost||t&&t.domainHost)&&!1===a&&function(t){let e=0;for(let n=0,i=t.length;n<i;++n)if(e=t.charCodeAt(n),e>126||u[e])return!0;return!1}(o.host))try{o.host=URL.domainToASCII(o.host.toLowerCase())}catch(t){o.error=o.error||"Host's domain name can not be converted to ASCII: "+t}(!t||t&&!t.skipNormalize)&&(s&&void 0!==o.scheme&&(o.scheme=unescape(o.scheme)),s&&void 0!==o.host&&(o.host=unescape(o.host)),o.path&&(o.path=escape(unescape(o.path))),o.fragment&&(o.fragment=encodeURI(decodeURIComponent(o.fragment)))),t&&t.parse&&t.parse(o,n)}else o.error=o.error||"URI can not be parsed.";return o}const m={SCHEMES:l,normalize:function(t,e){return"string"==typeof t?t=h(p(t,e),e):"object"==typeof t&&(t=p(h(t,e),e)),t},resolve:function(t,e,n){const i=Object.assign({scheme:"null"},n);return h(c(p(t,i),p(e,i),i,!0),{...i,skipEscape:!0})},resolveComponents:c,equal:function(t,e,n){return"string"==typeof t?(t=unescape(t),t=h(a(p(t,n),!0),{...n,skipEscape:!0})):"object"==typeof t&&(t=h(a(t,!0),{...n,skipEscape:!0})),"string"==typeof e?(e=unescape(e),e=h(a(p(e,n),!0),{...n,skipEscape:!0})):"object"==typeof e&&(e=h(a(e,!0),{...n,skipEscape:!0})),t.toLowerCase()===e.toLowerCase()},serialize:h,parse:p};t.exports=m,t.exports.default=m,t.exports.fastUri=m},343:t=>{"use strict";const e=/^[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}$/iu,n=/([\da-z][\d\-a-z]{0,31}):((?:[\w!$'()*+,\-.:;=@]|%[\da-f]{2})+)/iu;function i(t){return"boolean"==typeof t.secure?t.secure:"wss"===String(t.scheme).toLowerCase()}function r(t){return t.host||(t.error=t.error||"HTTP URIs must have a host."),t}function o(t){const e="https"===String(t.scheme).toLowerCase();return t.port!==(e?443:80)&&""!==t.port||(t.port=void 0),t.path||(t.path="/"),t}const s={scheme:"http",domainHost:!0,parse:r,serialize:o},a={scheme:"ws",domainHost:!0,parse:function(t){return t.secure=i(t),t.resourceName=(t.path||"/")+(t.query?"?"+t.query:""),t.path=void 0,t.query=void 0,t},serialize:function(t){if(t.port!==(i(t)?443:80)&&""!==t.port||(t.port=void 0),"boolean"==typeof t.secure&&(t.scheme=t.secure?"wss":"ws",t.secure=void 0),t.resourceName){const[e,n]=t.resourceName.split("?");t.path=e&&"/"!==e?e:void 0,t.query=n,t.resourceName=void 0}return t.fragment=void 0,t}},l={http:s,https:{scheme:"https",domainHost:s.domainHost,parse:r,serialize:o},ws:a,wss:{scheme:"wss",domainHost:a.domainHost,parse:a.parse,serialize:a.serialize},urn:{scheme:"urn",parse:function(t,e){if(!t.path)return t.error="URN can not be parsed",t;const i=t.path.match(n);if(i){const n=e.scheme||t.scheme||"urn";t.nid=i[1].toLowerCase(),t.nss=i[2];const r=`${n}:${e.nid||t.nid}`,o=l[r];t.path=void 0,o&&(t=o.parse(t,e))}else t.error=t.error||"URN can not be parsed.";return t},serialize:function(t,e){const n=e.scheme||t.scheme||"urn",i=t.nid.toLowerCase(),r=`${n}:${e.nid||i}`,o=l[r];o&&(t=o.serialize(t,e));const s=t,a=t.nss;return s.path=`${i||e.nid}:${a}`,e.skipEscape=!0,s},skipNormalize:!0},"urn:uuid":{scheme:"urn:uuid",parse:function(t,n){const i=t;return i.uuid=i.nss,i.nss=void 0,n.tolerant||i.uuid&&e.test(i.uuid)||(i.error=i.error||"UUID is not valid."),i},serialize:function(t){const e=t;return e.nss=(t.uuid||"").toLowerCase(),e},skipNormalize:!0}};t.exports=l},4914:t=>{"use strict";t.exports={HEX:{0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,a:10,A:10,b:11,B:11,c:12,C:12,d:13,D:13,e:14,E:14,f:15,F:15}}},4834:(t,e,n)=>{"use strict";const{HEX:i}=n(4914),r=/^(?:(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)$/u;function o(t){if(c(t,".")<3)return{host:t,isIPV4:!1};const e=t.match(r)||[],[n]=e;return n?{host:l(n,"."),isIPV4:!0}:{host:t,isIPV4:!1}}function s(t,e=!1){let n="",r=!0;for(const e of t){if(void 0===i[e])return;"0"!==e&&!0===r&&(r=!1),r||(n+=e)}return e&&0===n.length&&(n="0"),n}function a(t){if(c(t,":")<2)return{host:t,isIPV6:!1};const e=function(t){let e=0;const n={error:!1,address:"",zone:""},i=[],r=[];let o=!1,a=!1,l=!1;function c(){if(r.length){if(!1===o){const t=s(r);if(void 0===t)return n.error=!0,!1;i.push(t)}r.length=0}return!0}for(let s=0;s<t.length;s++){const h=t[s];if("["!==h&&"]"!==h)if(":"!==h)if("%"===h){if(!c())break;o=!0}else r.push(h);else{if(!0===a&&(l=!0),!c())break;if(e++,i.push(":"),e>7){n.error=!0;break}s-1>=0&&":"===t[s-1]&&(a=!0)}}return r.length&&(o?n.zone=r.join(""):l?i.push(r.join("")):i.push(s(r))),n.address=i.join(""),n}(t);if(e.error)return{host:t,isIPV6:!1};{let t=e.address,n=e.address;return e.zone&&(t+="%"+e.zone,n+="%25"+e.zone),{host:t,escapedHost:n,isIPV6:!0}}}function l(t,e){let n="",i=!0;const r=t.length;for(let o=0;o<r;o++){const s=t[o];"0"===s&&i?(o+1<=r&&t[o+1]===e||o+1===r)&&(n+=s,i=!1):(i=s===e,n+=s)}return n}function c(t,e){let n=0;for(let i=0;i<t.length;i++)t[i]===e&&n++;return n}const h=/^\.\.?\//u,u=/^\/\.(?:\/|$)/u,d=/^\/\.\.(?:\/|$)/u,p=/^\/?(?:.|\n)*?(?=\/|$)/u;t.exports={recomposeAuthority:function(t){const e=[];if(void 0!==t.userinfo&&(e.push(t.userinfo),e.push("@")),void 0!==t.host){let n=unescape(t.host);const i=o(n);if(i.isIPV4)n=i.host;else{const e=a(i.host);n=!0===e.isIPV6?`[${e.escapedHost}]`:t.host}e.push(n)}return"number"!=typeof t.port&&"string"!=typeof t.port||(e.push(":"),e.push(String(t.port))),e.length?e.join(""):void 0},normalizeComponentEncoding:function(t,e){const n=!0!==e?escape:unescape;return void 0!==t.scheme&&(t.scheme=n(t.scheme)),void 0!==t.userinfo&&(t.userinfo=n(t.userinfo)),void 0!==t.host&&(t.host=n(t.host)),void 0!==t.path&&(t.path=n(t.path)),void 0!==t.query&&(t.query=n(t.query)),void 0!==t.fragment&&(t.fragment=n(t.fragment)),t},removeDotSegments:function(t){const e=[];for(;t.length;)if(t.match(h))t=t.replace(h,"");else if(t.match(u))t=t.replace(u,"/");else if(t.match(d))t=t.replace(d,"/"),e.pop();else if("."===t||".."===t)t="";else{const n=t.match(p);if(!n)throw new Error("Unexpected dot segment condition");{const i=n[0];t=t.slice(i.length),e.push(i)}}return e.join("")},normalizeIPv4:o,normalizeIPv6:a,stringArrayToHexStripped:s}},3837:t=>{"use strict";t.exports=JSON.parse('{"$id":"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#","description":"Meta-schema for $data reference (JSON AnySchema extension proposal)","type":"object","required":["$data"],"properties":{"$data":{"type":"string","anyOf":[{"format":"relative-json-pointer"},{"format":"json-pointer"}]}},"additionalProperties":false}')},7216:t=>{"use strict";t.exports=JSON.parse('{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://json-schema.org/draft/2020-12/meta/applicator","$vocabulary":{"https://json-schema.org/draft/2020-12/vocab/applicator":true},"$dynamicAnchor":"meta","title":"Applicator vocabulary meta-schema","type":["object","boolean"],"properties":{"prefixItems":{"$ref":"#/$defs/schemaArray"},"items":{"$dynamicRef":"#meta"},"contains":{"$dynamicRef":"#meta"},"additionalProperties":{"$dynamicRef":"#meta"},"properties":{"type":"object","additionalProperties":{"$dynamicRef":"#meta"},"default":{}},"patternProperties":{"type":"object","additionalProperties":{"$dynamicRef":"#meta"},"propertyNames":{"format":"regex"},"default":{}},"dependentSchemas":{"type":"object","additionalProperties":{"$dynamicRef":"#meta"},"default":{}},"propertyNames":{"$dynamicRef":"#meta"},"if":{"$dynamicRef":"#meta"},"then":{"$dynamicRef":"#meta"},"else":{"$dynamicRef":"#meta"},"allOf":{"$ref":"#/$defs/schemaArray"},"anyOf":{"$ref":"#/$defs/schemaArray"},"oneOf":{"$ref":"#/$defs/schemaArray"},"not":{"$dynamicRef":"#meta"}},"$defs":{"schemaArray":{"type":"array","minItems":1,"items":{"$dynamicRef":"#meta"}}}}')},8226:t=>{"use strict";t.exports=JSON.parse('{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://json-schema.org/draft/2020-12/meta/content","$vocabulary":{"https://json-schema.org/draft/2020-12/vocab/content":true},"$dynamicAnchor":"meta","title":"Content vocabulary meta-schema","type":["object","boolean"],"properties":{"contentEncoding":{"type":"string"},"contentMediaType":{"type":"string"},"contentSchema":{"$dynamicRef":"#meta"}}}')},518:t=>{"use strict";t.exports=JSON.parse('{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://json-schema.org/draft/2020-12/meta/core","$vocabulary":{"https://json-schema.org/draft/2020-12/vocab/core":true},"$dynamicAnchor":"meta","title":"Core vocabulary meta-schema","type":["object","boolean"],"properties":{"$id":{"$ref":"#/$defs/uriReferenceString","$comment":"Non-empty fragments not allowed.","pattern":"^[^#]*#?$"},"$schema":{"$ref":"#/$defs/uriString"},"$ref":{"$ref":"#/$defs/uriReferenceString"},"$anchor":{"$ref":"#/$defs/anchorString"},"$dynamicRef":{"$ref":"#/$defs/uriReferenceString"},"$dynamicAnchor":{"$ref":"#/$defs/anchorString"},"$vocabulary":{"type":"object","propertyNames":{"$ref":"#/$defs/uriString"},"additionalProperties":{"type":"boolean"}},"$comment":{"type":"string"},"$defs":{"type":"object","additionalProperties":{"$dynamicRef":"#meta"}}},"$defs":{"anchorString":{"type":"string","pattern":"^[A-Za-z_][-A-Za-z0-9._]*$"},"uriString":{"type":"string","format":"uri"},"uriReferenceString":{"type":"string","format":"uri-reference"}}}')},4588:t=>{"use strict";t.exports=JSON.parse('{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://json-schema.org/draft/2020-12/meta/format-annotation","$vocabulary":{"https://json-schema.org/draft/2020-12/vocab/format-annotation":true},"$dynamicAnchor":"meta","title":"Format vocabulary meta-schema for annotation results","type":["object","boolean"],"properties":{"format":{"type":"string"}}}')},5707:t=>{"use strict";t.exports=JSON.parse('{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://json-schema.org/draft/2020-12/meta/meta-data","$vocabulary":{"https://json-schema.org/draft/2020-12/vocab/meta-data":true},"$dynamicAnchor":"meta","title":"Meta-data vocabulary meta-schema","type":["object","boolean"],"properties":{"title":{"type":"string"},"description":{"type":"string"},"default":true,"deprecated":{"type":"boolean","default":false},"readOnly":{"type":"boolean","default":false},"writeOnly":{"type":"boolean","default":false},"examples":{"type":"array","items":true}}}')},9547:t=>{"use strict";t.exports=JSON.parse('{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://json-schema.org/draft/2020-12/meta/unevaluated","$vocabulary":{"https://json-schema.org/draft/2020-12/vocab/unevaluated":true},"$dynamicAnchor":"meta","title":"Unevaluated applicator vocabulary meta-schema","type":["object","boolean"],"properties":{"unevaluatedItems":{"$dynamicRef":"#meta"},"unevaluatedProperties":{"$dynamicRef":"#meta"}}}')},7082:t=>{"use strict";t.exports=JSON.parse('{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://json-schema.org/draft/2020-12/meta/validation","$vocabulary":{"https://json-schema.org/draft/2020-12/vocab/validation":true},"$dynamicAnchor":"meta","title":"Validation vocabulary meta-schema","type":["object","boolean"],"properties":{"type":{"anyOf":[{"$ref":"#/$defs/simpleTypes"},{"type":"array","items":{"$ref":"#/$defs/simpleTypes"},"minItems":1,"uniqueItems":true}]},"const":true,"enum":{"type":"array","items":true},"multipleOf":{"type":"number","exclusiveMinimum":0},"maximum":{"type":"number"},"exclusiveMaximum":{"type":"number"},"minimum":{"type":"number"},"exclusiveMinimum":{"type":"number"},"maxLength":{"$ref":"#/$defs/nonNegativeInteger"},"minLength":{"$ref":"#/$defs/nonNegativeIntegerDefault0"},"pattern":{"type":"string","format":"regex"},"maxItems":{"$ref":"#/$defs/nonNegativeInteger"},"minItems":{"$ref":"#/$defs/nonNegativeIntegerDefault0"},"uniqueItems":{"type":"boolean","default":false},"maxContains":{"$ref":"#/$defs/nonNegativeInteger"},"minContains":{"$ref":"#/$defs/nonNegativeInteger","default":1},"maxProperties":{"$ref":"#/$defs/nonNegativeInteger"},"minProperties":{"$ref":"#/$defs/nonNegativeIntegerDefault0"},"required":{"$ref":"#/$defs/stringArray"},"dependentRequired":{"type":"object","additionalProperties":{"$ref":"#/$defs/stringArray"}}},"$defs":{"nonNegativeInteger":{"type":"integer","minimum":0},"nonNegativeIntegerDefault0":{"$ref":"#/$defs/nonNegativeInteger","default":0},"simpleTypes":{"enum":["array","boolean","integer","null","number","object","string"]},"stringArray":{"type":"array","items":{"type":"string"},"uniqueItems":true,"default":[]}}}')},1678:t=>{"use strict";t.exports=JSON.parse('{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://json-schema.org/draft/2020-12/schema","$vocabulary":{"https://json-schema.org/draft/2020-12/vocab/core":true,"https://json-schema.org/draft/2020-12/vocab/applicator":true,"https://json-schema.org/draft/2020-12/vocab/unevaluated":true,"https://json-schema.org/draft/2020-12/vocab/validation":true,"https://json-schema.org/draft/2020-12/vocab/meta-data":true,"https://json-schema.org/draft/2020-12/vocab/format-annotation":true,"https://json-schema.org/draft/2020-12/vocab/content":true},"$dynamicAnchor":"meta","title":"Core and Validation specifications meta-schema","allOf":[{"$ref":"meta/core"},{"$ref":"meta/applicator"},{"$ref":"meta/unevaluated"},{"$ref":"meta/validation"},{"$ref":"meta/meta-data"},{"$ref":"meta/format-annotation"},{"$ref":"meta/content"}],"type":["object","boolean"],"$comment":"This meta-schema also defines keywords that have appeared in previous drafts in order to prevent incompatible extensions as they remain in common use.","properties":{"definitions":{"$comment":"\\"definitions\\" has been replaced by \\"$defs\\".","type":"object","additionalProperties":{"$dynamicRef":"#meta"},"deprecated":true,"default":{}},"dependencies":{"$comment":"\\"dependencies\\" has been split and replaced by \\"dependentSchemas\\" and \\"dependentRequired\\" in order to serve their differing semantics.","type":"object","additionalProperties":{"anyOf":[{"$dynamicRef":"#meta"},{"$ref":"meta/validation#/$defs/stringArray"}]},"deprecated":true,"default":{}},"$recursiveAnchor":{"$comment":"\\"$recursiveAnchor\\" has been replaced by \\"$dynamicAnchor\\".","$ref":"meta/core#/$defs/anchorString","deprecated":true},"$recursiveRef":{"$comment":"\\"$recursiveRef\\" has been replaced by \\"$dynamicRef\\".","$ref":"meta/core#/$defs/uriReferenceString","deprecated":true}}}')},2079:t=>{"use strict";t.exports=JSON.parse('{"$schema":"http://json-schema.org/draft-07/schema#","$id":"http://json-schema.org/draft-07/schema#","title":"Core schema meta-schema","definitions":{"schemaArray":{"type":"array","minItems":1,"items":{"$ref":"#"}},"nonNegativeInteger":{"type":"integer","minimum":0},"nonNegativeIntegerDefault0":{"allOf":[{"$ref":"#/definitions/nonNegativeInteger"},{"default":0}]},"simpleTypes":{"enum":["array","boolean","integer","null","number","object","string"]},"stringArray":{"type":"array","items":{"type":"string"},"uniqueItems":true,"default":[]}},"type":["object","boolean"],"properties":{"$id":{"type":"string","format":"uri-reference"},"$schema":{"type":"string","format":"uri"},"$ref":{"type":"string","format":"uri-reference"},"$comment":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"default":true,"readOnly":{"type":"boolean","default":false},"examples":{"type":"array","items":true},"multipleOf":{"type":"number","exclusiveMinimum":0},"maximum":{"type":"number"},"exclusiveMaximum":{"type":"number"},"minimum":{"type":"number"},"exclusiveMinimum":{"type":"number"},"maxLength":{"$ref":"#/definitions/nonNegativeInteger"},"minLength":{"$ref":"#/definitions/nonNegativeIntegerDefault0"},"pattern":{"type":"string","format":"regex"},"additionalItems":{"$ref":"#"},"items":{"anyOf":[{"$ref":"#"},{"$ref":"#/definitions/schemaArray"}],"default":true},"maxItems":{"$ref":"#/definitions/nonNegativeInteger"},"minItems":{"$ref":"#/definitions/nonNegativeIntegerDefault0"},"uniqueItems":{"type":"boolean","default":false},"contains":{"$ref":"#"},"maxProperties":{"$ref":"#/definitions/nonNegativeInteger"},"minProperties":{"$ref":"#/definitions/nonNegativeIntegerDefault0"},"required":{"$ref":"#/definitions/stringArray"},"additionalProperties":{"$ref":"#"},"definitions":{"type":"object","additionalProperties":{"$ref":"#"},"default":{}},"properties":{"type":"object","additionalProperties":{"$ref":"#"},"default":{}},"patternProperties":{"type":"object","additionalProperties":{"$ref":"#"},"propertyNames":{"format":"regex"},"default":{}},"dependencies":{"type":"object","additionalProperties":{"anyOf":[{"$ref":"#"},{"$ref":"#/definitions/stringArray"}]}},"propertyNames":{"$ref":"#"},"const":true,"enum":{"type":"array","items":true,"minItems":1,"uniqueItems":true},"type":{"anyOf":[{"$ref":"#/definitions/simpleTypes"},{"type":"array","items":{"$ref":"#/definitions/simpleTypes"},"minItems":1,"uniqueItems":true}]},"format":{"type":"string"},"contentMediaType":{"type":"string"},"contentEncoding":{"type":"string"},"if":{"$ref":"#"},"then":{"$ref":"#"},"else":{"$ref":"#"},"allOf":{"$ref":"#/definitions/schemaArray"},"anyOf":{"$ref":"#/definitions/schemaArray"},"oneOf":{"$ref":"#/definitions/schemaArray"},"not":{"$ref":"#"}},"default":true}')}},e={};function n(i){var r=e[i];if(void 0!==r)return r.exports;var o=e[i]={id:i,loaded:!1,exports:{}};return t[i].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}n.m=t,n.amdO={},n.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var i in e)n.o(e,i)&&!n.o(t,i)&&Object.defineProperty(t,i,{enumerable:!0,get:e[i]})},n.u=t=>t+".js",n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),n.hmd=t=>((t=Object.create(t)).children||(t.children=[]),Object.defineProperty(t,"exports",{enumerable:!0,set:()=>{throw new Error("ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: "+t.id)}}),t),n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},(()=>{var t;n.g.importScripts&&(t=n.g.location+"");var e=n.g.document;if(!t&&e&&(e.currentScript&&"SCRIPT"===e.currentScript.tagName.toUpperCase()&&(t=e.currentScript.src),!t)){var i=e.getElementsByTagName("script");if(i.length)for(var r=i.length-1;r>-1&&(!t||!/^http(s?):/.test(t));)t=i[r--].src}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),n.p=t})(),n.b=document.baseURI||self.location.href,n.nc=void 0;var i=n(6766);bio=i})();
|
|
7
|
+
deps: ${n}}`};const s={keyword:"dependencies",type:"object",schemaType:"object",error:e.error,code(t){const[e,n]=function({schema:t}){const e={},n={};for(const i in t)"__proto__"!==i&&((Array.isArray(t[i])?e:n)[i]=t[i]);return[e,n]}(t);a(t,e),l(t,n)}};function a(t,e=t.schema){const{gen:n,data:r,it:s}=t;if(0===Object.keys(e).length)return;const a=n.let("missing");for(const l in e){const c=e[l];if(0===c.length)continue;const h=(0,o.propertyInData)(n,r,l,s.opts.ownProperties);t.setParams({property:l,depsCount:c.length,deps:c.join(", ")}),s.allErrors?n.if(h,(()=>{for(const e of c)(0,o.checkReportMissingProp)(t,e)})):(n.if(i._`${h} && (${(0,o.checkMissingProp)(t,c,a)})`),(0,o.reportMissingProp)(t,a),n.else())}}function l(t,e=t.schema){const{gen:n,data:i,keyword:s,it:a}=t,l=n.name("valid");for(const c in e)(0,r.alwaysValidSchema)(a,e[c])||(n.if((0,o.propertyInData)(n,i,c,a.opts.ownProperties),(()=>{const e=t.subschema({keyword:s,schemaProp:c},l);t.mergeValidEvaluated(e,l)}),(()=>n.var(l,!0))),t.ok(l))}e.validatePropertyDeps=a,e.validateSchemaDeps=l,e.default=s},4845:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(3025),r={keyword:"dependentSchemas",type:"object",schemaType:"object",code:t=>(0,i.validateSchemaDeps)(t)};e.default=r},1239:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(9029),r=n(4227),o={keyword:"if",schemaType:["object","boolean"],trackErrors:!0,error:{message:({params:t})=>i.str`must match "${t.ifClause}" schema`,params:({params:t})=>i._`{failingKeyword: ${t.ifClause}}`},code(t){const{gen:e,parentSchema:n,it:o}=t;void 0===n.then&&void 0===n.else&&(0,r.checkStrictMode)(o,'"if" without "then" and "else" is ignored');const a=s(o,"then"),l=s(o,"else");if(!a&&!l)return;const c=e.let("valid",!0),h=e.name("_valid");if(function(){const e=t.subschema({keyword:"if",compositeRule:!0,createErrors:!1,allErrors:!1},h);t.mergeEvaluated(e)}(),t.reset(),a&&l){const n=e.let("ifClause");t.setParams({ifClause:n}),e.if(h,u("then",n),u("else",n))}else a?e.if(h,u("then")):e.if((0,i.not)(h),u("else"));function u(n,r){return()=>{const o=t.subschema({keyword:n},h);e.assign(c,h),t.mergeValidEvaluated(o,c),r?e.assign(r,i._`${n}`):t.setParams({ifClause:n})}}t.pass(c,(()=>t.error(!0)))}};function s(t,e){const n=t.schema[e];return void 0!==n&&!(0,r.alwaysValidSchema)(t,n)}e.default=o},6378:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(5457),r=n(5354),o=n(494),s=n(3966),a=n(2661),l=n(3025),c=n(2094),h=n(8660),u=n(117),d=n(5333),p=n(7923),m=n(6505),f=n(6163),g=n(5844),y=n(1239),b=n(4426);e.default=function(t=!1){const e=[p.default,m.default,f.default,g.default,y.default,b.default,c.default,h.default,l.default,u.default,d.default];return t?e.push(r.default,s.default):e.push(i.default,o.default),e.push(a.default),e}},494:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.validateTuple=void 0;const i=n(9029),r=n(4227),o=n(5765),s={keyword:"items",type:"array",schemaType:["object","array","boolean"],before:"uniqueItems",code(t){const{schema:e,it:n}=t;if(Array.isArray(e))return a(t,"additionalItems",e);n.items=!0,(0,r.alwaysValidSchema)(n,e)||t.ok((0,o.validateArray)(t))}};function a(t,e,n=t.schema){const{gen:o,parentSchema:s,data:a,keyword:l,it:c}=t;!function(t){const{opts:i,errSchemaPath:o}=c,s=n.length,a=s===t.minItems&&(s===t.maxItems||!1===t[e]);if(i.strictTuples&&!a){const t=`"${l}" is ${s}-tuple, but minItems or maxItems/${e} are not specified or different at path "${o}"`;(0,r.checkStrictMode)(c,t,i.strictTuples)}}(s),c.opts.unevaluated&&n.length&&!0!==c.items&&(c.items=r.mergeEvaluated.items(o,n.length,c.items));const h=o.name("valid"),u=o.const("len",i._`${a}.length`);n.forEach(((e,n)=>{(0,r.alwaysValidSchema)(c,e)||(o.if(i._`${u} > ${n}`,(()=>t.subschema({keyword:l,schemaProp:n,dataProp:n},h))),t.ok(h))}))}e.validateTuple=a,e.default=s},3966:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(9029),r=n(4227),o=n(5765),s=n(5457),a={keyword:"items",type:"array",schemaType:["object","boolean"],before:"uniqueItems",error:{message:({params:{len:t}})=>i.str`must NOT have more than ${t} items`,params:({params:{len:t}})=>i._`{limit: ${t}}`},code(t){const{schema:e,parentSchema:n,it:i}=t,{prefixItems:a}=n;i.items=!0,(0,r.alwaysValidSchema)(i,e)||(a?(0,s.validateAdditionalItems)(t,a):t.ok((0,o.validateArray)(t)))}};e.default=a},7923:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(4227),r={keyword:"not",schemaType:["object","boolean"],trackErrors:!0,code(t){const{gen:e,schema:n,it:r}=t;if((0,i.alwaysValidSchema)(r,n))return void t.fail();const o=e.name("valid");t.subschema({keyword:"not",compositeRule:!0,createErrors:!1,allErrors:!1},o),t.failResult(o,(()=>t.reset()),(()=>t.error()))},error:{message:"must NOT be valid"}};e.default=r},6163:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(9029),r=n(4227),o={keyword:"oneOf",schemaType:"array",trackErrors:!0,error:{message:"must match exactly one schema in oneOf",params:({params:t})=>i._`{passingSchemas: ${t.passing}}`},code(t){const{gen:e,schema:n,parentSchema:o,it:s}=t;if(!Array.isArray(n))throw new Error("ajv implementation error");if(s.opts.discriminator&&o.discriminator)return;const a=n,l=e.let("valid",!1),c=e.let("passing",null),h=e.name("_valid");t.setParams({passing:c}),e.block((function(){a.forEach(((n,o)=>{let a;(0,r.alwaysValidSchema)(s,n)?e.var(h,!0):a=t.subschema({keyword:"oneOf",schemaProp:o,compositeRule:!0},h),o>0&&e.if(i._`${h} && ${l}`).assign(l,!1).assign(c,i._`[${c}, ${o}]`).else(),e.if(h,(()=>{e.assign(l,!0),e.assign(c,o),a&&t.mergeEvaluated(a,i.Name)}))}))})),t.result(l,(()=>t.reset()),(()=>t.error(!0)))}};e.default=o},5333:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(5765),r=n(9029),o=n(4227),s=n(4227),a={keyword:"patternProperties",type:"object",schemaType:"object",code(t){const{gen:e,schema:n,data:a,parentSchema:l,it:c}=t,{opts:h}=c,u=(0,i.allSchemaProperties)(n),d=u.filter((t=>(0,o.alwaysValidSchema)(c,n[t])));if(0===u.length||d.length===u.length&&(!c.opts.unevaluated||!0===c.props))return;const p=h.strictSchema&&!h.allowMatchingProperties&&l.properties,m=e.name("valid");!0===c.props||c.props instanceof r.Name||(c.props=(0,s.evaluatedPropsToName)(e,c.props));const{props:f}=c;function g(t){for(const e in p)new RegExp(t).test(e)&&(0,o.checkStrictMode)(c,`property ${e} matches pattern ${t} (use allowMatchingProperties)`)}function y(n){e.forIn("key",a,(o=>{e.if(r._`${(0,i.usePattern)(t,n)}.test(${o})`,(()=>{const i=d.includes(n);i||t.subschema({keyword:"patternProperties",schemaProp:n,dataProp:o,dataPropType:s.Type.Str},m),c.opts.unevaluated&&!0!==f?e.assign(r._`${f}[${o}]`,!0):i||c.allErrors||e.if((0,r.not)(m),(()=>e.break()))}))}))}!function(){for(const t of u)p&&g(t),c.allErrors?y(t):(e.var(m,!0),y(t),e.if(m))}()}};e.default=a},5354:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(494),r={keyword:"prefixItems",type:"array",schemaType:["array"],before:"uniqueItems",code:t=>(0,i.validateTuple)(t,"items")};e.default=r},117:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(2586),r=n(5765),o=n(4227),s=n(8660),a={keyword:"properties",type:"object",schemaType:"object",code(t){const{gen:e,schema:n,parentSchema:a,data:l,it:c}=t;"all"===c.opts.removeAdditional&&void 0===a.additionalProperties&&s.default.code(new i.KeywordCxt(c,s.default,"additionalProperties"));const h=(0,r.allSchemaProperties)(n);for(const t of h)c.definedProperties.add(t);c.opts.unevaluated&&h.length&&!0!==c.props&&(c.props=o.mergeEvaluated.props(e,(0,o.toHash)(h),c.props));const u=h.filter((t=>!(0,o.alwaysValidSchema)(c,n[t])));if(0===u.length)return;const d=e.name("valid");for(const n of u)p(n)?m(n):(e.if((0,r.propertyInData)(e,l,n,c.opts.ownProperties)),m(n),c.allErrors||e.else().var(d,!0),e.endIf()),t.it.definedProperties.add(n),t.ok(d);function p(t){return c.opts.useDefaults&&!c.compositeRule&&void 0!==n[t].default}function m(e){t.subschema({keyword:"properties",schemaProp:e,dataProp:e},d)}}};e.default=a},2094:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(9029),r=n(4227),o={keyword:"propertyNames",type:"object",schemaType:["object","boolean"],error:{message:"property name must be valid",params:({params:t})=>i._`{propertyName: ${t.propertyName}}`},code(t){const{gen:e,schema:n,data:o,it:s}=t;if((0,r.alwaysValidSchema)(s,n))return;const a=e.name("valid");e.forIn("key",o,(n=>{t.setParams({propertyName:n}),t.subschema({keyword:"propertyNames",data:n,dataTypes:["string"],propertyName:n,compositeRule:!0},a),e.if((0,i.not)(a),(()=>{t.error(!0),s.allErrors||e.break()}))})),t.ok(a)}};e.default=o},4426:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(4227),r={keyword:["then","else"],schemaType:["object","boolean"],code({keyword:t,parentSchema:e,it:n}){void 0===e.if&&(0,i.checkStrictMode)(n,`"${t}" without "if" is ignored`)}};e.default=r},5765:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.validateUnion=e.validateArray=e.usePattern=e.callValidateCode=e.schemaProperties=e.allSchemaProperties=e.noPropertyInData=e.propertyInData=e.isOwnProperty=e.hasPropFunc=e.reportMissingProp=e.checkMissingProp=e.checkReportMissingProp=void 0;const i=n(9029),r=n(4227),o=n(2023),s=n(4227);function a(t){return t.scopeValue("func",{ref:Object.prototype.hasOwnProperty,code:i._`Object.prototype.hasOwnProperty`})}function l(t,e,n){return i._`${a(t)}.call(${e}, ${n})`}function c(t,e,n,r){const o=i._`${e}${(0,i.getProperty)(n)} === undefined`;return r?(0,i.or)(o,(0,i.not)(l(t,e,n))):o}function h(t){return t?Object.keys(t).filter((t=>"__proto__"!==t)):[]}e.checkReportMissingProp=function(t,e){const{gen:n,data:r,it:o}=t;n.if(c(n,r,e,o.opts.ownProperties),(()=>{t.setParams({missingProperty:i._`${e}`},!0),t.error()}))},e.checkMissingProp=function({gen:t,data:e,it:{opts:n}},r,o){return(0,i.or)(...r.map((r=>(0,i.and)(c(t,e,r,n.ownProperties),i._`${o} = ${r}`))))},e.reportMissingProp=function(t,e){t.setParams({missingProperty:e},!0),t.error()},e.hasPropFunc=a,e.isOwnProperty=l,e.propertyInData=function(t,e,n,r){const o=i._`${e}${(0,i.getProperty)(n)} !== undefined`;return r?i._`${o} && ${l(t,e,n)}`:o},e.noPropertyInData=c,e.allSchemaProperties=h,e.schemaProperties=function(t,e){return h(e).filter((n=>!(0,r.alwaysValidSchema)(t,e[n])))},e.callValidateCode=function({schemaCode:t,data:e,it:{gen:n,topSchemaRef:r,schemaPath:s,errorPath:a},it:l},c,h,u){const d=u?i._`${t}, ${e}, ${r}${s}`:e,p=[[o.default.instancePath,(0,i.strConcat)(o.default.instancePath,a)],[o.default.parentData,l.parentData],[o.default.parentDataProperty,l.parentDataProperty],[o.default.rootData,o.default.rootData]];l.opts.dynamicRef&&p.push([o.default.dynamicAnchors,o.default.dynamicAnchors]);const m=i._`${d}, ${n.object(...p)}`;return h!==i.nil?i._`${c}.call(${h}, ${m})`:i._`${c}(${m})`};const u=i._`new RegExp`;e.usePattern=function({gen:t,it:{opts:e}},n){const r=e.unicodeRegExp?"u":"",{regExp:o}=e.code,a=o(n,r);return t.scopeValue("pattern",{key:a.toString(),ref:a,code:i._`${"new RegExp"===o.code?u:(0,s.useFunc)(t,o)}(${n}, ${r})`})},e.validateArray=function(t){const{gen:e,data:n,keyword:o,it:s}=t,a=e.name("valid");if(s.allErrors){const t=e.let("valid",!0);return l((()=>e.assign(t,!1))),t}return e.var(a,!0),l((()=>e.break())),a;function l(s){const l=e.const("len",i._`${n}.length`);e.forRange("i",0,l,(n=>{t.subschema({keyword:o,dataProp:n,dataPropType:r.Type.Num},a),e.if((0,i.not)(a),s)}))}},e.validateUnion=function(t){const{gen:e,schema:n,keyword:o,it:s}=t;if(!Array.isArray(n))throw new Error("ajv implementation error");if(n.some((t=>(0,r.alwaysValidSchema)(s,t)))&&!s.opts.unevaluated)return;const a=e.let("valid",!1),l=e.name("_valid");e.block((()=>n.forEach(((n,r)=>{const s=t.subschema({keyword:o,schemaProp:r,compositeRule:!0},l);e.assign(a,i._`${a} || ${l}`),t.mergeValidEvaluated(s,l)||e.if((0,i.not)(a))})))),t.result(a,(()=>t.reset()),(()=>t.error(!0)))}},3463:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const n={keyword:"id",code(){throw new Error('NOT SUPPORTED: keyword "id", use "$id" for schema ID')}};e.default=n},2128:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(3463),r=n(3693),o=["$schema","$id","$defs","$vocabulary",{keyword:"$comment"},"definitions",i.default,r.default];e.default=o},3693:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.callRef=e.getValidate=void 0;const i=n(4551),r=n(5765),o=n(9029),s=n(2023),a=n(3835),l=n(4227),c={keyword:"$ref",schemaType:"string",code(t){const{gen:e,schema:n,it:r}=t,{baseId:s,schemaEnv:l,validateName:c,opts:d,self:p}=r,{root:m}=l;if(("#"===n||"#/"===n)&&s===m.baseId)return function(){if(l===m)return u(t,c,l,l.$async);const n=e.scopeValue("root",{ref:m});return u(t,o._`${n}.validate`,m,m.$async)}();const f=a.resolveRef.call(p,m,s,n);if(void 0===f)throw new i.default(r.opts.uriResolver,s,n);return f instanceof a.SchemaEnv?function(e){const n=h(t,e);u(t,n,e,e.$async)}(f):function(i){const r=e.scopeValue("schema",!0===d.code.source?{ref:i,code:(0,o.stringify)(i)}:{ref:i}),s=e.name("valid"),a=t.subschema({schema:i,dataTypes:[],schemaPath:o.nil,topSchemaRef:r,errSchemaPath:n},s);t.mergeEvaluated(a),t.ok(s)}(f)}};function h(t,e){const{gen:n}=t;return e.validate?n.scopeValue("validate",{ref:e.validate}):o._`${n.scopeValue("wrapper",{ref:e})}.validate`}function u(t,e,n,i){const{gen:a,it:c}=t,{allErrors:h,schemaEnv:u,opts:d}=c,p=d.passContext?s.default.this:o.nil;function m(t){const e=o._`${t}.errors`;a.assign(s.default.vErrors,o._`${s.default.vErrors} === null ? ${e} : ${s.default.vErrors}.concat(${e})`),a.assign(s.default.errors,o._`${s.default.vErrors}.length`)}function f(t){var e;if(!c.opts.unevaluated)return;const i=null===(e=null==n?void 0:n.validate)||void 0===e?void 0:e.evaluated;if(!0!==c.props)if(i&&!i.dynamicProps)void 0!==i.props&&(c.props=l.mergeEvaluated.props(a,i.props,c.props));else{const e=a.var("props",o._`${t}.evaluated.props`);c.props=l.mergeEvaluated.props(a,e,c.props,o.Name)}if(!0!==c.items)if(i&&!i.dynamicItems)void 0!==i.items&&(c.items=l.mergeEvaluated.items(a,i.items,c.items));else{const e=a.var("items",o._`${t}.evaluated.items`);c.items=l.mergeEvaluated.items(a,e,c.items,o.Name)}}i?function(){if(!u.$async)throw new Error("async schema referenced by sync schema");const n=a.let("valid");a.try((()=>{a.code(o._`await ${(0,r.callValidateCode)(t,e,p)}`),f(e),h||a.assign(n,!0)}),(t=>{a.if(o._`!(${t} instanceof ${c.ValidationError})`,(()=>a.throw(t))),m(t),h||a.assign(n,!1)})),t.ok(n)}():t.result((0,r.callValidateCode)(t,e,p),(()=>f(e)),(()=>m(e)))}e.getValidate=h,e.callRef=u,e.default=c},6653:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(9029),r=n(7652),o=n(3835),s=n(4551),a=n(4227),l={keyword:"discriminator",type:"object",schemaType:"object",error:{message:({params:{discrError:t,tagName:e}})=>t===r.DiscrError.Tag?`tag "${e}" must be string`:`value of tag "${e}" must be in oneOf`,params:({params:{discrError:t,tag:e,tagName:n}})=>i._`{error: ${t}, tag: ${n}, tagValue: ${e}}`},code(t){const{gen:e,data:n,schema:l,parentSchema:c,it:h}=t,{oneOf:u}=c;if(!h.opts.discriminator)throw new Error("discriminator: requires discriminator option");const d=l.propertyName;if("string"!=typeof d)throw new Error("discriminator: requires propertyName");if(l.mapping)throw new Error("discriminator: mapping is not supported");if(!u)throw new Error("discriminator: requires oneOf keyword");const p=e.let("valid",!1),m=e.const("tag",i._`${n}${(0,i.getProperty)(d)}`);function f(n){const r=e.name("valid"),o=t.subschema({keyword:"oneOf",schemaProp:n},r);return t.mergeEvaluated(o,i.Name),r}e.if(i._`typeof ${m} == "string"`,(()=>function(){const n=function(){var t;const e={},n=r(c);let i=!0;for(let e=0;e<u.length;e++){let c=u[e];if((null==c?void 0:c.$ref)&&!(0,a.schemaHasRulesButRef)(c,h.self.RULES)){const t=c.$ref;if(c=o.resolveRef.call(h.self,h.schemaEnv.root,h.baseId,t),c instanceof o.SchemaEnv&&(c=c.schema),void 0===c)throw new s.default(h.opts.uriResolver,h.baseId,t)}const p=null===(t=null==c?void 0:c.properties)||void 0===t?void 0:t[d];if("object"!=typeof p)throw new Error(`discriminator: oneOf subschemas (or referenced schemas) must have "properties/${d}"`);i=i&&(n||r(c)),l(p,e)}if(!i)throw new Error(`discriminator: "${d}" must be required`);return e;function r({required:t}){return Array.isArray(t)&&t.includes(d)}function l(t,e){if(t.const)p(t.const,e);else{if(!t.enum)throw new Error(`discriminator: "properties/${d}" must have "const" or "enum"`);for(const n of t.enum)p(n,e)}}function p(t,n){if("string"!=typeof t||t in e)throw new Error(`discriminator: "${d}" values must be unique strings`);e[t]=n}}();e.if(!1);for(const t in n)e.elseIf(i._`${m} === ${t}`),e.assign(p,f(n[t]));e.else(),t.error(!1,{discrError:r.DiscrError.Mapping,tag:m,tagName:d}),e.endIf()}()),(()=>t.error(!1,{discrError:r.DiscrError.Tag,tag:m,tagName:d}))),t.ok(p)}};e.default=l},7652:(t,e)=>{"use strict";var n;Object.defineProperty(e,"__esModule",{value:!0}),e.DiscrError=void 0,function(t){t.Tag="tag",t.Mapping="mapping"}(n||(e.DiscrError=n={}))},6105:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(2128),r=n(7060),o=n(6378),s=n(5520),a=n(5413),l=n(3265),c=n(7532),h=n(9857),u=[s.default,i.default,r.default,(0,o.default)(!0),c.default,h.metadataVocabulary,h.contentVocabulary,a.default,l.default];e.default=u},6144:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(2128),r=n(7060),o=n(6378),s=n(7532),a=n(9857),l=[i.default,r.default,(0,o.default)(),s.default,a.metadataVocabulary,a.contentVocabulary];e.default=l},2476:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.dynamicAnchor=void 0;const i=n(9029),r=n(2023),o=n(3835),s=n(3693),a={keyword:"$dynamicAnchor",schemaType:"string",code:t=>l(t,t.schema)};function l(t,e){const{gen:n,it:a}=t;a.schemaEnv.root.dynamicAnchors[e]=!0;const l=i._`${r.default.dynamicAnchors}${(0,i.getProperty)(e)}`,c="#"===a.errSchemaPath?a.validateName:function(t){const{schemaEnv:e,schema:n,self:i}=t.it,{root:r,baseId:a,localRefs:l,meta:c}=e.root,{schemaId:h}=i.opts,u=new o.SchemaEnv({schema:n,schemaId:h,root:r,baseId:a,localRefs:l,meta:c});return o.compileSchema.call(i,u),(0,s.getValidate)(t,u)}(t);n.if(i._`!${l}`,(()=>n.assign(l,c)))}e.dynamicAnchor=l,e.default=a},3252:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.dynamicRef=void 0;const i=n(9029),r=n(2023),o=n(3693),s={keyword:"$dynamicRef",schemaType:"string",code:t=>a(t,t.schema)};function a(t,e){const{gen:n,keyword:s,it:a}=t;if("#"!==e[0])throw new Error(`"${s}" only supports hash fragment reference`);const l=e.slice(1);if(a.allErrors)c();else{const e=n.let("valid",!1);c(e),t.ok(e)}function c(t){if(a.schemaEnv.root.dynamicAnchors[l]){const e=n.let("_v",i._`${r.default.dynamicAnchors}${(0,i.getProperty)(l)}`);n.if(e,h(e,t),h(a.validateName,t))}else h(a.validateName,t)()}function h(e,i){return i?()=>n.block((()=>{(0,o.callRef)(t,e),n.let(i,!0)})):()=>(0,o.callRef)(t,e)}}e.dynamicRef=a,e.default=s},5520:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(2476),r=n(3252),o=n(2721),s=n(3799),a=[i.default,r.default,o.default,s.default];e.default=a},2721:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(2476),r=n(4227),o={keyword:"$recursiveAnchor",schemaType:"boolean",code(t){t.schema?(0,i.dynamicAnchor)(t,""):(0,r.checkStrictMode)(t.it,"$recursiveAnchor: false is ignored")}};e.default=o},3799:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(3252),r={keyword:"$recursiveRef",schemaType:"string",code:t=>(0,i.dynamicRef)(t,t.schema)};e.default=r},4737:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(9029),r={keyword:"format",type:["number","string"],schemaType:"string",$data:!0,error:{message:({schemaCode:t})=>i.str`must match format "${t}"`,params:({schemaCode:t})=>i._`{format: ${t}}`},code(t,e){const{gen:n,data:r,$data:o,schema:s,schemaCode:a,it:l}=t,{opts:c,errSchemaPath:h,schemaEnv:u,self:d}=l;c.validateFormats&&(o?function(){const o=n.scopeValue("formats",{ref:d.formats,code:c.code.formats}),s=n.const("fDef",i._`${o}[${a}]`),l=n.let("fType"),h=n.let("format");n.if(i._`typeof ${s} == "object" && !(${s} instanceof RegExp)`,(()=>n.assign(l,i._`${s}.type || "string"`).assign(h,i._`${s}.validate`)),(()=>n.assign(l,i._`"string"`).assign(h,s))),t.fail$data((0,i.or)(!1===c.strictSchema?i.nil:i._`${a} && !${h}`,function(){const t=u.$async?i._`(${s}.async ? await ${h}(${r}) : ${h}(${r}))`:i._`${h}(${r})`,n=i._`(typeof ${h} == "function" ? ${t} : ${h}.test(${r}))`;return i._`${h} && ${h} !== true && ${l} === ${e} && !${n}`}()))}():function(){const o=d.formats[s];if(!o)return void function(){if(!1!==c.strictSchema)throw new Error(t());function t(){return`unknown format "${s}" ignored in schema at path "${h}"`}d.logger.warn(t())}();if(!0===o)return;const[a,l,p]=function(t){const e=t instanceof RegExp?(0,i.regexpCode)(t):c.code.formats?i._`${c.code.formats}${(0,i.getProperty)(s)}`:void 0,r=n.scopeValue("formats",{key:s,ref:t,code:e});return"object"!=typeof t||t instanceof RegExp?["string",t,r]:[t.type||"string",t.validate,i._`${r}.validate`]}(o);a===e&&t.pass(function(){if("object"==typeof o&&!(o instanceof RegExp)&&o.async){if(!u.$async)throw new Error("async format in sync schema");return i._`await ${p}(${r})`}return"function"==typeof l?i._`${p}(${r})`:i._`${p}.test(${r})`}())}())}};e.default=r},7532:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=[n(4737).default];e.default=i},9857:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.contentVocabulary=e.metadataVocabulary=void 0,e.metadataVocabulary=["title","description","default","deprecated","readOnly","writeOnly","examples"],e.contentVocabulary=["contentMediaType","contentEncoding","contentSchema"]},5413:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(1846),r=n(4845),o=n(2626),s=[i.default,r.default,o.default];e.default=s},3265:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(392),r=n(3445),o=[i.default,r.default];e.default=o},3445:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(9029),r=n(4227),o={keyword:"unevaluatedItems",type:"array",schemaType:["boolean","object"],error:{message:({params:{len:t}})=>i.str`must NOT have more than ${t} items`,params:({params:{len:t}})=>i._`{limit: ${t}}`},code(t){const{gen:e,schema:n,data:o,it:s}=t,a=s.items||0;if(!0===a)return;const l=e.const("len",i._`${o}.length`);if(!1===n)t.setParams({len:a}),t.fail(i._`${l} > ${a}`);else if("object"==typeof n&&!(0,r.alwaysValidSchema)(s,n)){const n=e.var("valid",i._`${l} <= ${a}`);e.if((0,i.not)(n),(()=>function(n,o){e.forRange("i",o,l,(o=>{t.subschema({keyword:"unevaluatedItems",dataProp:o,dataPropType:r.Type.Num},n),s.allErrors||e.if((0,i.not)(n),(()=>e.break()))}))}(n,a))),t.ok(n)}s.items=!0}};e.default=o},392:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(9029),r=n(4227),o=n(2023),s={keyword:"unevaluatedProperties",type:"object",schemaType:["boolean","object"],trackErrors:!0,error:{message:"must NOT have unevaluated properties",params:({params:t})=>i._`{unevaluatedProperty: ${t.unevaluatedProperty}}`},code(t){const{gen:e,schema:n,data:s,errsCount:a,it:l}=t;if(!a)throw new Error("ajv implementation error");const{allErrors:c,props:h}=l;function u(o){if(!1===n)return t.setParams({unevaluatedProperty:o}),t.error(),void(c||e.break());if(!(0,r.alwaysValidSchema)(l,n)){const n=e.name("valid");t.subschema({keyword:"unevaluatedProperties",dataProp:o,dataPropType:r.Type.Str},n),c||e.if((0,i.not)(n),(()=>e.break()))}}h instanceof i.Name?e.if(i._`${h} !== true`,(()=>e.forIn("key",s,(t=>e.if(function(t,e){return i._`!${t} || !${t}[${e}]`}(h,t),(()=>u(t))))))):!0!==h&&e.forIn("key",s,(t=>void 0===h?u(t):e.if(function(t,e){const n=[];for(const r in t)!0===t[r]&&n.push(i._`${e} !== ${r}`);return(0,i.and)(...n)}(h,t),(()=>u(t))))),l.props=!0,t.ok(i._`${a} === ${o.default.errors}`)}};e.default=s},7935:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(9029),r=n(4227),o=n(6250),s={keyword:"const",$data:!0,error:{message:"must be equal to constant",params:({schemaCode:t})=>i._`{allowedValue: ${t}}`},code(t){const{gen:e,data:n,$data:s,schemaCode:a,schema:l}=t;s||l&&"object"==typeof l?t.fail$data(i._`!${(0,r.useFunc)(e,o.default)}(${n}, ${a})`):t.fail(i._`${l} !== ${n}`)}};e.default=s},1846:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(3025),r={keyword:"dependentRequired",type:"object",schemaType:"object",error:i.error,code:t=>(0,i.validatePropertyDeps)(t)};e.default=r},8643:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(9029),r=n(4227),o=n(6250),s={keyword:"enum",schemaType:"array",$data:!0,error:{message:"must be equal to one of the allowed values",params:({schemaCode:t})=>i._`{allowedValues: ${t}}`},code(t){const{gen:e,data:n,$data:s,schema:a,schemaCode:l,it:c}=t;if(!s&&0===a.length)throw new Error("enum must have non-empty array");const h=a.length>=c.opts.loopEnum;let u;const d=()=>null!=u?u:u=(0,r.useFunc)(e,o.default);let p;if(h||s)p=e.let("valid"),t.block$data(p,(function(){e.assign(p,!1),e.forOf("v",l,(t=>e.if(i._`${d()}(${n}, ${t})`,(()=>e.assign(p,!0).break()))))}));else{if(!Array.isArray(a))throw new Error("ajv implementation error");const t=e.const("vSchema",l);p=(0,i.or)(...a.map(((e,r)=>function(t,e){const r=a[e];return"object"==typeof r&&null!==r?i._`${d()}(${n}, ${t}[${e}])`:i._`${n} === ${r}`}(t,r))))}t.pass(p)}};e.default=s},7060:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(5882),r=n(3439),o=n(7307),s=n(422),a=n(4486),l=n(4003),c=n(1163),h=n(617),u=n(7935),d=n(8643),p=[i.default,r.default,o.default,s.default,a.default,l.default,c.default,h.default,{keyword:"type",schemaType:["string","array"]},{keyword:"nullable",schemaType:"boolean"},u.default,d.default];e.default=p},2626:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(4227),r={keyword:["maxContains","minContains"],type:"array",schemaType:"number",code({keyword:t,parentSchema:e,it:n}){void 0===e.contains&&(0,i.checkStrictMode)(n,`"${t}" without "contains" is ignored`)}};e.default=r},1163:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(9029),r={keyword:["maxItems","minItems"],type:"array",schemaType:"number",$data:!0,error:{message({keyword:t,schemaCode:e}){const n="maxItems"===t?"more":"fewer";return i.str`must NOT have ${n} than ${e} items`},params:({schemaCode:t})=>i._`{limit: ${t}}`},code(t){const{keyword:e,data:n,schemaCode:r}=t,o="maxItems"===e?i.operators.GT:i.operators.LT;t.fail$data(i._`${n}.length ${o} ${r}`)}};e.default=r},7307:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(9029),r=n(4227),o=n(3853),s={keyword:["maxLength","minLength"],type:"string",schemaType:"number",$data:!0,error:{message({keyword:t,schemaCode:e}){const n="maxLength"===t?"more":"fewer";return i.str`must NOT have ${n} than ${e} characters`},params:({schemaCode:t})=>i._`{limit: ${t}}`},code(t){const{keyword:e,data:n,schemaCode:s,it:a}=t,l="maxLength"===e?i.operators.GT:i.operators.LT,c=!1===a.opts.unicode?i._`${n}.length`:i._`${(0,r.useFunc)(t.gen,o.default)}(${n})`;t.fail$data(i._`${c} ${l} ${s}`)}};e.default=s},5882:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(9029),r=i.operators,o={maximum:{okStr:"<=",ok:r.LTE,fail:r.GT},minimum:{okStr:">=",ok:r.GTE,fail:r.LT},exclusiveMaximum:{okStr:"<",ok:r.LT,fail:r.GTE},exclusiveMinimum:{okStr:">",ok:r.GT,fail:r.LTE}},s={message:({keyword:t,schemaCode:e})=>i.str`must be ${o[t].okStr} ${e}`,params:({keyword:t,schemaCode:e})=>i._`{comparison: ${o[t].okStr}, limit: ${e}}`},a={keyword:Object.keys(o),type:"number",schemaType:"number",$data:!0,error:s,code(t){const{keyword:e,data:n,schemaCode:r}=t;t.fail$data(i._`${n} ${o[e].fail} ${r} || isNaN(${n})`)}};e.default=a},4486:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(9029),r={keyword:["maxProperties","minProperties"],type:"object",schemaType:"number",$data:!0,error:{message({keyword:t,schemaCode:e}){const n="maxProperties"===t?"more":"fewer";return i.str`must NOT have ${n} than ${e} properties`},params:({schemaCode:t})=>i._`{limit: ${t}}`},code(t){const{keyword:e,data:n,schemaCode:r}=t,o="maxProperties"===e?i.operators.GT:i.operators.LT;t.fail$data(i._`Object.keys(${n}).length ${o} ${r}`)}};e.default=r},3439:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(9029),r={keyword:"multipleOf",type:"number",schemaType:"number",$data:!0,error:{message:({schemaCode:t})=>i.str`must be multiple of ${t}`,params:({schemaCode:t})=>i._`{multipleOf: ${t}}`},code(t){const{gen:e,data:n,schemaCode:r,it:o}=t,s=o.opts.multipleOfPrecision,a=e.let("res"),l=s?i._`Math.abs(Math.round(${a}) - ${a}) > 1e-${s}`:i._`${a} !== parseInt(${a})`;t.fail$data(i._`(${r} === 0 || (${a} = ${n}/${r}, ${l}))`)}};e.default=r},422:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(5765),r=n(9029),o={keyword:"pattern",type:"string",schemaType:"string",$data:!0,error:{message:({schemaCode:t})=>r.str`must match pattern "${t}"`,params:({schemaCode:t})=>r._`{pattern: ${t}}`},code(t){const{data:e,$data:n,schema:o,schemaCode:s,it:a}=t,l=a.opts.unicodeRegExp?"u":"",c=n?r._`(new RegExp(${s}, ${l}))`:(0,i.usePattern)(t,o);t.fail$data(r._`!${c}.test(${e})`)}};e.default=o},4003:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(5765),r=n(9029),o=n(4227),s={keyword:"required",type:"object",schemaType:"array",$data:!0,error:{message:({params:{missingProperty:t}})=>r.str`must have required property '${t}'`,params:({params:{missingProperty:t}})=>r._`{missingProperty: ${t}}`},code(t){const{gen:e,schema:n,schemaCode:s,data:a,$data:l,it:c}=t,{opts:h}=c;if(!l&&0===n.length)return;const u=n.length>=h.loopRequired;if(c.allErrors?function(){if(u||l)t.block$data(r.nil,d);else for(const e of n)(0,i.checkReportMissingProp)(t,e)}():function(){const o=e.let("missing");if(u||l){const n=e.let("valid",!0);t.block$data(n,(()=>function(n,o){t.setParams({missingProperty:n}),e.forOf(n,s,(()=>{e.assign(o,(0,i.propertyInData)(e,a,n,h.ownProperties)),e.if((0,r.not)(o),(()=>{t.error(),e.break()}))}),r.nil)}(o,n))),t.ok(n)}else e.if((0,i.checkMissingProp)(t,n,o)),(0,i.reportMissingProp)(t,o),e.else()}(),h.strictRequired){const e=t.parentSchema.properties,{definedProperties:i}=t.it;for(const t of n)if(void 0===(null==e?void 0:e[t])&&!i.has(t)){const e=`required property "${t}" is not defined at "${c.schemaEnv.baseId+c.errSchemaPath}" (strictRequired)`;(0,o.checkStrictMode)(c,e,c.opts.strictRequired)}}function d(){e.forOf("prop",s,(n=>{t.setParams({missingProperty:n}),e.if((0,i.noPropertyInData)(e,a,n,h.ownProperties),(()=>t.error()))}))}}};e.default=s},617:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=n(208),r=n(9029),o=n(4227),s=n(6250),a={keyword:"uniqueItems",type:"array",schemaType:"boolean",$data:!0,error:{message:({params:{i:t,j:e}})=>r.str`must NOT have duplicate items (items ## ${e} and ${t} are identical)`,params:({params:{i:t,j:e}})=>r._`{i: ${t}, j: ${e}}`},code(t){const{gen:e,data:n,$data:a,schema:l,parentSchema:c,schemaCode:h,it:u}=t;if(!a&&!l)return;const d=e.let("valid"),p=c.items?(0,i.getSchemaTypes)(c.items):[];function m(o,s){const a=e.name("item"),l=(0,i.checkDataTypes)(p,a,u.opts.strictNumbers,i.DataType.Wrong),c=e.const("indices",r._`{}`);e.for(r._`;${o}--;`,(()=>{e.let(a,r._`${n}[${o}]`),e.if(l,r._`continue`),p.length>1&&e.if(r._`typeof ${a} == "string"`,r._`${a} += "_"`),e.if(r._`typeof ${c}[${a}] == "number"`,(()=>{e.assign(s,r._`${c}[${a}]`),t.error(),e.assign(d,!1).break()})).code(r._`${c}[${a}] = ${o}`)}))}function f(i,a){const l=(0,o.useFunc)(e,s.default),c=e.name("outer");e.label(c).for(r._`;${i}--;`,(()=>e.for(r._`${a} = ${i}; ${a}--;`,(()=>e.if(r._`${l}(${n}[${i}], ${n}[${a}])`,(()=>{t.error(),e.assign(d,!1).break(c)}))))))}t.block$data(d,(function(){const i=e.let("i",r._`${n}.length`),o=e.let("j");t.setParams({i,j:o}),e.assign(d,!0),e.if(r._`${i} > 1`,(()=>(p.length>0&&!p.some((t=>"object"===t||"array"===t))?m:f)(i,o)))}),r._`${h} === false`),t.ok(d)}};e.default=a},5488:(t,e,n)=>{"use strict";n.d(e,{A:()=>a});var i=n(1354),r=n.n(i),o=n(6314),s=n.n(o)()(r());s.push([t.id,"\n.ui-form.ui-tooltip .ui-input-root > label.ui-input-label:not(:empty) {\n /* min-width: 30px; /* Breaks right margin /**/\n}\n\n.ui-form.ui-tooltip .ui-input-root > div.ui-input-text:not(:empty) {\n margin-top: 6px;\n}","",{version:3,sources:["webpack://./css/cell-renderer.css"],names:[],mappings:";AACA;IACI,8CAA8C;AAClD;;AAEA;IACI,eAAe;AACnB",sourcesContent:["\n.ui-form.ui-tooltip .ui-input-root > label.ui-input-label:not(:empty) {\n /* min-width: 30px; /* Breaks right margin /**/\n}\n\n.ui-form.ui-tooltip .ui-input-root > div.ui-input-text:not(:empty) {\n margin-top: 6px;\n}"],sourceRoot:""}]);const a=s},5999:(t,e,n)=>{"use strict";n.d(e,{A:()=>a});var i=n(1354),r=n.n(i),o=n(6314),s=n.n(o)()(r());s.push([t.id,".macromolecule-cell-comp-analysis-host{\n max-height: 250px;\n overflow-y: scroll;\n}\n\n.macromolecule-cell-comp-analysis-bar{\n height: inherit;\n display: block;\n margin-top: 1.5px;\n margin-bottom: 1.5px;\n margin-right: 3px;\n}\n\n.macromolecule-cell-comp-analysis-value{\n display: flex;\n}","",{version:3,sources:["webpack://./css/composition-analysis.css"],names:[],mappings:"AAAA;IACI,iBAAiB;IACjB,kBAAkB;AACtB;;AAEA;IACI,eAAe;IACf,cAAc;IACd,iBAAiB;IACjB,oBAAoB;IACpB,iBAAiB;AACrB;;AAEA;IACI,aAAa;AACjB",sourcesContent:[".macromolecule-cell-comp-analysis-host{\n max-height: 250px;\n overflow-y: scroll;\n}\n\n.macromolecule-cell-comp-analysis-bar{\n height: inherit;\n display: block;\n margin-top: 1.5px;\n margin-bottom: 1.5px;\n margin-right: 3px;\n}\n\n.macromolecule-cell-comp-analysis-value{\n display: flex;\n}"],sourceRoot:""}]);const a=s},857:(t,e,n)=>{"use strict";n.d(e,{A:()=>a});var i=n(1354),r=n.n(i),o=n(6314),s=n.n(o)()(r());s.push([t.id,".monomer-manager-root .grok-sketcher {\n min-width: unset !important;\n}\n\n.monomer-manager-root {\n width: 100% !important;\n height: 100% !important;\n}\n\n.monomer-manager-sketcher .ketcher-host {\n height: 100% !important;\n width: unset !important;\n} \n\n.monomer-manager-root > div:first-child {\n flex-basis: 40% !important;\n}\n.monomer-manager-root > div:nth-child(2) {\n flex-basis: 60% !important;\n}\n\n.monomer-manager-root > div:first-child > .ui-form {\n max-width: unset !important;\n}\n\n.monomer-card-info-row {\n width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n margin-bottom: 10px;\n}\n\n.monomer-card-info-row > div:nth-child(2) {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.monomer-card-info-row > div:nth-child(1) {\n font-weight: bold;\n margin-right: 5px;\n text-wrap: nowrap;\n}\n\n.duplicate-monomer-symbol-row {\n visibility: visible !important;\n}\n\n.monomer-card-root {\n border: 2px solid var(--grey-2);\n border-radius: 5px;\n padding: 5px;\n margin: 5px;\n overflow: hidden;\n align-items: center;\n cursor: pointer;\n width: 200px;\n height: 300px;\n min-width: 200px;\n min-height: 300px;\n}\n\n.duplicate-monomers-virtual-view {\n width: 100% !important;\n overflow-x: clip;\n overflow-y: auto;\n}\n\n.monomer-manager-form-tab-control input.d4-invalid {\n background: #ff000030;\n}\n\n.monomer-lib-controls-form .ui-input-root {\n flex-wrap: nowrap !important;\n}","",{version:3,sources:["webpack://./css/monomer-manager.css"],names:[],mappings:"AAAA;IACI,2BAA2B;AAC/B;;AAEA;IACI,sBAAsB;IACtB,uBAAuB;AAC3B;;AAEA;IACI,uBAAuB;IACvB,uBAAuB;AAC3B;;AAEA;IACI,0BAA0B;AAC9B;AACA;IACI,0BAA0B;AAC9B;;AAEA;IACI,2BAA2B;AAC/B;;AAEA;IACI,WAAW;IACX,gBAAgB;IAChB,uBAAuB;IACvB,mBAAmB;AACvB;;AAEA;IACI,mBAAmB;IACnB,gBAAgB;IAChB,uBAAuB;AAC3B;;AAEA;IACI,iBAAiB;IACjB,iBAAiB;IACjB,iBAAiB;AACrB;;AAEA;IACI,8BAA8B;AAClC;;AAEA;IACI,+BAA+B;IAC/B,kBAAkB;IAClB,YAAY;IACZ,WAAW;IACX,gBAAgB;IAChB,mBAAmB;IACnB,eAAe;IACf,YAAY;IACZ,aAAa;IACb,gBAAgB;IAChB,iBAAiB;AACrB;;AAEA;IACI,sBAAsB;IACtB,gBAAgB;IAChB,gBAAgB;AACpB;;AAEA;IACI,qBAAqB;AACzB;;AAEA;IACI,4BAA4B;AAChC",sourcesContent:[".monomer-manager-root .grok-sketcher {\n min-width: unset !important;\n}\n\n.monomer-manager-root {\n width: 100% !important;\n height: 100% !important;\n}\n\n.monomer-manager-sketcher .ketcher-host {\n height: 100% !important;\n width: unset !important;\n} \n\n.monomer-manager-root > div:first-child {\n flex-basis: 40% !important;\n}\n.monomer-manager-root > div:nth-child(2) {\n flex-basis: 60% !important;\n}\n\n.monomer-manager-root > div:first-child > .ui-form {\n max-width: unset !important;\n}\n\n.monomer-card-info-row {\n width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n margin-bottom: 10px;\n}\n\n.monomer-card-info-row > div:nth-child(2) {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.monomer-card-info-row > div:nth-child(1) {\n font-weight: bold;\n margin-right: 5px;\n text-wrap: nowrap;\n}\n\n.duplicate-monomer-symbol-row {\n visibility: visible !important;\n}\n\n.monomer-card-root {\n border: 2px solid var(--grey-2);\n border-radius: 5px;\n padding: 5px;\n margin: 5px;\n overflow: hidden;\n align-items: center;\n cursor: pointer;\n width: 200px;\n height: 300px;\n min-width: 200px;\n min-height: 300px;\n}\n\n.duplicate-monomers-virtual-view {\n width: 100% !important;\n overflow-x: clip;\n overflow-y: auto;\n}\n\n.monomer-manager-form-tab-control input.d4-invalid {\n background: #ff000030;\n}\n\n.monomer-lib-controls-form .ui-input-root {\n flex-wrap: nowrap !important;\n}"],sourceRoot:""}]);const a=s},6369:(t,e,n)=>{"use strict";n.d(e,{A:()=>a});var i=n(1354),r=n.n(i),o=n(6314),s=n.n(o)()(r());s.push([t.id,".kalign-version {\n margin-bottom: 0;\n text-align: end;\n font-size: 12px;\n opacity: 0.8;\n}\nbutton.msa-params-button.ui-btn {\n justify-content: end;\n}","",{version:3,sources:["webpack://./css/msa.css"],names:[],mappings:"AAAA;IACI,gBAAgB;IAChB,eAAe;IACf,eAAe;IACf,YAAY;AAChB;AACA;IACI,oBAAoB;AACxB",sourcesContent:[".kalign-version {\n margin-bottom: 0;\n text-align: end;\n font-size: 12px;\n opacity: 0.8;\n}\nbutton.msa-params-button.ui-btn {\n justify-content: end;\n}"],sourceRoot:""}]);const a=s},7939:(t,e,n)=>{"use strict";n.d(e,{A:()=>a});var i=n(1354),r=n.n(i),o=n(6314),s=n.n(o)()(r());s.push([t.id,".scatter_plot_link {\n right: 10px;\n}\n\n.cliffs_div {\n flex-grow: initial!important;\n justify-content: flex-end;\n flex-wrap: wrap;\n}\n\n.cliffs_grid {\n margin: 0!important;\n}\n\n.ml-dim-reduction-settings-input i.grok-icon.grok-font-icon-settings {\n font-size: 18px;\n position: absolute;\n height: 28px;\n}\n\n.ml-dim-reduction-settings-input i.grok-icon.grok-font-icon-settings:not(.ml-dim-reduction-column-editor-input-root i) {\n left: -20px;\n}\n.dlg-dimensionality-reduction.ui-form, .dlg-markov-clustering.ui-form, .dlg-markov-clustering.ui-form .ui-form, .dlg-dimensionality-reduction.ui-form .ui-form {\n max-width: unset;\n}\n\n.ml-dim-reduction-column-editor-input-root label {\n display: none !important;\n}\n\n.dim-reduction-dialog-form > .ui-input-root, .dim-reduction-dialog-form > div > .ui-input-root {\n margin-left: 10px;\n}\n\n.ml-dim-reduction-column-editor-input-root input, .ml-dim-reduction-column-editor-input-root select {\n margin-left: 20px !important;\n}\n\nh3.ml-dim-reduction-column-editor-input-root {\n margin: 0 !important;\n}\n\n.ml-dim-reduction-column-editor-root, .ml-dim-reduction-column-editor-header-root {\n display: flex;\n flex-direction: row;\n align-items: center;\n margin-bottom: 10px !important;\n width: 700px !important;\n}\n\n.ml-dim-reduction-column-editor-column-title {\n text-overflow: ellipsis;\n overflow: hidden;\n}\n\n.ml-dim-reduction-column-editor-header-root > h1:not(:first-child) {\n margin-left: 20px !important;\n}\n\n.ml-dim-reduction-column-editor-table-root .header > td:not(:first-child) {\n padding-left: 32px;\n}","",{version:3,sources:["webpack://./node_modules/@datagrok-libraries/ml/css/styles.css"],names:[],mappings:"AAAA;IACI,WAAW;AACf;;AAEA;IACI,4BAA4B;IAC5B,yBAAyB;IACzB,eAAe;AACnB;;AAEA;GACG,mBAAmB;AACtB;;AAEA;IACI,eAAe;IACf,kBAAkB;IAClB,YAAY;AAChB;;AAEA;IACI,WAAW;AACf;AACA;IACI,gBAAgB;AACpB;;AAEA;IACI,wBAAwB;AAC5B;;AAEA;IACI,iBAAiB;AACrB;;AAEA;IACI,4BAA4B;AAChC;;AAEA;IACI,oBAAoB;AACxB;;AAEA;IACI,aAAa;IACb,mBAAmB;IACnB,mBAAmB;IACnB,8BAA8B;IAC9B,uBAAuB;AAC3B;;AAEA;IACI,uBAAuB;IACvB,gBAAgB;AACpB;;AAEA;IACI,4BAA4B;AAChC;;AAEA;IACI,kBAAkB;AACtB",sourcesContent:[".scatter_plot_link {\n right: 10px;\n}\n\n.cliffs_div {\n flex-grow: initial!important;\n justify-content: flex-end;\n flex-wrap: wrap;\n}\n\n.cliffs_grid {\n margin: 0!important;\n}\n\n.ml-dim-reduction-settings-input i.grok-icon.grok-font-icon-settings {\n font-size: 18px;\n position: absolute;\n height: 28px;\n}\n\n.ml-dim-reduction-settings-input i.grok-icon.grok-font-icon-settings:not(.ml-dim-reduction-column-editor-input-root i) {\n left: -20px;\n}\n.dlg-dimensionality-reduction.ui-form, .dlg-markov-clustering.ui-form, .dlg-markov-clustering.ui-form .ui-form, .dlg-dimensionality-reduction.ui-form .ui-form {\n max-width: unset;\n}\n\n.ml-dim-reduction-column-editor-input-root label {\n display: none !important;\n}\n\n.dim-reduction-dialog-form > .ui-input-root, .dim-reduction-dialog-form > div > .ui-input-root {\n margin-left: 10px;\n}\n\n.ml-dim-reduction-column-editor-input-root input, .ml-dim-reduction-column-editor-input-root select {\n margin-left: 20px !important;\n}\n\nh3.ml-dim-reduction-column-editor-input-root {\n margin: 0 !important;\n}\n\n.ml-dim-reduction-column-editor-root, .ml-dim-reduction-column-editor-header-root {\n display: flex;\n flex-direction: row;\n align-items: center;\n margin-bottom: 10px !important;\n width: 700px !important;\n}\n\n.ml-dim-reduction-column-editor-column-title {\n text-overflow: ellipsis;\n overflow: hidden;\n}\n\n.ml-dim-reduction-column-editor-header-root > h1:not(:first-child) {\n margin-left: 20px !important;\n}\n\n.ml-dim-reduction-column-editor-table-root .header > td:not(:first-child) {\n padding-left: 32px;\n}"],sourceRoot:""}]);const a=s},3017:(t,e,n)=>{"use strict";n.d(e,{A:()=>a});var i=n(1354),r=n.n(i),o=n(6314),s=n.n(o)()(r());s.push([t.id,".monomer-lib-controls-form {\n margin-left: auto;\n margin-right: auto;\n display: flex;\n flex-direction: column;\n align-items: center;\n min-width: 220px;\n width: 100%;\n\n}\n","",{version:3,sources:["webpack://./src/utils/monomer-lib/library-file-manager/style.css"],names:[],mappings:"AAAA;EACE,iBAAiB;EACjB,kBAAkB;EAClB,aAAa;EACb,sBAAsB;EACtB,mBAAmB;EACnB,gBAAgB;EAChB,WAAW;;AAEb",sourcesContent:[".monomer-lib-controls-form {\n margin-left: auto;\n margin-right: auto;\n display: flex;\n flex-direction: column;\n align-items: center;\n min-width: 220px;\n width: 100%;\n\n}\n"],sourceRoot:""}]);const a=s},6314:t=>{"use strict";t.exports=function(t){var e=[];return e.toString=function(){return this.map((function(e){var n="",i=void 0!==e[5];return e[4]&&(n+="@supports (".concat(e[4],") {")),e[2]&&(n+="@media ".concat(e[2]," {")),i&&(n+="@layer".concat(e[5].length>0?" ".concat(e[5]):""," {")),n+=t(e),i&&(n+="}"),e[2]&&(n+="}"),e[4]&&(n+="}"),n})).join("")},e.i=function(t,n,i,r,o){"string"==typeof t&&(t=[[null,t,void 0]]);var s={};if(i)for(var a=0;a<this.length;a++){var l=this[a][0];null!=l&&(s[l]=!0)}for(var c=0;c<t.length;c++){var h=[].concat(t[c]);i&&s[h[0]]||(void 0!==o&&(void 0===h[5]||(h[1]="@layer".concat(h[5].length>0?" ".concat(h[5]):""," {").concat(h[1],"}")),h[5]=o),n&&(h[2]?(h[1]="@media ".concat(h[2]," {").concat(h[1],"}"),h[2]=n):h[2]=n),r&&(h[4]?(h[1]="@supports (".concat(h[4],") {").concat(h[1],"}"),h[4]=r):h[4]="".concat(r)),e.push(h))}},e}},1354:t=>{"use strict";t.exports=function(t){var e=t[1],n=t[3];if(!n)return e;if("function"==typeof btoa){var i=btoa(unescape(encodeURIComponent(JSON.stringify(n)))),r="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(i),o="/*# ".concat(r," */");return[e].concat([o]).join("\n")}return[e].join("\n")}},2017:t=>{"use strict";t.exports=function t(e,n){if(e===n)return!0;if(e&&n&&"object"==typeof e&&"object"==typeof n){if(e.constructor!==n.constructor)return!1;var i,r,o;if(Array.isArray(e)){if((i=e.length)!=n.length)return!1;for(r=i;0!=r--;)if(!t(e[r],n[r]))return!1;return!0}if(e.constructor===RegExp)return e.source===n.source&&e.flags===n.flags;if(e.valueOf!==Object.prototype.valueOf)return e.valueOf()===n.valueOf();if(e.toString!==Object.prototype.toString)return e.toString()===n.toString();if((i=(o=Object.keys(e)).length)!==Object.keys(n).length)return!1;for(r=i;0!=r--;)if(!Object.prototype.hasOwnProperty.call(n,o[r]))return!1;for(r=i;0!=r--;){var s=o[r];if(!t(e[s],n[s]))return!1}return!0}return e!=e&&n!=n}},9982:function(t,e,n){var i;!function(){var e={};!function(t){"use strict";t.__esModule=!0,t.digestLength=32,t.blockSize=64;var e=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]);function n(t,n,i,r,o){for(var s,a,l,c,h,u,d,p,m,f,g,y,b;o>=64;){for(s=n[0],a=n[1],l=n[2],c=n[3],h=n[4],u=n[5],d=n[6],p=n[7],f=0;f<16;f++)g=r+4*f,t[f]=(255&i[g])<<24|(255&i[g+1])<<16|(255&i[g+2])<<8|255&i[g+3];for(f=16;f<64;f++)y=((m=t[f-2])>>>17|m<<15)^(m>>>19|m<<13)^m>>>10,b=((m=t[f-15])>>>7|m<<25)^(m>>>18|m<<14)^m>>>3,t[f]=(y+t[f-7]|0)+(b+t[f-16]|0);for(f=0;f<64;f++)y=(((h>>>6|h<<26)^(h>>>11|h<<21)^(h>>>25|h<<7))+(h&u^~h&d)|0)+(p+(e[f]+t[f]|0)|0)|0,b=((s>>>2|s<<30)^(s>>>13|s<<19)^(s>>>22|s<<10))+(s&a^s&l^a&l)|0,p=d,d=u,u=h,h=c+y|0,c=l,l=a,a=s,s=y+b|0;n[0]+=s,n[1]+=a,n[2]+=l,n[3]+=c,n[4]+=h,n[5]+=u,n[6]+=d,n[7]+=p,r+=64,o-=64}return r}var i=function(){function e(){this.digestLength=t.digestLength,this.blockSize=t.blockSize,this.state=new Int32Array(8),this.temp=new Int32Array(64),this.buffer=new Uint8Array(128),this.bufferLength=0,this.bytesHashed=0,this.finished=!1,this.reset()}return e.prototype.reset=function(){return this.state[0]=1779033703,this.state[1]=3144134277,this.state[2]=1013904242,this.state[3]=2773480762,this.state[4]=1359893119,this.state[5]=2600822924,this.state[6]=528734635,this.state[7]=1541459225,this.bufferLength=0,this.bytesHashed=0,this.finished=!1,this},e.prototype.clean=function(){for(var t=0;t<this.buffer.length;t++)this.buffer[t]=0;for(t=0;t<this.temp.length;t++)this.temp[t]=0;this.reset()},e.prototype.update=function(t,e){if(void 0===e&&(e=t.length),this.finished)throw new Error("SHA256: can't update because hash was finished.");var i=0;if(this.bytesHashed+=e,this.bufferLength>0){for(;this.bufferLength<64&&e>0;)this.buffer[this.bufferLength++]=t[i++],e--;64===this.bufferLength&&(n(this.temp,this.state,this.buffer,0,64),this.bufferLength=0)}for(e>=64&&(i=n(this.temp,this.state,t,i,e),e%=64);e>0;)this.buffer[this.bufferLength++]=t[i++],e--;return this},e.prototype.finish=function(t){if(!this.finished){var e=this.bytesHashed,i=this.bufferLength,r=e/536870912|0,o=e<<3,s=e%64<56?64:128;this.buffer[i]=128;for(var a=i+1;a<s-8;a++)this.buffer[a]=0;this.buffer[s-8]=r>>>24&255,this.buffer[s-7]=r>>>16&255,this.buffer[s-6]=r>>>8&255,this.buffer[s-5]=r>>>0&255,this.buffer[s-4]=o>>>24&255,this.buffer[s-3]=o>>>16&255,this.buffer[s-2]=o>>>8&255,this.buffer[s-1]=o>>>0&255,n(this.temp,this.state,this.buffer,0,s),this.finished=!0}for(a=0;a<8;a++)t[4*a+0]=this.state[a]>>>24&255,t[4*a+1]=this.state[a]>>>16&255,t[4*a+2]=this.state[a]>>>8&255,t[4*a+3]=this.state[a]>>>0&255;return this},e.prototype.digest=function(){var t=new Uint8Array(this.digestLength);return this.finish(t),t},e.prototype._saveState=function(t){for(var e=0;e<this.state.length;e++)t[e]=this.state[e]},e.prototype._restoreState=function(t,e){for(var n=0;n<this.state.length;n++)this.state[n]=t[n];this.bytesHashed=e,this.finished=!1,this.bufferLength=0},e}();t.Hash=i;var r=function(){function t(t){this.inner=new i,this.outer=new i,this.blockSize=this.inner.blockSize,this.digestLength=this.inner.digestLength;var e=new Uint8Array(this.blockSize);if(t.length>this.blockSize)(new i).update(t).finish(e).clean();else for(var n=0;n<t.length;n++)e[n]=t[n];for(n=0;n<e.length;n++)e[n]^=54;for(this.inner.update(e),n=0;n<e.length;n++)e[n]^=106;for(this.outer.update(e),this.istate=new Uint32Array(8),this.ostate=new Uint32Array(8),this.inner._saveState(this.istate),this.outer._saveState(this.ostate),n=0;n<e.length;n++)e[n]=0}return t.prototype.reset=function(){return this.inner._restoreState(this.istate,this.inner.blockSize),this.outer._restoreState(this.ostate,this.outer.blockSize),this},t.prototype.clean=function(){for(var t=0;t<this.istate.length;t++)this.ostate[t]=this.istate[t]=0;this.inner.clean(),this.outer.clean()},t.prototype.update=function(t){return this.inner.update(t),this},t.prototype.finish=function(t){return this.outer.finished?this.outer.finish(t):(this.inner.finish(t),this.outer.update(t,this.digestLength).finish(t)),this},t.prototype.digest=function(){var t=new Uint8Array(this.digestLength);return this.finish(t),t},t}();function o(t){var e=(new i).update(t),n=e.digest();return e.clean(),n}function s(t,e){var n=new r(t).update(e),i=n.digest();return n.clean(),i}function a(t,e,n,i){var r=i[0];if(0===r)throw new Error("hkdf: cannot expand more");e.reset(),r>1&&e.update(t),n&&e.update(n),e.update(i),e.finish(t),i[0]++}t.HMAC=r,t.hash=o,t.default=o,t.hmac=s;var l=new Uint8Array(t.digestLength);t.hkdf=function(t,e,n,i){void 0===e&&(e=l),void 0===i&&(i=32);for(var o=new Uint8Array([1]),c=s(e,t),h=new r(c),u=new Uint8Array(h.digestLength),d=u.length,p=new Uint8Array(i),m=0;m<i;m++)d===u.length&&(a(u,h,n,o),d=0),p[m]=u[d++];return h.clean(),u.fill(0),o.fill(0),p},t.pbkdf2=function(t,e,n,i){for(var o=new r(t),s=o.digestLength,a=new Uint8Array(4),l=new Uint8Array(s),c=new Uint8Array(s),h=new Uint8Array(i),u=0;u*s<i;u++){var d=u+1;a[0]=d>>>24&255,a[1]=d>>>16&255,a[2]=d>>>8&255,a[3]=d>>>0&255,o.reset(),o.update(e),o.update(a),o.finish(c);for(var p=0;p<s;p++)l[p]=c[p];for(p=2;p<=n;p++){o.reset(),o.update(c).finish(c);for(var m=0;m<s;m++)l[m]^=c[m]}for(p=0;p<s&&u*s+p<i;p++)h[u*s+p]=l[p]}for(u=0;u<s;u++)l[u]=c[u]=0;for(u=0;u<4;u++)a[u]=0;return o.clean(),h}}(e);var r=e.default;for(var o in e)r[o]=e[o];"object"==typeof t.exports?t.exports=r:void 0===(i=function(){return r}.call(e,n,e,t))||(t.exports=i)}()},2787:(t,e,n)=>{"use strict";n.d(e,{I:()=>r});const i=new Uint32Array(65536),r=(t,e)=>{if(t.length<e.length){const n=e;e=t,t=n}return 0===e.length?t.length:t.length<=32?((t,e)=>{const n=t.length,r=e.length,o=1<<n-1;let s=-1,a=0,l=n,c=n;for(;c--;)i[t.charCodeAt(c)]|=1<<c;for(c=0;c<r;c++){let t=i[e.charCodeAt(c)];const n=t|a;t|=(t&s)+s^s,a|=~(t|s),s&=t,a&o&&l++,s&o&&l--,a=a<<1|1,s=s<<1|~(n|a),a&=n}for(c=n;c--;)i[t.charCodeAt(c)]=0;return l})(t,e):((t,e)=>{const n=e.length,r=t.length,o=[],s=[],a=Math.ceil(n/32),l=Math.ceil(r/32);for(let t=0;t<a;t++)s[t]=-1,o[t]=0;let c=0;for(;c<l-1;c++){let a=0,l=-1;const h=32*c,u=Math.min(32,r)+h;for(let e=h;e<u;e++)i[t.charCodeAt(e)]|=1<<e;for(let t=0;t<n;t++){const n=i[e.charCodeAt(t)],r=s[t/32|0]>>>t&1,c=o[t/32|0]>>>t&1,h=n|a,u=((n|c)&l)+l^l|n|c;let d=a|~(u|l),p=l&u;d>>>31^r&&(s[t/32|0]^=1<<t),p>>>31^c&&(o[t/32|0]^=1<<t),d=d<<1|r,p=p<<1|c,l=p|~(h|d),a=d&h}for(let e=h;e<u;e++)i[t.charCodeAt(e)]=0}let h=0,u=-1;const d=32*c,p=Math.min(32,r-d)+d;for(let e=d;e<p;e++)i[t.charCodeAt(e)]|=1<<e;let m=r;for(let t=0;t<n;t++){const n=i[e.charCodeAt(t)],a=s[t/32|0]>>>t&1,l=o[t/32|0]>>>t&1,c=n|h,d=((n|l)&u)+u^u|n|l;let p=h|~(d|u),f=u&d;m+=p>>>r-1&1,m-=f>>>r-1&1,p>>>31^a&&(s[t/32|0]^=1<<t),f>>>31^l&&(o[t/32|0]^=1<<t),p=p<<1|a,f=f<<1|l,u=f|~(c|p),h=p&c}for(let e=d;e<p;e++)i[t.charCodeAt(e)]=0;return m})(t,e)}},9937:t=>{t.exports={linLogMode:!1,outboundAttractionDistribution:!1,adjustSizes:!1,edgeWeightInfluence:1,scalingRatio:1,strongGravityMode:!1,gravity:1,slowDown:1,barnesHutOptimize:!1,barnesHutTheta:.5}},1782:(t,e)=>{e.assign=function(t){t=t||{};var e,n,i,r=Array.prototype.slice.call(arguments).slice(1);for(e=0,i=r.length;e<i;e++)if(r[e])for(n in r[e])t[n]=r[e][n];return t},e.validateSettings=function(t){return"linLogMode"in t&&"boolean"!=typeof t.linLogMode?{message:"the `linLogMode` setting should be a boolean."}:"outboundAttractionDistribution"in t&&"boolean"!=typeof t.outboundAttractionDistribution?{message:"the `outboundAttractionDistribution` setting should be a boolean."}:"adjustSizes"in t&&"boolean"!=typeof t.adjustSizes?{message:"the `adjustSizes` setting should be a boolean."}:"edgeWeightInfluence"in t&&"number"!=typeof t.edgeWeightInfluence?{message:"the `edgeWeightInfluence` setting should be a number."}:!("scalingRatio"in t)||"number"==typeof t.scalingRatio&&t.scalingRatio>=0?"strongGravityMode"in t&&"boolean"!=typeof t.strongGravityMode?{message:"the `strongGravityMode` setting should be a boolean."}:!("gravity"in t)||"number"==typeof t.gravity&&t.gravity>=0?"slowDown"in t&&!("number"==typeof t.slowDown||t.slowDown>=0)?{message:"the `slowDown` setting should be a number >= 0."}:"barnesHutOptimize"in t&&"boolean"!=typeof t.barnesHutOptimize?{message:"the `barnesHutOptimize` setting should be a boolean."}:!("barnesHutTheta"in t)||"number"==typeof t.barnesHutTheta&&t.barnesHutTheta>=0?null:{message:"the `barnesHutTheta` setting should be a number >= 0."}:{message:"the `gravity` setting should be a number >= 0."}:{message:"the `scalingRatio` setting should be a number >= 0."}},e.graphToByteArrays=function(t,e){var n,i=t.order,r=t.size,o={},s=new Float32Array(10*i),a=new Float32Array(3*r);return n=0,t.forEachNode((function(t,e){o[t]=n,s[n]=e.x,s[n+1]=e.y,s[n+2]=0,s[n+3]=0,s[n+4]=0,s[n+5]=0,s[n+6]=1,s[n+7]=1,s[n+8]=e.size||1,s[n+9]=e.fixed?1:0,n+=10})),n=0,t.forEachEdge((function(t,i,r,l,c,h,u){var d=o[r],p=o[l],m=e(t,i,r,l,c,h,u);s[d+6]+=m,s[p+6]+=m,a[n]=d,a[n+1]=p,a[n+2]=m,n+=3})),{nodes:s,edges:a}},e.assignLayoutChanges=function(t,e,n){var i=0;t.updateEachNodeAttributes((function(t,r){return r.x=e[i],r.y=e[i+1],i+=10,n?n(t,r):r}))},e.readGraphPositions=function(t,e){var n=0;t.forEachNode((function(t,i){e[n]=i.x,e[n+1]=i.y,n+=10}))},e.collectLayoutChanges=function(t,e,n){for(var i=t.nodes(),r={},o=0,s=0,a=e.length;o<a;o+=10){if(n){var l=Object.assign({},t.getNodeAttributes(i[s]));l.x=e[o],l.y=e[o+1],l=n(i[s],l),r[i[s]]={x:l.x,y:l.y}}else r[i[s]]={x:e[o],y:e[o+1]};s++}return r},e.createWorker=function(t){var e=window.URL||window.webkitURL,n=t.toString(),i=e.createObjectURL(new Blob(["("+n+").call(this);"],{type:"text/javascript"})),r=new Worker(i);return e.revokeObjectURL(i),r}},8903:(t,e,n)=>{var i=n(1736),r=n(8153).Fd,o=n(2561),s=n(1782),a=n(9937);function l(t,e,n){if(!i(e))throw new Error("graphology-layout-forceatlas2: the given graph is not a valid graphology instance.");"number"==typeof n&&(n={iterations:n});var l=n.iterations;if("number"!=typeof l)throw new Error("graphology-layout-forceatlas2: invalid number of iterations.");if(l<=0)throw new Error("graphology-layout-forceatlas2: you should provide a positive number of iterations.");var c=r("getEdgeWeight"in n?n.getEdgeWeight:"weight").fromEntry,h="function"==typeof n.outputReducer?n.outputReducer:null,u=s.assign({},a,n.settings),d=s.validateSettings(u);if(d)throw new Error("graphology-layout-forceatlas2: "+d.message);var p,m=s.graphToByteArrays(e,c);for(p=0;p<l;p++)o(u,m.nodes,m.edges);if(!t)return s.collectLayoutChanges(e,m.nodes);s.assignLayoutChanges(e,m.nodes,h)}var c=l.bind(null,!1);c.assign=l.bind(null,!0),c.inferSettings=function(t){var e="number"==typeof t?t:t.order;return{barnesHutOptimize:e>2e3,strongGravityMode:!0,gravity:.05,scalingRatio:10,slowDown:1+Math.log(e)}},t.exports=c},2561:t=>{var e=10;t.exports=function(t,n,i){var r,o,s,a,l,c,h,u,d,p,m,f,g,y,b,v,w,C,A,S,x,E,M,_=n.length,I=i.length,T=t.adjustSizes,L=t.barnesHutTheta*t.barnesHutTheta,N=[];for(s=0;s<_;s+=e)n[s+4]=n[s+2],n[s+5]=n[s+3],n[s+2]=0,n[s+3]=0;if(t.outboundAttractionDistribution){for(m=0,s=0;s<_;s+=e)m+=n[s+6];m/=_/e}if(t.barnesHutOptimize){var P,$,R,O=1/0,k=-1/0,G=1/0,F=-1/0;for(s=0;s<_;s+=e)O=Math.min(O,n[s+0]),k=Math.max(k,n[s+0]),G=Math.min(G,n[s+1]),F=Math.max(F,n[s+1]);var H=k-O,B=F-G;for(H>B?F=(G-=(H-B)/2)+H:k=(O-=(B-H)/2)+B,N[0]=-1,N[1]=(O+k)/2,N[2]=(G+F)/2,N[3]=Math.max(k-O,F-G),N[4]=-1,N[5]=-1,N[6]=0,N[7]=0,N[8]=0,r=1,s=0;s<_;s+=e)for(o=0,R=3;;){if(!(N[o+5]>=0)){if(N[o+0]<0){N[o+0]=s;break}if(N[o+5]=9*r,u=N[o+3]/2,N[(d=N[o+5])+0]=-1,N[d+1]=N[o+1]-u,N[d+2]=N[o+2]-u,N[d+3]=u,N[d+4]=d+9,N[d+5]=-1,N[d+6]=0,N[d+7]=0,N[d+8]=0,N[(d+=9)+0]=-1,N[d+1]=N[o+1]-u,N[d+2]=N[o+2]+u,N[d+3]=u,N[d+4]=d+9,N[d+5]=-1,N[d+6]=0,N[d+7]=0,N[d+8]=0,N[(d+=9)+0]=-1,N[d+1]=N[o+1]+u,N[d+2]=N[o+2]-u,N[d+3]=u,N[d+4]=d+9,N[d+5]=-1,N[d+6]=0,N[d+7]=0,N[d+8]=0,N[(d+=9)+0]=-1,N[d+1]=N[o+1]+u,N[d+2]=N[o+2]+u,N[d+3]=u,N[d+4]=N[o+4],N[d+5]=-1,N[d+6]=0,N[d+7]=0,N[d+8]=0,r+=4,P=n[N[o+0]+0]<N[o+1]?n[N[o+0]+1]<N[o+2]?N[o+5]:N[o+5]+9:n[N[o+0]+1]<N[o+2]?N[o+5]+18:N[o+5]+27,N[o+6]=n[N[o+0]+6],N[o+7]=n[N[o+0]+0],N[o+8]=n[N[o+0]+1],N[P+0]=N[o+0],N[o+0]=-1,P===($=n[s+0]<N[o+1]?n[s+1]<N[o+2]?N[o+5]:N[o+5]+9:n[s+1]<N[o+2]?N[o+5]+18:N[o+5]+27)){if(R--){o=P;continue}R=3;break}N[$+0]=s;break}P=n[s+0]<N[o+1]?n[s+1]<N[o+2]?N[o+5]:N[o+5]+9:n[s+1]<N[o+2]?N[o+5]+18:N[o+5]+27,N[o+7]=(N[o+7]*N[o+6]+n[s+0]*n[s+6])/(N[o+6]+n[s+6]),N[o+8]=(N[o+8]*N[o+6]+n[s+1]*n[s+6])/(N[o+6]+n[s+6]),N[o+6]+=n[s+6],o=P}}if(t.barnesHutOptimize){for(f=t.scalingRatio,s=0;s<_;s+=e)for(o=0;;)if(N[o+5]>=0){if(v=Math.pow(n[s+0]-N[o+7],2)+Math.pow(n[s+1]-N[o+8],2),4*(p=N[o+3])*p/v<L){if(g=n[s+0]-N[o+7],y=n[s+1]-N[o+8],!0===T?v>0?(w=f*n[s+6]*N[o+6]/v,n[s+2]+=g*w,n[s+3]+=y*w):v<0&&(w=-f*n[s+6]*N[o+6]/Math.sqrt(v),n[s+2]+=g*w,n[s+3]+=y*w):v>0&&(w=f*n[s+6]*N[o+6]/v,n[s+2]+=g*w,n[s+3]+=y*w),(o=N[o+4])<0)break;continue}o=N[o+5]}else if((c=N[o+0])>=0&&c!==s&&(v=(g=n[s+0]-n[c+0])*g+(y=n[s+1]-n[c+1])*y,!0===T?v>0?(w=f*n[s+6]*n[c+6]/v,n[s+2]+=g*w,n[s+3]+=y*w):v<0&&(w=-f*n[s+6]*n[c+6]/Math.sqrt(v),n[s+2]+=g*w,n[s+3]+=y*w):v>0&&(w=f*n[s+6]*n[c+6]/v,n[s+2]+=g*w,n[s+3]+=y*w)),(o=N[o+4])<0)break}else for(f=t.scalingRatio,a=0;a<_;a+=e)for(l=0;l<a;l+=e)g=n[a+0]-n[l+0],y=n[a+1]-n[l+1],!0===T?(v=Math.sqrt(g*g+y*y)-n[a+8]-n[l+8])>0?(w=f*n[a+6]*n[l+6]/v/v,n[a+2]+=g*w,n[a+3]+=y*w,n[l+2]-=g*w,n[l+3]-=y*w):v<0&&(w=100*f*n[a+6]*n[l+6],n[a+2]+=g*w,n[a+3]+=y*w,n[l+2]-=g*w,n[l+3]-=y*w):(v=Math.sqrt(g*g+y*y))>0&&(w=f*n[a+6]*n[l+6]/v/v,n[a+2]+=g*w,n[a+3]+=y*w,n[l+2]-=g*w,n[l+3]-=y*w);for(d=t.gravity/t.scalingRatio,f=t.scalingRatio,s=0;s<_;s+=e)w=0,g=n[s+0],y=n[s+1],v=Math.sqrt(Math.pow(g,2)+Math.pow(y,2)),t.strongGravityMode?v>0&&(w=f*n[s+6]*d):v>0&&(w=f*n[s+6]*d/v),n[s+2]-=g*w,n[s+3]-=y*w;for(f=1*(t.outboundAttractionDistribution?m:1),h=0;h<I;h+=3)a=i[h+0],l=i[h+1],u=i[h+2],b=Math.pow(u,t.edgeWeightInfluence),g=n[a+0]-n[l+0],y=n[a+1]-n[l+1],!0===T?(v=Math.sqrt(g*g+y*y)-n[a+8]-n[l+8],t.linLogMode?t.outboundAttractionDistribution?v>0&&(w=-f*b*Math.log(1+v)/v/n[a+6]):v>0&&(w=-f*b*Math.log(1+v)/v):t.outboundAttractionDistribution?v>0&&(w=-f*b/n[a+6]):v>0&&(w=-f*b)):(v=Math.sqrt(Math.pow(g,2)+Math.pow(y,2)),t.linLogMode?t.outboundAttractionDistribution?v>0&&(w=-f*b*Math.log(1+v)/v/n[a+6]):v>0&&(w=-f*b*Math.log(1+v)/v):t.outboundAttractionDistribution?(v=1,w=-f*b/n[a+6]):(v=1,w=-f*b)),v>0&&(n[a+2]+=g*w,n[a+3]+=y*w,n[l+2]-=g*w,n[l+3]-=y*w);if(!0===T)for(s=0;s<_;s+=e)1!==n[s+9]&&((C=Math.sqrt(Math.pow(n[s+2],2)+Math.pow(n[s+3],2)))>10&&(n[s+2]=10*n[s+2]/C,n[s+3]=10*n[s+3]/C),A=n[s+6]*Math.sqrt((n[s+4]-n[s+2])*(n[s+4]-n[s+2])+(n[s+5]-n[s+3])*(n[s+5]-n[s+3])),S=Math.sqrt((n[s+4]+n[s+2])*(n[s+4]+n[s+2])+(n[s+5]+n[s+3])*(n[s+5]+n[s+3]))/2,x=.1*Math.log(1+S)/(1+Math.sqrt(A)),E=n[s+0]+n[s+2]*(x/t.slowDown),n[s+0]=E,M=n[s+1]+n[s+3]*(x/t.slowDown),n[s+1]=M);else for(s=0;s<_;s+=e)1!==n[s+9]&&(A=n[s+6]*Math.sqrt((n[s+4]-n[s+2])*(n[s+4]-n[s+2])+(n[s+5]-n[s+3])*(n[s+5]-n[s+3])),S=Math.sqrt((n[s+4]+n[s+2])*(n[s+4]+n[s+2])+(n[s+5]+n[s+3])*(n[s+5]+n[s+3]))/2,x=n[s+7]*Math.log(1+S)/(1+Math.sqrt(A)),n[s+7]=Math.min(1,Math.sqrt(x*(Math.pow(n[s+2],2)+Math.pow(n[s+3],2))/(1+Math.sqrt(A)))),E=n[s+0]+n[s+2]*(x/t.slowDown),n[s+0]=E,M=n[s+1]+n[s+3]*(x/t.slowDown),n[s+1]=M);return{}}},8153:(t,e)=>{function n(t){return"number"!=typeof t||isNaN(t)?1:t}e.Fd=function(t){return function(t,e){var n={},i=function(t){return void 0===t?e:t};"function"==typeof e&&(i=e);var r=function(e){return i(e[t])},o=function(){return i(void 0)};return"string"==typeof t?(n.fromAttributes=r,n.fromGraph=function(t,e){return r(t.getEdgeAttributes(e))},n.fromEntry=function(t,e){return r(e)},n.fromPartialEntry=n.fromEntry,n.fromMinimalEntry=n.fromEntry):"function"==typeof t?(n.fromAttributes=function(){throw new Error("graphology-utils/getters/createEdgeValueGetter: irrelevant usage.")},n.fromGraph=function(e,n){var r=e.extremities(n);return i(t(n,e.getEdgeAttributes(n),r[0],r[1],e.getNodeAttributes(r[0]),e.getNodeAttributes(r[1]),e.isUndirected(n)))},n.fromEntry=function(e,n,r,o,s,a,l){return i(t(e,n,r,o,s,a,l))},n.fromPartialEntry=function(e,n,r,o){return i(t(e,n,r,o))},n.fromMinimalEntry=function(e,n){return i(t(e,n))}):(n.fromAttributes=o,n.fromGraph=o,n.fromEntry=o,n.fromMinimalEntry=o),n}(t,n)}},1736:t=>{t.exports=function(t){return null!==t&&"object"==typeof t&&"function"==typeof t.addUndirectedEdgeWithKey&&"function"==typeof t.dropNode&&"boolean"==typeof t.multi}},934:function(t){t.exports=function(){"use strict";function t(e){return(t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(e)}function e(t,e){t.prototype=Object.create(e.prototype),t.prototype.constructor=t,i(t,e)}function n(t){return n=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},n(t)}function i(t,e){return i=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},i(t,e)}function r(t,e,n){return r=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}()?Reflect.construct.bind():function(t,e,n){var r=[null];r.push.apply(r,e);var o=new(Function.bind.apply(t,r));return n&&i(o,n.prototype),o},r.apply(null,arguments)}function o(t){var e="function"==typeof Map?new Map:void 0;return o=function(t){if(null===t||(o=t,-1===Function.toString.call(o).indexOf("[native code]")))return t;var o;if("function"!=typeof t)throw new TypeError("Super expression must either be null or a function");if(void 0!==e){if(e.has(t))return e.get(t);e.set(t,s)}function s(){return r(t,arguments,n(this).constructor)}return s.prototype=Object.create(t.prototype,{constructor:{value:s,enumerable:!1,writable:!0,configurable:!0}}),i(s,t)},o(t)}function s(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}var a=function(){for(var t=arguments[0],e=1,n=arguments.length;e<n;e++)if(arguments[e])for(var i in arguments[e])t[i]=arguments[e][i];return t};function l(t,e,n,i){var r=t._nodes.get(e),o=null;return r?o="mixed"===i?r.out&&r.out[n]||r.undirected&&r.undirected[n]:"directed"===i?r.out&&r.out[n]:r.undirected&&r.undirected[n]:o}function c(e){return"object"===t(e)&&null!==e}function h(t){var e;for(e in t)return!1;return!0}function u(t,e,n){Object.defineProperty(t,e,{enumerable:!1,configurable:!1,writable:!0,value:n})}function d(t,e,n){var i={enumerable:!0,configurable:!0};"function"==typeof n?i.get=n:(i.value=n,i.writable=!1),Object.defineProperty(t,e,i)}function p(t){return!(!c(t)||t.attributes&&!Array.isArray(t.attributes))}"function"==typeof Object.assign&&(a=Object.assign);var m,f={exports:{}},g="object"==typeof Reflect?Reflect:null,y=g&&"function"==typeof g.apply?g.apply:function(t,e,n){return Function.prototype.apply.call(t,e,n)};m=g&&"function"==typeof g.ownKeys?g.ownKeys:Object.getOwnPropertySymbols?function(t){return Object.getOwnPropertyNames(t).concat(Object.getOwnPropertySymbols(t))}:function(t){return Object.getOwnPropertyNames(t)};var b=Number.isNaN||function(t){return t!=t};function v(){v.init.call(this)}f.exports=v,f.exports.once=function(t,e){return new Promise((function(n,i){function r(n){t.removeListener(e,o),i(n)}function o(){"function"==typeof t.removeListener&&t.removeListener("error",r),n([].slice.call(arguments))}T(t,e,o,{once:!0}),"error"!==e&&function(t,e){"function"==typeof t.on&&T(t,"error",e,{once:!0})}(t,r)}))},v.EventEmitter=v,v.prototype._events=void 0,v.prototype._eventsCount=0,v.prototype._maxListeners=void 0;var w=10;function C(t){if("function"!=typeof t)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof t)}function A(t){return void 0===t._maxListeners?v.defaultMaxListeners:t._maxListeners}function S(t,e,n,i){var r,o,s,a;if(C(n),void 0===(o=t._events)?(o=t._events=Object.create(null),t._eventsCount=0):(void 0!==o.newListener&&(t.emit("newListener",e,n.listener?n.listener:n),o=t._events),s=o[e]),void 0===s)s=o[e]=n,++t._eventsCount;else if("function"==typeof s?s=o[e]=i?[n,s]:[s,n]:i?s.unshift(n):s.push(n),(r=A(t))>0&&s.length>r&&!s.warned){s.warned=!0;var l=new Error("Possible EventEmitter memory leak detected. "+s.length+" "+String(e)+" listeners added. Use emitter.setMaxListeners() to increase limit");l.name="MaxListenersExceededWarning",l.emitter=t,l.type=e,l.count=s.length,a=l,console&&console.warn&&console.warn(a)}return t}function x(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function E(t,e,n){var i={fired:!1,wrapFn:void 0,target:t,type:e,listener:n},r=x.bind(i);return r.listener=n,i.wrapFn=r,r}function M(t,e,n){var i=t._events;if(void 0===i)return[];var r=i[e];return void 0===r?[]:"function"==typeof r?n?[r.listener||r]:[r]:n?function(t){for(var e=new Array(t.length),n=0;n<e.length;++n)e[n]=t[n].listener||t[n];return e}(r):I(r,r.length)}function _(t){var e=this._events;if(void 0!==e){var n=e[t];if("function"==typeof n)return 1;if(void 0!==n)return n.length}return 0}function I(t,e){for(var n=new Array(e),i=0;i<e;++i)n[i]=t[i];return n}function T(t,e,n,i){if("function"==typeof t.on)i.once?t.once(e,n):t.on(e,n);else{if("function"!=typeof t.addEventListener)throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof t);t.addEventListener(e,(function r(o){i.once&&t.removeEventListener(e,r),n(o)}))}}function L(t){if("function"!=typeof t)throw new Error("obliterator/iterator: expecting a function!");this.next=t}Object.defineProperty(v,"defaultMaxListeners",{enumerable:!0,get:function(){return w},set:function(t){if("number"!=typeof t||t<0||b(t))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+t+".");w=t}}),v.init=function(){void 0!==this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},v.prototype.setMaxListeners=function(t){if("number"!=typeof t||t<0||b(t))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+t+".");return this._maxListeners=t,this},v.prototype.getMaxListeners=function(){return A(this)},v.prototype.emit=function(t){for(var e=[],n=1;n<arguments.length;n++)e.push(arguments[n]);var i="error"===t,r=this._events;if(void 0!==r)i=i&&void 0===r.error;else if(!i)return!1;if(i){var o;if(e.length>0&&(o=e[0]),o instanceof Error)throw o;var s=new Error("Unhandled error."+(o?" ("+o.message+")":""));throw s.context=o,s}var a=r[t];if(void 0===a)return!1;if("function"==typeof a)y(a,this,e);else{var l=a.length,c=I(a,l);for(n=0;n<l;++n)y(c[n],this,e)}return!0},v.prototype.addListener=function(t,e){return S(this,t,e,!1)},v.prototype.on=v.prototype.addListener,v.prototype.prependListener=function(t,e){return S(this,t,e,!0)},v.prototype.once=function(t,e){return C(e),this.on(t,E(this,t,e)),this},v.prototype.prependOnceListener=function(t,e){return C(e),this.prependListener(t,E(this,t,e)),this},v.prototype.removeListener=function(t,e){var n,i,r,o,s;if(C(e),void 0===(i=this._events))return this;if(void 0===(n=i[t]))return this;if(n===e||n.listener===e)0==--this._eventsCount?this._events=Object.create(null):(delete i[t],i.removeListener&&this.emit("removeListener",t,n.listener||e));else if("function"!=typeof n){for(r=-1,o=n.length-1;o>=0;o--)if(n[o]===e||n[o].listener===e){s=n[o].listener,r=o;break}if(r<0)return this;0===r?n.shift():function(t,e){for(;e+1<t.length;e++)t[e]=t[e+1];t.pop()}(n,r),1===n.length&&(i[t]=n[0]),void 0!==i.removeListener&&this.emit("removeListener",t,s||e)}return this},v.prototype.off=v.prototype.removeListener,v.prototype.removeAllListeners=function(t){var e,n,i;if(void 0===(n=this._events))return this;if(void 0===n.removeListener)return 0===arguments.length?(this._events=Object.create(null),this._eventsCount=0):void 0!==n[t]&&(0==--this._eventsCount?this._events=Object.create(null):delete n[t]),this;if(0===arguments.length){var r,o=Object.keys(n);for(i=0;i<o.length;++i)"removeListener"!==(r=o[i])&&this.removeAllListeners(r);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if("function"==typeof(e=n[t]))this.removeListener(t,e);else if(void 0!==e)for(i=e.length-1;i>=0;i--)this.removeListener(t,e[i]);return this},v.prototype.listeners=function(t){return M(this,t,!0)},v.prototype.rawListeners=function(t){return M(this,t,!1)},v.listenerCount=function(t,e){return"function"==typeof t.listenerCount?t.listenerCount(e):_.call(t,e)},v.prototype.listenerCount=_,v.prototype.eventNames=function(){return this._eventsCount>0?m(this._events):[]},"undefined"!=typeof Symbol&&(L.prototype[Symbol.iterator]=function(){return this}),L.of=function(){var t=arguments,e=t.length,n=0;return new L((function(){return n>=e?{done:!0}:{done:!1,value:t[n++]}}))},L.empty=function(){return new L((function(){return{done:!0}}))},L.fromSequence=function(t){var e=0,n=t.length;return new L((function(){return e>=n?{done:!0}:{done:!1,value:t[e++]}}))},L.is=function(t){return t instanceof L||"object"==typeof t&&null!==t&&"function"==typeof t.next};var N=L,P={};P.ARRAY_BUFFER_SUPPORT="undefined"!=typeof ArrayBuffer,P.SYMBOL_SUPPORT="undefined"!=typeof Symbol;var $=N,R=P,O=R.ARRAY_BUFFER_SUPPORT,k=R.SYMBOL_SUPPORT,G=function(t){var e=function(t){return"string"==typeof t||Array.isArray(t)||O&&ArrayBuffer.isView(t)?$.fromSequence(t):"object"!=typeof t||null===t?null:k&&"function"==typeof t[Symbol.iterator]?t[Symbol.iterator]():"function"==typeof t.next?t:null}(t);if(!e)throw new Error("obliterator: target is not iterable nor a valid iterator.");return e},F=G,H=function(t,e){for(var n,i=arguments.length>1?e:1/0,r=i!==1/0?new Array(i):[],o=0,s=F(t);;){if(o===i)return r;if((n=s.next()).done)return o!==e&&(r.length=o),r;r[o++]=n.value}},B=function(t){function n(e){var n;return(n=t.call(this)||this).name="GraphError",n.message=e,n}return e(n,t),n}(o(Error)),D=function(t){function n(e){var i;return(i=t.call(this,e)||this).name="InvalidArgumentsGraphError","function"==typeof Error.captureStackTrace&&Error.captureStackTrace(s(i),n.prototype.constructor),i}return e(n,t),n}(B),V=function(t){function n(e){var i;return(i=t.call(this,e)||this).name="NotFoundGraphError","function"==typeof Error.captureStackTrace&&Error.captureStackTrace(s(i),n.prototype.constructor),i}return e(n,t),n}(B),j=function(t){function n(e){var i;return(i=t.call(this,e)||this).name="UsageGraphError","function"==typeof Error.captureStackTrace&&Error.captureStackTrace(s(i),n.prototype.constructor),i}return e(n,t),n}(B);function U(t,e){this.key=t,this.attributes=e,this.clear()}function W(t,e){this.key=t,this.attributes=e,this.clear()}function q(t,e){this.key=t,this.attributes=e,this.clear()}function z(t,e,n,i,r){this.key=e,this.attributes=r,this.undirected=t,this.source=n,this.target=i}function Y(t,e,n,i,r,o,s){var a,l,c,h;if(i=""+i,0===n){if(!(a=t._nodes.get(i)))throw new V("Graph.".concat(e,': could not find the "').concat(i,'" node in the graph.'));c=r,h=o}else if(3===n){if(r=""+r,!(l=t._edges.get(r)))throw new V("Graph.".concat(e,': could not find the "').concat(r,'" edge in the graph.'));var u=l.source.key,d=l.target.key;if(i===u)a=l.target;else{if(i!==d)throw new V("Graph.".concat(e,': the "').concat(i,'" node is not attached to the "').concat(r,'" edge (').concat(u,", ").concat(d,")."));a=l.source}c=o,h=s}else{if(!(l=t._edges.get(i)))throw new V("Graph.".concat(e,': could not find the "').concat(i,'" edge in the graph.'));a=1===n?l.source:l.target,c=r,h=o}return[a,c,h]}U.prototype.clear=function(){this.inDegree=0,this.outDegree=0,this.undirectedDegree=0,this.undirectedLoops=0,this.directedLoops=0,this.in={},this.out={},this.undirected={}},W.prototype.clear=function(){this.inDegree=0,this.outDegree=0,this.directedLoops=0,this.in={},this.out={}},q.prototype.clear=function(){this.undirectedDegree=0,this.undirectedLoops=0,this.undirected={}},z.prototype.attach=function(){var t="out",e="in";this.undirected&&(t=e="undirected");var n=this.source.key,i=this.target.key;this.source[t][i]=this,this.undirected&&n===i||(this.target[e][n]=this)},z.prototype.attachMulti=function(){var t="out",e="in",n=this.source.key,i=this.target.key;this.undirected&&(t=e="undirected");var r=this.source[t],o=r[i];if(void 0===o)return r[i]=this,void(this.undirected&&n===i||(this.target[e][n]=this));o.previous=this,this.next=o,r[i]=this,this.target[e][n]=this},z.prototype.detach=function(){var t=this.source.key,e=this.target.key,n="out",i="in";this.undirected&&(n=i="undirected"),delete this.source[n][e],delete this.target[i][t]},z.prototype.detachMulti=function(){var t=this.source.key,e=this.target.key,n="out",i="in";this.undirected&&(n=i="undirected"),void 0===this.previous?void 0===this.next?(delete this.source[n][e],delete this.target[i][t]):(this.next.previous=void 0,this.source[n][e]=this.next,this.target[i][t]=this.next):(this.previous.next=this.next,void 0!==this.next&&(this.next.previous=this.previous))};var K=[{name:function(t){return"get".concat(t,"Attribute")},attacher:function(t,e,n){t.prototype[e]=function(t,i,r){var o=Y(this,e,n,t,i,r),s=o[0],a=o[1];return s.attributes[a]}}},{name:function(t){return"get".concat(t,"Attributes")},attacher:function(t,e,n){t.prototype[e]=function(t,i){return Y(this,e,n,t,i)[0].attributes}}},{name:function(t){return"has".concat(t,"Attribute")},attacher:function(t,e,n){t.prototype[e]=function(t,i,r){var o=Y(this,e,n,t,i,r),s=o[0],a=o[1];return s.attributes.hasOwnProperty(a)}}},{name:function(t){return"set".concat(t,"Attribute")},attacher:function(t,e,n){t.prototype[e]=function(t,i,r,o){var s=Y(this,e,n,t,i,r,o),a=s[0],l=s[1],c=s[2];return a.attributes[l]=c,this.emit("nodeAttributesUpdated",{key:a.key,type:"set",attributes:a.attributes,name:l}),this}}},{name:function(t){return"update".concat(t,"Attribute")},attacher:function(t,e,n){t.prototype[e]=function(t,i,r,o){var s=Y(this,e,n,t,i,r,o),a=s[0],l=s[1],c=s[2];if("function"!=typeof c)throw new D("Graph.".concat(e,": updater should be a function."));var h=a.attributes,u=c(h[l]);return h[l]=u,this.emit("nodeAttributesUpdated",{key:a.key,type:"set",attributes:a.attributes,name:l}),this}}},{name:function(t){return"remove".concat(t,"Attribute")},attacher:function(t,e,n){t.prototype[e]=function(t,i,r){var o=Y(this,e,n,t,i,r),s=o[0],a=o[1];return delete s.attributes[a],this.emit("nodeAttributesUpdated",{key:s.key,type:"remove",attributes:s.attributes,name:a}),this}}},{name:function(t){return"replace".concat(t,"Attributes")},attacher:function(t,e,n){t.prototype[e]=function(t,i,r){var o=Y(this,e,n,t,i,r),s=o[0],a=o[1];if(!c(a))throw new D("Graph.".concat(e,": provided attributes are not a plain object."));return s.attributes=a,this.emit("nodeAttributesUpdated",{key:s.key,type:"replace",attributes:s.attributes}),this}}},{name:function(t){return"merge".concat(t,"Attributes")},attacher:function(t,e,n){t.prototype[e]=function(t,i,r){var o=Y(this,e,n,t,i,r),s=o[0],l=o[1];if(!c(l))throw new D("Graph.".concat(e,": provided attributes are not a plain object."));return a(s.attributes,l),this.emit("nodeAttributesUpdated",{key:s.key,type:"merge",attributes:s.attributes,data:l}),this}}},{name:function(t){return"update".concat(t,"Attributes")},attacher:function(t,e,n){t.prototype[e]=function(t,i,r){var o=Y(this,e,n,t,i,r),s=o[0],a=o[1];if("function"!=typeof a)throw new D("Graph.".concat(e,": provided updater is not a function."));return s.attributes=a(s.attributes),this.emit("nodeAttributesUpdated",{key:s.key,type:"update",attributes:s.attributes}),this}}}],Z=[{name:function(t){return"get".concat(t,"Attribute")},attacher:function(t,e,n){t.prototype[e]=function(t,i){var r;if("mixed"!==this.type&&"mixed"!==n&&n!==this.type)throw new j("Graph.".concat(e,": cannot find this type of edges in your ").concat(this.type," graph."));if(arguments.length>2){if(this.multi)throw new j("Graph.".concat(e,": cannot use a {source,target} combo when asking about an edge's attributes in a MultiGraph since we cannot infer the one you want information about."));var o=""+t,s=""+i;if(i=arguments[2],!(r=l(this,o,s,n)))throw new V("Graph.".concat(e,': could not find an edge for the given path ("').concat(o,'" - "').concat(s,'").'))}else{if("mixed"!==n)throw new j("Graph.".concat(e,": calling this method with only a key (vs. a source and target) does not make sense since an edge with this key could have the other type."));if(t=""+t,!(r=this._edges.get(t)))throw new V("Graph.".concat(e,': could not find the "').concat(t,'" edge in the graph.'))}return r.attributes[i]}}},{name:function(t){return"get".concat(t,"Attributes")},attacher:function(t,e,n){t.prototype[e]=function(t){var i;if("mixed"!==this.type&&"mixed"!==n&&n!==this.type)throw new j("Graph.".concat(e,": cannot find this type of edges in your ").concat(this.type," graph."));if(arguments.length>1){if(this.multi)throw new j("Graph.".concat(e,": cannot use a {source,target} combo when asking about an edge's attributes in a MultiGraph since we cannot infer the one you want information about."));var r=""+t,o=""+arguments[1];if(!(i=l(this,r,o,n)))throw new V("Graph.".concat(e,': could not find an edge for the given path ("').concat(r,'" - "').concat(o,'").'))}else{if("mixed"!==n)throw new j("Graph.".concat(e,": calling this method with only a key (vs. a source and target) does not make sense since an edge with this key could have the other type."));if(t=""+t,!(i=this._edges.get(t)))throw new V("Graph.".concat(e,': could not find the "').concat(t,'" edge in the graph.'))}return i.attributes}}},{name:function(t){return"has".concat(t,"Attribute")},attacher:function(t,e,n){t.prototype[e]=function(t,i){var r;if("mixed"!==this.type&&"mixed"!==n&&n!==this.type)throw new j("Graph.".concat(e,": cannot find this type of edges in your ").concat(this.type," graph."));if(arguments.length>2){if(this.multi)throw new j("Graph.".concat(e,": cannot use a {source,target} combo when asking about an edge's attributes in a MultiGraph since we cannot infer the one you want information about."));var o=""+t,s=""+i;if(i=arguments[2],!(r=l(this,o,s,n)))throw new V("Graph.".concat(e,': could not find an edge for the given path ("').concat(o,'" - "').concat(s,'").'))}else{if("mixed"!==n)throw new j("Graph.".concat(e,": calling this method with only a key (vs. a source and target) does not make sense since an edge with this key could have the other type."));if(t=""+t,!(r=this._edges.get(t)))throw new V("Graph.".concat(e,': could not find the "').concat(t,'" edge in the graph.'))}return r.attributes.hasOwnProperty(i)}}},{name:function(t){return"set".concat(t,"Attribute")},attacher:function(t,e,n){t.prototype[e]=function(t,i,r){var o;if("mixed"!==this.type&&"mixed"!==n&&n!==this.type)throw new j("Graph.".concat(e,": cannot find this type of edges in your ").concat(this.type," graph."));if(arguments.length>3){if(this.multi)throw new j("Graph.".concat(e,": cannot use a {source,target} combo when asking about an edge's attributes in a MultiGraph since we cannot infer the one you want information about."));var s=""+t,a=""+i;if(i=arguments[2],r=arguments[3],!(o=l(this,s,a,n)))throw new V("Graph.".concat(e,': could not find an edge for the given path ("').concat(s,'" - "').concat(a,'").'))}else{if("mixed"!==n)throw new j("Graph.".concat(e,": calling this method with only a key (vs. a source and target) does not make sense since an edge with this key could have the other type."));if(t=""+t,!(o=this._edges.get(t)))throw new V("Graph.".concat(e,': could not find the "').concat(t,'" edge in the graph.'))}return o.attributes[i]=r,this.emit("edgeAttributesUpdated",{key:o.key,type:"set",attributes:o.attributes,name:i}),this}}},{name:function(t){return"update".concat(t,"Attribute")},attacher:function(t,e,n){t.prototype[e]=function(t,i,r){var o;if("mixed"!==this.type&&"mixed"!==n&&n!==this.type)throw new j("Graph.".concat(e,": cannot find this type of edges in your ").concat(this.type," graph."));if(arguments.length>3){if(this.multi)throw new j("Graph.".concat(e,": cannot use a {source,target} combo when asking about an edge's attributes in a MultiGraph since we cannot infer the one you want information about."));var s=""+t,a=""+i;if(i=arguments[2],r=arguments[3],!(o=l(this,s,a,n)))throw new V("Graph.".concat(e,': could not find an edge for the given path ("').concat(s,'" - "').concat(a,'").'))}else{if("mixed"!==n)throw new j("Graph.".concat(e,": calling this method with only a key (vs. a source and target) does not make sense since an edge with this key could have the other type."));if(t=""+t,!(o=this._edges.get(t)))throw new V("Graph.".concat(e,': could not find the "').concat(t,'" edge in the graph.'))}if("function"!=typeof r)throw new D("Graph.".concat(e,": updater should be a function."));return o.attributes[i]=r(o.attributes[i]),this.emit("edgeAttributesUpdated",{key:o.key,type:"set",attributes:o.attributes,name:i}),this}}},{name:function(t){return"remove".concat(t,"Attribute")},attacher:function(t,e,n){t.prototype[e]=function(t,i){var r;if("mixed"!==this.type&&"mixed"!==n&&n!==this.type)throw new j("Graph.".concat(e,": cannot find this type of edges in your ").concat(this.type," graph."));if(arguments.length>2){if(this.multi)throw new j("Graph.".concat(e,": cannot use a {source,target} combo when asking about an edge's attributes in a MultiGraph since we cannot infer the one you want information about."));var o=""+t,s=""+i;if(i=arguments[2],!(r=l(this,o,s,n)))throw new V("Graph.".concat(e,': could not find an edge for the given path ("').concat(o,'" - "').concat(s,'").'))}else{if("mixed"!==n)throw new j("Graph.".concat(e,": calling this method with only a key (vs. a source and target) does not make sense since an edge with this key could have the other type."));if(t=""+t,!(r=this._edges.get(t)))throw new V("Graph.".concat(e,': could not find the "').concat(t,'" edge in the graph.'))}return delete r.attributes[i],this.emit("edgeAttributesUpdated",{key:r.key,type:"remove",attributes:r.attributes,name:i}),this}}},{name:function(t){return"replace".concat(t,"Attributes")},attacher:function(t,e,n){t.prototype[e]=function(t,i){var r;if("mixed"!==this.type&&"mixed"!==n&&n!==this.type)throw new j("Graph.".concat(e,": cannot find this type of edges in your ").concat(this.type," graph."));if(arguments.length>2){if(this.multi)throw new j("Graph.".concat(e,": cannot use a {source,target} combo when asking about an edge's attributes in a MultiGraph since we cannot infer the one you want information about."));var o=""+t,s=""+i;if(i=arguments[2],!(r=l(this,o,s,n)))throw new V("Graph.".concat(e,': could not find an edge for the given path ("').concat(o,'" - "').concat(s,'").'))}else{if("mixed"!==n)throw new j("Graph.".concat(e,": calling this method with only a key (vs. a source and target) does not make sense since an edge with this key could have the other type."));if(t=""+t,!(r=this._edges.get(t)))throw new V("Graph.".concat(e,': could not find the "').concat(t,'" edge in the graph.'))}if(!c(i))throw new D("Graph.".concat(e,": provided attributes are not a plain object."));return r.attributes=i,this.emit("edgeAttributesUpdated",{key:r.key,type:"replace",attributes:r.attributes}),this}}},{name:function(t){return"merge".concat(t,"Attributes")},attacher:function(t,e,n){t.prototype[e]=function(t,i){var r;if("mixed"!==this.type&&"mixed"!==n&&n!==this.type)throw new j("Graph.".concat(e,": cannot find this type of edges in your ").concat(this.type," graph."));if(arguments.length>2){if(this.multi)throw new j("Graph.".concat(e,": cannot use a {source,target} combo when asking about an edge's attributes in a MultiGraph since we cannot infer the one you want information about."));var o=""+t,s=""+i;if(i=arguments[2],!(r=l(this,o,s,n)))throw new V("Graph.".concat(e,': could not find an edge for the given path ("').concat(o,'" - "').concat(s,'").'))}else{if("mixed"!==n)throw new j("Graph.".concat(e,": calling this method with only a key (vs. a source and target) does not make sense since an edge with this key could have the other type."));if(t=""+t,!(r=this._edges.get(t)))throw new V("Graph.".concat(e,': could not find the "').concat(t,'" edge in the graph.'))}if(!c(i))throw new D("Graph.".concat(e,": provided attributes are not a plain object."));return a(r.attributes,i),this.emit("edgeAttributesUpdated",{key:r.key,type:"merge",attributes:r.attributes,data:i}),this}}},{name:function(t){return"update".concat(t,"Attributes")},attacher:function(t,e,n){t.prototype[e]=function(t,i){var r;if("mixed"!==this.type&&"mixed"!==n&&n!==this.type)throw new j("Graph.".concat(e,": cannot find this type of edges in your ").concat(this.type," graph."));if(arguments.length>2){if(this.multi)throw new j("Graph.".concat(e,": cannot use a {source,target} combo when asking about an edge's attributes in a MultiGraph since we cannot infer the one you want information about."));var o=""+t,s=""+i;if(i=arguments[2],!(r=l(this,o,s,n)))throw new V("Graph.".concat(e,': could not find an edge for the given path ("').concat(o,'" - "').concat(s,'").'))}else{if("mixed"!==n)throw new j("Graph.".concat(e,": calling this method with only a key (vs. a source and target) does not make sense since an edge with this key could have the other type."));if(t=""+t,!(r=this._edges.get(t)))throw new V("Graph.".concat(e,': could not find the "').concat(t,'" edge in the graph.'))}if("function"!=typeof i)throw new D("Graph.".concat(e,": provided updater is not a function."));return r.attributes=i(r.attributes),this.emit("edgeAttributesUpdated",{key:r.key,type:"update",attributes:r.attributes}),this}}}],X=N,J=G,Q=function(){var t=arguments,e=null,n=-1;return new X((function(){for(var i=null;;){if(null===e){if(++n>=t.length)return{done:!0};e=J(t[n])}if(!0!==(i=e.next()).done)break;e=null}return i}))},tt=[{name:"edges",type:"mixed"},{name:"inEdges",type:"directed",direction:"in"},{name:"outEdges",type:"directed",direction:"out"},{name:"inboundEdges",type:"mixed",direction:"in"},{name:"outboundEdges",type:"mixed",direction:"out"},{name:"directedEdges",type:"directed"},{name:"undirectedEdges",type:"undirected"}];function et(t,e,n,i){var r=!1;for(var o in e)if(o!==i){var s=e[o];if(r=n(s.key,s.attributes,s.source.key,s.target.key,s.source.attributes,s.target.attributes,s.undirected),t&&r)return s.key}}function nt(t,e,n,i){var r,o,s,a=!1;for(var l in e)if(l!==i){r=e[l];do{if(o=r.source,s=r.target,a=n(r.key,r.attributes,o.key,s.key,o.attributes,s.attributes,r.undirected),t&&a)return r.key;r=r.next}while(void 0!==r)}}function it(t,e){var n,i=Object.keys(t),r=i.length,o=0;return new N((function(){do{if(n)n=n.next;else{if(o>=r)return{done:!0};var s=i[o++];if(s===e){n=void 0;continue}n=t[s]}}while(!n);return{done:!1,value:{edge:n.key,attributes:n.attributes,source:n.source.key,target:n.target.key,sourceAttributes:n.source.attributes,targetAttributes:n.target.attributes,undirected:n.undirected}}}))}function rt(t,e,n,i){var r=e[n];if(r){var o=r.source,s=r.target;return i(r.key,r.attributes,o.key,s.key,o.attributes,s.attributes,r.undirected)&&t?r.key:void 0}}function ot(t,e,n,i){var r=e[n];if(r){var o=!1;do{if(o=i(r.key,r.attributes,r.source.key,r.target.key,r.source.attributes,r.target.attributes,r.undirected),t&&o)return r.key;r=r.next}while(void 0!==r)}}function st(t,e){var n=t[e];return void 0!==n.next?new N((function(){if(!n)return{done:!0};var t={edge:n.key,attributes:n.attributes,source:n.source.key,target:n.target.key,sourceAttributes:n.source.attributes,targetAttributes:n.target.attributes,undirected:n.undirected};return n=n.next,{done:!1,value:t}})):N.of({edge:n.key,attributes:n.attributes,source:n.source.key,target:n.target.key,sourceAttributes:n.source.attributes,targetAttributes:n.target.attributes,undirected:n.undirected})}function at(t,e,n,i){if(0!==e.size)for(var r,o,s="mixed"!==n&&n!==e.type,a="undirected"===n,l=!1,c=e._edges.values();!0!==(r=c.next()).done;)if(o=r.value,!s||o.undirected===a){var h=o,u=h.key,d=h.attributes,p=h.source,m=h.target;if(l=i(u,d,p.key,m.key,p.attributes,m.attributes,o.undirected),t&&l)return u}}function lt(t,e,n,i,r,o){var s,a=e?nt:et;if("undirected"!==n){if("out"!==i&&(s=a(t,r.in,o),t&&s))return s;if("in"!==i&&(s=a(t,r.out,o,i?void 0:r.key),t&&s))return s}if("directed"!==n&&(s=a(t,r.undirected,o),t&&s))return s}function ct(t,e,n,i,r,o,s){var a,l=n?ot:rt;if("undirected"!==e){if(void 0!==r.in&&"out"!==i&&(a=l(t,r.in,o,s),t&&a))return a;if(void 0!==r.out&&"in"!==i&&(i||r.key!==o)&&(a=l(t,r.out,o,s),t&&a))return a}if("directed"!==e&&void 0!==r.undirected&&(a=l(t,r.undirected,o,s),t&&a))return a}var ht=[{name:"neighbors",type:"mixed"},{name:"inNeighbors",type:"directed",direction:"in"},{name:"outNeighbors",type:"directed",direction:"out"},{name:"inboundNeighbors",type:"mixed",direction:"in"},{name:"outboundNeighbors",type:"mixed",direction:"out"},{name:"directedNeighbors",type:"directed"},{name:"undirectedNeighbors",type:"undirected"}];function ut(){this.A=null,this.B=null}function dt(t,e,n,i,r){for(var o in i){var s=i[o],a=s.source,l=s.target,c=a===n?l:a;if(!e||!e.has(c.key)){var h=r(c.key,c.attributes);if(t&&h)return c.key}}}function pt(t,e,n,i,r){if("mixed"!==e){if("undirected"===e)return dt(t,null,i,i.undirected,r);if("string"==typeof n)return dt(t,null,i,i[n],r)}var o,s=new ut;if("undirected"!==e){if("out"!==n){if(o=dt(t,null,i,i.in,r),t&&o)return o;s.wrap(i.in)}if("in"!==n){if(o=dt(t,s,i,i.out,r),t&&o)return o;s.wrap(i.out)}}if("directed"!==e&&(o=dt(t,s,i,i.undirected,r),t&&o))return o}function mt(t,e,n){var i=Object.keys(n),r=i.length,o=0;return new N((function(){var s=null;do{if(o>=r)return t&&t.wrap(n),{done:!0};var a=n[i[o++]],l=a.source,c=a.target;s=l===e?c:l,t&&t.has(s.key)&&(s=null)}while(null===s);return{done:!1,value:{neighbor:s.key,attributes:s.attributes}}}))}function ft(t,e,n,i,r){for(var o,s,a,l,c,h,u,d=i._nodes.values(),p=i.type;!0!==(o=d.next()).done;){var m=!1;if(s=o.value,"undirected"!==p)for(a in l=s.out){c=l[a];do{if(h=c.target,m=!0,u=r(s.key,h.key,s.attributes,h.attributes,c.key,c.attributes,c.undirected),t&&u)return c;c=c.next}while(c)}if("directed"!==p)for(a in l=s.undirected)if(!(e&&s.key>a)){c=l[a];do{if((h=c.target).key!==a&&(h=c.source),m=!0,u=r(s.key,h.key,s.attributes,h.attributes,c.key,c.attributes,c.undirected),t&&u)return c;c=c.next}while(c)}if(n&&!m&&(u=r(s.key,null,s.attributes,null,null,null,null),t&&u))return null}}function gt(t){if(!c(t))throw new D('Graph.import: invalid serialized node. A serialized node should be a plain object with at least a "key" property.');if(!("key"in t))throw new D("Graph.import: serialized node is missing its key.");if("attributes"in t&&(!c(t.attributes)||null===t.attributes))throw new D("Graph.import: invalid attributes. Attributes should be a plain object, null or omitted.")}function yt(t){if(!c(t))throw new D('Graph.import: invalid serialized edge. A serialized edge should be a plain object with at least a "source" & "target" property.');if(!("source"in t))throw new D("Graph.import: serialized edge is missing its source.");if(!("target"in t))throw new D("Graph.import: serialized edge is missing its target.");if("attributes"in t&&(!c(t.attributes)||null===t.attributes))throw new D("Graph.import: invalid attributes. Attributes should be a plain object, null or omitted.");if("undirected"in t&&"boolean"!=typeof t.undirected)throw new D("Graph.import: invalid undirectedness information. Undirected should be boolean or omitted.")}ut.prototype.wrap=function(t){null===this.A?this.A=t:null===this.B&&(this.B=t)},ut.prototype.has=function(t){return null!==this.A&&t in this.A||null!==this.B&&t in this.B};var bt,vt=(bt=255&Math.floor(256*Math.random()),function(){return bt++}),wt=new Set(["directed","undirected","mixed"]),Ct=new Set(["domain","_events","_eventsCount","_maxListeners"]),At={allowSelfLoops:!0,multi:!1,type:"mixed"};function St(t,e,n){var i=new t.NodeDataClass(e,n);return t._nodes.set(e,i),t.emit("nodeAdded",{key:e,attributes:n}),i}function xt(t,e,n,i,r,o,s,a){if(!i&&"undirected"===t.type)throw new j("Graph.".concat(e,": you cannot add a directed edge to an undirected graph. Use the #.addEdge or #.addUndirectedEdge instead."));if(i&&"directed"===t.type)throw new j("Graph.".concat(e,": you cannot add an undirected edge to a directed graph. Use the #.addEdge or #.addDirectedEdge instead."));if(a&&!c(a))throw new D("Graph.".concat(e,': invalid attributes. Expecting an object but got "').concat(a,'"'));if(o=""+o,s=""+s,a=a||{},!t.allowSelfLoops&&o===s)throw new j("Graph.".concat(e,': source & target are the same ("').concat(o,"\"), thus creating a loop explicitly forbidden by this graph 'allowSelfLoops' option set to false."));var l=t._nodes.get(o),h=t._nodes.get(s);if(!l)throw new V("Graph.".concat(e,': source node "').concat(o,'" not found.'));if(!h)throw new V("Graph.".concat(e,': target node "').concat(s,'" not found.'));var u={key:null,undirected:i,source:o,target:s,attributes:a};if(n)r=t._edgeKeyGenerator();else if(r=""+r,t._edges.has(r))throw new j("Graph.".concat(e,': the "').concat(r,'" edge already exists in the graph.'));if(!t.multi&&(i?void 0!==l.undirected[s]:void 0!==l.out[s]))throw new j("Graph.".concat(e,': an edge linking "').concat(o,'" to "').concat(s,"\" already exists. If you really want to add multiple edges linking those nodes, you should create a multi graph by using the 'multi' option."));var d=new z(i,r,l,h,a);t._edges.set(r,d);var p=o===s;return i?(l.undirectedDegree++,h.undirectedDegree++,p&&(l.undirectedLoops++,t._undirectedSelfLoopCount++)):(l.outDegree++,h.inDegree++,p&&(l.directedLoops++,t._directedSelfLoopCount++)),t.multi?d.attachMulti():d.attach(),i?t._undirectedSize++:t._directedSize++,u.key=r,t.emit("edgeAdded",u),r}function Et(t,e,n,i,r,o,s,l,h){if(!i&&"undirected"===t.type)throw new j("Graph.".concat(e,": you cannot merge/update a directed edge to an undirected graph. Use the #.mergeEdge/#.updateEdge or #.addUndirectedEdge instead."));if(i&&"directed"===t.type)throw new j("Graph.".concat(e,": you cannot merge/update an undirected edge to a directed graph. Use the #.mergeEdge/#.updateEdge or #.addDirectedEdge instead."));if(l)if(h){if("function"!=typeof l)throw new D("Graph.".concat(e,': invalid updater function. Expecting a function but got "').concat(l,'"'))}else if(!c(l))throw new D("Graph.".concat(e,': invalid attributes. Expecting an object but got "').concat(l,'"'));var u;if(o=""+o,s=""+s,h&&(u=l,l=void 0),!t.allowSelfLoops&&o===s)throw new j("Graph.".concat(e,': source & target are the same ("').concat(o,"\"), thus creating a loop explicitly forbidden by this graph 'allowSelfLoops' option set to false."));var d,p,m=t._nodes.get(o),f=t._nodes.get(s);if(!n&&(d=t._edges.get(r))){if(!(d.source.key===o&&d.target.key===s||i&&d.source.key===s&&d.target.key===o))throw new j("Graph.".concat(e,': inconsistency detected when attempting to merge the "').concat(r,'" edge with "').concat(o,'" source & "').concat(s,'" target vs. ("').concat(d.source.key,'", "').concat(d.target.key,'").'));p=d}if(p||t.multi||!m||(p=i?m.undirected[s]:m.out[s]),p){var g=[p.key,!1,!1,!1];if(h?!u:!l)return g;if(h){var y=p.attributes;p.attributes=u(y),t.emit("edgeAttributesUpdated",{type:"replace",key:p.key,attributes:p.attributes})}else a(p.attributes,l),t.emit("edgeAttributesUpdated",{type:"merge",key:p.key,attributes:p.attributes,data:l});return g}l=l||{},h&&u&&(l=u(l));var b={key:null,undirected:i,source:o,target:s,attributes:l};if(n)r=t._edgeKeyGenerator();else if(r=""+r,t._edges.has(r))throw new j("Graph.".concat(e,': the "').concat(r,'" edge already exists in the graph.'));var v=!1,w=!1;m||(m=St(t,o,{}),v=!0,o===s&&(f=m,w=!0)),f||(f=St(t,s,{}),w=!0),d=new z(i,r,m,f,l),t._edges.set(r,d);var C=o===s;return i?(m.undirectedDegree++,f.undirectedDegree++,C&&(m.undirectedLoops++,t._undirectedSelfLoopCount++)):(m.outDegree++,f.inDegree++,C&&(m.directedLoops++,t._directedSelfLoopCount++)),t.multi?d.attachMulti():d.attach(),i?t._undirectedSize++:t._directedSize++,b.key=r,t.emit("edgeAdded",b),[r,!0,v,w]}function Mt(t,e){t._edges.delete(e.key);var n=e.source,i=e.target,r=e.attributes,o=e.undirected,s=n===i;o?(n.undirectedDegree--,i.undirectedDegree--,s&&(n.undirectedLoops--,t._undirectedSelfLoopCount--)):(n.outDegree--,i.inDegree--,s&&(n.directedLoops--,t._directedSelfLoopCount--)),t.multi?e.detachMulti():e.detach(),o?t._undirectedSize--:t._directedSize--,t.emit("edgeDropped",{key:e.key,attributes:r,source:n.key,target:i.key,undirected:o})}var _t=function(n){function i(t){var e;if(e=n.call(this)||this,"boolean"!=typeof(t=a({},At,t)).multi)throw new D("Graph.constructor: invalid 'multi' option. Expecting a boolean but got \"".concat(t.multi,'".'));if(!wt.has(t.type))throw new D('Graph.constructor: invalid \'type\' option. Should be one of "mixed", "directed" or "undirected" but got "'.concat(t.type,'".'));if("boolean"!=typeof t.allowSelfLoops)throw new D("Graph.constructor: invalid 'allowSelfLoops' option. Expecting a boolean but got \"".concat(t.allowSelfLoops,'".'));var i="mixed"===t.type?U:"directed"===t.type?W:q;u(s(e),"NodeDataClass",i);var r="geid_"+vt()+"_",o=0;return u(s(e),"_attributes",{}),u(s(e),"_nodes",new Map),u(s(e),"_edges",new Map),u(s(e),"_directedSize",0),u(s(e),"_undirectedSize",0),u(s(e),"_directedSelfLoopCount",0),u(s(e),"_undirectedSelfLoopCount",0),u(s(e),"_edgeKeyGenerator",(function(){var t;do{t=r+o++}while(e._edges.has(t));return t})),u(s(e),"_options",t),Ct.forEach((function(t){return u(s(e),t,e[t])})),d(s(e),"order",(function(){return e._nodes.size})),d(s(e),"size",(function(){return e._edges.size})),d(s(e),"directedSize",(function(){return e._directedSize})),d(s(e),"undirectedSize",(function(){return e._undirectedSize})),d(s(e),"selfLoopCount",(function(){return e._directedSelfLoopCount+e._undirectedSelfLoopCount})),d(s(e),"directedSelfLoopCount",(function(){return e._directedSelfLoopCount})),d(s(e),"undirectedSelfLoopCount",(function(){return e._undirectedSelfLoopCount})),d(s(e),"multi",e._options.multi),d(s(e),"type",e._options.type),d(s(e),"allowSelfLoops",e._options.allowSelfLoops),d(s(e),"implementation",(function(){return"graphology"})),e}e(i,n);var r=i.prototype;return r._resetInstanceCounters=function(){this._directedSize=0,this._undirectedSize=0,this._directedSelfLoopCount=0,this._undirectedSelfLoopCount=0},r.hasNode=function(t){return this._nodes.has(""+t)},r.hasDirectedEdge=function(t,e){if("undirected"===this.type)return!1;if(1===arguments.length){var n=""+t,i=this._edges.get(n);return!!i&&!i.undirected}if(2===arguments.length){t=""+t,e=""+e;var r=this._nodes.get(t);return!!r&&r.out.hasOwnProperty(e)}throw new D("Graph.hasDirectedEdge: invalid arity (".concat(arguments.length,", instead of 1 or 2). You can either ask for an edge id or for the existence of an edge between a source & a target."))},r.hasUndirectedEdge=function(t,e){if("directed"===this.type)return!1;if(1===arguments.length){var n=""+t,i=this._edges.get(n);return!!i&&i.undirected}if(2===arguments.length){t=""+t,e=""+e;var r=this._nodes.get(t);return!!r&&r.undirected.hasOwnProperty(e)}throw new D("Graph.hasDirectedEdge: invalid arity (".concat(arguments.length,", instead of 1 or 2). You can either ask for an edge id or for the existence of an edge between a source & a target."))},r.hasEdge=function(t,e){if(1===arguments.length){var n=""+t;return this._edges.has(n)}if(2===arguments.length){t=""+t,e=""+e;var i=this._nodes.get(t);return!!i&&(void 0!==i.out&&i.out.hasOwnProperty(e)||void 0!==i.undirected&&i.undirected.hasOwnProperty(e))}throw new D("Graph.hasEdge: invalid arity (".concat(arguments.length,", instead of 1 or 2). You can either ask for an edge id or for the existence of an edge between a source & a target."))},r.directedEdge=function(t,e){if("undirected"!==this.type){if(t=""+t,e=""+e,this.multi)throw new j("Graph.directedEdge: this method is irrelevant with multigraphs since there might be multiple edges between source & target. See #.directedEdges instead.");var n=this._nodes.get(t);if(!n)throw new V('Graph.directedEdge: could not find the "'.concat(t,'" source node in the graph.'));if(!this._nodes.has(e))throw new V('Graph.directedEdge: could not find the "'.concat(e,'" target node in the graph.'));var i=n.out&&n.out[e]||void 0;return i?i.key:void 0}},r.undirectedEdge=function(t,e){if("directed"!==this.type){if(t=""+t,e=""+e,this.multi)throw new j("Graph.undirectedEdge: this method is irrelevant with multigraphs since there might be multiple edges between source & target. See #.undirectedEdges instead.");var n=this._nodes.get(t);if(!n)throw new V('Graph.undirectedEdge: could not find the "'.concat(t,'" source node in the graph.'));if(!this._nodes.has(e))throw new V('Graph.undirectedEdge: could not find the "'.concat(e,'" target node in the graph.'));var i=n.undirected&&n.undirected[e]||void 0;return i?i.key:void 0}},r.edge=function(t,e){if(this.multi)throw new j("Graph.edge: this method is irrelevant with multigraphs since there might be multiple edges between source & target. See #.edges instead.");t=""+t,e=""+e;var n=this._nodes.get(t);if(!n)throw new V('Graph.edge: could not find the "'.concat(t,'" source node in the graph.'));if(!this._nodes.has(e))throw new V('Graph.edge: could not find the "'.concat(e,'" target node in the graph.'));var i=n.out&&n.out[e]||n.undirected&&n.undirected[e]||void 0;if(i)return i.key},r.areDirectedNeighbors=function(t,e){t=""+t,e=""+e;var n=this._nodes.get(t);if(!n)throw new V('Graph.areDirectedNeighbors: could not find the "'.concat(t,'" node in the graph.'));return"undirected"!==this.type&&(e in n.in||e in n.out)},r.areOutNeighbors=function(t,e){t=""+t,e=""+e;var n=this._nodes.get(t);if(!n)throw new V('Graph.areOutNeighbors: could not find the "'.concat(t,'" node in the graph.'));return"undirected"!==this.type&&e in n.out},r.areInNeighbors=function(t,e){t=""+t,e=""+e;var n=this._nodes.get(t);if(!n)throw new V('Graph.areInNeighbors: could not find the "'.concat(t,'" node in the graph.'));return"undirected"!==this.type&&e in n.in},r.areUndirectedNeighbors=function(t,e){t=""+t,e=""+e;var n=this._nodes.get(t);if(!n)throw new V('Graph.areUndirectedNeighbors: could not find the "'.concat(t,'" node in the graph.'));return"directed"!==this.type&&e in n.undirected},r.areNeighbors=function(t,e){t=""+t,e=""+e;var n=this._nodes.get(t);if(!n)throw new V('Graph.areNeighbors: could not find the "'.concat(t,'" node in the graph.'));return"undirected"!==this.type&&(e in n.in||e in n.out)||"directed"!==this.type&&e in n.undirected},r.areInboundNeighbors=function(t,e){t=""+t,e=""+e;var n=this._nodes.get(t);if(!n)throw new V('Graph.areInboundNeighbors: could not find the "'.concat(t,'" node in the graph.'));return"undirected"!==this.type&&e in n.in||"directed"!==this.type&&e in n.undirected},r.areOutboundNeighbors=function(t,e){t=""+t,e=""+e;var n=this._nodes.get(t);if(!n)throw new V('Graph.areOutboundNeighbors: could not find the "'.concat(t,'" node in the graph.'));return"undirected"!==this.type&&e in n.out||"directed"!==this.type&&e in n.undirected},r.inDegree=function(t){t=""+t;var e=this._nodes.get(t);if(!e)throw new V('Graph.inDegree: could not find the "'.concat(t,'" node in the graph.'));return"undirected"===this.type?0:e.inDegree},r.outDegree=function(t){t=""+t;var e=this._nodes.get(t);if(!e)throw new V('Graph.outDegree: could not find the "'.concat(t,'" node in the graph.'));return"undirected"===this.type?0:e.outDegree},r.directedDegree=function(t){t=""+t;var e=this._nodes.get(t);if(!e)throw new V('Graph.directedDegree: could not find the "'.concat(t,'" node in the graph.'));return"undirected"===this.type?0:e.inDegree+e.outDegree},r.undirectedDegree=function(t){t=""+t;var e=this._nodes.get(t);if(!e)throw new V('Graph.undirectedDegree: could not find the "'.concat(t,'" node in the graph.'));return"directed"===this.type?0:e.undirectedDegree},r.inboundDegree=function(t){t=""+t;var e=this._nodes.get(t);if(!e)throw new V('Graph.inboundDegree: could not find the "'.concat(t,'" node in the graph.'));var n=0;return"directed"!==this.type&&(n+=e.undirectedDegree),"undirected"!==this.type&&(n+=e.inDegree),n},r.outboundDegree=function(t){t=""+t;var e=this._nodes.get(t);if(!e)throw new V('Graph.outboundDegree: could not find the "'.concat(t,'" node in the graph.'));var n=0;return"directed"!==this.type&&(n+=e.undirectedDegree),"undirected"!==this.type&&(n+=e.outDegree),n},r.degree=function(t){t=""+t;var e=this._nodes.get(t);if(!e)throw new V('Graph.degree: could not find the "'.concat(t,'" node in the graph.'));var n=0;return"directed"!==this.type&&(n+=e.undirectedDegree),"undirected"!==this.type&&(n+=e.inDegree+e.outDegree),n},r.inDegreeWithoutSelfLoops=function(t){t=""+t;var e=this._nodes.get(t);if(!e)throw new V('Graph.inDegreeWithoutSelfLoops: could not find the "'.concat(t,'" node in the graph.'));return"undirected"===this.type?0:e.inDegree-e.directedLoops},r.outDegreeWithoutSelfLoops=function(t){t=""+t;var e=this._nodes.get(t);if(!e)throw new V('Graph.outDegreeWithoutSelfLoops: could not find the "'.concat(t,'" node in the graph.'));return"undirected"===this.type?0:e.outDegree-e.directedLoops},r.directedDegreeWithoutSelfLoops=function(t){t=""+t;var e=this._nodes.get(t);if(!e)throw new V('Graph.directedDegreeWithoutSelfLoops: could not find the "'.concat(t,'" node in the graph.'));return"undirected"===this.type?0:e.inDegree+e.outDegree-2*e.directedLoops},r.undirectedDegreeWithoutSelfLoops=function(t){t=""+t;var e=this._nodes.get(t);if(!e)throw new V('Graph.undirectedDegreeWithoutSelfLoops: could not find the "'.concat(t,'" node in the graph.'));return"directed"===this.type?0:e.undirectedDegree-2*e.undirectedLoops},r.inboundDegreeWithoutSelfLoops=function(t){t=""+t;var e=this._nodes.get(t);if(!e)throw new V('Graph.inboundDegreeWithoutSelfLoops: could not find the "'.concat(t,'" node in the graph.'));var n=0,i=0;return"directed"!==this.type&&(n+=e.undirectedDegree,i+=2*e.undirectedLoops),"undirected"!==this.type&&(n+=e.inDegree,i+=e.directedLoops),n-i},r.outboundDegreeWithoutSelfLoops=function(t){t=""+t;var e=this._nodes.get(t);if(!e)throw new V('Graph.outboundDegreeWithoutSelfLoops: could not find the "'.concat(t,'" node in the graph.'));var n=0,i=0;return"directed"!==this.type&&(n+=e.undirectedDegree,i+=2*e.undirectedLoops),"undirected"!==this.type&&(n+=e.outDegree,i+=e.directedLoops),n-i},r.degreeWithoutSelfLoops=function(t){t=""+t;var e=this._nodes.get(t);if(!e)throw new V('Graph.degreeWithoutSelfLoops: could not find the "'.concat(t,'" node in the graph.'));var n=0,i=0;return"directed"!==this.type&&(n+=e.undirectedDegree,i+=2*e.undirectedLoops),"undirected"!==this.type&&(n+=e.inDegree+e.outDegree,i+=2*e.directedLoops),n-i},r.source=function(t){t=""+t;var e=this._edges.get(t);if(!e)throw new V('Graph.source: could not find the "'.concat(t,'" edge in the graph.'));return e.source.key},r.target=function(t){t=""+t;var e=this._edges.get(t);if(!e)throw new V('Graph.target: could not find the "'.concat(t,'" edge in the graph.'));return e.target.key},r.extremities=function(t){t=""+t;var e=this._edges.get(t);if(!e)throw new V('Graph.extremities: could not find the "'.concat(t,'" edge in the graph.'));return[e.source.key,e.target.key]},r.opposite=function(t,e){t=""+t,e=""+e;var n=this._edges.get(e);if(!n)throw new V('Graph.opposite: could not find the "'.concat(e,'" edge in the graph.'));var i=n.source.key,r=n.target.key;if(t===i)return r;if(t===r)return i;throw new V('Graph.opposite: the "'.concat(t,'" node is not attached to the "').concat(e,'" edge (').concat(i,", ").concat(r,")."))},r.hasExtremity=function(t,e){t=""+t,e=""+e;var n=this._edges.get(t);if(!n)throw new V('Graph.hasExtremity: could not find the "'.concat(t,'" edge in the graph.'));return n.source.key===e||n.target.key===e},r.isUndirected=function(t){t=""+t;var e=this._edges.get(t);if(!e)throw new V('Graph.isUndirected: could not find the "'.concat(t,'" edge in the graph.'));return e.undirected},r.isDirected=function(t){t=""+t;var e=this._edges.get(t);if(!e)throw new V('Graph.isDirected: could not find the "'.concat(t,'" edge in the graph.'));return!e.undirected},r.isSelfLoop=function(t){t=""+t;var e=this._edges.get(t);if(!e)throw new V('Graph.isSelfLoop: could not find the "'.concat(t,'" edge in the graph.'));return e.source===e.target},r.addNode=function(t,e){var n=function(t,e,n){if(n&&!c(n))throw new D('Graph.addNode: invalid attributes. Expecting an object but got "'.concat(n,'"'));if(e=""+e,n=n||{},t._nodes.has(e))throw new j('Graph.addNode: the "'.concat(e,'" node already exist in the graph.'));var i=new t.NodeDataClass(e,n);return t._nodes.set(e,i),t.emit("nodeAdded",{key:e,attributes:n}),i}(this,t,e);return n.key},r.mergeNode=function(t,e){if(e&&!c(e))throw new D('Graph.mergeNode: invalid attributes. Expecting an object but got "'.concat(e,'"'));t=""+t,e=e||{};var n=this._nodes.get(t);return n?(e&&(a(n.attributes,e),this.emit("nodeAttributesUpdated",{type:"merge",key:t,attributes:n.attributes,data:e})),[t,!1]):(n=new this.NodeDataClass(t,e),this._nodes.set(t,n),this.emit("nodeAdded",{key:t,attributes:e}),[t,!0])},r.updateNode=function(t,e){if(e&&"function"!=typeof e)throw new D('Graph.updateNode: invalid updater function. Expecting a function but got "'.concat(e,'"'));t=""+t;var n=this._nodes.get(t);if(n){if(e){var i=n.attributes;n.attributes=e(i),this.emit("nodeAttributesUpdated",{type:"replace",key:t,attributes:n.attributes})}return[t,!1]}var r=e?e({}):{};return n=new this.NodeDataClass(t,r),this._nodes.set(t,n),this.emit("nodeAdded",{key:t,attributes:r}),[t,!0]},r.dropNode=function(t){t=""+t;var e,n=this._nodes.get(t);if(!n)throw new V('Graph.dropNode: could not find the "'.concat(t,'" node in the graph.'));if("undirected"!==this.type){for(var i in n.out){e=n.out[i];do{Mt(this,e),e=e.next}while(e)}for(var r in n.in){e=n.in[r];do{Mt(this,e),e=e.next}while(e)}}if("directed"!==this.type)for(var o in n.undirected){e=n.undirected[o];do{Mt(this,e),e=e.next}while(e)}this._nodes.delete(t),this.emit("nodeDropped",{key:t,attributes:n.attributes})},r.dropEdge=function(t){var e;if(arguments.length>1){var n=""+arguments[0],i=""+arguments[1];if(!(e=l(this,n,i,this.type)))throw new V('Graph.dropEdge: could not find the "'.concat(n,'" -> "').concat(i,'" edge in the graph.'))}else if(t=""+t,!(e=this._edges.get(t)))throw new V('Graph.dropEdge: could not find the "'.concat(t,'" edge in the graph.'));return Mt(this,e),this},r.dropDirectedEdge=function(t,e){if(arguments.length<2)throw new j("Graph.dropDirectedEdge: it does not make sense to try and drop a directed edge by key. What if the edge with this key is undirected? Use #.dropEdge for this purpose instead.");if(this.multi)throw new j("Graph.dropDirectedEdge: cannot use a {source,target} combo when dropping an edge in a MultiGraph since we cannot infer the one you want to delete as there could be multiple ones.");var n=l(this,t=""+t,e=""+e,"directed");if(!n)throw new V('Graph.dropDirectedEdge: could not find a "'.concat(t,'" -> "').concat(e,'" edge in the graph.'));return Mt(this,n),this},r.dropUndirectedEdge=function(t,e){if(arguments.length<2)throw new j("Graph.dropUndirectedEdge: it does not make sense to drop a directed edge by key. What if the edge with this key is undirected? Use #.dropEdge for this purpose instead.");if(this.multi)throw new j("Graph.dropUndirectedEdge: cannot use a {source,target} combo when dropping an edge in a MultiGraph since we cannot infer the one you want to delete as there could be multiple ones.");var n=l(this,t,e,"undirected");if(!n)throw new V('Graph.dropUndirectedEdge: could not find a "'.concat(t,'" -> "').concat(e,'" edge in the graph.'));return Mt(this,n),this},r.clear=function(){this._edges.clear(),this._nodes.clear(),this._resetInstanceCounters(),this.emit("cleared")},r.clearEdges=function(){for(var t,e=this._nodes.values();!0!==(t=e.next()).done;)t.value.clear();this._edges.clear(),this._resetInstanceCounters(),this.emit("edgesCleared")},r.getAttribute=function(t){return this._attributes[t]},r.getAttributes=function(){return this._attributes},r.hasAttribute=function(t){return this._attributes.hasOwnProperty(t)},r.setAttribute=function(t,e){return this._attributes[t]=e,this.emit("attributesUpdated",{type:"set",attributes:this._attributes,name:t}),this},r.updateAttribute=function(t,e){if("function"!=typeof e)throw new D("Graph.updateAttribute: updater should be a function.");var n=this._attributes[t];return this._attributes[t]=e(n),this.emit("attributesUpdated",{type:"set",attributes:this._attributes,name:t}),this},r.removeAttribute=function(t){return delete this._attributes[t],this.emit("attributesUpdated",{type:"remove",attributes:this._attributes,name:t}),this},r.replaceAttributes=function(t){if(!c(t))throw new D("Graph.replaceAttributes: provided attributes are not a plain object.");return this._attributes=t,this.emit("attributesUpdated",{type:"replace",attributes:this._attributes}),this},r.mergeAttributes=function(t){if(!c(t))throw new D("Graph.mergeAttributes: provided attributes are not a plain object.");return a(this._attributes,t),this.emit("attributesUpdated",{type:"merge",attributes:this._attributes,data:t}),this},r.updateAttributes=function(t){if("function"!=typeof t)throw new D("Graph.updateAttributes: provided updater is not a function.");return this._attributes=t(this._attributes),this.emit("attributesUpdated",{type:"update",attributes:this._attributes}),this},r.updateEachNodeAttributes=function(t,e){if("function"!=typeof t)throw new D("Graph.updateEachNodeAttributes: expecting an updater function.");if(e&&!p(e))throw new D("Graph.updateEachNodeAttributes: invalid hints. Expecting an object having the following shape: {attributes?: [string]}");for(var n,i,r=this._nodes.values();!0!==(n=r.next()).done;)(i=n.value).attributes=t(i.key,i.attributes);this.emit("eachNodeAttributesUpdated",{hints:e||null})},r.updateEachEdgeAttributes=function(t,e){if("function"!=typeof t)throw new D("Graph.updateEachEdgeAttributes: expecting an updater function.");if(e&&!p(e))throw new D("Graph.updateEachEdgeAttributes: invalid hints. Expecting an object having the following shape: {attributes?: [string]}");for(var n,i,r,o,s=this._edges.values();!0!==(n=s.next()).done;)r=(i=n.value).source,o=i.target,i.attributes=t(i.key,i.attributes,r.key,o.key,r.attributes,o.attributes,i.undirected);this.emit("eachEdgeAttributesUpdated",{hints:e||null})},r.forEachAdjacencyEntry=function(t){if("function"!=typeof t)throw new D("Graph.forEachAdjacencyEntry: expecting a callback.");ft(!1,!1,!1,this,t)},r.forEachAdjacencyEntryWithOrphans=function(t){if("function"!=typeof t)throw new D("Graph.forEachAdjacencyEntryWithOrphans: expecting a callback.");ft(!1,!1,!0,this,t)},r.forEachAssymetricAdjacencyEntry=function(t){if("function"!=typeof t)throw new D("Graph.forEachAssymetricAdjacencyEntry: expecting a callback.");ft(!1,!0,!1,this,t)},r.forEachAssymetricAdjacencyEntryWithOrphans=function(t){if("function"!=typeof t)throw new D("Graph.forEachAssymetricAdjacencyEntryWithOrphans: expecting a callback.");ft(!1,!0,!0,this,t)},r.nodes=function(){return"function"==typeof Array.from?Array.from(this._nodes.keys()):H(this._nodes.keys(),this._nodes.size)},r.forEachNode=function(t){if("function"!=typeof t)throw new D("Graph.forEachNode: expecting a callback.");for(var e,n,i=this._nodes.values();!0!==(e=i.next()).done;)t((n=e.value).key,n.attributes)},r.findNode=function(t){if("function"!=typeof t)throw new D("Graph.findNode: expecting a callback.");for(var e,n,i=this._nodes.values();!0!==(e=i.next()).done;)if(t((n=e.value).key,n.attributes))return n.key},r.mapNodes=function(t){if("function"!=typeof t)throw new D("Graph.mapNode: expecting a callback.");for(var e,n,i=this._nodes.values(),r=new Array(this.order),o=0;!0!==(e=i.next()).done;)n=e.value,r[o++]=t(n.key,n.attributes);return r},r.someNode=function(t){if("function"!=typeof t)throw new D("Graph.someNode: expecting a callback.");for(var e,n,i=this._nodes.values();!0!==(e=i.next()).done;)if(t((n=e.value).key,n.attributes))return!0;return!1},r.everyNode=function(t){if("function"!=typeof t)throw new D("Graph.everyNode: expecting a callback.");for(var e,n,i=this._nodes.values();!0!==(e=i.next()).done;)if(!t((n=e.value).key,n.attributes))return!1;return!0},r.filterNodes=function(t){if("function"!=typeof t)throw new D("Graph.filterNodes: expecting a callback.");for(var e,n,i=this._nodes.values(),r=[];!0!==(e=i.next()).done;)t((n=e.value).key,n.attributes)&&r.push(n.key);return r},r.reduceNodes=function(t,e){if("function"!=typeof t)throw new D("Graph.reduceNodes: expecting a callback.");if(arguments.length<2)throw new D("Graph.reduceNodes: missing initial value. You must provide it because the callback takes more than one argument and we cannot infer the initial value from the first iteration, as you could with a simple array.");for(var n,i,r=e,o=this._nodes.values();!0!==(n=o.next()).done;)r=t(r,(i=n.value).key,i.attributes);return r},r.nodeEntries=function(){var t=this._nodes.values();return new N((function(){var e=t.next();if(e.done)return e;var n=e.value;return{value:{node:n.key,attributes:n.attributes},done:!1}}))},r.export=function(){var t=this,e=new Array(this._nodes.size),n=0;this._nodes.forEach((function(t,i){e[n++]=function(t,e){var n={key:t};return h(e.attributes)||(n.attributes=a({},e.attributes)),n}(i,t)}));var i=new Array(this._edges.size);return n=0,this._edges.forEach((function(e,r){i[n++]=function(t,e,n){var i={key:e,source:n.source.key,target:n.target.key};return h(n.attributes)||(i.attributes=a({},n.attributes)),"mixed"===t&&n.undirected&&(i.undirected=!0),i}(t.type,r,e)})),{options:{type:this.type,multi:this.multi,allowSelfLoops:this.allowSelfLoops},attributes:this.getAttributes(),nodes:e,edges:i}},r.import=function(t){var e,n,r,o,s,a=this,l=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(t instanceof i)return t.forEachNode((function(t,e){l?a.mergeNode(t,e):a.addNode(t,e)})),t.forEachEdge((function(t,e,n,i,r,o,s){l?s?a.mergeUndirectedEdgeWithKey(t,n,i,e):a.mergeDirectedEdgeWithKey(t,n,i,e):s?a.addUndirectedEdgeWithKey(t,n,i,e):a.addDirectedEdgeWithKey(t,n,i,e)})),this;if(!c(t))throw new D("Graph.import: invalid argument. Expecting a serialized graph or, alternatively, a Graph instance.");if(t.attributes){if(!c(t.attributes))throw new D("Graph.import: invalid attributes. Expecting a plain object.");l?this.mergeAttributes(t.attributes):this.replaceAttributes(t.attributes)}if(t.nodes){if(r=t.nodes,!Array.isArray(r))throw new D("Graph.import: invalid nodes. Expecting an array.");for(e=0,n=r.length;e<n;e++){gt(o=r[e]);var h=o,u=h.key,d=h.attributes;l?this.mergeNode(u,d):this.addNode(u,d)}}if(t.edges){var p=!1;if("undirected"===this.type&&(p=!0),r=t.edges,!Array.isArray(r))throw new D("Graph.import: invalid edges. Expecting an array.");for(e=0,n=r.length;e<n;e++){yt(s=r[e]);var m=s,f=m.source,g=m.target,y=m.attributes,b=m.undirected,v=void 0===b?p:b;"key"in s?(l?v?this.mergeUndirectedEdgeWithKey:this.mergeDirectedEdgeWithKey:v?this.addUndirectedEdgeWithKey:this.addDirectedEdgeWithKey).call(this,s.key,f,g,y):(l?v?this.mergeUndirectedEdge:this.mergeDirectedEdge:v?this.addUndirectedEdge:this.addDirectedEdge).call(this,f,g,y)}}return this},r.nullCopy=function(t){var e=new i(a({},this._options,t));return e.replaceAttributes(a({},this.getAttributes())),e},r.emptyCopy=function(t){var e=this.nullCopy(t);return this._nodes.forEach((function(t,n){var i=a({},t.attributes);t=new e.NodeDataClass(n,i),e._nodes.set(n,t)})),e},r.copy=function(t){if("string"==typeof(t=t||{}).type&&t.type!==this.type&&"mixed"!==t.type)throw new j('Graph.copy: cannot create an incompatible copy from "'.concat(this.type,'" type to "').concat(t.type,'" because this would mean losing information about the current graph.'));if("boolean"==typeof t.multi&&t.multi!==this.multi&&!0!==t.multi)throw new j("Graph.copy: cannot create an incompatible copy by downgrading a multi graph to a simple one because this would mean losing information about the current graph.");if("boolean"==typeof t.allowSelfLoops&&t.allowSelfLoops!==this.allowSelfLoops&&!0!==t.allowSelfLoops)throw new j("Graph.copy: cannot create an incompatible copy from a graph allowing self loops to one that does not because this would mean losing information about the current graph.");for(var e,n,i=this.emptyCopy(t),r=this._edges.values();!0!==(e=r.next()).done;)xt(i,"copy",!1,(n=e.value).undirected,n.key,n.source.key,n.target.key,a({},n.attributes));return i},r.toJSON=function(){return this.export()},r.toString=function(){return"[object Graph]"},r.inspect=function(){var e=this,n={};this._nodes.forEach((function(t,e){n[e]=t.attributes}));var i={},r={};this._edges.forEach((function(t,n){var o,s=t.undirected?"--":"->",a="",l=t.source.key,c=t.target.key;t.undirected&&l>c&&(o=l,l=c,c=o);var h="(".concat(l,")").concat(s,"(").concat(c,")");n.startsWith("geid_")?e.multi&&(void 0===r[h]?r[h]=0:r[h]++,a+="".concat(r[h],". ")):a+="[".concat(n,"]: "),i[a+=h]=t.attributes}));var o={};for(var s in this)this.hasOwnProperty(s)&&!Ct.has(s)&&"function"!=typeof this[s]&&"symbol"!==t(s)&&(o[s]=this[s]);return o.attributes=this._attributes,o.nodes=n,o.edges=i,u(o,"constructor",this.constructor),o},i}(f.exports.EventEmitter);"undefined"!=typeof Symbol&&(_t.prototype[Symbol.for("nodejs.util.inspect.custom")]=_t.prototype.inspect),[{name:function(t){return"".concat(t,"Edge")},generateKey:!0},{name:function(t){return"".concat(t,"DirectedEdge")},generateKey:!0,type:"directed"},{name:function(t){return"".concat(t,"UndirectedEdge")},generateKey:!0,type:"undirected"},{name:function(t){return"".concat(t,"EdgeWithKey")}},{name:function(t){return"".concat(t,"DirectedEdgeWithKey")},type:"directed"},{name:function(t){return"".concat(t,"UndirectedEdgeWithKey")},type:"undirected"}].forEach((function(t){["add","merge","update"].forEach((function(e){var n=t.name(e),i="add"===e?xt:Et;t.generateKey?_t.prototype[n]=function(r,o,s){return i(this,n,!0,"undirected"===(t.type||this.type),null,r,o,s,"update"===e)}:_t.prototype[n]=function(r,o,s,a){return i(this,n,!1,"undirected"===(t.type||this.type),r,o,s,a,"update"===e)}}))})),function(t){K.forEach((function(e){var n=e.name,i=e.attacher;i(t,n("Node"),0),i(t,n("Source"),1),i(t,n("Target"),2),i(t,n("Opposite"),3)}))}(_t),function(t){Z.forEach((function(e){var n=e.name,i=e.attacher;i(t,n("Edge"),"mixed"),i(t,n("DirectedEdge"),"directed"),i(t,n("UndirectedEdge"),"undirected")}))}(_t),function(t){tt.forEach((function(e){!function(t,e){var n=e.name,i=e.type,r=e.direction;t.prototype[n]=function(t,e){if("mixed"!==i&&"mixed"!==this.type&&i!==this.type)return[];if(!arguments.length)return function(t,e){if(0===t.size)return[];if("mixed"===e||e===t.type)return"function"==typeof Array.from?Array.from(t._edges.keys()):H(t._edges.keys(),t._edges.size);for(var n,i,r="undirected"===e?t.undirectedSize:t.directedSize,o=new Array(r),s="undirected"===e,a=t._edges.values(),l=0;!0!==(n=a.next()).done;)(i=n.value).undirected===s&&(o[l++]=i.key);return o}(this,i);if(1===arguments.length){t=""+t;var o=this._nodes.get(t);if(void 0===o)throw new V("Graph.".concat(n,': could not find the "').concat(t,'" node in the graph.'));return function(t,e,n,i){var r=[];return lt(!1,t,e,n,i,(function(t){r.push(t)})),r}(this.multi,"mixed"===i?this.type:i,r,o)}if(2===arguments.length){t=""+t,e=""+e;var s=this._nodes.get(t);if(!s)throw new V("Graph.".concat(n,': could not find the "').concat(t,'" source node in the graph.'));if(!this._nodes.has(e))throw new V("Graph.".concat(n,': could not find the "').concat(e,'" target node in the graph.'));return function(t,e,n,i,r){var o=[];return ct(!1,t,e,n,i,r,(function(t){o.push(t)})),o}(i,this.multi,r,s,e)}throw new D("Graph.".concat(n,": too many arguments (expecting 0, 1 or 2 and got ").concat(arguments.length,")."))}}(t,e),function(t,e){var n=e.name,i=e.type,r=e.direction,o="forEach"+n[0].toUpperCase()+n.slice(1,-1);t.prototype[o]=function(t,e,n){if("mixed"===i||"mixed"===this.type||i===this.type){if(1===arguments.length)return at(!1,this,i,n=t);if(2===arguments.length){t=""+t,n=e;var s=this._nodes.get(t);if(void 0===s)throw new V("Graph.".concat(o,': could not find the "').concat(t,'" node in the graph.'));return lt(!1,this.multi,"mixed"===i?this.type:i,r,s,n)}if(3===arguments.length){t=""+t,e=""+e;var a=this._nodes.get(t);if(!a)throw new V("Graph.".concat(o,': could not find the "').concat(t,'" source node in the graph.'));if(!this._nodes.has(e))throw new V("Graph.".concat(o,': could not find the "').concat(e,'" target node in the graph.'));return ct(!1,i,this.multi,r,a,e,n)}throw new D("Graph.".concat(o,": too many arguments (expecting 1, 2 or 3 and got ").concat(arguments.length,")."))}};var s="map"+n[0].toUpperCase()+n.slice(1);t.prototype[s]=function(){var t,e=Array.prototype.slice.call(arguments),n=e.pop();if(0===e.length){var r=0;"directed"!==i&&(r+=this.undirectedSize),"undirected"!==i&&(r+=this.directedSize),t=new Array(r);var s=0;e.push((function(e,i,r,o,a,l,c){t[s++]=n(e,i,r,o,a,l,c)}))}else t=[],e.push((function(e,i,r,o,s,a,l){t.push(n(e,i,r,o,s,a,l))}));return this[o].apply(this,e),t};var a="filter"+n[0].toUpperCase()+n.slice(1);t.prototype[a]=function(){var t=Array.prototype.slice.call(arguments),e=t.pop(),n=[];return t.push((function(t,i,r,o,s,a,l){e(t,i,r,o,s,a,l)&&n.push(t)})),this[o].apply(this,t),n};var l="reduce"+n[0].toUpperCase()+n.slice(1);t.prototype[l]=function(){var t,e,n=Array.prototype.slice.call(arguments);if(n.length<2||n.length>4)throw new D("Graph.".concat(l,": invalid number of arguments (expecting 2, 3 or 4 and got ").concat(n.length,")."));if("function"==typeof n[n.length-1]&&"function"!=typeof n[n.length-2])throw new D("Graph.".concat(l,": missing initial value. You must provide it because the callback takes more than one argument and we cannot infer the initial value from the first iteration, as you could with a simple array."));2===n.length?(t=n[0],e=n[1],n=[]):3===n.length?(t=n[1],e=n[2],n=[n[0]]):4===n.length&&(t=n[2],e=n[3],n=[n[0],n[1]]);var i=e;return n.push((function(e,n,r,o,s,a,l){i=t(i,e,n,r,o,s,a,l)})),this[o].apply(this,n),i}}(t,e),function(t,e){var n=e.name,i=e.type,r=e.direction,o="find"+n[0].toUpperCase()+n.slice(1,-1);t.prototype[o]=function(t,e,n){if("mixed"!==i&&"mixed"!==this.type&&i!==this.type)return!1;if(1===arguments.length)return at(!0,this,i,n=t);if(2===arguments.length){t=""+t,n=e;var s=this._nodes.get(t);if(void 0===s)throw new V("Graph.".concat(o,': could not find the "').concat(t,'" node in the graph.'));return lt(!0,this.multi,"mixed"===i?this.type:i,r,s,n)}if(3===arguments.length){t=""+t,e=""+e;var a=this._nodes.get(t);if(!a)throw new V("Graph.".concat(o,': could not find the "').concat(t,'" source node in the graph.'));if(!this._nodes.has(e))throw new V("Graph.".concat(o,': could not find the "').concat(e,'" target node in the graph.'));return ct(!0,i,this.multi,r,a,e,n)}throw new D("Graph.".concat(o,": too many arguments (expecting 1, 2 or 3 and got ").concat(arguments.length,")."))};var s="some"+n[0].toUpperCase()+n.slice(1,-1);t.prototype[s]=function(){var t=Array.prototype.slice.call(arguments),e=t.pop();return t.push((function(t,n,i,r,o,s,a){return e(t,n,i,r,o,s,a)})),!!this[o].apply(this,t)};var a="every"+n[0].toUpperCase()+n.slice(1,-1);t.prototype[a]=function(){var t=Array.prototype.slice.call(arguments),e=t.pop();return t.push((function(t,n,i,r,o,s,a){return!e(t,n,i,r,o,s,a)})),!this[o].apply(this,t)}}(t,e),function(t,e){var n=e.name,i=e.type,r=e.direction,o=n.slice(0,-1)+"Entries";t.prototype[o]=function(t,e){if("mixed"!==i&&"mixed"!==this.type&&i!==this.type)return N.empty();if(!arguments.length)return function(t,e){if(0===t.size)return N.empty();var n="mixed"!==e&&e!==t.type,i="undirected"===e,r=t._edges.values();return new N((function(){for(var t,e;;){if((t=r.next()).done)return t;if(e=t.value,!n||e.undirected===i)break}return{value:{edge:e.key,attributes:e.attributes,source:e.source.key,target:e.target.key,sourceAttributes:e.source.attributes,targetAttributes:e.target.attributes,undirected:e.undirected},done:!1}}))}(this,i);if(1===arguments.length){t=""+t;var n=this._nodes.get(t);if(!n)throw new V("Graph.".concat(o,': could not find the "').concat(t,'" node in the graph.'));return function(t,e,n){var i=N.empty();return"undirected"!==t&&("out"!==e&&void 0!==n.in&&(i=Q(i,it(n.in))),"in"!==e&&void 0!==n.out&&(i=Q(i,it(n.out,e?void 0:n.key)))),"directed"!==t&&void 0!==n.undirected&&(i=Q(i,it(n.undirected))),i}(i,r,n)}if(2===arguments.length){t=""+t,e=""+e;var s=this._nodes.get(t);if(!s)throw new V("Graph.".concat(o,': could not find the "').concat(t,'" source node in the graph.'));if(!this._nodes.has(e))throw new V("Graph.".concat(o,': could not find the "').concat(e,'" target node in the graph.'));return function(t,e,n,i){var r=N.empty();return"undirected"!==t&&(void 0!==n.in&&"out"!==e&&i in n.in&&(r=Q(r,st(n.in,i))),void 0!==n.out&&"in"!==e&&i in n.out&&(e||n.key!==i)&&(r=Q(r,st(n.out,i)))),"directed"!==t&&void 0!==n.undirected&&i in n.undirected&&(r=Q(r,st(n.undirected,i))),r}(i,r,s,e)}throw new D("Graph.".concat(o,": too many arguments (expecting 0, 1 or 2 and got ").concat(arguments.length,")."))}}(t,e)}))}(_t),function(t){ht.forEach((function(e){(function(t,e){var n=e.name,i=e.type,r=e.direction;t.prototype[n]=function(t){if("mixed"!==i&&"mixed"!==this.type&&i!==this.type)return[];t=""+t;var e=this._nodes.get(t);if(void 0===e)throw new V("Graph.".concat(n,': could not find the "').concat(t,'" node in the graph.'));return function(t,e,n){if("mixed"!==t){if("undirected"===t)return Object.keys(n.undirected);if("string"==typeof e)return Object.keys(n[e])}var i=[];return pt(!1,t,e,n,(function(t){i.push(t)})),i}("mixed"===i?this.type:i,r,e)}})(t,e),function(t,e){var n=e.name,i=e.type,r=e.direction,o="forEach"+n[0].toUpperCase()+n.slice(1,-1);t.prototype[o]=function(t,e){if("mixed"===i||"mixed"===this.type||i===this.type){t=""+t;var n=this._nodes.get(t);if(void 0===n)throw new V("Graph.".concat(o,': could not find the "').concat(t,'" node in the graph.'));pt(!1,"mixed"===i?this.type:i,r,n,e)}};var s="map"+n[0].toUpperCase()+n.slice(1);t.prototype[s]=function(t,e){var n=[];return this[o](t,(function(t,i){n.push(e(t,i))})),n};var a="filter"+n[0].toUpperCase()+n.slice(1);t.prototype[a]=function(t,e){var n=[];return this[o](t,(function(t,i){e(t,i)&&n.push(t)})),n};var l="reduce"+n[0].toUpperCase()+n.slice(1);t.prototype[l]=function(t,e,n){if(arguments.length<3)throw new D("Graph.".concat(l,": missing initial value. You must provide it because the callback takes more than one argument and we cannot infer the initial value from the first iteration, as you could with a simple array."));var i=n;return this[o](t,(function(t,n){i=e(i,t,n)})),i}}(t,e),function(t,e){var n=e.name,i=e.type,r=e.direction,o=n[0].toUpperCase()+n.slice(1,-1),s="find"+o;t.prototype[s]=function(t,e){if("mixed"===i||"mixed"===this.type||i===this.type){t=""+t;var n=this._nodes.get(t);if(void 0===n)throw new V("Graph.".concat(s,': could not find the "').concat(t,'" node in the graph.'));return pt(!0,"mixed"===i?this.type:i,r,n,e)}};var a="some"+o;t.prototype[a]=function(t,e){return!!this[s](t,e)};var l="every"+o;t.prototype[l]=function(t,e){return!this[s](t,(function(t,n){return!e(t,n)}))}}(t,e),function(t,e){var n=e.name,i=e.type,r=e.direction,o=n.slice(0,-1)+"Entries";t.prototype[o]=function(t){if("mixed"!==i&&"mixed"!==this.type&&i!==this.type)return N.empty();t=""+t;var e=this._nodes.get(t);if(void 0===e)throw new V("Graph.".concat(o,': could not find the "').concat(t,'" node in the graph.'));return function(t,e,n){if("mixed"!==t){if("undirected"===t)return mt(null,n,n.undirected);if("string"==typeof e)return mt(null,n,n[e])}var i=N.empty(),r=new ut;return"undirected"!==t&&("out"!==e&&(i=Q(i,mt(r,n,n.in))),"in"!==e&&(i=Q(i,mt(r,n,n.out)))),"directed"!==t&&(i=Q(i,mt(r,n,n.undirected))),i}("mixed"===i?this.type:i,r,e)}}(t,e)}))}(_t);var It=function(t){function n(e){var n=a({type:"directed"},e);if("multi"in n&&!1!==n.multi)throw new D("DirectedGraph.from: inconsistent indication that the graph should be multi in given options!");if("directed"!==n.type)throw new D('DirectedGraph.from: inconsistent "'+n.type+'" type in given options!');return t.call(this,n)||this}return e(n,t),n}(_t),Tt=function(t){function n(e){var n=a({type:"undirected"},e);if("multi"in n&&!1!==n.multi)throw new D("UndirectedGraph.from: inconsistent indication that the graph should be multi in given options!");if("undirected"!==n.type)throw new D('UndirectedGraph.from: inconsistent "'+n.type+'" type in given options!');return t.call(this,n)||this}return e(n,t),n}(_t),Lt=function(t){function n(e){var n=a({multi:!0},e);if("multi"in n&&!0!==n.multi)throw new D("MultiGraph.from: inconsistent indication that the graph should be simple in given options!");return t.call(this,n)||this}return e(n,t),n}(_t),Nt=function(t){function n(e){var n=a({type:"directed",multi:!0},e);if("multi"in n&&!0!==n.multi)throw new D("MultiDirectedGraph.from: inconsistent indication that the graph should be simple in given options!");if("directed"!==n.type)throw new D('MultiDirectedGraph.from: inconsistent "'+n.type+'" type in given options!');return t.call(this,n)||this}return e(n,t),n}(_t),Pt=function(t){function n(e){var n=a({type:"undirected",multi:!0},e);if("multi"in n&&!0!==n.multi)throw new D("MultiUndirectedGraph.from: inconsistent indication that the graph should be simple in given options!");if("undirected"!==n.type)throw new D('MultiUndirectedGraph.from: inconsistent "'+n.type+'" type in given options!');return t.call(this,n)||this}return e(n,t),n}(_t);function $t(t){t.from=function(e,n){var i=a({},e.options,n),r=new t(i);return r.import(e),r}}return $t(_t),$t(It),$t(Tt),$t(Lt),$t(Nt),$t(Pt),_t.Graph=_t,_t.DirectedGraph=It,_t.UndirectedGraph=Tt,_t.MultiGraph=Lt,_t.MultiDirectedGraph=Nt,_t.MultiUndirectedGraph=Pt,_t.InvalidArgumentsGraphError=D,_t.NotFoundGraphError=V,_t.UsageGraphError=j,_t}()},944:(t,e)=>{"use strict";e.Vb=void 0,e.Vb=function(t,e,n){var i=function(t,e,n){if(0===t.length||0===e.length)return 0;if(n&&!n.caseSensitive&&(t=t.toUpperCase(),e=e.toUpperCase()),t===e)return 1;for(var i=0,r=t.length,o=e.length,s=Math.floor(Math.max(r,o)/2)-1,a=new Array(r),l=new Array(o),c=0;c<r;c++)for(var h=Math.max(0,c-s);h<=Math.min(o,c+s+1);h++)if(!a[c]&&!l[h]&&t[c]===e[h]){++i,a[c]=l[h]=!0;break}if(0===i)return 0;var u=0,d=0;for(c=0;c<r;c++)if(a[c]){for(;!l[d];)d++;t.charAt(c)!==e.charAt(d++)&&u++}return(i/r+i/o+(i-(u/=2))/i)/3}(t,e,n),r=0;if(i>.7){for(var o=Math.min(t.length,e.length),s=0;t[s]===e[s]&&s<4&&s<o;)++r,s++;i+=.1*r*(1-i)}return i}},7106:t=>{"use strict";var e=t.exports=function(t,e,i){"function"==typeof e&&(i=e,e={}),n(e,"function"==typeof(i=e.cb||i)?i:i.pre||function(){},i.post||function(){},t,"",t)};function n(t,i,r,o,s,a,l,c,h,u){if(o&&"object"==typeof o&&!Array.isArray(o)){for(var d in i(o,s,a,l,c,h,u),o){var p=o[d];if(Array.isArray(p)){if(d in e.arrayKeywords)for(var m=0;m<p.length;m++)n(t,i,r,p[m],s+"/"+d+"/"+m,a,s,d,o,m)}else if(d in e.propsKeywords){if(p&&"object"==typeof p)for(var f in p)n(t,i,r,p[f],s+"/"+d+"/"+f.replace(/~/g,"~0").replace(/\//g,"~1"),a,s,d,o,f)}else(d in e.keywords||t.allKeys&&!(d in e.skipKeywords))&&n(t,i,r,p,s+"/"+d,a,s,d,o)}r(o,s,a,l,c,h,u)}}e.keywords={additionalItems:!0,items:!0,contains:!0,additionalProperties:!0,propertyNames:!0,not:!0,if:!0,then:!0,else:!0},e.arrayKeywords={items:!0,allOf:!0,anyOf:!0,oneOf:!0},e.propsKeywords={$defs:!0,definitions:!0,properties:!0,patternProperties:!0,dependencies:!0},e.skipKeywords={default:!0,enum:!0,const:!0,required:!0,maximum:!0,minimum:!0,exclusiveMaximum:!0,exclusiveMinimum:!0,multipleOf:!0,maxLength:!0,minLength:!0,pattern:!0,format:!0,maxItems:!0,minItems:!0,uniqueItems:!0,maxProperties:!0,minProperties:!0}},5072:t=>{"use strict";var e=[];function n(t){for(var n=-1,i=0;i<e.length;i++)if(e[i].identifier===t){n=i;break}return n}function i(t,i){for(var o={},s=[],a=0;a<t.length;a++){var l=t[a],c=i.base?l[0]+i.base:l[0],h=o[c]||0,u="".concat(c," ").concat(h);o[c]=h+1;var d=n(u),p={css:l[1],media:l[2],sourceMap:l[3],supports:l[4],layer:l[5]};if(-1!==d)e[d].references++,e[d].updater(p);else{var m=r(p,i);i.byIndex=a,e.splice(a,0,{identifier:u,updater:m,references:1})}s.push(u)}return s}function r(t,e){var n=e.domAPI(e);return n.update(t),function(e){if(e){if(e.css===t.css&&e.media===t.media&&e.sourceMap===t.sourceMap&&e.supports===t.supports&&e.layer===t.layer)return;n.update(t=e)}else n.remove()}}t.exports=function(t,r){var o=i(t=t||[],r=r||{});return function(t){t=t||[];for(var s=0;s<o.length;s++){var a=n(o[s]);e[a].references--}for(var l=i(t,r),c=0;c<o.length;c++){var h=n(o[c]);0===e[h].references&&(e[h].updater(),e.splice(h,1))}o=l}}},7659:t=>{"use strict";var e={};t.exports=function(t,n){var i=function(t){if(void 0===e[t]){var n=document.querySelector(t);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement)try{n=n.contentDocument.head}catch(t){n=null}e[t]=n}return e[t]}(t);if(!i)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");i.appendChild(n)}},540:t=>{"use strict";t.exports=function(t){var e=document.createElement("style");return t.setAttributes(e,t.attributes),t.insert(e,t.options),e}},5056:(t,e,n)=>{"use strict";t.exports=function(t){var e=n.nc;e&&t.setAttribute("nonce",e)}},7825:t=>{"use strict";t.exports=function(t){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var e=t.insertStyleElement(t);return{update:function(n){!function(t,e,n){var i="";n.supports&&(i+="@supports (".concat(n.supports,") {")),n.media&&(i+="@media ".concat(n.media," {"));var r=void 0!==n.layer;r&&(i+="@layer".concat(n.layer.length>0?" ".concat(n.layer):""," {")),i+=n.css,r&&(i+="}"),n.media&&(i+="}"),n.supports&&(i+="}");var o=n.sourceMap;o&&"undefined"!=typeof btoa&&(i+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(o))))," */")),e.styleTagTransform(i,t,e.options)}(e,t,n)},remove:function(){!function(t){if(null===t.parentNode)return!1;t.parentNode.removeChild(t)}(e)}}}},1113:t=>{"use strict";t.exports=function(t,e){if(e.styleSheet)e.styleSheet.cssText=t;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(t))}}},1407:(t,e,n)=>{"use strict";n.d(e,{R:()=>a});var i=n(4328),r=n(6082),o=n(439);const s=31;async function a(t,e,n=!1,o){const a=e.getSeqHandler(t);let c;o??=new Map;const h=a.isHelm()?e.getSeqMonomers(t):Object.keys(a.stats.freq).filter((t=>""!==t));for(let t=0;t<h.length;t++)o.has(h[t])||o.set(h[t],`${o.size+1}`);if(a.isHelm())c=await i.functions.call("HELM:getMolFiles",{col:t}),c=function(t,e,n=!1){const i=new Array(t.length);for(let r=0;r<t.length;r++){let o=0,a=0,l="\n Datagrok macromolecule handler\n\n 0 0 0 0 0 0 999 V3000\nM V30 BEGIN CTAB\n";const c=t.get(r);o=c.indexOf("\n",o)+1,o=c.indexOf("\n",o)+1,o=c.indexOf("\n",o)+1;const h=parseInt(c.substring(o,o+3)),u=parseInt(c.substring(o+3,o+6));l+=`M V30 COUNTS ${h} ${u} 0 0 0\n`,l+="M V30 BEGIN ATOM\n";for(let t=0;t<h;t++){o=c.indexOf("\n",o)+1+s,a=c.indexOf(" ",o);const i=c.substring(o,a);l+=n?`M V30 ${t+1} R${e.get(i)} 0.000 0.000 0 0\n`:`M V30 ${t+1} At 0.000 0.000 0 0 MASS=${e.get(i)}\n`}l+="M V30 END ATOM\n",l+="M V30 BEGIN BOND\n";for(let t=0;t<u;t++){o=c.indexOf("\n",o)+1;const e=parseInt(c.substring(o,o+3).trim()),n=parseInt(c.substring(o+3,o+6).trim());l+=`M V30 ${t+1} ${parseInt(c.substring(o+6,o+9).trim())} ${e} ${n}\n`}l+="M V30 END BOND\n",l+="M V30 END CTAB\n",l+="M END",i[r]=l}return i}(c,o,n);else{c=new Array(t.length);for(let e=0;e<t.length;e++){const t=l(a.getSplitted(e),o,n);c[e]=t}}return r.Column.fromStrings("monomericMols",c)}function l(t,e,n=!1){let i="\n Datagrok macromolecule handler\n\n 0 0 0 0 0 0 999 V3000\nM V30 BEGIN CTAB\n";i+=`M V30 COUNTS ${t.length} ${t.length?t.length-1:0} 0 0 0\n`,i+="M V30 BEGIN ATOM\n";for(let r=0;r<t.length;r++){const s=t.getCanonical(r);s!==o._S&&(i+=n?`M V30 ${r+1} R${e.get(s)} 0.000 0.000 0 0\n`:`M V30 ${r+1} At 0.000 0.000 0 0 MASS=${e.get(s)}\n`)}i+="M V30 END ATOM\n",i+="M V30 BEGIN BOND\n";for(let e=0;e<t.length-1;e++)i+=`M V30 ${e+1} 1 ${e+1} ${e+2}\n`;return i+="M V30 END BOND\n",i+="M V30 END CTAB\n",i+="M END",i}},6766:(t,e,n)=>{"use strict";n.r(e),n.d(e,{GetRegionEditor:()=>Xi,SeqActivityCliffsEditor:()=>tr,SeqPaletteCustom:()=>ji,SequenceSpaceEditor:()=>Qi,SplitToMonomersEditor:()=>Ji,SubsequenceSearchTopMenu:()=>Or,_package:()=>Di,activityCliffs:()=>dr,addCopyMenu:()=>Qr,alignSequences:()=>wr,bioSubstructureFilter:()=>Ur,bioSubstructureFilterTest:()=>Wr,compositionAnalysis:()=>Cr,compositionAnalysisWidget:()=>or,convertColumnAction:()=>Er,convertDialog:()=>xr,customSequenceCellRenderer:()=>er,demoBioActivityCliffs:()=>no,demoBioAtomicLevel:()=>io,demoBioSequenceSpace:()=>eo,demoBioSimilarityDiversity:()=>to,detectMacromoleculeProbe:()=>ao,diversitySearchTopMenu:()=>$r,diversitySearchViewer:()=>Pr,fastaSequenceCellRenderer:()=>nr,getBioLib:()=>zi,getHelmMonomers:()=>Tr,getMolFromHelm:()=>co,getMonomerLibHelper:()=>Vi,getRegion:()=>hr,getRegionApp:()=>Yr,getRegionHelmApp:()=>Kr,getRegionPanel:()=>Ki,getRegionTopMenu:()=>ur,getSeqHandler:()=>Yi,getSeqHelper:()=>lo,helmPreprocessingFunction:()=>mr,importBam:()=>Sr,importFasta:()=>Ar,initBio:()=>Wi,libraryPanel:()=>Zi,longSeqTableFasta:()=>Xr,longSeqTableHelm:()=>Jr,longSeqTableSeparator:()=>Zr,macroMolColumnPropertyPanel:()=>rr,macromoleculeDifferenceCellRenderer:()=>sr,macromoleculePreprocessingFunction:()=>pr,manageLibrariesApp:()=>Dr,manageLibrariesAppTreeBrowser:()=>Vr,manageLibrariesView:()=>Hr,manageMonomerLibraries:()=>Fr,manageMonomersView:()=>Br,monomerCellRenderer:()=>Mr,multipleSequenceAlignmentDialog:()=>vr,saveAsFasta:()=>jr,sdfToJsonLib:()=>ro,searchSubsequenceEditor:()=>Rr,separatorSequenceCellRenderer:()=>ir,seq2atomic:()=>oo,seqIdentity:()=>so,sequenceAlignment:()=>ar,sequenceIdentityScoring:()=>kr,sequenceSimilarityScoring:()=>Gr,sequenceSpaceTopMenu:()=>fr,sequenceTooltip:()=>qi,similaritySearchTopMenu:()=>Nr,similaritySearchViewer:()=>Lr,splitToMonomersTopMenu:()=>Ir,test1:()=>ho,testDetectMacromolecule:()=>_r,toAtomicLevel:()=>gr,toAtomicLevelAction:()=>yr,toAtomicLevelPanel:()=>br,vdRegionsViewer:()=>cr,webLogoAggApp:()=>zr,webLogoLargeApp:()=>qr,webLogoViewer:()=>lr});var i,r,o=n(4328),s=n(7389),a=n(6082),l=n(684),c=n(9039);(r=i||(i={})).EUCLIDEAN="EUCLIDEAN",r.MANHATTAN="MANHATTAN";var h=n(1858),u=n(5072),d=n.n(u),p=n(7825),m=n.n(p),f=n(7659),g=n.n(f),y=n(5056),b=n.n(y),v=n(540),w=n.n(v),C=n(1113),A=n.n(C),S=n(7939),x={};x.styleTagTransform=A(),x.setAttributes=b(),x.insert=g().bind(null,"head"),x.domAPI=m(),x.insertStyleElement=w(),d()(S.A,x),S.A&&S.A.locals&&S.A.locals;var E=function(t,e,n,i){return new(n||(n=Promise))((function(r,o){function s(t){try{l(i.next(t))}catch(t){o(t)}}function a(t){try{l(i.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?r(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,a)}l((i=i.apply(t,e||[])).next())}))};let M=null,_=null;function I(t,e){return t&&""!=t?t:e}n(2780);class T{constructor(){this.learningRate={uiName:"Learninig rate",value:1,tooltip:"The initial learning rate for the embedding optimization"},this.nEpochs={uiName:"Epochs",value:0,tooltip:"The number of epochs to optimize embeddings via SGD. Computed automatically if set to 0"},this.nNeighbors={uiName:"Neighbors",value:15,tooltip:"The number of nearest neighbors to construct the fuzzy manifold"},this.spread={uiName:"Spread",value:1,tooltip:"The effective scale of embedded points, used with min distance to control \n the clumped/dispersed nature of the embedding"},this.minDist={uiName:"Min distance",value:.1,tooltip:"The effective minimum distance between embedded points, \n used with spread to control the clumped/dispersed nature of the embedding"},this.randomSeed={uiName:"Random seed",value:null,tooltip:"Random seed",type:"string"},this.useWebGPU={uiName:"Use WebGPU",value:!1,tooltip:"Use WebGPU for Distance and UMAP computations",type:"boolean",disableTooltip:"WebGPU is not available"},function(){return E(this,void 0,void 0,(function*(){if(!navigator.gpu)return console.error("WebGPU is not supported in this browser"),null;if(!M&&(M=yield navigator.gpu.requestAdapter(),null==M))return null;let t=null;return"info"in M&&(t=M.info),t?I(t.description,I(t.vendor,"No GPU description available")):"No GPU description available"}))}().then((t=>{t?(this.useWebGPU.tooltip+=` (${t})`,this.useWebGPU.value=!0):(this.useWebGPU.value=!1,this.useWebGPU.disable=!0)}))}}class L{constructor(){this.epsilon={uiName:"Epsilon",value:10,tooltip:"Epsilon is learning rate"},this.perplexity={uiName:"Perplexity",value:30,tooltip:"Roughly how many neighbors each point influences"}}}Promise.resolve(),n(934),n(8903);const N="MCL";a.SEMTYPE.MOLECULE,a.SEMTYPE.MACROMOLECULE;class P{constructor(){this.epsilon={uiName:"Epsilon",value:.01,tooltip:"Minimum distance between cluster points",min:0,max:2,step:.005},this.minPts={uiName:"Minimum points",value:4,tooltip:"Minimum number of points in cluster",min:1,max:1e3,step:1}}}class ${get algorithmOptions(){const t=this.methodsParams[this.methodInput.value],e={};return Object.keys(t).forEach((n=>{null!=t[n].value&&(e[n]=t[n].value)})),e}get dbScanOptions(){return{dbScanEpsilon:this.dbScanParams.epsilon.value??.01,dbScanMinPts:this.dbScanParams.minPts.value??4}}constructor(t={}){this.editorSettings={},this.plotEmbeddingsInput=s.input.bool("Plot embeddings",{value:!0}),this.clusterEmbeddingsInput=s.input.bool("Cluster embeddings",{value:!0}),this.preprocessingFunctionInputRoot=null,this.methods=[c.c.UMAP,c.c.T_SNE],this.columnFunctionsMap={},this.supportedFunctions={},this.availableMetrics=[],this.methodSettingsDiv=s.inputs([]),this.dbScanSettingsDiv=s.inputs([]),this.preprocessingFuncSettingsDiv=s.inputs([]),this.preprocessingFunctionSettings={},this.methodsParams={[c.c.UMAP]:new T,[c.c.T_SNE]:new L},this.dbScanParams=new P,this.editorSettings=t,this.editorSettings.enableMCL&&this.methods.push(N),a.Func.find({tags:[l.GP]}).forEach((t=>{const e=t.options.get(l.n3)??"",n=t.friendlyName??t.name,i=t.options.get(l.C0)??"",r=t.options.get(l._X)??"",o=t.options.get(l.Gi)??"";this.editorSettings.semtype&&!e.includes(this.editorSettings.semtype)||this.editorSettings.type&&!i.includes(this.editorSettings.type)||this.editorSettings.units&&!r.includes(this.editorSettings.units)||(this.supportedFunctions[n]={func:t,semTypes:e?e.split(","):[],types:i?i.split(","):[],units:r?r.split(","):[],distanceFunctions:o?o.split(","):[]})})),this.tableInput=s.input.table("Table",{value:o.shell.tv.dataFrame,items:o.shell.tables,onValueChanged:()=>{this.onTableInputChanged()}}),this.onTableInputChanged(),this.regenerateColInput(),this.onColumnInputChanged();let e=!1,n=!1;this.methodInput=s.input.choice("Method",{value:c.c.UMAP,items:this.methods,onValueChanged:t=>{e&&this.createAlgorithmSettingsDiv(this.methodSettingsDiv,this.methodsParams[t])}}),this.methodSettingsIcon=s.icons.settings((()=>{e=!e,e?this.createAlgorithmSettingsDiv(this.methodSettingsDiv,this.methodsParams[this.methodInput.value]):s.empty(this.methodSettingsDiv)}),"Modify methods parameters"),this.dbScanSettingsIcon=s.icons.settings((()=>{n=!n,n?this.createAlgorithmSettingsDiv(this.dbScanSettingsDiv,this.dbScanParams):s.empty(this.dbScanSettingsDiv)}),"Modify clustering parameters"),this.clusterEmbeddingsInput.classList.add("ml-dim-reduction-settings-input"),this.clusterEmbeddingsInput.root.prepend(this.dbScanSettingsIcon),this.methodInput.root.classList.add("ml-dim-reduction-settings-input"),this.methodInput.root.prepend(this.methodSettingsIcon),this.methodSettingsDiv=s.inputs([]);const i=this.columnFunctionsMap[this.colInput.value.name];this.preprocessingFunctionInput=s.input.choice("Encoding function",{value:i[0],items:i,onValueChanged:()=>{this.onPreprocessingFunctionChanged()}});let r=!1;this.preprocessingFunctionInputRoot||(this.preprocessingFunctionInputRoot=this.preprocessingFunctionInput.root,r=!0),r||(s.empty(this.preprocessingFunctionInputRoot),Array.from(this.preprocessingFunctionInput.root.children).forEach((t=>this.preprocessingFunctionInputRoot.append(t)))),this.preprocessingFunctionInputRoot.classList.add("ml-dim-reduction-settings-input");let h=!1;this.preprocessingFuncSettingsIcon=s.icons.settings((async()=>{h?s.empty(this.preprocessingFuncSettingsDiv):await this.createPreprocessingFuncParamsDiv(this.preprocessingFuncSettingsDiv,this.supportedFunctions[this.preprocessingFunctionInput.value].func),h=!h}),"Modify encoding function parameters"),this.preprocessingFunctionInputRoot.prepend(this.preprocessingFuncSettingsIcon),this.similarityMetricInput=s.input.choice("Similarity",{value:"",items:[]}),this.similarityMetricInput.nullable=!1,this.similarityMetricInputRoot||(this.similarityMetricInputRoot=this.similarityMetricInput.root),this.onPreprocessingFunctionChanged()}getColInput(){const t=this.tableInput.value?.columns.toList().find((t=>!!this.columnFunctionsMap[t.name]))??null,e=s.input.column("Column",{table:this.tableInput.value,value:t,onValueChanged:()=>this.onColumnInputChanged(),filter:t=>!!this.columnFunctionsMap[t.name]});return this.colInputRoot||(this.colInputRoot=e.root),e}regenerateColInput(){let t=!1;this.colInputRoot&&(t=!0,s.empty(this.colInputRoot)),this.colInput=this.getColInput(),t&&Array.from(this.colInput.root.children).forEach((t=>this.colInputRoot.append(t))),this.onColumnInputChanged()}onTableInputChanged(){const t=this.tableInput.value;t&&(this.columnFunctionsMap={},t.columns.toList().forEach((t=>{Object.keys(this.supportedFunctions).forEach((e=>{const n=this.supportedFunctions[e].semTypes,i=this.supportedFunctions[e].types,r=this.supportedFunctions[e].units,o=!n.length||t.semType&&n.includes(t.semType),s=!i.length||i.includes(t.type),a=!r.length||t.meta.units&&r.includes(t.meta.units);o&&s&&a&&(this.columnFunctionsMap[t.name]||(this.columnFunctionsMap[t.name]=[]),this.columnFunctionsMap[t.name].push(e))}))})),this.regenerateColInput())}onColumnInputChanged(){const t=this.colInput.value;if(!t)return;const e=this.columnFunctionsMap[t.name];this.preprocessingFunctionInput=s.input.choice("Preprocessing function",{value:e[0],items:e,onValueChanged:()=>{this.onPreprocessingFunctionChanged()}});let n=!1;this.preprocessingFunctionInputRoot||(this.preprocessingFunctionInputRoot=this.preprocessingFunctionInput.root,n=!0),n||(s.empty(this.preprocessingFunctionInputRoot),Array.from(this.preprocessingFunctionInput.root.children).forEach((t=>this.preprocessingFunctionInputRoot.append(t)))),this.onPreprocessingFunctionChanged()}onPreprocessingFunctionChanged(){s.empty(this.preprocessingFuncSettingsDiv),this.preprocessingFunctionSettings={};const t=this.preprocessingFunctionInput.value,e=this.supportedFunctions[t].distanceFunctions;this.availableMetrics=[...e],this.similarityMetricInput=s.input.choice("Similarity",{value:this.availableMetrics[0],items:this.availableMetrics}),this.similarityMetricInput.nullable=!1,this.similarityMetricInputRoot||(this.similarityMetricInputRoot=this.similarityMetricInput.root),s.empty(this.similarityMetricInputRoot),Array.from(this.similarityMetricInput.root.children).forEach((t=>this.similarityMetricInputRoot.append(t))),this.preprocessingFuncSettingsIcon&&(this.supportedFunctions[t].func.inputs.length<3?this.preprocessingFuncSettingsIcon.style.display="none":this.preprocessingFuncSettingsIcon.style.display="flex")}createAlgorithmSettingsDiv(t,e){return s.empty(t),Object.keys(e).forEach((n=>{const i=e[n],r="string"===i.type?s.input.string(i.uiName,{value:i.value??"",onValueChanged:t=>{i.value=t}}):"boolean"===i.type?s.input.bool(i.uiName,{value:i.value??!1,onValueChanged:t=>{i.value=t}}):s.input.float(i.uiName,{value:i.value,onValueChanged:t=>{i.value=t}});t.append(r.root),i.disable?(r.enabled=!1,s.tooltip.bind(r.input??r.root,i.disableTooltip??"")):s.tooltip.bind(r.input??r.root,i.tooltip)})),t}async createPreprocessingFuncParamsDiv(t,e){if(s.empty(t),e.inputs.length<3)return s.div();const n=e.prepare(),i=await n.buildEditor(s.div());for(let r=2;r<e.inputs.length;r++){const o=e.inputs[r];(this.preprocessingFunctionSettings[o.name]||n.inputParams[e.inputs[r].name].value||o.defaultValue)&&(this.preprocessingFunctionSettings[o.name]=this.preprocessingFunctionSettings[o.name]??n.inputParams[o.name].value??o.defaultValue);const s=i.find((t=>t.property.name===o.name));s&&(null!==this.preprocessingFunctionSettings[o.name]&&void 0!==this.preprocessingFunctionSettings[o.name]&&(s.value=this.preprocessingFunctionSettings[o.name]),s.onChanged.subscribe((t=>{this.preprocessingFunctionSettings[o.name]=t})),t.append(s.root))}return t}getEditor(){return s.div([this.tableInput,this.colInputRoot,this.preprocessingFunctionInputRoot,this.preprocessingFuncSettingsDiv,this.methodInput,this.methodSettingsDiv,this.similarityMetricInputRoot,this.plotEmbeddingsInput,this.clusterEmbeddingsInput,this.dbScanSettingsDiv],{style:{minWidth:"420px"},classes:"ui-form dim-reduction-dialog-form"})}getParams(){return{table:this.tableInput.value,col:this.colInput.value,methodName:this.methodInput.value,preprocessingFunction:this.supportedFunctions[this.preprocessingFunctionInput.value].func,similarityMetric:this.similarityMetricInput.value,plotEmbeddings:this.plotEmbeddingsInput.value,clusterEmbeddings:this.clusterEmbeddingsInput.value,options:{...this.algorithmOptions,...this.dbScanOptions,preprocessingFuncArgs:this.preprocessingFunctionSettings??{}}}}getInput(){return{table:this.tableInput.value.name,col:this.colInput.value.name,methodName:this.methodInput.value,preprocessingFunction:this.preprocessingFunctionInput.value,similarityMetric:this.similarityMetricInput.value,plotEmbeddings:this.plotEmbeddingsInput.value,clusterEmbeddings:this.clusterEmbeddingsInput.value,options:{...this.algorithmOptions,...this.dbScanOptions,preprocessingFuncArgs:this.preprocessingFunctionSettings??{}}}}getStringInput(){return JSON.stringify(this.getInput())}async applyStringInput(t){try{const e=JSON.parse(t);await this.applyInput(e)}catch(t){o.shell.error("Error applying input from history"),console.error(t)}}async applyInput(t){try{const e=this.tableInput.value?.col(t.col);if(!e)throw new Error("Column not found");this.colInput.value=e,this.preprocessingFunctionInput.value=t.preprocessingFunction,this.similarityMetricInput.value=t.similarityMetric,this.plotEmbeddingsInput.value=t.plotEmbeddings,this.clusterEmbeddingsInput.value=t.clusterEmbeddings;const n=this.methodsParams[this.methodInput.value];Object.keys(n).forEach((e=>{null!=t.options[e]&&(this.methodsParams[t.methodName][e].value=t.options[e])})),this.methodInput.value=t.methodName,this.preprocessingFunctionSettings=t.options.preprocessingFuncArgs,await this.createPreprocessingFuncParamsDiv(this.preprocessingFuncSettingsDiv,this.supportedFunctions[this.preprocessingFunctionInput.value].func)}catch(t){o.shell.error("Error applying input from history"),console.error(t)}}}var R=n(9713),O=n(6295);const k=t=>null==t;function G(t,e,n,i){if(n>t[t.length-1])return;const r=t.findIndex((t=>n<t));t.pop(),t.splice(r,0,n),e.pop(),e.splice(r,0,i)}class F{constructor(t=!0,e=!0){const i=navigator.hardwareConcurrency;this._workerCount=t?Math.max(i-2,1):1,this._workers=new Array(this._workerCount).fill(null).map((()=>new Worker(new URL(n.p+n.u(793),n.b)))),this._terminateOnComplete=e}async calc(t,e,n=!0,r){return await this.calcMulti([t],[e],n,[r??{}],[1],i.MANHATTAN)}async calcMulti(t,e,n=!0,r=[{}],o=[1],s=i.MANHATTAN){if(t.length<1)throw new Error("values must contain at least one array");if(e.length!==t.length||r.length!==t.length||o.length!==t.length)throw new Error("values, fnNames, weights and opts must have the same length");return new Promise((async(i,a)=>{try{const a=t[0].length,l=new Array(this._workerCount),c=a*(a-1)/2;this._workerCount=Math.min(this._workerCount,c);const h=c/this._workerCount,u=new Float32Array(c);let d=0,p=1,m=0,f=Number.MIN_VALUE;for(let n=0;n<this._workerCount;n++){const i=Math.floor(n*h),g=n===this._workerCount-1?c:Math.floor((n+1)*h),y=d,b=p;n!==this._workerCount-1&&(d=a-2-Math.floor(Math.sqrt(-8*g+4*a*(a-1)-7)/2-.5),p=g-a*d+Math.floor((d+1)*(d+2)/2)),this._workers[n].postMessage({values:t,fnNames:e,startRow:y,startCol:b,chunckSize:g-i,opts:r,weights:o,aggregationMethod:s}),l[n]=new Promise(((t,e)=>{this._workers[n].onmessage=({data:{error:r,distanceMatrixData:o,min:s,max:a}})=>{this._terminateOnComplete&&setTimeout((()=>this._workers[n].terminate())),r?e(r):(u.set(o,i),s<m&&(m=s),a>f&&(f=a),t())}}))}await Promise.all(l),n&&u.forEach(((t,e)=>{u[e]=(t-m)/(f-m)})),i(u)}catch(t){a(t)}}))}terminate(){this._workers.forEach((t=>t.terminate()))}}class H{constructor(){this._workerCount=Math.max(navigator.hardwareConcurrency-2,1)}static pruneSparseMatrix(t,e=1e6){const n=200,i=new Uint32Array(n),r=t.distance.length,o=t.distance;for(let t=0;t<r;t++)i[Math.floor(o[t]*n)]++;let s=0,a=0;for(let t=0;t<n&&(s+=i[t],a=t,!(s>=e));t++);const l=new Uint32Array(s),c=new Uint32Array(s),h=new Float32Array(s),u=t.i,d=t.j;let p=0;const m=(a+1)/n;for(let t=0;t<r;t++)o[t]<m&&(l[p]=u[t],c[p]=d[t],h[p]=o[t],p++);return{i:l,j:c,distance:h}}async calcMultiColumn(t,e,r,o=[{}],s=[1],a=i.EUCLIDEAN){const l=t[0].length*(t[0].length-1)/2,c=Math.floor(l/this._workerCount),h=t[0].length>2e4?await this.getMinimalThreshold(t,e,o,s,a):0;r<h&&(console.log(`using threshold ${h}`),r=h),o.forEach(((t,e)=>o[e].threshold=r));const u=new Array(this._workerCount),d=new Array(this._workerCount).fill(null).map((()=>new Worker(new URL(n.p+n.u(111),n.b))));for(let n=0;n<this._workerCount;n++)u[n]=new Promise(((i,h)=>{const u=n*c,p=n===this._workerCount-1?l:(n+1)*c;p<=u&&i({i:new Int32Array(0),j:new Int32Array(0),distance:new Float32Array(0),idx:n}),d[n].postMessage({values:t,startIdx:u,endIdx:p,threshold:r,fnNames:e,opts:o,weights:s,aggregationMethod:a}),d[n].onmessage=({data:{error:t,i:e,j:r,distance:o}})=>{t?(d[n].terminate(),h(t)):(d[n].terminate(),i({i:e,j:r,distance:o,idx:n}))}}));const p=await Promise.all(u),m=p.reduce(((t,e)=>t+e.i.length),0),f=new Int32Array(m),g=new Int32Array(m),y=new Float32Array(m);let b=0;for(const t of p)f.set(t.i,b),g.set(t.j,b),y.set(t.distance,b),b+=t.i.length;return{i:f,j:g,distance:y}}async calc(t,e,n,i={}){return await this.calcMultiColumn([t],[e],n,[i],[1])}async getKNN(t,e,n=15,i={}){return await this.multiColumnKNN([t],[e],n,[i],[1])}async getThresholdKNN(t,e,n=.8,i={}){return await this.multiColumnThresholdKnn([t],[e],n,[i],[1])}async multiColumnThresholdKnn(t,e,r=.8,o,s,a=i.EUCLIDEAN){if(t.length!==e.length||t.length!==o.length||t.length!==s.length)throw new Error("values, distance functions, options and weights arrays should have the same length");if(t.some((e=>e.length!==t[0].length)))throw new Error("all values arrays should have the same length");const l=t[0].length*(t[0].length-1)/2,c=Math.floor(l/this._workerCount),h=new Array(this._workerCount),u=new Array(this._workerCount).fill(null).map((()=>new Worker(new URL(n.p+n.u(603),n.b))));for(let n=0;n<this._workerCount;n++)h[n]=new Promise(((i,h)=>{const d=n*c,p=n===this._workerCount-1?l:(n+1)*c;p<=d&&i({knnDistances:new Array(0),knnIndexes:new Array(0)}),u[n].postMessage({values:t,startIdx:d,endIdx:p,fnNames:e,opts:o,threshold:r,weights:s,aggregationMethod:a}),u[n].onmessage=({data:{error:t,knnDistances:e,knnIndexes:r}})=>{t?(u[n].terminate(),h(t)):(u[n].terminate(),i({knnDistances:e,knnIndexes:r}))}}));const d=await Promise.all(h),p=new Int32Array(t[0].length);for(const e of d)for(let n=0;n<t[0].length;++n)p[n]+=e.knnIndexes[n]?.length??0;const m={knnDistances:new Array(t[0].length).fill(null).map(((t,e)=>new Array(p[e]))),knnIndexes:new Array(t[0].length).fill(null).map(((t,e)=>new Array(p[e])))};for(const e of d)for(let n=0;n<t[0].length;++n)for(let t=0;t<(e.knnDistances[n]?.length??0);++t)m.knnDistances[n][p[n]-1]=e.knnDistances[n][t],m.knnIndexes[n][p[n]-1]=e.knnIndexes[n][t],p[n]-=1;return m}async multiColumnSingleValueKNN(t,e,r,o=15,s,a,l=i.EUCLIDEAN){if(t.length!==r.length||t.length!==s.length||t.length!==a.length)throw new Error("values, distance functions, options and weights arrays should have the same length");if(t.some((e=>e.length!==t[0].length)))throw new Error("all values arrays should have the same length");const c=new Array(this._workerCount).fill(null).map((()=>new Worker(new URL(n.p+n.u(810),n.b)))),h=new Array(this._workerCount),u=t[0].length,d=t.map((t=>t[e])),p=Math.ceil(u/this._workerCount);for(let e=0;e<this._workerCount;e++)h[e]=new Promise(((n,i)=>{const h=e*p,m=e===this._workerCount-1?u:(e+1)*p;m<=h&&n({knnDistances:new Array(0),knnIndexes:new Array(0)}),c[e].postMessage({values:t.map((t=>t.slice(h,m))),target:d,fnNames:r,opts:s,nNeighbours:o,weights:a,aggregationMethod:l,startIdx:h}),c[e].onmessage=({data:{error:t,knnDistances:r,knnIndexes:o}})=>{t?(c[e].terminate(),i(t)):(c[e].terminate(),n({knnDistances:r,knnIndexes:o}))}}));const m=await Promise.all(h),f={knnDistances:new Array(o).fill(99999),knnIndexes:new Array(o).fill(-1)};for(const t of m)for(let e=0;e<(t.knnDistances?.length??0);++e)G(f.knnDistances,f.knnIndexes,t.knnDistances[e],t.knnIndexes[e]);return f}async multiColumnKNN(t,e,r=15,o,s,a=i.EUCLIDEAN){if(t.length!==e.length||t.length!==o.length||t.length!==s.length)throw new Error("values, distance functions, options and weights arrays should have the same length");if(t.some((e=>e.length!==t[0].length)))throw new Error("all values arrays should have the same length");const l=t[0].length*(t[0].length-1)/2,c=Math.floor(l/this._workerCount),h=new Array(this._workerCount),u=new Array(this._workerCount).fill(null).map((()=>new Worker(new URL(n.p+n.u(950),n.b))));for(let n=0;n<this._workerCount;n++)h[n]=new Promise(((i,h)=>{const d=n*c,p=n===this._workerCount-1?l:(n+1)*c;p<=d&&i({knnDistances:new Array(0),knnIndexes:new Array(0)}),u[n].postMessage({values:t,startIdx:d,endIdx:p,fnNames:e,opts:o,nNeighbours:r,weights:s,aggregationMethod:a}),u[n].onmessage=({data:{error:t,knnDistances:e,knnIndexes:r}})=>{t?(u[n].terminate(),h(t)):(u[n].terminate(),i({knnDistances:e,knnIndexes:r}))}}));const d=await Promise.all(h),p={knnDistances:new Array(t[0].length).fill(null).map((()=>new Array(r).fill(99999))),knnIndexes:new Array(t[0].length).fill(null).map((()=>new Array(r).fill(-1)))};for(const e of d)for(let n=0;n<t[0].length;++n)for(let t=0;t<(e.knnDistances[n]?.length??0);++t)G(p.knnDistances[n],p.knnIndexes[n],e.knnDistances[n][t],e.knnIndexes[n][t]);return p}async getSampleDistances(t,e,r=[],o,s=i.EUCLIDEAN){const a=new Array(this._workerCount).fill(null).map((()=>new Worker(new URL(n.p+n.u(778),n.b))));try{const n=t[0].length*(t[0].length-1)/2,i=Math.floor(n/this._workerCount),l=1e6,c=Math.max(Math.min(n/1e3,l),Math.min(n,l)),h=Math.floor(c/this._workerCount),u=new Array(this._workerCount);for(let l=0;l<this._workerCount;l++)u[l]=new Promise(((c,u)=>{const d=l*i,p=l===this._workerCount-1?n:(l+1)*i;a[l].postMessage({values:t,startIdx:d,endIdx:p,sampleLength:h,fnNames:e,opts:r,weights:o,aggregationMethod:s}),a[l].onmessage=({data:{error:t,distance:e}})=>{a[l].terminate(),t?u(t):c({distance:e})}}));const d=await Promise.all(u),p=d.reduce(((t,e)=>t+e.distance.length),0),m=new Float32Array(p);let f=0;for(const t of d)m.set(t.distance,f),f+=t.distance.length;return m.sort(),m}catch(t){return a?.forEach((t=>t?.terminate())),console.error(t),new Float32Array(1).fill(.5)}}async getMinimalThreshold(t,e,n=[],r,o=i.EUCLIDEAN){try{const i=t.length*(t.length-1)/2,s=await this.getSampleDistances(t,e,n,r,o);return 1-s[Math.floor(7e7/i*s.length)]}catch(t){return console.error(t),.5}}static calcSync(t,e,n,i){const r=[],o=[],s=[];let a=0,l=0,c=0;const h=t.length*(t.length-1)/2;for(;a<h;){const e=k(t[l])||k(t[c])?1:n(t[l],t[c]);1-e>=i&&(r.push(l),o.push(c),s.push(e)),a++,c++,c===t.length&&(l++,c=l+1)}return{i:new Int32Array(r),j:new Int32Array(o),distance:new Float32Array(s)}}}var B,D,V=n(8774);(D=B||(B={})).none="none",D.bold="bold",D.dashed="dashed";class j{get currentLineId(){return this._currentLineIdx}set currentLineId(t){t!==this._currentLineIdx&&(this._currentLineIdx=t,this.sp.render(this.ctx))}set linesToRender(t){this.updateLines(t),this.sp.render(this.ctx)}set linesVisibility(t){this.visibility=t,this.sp.render(this.ctx)}constructor(t,e,n,i,r=B.none){var o;this._currentLineIdx=-1,this.lineClicked=new h.Subject,this.lineHover=new h.Subject,this.mouseOverLineId=-1,this.arrowWidth=15,this.sp=t,this.xAxisCol=this.sp.dataFrame.columns.byName(e),this.yAxisCol=this.sp.dataFrame.columns.byName(n),this.canvas=this.sp.getInfo().canvas,this.ctx=this.canvas.getContext("2d"),this.currentLineStyle=r,this.updateLines(i),this.visibility=null!==(o=i.visibility)&&void 0!==o?o:new V.A(this.lines.from.length),i.visibility||this.visibility.setAll(!0,!1),i.arrowSize&&(this.arrowWidth=i.arrowSize),this.canvas.onmousedown=t=>{var e;(null===(e=this.lines)||void 0===e?void 0:e.skipMouseOverDetection)&&(this.mouseOverLineId=this.checkCoordsOnLine(t.offsetX,t.offsetY)),-1!==this.mouseOverLineId&&this.lineClicked.next({x:t.clientX,y:t.clientY,id:this.mouseOverLineId,event:t})},this.canvas.onmousemove=t=>{var e;this.mouseOverLineId=(null===(e=this.lines)||void 0===e?void 0:e.skipMouseOverDetection)?-1:this.checkCoordsOnLine(t.offsetX,t.offsetY),-1!==this.mouseOverLineId&&this.lineHover.next({x:t.clientX,y:t.clientY,id:this.mouseOverLineId,event:t})},t.onEvent("d4-before-draw-scene").subscribe((t=>{this.renderLines()}))}updateLines(t){this.lines=t,this.multipleLinesCounts=new Uint8Array(this.lines.from.length),t.skipMultiLineCalculation?this.multipleLinesCounts.fill(0):this.createMultiLinesIndices()}renderLines(){var t,e,n,i,r,o,s,a,l,c,h,u,d,p,m,f,g;const y=this.lines.colors||this.lines.widths||this.lines.opacities||this.lines.drawArrowsArr;y||(this.ctx.lineWidth=null!==(t=this.lines.width)&&void 0!==t?t:1,this.ctx.strokeStyle=`rgba(${null!==(e=this.lines.color)&&void 0!==e?e:"0,128,0"},${null!==(n=this.lines.opacity)&&void 0!==n?n:1})`);const b=this.sp.dataFrame.filter,v=Math.pow(null!==(i=this.lines.shortLineThreshold)&&void 0!==i?i:5,2);for(let t=0;t<this.lines.from.length;t++)if(b.get(this.lines.from[t])&&b.get(this.lines.to[t])&&this.visibility.getBit(t)){let e=0;const n=this.sp.getMarkerSize(this.lines.from[t])/2,i=this.sp.getMarkerSize(this.lines.to[t])/2,b=this.sp.pointToScreen(this.lines.from[t]);let w=null==b?void 0:b.x,C=null==b?void 0:b.y;const A=this.sp.pointToScreen(this.lines.to[t]);let S=null==A?void 0:A.x,x=null==A?void 0:A.y;const E=Math.min(this.sp.viewBox.width,this.sp.viewBox.height);if(this.ctx.beginPath(),w&&C&&S&&x&&Math.hypot(S-w,x-C)/E>.01){if(y){const e=(null===(r=this.lines.colors)||void 0===r?void 0:r[t])?null===(o=this.lines.colors)||void 0===o?void 0:o[t]:null!==(s=this.lines.color)&&void 0!==s?s:"0,128,0",n=(null===(a=this.lines.opacities)||void 0===a?void 0:a[t])?null===(l=this.lines.opacities)||void 0===l?void 0:l[t]:null!==(c=this.lines.opacity)&&void 0!==c?c:1;this.ctx.strokeStyle=`rgba(${e},${n})`,this.ctx.lineWidth=(null===(h=this.lines.widths)||void 0===h?void 0:h[t])?null===(u=this.lines.widths)||void 0===u?void 0:u[t]:null!==(d=this.lines.width)&&void 0!==d?d:1}t===this._currentLineIdx&&this.toggleCurrentLineStyle(!0);const b=this.multipleLinesCounts[t];let A=null;if(b){e=this.getLineLength(w,C,S,x);const r=this.getPointOnDistance(w,C,S,x,i,e),o=this.getPointOnDistance(S,x,w,C,n,e);w=r.x,C=r.y,S=o.x,x=o.y,A=this.lines.from[t]>this.lines.to[t]?this.findControlPoint(b,w,C,S,x,t):this.findControlPoint(b,S,x,w,C,t),this.ctx.moveTo(w,C),this.ctx.quadraticCurveTo(A.x,A.y,S,x)}else(!this.lines.skipShortLines||Math.pow(S-w,2)+Math.pow(x-C,2)>v)&&(this.ctx.moveTo(w,C),this.ctx.lineTo(S,x));if((null!==(p=this.lines.drawArrows)&&void 0!==p?p:null===(m=this.lines.drawArrowsArr)||void 0===m?void 0:m.getBit(t))&&(e||(e=this.getLineLength(w,C,S,x)),e>this.arrowWidth)){const t=b?null:this.getPointOnDistance(w,C,S,x,i,e),n=b?A.x:w,r=b?A.y:C;this.canvasArrow(this.ctx,null!==(f=null==t?void 0:t.x)&&void 0!==f?f:w,null!==(g=null==t?void 0:t.y)&&void 0!==g?g:C,n,r)}this.ctx.stroke(),this.ctx.closePath(),t===this._currentLineIdx&&this.toggleCurrentLineStyle(!1)}}this.fillLeftBottomRect()}toggleCurrentLineStyle(t){switch(this.currentLineStyle){case B.bold:t?this.ctx.lineWidth+=2:this.ctx.lineWidth-=2;break;case B.dashed:t?this.ctx.setLineDash([5,5]):this.ctx.setLineDash([]);break;default:return}}fillLeftBottomRect(){const t=new Path2D;t.rect(this.sp.yAxisBox.minX,this.sp.yAxisBox.maxY,this.sp.yAxisBox.width,this.sp.xAxisBox.height),this.ctx.fillStyle="white",this.ctx.beginPath(),this.ctx.fill(t),this.ctx.closePath()}createMultiLinesIndices(){const t={};for(let e=0;e<this.lines.from.length;e++){let n=0,i=0;this.lines.from[e]<this.lines.to[e]?(n=this.lines.from[e],i=this.lines.to[e]):(n=this.lines.to[e],i=this.lines.from[e]),t[`${n}|${i}`]?(1===t[`${n}|${i}`].length&&(this.multipleLinesCounts[t[`${n}|${i}`][0]]=1,t[`${n}|${i}`].push(1)),this.multipleLinesCounts[e]=++t[`${n}|${i}`][1]):t[`${n}|${i}`]=[e]}}checkCoordsOnLine(t,e){let n=-1,i=null,r=null;const o=this.sp.dataFrame.filter;for(let s=0;s<this.lines.from.length;s++)if(o.get(this.lines.from[s])&&o.get(this.lines.to[s])&&this.visibility.getBit(s)){const o=this.sp.getMarkerSize(this.lines.from[s])/2,a=this.sp.getMarkerSize(this.lines.to[s])/2,l=this.sp.worldToScreen(this.xAxisCol.get(this.lines.from[s]),this.yAxisCol.get(this.lines.from[s])),c=this.sp.worldToScreen(this.xAxisCol.get(this.lines.to[s]),this.yAxisCol.get(this.lines.to[s]));if(this.multipleLinesCounts[s]){const n=this.getLineLength(l.x,l.y,c.x,c.y),i=this.getPointOnDistance(l.x,l.y,c.x,c.y,a,n),h=this.getPointOnDistance(c.x,c.y,null==l?void 0:l.x,null==l?void 0:l.y,o,n),u=this.lines.from[s]>this.lines.to[s]?this.findControlPoint(this.multipleLinesCounts[s],i.x,i.y,h.x,h.y,s):this.findControlPoint(this.multipleLinesCounts[s],h.x,h.y,i.x,i.y,s);r=this.calculateDistToCurveLine(s,t,e,i,h,u)}else r=this.calculateDistToStraightLine(t,e,l,c);(!i&&null!==r&&r<5||i&&null!==r&&r<i)&&(i=r,n=s)}return n}calculateDistToStraightLine(t,e,n,i){const r=Math.min(n.x,i.x),o=Math.max(n.x,i.x),s=Math.min(n.y,i.y),a=Math.max(n.y,i.y);return t>=r-2&&t<=o+2&&e>=s-2&&e<=a+2?this.distToStraightLineSegment(t,e,n,i):null}distToStraightLineSegment(t,e,n,i){const r=(t,e,n,i)=>Math.pow(t-n,2)+Math.pow(e-i,2),o=r(n.x,n.y,i.x,i.y);if(0==o)return r(t,e,n.x,n.y);let s=((t-n.x)*(i.x-n.x)+(e-n.y)*(i.y-n.y))/o;return s=Math.max(0,Math.min(1,s)),r(t,e,n.x+s*(i.x-n.x),n.y+s*(i.y-n.y))}calculateDistToCurveLine(t,e,n,i,r,o){const s=Math.min(i.x,r.x,o.x),a=Math.max(i.x,r.x,o.x),l=Math.min(i.y,r.y,o.y),c=Math.max(i.y,r.y,o.y);if(e>=s-2&&e<=a+2&&n>=l-2&&n<=c+2){const t=a-s,h=c-l;return this.calculateDistToCurveInRect(e,n,i,o,r,t,h)}return null}calculateDistToCurveInRect(t,e,n,i,r,o,s){const a=Math.floor((o+s)/3),l=1/a,c=new Uint32Array(a),h=new Uint32Array(a),u=new Uint32Array(a);let d=null;const p=new V.A(a);for(let o=0;o<c.length;o++){const s=o*l,a=Math.pow(1-s,2)*n.x+2*s*(1-s)*i.x+Math.pow(s,2)*r.x,p=Math.pow(1-s,2)*n.y+2*s*(1-s)*i.y+Math.pow(s,2)*r.y,m=Math.abs(t-a),f=Math.abs(e-p),g=m+f;(!d||d>g)&&(d=g),u[o]=Math.max(m,f),c[o]=a,h[o]=p}for(let t=0;t<c.length;t++)u[t]<d&&p.setBit(t,!0,!1);let m=null;for(let n=-1;-1!==(n=p.findNext(n));){const i=Math.hypot(c[n]-t,h[n]-e);(!m||m>i)&&(m=i)}return m}getLineLength(t,e,n,i){return Math.sqrt(Math.pow(n-t,2)+Math.pow(i-e,2))}getPointOnDistance(t,e,n,i,r,o){const s=n-r*((n-t)/o),l=i-r*((i-e)/o);return new a.Point(s,l)}findControlPoint(t,e,n,i,r,o){const s=e+(i-e)/2,l=n+(r-n)/2;let c=s-e,h=l-n;const u=Math.sqrt(c*c+h*h);c/=u,h/=u;const d=50*Math.ceil(t/2);return t%2==0?new a.Point(s+d/2*h,l-d/2*c):new a.Point(s-d/2*h,l+d/2*c)}canvasArrow(t,e,n,i,r){const o=Math.atan2(i-e,r-n)+Math.PI;t.moveTo(e-this.arrowWidth*Math.sin(o-Math.PI/10),n-this.arrowWidth*Math.cos(o-Math.PI/10)),t.lineTo(e,n),t.lineTo(e-this.arrowWidth*Math.sin(o+Math.PI/10),n-this.arrowWidth*Math.cos(o+Math.PI/10))}}var U,W,q=n(8060),z=n(3629);async function Y(t,e,i,r,s,a,l){let c=await async function(t,e,i,r,s,a,l){if(!a.distanceFnArgs)throw new Error("options.distanceFnArgs must be defined");if(t.length!==e.length||t.length!==a.distanceFnArgs.length||t.length!==r.length)throw new Error("data, metrics and options and weights must have the same length");return new Promise((function(c,h){const u=new Worker(new URL(n.p+n.u(234),n.b));u.postMessage({columnsData:t,distanceMetrics:e,method:i,options:a,weights:r,aggregationMethod:s});const d=o.events.onCustomEvent(q.S).subscribe((()=>{try{u?.terminate()}finally{d.unsubscribe()}}));u.onmessage=({data:{error:t,embedding:e,epochNum:n,epochsLength:i}})=>{k(n)||k(i)?(d.unsubscribe(),t?h(t):c(e),setTimeout((()=>u.terminate()),100)):l&&l(n,i,e)}}))}(t,i,e,r,s,a,l);return c=c.map((t=>(0,z.S8)(t))),c}(W=U||(U={})).EUCLIDEAN="EUCLIDEAN",W.MANHATTAN="MANHATTAN";const K={[U.EUCLIDEAN]:function(t){return`\n var sum = 0.0;\n for (var i = 0u; i < ${t}; i = i + 1u) {\n sum = sum + distances[i] * distances[i] * computeInfo.weights[i] * computeInfo.weights[i];\n }\n return sqrt(sum);\n `},[U.MANHATTAN]:function(t){return`\n var sum = 0.0;\n for (var i = 0u; i < ${t}; i = i + 1u) {\n sum = sum + abs(distances[i]) * computeInfo.weights[i];\n }\n return sum;\n `}};var Z,X;(X=Z||(Z={})).HAMMING="Hamming",X.EUCLIDEAN="Euclidean",X.VECTOR_COSINE="Vector Cosine",X.MANHATTAN="Manhattan",X.TANIMOTO="Tanimoto",X.LEVENSTEIN="Levenshtein",X.NEEDLEMAN_WUNSCH="Needlemann-Wunsch",X.MONOMER_CHEMICAL_DISTANCE="Monomer chemical distance",X.SOKAL="Sokal",X.COSINE="Cosine",X.ASYMMETRIC="Asymmetric",X.Difference="Difference",X.OneHot="One-Hot";const J={[Z.HAMMING]:function(t,e){return`\n let aLength: u32 = computeInfo.entrySizes[${e}][aIndex];\n let bLength: u32 = computeInfo.entrySizes[${e}][bIndex];\n let maxLength: u32 = max(aLength, bLength);\n let minLength: u32 = min(aLength, bLength);\n let sizeDiff: u32 = maxLength - minLength;\n \n let maxIntDistance = ceil(maxDistance * f32(maxLength)) - f32(sizeDiff);\n\n var diff: f32 = 0.0;\n for (var i = 0u; i < ${t}; i = i + 1u) {\n diff = diff + f32(a[i] != b[i]);\n if (diff > maxIntDistance) {\n return 1.0;\n }\n }\n diff += f32(sizeDiff);\n return diff / ${t};\n `},[Z.EUCLIDEAN]:function(t,e){return`\n var dist: f32 = 0.0;\n for (var i = 0u; i < ${t}; i = i + 1u) {\n dist = dist + f32(a[i] - b[i]) * f32(a[i] - b[i]);\n }\n return sqrt(dist);\n `},[Z.MANHATTAN]:function(t,e){return`\n var dist: f32 = 0.0;\n for (var i = 0u; i < ${t}; i = i + 1u) {\n dist = dist + abs(f32(a[i] - b[i]));\n }\n return dist;\n `},[Z.VECTOR_COSINE]:function(t,e){return`\n var dist: f32 = 0.0;\n var productSum: f32 = 0.0;\n var aSquareSum: f32 = 0.0;\n var bSquareSum: f32 = 0.0;\n for (var i = 0u; i < ${t}; i = i + 1u) {\n productSum = productSum + f32(a[i] * b[i]);\n aSquareSum = aSquareSum + f32(a[i] * a[i]);\n bSquareSum = bSquareSum + f32(b[i] * b[i]);\n }\n var sim = productSum / (sqrt(aSquareSum) * sqrt(bSquareSum));\n return (1.0 - sim) / 2.0;\n `},[Z.TANIMOTO]:function(t,e){return`\n var onBitsa: u32 = 0u;\n var onBitsb: u32 = 0u;\n for (var i = 0u; i < ${t}u; i = i + 1u) {\n onBitsa = onBitsa + countOneBits(a[i]);\n onBitsb = onBitsb + countOneBits(b[i]);\n }\n\n if (onBitsa == 0u && onBitsb == 0u) {\n return 0.0;\n }\n\n let totalOnBits = onBitsa + onBitsb;\n var commonBits: u32 = 0u;\n for (var i = 0u; i < ${t}u; i = i + 1u) {\n commonBits = commonBits + countOneBits(a[i] & b[i]);\n }\n\n return 1.0 - f32(commonBits) / f32(totalOnBits - commonBits);\n `},[Z.LEVENSTEIN]:function(t,e){return`\n let aLength: u32 = computeInfo.entrySizes[${e}][aIndex];\n let bLength: u32 = computeInfo.entrySizes[${e}][bIndex];\n let maxLength: u32 = max(aLength, bLength);\n let minLength: u32 = min(aLength, bLength);\n\n let maxIntDistance = ceil(maxDistance * f32(maxLength));\n\n // we will store two arrays as matrix and swap the working indices per pass.\n // this way we can reduce memory usage per computation to just O(aLength)\n // the grid will have aLength + 1 columns and bLength + 1 rows\n // this will be guaranteed by iteration, but the array sizes must be known at compile time, so we will use a fixed size of maxArraySize\n var dynamicPassMat: array<array<f32, ${t+1}u>, 2>; // initialize to 0\n \n var prevIndex: u32 = 0;\n var curIndex: u32 = 1; // we will swap these indices per pass\n\n // initialize the first row\n for (var i = 0u; i <= aLength; i = i + 1u) {\n dynamicPassMat[prevIndex][i] = f32(i);\n }\n\n // iterate over the rows\n for (var i = 1u; i <= bLength; i = i + 1u) {\n dynamicPassMat[curIndex][0] = f32(i);\n var minEntry: f32 = f32(maxLength);\n let prevRow = &dynamicPassMat[prevIndex];\n let curRow = &dynamicPassMat[curIndex];\n let bMon = u32(b[i - 1]);\n for (var j = 1u; j <= aLength; j = j + 1u) {\n var cost: f32 = f32(a[j - 1] != bMon);\n var res: f32 = min(\n min(\n (*prevRow)[j] + 1.0, // deletion\n (*curRow)[j - 1] + 1.0, // insertion\n ),\n (*prevRow)[j - 1] + cost // substitution\n );\n (*curRow)[j] = res;\n if (res < minEntry) {\n minEntry = res;\n }\n }\n // swap the indices\n let temp: u32 = prevIndex;\n prevIndex = curIndex;\n curIndex = temp;\n if (minEntry > maxIntDistance) {\n return 1.0;\n }\n }\n\n return dynamicPassMat[prevIndex][aLength] / f32(maxLength);\n `},[Z.NEEDLEMAN_WUNSCH]:function(t,e){return`\n let aLength: u32 = computeInfo.entrySizes[${e}][aIndex];\n let bLength: u32 = computeInfo.entrySizes[${e}][bIndex];\n let maxLength: u32 = max(aLength, bLength);\n let minLength: u32 = min(aLength, bLength);\n \n let maxIntDistance = ceil(maxDistance * f32(maxLength));\n // we will store two arrays as matrix and swap the working indices per pass.\n // this way we can reduce memory usage per computation to just O(aLength)\n // the grid will have aLength + 1 columns and bLength + 1 rows\n // this will be guaranteed by iteration, but the array sizes must be known at compile time, so we will use a fixed size of maxArraySize\n var dynamicPassMat: array<array<f32, ${t+1}u>, 2>; // initialize to 0\n \n // we need to keep track of which operation led to the current cell\n // i.e. whether we came from the left, top or diagonal to assign gap open/gap extend penalty\n var verticalGaps: array<u32, ${t+1}u>;\n var horizontalGaps: array<u32, ${t+1}u>;\n\n let gapOpenPenalty: f32 = suppInfo.gapOpenPenalty${e};\n let gapExtensionPenalty: f32 = suppInfo.gapExtensionPenalty${e};\n var prevIndex: u32 = 0;\n var curIndex: u32 = 1; // we will swap these indices per pass\n // initialize the first row\n for (var i = 0u; i <= aLength; i = i + 1u) {\n dynamicPassMat[prevIndex][i] = gapExtensionPenalty + f32(i - 1) * gapExtensionPenalty; // accounting for the fact that left and right gaps are less costly\n dynamicPassMat[curIndex][i] = 0.0;\n }\n dynamicPassMat[0][0] = 0.0;\n\n let simMatrix = &suppInfo.similarityMatrix${e}; // using pointers make things faster\n // iterate over the rows\n for (var i = 1u; i <= bLength; i = i + 1u) {\n let prevRow = &dynamicPassMat[prevIndex];\n let curRow = &dynamicPassMat[curIndex];\n (*curRow)[0] = gapExtensionPenalty + f32(i - 1) * gapExtensionPenalty;\n var minEntry: f32 = f32(maxLength);\n let monB = u32(b[i - 1]);\n for (var j = 1u; j <= aLength; j = j + 1u) {\n let monA = u32(a[j - 1]);\n \n let cost: f32 = (*prevRow)[j - 1] + 1f - (*simMatrix)[monA][monB];\n var top = (*prevRow)[j]; // deletion\n if (verticalGaps[j] > 0 || i == 1 || i == bLength) {\n top = top + gapExtensionPenalty;\n } else {\n top = top + gapOpenPenalty;\n }\n var left = (*curRow)[j - 1]; // insertion\n if (horizontalGaps[j - 1] > 0 || j == 1 || j == aLength) {\n left = left + gapExtensionPenalty;\n } else {\n left = left + gapOpenPenalty;\n }\n var res: f32 = min(\n min(\n top, // deletion\n left, // insertion\n ),\n cost // substitution\n );\n (*curRow)[j] = res;\n if (res < minEntry) {\n minEntry = res;\n }\n // update the horizontal and vertical gaps\n if (res == cost) {\n verticalGaps[j] = 0;\n horizontalGaps[j] = 0;\n } else if (res == left) {\n verticalGaps[j] = 0;\n horizontalGaps[j] = 1;\n } else {\n verticalGaps[j] = 1;\n horizontalGaps[j] = 0;\n }\n }\n // swap the indices\n let temp: u32 = prevIndex;\n prevIndex = curIndex;\n curIndex = temp;\n if (minEntry > maxIntDistance) {\n return 1.0;\n }\n }\n return dynamicPassMat[prevIndex][aLength] / f32(minLength);\n\n `},[Z.MONOMER_CHEMICAL_DISTANCE]:function(t,e){return`\n let aLength: u32 = computeInfo.entrySizes[${e}][aIndex];\n let bLength: u32 = computeInfo.entrySizes[${e}][bIndex];\n let maxLength: u32 = max(aLength, bLength);\n let minLength: u32 = min(aLength, bLength);\n let sizeDiff: u32 = maxLength - minLength;\n \n let maxIntDistance = ceil(maxDistance * f32(maxLength)) - f32(sizeDiff);\n\n let simMatrix = &(suppInfo.similarityMatrix${e}); // using pointers make things faster\n var diff: f32 = 0.0;\n for (var i = 0u; i < ${t}; i = i + 1u) {\n diff = diff + 1.0 - (*simMatrix)[u32(a[i])][u32(b[i])];\n if (diff > maxIntDistance) {\n return 1.0;\n }\n }\n diff += f32(sizeDiff);\n return diff / ${t};\n `},[Z.SOKAL]:function(t,e){return`\n var onBitsa: u32 = 0u;\n var onBitsb: u32 = 0u;\n for (var i = 0u; i < ${t}u; i = i + 1u) {\n onBitsa = onBitsa + countOneBits(a[i]);\n onBitsb = onBitsb + countOneBits(b[i]);\n }\n let total = onBitsa + onBitsb;\n if (total == 0u) {\n return 1.0;\n }\n var commonBits: u32 = 0u;\n for (var i = 0u; i < ${t}u; i = i + 1u) {\n commonBits = commonBits + countOneBits(a[i] & b[i]);\n }\n return 1.0 - f32(commonBits) / f32(total * 2 - commonBits * 3);\n `},[Z.COSINE]:function(t,e){return`\n var onBitsa: u32 = 0u;\n var onBitsb: u32 = 0u;\n for (var i = 0u; i < ${t}u; i = i + 1u) {\n onBitsa = onBitsa + countOneBits(a[i]);\n onBitsb = onBitsb + countOneBits(b[i]);\n }\n let total = onBitsa * onBitsb; // p.s. here total is taken by multiplying\n if (total == 0u) {\n return 1.0;\n }\n var commonBits: u32 = 0u;\n for (var i = 0u; i < ${t}u; i = i + 1u) {\n commonBits = commonBits + countOneBits(a[i] & b[i]);\n }\n return 1.0 - f32(commonBits) / sqrt(f32(total));\n `},[Z.ASYMMETRIC]:function(t,e){return`\n var onBitsa: u32 = 0u;\n var onBitsb: u32 = 0u;\n for (var i = 0u; i < ${t}u; i = i + 1u) {\n onBitsa = onBitsa + countOneBits(a[i]);\n onBitsb = onBitsb + countOneBits(b[i]);\n }\n let min = min(onBitsa, onBitsb);\n if (min == 0u) {\n return 1.0;\n }\n var commonBits: u32 = 0u;\n for (var i = 0u; i < ${t}u; i = i + 1u) {\n commonBits = commonBits + countOneBits(a[i] & b[i]);\n }\n return 1.0 - f32(commonBits) / f32(min);\n `},[Z.Difference]:function(t,e){return`\n let range = suppInfo.range${e};\n return f32(abs(f32(a[0]) - f32(b[0])) / range);\n `},[Z.OneHot]:function(t,e){return`\n let aLength: u32 = computeInfo.entrySizes[${e}][aIndex];\n let bLength: u32 = computeInfo.entrySizes[${e}][bIndex];\n if (aLength != bLength) {\n return 1.0;\n }\n for (var i = 0u; i < aLength; i = i + 1u) {\n if(a[i] != b[i]) {\n return 1.0;\n }\n }\n return 0.0;\n `}},Q={[Z.HAMMING]:t=>Math.ceil(t/30),[Z.EUCLIDEAN]:t=>Math.ceil(t/30),[Z.MANHATTAN]:t=>Math.ceil(t/30),[Z.TANIMOTO]:t=>Math.ceil(t/30),[Z.SOKAL]:t=>Math.ceil(t/30),[Z.COSINE]:t=>Math.ceil(t/30),[Z.ASYMMETRIC]:t=>Math.ceil(t/30),[Z.LEVENSTEIN]:t=>Math.ceil(t*t/60),[Z.NEEDLEMAN_WUNSCH]:t=>Math.ceil(t*t/60),[Z.MONOMER_CHEMICAL_DISTANCE]:t=>Math.ceil(t/25),[Z.Difference]:t=>1,[Z.OneHot]:t=>Math.ceil(t/40),[Z.VECTOR_COSINE]:t=>Math.ceil(t/30)},tt={STRING:new Set([Z.HAMMING,Z.LEVENSTEIN,Z.NEEDLEMAN_WUNSCH,Z.MONOMER_CHEMICAL_DISTANCE,Z.OneHot]),UINT32ARRAY:new Set([Z.HAMMING,Z.EUCLIDEAN,Z.MANHATTAN,Z.MONOMER_CHEMICAL_DISTANCE,Z.LEVENSTEIN,Z.NEEDLEMAN_WUNSCH,Z.TANIMOTO,Z.COSINE,Z.VECTOR_COSINE,Z.SOKAL,Z.ASYMMETRIC,Z.OneHot,Z.Difference]),INT32ARRAY:new Set([Z.EUCLIDEAN,Z.MANHATTAN,Z.OneHot,Z.Difference,Z.VECTOR_COSINE]),FLOAT32ARRAY:new Set([Z.EUCLIDEAN,Z.MANHATTAN,Z.Difference,Z.VECTOR_COSINE]),NUMBER:new Set([Z.EUCLIDEAN,Z.MANHATTAN,Z.Difference]),BITARRAY:new Set([Z.TANIMOTO,Z.COSINE,Z.SOKAL,Z.ASYMMETRIC])};var et=function(t,e,n,i){return new(n||(n=Promise))((function(r,o){function s(t){try{l(i.next(t))}catch(t){o(t)}}function a(t){try{l(i.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?r(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,a)}l((i=i.apply(t,e||[])).next())}))};function nt(t,e,n,i){return t.map(((t,i)=>`\n fn distanceScript${i}(aIndex: u32, bIndex: u32) -> f32 {\n let a = computeInfo.data${i}[aIndex];\n let b = computeInfo.data${i}[bIndex];\n let maxDistance: f32 = ${n};\n ${J[t](e[i],i)}\n }\n `)).join("\n")+"\n"+`\n fn combinedDistance(aIndex: u32, bIndex: u32) -> f32 {\n var distances: array<f32, ${t.length}>;\n ${t.map(((t,e)=>`distances[${e}] = distanceScript${e}(aIndex, bIndex);`)).join("\n")}\n ${K[i](t.length)}\n }\n \n `}var it=n(1991),rt=n.n(it);let ot=0;const st="cliffsDf",at=new h.Subject,lt="Δ activity",ct="SALI",ht="Similarity",ut="line index",dt=["From","To"],pt="filterCliffs";async function mt(t,e,i,r,l,c,h,u,d,p,m,f,g,y,b,v,w){ot++;const C=c/100;let A,S=!1;const x=f.inputs,I=await f.apply({[x[0].name]:e,[x[1].name]:h,...d.preprocessingFuncArgs??{}});let T=[];if(u===N){const e=await function(t,e,i,r,o,s,a=10,l=!1,c=2){const h=new Worker(new URL(n.p+n.u(980),n.b));let u;return h.postMessage({data:t,threshold:e,weights:i,aggregationMethod:r,distanceFns:o,distanceFnArgs:s,maxIterations:a,useWebGPU:l,inflate:c}),{promise:new Promise(((t,e)=>{u=t,h.onmessage=e=>{setTimeout((()=>h.terminate()),100),t(e.data.res)},h.onerror=t=>{setTimeout((()=>h.terminate()),100),e(t)}})),terminate:()=>{try{u(null),h.terminate()}catch(t){console.error(t)}}}}([I.entries],c,[1],"MANHATTAN",[h],[I.options??{}],d?.maxIterations??5,d.useWebGPU??!1).promise;t.columns.addNewInt(t.columns.getUnusedName("MCL Cluster")).init((t=>e.clusters[t])),T=[e.embedX,e.embedY]}else T=await Y([I.entries],u,[h],[1],"MANHATTAN",{...d,distanceFnArgs:[I.options??{}]});if(T.length!==i.length)throw new Error("Number of axes names should be equal to number of embedding dimensions");for(let e=0;e<T.length;++e)t.columns.addNewFloat(i[e]).init((t=>T[e][t]));let L=null;if(d.useWebGPU)try{L=await function(t,e=.8,n,i,r,o){return et(this,void 0,void 0,(function*(){const s=yield function(){return E(this,void 0,void 0,(function*(){if(!navigator.gpu)return console.error("WebGPU is not supported in this browser"),null;if(!M&&(M=yield navigator.gpu.requestAdapter({powerPreference:"high-performance"}),null==M))return null;let t=!1;if(_&&(_.lost.then((()=>{t=!0})),yield new Promise((t=>setTimeout(t,10)))),!_||t){const t=1e9,e=M.limits,n=e.maxBufferSize,i=e.maxStorageBufferBindingSize;try{return _=yield M.requestDevice({requiredLimits:{maxBufferSize:Math.min(n,t),maxStorageBufferBindingSize:Math.min(i,t)}}),_}catch(t){return console.error("Failed to create device with required limits",t),_=yield M.requestDevice(),_}}return _}))}();if(!s)return null;const a=Object.values(Z);if(n.some((t=>!a.includes(t))))throw new Error("Invalid distance metrics provided: "+n.join(", "));if(!Object.values(U).includes(i))throw new Error("Invalid aggregation function provided: "+i);const l=1-e;if(o.length!==t.length||o.length!==n.length||o.length!==r.length)throw new Error("Options, weigths and distance functions must be provided for each column");if(t.some((e=>e.length!==t[0].length)))throw new Error("All entry lists must be the same length");const c=t.length,h=t[0].length,u=t.map(((t,e)=>function(t,e=Z.HAMMING,n,i={gapOpenPenalty:1,gapExtensionPenalty:.6}){var r,o;let s=null;const a=t.some((t=>"string"==typeof t))?(s="STRING",t.map((t=>new Uint32Array(t.split("").map((t=>t.charCodeAt(0))))))):t.some((t=>"number"==typeof t))?(s="NUMBER",t.map((t=>new Float32Array([t])))):"object"==typeof t[0]&&t.some((t=>"_data"in t&&"_length"in t))?(s="BITARRAY",t.map((t=>t._data))):t.some((t=>t instanceof Float32Array))?(s="FLOAT32ARRAY",t):t.some((t=>t instanceof Uint32Array))?(s="UINT32ARRAY",t):t.some((t=>t instanceof Int32Array))?(s="INT32ARRAY",t):void 0;if(!a||!s)throw new Error("Invalid entry type, could not determine entry type from input list");const l=a[0]instanceof Int32Array?"INT32ARRAY":a[0]instanceof Float32Array?"FLOAT32ARRAY":"UINT32ARRAY",c=new Uint32Array(a.map((t=>t.length)));if(!tt[s]||!tt[s].has(e))throw new Error(`Distance metric '${e}' not supported for entry type '${s}'`);const h=c.reduce(((t,e)=>Math.max(t,e)),0),u=Q[e](h),d="INT32ARRAY"===l?Int32Array:"FLOAT32ARRAY"===l?Float32Array:Uint32Array,p=new d(a.length*h);a.forEach(((t,e)=>{p.set(t,e*h)}));let m="",f=0,g="FLOAT32ARRAY",y=null;if(e===Z.NEEDLEMAN_WUNSCH||e===Z.MONOMER_CHEMICAL_DISTANCE){let t=i.scoringMatrix&&i.alphabetIndexes?Object.keys(i.alphabetIndexes).reduce(((t,e)=>Math.max(t,e.charCodeAt(0))),0):-1;if(!i.alphabetIndexes||!i.scoringMatrix){for(let e=0;e<p.length;e++)p[e]>t&&(t=p[e]);i.scoringMatrix=new Array(t+1).fill(null).map((()=>new Array(t+1).fill(0))),i.alphabetIndexes={};for(let t=0;t<i.scoringMatrix.length;t++)i.scoringMatrix[t][t]=1,i.alphabetIndexes[String.fromCharCode(t)]=t}const e=(t+1)*(t+1),s=new Array(t+1).fill(null).map((()=>new Float32Array(t+1)));for(let e=0;e<t+1;e++)s[e][e]=1;const a=i.alphabetIndexes;for(const t of Object.keys(a))for(const e of Object.keys(a))t!==e&&(s[t.charCodeAt(0)][e.charCodeAt(0)]=i.scoringMatrix[a[t]][a[e]]);f=2+e,g="FLOAT32ARRAY",y=new Float32Array(f),y[0]=null!==(r=i.gapOpenPenalty)&&void 0!==r?r:1,y[1]=null!==(o=i.gapExtensionPenalty)&&void 0!==o?o:.6;let l=2;for(let t=0;t<s.length;t++)y.set(s[t],l),l+=s[t].length;m=`\n gapOpenPenalty${n}: f32,\n gapExtensionPenalty${n}: f32,\n similarityMatrix${n}: array<array<f32, ${t+1}>, ${t+1}>`}else if(e===Z.Difference){if(!i.range||"number"!=typeof i.range||i.range<=0){const t=p.reduce(((t,e)=>Math.min(t,e)),p[0]),e=p.reduce(((t,e)=>Math.max(t,e)),p[0]);i.range=e-t}i.range<=0&&(i.range=1),f=1,g="FLOAT32ARRAY",y=new Float32Array([i.range]),m=`\n range${n}: f32`}const b=p instanceof Int32Array?"i32":p instanceof Float32Array?"f32":"u32",v=`data${n}: array<array<${b}, ${h}>, ${a.length}>`;return{flatSourceArray:p,sourceArraySize:p.length,maxEntryLen:h,arraySizes:c,complexity:u,suppInfoBuffer:y,suppInfoSize:f,suppInfoType:g,suppInfoStructWgsl:m,entryType:s,dataTypeWGSL:b,dataStructWgsl:v,EncodedArrayConstructor:d}}(t,n[e],e,o[e])));if(0===c)throw new Error("No columns provided. Please provide at least one column of data.");1===c&&(i=U.MANHATTAN);let d=u.map((t=>t.suppInfoStructWgsl)).filter((t=>!!t&&""!=t)).join(",\n"),p=!1;d&&""!=d.trim()||(p=!0,d="\ndummy: f32\n");const m=u.map((t=>t.dataStructWgsl)).filter((t=>!!t&&""!=t)).join(",\n"),f=new Uint32Array(c*h);u.forEach(((t,e)=>{f.set(t.arraySizes,e*h)}));const g=1e4,y=100,b=u.reduce(((t,e)=>t+e.complexity),0),v=Math.ceil(6e3/b),w=Math.ceil(Math.sqrt(Math.ceil(100))),C=10*w,A=h*(h-1)/2,S=Math.ceil(A/g),x=s.createShaderModule({label:"Sparse matrix compute shader",code:`\n // each thread will perform 100 iterations at one time, comparing 100 pairs of entries.\n // in total, each thread will perform at most ${S} comparisons.\n // first is the result struct, containing is, js, and distances. each array with length of 100,\n // and also integer for how many pairs were found to be below threshold.\n struct SparseResult {\n i: array<array<u32, 100>, 10000>,\n j: array<array<u32, 100>, 10000>,\n distances: array<array<f32, 100>, 10000>,\n found: array<u32, 10000>,\n done: array<u32, 10000>\n }\n // struct for the data\n struct ComputeInfo {\n // start at cols and rows, and end at cols and rows for each thread, these will be calculated on cpu and passed to gpu.\n startAtCols: array<u32, 10000>,\n startAtRows: array<u32, 10000>,\n endAtCols: array<u32, 10000>,\n endAtRows: array<u32, 10000>,\n\n // the ACTUALLY sizes of each entry\n entrySizes: array<array<u32, ${h}>, ${c}>,\n // the weights for each entry\n weights: array<f32, ${c}>,\n // the data for each entry\n ${m} // an example of the dataWgsl would be:\n //data0: array<array<u32,20>,100>,\n //data1: array<array<u32,20>,100>\n }\n\n // struct for the supplementary information\n struct SuppInfo {\n // struct containing all the supplementary info, like scoring matrix, alphabet indexes, range, etc.\n ${d}\n };\n\n @group(0) @binding(0) var<storage, read_write> computeInfo: ComputeInfo;\n @group(0) @binding(1) var<storage, read_write> suppInfo: SuppInfo;\n @group(0) @binding(2) var<storage, read_write> results: SparseResult;\n @compute @workgroup_size(10, 10) fn calcSparseMatrix(\n @builtin(global_invocation_id) id: vec3<u32>\n ) {\n ${p?"let otherDummy = suppInfo.dummy * 2;":""} // just to make sure that the suppInfo is not optimized out\n let threadCol = id.x;\n let threadRow = id.y;\n let linearIndex = threadRow * ${C} + threadCol;\n if (linearIndex >= 10000) {\n return; // if we are out of bounds, return\n } \n var startAtCol: u32 = computeInfo.startAtCols[linearIndex];\n var startAtRow: u32 = computeInfo.startAtRows[linearIndex];\n let endAtCol: u32 = min(computeInfo.endAtCols[linearIndex], ${h}u);\n let endAtRow: u32 = min(computeInfo.endAtRows[linearIndex], ${h}u);\n let is = &results.i[linearIndex];\n let js = &results.j[linearIndex];\n let distances = &results.distances[linearIndex];\n results.found[linearIndex] = 0; // initialize the found counter\n var found: u32 = 0;\n if (results.done[linearIndex] > 0) {\n return; // if we are done, return\n }\n for (var i = 0; i < ${v}; i++) {\n if (startAtCol >= endAtCol && startAtRow >= endAtRow) {\n results.done[linearIndex] = 1;\n break;\n }\n if (found >= 100) {\n break;\n }\n let dist = combinedDistance(startAtCol, startAtRow);\n if (dist <= ${l}) {\n (*is)[found] = startAtCol;\n (*js)[found] = startAtRow;\n (*distances)[found] = dist;\n found = found + 1;\n }\n startAtCol = startAtCol + 1;\n if (startAtCol >= ${h}u) {\n startAtRow += 1;\n startAtCol = startAtRow + 1;\n }\n }\n results.found[linearIndex] = found;\n // update the startAtCols and startAtRows\n computeInfo.startAtCols[linearIndex] = startAtCol;\n computeInfo.startAtRows[linearIndex] = startAtRow;\n\n }\n\n // this will generate the distance script for each distance metric and then combine them into one\n ${nt(n,u.map((t=>t.maxEntryLen)),l,i)}\n\n\n `}),I=s.createComputePipeline({label:"sparse matrix compute pipeline",layout:"auto",compute:{module:x,entryPoint:"calcSparseMatrix"}}),T=new Uint32Array(g),L=new Uint32Array(g),N=new Uint32Array(g),P=new Uint32Array(g),$=Math.floor(A/g);let R=0,O=1;console.time("GPUthreadStarts");for(let t=0;t<g;t++){const e=9999===t?A-1:(t+1)*$,n=h-2-Math.floor(Math.sqrt(-8*e+4*h*(h-1)-7)/2-.5),i=e-h*n+Math.floor((n+1)*(n+2)/2);T[t]=O,L[t]=R,N[t]=i,P[t]=n,R=n,O=i}console.timeEnd("GPUthreadStarts");const k=4e4+h*c+c+u.reduce(((t,e)=>t+e.sourceArraySize),0),G=u.reduce(((t,e)=>t+e.suppInfoSize),0),F=1e6,H=k*Uint32Array.BYTES_PER_ELEMENT;let B=H;const D=15&H;0!==D&&(B+=16-D);const V=s.createBuffer({label:"compute info buffer",size:B,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST,mappedAtCreation:!0}),j=V.getMappedRange();let W=0;new Uint32Array(j,W,g).set(T),W+=g*Uint32Array.BYTES_PER_ELEMENT,new Uint32Array(j,W,g).set(L),W+=g*Uint32Array.BYTES_PER_ELEMENT,new Uint32Array(j,W,g).set(N),W+=g*Uint32Array.BYTES_PER_ELEMENT,new Uint32Array(j,W,g).set(P),W+=g*Uint32Array.BYTES_PER_ELEMENT,new Uint32Array(j,W,f.length).set(f),W+=f.length*Uint32Array.BYTES_PER_ELEMENT,new Float32Array(j,W,c).set(r),W+=c*Float32Array.BYTES_PER_ELEMENT;for(const t of u){const e=t.EncodedArrayConstructor,n=t.sourceArraySize;new e(j,W,n).set(t.flatSourceArray),W+=n*e.BYTES_PER_ELEMENT}V.unmap();const q=G*Uint32Array.BYTES_PER_ELEMENT;let z=q;const Y=15&q;0!==Y&&(z+=16-Y),z=Math.max(z,16);const K=s.createBuffer({label:"supp info buffer",size:z,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST,mappedAtCreation:!0}),X=K.getMappedRange();let J=0;for(const t of u)t.suppInfoBuffer&&t.suppInfoBuffer.byteLength>0&&t.suppInfoSize>0&&(new("UINT32ARRAY"===t.suppInfoType?Uint32Array:Float32Array)(X,J,t.suppInfoBuffer.length).set(t.suppInfoBuffer),J+=t.suppInfoBuffer.byteLength);0===J&&new Uint32Array(X,0,4).set([1,1,1,1]),K.unmap();const et=302e4*Uint32Array.BYTES_PER_ELEMENT;let it=et;const rt=15&et;0!==rt&&(it+=16-rt);const ot=s.createBuffer({label:"results buffer",size:it,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC}),st=s.createBindGroup({label:"bindGroup for sparse matrix buffer",layout:I.getBindGroupLayout(0),entries:[{binding:0,resource:{buffer:V}},{binding:1,resource:{buffer:K}},{binding:2,resource:{buffer:ot}}]}),at=s.createBuffer({label:"results out buffer",size:ot.size,usage:GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST}),lt=[],ct=[],ht=[];let ut=!1;for(;!ut;){const t=s.createCommandEncoder({label:"distance encoder"}),e=t.beginComputePass({label:"distance compute pass"});e.setPipeline(I),e.setBindGroup(0,st),e.dispatchWorkgroups(w,w),e.end(),t.copyBufferToBuffer(ot,0,at,0,at.size);const n=t.finish();s.queue.submit([n]),yield s.queue.onSubmittedWorkDone(),yield at.mapAsync(GPUMapMode.READ);const i=at.getMappedRange();let r=0;const o=new Uint32Array(i,r,F);r+=F*Uint32Array.BYTES_PER_ELEMENT;const a=new Uint32Array(i,r,F);r+=F*Uint32Array.BYTES_PER_ELEMENT;const l=new Float32Array(i,r,F);r+=F*Float32Array.BYTES_PER_ELEMENT;const c=new Uint32Array(i,r,g);r+=g*Uint32Array.BYTES_PER_ELEMENT,ut=new Uint32Array(i,r,g).every((t=>1===t));const h=c.reduce(((t,e)=>t+e),0),u=new Uint32Array(h),d=new Uint32Array(h),p=new Float32Array(h);let m=0;for(let t=0;t<c.length;t++){const e=c[t];0!==e&&(u.set(o.subarray(t*y,t*y+e),m),d.set(a.subarray(t*y,t*y+e),m),p.set(l.subarray(t*y,t*y+e),m),m+=e)}lt.push(u),ct.push(d),ht.push(p),at.unmap()}const dt=lt.reduce(((t,e)=>t+e.length),0),pt=new Uint32Array(dt),mt=new Uint32Array(dt),ft=new Float32Array(dt);let gt=0;for(let t=0;t<lt.length;t++)pt.set(lt[t],gt),mt.set(ct[t],gt),ft.set(ht[t],gt),gt+=lt[t].length;return V.destroy(),K.destroy(),ot.destroy(),at.destroy(),{i:pt,j:mt,distance:ft}}))}([I.entries],C,[h],U.MANHATTAN,[1],[I.options??{}])}catch(t){console.error(t)}L||(d.useWebGPU&&console.error("WebGPU sparse matrix calculation failed, falling back to CPU implementation"),L=await(new H).calc(I.entries,h,C,I.options));const P=await async function(t,e){const n=t.distance.map(((n,i)=>{const r=Math.abs(e.get(t.i[i])-e.get(t.j[i]));return 0!=n?r/n:1/0})),i=t.distance.map((t=>1-t)),r=t.i,o=t.j,s=a.BitSet.create(e.length);return t.distance.forEach(((e,n)=>{s.set(t.i[n],!0),s.set(t.j[n],!0)})),{simVals:i,saliVals:n,n1:r,n2:o,cliffsBitSet:s}}(L,l),$=function(t,e,n,i,r,o,s){const l=new Array(t).fill(0);for(let t=0;t!=i.length;++t)n[t]!=1/0&&(s.get(i[t])>s.get(r[t])?l[i[t]]+=n[t]:l[r[t]]+=n[t]);return a.Column.fromList("double",e,l)}(e.length,`sali_${i[0].substring(i[0].lastIndexOf("_"))}`,P.saliVals,P.n1,P.n2,0,l);t.columns.add($);const O=P.cliffsBitSet,k=function(t){const e=t.filter((t=>t!==1/0)),n=e.reduce(((t,e)=>Math.min(t,e)),Number.MAX_VALUE);return{max:e.reduce(((t,e)=>Math.max(t,e)),n),min:n}}(P.saliVals),G=.8/(k.max-k.min),F=o.shell.getTableView(t.name),D=F.addViewer(a.VIEWER.SCATTER_PLOT,{xColumnName:i[0],yColumnName:i[1],size:$.name,color:l.name,showXSelector:!1,showYSelector:!1,showSizeSelector:!1,showColorSelector:!1,markerMinSize:5,markerMaxSize:25,title:r}),V=function(t,e,n,i,r,o,s,l){const c={from:new Uint32Array(e.n1.length),to:new Uint32Array(e.n1.length),opacities:new Float32Array(e.n1.length),colors:new Array(e.n1.length),widths:new Float32Array(e.n1.length)};for(let n=0;n<e.n1.length;n++)c.from[n]=e.n1[n],c.to[n]=e.n2[n],c.opacities[n]=e.saliVals[n]===1/0?1:.2+(e.saliVals[n]-s.min)*l,c.colors[n]=t.selection.get(c.from[n])&&t.selection.get(c.to[n])?"255,255,0":"0,128,0",c.widths[n]=1;const h=a.DataFrame.create(c.from.length);return dt.forEach(((t,e)=>{h.columns.addNewString(t).init((t=>n.get(0===e?c.from[t]:c.to[t]))),function(t,e){Object.keys(e).forEach((n=>{t.tags[n]=e[n]}))}(h.col(t),o),h.col(t).semType=r})),h.columns.addNewFloat(lt).init((t=>Math.abs(i.get(c.from[t])-i.get(c.to[t])))),h.columns.addNewInt(ut).init((t=>t)),h.columns.addNewFloat(ct).init((t=>e.saliVals[t])),h.columns.addNewFloat(ht).init((t=>e.simVals[t])),h.name=`${st}${ot}`,{lines:c,linesDf:h}}(t,P,e,l,p,m,k,G);V.lines.skipMultiLineCalculation=!0,V.linesDf.col(ct).setTag("description","Structure−Activity Landscape Index (activity difference divided by 1 minus similarity)");const W=new j(D,i[0],i[1],V.lines,B.none),q=b?b(V.linesDf,dt).sort([ct],[!1]):V.linesDf.plot.grid().sort([ct],[!1]);q.col(ut)&&(q.col(ut).visible=!1),t.temp[".cliffsDfGrid"]=q;const z=s.button(`${V.linesDf.rowCount} cliffs`,(()=>{const t=rt()(F.viewers).some((t=>t.dataFrame.name===`${st}${ot}`));w&&!t&&F.addViewer(q),F.dockManager.dock(q,"down",null,"Activity cliffs",v??.2)}));z.classList.add("scatter_plot_link","cliffs_grid");const K=s.input.toggle("Show only cliffs",{value:!1,onValueChanged:e=>{e?(D.dataFrame.setTag(pt,i[0]),t.filter.and(O),at.next(i[0])):(D.dataFrame.setTag(pt,""),t.filter.setAll(!0),at.next(""))}});D.root.prepend(s.divH([z,K.root],"cliffs_div")),at.subscribe((t=>{K.enabled=""===t||t===i[0]}));let X=!1;D.onEvent("d4-before-draw-scene").subscribe((e=>{X?X=!1:K.value&&(setTimeout((()=>{t.filter.and(O)}),100),X=!0)}));const J=o.events.onViewerClosed.subscribe((t=>{t.args.viewer===D&&(F.dockManager.close(q.root),J.unsubscribe(),F.subs=F.subs.filter((t=>t!==J)))}));return F.subs.push(J),V.linesDf.onCurrentCellChanged.subscribe((()=>{for(let t=0;t<V.linesDf.rowCount;t++)V.lines.widths[t]=t===V.linesDf.currentRowIdx?3:1;W.linesToRender=V.lines;const n=V.linesDf.currentCol&&V.linesDf.currentCol.name===dt[1]?V.lines.to:V.lines.from,r=-1!==V.linesDf.currentRowIdx?V.linesDf.currentRowIdx:null;if(D.dataFrame.currentRowIdx=r?n[r]:-1,null!==r){const n=V.linesDf.currentRowIdx;W.currentLineId=n;const{zoomLeft:a,zoomRight:c,zoomTop:h,zoomBottom:u}=function(t,e,n,i,r,o){const s=Math.abs(n-r),a=Math.abs(i-o),l=t/s,c=e/a,h=Math.min(l,c),u=t/h*5,d=e/h*5,p=(n<r?n:r)+s/2-u/2,m=(i>o?i:o)-a/2+d/2;return{zoomLeft:p,zoomRight:p+u,zoomTop:m,zoomBottom:m-d}}(D.viewport.width,D.viewport.height,D.dataFrame.get(i[0],V.lines.from[n]),D.dataFrame.get(i[1],V.lines.from[n]),D.dataFrame.get(i[0],V.lines.to[n]),D.dataFrame.get(i[1],V.lines.to[n]));D.zoom(a,h,c,u),K.value?t.filter.and(O):!0===K.enabled&&t.filter.setAll(!0),setTimeout((()=>{!function(t,e,n,i,r,a,l,c,h){const u=e.getPane("Cliff Details");s.empty(u.root);const d=h({points:[n,i],lineId:r,df:t,seqCol:a,activityCol:l,sali:c});u.root.append(d),setTimeout((()=>{o.shell.o=e.root}),500)}(t,A,V.lines.from[r],V.lines.to[r],r,e,l,V.linesDf.get(ct,r),y);const n=D.dataFrame.getSortedOrder(F.grid.sortByColumns,F.grid.sortTypes);F.grid.scrollToCell(e.name,n.indexOf(D.dataFrame.currentRowIdx))}),1e3)}})),V.linesDf.onSelectionChanged.subscribe((e=>{setTimeout((()=>(()=>{const e=a.BitSet.create(t.rowCount);for(let t=0;t<V.linesDf.rowCount;t++){const n=V.linesDf.selection.get(t);n&&(e.set(V.lines.from[t],!0),e.set(V.lines.to[t],!0)),V.lines.colors[t]=n?"255,255,0":"0,128,0"}t.selection.copyFrom(e),W.linesToRender=V.lines})()),100)})),t.onSelectionChanged.subscribe((e=>{!1===t.selection.anyTrue&&"number"==typeof e&&(S?S=!1:(t=>{t.selection.setAll(!1);for(let t=0;t<V.lines.colors.length;t++)V.lines.colors[t]="0,128,0";W.linesToRender=V.lines})(q.dataFrame))})),W.lineClicked.subscribe((e=>{if(S=!0,W.currentLineId=e.id,-1!==e.id){const n=V.linesDf.selection.clone();setTimeout((()=>{e.event.ctrlKey?(n.set(e.id,!n.get(e.id)),V.linesDf.selection.copyFrom(n)):(V.linesDf.currentRowIdx!==e.id&&(V.linesDf.currentRowIdx=e.id,t.currentRowIdx=V.lines.from[e.id]),V.linesDf.selection.copyFrom(n));const i=V.linesDf.getSortedOrder(q.sortByColumns,q.sortTypes);q.scrollToCell(dt[0],i.indexOf(e.id))}),500)}})),W.lineHover.pipe((0,R.debounceTime)(500)).subscribe((n=>{-1!==n.id&&-1===t.mouseOverRowIdx&&s.tooltip.show(g({lineId:n.id,points:[V.lines.from[n.id],V.lines.to[n.id]],df:t,seqCol:e,activityCol:l}),n.x,n.y)})),D.addProperty("similarityLimit","double",C),A=function(){const t=s.accordion(),e=s.element("i");return e.className="grok-icon svg-icon svg-view-layout",t.addTitle(s.span([e,s.label("Activity cliffs")])),t.addPane("Cliff Details",(()=>s.divText("Cliff has not been selected")),!0),o.shell.o=t.root,t}(),D}var ft,gt=n(2003),yt=n(3516),bt=n(6718),vt=n(3077),wt=n(439);!function(t){t.IDENTITY="identity",t.SIMILARITY="similarity"}(ft||(ft={}));var Ct=n(9192);class At{constructor(){this.maxIterations={uiName:"Max iterations",value:0,tooltip:"Maximum iterations for MCL process.Default is \n 0 which will construct the clusters with plain sparse matrix. Values greater than 0 will \n perform MCL with the given number of iterations and will result in trans-cluster activity cliff lines."},this.useWebGPU={uiName:"Use WebGPU",value:!1,tooltip:"Use WebGPU for MCL calculation. (Experimental)",type:"boolean"}}}class St extends ${constructor(t={}){super({...t,enableMCL:!0});const e=this.tableInput.value.columns.numericalNoDateTime;this.activitiesInput=s.input.column("Activities",{table:this.tableInput.value,value:a.Utils.firstOrNull(e),filter:t=>Array.from(e).includes(t)}),this.activitiesInputRoot=this.activitiesInput.root,this.similarityInput=s.input.int("Similarity cutoff",{value:80}),this.methodsParams[N]=new At}onTableInputChanged(){if(super.onTableInputChanged(),this.activitiesInputRoot){s.empty(this.activitiesInputRoot);const t=this.tableInput.value.columns.numerical;this.activitiesInput=s.input.column("Activities",{table:this.tableInput.value,value:a.Utils.firstOrNull(t),filter:e=>Array.from(t).includes(e)}),Array.from(this.activitiesInput.root.children).forEach((t=>this.activitiesInputRoot.append(t)))}}getEditor(){return s.div([this.tableInput,this.colInputRoot,this.preprocessingFunctionInputRoot,this.preprocessingFuncSettingsDiv,this.activitiesInputRoot,this.similarityMetricInputRoot,this.methodInput,this.methodSettingsDiv,this.similarityMetricInputRoot,this.similarityInput],{style:{minWidth:"320px"},classes:"ui-form dim-reduction-dialog-form"})}getParams(){return{...super.getParams(),activities:this.activitiesInput.value,similarityThreshold:this.similarityInput.value}}getInput(){return{...super.getInput(),activityCol:this.activitiesInput.value.name,simThreshold:this.similarityInput.value}}async applyInput(t){super.applyInput(t),this.activitiesInput.value=this.tableInput.value.col(t.activityCol),this.similarityInput.value=t.simThreshold}}var xt,Et,Mt,_t=function(t,e,n,i){return new(n||(n=Promise))((function(r,o){function s(t){try{l(i.next(t))}catch(t){o(t)}}function a(t){try{l(i.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?r(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,a)}l((i=i.apply(t,e||[])).next())}))};function It(t){const e=["Embed_X","Embed_Y"],n=t.columns.names().filter((t=>t.includes(e[0]))).length+1;return e.map((t=>`${t}_${n}`))}function Tt(t,e){return`${e} (${t.length>4?`${t.length} columns`:t.map((t=>t.name)).join(", ")})`}n(5540),function(t){t.ADD="ADD",t.SUB="SUB",t.MULT="MULT"}(xt||(xt={})),function(t){t.SQUARE="SQUARE",t.INVERSE="INVERSE",t.TRANSPOSE="TRANSPOSE",t.NORM="NORM",t.COLUMN_NORM="COLUMN_NORM"}(Et||(Et={})),function(t){t.SCALARMULT="SCALARMULT",t.SCALARADD="SCALARADD",t.SCALARPOW="SCALARPOW"}(Mt||(Mt={})),Object.prototype.toString;var Lt=n(6873),Nt=n(4356),Pt=n(6717),$t=n(4870),Rt=n(3856),Ot=n(6882),kt=n(7278),Gt=n(5553),Ft=n(6642),Ht=n(3599),Bt=n(673),Dt=n(8312);class Vt extends Ft.sD{monomerLib=null;seqHelper=null;constructor(t,e){super(t,e,Di.logger),(0,bt.pj)().then((t=>{this.monomerLib=t.getMonomerLib(),this.dirty=!0,this.gridCol?.grid?.invalidate(),this.subs.push(this.monomerLib.onChanged.subscribe((()=>{this.dirty=!0,this.gridCol?.grid?.invalidate()})))})),(0,Dt.Q)().then((t=>{this.seqHelper=t,this.dirty=!0,this.gridCol?.grid?.invalidate()}))}}var jt=n(4139);const Ut=new class{constructor(){this.seqHandler="seq-handler",this.notationProvider="seq-handler.notation-provider"}};class Wt extends a.SemanticValue{get value(){return this.seqHandler.column.get(this.rowIdx)}set value(t){this.seqHandler.column.set(this.rowIdx,t)}get helm(){return this.seqHandler.getHelm(this.rowIdx)}isDna(){return this.seqHandler.alphabet===wt.YI.DNA}isRna(){return this.seqHandler.alphabet===wt.YI.RNA}isNaturalPeptide(){return this.seqHandler.alphabet===wt.YI.PT}isHelm(){return this.seqHandler.isHelm()}constructor(t,e){if(null==e.column.dataFrame)throw new Error("Attribute .dataFrame is required for SeqValueBase from cell");const n=e.column.dataFrame.cell(t,e.column.name);super(a.SemanticValue.fromTableCell(n).dart),this.rowIdx=t,this.seqHandler=e}getSplitted(){return this.seqHandler.getSplitted(this.rowIdx)}getSplittedWithSugarsAndPhosphates(){if(!this.isDna()&&!this.isRna())return this.getSplitted();const t=(0,kt.qp)(this.helm),e=[],n=/\(|\)/;for(let i=0;i<t.length;i++){const r=t.getOriginal(i),o=r.split(n).filter((t=>!!t));3===o.length?(e.push(o[0]),e.push(o[1]),e.push(o[2])):e.push(r)}return new kt.Mu(e,this.seqHandler.defaultGapOriginal)}}const qt=gt.zS;function zt(t){const e=!rt().enumerate(t).some((([e,n])=>e.length>1&&0!=n&&n!=t.length-1)),n=[],i=e?"":" ";for(const[e,r]of rt().enumerate(t)){let o=e;r<t.length&&(o+=`${e?"":"-"}${i}`),n.push(o)}return[n,e]}class Yt extends a.GridCellRenderer{seqHelper;get name(){return"sequence"}get cellType(){return"sequence"}get defaultHeight(){return 30}get defaultWidth(){return 230}hasMouseOver=!1;constructor(){super(),this.seqHelper=Di.seqHelper}getRendererBack(t){const[e,n,i]=(0,Ft.BG)(t);if(n.meta.units!==gt.Hi.CUSTOM)return i.rendererBack;let r=null;return this.seqHelper&&(r=this.seqHelper.getSeqHandler(n).getRendererBack(e,n)),r}onClick(t,e){if(t.cell.column.temp["current-word"]=t.cell.value,t.grid.invalidate(),t.cell.column.meta.units===gt.Hi.CUSTOM){const n=this.getRendererBack(t);n?.onClick(t,e)}}onMouseEnter(t,e){const n=this.getRendererBack(t);n?.onMouseEnter(t,e),this.hasMouseOver=!0}onMouseMove(t,e){const n=this.getRendererBack(t);n?.onMouseMove(t,e)}onMouseLeave(t,e){if((0,Gt.WN)(t,null),t?.grid){const e=t.grid.onEvent("d4-grid-show-tooltip").subscribe((t=>{e.unsubscribe(),this.hasMouseOver&&t.preventDefault()}))}this.hasMouseOver=!1}onDoubleClick(t,e){const n=this.getRendererBack(t);n?.onDoubleClick(t,e)}onKeyDown(t,e){const n=this.getRendererBack(t);n?.onKeyDown(t,e)}onKeyPress(t,e){const n=this.getRendererBack(t);n?.onKeyPress(t,e)}renderInt(t,e,n,i,r,o,s){const[a,l,c]=(0,Ft.BG)(o);if(!l)return;const h=l.temp,u=this.seqHelper.getSeqHandler(l);let d=(Di.properties?Di.properties.maxMonomerLength:4)??50;if(Rt.gp.maxMonomerLength in l.tags){const t=parseInt(l.getTag(Rt.gp.maxMonomerLength));d=!isNaN(t)&&t?t:50}if(".mm.cellRenderer.maxMonomerLength"in h){const t=h[".mm.cellRenderer.maxMonomerLength"];d=!isNaN(t)&&t?t:50}let p=c.rendererBack;p||(p=c.rendererBack=new Ot.Jy(a,l,Di.logger,d,(()=>{const{font:t,fontWidth:e}=Ot.Jy.getFontSettings(l);return{font:t,fontCharWidth:e,separatorWidth:u.isMsa()?8:0,monomerToShort:qt}})),l.temp[".mm.cellRenderer.settingsChanged"],Bt.s.true,p.init().then((()=>{}))),p.render(t,e,n,i,r,o,s)}render(t,e,n,i,r,o,s){if(o.cell.column?.meta?.units!==gt.Hi.CUSTOM)this.renderInt(t,e,n,i,r,o,s);else{const a=this.getRendererBack(o);a?.render(t,e,n,i,r,o,s)}}}class Kt extends Vt{constructor(t,e){super(t,e)}render(t,e,n,i,r,o,s){const a=window.devicePixelRatio,l=o.grid,c=o.cell.value??"",h=this.tableCol.tags[gt.gp.separator],u=this.tableCol.meta.units;i=(0,Ot.U0)(l,t,e,i,a);const[d,p]=c.split("#"),m=this.tableCol.temp[Ut.notationProvider]?.separatorSplitter??(0,kt.Iv)(u,h),f=m(d),g=m(p),y=rt().count(0).take(f.length).map((t=>f.getCanonical(t))).toArray(),b=rt().count(0).take(g.length).map((t=>g.getCanonical(t))).toArray(),v=this.tableCol.getTag(gt.gp.alphabet);Xt(t,e,n,i,r,y,b,v===gt.YI.RNA||v===gt.YI.DNA?Ht.o.NUCLEOTIDE:Ht.o.AA,this.monomerLib,void 0,void 0)}async awaitRendered(t=1e4,e=`${t} timeout`){return Promise.resolve()}static getOrCreate(t){const[e,n,i]=(0,Ft.BG)(t);let r=i.rendererBack;return r||(r=i.rendererBack=new Kt(e,n)),r}}class Zt extends a.GridCellRenderer{get name(){return"MacromoleculeDifferenceCR"}get cellType(){return jt.uF.MACROMOLECULE_DIFFERENCE}get defaultHeight(){return 30}get defaultWidth(){return 230}render(t,e,n,i,r,o,s){Kt.getOrCreate(o).render(t,e,n,i,r,o,s)}}function Xt(t,e,n,i,r,o,s,a,l,c,h){if(o.length!==s.length){const t=function(t,e){let n=0,i=0;const r=t.length>e.length?t:e,o=t.length>e.length?e:t;for(let t=0;t<o.length;t++)r[t]===o[t]&&n++;const s=r.length-o.length;for(let t=r.length-1;t>s;t--)r[t]===o[t-s]&&i++;const a=new Array(Math.abs(t.length-e.length)).fill(wt.b9[gt.Hi.FASTA]);function l(t){return n>i?t.concat(a):a.concat(t)}return t.length>e.length?e=l(rt()(e).toArray()):t=l(rt()(t).toArray()),{subParts1:t,subParts2:e}}(o,s);o=t.subParts1,s=t.subParts2}const u=t.measureText(zt(o).join("")),d=t.measureText(zt(s).join("")),p=Math.max(u.width,d.width);c&&(i=p+4*o.length,t.canvas.width=p+4*o.length);let m=Math.max(e,e+(i-(p+4*o.length))/2)+5;const f=Math.max(n,n+(r-28)/2);t.save();try{t.beginPath(),t.rect(e,n,c?p+4*o.length:i,r),t.clip(),t.font="12px monospace",t.textBaseline="top";const u=7;for(let e=0;e<o.length;e++){const n=o[e],c=s[e];let d=Ot.S$;if(l&&(d=l.getMonomerTextColor(a,n)),n!=c){let o=Ot.S$;l&&(o=l.getMonomerTextColor(a,c));const s=(0,Rt.oZ)(t,n,m,f-u,i,r,{color:d,pivot:0,left:!0}),p=(0,Rt.oZ)(t,c,m,f+u,i,r,{color:o,pivot:0,left:!0});m=Math.max(p,s),h&&(h[e]=Jt(n,c,d,o,f,u,r))}else m=(0,Rt.oZ)(t,n,m,f,i,r,{color:d,pivot:0,left:!0,transparencyRate:.5});m+=4}}finally{t.restore()}}function Jt(t,e,n,i,r,o,s){const a=document.createElement("canvas"),l=a.getContext("2d");l.font="12px monospace";const c=l.measureText(zt([t]).join("")).width,h=l.measureText(zt([e]).join("")).width,u=Math.max(c,h);return a.height=s,a.width=u+4,l.font="12px monospace",l.textBaseline="top",(0,Rt.oZ)(l,t,0,r-o,u,s,{color:n,pivot:0,left:!0}),(0,Rt.oZ)(l,e,0,r+o,u,s,{color:i,pivot:0,left:!0}),a}var Qt,te=n(8070),ee=n(4326);!function(t){t.Unknown="unknown",t.FR="framework",t.CDR="cdr"}(Qt||(Qt={}));const ne=new class{constructor(){this.regionTypes=[Qt.CDR],this.chains=["Heavy","Light"],this.skipEmptyPositions=!1,this.fitWidth=!1,this.positionWidth=16,this.positionHeight=ee.fH.Entropy,this.filterSource=ee.Fo.filterSource}};var ie=n(7602),re=n(250);const oe=Qt;var se,ae;!function(t){t.STYLE="Style",t.BEHAVIOR="Behavior",t.LAYOUT="Layout",t.DATA="Data"}(se||(se={})),function(t){t.skipEmptyPositions="skipEmptyPositions",t.regionTypes="regionTypes",t.chains="chains",t.fitWidth="fitWidth",t.positionWidth="positionWidth",t.positionHeight="positionHeight",t.filterSource="filterSource"}(ae||(ae={}));const le=ne;class ce extends a.JsViewer{viewed=!1;regionsFg=null;regionsRoot=null;isOpened=!1;panelNode=null;regions=[];regionTypes;chains;skipEmptyPositions;fitWidth;positionWidth;positionHeight;filterSource;constructor(){super(),this.skipEmptyPositions=this.bool(ae.skipEmptyPositions,le.skipEmptyPositions,{category:se.DATA}),this.regionTypes=this.stringList(ae.regionTypes,le.regionTypes,{category:se.DATA,choices:Object.values(oe).filter((t=>t!=oe.Unknown))}),this.chains=this.stringList(ae.chains,le.chains,{category:se.DATA,choices:["Heavy","Light"]}),this.fitWidth=this.bool(ae.fitWidth,le.fitWidth,{category:se.LAYOUT}),this.positionWidth=this.float(ae.positionWidth,le.positionWidth,{category:se.LAYOUT,editor:"slider",min:0,max:64,description:"Internal WebLogo viewers property width of position."}),this.positionHeight=this.string(ae.positionHeight,le.positionHeight,{category:se.LAYOUT,choices:Object.keys(ee.fH)}),this.filterSource=this.string(ae.filterSource,le.filterSource,{category:se.BEHAVIOR,choices:Object.values(ee.lT)}),this.viewSyncer=new ie.g(Di.logger)}static viewerCounter=-1;viewerId=++ce.viewerCounter;viewerToLog(){return`VdRegionsViewer<${this.viewerId}>`}async init(){this.subs.push((0,h.fromEvent)(this.root,"mousemove").subscribe(this.rootOnMouseMove.bind(this)))}detach(){const t=`${this.viewerToLog()}.detach()`,e=super.detach.bind(this);this.viewSyncer.sync(`${t}`,(async()=>{this.setDataInProgress||(this.viewed&&(await this.destroyView("detach"),this.viewed=!1),e())}))}onTableAttached(){super.onTableAttached(),this.setData(this.regions)}onPropertyChanged(t){if(super.onPropertyChanged(t),t){switch(t.name){case ae.regionTypes:case ae.chains:this.setData(this.regions)}switch(t.name){case ae.skipEmptyPositions:for(let t=0;t<this.logos.length;++t)for(const e of this.chains)this.logos[t][e].setOptions({[re.n5.skipEmptyPositions]:this.skipEmptyPositions});this.calcSize();break;case ae.fitWidth:case ae.positionWidth:this.calcSize();break;case ae.positionHeight:for(let t=0;t<this.logos.length;++t)for(const e of this.chains)this.logos[t][e].setOptions({[re.n5.positionHeight]:this.positionHeight});this.calcSize();break;case ae.filterSource:this.filterSourceInput.value=this.filterSource;break;default:this.setData(this.regions)}}else console.warn("Bio: VdRegionsViewer.onPropertyChanged() property is null")}setData(t){const e=`${this.viewerToLog()}.setData()`;Di.logger.debug(`${e}, in, regions.length = ${t.length}`),this.viewSyncer.sync(`${e}`,(async()=>{if(!this.setDataInProgress){this.setDataInProgress=!0;try{this.viewed&&(await this.destroyView("setData"),this.viewed=!1),this.regions=t,this.viewed||(await this.buildView("setData"),this.viewed=!0)}finally{this.setDataInProgress=!1}}}))}viewSyncer;setDataInProgress=!1;host=null;filterSourceInput;mainLayout=null;logos=[];viewSubs=[];async destroyView(t){Di.logger.debug(`Bio: VdRegionsViewer.destroyView( mainLayout = ${this.mainLayout?"value":"none"} ), purpose = '${t}', this.regions.length = ${this.regions.length}`),this.filterSourceInput&&s.empty(this.filterSourceInput.root),null!=this.mainLayout&&(this.mainLayout.remove(),this.host.remove(),this.host=null,this.mainLayout=null);for(const t of this.viewSubs)t.unsubscribe()}async buildView(t){Di.logger.debug(`Bio: VdRegionsViewer.buildView() begin, purpose = '${t}', this.regions.length = ${this.regions.length}`);const e=this.regions.filter((t=>this.regionTypes.includes(t.type))),n=Array.from(new Set(e.map((t=>t.order)))).sort(),i=[];for(let t=0;t<n.length;t++)for(const r of this.chains){const o=e.find((e=>e.order==n[t]&&e.chain==r));i.push((async()=>{const e=await this.dataFrame.plot.fromType("WebLogo",{sequenceColumnName:o.sequenceColumnName,startPositionName:o.positionStartName,endPositionName:o.positionEndName,fixWidth:!0,skipEmptyPositions:this.skipEmptyPositions,positionWidth:this.positionWidth,positionHeight:this.positionHeight,filterSource:this.filterSource});return e.onSizeChanged.subscribe((()=>{this.calcSize()})),[t,r,e]})())}const r=await Promise.all(i);this.logos=new Array(n.length);for(let t=0;t<n.length;++t)this.logos[t]={};for(const[t,e,n]of r)this.logos[t][e]=n,this.viewSubs.push(n.onFreqsCalculated.subscribe((()=>{this.calcSize()})));this.mainLayout=s.table(this.chains,(t=>[...n.length>0?[s.div(t,{style:{transform:"rotate(-90deg)",font:"12px Roboto, Roboto Local, sans-serif",textAlign:"center",width:"16px",marginTop:"24px",marginLeft:"6px"}})]:[],...[...Array(n.length).keys()].map((e=>{const n=this.logos[e][t];return n.root.style.height="100%",s.div([n.root],{style:{marginTop:"4px",marginBottom:"4px"}})}))]),["",...[...Array(n.length).keys()].map((t=>e.find((e=>e.order==n[t]&&e.chain==this.chains[0])).name||"Name"))]),this.mainLayout.className="mlb-vd-regions-viewer-table2",this.filterSourceInput=s.input.choice("Data source",{value:this.filterSource,items:Object.values(ee.lT),onValueChanged:this.filterSourceInputOnValueChanged.bind(this)}),this.filterSourceInput.root.style.position="absolute",this.filterSourceInput.root.style.right="9px",this.filterSourceInput.root.style.top="-4px",Math.ceil(255*Math.random()).toString(16),this.host=s.div([this.mainLayout,this.filterSourceInput.root],{}),this.root.appendChild(this.host),this.root.style.overflowX="auto",this.calcSize(),this.viewSubs.push(s.onSizeChanged(this.root).subscribe(this.rootOnSizeChanged.bind(this))),Di.logger.debug("Bio: VdRegionsViewer.buildView() end")}calcSizeRequested=!1;calcSize(){Di.logger.debug("Bio: VdRegionsViewer.calcSize(), start");const t=()=>{if(!this.host)return;const t=(this.root.clientHeight-54)/this.chains.length;let e=0;for(let n=0;n<this.logos.length;n++){for(const e of this.chains)this.logos[n][e].root.style.height=`${t}px`;e+=Math.max(...this.chains.map((t=>this.logos[n][t].Length)))}if(this.fitWidth){if(this.logos.length>0&&e>0){const t=22,n=13,i=9,r=(this.root.clientWidth-t-(this.logos.length-1)*i-n)/e;for(let t=0;t<this.logos.length;t++)for(const e of this.chains){const n=this.logos[t][e];n.setOptions({[re.n5.positionWidth]:r-n.positionMarginValue}),n.root.style.width=r*n.Length+"px"}}this.host.style.setProperty("overflow","hidden","important")}else{for(let t=0;t<this.logos.length;t++)for(const e of this.chains)this.logos[t][e].setOptions({[re.n5.positionWidth]:this.positionWidth});this.host.style.removeProperty("overflow")}0===this.positionWidth?this.host.style.setProperty("overflow-x","hidden","important"):this.host.style.removeProperty("overflow-x")};this.calcSizeRequested||(this.calcSizeRequested=!0,window.setTimeout((()=>{t(),this.calcSizeRequested=!1}),0))}rootOnSizeChanged(t){this.calcSize()}rootOnMouseMove(t){}filterSourceInputOnValueChanged(){const t=`${this.viewerToLog()}.filterSourceInputOnValueChanged()`,e=this.filterSourceInput.value;this.viewSyncer.sync(`${t}`,(async()=>{if(this.filterSource!==e){this.props.getProperty(ae.filterSource).set(this,e);for(let t=0;t<this.logos.length;t++)for(let e=0;e<this.chains.length;e++){const n=this.chains[e];this.logos[t][n].setOptions({[re.n5.filterSource]:this.filterSource})}}}))}_onRendered=new h.Subject;get onRendered(){return this._onRendered}invalidate(t){const e=`${this.viewerToLog()}.invalidate(${t?` <- ${t} `:""})`;this.viewSyncer.sync(`${e}`,(async()=>{this._onRendered.next()}))}async awaitRendered(t=5e3){await(0,te.PE)(this.onRendered,(()=>{}),(()=>{this.invalidate()}),t);const e=this.viewSyncer.resetErrors();if(e.length>0)throw e[0]}}var he=n(6625),ue=n(6863);async function de(t,e,n="Morgan"){const i=t.length,r=Di.seqHelper.getSeqHandler(t),o=Array(i);let s=1;const a=new Map,l=t.categories,c=t.getRawData();for(let e=0;e<i;e++){if(null===l[c[e]]||t.isNone(e)){o[e]=null;continue}o[e]="";const n=r.getSplitted(e);for(let t=0;t<n.length;t++){const i=n.getCanonical(t);a.has(i)||(a.set(i,String.fromCharCode(s)),s++),o[e]+=a.get(i)}}let h={};if(e===ue.Z.MONOMER_CHEMICAL_DISTANCE||e===ue.Z.NEEDLEMANN_WUNSCH){const t=Array.from(a.keys()),e=await(0,bt.A7)(t,n),i={};Object.entries(e.alphabetIndexes).forEach((([t,e])=>{i[a.get(t)]=e}));const r=o.reduce(((t,e)=>Math.max(t,e.length)),0);h={scoringMatrix:e.scoringMatrix,alphabetIndexes:i,maxLength:r}}return{seqList:o,options:h}}var pe=n(8115);function me(t){const e=s.divH([],{style:{gap:"10px"}}),n=s.divV([s.divText(t.seqCol.name),s.divText(t.activityCol.name)]);return n.style.fontWeight="bold",n.style.display="flex",n.style.justifyContent="space-between",e.append(n),t.points.forEach((n=>{const i=s.divText(t.activityCol.get(n).toFixed(2));i.style.display="flex",i.style.justifyContent="left",i.style.paddingLeft="30px",e.append(s.divV([s.divText(t.seqCol.get(n)),i]))})),e}function fe(t){const e=s.div();e.append(s.divText(t.seqCol.name,{style:{fontWeight:"bold"}}));const n=new Array(2);t.points.forEach(((e,i)=>{n[i]=t.activityCol.get(e)}));const i={},r=Di.seqHelper.getSeqHandler(t.seqCol),o=r.defaultBiotype,a=ye(r.getSplitted(t.points[0]),r.getSplitted(t.points[1]),o,i);return e.append(s.div(a,{style:{width:"300px",overflow:"scroll"}})),e.append(be(i)),e.append(ge("Activity delta",Math.abs(n[0]-n[1]))),e.append(ge("Cliff",t.sali)),e}function ge(t,e){return s.divH([s.divText(`${t}: `,{style:{fontWeight:"bold",paddingRight:"5px"}}),s.divText(e.toFixed(2))],{style:{paddingTop:"10px"}})}function ye(t,e,n,i){const r=document.createElement("canvas"),o=r.getContext("2d");r.height=30;const s=Di.monomerLib;return Xt(o,0,0,0,30,rt().count(0).take(t.length).map((e=>t.getCanonical(e))).toArray(),rt().count(0).take(e.length).map((t=>e.getCanonical(t))).toArray(),n,s,!0,i),r}function be(t){const e=s.div();if(Object.keys(t).length>0){const n=s.divV([]);n.append(s.divH([s.divText("Pos",{style:{fontWeight:"bold",width:"30px",borderBottom:"1px solid"}}),s.divText("Difference",{style:{fontWeight:"bold",borderBottom:"1px solid"}})]));for(const e of Object.keys(t))t[e].style.borderBottom="1px solid lightgray",n.append(s.divH([s.divText((parseInt(e)+1).toString(),{style:{width:"30px",borderBottom:"1px solid lightgray"}}),t[e]]));e.append(n)}return e}function ve(t,e){const n=a.Column.string("seq_diff",t.rowCount).init((n=>`${t.get(e[0],n)}#${t.get(e[1],n)}`));n.semType="MacromoleculeDifference",n.meta.units=t.col(e[0]).meta.units,n.setTag(gt.gp.separator,t.col(e[0]).getTag(gt.gp.separator)),t.columns.add(n);const i=t.plot.grid();return i.col(e[0]).visible=!1,i.col(e[1]).visible=!1,i}class we extends a.JsViewer{constructor(t,e){super(),this.name="",this.semType="",this.initialized=!1,this.gridSelect=!1,this.maxLimit=100,this.recomputeOnCurrentRowChange=!0,this.skipRecomputingProperies=[],this.debounceTimer=null,this.computeRequested=!1,this.renderPromise=Promise.resolve(),this.limit=this.int("limit",10,{min:1,max:this.maxLimit}),this.targetColumnName=this.string("targetColumnName",null,{...e?{semType:e}:{}}),this.name=t,this.semType=e}init(){this.initialized=!0}detach(){this.subs.forEach((t=>t.unsubscribe()))}async onTableAttached(){if(this.init(),this.dataFrame){this.subs.push(a.debounce(this.dataFrame.onRowsRemoved,50).subscribe((t=>this.render(!0))));const t="diversity"!==this.name;this.subs.push(a.debounce(this.dataFrame.onCurrentRowChanged,50).subscribe((e=>{this.gridSelect||this.render(t)}))),this.subs.push(a.debounce(this.dataFrame.selection.onChanged,50).subscribe((t=>this.render(!1)))),this.subs.push(a.debounce(s.onSizeChanged(this.root),50).subscribe((t=>this.render(!1)))),this.targetColumnName??(this.targetColumnName=this.dataFrame.columns.bySemType(this.semType).name),this.targetColumn=this.dataFrame.col(this.targetColumnName),this.getProperty("limit").fromOptions({min:1,max:this.maxLimit})}this.render()}onPropertyChanged(t){if(super.onPropertyChanged(t),this.initialized){if("targetColumnName"===t.name){const e=this.dataFrame.col(t.get(this));e.semType===this.semType&&(this.targetColumn=e)}this.debouncedRender()}}debouncedRender(t=!0){this.debounceTimer&&clearTimeout(this.debounceTimer),this.debounceTimer=setTimeout((()=>{this.render(t),this.debounceTimer=null}),100)}render(t=!0){this.renderPromise=this.renderPromise.then((async()=>{this.computeRequested=this.computeRequested||t,await this.renderInt(t)}))}async renderInt(t){}beforeRender(){return!(!this.initialized||this.dataFrame&&this.targetColumnName&&this.dataFrame.col(this.targetColumnName).semType!==this.semType&&(o.shell.error(`${this.targetColumnName} is not ${this.semType} type`),1))}}class Ce extends we{distanceMetric;fingerprint;metricsProperties=["distanceMetric","fingerprint"];fingerprintChoices=["Morgan","Pattern"];tags=[a.TAGS.UNITS,gt.gp.aligned,gt.gp.separator,gt.gp.alphabet,"cell.renderer"];preComputeDistanceMatrix=!1;constructor(t,e){super(t,e),this.fingerprint=this.string("fingerprint",this.fingerprintChoices[0],{choices:this.fingerprintChoices}),this.distanceMetric=this.string("distanceMetric",O.iS[0],{choices:O.iS})}async onTableAttached(){super.onTableAttached(),this.dataFrame&&(this.preComputeDistanceMatrix=this.dataFrame.rowCount<=22e3)}}const Ae={gapPenalty:1,matchScore:1,gapSymbol:wt.b9[wt.Hi.FASTA],localAlignment:!1};class Se extends Ce{seqHelper;cutoff;hotSearch;similarColumnLabel;sketchedMolecule="";curIdx=0;molCol=null;idxs=null;scores=null;gridSelect=!1;targetMoleculeIdx=0;computeCompleted=new h.Subject;distanceMatrixComputed=!1;mmDistanceMatrix;knn;kPrevNeighbors=0;demo;analysisGrid;subInited=!1;constructor(t,e){super("similarity",a.SEMTYPE.MACROMOLECULE),this.seqHelper=t,this.cutoff=this.float("cutoff",.01,{min:0,max:1}),this.hotSearch=this.bool("hotSearch",!0),this.similarColumnLabel=this.string("similarColumnLabel",null),this.demo=e}init(){this.hotSearch=!0,this.initialized=!0}async renderInt(t){if(this.beforeRender()&&this.targetColumn&&(this.curIdx=-1==this.dataFrame.currentRowIdx?0:this.dataFrame.currentRowIdx,t&&!this.gridSelect)){this.targetMoleculeIdx=(this.dataFrame.currentRowIdx??-1)<0?0:this.dataFrame.currentRowIdx,await this.computeByMM();const t=null!=this.similarColumnLabel?this.similarColumnLabel:`similar (${this.targetColumn})`;this.molCol=a.Column.string(t,this.idxs.length).init((t=>this.targetColumn?.get(this.idxs?.get(t)))),this.molCol.semType=a.SEMTYPE.MACROMOLECULE,this.tags.forEach((t=>this.molCol.setTag(t,this.targetColumn.getTag(t))));const e=a.DataFrame.fromColumns([this.idxs,this.molCol,this.scores]);await e.meta.detectSemanticTypes(),await o.data.detectSemanticTypes(e),this.molCol.temp["reference-sequence"]=this.targetColumn.get(this.targetMoleculeIdx),this.molCol.temp[".mm.cellRenderer.maxMonomerLength"]=4;let n=null;e.onCurrentRowChanged.subscribe((t=>{n&&clearTimeout(n),(e.currentRowIdx??-1)<0||(this.dataFrame.currentRowIdx=e.col("indexes").get(e.currentRowIdx),n=setTimeout((()=>{this.createPropertyPanel(e)}),300),this.gridSelect=!0)})),this.analysisGrid?(this.analysisGrid.dataFrame=e,this.analysisGrid.invalidate()):(this.analysisGrid=e.plot.grid(),(0,$t.Ku)(this.root,this.analysisGrid.root)),this.analysisGrid.col("indexes").visible=!1,(0,$t.Kd)(this.analysisGrid,this.molCol.name,450,30,!0);const i=this.idxs?.getRawData().findIndex((t=>t==this.targetMoleculeIdx));this.analysisGrid.cell("score",i).cell.value=null;const r=o.shell.tv;this.subInited||(r.grid.root.addEventListener("click",(t=>{this.gridSelect=!1})),this.subInited=!0),this.computeCompleted.next(!0)}}async computeByMM(){const t=this.targetColumn.length,e=Math.min(this.limit,t-1);if(!this.knn||this.kPrevNeighbors!==e){const n=(await de(this.targetColumn,ue.Z.LEVENSHTEIN)).seqList;this.kPrevNeighbors=e,this.knn=await(new H).getKNN(n,ue.Z.LEVENSHTEIN,Math.min(this.limit,t-1))}const n=new Array(e).fill(0).map(((t,e)=>({idx:this.knn.knnIndexes[this.targetMoleculeIdx][e],score:1-this.knn.knnDistances[this.targetMoleculeIdx][e]})));n.sort(((t,e)=>e.score-t.score)),n.unshift({idx:this.targetMoleculeIdx,score:a.FLOAT_NULL}),this.idxs=a.Column.int("indexes",e+1).init((t=>n[t].idx)),this.scores=a.Column.float("score",e+1).init((t=>n[t].score))}createPropertyPanel(t){const e=s.div(),n={},i=this.molCol?.name,r=t.col(i),a=this.seqHelper.getSeqHandler(this.targetColumn),l=this.seqHelper.getSeqHandler(r),c=a.getSplitted(this.targetMoleculeIdx),h=l.getSplitted(t.currentRowIdx),u=function(t,e,n={}){const i={...Ae,...n},r=t.length,o=e.length,s=Array(r+1).fill(0).map((()=>Array(o+1).fill(0)));let a=-9999,l=[1,1];for(let n=1;n<r+1;n++)for(let r=1;r<o+1;r++)s[n][r]=Math.max(0,s[n-1][r-1]+(t.getCanonical(n-1)===e.getCanonical(r-1)?i.matchScore:-i.matchScore),s[n-1][r]-i.gapPenalty,s[n][r-1]-i.gapPenalty),s[n][r]>=a&&(a=s[n][r],l=[n,r]);let c=i.localAlignment?l[0]:r,h=i.localAlignment?l[1]:o,u=new Array(0),d=new Array(0);for(;c>0&&h>0;){const n=Math.max(s[c-1][h-1],s[c-1][h],s[c][h-1]);s[c][h]==s[c-1][h-1]+i.matchScore&&n==s[c-1][h-1]?(u.push(t.getCanonical(c-1)),d.push(e.getCanonical(h-1)),c-=1,h-=1):s[c][h]==s[c-1][h]-i.gapPenalty?(d.push(i.gapSymbol),u.push(t.getCanonical(c-1)),c-=1):s[c][h]==s[c][h-1]-i.gapPenalty?(u.push(i.gapSymbol),d.push(e.getCanonical(h-1)),h-=1):(u.push(t.getCanonical(c-1)),d.push(e.getCanonical(h-1)),c-=1,h-=1)}u=[...rt().count(0).take(c).map((e=>t.getCanonical(e))),...u.reverse(),...i.localAlignment?rt().count(l[0]).take(r).map((e=>t.getCanonical(e))):[]],d=[...rt().count(0).take(h).map((t=>e.getCanonical(t))),...d.reverse(),...i.localAlignment?rt().count(l[1]).take(o).map((t=>e.getCanonical(t))):[]];const p=c,m=h;return p>m?d=[...new Array(p-m).fill(i.gapSymbol.valueOf()),...d]:u=[...new Array(m-p).fill(i.gapSymbol.valueOf()),...u],d.length>u.length?u.push(...new Array(d.length-u.length).fill(i.gapSymbol.valueOf())):d.push(...new Array(u.length-d.length).fill(i.gapSymbol.valueOf())),{seq1:u.join(""),seq2:d.join(""),seq1Splitted:new kt.Mu(u,i.gapSymbol),seq2Splitted:new kt.Mu(d,i.gapSymbol)}}(c,h),d=ye(u.seq1Splitted,u.seq2Splitted,l.defaultBiotype,n);e.append(s.div(d,{style:{width:"300px",overflow:"scroll"}})),c.length!==h.length&&e.append(s.divV([s.divText("Different sequence length:",{style:{fontWeight:"bold"}}),s.divText(`target: ${c.length} monomers`),s.divText(`selected: ${h.length} monomers`)],{style:{paddingBottom:"10px"}})),e.append(be(n));const p=s.accordion(),m=s.element("i");m.className="grok-icon svg-icon svg-view-layout",p.addTitle(s.span([m,s.label("Similarity search")])),p.addPane("Differences",(()=>e),!0),o.shell.o=p.root}}var xe=n(1407);class Ee extends Ce{seqHelper;diverseColumnLabel;renderMolIds=null;columnNames=[];computeCompleted=new h.Subject;constructor(t){super("diversity",a.SEMTYPE.MACROMOLECULE),this.seqHelper=t,this.diverseColumnLabel=this.string("diverseColumnLabel",null)}async renderInt(t){if(this.beforeRender()&&this.dataFrame&&t&&this.targetColumn){const t=this.seqHelper.getSeqHandler(this.targetColumn);await(t.isFasta()?this.computeByMM():this.computeByChem());const e=null!=this.diverseColumnLabel?this.diverseColumnLabel:`diverse (${this.targetColumnName})`,n=a.Column.string(e,this.renderMolIds.length).init((t=>this.targetColumn?.get(this.renderMolIds[t])));n.semType=a.SEMTYPE.MACROMOLECULE,this.tags.forEach((t=>n.setTag(t,this.targetColumn.getTag(t))));const i=a.DataFrame.fromColumns([n]);n.temp[".mm.cellRenderer.maxMonomerLength"]=4,i.onCurrentRowChanged.subscribe((t=>{this.dataFrame.currentRowIdx=this.renderMolIds[i.currentRowIdx]}));const r=i.plot.grid();(0,$t.Kd)(r,n.name,450,30),(0,$t.Ku)(this.root,r.root),this.computeCompleted.next(!0)}}async computeByChem(){const t=await(0,xe.R)(this.targetColumn,this.seqHelper);a.DataFrame.fromColumns([t]),this.renderMolIds=await o.functions.call("Chem:callChemDiversitySearch",{col:t,metricName:this.distanceMetric,limit:this.limit,fingerprint:this.fingerprint})}async computeByMM(){const t=(await de(this.targetColumn,ue.Z.LEVENSHTEIN)).seqList,e=new F(!0,!1),n=await e.calc(t,ue.Z.LEVENSHTEIN);e.terminate();const i=this.targetColumn.length,r=(o=i,(t,e)=>o*t+e-Math.floor((t+2)*(t+1)/2));var o;this.renderMolIds=function(t,e,n){function i(t,e){let n=null,i=null;for(const r of t){const t=e(r);(null==i||t>i)&&(n=r,i=t)}return n}const r=[(s=t-1,Math.floor(function(t){return Math.random()*t}(s)))],o=new Set;var s;for(let e=0;e<t;++e)r.includes(e)||o.add(e);for(;r.length<e;){const t=i(o.values(),(t=>Math.min.apply(Math,r.map((function(e,i){return n(t,e)})))));null!=t&&(r.push(t),o.delete(t))}return r}(i,Math.min(i,this.limit),((t,e)=>this.targetColumn.isNone(t)||this.targetColumn.isNone(e)?0:n[r(t,e)]))}}var Me,_e=n(5433),Ie=n(3890),Te=n(1687);!function(t){t.TYPE="V2000",t[t.NUM_OF_HEADER_LINES=3]="NUM_OF_HEADER_LINES",t[t.NUM_OF_COUNTS_DIGITS=3]="NUM_OF_COUNTS_DIGITS",t[t.ATOM_TYPE_COL=4]="ATOM_TYPE_COL",t[t.FIRST_BONDED_ATOM_COL=1]="FIRST_BONDED_ATOM_COL",t[t.BOND_TYPE_COL=3]="BOND_TYPE_COL",t[t.RGP_SHIFT=8]="RGP_SHIFT",t[t.MAX_ATOM_COUNT=999]="MAX_ATOM_COUNT",t.RGP_LINE_START="M RGP",t.ATOM_ALIAS_LINE_START="A ",t.END="M END"}(Me||(Me={}));class Le{constructor(t){this.init(t)}init(t){this.fileContent=t.replace(/\r/g,""),this._atomCount=void 0,this._atomTypes=void 0,this._bondCount=void 0,this._bondTypes=void 0,this.xyzAtomCoordinates=void 0,this._pairsOfBondedAtoms=void 0}get atomCount(){return void 0===this._atomCount&&this.setAtomAndBondCounts(),this._atomCount}get bondCount(){return void 0===this._bondCount&&this.setAtomAndBondCounts(),this._bondCount}get x(){var t;return null!==(t=this.xyzAtomCoordinates)&&void 0!==t||(this.xyzAtomCoordinates=this.parseAtomCoordinates()),this.xyzAtomCoordinates.x}get y(){var t;return null!==(t=this.xyzAtomCoordinates)&&void 0!==t||(this.xyzAtomCoordinates=this.parseAtomCoordinates()),this.xyzAtomCoordinates.y}get z(){var t;return null!==(t=this.xyzAtomCoordinates)&&void 0!==t||(this.xyzAtomCoordinates=this.parseAtomCoordinates()),this.xyzAtomCoordinates.z}get atomTypes(){var t;return null!==(t=this._atomTypes)&&void 0!==t||(this._atomTypes=this.parseAtomTypes()),this._atomTypes}get pairsOfBondedAtoms(){var t;return null!==(t=this._pairsOfBondedAtoms)&&void 0!==t||(this._pairsOfBondedAtoms=this.parseBondedAtomPairs()),this._pairsOfBondedAtoms}get bondTypes(){var t;return null!==(t=this._bondTypes)&&void 0!==t||(this._bondTypes=this.parseBondTypes()),this._bondTypes}setAtomAndBondCounts(){const{atomCount:t,bondCount:e}=this.parseAtomAndBondCounts();this._atomCount=t,this._bondCount=e}getNextColumnIdx(t){for(;!this.isWhitespace(t);)++t;for(;this.isWhitespace(t);)++t;return t}shiftIdxToSpecifiedColumn(t,e){let n=t;const i=this.isWhitespace(n)?e:e-1;for(let t=0;t<i;t++)n=this.getNextColumnIdx(n);return n}parseAtomTypes(){const t=this.atomCount,e=new Array(t);let n=this.getAtomBlockIdx();for(let i=0;i<t;i++)n=this.shiftIdxToAtomType(n),e[i]=this.parseAtomType(n),n=this.getNextLineIdx(n);return e}parseAtomCoordinates(){const t=new Float32Array(this.atomCount),e=new Float32Array(this.atomCount),n=new Float32Array(this.atomCount);let i=this.getAtomBlockIdx();for(let r=0;r<this.atomCount;r++){i=this.shiftIdxToXColumn(i);for(const o of[t,e,n])o[r]=this.parseFloatValue(i),i=this.getNextColumnIdx(i);i=this.getNextLineIdx(i)}return{x:t,y:e,z:n}}parseBondedAtomPairs(){const t=new Array(this.bondCount);let e=this.getBondBlockIdx();for(let n=0;n<this.bondCount;n++){e=this.shiftIdxToBondedAtomsPair(e);const i=new Uint16Array(2);i[0]=this.parseIntValue(e),e=this.getNextColumnIdx(e),i[1]=this.parseIntValue(e),t[n]=i,e=this.getNextLineIdx(e)}return t}parseBondTypes(){const t=this.bondCount,e=new Uint16Array(t);let n=this.getBondBlockIdx();for(let i=0;i<t;i++)n=this.shiftIdxToBondType(n),e[i]=this.parseIntValue(n),n=this.getNextLineIdx(n);return e}isWhitespace(t){const e=this.fileContent[t];return" "===e||"\t"===e}getNextLineIdx(t){return"\n"!==this.fileContent[t]?this.fileContent.indexOf("\n",t)+1:t+1}parseFloatValue(t){return this.parseNumericValue(parseFloat,t)}parseIntValue(t){return this.parseNumericValue(parseInt,t)}parseNumericValue(t,e){let n=e+1;for(;!this.isWhitespace(n);)++n;return t(this.fileContent.substring(e,n))}}class Ne extends Le{constructor(t){super(t),this.init(t)}init(t){super.init(t)}parseAtomType(t){let e=t,n=e;return this.isQuote(e)?(n=this.getNextIdenticalChar(e),e++):n=this.fileContent.indexOf(" ",n),this.fileContent.substring(e,n)}isQuote(t){const e=this.fileContent[t].charCodeAt(0);return 39===e||34===e}getNextIdenticalChar(t){const e=this.fileContent[t];return e?this.fileContent.indexOf(e,t+1):-1}isQuery(){return this.isQueryOrFragment(((t,e)=>{return 39===t||34===t||76===t&&!((n=this.fileContent.charCodeAt(e+1))>64&&n<91||n>96&&n<123);var n}))}isFragment(){return this.isQueryOrFragment((t=>82===t||42===t))}isQueryOrFragment(t){const e=this.atomCount;let n=this.getAtomBlockIdx();for(let i=0;i<e;i++){if(n=this.shiftIdxToAtomType(n),t(this.fileContent.charCodeAt(n),n))return!0;n=this.getNextLineIdx(n)}return!1}}class Pe extends Ne{constructor(t){super(t)}getAtomLines(){const t=this.getAtomBlockIdx(),e=this.getBondBlockIdx();return this.fileContent.substring(t,e).split("\n").slice(0,this.atomCount)}getBondLines(){const t=this.getBondBlockIdx();return this.fileContent.substring(t).split("\n").slice(0,this.bondCount)}getRGroupIdToAtomicIdxMap(){const t=new Map,e=this.fileContent.split("\n");e.filter((t=>t.startsWith(Me.RGP_LINE_START))).forEach((e=>{const n=this.getAtomIdxToRgpIdxList(e);for(const[e,i]of n){if(t.has(e))throw new Error(`R group ${e} is already in the map`);t.set(e,i)}}));const n=e.map(((t,e)=>{if(t.startsWith(Me.ATOM_ALIAS_LINE_START))return e})).filter((t=>void 0!==t)),i=n.map((t=>e[t])),r=n.map((t=>e[t+1]));i.forEach(((e,n)=>{const i=parseInt(e.split(/\s+/)[1])-1,o=parseInt(r[n].substring(1));if(t.has(o))throw new Error(`R group ${o} is already in the map`);t.set(o,i)}));const o=this.getRGroupAtomicIndices().filter((e=>!Array.from(t.values()).includes(e)));if(0!==o.length)throw new Error(`Unaccounted R group indices: ${o}`);return t}getAtomIdxToRgpIdxList(t){const e=t.split(/\s+/).filter((t=>t)).slice(3).map((t=>parseInt(t))),n=new Array(e.length/2);for(let t=0;t<e.length;t+=2)n[t/2]=[e[t+1],e[t]-1];return n}getRGroupAtomicIndices(){return this.atomTypes.map(((t,e)=>{if(t.includes("R#"))return e})).filter((t=>void 0!==t))}static isValidMolfile(t){return-1!==t.indexOf(Me.TYPE)&&-1!==t.indexOf(Me.END)}shiftIdxToAtomType(t){return this.shiftIdxToSpecifiedColumn(t,Me.ATOM_TYPE_COL)}getCountsLineIdx(){let t=0;for(let e=0;e<Me.NUM_OF_HEADER_LINES;++e)t=this.getNextLineIdx(t);return t}getAtomBlockIdx(){let t=this.getCountsLineIdx();return t=this.getNextLineIdx(t),t}shiftIdxToXColumn(t){return this.getNextColumnIdx(t)}shiftIdxToBondedAtomsPair(t){return this.shiftIdxToSpecifiedColumn(t,Me.FIRST_BONDED_ATOM_COL)}shiftIdxToBondType(t){return this.shiftIdxToSpecifiedColumn(t,Me.BOND_TYPE_COL)}getBondBlockIdx(){let t=this.getAtomBlockIdx();for(let e=0;e<this.atomCount;e++)t=this.getNextLineIdx(t);return t}parseAtomAndBondCounts(){let t=this.getCountsLineIdx(),e=t+Me.NUM_OF_COUNTS_DIGITS;const n=parseInt(this.fileContent.substring(t,e));return t=e,e+=Me.NUM_OF_COUNTS_DIGITS,{atomCount:n,bondCount:parseInt(this.fileContent.substring(t,e))}}}class $e extends Ne{constructor(t){super(t),this.init(t)}getAtomLines(){const t=this.getAtomBlockIdx(),e=this.getBondBlockIdx();return this.fileContent.substring(t,e).split("\n").slice(0,this.atomCount)}getBondLines(){const t=this.getBondBlockIdx();return this.fileContent.substring(t).split("\n").slice(0,this.bondCount)}getRGroupIdToAtomicIdxMap(){const t=new Map;return this.getAtomLines().forEach(((e,n)=>{const i=e.match(/RGROUPS=\(([\d\s]+)\)/);if(i){const e=i[1].split(/\s+/).map((t=>parseInt(t)));if(e.length>2)throw new Error(`R group data ${e} has more than 2 elements`);const r=e[1];if(t.has(r))throw new Error(`R group ${r} is already in the map`);t.set(r,n)}})),t}shiftIdxToAtomType(t){return this.shiftIdxToSpecifiedColumn(t,4)}getCountsLineIdx(){return this.fileContent.indexOf("M V30 COUNTS ")}getAtomBlockIdx(){let t=this.fileContent.indexOf("M V30 BEGIN ATOM");return t=this.getNextLineIdx(t),t}shiftIdxToXColumn(t){let e=this.shiftIdxToAtomType(t);return this.isQuote(e)?(e=this.getNextIdenticalChar(e),e=this.getNextColumnIdx(e),e):this.shiftIdxToSpecifiedColumn(t,5)}shiftIdxToBondedAtomsPair(t){return this.shiftIdxToSpecifiedColumn(t,5)}shiftIdxToBondType(t){return this.shiftIdxToSpecifiedColumn(t,4)}getBondBlockIdx(){return this.getNextLineIdx(this.fileContent.indexOf("M V30 BEGIN BOND"))}static isValidMolfile(t){return-1!==t.indexOf("V3000")&&-1!==t.indexOf("M END")}parseAtomAndBondCounts(){let t=this.fileContent.indexOf("M V30 COUNTS ")+14,e=this.fileContent.indexOf(" ",t+1);const n=parseInt(this.fileContent.substring(t,e));return t=e+1,e=this.fileContent.indexOf(" ",t+1),{atomCount:n,bondCount:parseInt(this.fileContent.substring(t,e))}}}class Re{constructor(){}static getInstance(t){if(Re.isMolfileV2K(t))return new Pe(t);if(Re.isMolfileV3K(t))return new $e(t);throw new Error("Malformed molfile")}static isMolfileV2K(t){return Pe.isValidMolfile(t)}static isMolfileV3K(t){return $e.isValidMolfile(t)}}var Oe=n(6197),ke=n(9124),Ge=n(3527);class Fe{biotype;id;n;m;type;mt;smiles;get issmiles(){return!!this.smiles}at={R1:"H",R2:"H",R3:"H",R4:"H",R5:"H",R6:"H",R7:"H",R8:"H",R9:"H"};get rs(){return Object.keys(this.at).length}constructor(t,e,n="missing",i=void 0,r=void 0,o=void 0,s){if(this.biotype=t,this.id=e,this.n=n,this.m=i,this.type=r,this.mt=o,this.smiles=s,!this.id)throw new Error("Invalid arg undefined [id].")}static objCounter=-1;objId=++Fe.objCounter;className="WebEditorMonomerDummy";toLog(){return`Helm: ${this.className}<${this.objId}>`}}class He extends Fe{backgroundcolor="#FFFFFF";linecolor="#808080";textcolor="#808080";constructor(t){super(t,"*","gap")}}class Be extends Fe{backgroundcolor="#808080";linecolor="#000000";textcolor="#000000";constructor(t,e){super(t,e,"ambiguous")}}class De extends Fe{backgroundcolor="#FF4444";linecolor="#800000";textcolor="#FFFFFF";constructor(t,e,n){super(t,e,"missing"),n&&(this.backgroundcolor="#C0C0C0",this.linecolor="#404040",this.textcolor="#404040")}}class Ve extends Fe{backgroundcolor="#FFFF44";linecolor="#800000";textcolor="#000000";constructor(t,e){super(t,e,"broken")}}class je{id;m;n;na;type;mt;at;smiles;get rs(){return Object.keys(this.at).length}get issmiles(){return!!this.smiles}linecolor;backgroundcolor;textcolor;constructor(t,e,n,i,r,o,s,a){this.id=t,this.m=e,this.n=n,this.na=i,this.type=r,this.mt=o,this.at=s,this.smiles=a}static fromMonomer(t,e,n){let i={};const r=e.symbol,o=e.smiles;if(e.rgroups.length>0)e.rgroups.forEach((t=>{i[t.label]=t.capGroupName}));else{if(!o){if(e.lib)return new Ve(t,r);throw new Error("Unexpected missing monomer without .lib")}i=n.getRS(o)}const s=new je(e.symbol,e.molfile,e.name,e.naturalAnalog,e.polymerType,e.monomerType,i),a=n.getMonomerColors(t,e.symbol);return a&&(s.textcolor=a?.textcolor,s.linecolor=a?.linecolor,s.backgroundcolor=a?.backgroundcolor),s}}const Ue={[Ht.o.BASE]:{A:"#20E040",G:"#040404",T:"#FF8080",C:"#2060FF",U:"#FF8080"},[Ht.o.NUCLEOTIDE]:{A:"#20E040",G:"#040404",T:"#FF8080",C:"#2060FF",U:"#FF8080"},[Ht.o.LINKER]:{P:"#9aa5e1",p:"#9aa5e1"},[Ht.o.SUGAR]:{R:"#7a85c1",r:"#7a85c1"},[Ht.o.AA]:{A:"rgb(44,160,44)",R:"rgb(23,190,207)",N:"rgb(235,137,70)",D:"rgb(31,119,180)",C:"rgb(188,189,34)",E:"rgb(31, 120, 150)",Q:"rgb(205, 111, 71)",G:"rgb(214,39,40)",H:"rgb(158,218,229)",I:"rgb(23,103,57)",L:"rgb(30,110,96)",K:"rgb(108, 218, 229)",M:"rgb(60,131,95)",F:"rgb(24,110,79)",P:"rgb(255,152,150)",S:"rgb(255,187,120)",T:"rgb(245,167,100)",W:"rgb(182, 223, 138)",Y:"rgb(152,223,138)",V:"rgb(74,160,74)"},[Ht.o.CHEM]:{R:"#eeeeee"},[Ht.o.BLOB]:{B:"#999999",G:"#e2e2e2"}},We=/[\w()]+/,qe=RegExp(String.raw`\(${We}(,${We})+\)`),ze=t=>{const e=s.canvas(250,250);return o.chem.canvasMol(0,0,250,250,e,t),e},Ye=new Ge.Mi([255,255,255]),Ke=new Ge.Mi([0,0,0]),Ze=.7*(0,z.wQ)(Ye);class Xe{_monomers;source;_isEmpty;get isEmpty(){return this._isEmpty}_onChanged=new h.Subject;get onChanged(){return this._onChanged}constructor(t,e){this._monomers=t,this.source=e,this._isEmpty=!this._monomers||0===Object.keys(this._monomers).length||Object.entries(this._monomers).every((([t,e])=>0===Object.keys(e).length));for(const[t,e]of Object.entries(this._monomers))for(const[t,n]of Object.entries(e))n.lib=this}getMonomerSymbolsByType(t){return Object.keys(this._monomers[t])}addMissingMonomer(t,e){let n=this._monomers[t];n||(n=this._monomers[t]={});let i=e;return e==wt._S||e===wt.b9[wt.Hi.HELM]?i="Gap":("PEPTIDE"===t&&"X"===e||"RNA"===t&&"N"===e)&&(i="Any"),n[e]={symbol:e,name:i,molfile:"",author:"MISSING",id:-1,rgroups:rt().count(1).take(9).map((t=>({capGroupSmiles:"",alternateId:"",capGroupName:"",label:`R${t.toString()}`}))).toArray(),smiles:"",polymerType:t,monomerType:void 0,createDate:null}}getMonomer(t,e){let n=e;"RNA"==t&&"R"==n&&(n="r"),"RNA"==t&&"P"==n&&(n="p");let i=null;if(t){const e=this._monomers[t];i=e?e[n]:null}else{Di.logger.warning(`Bio: MonomerLib.getMonomer() symbol '${e}', polymerType not specified.`);for(const[t,e]of Object.entries(this._monomers))if(i=e[n],i)break}return i}getWebEditorMonomer(t,e){const[n,i]=(0,ke.fA)(t,e),r=(0,Oe.Y)(n);let o=this.getMonomer(r,i);if(o&&n==Ht.o.LINKER&&2!=o.rgroups.length)return null;if(o&&n==Ht.o.SUGAR&&3!=o.rgroups.length)return null;o||(o=this.addMissingMonomer(r,i));let s=o.wem??null;return s||(i===wt._S||"*"==i?s=o.wem=new He(n):n===Ht.o.NUCLEOTIDE&&"N"===i||n===Ht.o.AA&&"X"===i||(Ht.o.CHEM,0)||qe.test(i)?s=o.wem=new Be(n,i):o.lib||(s=o.wem=new De(n,i,this.isEmpty)),s||(s=o.wem=je.fromMonomer(n,o,this))),s}getTooltip(t,e){const n=(0,Oe.Y)(t),i=s.div([],{classes:"ui-form ui-tooltip"}),r=this.getWebEditorMonomer(t,e),o=this.getMonomer(n,e);if(o){const t=o.symbol,[e,n,a]=(o.name,r?[r.textcolor,r.backgroundcolor,r.linecolor]:["#202020","#A0A0A0","#202020"]);let l;if(i.append(s.divH([s.div([t],{style:{textWrap:"nowrap",marginLeft:"4px",marginRight:"4px",color:e,backgroundColor:n,borderColor:a,borderWidth:"1px",borderStyle:"solid",borderRadius:"2px",padding:"3px",minWidth:"24px",textAlign:"center"}}),s.div([o.name],{style:{padding:"4px"}})],{style:{display:"flex",flexDirection:"row",justifyContent:"left"}})),l=o.molfile?ze(o.molfile):o.smiles?s.divV([ze(o.smiles),s.divText("from smiles",{style:{fontSize:"smaller"}})]):s.divText("No structure",{style:{margin:"6px"}}),i.append(s.div(l,{style:{display:"flex",flexDirection:"row",justifyContent:"center",margin:"6px"}})),o.symbol!=wt._S){let t=o.lib?.source;t?(t.endsWith(".json")&&(t=t.substring(0,t.length-5)),t=t.replace(/_/g," ").replace(/-/g," ").replace(/([a-z])([a-z])([A-Z])/g,"$1$2 $3"),i.append(s.divText(t))):i.append(s.divText("Missed in libraries"))}}else i.append(s.divV([s.divText(`Monomer '${e}' of type '${n}' not found.`),s.divText("Open the Context Panel, then expand Manage Libraries")]));return i}getMonomerTextColor(t,e){const n=this.getMonomerColors(t,e),i=t=>{const e=/rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)/.exec(t);if(e)return[parseInt(e[1]),parseInt(e[2]),parseInt(e[3])];const n=a.Color.fromHtml(t);return[a.Color.r(n),a.Color.g(n),a.Color.b(n)]},r=i(n.textcolor),o=new Ge.Mi([...r.map((t=>t+1))]),s=(0,z.KE)(o,Ye)/((0,z.wQ)(o)*(0,z.wQ)(Ye)),l=i(n.backgroundcolor),c=new Ge.Mi([...l.map((t=>t+.01))]);let h;h=(0,z.KE)(c,Ye)/((0,z.wQ)(c)*(0,z.wQ)(Ye))<s?l:r;let u=new Ge.Mi(h);const d=(0,z.wQ)(u);return d>Ze&&(u=(0,z.dC)(Ke,u,Ze/d)),`rgb(${u[0]}, ${u[1]}, ${u[2]})`}getMonomerColors(t,e){const n="default";let i=n;const r=(0,Oe.Y)(t),o=this.getMonomer(r,e);let s;if(o){if(o.meta&&o.meta.colors){const t=o.meta.colors;n in t||(i="default"),s=t[i]}if(!s){const e=Ue[t],n=e?.[o.symbol];n&&(s={textColor:a.Color.toHtml(a.Color.getContrastColor(a.Color.fromHtml(n))),lineColor:"#202020",backgroundColor:n})}const e=o.naturalAnalog;if(!s&&e)return this.getMonomerColors(t,e)}return s||(s={textColor:"#202020",lineColor:"#202020",backgroundColor:"#A0A0A0"}),{textcolor:s.text??s.textColor,linecolor:s.line??s.lineColor,backgroundcolor:s.background??s.backgroundColor}}getRS(t){const e=t.match(/(?<=\[)[^\][]*(?=])/gm),n={};let i,r="";if(e)for(let t=0;t<e.length;t++)if(null!=e[t]&&/\d/.test(e[t])){i=e[t][e[t].length-1],e[t]=e[t].replace(/[0-9]/g,"");for(let n=0;n<e[t].length;n++)":"!=e[t][n]&&(r+=e[t][n]);n["R"+i]=r,r=""}return n}}var Je=n(5488),Qe={};Qe.styleTagTransform=A(),Qe.setAttributes=b(),Qe.insert=g().bind(null,"head"),Qe.domAPI=m(),Qe.insertStyleElement=w(),d()(Je.A,Qe),Je.A&&Je.A.locals&&Je.A.locals;class tn extends Xe{error;_duplicateMonomers={};get duplicateMonomers(){return this._duplicateMonomers}_duplicatesHandled=!0;get duplicatesHandled(){return this._duplicatesHandled}duplicatesNotified=!1;constructor(t,e,n=void 0){super(t,e),this.error=n}toJSON(){const t=[];for(const e of Object.values(this._monomers))for(const n of Object.values(e))t.push({...n,lib:void 0,wem:void 0});return t}getMonomer(t,e){let n=e;"RNA"==t&&"R"==n&&(n="r"),"RNA"==t&&"P"==n&&(n="p");let i=null;if(t){const e=this._monomers[t];i=e?.[n]??null}else{Di.logger.warning(`Bio: MonomerLib.getMonomer() symbol '${e}', polymerType not specified.`);for(const[t,e]of Object.entries(this._monomers))if(i=e[n],i)break}return i}_monomerSets=null;getMonomerSet(t){const e=(0,Oe.Y)(t);if(this._monomerSets||(this._monomerSets={}),!(t in this._monomerSets))for(const[t,n]of Object.entries(this._monomers[e]));return this._monomerSets[t]}getPolymerTypes(){return Object.keys(this._monomers)}getMonomerMolsByPolymerType(t){const e={};return Object.keys(this._monomers[t]??{}).forEach((n=>{e[n]=this._monomers[t][n].molfile})),e}getMonomerSymbolsByRGroup(t,e,n){let i=this.getMonomerSymbolsByType(e).map((t=>this.getMonomer(e,t)));return i=i.filter((t=>null!==t)),0===i.length?[]:(i=i.filter((e=>{if(!e?.rgroups)return!1;let n=e?.rgroups.length>=t;var i;return i=Re.getInstance(e.molfile).atomTypes,i.map(((t,e)=>"R#"===t?e:-1)).filter((t=>-1!==t)),n&&=!0,n})),i.map((t=>t?.symbol)))}_updateLibInt(t){const e=t.getPolymerTypes(),n=this.getPolymerTypes();e.forEach((e=>{n.includes(e)||(this._monomers[e]={}),t.getMonomerSymbolsByType(e).forEach((n=>{this._monomers[e][n]&&(this._duplicateMonomers[e]??={},this._duplicateMonomers[e][n]??=[this._monomers[e][n]],this._duplicateMonomers[e][n].push(t.getMonomer(e,n))),this._monomers[e][n]=t.getMonomer(e,n)}))})),this._isEmpty=this.isEmpty&&t.isEmpty}updateLibs(t,e=!1){e&&(this._monomers={},this._isEmpty=!0),this._duplicateMonomers={};for(const e of t)e.error||this._updateLibInt(e);Object.entries(this.duplicateMonomers).length>0?(0,Nt.ub)().then((t=>{this.assignDuplicatePreferences(t)})):this._duplicatesHandled=!0,this._onChanged.next()}assignDuplicatePreferences(t){let e=!0;for(const n in this.duplicateMonomers)for(const i in this.duplicateMonomers[n])if(t.duplicateMonomerPreferences?.[n]?.[i]){const r=t.duplicateMonomerPreferences[n][i],o=this.duplicateMonomers[n][i].find((t=>t.lib?.source===r));o?this._monomers[n][i]=o:e=!1}else e=!1;return this._duplicatesHandled=e,e}clear(){this._monomers={},this._onChanged.next()}getSummaryObj(){const t={},e=this.getPolymerTypes();for(const n of e)t[n]=this.getMonomerSymbolsByType(n).length;return t}getSummaryDf(){const t=this.getPolymerTypes(),e=new Array(t.length);for(const[n,i]of rt().enumerate(t))e[i]=this.getMonomerSymbolsByType(n).length;return a.DataFrame.fromColumns([a.Column.fromStrings("polymerType",t),a.Column.fromList(a.COLUMN_TYPE.INT,"count",e)])}getSummary(){const t=this.getPolymerTypes();return 0==t.length?"empty":t.map((t=>`${t} ${this.getMonomerSymbolsByType(t).length}`)).join("\n")}static overrideCounter=0;override(t,e){return new en(t,`override: ${++tn.overrideCounter}, ${e}`,this)}}class en extends Xe{data;base;constructor(t,e,n){super(t,e),this.data=t,this.base=n}get onChanged(){return this.base.onChanged}getMonomerSymbolsByType(t){const e=this.base.getMonomerSymbolsByType(t);for(const n of Object.keys(this.data[t]??{}))e.includes(n)||e.push(n);return e}addMissingMonomer(t,e){return this.base.addMissingMonomer(t,e)}getMonomer(t,e){const n=this.data[t]?.[e];return n??this.base.getMonomer(t,e)}}class nn{monomerLib;symbol;polymerType;monomerType;monomerLinks;monomers;error=null;constructor(t,e,n,i,r){this.monomerLib=t,this.symbol=e,this.polymerType=n,this.monomerType=i,this.monomerLinks=r;try{this.monomers=this.monomerLinks.map((t=>{const n=this.monomerLib.getMonomer(this.polymerType,t.symbol);if(!n)throw new Error("Monomer not found: ");if(n.lib?.source!=t.source)throw new Error(`Monomer '${e}' found in different library.`);return n}))}catch(t){const[e,n]=(0,Ct.AP)(t);this.error=e,this.monomers=[]}}}class rn{description;placeholders;source;error;constructor(t,e,n=void 0,i=void 0){this.description=t,this.placeholders=e,this.source=n,this.error=i}updateSets(t,e=!1){e&&(this.placeholders=[]);for(const e of t)e.error||this._updateSetInt(e)}_updateSetInt(t){for(const e of t.placeholders)this.placeholders.push(e)}}var on=n(7433),sn=n.n(on),an=n(1913),ln=n.n(an);class cn{helmMonomerSchema;validateMonomerSchema;constructor(t){this.helmMonomerSchema=t;const e=new(sn())({allErrors:!0,strictTuples:!1,allowUnionTypes:!0});ln()(e),this.validateMonomerSchema=e.compile(this.helmMonomerSchema)}validateFile(t,e){const n=this.parseJson(t,e);return null!==n&&(Array.isArray(n)?this.validateJsonContent(n,e):(console.warn(`Bio: Monomer Library File Validator file '${e}': Invalid JSON format: The file must contain an array of monomers.`),!1))}parseJson(t,e){try{return JSON.parse(t)}catch(t){return console.error(`Bio: Monomer Library File Validator file '${e}': Invalid JSON format:`,t),null}}validateJsonContent(t,e){let n=!0;const i=new Set;for(const r of t){const t=r.symbol??r.id??r.name??"#N/A";if(n=this.validateMonomerSchema(r),!n){console.warn(`Bio: Monomer Library File Validator file ${e}, monomer '${t}' violating JSON schema:`,r,"\nError reason: ",JSON.stringify(this.validateMonomerSchema.errors??{}),`\nThere may be other errors in ${e} since the validation is stopped after the first error.`," Please, verify that the monomer library file satisfies the JSON schema");break}const o=`${r.polymerType??""}-${t}`;i.has(o)&&console.warn(`Bio: Monomer Library File Validator file ${e}, monomer '${t}' is duplicated.`,"Please, verify that the monomer library file does not contain duplicated monomer symbols."),i.add(o)}return n}}var hn=n(8604);class un{fileValidator;libHelper;eventManager;logger;filesPromise=Promise.resolve();initializedPromise=Promise.resolve();constructor(t,e,n,i){let r;this.fileValidator=t,this.libHelper=e,this.eventManager=n,this.logger=i;let o=!1;this.initializedPromise=Promise.race([a.delay(1e3),new Promise((t=>r=t))]),this.eventManager.updateValidLibraryFileListRequested$.subscribe((()=>{this.updateValidLibList().then((()=>{})),o||(o=!0,r())})),this.eventManager.updateValidSetFileListRequested$.subscribe((()=>{this.updateValidSetList().then((()=>{}))}))}static objCounter=-1;objId=++un.objCounter;toLog(){return`MonomerLibFileManager<${this.objId}>`}static async create(t,e,n){const i=await o.dapi.files.readAsText(hn.gt),r=JSON.parse(i),s=new cn(r);return new un(s,t,e,n)}async addLibraryFile(t,e,n=!0){try{if(await o.dapi.files.exists(hn.so+`${e}`))return void o.shell.error(`File ${e} already exists`);await this.validateAgainstHELM(t,e),await o.dapi.files.writeAsText(hn.so+`${e}`,t),await this.updateValidLibList(),await o.dapi.files.exists(hn.so+`${e}`)?o.shell.info(`Added ${e} HELM library`):o.shell.error(`Failed to add ${e} library`)}catch(t){console.error(t),o.shell.error(`Failed to add ${e} library`)}}async deleteLibraryFile(t){try{await o.dapi.files.delete(hn.so+`${t}`),await this.updateValidLibList(),o.shell.info(`Deleted ${t} library`)}catch(e){console.error(e),await o.dapi.files.exists(hn.so+`${t}`)?o.shell.error(`Failed to delete ${t} library`):o.shell.warning(`File ${t} already deleted, refresh the list`)}}async loadLibraryFromFile(t,e){let n=[];const i=new a.FileSource(t),r=await i.readAsText(e);n=JSON.parse(r);const o={},s=[];return n.forEach((t=>{const e=t.polymerType,n=t.symbol;s.includes(e)||(o[e]={},s.push(e)),o[e][n]=t})),new tn(o,e)}async loadSetFromFile(t,e,n){let i={};const r=new a.FileSource(e),o=await r.readAsText(n);i=JSON.parse(o);const s=i.description,l=Object.entries(i.placeholders).map((([e,n])=>{const i=e,r=n.polymerType,o=n.monomerType,s=n.set;return new nn(t,i,r,o,s)}));return new rn(s,l)}getValidLibraryPaths(){return this.eventManager.getValidLibPathList()}getValidSetPaths(){return this.eventManager.getValidSetPathList()}async getValidLibraryPathsAsynchronously(){return await this.eventManager.getValidLibraryPathsAsynchronously()}async updateValidLibList(){const t=`${this.toLog()}.updateValidLibList()`;return this.logger.debug(`${t}, start`),this.filesPromise=this.filesPromise.then((async()=>{this.logger.debug(`${t}, IN`);const e=[],n=await this.getLibFileListAtLocation();if(!this.libListHasChanged(n))return void this.logger.debug(`${t}, end, not changed`);for(const t of n){if(!t.endsWith(".json")){e.push(t);continue}const n=await o.dapi.files.readAsText(hn.so+`${t}`);this.isValidHELMLibrary(n,t)||e.push(t)}const i=n.filter((t=>!e.includes(t)));if(this.libListHasChanged(i)&&(this.eventManager.changeValidLibPathList(i),await this.libHelper.loadMonomerLib(!0)),i.some((t=>!t.endsWith(".json")))&&this.logger.warning(`Wrong validation: ${i}`),e.length>0){const t=`Invalid monomer library files in ${hn.so}, consider fixing or removing them: ${e.join(", ")}`;this.logger.warning(t)}this.logger.debug(`${t}, OUT`)})),this.logger.debug(`${t}, end`),this.filesPromise}async updateValidSetList(){const t=`${this.toLog()}.updateValidSetList()`;return Di.logger.debug(`${t}, start`),this.filesPromise=this.filesPromise.then((async()=>{Di.logger.debug(`${t}, IN`);const e=[],n=await this.getSetFileListAtLocation();if(!this.setListHasChanged(n))return void Di.logger.debug(`${t}, end, not changed`);for(const t of n)t.endsWith(".json")?await o.dapi.files.readAsText(hn.Es+`${t}`):e.push(t);const i=n.filter((t=>!e.includes(t)));this.setListHasChanged(i)&&(this.eventManager.changeValidSetPathList(i),this.libHelper.loadMonomerSets(!0)),Di.logger.debug(`${t}, OUT`)})),Di.logger.debug(`${t}, end`),this.filesPromise}libListHasChanged(t){const e=this.eventManager.getValidLibPathList();return t.length!==e.length||t.some(((t,n)=>t!==e[n]))}setListHasChanged(t){const e=this.eventManager.getValidSetPathList();return t.length!==e.length||t.some(((t,n)=>t!==e[n]))}async validateAgainstHELM(t,e){if(!this.isValidHELMLibrary(t,e))throw new Error(`File ${e} does not satisfy HELM standard`)}isValidHELMLibrary(t,e){return this.fileValidator.validateFile(t,e)}async getLibFileListAtLocation(){const t=`${this.toLog()}.getLibFileListAtLocation()`;this.logger.debug(`${t}, start`);const e=await o.dapi.files.list(hn.so).then((t=>t.filter((t=>t.isFile)).map((t=>t.fullPath)))),n=[];return n.push(...e),n.map((t=>t.substring(hn.so.length)))}async getSetFileListAtLocation(){const t=`${this.toLog()}.getSetFileListAtLocation()`;this.logger.debug(`${t}, start`);const e=await o.dapi.files.list(hn.Es).then((t=>t.map((t=>t.fullPath)))),n=[];return n.push(...e),n.map((t=>t.substring(hn.Es.length)))}}class dn{constructor(){}static _instance;static getInstance(){return dn._instance||(dn._instance=new dn),dn._instance}_libFilesUpdateSubject$=new h.BehaviorSubject([]);_setFilesUpdateSubject$=new h.BehaviorSubject([]);_addLibraryFilesSubject$=new h.Subject;_librarySelectionSubject$=new h.Subject;getValidLibPathList(){return this._libFilesUpdateSubject$.getValue()}getValidSetPathList(){return this._setFilesUpdateSubject$.getValue()}async getValidLibraryPathsAsynchronously(){return new Promise((t=>{const e=this._libFilesUpdateSubject$.pipe((0,R.skip)(1)).subscribe((n=>{t(n),e.unsubscribe()}))}))}changeValidLibPathList(t){this._libFilesUpdateSubject$.next(t)}changeValidSetPathList(t){this._setFilesUpdateSubject$.next(t)}get updateUIControlsRequested$(){return this._libFilesUpdateSubject$.pipe()}get updateValidLibraryFileListRequested$(){return this._libFilesUpdateSubject$.pipe()}get updateValidSetFileListRequested$(){return this._setFilesUpdateSubject$.pipe()}get addLibraryFileRequested$(){return this._addLibraryFilesSubject$.pipe()}addLibraryFile(){this._addLibraryFilesSubject$.next()}get librarySelectionRequested$(){return this._librarySelectionSubject$}updateLibrarySelectionStatus(t,e){this._librarySelectionSubject$.next([t,e])}}class pn{logger;_monomerLib=new tn({},"MAIN");_monomerSets=new rn("MAIN",[]);_initialLoadCompleted=!1;get initialLoadCompleted(){return this._initialLoadCompleted}_eventManager;get eventManager(){return this._eventManager}async awaitLoaded(t=1/0){return t=t===1/0?6e4:t,await Promise.race([(async()=>{const t=await this.getFileManager();return await t.filesPromise,!0})(),(async()=>(await(0,te.cb)(t),!1))()]).then((e=>{if(!e)throw new Error(`Loading monomer libraries timeout ${t} ms.`)}))}constructor(t){this.logger=t}static objCounter=-1;objId=(()=>{if(++pn.objCounter>0)throw new Error("MonomerLibManager MUST be a singleton.");return pn.objCounter})();toLog(){return`MonomerLibManager<${this.objId}>`}getMonomerLib(){return this._monomerLib}getBioLib(){return this.getMonomerLib()}getMonomerSets(){return this._monomerSets}get duplicateMonomers(){return this._monomerLib.duplicateMonomers}get duplicatesHandled(){return this._monomerLib.duplicatesHandled}assignDuplicatePreferances(t){this._monomerLib.assignDuplicatePreferences(t)}_fileManagerPromise;async getFileManager(){return void 0===this._fileManagerPromise&&(this._fileManagerPromise=(async()=>{const t=await un.create(this,this._eventManager,this.logger);return await t.initializedPromise,t})()),this._fileManagerPromise}loadLibrariesPromise=Promise.resolve();async loadMonomerLib(t=!1){const e=`${this.toLog()}.loadMonomerLib()`;return this.logger.debug(`${e}, start`),this.loadLibrariesPromise=this.loadLibrariesPromise.then((async()=>{this.logger.debug(`${e}, IN`);const n=a.TaskBarProgressIndicator.create("Loading monomers ...");try{const[[e],i]=await Promise.all([await this.getFileManager().then((t=>[t.getValidLibraryPaths()])),(0,Nt.ub)()]),r=e.filter((t=>{const e=!i.exclude.includes(t),n=0===i.explicit.length||i.explicit.includes(t);return e&&n}));let o=0;const s=r.length,[a]=await Promise.all([Promise.all(r.map((t=>this.readLibrary(hn.so,t).catch((e=>{const n=`Loading monomers from '${t}' error: ${e instanceof Error?e.message:e.toString()}`;return new tn({},t,n)})).finally((()=>{n.update(Math.round(100*++o/s),`Loading monomers ${o}/${s}`)})))))]);this._monomerLib.updateLibs(a,t),this._initialLoadCompleted=!0}catch(t){const e=`Loading monomer libraries error: ${t instanceof Error?t.message:t.toString()}`;o.shell.warning(e);const n=t instanceof Error?t.stack:void 0;this.logger.error(e,void 0,n)}finally{n.close(),this.logger.debug(`${e}, OUT`)}})),this.logger.debug(`${e}, end`),this.loadLibrariesPromise}async loadLibraries(t){return this.loadMonomerLib(t)}loadSetsPromise=Promise.resolve();async loadMonomerSets(t=!1){const e=`${this.toLog()}.loadMonomerSets()`;return this.logger.debug(`${e}, start`),this.loadSetsPromise=this.loadSetsPromise.then((async()=>{this.logger.debug(`${e}, IN`);const t=a.TaskBarProgressIndicator.create("Loading monomer sets ...");try{const[[e]]=await Promise.all([await this.getFileManager().then((t=>[t.getValidSetPaths()]))]),n=e.filter((t=>!0));let i=0;const r=n.length,[o]=await Promise.all([Promise.all(n.map((e=>this.readSet(hn.Es,e).catch((t=>{const n=`Loading monomer sets from '${e}' error: ${t instanceof Error?t.message:t.toString()}`;return new rn("Broken monomer set",[],e,n)})).finally((()=>{t.update(Math.round(100*++i/r),`Loading monomers ${i}/${r}`)})))))]);this._monomerSets.updateSets(o)}catch(t){const e=`Loading monomer sets error: ${t instanceof Error?t.message:t.toString()}`;o.shell.warning(e);const n=t instanceof Error?t.stack:void 0;this.logger.error(e,void 0,n)}finally{t.close(),this.logger.debug(`${e}, OUT`)}})),this.logger.debug(`${e}, end`),this.loadSetsPromise}async readLibrary(t,e){const n=await this.getFileManager();return await n.loadLibraryFromFile(t,e)}async readSet(t,e){const n=await this.getFileManager();return await n.loadSetFromFile(this._monomerLib,t,e)}async selectSpecifiedLibraries(t){const e=await this.getInvalidFileNames(t);if(e.length>0)throw new Error(`Cannot select libraries ${e}: no such library in the list`);const n=await(0,Nt.ub)();n.exclude=(await this.getFileManager()).getValidLibraryPaths().filter((e=>!t.includes(e))),await(0,Nt.Eu)(n)}async getInvalidFileNames(t){const e=(await this.getFileManager()).getValidLibraryPaths();return t.filter((t=>!e.includes(t)))}async loadMonomerLibForTests(){await(0,Nt.Eu)(hn.G3),await this.awaitLoaded(1e4),await this.loadMonomerLib(!0)}static async getInstance(){let t=window.$monomerLibHelperPromise;return null==t&&(t=window.$monomerLibHelperPromise=(async()=>{const t=new pn(Di.logger);return t._eventManager=dn.getInstance(),t})()),t}}var mn=n(1757),fn=n.n(mn),gn=n(3017),yn={};yn.styleTagTransform=A(),yn.setAttributes=b(),yn.insert=g().bind(null,"head"),yn.domAPI=m(),yn.insertStyleElement=w(),d()(gn.A,yn),gn.A&&gn.A.locals&&gn.A.locals;var bn=n(3151);class vn{constructor(t,e=[],n={}){this.onItemChanged=new h.Subject,this.onAddingItemChanged=new h.Subject,this.onItemAdded=new h.Subject,this.onItemRemoved=new h.Subject,this.options={removeButtonTooltip:"Remove item",addButtonTooltip:"Add item",allowAdd:!0,allowRemove:!0},this.addingItemInputs={},this.properties=t,this.options=Object.assign(Object.assign({},this.options),n),this._root=s.divV([],{style:{display:"grid",gridTemplateColumns:`repeat(${this.properties.length}, 1fr)`,alignItems:"center",gap:"12px"},classes:"ui-items-grid"}),this._items=e,this.render()}get root(){return this._root}get items(){return this._items}set items(t){this._items=t,this.render()}addItem(t,e=!0){this._items.push(t),this.render(),e&&this.onItemAdded.next(t)}removeItem(t,e=!0){-1!==this._items.indexOf(t)&&(this._items.splice(this._items.indexOf(t),1),this.render(),e&&this.onItemRemoved.next(t))}removeAtIndex(t,e=!0){if(t<0||t>=this._items.length)return;const n=this._items.splice(t,1);this.render(),e&&this.onItemRemoved.next(n[0])}removeAllItems(){this._items=[],this.render()}render(){var t,e,n,i,r;if(s.empty(this._root),!this.options.horizontalInputNames)for(const n of this.properties){let i=null!==(t=n.caption)&&void 0!==t?t:n.name;(null===(e=this.options.customLabels)||void 0===e?void 0:e[n.name])&&(i=this.options.customLabels[n.name]);const r=s.divText(i);r.style.fontWeight="bold",this._root.appendChild(r)}for(const t of this._items){const e=this.getItemDiv(t);for(const t of e)this._root.appendChild(t)}if(this.options.allowAdd){const t=this.getItemDiv(null!==(r=null===(i=(n=this.options).newItemFunction)||void 0===i?void 0:i.call(n))&&void 0!==r?r:void 0,!0);for(const e of t)this._root.appendChild(e)}}get addingItem(){const t={};return Object.keys(this.addingItemInputs).forEach((e=>{t[e]=this.addingItemInputs[e].value})),t}getItemDiv(t={},e){var n,i;const r=[],o={};let l=null;for(const c of this.properties){void 0===t[c.name]&&(t[c.name]=null);const h=(null===(n=this.options.customInputs)||void 0===n?void 0:n[c.name])?this.options.customInputs[c.name](t):s.input.forProperty(c,t),u=null===(i=this.options.validators)||void 0===i?void 0:i[c.name];u&&h.addValidator(u),r.push(this.options.horizontalInputNames?h.root:this.hideLabel(h.root)),c.propertyType!==a.TYPE.BOOL&&"color"!==c.name.toLowerCase()&&h.input&&(h.input.style.width="100%"),o[c.name]=h,h.onChanged.subscribe((()=>{t[c.name]=h.value,e?this.onAddingItemChanged.next({item:t,fieldName:c.name}):this.onItemChanged.next({item:t,fieldName:c.name})})),h.root.style.alignItems="center",l=h}let c=null;if(e)this.addingItemInputs=o,c=s.icons.add((()=>{const t=this.options.newItemFunction?this.options.newItemFunction():{};Object.keys(o).forEach((e=>{t[e]=o[e].value})),this._items.push(t),this.onItemAdded.next(t),this.render()}),this.options.addButtonTooltip);else{if(!this.options.allowRemove)return r;c=s.icons.delete((()=>{this._items.splice(this._items.indexOf(t),1),this.onItemRemoved.next(t),this.render()}),this.options.removeButtonTooltip)}return l&&l.addOptions?l.addOptions(c):null==l||l.root.appendChild(c),c.style.color="#2083d5",r}hideLabel(t){return t.getElementsByTagName("label")[0]&&t.removeChild(t.getElementsByTagName("label")[0]),t}hasErrors(){return this._root.querySelectorAll(".d4-invalid").length>0}}const wn={A:new V.A(new Uint32Array([2,0,0,0,16,0,0,0,134217728,0,0,0,32,0,33554432,0,0,0,0,0,1024,0,0,0,262144,128,0,0,0,0,0,0,0,2,0,0,524288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1048576,0,536870912,0,0,0,0]),2048),C:new V.A(new Uint32Array([2,0,65536,0,0,0,0,32,0,0,2,0,32,0,0,0,0,0,0,0,1024,0,0,0,262144,128,0,0,0,0,0,0,0,65536,0,0,524288,0,0,0,0,0,0,0,524288,524288,0,0,0,0,0,0,0,0,0,0,0,34603008,0,536870912,64,0,0,0]),2048),D:new V.A(new Uint32Array([2,0,65600,0,0,0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,1024,0,0,0,262400,128,0,0,0,0,0,0,0,0,0,2097152,524288,0,0,0,1024,0,0,0,524288,0,0,0,0,0,0,0,0,0,512,0,0,34603008,0,536870912,0,0,0,0]),2048),E:new V.A(new Uint32Array([2,0,65536,0,0,0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,1024,0,0,8,262144,128,0,0,16,134217728,0,0,0,0,0,0,524288,0,0,0,128,0,0,0,524288,0,0,0,268435456,0,0,0,0,0,512,2147483648,0,34603008,0,536870912,0,0,0,0]),2048),F:new V.A(new Uint32Array([2,0,98304,0,0,0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,1024,0,0,0,262144,128,33554432,0,0,0,0,33554432,0,1024,1,0,524288,32768,32,0,0,0,0,16,524288,0,0,0,0,0,0,0,0,0,71303168,0,0,34603008,131072,536870912,0,0,0,0]),2048),G:new V.A(new Uint32Array([134217728,0,65536,0,0,0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,1024,0,0,0,0,128,0,0,0,0,2097216,0,0,0,0,0,524288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,512,0,0,0,0,536870912,0,0,0,0]),2048),H:new V.A(new Uint32Array([2,0,1073840128,0,0,0,0,0,0,0,0,67108864,32,0,0,0,0,0,0,0,1024,0,512,0,262144,192,0,268435456,0,0,8200,0,0,0,67108864,0,524296,0,32,0,0,0,0,16,524288,0,0,2147483648,0,0,8,0,0,0,0,0,0,34603008,131072,536870920,4194304,0,0,0]),2048),I:new V.A(new Uint32Array([2,0,65536,0,0,0,0,0,150994944,64,0,0,32,0,0,0,0,0,0,0,1024,0,8388608,0,327680,128,0,0,0,0,0,0,0,2,0,524288,524288,0,0,0,0,0,0,0,0,0,0,0,256,0,0,0,0,8388608,0,33554432,0,1048576,0,536870912,0,0,0,0]),2048),K:new V.A(new Uint32Array([2,0,65536,0,0,0,0,0,0,0,0,0,268435488,0,0,0,0,0,0,0,1024,0,0,8,262144,128,0,0,0,0,2097152,0,0,67108864,0,0,524288,0,0,0,8,0,0,0,524288,0,0,8192,0,0,0,0,0,0,0,2147483648,0,34668544,0,545259520,0,0,0,0]),2048),L:new V.A(new Uint32Array([2,0,65536,0,0,0,0,0,134217728,0,0,0,32,512,0,0,0,0,0,0,1024,256,0,8388608,262400,128,0,0,0,0,0,0,0,2,0,0,524288,0,0,0,0,0,0,0,524288,0,0,0,0,0,0,0,0,0,0,0,0,42991616,0,536870912,0,0,0,0]),2048),M:new V.A(new Uint32Array([2050,0,65536,1048576,0,0,0,0,0,0,0,0,1056,0,0,0,0,0,0,0,1024,0,0,8,262144,128,0,0,0,0,0,536870912,0,2,0,0,1074266112,0,0,0,0,0,0,0,524288,0,0,0,4194304,0,0,0,0,0,0,2147483648,0,34603008,0,536870912,4194304,0,0,0]),2048),N:new V.A(new Uint32Array([2,0,65536,0,4096,0,0,0,0,0,0,16777216,32,0,0,0,0,0,0,0,1024,0,0,0,262400,128,0,0,0,0,0,0,0,0,0,0,524288,0,0,0,1024,0,0,0,524288,0,0,0,0,0,0,0,0,0,0,0,0,34603008,0,536871936,67108864,0,0,0]),2048),P:new V.A(new Uint32Array([0,0,1024,0,0,0,0,0,0,131072,0,1024,32,0,0,0,0,512,0,0,1024,0,0,64,0,128,0,0,1073741824,0,0,138412032,16,0,67108864,0,0,0,0,0,0,8192,0,0,8388608,0,0,8,0,0,0,0,0,0,256,0,0,0,0,553648128,0,0,0,0]),2048),Q:new V.A(new Uint32Array([2,0,65536,0,4096,0,0,0,0,0,0,0,32,0,0,0,0,2,0,0,1024,0,0,8,262144,128,0,0,16,0,0,0,0,0,0,0,524288,0,0,0,0,0,0,0,524288,0,0,0,268435456,0,0,0,0,0,16777216,2147483648,0,34603008,0,536871936,0,0,0,0]),2048),R:new V.A(new Uint32Array([2,0,65536,0,4096,0,32,0,0,0,0,0,268435488,0,0,0,0,0,0,32768,134218752,0,16,8,262144,128,0,1073741824,0,0,8388608,0,0,0,65536,0,524289,0,0,0,0,0,0,0,524288,2048,0,0,0,0,0,0,0,0,0,2147483648,0,34603008,1048576,545259520,0,0,0,0]),2048),S:new V.A(new Uint32Array([2,0,65536,0,0,0,1073741824,0,0,0,0,0,32,0,0,4,0,0,0,0,1024,0,0,0,262144,128,0,0,0,0,0,0,0,0,0,0,524288,0,0,1048576,0,0,0,0,524288,0,0,0,0,0,0,0,0,0,8388608,0,0,34603008,0,536870912,0,0,0,0]),2048),T:new V.A(new Uint32Array([2,0,0,0,0,0,0,8,134217728,0,0,67108864,32,0,0,0,0,0,0,0,1024,0,8388608,0,262144,128,0,0,0,0,0,0,0,2,0,524288,524288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,536870912,0,0,0,0,1048576,67108864,536870912,0,0,0,0]),2048),V:new V.A(new Uint32Array([2,0,0,0,0,0,0,0,134217728,0,0,0,32,0,0,0,0,0,0,0,1024,0,8388608,0,262144,128,0,0,0,0,0,1073741824,128,2,0,524288,524288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8192,0,1048576,0,536870912,0,0,0,0]),2048),W:new V.A(new Uint32Array([2,0,98304,8388608,0,0,0,0,0,0,256,4096,32,0,0,0,0,0,0,0,1024,0,0,0,262144,192,0,0,0,0,0,0,0,0,67108865,0,524288,32768,32,0,0,0,8224,16,524288,0,0,0,0,32,128,0,2097152,0,4194304,8388608,0,34603008,8519680,536870912,131072,262144,0,0]),2048),Y:new V.A(new Uint32Array([2,0,98304,0,0,0,0,0,0,4194304,0,0,32,0,0,0,0,0,0,0,1024,0,0,512,262144,128,33554432,0,0,0,0,33554432,0,0,0,0,524288,0,32,0,0,2,0,16,524288,0,0,0,0,0,4,0,0,0,71303168,262144,0,34603008,131072,536870912,0,0,0,0]),2048)},Cn={RNA:{A:new V.A(new Uint32Array([0,0,0,0,0,0,0,0,0,1024,0,67108864,0,0,0,512,0,0,0,8388608,0,0,512,0,0,64,4,0,0,0,4,0,0,0,67108864,0,524289,0,0,0,0,0,0,16,0,659456,0,256,0,16,0,0,0,268435456,0,0,262144,0,131072,0,0,0,8388608,0]),2048),C:new V.A(new Uint32Array([0,1073741824,0,0,0,0,0,2147483648,4,67108864,0,67108864,0,256,0,0,0,0,0,0,1024,0,128,0,0,64,0,0,0,0,0,0,0,0,67108864,0,524289,0,65536,0,0,0,0,16,0,131072,0,4,0,0,0,0,0,0,4194304,0,0,2147483648,131072,0,4096,0,0,0]),2048),G:new V.A(new Uint32Array([0,0,0,0,1024,0,0,0,0,67109888,16384,67108864,0,0,0,0,0,0,0,33562624,1024,33554432,512,16384,0,64,4,0,0,33554432,0,0,0,0,67108864,0,524289,0,0,0,0,0,0,16,0,135168,0,268435456,0,0,0,0,0,268435456,131072,0,0,2147483648,131072,0,0,0,8388608,0]),2048),T:new V.A(new Uint32Array([8388608,0,0,0,0,0,0,0,0,67108864,0,0,0,4,0,0,0,0,0,0,1024,0,0,16384,0,64,0,0,0,0,0,0,0,2,67108864,0,0,0,0,0,0,0,0,40976,0,0,0,0,0,0,0,0,0,67108864,131072,524288,0,0,8519680,0,1,33554432,1048576,0]),2048),U:new V.A(new Uint32Array([0,0,131072,1073741824,0,0,0,0,0,67108864,0,0,0,0,0,0,0,0,0,0,1024,0,128,0,0,64,0,0,0,0,0,0,0,32768,67108864,0,0,0,0,0,0,0,0,16,0,0,0,4,0,0,2048,0,0,0,4341760,0,0,0,131072,0,0,33554432,1048576,0]),2048)},PEPTIDE:wn};async function An(t,e,n=0){if(!Object.keys(Cn).includes(e))return null;const i=await async function(t){const e=a.Func.find({package:"Chem",name:"getMorganFingerprint"})?.[0];if(!e)return null;try{const n=(await e.apply({molString:t}))?.getBuffer().buffer;if(n)return new V.A(new Uint32Array(n),2048)}catch(t){return null}}(t);if(!i)return null;if(!Cn[e])return null;const r=Cn[e];let o=0,s=null;for(const[t,e]of Object.entries(r)){const r=(0,O.$1)(i,e);r>o&&r>=n&&(o=r,s=t)}return s}var Sn,xn=n(857),En={};En.styleTagTransform=A(),En.setAttributes=b(),En.insert=g().bind(null,"head"),En.domAPI=m(),En.insertStyleElement=w(),d()(xn.A,En),xn.A&&xn.A.locals&&xn.A.locals,function(t){t.MONOMER="Monomer",t.SYMBOL="Symbol",t.NAME="Name",t.R_GROUPS="~R-Groups",t.MONOMER_TYPE="Monomer Type",t.POLYMER_TYPE="Polymer Type",t.NATURAL_ANALOG="Natural Analog",t.AUTHOR="Author",t.CREATE_DATE="Create Date",t.ID="ID",t.META="Meta",t.SOURCE="Source"}(Sn||(Sn={}));const Mn={[Sn.MONOMER]:a.COLUMN_TYPE.STRING,[Sn.SYMBOL]:a.COLUMN_TYPE.STRING,[Sn.NAME]:a.COLUMN_TYPE.STRING,[Sn.R_GROUPS]:a.COLUMN_TYPE.STRING,[Sn.MONOMER_TYPE]:a.COLUMN_TYPE.STRING,[Sn.POLYMER_TYPE]:a.COLUMN_TYPE.STRING,[Sn.NATURAL_ANALOG]:a.COLUMN_TYPE.STRING,[Sn.AUTHOR]:a.COLUMN_TYPE.STRING,[Sn.CREATE_DATE]:a.COLUMN_TYPE.DATE_TIME,[Sn.ID]:a.COLUMN_TYPE.INT,[Sn.META]:a.COLUMN_TYPE.STRING,[Sn.SOURCE]:a.COLUMN_TYPE.STRING};class _n{monomerLibManamger;adjustTable(){this.tv?.dataFrame&&(o.data.detectSemanticTypes(this.tv.dataFrame),this.tv.dataFrame.meta.detectSemanticTypes()),setTimeout((()=>{this.tv?.grid&&(this.tv.grid.props.allowEdit=!1,this.tv.grid.col(Sn.NAME).width=100,this.tv.grid.col(Sn.SYMBOL).width=70)}),200)}static VIEW_NAME="Manage Monomers";_newMonomer=bn.pe;_newMonomerForm;monomerLib;tv=null;libInput;static instance;activeMonomerLib=null;constructor(t){this.monomerLibManamger=t,this.monomerLib=t.getBioLib(),this._newMonomerForm=new Pn(t,(()=>this.activeMonomerLib),(async t=>{const e=await this.getMonomersDf(this.libInput.value);this.tv?.dataFrame&&(this.tv.dataFrame=e,this.adjustTable(),null!=t&&setTimeout((()=>{const n=e.col(Sn.SYMBOL).toList().indexOf(t);-1!==n&&(this.tv?.grid.scrollToCell(e.columns.byIndex(0),n),e.currentRow=e.rows.get(n))}),500))}),(()=>this.tv?.dataFrame))}static async getInstance(){if(!this.instance){const t=await pn.getInstance();await t.awaitLoaded(),await t.loadLibrariesPromise,this.instance=new _n(t)}return this.instance}static async getNewInstance(){const t=await pn.getInstance();return await t.awaitLoaded(),await t.loadLibrariesPromise,new _n(t)}async createNewMonomerLib(t,e){this.tv?.grid&&s.setUpdateIndicator(this.tv.grid.root,!0);try{const n=JSON.stringify(e.map((t=>({...t,lib:void 0,wem:void 0}))),null,2);t.endsWith(".json")||(t+=".json"),await(await this.monomerLibManamger.getFileManager()).addLibraryFile(n,t),await o.dapi.files.writeAsText(hn.so+t,n),await this.monomerLibManamger.loadLibraries(!1),o.shell.v=await this.getViewRoot(t)}catch(t){o.shell.error("Error creating library"),console.error(t)}finally{this.tv?.grid&&s.setUpdateIndicator(this.tv.grid.root,!1)}}async createNewLibDialog(t){const e=(await this.monomerLibManamger.getFileManager()).getValidLibraryPaths(),n=s.input.string("Library Name",{placeholder:"Enter library name",nullable:!1,onValueChanged:()=>{const t=i(n.value);r.getButton("Create")?.classList?.toggle("d4-disabled",!!t)}});function i(t){return t&&t.trim()?t.endsWith(".json")&&e.includes(t)||e.includes(t+".json")?"Library with this name already exists":null:"Library name cannot be empty"}n.addValidator(i);const r=s.dialog("Create New Library").add(n).addButton("Create",(async()=>{const e=i(n.value);if(e)o.shell.warning(e);else{try{await this.createNewMonomerLib(function(){let t=n.value;return t.endsWith(".json")||(t+=".json"),t}(),t??[])}catch(t){o.shell.error("Error creating library"),console.error(t)}r.close()}})).show();r.getButton("Create")?.classList?.toggle("d4-disabled",!0)}get newMonomer(){return this._newMonomer}getNewMonomerForm(){return this._newMonomerForm}async getMonomersTableView(t,e=!0){const n=await this.getMonomersDf(t);return this.tv=a.TableView.create(n,e),this.adjustTable(),this.tv.subs.push(o.events.onContextMenu.subscribe((({args:t})=>{if(!t||!t.menu||!t.context||t.context.type!==a.VIEWER.GRID||!t.context.tableView||t.context.tableView.id!==(this.tv.id??"")||!t.item||!t.item.isTableCell||(t.item.tableRowIndex??-1)<0)return;const e=t.item.tableRowIndex;t.menu.item("Edit Monomer",(async()=>{await this.editMonomer(this.tv.dataFrame.rows.get(e))})),this.tv.dataFrame.selection.trueCount>0?(t.menu.item("Remove Selected Monomers",(async()=>{const t=await Promise.all(Array.from(this.tv.dataFrame.selection.getSelectedIndexes()).map((t=>Gn(this.tv.dataFrame.rows.get(t)))));this._newMonomerForm.removeMonomers(t,this.libInput.value)})),t.menu.item("Selection To New Library",(async()=>{const t=await Promise.all(Array.from(this.tv.dataFrame.selection.getSelectedIndexes()).map((t=>Gn(this.tv.dataFrame.rows.get(t)))));this.createNewLibDialog(t)}))):t.menu.item("Remove Monomer",(async()=>{const t=await Gn(this.tv.dataFrame.rows.get(e));this._newMonomerForm.removeMonomers([t],this.libInput.value)}))}))),this.tv.grid&&(this.tv.grid.props.allowEdit=!1),this.tv}static closeAllMonomerManagers(){Array.from(o.shell.tableViews??[]).filter((t=>t.name===_n.VIEW_NAME)).forEach((t=>t.close()))}findActiveManagerView(){if(!this.tv)return null;const t=Array.from(o.shell.tableViews??[]).find((t=>t.id===this.tv.id));return t?o.shell.v=t:_n.closeAllMonomerManagers(),t??null}_skipLibInputOnchange=!1;async getViewRoot(t,e=!0){const n=(await this.monomerLibManamger.getFileManager()).getValidLibraryPaths();if(this._newMonomerForm.molSketcher.resize(),e&&(this.tv=this.findActiveManagerView())&&(t??this.libInput.value)){try{this._skipLibInputOnchange=!0,this.libInput&&(this.libInput.items=n),t&&(this.libInput.value=t)}catch(t){o.shell.error("Error updating library list"),console.error(t)}finally{this._skipLibInputOnchange=!1}const e=await this.getMonomersDf(t);return this.tv.dataFrame=e,this.adjustTable(),this.tv}t??=n[0],this.tv=await this.getMonomersTableView(t,e);let i=this.tv.getRibbonPanels();i.forEach(((t,e)=>{i[e]=t.filter((t=>0!==t.getElementsByClassName("grok-icon-filter").length))})),i=i.filter((t=>t.length>0));const r=s.icons.add((()=>{this._newMonomerForm.setEmptyMonomer()}),"Add New Monomer"),l=s.icons.edit((async()=>{(this.tv?.dataFrame?.currentRowIdx??-1)<0||await this.editMonomer(this.tv.dataFrame.rows.get(this.tv.dataFrame.currentRowIdx))}),"Edit Monomer"),c=s.icons.delete((async()=>{const t=this.tv?.dataFrame?.currentRowIdx??-1,e=Array.from(this.tv?.dataFrame?.selection?.getSelectedIndexes()??[]);if(t<0&&0===e.length)return;if(e.length>0){const t=await Promise.all(e.map((t=>Gn(this.tv.dataFrame.rows.get(t)))));return void await this._newMonomerForm.removeMonomers(t,this.libInput.value)}const n=await Gn(this.tv.dataFrame.rows.get(t));await this._newMonomerForm.removeMonomers([n],this.libInput.value)}));s.tooltip.bind(c,(()=>(this.tv?.dataFrame?.selection?.trueCount??0)>0?"Delete selected monomers":"Delete monomer"));const h=s.iconFA("arrow-to-bottom",(async()=>{const t=this.libInput.value;if(!t)return o.shell.error("No library selected");let e=null;try{e=await o.dapi.files.readAsText(hn.so+t)}catch(e){return o.shell.error(`Error reading library ${t}`),console.error(e)}if(!e)return o.shell.error(`Library ${t} is empty`);a.Utils.download(t,e,"text/plain")}),"Download Monomer Library");i.push([r,l,c,h]),this.tv.setRibbonPanels(i),this.tv.name=_n.VIEW_NAME,this.libInput=s.input.choice("Monomer Library",{value:t,items:n,nullable:!1,onValueChanged:async()=>{try{if(this._skipLibInputOnchange)return;const t=await this.getMonomersDf(this.libInput.value);this.tv.dataFrame=t,this.adjustTable()}catch(t){console.error(t)}}}),this.libInput.addOptions(s.icons.add((()=>{this.createNewLibDialog()}),"Create new monomer library..."));const u=this._newMonomerForm.form;return u.prepend(this.libInput.root),s.tools.waitForElementInDom(this.tv.root).then((()=>{this.tv.dockManager.dock(u,a.DOCK_TYPE.LEFT,null,void 0,.4)})),this.tv}async editMonomer(t){return this._newMonomer=await Gn(t),this._newMonomerForm.setMonomer(this._newMonomer),this._newMonomer}async getMonomersDf(t){this.tv?.grid&&s.setUpdateIndicator(this.tv.grid.root,!0);try{if(t??=(await this.monomerLibManamger.getFileManager()).getValidLibraryPaths()[0],this.activeMonomerLib=await this.monomerLibManamger.readLibrary(hn.so,t),!this.activeMonomerLib)return o.shell.error(`Library ${t} not found`),a.DataFrame.create();const e=this.activeMonomerLib.getPolymerTypes().flatMap((t=>this.activeMonomerLib.getMonomerSymbolsByType(t).map((e=>this.activeMonomerLib.getMonomer(t,e))))),n=a.DataFrame.create(e.length),i=new Set;for(const t of e)t.rgroups.forEach((t=>{t.label&&i.add(t.label)}));const r=Array.from(i);r.sort();for(const[t,e]of Object.entries(Mn))if(n.columns.addNew(t,e),t===Sn.R_GROUPS)for(const t of r)n.columns.addNew(t,a.COLUMN_TYPE.STRING);n.col(Sn.SYMBOL).semType="Monomer",n.col(Sn.SYMBOL).setTag(Rt.Mn.applyToBackground,"true");for(let t=0;t<e.length;t++){let i=Rn(e[t].rgroups,e[t].smiles,e[t].molfile);i=In(i),e[t].rgroups=Nn(e[t].rgroups);const o=r.map((n=>{const i=e[t].rgroups.find((t=>t.label===n));return i?Ln(i,"capGroupSmiles"):""}));let s=null;if(e[t].createDate)try{s=Date.parse(e[t].createDate)}catch(n){console.error(`Error parsing date ${e[t].createDate}`)}n.rows.setValues(t,[i,e[t].symbol,e[t].name,JSON.stringify(e[t].rgroups??[]),...o,e[t].monomerType,e[t].polymerType,e[t].naturalAnalog,e[t].author,s,e[t].id,JSON.stringify(e[t].meta??{}),e[t].lib?.source??""]);try{s&&n.col(Sn.CREATE_DATE)?.set(t,s,!1)}catch(n){console.error(`Error setting date ${e[t].createDate}`)}}return n.col(Sn.MONOMER).semType=a.SEMTYPE.MOLECULE,r.forEach((t=>{n.col(t).semType=a.SEMTYPE.MOLECULE})),n.currentRowIdx=-1,n.onCurrentRowChanged.subscribe((async t=>{try{if(-1===n.currentRowIdx||this._newMonomerForm.molChanged)return;await this.editMonomer(n.rows.get(n.currentRowIdx))}catch(t){console.error(t)}})),n}catch(t){throw o.shell.error("Error creating monomers dataframe"),console.error(t),t}finally{this.tv?.grid&&s.setUpdateIndicator(this.tv.grid.root,!1)}}resetCurrentRowFollowing(){this._newMonomerForm.molChanged=!1}}function In(t){let e=t.replaceAll(/\[R[1-9]\]/g,(t=>`[*:${t[2]}]`));return e=e.replaceAll(/\[\d\*\]/g,(t=>`[*:${t[1]}]`)),e.replaceAll(/\[\d\*\:\d\]/g,(t=>`[*:${t[1]}]`))}const Tn=["alternateId","capGroupName","capGroupSMILES","label"];function Ln(t,e){const n=Object.keys(t).find((t=>t.toLowerCase()===e.toLowerCase()));if(n)return t[n]}function Nn(t){return t.map((t=>{const e=function(t,e){const n={};return t.forEach((t=>{const i=Object.keys(e).find((e=>e.toLowerCase()===t.toLowerCase()));i&&(n[t]=e[i])})),n}(Tn,t),n=Ln(e,"capGroupSMILES"),i=Ln(e,"alternateId"),r=Ln(e,"capGroupName"),o=Ln(e,"label")??"R1";if(n&&i&&r||o.length<2)return e;if(i&&-1!==i.indexOf(`${o}-`)){const t=i.replace(`${o}-`,"");r||(e.capGroupName=t),n||(e.capGroupSMILES=`[*:${o.substring(1)}][${t}]`)}else r&&(n||(e.capGroupSMILES=`[*:${o.substring(1)}][${r}]`),i||(e.alternateId=`${o}-${r}`));return e})).sort(((t,e)=>t.label?.localeCompare(e.label??"")??0))}class Pn{monomerLibManager;getMonomerLib;refreshTable;getMonomersDataFrame;molSketcher;monomerTypeInput;polymerTypeInput;monomerSymbolInput;monomerNameInput;monomerIdInput;monomerNaturalAnalogInput;rgroupsGrid;metaGrid;colors;colorsEditor;saveButton;rgroupsGridRoot;_molChanged=!1;get molChanged(){return this._molChanged}set molChanged(t){this._molChanged=t}saveValidationResult=null;triggerMolChange=!0;inputsTabControl;constructor(t,e,n,i){this.monomerLibManager=t,this.getMonomerLib=e,this.refreshTable=n,this.getMonomersDataFrame=i,this.colors={line:"#000000",background:"#000000",text:"#000000"},this.colorsEditor=new Fn(this.colors),this.molSketcher=new a.chem.Sketcher,this.molSketcher.root.classList.add("monomer-manager-sketcher"),this.polymerTypeInput=s.input.choice("Polymer Type",{value:"PEPTIDE",items:["PEPTIDE","RNA","CHEM","BLOB","G"],onValueChanged:()=>this.onMonomerInputChanged(),nullable:!1}),this.monomerTypeInput=s.input.choice("Monomer Type",{value:"Backbone",items:["Backbone","Branch","Terminal"],onValueChanged:()=>this.onMonomerInputChanged(),nullable:!1}),this.monomerSymbolInput=s.input.string("Monomer Symbol",{nullable:!1,onValueChanged:()=>this.onMonomerInputChanged()}),this.monomerNameInput=s.input.string("Monomer Name",{nullable:!1,onValueChanged:()=>this.onMonomerInputChanged()}),this.monomerNameInput.nullable=!1,this.monomerIdInput=s.input.int("Monomer ID",{nullable:!0,value:0,onValueChanged:()=>this.onMonomerInputChanged()}),this.monomerNaturalAnalogInput=s.input.string("Natural Analog",{nullable:!0,onValueChanged:()=>this.onMonomerInputChanged()}),this.saveButton=s.bigButton("Save",(async()=>{const t=this.validateInputs();t?o.shell.warning(t):await this.saveMonomer()})),this.molSketcher.subs.push(this.molSketcher.onChanged.subscribe((async()=>{if(this.triggerMolChange){try{this.rgroupsGridRoot.style.display="none";const t=this.inputsTabControl.panes.find((t=>"r-groups"===t.name?.toLowerCase()));t&&t.header.style.removeProperty("background-color");let e=this.molSketcher.getSmiles();if(!e)return this.rgroupsGrid.items=[],this.rgroupsGrid.render(),this.saveValidationResult="Monomer molecule is required",void this.invalidateSaveButton();e=Rn([],e);const n=this.findRgroupsInSmiles(e);if(0===n.length)return this.rgroupsGrid.items=[],this.rgroupsGrid.render(),this.saveValidationResult="At least one R-group is required",t&&t.header.style.setProperty("background-color","#ff000030"),void this.invalidateSaveButton();if(new Set(n.map((t=>t[0]))).size!==n.length)return this.saveValidationResult="Duplicate R-groups are not allowed",this.rgroupsGridRoot.style.display="flex",t&&t.header.style.setProperty("background-color","#ff000030"),void this.invalidateSaveButton();const i=n.map((t=>Number.parseInt(t[0].match(/[1-9]/g)[0]))).map((t=>this.rgroupsGrid.items.find((e=>e.label===`R${t}`))??{capGroupSMILES:`[*:${t}][H]`,alternateId:`R${t}-H`,capGroupName:"H",label:`R${t}`}));this.rgroupsGrid.items=i.sort(((t,e)=>t.label?.localeCompare(e.label??"")??0)),this.rgroupsGrid.render(),this.rgroupsGridRoot.style.display="flex";const r=await An(kn(e,i),this.polymerTypeInput.value??"");r&&(this.monomerNaturalAnalogInput.value=r)}catch(t){console.error(t)}this.onMonomerInputChanged(),this._molChanged=!0}else this.triggerMolChange=!0})));const r=[a.Property.js("capGroupSMILES",a.TYPE.STRING,{caption:"R-group SMILES",nullable:!1}),a.Property.js("alternateId",a.TYPE.STRING,{caption:"Alternate ID",nullable:!1}),a.Property.js("capGroupName",a.TYPE.STRING,{caption:"R-group name",nullable:!1}),a.Property.js("label",a.TYPE.STRING,{fieldName:"R-group Label",nullable:!1,userEditable:!1})];this.rgroupsGrid=new vn(r,[],{allowAdd:!1,allowRemove:!1,validators:{capGroupSMILES:t=>t?o.chem.checkSmiles(t)?null:"Invalid SMILES":"Cap group smiles is required",alternateId:t=>t?null:"Alternate ID is required",capGroupName:t=>t?null:"Cap group name is required",label:t=>t?null:"R-group label is required"},customLabels:{capGroupSMILES:"R-group SMILES",alternateId:"Alternate ID",capGroupName:"Cap Group Name",label:"Label"}}),this.rgroupsGrid.onItemChanged.subscribe((()=>this.onMonomerInputChanged())),this.rgroupsGridRoot=s.divV([this.rgroupsGrid.root]),this.rgroupsGridRoot.style.display="none";const l=[a.Property.js("Property",a.TYPE.STRING,{caption:"Property",nullable:!0}),a.Property.js("Value",a.TYPE.STRING,{caption:"Value",nullable:!0})];this.metaGrid=new vn(l,[]),this.onMonomerInputChanged();const c=s.divV([this.polymerTypeInput,this.monomerTypeInput,this.monomerSymbolInput,this.monomerNameInput,this.monomerIdInput,this.monomerNaturalAnalogInput]);this.inputsTabControl=s.tabControl({Monomer:c,"R-groups":this.rgroupsGridRoot,Meta:s.divV([this.metaGrid.root]),Colors:this.colorsEditor.form},!1)}invalidateSaveButton(){this.saveValidationResult?this.saveButton.classList.add("d4-disabled"):this.saveButton.classList.remove("d4-disabled")}onMonomerInputChanged(){setTimeout((()=>{this.saveValidationResult=this.validateInputs(),this.invalidateSaveButton();const t=this.polymerTypeInput.value&&this.polymerTypeInput.value&&!!this.getMonomerLib()?.getMonomer(this.polymerTypeInput.value,this.monomerSymbolInput.value);this.saveButton.textContent=t?"Save Monomer":"Add Monomer"}),200)}setEmptyMonomer(){this.triggerMolChange=!1,this.molSketcher.setSmiles(""),this.monomerSymbolInput.value="",this.monomerNameInput.value="",this.monomerIdInput.value=null,this.monomerNaturalAnalogInput.value=null,this.rgroupsGrid.items=[],this.metaGrid.items=[],this.rgroupsGrid.render(),this.metaGrid.render(),this.rgroupsGridRoot.style.display="none",this.onMonomerInputChanged(),this.colorsEditor.colors={line:"#000000",background:"#000000",text:"#000000"}}setMonomer(t){this.triggerMolChange=!1,this.molSketcher.setSmiles(t.smiles),this.polymerTypeInput.value=t.polymerType,this.monomerTypeInput.value=t.monomerType,this.monomerSymbolInput.value=t.symbol,this.monomerNameInput.value=t.name,this.monomerIdInput.value=t.id,this.monomerNaturalAnalogInput.value=t.naturalAnalog??null,this.rgroupsGrid.items=Nn(t.rgroups),this.metaGrid.items=Object.entries(t.meta??{}).filter((([t,e])=>"colors"!==t?.toLowerCase())).map((([t,e])=>({Property:t,Value:e}))),this.rgroupsGrid.render(),this.metaGrid.render(),this.rgroupsGridRoot.style.display="flex",this.onMonomerInputChanged(),!t.naturalAnalog&&t.polymerType&&An(kn(t.smiles,this.rgroupsGrid.items),t.polymerType).then((t=>{t&&(this.monomerNaturalAnalogInput.value=t)}));const e=t.meta?.colors??"";let n={};try{n=e?JSON.parse(e)?.default:{}}catch(t){console.error(t)}this.colorsEditor.colors={line:n.line??"#000000",background:n.background??"#000000",text:n.text??"#000000"}}validateInputs(){const t=this.inputsTabControl.panes.find((t=>"r-groups"===t.name?.toLowerCase()));if(t&&t.header.style.removeProperty("background-color"),!this.molSketcher.getSmiles())return"Monomer Molecule field is required";for(const t of[this.polymerTypeInput,this.monomerTypeInput,this.monomerSymbolInput,this.monomerNameInput])if(null==t.value||""===t.value)return`${t.caption} field is required`;let e=null;if(this.rgroupsGrid.items.length<1&&(e="At least one R-group is required"),!e)t:for(const t of this.rgroupsGrid.items)for(const[n,i]of Object.entries(t))if(!i){e=`R-group ${n} field is required for ${t.label}`;break t}return!e&&this.rgroupsGrid.hasErrors()&&(e="R-group fields contain errors"),e?(t&&t.header.style.setProperty("background-color","#ff000030"),e):null}findRgroupsInSmiles(t){return[...Array.from(t.matchAll(/\[[1-9]\*\]/g)),...Array.from(t.matchAll(/\[\*\:[1-9]\]/g))]}get form(){this.inputsTabControl.root.classList.add("monomer-manager-form-tab-control"),this.inputsTabControl.header.style.marginBottom="10px";const t=s.buttonsInput([this.saveButton]);return s.tooltip.bind(t,(()=>this.saveValidationResult??"Save monomer to library")),s.divV([this.molSketcher.root,this.inputsTabControl.root,t],{classes:"ui-form",style:{paddingLeft:"10px",overflow:"scroll",maxWidth:"unset"}})}get fieldInputs(){return{molecule:this.molSketcher,polymerType:this.polymerTypeInput,monomerType:this.monomerTypeInput,symbol:this.monomerSymbolInput,name:this.monomerNameInput,id:this.monomerIdInput,naturalAnalog:this.monomerNaturalAnalogInput}}get metaInputs(){return[]}get rgroupInputs(){return[]}getMonomerInfoTable(t){const e=Rn(t.rgroups,t.smiles,t.molfile),n=o.chem.drawMolecule(e,150,150),i=s.tableFromMap({name:t.name,author:t.author,createDate:t.createDate});return s.divH([n,i],{style:{alignItems:"center"}})}async removeMonomers(t,e,n=!0){let i=[];try{const t=await o.dapi.files.readAsText(hn.so+e);i=JSON.parse(t)}catch(t){return o.shell.error(`Error reading library ${e}`),console.error(t)}const r=t.map((t=>$n(i,(e=>e.symbol===t.symbol&&e.polymerType===t.polymerType))));for(let n=0;n<r.length;n++)if(-1===r[n])return void o.shell.error(`Monomer ${t[n].symbol} not found in library ${e}`);const a=r.map((t=>i[t])),l=s.divV(a.map((t=>this.getMonomerInfoTable(t))),{style:{maxHeight:"500px",overflow:"scroll"}}),c=a.length>1,h=c?`Are you sure you want to remove monomers ${a.map((t=>t.symbol)).join(", ")} from ${e} library?`:`Are you sure you want to remove monomer with symbol ${a[0].symbol} from ${e} library?`,u=s.dialog("Remove Monomer"+(c?"s":"")).add(s.h1(h)).add(l).addButton("Remove",(async()=>{i=i.filter((t=>!a.includes(t))),await o.dapi.files.writeAsText(hn.so+e,JSON.stringify(i,null,2)),await(await pn.getInstance()).loadLibraries(!0),await this.refreshTable(),n&&o.shell.info(`Monomer${c?"s":""} ${a.map((t=>t.symbol)).join(", ")} ${c?"were":"was"} successfully removed from ${e} library`),u.close()})).show()}async addMonomerToLib(t,e){let n=[];try{const t=await o.dapi.files.readAsText(hn.so+e);n=JSON.parse(t)}catch(t){return o.shell.error(`Error reading library ${e}`),console.error(t)}const i=$n(n,(e=>e.symbol===t.symbol&&e.polymerType===t.polymerType)),r=this.getMonomersDataFrame()?.col(Sn.MONOMER)?.toList()?.findIndex((e=>e===t.smiles)),a=async()=>{try{const i=n.findIndex((e=>e.symbol===t.symbol&&e.polymerType===t.polymerType));i>=0?n[i]={...t,lib:void 0,wem:void 0}:n.push({...t,lib:void 0,wem:void 0}),await o.dapi.files.writeAsText(hn.so+e,JSON.stringify(n,null,2)),await(await pn.getInstance()).loadLibraries(!0),await this.refreshTable(t.symbol),this._molChanged=!1,o.shell.info(`Monomer ${t.symbol} was successfully saved in library ${e}`)}catch(t){o.shell.error("Error saving monomer"),console.error(t)}this.onMonomerInputChanged()};let l=null,c="";if(i>=0)l=this.getMonomerInfoTable(n[i]),c=`Monomer with symbol '${t.symbol}' already exists in library ${e}.\nAre you sure you want to overwrite it?`;else if((r??-1)>=0){const t=await Gn(this.getMonomersDataFrame().rows.get(r));l=this.getMonomerInfoTable(t),c=`Monomer with the same structure already exists in library ${e} with different symbol (${t.symbol}).\nAre you sure you want to duplicate it?`}if(l){const t=s.dialog("Save Monomer").add(s.divText(c)).add(l).addButton("Save",(()=>{t.close(),a()})).show()}else await a()}async saveMonomer(){let t=this.molSketcher.getSmiles();if(!t||!o.chem.checkSmiles(t))return void o.shell.warning("Invalid SMILES");t=Rn([],t);let e=o.chem.convert(t,a.chem.Notation.Smiles,a.chem.Notation.MolBlock);e=On(e);const n={};this.metaGrid.items.filter((t=>!!t.Property&&!!t.Value)).forEach((t=>{n[t.Property]=t.Value}));const i=this.metaGrid.addingItem;i&&i.Property&&i.Value&&(n[i.Property]=i.Value),"#000000"===this.colorsEditor.colors.line&&"#000000"===this.colorsEditor.colors.background&&"#000000"===this.colorsEditor.colors.text||(n.colors={default:this.colorsEditor.colors});const r={symbol:this.monomerSymbolInput.value,name:this.monomerNameInput.value,molfile:e,smiles:t,polymerType:this.polymerTypeInput.value,monomerType:this.monomerTypeInput.value,naturalAnalog:this.monomerNaturalAnalogInput.value?this.monomerNaturalAnalogInput.value:void 0,id:this.monomerIdInput.value??0,rgroups:this.rgroupsGrid.items,author:a.User.current().friendlyName,createDate:(new Date).toISOString(),meta:n},s=this.getMonomerLib()?.source;s?await this.addMonomerToLib(r,s):o.shell.warning("Monomer library source is not specified")}}function $n(t,e){let n=-1;for(let i=t.length-1;i>=0;i--)if(e(t[i])){n=i;break}return n}function Rn(t,e,n){const i=!e||!o.chem.checkSmiles(e);if(i&&!n)throw new Error("Both SMILES and MOL block are empty or malformed");let r=i?o.chem.convert(n,a.chem.Notation.Unknown,a.chem.Notation.Smiles):e;return r=function(t,e){let n=t;return e.forEach((t=>{const e=t.label[1]??"1",i=new RegExp(`\\[\\${t.capGroupName}:${e}\\]`,"g");n=n.replace(i,`[*:${e}]`)})),n=n.replaceAll(/\[\d[A-Z]{1,2}\]/g,(t=>`[*:${t[1]}]`)),n}(r,t),r=In(r),i?r:o.chem.convert(r,a.chem.Notation.Unknown,a.chem.Notation.Smiles)}function On(t){const e=t.split("\n"),n=e.findIndex((t=>t.startsWith("M")&&t.includes("ISO")));if(-1!==n){const t=e[n].indexOf("ISO");e[n]=e[n].substring(0,t)+"RGP"+e[n].substring(t+3)}const i=e.findIndex((t=>t.includes("V2000")||t.includes("V3000"))),r=Number.parseInt(e[i].trim().split(" ")[0]),o={};for(let t=i+1;t<i+1+r;t++){const n=e[t].indexOf("R ");if(-1===n)continue;"#"!==e[t][n+1]&&(e[t]=e[t].replace("R ","R#"));const r=e[t].trim().split(" ").map((t=>t.trim())).filter(Boolean);if(o[t-i]=1,r.length<14)continue;const s=Number.parseInt(r[13]);Number.isNaN(s)||(o[t-i]=s)}const s=Object.keys(o);if(-1===e.findIndex((t=>t.startsWith("M")&&t.includes("RGP")))){const t=`M RGP${s.length.toString().padStart(3," ")}${Object.entries(o).map((([t,e])=>`${t.toString().padStart(4," ")}${e.toString().padStart(4," ")}`)).join("")}`,n=e.findIndex((t=>t.startsWith("M")&&t.includes("END")));e.splice(n,0,t)}return s.filter((t=>!!Number.parseInt(t))).map((t=>Number.parseInt(t)+i)).forEach((t=>{const n=e[t].split(" "),i=n.findIndex((t=>"R#"===t));if(-1!==i){for(let t=i+1;t<n.length;t++)n[t]&&1==n[t].length&&(Number.parseInt(n[t])??0)>0&&(n[t]="0");e[t]=n.join(" ")}})),e.join("\n")}function kn(t,e){let n=t;return e.forEach((t=>{const e=t.label[1]??"1",i=Ln(t,"capGroupName");n=n.replace(`[*:${e}]`,`[${i}]`)})),n}async function Gn(t){let e;try{e=JSON.parse(t.get(Sn.META)??"{}");for(const t in e)"object"==typeof e[t]&&(e[t]=JSON.stringify(e[t])),("string"!=typeof e[t]||e[t]!==a.INT_NULL.toString()&&e[t]!==a.FLOAT_NULL.toString())&&("number"!=typeof e[t]||e[t]!==a.INT_NULL&&e[t]!==a.FLOAT_NULL)||(e[t]=null)}catch(t){console.error(t)}const n=t.get(Sn.MONOMER);if(!n)throw new Error("Monomer SMILES is empty");let i="";try{i=o.chem.convert(n,a.chem.Notation.Smiles,a.chem.Notation.MolBlock),i=On(i)}catch(t){o.shell.error(`Error converting SMILES to molfile, \n ${n}`),console.error(t)}let r=t.get(Sn.NATURAL_ANALOG);const s=t.get(Sn.POLYMER_TYPE);let l=[];try{if(l=JSON.parse(t.get(Sn.R_GROUPS)??"[]"),!r&&s){const t=await An(kn(n,l),s);t&&(r=t)}}catch(t){l??=[]}return{symbol:t.get(Sn.SYMBOL),name:t.get(Sn.NAME),molfile:i,smiles:n,polymerType:s,monomerType:t.get(Sn.MONOMER_TYPE),naturalAnalog:r,id:t.get(Sn.ID),rgroups:l,meta:e,author:t.get(Sn.AUTHOR),createDate:t.get(Sn.CREATE_DATE)}}class Fn{_colors;_colorInputs;constructor(t){this._colors=t,this._colorInputs={line:s.input.color("Line",{value:t.line,onValueChanged:t=>this._colors.line=t}),background:s.input.color("Background",{value:t.background,onValueChanged:t=>this._colors.background=t}),text:s.input.color("Text",{value:t.text,onValueChanged:t=>this._colors.text=t})}}get colors(){return this._colors}set colors(t){const e={line:a.Color.toHtml(a.Color.fromHtml(t.line??"#000000")),background:a.Color.toHtml(a.Color.fromHtml(t.background??"#000000")),text:a.Color.toHtml(a.Color.fromHtml(t.text??"#000000"))};this._colors=e;for(const t in this._colorInputs)this._colorInputs[t].value=e[t]}get colorsMetaFormat(){return{colors:{default:this._colors}}}get form(){return s.form(Object.values(this._colorInputs))}}class Hn{monomer;root=s.divV([],{classes:"monomer-card-root"});_selected=!1;get selected(){return this._selected}set selected(t){this._selected=t,this.root.style.border=t?"2px solid var(--green-2)":"2px solid var(--grey-2)"}constructor(t){this.monomer=t}render(){s.empty(this.root);const t=this.monomer.smiles&&o.chem.checkSmiles(this.monomer.smiles)?o.chem.drawMolecule(this.monomer.smiles,200,200):o.chem.drawMolecule(this.monomer.molfile??"",200,200);this.root.appendChild(t);const e=s.divH([s.divText("Monomer Name: "),s.divText(this.monomer.name)],{classes:"monomer-card-info-row"});if(this.root.appendChild(e),s.tooltip.bind(e,this.monomer.name),this.monomer.lib?.source){const t=s.divH([s.divText("Source: "),s.divText(this.monomer.lib.source)],{classes:"monomer-card-info-row"});this.root.appendChild(t),s.tooltip.bind(t,this.monomer.lib.source)}const n=s.divH([s.divText("Polymer Type: "),s.divText(this.monomer.polymerType)],{classes:"monomer-card-info-row"});this.root.appendChild(n),s.tooltip.bind(n,this.monomer.polymerType),s.tooltip.bind(this.root,"Select Monomer")}}class Bn{monomerSymbol;monomers;root=s.divH([],{style:{alignItems:"center",width:"100%",overflow:"hidden",visibility:"visible"},classes:"duplicate-monomer-symbol-row"});monomerCards;constructor(t,e,n,i){this.monomerSymbol=t,this.monomers=e,this.monomerCards=e.map((t=>new Hn(t)));const r=s.divH([],{style:{overflowX:"auto",width:"100%"}}),o=s.h1(t,{style:{lineHeight:"2em",fontSize:"1.5em",marginRight:"20px",width:"100px",overflow:"hidden",textOverflow:"elipsis"}});s.tooltip.bind(o,t),this.root.appendChild(o),this.root.appendChild(r),this.monomerCards.forEach((t=>{t.root.onclick=()=>{this.monomerCards.forEach((t=>t.selected=!1)),t.selected=!0,i(t.monomer)},n&&t.monomer===n&&(t.selected=!0),r.appendChild(t.root)}))}render(){this.monomerCards.forEach((t=>t.render()))}}class Dn{monomerCardRows=[];saveSettingsPromise=Promise.resolve();searchInput;_root;monomers;settings;filteredMonomerRows=[];static _instance;vv;static async getInstance(){return Dn._instance||(Dn._instance=new Dn,await Dn._instance.refresh(),(await pn.getInstance()).getMonomerLib().onChanged.subscribe((async()=>await Dn._instance.refresh()))),Dn._instance.refresh(),Dn._instance}async refresh(){this.settings=await(0,Nt.ub)();const t=await pn.getInstance();await t.awaitLoaded(),await t.loadLibrariesPromise,this.monomers=t.duplicateMonomers,this.monomerCardRows=[];for(const e in this.monomers)for(const n in this.monomers[e]){const i=this.settings.duplicateMonomerPreferences?.[e]?.[n]??null,r=i?this.monomers[e][n].find((t=>t.lib?.source===i))??null:null;this.monomerCardRows.push(new Bn(n,this.monomers[e][n],r,(async i=>{this.saveSettingsPromise=this.saveSettingsPromise.then((async()=>{i.lib?.source&&(this.settings.duplicateMonomerPreferences=this.settings.duplicateMonomerPreferences??{},this.settings.duplicateMonomerPreferences[e]=this.settings.duplicateMonomerPreferences[e]??{},this.settings.duplicateMonomerPreferences[e][n]=i.lib.source,await(0,Nt.Eu)(this.settings),o.shell.info(`Monomer '${i.name}' from source '${i.lib.source}' selected for symbol '${n}'.`),t.assignDuplicatePreferances(this.settings))}))})))}if(this.filteredMonomerRows=this.monomerCardRows,this.vv)this.vv.setData(this.filteredMonomerRows.length,(t=>(this.filteredMonomerRows[t].render(),this.filteredMonomerRows[t].root)));else{this.vv=s.virtualView(this.monomerCardRows.length,(t=>(this.monomerCardRows[t].render(),this.monomerCardRows[t].root))),this.vv.root.classList.add("duplicate-monomers-virtual-view"),this.searchInput=s.input.string("Search",{placeholder:"Monomer Symbol",value:"",onValueChanged:()=>t(this.searchInput.value)}),this.searchInput.root.style.justifyContent="center",this.searchInput.input.style.width="200px",this._root=s.divV([s.h1("Manage Duplicate Monomer Symbols",{style:{textAlign:"center"}}),this.searchInput.root,s.divV([this.vv.root],{style:{overflowY:"auto",height:"100%"}})],{style:{height:"100%"}});const t=t=>{this.filteredMonomerRows=this.monomerCardRows.filter((e=>e.monomerSymbol.toLowerCase().includes(t.toLowerCase()))),this.vv.setData(this.filteredMonomerRows.length,(t=>(this.filteredMonomerRows[t].render(),this.filteredMonomerRows[t].root)))}}}constructor(){}get root(){return this._root}}async function Vn(){await qn.showDialog()}async function jn(t=!0){return await zn.showView(t)}class Un{_fileManager;_widget;get widget(){return this._widget}constructor(){}static instancePromise;static async getInstance(){return void 0===Un.instancePromise&&(Un.instancePromise=(async()=>{const t=new Un,e=await(0,bt.pj)();return t._fileManager=await e.getFileManager(),t._widget=await t.createWidget(),t})()),Un.instancePromise}static async reloadWidget(){const t=await Un.getInstance();t._widget=await t.createWidget()}async createWidget(){const t=await this.getWidgetContent();return(await(0,bt.pj)()).eventManager.addLibraryFileRequested$.subscribe((()=>this.promptToAddLibraryFiles())),new a.Widget(t)}async getWidgetContent(){const t=await Wn.createControlsForm();return fn()(t).addClass("monomer-lib-controls-form"),setTimeout((()=>{t&&fn()(t)&&fn()(t).removeClass("ui-form-condensed")}),200),s.divV([t])}async promptToAddLibraryFiles(){a.Utils.openFile({accept:".json",open:async t=>{const e=await t.text(),n=t.name,i=a.TaskBarProgressIndicator.create(`Adding ${n} as a monomer library`);try{await this._fileManager.addLibraryFile(e,n)}catch(t){o.shell.error(`File ${n} is not a valid monomer library, verify it is aligned to HELM JSON schema.`)}finally{i.close()}}})}}class Wn{fileManager;userLibSettings;constructor(t,e){this.fileManager=t,this.userLibSettings=e,this.fileManager.eventManager.updateUIControlsRequested$.subscribe((()=>{this.updateControlsForm()})),this.fileManager.eventManager.librarySelectionRequested$.subscribe((([t,e])=>{this.updateLibrarySelectionStatus(e,t)}))}toLog(){return"LibraryControlsManager<#>"}static async createControlsForm(){Di.logger.debug("LibraryControlsForm.createControlsForm(), start");const[t,e]=await Promise.all([(0,bt.pj)().then((t=>t.getFileManager())),await(0,Nt.ub)()]);return new Wn(t,e)._createControlsForm()}_createControlsForm(){const t=this.createLibraryControls(),e=s.wideForm(t,void 0);return fn()(e).addClass("monomer-lib-controls-form"),e}updateControlsForm(){const t=this._createControlsForm();fn()(".monomer-lib-controls-form").replaceWith(t)}createLibraryControls(){return this.fileManager.getValidLibraryPaths().map((t=>this.createLibInput(t)))}createLibInput(t){const e=`${this.toLog()}.createLibInput()`;Di.logger.debug(`${e}, libFileName = '${t}', start`);const n=!this.userLibSettings.exclude.includes(t),i=s.input.bool(t,{value:n,onValueChanged:()=>{this.fileManager.eventManager.updateLibrarySelectionStatus(t,i.value)}});s.tooltip.bind(i.root,`Include monomers from ${t}`);const r=s.iconFA("trash-alt",(()=>this.promptForLibraryDeletion(t))),a=s.icons.edit((async()=>{o.shell.v=await(await _n.getInstance()).getViewRoot(t)}),"Edit monomer library");return s.tooltip.bind(r,`Delete ${t}`),i.addOptions(a),i.addOptions(r),Di.logger.debug(`${e}, libFileName = '${t}', end`),i}async updateLibrarySelectionStatus(t,e){this.updateLibrarySettings(t,e),await(0,Nt.Eu)(this.userLibSettings);const n=await(0,bt.pj)();await n.loadMonomerLib(!0),o.shell.info("Monomer library user settings saved")}updateLibrarySettings(t,e){t?this.userLibSettings.exclude=this.userLibSettings.exclude.filter((t=>t!==e)):this.userLibSettings.exclude.includes(e)||this.userLibSettings.exclude.push(e)}promptForLibraryDeletion(t){s.dialog("Warning").add(s.divText(`Delete file ${t}?`)).onOK((async()=>{try{const e=a.TaskBarProgressIndicator.create(`Deleting ${t} library`);await this.updateLibrarySelectionStatus(!1,t),await this.fileManager.deleteLibraryFile(t),e.close()}catch(e){console.error(e),o.shell.error(`Failed to delete ${t} library`)}})).showModal(!1)}}class qn{constructor(){}static _instance;dialog;closeDialogSubject$=new h.Subject;static async showDialog(){qn._instance||(qn._instance=new qn,qn._instance.closeDialogSubject$.subscribe((()=>{qn._instance.dialog=void 0}))),qn._instance.dialog||(qn._instance.dialog=await qn._instance.getDialog()),qn._instance.dialog.show()}async getDialog(){const t=dn.getInstance(),e=(await Un.getInstance()).widget,n=s.dialog({title:"Manage monomer libraries",helpUrl:"/help/datagrok/solutions/domains/bio/bio.md#manage-monomer-libraries"});fn()(n.root).css("width","350px"),n.clear(),n.addButton("Add",(()=>t.addLibraryFile()),void 0,"Upload new HELM monomer library"),n.add(e);const i=n.onClose.subscribe((()=>{this.closeDialogSubject$.next(),i.unsubscribe()}));return n}}class zn{constructor(){}static _instance;static viewName="Manage Monomer Libraries";_view;_duplicateManager;libManager;async getView(t=!0){const e=dn.getInstance(),n=(await Un.getInstance()).widget,i=s.bigButton("Add",(()=>e.addLibraryFile()),"Upload new HELM monomer library"),r=s.bigButton("Merge",(()=>{this.mergeSelectedLibs()}),"Merge selected libraries into one"),l=s.splitH([s.divV([n.root,s.buttonsInput([i,r])],{classes:"ui-form"}),this._duplicateManager.root],{style:{width:"100%",height:"100%"}},!0);return this._view=a.View.fromRoot(l),this._view.name=zn.viewName,t&&o.shell.addView(this._view),s.tools.waitForElementInDom(l).then((()=>{setTimeout((()=>{const t=Array.from(l.children).filter((t=>t.classList.contains("ui-box")));if(2!==t.length)return;const[e,n]=t,i=e.getBoundingClientRect().width+n.getBoundingClientRect().width,r=.3*i;e.style.width=`${r}px`;const o=i-r;n.style.width=`${o}px`}),100),this._view.subs.push(o.events.onCurrentViewChanged.subscribe((()=>{try{const t=zn._instance;t&&t._view&&"id"in o.shell.v&&o.shell.v.id===t._view.id&&t._duplicateManager?.refresh()}catch(t){console.error(t)}})))})),this._view}static async showView(t=!0){return zn._instance||(zn._instance=new zn),zn._instance._duplicateManager||(zn._instance._duplicateManager=await Dn.getInstance()),zn._instance.libManager||(zn._instance.libManager=await pn.getInstance()),t&&zn._instance._view&&Array.from(o.shell.views).find((t=>t.id&&t.id===zn._instance._view.id))?(o.shell.v=zn._instance._view,await zn._instance._duplicateManager.refresh(),zn._instance._view):(zn.closeExistingViews(),zn._instance.getView(t))}static closeExistingViews(){Array.from(o.shell.views).filter((t=>t.name===zn.viewName)).forEach((t=>t.close()))}async mergeSelectedLibs(){const t="Library with this name already exists",e=await pn.getInstance();if(await e.awaitLoaded(),await e.loadLibrariesPromise,!e.duplicatesHandled)return void o.shell.warning("Selected libraries contain repeating symbols with different monomers.\n Please choose the correct monomer for each symbol using duplicate monomomer manager.");const n=e.getBioLib().toJSON(),i=s.dialog("Merge selected libraries"),r=s.input.string("Library Name",{placeholder:"Enter new library name",nullable:!1,onValueChanged:()=>{const e=h(r.value);i.getButton("Download")?.classList?.toggle("d4-disabled",!!e&&e!==t),i.getButton("Save")?.classList?.toggle("d4-disabled",!!e)}}),l=(await this.libManager.getFileManager()).getValidLibraryPaths();function c(){let t=r.value;return t.endsWith(".json")||(t+=".json"),t}function h(e){return e&&e.trim()?e.endsWith(".json")&&l.includes(e)||l.includes(e+".json")?t:null:"Library name cannot be empty"}r.addValidator(h),i.add(r).add(s.divText(`Total monomers: ${n.length}`)).addButton("Download",(()=>{a.Utils.download(c(),JSON.stringify(n))})).addButton("Save",(async()=>{i.close();const t=c(),e=JSON.stringify(n),r=await this.libManager.getFileManager();this._view&&s.setUpdateIndicator(this._view.root,!0);try{await r.addLibraryFile(e,t,!1);const n=await(0,Nt.ub)();n.exclude=l,await(0,Nt.Eu)(n),await this.libManager.loadLibraries(!0),await Un.reloadWidget()}catch(e){o.shell.error(`Failed to save library ${t}. see console for details.`),console.error(e)}finally{this._view&&s.setUpdateIndicator(this._view.root,!1)}})).show(),i.getButton("Download")?.classList?.add("d4-disabled"),i.getButton("Save")?.classList?.add("d4-disabled")}}var Yn,Kn=function(t,e,n,i){return new(n||(n=Promise))((function(r,o){function s(t){try{l(i.next(t))}catch(t){o(t)}}function a(t){try{l(i.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?r(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,a)}l((i=i.apply(t,e||[])).next())}))};class Zn{_setBreadcrumbsInViewName(){var t,e;const n=["Home","Demo",...(null!==(t=this._path)&&void 0!==t?t:"").split("/")],i=s.breadcrumbs(n);if(i.onPathClick.subscribe((t=>Kn(this,void 0,void 0,(function*(){const e=t[t.length-1];if(e===i.path[i.path.length-1])return;const n=o.shell.browsePanel.mainTree.getOrCreateGroup("Apps").getOrCreateGroup("Demo");n.currentItem="Demo"===e?n:n.items.find((t=>t.text===e))})))),o.shell.v){if(0!==i.path.length&&"Home"===i.path[0]){const t=s.iconFA("home",(()=>{o.shell.v.close(),o.shell.v=a.View.createByType(a.VIEW_TYPE.HOME)}));t.classList.add("demo-breadcrumbs-home-element"),i.root.firstElementChild.replaceWith(t)}const t=null===(e=o.shell.v.ribbonMenu.root.parentElement)||void 0===e?void 0:e.getElementsByClassName("d4-ribbon-name")[0];t&&(t.textContent="",t.appendChild(i.root))}}constructor(t,e,n=!1,i){var r,o;this.name="",this.description="",this._isAutomatic=!1,this._autoStartFirstStep=!1,this._currentStep=0,this._isStopped=!1,this._isCancelled=!1,this._isStepProcessed=!1,this._root=s.div([],{id:"demo-script",classes:"tutorials-root tutorials-track demo-app-script"}),this._steps=[],this._mainHeader=s.panel([],"tutorials-main-header"),this._header=s.h2(""),this._headerDiv=s.divH([],"tutorials-root-header"),this._stopStartBtn=s.button(s.iconFA("pause"),(()=>Kn(this,void 0,void 0,(function*(){return yield this._changeStopState()}))),"Play / pause"),this._restartBtn=s.button(s.iconFA("redo"),(()=>Kn(this,void 0,void 0,(function*(){return yield this._restartScript()}))),"Restart"),this._nextStepBtn=s.button(s.iconFA("play"),(()=>Kn(this,void 0,void 0,(function*(){this._isStepProcessed||(yield this._nextStep())}))),"Next step"),this._activity=s.panel([],"tutorials-root-description"),this._progressDiv=s.divV([],"tutorials-root-progress"),this._progress=s.element("progress"),this._progressSteps=s.divText(""),this._closeBtn=s.button(s.iconFA("chevron-left"),(()=>this._closeDock()),"Back to demo"),this.DEMO_PATH="apps/Tutorials/Demo",this.name=t,this.description=e,this._isAutomatic=n,this._autoStartFirstStep=null!==(r=null==i?void 0:i.autoStartFirstStep)&&void 0!==r&&r,this._path=null!==(o=null==i?void 0:i.path)&&void 0!==o?o:"",this._progress.max=0,this._progress.value=1,Zn.currentObject=this}get steps(){return this._steps}get stepNumber(){return this._steps.length}_addHeader(){this._createHeaderDiv(),this._createProgressDiv(),this._mainHeader.append(this._headerDiv,this._progressDiv)}_createHeaderDiv(){this._header.innerText=this.name,this._headerDiv.append(this._closeBtn),this._headerDiv.append(this._header),this._nextStepBtn.firstChild.className="grok-icon fas fa-play",this._headerDiv.append(this._isAutomatic?this._stopStartBtn:this._nextStepBtn)}_createProgressDiv(){this._progress.max=this.stepNumber,this._progressDiv.append(this._progress),this._progressSteps=s.divText(`Step: ${this._progress.value} of ${this.stepNumber}`),this._progressDiv.append(this._progressSteps)}_addDescription(){var t;this._activity.append(s.div(this.description,"tutorials-root-description"));for(let e=0;e<this.stepNumber;e++){let n=s.iconFA("clock");this._isAutomatic||0===e&&(n=s.iconFA("play",(()=>this._nextStep()),"Next step"),n.className="grok-icon fas fa-play");const i=s.div(this._steps[e].name,"grok-tutorial-entry-instruction"),r=s.div(null===(t=this._steps[e].options)||void 0===t?void 0:t.description,"grok-tutorial-step-description hidden"),o=s.divH([n,i],"grok-tutorial-entry");this._activity.append(o,r)}}_initRoot(){o.shell.windows.showContextPanel=!0,o.shell.windows.showHelp=!1,this._node=o.shell.dockManager.dock(this._root,a.DOCK_TYPE.FILL,o.shell.dockManager.findNode(o.shell.browsePanel.root),this.name),this._node.container.containerElement.classList.add("tutorials-demo-script-container"),this._addHeader(),this._root.append(this._mainHeader),this._addDescription(),this._root.append(this._activity)}_setViewParams(){var t;o.shell.v&&(o.shell.v.name=this.name,o.shell.v.path=`${this.DEMO_PATH}/${(null!==(t=this._path)&&void 0!==t?t:"").replaceAll(" ","-")}`,this._setBreadcrumbsInViewName())}_nextStep(){return Kn(this,void 0,void 0,(function*(){var t,e;this._isStepProcessed=!0,this._isAutomatic||(this._nextStepBtn.classList.add("disabled"),this._nextStepBtn.firstChild.classList.add("fa-disabled"));const n=this._activity.getElementsByClassName("grok-tutorial-entry")[this._currentStep],i=this._activity.getElementsByClassName("grok-icon")[this._currentStep],r=this._activity.getElementsByClassName("grok-tutorial-step-description")[this._currentStep];i.className="grok-icon far fa-spinner-third fa-spin",r.classList.remove("hidden"),r.classList.add("visible");const l=n,c=(null===(t=this._steps[this._currentStep].options)||void 0===t?void 0:t.delay)?null===(e=this._steps[this._currentStep].options)||void 0===e?void 0:e.delay:2e3;try{this._setViewParams(),yield this._steps[this._currentStep].func(),this._setViewParams()}catch(t){console.error(t)}this._scrollTo(this._root,l.offsetTop-this._mainHeader.offsetHeight),this._isAutomatic&&(yield this._countdown(n,i,c),yield(0,te.cb)(c));const h=s.iconFA("check");if(i.replaceWith(h),h.className="grok-icon far fa-check",this._progress.value++,this._progressSteps.innerText=`Step: ${this._progress.value} of ${this.stepNumber}`,this._currentStep++,this._isStepProcessed=!1,this._currentStep!==this.stepNumber){if(!this._isAutomatic){const t=this._activity.getElementsByClassName("grok-icon")[this._currentStep],e=s.iconFA("play",(()=>this._nextStep()),"Next step");e.className="grok-icon fas fa-play",t.replaceWith(e),this._nextStepBtn.classList.remove("disabled"),this._nextStepBtn.firstChild.classList.remove("fa-disabled")}o.shell.v instanceof a.TableView&&(yield o.data.detectSemanticTypes(o.shell.tv.dataFrame))}else this._isAutomatic?this._stopStartBtn.replaceWith(this._restartBtn):this._nextStepBtn.replaceWith(this._restartBtn)}))}_startScript(){return Kn(this,void 0,void 0,(function*(){for(let t=this._currentStep;t<this.stepNumber&&!this._isStopped&&!this._isCancelled;t++)yield this._nextStep()}))}_scrollTo(t,e){t.focus(),t.scrollTop=e}_countdown(t,e,n){return Kn(this,void 0,void 0,(function*(){const i=s.div([],"demo-script-countdown");e.classList.add("hidden");let r=n/1e3;const o=this._createSVGIndicator(r);i.append(o),t.prepend(i);const a=setInterval((()=>{r--,0===r&&(clearInterval(a),i.remove(),e.classList.remove("hidden"),e.classList.add("visible"))}),1e3)}))}_createSVGIndicator(t){const e=document.createElementNS("http://www.w3.org/2000/svg","svg"),n=document.createElementNS("http://www.w3.org/2000/svg","circle");return n.setAttributeNS(null,"cx","7"),n.setAttributeNS(null,"cy","7"),n.setAttributeNS(null,"r","6"),n.setAttributeNS(null,"style",`animation: countdown ${t}s linear infinite forwards`),e.append(n),e}_changeStopState(){return Kn(this,void 0,void 0,(function*(){const t=this._stopStartBtn.getElementsByClassName("grok-icon");t[0].className="grok-icon fas fa-play",this._isStopped=!this._isStopped,this._isStopped||(t[0].className="grok-icon fal fa-pause",this._isStepProcessed||(yield this._startScript()))}))}_restartScript(){return Kn(this,void 0,void 0,(function*(){o.shell.dockManager.close(this._node),this._clearRoot(),this._setInitParams(),yield this.start()}))}_clearRoot(){this._root=s.div([],{id:"demo-script",classes:"tutorials-root tutorials-track demo-app-script"}),this._mainHeader=s.panel([],"tutorials-main-header"),this._header=s.h2(""),this._headerDiv=s.divH([],"tutorials-root-header"),this._activity=s.panel([],"tutorials-root-description"),this._progressDiv=s.divV([],"tutorials-root-progress"),this._progress=s.element("progress"),this._progressSteps=s.divText(""),this._progress.max=0,this._progress.value=1}_setInitParams(){this._currentStep=0,this._isStopped=!1,this._isCancelled=!1,this._stopStartBtn.getElementsByClassName("grok-icon")[0].className="grok-icon fal fa-pause",this._nextStepBtn.classList.remove("disabled")}_closeDock(){o.shell.dockManager.close(this._node),this.cancelScript()}cancelScript(){this._isCancelled=!0,Zn.currentObject=null}step(t,e,n){return this._steps[this.steps.length]={name:t,func:e,options:n},this}start(){return Kn(this,void 0,void 0,(function*(){this._initRoot(),o.shell.v.name===this.name&&(o.shell.v.close(),this._node=o.shell.dockManager.dock(this._root,a.DOCK_TYPE.FILL,o.shell.dockManager.findNode(o.shell.browsePanel.root),this.name)),this._isAutomatic?yield this._startScript():this._autoStartFirstStep&&(yield this._nextStep())}))}}Zn.currentObject=null,function(t){t.X="Embed_X",t.Y="Embed_Y"}(Yn||(Yn={}));var Xn=n(966),Jn=n(608),Qn=n(1619);class ti{urlParams;funcName;options;df;view;constructor(t,e,n={}){this.urlParams=t,this.funcName=e,this.options=n}async init(t){this.df=t,await this.buildView()}async buildView(){const t=rt()(this.urlParams.entries()).map((([t,e])=>`${t}=${encodeURIComponent(e)}`)).toArray().join("&");this.view=o.shell.addTableView(this.df),this.view.path=this.view.basePath=`func/${Di.name}.${this.funcName}?${t}`;const e={...this.options,sequenceColumnName:"sequence"};for(const[t,n]of this.urlParams.entries())switch(t){case re.n5.fixWidth:case re.n5.fitArea:e[t]=["1","on","true"].includes(n.toLowerCase());break;default:e[t]=n}const n=await this.view.dataFrame.plot.fromType("WebLogo",e);this.view.dockManager.dock(n,a.DOCK_TYPE.DOWN,null,"WebLogo",.35)}}class ei{tableInput;seqColInput;funcParamsDiv;get funcParams(){return{table:this.tableInput.value,sequence:this.seqColInput.value}}get paramsUI(){return this.funcParamsDiv}constructor(){this.tableInput=s.input.table("Table",{value:o.shell.tv.dataFrame,onValueChanged:()=>{this.onTableInputChanged()}});const t=this.tableInput.value.columns.bySemType(a.SEMTYPE.MACROMOLECULE);this.seqColInput=s.input.column("Sequence",{table:this.tableInput.value,value:t,filter:t=>t.semType===a.SEMTYPE.MACROMOLECULE}),this.funcParamsDiv=s.inputs([this.tableInput,this.seqColInput],{style:{minWidth:"320px"}})}onTableInputChanged(){this.seqColInput=s.input.column("Sequence",{table:this.tableInput.value,value:this.tableInput.value.columns.bySemType(a.SEMTYPE.MACROMOLECULE)})}}var ni=n(6869);new class{tooltipHandlerTemp="tooltip-handler.Monomer"};class ii extends Vt{constructor(t,e){super(t,e)}render(t,e,n,i,r,o,s){t.save();try{if(!o.isTableCell)return;const s=o.cell?.column&&o.cell.column?.dart&&"true"===o.cell.column.getTag(Rt.Mn.applyToBackground);t.font="12px monospace",t.textBaseline="middle",t.textAlign="center";const a=o.cell.value;if(!a||a==wt._S)return;let l=Ot.S$,c="rgb(255, 255, 255)";if(this.monomerLib){const t=this.tableCol.getTag(wt.gp.alphabet),e=t===gt.YI.RNA||t===gt.YI.DNA?ni.o.NUCLEOTIDE:ni.o.AA;if(s){const t=this.monomerLib.getMonomerColors(e,a);l=t?.textcolor??l,c=t?.backgroundcolor??c}else l=this.monomerLib.getMonomerTextColor(e,a)}const h=Math.max(2,Math.floor(.15*i));s&&(t.fillStyle=c,t.fillRect(e,n,i,r)),t.fillStyle=l,t.fillText((0,gt.zS)(a,h),e+i/2,n+r/2,i)}finally{t.restore()}}onMouseMove(t,e){if(t.grid.dart!=this.gridCol?.grid.dart||t.gridColumn.dart!=this.gridCol?.dart||!t.tableColumn||!t.isTableCell)return!1;const n=t.tableColumn.getTag(wt.gp.alphabet),i=t.cell.value,r=t.grid.canvas.getBoundingClientRect(),o=t.bounds.right+r.left-4,a=t.bounds.bottom+r.top-4;if(i==wt._S)return s.tooltip.show(s.divText("gap"),o,a),!0;if(!this.monomerLib)return s.tooltip.show(s.divText("Monomer library is not available."),o,a),!0;const l=n===gt.YI.RNA||n===gt.YI.DNA?ni.o.NUCLEOTIDE:ni.o.AA,c=this.monomerLib.getTooltip(l,i);return s.tooltip.show(c,o,a),!0}async awaitRendered(t=1e4,e=`${t} timeout`){return Promise.resolve()}static getOrCreate(t){const[e,n,i]=(0,Ft.BG)(t);let r=i.rendererBack;return r||(r=i.rendererBack=new ii(e,n)),r}}class ri extends a.GridCellRenderer{get name(){return jt.uF.MONOMER}get cellType(){return jt.uF.MONOMER}get defaultHeight(){return 15}get defaultWidth(){return 40}render(t,e,n,i,r,o,s){ii.getOrCreate(o).render(t,e,n,i,r,o,s)}onMouseMove(t,e){ii.getOrCreate(t).onMouseMove(t,e)}}class oi{constructor(t,e,n=""){this.target=t,this.debugEnabled=e,this.prefix=n}error(t,e,n){return this.target.error(this.prefix+t,e,n)}warning(t,e){return this.target.warning(this.prefix+t,e)}info(t,e){return this.target.info(this.prefix+t,e)}debug(t,e){if(this.debugEnabled)return this.target.debug(this.prefix+t,e)}}class si extends Map{_onPropertyChanged=new h.Subject;get onPropertyChanged(){return this._onPropertyChanged}get fontSize(){const t=super.get("FontSize");return t&&!isNaN(t)?Number.parseInt(t):12}set fontSize(t){super.set("FontSize",t),this._onPropertyChanged.next("FontSize")}get maxMonomerLength(){const t=super.get("MaxMonomerLength");return"long"===t?null:parseInt(t)}set maxMonomerLength(t){const e=null===t?"long":t.toString();super.set("MaxMonomerLength",e),this._onPropertyChanged.next("MaxMonomerLength")}get tooltipWebLogo(){return super.get("TooltipWebLogo")}set tooltipWebLogo(t){super.set("TooltipWebLogo",t),this._onPropertyChanged.next("TooltipWebLogo")}get defaultSeparator(){return super.get("DefaultSeparator")}set defaultSeparator(t){if(1!==t.length)throw new Error("The separator must be of length one.");super.set("DefaultSeparator",t),this._onPropertyChanged.next("DefaultSeparator")}constructor(t){super(Object.entries(t))}}class ai extends a.Package{_properties;_seqHelper;get seqHelper(){if(!this._seqHelper)throw new Error("Package Bio .seqHelper is not initialized.");return this._seqHelper}_monomerLib;get monomerLib(){if(!this._monomerLib)throw new Error("Package Bio .monomerLib is not initialized.");return this._monomerLib}_monomerSets;get monomerSets(){if(!this._monomerSets)throw new Error("Package Bio .monomerSets is not initialized.");return this._monomerSets}_rdKitModule;get rdKitModule(){if(!this._rdKitModule)throw new Error("Package Bio .rdKitModule is not initialized.");return this._rdKitModule}get properties(){return this._properties}set properties(t){this._properties=t}_initialized=!1;get initialized(){return this._initialized}constructor(t={debug:!1}){super(),super._logger=new oi(super.logger,t.debug)}completeInit(t,e,n,i){this._seqHelper=t,this._monomerLib=e,this._monomerSets=n,this._rdKitModule=i,this._initialized=!0}handleErrorUI(t){const[e,n]=(0,Ct.AP)(t);o.shell.error(e),this.logger.error(e,void 0,n)}}var li=n(2174);class ci extends a.Widget{seqCol;seqHelper;viewed=!1;wlViewer=null;constructor(t,e){super(s.divV([])),this.seqCol=t,this.seqHelper=e}async init(){const t=this.seqHelper.getSeqHandler(this.seqCol),e=Di.properties.tooltipWebLogo,n=this.seqCol.getTag(ee.gp.tooltipWebLogo);!1===e||["false","off","disable","disabled"].includes(n)||(this.wlViewer=await this.seqCol.dataFrame.plot.fromType("WebLogo",{sequenceColumnName:this.seqCol.name,backgroundColor:0,positionHeight:"Entropy",positionWidth:t.getAlphabetIsMultichar()?24:16,fixWidth:!0,fitArea:!1,positionNames:"",endPositionName:"50"}),this.wlViewer.root.style.height="50px",this.root.appendChild(this.wlViewer.root),this.root.style.width="100%")}detach(){this.wlViewer&&(this.wlViewer.detach(),this.wlViewer=null),super.detach()}}function hi(t,e,n,i){const r=Di.seqHelper.getSeqHandler(t);let o=null,s=null;for(let t=0;t<r.posList.length;++t)r.posList[t]==e&&(o=t),r.posList[t]==n&&(s=t);if(null===o&&null!==e)throw new Error(`Start position ${e} not found.`);if(null===s&&null!==n)throw new Error(`End position ${n} not found.`);if(r.posList.length<s)throw new Error(`End position ${s} exceeds positions length`);const a=i||`${t.name}: (${e??""}-${n??""})`;return r.getRegion(o,s,a)}const ui={df:a.DataFrame.fromCsv("seq,value\nATCCGTCGT,0.5\nTGTTCGTCA,0.4\nATGGTCGTA,0.7\nATCCGTGCA,0.1"),colName:"seq",positionNames:["1","1A","1C","2","4","4A","4B","5","6"].join(gt.z1),regions:[{name:"first region",start:"1",end:"2"},{name:"second region",start:"1C",end:"4"},{name:"overlapping second",start:"1C",end:"4A"},{name:"whole sequence",start:"1",end:"6"},{name:"bad start",start:"0",end:"6"},{name:"bad end",start:"1",end:"4C"},{name:"bad start & end",start:"0",end:"4C"}]};class di{urlParams;funcName;view;data;constructor(t,e){this.urlParams=t,this.funcName=e}async init(t){this.data=t??ui;const e=this.data.df.getCol(this.data.colName);this.data.positionNames&&e.setTag(gt.gp.positionNames,this.data.positionNames),this.data.regions&&e.setTag(gt.gp.regions,JSON.stringify(this.data.regions)),await this.buildView()}async buildView(){await o.data.detectSemanticTypes(this.data.df),this.view=o.shell.addTableView(this.data.df),this.view.path=this.view.basePath=`func/${Di.name}.${this.funcName}`;const t=await this.view.dataFrame.plot.fromType("WebLogo",{sequenceColumnName:this.data.colName});this.view.dockManager.dock(t,a.DOCK_TYPE.DOWN,null,"WebLogo",.35)}}class pi{call;seqHelper;inputs=new class{table;sequence;region;start;end;name};constructor(t,e){this.call=t,this.seqHelper=e;const n=t=>this.call.inputParams[t].property.description;this.inputs.table=s.input.table("Table",{value:this.call.inputParams.table.value??o.shell.tv.dataFrame});const i=this.call.inputParams.sequence.value??this.inputs.table.value.columns.bySemType(a.SEMTYPE.MACROMOLECULE);this.inputs.sequence=s.input.column("Sequence",{table:o.shell.tv.dataFrame,value:i,onValueChanged:this.sequenceInputChanged.bind(this),filter:t=>t.semType===a.SEMTYPE.MACROMOLECULE}),this.inputs.start=s.input.choice("Start",{onValueChanged:this.startInputChanged.bind(this)}),this.inputs.end=s.input.choice("End",{onValueChanged:this.endInputChanged.bind(this)}),this.inputs.region=s.input.choice("Region",{value:null,items:[],onValueChanged:this.regionInputChanged.bind(this)}),this.inputs.name=s.input.string("Column name",{value:this.getDefaultName(),onValueChanged:this.nameInputChanged.bind(this),clearIcon:!0}),this.inputs.name.onInput.subscribe((()=>this.nameInputInput.bind(this)));for(const t in this.call.inputParams)s.tooltip.bind(this.inputs[t].captionLabel,n(t));this.sequenceInputChanged()}sequenceInputChanged(){const t=this.inputs.sequence.value;t&&this.seqHelper.getSeqHandler(t),this.updateRegionItems(),this.updateStartEndInputItems(),this.updateRegion(!0),this.updateNameInput()}fixRegion=!1;regionInputChanged(){this.fixRegion=!0;try{const t=this.inputs.region.stringValue,e=t?JSON.parse(t):null;if(null!==e)this.inputs.start.value=e?.start,this.inputs.end.value=e?.end;else{const t=this.seqHelper.getSeqHandler(this.inputs.sequence.value);this.inputs.start.value=t.posList[0],this.inputs.end.value=t.posList[t.posList.length-1]}}finally{this.fixRegion=!1}}startInputChanged(){this.updateRegion(!1),this.updateNameInput()}endInputChanged(){this.updateRegion(!1),this.updateNameInput()}nameInputChanged(){this.defaultNameUpdating||(this.defaultName=!1)}nameInputInput(){this.inputs.name.value||(this.defaultName=!0,this.inputs.name.input.focus())}updateStartEndInputItems(){const t=this.inputs.sequence.value,e=t?this.seqHelper.getSeqHandler(t):null,n=this.inputs.start.input,i=this.inputs.end.input;for(let t=n.options.length-1;t>=0;--t)n.options.remove(t);for(let t=i.options.length-1;t>=0;--t)i.options.remove(t);for(const t of e?.posList??[]){const e=document.createElement("option"),r=document.createElement("option");e.text=r.text=t,e.value=r.value=t,n.options.add(e),i.options.add(r)}n.value=e?.posList[0]??"",i.value=e?.posList[e?.posList.length-1]??""}updateRegionItems(){const t=this.inputs.sequence.value,e=t?t.getTag(gt.gp.regions):null,n=e?JSON.parse(e):null,i=this.inputs.region.input;for(let t=i.options.length-1;t>=0;--t)i.options.remove(t);const r=document.createElement("option");if(r.text="",r.value=JSON.stringify(null),i.options.add(r),null!=n){this.inputs.region.root.style.removeProperty("display");for(const t of n){const e=document.createElement("option");e.text=`${t.name}: ${t.start}-${t.end}`,e.value=JSON.stringify(t),i.options.add(e)}}else this.inputs.region.root.style.display="none"}updateRegion(t){const e=this.inputs.start.stringValue??"",n=this.inputs.end.stringValue??"";if(!this.fixRegion){const t=this.inputs.region.input;t.selectedIndex=-1;for(let i=t.options.length-1;i>=0;--i){const r=t.options[i],o=JSON.parse(r.value);o&&e===o.start&&n===o.end&&(t.selectedIndex=i)}}}defaultName=!0;defaultNameUpdating=!1;updateNameInput(){this.defaultNameUpdating=!0;try{this.defaultName&&(this.inputs.name.value=this.getDefaultName())}finally{this.defaultNameUpdating=!1}}getDefaultName(){const t=this.inputs.region.stringValue,e=t?JSON.parse(t):null,n=this.inputs.sequence.value,i=this.inputs.start.stringValue??"",r=this.inputs.end.stringValue??"";return null!=e?`${n.name}(${e.name}): ${e.start}-${e.end}`:`${n?.name}: (${i}-${r})`}getParams(){return{table:this.inputs.table.value,sequence:this.inputs.sequence.value,start:this.getStart(),end:this.getEnd(),name:this.getName()}}getStart(){return this.inputs.start.stringValue}getEnd(){return this.inputs.end.stringValue}getName(){const t=this.inputs.name.stringValue;return""==t?null:t}dialog(){const t=s.inputs(Object.values(this.inputs),{style:{minWidth:"320px"}});s.dialog({title:"Get Region"}).add(t).onOK((()=>{(async()=>{const t=this.getParams();await this.call.func.prepare(t).call(!0)})().catch((t=>{Di.handleErrorUI(t)}))})).show()}widget(){const t=s.inputs(Object.entries(this.inputs).filter((([t,e])=>!["table","sequence"].includes(t))).map((([t,e])=>e))),e=s.button("Get Region",(()=>{(async()=>{const t=this.getParams();await this.call.func.prepare(t).call(!0)})().catch((t=>{Di.handleErrorUI(t)}))}));return a.Widget.fromRoot(s.divV([t,s.div(e)]))}}var mi=n(8754);async function fi(t,e,n,i,r){const o=await async function(t,e,n,i,r){const o=(0,vt.R)(e,r),s=r.getSeqHandler(e).getNewColumnFromList("ref",[n]),l=r.getSeqHandler(s).getSplitted(0),c=i===ft.IDENTITY?function(t,e){const n=e.columns.length,i=new Array(n),r=new Array(n),o=new Array(n);for(let s=0;s<n;++s){const n=e.columns.byIndex(s);i[s]=n.getRawData(),r[s]=n.categories.indexOf("");const a=s<t.length?t.getOriginal(s):wt._S;o[s]=n.categories.indexOf(a)}const s=a.Column.float("Identity",e.rowCount),l=s.getRawData();for(let n=0;n<e.rowCount;++n){l[n]=0;for(let e=0;e<t.length;++e)(i[e]?i[e][n]:0)===o[e]&&++l[n];l[n]/=t.length}return s}(l,o):i===ft.SIMILARITY?await async function(t,e,n){const i=e.columns.toList();return await(0,bt.uL)(i,t,n)}(l,o,r):null;if(null===c)throw new Error(`In bio library: Unknown sequence scoring method: ${i}`);return c.name=t.columns.getUnusedName(c.name),t.columns.add(c),c}(t,e,n,i,r);for(let t=0;t<o.length;t++)e.isNone(t)&&o.set(t,null,!1);return o}var gi=n(294),yi=n(330);const bi=OCL;var vi=n(9099);class wi{monomerSymbol;constructor(t){this.monomerSymbol=t}atoms;bonds;rGroups;get atomCount(){return this.atoms.count}get bondCount(){return this.bonds.count}shiftR1GroupToOrigin(){const t=this.rGroups.getAtomicIdx(1);if(null===t)throw new Error(`Cannot find R1 group for monomer ${this.monomerSymbol}`);const{x:e,y:n}=this.atoms.atomCoordinates[t];this.atoms.shift({x:-e,y:-n})}alignR2AlongX(){const t=this.rGroups.getAtomicIdx(2);if(null===t)throw new Error(`Cannot find R2 group for monomer ${this.monomerSymbol}`);const e=this.atoms.atomCoordinates[t],n=e.y/e.x,i=Math.atan(n);if(isNaN(i))throw new Error(`Cannot calculate angle for R2 group for monomer ${this.monomerSymbol}`);this.rotateCoordinates(-i)}shiftMonomerToDefaultPosition(){this.shiftR1GroupToOrigin(),null!==this.rGroups.getAtomicIdx(2)&&this.alignR2AlongX()}deleteBondLineWithSpecifiedRGroup(t){this.rGroups.deleteBondLineWithSpecifiedRGroup(t)}shiftCoordinates(t){this.atoms.shift(t)}rotateCoordinates(t){this.atoms.rotate(t)}getBondLines(){return this.bonds.getBondLines()}getAtomLines(){return this.atoms.atomLines}removeRGroups(t){this.rGroups.removeRGroups(t)}replaceRGroupWithAttachmentAtom(t,e){this.rGroups.replaceRGroupWithAttachmentAtom(t,e)}getAttachmentAtomByRGroupId(t){return this.rGroups.getAttachmentAtomIdByRGroupId(t)}shiftBonds(t){this.bonds.shift(t)}capRGroups(t){this.rGroups.capRGroups(t)}}var Ci=n(6956);class Ai{atoms;bonds;constructor(t,e,n){this.atoms=e,this.bonds=n,this.rGroupIdToAtomicIndexMap=t.getRGroupIdToAtomicIdxMap()}rGroupIdToAtomicIndexMap;rGroupBondPositionMap=new Map;getAtomicIdx(t){const e=this.rGroupIdToAtomicIndexMap.get(t);return void 0===e?null:e}removeRGroupsFromAtomBlock(t){t.forEach((t=>{if(void 0===this.rGroupIdToAtomicIndexMap.get(t))throw new Error(`Cannot find atomic index for R group ${t}`)}));const e=Array.from(this.rGroupIdToAtomicIndexMap.entries()).filter((([e,n])=>t.includes(e))).map((([t,e])=>e));this.atoms.deleteAtoms(e)}removeRGroups(t){this.removeRGroupsFromAtomBlock(t),t.forEach((t=>{const e=this.replaceRGroupInBondsByDummy(t);this.rGroupBondPositionMap.set(t,e)}))}replaceRGroupInBondsByDummy(t){const e=this.rGroupIdToAtomicIndexMap.get(t);if(this.rGroupBondPositionMap.has(t))throw new Error(`R group ${t} is already handled`);const n=this.bonds.getPositionsInBonds(e+1);if(0===n.length)throw new Error(`Cannot find position for R group ${t}`);if(n.length>1)throw new Error(`More than one position for R group ${t}`);const i=n[0];return this.bonds.replacePositionsInBondsByDummy([i]),this.bonds.removeAtomIdFromBonds(e+1),this.removeRGroupFromAtomicIdxMap(t,e),i}removeRGroupFromAtomicIdxMap(t,e){this.rGroupIdToAtomicIndexMap.delete(t);for(const[t,n]of this.rGroupIdToAtomicIndexMap)n>e&&this.rGroupIdToAtomicIndexMap.set(t,n-1)}deleteBondLineWithSpecifiedRGroup(t){const e=this.rGroupBondPositionMap.get(t);if(!e)throw new Error(`Cannot find position for R group ${t}`);const{bondLineIdx:n}=e;this.bonds.deleteBondLines([n]),this.rGroupBondPositionMap.delete(t),this.rGroupIdToAtomicIndexMap.delete(t),this.rGroupBondPositionMap.forEach((t=>{t.bondLineIdx>n&&(t.bondLineIdx-=1)}))}replaceRGroupWithAttachmentAtom(t,e){const n=this.rGroupBondPositionMap.get(t);if(!n)throw new Error(`Cannot find position for R group ${t}`);const{bondLineIdx:i,nodeIdx:r}=n;this.bonds.bondedAtoms[i][r]=e}getAttachmentAtomIdByRGroupId(t){const e=this.rGroupBondPositionMap.get(t);if(!e)throw new Error(`Cannot find position for R group ${t}`);const{bondLineIdx:n,nodeIdx:i}=e;return this.bonds.bondedAtoms[n][(i+1)%2]}capRGroups(t){this.rGroupIdToAtomicIndexMap.forEach(((e,n)=>{const i=t[n-1];i===Ci.mP?(this.removeRGroups([n]),this.deleteBondLineWithSpecifiedRGroup(n)):this.atoms.replaceRGroupSymbolByElement(e,i)}))}}class Si{coordinates=[];rawAtomLines=[];get count(){return this.coordinates.length}get atomCoordinates(){return this.coordinates}replaceRGroupSymbolByElement(t,e){this.rawAtomLines[t]=this.rawAtomLines[t].replace("R#",e)}deleteAtoms(t){this.coordinates=this.coordinates.filter(((e,n)=>!t.includes(n))),this.rawAtomLines=this.rawAtomLines.filter(((e,n)=>!t.includes(n)))}shift(t){this.coordinates=this.coordinates.map((e=>{const n=e.x+t.x,i=e.y+t.y;if(isNaN(n)||isNaN(i))throw new Error(`Cannot shift coordinates by ${t.x}, ${t.y}`);return{x:n,y:i}}))}rotate(t){this.coordinates=this.coordinates.map((e=>{const n=e.x,i=e.y,r=n*Math.cos(t)-i*Math.sin(t),o=n*Math.sin(t)+i*Math.cos(t);if(isNaN(r)||isNaN(o))throw new Error(`Cannot rotate coordinates by ${t}`);return{x:r,y:o}}))}}class xi extends Si{constructor(t){super(),this.rawAtomLines=t.getAtomLines(),this.coordinates=this.rawAtomLines.map((t=>({x:parseFloat(t.substring(0,10)),y:parseFloat(t.substring(10,20))})))}get atomLines(){return this.rawAtomLines.map(((t,e)=>{const n=this.coordinates[e];return`${n.x.toFixed(4).padStart(10," ")}${n.y.toFixed(4).padStart(10," ")}${t.substring(20)}`}))}}class Ei{bondedAtomPairs=[];rawBondLines=[];get count(){return this.bondedAtomPairs.length}get bondedAtoms(){return this.bondedAtomPairs}deleteBondLines(t){this.rawBondLines=this.rawBondLines.filter(((e,n)=>!t.includes(n))),this.bondedAtomPairs=this.bondedAtomPairs.filter(((e,n)=>!t.includes(n)))}getPositionsInBonds(t){const e=[];return this.bondedAtomPairs.forEach(((n,i)=>{n.forEach(((n,r)=>{n===t&&e.push({bondLineIdx:i,nodeIdx:r})}))})),e}replacePositionsInBondsByDummy(t,e){void 0===e&&(e=-1),t.forEach((t=>{const{bondLineIdx:n,nodeIdx:i}=t;this.bondedAtomPairs[n][i]=e}))}removeAtomIdFromBonds(t){this.bondedAtomPairs=this.bondedAtomPairs.map((e=>e.map((e=>e>t?e-1:e))))}shift(t){this.bondedAtomPairs=this.bondedAtomPairs.map((e=>e.map((e=>e+t))))}}class Mi extends Ei{constructor(t){super(),this.rawBondLines=t.getBondLines(),this.bondedAtomPairs=this.rawBondLines.map((t=>[parseInt(t.substring(0,3)),parseInt(t.substring(3,6))]))}getBondLines(){return this.bondedAtomPairs.map(((t,e)=>{if(t.some((t=>-1===t)))throw new Error(`Bonded pair ${t} contains -1`);return`${t[0].toString().padStart(3," ")}${t[1].toString().padStart(3," ")}${this.rawBondLines[e].substring(6)}`}))}}class _i extends wi{constructor(t,e){super(e);const n=Re.getInstance(t);this.atoms=new xi(n),this.bonds=new Mi(n),this.rGroups=new Ai(n,this.atoms,this.bonds),this.shiftMonomerToDefaultPosition()}}class Ii extends Si{molfileHandler;constructor(t){super(),this.molfileHandler=t,this.rawAtomLines=t.getAtomLines(),this.coordinates=this.getCoordinates()}getCoordinates(){const t=this.molfileHandler.x,e=this.molfileHandler.y;return Array.from(t).map(((t,n)=>({x:t,y:e[n]})))}get atomLines(){const t=/^(M V30 [^-]*)(-?\d+\.\d+)( )(-?\d+\.\d+)( -?\d+\.\d+.*)$/,e=/\sRGROUPS=\(\d+(\s+\d+)*\)/;return this.rawAtomLines.map(((n,i)=>{const r=this.coordinates[i],o=r.x.toFixed(4)+"00",s=r.y.toFixed(4)+"00";return n.replace(t,((t,e,n,i,r,a)=>e+o+i+s+a)).replace(e,"")}))}replaceRGroupSymbolByElement(t,e){super.replaceRGroupSymbolByElement(t,e);const n=this.rawAtomLines[t].substring(3).split(" ");n.length>7&&(this.rawAtomLines[t]=`M ${n.slice(0,7).join(" ")}`)}}class Ti extends Ei{molfileHandler;constructor(t){super(),this.molfileHandler=t,this.rawBondLines=t.getBondLines(),this.bondedAtomPairs=this.getBondedAtomPairs()}getBondedAtomPairs(){return this.molfileHandler.pairsOfBondedAtoms.map((t=>[t[0],t[1]]))}getBondLines(){const t=/^(M\s+V30\s+\d+\s+\d+\s+)(\d+)(\s+)(\d+)(.*)$/;return this.bondedAtomPairs.map(((e,n)=>{if(e.some((t=>-1===t)))throw new Error(`Bonded pair ${e} contains -1`);return this.rawBondLines[n].replace(t,((t,n,i,r,o,s)=>`${n}${e[0]}${r}${e[1]}${s}`))}))}}class Li extends wi{constructor(t,e){super(e);const n=Re.getInstance(t);this.atoms=new Ii(n),this.bonds=new Ti(n),this.rGroups=new Ai(n,this.atoms,this.bonds),this.shiftMonomerToDefaultPosition()}}class Ni{static getInstance(t,e){if(Re.isMolfileV2K(t))return new _i(t,e);if(Re.isMolfileV3K(t))return new Li(t,e);throw new Error("Unsupported molfile version")}}class Pi{monomerSymbol;monomerIdx;helm;monomerLib;molfileWrapper;capGroupElements=[];static molfileV2KToV3KCache=new Map;constructor(t,e,n,i,r,o){this.monomerSymbol=t,this.monomerIdx=e,this.helm=n,this.monomerLib=o;const s=this.getLibraryMonomerObject();let a=s.molfile;Re.isMolfileV2K(a)&&(a=this.convertMolfileToV3KFormat(a,t,r)),this.molfileWrapper=Ni.getInstance(a,t),this.capGroupElements=this.getCapGroupElements(s),this.removeRGroups(n.bondedRGroupsMap[e]),this.capRemainingRGroups(),this.shiftCoordinates(i)}get atomCount(){return this.molfileWrapper.atomCount}get bondCount(){return this.molfileWrapper.bondCount}convertMolfileToV3KFormat(t,e,n){if(Pi.molfileV2KToV3KCache.has(t))return Pi.molfileV2KToV3KCache.get(t);let i=null;try{if(i=n.get_mol(t,JSON.stringify({mergeQueryHs:!0})),i){const e=i.get_v3Kmolblock();return Pi.molfileV2KToV3KCache.set(t,e),e}throw new Error(`Cannot convert ${e} to molV3000`)}finally{i?.delete()}}getLibraryMonomerObject(){const t=this.helm.getPolymerTypeByMonomerIdx(this.monomerIdx),e=this.monomerLib.getMonomer(t,this.monomerSymbol);if(!e)throw new Error(`Monomer ${this.monomerSymbol} is not found in the library`);return e}getCapGroupElements(t){return t.rgroups.map((t=>(t.capGroupSmiles||t.capGroupSMILES).replace(/(\[|\]|\*|:|\d)/g,"")))}shiftCoordinates(t){this.molfileWrapper.shiftCoordinates(t)}getAtomLines(){return this.molfileWrapper.getAtomLines()}getBondLines(){return this.molfileWrapper.getBondLines()}removeRGroups(t){this.molfileWrapper.removeRGroups(t)}capRemainingRGroups(){this.molfileWrapper.capRGroups(this.capGroupElements)}replaceRGroupWithAttachmentAtom(t,e){this.molfileWrapper.replaceRGroupWithAttachmentAtom(t,e)}getAttachmentAtomByRGroupId(t){return this.molfileWrapper.getAttachmentAtomByRGroupId(t)}deleteBondLineWithSpecifiedRGroup(t){this.molfileWrapper.deleteBondLineWithSpecifiedRGroup(t)}shiftBonds(t){this.molfileWrapper.shiftBonds(t)}}class $i{rdKitModule;monomerLib;constructor(t,e,n){this.rdKitModule=e,this.monomerLib=n,this.helm=new vi.f(t)}monomerWrappers=[];helm;addMonomer(t,e,n){if(t===wt.b9[gt.Hi.HELM])return;const i=this.monomerWrappers.length,r=new Pi(t,i,this.helm,n,this.rdKitModule,this.monomerLib);this.monomerWrappers.push(r)}getAtomNumberShifts(){const t=[];let e=0;return this.monomerWrappers.forEach((n=>{t.push(e),e+=n.getAtomLines().length})),t}restoreBondsBetweenMonomers(){this.helm.bondData.forEach((t=>{const e=t.map((t=>t.monomerIdx)),n=t.map((t=>t.rGroupId)),i=e.map((t=>this.monomerWrappers[t])),r=i[1].getAttachmentAtomByRGroupId(n[1]);i[0].replaceRGroupWithAttachmentAtom(n[0],r),i[1].deleteBondLineWithSpecifiedRGroup(n[1])}))}compileToMolfile(){const t=[],e=[],n=this.getAtomNumberShifts();this.monomerWrappers.forEach(((t,e)=>{t.shiftBonds(n[e])})),this.restoreBondsBetweenMonomers();const i=new gi.Cg;for(const[n,r]of rt().enumerate(this.monomerWrappers)){const o=t.length,s=e.length;t.push(...n.getAtomLines()),e.push(...n.getBondLines());const a="RNA"==this.helm.getPolymerTypeByMonomerIdx(r)?Ht.o.NUCLEOTIDE:Ht.o.AA;i.set(r,{biotype:a,symbol:n.monomerSymbol,atoms:rt().count(o).take(n.atomCount).toArray(),bonds:rt().count(s).take(n.bondCount).toArray()})}const r=t.length,o=e.length;return{molfile:[this.getV3KHeader(r,o),this.getV3KAtomBlock(t),this.getV3KBondBlock(e),"M V30 END CTAB\nM END"].join("\n"),monomers:i}}getV3KHeader(t,e){return`\n Datagrok\n\n 0 0 0 0 0 0 0 0 0 0999 V3000\nM V30 BEGIN CTAB\nM V30 COUNTS ${t} ${e} 0 0 1`}getV3KAtomBlock(t){const e=/^(M V30 )(\d+)( .*)$/;return["M V30 BEGIN ATOM",...t.map(((t,n)=>{const i=n+1;return t.replace(e,((t,e,n,r)=>e+i+r))})),"M V30 END ATOM"].join("\n")}getV3KBondBlock(t){const e=/^(M V30 )(\d+)( .*)$/;return["M V30 BEGIN BOND",...t.map(((t,n)=>{const i=n+1;return t.replace(e,((t,e,n,r)=>e+i+r))})),"M V30 END BOND"].join("\n")}}class Ri{constructor(t){this.molfileHandler=Re.getInstance(t)}molfileHandler;get monomerSymbols(){return this.molfileHandler.atomTypes}getMonomerShifts(t){return{x:this.molfileHandler.x[t],y:this.molfileHandler.y[t]}}}class Oi{helmHelper;rdKitModule;monomerLib;constructor(t,e,n){this.helmHelper=t,this.rdKitModule=e,this.monomerLib=n}convertToSmiles(t){const e=t.dataFrame,n=this.getSmilesList(t),i=`smiles(${t.name})`,r=e?e.columns.getUnusedName(i):i;return a.Column.fromStrings(r,n.map((t=>null===t?"":t)))}getSmilesList(t){return this.convertToMolfileV3KColumn(t).toList().map((t=>a.chem.convert(t,a.chem.Notation.MolBlock,a.chem.Notation.Smiles)))}molV3KtoMolV3KOCL(t){try{if(!t)return"";return bi.Molecule.fromMolfile(t).toMolfileV3().replace("STERAC1","STEABS")}catch(t){const[e,n]=(0,Ct.AP)(t);return Di.logger.error(e,void 0,n),""}}getMolV3000ViaOCL(t,e){const n=t.map((t=>{if(null===t)return"";const e=t.get_v3Kmolblock();return t.delete(),e})),i=new Array(n.length),r=a.TaskBarProgressIndicator.create("Handling chirality...");for(let t=0;t<n.length;t++){i[t]=this.molV3KtoMolV3KOCL(n[t]);const e=t/n.length*100;r.update(e,`${e?.toFixed(2)}% of molecules completed`)}return r.close(),a.Column.fromStrings(e,i)}convertToRdKitBeautifiedMolfileColumn(t,e,n,i){const r=t.dataFrame,o=this.convertToMolfileV3KColumn(t).toList().map((t=>{if(""===t)return null;const e=n.get_mol(t);return e?(e.set_new_coords(),e.normalize_depiction(1),e.straighten_depiction(!0),e):null})),s=`molfile(${t.name})`,l=r?r.columns.getUnusedName(s):s;return e?this.getMolV3000ViaOCL(o,l):a.Column.fromStrings(l,o.map((t=>{if(null===t)return"";const e=t.get_v3Kmolblock();return t.delete(),e})))}convertToMolfileV3KColumn(t){const e=t.dataFrame,n=this.convertToMolfileV3K(t.toList()).map((t=>t.molfile)),i=(0,yi.kA)(e,`molfileV3K(${t.name})`);return a.Column.fromList("string",i,n)}convertToMolfileV3K(t){const e=new Array(t.length);for(let n=0;n<t.length;++n){const i=t[n];if(!i){e[n]=gi.vF.createEmpty();continue}let r;try{r=this.getPolymerMolfile(i)}catch(t){const[e,n]=(0,Ct.AP)(t);Di.logger.error(e,void 0,n),r=gi.vF.createEmpty()}e[n]=r}return e}getPolymerGraphColumn(t){const e=t.toList(),n=this.helmHelper.getMolfiles(e);return a.Column.fromStrings("mols",n)}getPolymerMolfile(t){const e=this.helmHelper.removeGaps(t),n=e.resHelm,i=new Map;for(const[t,n]of e.monomerMap?.entries()??[])i.set(n,t);const r=this.helmHelper.getMolfiles([n])[0],o=new Ri(r),s=new $i(n,this.rdKitModule,this.monomerLib);o.monomerSymbols.forEach(((t,e)=>{const n=o.getMonomerShifts(e);s.addMonomer(t,e,n)}));const a=s.compileToMolfile(),l=new gi.Cg;for(const[t,e]of a.monomers.entries()){const n=i.get(t);l.set(n,e)}return new gi.vF(a.molfile,l)}}class ki{seqHelper;_column;_units;_notation;_defaultGapOriginal;notationProvider;_splitter=null;constructor(t,e){if(this.seqHelper=e,t.type!==a.TYPE.STRING)throw new Error(`Unexpected column type '${t.type}', must be '${a.TYPE.STRING}'.`);this._column=t;const n=this._column.meta.units;if(!n)throw new Error("Units are not specified in column");this._units=n,this._notation=this.getNotation(),this.isCustom()&&(this.notationProvider=this.column.temp[Ut.notationProvider]??null);const i=this.isFasta()?wt.b9[gt.Hi.FASTA]:this.isSeparator()?wt.b9[gt.Hi.SEPARATOR]:this.isHelm()?wt.b9[gt.Hi.HELM]:this.isCustom()?this.notationProvider?.defaultGapOriginal??wt.b9[gt.Hi.SEPARATOR]:void 0;if(null==i)throw new Error(`Unexpected defaultGapOriginal for notation '${this.notation}'`);if(this._defaultGapOriginal=i,!this.column.tags.has(gt.gp.aligned)||!this.column.tags.has(gt.gp.alphabet)||!this.column.tags.has(gt.gp.alphabetIsMultichar)&&!this.isHelm()&&this.alphabet===gt.YI.UN)if(this.isFasta())this.seqHelper.setUnitsToFastaColumn(this);else if(this.isSeparator()){const e=t.getTag(gt.gp.separator);this.seqHelper.setUnitsToSeparatorColumn(this,e)}else if(this.isHelm())this.seqHelper.setUnitsToHelmColumn(this);else{if(!this.isCustom())throw new Error(`Unexpected units '${this.column.meta.units}'.`);this.notationProvider.setUnits(this)}if(!this.column.tags.has(gt.gp.alphabetIsMultichar))if(this.isHelm())this.column.setTag(gt.gp.alphabetIsMultichar,"true");else if(["UN"].includes(this.alphabet))throw new Error(`For column '${this.column.name}' of alphabet '${this.alphabet}' tag '${gt.gp.alphabetIsMultichar}' is mandatory.`);this.columnVersion=this.column.version,!this.isSeparator()||this.isCustom()&&this.notationProvider||t.temp.seqHandlerRefined||(this.refineSeparatorNotation(),t.temp.seqHandlerRefined=!0)}async refineSeparatorNotation(){const t=((t,e,n)=>{const i={};let r=!0,o=null;for(const e of t){const t=e?n(e):[];if(null===o?o=t.length:t.length!==o&&(r=!1),t.length>=3)for(const e of t)e in i||(i[e]=0),i[e]+=1}return{freq:i,sameLength:r}})([...new Set((this.column.length<100?rt().count(0).take(Math.min(100,this.column.length)).map((t=>this.column.get(t))):this.column.categories.slice(0,100)).map((t=>t?t.substring(0,500):"")).filter((t=>0!==t.length)))],0,(t=>t.split(this.separator)));let e=!1;const n=[{package:"SequenceTranslator",name:"refineNotationProviderForHarmonizedSequence"}];for(const i of n)try{const n=a.Func.find(i);if(0===n.length)continue;const r=n[0].prepare({col:this.column,stats:t,separator:this.separator}),o=(await r.call()).getOutputParamValue();e||=o}catch(t){console.error(t)}e&&(delete this.column.temp[Ut.seqHandler],this.column.fireValuesChanged())}static setTags(t){const e=t.column.meta.units;if([gt.Hi.FASTA,gt.Hi.SEPARATOR].includes(e)){if(!t.column.getTag(gt.gp.alphabet)&&0===Object.keys(t.stats.freq).length)throw new Error("Alphabet is empty and not annotated.");let e=t.column.getTag(gt.gp.aligned);null===e&&(e=t.stats.sameLength?"SEQ.MSA":"SEQ",t.column.setTag(gt.gp.aligned,e));let n=t.column.getTag(gt.gp.alphabet);if(null===n&&(n=(0,kt.pc)(t.stats.freq,gt.q7),t.column.setTag(gt.gp.alphabet,n)),n===gt.YI.UN){const e=Object.keys(t.stats.freq).length,n=Object.keys(t.stats.freq).some((t=>t.length>1));t.column.setTag(gt.gp.alphabetSize,e.toString()),t.column.setTag(gt.gp.alphabetIsMultichar,n?"true":"false")}}else if(e===gt.Hi.HELM){let e=t.column.getTag(gt.gp.alphabet);null===e&&(e=(0,kt.p0)(t.stats.freq,gt.q7,t.defaultGapOriginal),t.column.setTag(gt.gp.alphabet,e))}}get column(){return this._column}get length(){return this._column.length}get units(){return this._units}get notation(){return this._notation}get defaultGapOriginal(){return this._defaultGapOriginal}get separator(){const t=this.column.getTag(gt.gp.separator)??void 0;if(this.notation===gt.Hi.SEPARATOR&&void 0===t)throw new Error(`Separator is mandatory for column '${this.column.name}' of notation '${this.notation}'.`);return t}get aligned(){const t=this.column.getTag(gt.gp.aligned);if(!t&&(this.isFasta()||this.isSeparator()))throw new Error("Tag aligned not set");return t}get alphabet(){const t=this.column.getTag(gt.gp.alphabet);if(!t&&(this.isFasta()||this.isSeparator()))throw new Error("Tag alphabet not set");return t}get defaultBiotype(){return this.alphabet===gt.YI.RNA||this.alphabet===gt.YI.DNA?Ht.o.NUCLEOTIDE:Ht.o.AA}get helmCompatible(){return this.column.getTag(gt.gp.isHelmCompatible)}getAlphabetSize(){if(this.notation==gt.Hi.HELM||this.alphabet==gt.YI.UN){const t=this.column.getTag(gt.gp.alphabetSize);let e;if(t)e=parseInt(t);else{const t=this.stats;e=Object.keys(t.freq).length}return e}switch(this.alphabet){case gt.YI.PT:return 20;case gt.YI.DNA:case gt.YI.RNA:return 4;case"NT":return console.warn("Unexpected alphabet 'NT'."),4;default:throw new Error(`Unexpected alphabet '${this.alphabet}'.`)}}getAlphabetIsMultichar(){return this.notation===gt.Hi.HELM||this.alphabet===gt.YI.UN&&"true"===this.column.getTag(gt.gp.alphabetIsMultichar)}cached=!0;_splitted=null;columnVersion=null;getSplitted(t,e){if(this.cached&&void 0===e){this.column.version===this.columnVersion&&null!==this._splitted||(this.columnVersion=this.column.version,this._splitted=new Array(this.column.length));let e=this._splitted[t]?this._splitted[t].deref():void 0;if(!e){const n=this.column.get(t);e=this.splitter(n),this._splitted[t]=new WeakRef(e)}return e}{const n=this.column.get(t);return this.getSplitter(e)(n)}}getValue(t,e){return this.column.get(t),new Wt(t,this)}getHelm(t){let e;const n=this.column.get(t);return e=this.notation===gt.Hi.HELM?n:this.notation===gt.Hi.CUSTOM?this.notationProvider.getHelm(n,{}):this.getConverter(gt.Hi.HELM)(n),e}_stats=null;get stats(){if(null===this._stats){const t={};let e=!0,n=null;const i=this.column.length;for(let r=0;r<i;++r){const i=this.getSplitted(r);null==n?n=i.length:i.length!==n&&(e=!1);for(let e=0;e<i.length;++e){const n=i.getCanonical(e);n in t||(t[n]=0),t[n]+=1}}this._stats={freq:t,sameLength:e}}return this._stats}_maxLength=null;get maxLength(){return null===this._maxLength&&(this._maxLength=0===this.column.length?0:Math.max(...rt().count(0).take(this.column.length).map((t=>this.getSplitted(t).length)))),this._maxLength}_posList=null;get posList(){if(null===this._posList){const t=this.column.getTag(gt.gp.positionNames);this._posList=t?t.split(gt.z1).map((t=>t.trim())):rt().count(1).take(this.maxLength).map((t=>t.toString())).toArray()}return this._posList}isFasta(){return this.notation===gt.Hi.FASTA}isSeparator(){return this.notation===gt.Hi.SEPARATOR||!!this.separator}isHelm(){return this.notation===gt.Hi.HELM}isCustom(){return this.notation===gt.Hi.CUSTOM}isRna(){return this.alphabet===gt.YI.RNA}isDna(){return this.alphabet===gt.YI.DNA}isPeptide(){return this.alphabet===gt.YI.PT}isMsa(){return!!this.aligned&&this.aligned.toUpperCase().includes("MSA")}isHelmCompatible(){return"true"===this.helmCompatible}isGap(t){return!t||t===this._defaultGapOriginal}getNotation(){if(this.units.toLowerCase().startsWith(gt.Hi.FASTA))return gt.Hi.FASTA;if(this.units.toLowerCase().startsWith(gt.Hi.SEPARATOR))return gt.Hi.SEPARATOR;if(this.units.toLowerCase().startsWith(gt.Hi.HELM))return gt.Hi.HELM;if(this.units.toLowerCase().startsWith(gt.Hi.CUSTOM))return gt.Hi.CUSTOM;throw new Error(`Column '${this.column.name}' has unexpected notation '${this.units}'.`)}getHelmWrappers(){return[this.isDna()||this.isRna()||this.isHelmCompatible()?"RNA1{":"PEPTIDE1{",this.isDna()?"d(":this.isRna()?"r(":"",this.isDna()||this.isRna()?")p":"","}$$$$"]}getNewColumn(t,e,n,i){const r=this.column,o=t.toLowerCase()+"("+r.name+")",s=n??r.dataFrame?.columns.getUnusedName(o)??o,l=a.Column.fromList("string",s,i??new Array(this.column.length).fill(""));if(l.semType=a.SEMTYPE.MACROMOLECULE,l.meta.units=t,t===gt.Hi.SEPARATOR){if(!e)throw new Error(`Notation '${gt.Hi.SEPARATOR}' requires separator value.`);l.setTag(gt.gp.separator,e)}l.setTag(a.TAGS.CELL_RENDERER,t===gt.Hi.HELM?"helm":"sequence");const c=r.getTag(gt.gp.aligned);c&&l.setTag(gt.gp.aligned,c);let h=r.getTag(gt.gp.alphabet);h||this.notation!==gt.Hi.HELM||t===gt.Hi.HELM||(h=gt.YI.UN),null!=h&&l.setTag(gt.gp.alphabet,h);let u=r.getTag(gt.gp.alphabetSize);null!=h&&u&&l.setTag(gt.gp.alphabetSize,u);const d=r.getTag(gt.gp.alphabetIsMultichar);return null!=h&&void 0!==d&&l.setTag(gt.gp.alphabetIsMultichar,d),t==gt.Hi.HELM&&(u=this.getAlphabetSize().toString(),l.setTag(gt.gp.alphabetSize,u)),l}getNewColumnFromList(t,e){return this.getNewColumn(this.notation,this.separator,t,e)}static unitsStringIsValid(t){return t=t.toLowerCase(),[gt.Hi.FASTA,gt.Hi.SEPARATOR,gt.Hi.HELM].some((e=>t.startsWith(e.toLowerCase())))}static getNewColumnFromParams(t,e,n){if(!ki.unitsStringIsValid(n))throw new Error("Invalid format of 'units' parameter");const i=a.Column.fromList("string",e,new Array(t).fill(""));return i.semType=a.SEMTYPE.MACROMOLECULE,i.meta.units=n,i}get splitter(){return null===this._splitter&&(this._splitter=this.getSplitter()),this._splitter}getSplitter(t){let e=null;if(e=this.notationProvider?this.notationProvider.splitter:null,e)return e;if(this.units.toLowerCase().startsWith(gt.Hi.FASTA))return null===this.column.getTag(gt.gp.alphabet)||this.getAlphabetIsMultichar()?gt.J9:kt.tm;if(this.units.toLowerCase().startsWith(gt.Hi.SEPARATOR))return(0,gt.dh)(this.separator,t);if(this.units.toLowerCase().startsWith(gt.Hi.HELM))return gt.qp;throw new Error(`Unexpected units ${this.units} .`)}split(t){return this.splitter(t)}getDistanceFunctionName(){if(!this.isFasta())throw new Error("Only FASTA notation is supported");if(this.isMsa())return ue.Z.HAMMING;switch(this.alphabet){case gt.YI.DNA:case gt.YI.RNA:case gt.YI.PT:}return ue.Z.LEVENSHTEIN}getDistanceFunction(){return ue.V[this.getDistanceFunctionName()]()}async checkHelmCompatibility(){if(this.column.tags.has(gt.gp.isHelmCompatible))return"true"===this.column.getTag(gt.gp.isHelmCompatible);const t=(await(0,bt.pj)()).getMonomerLib().getMonomerSymbolsByType("PEPTIDE"),e=new Set(t),n=((0,gt.dh)(this.separator),new Set),i=this.column.length,r=this.column.getRawData();for(let t=0;t<i;++t){const i=r[t];if(!(i in n)){n.add(i);const r=this.getSplitted(t);for(let t=0;t<r.length;++t){const n=r.getCanonical(t);if(!e.has(n))return this.column.setTag(gt.gp.isHelmCompatible,"false"),!1}}}return this.column.setTag(gt.gp.isHelmCompatible,"true"),!0}toFasta(t){return t===gt.Hi.FASTA}toSeparator(t){return t===gt.Hi.SEPARATOR}toHelm(t){return t===gt.Hi.HELM}convertHelmToFastaSeparator(t,e,n,i){i||(i=this.toFasta(e)?wt.b9[gt.Hi.FASTA]:wt.b9[gt.Hi.SEPARATOR]),n||(n=this.toFasta(e)?"":this.separator);const r=t.startsWith("RNA"),o=(0,gt.qp)(t),s=[];for(let t=0;t<o.length;++t){let n=o.getOriginal(t);if(r&&(n=n.replace(bn.EK,"$1")),n===wt.b9[gt.Hi.HELM])s.push(i);else if(this.toFasta(e)&&n.length>1){const t="["+n+"]";s.push(t)}else s.push(n)}return s.join(n)}convert(t,e){const n=this.getJoiner({notation:t,separator:e}),i=this.getNewColumn(t,e);return i.init((t=>{const e=this.getSplitted(t);return n(e)})),i}getRegion(t,e,n){const i=this.getNewColumn(this.notation,this.separator);i.name=n;const r=t??0,o=e??this.maxLength-1,s=this.getJoiner(),a=o-r+1,l=wt.b9[this.notation];i.init((t=>{const e=this.getSplitted(t),n=new Array(a);for(let t=0;t<a;++t){const i=r+t;n[t]=i<e.length?e.getOriginal(i):l}return s(new kt.Mu(n,l))}));const c=t=>{const e=t.split(",").map((t=>t.trim())),n=new Array(a);for(let t=0;t<a;++t){const i=r+t;n[t]=i<e.length?e[i]:"?"}return n.join(gt.z1)},h=this.column.getTag(gt.gp.positionNames);h&&i.setTag(gt.gp.positionNames,c(h));const u=this.column.getTag(gt.gp.positionLabels);return u&&i.setTag(gt.gp.positionLabels,c(u)),i}_joiner=void 0;get joiner(){return this._joiner||(this._joiner=this.getJoiner()),this._joiner}getJoiner(t){const e=t?t.notation:this.notation,n=t?t.separator:this.separator;let i;const r=this;switch(e){case gt.Hi.FASTA:i=function(t){return r.joinToFasta(t,r.isHelm())};break;case gt.Hi.SEPARATOR:if(!n)throw new Error(`Separator is mandatory for notation '${e}'.`);i=function(t){return Gi(t,n,r.isHelm())};break;case gt.Hi.HELM:{const t=r.alphabet===gt.YI.DNA||r.alphabet===gt.YI.RNA,e=r.getHelmWrappers();i=function(n){return Fi(n,e,t)};break}default:throw new Error(`Unexpected notation '${e}'.`)}return i}getConverter(t,e=void 0){if(t===gt.Hi.SEPARATOR&&!e)throw new Error(`Target separator is not specified for target units '${gt.Hi.SEPARATOR}'.`);const n=this;if(t===gt.Hi.FASTA)return function(t){return n.convertToFasta(t)};if(t===gt.Hi.HELM)return function(t){return n.convertToHelm(t)};if(t===gt.Hi.SEPARATOR)return function(t){return n.convertToSeparator(t,e)};throw new Error}static forColumn(t,e){let n=t.temp[Ut.seqHandler];return n&&n.columnVersion===t.version||(n=t.temp[Ut.seqHandler]=new ki(t,e)),n}joinToFasta(t,e){const n=new Array(t.length);for(let i=0;i<t.length;++i){const r=t.getOriginal(i);let o=t.getOriginal(i);e&&(o=o.replace(bn.EK,"$1")),r===wt._S?o=wt.b9[gt.Hi.FASTA]:r===bn.q7?o="":o.length>1&&(o="["+o+"]"),n[i]=o}return n.join("")}convertToFasta(t){const e=this.splitter,n=this.isHelm()?this.splitterAsHelmNucl(t):e(t);return this.joinToFasta(n,this.isHelm())}convertToSeparator(t,e){return Gi(this.isHelm()?this.splitterAsHelmNucl(t):this.splitter(t),e,this.isHelm())}convertToHelm(t){if(this.notation==gt.Hi.HELM)return t;const e=this.getHelmWrappers(),n=t.startsWith("DNA")||t.startsWith("RNA");return Fi(this.splitter(t),e,n)}splitterAsHelmNucl(t){const e=this.splitter(t),n=new Array(e.length),i=t.startsWith("DNA"),r=t.startsWith("RNA");for(let t=0;t<e.length;++t){let o=e.getOriginal(t);(i||r)&&(o=o.replace(bn.EK,"$1"),o=o===bn.q7?null:o),n[t]=o||null}return new kt.Mu(n.filter((t=>!!t)),wt.b9[gt.Hi.HELM])}getRendererBack(t,e){const n=this.column.temp;let i=n.rendererBack;return i||(i=n.rendererBack=this.notationProvider.createCellRendererBack(t,e)),i}}function Gi(t,e,n){const i=new Array(t.length);for(let e=0;e<t.length;++e){const r=t.getCanonical(e);let o=t.getOriginal(e);n&&(o=o.replace(bn.EK,"$1")),r===wt._S?o=wt.b9[gt.Hi.SEPARATOR]:r===bn.q7&&(o=""),i[e]=o}return i.join(e)}function Fi(t,e,n){const[i,r,o,s]=e,a=new Array(t.length);for(let e=0;e<t.length;++e){const i=t.getCanonical(e);let s=t.getOriginal(e);i===wt._S?s=wt.b9[gt.Hi.HELM]:(n&&(s=s.replace(bn.EK,"$1")),s=1===s.length?`${r}${s}${o}`:`${r}[${s}]${o}`),a[e]=s}return`${i}${a.join(".")}${s}`}class Hi{libHelper;rdKitModule;constructor(t,e){this.libHelper=t,this.rdKitModule=e}getSeqHandler(t){return ki.forColumn(t,this)}getSeqMonomers(t){const e=this.getSeqHandler(t);return Object.keys(e.stats.freq)}async getHelmToMolfileConverter(t){const e=await(0,ke.b2)();return new Oi(e,this.rdKitModule,t)}helmToAtomicLevelSingle(t,e,n,i=!0){if(!t)return gi.vF.createEmpty();const r=e.convertToMolfileV3K([t])[0];if(!r||!r.molfile)return gi.vF.createEmpty();let o=null;try{let t=r.molfile;if(i){if(o=this.rdKitModule.get_mol(t),!o)return gi.vF.createEmpty();o.set_new_coords(),o.normalize_depiction(1),o.straighten_depiction(!0),t=o.get_v3Kmolblock()}return n&&(t=e.molV3KtoMolV3KOCL(t)),new gi.vF(t,r.monomers)}catch(t){const[e,n]=(0,Ct.AP)(t);return Di.logger.error(e,void 0,n),gi.vF.createEmpty()}finally{o?.delete()}}async helmToAtomicLevel(t,e,n,i){const r=i??this.libHelper.getMonomerLib(),s=t.dataFrame,l=(0,yi.qj)(s,t.name),c=await this.getHelmToMolfileConverter(r),h=t.toList(),u=new Array(t.length),d=a.Func.find({package:"Chem",name:"beautifyMols"})[0],p=a.Func.find({package:"Chem",name:"convertToV3KViaOCL"})[0];for(let n=0;n<t.length;n++)u[n]=this.helmToAtomicLevelSingle(h[n],c,e&&!p,!d).molfile;if(d){const e=await d.apply({mols:u});if(e&&Array.isArray(e)&&e.length===t.length)for(let n=0;n<t.length;n++)e[n]&&(u[n]=e[n])}if(e&&p){const e=await p.apply({mols:u});if(e&&Array.isArray(e)&&e.length===t.length)for(let n=0;n<t.length;n++)e[n]&&(u[n]=e[n]);else o.shell.warning("OCL function returned an unexpected result")}const m=a.Column.fromStrings(l,u);return m.semType=a.SEMTYPE.MOLECULE,m.meta.units=a.UNITS.Molecule.MOLBLOCK,m.setTag(".sequence-src-col",t.name),{molCol:m,warnings:[]}}setUnitsToFastaColumn(t){if(t.column.semType!==a.SEMTYPE.MACROMOLECULE||t.column.meta.units!==gt.Hi.FASTA)throw new Error(`The column of notation '${gt.Hi.FASTA}' must be '${a.SEMTYPE.MACROMOLECULE}'.`);t.column.meta.units=gt.Hi.FASTA,ki.setTags(t)}setUnitsToSeparatorColumn(t,e){if(t.column.semType!==a.SEMTYPE.MACROMOLECULE||t.column.meta.units!==gt.Hi.SEPARATOR)throw new Error(`The column of notation '${gt.Hi.SEPARATOR}' must be '${a.SEMTYPE.MACROMOLECULE}'.`);if(!e)throw new Error(`The column of notation '${gt.Hi.SEPARATOR}' must have the separator tag.`);t.column.meta.units=gt.Hi.SEPARATOR,t.column.setTag(gt.gp.separator,e),ki.setTags(t)}setUnitsToHelmColumn(t){if(t.column.semType!==a.SEMTYPE.MACROMOLECULE)throw new Error(`The column of notation '${gt.Hi.HELM}' must be '${a.SEMTYPE.MACROMOLECULE}'`);t.column.meta.units=gt.Hi.HELM,ki.setTags(t)}}class Bi{constructor(t){this.canvas=null,this.ctx=null,this.config={x:t.x||0,y:t.y||0,width:t.width||0,height:t.height||0,windowStartPosition:t.windowStartPosition||1,positionWidth:t.positionWidth||15,totalPositions:t.totalPositions||5e3,headerHeight:t.headerHeight||50,sliderHeight:t.sliderHeight||8,currentPosition:t.currentPosition||1,cellBackground:void 0===t.cellBackground||t.cellBackground,sliderColor:t.sliderColor||"rgba(220, 220, 220, 0.4)",onPositionChange:t.onPositionChange||((t,e)=>{}),...t},this.eventElement=s.div(),this.eventElement.style.position="absolute",this.config.canvas.parentElement?.appendChild(this.eventElement),this.state={isDragging:!1,dragStartX:0},this.init()}init(){if(this.canvas=this.config.canvas,!this.canvas)return void console.error("canvas not found.");const t=this.canvas.getContext("2d");t?(this.ctx=t,this.eventElement.addEventListener("mousedown",this.handleMouseDown.bind(this)),this.eventElement.addEventListener("mousemove",this.handleMouseMove.bind(this)),this.eventElement.addEventListener("mouseup",this.handleMouseUp.bind(this)),this.eventElement.addEventListener("mouseleave",this.handleMouseUp.bind(this)),this.eventElement.addEventListener("click",this.handleClick.bind(this)),this.eventElement.addEventListener("wheel",this.handleMouseWheel.bind(this)),window.addEventListener("keydown",this.handleKeyDown.bind(this))):console.error("Failed to get 2D context from canvas")}get isValid(){return!!this.canvas&&!!this.ctx&&this.config.height>=this.config.headerHeight}draw(t,e,n,i,r,o,s){if(this.config.x==t&&this.config.y==e&&this.config.width==n&&this.config.height==i&&this.config.currentPosition==r&&this.config.windowStartPosition==o||Object.assign(this.config,{x:t,y:e,width:n,height:i,currentPosition:r,windowStartPosition:o}),!this.isValid)return void(this.eventElement.style.display="none");this.ctx.save(),this.ctx.clearRect(t,e,n,i),this.ctx.translate(t,e),this.ctx.rect(0,0,n,i),this.ctx.clip();const a=n,l=i,c=this.config.headerHeight-this.config.sliderHeight;this.ctx.fillStyle=this.config.sliderColor,this.ctx.fillRect(0,c,a,this.config.sliderHeight);const h=Math.floor(this.config.width/this.config.positionWidth),u=Math.max(1,this.config.windowStartPosition),d=this.config.totalPositions-h,p=d<=0?0:u/d*(a-this.sliderWidth),m=d<=0?a:this.sliderWidth;if(this.ctx.fillStyle="rgba(150, 150, 150, 0.5)",this.ctx.fillRect(p,c,m,this.config.sliderHeight),this.config.currentPosition>=1&&this.config.currentPosition<=this.config.totalPositions){const t=(this.config.currentPosition-1)/(this.config.totalPositions-1),e=Math.round(t*a);this.ctx.fillStyle="#3CB173",this.ctx.fillRect(e-1,c-2,3,this.config.sliderHeight+4)}for(let t=0;t<h;t++){const e=u+t;if(e>this.config.totalPositions)break;const n=t*this.config.positionWidth,i=this.config.positionWidth,r=n+i/2;this.config.cellBackground&&(this.ctx.fillStyle=t%2==0?"rgba(248, 248, 248, 0.3)":"rgba(242, 242, 242, 0.2)",this.ctx.fillRect(n,5,i,Math.min(this.config.headerHeight-5,l-5)-this.config.sliderHeight),this.ctx.strokeStyle="rgba(220, 220, 220, 0.7)",this.ctx.beginPath(),this.ctx.moveTo(n,5),this.ctx.lineTo(n,Math.min(this.config.headerHeight,l)-this.config.sliderHeight),this.ctx.stroke()),this.ctx.fillStyle="#999999",this.ctx.beginPath(),this.ctx.arc(r,10,1,0,2*Math.PI),this.ctx.fill(),(e===this.config.currentPosition||(1===e||e%10==0)&&Math.abs(e-this.config.currentPosition)>1)&&(this.ctx.fillStyle="#333333",this.ctx.font="12px monospace",this.ctx.textAlign="center",this.ctx.textBaseline="middle",this.ctx.fillText(e.toString(),r,20)),e===this.config.currentPosition&&(this.ctx.fillStyle="rgba(60, 177, 115, 0.2)",this.ctx.fillRect(n,0,i,c))}this.ctx.restore(),s.preventDefault(),this.eventElement.style.display="block",this.eventElement.style.left=`${this.config.x}px`,this.eventElement.style.top=`${this.config.y}px`,this.eventElement.style.width=`${this.config.width}px`,this.eventElement.style.height=`${this.config.height}px`}getCoords(t){const e=this.canvas.getBoundingClientRect();return{x:t.clientX-e.left-this.config.x,y:t.clientY-e.top-this.config.y}}isInHeaderArea(t){const{x:e,y:n}=this.getCoords(t);return e>=0&&e<=this.config.width&&n>=0&&n<=this.config.headerHeight}get positionWidth(){return this.config.positionWidth}set positionWidth(t){this.config.positionWidth=t}isInSliderArea(t){const{y:e}=this.getCoords(t),n=this.config.headerHeight-this.config.sliderHeight;return e>n&&e<n+this.config.sliderHeight}get sliderWidth(){const t=this.config.width/this.config.totalPositions*(this.config.width/this.config.positionWidth);return Math.max(t,20)}isInSliderDraggableArea(t){const{x:e,y:n}=this.getCoords(t),i=this.config.headerHeight-this.config.sliderHeight,r=Math.floor(this.config.width/this.config.positionWidth),o=Math.max(1,this.config.windowStartPosition),s=this.config.totalPositions-r,a=s<=0?0:o/s*(this.config.width-this.sliderWidth);return n>i&&n<i+this.config.sliderHeight&&e>=a&&e<a+this.sliderWidth}handleMouseDown(t){if(!this.isValid)return;const{x:e}=this.getCoords(t);this.isInSliderDraggableArea(t)&&(this.state.isDragging=!0,this.state.dragStartX=e,this.handleSliderDrag(e),t.preventDefault(),t.stopPropagation(),t.stopImmediatePropagation())}handleMouseWheel(t){if(this.isValid&&this.isInHeaderArea(t)){t.preventDefault(),t.stopPropagation(),t.stopImmediatePropagation();const e=t.shiftKey?Math.sign(t.deltaY):Math.sign(t.deltaX||t.deltaY),n=t.shiftKey?3:1,i=this.config.windowStartPosition+e*n,r=Math.floor(this.config.width/this.config.positionWidth),o=this.config.totalPositions-r+1;this.config.windowStartPosition=Math.max(1,Math.min(o,i)),"function"==typeof this.config.onPositionChange&&this.config.onPositionChange(this.config.currentPosition,this.getWindowRange())}}handleMouseMove(t){if(!this.state.isDragging||!this.isValid)return;const e=this.canvas.getBoundingClientRect(),n=t.clientX-e.left-this.config.x;this.handleSliderDrag(n),t.preventDefault(),t.stopPropagation(),t.stopImmediatePropagation()}handleKeyDown(t){if(this.isValid&&!(this.config.currentPosition<1)){if("ArrowLeft"===t.key||"ArrowRight"===t.key){t.preventDefault(),t.stopPropagation(),t.stopImmediatePropagation();const e="ArrowLeft"===t.key?-1:1,n=Math.min(Math.max(this.config.currentPosition+e,1),this.config.totalPositions);if(n===this.config.currentPosition)return;this.config.currentPosition=n;const i=Math.floor(this.config.width/this.config.positionWidth),r=this.config.windowStartPosition;(n<r||n>r+i-1)&&(this.config.windowStartPosition=e<0?n:Math.max(1,n-i+1))}else{if("Escape"!==t.key)return;this.config.currentPosition=-2,t.preventDefault(),t.stopPropagation(),t.stopImmediatePropagation()}"function"==typeof this.config.onPositionChange&&this.config.onPositionChange(this.config.currentPosition,this.getWindowRange())}}handleMouseUp(){this.state.isDragging=!1}handleSliderDrag(t){if(!this.isValid)return;const e=this.sliderWidth,n=this.config.width-e,i=Math.max(0,Math.min(this.config.width,t)),r=Math.floor(this.config.width/this.config.positionWidth),o=Math.floor(this.config.width/this.config.positionWidth),s=this.config.totalPositions-o,a=Math.max(0,i-e/2)/n*s;this.config.windowStartPosition=Math.max(1,Math.min(a,this.config.totalPositions-r+1)),"function"==typeof this.config.onPositionChange&&this.config.onPositionChange(this.config.currentPosition,this.getWindowRange())}get headerHeight(){return this.config.headerHeight}set headerHeight(t){this.config.headerHeight=t}handleClick(t){if(!this.isValid)return;const{x:e,y:n}=this.getCoords(t);if(n<this.config.headerHeight-this.config.sliderHeight&&n>=0){const t=this.config.positionWidth,n=Math.round(e/t-.5),i=this.config.windowStartPosition+n;i>=1&&i<=this.config.totalPositions&&(this.config.currentPosition=i,"function"==typeof this.config.onPositionChange&&this.config.onPositionChange(this.config.currentPosition,this.getWindowRange()))}}getWindowRange(){return{start:this.config.windowStartPosition,end:Math.min(this.config.totalPositions,this.config.windowStartPosition+Math.floor(this.config.width/this.config.positionWidth))}}updateConfig(t){Object.assign(this.config,t),this.config.currentPosition=Math.min(this.config.currentPosition,this.config.totalPositions),"function"==typeof this.config.onPositionChange&&this.config.onPositionChange(this.config.currentPosition,this.getWindowRange())}getCurrentPosition(){return this.config.currentPosition}setCurrentPosition(t){this.config.currentPosition=Math.max(1,Math.min(this.config.totalPositions,t)),"function"==typeof this.config.onPositionChange&&this.config.onPositionChange(this.config.currentPosition,this.getWindowRange())}}const Di=new ai;async function Vi(){return await pn.getInstance()}class ji{_palette;constructor(t){this._palette=t}get(t){return this._palette[t]}}let Ui=null;async function Wi(){null===Ui&&(Ui=async function(){const t="Bio: _package.initBio()";Di.logger.debug(`${t}, start`);const e=window.performance.now(),n=await(0,Pt.j)(),i=await Di.getProperties(),r=new si(i);Di.properties=r;const s=await pn.getInstance(),l=await(0,Nt.ub)();l.explicit&&(l.explicit=[],await(0,Nt.Eu)(l)),await s.awaitLoaded(1/0),s.initialLoadCompleted||await s.loadMonomerLib(),s.loadMonomerSets();const c=s.getMonomerLib(),h=s.getMonomerSets(),u=window.performance.now();Di.logger.debug(`${t}, loading ET: ${u-e} ms`);const d=new Hi(s,n);Di.completeInit(d,c,h,n),Di.logger.debug(`${t}, end`),function(){const t=t=>{setTimeout((()=>{if(t.isDetached)return;const e=t.dataFrame;if(!e)return;const n=e.columns.bySemTypeAll(a.SEMTYPE.MACROMOLECULE);for(const e of n){const n=Di.seqHelper.getSeqHandler(e);if(!n)continue;if(n.isHelm()||n.alphabet===gt.YI.UN)continue;const i=t.col(e.name);if(!i)continue;let r=!!t.tableView&&Array.from(t.tableView.viewers).some((t=>"Sequence Position Statistics"===t.type));const o=n.isMsa(),s=(t,e)=>Number.isNaN(t)?e:t,l=()=>s(Math.max(Number.parseInt(e.getTag(gt.gp.positionShift)??"0"),0),0)+1,c=()=>s(Number.parseInt(e.getTag(gt.gp.selectedPosition)??"-2"),-2),h=()=>Ot.Jy.getFontSettings(e).fontWidth;let u=0,d=0;const p=e.categories;for(let t=0;t<p.length;t++){const e=p[t];e&&e.length>d&&(d=e.length,u=t)}const m=p[u],f=n.splitter(m),g=f?f.length:30;if(g<50)continue;const y=40,b=new Bi({canvas:t.overlay,headerHeight:y,totalPositions:g+1,onPositionChange:(n,i)=>{setTimeout((()=>{const o=l(),s=c();if(o!==i.start&&e.setTag(gt.gp.positionShift,(i.start-1).toString()),n>=0&&s!==n&&(e.setTag(gt.gp.selectedPosition,n.toString()),!r&&t.tableView)){r=!0;const n=t.tableView.addViewer("Sequence Position Statistics",{sequenceColumnName:e.name});t.tableView.dockManager.dock(n,a.DOCK_TYPE.DOWN,null,"Sequence Position Statistics",.4)}}))}});t.props.colHeaderHeight=65,setTimeout((()=>{t.isDetached||(i.width=400)}),300),t.sub(t.onCellRender.subscribe((n=>{const r=n.cell;if(!r||!r.isColHeader||r?.gridColumn?.name!==i?.name)return;const s=n.bounds;if(!s||s.height<=50)return;const a=s.height-y;if(a>20){b.headerHeight=s.height-20;const n=t.overlay.getContext("2d");if(!n)return;n.save(),n.rect(s.x,s.y,s.width,20),n.clip(),n.font=t.props.colHeaderFont??"bold 13px Roboto, Roboto Local",n.fillStyle="#4a4a49",n.textAlign="center",n.textBaseline="middle";const i=s.x+s.width/2,r=s.y+10;n.fillText(e.name??"",i,r),n.restore()}else b.headerHeight=Math.max(y,s.height);const u=Math.max(0,a??0)>20?20:0,d=h();b.positionWidth=d+(o?8:0);const p=l(),m=o?0:4;b.draw(s.x+m,s.y+u,s.width-m,s.height-u,c(),p,n)})))}}),1e3)},e=(o.events.onViewerAdded.subscribe((e=>{if(!(e.args&&e.args.viewer instanceof a.Grid))return;const n=e.args.viewer;t(n)})),o.shell.tableViews);for(const n of e){const e=n?.grid;e&&t(e)}}()}()),await Ui}function qi(t){const e=new ci(t,Di.seqHelper);return e.init().then((()=>{})).catch((t=>{const e=t instanceof Error?t.message:t.toString();o.shell.error(e)})),e}function zi(){return Di.monomerLib}function Yi(t){return Di.seqHelper.getSeqHandler(t)}function Ki(t){const e="getRegionTopMenu",n=a.Func.find({package:Di.name,name:e});if(1!==n.length)throw new Error(`Package '${Di.name}' func '${e}' not found`);const i=n[0].prepare({table:t.dataFrame,sequence:t});return new pi(i,Di.seqHelper).widget()}async function Zi(t){return async function(){const t=s.label("Manage monomer libraries");return fn()(t).addClass("d4-link-action"),t.onclick=async()=>await Vn(),new a.Widget(t)}()}function Xi(t){try{new pi(t,Di.seqHelper).dialog()}catch(t){const e=t instanceof Error?t.message:t.toString(),n=t instanceof Error?t.stack:void 0;o.shell.error(`Get region editor error: ${e}`),Di.logger.error(e,void 0,n)}}function Ji(t){const e=new ei;s.dialog({title:"Split to Monomers"}).add(e.paramsUI).onOK((async()=>t.func.prepare(e.funcParams).call(!0))).show()}function Qi(t){const e=new $({semtype:a.SEMTYPE.MACROMOLECULE}),n=s.dialog({title:"Sequence Space"}).add(e.getEditor()).onOK((async()=>{const n=e.getParams();return t.func.prepare({molecules:n.col,table:n.table,methodName:n.methodName,similarityMetric:n.similarityMetric,plotEmbeddings:n.plotEmbeddings,options:n.options,preprocessingFunction:n.preprocessingFunction,clusterEmbeddings:n.clusterEmbeddings}).call()}));n.history((()=>({editorSettings:e.getStringInput()})),(t=>e.applyStringInput(t.editorSettings))),n.show()}function tr(t){const e=new St({semtype:a.SEMTYPE.MACROMOLECULE}),n=s.dialog({title:"Activity Cliffs"}).add(e.getEditor()).onOK((async()=>{const n=e.getParams();return t.func.prepare({table:n.table,molecules:n.col,activities:n.activities,similarity:n.similarityThreshold,methodName:n.methodName,similarityMetric:n.similarityMetric,preprocessingFunction:n.preprocessingFunction,options:n.options}).call()}));n.history((()=>({editorSettings:e.getStringInput()})),(t=>e.applyStringInput(t.editorSettings))),n.show()}function er(){return new Yt}function nr(){return new Yt}function ir(){return new Yt}function rr(t){return function(t){const e=Array.from(t.dataFrame.columns).filter((t=>t.semType===a.SEMTYPE.MOLECULE)).map((t=>t.name));new Set(e).delete(t.name);let n=Di.properties?Di.properties.maxMonomerLength:4;if(Rt.gp.maxMonomerLength in t.tags){const e=parseInt(t.getTag(Rt.gp.maxMonomerLength));n=isNaN(e)?n:e}if(".mm.cellRenderer.maxMonomerLength"in t.temp){const e=parseInt(t.temp[".mm.cellRenderer.maxMonomerLength"]);n=isNaN(e)?n:e}const i=s.input.int("Max Monomer Length",{value:n,nullable:!0,min:1,max:50,step:1,onValueChanged:e=>{if(0==e)setTimeout((()=>{i.value=null}),0);else{const n=e??"",i=null==n?"":n.toString();t.temp[".mm.cellRenderer.maxMonomerLength"]=i,t.temp[".mm.cellRenderer.settingsChanged"]=Bt.s.true,t.dataFrame.fireValuesChanged()}},tooltipText:"The max length of monomer symbol displayed without shortening, empty to no limit"});let r=Di.properties?Di.properties.fontSize:12;".mm.cellRenderer.fontSize"in t.temp&&t.temp[".mm.cellRenderer.fontSize"]&&!isNaN(t.temp[".mm.cellRenderer.fontSize"])&&(r=t.temp[".mm.cellRenderer.fontSize"]);const o=s.input.int("Font Size",{value:r,nullable:!0,min:1,max:50,step:1,onValueChanged:e=>{if(e&&e>0){const n=e??12;t.temp[".mm.cellRenderer.fontSize"]=n,t.temp[".mm.cellRenderer.settingsChanged"]=Bt.s.true,t.dataFrame.fireValuesChanged()}},tooltipText:"The font size of monomer symbol in sequence renderer"}),l=s.input.int("Monomer Margin",{value:t.temp[".mm.cellRenderer.gapLength"]??0,onValueChanged:e=>{t.temp[".mm.cellRenderer.gapLength"]=e,t.temp[".mm.cellRenderer.settingsChanged"]=Bt.s.true,t.dataFrame.fireValuesChanged()},tooltipText:"The size of margin between monomers (in pixels)"}),c=s.input.bool("Color Code",{value:null==t?.temp["color-code"]||t.temp["color-code"],onValueChanged:e=>{t.temp["color-code"]=e,t.dataFrame.fireValuesChanged()},tooltipText:"Color code"}),h=s.input.string("Reference Sequence",{value:null!=t?.temp["reference-sequence"]?t?.temp["reference-sequence"]:"",nullable:!0,onValueChanged:e=>{t.temp["reference-sequence"]=e,t.dataFrame.fireValuesChanged()},tooltipText:"Reference sequence is not empty, then the sequence will be render \nas a difference from the reference sequence"}),u=s.input.bool("Compare with current",{value:null==t?.temp["compare-with-current"]||t.temp["compare-with-current"],onValueChanged:e=>{t.temp["compare-with-current"]=e,t.dataFrame.fireValuesChanged()},tooltipText:'When on, all sequences get rendered in the "diff" mode'}),d=s.inputs([o,i,l,h,c,u]);return new a.Widget(d)}(t)}function or(t){return(0,li.j)(t,Di.monomerLib,Di.seqHelper)}function sr(){return new Zt}function ar(t,e,n,i,r){const o=new he.$(i,r,n,e);return"Local alignment"==t?o.smithWaterman():o.needlemanWunsch()}function lr(){return new re.oP}function cr(){return new ce}function hr(t,e,n,i){return hi(t,e??null,n??null,i??null)}async function ur(t,e,n,i,r){const s=hi(e,n??null,i??null,r??null);e.dataFrame.columns.add(s),await o.data.detectSemanticTypes(e.dataFrame)}async function dr(t,e,n,i,r,h,u,d,p){if(!(0,Xn.V)(e,"Activity Cliffs"))return;const m=It(t),f={units:e.meta.units,aligned:e.getTag(gt.gp.aligned),separator:e.getTag(gt.gp.separator),alphabet:e.getTag(gt.gp.alphabet)},g=h,y=e,b=async()=>await mt(t,y,m,"Activity cliffs",n,i,g,r,{...d??{}},a.SEMTYPE.MACROMOLECULE,f,u,me,fe,ve,void 0,p),v=r===c.c.UMAP?2e5:2e4,w=r===c.c.UMAP?5e3:2e3;if(t.rowCount>v)return void o.shell.warning(`Too many rows, maximum for sequence activity cliffs is ${v}`);const C=a.TaskBarProgressIndicator.create("Running sequence activity cliffs ...");return new Promise(((e,n)=>{t.rowCount>w&&!d?.[l.vb]?s.dialog().add(s.divText("Activity cliffs analysis might take several minutes.\n Do you want to continue?")).onOK((async()=>{b().then((t=>e(t))).catch((t=>n(t)))})).onCancel((()=>{e(void 0)})).show():b().then((t=>e(t))).catch((t=>n(t)))})).catch((t=>{const[e,n]=(0,Ct.AP)(t);throw Di.logger.error(e,void 0,n),t})).finally((()=>{C.close()}))}async function pr(t,e,n=1,i=.6,r="Morgan"){if(t.semType!==a.SEMTYPE.MACROMOLECULE)return{entries:t.toList(),options:{}};const{seqList:o,options:s}=await de(t,e,r);return{entries:o,options:{...s,gapOpen:n,gapExtend:i}}}async function mr(t,e){t.version!==t.temp["last-invalidated-version"]&&await(0,pe.BQ)(t,Di.seqHelper,!1);const n=t.temp["monomeric-mols"],i=await o.functions.call("Chem:getMorganFingerprints",{molColumn:n}),r=new Array(i.length).fill(null);for(let t=0;t<i.length;t++){if(i.isNone(t)||!i.get(t))continue;const e=i.get(t);r[t]=V.A.fromUint32Array(e.length,new Uint32Array(e.getBuffer().buffer))}return{entries:r,options:{}}}async function fr(t,e,i,r,c,h,u,d,p){const m=o.shell.tv.dataFrame==t?o.shell.tv:void 0;if((0,Xn.V)(e,"Sequence Space"))return h||(h=a.Func.find({name:"macromoleculePreprocessingFunction",package:"Bio"})[0]),u??={},await async function(t,e,i,r,c,h,u,d=!0,p=!1,m={preprocessingFuncArgs:[]},f={},g=null,y={},b){const v={showXAxis:!1,showYAxis:!1,showXSelector:!1,showYSelector:!1};if(e.length!==r.length||e.length!==h.length||e.length!==c.length||e.length!==m.preprocessingFuncArgs.length)throw new Error("columns, metrics and preprocessing functions, weights and function argumentsmust have the same length");const w=d?f.tableView??o.shell.tableView(t.name)??o.shell.addTableView(t):null,C=async()=>{const C=a.TaskBarProgressIndicator.create(`Initializing ${f.scatterPlotName??"dimensionality reduction"} ...`);let A;try{const S=It(t);function x(n,r,o){let c=null,h=null;t.columns.names().includes(S[0])?(c=t.columns.byName(S[0]),h=t.columns.byName(S[1])):(c=t.columns.add(a.Column.float(S[0],t.rowCount)),h=t.columns.add(a.Column.float(S[1],t.rowCount)),d&&!A&&(A=w.scatterPlot({...v,x:S[0],y:S[1],title:f.scatterPlotName??Tt(e,i)}))),f[l.YP]&&(A?.root&&s.setUpdateIndicator(A.root,!1),c.init((t=>o[0]?o[0][t]:void 0)),h.init((t=>o[1]?o[1][t]:void 0)));const u=n/r*100;C.update(u,`Running ${f.scatterPlotName??"dimensionality reduction"}... ${u.toFixed(0)}%`)}async function E(){t.columns.add(a.Column.float(S[0],t.rowCount)),t.columns.add(a.Column.float(S[1],t.rowCount));let n=null;d&&(A=w.scatterPlot({...v,x:S[0],y:S[1],title:f.scatterPlotName??Tt(e,i)}),s.setUpdateIndicator(A.root,!0));const p=o.events.onViewerClosed.subscribe((t=>{const e=t.args.viewer;e?.getOptions()?.look?.title&&A?.getOptions()?.look?.title&&e?.getOptions()?.look?.title===A?.getOptions()?.look?.title&&(o.events.fireCustomEvent(q.S,{}),p.unsubscribe(),n?.(),C.close())})),g=new Promise((async(o,s)=>{try{n=o;const s=[];let a=r,d=c,p=u;if(b&&e.every((t=>t.isNumerical))){const n=e.map((t=>t.toList())),i=new Array(t.rowCount).fill(0).map(((t,n)=>new Float32Array(e.length)));for(let r=0;r<e.length;++r)for(let e=0;e<t.rowCount;++e)i[e][r]=n[r][e];m.distanceFnArgs=[{}],s.push({entries:i,options:{}}),a=[b],d=[1],p="MANHATTAN"}else for(let t=0;t<h.length;++t){const n=h[t];if(m.distanceFnArgs||(m.distanceFnArgs=[]),n){const i=n.inputs[0].name,o=n.inputs[1].name,{entries:a,options:l}=await n.apply({[i]:e[t],[o]:r[t],...m.preprocessingFuncArgs[t]??{}});s.push({entries:a,options:l}),m.distanceFnArgs.push(l)}else{const n=e[t].toList(),i={};s.push({entries:n,options:i}),m.distanceFnArgs.push(i)}}o(await Y(s.map((t=>t.entries)),i,a,d,u,m,f[l.vb]?void 0:x))}catch(t){s(t)}})),y=await g;return C.close(),p.unsubscribe(),y}const M=await E();if(p&&M){const _=a.TaskBarProgressIndicator.create("Clustering embeddings ...");try{const I=await function(t,e,i,r){return _t(this,void 0,void 0,(function*(){return new Promise((function(o,s){const a=new Worker(new URL(n.p+n.u(682),n.b));a.postMessage({embedX:t,embedY:e,minPts:r,epsilon:i}),a.onmessage=({data:{error:t,clusters:e}})=>{a.terminate(),t?s(t):o(e)}}))}))}(M[0],M[1],m.dbScanEpsilon??.01,m.dbScanMinPts??4),T=t.columns.getUnusedName("Cluster (DBSCAN)");t.columns.addNewString(T).init((t=>I[t].toString())),A&&(A.props.colorColumnName=T)}catch(L){o.shell.error("Clustering embeddings failed"),console.error(L)}finally{_.close()}}if(M){const N=t.columns.byName(S[0]),P=t.columns.byName(S[1]);if(N.init((t=>M[0][t])),P.init((t=>M[1][t])),g)try{const $=g.inputs[0].name,R=g.inputs[1].name;await g.prepare({[$]:N,[R]:P,...y}).call(!0)}catch(O){o.shell.error("Post-processing failed"),console.error(O)}if(A)return s.setUpdateIndicator(A.root,!1),A.helpUrl="/help/compute/sequence-space",A}}catch(k){o.shell.error("Dimensionality reduction failed"),console.error(k),C.close(),A&&s.setUpdateIndicator(A.root,!1)}};return new Promise((async(e,n)=>{try{if(f.fastRowCount&&t.rowCount>f.fastRowCount&&!f[l.vb])s.dialog().add(s.divText("Analysis might take several minutes. Do you want to continue?")).onOK((async()=>{try{const t=await C();e(t)}catch(t){n(t)}})).onCancel((()=>e(void 0))).show();else{const t=await C();e(t)}}catch(t){n(t)}}))}(t,[e],i,[r],[1],[h],"MANHATTAN",c,d??!1,{...u,preprocessingFuncArgs:[u.preprocessingFuncArgs??{}]},{fastRowCount:1e4,scatterPlotName:"Sequence space",bypassLargeDataWarning:u?.[l.vb],tableView:m})}async function gr(t,e,n,i=!1){const r=a.TaskBarProgressIndicator.create("Converting to atomic level ...");try{await Ui;const r=e.temp[".mm.cellRenderer.overriddenLibrary"]??Di.monomerLib,o=Di.seqHelper,s=Di.rdKitModule;await(0,mi.V)(t,e,n,i,r,o,s)}finally{r.close()}}async function yr(t){if(!t?.dataFrame)throw new Error("Sequence column is not found or its data frame is not empty");const e=a.Func.find({name:"toAtomicLevel",package:"Bio"})[0];if(!e)throw new Error("To Atomic level Function not found");e.prepare({table:t.dataFrame,seqCol:t}).edit()}async function br(t){return async function(t){const e=s.divText(""),n=a.Widget.fromRoot(e);try{if(!t||!t.value)return e.innerText="No sequence provided",n;if(!(t.cell&&t.cell.dart&&t.cell.dataFrame&&t.cell.column))return e.innerText="Atomic level conversion requeires a sequence column",n;if(![gt.Hi.FASTA,gt.Hi.SEPARATOR,gt.Hi.HELM].includes(t.cell.column.meta.units?.toLowerCase()??""))return e.innerText="Unsupported sequence notation. please use Bio | Polytool | Convert",n;const i=(await lo()).getSeqHandler(t.cell.column);if(!i)return e.innerText="No sequence handler found",n;if((i.getSplitted(t.cell.rowIndex,50)?.length??100)>40)return e.innerText="Maximum number of monomers is 40",n;const r=a.Column.fromStrings("singleVal",[t.value]),l=a.DataFrame.fromColumns([r]);if(Object.entries(t.cell.column.tags).forEach((([t,e])=>{r.setTag(t,e)})),await gr(l,r,t.cell.column.meta.units===gt.Hi.HELM,!1),l.columns.length<2)return e.innerText="No structure generated",n;const c=l.columns.byIndex(1),h=c.get(0);if(!h)return e.innerText="No structure generated",n;c.semType=a.SEMTYPE.MOLECULE;const u=a.SemanticValue.fromTableCell(l.cell(0,c.name)),d=s.panels.infoPanel(u);let p=null;d&&(p=a.Widget.fromRoot(d.root));const m=o.chem.drawMolecule(h,300,300,!1);return m.style.cursor="pointer",s.tooltip.bind(m,"Click to expand"),m.onclick=()=>{const t=window.innerWidth-200,e=window.innerHeight-200,n=o.chem.drawMolecule(h,t,e,!1);s.dialog({title:"Molecule"}).add(n).showModal(!0)},p&&p.root.prepend(m),p??a.Widget.fromRoot(m)}catch(t){Di.logger.error(t)}return e.innerText="No Structure generated",n}(t)}function vr(){(0,Qn.D)({},Di.seqHelper).catch((t=>{const[e,n]=(0,Ct.AP)(t);if(t instanceof Jn.Ap)return o.shell.warning(t.element),void Di.logger.warning(e);o.shell.error(e),Di.logger.error(e,void 0,n)}))}async function wr(t=null,e=null,n){return(0,Qn.D)({col:t,clustersCol:e,...n},Di.seqHelper)}async function Cr(){const t=o.shell.tv,e=t.dataFrame.columns.toList().filter((t=>t.semType==a.SEMTYPE.MACROMOLECULE&&(Di.seqHelper.getSeqHandler(t),!0))),n=async e=>{if(!(0,Xn.V)(e,"Composition"))return;const n=t.addViewer("WebLogo",{sequenceColumnName:e.name});o.shell.tv.dockManager.dock(n,a.DOCK_TYPE.DOWN,null,"Composition analysis",.25)};let i=null;if(0!=e.length){if(e.length>1){const t=e.map((t=>t.name)),i=e.find((t=>Di.seqHelper.getSeqHandler(t).isMsa())),r=s.input.choice("Column",{value:i?i.name:t[0],items:t});s.dialog({title:"Composition Analysis",helpUrl:"https://datagrok.ai/help/datagrok/solutions/domains/bio/#sequence-composition"}).add(s.div([r])).onOK((async()=>{const t=e.find((t=>t.name==r.value))??null;t&&await n(t)})).show()}else i=e[0];i&&await n(i)}else o.shell.error("Current table does not contain sequences")}function Ar(t){return new yt.m(t).importFasta()}function Sr(t){return console.log(t),[]}function xr(){const t=(0,$t.me)()[0];(0,_e.C)(t,Di.seqHelper)}function Er(t){(0,_e.C)(t,Di.seqHelper)}function Mr(){return new ri}async function _r(t){const e=a.TaskBarProgressIndicator.create("Test detectMacromolecule..."),n=(await o.dapi.files.list(t,!0,"")).filter((t=>t.fileName.endsWith(".csv")));let i=0;const r=[];for(const s of n)try{const e=await o.dapi.files.readAsText(t+s.fullPath),n=a.DataFrame.fromCsv(e);for(const t of n.columns)await o.functions.call("Bio:detectMacromolecule",{col:t})===a.SEMTYPE.MACROMOLECULE&&r.push({file:s.path,result:"detected",column:t.name,message:`units: ${t.meta.units}`})}catch(t){r.push({file:s.path,result:"error",column:null,message:t instanceof Error?t.message:t.toString()})}finally{i+=1,e.update(100*i/n.length,`Test ${s.fileName}`)}o.shell.info("Test Demo:Files for detectMacromolecule finished."),e.close();const s=a.DataFrame.fromObjects(r);return s.name=`datasets_detectMacromolecule_${t}`,s}async function Ir(t,e){return await async function(t,e){if(await(0,te.cb)(10),!(0,Xn.V)(e,"Sequence space"))return t;const n=Di.seqHelper,i=(0,vt.R)(e,n);i.name="splitToMonomers";const r=e.dataFrame;for(const t of i.columns)t.semType=jt.uF.MONOMER,t.setTag(wt.gp.alphabet,e.getTag(wt.gp.alphabet));const s=/(\d+)(?: \((\d+)\))?/,l=t=>{s.lastIndex=0;const e=t.match(s);return e?`${e[1]} (${parseInt(e[2]??"0")+1})`:t};for(let t=0;t<i.columns.length;t++){const n=i.columns.byIndex(t);n.semType=jt.uF.MONOMER,n.setTag(wt.gp.alphabet,e.getTag(wt.gp.alphabet));const o=100;let s=0;for(;r.columns.byName(n.name)&&s<o;)n.name=l(n.name),s++;r.columns.add(n)}await o.data.detectSemanticTypes(r);for(let t=0;t<i.columns.length;t++){const e=i.columns.byIndex(t);e.setTag(a.TAGS.CELL_RENDERER,"Monomer"),e.setTag(".use-as-filter","false")}return r}(t,e)}function Tr(t){return Di.seqHelper.getSeqMonomers(t)}function Lr(){return new Se(Di.seqHelper)}function Nr(){const t=o.shell.v,e=t.addViewer("Sequence Similarity Search");t.dockManager.dock(e,"down")}function Pr(){return new Ee(Di.seqHelper)}function $r(){const t=o.shell.v,e=t.addViewer("Sequence Diversity Search");t.dockManager.dock(e,"down")}function Rr(t){const e=(0,$t.me)();1===e.length?t.func.prepare({macromolecules:e[0]}).call(!0):new pe.a7(e,Di.seqHelper)}function Or(t){o.shell.tv.getFiltersGroup({createDefaultFilters:!1}).updateOrAdd({type:"Bio:bioSubstructureFilter",column:t.name,columnName:t.name}),o.shell.tv.grid.scrollToCell(t,0)}async function kr(t,e,n){const i=Di.seqHelper;return fi(t,e,n,ft.IDENTITY,i)}async function Gr(t,e,n){const i=Di.seqHelper;return fi(t,e,n,ft.SIMILARITY,i)}async function Fr(){Vn()}async function Hr(){await jn()}async function Br(){const t=await _n.getInstance();await t.getViewRoot()}async function Dr(){return await jn(!1)}async function Vr(t,e){(await(await pn.getInstance()).getFileManager()).getValidLibraryPaths().forEach((e=>{const n=e.endsWith(".json")?e.substring(0,e.length-5):e;t.item(n).onSelected.subscribe((async()=>{const t=await _n.getInstance();await t.getViewRoot(e,!0),t.resetCurrentRowFollowing()}))}))}function jr(){(0,Ie.TE)()}function Ur(){return new Te._i(Di.seqHelper,Di.logger)}function Wr(){return new Te._i(Di.seqHelper,Di.logger)}async function qr(){const t=a.TaskBarProgressIndicator.create("WebLogo");try{const t=new URLSearchParams(window.location.search),e=new ti(t,"webLogoLargeApp"),n=await Di.files.readCsv("data/sample_PT_100000x5.csv");await o.data.detectSemanticTypes(n),await e.init(n)}finally{t.close()}}async function zr(){const t=a.TaskBarProgressIndicator.create("WebLogo ...");try{const t=new URLSearchParams(window.location.search),e=new ti(t,"webLogoAggApp"),n=await Di.files.readCsv("samples/FASTA_PT_activity.csv");await o.data.detectSemanticTypes(n),await e.init(n)}finally{t.close()}}async function Yr(){const t=a.TaskBarProgressIndicator.create("getRegion ...");try{const t=new URLSearchParams(window.location.search),e=new di(t,"getRegionApp");await e.init()}finally{t.close()}}async function Kr(){const t=a.TaskBarProgressIndicator.create("getRegion ...");try{const t=new URLSearchParams(window.location.search),e=await Di.files.readCsv("samples/HELM_empty_vals.csv"),n=new di(t,"getRegionHelmApp");await n.init({df:e,colName:"HELM"})}finally{t.close()}}function Zr(){const t=a.DataFrame.fromColumns((0,Lt.dW)());o.shell.addTableView(t)}function Xr(){const t=a.DataFrame.fromColumns([(0,Lt.Hx)(Di.seqHelper,gt.Hi.FASTA)]);o.shell.addTableView(t)}function Jr(){const t=a.DataFrame.fromColumns([(0,Lt.Hx)(Di.seqHelper,gt.Hi.HELM)]);o.shell.addTableView(t)}function Qr(t,e){!function(t,e,n){const i=n.getSeqHandler(t.column),r=Object.values(gt.Hi).filter((t=>t!==i.units));e.group("Copy").items(r,(e=>{const i=t.column,r=t.rowIndex,s=n.getSeqHandler(i),a=e===gt.Hi.SEPARATOR?Di.properties.defaultSeparator:void 0,l=s.getJoiner({notation:e,separator:a})(s.getSplitted(r));navigator.clipboard?(navigator.clipboard.writeText(l),o.shell.info(`Value of notation '${e}' copied to clipboard`)):o.shell.warning("The clipboard functionality requires a secure origin — either HTTPS or localhost")}))}(t,e,Di.seqHelper)}async function to(){await async function(){const t=await Di.files.readCsv("samples/peptides-non-natural.csv");t.name="Similarity and Diversity Demo",t.col("activity").setTag("format","3 significant digits"),t.col("sequence").temp[".mm.cellRenderer.maxMonomerLength"]=4;const e=o.shell.addTableView(t);await t.meta.detectSemanticTypes(),await o.data.detectSemanticTypes(t);const n=e.addViewer("Sequence Similarity Search",{limit:20}),i=e.dockManager.dock(n,a.DOCK_TYPE.RIGHT,null,"Similarity search",.45);(0,$t.Kd)(e.grid,"sequence",500,30);const r=e.addViewer("Sequence Diversity Search",{limit:20});e.dockManager.dock(r,a.DOCK_TYPE.DOWN,i,"Diversity search",.4),o.functions.call("Dendrogram:HierarchicalClustering",{df:o.shell.t,colNameList:["sequence"],distance:"euclidian",linkage:"complete"})}()}async function eo(){await async function(){const t=await o.functions.eval("Bio:SeqSpaceDemo"),e=await o.dapi.projects.find(t.id);await e.open(),o.shell.windows.help.showHelp("/help/datagrok/solutions/domains/bio/bio.md#sequence-space")}()}async function no(){await async function(){const t=await Di.files.readCsv("tests/helm_cyclic_cliffs.csv");t.name="Activity Cliffs Demo",await o.data.detectSemanticTypes(t),await t.meta.detectSemanticTypes();const e=o.shell.addTableView(t);s.setUpdateIndicator(e.root,!0);try{const n=a.Func.find({name:"macromoleculePreprocessingFunction",package:"Bio"})[0],i=await dr(t,t.getCol("Sequence"),t.getCol("Activity"),96,c.c.UMAP,ue.Z.MONOMER_CHEMICAL_DISTANCE,n,{},!0);e.dockManager.dock(i,a.DOCK_TYPE.RIGHT,null,"Activity Cliffs",.65),await a.delay(100),fn()(i.root).find("button.scatter_plot_link,cliffs_grid").get()[0].click(),await a.delay(100),e.grid.props.rowHeight=180,e.grid.col("sequence")&&(e.grid.col("sequence").width=300),e.grid.col("structure")&&(e.grid.col("structure").width=300);const r=Array.from(e.viewers).find((t=>t!==e.grid&&t.type===a.VIEWER.GRID));r&&(r.props.rowHeight=40,r.col("seq_diff").width=600,e.dockManager.dock(r,a.DOCK_TYPE.DOWN,null,"Cliffs",.35),e.dockManager.dock(i,a.DOCK_TYPE.RIGHT,null,"Activity Cliffs",.55))}catch(t){!function(t){const e=t instanceof Error?t.message:t.toString(),n=t instanceof Error?t.stack:void 0;o.shell.error(e),Di.logger.error(t.message,void 0,n)}(t)}finally{s.setUpdateIndicator(e.root,!1)}o.shell.windows.help.showHelp("/help/datagrok/solutions/domains/bio/bio.md#activity-cliffs")}()}async function io(){await async function(){const t=await Di.files.readCsv("samples/HELM_BI_CYCLIC.csv");t.name="To Atomic Level",await t.meta.detectSemanticTypes(),await o.data.detectSemanticTypes(t);const e=o.shell.addTableView(t),n=t.col("HELM");await gr(t,n,!0,!1),(0,$t.Kd)(e.grid,"molfile(HELM)",500,300,!0),(0,$t.Kd)(e.grid,"HELM",500,void 0,!0),o.shell.info("Hover over monomers in HELM column to highlight them in molecular structure.",{timeout:10}),o.shell.windows.help.showHelp("/help/datagrok/solutions/domains/bio/bio.md#get-atomic-level-structure")}()}async function ro(t){const e=(0,bt.uX)(t),n=JSON.stringify(e);a.Utils.download(`${t.name}.json`,n)}async function oo(t,e){if(!t.trim())return"";try{const n=a.Column.fromList(a.COLUMN_TYPE.STRING,"helm",[t]),i=a.DataFrame.fromColumns([n]),r=await o.functions.call("Bio:detectMacromolecule",{col:n});r&&(n.semType=r);const s=(await Vi()).getMonomerLib(),l=Di.seqHelper,c=await(0,Pt.j)(),h=(await(0,mi.V)(i,n,e,!1,s,l,c))?.molCol?.get(0);return h??void 0}catch(t){const[e,n]=(0,Ct.AP)(t);throw Di.logger.error(e,void 0,n),t}}async function so(t,e){if(!t.trim())return null;try{const n=a.Column.fromList(a.COLUMN_TYPE.STRING,"seq",[t]),i=a.DataFrame.fromColumns([n]);if(!await o.functions.call("Bio:detectMacromolecule",{col:n}))throw new Error("Macromolecule required");return(await fi(i,n,e,ft.IDENTITY,Di.seqHelper)).get(0)}catch(t){const[e,n]=(0,Ct.AP)(t);throw Di.logger.error(e,void 0,n),t}}async function ao(t,e,n){const i=await t.readAsString();await async function(t,e,n){const i=a.TaskBarProgressIndicator.create("detectMacromolecule probe ...");try{let r=0;const s=await o.functions.call("Bio:detectMacromoleculeEnableStore");let l=0;for(let c=0;c<n;++c){const h=a.DataFrame.fromCsv(t),u=e?h.getCol(e):h.columns.byIndex(0);await o.functions.call("Bio:detectMacromolecule",{col:u})!==a.SEMTYPE.MACROMOLECULE&&(++l,console.warn(`Reject reason: ${s.last.rejectReason}`));const d=c/n;d-r>=.1&&(r=d,i.update(100*d,`detectMacromolecule probe ${l}/${c}/${n} ...`),await(0,te.cb)(0))}l>0?o.shell.warning(`detectMacromolecule failed ${l} / ${n}`):o.shell.info(`detectMacromolecule success ${n}`)}finally{i.close()}}(i,e,n)}async function lo(){return await Wi(),Di.seqHelper}function co(t,e,n){return async function(t,e,n=!0,i){const r=Di.seqHelper,o=(await r.getHelmToMolfileConverter(i)).convertToRdKitBeautifiedMolfileColumn(e,n,Di.rdKitModule,i);return o.semType=a.SEMTYPE.MOLECULE,o}(0,e,n,Di.monomerLib)}function ho(){return Di.logger.debug("Bio:test1() function"),{value:"value1"}}},6625:(t,e,n)=>{"use strict";n.d(e,{$:()=>o});class i{value;parentI;parentJ;constructor(){this.value=0,this.parentI=0,this.parentJ=0}}class r{seq1;seq2;score;constructor(t,e,n){this.seq1=t,this.seq2=e,this.score=n}}class o{seq1="";seq2="";gap=1;len1=0;len2=0;step=1;alignGrid=[];scores=[];dpGrid=[];connections={};BLOSUM45=[[5,-2,-1,-2,-1,-1,-1,0,-2,-1,-1,-1,-1,-2,-1,1,0,-2,-2,0,-1,-1,0,-5],[-2,7,0,-1,-3,1,0,-2,0,-3,-2,3,-1,-2,-2,-1,-1,-2,-1,-2,-1,0,-1,-5],[-1,0,6,2,-2,0,0,0,1,-2,-3,0,-2,-2,-2,1,0,-4,-2,-3,4,0,-1,-5],[-2,-1,2,7,-3,0,2,-1,0,-4,-3,0,-3,-4,-1,0,-1,-4,-2,-3,5,1,-1,-5],[-1,-3,-2,-3,12,-3,-3,-3,-3,-3,-2,-3,-2,-2,-4,-1,-1,-5,-3,-1,-2,-3,-2,-5],[-1,1,0,0,-3,6,2,-2,1,-2,-2,1,0,-4,-1,0,-1,-2,-1,-3,0,4,-1,-5],[-1,0,0,2,-3,2,6,-2,0,-3,-2,1,-2,-3,0,0,-1,-3,-2,-3,1,4,-1,-5],[0,-2,0,-1,-3,-2,-2,7,-2,-4,-3,-2,-2,-3,-2,0,-2,-2,-3,-3,-1,-2,-1,-5],[-2,0,1,0,-3,1,0,-2,10,-3,-2,-1,0,-2,-2,-1,-2,-3,2,-3,0,0,-1,-5],[-1,-3,-2,-4,-3,-2,-3,-4,-3,5,2,-3,2,0,-2,-2,-1,-2,0,3,-3,-3,-1,-5],[-1,-2,-3,-3,-2,-2,-2,-3,-2,2,5,-3,2,1,-3,-3,-1,-2,0,1,-3,-2,-1,-5],[-1,3,0,0,-3,1,1,-2,-1,-3,-3,5,-1,-3,-1,-1,-1,-2,-1,-2,0,1,-1,-5],[-1,-1,-2,-3,-2,0,-2,-2,0,2,2,-1,6,0,-2,-2,-1,-2,0,1,-2,-1,-1,-5],[-2,-2,-2,-4,-2,-4,-3,-3,-2,0,1,-3,0,8,-3,-2,-1,1,3,0,-3,-3,-1,-5],[-1,-2,-2,-1,-4,-1,0,-2,-2,-2,-3,-1,-2,-3,9,-1,-1,-3,-3,-3,-2,-1,-1,-5],[1,-1,1,0,-1,0,0,0,-1,-2,-3,-1,-2,-2,-1,4,2,-4,-2,-1,0,0,0,-5],[0,-1,0,-1,-1,-1,-1,-2,-2,-1,-1,-1,-1,-1,-1,2,5,-3,-1,0,0,-1,0,-5],[-2,-2,-4,-4,-5,-2,-3,-2,-3,-2,-2,-2,-2,1,-3,-4,-3,15,3,-3,-4,-2,-2,-5],[-2,-1,-2,-2,-3,-1,-2,-3,2,0,0,-1,0,3,-3,-2,-1,3,8,-1,-2,-2,-1,-5],[0,-2,-3,-3,-1,-3,-3,-3,-3,3,1,-2,1,0,-3,-1,0,-3,-1,5,-3,-3,-1,-5],[-1,-1,4,5,-2,0,1,-1,0,-3,-3,0,-2,-3,-2,0,0,-4,-2,-3,4,2,-1,-5],[-1,0,0,1,-3,4,4,-2,0,-3,-2,1,-1,-3,-1,0,-1,-2,-2,-3,2,4,-1,-5],[0,-1,-1,-1,-2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,-2,-1,-1,-1,-1,-1,-5],[-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,1]];BLOSUM50=[[5,-2,-1,-2,-1,-1,-1,0,-2,-1,-2,-1,-1,-3,-1,1,0,-3,-2,0,-2,-1,-1,-5],[-2,7,-1,-2,-4,1,0,-3,0,-4,-3,3,-2,-3,-3,-1,-1,-3,-1,-3,-1,0,-1,-5],[-1,-1,7,2,-2,0,0,0,1,-3,-4,0,-2,-4,-2,1,0,-4,-2,-3,4,0,-1,-5],[-2,-2,2,8,-4,0,2,-1,-1,-4,-4,-1,-4,-5,-1,0,-1,-5,-3,-4,5,1,-1,-5],[-1,-4,-2,-4,13,-3,-3,-3,-3,-2,-2,-3,-2,-2,-4,-1,-1,-5,-3,-1,-3,-3,-2,-5],[-1,1,0,0,-3,7,2,-2,1,-3,-2,2,0,-4,-1,0,-1,-1,-1,-3,0,4,-1,-5],[-1,0,0,2,-3,2,6,-3,0,-4,-3,1,-2,-3,-1,-1,-1,-3,-2,-3,1,5,-1,-5],[0,-3,0,-1,-3,-2,-3,8,-2,-4,-4,-2,-3,-4,-2,0,-2,-3,-3,-4,-1,-2,-2,-5],[-2,0,1,-1,-3,1,0,-2,10,-4,-3,0,-1,-1,-2,-1,-2,-3,2,-4,0,0,-1,-5],[-1,-4,-3,-4,-2,-3,-4,-4,-4,5,2,-3,2,0,-3,-3,-1,-3,-1,4,-4,-3,-1,-5],[-2,-3,-4,-4,-2,-2,-3,-4,-3,2,5,-3,3,1,-4,-3,-1,-2,-1,1,-4,-3,-1,-5],[-1,3,0,-1,-3,2,1,-2,0,-3,-3,6,-2,-4,-1,0,-1,-3,-2,-3,0,1,-1,-5],[-1,-2,-2,-4,-2,0,-2,-3,-1,2,3,-2,7,0,-3,-2,-1,-1,0,1,-3,-1,-1,-5],[-3,-3,-4,-5,-2,-4,-3,-4,-1,0,1,-4,0,8,-4,-3,-2,1,4,-1,-4,-4,-2,-5],[-1,-3,-2,-1,-4,-1,-1,-2,-2,-3,-4,-1,-3,-4,10,-1,-1,-4,-3,-3,-2,-1,-2,-5],[1,-1,1,0,-1,0,-1,0,-1,-3,-3,0,-2,-3,-1,5,2,-4,-2,-2,0,0,-1,-5],[0,-1,0,-1,-1,-1,-1,-2,-2,-1,-1,-1,-1,-2,-1,2,5,-3,-2,0,0,-1,0,-5],[-3,-3,-4,-5,-5,-1,-3,-3,-3,-3,-2,-3,-1,1,-4,-4,-3,15,2,-3,-5,-2,-3,-5],[-2,-1,-2,-3,-3,-1,-2,-3,2,-1,-1,-2,0,4,-3,-2,-2,2,8,-1,-3,-2,-1,-5],[0,-3,-3,-4,-1,-3,-3,-4,-4,4,1,-3,1,-1,-3,-2,0,-3,-1,5,-4,-3,-1,-5],[-2,-1,4,5,-3,0,1,-1,0,-4,-4,0,-3,-4,-2,0,0,-5,-3,-4,5,2,-1,-5],[-1,0,0,1,-3,4,5,-2,0,-3,-3,1,-1,-4,-1,0,-1,-2,-2,-3,2,5,-1,-5],[-1,-1,-1,-1,-2,-1,-1,-2,-1,-1,-1,-1,-1,-2,-2,-1,0,-3,-1,-1,-1,-1,-1,-5],[-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,1]];BLOSUM62=[[4,-1,-2,-2,0,-1,-1,0,-2,-1,-1,-1,-1,-2,-1,1,0,-3,-2,0,-2,-1,0,-4],[-1,5,0,-2,-3,1,0,-2,0,-3,-2,2,-1,-3,-2,-1,-1,-3,-2,-3,-1,0,-1,-4],[-2,0,6,1,-3,0,0,0,1,-3,-3,0,-2,-3,-2,1,0,-4,-2,-3,3,0,-1,-4],[-2,-2,1,6,-3,0,2,-1,-1,-3,-4,-1,-3,-3,-1,0,-1,-4,-3,-3,4,1,-1,-4],[0,-3,-3,-3,9,-3,-4,-3,-3,-1,-1,-3,-1,-2,-3,-1,-1,-2,-2,-1,-3,-3,-2,-4],[-1,1,0,0,-3,5,2,-2,0,-3,-2,1,0,-3,-1,0,-1,-2,-1,-2,0,3,-1,-4],[-1,0,0,2,-4,2,5,-2,0,-3,-3,1,-2,-3,-1,0,-1,-3,-2,-2,1,4,-1,-4],[0,-2,0,-1,-3,-2,-2,6,-2,-4,-4,-2,-3,-3,-2,0,-2,-2,-3,-3,-1,-2,-1,-4],[-2,0,1,-1,-3,0,0,-2,8,-3,-3,-1,-2,-1,-2,-1,-2,-2,2,-3,0,0,-1,-4],[-1,-3,-3,-3,-1,-3,-3,-4,-3,4,2,-3,1,0,-3,-2,-1,-3,-1,3,-3,-3,-1,-4],[-1,-2,-3,-4,-1,-2,-3,-4,-3,2,4,-2,2,0,-3,-2,-1,-2,-1,1,-4,-3,-1,-4],[-1,2,0,-1,-3,1,1,-2,-1,-3,-2,5,-1,-3,-1,0,-1,-3,-2,-2,0,1,-1,-4],[-1,-1,-2,-3,-1,0,-2,-3,-2,1,2,-1,5,0,-2,-1,-1,-1,-1,1,-3,-1,-1,-4],[-2,-3,-3,-3,-2,-3,-3,-3,-1,0,0,-3,0,6,-4,-2,-2,1,3,-1,-3,-3,-1,-4],[-1,-2,-2,-1,-3,-1,-1,-2,-2,-3,-3,-1,-2,-4,7,-1,-1,-4,-3,-2,-2,-1,-2,-4],[1,-1,1,0,-1,0,0,0,-1,-2,-2,0,-1,-2,-1,4,1,-3,-2,-2,0,0,0,-4],[0,-1,0,-1,-1,-1,-1,-2,-2,-1,-1,-1,-1,-2,-1,1,5,-2,-2,0,-1,-1,0,-4],[-3,-3,-4,-4,-2,-2,-3,-2,-2,-3,-2,-3,-1,1,-4,-3,-2,11,2,-3,-4,-3,-2,-4],[-2,-2,-2,-3,-2,-1,-2,-3,2,-1,-1,-2,-1,3,-3,-2,-2,2,7,-1,-3,-2,-1,-4],[0,-3,-3,-3,-1,-2,-2,-3,-3,3,1,-2,1,-1,-2,-2,0,-3,-1,4,-3,-2,-1,-4],[-2,-1,3,4,-3,0,1,-1,0,-3,-4,0,-3,-3,-2,0,-1,-4,-3,-3,4,1,-1,-4],[-1,0,0,1,-3,3,4,-2,0,-3,-3,1,-1,-3,-1,0,-1,-3,-2,-2,1,4,-1,-4],[0,-1,-1,-1,-2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-2,0,0,-2,-1,-1,-1,-1,-1,-4],[-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,1]];BLOSUM80=[[7,-3,-3,-3,-1,-2,-2,0,-3,-3,-3,-1,-2,-4,-1,2,0,-5,-4,-1,-3,-2,-1,-8],[-3,9,-1,-3,-6,1,-1,-4,0,-5,-4,3,-3,-5,-3,-2,-2,-5,-4,-4,-2,0,-2,-8],[-3,-1,9,2,-5,0,-1,-1,1,-6,-6,0,-4,-6,-4,1,0,-7,-4,-5,5,-1,-2,-8],[-3,-3,2,10,-7,-1,2,-3,-2,-7,-7,-2,-6,-6,-3,-1,-2,-8,-6,-6,6,1,-3,-8],[-1,-6,-5,-7,13,-5,-7,-6,-7,-2,-3,-6,-3,-4,-6,-2,-2,-5,-5,-2,-6,-7,-4,-8],[-2,1,0,-1,-5,9,3,-4,1,-5,-4,2,-1,-5,-3,-1,-1,-4,-3,-4,-1,5,-2,-8],[-2,-1,-1,2,-7,3,8,-4,0,-6,-6,1,-4,-6,-2,-1,-2,-6,-5,-4,1,6,-2,-8],[0,-4,-1,-3,-6,-4,-4,9,-4,-7,-7,-3,-5,-6,-5,-1,-3,-6,-6,-6,-2,-4,-3,-8],[-3,0,1,-2,-7,1,0,-4,12,-6,-5,-1,-4,-2,-4,-2,-3,-4,3,-5,-1,0,-2,-8],[-3,-5,-6,-7,-2,-5,-6,-7,-6,7,2,-5,2,-1,-5,-4,-2,-5,-3,4,-6,-6,-2,-8],[-3,-4,-6,-7,-3,-4,-6,-7,-5,2,6,-4,3,0,-5,-4,-3,-4,-2,1,-7,-5,-2,-8],[-1,3,0,-2,-6,2,1,-3,-1,-5,-4,8,-3,-5,-2,-1,-1,-6,-4,-4,-1,1,-2,-8],[-2,-3,-4,-6,-3,-1,-4,-5,-4,2,3,-3,9,0,-4,-3,-1,-3,-3,1,-5,-3,-2,-8],[-4,-5,-6,-6,-4,-5,-6,-6,-2,-1,0,-5,0,10,-6,-4,-4,0,4,-2,-6,-6,-3,-8],[-1,-3,-4,-3,-6,-3,-2,-5,-4,-5,-5,-2,-4,-6,12,-2,-3,-7,-6,-4,-4,-2,-3,-8],[2,-2,1,-1,-2,-1,-1,-1,-2,-4,-4,-1,-3,-4,-2,7,2,-6,-3,-3,0,-1,-1,-8],[0,-2,0,-2,-2,-1,-2,-3,-3,-2,-3,-1,-1,-4,-3,2,8,-5,-3,0,-1,-2,-1,-8],[-5,-5,-7,-8,-5,-4,-6,-6,-4,-5,-4,-6,-3,0,-7,-6,-5,16,3,-5,-8,-5,-5,-8],[-4,-4,-4,-6,-5,-3,-5,-6,3,-3,-2,-4,-3,4,-6,-3,-3,3,11,-3,-5,-4,-3,-8],[-1,-4,-5,-6,-2,-4,-4,-6,-5,4,1,-4,1,-2,-4,-3,0,-5,-3,7,-6,-4,-2,-8],[-3,-2,5,6,-6,-1,1,-2,-1,-6,-7,-1,-5,-6,-4,0,-1,-8,-5,-6,6,0,-3,-8],[-2,0,-1,1,-7,5,6,-4,0,-6,-5,1,-3,-6,-2,-1,-2,-5,-4,-4,0,6,-1,-8],[-1,-2,-2,-3,-4,-2,-2,-3,-2,-2,-2,-2,-2,-3,-3,-1,-1,-5,-3,-2,-3,-1,-2,-8],[-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,1]];BLOSUM90=[[5,-2,-2,-3,-1,-1,-1,0,-2,-2,-2,-1,-2,-3,-1,1,0,-4,-3,-1,-2,-1,-1,-6],[-2,6,-1,-3,-5,1,-1,-3,0,-4,-3,2,-2,-4,-3,-1,-2,-4,-3,-3,-2,0,-2,-6],[-2,-1,7,1,-4,0,-1,-1,0,-4,-4,0,-3,-4,-3,0,0,-5,-3,-4,4,-1,-2,-6],[-3,-3,1,7,-5,-1,1,-2,-2,-5,-5,-1,-4,-5,-3,-1,-2,-6,-4,-5,4,0,-2,-6],[-1,-5,-4,-5,9,-4,-6,-4,-5,-2,-2,-4,-2,-3,-4,-2,-2,-4,-4,-2,-4,-5,-3,-6],[-1,1,0,-1,-4,7,2,-3,1,-4,-3,1,0,-4,-2,-1,-1,-3,-3,-3,-1,4,-1,-6],[-1,-1,-1,1,-6,2,6,-3,-1,-4,-4,0,-3,-5,-2,-1,-1,-5,-4,-3,0,4,-2,-6],[0,-3,-1,-2,-4,-3,-3,6,-3,-5,-5,-2,-4,-5,-3,-1,-3,-4,-5,-5,-2,-3,-2,-6],[-2,0,0,-2,-5,1,-1,-3,8,-4,-4,-1,-3,-2,-3,-2,-2,-3,1,-4,-1,0,-2,-6],[-2,-4,-4,-5,-2,-4,-4,-5,-4,5,1,-4,1,-1,-4,-3,-1,-4,-2,3,-5,-4,-2,-6],[-2,-3,-4,-5,-2,-3,-4,-5,-4,1,5,-3,2,0,-4,-3,-2,-3,-2,0,-5,-4,-2,-6],[-1,2,0,-1,-4,1,0,-2,-1,-4,-3,6,-2,-4,-2,-1,-1,-5,-3,-3,-1,1,-1,-6],[-2,-2,-3,-4,-2,0,-3,-4,-3,1,2,-2,7,-1,-3,-2,-1,-2,-2,0,-4,-2,-1,-6],[-3,-4,-4,-5,-3,-4,-5,-5,-2,-1,0,-4,-1,7,-4,-3,-3,0,3,-2,-4,-4,-2,-6],[-1,-3,-3,-3,-4,-2,-2,-3,-3,-4,-4,-2,-3,-4,8,-2,-2,-5,-4,-3,-3,-2,-2,-6],[1,-1,0,-1,-2,-1,-1,-1,-2,-3,-3,-1,-2,-3,-2,5,1,-4,-3,-2,0,-1,-1,-6],[0,-2,0,-2,-2,-1,-1,-3,-2,-1,-2,-1,-1,-3,-2,1,6,-4,-2,-1,-1,-1,-1,-6],[-4,-4,-5,-6,-4,-3,-5,-4,-3,-4,-3,-5,-2,0,-5,-4,-4,11,2,-3,-6,-4,-3,-6],[-3,-3,-3,-4,-4,-3,-4,-5,1,-2,-2,-3,-2,3,-4,-3,-2,2,8,-3,-4,-3,-2,-6],[-1,-3,-4,-5,-2,-3,-3,-5,-4,3,0,-3,0,-2,-3,-2,-1,-3,-3,5,-4,-3,-2,-6],[-2,-2,4,4,-4,-1,0,-2,-1,-5,-5,-1,-4,-4,-3,0,-1,-6,-4,-4,4,0,-2,-6],[-1,0,-1,0,-5,4,4,-3,0,-4,-4,1,-2,-4,-2,-1,-1,-4,-3,-3,0,4,-1,-6],[-1,-2,-2,-2,-3,-1,-2,-2,-2,-2,-2,-1,-1,-2,-2,-1,-1,-3,-2,-2,-2,-1,-2,-6],[-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,1]];NUCLEOTIDES=[[1,-1,-1,-1],[-1,1,-1,-1],[-1,-1,1,-1],[-1,-1,-1,1]];PAM30=[[6,-7,-4,-3,-6,-4,-2,-2,-7,-5,-6,-7,-5,-8,-2,0,-1,-13,-8,-2,-3,-3,-3,-17],[-7,8,-6,-10,-8,-2,-9,-9,-2,-5,-8,0,-4,-9,-4,-3,-6,-2,-10,-8,-7,-4,-6,-17],[-4,-6,8,2,-11,-3,-2,-3,0,-5,-7,-1,-9,-9,-6,0,-2,-8,-4,-8,6,-3,-3,-17],[-3,-10,2,8,-14,-2,2,-3,-4,-7,-12,-4,-11,-15,-8,-4,-5,-15,-11,-8,6,1,-5,-17],[-6,-8,-11,-14,10,-14,-14,-9,-7,-6,-15,-14,-13,-13,-8,-3,-8,-15,-4,-6,-12,-14,-9,-17],[-4,-2,-3,-2,-14,8,1,-7,1,-8,-5,-3,-4,-13,-3,-5,-5,-13,-12,-7,-3,6,-5,-17],[-2,-9,-2,2,-14,1,8,-4,-5,-5,-9,-4,-7,-14,-5,-4,-6,-17,-8,-6,1,6,-5,-17],[-2,-9,-3,-3,-9,-7,-4,6,-9,-11,-10,-7,-8,-9,-6,-2,-6,-15,-14,-5,-3,-5,-5,-17],[-7,-2,0,-4,-7,1,-5,-9,9,-9,-6,-6,-10,-6,-4,-6,-7,-7,-3,-6,-1,-1,-5,-17],[-5,-5,-5,-7,-6,-8,-5,-11,-9,8,-1,-6,-1,-2,-8,-7,-2,-14,-6,2,-6,-6,-5,-17],[-6,-8,-7,-12,-15,-5,-9,-10,-6,-1,7,-8,1,-3,-7,-8,-7,-6,-7,-2,-9,-7,-6,-17],[-7,0,-1,-4,-14,-3,-4,-7,-6,-6,-8,7,-2,-14,-6,-4,-3,-12,-9,-9,-2,-4,-5,-17],[-5,-4,-9,-11,-13,-4,-7,-8,-10,-1,1,-2,11,-4,-8,-5,-4,-13,-11,-1,-10,-5,-5,-17],[-8,-9,-9,-15,-13,-13,-14,-9,-6,-2,-3,-14,-4,9,-10,-6,-9,-4,2,-8,-10,-13,-8,-17],[-2,-4,-6,-8,-8,-3,-5,-6,-4,-8,-7,-6,-8,-10,8,-2,-4,-14,-13,-6,-7,-4,-5,-17],[0,-3,0,-4,-3,-5,-4,-2,-6,-7,-8,-4,-5,-6,-2,6,0,-5,-7,-6,-1,-5,-3,-17],[-1,-6,-2,-5,-8,-5,-6,-6,-7,-2,-7,-3,-4,-9,-4,0,7,-13,-6,-3,-3,-6,-4,-17],[-13,-2,-8,-15,-15,-13,-17,-15,-7,-14,-6,-12,-13,-4,-14,-5,-13,13,-5,-15,-10,-14,-11,-17],[-8,-10,-4,-11,-4,-12,-8,-14,-3,-6,-7,-9,-11,2,-13,-7,-6,-5,10,-7,-6,-9,-7,-17],[-2,-8,-8,-8,-6,-7,-6,-5,-6,2,-2,-9,-1,-8,-6,-6,-3,-15,-7,7,-8,-6,-5,-17],[-3,-7,6,6,-12,-3,1,-3,-1,-6,-9,-2,-10,-10,-7,-1,-3,-10,-6,-8,6,0,-5,-17],[-3,-4,-3,1,-14,6,6,-5,-1,-6,-7,-4,-5,-13,-4,-5,-6,-14,-9,-6,0,6,-5,-17],[-3,-6,-3,-5,-9,-5,-5,-5,-5,-5,-6,-5,-5,-8,-5,-3,-4,-11,-7,-5,-5,-5,-5,-17],[-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,1]];PAM70=[[5,-4,-2,-1,-4,-2,-1,0,-4,-2,-4,-4,-3,-6,0,1,1,-9,-5,-1,-1,-1,-2,-11],[-4,8,-3,-6,-5,0,-5,-6,0,-3,-6,2,-2,-7,-2,-1,-4,0,-7,-5,-4,-2,-3,-11],[-2,-3,6,3,-7,-1,0,-1,1,-3,-5,0,-5,-6,-3,1,0,-6,-3,-5,5,-1,-2,-11],[-1,-6,3,6,-9,0,3,-1,-1,-5,-8,-2,-7,-10,-4,-1,-2,-10,-7,-5,5,2,-3,-11],[-4,-5,-7,-9,9,-9,-9,-6,-5,-4,-10,-9,-9,-8,-5,-1,-5,-11,-2,-4,-8,-9,-6,-11],[-2,0,-1,0,-9,7,2,-4,2,-5,-3,-1,-2,-9,-1,-3,-3,-8,-8,-4,-1,5,-2,-11],[-1,-5,0,3,-9,2,6,-2,-2,-4,-6,-2,-4,-9,-3,-2,-3,-11,-6,-4,2,5,-3,-11],[0,-6,-1,-1,-6,-4,-2,6,-6,-6,-7,-5,-6,-7,-3,0,-3,-10,-9,-3,-1,-3,-3,-11],[-4,0,1,-1,-5,2,-2,-6,8,-6,-4,-3,-6,-4,-2,-3,-4,-5,-1,-4,0,1,-3,-11],[-2,-3,-3,-5,-4,-5,-4,-6,-6,7,1,-4,1,0,-5,-4,-1,-9,-4,3,-4,-4,-3,-11],[-4,-6,-5,-8,-10,-3,-6,-7,-4,1,6,-5,2,-1,-5,-6,-4,-4,-4,0,-6,-4,-4,-11],[-4,2,0,-2,-9,-1,-2,-5,-3,-4,-5,6,0,-9,-4,-2,-1,-7,-7,-6,-1,-2,-3,-11],[-3,-2,-5,-7,-9,-2,-4,-6,-6,1,2,0,10,-2,-5,-3,-2,-8,-7,0,-6,-3,-3,-11],[-6,-7,-6,-10,-8,-9,-9,-7,-4,0,-1,-9,-2,8,-7,-4,-6,-2,4,-5,-7,-9,-5,-11],[0,-2,-3,-4,-5,-1,-3,-3,-2,-5,-5,-4,-5,-7,7,0,-2,-9,-9,-3,-4,-2,-3,-11],[1,-1,1,-1,-1,-3,-2,0,-3,-4,-6,-2,-3,-4,0,5,2,-3,-5,-3,0,-2,-1,-11],[1,-4,0,-2,-5,-3,-3,-3,-4,-1,-4,-1,-2,-6,-2,2,6,-8,-4,-1,-1,-3,-2,-11],[-9,0,-6,-10,-11,-8,-11,-10,-5,-9,-4,-7,-8,-2,-9,-3,-8,13,-3,-10,-7,-10,-7,-11],[-5,-7,-3,-7,-2,-8,-6,-9,-1,-4,-4,-7,-7,4,-9,-5,-4,-3,9,-5,-4,-7,-5,-11],[-1,-5,-5,-5,-4,-4,-4,-3,-4,3,0,-6,0,-5,-3,-3,-1,-10,-5,6,-5,-4,-2,-11],[-1,-4,5,5,-8,-1,2,-1,0,-4,-6,-1,-6,-7,-4,0,-1,-7,-4,-5,5,1,-2,-11],[-1,-2,-1,2,-9,5,5,-3,1,-4,-4,-2,-3,-9,-2,-2,-3,-10,-7,-4,1,5,-3,-11],[-2,-3,-2,-3,-6,-2,-3,-3,-3,-3,-4,-3,-3,-5,-3,-1,-2,-7,-5,-2,-2,-3,-3,-11],[-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,1]];PAM250=[[2,-2,0,0,-2,0,0,1,-1,-1,-2,-1,-1,-3,1,1,1,-6,-3,0,0,0,0,-8],[-2,6,0,-1,-4,1,-1,-3,2,-2,-3,3,0,-4,0,0,-1,2,-4,-2,-1,0,-1,-8],[0,0,2,2,-4,1,1,0,2,-2,-3,1,-2,-3,0,1,0,-4,-2,-2,2,1,0,-8],[0,-1,2,4,-5,2,3,1,1,-2,-4,0,-3,-6,-1,0,0,-7,-4,-2,3,3,-1,-8],[-2,-4,-4,-5,12,-5,-5,-3,-3,-2,-6,-5,-5,-4,-3,0,-2,-8,0,-2,-4,-5,-3,-8],[0,1,1,2,-5,4,2,-1,3,-2,-2,1,-1,-5,0,-1,-1,-5,-4,-2,1,3,-1,-8],[0,-1,1,3,-5,2,4,0,1,-2,-3,0,-2,-5,-1,0,0,-7,-4,-2,3,3,-1,-8],[1,-3,0,1,-3,-1,0,5,-2,-3,-4,-2,-3,-5,0,1,0,-7,-5,-1,0,0,-1,-8],[-1,2,2,1,-3,3,1,-2,6,-2,-2,0,-2,-2,0,-1,-1,-3,0,-2,1,2,-1,-8],[-1,-2,-2,-2,-2,-2,-2,-3,-2,5,2,-2,2,1,-2,-1,0,-5,-1,4,-2,-2,-1,-8],[-2,-3,-3,-4,-6,-2,-3,-4,-2,2,6,-3,4,2,-3,-3,-2,-2,-1,2,-3,-3,-1,-8],[-1,3,1,0,-5,1,0,-2,0,-2,-3,5,0,-5,-1,0,0,-3,-4,-2,1,0,-1,-8],[-1,0,-2,-3,-5,-1,-2,-3,-2,2,4,0,6,0,-2,-2,-1,-4,-2,2,-2,-2,-1,-8],[-3,-4,-3,-6,-4,-5,-5,-5,-2,1,2,-5,0,9,-5,-3,-3,0,7,-1,-4,-5,-2,-8],[1,0,0,-1,-3,0,-1,0,0,-2,-3,-1,-2,-5,6,1,0,-6,-5,-1,-1,0,-1,-8],[1,0,1,0,0,-1,0,1,-1,-1,-3,0,-2,-3,1,2,1,-2,-3,-1,0,0,0,-8],[1,-1,0,0,-2,-1,0,0,-1,0,-2,0,-1,-3,0,1,3,-5,-3,0,0,-1,0,-8],[-6,2,-4,-7,-8,-5,-7,-7,-3,-5,-2,-3,-4,0,-6,-2,-5,17,0,-6,-5,-6,-4,-8],[-3,-4,-2,-4,0,-4,-4,-5,0,-1,-1,-4,-2,7,-5,-3,-3,0,10,-2,-3,-4,-2,-8],[0,-2,-2,-2,-2,-2,-2,-1,-2,4,2,-2,2,-1,-1,-1,0,-6,-2,4,-2,-2,-1,-8],[0,-1,2,3,-4,1,3,0,1,-2,-3,1,-2,-4,-1,0,0,-5,-3,-2,3,2,-1,-8],[0,0,1,3,-5,3,3,0,2,-2,-3,0,-2,-5,0,0,-1,-6,-4,-2,2,3,-1,-8],[0,-1,0,-1,-3,-1,-1,-1,-1,-1,-1,-1,-1,-2,-1,0,0,-4,-2,-1,-1,-1,-1,-8],[-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,1]];SCHNEIDER=[[11.6,-2.7,9.7,-1.7,-2.7,-6.4,-3.9,-5.6,5.1,-5,3.6,-4.2,-6.3,-13,-7.1,-11.5,.4,-6,-1.9,-5.3,-8.5,-11.2,-8.9,-10.8,2.1,0,1.4,.2,-10.2,-13.5,-13,-12.5,-2.6,-8.5,-5,-8.1,-6.3,-9.9,-7.5,-9,-7.1,-10.2,-8.2,-9.2,-8.2,-12.5,-11.1,-11.4,-50,-14.8,-50,-13.8,-7.3,-10.1,-8.4,-9.1,-50,-13,-13.5,-12.4,-10.7,-18.1,-11.8,-17.2],[-2.7,13,-3.3,10.9,-3.5,-.4,-3.3,-1.8,-5.4,4.6,-5.5,3,-10.2,-7.9,-9.9,-9.6,-5,.5,-5.5,-1,-10.3,-8.1,-9.4,-9.6,-8.1,-5,-7.3,-6.3,-13.4,-11.3,-14.4,-12.9,-6.3,.8,-6.4,-1.1,-7.4,-5,-6.2,-6.5,-5.6,-1.6,-4.7,-3,-10.8,-8.7,-11.9,-10,-50,-6.2,-50,-7.5,-6.3,-4.3,-6.2,-5.4,-50,-7,-16.3,-8.2,-13.2,-12.3,-13.1,-13.3],[9.7,-3.3,11.6,-2.8,-4.5,-6.7,-3.1,-6.9,3.3,-5.5,4.8,-5.1,-8.9,-13.2,-5.7,-12.6,-1.5,-6.1,-.6,-6.1,-10,-11.8,-8.6,-11.9,1.2,.5,2.2,.1,-11.8,-14,-11.9,-13.4,-4.9,-9.1,-3.4,-8.9,-8,-10,-7.2,-10,-9.1,-10.2,-7.1,-9.9,-10.1,-13,-10.6,-12.7,-50,-14.9,-50,-14.4,-8.9,-10.8,-8.9,-10.4,-50,-13.1,-11.8,-13,-12.4,-19.4,-11.5,-17.8],[-1.7,10.9,-2.8,12.9,-2.7,-2.2,-2.8,.2,-4.8,2.9,-5.2,5.2,-9.1,-9.5,-9,-7,-4,-1,-5,1,-9,-8.8,-8.9,-7.7,-7,-6.8,-7.1,-4.3,-12.4,-12.9,-13.9,-10,-4.9,-.7,-5.6,1.4,-6,-6.5,-6.2,-4.8,-5.1,-3.2,-5,-1.2,-9.8,-9.9,-11.3,-8.2,-50,-7.6,-50,-5.1,-5.5,-5.8,-5.9,-4.2,-50,-8.3,-15.5,-5.9,-11.6,-14.2,-12,-11.6],[-2.7,-3.5,-4.5,-2.7,11.7,9,10.6,9.6,-3.2,-.7,-5.1,-.4,.7,-4.6,-.4,-3.6,-4.8,-8.9,-6.5,-7.8,-1.4,-4.1,-2.9,-3.3,-8,-9.1,-8,-8.2,-6,-9.3,-7.7,-8.5,-6.4,-10.1,-7.5,-8.6,2.8,-.7,.9,.1,-5.9,-7.3,-6.5,-6.5,-.4,-3.9,-2.6,-3.1,-50,-14.6,-50,-12.6,2.9,.1,1.8,1,-50,-9.2,-13.6,-7.7,-4.8,-12.2,-6.2,-11],[-6.4,-.4,-6.7,-2.2,9,12.3,9.8,9.6,-7.1,2.4,-7.2,.3,-2.9,-1.2,-3,-3.3,-7.6,-6.7,-8.1,-7.9,-4.9,-1.9,-4.5,-3.8,-9.5,-7.8,-9.3,-8.9,-9.4,-7.1,-9,-9,-9.4,-7.5,-9.3,-9.2,-.7,2.6,.2,-.1,-8,-4.6,-7.7,-6.1,-3.6,-1,-4.1,-3.1,-50,-11.6,-50,-11.6,.2,2.3,.4,.5,-50,-6.5,-15.3,-7.8,-8.4,-9.5,-8.3,-11.1],[-3.9,-3.3,-3.1,-2.8,10.6,9.8,12.2,9.8,-4.9,.1,-3.6,-.2,-1.7,-4.1,.9,-3.5,-5.9,-8.9,-5.6,-8.5,-3.9,-3.9,-2.2,-4.5,-7.3,-7.5,-6.4,-8.5,-7.1,-8.2,-6.7,-7.8,-7.9,-9.1,-7.1,-9.4,.9,-.2,2.5,-.3,-6.9,-6.5,-5.5,-6.8,-1.7,-3.4,-1.7,-2.8,-50,-13,-50,-11.5,1.5,.7,2.7,.6,-50,-8.9,-12.1,-7.4,-6.1,-11.5,-5.4,-10.4],[-5.6,-1.8,-6.9,.2,9.6,9.6,9.8,11.6,-6.6,.9,-7.2,2.5,-2.3,-3.4,-2.3,-.6,-6.5,-8.2,-8,-6.3,-3.7,-3.5,-3.9,-1.6,-9.9,-8.9,-9.6,-7,-8.6,-8.9,-8.8,-6.8,-8.6,-8.2,-8.8,-6.8,.3,.1,.2,2.4,-7.4,-6.2,-6.9,-4.4,-2.9,-2.9,-3.5,-.9,-50,-12.2,-50,-10.1,1.2,.6,1.2,2.4,-50,-7.6,-16.1,-5.8,-7.2,-10.8,-7.4,-9],[5.1,-5.4,3.3,-4.8,-3.2,-7.1,-4.9,-6.6,13.3,-2.8,11.2,-1.9,-5.7,-12.5,-7.2,-11.6,-.7,-4.8,-3.1,-4.3,-10,-11.6,-8.8,-11.7,10.5,7.7,9.1,8.5,-9.8,-12.7,-11.7,-11.8,-6.3,-11.4,-8.8,-11,-7.5,-10.3,-8.3,-9.9,-1.9,-6.7,-4.1,-6.4,-7.9,-12.5,-11.4,-11.7,-50,-14,-50,-13.2,-8.5,-10.4,-9.1,-9.6,-50,-9.8,-7.7,-8.8,-10.3,-17.9,-11.8,-16],[-5,4.6,-5.5,2.9,-.7,2.4,.1,.9,-2.8,12.8,-2.6,11,-8.4,-6.3,-8.3,-7.7,-6.1,-2.9,-6.5,-4.2,-8.5,-5.9,-7.5,-7.7,-5.5,-2.4,-5.5,-4.1,-12.9,-10.3,-12.7,-11.3,-7.4,-3.1,-7.4,-4.9,-4.4,-1.8,-3.5,-3.5,-1.6,3,-.8,.9,-8.4,-6.3,-9.6,-7.3,-50,-9,-50,-9.7,-2.3,-.2,-1.2,-1.5,-50,-.7,-13.3,-2,-11.8,-11.9,-12.3,-12.7],[3.6,-5.5,4.8,-5.2,-5.1,-7.2,-3.6,-7.2,11.2,-2.6,13.4,-2.1,-7.7,-12.5,-5.3,-11.9,-2.2,-4.4,-1.9,-4.8,-10.2,-11.5,-8.1,-12,9.3,8.2,10,8,-10.8,-11.9,-10.7,-12.4,-8.2,-11.8,-6.9,-11.5,-8.4,-9.9,-7.1,-10.6,-4.7,-6.8,-1.2,-7,-9.8,-11.6,-9.6,-12.1,-50,-14.1,-50,-12.7,-10,-10.8,-8.8,-10.5,-50,-9.2,-4.2,-9.3,-11,-18.2,-11.1,-16.1],[-4.2,3,-5.1,5.2,-.4,.3,-.2,2.5,-1.9,11,-2.1,13.2,-7.6,-8.5,-8,-5.3,-5.6,-4.5,-6.8,-2.4,-7.8,-7.9,-7.9,-6.2,-5.7,-5.1,-5.4,-2.1,-12.4,-12.3,-13.1,-10.1,-6.6,-4.4,-6.9,-2.6,-3.6,-3.8,-3.7,-2,-1.4,.8,-.9,3,-8.2,-8.1,-9.2,-5.8,-50,-10.1,-50,-7.4,-1.7,-2,-1.5,-.5,-50,-2.1,-12.6,-.4,-11.6,-13.9,-11.4,-11.1],[-6.3,-10.2,-8.9,-9.1,.7,-2.9,-1.7,-2.3,-5.7,-8.4,-7.7,-7.6,13.2,9.6,3.5,9.7,-8.7,-12.4,-10.7,-10.7,-7.8,-10.2,-8.8,-9.6,-9.5,-11.9,-10.9,-10.5,2.3,-.4,-.2,-.3,-9.7,-15.5,-11.4,-13.7,-3,-6.4,-4.1,-5.4,-9.6,-11.9,-10.5,-11.8,6.2,3.3,3.7,3.6,-50,-13.6,-50,-11.9,-5.6,-8.8,-7.2,-8.9,-50,-12.4,-14.1,-11.6,2.8,-6.4,.5,-5.2],[-13,-7.9,-13.2,-9.5,-4.6,-1.2,-4.1,-3.4,-12.5,-6.3,-12.5,-8.5,9.6,12.7,.2,10.5,-12.4,-11.6,-13.2,-12,-12.4,-10.1,-11.6,-12,-15.1,-13.1,-14.3,-13.4,-1.4,1.4,-1.6,-.5,-14.9,-14.3,-15.2,-16.8,-7.7,-4.7,-6.3,-6.6,-14.6,-10.8,-12.8,-13,2.3,6,2.5,3.6,-50,-11.2,-50,-11.9,-10.5,-9.2,-10.5,-10.5,-50,-10.3,-16.2,-11.3,-1.7,-3.7,-2.5,-5.4],[-7.1,-9.9,-5.7,-9,-.4,-3,.9,-2.3,-7.2,-8.3,-5.3,-8,3.5,.2,14.3,1,-7.3,-11.2,-6.9,-9.7,-8.5,-10.2,-7.7,-9.8,-10,-10.4,-8.4,-10.2,1,-.6,1.7,-.5,-11.1,-14.8,-9.7,-14.5,-3.7,-5.8,-3.1,-5.6,-10.4,-11.5,-8.2,-11.1,.6,-1.6,1.6,-1.1,-50,-12.4,-50,-11.5,-5.5,-8,-4.9,-7.2,-50,-12.4,-10.3,-11.6,.7,-6.8,2.4,-6],[-11.5,-9.6,-12.6,-7,-3.6,-3.3,-3.5,-.6,-11.6,-7.7,-11.9,-5.3,9.7,10.5,1,12.6,-12,-12.2,-12.5,-9.7,-11.1,-11.2,-11.9,-9.4,-12.9,-14.3,-14,-11.9,-1,-.4,-1.6,1.2,-13.9,-15.4,-13.7,-12.6,-6.2,-6.7,-6.3,-4.4,-13,-12.2,-13,-10.4,2.9,3.8,2.5,5.8,-50,-12.5,-50,-10.2,-9.6,-9.7,-9.6,-8.3,-50,-11.6,-15.4,-9.4,-1.1,-5.4,-1.6,-3.3],[.4,-5,-1.5,-4,-4.8,-7.6,-5.9,-6.5,-.7,-6.1,-2.2,-5.6,-8.7,-12.4,-7.3,-12,12.8,2.3,10.2,3,0,-3.4,-.7,-3.2,2.5,-.8,.9,.2,-3,-7.2,-5.7,-6.1,-.2,-6.6,-1.8,-6,-5.3,-8.2,-5.7,-7.6,-6.7,-9.6,-7.5,-9.3,-7.1,-10.5,-9.6,-9.4,-50,-8.1,-50,-7.2,-4.3,-6.8,-5.7,-6.3,-50,-9.5,-9.6,-8.9,-6.2,-12.8,-6.8,-11.8],[-6,.5,-6.1,-1,-8.9,-6.7,-8.9,-8.2,-4.8,-2.9,-4.4,-4.5,-12.4,-11.6,-11.2,-12.2,2.3,14.6,1.9,12.9,-5.5,-2.6,-4.1,-4.7,-1.2,3,-1.1,1.6,-8,-4.7,-8.7,-6,-8.2,-4.7,-7.8,-6.7,-10,-8.3,-8.9,-9.9,-10.8,-7.1,-10,-9.2,-11.6,-10.1,-12.3,-11.9,-50,2.2,-50,.9,-7.9,-5.9,-7.4,-6.9,-50,-4.6,-11.6,-5.6,-9.7,-5.9,-9.9,-7.3],[-1.9,-5.5,-.6,-5,-6.5,-8.1,-5.6,-8,-3.1,-6.5,-1.9,-6.8,-10.7,-13.2,-6.9,-12.5,10.2,1.9,11.9,2.1,-2.3,-4.1,-.5,-4.6,-.1,-.9,2.4,-.8,-5.1,-6.9,-4.8,-6.7,-2.3,-7.1,-.8,-7.2,-7.2,-8,-5.6,-8.5,-9.4,-9.7,-7.2,-9.8,-9.2,-11.1,-9.5,-10.7,-50,-8.7,-50,-8.6,-6.1,-7.5,-5.5,-7.7,-50,-10.4,-7.7,-10,-7.3,-13.6,-6.4,-13.3],[-5.3,-1,-6.1,1,-7.8,-7.9,-8.5,-6.3,-4.3,-4.2,-4.8,-2.4,-10.7,-12,-9.7,-9.7,3,12.9,2.1,14.7,-4.9,-3.8,-4,-2.4,-1,.8,-1.3,3.4,-7.6,-5.7,-8.1,-3.5,-6.8,-5.8,-7.2,-4.2,-8.9,-10.2,-8.4,-8.2,-9.9,-8.4,-9.7,-6.4,-11.1,-11.1,-11.8,-10,-50,.4,-50,2.6,-7.2,-7,-7.4,-5.1,-50,-5.7,-9.8,-3.2,-8.4,-7.4,-8.9,-5.9],[-8.5,-10.3,-10,-9,-1.4,-4.9,-3.9,-3.7,-10,-8.5,-10.2,-7.8,-7.8,-12.4,-8.5,-11.1,0,-5.5,-2.3,-4.9,12.6,10,11.1,10.5,-6,-8.3,-6.9,-7.5,-2.2,-7.4,-5.3,-5.9,-8.9,-12.5,-9.4,-11.6,-.7,-3.9,-2.3,-3,-9.1,-9.8,-9.2,-9.5,-5.6,-9,-8,-8.5,-50,-15.3,-50,-14.1,2.3,-1.4,.3,-.5,-50,-13.6,-14.3,-11.5,-5.3,-13.7,-6.1,-12.7],[-11.2,-8.1,-11.8,-8.8,-4.1,-1.9,-3.9,-3.5,-11.6,-5.9,-11.5,-7.9,-10.2,-10.1,-10.2,-11.2,-3.4,-2.6,-4.1,-3.8,10,13.1,10.7,10.6,-8.1,-5.2,-8,-6.7,-6.1,-3.7,-7.5,-5.6,-11.1,-10.3,-10.6,-11.9,-3.2,-1,-2.2,-2.8,-10.5,-8.1,-9.4,-9.5,-8.3,-6.9,-9.4,-8.8,-50,-11.3,-50,-12.8,-.6,2.2,-.3,.1,-50,-10.1,-17.5,-11.1,-8.6,-9.9,-8.6,-11.9],[-8.9,-9.4,-8.6,-8.9,-2.9,-4.5,-2.2,-3.9,-8.8,-7.5,-8.1,-7.9,-8.8,-11.6,-7.7,-11.9,-.7,-4.1,-.5,-4,11.1,10.7,13.2,10.4,-5.7,-5.8,-3.5,-6.1,-3.6,-6.5,-3.3,-5.5,-9.4,-11,-8.7,-11.2,-1.8,-2.7,.7,-3,-9.1,-8.2,-7.3,-9.4,-7.2,-8.2,-7.2,-8.2,-50,-13.2,-50,-13.3,.5,-.9,1.8,-.6,-50,-11.4,-11.1,-10.5,-6.1,-12.9,-5,-11.9],[-10.8,-9.6,-11.9,-7.7,-3.3,-3.8,-4.5,-1.6,-11.7,-7.7,-12,-6.2,-9.6,-12,-9.8,-9.4,-3.2,-4.7,-4.6,-2.4,10.5,10.6,10.4,12.6,-8.2,-7.9,-9,-4.7,-6.1,-6,-7.5,-2.9,-10.9,-12.2,-11.2,-10.9,-2.4,-2.9,-2.7,-.9,-10.4,-9.7,-10.2,-8,-8.4,-9.1,-9.3,-6.5,-50,-13.3,-50,-11,-0,-.4,-.4,2.3,-50,-10.9,-17.2,-8.3,-8.3,-12.7,-7.8,-9.3],[2.1,-8.1,1.2,-7,-8,-9.5,-7.3,-9.9,10.5,-5.5,9.3,-5.7,-9.5,-15.1,-10,-12.9,2.5,-1.2,-.1,-1,-6,-8.1,-5.7,-8.2,13.8,11.3,11.8,12.1,-6,-9.1,-9,-9.5,-8.9,-13.4,-10,-13.1,-9.9,-11.7,-9.8,-12.8,-5.9,-9.4,-6.5,-8.1,-10.7,-14,-13.3,-13.9,-50,-11.9,-50,-9.7,-8.9,-10.8,-9,-11.1,-50,-6.5,-5.3,-6.3,-10.5,-16.2,-10.4,-15.2],[0,-5,.5,-6.8,-9.1,-7.8,-7.5,-8.9,7.7,-2.4,8.2,-5.1,-11.9,-13.1,-10.4,-14.3,-.8,3,-.9,.8,-8.3,-5.2,-5.8,-7.9,11.3,15,11.2,12.8,-9.7,-5.3,-9.2,-7.8,-11.7,-10.6,-10.1,-12.2,-11.7,-8.8,-8.9,-11.8,-9.3,-5,-8,-8.2,-13.6,-11.4,-12.8,-13,-50,-7.2,-50,-8.4,-11,-7.7,-8.7,-10.2,-50,-1.5,-7.1,-4.9,-11.2,-11.6,-11.6,-15],[1.4,-7.3,2.2,-7.1,-8,-9.3,-6.4,-9.6,9.1,-5.5,10,-5.4,-10.9,-14.3,-8.4,-14,.9,-1.1,2.4,-1.3,-6.9,-8,-3.5,-9,11.8,11.2,13.4,11.4,-7.3,-8.8,-6.5,-8.5,-10,-12.5,-7.8,-12.5,-9.6,-11,-7.1,-10.7,-7.9,-8,-4.3,-9.4,-11.4,-12.3,-10.9,-12.9,-50,-11.8,-50,-11.2,-9.4,-9.8,-7.3,-10.5,-50,-6.2,-2.2,-6.7,-9.8,-15.2,-8.5,-14.9],[.2,-6.3,.1,-4.3,-8.2,-8.9,-8.5,-7,8.5,-4.1,8,-2.1,-10.5,-13.4,-10.2,-11.9,.2,1.6,-.8,3.4,-7.5,-6.7,-6.1,-4.7,12.1,12.8,11.4,14.7,-8.7,-7.4,-9.4,-5.3,-9.9,-11.8,-10.5,-10.3,-9.9,-10.1,-9.3,-9.3,-8.1,-7.2,-8,-5.2,-12,-12.1,-12.6,-10.9,-50,-7.9,-50,-5.3,-9.3,-8.8,-8.9,-7,-50,-3.6,-7.1,-1.2,-10.2,-12.7,-9.9,-11],[-10.2,-13.4,-11.8,-12.4,-6,-9.4,-7.1,-8.6,-9.8,-12.9,-10.8,-12.4,2.3,-1.4,1,-1,-3,-8,-5.1,-7.6,-2.2,-6.1,-3.6,-6.1,-6,-9.7,-7.3,-8.7,11.2,7.9,8.9,8.1,-12.1,-17.4,-13.2,-16.8,-6.3,-9.5,-7.5,-8.8,-12.7,-15.2,-13.1,-14.2,0,-3.1,-1.8,-3.1,-50,-10.7,-50,-9.3,-4.6,-8.9,-5.9,-8.3,-50,-12.8,-9.6,-10.6,9.5,-3.2,8.2,-2.8],[-13.5,-11.3,-14,-12.9,-9.3,-7.1,-8.2,-8.9,-12.7,-10.3,-11.9,-12.3,-.4,1.4,-.6,-.4,-7.2,-4.7,-6.9,-5.7,-7.4,-3.7,-6.5,-6,-9.1,-5.3,-8.8,-7.4,7.9,11.9,7.8,9.3,-15.2,-15.1,-14.6,-17.2,-9.7,-7.3,-8.2,-9.2,-15,-12.8,-14.1,-14.9,-2.8,.2,-2.9,-2.3,-50,-7.4,-50,-8.7,-9.4,-7.3,-9.4,-9.4,-50,-8,-11.9,-9.7,6.5,.5,6.4,-1.8],[-13,-14.4,-11.9,-13.9,-7.7,-9,-6.7,-8.8,-11.7,-12.7,-10.7,-13.1,-.2,-1.6,1.7,-1.6,-5.7,-8.7,-4.8,-8.1,-5.3,-7.5,-3.3,-7.5,-9,-9.2,-6.5,-9.4,8.9,7.8,10.1,7.8,-14.3,-17.7,-13,-17.8,-8,-9.4,-6.2,-9.2,-15.1,-14.9,-12.2,-14.9,-1.8,-3.2,-.8,-3.2,-50,-10.8,-50,-9.9,-7.3,-9.6,-6.4,-9.4,-50,-12.3,-8.7,-11.3,7.6,-3.3,8.7,-2.9],[-12.5,-12.9,-13.4,-10,-8.5,-9,-7.8,-6.8,-11.8,-11.3,-12.4,-10.1,-.3,-.5,-.5,1.2,-6.1,-6,-6.7,-3.5,-5.9,-5.6,-5.5,-2.9,-9.5,-7.8,-8.5,-5.3,8.1,9.3,7.8,11.8,-14.4,-15.7,-14.5,-14.6,-8.4,-8.7,-7.9,-7.1,-14.3,-13.8,-13.8,-12.3,-2.4,-2.2,-2.9,-.2,-50,-8.9,-50,-7.1,-8.1,-9.1,-8.7,-6.6,-50,-9.7,-11.4,-8,6.8,-1.8,6.9,.4],[-2.6,-6.3,-4.9,-4.9,-6.4,-9.4,-7.9,-8.6,-6.3,-7.4,-8.2,-6.6,-9.7,-14.9,-11.1,-13.9,-.2,-8.2,-2.3,-6.8,-8.9,-11.1,-9.4,-10.9,-8.9,-11.7,-10,-9.9,-12.1,-15.2,-14.3,-14.4,11.1,2.9,9.2,3.5,-3,-7,-4.3,-6.2,-2.2,-6.6,-3.7,-5.7,-6,-10.4,-8.6,-9.5,-50,-15.5,-50,-13.9,-7.8,-10.5,-8.7,-9.6,-50,-16.5,-17.1,-14.8,-12.1,-18.9,-12.4,-17.4],[-8.5,.8,-9.1,-.7,-10.1,-7.5,-9.1,-8.2,-11.4,-3.1,-11.8,-4.4,-15.5,-14.3,-14.8,-15.4,-6.6,-4.7,-7.1,-5.8,-12.5,-10.3,-11,-12.2,-13.4,-10.6,-12.5,-11.8,-17.4,-15.1,-17.7,-15.7,2.9,12.5,3.1,10.3,-7.7,-5.2,-6.2,-7.3,-5.4,-1.7,-5.4,-3.7,-11.6,-9.1,-13,-10.8,-50,-10.3,-50,-11.2,-9.8,-8.3,-9.1,-9.7,-50,-12.7,-20.6,-13.1,-16,-16.6,-17,-18.4],[-5,-6.4,-3.4,-5.6,-7.5,-9.3,-7.1,-8.8,-8.8,-7.4,-6.9,-6.9,-11.4,-15.2,-9.7,-13.7,-1.8,-7.8,-.8,-7.2,-9.4,-10.6,-8.7,-11.2,-10,-10.1,-7.8,-10.5,-13.2,-14.6,-13,-14.5,9.2,3.1,10.8,3,-4.5,-6.7,-2.7,-6.7,-5,-6.8,-2.5,-6.7,-7.5,-10.4,-7.4,-10.2,-50,-15.5,-50,-14.2,-8.9,-10.2,-8.5,-10,-50,-15.6,-15.3,-15.5,-13,-18.8,-12.6,-18.3],[-8.1,-1.1,-8.9,1.4,-8.6,-9.2,-9.4,-6.8,-11,-4.9,-11.5,-2.6,-13.7,-16.8,-14.5,-12.6,-6,-6.7,-7.2,-4.2,-11.6,-11.9,-11.2,-10.9,-13.1,-12.2,-12.5,-10.3,-16.8,-17.2,-17.8,-14.6,3.5,10.3,3,12.4,-6.9,-7.5,-6.8,-4.9,-5.4,-4.2,-5.4,-1.3,-10.8,-11.5,-12.4,-8.2,-50,-12.5,-50,-8.9,-9.2,-10,-9.4,-7.9,-50,-14.3,-19.9,-11.4,-16.2,-19.2,-15.8,-15.9],[-6.3,-7.4,-8,-6,2.8,-.7,.9,.3,-7.5,-4.4,-8.4,-3.6,-3,-7.7,-3.7,-6.2,-5.3,-10,-7.2,-8.9,-.7,-3.2,-1.8,-2.4,-9.9,-11.7,-9.6,-9.9,-6.3,-9.7,-8,-8.4,-3,-7.7,-4.5,-6.9,11.3,8.2,9.4,9.1,-1,-3.3,-1.8,-2.4,1.5,-2.1,-.4,-1.1,-50,-14.5,-50,-12.9,2.8,-0,1.4,.7,-50,-8.7,-14.1,-7.5,-5.2,-12.5,-6.5,-10.7],[-9.9,-5,-10,-6.5,-.7,2.6,-.2,.1,-10.3,-1.8,-9.9,-3.8,-6.4,-4.7,-5.8,-6.7,-8.2,-8.3,-8,-10.2,-3.9,-1,-2.7,-2.9,-11.7,-8.8,-11,-10.1,-9.5,-7.3,-9.4,-8.7,-7,-5.2,-6.7,-7.5,8.2,11.6,8.8,9.1,-3.7,-.9,-3.1,-3,-2,1.2,-2.3,-1.3,-50,-12.1,-50,-12.6,.1,2.5,.7,.6,-50,-6,-14.8,-7.5,-8.6,-9.4,-8.5,-11.2],[-7.5,-6.2,-7.2,-6.2,.9,.2,2.5,.2,-8.3,-3.5,-7.1,-3.7,-4.1,-6.3,-3.1,-6.3,-5.7,-8.9,-5.6,-8.4,-2.3,-2.2,.7,-2.7,-9.8,-8.9,-7.1,-9.3,-7.5,-8.2,-6.2,-7.9,-4.3,-6.2,-2.7,-6.8,9.4,8.8,12.1,8.8,-2.1,-2,.1,-2.4,0,-1.1,1.3,-.8,-50,-11.9,-50,-12.6,1.2,.7,3.5,.8,-50,-7.1,-12.4,-7.1,-7.1,-10.6,-5,-10.6],[-9,-6.5,-10,-4.8,.1,-.1,-.3,2.4,-9.9,-3.5,-10.6,-2,-5.4,-6.6,-5.6,-4.4,-7.6,-9.9,-8.5,-8.2,-3,-2.8,-3,-.9,-12.8,-11.8,-10.7,-9.3,-8.8,-9.2,-9.2,-7.1,-6.2,-7.3,-6.7,-4.9,9.1,9.1,8.8,11.2,-3.1,-3,-3.3,-1,-1.1,-1.4,-2,1.2,-50,-12.8,-50,-10.9,.8,.5,.7,2.3,-50,-7.5,-16.5,-5.9,-7.8,-11.1,-7.8,-9],[-7.1,-5.6,-9.1,-5.1,-5.9,-8,-6.9,-7.4,-1.9,-1.6,-4.7,-1.4,-9.6,-14.6,-10.4,-13,-6.7,-10.8,-9.4,-9.9,-9.1,-10.5,-9.1,-10.4,-5.9,-9.3,-7.9,-8.1,-12.7,-15,-15.1,-14.3,-2.2,-5.4,-5,-5.4,-1,-3.7,-2.1,-3.1,12.8,9.6,11.1,10.1,-4.8,-9.4,-8.1,-8.6,-50,-18.3,-50,-15.4,-5.9,-7.5,-6.6,-7.1,-50,-9.5,-11.7,-8.4,-12.5,-17.3,-13.2,-15.4],[-10.2,-1.6,-10.2,-3.2,-7.3,-4.6,-6.5,-6.2,-6.7,3,-6.8,.8,-11.9,-10.8,-11.5,-12.2,-9.6,-7.1,-9.7,-8.4,-9.8,-8.1,-8.2,-9.7,-9.4,-5,-8,-7.2,-15.2,-12.8,-14.9,-13.8,-6.6,-1.7,-6.8,-4.2,-3.3,-.9,-2,-3,9.6,12.8,9.7,10.5,-8.5,-5.6,-9.3,-7.8,-50,-12.7,-50,-13.8,-6.8,-5.1,-5.3,-6.5,-50,-4.1,-12.8,-5.8,-14.4,-14.1,-13.6,-14.8],[-8.2,-4.7,-7.1,-5,-6.5,-7.7,-5.5,-6.9,-4.1,-.8,-1.2,-.9,-10.5,-12.8,-8.2,-13,-7.5,-10,-7.2,-9.7,-9.2,-9.4,-7.3,-10.2,-6.5,-8,-4.3,-8,-13.1,-14.1,-12.2,-13.8,-3.7,-5.4,-2.5,-5.4,-1.8,-3.1,.1,-3.3,11.1,9.7,12.9,9.8,-5.5,-8.1,-5.4,-7.8,-50,-16.4,-50,-14.8,-5.9,-7.1,-4.7,-7.2,-50,-8.4,-6.4,-8.1,-12.1,-16.2,-10.3,-15.8],[-9.2,-3,-9.9,-1.2,-6.5,-6.1,-6.8,-4.4,-6.4,.9,-7,3,-11.8,-13,-11.1,-10.4,-9.3,-9.2,-9.8,-6.4,-9.5,-9.5,-9.4,-8,-8.1,-8.2,-9.4,-5.2,-14.2,-14.9,-14.9,-12.3,-5.7,-3.7,-6.7,-1.3,-2.4,-3,-2.4,-1,10.1,10.5,9.8,13.1,-7.2,-8,-8.4,-5,-50,-14.7,-50,-11.4,-6.3,-6.7,-5.8,-5,-50,-6.1,-13.4,-3.6,-13,-16,-13.7,-13.3],[-8.2,-10.8,-10.1,-9.8,-.4,-3.6,-1.7,-2.9,-7.9,-8.4,-9.8,-8.2,6.2,2.3,.6,2.9,-7.1,-11.6,-9.2,-11.1,-5.6,-8.3,-7.2,-8.4,-10.7,-13.6,-11.4,-12,0,-2.8,-1.8,-2.4,-6,-11.6,-7.5,-10.8,1.5,-2,0,-1.1,-4.8,-8.5,-5.5,-7.2,11.9,8.6,10,9,-50,-14.2,-50,-12.8,-4.1,-7.4,-5.7,-6.5,-50,-11,-14.3,-9.9,1.4,-7.9,-.7,-6.8],[-12.5,-8.7,-13,-9.9,-3.9,-1,-3.4,-2.9,-12.5,-6.3,-11.6,-8.1,3.3,6,-1.6,3.8,-10.5,-10.1,-11.1,-11.1,-9,-6.9,-8.2,-9.1,-14,-11.4,-12.3,-12.1,-3.1,.2,-3.2,-2.2,-10.4,-9.1,-10.4,-11.5,-2.1,1.2,-1.1,-1.4,-9.4,-5.6,-8.1,-8,8.6,12.4,8.6,9.5,-50,-10.4,-50,-11.6,-7.2,-5.7,-7.5,-7.4,-50,-8.6,-15.7,-9.7,-3,-3.7,-3.2,-5.9],[-11.1,-11.9,-10.6,-11.3,-2.6,-4.1,-1.7,-3.5,-11.4,-9.6,-9.6,-9.2,3.7,2.5,1.6,2.5,-9.6,-12.3,-9.5,-11.8,-8,-9.4,-7.2,-9.3,-13.3,-12.8,-10.9,-12.6,-1.8,-2.9,-.8,-2.9,-8.6,-13,-7.4,-12.4,-.4,-2.3,1.3,-2,-8.1,-9.3,-5.4,-8.4,10,8.6,11.4,8.9,-50,-13.7,-50,-13.2,-6.1,-8.1,-5.5,-7.5,-50,-11.3,-12.7,-10.1,-1.6,-7.8,-.3,-7.2],[-11.4,-10,-12.7,-8.2,-3.1,-3.1,-2.8,-.9,-11.7,-7.3,-12.1,-5.8,3.6,3.6,-1.1,5.8,-9.4,-11.9,-10.7,-10,-8.5,-8.8,-8.2,-6.5,-13.9,-13,-12.9,-10.9,-3.1,-2.3,-3.2,-.2,-9.5,-10.8,-10.2,-8.2,-1.1,-1.3,-.8,1.2,-8.6,-7.8,-7.8,-5,9,9.5,8.9,12,-50,-13,-50,-10.3,-6.2,-7,-7.1,-5.4,-50,-9.3,-14,-8.2,-2.4,-6.3,-2.4,-3.9],[-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,33.3,-50,30.6,-50,-50,-50,-50,-50,29.2,-50,-50,-50,-50,-50,-50,-50],[-14.8,-6.2,-14.9,-7.6,-14.6,-11.6,-13,-12.2,-14,-9,-14.1,-10.1,-13.6,-11.2,-12.4,-12.5,-8.1,2.2,-8.7,.4,-15.3,-11.3,-13.2,-13.3,-11.9,-7.2,-11.8,-7.9,-10.7,-7.4,-10.8,-8.9,-15.5,-10.3,-15.5,-12.5,-14.5,-12.1,-11.9,-12.8,-18.3,-12.7,-16.4,-14.7,-14.2,-10.4,-13.7,-13,-50,15.1,-50,13.3,-9.9,-5.8,-8.9,-7.6,-50,-1.5,-7.8,-3,-8.1,3.6,-9.4,2],[-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,30.6,-50,35.2,-50,-50,-50,-50,-50,28.5,-50,-50,-50,-50,-50,-50,-50],[-13.8,-7.5,-14.4,-5.1,-12.6,-11.6,-11.5,-10.1,-13.2,-9.7,-12.7,-7.4,-11.9,-11.9,-11.5,-10.2,-7.2,.9,-8.6,2.6,-14.1,-12.8,-13.3,-11,-9.7,-8.4,-11.2,-5.3,-9.3,-8.7,-9.9,-7.1,-13.9,-11.2,-14.2,-8.9,-12.9,-12.6,-12.6,-10.9,-15.4,-13.8,-14.8,-11.4,-12.8,-11.6,-13.2,-10.3,-50,13.3,-50,15.2,-8.6,-7,-8.4,-4.8,-50,-3,-7.1,-.1,-7.3,2.3,-8.7,3.9],[-7.3,-6.3,-8.9,-5.5,2.9,.2,1.5,1.2,-8.5,-2.3,-10,-1.7,-5.6,-10.5,-5.5,-9.6,-4.3,-7.9,-6.1,-7.2,2.3,-.6,.5,-0,-8.9,-11,-9.4,-9.3,-4.6,-9.4,-7.3,-8.1,-7.8,-9.8,-8.9,-9.2,2.8,.1,1.2,.8,-5.9,-6.8,-5.9,-6.3,-4.1,-7.2,-6.1,-6.2,-50,-9.9,-50,-8.6,12.5,9.4,11,9.8,-50,-4.8,-8.7,-3.5,-0,-8.6,-2.1,-7],[-10.1,-4.3,-10.8,-5.8,.1,2.3,.7,.6,-10.4,-.2,-10.8,-2,-8.8,-9.2,-8,-9.7,-6.8,-5.9,-7.5,-7,-1.4,2.2,-.9,-.4,-10.8,-7.7,-9.8,-8.8,-8.9,-7.3,-9.6,-9.1,-10.5,-8.3,-10.2,-10,-0,2.5,.7,.5,-7.5,-5.1,-7.1,-6.7,-7.4,-5.7,-8.1,-7,-50,-5.8,-50,-7,9.4,12.7,10.1,10,-50,-1.5,-11.3,-3.3,-5.4,-4.2,-5.6,-6.8],[-8.4,-6.2,-8.9,-5.9,1.8,.4,2.7,1.2,-9.1,-1.2,-8.8,-1.5,-7.2,-10.5,-4.9,-9.6,-5.7,-7.4,-5.5,-7.4,.3,-.3,1.8,-.4,-9,-8.7,-7.3,-8.9,-5.9,-9.4,-6.4,-8.7,-8.7,-9.1,-8.5,-9.4,1.4,.7,3.5,.7,-6.6,-5.3,-4.7,-5.8,-5.7,-7.5,-5.5,-7.1,-50,-8.9,-50,-8.4,11,10.1,13.2,10.2,-50,-4.2,-6.1,-3.6,-3.5,-8.4,-1.2,-6.8],[-9.1,-5.4,-10.4,-4.2,1,.5,.6,2.4,-9.6,-1.5,-10.5,-.5,-8.9,-10.5,-7.2,-8.3,-6.3,-6.9,-7.7,-5.1,-.5,.1,-.6,2.3,-11.1,-10.2,-10.5,-7,-8.3,-9.4,-9.4,-6.6,-9.6,-9.7,-10,-7.9,.7,.6,.8,2.3,-7.1,-6.5,-7.2,-5,-6.5,-7.4,-7.5,-5.4,-50,-7.6,-50,-4.8,9.8,10,10.2,12.1,-50,-3.1,-11.4,-.7,-4.6,-6.6,-4.9,-3.9],[-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,29.2,-50,28.5,-50,-50,-50,-50,-50,33.3,-50,-50,-50,-50,-50,-50,-50],[-13,-7,-13.1,-8.3,-9.2,-6.5,-8.9,-7.6,-9.8,-.7,-9.2,-2.1,-12.4,-10.3,-12.4,-11.6,-9.5,-4.6,-10.4,-5.7,-13.6,-10.1,-11.4,-10.9,-6.5,-1.5,-6.2,-3.6,-12.8,-8,-12.3,-9.7,-16.5,-12.7,-15.6,-14.3,-8.7,-6,-7.1,-7.5,-9.5,-4.1,-8.4,-6.1,-11,-8.6,-11.3,-9.3,-50,-1.5,-50,-3,-4.8,-1.5,-4.2,-3.1,-50,16.4,-5.1,14.2,-10.1,-4.3,-10,-5.4],[-13.5,-16.3,-11.8,-15.5,-13.6,-15.3,-12.1,-16.1,-7.7,-13.3,-4.2,-12.6,-14.1,-16.2,-10.3,-15.4,-9.6,-11.6,-7.7,-9.8,-14.3,-17.5,-11.1,-17.2,-5.3,-7.1,-2.2,-7.1,-9.6,-11.9,-8.7,-11.4,-17.1,-20.6,-15.3,-19.9,-14.1,-14.8,-12.4,-16.5,-11.7,-12.8,-6.4,-13.4,-14.3,-15.7,-12.7,-14,-50,-7.8,-50,-7.1,-8.7,-11.3,-6.1,-11.4,-50,-5.1,18.6,-4.8,-8.6,-8.1,-4.5,-7.3],[-12.4,-8.2,-13,-5.9,-7.7,-7.8,-7.4,-5.8,-8.8,-2,-9.3,-.4,-11.6,-11.3,-11.6,-9.4,-8.9,-5.6,-10,-3.2,-11.5,-11.1,-10.5,-8.3,-6.3,-4.9,-6.7,-1.2,-10.6,-9.7,-11.3,-8,-14.8,-13.1,-15.5,-11.4,-7.5,-7.5,-7.1,-5.9,-8.4,-5.8,-8.1,-3.6,-9.9,-9.7,-10.1,-8.2,-50,-3,-50,-.1,-3.5,-3.3,-3.6,-.7,-50,14.2,-4.8,16.4,-8.9,-5.8,-8.9,-3.4],[-10.7,-13.2,-12.4,-11.6,-4.8,-8.4,-6.1,-7.2,-10.3,-11.8,-11,-11.6,2.8,-1.7,.7,-1.1,-6.2,-9.7,-7.3,-8.4,-5.3,-8.6,-6.1,-8.3,-10.5,-11.2,-9.8,-10.2,9.5,6.5,7.6,6.8,-12.1,-16,-13,-16.2,-5.2,-8.6,-7.1,-7.8,-12.5,-14.4,-12.1,-13,1.4,-3,-1.6,-2.4,-50,-8.1,-50,-7.3,-0,-5.4,-3.5,-4.6,-50,-10.1,-8.6,-8.9,13.2,-.9,9.7,-.3],[-18.1,-12.3,-19.4,-14.2,-12.2,-9.5,-11.5,-10.8,-17.9,-11.9,-18.2,-13.9,-6.4,-3.7,-6.8,-5.4,-12.8,-5.9,-13.6,-7.4,-13.7,-9.9,-12.9,-12.7,-16.2,-11.6,-15.2,-12.7,-3.2,.5,-3.3,-1.8,-18.9,-16.6,-18.8,-19.2,-12.5,-9.4,-10.6,-11.1,-17.3,-14.1,-16.2,-16,-7.9,-3.7,-7.8,-6.3,-50,3.6,-50,2.3,-8.6,-4.2,-8.4,-6.6,-50,-4.3,-8.1,-5.8,-.9,14.2,-1.8,11.6],[-11.8,-13.1,-11.5,-12,-6.2,-8.3,-5.4,-7.4,-11.8,-12.3,-11.1,-11.4,.5,-2.5,2.4,-1.6,-6.8,-9.9,-6.4,-8.9,-6.1,-8.6,-5,-7.8,-10.4,-11.6,-8.5,-9.9,8.2,6.4,8.7,6.9,-12.4,-17,-12.6,-15.8,-6.5,-8.5,-5,-7.8,-13.2,-13.6,-10.3,-13.7,-.7,-3.2,-.3,-2.4,-50,-9.4,-50,-8.7,-2.1,-5.6,-1.2,-4.9,-50,-10,-4.5,-8.9,9.7,-1.8,11.3,-.9],[-17.2,-13.3,-17.8,-11.6,-11,-11.1,-10.4,-9,-16,-12.7,-16.1,-11.1,-5.2,-5.4,-6,-3.3,-11.8,-7.3,-13.3,-5.9,-12.7,-11.9,-11.9,-9.3,-15.2,-15,-14.9,-11,-2.8,-1.8,-2.9,.4,-17.4,-18.4,-18.3,-15.9,-10.7,-11.2,-10.6,-9,-15.4,-14.8,-15.8,-13.3,-6.8,-5.9,-7.2,-3.9,-50,2,-50,3.9,-7,-6.8,-6.8,-3.9,-50,-5.4,-7.3,-3.4,-.3,11.6,-.9,14.1]];TRANS=[[5,0,0,4],[0,5,4,0],[0,4,5,0],[4,0,0,5]];CONBLO={A:0,R:1,N:2,D:3,C:4,Q:5,E:6,G:7,H:8,I:9,L:10,K:11,M:12,F:13,P:14,S:15,T:16,W:17,Y:18,V:19,B:20,Z:21,X:22,"*":23};CONNUCL={A:0,T:1,C:2,G:3};CONSCHN={AAA:0,AAC:1,AAG:2,AAT:3,ACA:4,ACC:5,ACG:6,ACT:7,AGA:8,AGC:9,AGG:10,AGT:11,ATA:12,ATC:13,ATG:14,ATT:15,CAA:16,CAC:17,CAG:18,CAT:19,CCA:20,CCC:21,CCG:22,CCT:23,CGA:24,CGC:25,CGG:26,CGT:27,CTA:28,CTC:29,CTG:30,CTT:31,GAA:32,GAC:33,GAG:34,GAT:35,GCA:36,GCC:37,GCG:38,GCT:39,GGA:40,GGC:41,GGG:42,GGT:43,GTA:44,GTC:45,GTG:46,GTT:47,TAA:48,TAC:49,TAG:50,TAT:51,TCA:52,TCC:53,TCG:54,TCT:55,TGA:56,TGC:57,TGG:58,TGT:59,TTA:60,TTC:61,TTG:62,TTT:63};fillNeedleman(){for(let t=0;t<=this.len1;t++)this.dpGrid[t][0].value=-t*this.gap,this.dpGrid[t][0].parentI=t-1,this.dpGrid[t][0].parentJ=0;for(let t=1;t<=this.len2;t++)this.dpGrid[0][t].value=-t*this.gap,this.dpGrid[0][t].parentI=0,this.dpGrid[0][t].parentJ=t-1}fillOne(t,e){this.dpGrid[t][e].value=Math.max(this.dpGrid[t-1][e-1].value+this.scores[t-1][e-1],Math.max(this.dpGrid[t-1][e].value-this.gap,this.dpGrid[t][e-1].value-this.gap)),this.dpGrid[t][e].value==this.dpGrid[t-1][e-1].value+this.scores[t-1][e-1]?(this.dpGrid[t][e].parentI=t-1,this.dpGrid[t][e].parentJ=e-1):this.dpGrid[t][e].value==this.dpGrid[t-1][e].value-this.gap?(this.dpGrid[t][e].parentI=t-1,this.dpGrid[t][e].parentJ=e):(this.dpGrid[t][e].parentI=t,this.dpGrid[t][e].parentJ=e-1)}gridFromName(t){switch(t){case"BLOSUM45":this.alignGrid=this.BLOSUM45,this.connections=this.CONBLO,this.step=1;break;case"BLOSUM50":this.alignGrid=this.BLOSUM50,this.connections=this.CONBLO,this.step=1;break;case"BLOSUM62":this.alignGrid=this.BLOSUM62,this.connections=this.CONBLO,this.step=1;break;case"BLOSUM80":this.alignGrid=this.BLOSUM80,this.connections=this.CONBLO,this.step=1;break;case"BLOSUM90":this.alignGrid=this.BLOSUM90,this.connections=this.CONBLO,this.step=1;break;case"PAM30":this.alignGrid=this.PAM30,this.connections=this.CONBLO,this.step=1;break;case"PAM70":this.alignGrid=this.PAM70,this.connections=this.CONBLO,this.step=1;break;case"PAM250":this.alignGrid=this.PAM250,this.connections=this.CONBLO,this.step=1;break;case"NUCLEOTIDES":this.alignGrid=this.NUCLEOTIDES,this.connections=this.CONNUCL,this.step=1;break;case"TRANS":this.alignGrid=this.TRANS,this.connections=this.CONNUCL,this.step=1;break;case"SCHNEIDER":this.alignGrid=this.SCHNEIDER,this.connections=this.CONSCHN,this.step=3}this.fillScores()}constructResult(t,e){let n="",i="",o="";const s=this.dpGrid[t][e].value;for(let t=0;t<this.step;t++)o+="|";for(;t>0||e>0;){this.dpGrid[t][e].parentI==t?(n=o+n,i=this.seq2.substr((e-1)*this.step,this.step)+i):this.dpGrid[t][e].parentJ==e?(i=o+i,n=this.seq1.substr((t-1)*this.step,this.step)+n):(n=t-1>=0?this.seq1.substr((t-1)*this.step,this.step)+n:o+n,i=e-1>=0?this.seq2.substr((e-1)*this.step,this.step)+i:o+i);const r=t;t=this.dpGrid[t][e].parentI,e=this.dpGrid[r][e].parentJ}return new r(n,i,s)}fillScores(){this.scores=[];for(let t=0;t<this.len1;t++){this.scores.push([]);for(let e=0;e<this.len2;e++)this.scores[t].push(this.alignGrid[this.connections[this.seq1.substr(t*this.step,this.step)]][this.connections[this.seq2.substr(e*this.step,this.step)]])}}typeRec(){if(/[ATGC]*/.test(this.seq1)&&/[ATGC]*/.test(this.seq2))return"NUCLEOTIDES";if(/[ARNDCQEGHILKMFPSTWYVBZX*]*/.test(this.seq1)&&/[ARNDCQEGHILKMFPSTWYVBZX*]*/.test(this.seq2))return"BLOSUM62";throw Error("Can't recognize sequence type")}needlemanWunsch(){this.dpGrid=[];for(let t=0;t<this.len1+1;t++){const t=[];for(let e=0;e<this.len2+1;e++)t.push(new i);this.dpGrid.push(t)}this.fillNeedleman();for(let t=1;t<=this.len1;t++)for(let e=1;e<=this.len2;e++)this.fillOne(t,e);return this.constructResult(this.len1,this.len2)}smithWaterman(){this.dpGrid=[];for(let t=0;t<this.len1+1;t++){const t=[];for(let e=0;e<this.len2+1;e++)t.push(new i);this.dpGrid.push(t)}let t=0,e=0,n=0;for(let i=1;i<=this.len1;i++)for(let r=1;r<=this.len2;r++)this.fillOne(i,r),this.dpGrid[i][r].value<=0?(this.dpGrid[i][r].value=0,this.dpGrid[i][r].parentI=0,this.dpGrid[i][r].parentJ=0):0==this.dpGrid[this.dpGrid[i][r].parentI][this.dpGrid[i][r].parentJ].value&&(this.dpGrid[i][r].parentI=0,this.dpGrid[i][r].parentJ=0),this.dpGrid[i][r].value>t&&(t=this.dpGrid[i][r].value,e=i,n=r);return this.constructResult(e,n)}setSequences(t,e){this.seq1=t,this.seq2=e,this.len1=this.seq1.length/this.step,this.len2=this.seq2.length/this.step,this.fillScores()}setGap(t){this.gap=t}setMethod(t=""){"AUTO"==t&&(t=this.typeRec()),this.gridFromName(t)}constructor(t,e,n,i=""){this.setMethod(i),this.setSequences(t,e),this.setGap(n)}}},8115:(t,e,n)=>{"use strict";n.d(e,{BQ:()=>m,a7:()=>u,if:()=>p,nI:()=>d});var i=n(4328),r=n(7389),o=n(6082),s=n(8070),a=n(2003),l=n(1407),c=n(4870);const h="substr_helm";class u{seqHelper;units;separator;inputsDiv;substructureInput;separatorInput;editHelmLink;columnsInput;grid;col;dialog;constructor(t,e){this.seqHelper=e,this.col=t[0],this.createUI()}editHelmLinkAction(){(0,c.Ku)(this.inputsDiv,this.grid.root),r.tools.waitForElementInDom(this.grid.root).then((()=>{setTimeout((()=>{this.grid.cell(h,0).element.children[0].dispatchEvent(new KeyboardEvent("keydown",{key:"Enter"}))}),100)}))}updateInputs(){const t=this.units===a.Hi.HELM?r.divV([this.columnsInput,this.editHelmLink]):this.units===a.Hi.SEPARATOR?r.inputs([this.columnsInput,this.substructureInput,this.separatorInput]):r.inputs([this.columnsInput,this.substructureInput]);(0,c.Ku)(this.inputsDiv,t)}updateNotationDiv(){this.units=this.col.meta.units,this.separator=this.col.getTag(a.gp.separator);const t=this.dialog.root.getElementsByClassName("notation-text")[0];t&&(t.textContent=`Notation: ${this.units}`)}createUI(){const t=i.shell.tv.dataFrame;this.columnsInput=r.input.column("Column",{table:t,value:this.col,onValueChanged:t=>{this.col=t,this.updateNotationDiv(),this.updateInputs()},filter:t=>t.semType===o.SEMTYPE.MACROMOLECULE}),this.substructureInput=r.input.string("Substructure",{value:""}),this.editHelmLink=r.link("Edit helm",(()=>this.editHelmLinkAction()),void 0,{style:{position:"relative",left:"95px"}});const e=o.DataFrame.create(1);e.columns.addNewString(h).init((t=>"")),e.col(h).semType=this.col.semType,e.col(h).meta.units=a.Hi.HELM,this.grid=e.plot.grid(),this.separatorInput=r.input.string("Separator",{value:this.separator}),this.inputsDiv=r.div(),this.units=this.col.meta.units,this.separator=this.col.getTag(a.gp.separator),this.updateInputs(),this.dialog=r.dialog("Substructure Search").add(r.divV([r.divText(`Notation: ${this.units}`,"notation-text"),this.inputsDiv])).onOK((async()=>{let t,n=this.units===a.Hi.HELM?e.get(h,0):this.substructureInput.value;this.units===a.Hi.SEPARATOR&&this.separatorInput.value!==this.separator&&this.separatorInput.value&&(n=n.replaceAll(this.separatorInput.value,this.separator)),t=this.units===a.Hi.HELM?await p(n,this.col,this.seqHelper):d(n,this.col),this.col.dataFrame.filter.and(t)})).show()}}function d(t,e,n){const i=n?function(t,e){const n=`${e}`.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&"),i=t.charAt(0)===e,r=t.charAt(t.length-1)===e,o=t.replace(new RegExp(`^${n}|${n}$`,"g"),"");return i?r?`${n}${o}${n}`:`${n}${o}${n}|${n}${o}$`:r?`^${o}${n}|${n}${o}${n}`:`^${o}${n}|${n}${o}${n}|${n}${o}$`}(t,n):t,r=o.BitSet.create(e.length);for(let n=0;n<e.length;n++){const o=e.get(n);(o.match(i)||o===t)&&r.set(n,!0,!1)}return r}async function p(t,e,n){e.version!==e.temp["last-invalidated-version"]&&await m(e,n,!0);const r=o.Column.string("helm",1).init((e=>t));r.semType=o.SEMTYPE.MACROMOLECULE,r.meta.units=a.Hi.HELM;const s=await(0,l.R)(r,n,!0,e.temp["monomers-dict"]);return(await i.functions.call("Chem:searchSubstructure",{molStringsColumn:e.temp["monomeric-mols"],molString:s.get(0),molBlockFailover:""})).get(0)}async function m(t,e,n){const i=o.TaskBarProgressIndicator.create(`Invalidating molfiles for ${t.name}`);try{await(0,s.cb)(10);const i=new Map,r=await(0,l.R)(t,e,n,i);t.temp["monomeric-mols"]=r,t.temp["monomers-dict"]=i,t.temp["last-invalidated-version"]=t.version}finally{i.close()}}},966:(t,e,n)=>{"use strict";n.d(e,{V:()=>s,l:()=>a});var i=n(4328),r=n(6082),o=n(6766);function s(t,e,n=[],r=[],s=!0){const l=o._package.seqHelper,[c,h]=a(t,e,l,n,r);return s&&!c&&i.shell.warning(h),c}function a(t,e,n,o=[],s=[]){let a=!0,l="";if(t.semType!==r.SEMTYPE.MACROMOLECULE)i.shell.warning(e+" analysis is allowed for Macromolecules semantic type"),a=!1;else{const i=n.getSeqHandler(t),r=i.notation;if(o.length>0&&!o.some((t=>r.toUpperCase()==t.toUpperCase())))l=`${e} + ' analysis is allowed for Macromolecules with notation ${0==o.length?"any notation":`notation${o.length>1?"s":""} ${o.map((t=>`"${t}"`)).join(", ")} `}.`,a=!1;else if(!i.isHelm()){const t=i.alphabet;s.length>0&&!s.some((e=>t.toUpperCase()==e.toUpperCase()))&&(l=`${e} + ' analysis is allowed for Macromolecules with alphabet ${0==s.length?"any alphabet":`alphabet${s.length>1?"s":""} ${s.map((t=>`"${t}"`)).join(", ")}.`}.`,a=!1)}}return[a,l]}},4139:(t,e,n)=>{"use strict";n.d(e,{HX:()=>h,J:()=>a,b9:()=>c,uF:()=>o});var i,r,o,s,a,l=n(8152);!function(t){t.SPLIT_COL="~split",t.ACTIVITY="~activity",t.ACTIVITY_SCALED="activity_scaled",t.ALIGNED_SEQUENCE="~aligned_sequence",t.AMINO_ACID_RESIDUE="AAR",t.POSITION="Pos",t.P_VALUE="pValue",t.MEAN_DIFFERENCE="Mean difference"}(i||(i={})),function(t){t.AAR="AAR",t.POSITION="Pos",t.SELECTION="selection"}(r||(r={})),function(t){t.MONOMER="Monomer",t.MACROMOLECULE_DIFFERENCE="MacromoleculeDifference",t.ACTIVITY="activity",t.ACTIVITY_SCALED="activityScaled"}(o||(o={})),function(t){t.CELL_CHANGING="isCellChanging"}(s||(s={})),function(t){t.SEPARATOR="."}(a||(a={}));const c="3.3.1",h={pepsea:{gapOpen:1.53,gapExtend:0,method:l.ZY[0]},kalign:{gapOpen:-1,gapExtend:-1,terminalGap:-1}}},5433:(t,e,n)=>{"use strict";n.d(e,{C:()=>u});var i=n(6082),r=n(7389),o=n(4328),s=n(1757),a=n.n(s),l=n(2003);let c=null,h=[];function u(t,e){let n=t??o.shell.t.columns.bySemType("Macromolecule");if(!n)throw new Error("No column with Macromolecule semantic type found");let s=e.getSeqHandler(n),u=s.notation;const d=r.divText("Current notation: "+u,{style:{"text-align":"center","font-weight":"bold","font-size":"14px",padding:"5px"}}),p=[l.Hi.FASTA,l.Hi.SEPARATOR,l.Hi.HELM],m=r.input.column("Column",{table:o.shell.t,value:n,filter:t=>t.semType===i.SEMTYPE.MACROMOLECULE,nullable:!1,onValueChanged:t=>(n=t,s=e.getSeqHandler(n),u=s.notation,u===l.Hi.HELM&&(y.value="/"),d.textContent="Current notation: "+u,g=p.filter((t=>t!==u)),v=r.input.choice("Convert to",{value:g[0],items:g,onValueChanged:b}),b(),c?.clear(),void c?.add(r.div([d,m.root,v.root,y.root])))}),f=["-",".","/"];let g=p.filter((t=>t!==u));const y=r.input.choice("Separator",{value:f[0],items:f}),b=()=>{v.value!==l.Hi.SEPARATOR?a()(y.root).hide():a()(y.root).show()};let v=r.input.choice("Convert to",{value:g[0],items:g,onValueChanged:b});b(),v.onChanged.subscribe((()=>{b()})),null==c&&(c=r.dialog("Convert Sequence Notation").add(r.div([d,m.root,v.root,y.root])).onOK((async()=>{const t=v.value,i=t===l.Hi.SEPARATOR?y.value:void 0;await async function(t,e,n,i){const r=e.getSeqHandler(t).convert(n,i);t.dataFrame.columns.add(r);const s=await o.functions.call("Bio:detectMacromolecule",{col:r});return s&&(r.semType=s),await o.data.detectSemanticTypes(t.dataFrame),r}(n,e,t,i)})).show({x:350,y:100}),h.push(c.onClose.subscribe((t=>{h.forEach((t=>{t.unsubscribe()})),h=[],c=null}))))}},536:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r});var i=n(6956);class r{constructor(t){const e=t.split(i.xe).filter((t=>t));e.forEach((t=>this.validateConnectionItem(t))),this.connectionItems=e}connectionItems;validateConnectionItem(t){const e="(PEPTIDE|RNA)",n=new RegExp(`${e}[0-9]+,${e}[0-9]+,[0-9]+:R[0-9]+-[0-9]+:R[0-9]+`,"g");if(!t.match(n))throw new Error(`Cannot parse connection item from ${t}`)}getConnectionData(){const t=[];return this.connectionItems.forEach((e=>{const n=[],i=e.split(",");i[2].split("-").forEach(((t,e)=>{const r=i[e],o=t.split(":"),s={monomerIdx:parseInt(o[0])-1,rGroupId:parseInt(o[1].slice(1))};n.push({polymerId:r,bond:s})})),t.push(n)})),t}}},6956:(t,e,n)=>{"use strict";n.d(e,{mP:()=>o,pk:()=>r,xe:()=>i});const i="|",r="$",o="H"},9099:(t,e,n)=>{"use strict";n.d(e,{f:()=>s});var i=n(536),r=n(6956),o=n(9034);class s{helmString;constructor(t){this.helmString=t;const e=this.helmString.split(r.pk),n=e[0].split(r.xe);this.simplePolymers=n.map((t=>new o.d(t))),this.connectionList=new i.Z(e[1]),this.bondData=this.getBondData(),this.bondedRGroupsMap=this.getBondedRGroupsMap()}bondData;simplePolymers;connectionList;bondedRGroupsMap;getBondedRGroupsMap(){const t=this.simplePolymers.map((t=>t.monomers.length)).reduce(((t,e)=>t+e),0),e=Array.from({length:t},(()=>[]));return this.bondData.forEach((t=>{t.forEach((t=>{const n=t.monomerIdx,i=t.rGroupId;e[n].push(i)}))})),e}toString(){return this.helmString}getPolymerTypeByMonomerIdx(t){return this.getSimplePolymerByMonomerIdx(t).polymerType}getSimplePolymerByMonomerIdx(t){const e=this.getMonomerIdxShifts(),n=Object.values(e).sort(((t,e)=>t-e)).find((e=>t>=e));if(void 0===n)throw new Error(`Cannot find simple polymer for monomer ${t}`);const i=Object.keys(e).find((t=>e[t]===n));return this.simplePolymers.find((t=>t.id===i))}shiftBondMonomerIds(t,e){e.forEach((e=>{e.forEach((e=>{e.monomerIdx+=t}))}))}getMonomerIdxShifts(){const t={};let e=0;return this.simplePolymers.forEach((n=>{t[n.id]=e,e+=n.monomers.length})),t}getBondData(){const t=this.getMonomerIdxShifts(),e=[];return this.simplePolymers.forEach((n=>{const i=n.getBondData(),r=t[n.id];this.shiftBondMonomerIds(r,i),e.push(...i)})),this.connectionList.getConnectionData().forEach((n=>{const i=[];n.forEach((e=>{const n=t[e.polymerId],r=e.bond;r.monomerIdx+=n,i.push(r)})),e.push(i)})),e}}},9034:(t,e,n)=>{"use strict";n.d(e,{d:()=>r});var i=n(8438);class r{simplePolymer;isNucleotideSequence=!1;constructor(t){this.simplePolymer=t,this.polymerType=this.getPolymerType(),this.isNucleotideSequence="RNA"===this.polymerType,this.idx=this.getIdx();const{monomers:e,monomerTypes:n}=this.getMonomerSymbolsAndTypes();this.monomers=e,this.monomerTypes=n}polymerType;monomers;idx;monomerTypes;get id(){return this.polymerType+this.idx.toString()}getPolymerType(){const t=new RegExp("(PEPTIDE|RNA)[0-9]+{"),e=this.simplePolymer.match(t);if(!e)throw new Error(`Unsupported polymer type in ${this.simplePolymer}`);return e[1]}getIdx(){const t=new RegExp(`${this.polymerType}([0-9]+){`),e=this.simplePolymer.match(t);if(!e)throw new Error(`Cannot parse simple polymer id from ${this.simplePolymer}`);return parseInt(e[1])}getMonomerSymbolsAndTypes(){const t=new RegExp(`${this.polymerType}${this.idx}{|}`,"g"),e=this.simplePolymer.replace(t,"").split("."),n=[],r=[];return e.forEach((t=>{if(this.isNucleotideSequence){const e=t.split(/\(|\)/).filter((t=>!!t)).map((t=>(0,i.D)(t)));n.push(...e),e.forEach(((t,e)=>r.push(e%3==1?"Branch":"Backbone")))}else n.push((0,i.D)(t)),r.push("Backbone")})),{monomers:n,monomerTypes:r}}getBondData(){const t=[],e=this.monomerTypes.map(((t,e)=>{if("Backbone"===t)return e})).filter((t=>void 0!==t)),n=this.monomerTypes.map(((t,e)=>{if("Branch"===t)return e})).filter((t=>void 0!==t));for(let n=0;n<e.length-1;n++){const i=e[n],r=e[n+1];t.push([{monomerIdx:i,rGroupId:2},{monomerIdx:r,rGroupId:1}])}for(let e=0;e<n.length;e++){const i=n[e],r=i-1;t.push([{monomerIdx:r,rGroupId:3},{monomerIdx:i,rGroupId:1}])}return t}}},8604:(t,e,n)=>{"use strict";n.d(e,{Es:()=>r,G3:()=>s,gt:()=>o,so:()=>i});const i="System:AppData/Bio/monomer-libraries/",r="System:AppData/Bio/monomer-sets/",o="System:AppData/Bio/tests/libraries/HELMmonomerSchema.json",s={explicit:["HELMCoreLibrary.json","polytool-lib.json"],exclude:[],duplicateMonomerPreferences:{}}},1619:(t,e,n)=>{"use strict";n.d(e,{D:()=>_});var i=n(4328),r=n(6082),o=n(7389),s=n(8070),a=n(2003),l=n(608),c=n(8152),h=n(966),u=n(4139),d=n(5072),p=n.n(d),m=n(7825),f=n.n(m),g=n(7659),y=n.n(g),b=n(5056),v=n.n(b),w=n(540),C=n.n(w),A=n(1113),S=n.n(A),x=n(6369),E={};E.styleTagTransform=S(),E.setAttributes=v(),E.insert=y().bind(null,"head"),E.domAPI=f(),E.insertStyleElement=C(),p()(x.A,E),x.A&&x.A.locals&&x.A.locals;var M=n(6766);async function _(t,e){return new Promise((async(n,a)=>{t.clustersCol??=null,t.pepsea??={},t.pepsea.method??=u.HX.pepsea.method,t.pepsea.gapOpen??=u.HX.pepsea.gapOpen,t.pepsea.gapExtend??=u.HX.pepsea.gapExtend;const h=t.col?.dataFrame??i.shell.t,d=t.col??h.columns.bySemType(r.SEMTYPE.MACROMOLECULE);if(null==d){const t="Multiple Sequence Alignment analysis requires a dataset with a macromolecule column.";return i.shell.warning(t),void a(new l.Ap(o.divText(t)))}const p=o.input.choice("Method",{value:t.pepsea.method,items:c.ZY});p.setTooltip("Alignment method");const m=o.input.float("Terminal gap",{value:t?.kalign?.terminalGap});m.setTooltip("Penalty for opening a gap at the beginning or end of the sequence");const f=o.p(`Kalign version: ${u.b9}`,"kalign-version"),g=o.input.float("Gap open",{value:t.pepsea.gapOpen});g.setTooltip("Gap opening penalty at group-to-group alignment");const y=o.input.float("Gap extend",{value:t.pepsea.gapExtend});y.setTooltip("Gap extension penalty to skip the alignment");const b=o.inputs([g,y,m]),v=o.button("Alignment parameters",(()=>{b.hidden=!b.hidden,[g,y,m].forEach((t=>{t.root.style.removeProperty("max-width"),t.captionLabel.style.removeProperty("max-width")}))}),"Adjust alignment parameters such as penalties for opening and extending gaps");v.classList.add("msa-params-button"),b.hidden=!0,v.prepend(o.icons.settings((()=>null)));const w=[p.root.style],C=[m.root.style,f.style];let A,S=d;const x=o.input.column("Sequence",{table:h,value:d,onValueChanged:async t=>{if(!t||t.semType!==r.SEMTYPE.MACROMOLECULE)return _.disabled=!0,await(0,s.cb)(0),void(x.value=S);S=t,_.disabled=!1,A=await T(x.value,h,e,w,C,p,E,g,y,m)},filter:t=>t.semType===r.SEMTYPE.MACROMOLECULE});x.setTooltip("Sequences column to use for alignment");const E=o.input.column("Clusters",{table:h,value:t.clustersCol});E.nullable=!0;const M=o.dialog("MSA").add(x).add(E).add(p).add(b).add(v).add(f).onOK((async()=>{await I(x,h,A,n,a)})),_=M.getButton("OK");if(x.fireChanged(),t.col)return A=await T(t.col,h,e,w,C,p,E,g,y,m),void await I(x,h,A,n,a);M.show()}))}async function I(t,e,n,o,s){let a=null;const l=r.TaskBarProgressIndicator.create("Analyze for MSA ...");try{if(t.fireChanged(),t.value.semType!==r.SEMTYPE.MACROMOLECULE)throw new Error("Chosen column has to be of Macromolecule semantic type");if(void 0===n)throw new Error("Invalid column format");if(a=await n(),null==a)return s("PepSeA container has not started");e.columns.add(a),await i.data.detectSemanticTypes(e),o(a)}catch(t){s(t)}finally{l.close()}}async function T(t,e,n,o,s,d,p,m,f,g){try{if(t.semType!==r.SEMTYPE.MACROMOLECULE)return;const i=e.columns.getUnusedName(`msa(${t.name})`);if((0,h.l)(t,t.name,n,[a.Hi.FASTA,a.Hi.SEPARATOR],[a.YI.DNA,a.YI.RNA,a.YI.PT])[0]){L(o,s,"kalign"),m.value=null,f.value=null,g.value=null;const e=n.getSeqHandler(t),r=e.isFasta()?t:e.convert(a.Hi.FASTA);return async()=>await(0,l.eE)(r,!1,i,p.value)}if((0,h.l)(t,t.name,n,[a.Hi.HELM],[])[0])return L(o,s,"pepsea"),m.value??=u.HX.pepsea.gapOpen,f.value??=u.HX.pepsea.gapExtend,async()=>(0,c.GD)(t,i,d.value,m.value,f.value,p.value);if((0,h.l)(t,t.name,n,[a.Hi.SEPARATOR],[a.YI.UN])[0]){const e=n.getSeqHandler(t).convert(a.Hi.HELM);return L(o,s,"pepsea"),m.value??=u.HX.pepsea.gapOpen,f.value??=u.HX.pepsea.gapExtend,async()=>(0,c.GD)(e,i,d.value,m.value,f.value,p.value)}return m.value=null,f.value=null,g.value=null,void L(o,s,"kalign")}catch(t){const e=t instanceof Error?t.message:t.toString();i.shell.error(e),M._package.logger.error(e)}}function L(t,e,n){if("kalign"===n){for(const e of t)e.display="none";for(const t of e)t.removeProperty("display")}else{for(const t of e)t.display="none";for(const e of t)e.removeProperty("display")}}},608:(t,e,n)=>{"use strict";n.d(e,{Ap:()=>G,aZ:()=>D,eE:()=>H});var i=n(7389),r=n(6082),o=n(1991),s=n.n(o),a=n(3516),l=n(2003);const c=Symbol("Comlink.proxy"),h=Symbol("Comlink.endpoint"),u=Symbol("Comlink.releaseProxy"),d=Symbol("Comlink.thrown"),p=t=>"object"==typeof t&&null!==t||"function"==typeof t,m=new Map([["proxy",{canHandle:t=>p(t)&&t[c],serialize(t){const{port1:e,port2:n}=new MessageChannel;return f(t,e),[n,[n]]},deserialize:t=>(t.start(),y(t))}],["throw",{canHandle:t=>p(t)&&d in t,serialize({value:t}){let e;return e=t instanceof Error?{isError:!0,value:{message:t.message,name:t.name,stack:t.stack}}:{isError:!1,value:t},[e,[]]},deserialize(t){throw t.isError?Object.assign(new Error(t.value.message),t.value):t.value}}]]);function f(t,e=self){e.addEventListener("message",(function n(i){if(!i||!i.data)return;const{id:r,type:o,path:s}=Object.assign({path:[]},i.data),a=(i.data.argumentList||[]).map(x);let l;try{const e=s.slice(0,-1).reduce(((t,e)=>t[e]),t),n=s.reduce(((t,e)=>t[e]),t);switch(o){case"GET":l=n;break;case"SET":e[s.slice(-1)[0]]=x(i.data.value),l=!0;break;case"APPLY":l=n.apply(e,a);break;case"CONSTRUCT":l=function(t){return Object.assign(t,{[c]:!0})}(new n(...a));break;case"ENDPOINT":{const{port1:e,port2:n}=new MessageChannel;f(t,n),l=function(t,e){return A.set(t,e),t}(e,[e])}break;case"RELEASE":l=void 0;break;default:return}}catch(t){l={value:t,[d]:0}}Promise.resolve(l).catch((t=>({value:t,[d]:0}))).then((t=>{const[i,s]=S(t);e.postMessage(Object.assign(Object.assign({},i),{id:r}),s),"RELEASE"===o&&(e.removeEventListener("message",n),g(e))}))})),e.start&&e.start()}function g(t){(function(t){return"MessagePort"===t.constructor.name})(t)&&t.close()}function y(t,e){return v(t,[],e)}function b(t){if(t)throw new Error("Proxy has been released and is not useable")}function v(t,e=[],n=function(){}){let i=!1;const r=new Proxy(n,{get(n,o){if(b(i),o===u)return()=>E(t,{type:"RELEASE",path:e.map((t=>t.toString()))}).then((()=>{g(t),i=!0}));if("then"===o){if(0===e.length)return{then:()=>r};const n=E(t,{type:"GET",path:e.map((t=>t.toString()))}).then(x);return n.then.bind(n)}return v(t,[...e,o])},set(n,r,o){b(i);const[s,a]=S(o);return E(t,{type:"SET",path:[...e,r].map((t=>t.toString())),value:s},a).then(x)},apply(n,r,o){b(i);const s=e[e.length-1];if(s===h)return E(t,{type:"ENDPOINT"}).then(x);if("bind"===s)return v(t,e.slice(0,-1));const[a,l]=C(o);return E(t,{type:"APPLY",path:e.map((t=>t.toString())),argumentList:a},l).then(x)},construct(n,r){b(i);const[o,s]=C(r);return E(t,{type:"CONSTRUCT",path:e.map((t=>t.toString())),argumentList:o},s).then(x)}});return r}function w(t){return Array.prototype.concat.apply([],t)}function C(t){const e=t.map(S);return[e.map((t=>t[0])),w(e.map((t=>t[1])))]}const A=new WeakMap;function S(t){for(const[e,n]of m)if(n.canHandle(t)){const[i,r]=n.serialize(t);return[{type:"HANDLER",name:e,value:i},r]}return[{type:"RAW",value:t},A.get(t)||[]]}function x(t){switch(t.type){case"HANDLER":return m.get(t.name).deserialize(t.value);case"RAW":return t.value}}function E(t,e,n){return new Promise((i=>{const r=new Array(4).fill(0).map((()=>Math.floor(Math.random()*Number.MAX_SAFE_INTEGER).toString(16))).join("-");t.addEventListener("message",(function e(n){!n.data||!n.data.id||n.data.id!==r||(t.removeEventListener("message",e),i(n.data))})),t.start&&t.start(),t.postMessage(Object.assign({id:r},e),n)}))}const M="KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2NvbnN0ICQ9U3ltYm9sKCJDb21saW5rLnByb3h5IiksQT1TeW1ib2woIkNvbWxpbmsuZW5kcG9pbnQiKSxSPVN5bWJvbCgiQ29tbGluay5yZWxlYXNlUHJveHkiKSx5PVN5bWJvbCgiQ29tbGluay50aHJvd24iKSxfPWU9PnR5cGVvZiBlPT0ib2JqZWN0IiYmZSE9PW51bGx8fHR5cGVvZiBlPT0iZnVuY3Rpb24iLEw9e2NhbkhhbmRsZTplPT5fKGUpJiZlWyRdLHNlcmlhbGl6ZShlKXtjb25zdHtwb3J0MTpyLHBvcnQyOml9PW5ldyBNZXNzYWdlQ2hhbm5lbDtyZXR1cm4gdyhlLHIpLFtpLFtpXV19LGRlc2VyaWFsaXplKGUpe3JldHVybiBlLnN0YXJ0KCksQyhlKX19LE89e2NhbkhhbmRsZTplPT5fKGUpJiZ5IGluIGUsc2VyaWFsaXplKHt2YWx1ZTplfSl7bGV0IHI7cmV0dXJuIGUgaW5zdGFuY2VvZiBFcnJvcj9yPXtpc0Vycm9yOiEwLHZhbHVlOnttZXNzYWdlOmUubWVzc2FnZSxuYW1lOmUubmFtZSxzdGFjazplLnN0YWNrfX06cj17aXNFcnJvcjohMSx2YWx1ZTplfSxbcixbXV19LGRlc2VyaWFsaXplKGUpe3Rocm93IGUuaXNFcnJvcj9PYmplY3QuYXNzaWduKG5ldyBFcnJvcihlLnZhbHVlLm1lc3NhZ2UpLGUudmFsdWUpOmUudmFsdWV9fSxFPW5ldyBNYXAoW1sicHJveHkiLExdLFsidGhyb3ciLE9dXSk7ZnVuY3Rpb24gdyhlLHI9c2VsZil7ci5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiBpKHMpe2lmKCFzfHwhcy5kYXRhKXJldHVybjtjb25zdHtpZDpvLHR5cGU6YSxwYXRoOm59PU9iamVjdC5hc3NpZ24oe3BhdGg6W119LHMuZGF0YSksYz0ocy5kYXRhLmFyZ3VtZW50TGlzdHx8W10pLm1hcChtKTtsZXQgbDt0cnl7Y29uc3QgdT1uLnNsaWNlKDAsLTEpLnJlZHVjZSgoZCxwKT0+ZFtwXSxlKSxmPW4ucmVkdWNlKChkLHApPT5kW3BdLGUpO3N3aXRjaChhKXtjYXNlIkdFVCI6bD1mO2JyZWFrO2Nhc2UiU0VUIjp1W24uc2xpY2UoLTEpWzBdXT1tKHMuZGF0YS52YWx1ZSksbD0hMDticmVhaztjYXNlIkFQUExZIjpsPWYuYXBwbHkodSxjKTticmVhaztjYXNlIkNPTlNUUlVDVCI6e2NvbnN0IGQ9bmV3IGYoLi4uYyk7bD16KGQpfWJyZWFrO2Nhc2UiRU5EUE9JTlQiOntjb25zdHtwb3J0MTpkLHBvcnQyOnB9PW5ldyBNZXNzYWdlQ2hhbm5lbDt3KGUscCksbD1OKGQsW2RdKX1icmVhaztjYXNlIlJFTEVBU0UiOmw9dm9pZCAwO2JyZWFrO2RlZmF1bHQ6cmV0dXJufX1jYXRjaCh1KXtsPXt2YWx1ZTp1LFt5XTowfX1Qcm9taXNlLnJlc29sdmUobCkuY2F0Y2godT0+KHt2YWx1ZTp1LFt5XTowfSkpLnRoZW4odT0+e2NvbnN0W2YsZF09Uyh1KTtyLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxmKSx7aWQ6b30pLGQpLGE9PT0iUkVMRUFTRSImJihyLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGkpLE0ocikpfSl9KSxyLnN0YXJ0JiZyLnN0YXJ0KCl9ZnVuY3Rpb24gVChlKXtyZXR1cm4gZS5jb25zdHJ1Y3Rvci5uYW1lPT09Ik1lc3NhZ2VQb3J0In1mdW5jdGlvbiBNKGUpe1QoZSkmJmUuY2xvc2UoKX1mdW5jdGlvbiBDKGUscil7cmV0dXJuIGIoZSxbXSxyKX1mdW5jdGlvbiBoKGUpe2lmKGUpdGhyb3cgbmV3IEVycm9yKCJQcm94eSBoYXMgYmVlbiByZWxlYXNlZCBhbmQgaXMgbm90IHVzZWFibGUiKX1mdW5jdGlvbiBiKGUscj1bXSxpPWZ1bmN0aW9uKCl7fSl7bGV0IHM9ITE7Y29uc3Qgbz1uZXcgUHJveHkoaSx7Z2V0KGEsbil7aWYoaChzKSxuPT09UilyZXR1cm4oKT0+ZyhlLHt0eXBlOiJSRUxFQVNFIixwYXRoOnIubWFwKGM9PmMudG9TdHJpbmcoKSl9KS50aGVuKCgpPT57TShlKSxzPSEwfSk7aWYobj09PSJ0aGVuIil7aWYoci5sZW5ndGg9PT0wKXJldHVybnt0aGVuOigpPT5vfTtjb25zdCBjPWcoZSx7dHlwZToiR0VUIixwYXRoOnIubWFwKGw9PmwudG9TdHJpbmcoKSl9KS50aGVuKG0pO3JldHVybiBjLnRoZW4uYmluZChjKX1yZXR1cm4gYihlLFsuLi5yLG5dKX0sc2V0KGEsbixjKXtoKHMpO2NvbnN0W2wsdV09UyhjKTtyZXR1cm4gZyhlLHt0eXBlOiJTRVQiLHBhdGg6Wy4uLnIsbl0ubWFwKGY9PmYudG9TdHJpbmcoKSksdmFsdWU6bH0sdSkudGhlbihtKX0sYXBwbHkoYSxuLGMpe2gocyk7Y29uc3QgbD1yW3IubGVuZ3RoLTFdO2lmKGw9PT1BKXJldHVybiBnKGUse3R5cGU6IkVORFBPSU5UIn0pLnRoZW4obSk7aWYobD09PSJiaW5kIilyZXR1cm4gYihlLHIuc2xpY2UoMCwtMSkpO2NvbnN0W3UsZl09RihjKTtyZXR1cm4gZyhlLHt0eXBlOiJBUFBMWSIscGF0aDpyLm1hcChkPT5kLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDp1fSxmKS50aGVuKG0pfSxjb25zdHJ1Y3QoYSxuKXtoKHMpO2NvbnN0W2MsbF09RihuKTtyZXR1cm4gZyhlLHt0eXBlOiJDT05TVFJVQ1QiLHBhdGg6ci5tYXAodT0+dS50b1N0cmluZygpKSxhcmd1bWVudExpc3Q6Y30sbCkudGhlbihtKX19KTtyZXR1cm4gb31mdW5jdGlvbiBEKGUpe3JldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLGUpfWZ1bmN0aW9uIEYoZSl7Y29uc3Qgcj1lLm1hcChTKTtyZXR1cm5bci5tYXAoaT0+aVswXSksRChyLm1hcChpPT5pWzFdKSldfWNvbnN0IFA9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gTihlLHIpe3JldHVybiBQLnNldChlLHIpLGV9ZnVuY3Rpb24geihlKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihlLHtbJF06ITB9KX1mdW5jdGlvbiBTKGUpe2Zvcihjb25zdFtyLGldb2YgRSlpZihpLmNhbkhhbmRsZShlKSl7Y29uc3RbcyxvXT1pLnNlcmlhbGl6ZShlKTtyZXR1cm5be3R5cGU6IkhBTkRMRVIiLG5hbWU6cix2YWx1ZTpzfSxvXX1yZXR1cm5be3R5cGU6IlJBVyIsdmFsdWU6ZX0sUC5nZXQoZSl8fFtdXX1mdW5jdGlvbiBtKGUpe3N3aXRjaChlLnR5cGUpe2Nhc2UiSEFORExFUiI6cmV0dXJuIEUuZ2V0KGUubmFtZSkuZGVzZXJpYWxpemUoZS52YWx1ZSk7Y2FzZSJSQVciOnJldHVybiBlLnZhbHVlfX1mdW5jdGlvbiBnKGUscixpKXtyZXR1cm4gbmV3IFByb21pc2Uocz0+e2NvbnN0IG89VSgpO2UuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gYShuKXshbi5kYXRhfHwhbi5kYXRhLmlkfHxuLmRhdGEuaWQhPT1vfHwoZS5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixhKSxzKG4uZGF0YSkpfSksZS5zdGFydCYmZS5zdGFydCgpLGUucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbih7aWQ6b30sciksaSl9KX1mdW5jdGlvbiBVKCl7cmV0dXJuIG5ldyBBcnJheSg0KS5maWxsKDApLm1hcCgoKT0+TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKk51bWJlci5NQVhfU0FGRV9JTlRFR0VSKS50b1N0cmluZygxNikpLmpvaW4oIi0iKX1jb25zdCBXPWFzeW5jKCk9PldlYkFzc2VtYmx5LnZhbGlkYXRlKG5ldyBVaW50OEFycmF5KFswLDk3LDExNSwxMDksMSwwLDAsMCwxLDUsMSw5NiwwLDEsMTIzLDMsMiwxLDAsMTAsMTAsMSw4LDAsNjUsMCwyNTMsMTUsMjUzLDk4LDExXSkpLGs9ImVhZ2VyIix4PSJsYXp5IixqPXtzc3c6WyJzaW1kIl0sbWluaW1hcDI6WyJzaW1kIl19LHQ9e3Rvb2xzOltdLGNvbmZpZzp7fSxmaWxlczpbXSxiYXNlOnt9LGZzOnt9LGFzeW5jIGluaXQoKXtpZih0LnRvb2xzLmxlbmd0aD09PTApdGhyb3ciRXhwZWN0aW5nIGF0IGxlYXN0IDEgdG9vbC4iO2lmKG5ldyBTZXQodC50b29scy5tYXAocj0+YCR7ci50b29sfS8ke3IucHJvZ3JhbXx8ci50b29sfWApKS5zaXplIT09dC50b29scy5sZW5ndGgpdGhyb3ciRm91bmQgZHVwbGljYXRlIHRvb2xzOyBjYW4gb25seSBoYXZlIGVhY2ggdG9vbC9wcm9ncmFtIGNvbWJpbmF0aW9uIGF0IG1vc3Qgb25jZS4iO2lmKHQuYmFzZT10LnRvb2xzLmZpbmQocj0+ci5yZWluaXQhPT0hMCksIXQuYmFzZSl0aHJvdyJDb3VsZCBub3QgZmluZCBhIHRvb2wgd2l0aCBgcmVpbml0OiBmYWxzZWAgdG8gdXNlIGFzIHRoZSBiYXNlIG1vZHVsZS4gVG8gZml4IHRoaXMgaXNzdWUsIGluY2x1ZGUgdGhlIHRvb2wgYGJhc2UvMS4wLjBgIHdoZW4gaW5pdGlhbGl6aW5nIEFpb2xpLiI7cmV0dXJuIHQuYmFzZS5pc0Jhc2VNb2R1bGU9ITAsYXdhaXQgdGhpcy5fc2V0dXAodC5iYXNlKSxhd2FpdCB0aGlzLl9pbml0TW9kdWxlcygpLHQuX2xvZygiUmVhZHkiKSwhMH0sYXN5bmMgX2luaXRNb2R1bGVzKCl7YXdhaXQgUHJvbWlzZS5hbGwodC50b29scy5tYXAodGhpcy5fc2V0dXApKSxhd2FpdCB0aGlzLl9zZXR1cEZTKCl9LG1vdW50KGU9W10pe2NvbnN0IHI9YCR7dC5jb25maWcuZGlyU2hhcmVkfSR7dC5jb25maWcuZGlyRGF0YX1gLGk9YCR7dC5jb25maWcuZGlyU2hhcmVkfSR7dC5jb25maWcuZGlyTW91bnRlZH1gO2xldCBzPVtdLG89W10sYT1bXTshQXJyYXkuaXNBcnJheShlKSYmIShlIGluc3RhbmNlb2YgRmlsZUxpc3QpJiYoZT1bZV0pLHQuX2xvZyhgTW91bnRpbmcgJHtlLmxlbmd0aH0gZmlsZXNgKTtmb3IobGV0IG4gb2YgZSl7aWYobiBpbnN0YW5jZW9mIEZpbGV8fChuPT1udWxsP3ZvaWQgMDpuLmRhdGEpaW5zdGFuY2VvZiBCbG9iJiZuLm5hbWV8fHR5cGVvZihuPT1udWxsP3ZvaWQgMDpuLmRhdGEpPT0ic3RyaW5nIiYmbi5uYW1lKXR5cGVvZihuPT1udWxsP3ZvaWQgMDpuLmRhdGEpPT0ic3RyaW5nIiYmKG4uZGF0YT1uZXcgQmxvYihbbi5kYXRhXSx7dHlwZToidGV4dC9wbGFpbiJ9KSkscy5wdXNoKG4pO2Vsc2UgaWYobi5uYW1lJiZuLnVybClvLnB1c2gobik7ZWxzZSBpZih0eXBlb2Ygbj09InN0cmluZyImJm4uc3RhcnRzV2l0aCgiaHR0cCIpKW49e3VybDpuLG5hbWU6bi5zcGxpdCgiLy8iKS5wb3AoKS5yZXBsYWNlKC9cLy9nLCItIil9LG8ucHVzaChuKTtlbHNlIHRocm93J0Nhbm5vdCBtb3VudCBmaWxlKHMpIHNwZWNpZmllZC4gTXVzdCBiZSBhIEZpbGUsIEJsb2IsIGEgVVJMIHN0cmluZywgb3IgeyBuYW1lOiAiZmlsZS50eHQiLCBkYXRhOiAic3RyaW5nIiB9Lic7YS5wdXNoKG4ubmFtZSl9dHJ5e3QuZnMudW5tb3VudChpKX1jYXRjaHt9Zm9yKGxldCBuIG9mIG8pdC5mcy5jcmVhdGVMYXp5RmlsZShyLG4ubmFtZSxuLnVybCwhMCwhMCk7cmV0dXJuIHQuZmlsZXM9dC5maWxlcy5jb25jYXQocyksdC5iYXNlLm1vZHVsZS5GUy5tb3VudCh0LmJhc2UubW9kdWxlLldPUktFUkZTLHtmaWxlczp0LmZpbGVzLmZpbHRlcihuPT5uIGluc3RhbmNlb2YgRmlsZSksYmxvYnM6dC5maWxlcy5maWx0ZXIobj0+KG49PW51bGw/dm9pZCAwOm4uZGF0YSlpbnN0YW5jZW9mIEJsb2IpfSxpKSxzLm1hcChuPT57Y29uc3QgYz1gJHtpfS8ke24ubmFtZX1gLGw9YCR7cn0vJHtuLm5hbWV9YDt0cnl7dC5mcy51bmxpbmsobCl9Y2F0Y2h7fXQuX2xvZyhgQ3JlYXRpbmcgc3ltbGluazogJHtsfSAtLT4gJHtjfWApLHQuZnMuc3ltbGluayhjLGwpfSksYS5tYXAobj0+YCR7cn0vJHtufWApfSxhc3luYyBleGVjKGUscj1udWxsKXtpZih0Ll9sb2coYEV4ZWN1dGluZyAlYyR7ZX0lYyBhcmdzPSR7cn1gLCJjb2xvcjpkYXJrYmx1ZTsgZm9udC13ZWlnaHQ6Ym9sZCIsIiIpLCFlKXRocm93IkV4cGVjdGluZyBhIGNvbW1hbmQiO2xldCBpPWU7cj09bnVsbCYmKHI9ZS5zcGxpdCgiICIpLGk9ci5zaGlmdCgpKTtjb25zdCBzPXQudG9vbHMuZmluZChhPT57dmFyIGM7bGV0IG49aTtyZXR1cm4oKGM9YT09bnVsbD92b2lkIDA6YS5mZWF0dXJlcyk9PW51bGw/dm9pZCAwOmMuc2ltZCk9PT0hMCYmKG49YCR7bn0tc2ltZGApLGEucHJvZ3JhbT09bn0pO2lmKHM9PW51bGwpdGhyb3dgUHJvZ3JhbSAke2l9IG5vdCBmb3VuZC5gO3Muc3Rkb3V0PSIiLHMuc3RkZXJyPSIiLHMubG9hZGluZz09eCYmKHMubG9hZGluZz1rLGF3YWl0IHRoaXMuX2luaXRNb2R1bGVzKCkpO3RyeXtzLm1vZHVsZS5jYWxsTWFpbihyKX1jYXRjaChhKXtjb25zb2xlLmVycm9yKGEpfXRyeXtzLm1vZHVsZS5GUy5jbG9zZShzLm1vZHVsZS5GUy5zdHJlYW1zWzFdKSxzLm1vZHVsZS5GUy5jbG9zZShzLm1vZHVsZS5GUy5zdHJlYW1zWzJdKX1jYXRjaHt9cy5tb2R1bGUuRlMuc3RyZWFtc1sxXT1zLm1vZHVsZS5GUy5vcGVuKCIvZGV2L3N0ZG91dCIsInciKSxzLm1vZHVsZS5GUy5zdHJlYW1zWzJdPXMubW9kdWxlLkZTLm9wZW4oIi9kZXYvc3RkZXJyIiwidyIpO2xldCBvPXtzdGRvdXQ6cy5zdGRvdXQsc3RkZXJyOnMuc3RkZXJyfTtyZXR1cm4gdC5jb25maWcucHJpbnRJbnRlcmxlYXZlZCYmKG89cy5zdGRvdXQpLHMucmVpbml0PT09ITAmJmF3YWl0IHRoaXMucmVpbml0KHMudG9vbCksb30sY2F0KGUpe3JldHVybiB0Ll9maWxlb3AoImNhdCIsZSl9LGxzKGUpe3JldHVybiB0Ll9maWxlb3AoImxzIixlKX0sZG93bmxvYWQoZSl7cmV0dXJuIHQuX2ZpbGVvcCgiZG93bmxvYWQiLGUpfSxwd2QoKXtyZXR1cm4gdC5mcy5jd2QoKX0sY2QoZSl7Zm9yKGxldCByIG9mIHQudG9vbHMpIXIubW9kdWxlfHxyLm1vZHVsZS5GUy5jaGRpcihlKX0sbWtkaXIoZSl7cmV0dXJuIHQuZnMubWtkaXIoZSksITB9LHJlYWQoe3BhdGg6ZSxsZW5ndGg6cixmbGFnOmk9InIiLG9mZnNldDpzPTAscG9zaXRpb246bz0wfSl7Y29uc3QgYT10LmZzLm9wZW4oZSxpKSxuPW5ldyBVaW50OEFycmF5KHIpO3JldHVybiB0LmZzLnJlYWQoYSxuLHMscixvKSx0LmZzLmNsb3NlKGEpLG59LHdyaXRlKHtwYXRoOmUsYnVmZmVyOnIsZmxhZzppPSJ3KyIsb2Zmc2V0OnM9MCxwb3NpdGlvbjpvPTB9KXtjb25zdCBhPXQuZnMub3BlbihlLGkpO3QuZnMud3JpdGUoYSxyLHMsci5sZW5ndGgsbyksdC5mcy5jbG9zZShhKX0sYXN5bmMgcmVpbml0KGUpe2NvbnN0IHI9dC50b29scy5maW5kKHM9PnMudG9vbD09ZSksaT10LmJhc2UubW9kdWxlLkZTLmN3ZCgpO09iamVjdC5hc3NpZ24ocixyLmNvbmZpZyksci5yZWFkeT0hMSxhd2FpdCB0aGlzLmluaXQoKSxyLmlzQmFzZU1vZHVsZSYmdGhpcy5tb3VudCgpLHRoaXMuY2QoaSl9LF9zdGRpblR4dDoiIixfc3RkaW5QdHI6MCxnZXQgc3RkaW4oKXtyZXR1cm4gdC5fc3RkaW5UeHR9LHNldCBzdGRpbihlPSIiKXt0Ll9sb2coYFNldHRpbmcgc3RkaW4gdG8gJWMke2V9JWNgLCJjb2xvcjpkYXJrYmx1ZSIsIiIpLHQuX3N0ZGluVHh0PWUsdC5fc3RkaW5QdHI9MH0sYXN5bmMgX3NldHVwKGUpe2lmKGUucmVhZHkpcmV0dXJuO2lmKHQuX2xvZyhgU2V0dGluZyB1cCAke2UudG9vbH0gKGJhc2UgPSAke2UuaXNCYXNlTW9kdWxlPT09ITB9KS4uLmApLGUuY29uZmlnPU9iamVjdC5hc3NpZ24oe30sZSksZS51cmxQcmVmaXh8fChlLnVybFByZWZpeD1gJHt0LmNvbmZpZy51cmxDRE59LyR7ZS50b29sfS8ke2UudmVyc2lvbn1gKSxlLnByb2dyYW18fChlLnByb2dyYW09ZS50b29sKSxlLmZlYXR1cmVzfHwoZS5mZWF0dXJlcz17fSwoaltlLnByb2dyYW1dfHxbXSkuaW5jbHVkZXMoInNpbWQiKSYmKGF3YWl0IFcoKT8oZS5wcm9ncmFtKz0iLXNpbWQiLGUuZmVhdHVyZXMuc2ltZD0hMCk6dC5fbG9nKGBXZWJBc3NlbWJseSBTSU1EIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBicm93c2VyOyB3aWxsIGxvYWQgbm9uLVNJTUQgdmVyc2lvbiBvZiAke2UucHJvZ3JhbX0uYCkpKSxlLmlzQmFzZU1vZHVsZSYmKGUubG9hZGluZz1rKSxlLmxvYWRpbmc9PT14KXt0Ll9sb2coYFdpbGwgbGF6eS1sb2FkICR7ZS50b29sfTsgc2tpcHBpbmcgaW5pdGlhbGl6YXRpb24uYCk7cmV0dXJufXNlbGYuaW1wb3J0U2NyaXB0cyhgJHtlLnVybFByZWZpeH0vJHtlLnByb2dyYW19LmpzYCksZS5tb2R1bGU9YXdhaXQgTW9kdWxlKHt0aGlzUHJvZ3JhbTplLnByb2dyYW0sbG9jYXRlRmlsZTooaSxzKT0+YCR7ZS51cmxQcmVmaXh9LyR7aX1gLHN0ZGluOigpPT50Ll9zdGRpblB0cjx0LnN0ZGluLmxlbmd0aD90LnN0ZGluLmNoYXJDb2RlQXQodC5fc3RkaW5QdHIrKyk6KHQuc3RkaW49IiIsbnVsbCkscHJpbnQ6aT0+e3QuY29uZmlnLnByaW50U3RyZWFtP3Bvc3RNZXNzYWdlKHt0eXBlOiJiaW93YXNtIix2YWx1ZTp7c3Rkb3V0Oml9fSk6ZS5zdGRvdXQrPWkrYApgfSxwcmludEVycjppPT57Y29uc3Qgcz10LmNvbmZpZy5wcmludEludGVybGVhdmVkPyJzdGRvdXQiOiJzdGRlcnIiO3QuY29uZmlnLnByaW50U3RyZWFtP3Bvc3RNZXNzYWdlKHt0eXBlOiJiaW93YXNtIix2YWx1ZTp7W3NdOml9fSk6ZVtzXSs9aStgCmB9fSk7Y29uc3Qgcj1lLm1vZHVsZS5GUztlLmlzQmFzZU1vZHVsZT8odC5fbG9nKGBTZXR0aW5nIHVwICR7ZS50b29sfSB3aXRoIGJhc2UgbW9kdWxlIGZpbGVzeXN0ZW0uLi5gKSxyLm1rZGlyKHQuY29uZmlnLmRpclNoYXJlZCw1MTEpLHIubWtkaXIoYCR7dC5jb25maWcuZGlyU2hhcmVkfS8ke3QuY29uZmlnLmRpckRhdGF9YCw1MTEpLHIubWtkaXIoYCR7dC5jb25maWcuZGlyU2hhcmVkfS8ke3QuY29uZmlnLmRpck1vdW50ZWR9YCw1MTEpLHIuY2hkaXIoYCR7dC5jb25maWcuZGlyU2hhcmVkfS8ke3QuY29uZmlnLmRpckRhdGF9YCksdC5mcz1yKToodC5fbG9nKGBTZXR0aW5nIHVwICR7ZS50b29sfSB3aXRoIGZpbGVzeXN0ZW0uLi5gKSxyLm1rZGlyKHQuY29uZmlnLmRpclNoYXJlZCksci5tb3VudChlLm1vZHVsZS5QUk9YWUZTLHtyb290OnQuY29uZmlnLmRpclNoYXJlZCxmczp0LmZzfSx0LmNvbmZpZy5kaXJTaGFyZWQpLHIuY2hkaXIodC5mcy5jd2QoKSkpLGUuc3Rkb3V0PSIiLGUuc3RkZXJyPSIiLGUucmVhZHk9ITB9LGFzeW5jIF9zZXR1cEZTKCl7Y29uc3QgZT10LmZzO2ZvcihsZXQgciBvZiB0LnRvb2xzKXtpZighci5yZWFkeSljb250aW51ZTtjb25zdCBpPXIubW9kdWxlLkZTLHM9YC8ke3IudG9vbH1gLG89YCR7dC5jb25maWcuZGlyU2hhcmVkfSR7c31gOyFpLmFuYWx5emVQYXRoKHMpLmV4aXN0c3x8ZS5hbmFseXplUGF0aChvKS5leGlzdHN8fCh0Ll9sb2coYE1vdW50aW5nICR7c30gb250byAke3QuYmFzZS50b29sfSBmaWxlc3lzdGVtIGF0ICR7b31gKSxlLm1rZGlyKG8pLGUubW91bnQodC5iYXNlLm1vZHVsZS5QUk9YWUZTLHtyb290OnMsZnM6aX0sbykpfX0sX2ZpbGVvcChlLHIpe3QuX2xvZyhgUnVubmluZyAke2V9ICR7cn1gKTtjb25zdCBpPXQuZnMuYW5hbHl6ZVBhdGgocik7aWYoIWkuZXhpc3RzKXJldHVybiB0Ll9sb2coYEZpbGUgJHtyfSBub3QgZm91bmQuYCksITE7c3dpdGNoKGUpe2Nhc2UiY2F0IjpyZXR1cm4gdC5mcy5yZWFkRmlsZShyLHtlbmNvZGluZzoidXRmOCJ9KTtjYXNlImxzIjpyZXR1cm4gdC5mcy5pc0ZpbGUoaS5vYmplY3QubW9kZSk/dC5mcy5zdGF0KHIpOnQuZnMucmVhZGRpcihyKTtjYXNlImRvd25sb2FkIjpjb25zdCBzPW5ldyBCbG9iKFt0aGlzLmNhdChyKV0pO3JldHVybiBVUkwuY3JlYXRlT2JqZWN0VVJMKHMpfXJldHVybiExfSxfbG9nKGUpe2lmKCF0LmNvbmZpZy5kZWJ1ZylyZXR1cm47bGV0IHI9Wy4uLmFyZ3VtZW50c107ci5zaGlmdCgpLGNvbnNvbGUubG9nKGAlY1tXZWJXb3JrZXJdJWMgJHtlfWAsImZvbnQtd2VpZ2h0OmJvbGQiLCIiLC4uLnIpfX07dyh0KX0pKCk7Cg==",_=typeof window<"u"&&window.Blob&&new Blob([atob(M)],{type:"text/javascript;charset=utf-8"});function I(){const t=_&&(window.URL||window.webkitURL).createObjectURL(_);try{return t?new Worker(t):new Worker("data:application/javascript;base64,"+M)}finally{t&&(window.URL||window.webkitURL).revokeObjectURL(t)}}const T={urlCDN:"https://biowasm.com/cdn/v3",urlCDNStg:"https://stg.biowasm.com/cdn/v3",dirShared:"/shared",dirMounted:"/mnt",dirData:"/data",printInterleaved:!0,printStream:!1,callback:null,debug:!1,env:"prd"};class L{constructor(t,e={}){if(null==t)throw"Expecting array of tools as input to Aioli constructor.";return Array.isArray(t)||(t=[t]),e=Object.assign({},T,e),t=t.map(this._parseTool),"stg"===e.env&&(e.urlCDN=e.urlCDNStg),this.tools=t,this.config=e,null!=this.config.callback&&(this.callback=this.config.callback),delete this.config.callback,this.init()}async init(){const t=new I;this.callback&&(t.onmessage=t=>{"biowasm"===t.data.type&&this.callback(t.data.value)});const e=y(t);return e.tools=this.tools,e.config=this.config,await e.init(),e}_parseTool(t){if("string"!=typeof t)return t;const e=t.split("/");if(2!=e.length&&3!=e.length)throw"Expecting '<tool>/<version>' or '<tool>/<program>/<version>'";return{tool:e[0],program:3==e.length?e[1]:e[0],version:e[e.length-1]}}}var N=n(3629);class P{static getAvailableScales(){return Object.entries(this.scales).map((([t,e])=>t))}static getScale(t){return(0,N.vA)(!(void 0===this.scales[t]),`Scale '${t}' was not found.`),this.scales[t]}}P.scales={WimleyWhite:{"-":0,A:.17,C:-.24,D:-.07,E:-.01,F:-1.13,G:.01,H:.17,I:-.31,K:.99,L:-.56,M:-.23,N:.42,P:.45,Q:.58,R:.81,S:.13,T:.14,V:.07,W:-1.85,Y:-.94},categorial:{"-":0,A:1,C:2,D:3,E:4,F:5,G:6,H:7,I:8,K:9,L:10,M:11,N:12,P:13,Q:14,R:15,S:16,T:17,V:18,W:19,Y:20}};class ${constructor(t="categorial"){this.aa2num=P.getScale(t),this.num2aa={},Object.entries(this.aa2num).forEach((([t,e])=>this.num2aa[e]=t))}static _truncateSequence(t){let e=0,n=t.length;const i=["NH2","COOH"];if(t.startsWith(i[0])){const n=i[0].length;(0,N.vA)("-"==t[n],`Wrong sequence format: ${i[0]} without following '-' in '${t}'.`),e=n}if(t.endsWith(i[1])){const e=i[1].length+1;(0,N.vA)("-"==t[n-e],`Wrong sequence format: ${i[1]} without '-' precending in '${t}'.`),n-=e}return t.substring(e,n)}static _dropDefises(t){return t.replace(/(-)([^-]+)/g,"$2")}static clean(t){return $._dropDefises($._truncateSequence(t))}encode(t){const e=t.length,n=new Array(e).fill(0);for(let i=0;i<e;++i){const e=t[i];(0,N.vA)(e in this.aa2num,`Unknown char '${e}' found in sequence '${t}'`),n[i]=this.encodeLettter(e)}return n}encodeLettter(t){return this.aa2num[t]}decode(t){let e="";for(let n=0;n<t.length;++n){const i=t[n];(0,N.vA)(i in this.num2aa,`Unknown code '${i}' found in vector '${t}'`),e+=this.num2aa[i]}return e}}var R=n(4139);const O="input.fa",k="result.fasta";class G extends Error{element;constructor(t,e){super(t.innerText,e),this.element=t}}function F(t){return t.reduce(((t,e,n)=>t+`>sample${n+1}\n${e}\n`),"")}async function H(t,e=!1,n="",i=null,o,s,c){let h=t.toList();e&&(h=h.map((t=>$.clean(t).replace(/\-/g,""))));const u=t.length;i??=r.Column.string("Clusters",u).init("0"),i.type!=r.COLUMN_TYPE.STRING&&(i=i.convertTo(r.TYPE.STRING)),i.compact();const d=i.categories,p=i.getRawData(),m=new Array(d.length),f=new Array(d.length);for(let t=0;t<u;++t){const e=p[t];(m[e]??=[]).push(h[t]),(f[e]??=[]).push(t)}D(f,d);const g=await new L(["base/1.0.0",{tool:"kalign",version:R.b9,reinit:!0}]),y=r.Column.string(n,u);for(let t=0;t<d.length;++t){const e=F(m[t]);await g.fs.writeFile(O,e);const n=`${void 0!==o?` --gpo ${o}`:""}${void 0!==s?` --gpe ${s}`:""}${void 0!==c?` --tgpe ${c}`:""}`,i=await g.exec(`kalign ${O} -f fasta -o ${k}${n}`);console.warn(i);const r=await g.cat(k);if(!r){const t=B(i,1);throw new Error(t)}const l=new a.m(r).sequencesArray,h=f[t];for(let t=0;t<l.length;++t)y.set(h[t],l[t])}const b=t.meta.units,v=t.getTag(l.gp.alphabet);return y.meta.units=b,y.setTag(l.gp.aligned,"SEQ.MSA"),y.setTag(l.gp.alphabet,v),y.semType=r.SEMTYPE.MACROMOLECULE,y}function B(t,e){const n=[],i=/^.+ERROR : (.+)$/gm;let r;for(;null!=(r=i.exec(t))&&(void 0===e||n.length<e);)n.push(r[1]);return n.join("\n")}function D(t,e){const n=t.map(((t,e)=>[t,e])).filter((([t,e])=>1==t.length)).map((([t,e])=>e));if(n.length>0){const t=i.div([i.divText(`MSA analysis is not available on single sequence clusters #${n.length}:`),...s()(n).take(3).map((t=>{let r=e[t];return r.length>25&&(r=r.slice(0,25)+"..."),i.divText(`"${r}"${t<n.length-1?", ":"."}`)})).toArray(),...n.length>3?[i.divText("...")]:[]]);throw new G(t)}}},8152:(t,e,n)=>{"use strict";n.d(e,{GD:()=>d,ZY:()=>h});var i=n(4328),r=n(6082),o=n(2003),s=n(608),a=n(4139),l=n(6766);const c=new class{dcName="bio";async getDockerContainer(){return await i.dapi.docker.dockerContainers.filter(this.dcName).first()}},h=["mafft --auto","mafft","linsi","ginsi","einsi","fftns","fftnsi","nwns","nwnsi"],u=["AlignedSeq","AlignedSubpeptide","HELM","ID","PolymerID"];async function d(t,e,n="ginsi",i=1.53,l=0,h=null,d){const m=await c.getDockerContainer(),f=t.length;h??=r.Column.int("Clusters",f).init(0),h.type!=r.COLUMN_TYPE.STRING&&(h=h.convertTo(r.TYPE.STRING));const g=h.categories,y=h.getRawData(),b=new Array(g.length),v=new Array(g.length);for(let e=0;e<f;++e){const n=y[e],i=g[n];if(""===i)continue;const r=g.indexOf(i),o=t.get(e);o&&((b[r]??=[]).push({ID:e.toString(),HELM:o}),(v[n]??=[]).push(e))}(0,s.aZ)(v,g);const w=new Array(f);for(const t of b){const e=(await p(m.id,t,n,i,l,d)).Alignment;for(const t of e)w[parseInt(t.ID)]=Object.entries(t).filter((t=>!u.includes(t[0]))).map((t=>"-"!==t[1]?t[1]:"")).join(a.J.SEPARATOR)}const C=r.Column.fromStrings(e,w);return C.meta.units=o.Hi.SEPARATOR,C.setTag(o.gp.separator,a.J.SEPARATOR),C.setTag(o.gp.aligned,"SEQ.MSA"),C.setTag(o.gp.alphabet,o.YI.UN),C.setTag(o.gp.alphabetIsMultichar,"true"),C.semType=r.SEMTYPE.MACROMOLECULE,C}async function p(t,e,n,r,o,s){const a={method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(e)},c=`/align?method=${n}&gap_open=${r}&gap_extend=${o}`,h=window.performance.now(),u=await i.dapi.docker.dockerContainers.fetchProxy(t,c,a),d=window.performance.now();l._package.logger.debug(`Bio: requestAlignedObjects() dockerContainers.fetchProxy(), ET: ${d-h} ms`);const p="application/json"===u.headers.get("content-type");if(!u.ok&&p){const t=await u.json(),e=t["pepsea-error"];if(e)throw new Error(`PepSeA error: ${e}`);const n=t["datagrok-error"];if(n)throw new Error(`Datagrok error: ${n}`);throw new Error(u.statusText)}if(!u.ok&&!p){const t=await u.text();throw new Error(`Error: ${t}`)}if(!p){const t=await u.text();throw new Error(`Error: PepSeA expected JSON response, got '${t}'.`)}const m=await u.json();if("pepsea-stderr"in m){const t=m["pepsea-stderr"];s?.warning(t)}return m}},3890:(t,e,n)=>{"use strict";n.d(e,{TE:()=>h});var i=n(6082),r=n(7389),o=n(4328),s=n(1991),a=n.n(s),l=n(6766);const c=60;function h(){const t=o.shell.tv.grid,e=a().count(0).take(t.columns.length).map((e=>t.columns.byIndex(e))).filter((t=>!!t.column&&t.column.semType!==i.SEMTYPE.MACROMOLECULE)).toArray(),n=e.find((t=>-1!==t.name.toLowerCase().indexOf("id"))),s=n?[n.name]:[],h=r.input.multiChoice("Seq id columns",{value:s,items:e.map((t=>t.name))}),d=a().count(0).take(t.columns.length).map((e=>t.columns.byIndex(e))).filter((t=>{const e=t.column;return!(!e||e.semType!==i.SEMTYPE.MACROMOLECULE)&&l._package.seqHelper.getSeqHandler(e).isFasta()})).toArray(),p=d.length>0?d[0].name:[],m=r.input.choice("Seq column",{value:p,items:d.map((t=>t.name))}),f=r.input.int("FASTA line width",{value:c});r.dialog({title:"Save as FASTA"}).add(r.inputs([h,m,f])).onOK((()=>{const e=h.value?h.value.map((e=>t.columns.byName(e).column)):[],n=m.value?t.columns.byName(m.value).column:null,i=f.value??c;n||o.shell.warning("Seq column is mandatory to save as FASTA.");const r=function(t,e,n=c,i="\n"){const r=[];for(let o=0;o<e.length;o++){const s=t.map((t=>t.get(o).toString())).join("|"),a=u(e.getSplitted(o),n);r.push(`>${s}${i}`);for(const t of a)r.push(`${t}${i}`)}return"".concat(...r)}(e,l._package.seqHelper.getSeqHandler(n),i),s=document.createElement("a");s.setAttribute("href",`data:text/plain;charset=utf-8,${encodeURIComponent(r)}`),s.setAttribute("download",`${t.dataFrame.name}.fasta`),s.click()})).show()}function u(t,e=c){let n=0;const i=t.length,r=[];for(;n<i;){const i=a().count(n).take(Math.min(t.length-n,e)).map((e=>t.getOriginal(e))).toArray(),o=i.map((t=>t.length>1?`[${t}]`:t)).reduce(((t,e)=>t+e),"");r.push(o),n+=i.length}return r}},8754:(t,e,n)=>{"use strict";n.d(e,{V:()=>h});var i=n(4328),r=n(6077),o=n(2003),s=n(8312),a=n(5553),l=n(966),c=n(330);async function h(t,e,n,h,u,d,p){let m;if(n){const n=await(0,s.Q)(),i=n.getSeqHandler(e);let r,a;i.isHelm()?r=e:(a=e.name,e.name=`__${a}`,r=i.convert(o.Hi.HELM),r.name=a,t.columns.add(r,!1));try{m=await n.helmToAtomicLevel(r,!0,!0,u)}finally{r!==e&&(t.columns.remove(r.name),e.name=a)}}else{if(!(0,l.l)(e,"To Atomic Level",d)[0])return{molCol:null,warnings:["Column is not suitable"]};m=await(0,r.C4)(t,e,u,d,p)}if(m.molCol){const r=(0,c.qj)(t,e.name);m.molCol.name=r,t.columns.add(m.molCol,!0),await(0,a.Qc)(e,m.molCol,u,d,p,n),m.molCol.setTag(".sequence-src-highlight-monomers",String(h)),await i.data.detectSemanticTypes(t)}return m}},4870:(t,e,n)=>{"use strict";n.d(e,{Kd:()=>a,Ku:()=>s,me:()=>o});var i=n(4328),r=n(6082);function o(){const t=i.shell.t.columns.bySemTypeAll(r.SEMTYPE.MACROMOLECULE);return null===t?(i.shell.error("Current table does not contain macromolecules"),[]):t}function s(t,e){t.innerHTML="",t.append(e)}function a(t,e,n,i,r){const o=()=>{const r=t.col(e);r&&(r.width=n),i&&(t.props.rowHeight=i)};if(r)return void o();const s=t.onAfterDrawOverlay.subscribe((()=>{s.unsubscribe(),setTimeout((()=>{o()}))}))}},250:(t,e,n)=>{"use strict";n.d(e,{n5:()=>v,oP:()=>I});var i=n(4328),r=n(7389),o=n(6082),s=n(1757),a=n.n(s),l=n(1991),c=n.n(l),h=n(1858),u=n(2003),d=n(4326);function p(t){var e;return"string"==typeof t||t instanceof String?t:("object"==typeof t||t instanceof Object)&&"$thrownJsError"in t?p(t.$thrownJsError):t instanceof Error?null!==(e=t.stack)&&void 0!==e?e:t.message:t.toString()}var m=n(8070),f=n(7602),g=n(439),y=n(6882);var b,v,w=n(2174),C=n(6766);function A(t,e,n){return Math.abs(t-e)<=n}HTMLCanvasElement.prototype.getCursorPosition=function(t,e){const n=this.getBoundingClientRect();return new o.Point((t.clientX-n.left)*e,(t.clientY-n.top)*e)},o.Rect.prototype.contains=function(t,e){return this.left<=t&&t<=this.right&&this.top<=e&&e<=this.bottom};class S{rowCount;value;plotValue;valueList=null;valueIdx=0;bounds;constructor(t=0,e){this.value=this.rowCount=t,this.bounds=e}push(t){this.valueList||(this.valueList=new Array(this.rowCount),this.valueIdx=0),this.valueList[this.valueIdx]=t,++this.valueIdx}aggregate(t){this.value=t(this.valueList)??0,this.valueList=null}}class x{pos;name;_label;get label(){return this._label?this._label:this.name}_freqs;sumRowCount=0;sumPlotValue;sumPlotValueForHeight;constructor(t,e,n,i){this.pos=t,this.name=e,this._freqs=n??{},i?.sumRowCount&&(this.sumRowCount=i.sumRowCount),i?.sumValueForHeight&&(this.sumPlotValue=i.sumValueForHeight),i?.label&&(this._label=i.label)}getMonomers(){return Object.keys(this._freqs)}hasMonomer(t){return t in this._freqs}getFreq(t){let e=this._freqs[t];return e||(e=this._freqs[t]=new S),e}aggregate(t){const e=function(t){return e=>{const n=function(t){let e;const n="agg";return e=t instanceof Float32Array?o.Column.fromFloat32Array(n,t):t instanceof Int32Array?o.Column.fromInt32Array(n,t):o.Column.fromList(o.COLUMN_TYPE.FLOAT,n,t),e}(e);return n.aggregate(t)}}(t);for(const[t,n]of Object.entries(this._freqs))n.aggregate(e)}getMinValue(){return Math.min(...Object.values(this._freqs).map((t=>t.value)))}calcPlotValue(t){for(const e of Object.values(this._freqs))e.plotValue=e.value-t}calcHeights(t){this.sumPlotValue=0;for(const t of Object.values(this._freqs))this.sumPlotValue+=t.plotValue;if(this.sumPlotValueForHeight=0,t===d.fH.Entropy){const t=Object.keys(this._freqs).length,e=.01*this.sumPlotValue,n=e/t;for(const t of Object.values(this._freqs)){const i=(t.plotValue+n)/(this.sumPlotValue+e);this.sumPlotValueForHeight+=-i*Math.log2(i)}}else if(t===d.fH.full)for(const[t,e]of Object.entries(this._freqs)){const t=e.plotValue/this.sumPlotValue;this.sumPlotValueForHeight+=t}}calcScreen(t,e,n,i,r,s,a,l,c){const h=i===d.fH.Entropy?n*(r-this.sumPlotValueForHeight)/r:n;let u=c*l+(n-h-1);const p=Object.entries(this._freqs).sort(((t,e)=>t[0]!==g._S&&e[0]!==g._S?e[1].value-t[1].value:t[0]===g._S&&e[0]===g._S?0:t[0]===g._S?-1:1));for(const[n,i]of p){const n=h*i.plotValue/this.sumPlotValue;i.bounds=new o.Rect((t-e)*l*s,u,a*l,n),u+=n}}render(t,e,n,i,r,o,s){for(const[a,l]of Object.entries(this._freqs))if(a!==g._S){const c=(0,u.zS)(a,s),h=l.bounds,d=h.left;let p=y.S$;o&&(p=o.getMonomerTextColor(r,a)),t.resetTransform(),t.strokeStyle="lightgray",t.lineWidth=1,t.rect(d,h.top,h.width,h.height),t.fillStyle=p,t.textAlign="left",t.font=e;const m=t.measureText(c);t.setTransform(h.width/m.width,0,0,h.height/i,d,h.top),t.fillText(c,0,-n)}}getMonomerAt(t,e){const n=Object.entries(this._freqs).find((([n,i])=>i.bounds.contains(t,e)));return n?n[0]:void 0}buildCompositionTable(t,e){if("-"in this._freqs)throw new Error("Unexpected monomer symbol '-'.");return(0,w.F)(Object.assign({},...Object.entries(this._freqs).map((([t,e])=>({[t]:e.rowCount})))),t,e)}}!function(t){t.STYLE="Style",t.BEHAVIOR="Behavior",t.LAYOUT="Layout",t.DATA="Data"}(b||(b={})),function(t){t.sequenceColumnName="sequenceColumnName",t.valueAggrType="valueAggrType",t.valueColumnName="valueColumnName",t.startPositionName="startPositionName",t.endPositionName="endPositionName",t.skipEmptySequences="skipEmptySequences",t.skipEmptyPositions="skipEmptyPositions",t.shrinkEmptyTail="shrinkEmptyTail",t.backgroundColor="backgroundColor",t.positionHeight="positionHeight",t.positionWidth="positionWidth",t.verticalAlignment="verticalAlignment",t.horizontalAlignment="horizontalAlignment",t.fixWidth="fixWidth",t.fitArea="fitArea",t.minHeight="minHeight",t.maxHeight="maxHeight",t.maxMonomerLetters="maxMonomerLetters",t.showPositionLabels="showPositionLabels",t.positionMarginState="positionMarginState",t.positionMargin="positionMargin",t.filterSource="filterSource"}(v||(v={}));const E=d.Fo;var M;!function(t){t[t.None=0]="None",t[t.Render=1]="Render",t[t.Layout=1]="Layout",t[t.Freqs=2]="Freqs"}(M||(M={}));const _=new class{render=20};class I extends o.JsViewer{static residuesSet="nucleotides";viewed=!1;seqHelper;seqHandler;initialized=!1;monomerLib=null;host;msgHost;canvas;slider;textBaseline;seqCol=null;positions=[];visibleSlider=!1;allowResize=!0;turnOfResizeForOneSetValue=!1;sequenceColumnName;valueAggrType;valueColumnName;skipEmptySequences;skipEmptyPositions;positionWidth;_positionWidth;_positionWidthWithMargin;get positionWidthWithMargin(){return this._positionWidthWithMargin}minHeight;backgroundColor=4294967295;maxHeight;maxMonomerLetters;showPositionLabels;positionMarginState;positionMargin=0;_positionMargin;startPositionName;endPositionName;fixWidth;verticalAlignment;horizontalAlignment;fitArea;shrinkEmptyTail;positionHeight;filterSource;positionNames=[];positionLabels=void 0;startPosition=-1;endPosition=-1;error=null;get Length(){return this.skipEmptyPositions?this.positions.length:this.startPosition<=this.endPosition?this.endPosition-this.startPosition+1:0}get positionMarginValue(){return this.positionMarginState===d.mH.AUTO&&!0===this.seqHandler.getAlphabetIsMultichar()||this.positionMarginState===d.mH.ON?this.positionMargin:0}constructor(){super(),this.seqHelper=C._package.seqHelper,this.textBaseline="top",this.seqHandler=null,this.sequenceColumnName=this.string(v.sequenceColumnName,E.sequenceColumnName,{category:b.DATA,semType:o.SEMTYPE.MACROMOLECULE,description:"Column with sequences"});const t=[o.AGG.KEY,o.AGG.PIVOT,o.AGG.MISSING_VALUE_COUNT,o.AGG.SKEW,o.AGG.KURT,o.AGG.SELECTED_ROWS_COUNT],e=Object.values(o.AGG).filter((e=>!t.includes(e)));this.valueColumnName=this.string(v.valueColumnName,E.valueColumnName,{category:b.DATA,columnTypeFilter:"numerical",description:"Column with values used in aggregation for position heights"}),this.valueAggrType=this.string(v.valueAggrType,E.valueAggrType,{category:b.DATA,choices:e,description:"Aggregation method for value column"}),this.startPositionName=this.string(v.startPositionName,E.startPositionName,{category:b.DATA,description:"Position or column name for start position. If column with given name is found, its values will be used as start position. If number is supplied, it will be used as start position of WebLogo."}),this.endPositionName=this.string(v.endPositionName,E.endPositionName,{category:b.DATA,description:"Position or column name for end position. If column with given name is found, its values will be used as end position. If number is supplied, it will be used as end position of WebLogo."}),this.skipEmptySequences=this.bool(v.skipEmptySequences,E.skipEmptySequences,{category:b.DATA,description:"Skip sequences which are empty in all positions"}),this.skipEmptyPositions=this.bool(v.skipEmptyPositions,E.skipEmptyPositions,{category:b.DATA,description:"Skip positions which are empty in all sequences"}),this.shrinkEmptyTail=this.bool(v.shrinkEmptyTail,E.shrinkEmptyTail,{category:b.DATA,description:"Skip empty tail (if found for all sequences within a subset) in WebLogo"}),this.backgroundColor=this.int(v.backgroundColor,E.backgroundColor,{category:b.STYLE,description:"Background color of WebLogo canvas"}),this.positionHeight=this.string(v.positionHeight,E.positionHeight,{category:b.STYLE,choices:Object.values(d.fH),description:"Monomer-Position height mode. Entropy of 100%(full height)"}),this._positionWidth=this.positionWidth=this.float(v.positionWidth,E.positionWidth,{category:b.LAYOUT,editor:"slider",min:4,max:100,description:'Width of position in WebLogo. If "Fit Area" is enabled, width will be calculated to fit horizontal space'}),this.verticalAlignment=this.string(v.verticalAlignment,E.verticalAlignment,{category:b.LAYOUT,choices:Object.values(d.Lp)}),this.horizontalAlignment=this.string(v.horizontalAlignment,E.horizontalAlignment,{category:b.LAYOUT,choices:Object.values(d.P4)}),this.fixWidth=this.bool(v.fixWidth,E.fixWidth,{category:b.LAYOUT,userEditable:!1}),this.fitArea=this.bool(v.fitArea,E.fitArea,{category:b.LAYOUT,description:"Fit WebLogo to the horizontal space. Calculates position width as maximum between provided width value and value needed to fit whole horizontal space."}),this.minHeight=this.int(v.minHeight,E.minHeight,{category:b.LAYOUT,editor:"slider",min:10,max:250,description:"Minimum height of WebLogo"}),this.maxHeight=this.int(v.maxHeight,E.maxHeight,{category:b.LAYOUT,editor:"slider",min:25,max:Math.max(window.innerHeight??0,1e3),nullable:!0,description:"Maximum height of WebLogo"}),this.maxMonomerLetters=this.int(v.maxMonomerLetters,E.maxMonomerLetters,{category:b.LAYOUT,editor:"slider",min:1,max:40,description:"Maximum monomer letters to display before shortening"}),this.showPositionLabels=this.bool(v.showPositionLabels,E.showPositionLabels,{category:b.LAYOUT,description:"Show position labels on top of the weblogo"}),this.positionMarginState=this.string(v.positionMarginState,E.positionMarginState,{category:b.LAYOUT,choices:Object.values(d.mH),description:"Calculate optimal margins between positions or turn it on/off"});let n=0;"auto"===this.positionMarginState&&(n=4),this.positionMargin=this.int(v.positionMargin,n,{category:b.LAYOUT,min:0,max:25,description:"Margin between positions in WebLogo"}),this.filterSource=this.string(v.filterSource,E.filterSource,{category:b.BEHAVIOR,choices:Object.values(d.lT),description:"Data source for weblogo. Selected or filtered rows."}),this.slider=r.rangeSlider(0,100,0,20,!1,{style:"barbell"}),this.canvas=r.canvas(),this.canvas.classList.value="bio-wl-canvas",this.canvas.style.width="100%",(0,C.getMonomerLibHelper)().then((t=>{this.monomerLib=t.getMonomerLib(),this.render(M.Render,"monomerLib"),this.subs.push(this.monomerLib.onChanged.subscribe((()=>{this.render(M.Render,"monomerLib changed")})))})),this.viewSyncer=new f.g(C._package.logger)}static viewerCounter=-1;viewerId=++I.viewerCounter;toLog(){return`WebLogoViewer<${this.viewerId}>`}setData(){const t=`${this.toLog()}.setData()`;C._package.logger.debug(`${t}, in`),this.viewSyncer.sync(`${t}`,(async()=>{if(!this.setDataInProgress){this.setDataInProgress=!0;try{this.viewed&&(this.renderRequestSub.unsubscribe(),await this.destroyView(),this.viewed=!1),this.updateSeqCol(),this.updateEditors(),this.viewed||(await this.buildView(),this.viewed=!0)}finally{this.setDataInProgress=!1}}})),C._package.logger.debug(`${t}, out`)}viewSyncer;setDataInProgress=!1;viewSubs=[];async destroyView(){for(const t of this.viewSubs)t.unsubscribe();this.viewSubs=[];const t=this.dataFrame?"data":"null";C._package.logger.debug(`${this.toLog()}.destroyView( dataFrame = ${t} ) start`),this.host.remove(),this.msgHost=void 0,this.host=void 0,C._package.logger.debug(`${this.toLog()}.destroyView() end`)}async buildView(){const t=this.dataFrame?"data":"null";C._package.logger.debug(`${this.toLog()}.buildView( dataFrame = ${t} ) start`),window.devicePixelRatio,this.viewSubs.push(o.debounce(this.renderRequest,_.render).subscribe(this.renderRequestOnDebounce.bind(this))),this.helpUrl="/help/visualize/viewers/web-logo.md",this.msgHost=r.div("No message",{classes:"bio-wl-msg"}),this.msgHost.style.display="none",this.canvas=r.canvas(),this.canvas.style.width="100%",this.slider.root.style.position="absolute",this.slider.root.style.zIndex="999",this.slider.root.style.display="none",this.slider.root.style.height="0.7em",this.visibleSlider=!1,this.host=r.div([this.msgHost,this.canvas],{classes:"bio-wl-host",style:{display:"flex",flexDirection:"row",flexGrow:"0",flexWrap:"wrap"}}),this.root.append(this.host),this.root.append(this.slider.root),this.error&&(this.msgHost.innerText=this.error.message,r.tooltip.bind(this.msgHost,this.error.stack),this.msgHost.style.setProperty("display",null)),this.dataFrame&&(this.viewSubs.push(this.dataFrame.filter.onChanged.subscribe(this.dataFrameFilterOnChanged.bind(this))),this.viewSubs.push(this.dataFrame.selection.onChanged.subscribe(this.dataFrameSelectionOnChanged.bind(this)))),this.viewSubs.push(r.onSizeChanged(this.root).subscribe(this.rootOnSizeChanged.bind(this))),this.viewSubs.push(this.slider.onValuesChanged.subscribe(this.sliderOnValuesChanged.bind(this))),this.viewSubs.push((0,h.fromEvent)(this.canvas,"mousemove").subscribe(this.canvasOnMouseMove.bind(this))),this.viewSubs.push((0,h.fromEvent)(this.canvas,"mousedown").subscribe(this.canvasOnMouseDown.bind(this))),this.viewSubs.push((0,h.fromEvent)(this.canvas,"wheel").subscribe(this.canvasOnWheel.bind(this))),this.render(M.Freqs,"buildView"),C._package.logger.debug(`${this.toLog()}.buildView() end`)}lastSize={width:-1,height:-1};rootOnSizeChanged(t){const e={width:t.target.clientWidth,height:t.target.clientHeight};this.lastSize.width==e.width&&this.lastSize.height==e.height||(C._package.logger.debug(`${this.toLog()}.rootOnSizeChanged(), ${JSON.stringify(e)}, start `),this.render(M.Layout,"rootOnSizeChanged")),this.lastSize=e}updateEditors(){this.props.getProperty(v.valueColumnName).choices=c()(this.dataFrame.columns.numerical).map((t=>t.name)).toArray()}updateSeqCol(){if(this.dataFrame&&(this.seqCol=this.sequenceColumnName?this.dataFrame.col(this.sequenceColumnName):null,null==this.seqCol&&(this.seqCol=(0,u.mn)(this.dataFrame),this.sequenceColumnName=this.seqCol?this.seqCol.name:null),this.seqCol)){try{this.seqHandler=this.seqHelper.getSeqHandler(this.seqCol),this.render(M.Freqs,"updateSeqCol()"),this.error=null}catch(t){throw this.seqCol=null,this.error=t instanceof Error?t:new Error(t.toString()),t}this.seqCol||(this.seqHandler=null,this.positionNames=[],this.positionLabels=[],this.startPosition=-1,this.endPosition=-1)}}getFilter(){let t;switch(this.filterSource){case d.lT.Filtered:t=this.dataFrame.filter;break;case d.lT.Selected:t=0===this.dataFrame.selection.trueCount?this.dataFrame.filter:this.dataFrame.selection}return t}setSliderVisibility(t){t?(this.slider.root.style.display="inherit",this.visibleSlider=!0):(this.slider.root.style.display="none",this.visibleSlider=!1)}calcLayout(t){this.host&&this.canvas&&this.slider&&(this.host.classList.remove("bio-wl-fixWidth","bio-wl-fitArea"),this.canvas.classList.remove("bio-wl-fixWidth","bio-wl-fitArea"),this._positionWidth=this.positionWidth,this._positionMargin=this.positionMargin,this._positionWidthWithMargin=this._positionWidth+this.positionMarginValue,this.fixWidth?this.calcLayoutFixWidth(t):this.calcLayoutNoFitArea(t),this.slider.root.style.width=`${this.host.clientWidth}px`)}calcLayoutFixWidth(t){if(!this.host||!this.canvas||!this.slider)return;this.host.classList.add("bio-wl-fixWidth"),this.canvas.classList.add("bio-wl-fitArea");const e=this._positionWidthWithMargin*this.Length,n=Math.min(Math.max(this.minHeight,this.root.clientHeight),this.maxHeight??this.root.clientHeight);this.host.style.justifyContent=d.P4.LEFT,this.host.style.removeProperty("margin-left"),this.host.style.removeProperty("margin-top"),this.host.style.width=this.canvas.style.width=`${e}px`,this.host.style.height=this.canvas.style.height=`${n}px`,this.host.style.left=this.canvas.style.left="0",this.host.style.top=this.canvas.style.top="0",this.host.style.setProperty("overflow","hidden","important"),this.slider.root.style.display="none",this.slider.setValues(0,Math.max(0,this.Length-1),0,Math.max(0,this.Length-1)),this.canvas.width=e*t,this.canvas.height=n*t}calcLayoutNoFitArea(t){if(!this.host||!this.canvas||!this.slider)return;let e=this._positionWidthWithMargin*this.Length,n=Math.min(this.root.clientWidth,e);this.fitArea&&e<this.root.clientWidth&&(this._positionWidth=Math.floor(this._positionWidth*this.root.clientWidth/e),this._positionWidthWithMargin=this._positionWidth+this.positionMarginValue,e=this._positionWidthWithMargin*this.Length,n=Math.min(this.root.clientWidth,e));const i=Math.min(Math.max(this.minHeight,this.root.clientHeight),this.maxHeight??this.root.clientHeight);this.canvas.style.width=`${n}px`,this.canvas.style.height=`${i}px`,this.host.style.width=`${this.root.clientWidth}px`,this.host.style.height=`${this.root.clientHeight}px`,this.host.style.justifyContent=this.horizontalAlignment,this.host.style.alignContent=this.verticalAlignment===d.Lp.TOP?"start":this.verticalAlignment===d.Lp.MIDDLE?"center":this.verticalAlignment===d.Lp.BOTTOM?"end":"inherit",this.root.clientHeight<this.minHeight&&(this.host.style.alignContent="start",this.host.style.width=`${n+8}px`);const r=e>n;if(this.setSliderVisibility(r),r){this.slider.root.style.removeProperty("display"),this.host.style.justifyContent="left",this.host.style.height=this.root.clientHeight-this.slider.root.offsetHeight+"px",this.canvas.style.height=i-this.slider.root.offsetHeight+"px",this.slider.root.style.top=`${this.host.offsetHeight}px`;let t=Math.min(Math.max(0,this.slider.min),this.Length-.001),e=Math.min(Math.max(0,this.slider.max),this.Length-.001);const n=this.canvas.clientWidth/this._positionWidthWithMargin;e=Math.min(Math.max(t,0)+n,this.Length-.001),t=Math.max(0,Math.min(e,this.Length-.001)-n),this.safeUpdateSlider(0,Math.max(this.Length-.001),t,e)}else this.safeUpdateSlider(0,Math.max(0,this.Length-.001),0,Math.max(0,this.Length-.001));this.canvas.width=n*t,this.canvas.height=i*t}calcLayoutFitArea(t){if(!this.host||!this.canvas||!this.slider)return;const e=this._positionWidth*this.Length,n=Math.min(Math.max(this.minHeight,this.root.clientHeight),this.maxHeight??this.root.clientHeight),i=e>0?(this.root.clientWidth-this.positionMarginValue*this.Length)/e:0,r=this.root.clientHeight/n,o=Math.max(1,Math.min(i,r));this._positionWidth=this.positionWidth*o,this._positionWidthWithMargin=this._positionWidth+this.positionMarginValue;const s=(this._positionWidth+this.positionMarginValue)*this.Length,a=o*n,l=Math.min(this.root.clientWidth,s);this.canvas.style.width=`${l}px`,this.canvas.style.height=`${a}px`,this.host.style.width=`${l}px`,this.host.style.height=`${this.root.clientHeight}px`,this.host.style.justifyContent=this.horizontalAlignment,this.host.style.alignContent=this.verticalAlignment===d.Lp.TOP?"start":this.verticalAlignment===d.Lp.MIDDLE?"center":this.verticalAlignment===d.Lp.BOTTOM?"end":"inherit",this.root.clientHeight<this.minHeight&&(this.host.style.alignContent="start",this.host.style.width=`${l+6}px`),this.host.style.width=`${this.host}px`;const c=s>l;if(this.setSliderVisibility(c),c){this.slider.root.style.removeProperty("display"),this.host.style.justifyContent="left",this.host.style.height=this.root.clientHeight-this.slider.root.offsetHeight+"px",this.slider.root.style.top=`${this.host.offsetHeight}px`;let t=Math.min(Math.max(0,this.slider.min),this.Length-.001),e=Math.min(Math.max(0,this.slider.max),this.Length-.001);const n=this.root.clientWidth/this._positionWidthWithMargin;e=Math.min(Math.max(t,0)+n,this.Length-.001),t=Math.max(0,Math.min(e,this.Length-.001)-n),this.safeUpdateSlider(0,Math.max(0,this.Length-.001),t,e)}else this.safeUpdateSlider(0,Math.max(0,this.Length-.001),0,Math.max(0,this.Length-.001));this.canvas.width=l*t,this.canvas.height=a*t}safeUpdateSlider(t,e,n,i){A(t,this.slider.minRange,.1)&&A(e,this.slider.maxRange,.1)&&A(n,this.slider.min,.1)&&A(i,this.slider.max,.1)||this.slider.setValues(t,e,n,i)}onPropertyChanged(t){switch(super.onPropertyChanged(t),t.name){case v.sequenceColumnName:this.updateSeqCol();break;case v.sequenceColumnName:case v.startPositionName:case v.endPositionName:case v.filterSource:case v.shrinkEmptyTail:case v.skipEmptyPositions:case v.positionHeight:case v.valueColumnName:case v.valueAggrType:this.render(M.Freqs,`onPropertyChanged( ${t.name} )`);break;case v.minHeight:case v.maxHeight:case v.maxMonomerLetters:case v.positionWidth:case v.showPositionLabels:case v.fixWidth:case v.fitArea:case v.horizontalAlignment:case v.verticalAlignment:case v.positionMargin:case v.positionMarginState:this.render(M.Layout,`onPropertyChanged(${t.name})`);break;case v.backgroundColor:this.render(M.Render,`onPropertyChanged(${t.name})`)}}onTableAttached(){C._package.logger.debug(`${this.toLog()}.onTableAttached(), `),super.onTableAttached(),this.setData()}detach(){const t=`${this.toLog()}.detach()`;C._package.logger.debug(`${t}, in`);const e=super.detach.bind(this);this.viewSyncer.sync(`${t}`,(async()=>{this.setDataInProgress||(this.viewed&&(await this.destroyView(),this.viewed=!1),e())})),C._package.logger.debug(`${t}, out`)}_onSizeChanged=new h.Subject;get onSizeChanged(){return this._onSizeChanged}_onFreqsCalculated=new h.Subject;get onFreqsCalculated(){return this._onFreqsCalculated}_onLayoutCalculated=new h.Subject;get onLayoutCalculated(){return this._onLayoutCalculated}getMonomer(t,e){const n=t.x,i=Math.floor(t.x/(this._positionWidthWithMargin*e)+Math.floor(this.slider.min)),r=this.positions[i];if(!r)return[null,null,null];const o=r.getMonomerAt(n,t.y);return void 0===o?[r,null,null]:[r,o,r.getFreq(o)]}_nullSequence(t="X"){return this.skipEmptySequences?"":new Array(this.Length).fill(t).join("")}_removeEmptyPositions(){this.skipEmptyPositions&&(this.positions=c()(this.positions).filter((t=>!t.hasMonomer(g._S)||t.getFreq(g._S).rowCount!==t.sumRowCount)).toArray())}requestedRenderLevel=M.Freqs;renderRequest=new h.Subject;renderRequestSub;render(t,e){C._package.logger.debug(`${this.toLog()}.render( recalcLevelVal=${t}, reason='${e}' )`),this.requestedRenderLevel=Math.max(this.requestedRenderLevel,t),this.renderRequest.next(this.requestedRenderLevel)}async renderInt(t){if(C._package.logger.debug(`${this.toLog()}.render.renderInt( renderLevel=${t} ), start `),this.msgHost&&(this.msgHost.style.display="none"),!this.seqCol||!this.dataFrame||null==this.host||null==this.slider)return;const e=window.devicePixelRatio,n=this.showPositionLabels?12:0;if(t>=M.Freqs&&(()=>{if(C._package.logger.debug(`${this.toLog()}.render.calculateFreqsInt(), start `),!this.host||!this.seqCol||!this.dataFrame)return;const t=this.seqCol.getTag(u.gp.positionNames),e=this.seqCol.getTag(u.gp.positionLabels);let n;!t&&this.endPositionName&&/\d+/.test(this.endPositionName)?n=Number(this.endPositionName):t&&this.endPositionName&&(n=t.split(u.z1).indexOf(this.endPositionName),n=-1!==n?n:void 0);const i=this.getFilter(),r=0===i.trueCount?this.seqHandler.maxLength:c().count(0).take(this.seqHandler.length).map((t=>{const e=this.seqHandler.getSplitted(t,n);return i.get(t)&&e?e.length:0})).reduce(((t,e)=>Math.max(t,e)),0);this.positionNames=t?t.split(u.z1).map((t=>t.trim())):[...Array(r).keys()].map((t=>`${t+1}`)),this.positionLabels=e?e.split(u.z1).map((t=>t.trim())):void 0,this.startPosition=this.startPositionName&&this.positionNames&&this.positionNames.includes(this.startPositionName)?this.positionNames.indexOf(this.startPositionName):0,this.endPosition=this.endPositionName&&this.positionNames&&this.positionNames.includes(this.endPositionName)?this.positionNames.indexOf(this.endPositionName):r-1;const s=this.startPosition<=this.endPosition?this.endPosition-this.startPosition+1:0;this.seqHandler=this.seqHelper.getSeqHandler(this.seqCol);const a=this.startPosition<=this.endPosition?this.endPosition-this.startPosition+1:0;this.positions=new Array(a);for(let t=0;t<s;t++){const e=this.positionNames[this.startPosition+t],n=this.positionLabels?this.positionLabels[this.startPosition+t]:void 0;this.positions[t]=new x(this.startPosition+t,e,{},{label:n})}this.dataFrame.rowCount;const l=i.getSelectedIndexes();for(let t=0;t<s;++t){for(const e of l){const n=this.seqHandler.getSplitted(e),i=t+this.startPosition<n.length?n.getCanonical(this.startPosition+t):this.seqHandler.defaultGapOriginal,r=this.seqHandler.defaultGapOriginal===i?g._S:i,o=this.positions[t],s=o.getFreq(r);++o.sumRowCount,s.value=++s.rowCount}if(this.valueAggrType===o.AGG.TOTAL_COUNT)continue;let e=null;try{e=this.dataFrame.getCol(this.valueColumnName),e.matches("numerical")||(e=null)}catch{e=null}if(e){for(const n of l){const i=this.seqHandler.getSplitted(n),r=t+this.startPosition<i.length?i.getCanonical(this.startPosition+t):this.seqHandler.defaultGapOriginal,o=this.seqHandler.defaultGapOriginal===r?g._S:r,s=e.get(n);this.positions[t].getFreq(o).push(s)}this.positions[t].aggregate(this.valueAggrType)}}const h=this.valueAggrType===o.AGG.TOTAL_COUNT?0:Math.min(0,Math.min(...this.positions.map((t=>t.getMinValue()))));for(let t=0;t<s;++t)this.positions[t].calcPlotValue(h),this.positions[t].calcHeights(this.positionHeight);this._removeEmptyPositions(),this._onFreqsCalculated.next()})(),this.calcLayout(e),-1===this.startPosition)return;const r=Math.max(Math.floor(this.slider.min),0),s=Math.min(this.positions.length-1,Math.floor(this.slider.max));t>=M.Layout&&((t,e,n,r)=>{C._package.logger.debug(`${this.toLog()}.render.calculateLayoutInt(), start `);const s=this.canvas.height-r*n;let a;if(this.valueAggrType===o.AGG.TOTAL_COUNT){const t=this.seqHandler.getAlphabetSize();this.positionHeight==d.fH.Entropy&&null==t&&i.shell.error("WebLogo: alphabet is undefined."),a=Math.log2(t)}else a=Math.max(...c().count(t).takeWhile((t=>t<=e)).map((t=>this.positions[t].sumPlotValueForHeight)));for(let i=t;i<=e;++i)i in this.positions?this.positions[i].calcScreen(i,this.slider.min,s,this.positionHeight,a,this._positionWidthWithMargin,this._positionWidth,n,r):C._package.logger.warning(`${this.toLog()}.render.calculateLayoutInt() this.positions.length = ${this.positions.length}, jPos = ${i}`);C._package.logger.debug(`${this.toLog()}.render.calculateLayoutInt(), end `),this._onLayoutCalculated.next()})(r,s,window.devicePixelRatio,n);const a=this.canvas.getContext("2d");if(a){a.save();try{this.Length,a.resetTransform(),a.fillStyle=function(t){const e=o.Color.a(t);return`#${(16777215&t).toString(16).padStart(6,"0")}`+e.toString(16).padStart(2,"0")}(this.backgroundColor),a.fillRect(0,0,this.canvas.width,this.canvas.height),a.textBaseline=this.textBaseline;const t=10*e;a.resetTransform(),a.fillStyle="black",a.textAlign="center",a.font=`${t.toFixed(1)}px Roboto, Roboto Local, sans-serif`,n>0&&this.positions.length>0&&function(t,e,n,i,r,o,s,a){t.save();try{t.textAlign="center";let l=null,c=null;for(let e=Math.floor(s);e<=Math.floor(a);e++){const n=o[e],i=t.measureText(n.name),r=i.actualBoundingBoxDescent-i.actualBoundingBoxAscent;l=null===l?i.width:Math.max(l,i.width),c=null===c?r:Math.max(c,r)}const h=l<i*e-2?1:(i*e-2)/l;for(let l=Math.floor(s);l<=Math.floor(a);l++){const a=o[l],u=(l-s)*n*e+i*e/2,d=(r*e-c)/2;t.setTransform(h,0,0,1,u,d),t.measureText(a.label),t.fillText(a.label,0,0)}}finally{t.restore()}}(a,e,this._positionWidthWithMargin,this._positionWidth,n,this.positions,this.slider.min,this.slider.max);const i="16px Roboto, Roboto Local, sans-serif",l=.25,c=12.2,h=this.seqHandler.defaultBiotype;for(let t=r;t<=s;t++)this.positions[t].render(a,i,l,c,h,this.monomerLib,this.maxMonomerLetters)}finally{a.restore()}C._package.logger.debug(`${this.toLog()}.render.renderInt( recalcLevel=${t} ), end`)}}renderRequestOnDebounce(t){const e=`${this.toLog()}.renderRequestOnDebounce()`;"HTML"!==a()(this.root).offsetParent().get()[0]?.tagName?(this.requestedRenderLevel=M.None,this.viewSyncer.sync(e,(async()=>{await this.renderInt(t)}))):C._package.logger.warning(`${e}, $(this.root).offsetParent() is the 'HTML' tag.`)}_lastWidth;_lastHeight;sliderOnValuesChanged(t){try{const t={minRange:this.slider.minRange,min:this.slider.min,max:this.slider.max,maxRange:this.slider.maxRange};if(this.canvas&&this.canvas.offsetWidth>0&&(this._positionWidthWithMargin??0)>0){const e=t.max-t.min,n=this.canvas.offsetWidth/e-this.positionMarginValue;A(n,this.positionWidth,.1)?this.render(M.Layout,"sliderOnValuesChanged"):this.getProperty(v.positionWidth)?.set(this,n)}}catch(t){const e=p(t);C._package.logger.error(`${this.toLog()}.sliderOnValuesChanged() error:\n`+e)}}dataFrameFilterOnChanged(t){C._package.logger.debug(`${this.toLog()}.dataFrameFilterChanged()`);try{this.filterSource===d.lT.Filtered&&this.render(M.Freqs,"dataFrameFilterOnChanged")}catch(t){const e=p(t);C._package.logger.error(`${this.toLog()}.dataFrameFilterOnChanged() error:\n`+e)}}dataFrameSelectionOnChanged(t){C._package.logger.debug(`${this.toLog()}.dataFrameSelectionOnChanged()`);try{this.filterSource===d.lT.Selected&&this.render(M.Freqs,"dataFrameSelectionOnChanged")}catch(t){const e=p(t);C._package.logger.error(`${this.toLog()}.dataFrameSelectionOnChanged() error:\n`+e)}}canvasOnMouseMove(t){if(!this.monomerLib||!this.seqHandler)return;const e=window.devicePixelRatio;try{const n=t,i=this.canvas.getCursorPosition(n,e),[s,a]=this.getMonomer(i,e),l=this.showPositionLabels?12*e:0;if(null!==s&&null===a&&0<=i.y&&i.y<=l){const t=[r.divText(`Position ${s.label}`)];if(this.valueAggrType===o.AGG.TOTAL_COUNT){const e=this.seqHandler.defaultBiotype;t.push(s.buildCompositionTable(e,this.monomerLib))}const e=r.divV(t);e.style.maxHeight="80vh",r.tooltip.show(e,n.x+16,n.y+16)}else if(null!==s&&a&&this.dataFrame&&this.seqCol&&this.seqHandler){const t=s.getFreq(a),e=[r.div(`${a}`),r.div(`${t.rowCount} rows`)];this.valueAggrType!==o.AGG.TOTAL_COUNT&&e.push(r.div(`${this.valueAggrType}: ${t.value.toFixed(3)}`));const i=r.divV(e);r.tooltip.show(i,n.x+16,n.y+16)}else r.tooltip.hide()}catch(t){const e=p(t);C._package.logger.error(`${this.toLog()}.canvasOnMouseMove() error:\n`+e)}}canvasOnMouseDown(t){try{const e=t,n=window.devicePixelRatio,[i,r]=this.getMonomer(this.canvas.getCursorPosition(e,n),n);if(null!==i&&null!==r&&this.dataFrame&&this.seqCol&&this.seqHandler){const t=o.BitSet.create(this.dataFrame.selection.length,(t=>function(t,e,n,i,r,o){const s=e.getSplitted(i),a=o.pos<s.length?s.getCanonical(o.pos):null;return null!==a&&a===r}(this.dataFrame,this.seqHandler,this.getFilter(),t,r,i)));this.dataFrame.selection.init((e=>t.get(e)))}}catch(t){const e=p(t);C._package.logger.error(`${this.toLog()}.canvasOnMouseDown() error:\n`+e)}}canvasOnWheel(t){const e=window.devicePixelRatio;try{if(!this.visibleSlider)return;const n=this.canvas.width/(this._positionWidthWithMargin*e),i=t.deltaY/100*Math.max(Math.floor(n/5),1);this.slider.scrollBy(this.slider.min+i)}catch(t){const e=p(t);C._package.logger.error(`${this.toLog()}.canvasOnWheel() error:\n`+e)}}_onRendered=new h.Subject;get onRendered(){return this._onRendered}invalidate(t){const e=`invalidate(${t?` <- ${t} `:""})`,n=`${this.toLog()}.${e}`;this.render(M.None,e),this.viewSyncer.sync(`${n}`,(async()=>{this._onRendered.next()}))}async awaitRendered(t=5e3){await(0,m.PE)(this.onRendered,(()=>{}),(()=>{this.invalidate()}),t);const e=this.viewSyncer.resetErrors();if(e.length>0)throw e[0]}}},1687:(t,e,n)=>{"use strict";n.d(e,{_i:()=>x});var i=n(7389),r=n(6082),o=n(4328),s=n(1991),a=n.n(s),l=n(1858),c=n(2003),h=n(8070),u=n(7602),d=n(8115),p=n(4574),m=n(1757),f=n.n(m),g=n(9124),y=n(9192),b=n(4870),v=n(6766);class w extends p.O{seqHelper;emptyProps=new p.n("",void 0,v._package.logger);helmEditor;_filterPanel=i.div("",{style:{cursor:"pointer"}});logger;static viewerCounter=-1;viewerId=++w.viewerCounter;viewerToLog(){return`HelmBioFilter<${this.viewerId}>`}get type(){return"HelmBioFilter"}constructor(t){super(),this.seqHelper=t,this.logger=v._package.logger}viewSubs=[];async detach(){await super.detach();for(const t of this.viewSubs)t.unsubscribe()}async attach(){this.viewerToLog();try{const t=await(0,g.b2)();let e,n;this.helmEditor=t.createHelmWebEditor(),this.logger.warning("TEST: HelmBioFilter.init().sync() waitForElementInDom waiting..."),await i.tools.waitForElementInDom(this._filterPanel),this.logger.warning("TEST: HelmBioFilter.init().sync() waitForElementInDom ready"),this.updateFilterPanel(),this.viewSubs.push((0,l.fromEvent)(this._filterPanel,"click").subscribe((()=>{e=i.div(),n=t.createWebEditorApp(e,this.props.substructure),i.dialog({showHeader:!1,showFooter:!0}).add(e).onOK((()=>{try{const t=n.canvas.getHelm(!0).replace(/<\/span>/g,"").replace(/<span style='background:#bbf;'>/g,"");this.props=new p.n(t,void 0,v._package.logger)}catch(t){this.logger.error(t)}finally{f()(e).empty(),e=null,n=null}})).onCancel((()=>{f()(e).empty(),e=null,n=null})).show({modal:!0,fullScreen:!0})}))),this.viewSubs.push(i.onSizeChanged(this._filterPanel).subscribe((t=>{try{if(n){const t=n.canvas.getHelm(!0).replace(/<\/span>/g,"").replace(/<span style='background:#bbf;'>/g,"");this.updateFilterPanel(t)}}catch(t){const[e,n]=(0,y.AP)(t);this.logger.error(e,void 0,n)}})))}catch(t){const[e,n]=(0,y.AP)(t),r=this._filterPanel;r.innerText="error",r.classList.add("d4-error"),i.tooltip.bind(r,e)}}applyProps(){this.helmEditor&&this.updateFilterPanel(this.props.substructure)}get filterPanel(){return this._filterPanel}updateFilterPanel(t){if(!this.helmEditor)throw new Error("helmEditor is not created, the filter is not in dom yet");const e=this._filterPanel.parentElement.clientWidth<100?100:this._filterPanel.parentElement.clientWidth,n=e/2;if(t)(0,b.Ku)(this._filterPanel,this.helmEditor.host),this.helmEditor.editor.setHelm(t),this.helmEditor.resizeEditor(e,n);else{const t=i.divText("Click to edit","helm-substructure-filter");(0,b.Ku)(this._filterPanel,t)}}async substructureSearch(t){const e=`${this.viewerToLog()}.substructureSearch( column = <${t.name}> )`;v._package.logger.debug(`${e}, start`);try{return await(0,h.cb)(10),await(0,d.if)(this.props.substructure,t,this.seqHelper)}finally{v._package.logger.debug(`${e}, end`)}}}const C="bio-substructure-filter";class A{props;filterId;dataFrameId;columnName;bitset;constructor(t,e,n,i,r){this.props=t,this.filterId=e,this.dataFrameId=n,this.columnName=i,this.bitset=r}}class S extends p.n{separator;constructor(t,e,n){super(t,!1,n),this.separator=e,this.readOnly=!0}}class x extends r.Filter{seqHelper;logger;bioFilter=null;bitset=null;loader;notation=void 0;filterSyncer;get calculating(){return"initial"==this.loader.style.display}set calculating(t){this.loader.style.display=t?"initial":"none"}get filterSummary(){return this.bioFilter.filterSummary}get isFiltering(){return super.isFiltering&&(this.bioFilter?.isFiltering??!1)}get isReadyToApplyFilter(){return!this.calculating&&null!=this.bitset}get debounceTime(){if(null==this.column)return 1e3;const t=this.column.length;return t<500?0:t>1e4?1e3:Math.floor((t-500)/9500*1e3)}constructor(t,e){super(),this.seqHelper=t,this.logger=e,this.root=i.divV([]),this.loader=i.loader(),this.calculating=!1,this.filterSyncer=new u.g(this.logger)}static filterCounter=-1;filterId=++x.filterCounter;filterToLog(){return`BioSubstructureFilter<${this.filterId}>`}viewSubs=[];attach(t){const e=super.attach.bind(this),n=`${this.filterToLog()}.attach()`;this.filterSyncer.sync(n,(async()=>{e(t),this.column||(this.columnName?this.column=this.dataFrame.getCol(this.columnName):this.column=t.columns.bySemType(r.SEMTYPE.MACROMOLECULE)),this.seqHelper.getSeqHandler(this.column),this.columnName??=this.column?.name,this.notation??=this.column?.meta.units,this.bioFilter=this.notation===c.Hi.FASTA?new E:this.notation===c.Hi.SEPARATOR?new M(this.column.getTag(c.gp.separator)):new w(this.seqHelper),this.root.appendChild(this.bioFilter.filterPanel),this.root.appendChild(this.loader),await this.bioFilter.attach(),this.viewSubs.push(r.debounce(this.bioFilter.onChanged,this.debounceTime).subscribe(this.bioFilterOnChangedDebounced.bind(this))),this.viewSubs.push(o.events.onResetFilterRequest.subscribe(this.grokEventsOnResetFilterRequest.bind(this))),this.viewSubs.push(o.events.onCustomEvent(C).subscribe(this.filterOnSync.bind(this)))}))}detach(){const t=super.detach.bind(this),e=`${this.filterToLog()}.detach()`;this.filterSyncer.sync(e,(async()=>{for(const t of this.viewSubs)t.unsubscribe();this.viewSubs=[],t(),this.bioFilter&&this.bioFilter.detach(),this.bioFilter=null}))}filterOnSync(t){t.filterId!==this.filterId&&t.dataFrameId===this.dataFrame.id&&t.columnName===this.columnName&&(this.bioFilter.props=t.props)}applyFilter(){const t=`${this.filterToLog()}.applyFilter()`;this.logger.debug(`${t}, IN`),this.bitset&&!this.isDetached&&this.dataFrame?.filter.and(this.bitset)}saveState(){const t=`${this.filterToLog()}.saveState()`,e=super.saveState();return this.logger.debug(`${t}, super.state = ${JSON.stringify(e)}`),e.props=this.bioFilter.saveProps(),e}applyState(t){const e=`${this.filterToLog()}.applyState()`;super.applyState(t),this.filterSyncer.sync(e,(async()=>{t.props&&this.bioFilter&&(this.bioFilter.props=r.toJs(t.props??{}))}))}fireFilterSync(){const t=`${this.filterToLog()}.fireFilterSync()`;this.logger.debug(`${t}, bioFilter = ${this.bioFilter?this.bioFilter.constructor.name:"null"}`+(this.bioFilter?`, props = ${JSON.stringify(this.bioFilter.saveProps())}`:"")),o.events.fireCustomEvent(C,new A(this.bioFilter.props,this.filterId,this.dataFrame.id,this.columnName,this.bitset))}bioFilterOnChangedDebounced(){if(!this.dataFrame)return;const t=`${this.filterToLog()}.bioFilterOnChangedDebounced()`;if(this.logger.debug(`${t}, start, isFiltering = ${this.isFiltering}, props = ${JSON.stringify(this.bioFilter.saveProps())}`),!this.isFiltering)return this.bitset=null,void this.dataFrame.rows.requestFilter();a()(this.dataFrame.rows.filters).has(`${this.columnName}: ${this.filterSummary}`)||this.filterSyncer.sync(t,(async()=>{this.calculating=!0;try{this.logger.debug(`${t}, before substructureSearch`),this.bitset=await(this.bioFilter?.substructureSearch(this.column)),this.logger.debug(`${t}, after substructureSearch`),this.calculating=!1,this.fireFilterSync(),this.dataFrame?.rows.requestFilter()}finally{this.calculating=!1,this.logger.debug(`${t}, end`)}}))}grokEventsOnResetFilterRequest(){const t=`${this.filterToLog()}.grokEventsOnResetFilterRequest()`;this.logger.debug(`${t}`),this.bioFilter?.resetFilter()}_onRendered=new l.Subject;get onRendered(){return this._onRendered}invalidate(t){const e=`${this.filterToLog()}.invalidate(${t?` <- ${t} `:""})`;this.filterSyncer.sync(e,(async()=>{this._onRendered.next()}))}async awaitRendered(t=1e4){const e=`awaitRendered( ${t} )`,n=`${this.filterToLog()}.${e}`;await(0,h.cb)(10),await(0,h.PE)(this.onRendered,(()=>{this.logger.debug(`${n}, _onRendered event caught`)}),(()=>{this.invalidate(e)}),t,`${n} timeout`);const i=this.filterSyncer.resetErrors();if(i.length>0)throw i[0]}}class E extends p.O{emptyProps=new p.n("",void 0,v._package.logger);substructureInput;get type(){return"FastaBioFilter"}constructor(){super(),this.substructureInput=i.input.string("",{value:"",onValueChanged:t=>{window.setTimeout((()=>{this.props=new p.n(t,void 0,v._package.logger),this._propsChanging||this.onChanged.next()}),0)},placeholder:"Substructure"})}applyProps(){this.substructureInput.value!==this.props.substructure&&(this.substructureInput.value=this.props.substructure)}get filterPanel(){return this.substructureInput.root}get isFiltering(){return""!==this.substructureInput.value}async substructureSearch(t){return(0,d.nI)(this.props.substructure,t)}async attach(){}async detach(){await super.detach()}}class M extends p.O{emptyProps=new S("",void 0,v._package.logger);substructureInput;separatorInput;colSeparator="";get type(){return"SeparatorBioFilter"}constructor(t){super(),this.substructureInput=i.input.string("",{value:"",onValueChanged:t=>{this.props=new S(t,this.props.separator,v._package.logger),setTimeout((()=>{this._propsChanging||this.onChanged.next()}))},placeholder:"Substructure"}),this.separatorInput=i.input.string("",{value:this.colSeparator=t,onValueChanged:t=>{const e=t||"";this.props=new S(this.props.substructure,e,v._package.logger),setTimeout((()=>{this._propsChanging||this.onChanged.next()}))},placeholder:"Separator"})}applyProps(){this.substructureInput.value!==this.props.substructure&&(this.substructureInput.value=this.props.substructure);const t=this.props.separator??this.colSeparator;this.separatorInput.value!==t&&(this.separatorInput.value=t)}get filterSummary(){return this.props.separator?this.props.separator:this.colSeparator,`${this.props.substructure}, {sep}`}get isFiltering(){return""!==this.props.substructure}resetFilter(){this.props=new S("",void 0,v._package.logger)}get filterPanel(){return i.divV([this.substructureInput.root,this.separatorInput.root])}get substructure(){return this.separatorInput.value&&this.separatorInput.value!==this.colSeparator?this.substructureInput.value.replaceAll(this.separatorInput.value,this.colSeparator):this.substructureInput.value}set substructure(t){this.substructureInput.value=t}async substructureSearch(t){return(0,d.nI)(this.substructure,t,this.colSeparator)}async attach(){}async detach(){await super.detach()}}},2174:(t,e,n)=>{"use strict";n.d(e,{F:()=>E,j:()=>x});var i=n(7389),r=n(6082),o=n(1991),s=n.n(o),a=n(2003),l=n(439),c=n(3599),h=n(5072),u=n.n(h),d=n(7825),p=n.n(d),m=n(7659),f=n.n(m),g=n(5056),y=n.n(g),b=n(540),v=n.n(b),w=n(1113),C=n.n(w),A=n(5999),S={};function x(t,e,n){const o=i.div();o.classList.add("macromolecule-cell-comp-analysis-host");const l=t.cell.column.tags[a.gp.alphabet],h=l===a.YI.DNA||l===a.YI.RNA?c.o.NUCLEOTIDE:c.o.AA,u={},d=n.getSeqHandler(t.cell.column),p=t.cell.rowIndex,m=d.getSplitted(p);s().count(0).take(m.length).filter((t=>!m.isGap(t))).forEach((t=>{let e=m.getCanonical(t);h===c.o.NUCLEOTIDE&&d.isHelm()&&"("===e[1]&&")"===e[e.length-2]&&(e=e.substring(2,e.length-2));const n=u[e]||0;u[e]=n+1}));const f=E(u,h,e);return Array.from(f.rows).forEach((t=>{const e=t.getElementsByClassName("macromolecule-cell-comp-analysis-bar")[0].style.backgroundColor;t.cells[0].style.color=e})),o.appendChild(f),new r.Widget(o)}function E(t,e,n){let o=0,s=null;for(const e of Object.values(t))o+=e,s=null===s?e:Math.max(s,e);const a=s/o,c=Object.assign({},...Array.from(Object.entries(t)).sort(((t,e)=>e[1]-t[1])).map((([t,s])=>{const c=s/o,h=n.getWebEditorMonomer(e,t).backgroundcolor,u=i.div("",{classes:"macromolecule-cell-comp-analysis-bar"});u.style.width=50*c/a+"px",u.style.backgroundColor=h,l._S===t&&(u.style.borderWidth="1px",u.style.borderStyle="solid",u.style.borderColor=r.Color.toHtml(r.Color.lightGray));const d=l._S===t?"-":t,p=i.div(`${(100*c).toFixed(2)}%`),m=i.div([u,p],{classes:"macromolecule-cell-comp-analysis-value"});return{[d]:m}}))),h=i.tableFromMap(c);return Array.from(h.rows).forEach((t=>{const e=t.getElementsByClassName("macromolecule-cell-comp-analysis-bar")[0].style.backgroundColor;t.cells[0].style.color=e})),h}S.styleTagTransform=C(),S.setAttributes=y(),S.insert=f().bind(null,"head"),S.domAPI=p(),S.insertStyleElement=v(),u()(A.A,S),A.A&&A.A.locals&&A.A.locals},1757:t=>{"use strict";t.exports=$},6082:t=>{"use strict";t.exports=DG},4328:t=>{"use strict";t.exports=grok},1858:t=>{"use strict";t.exports=rxjs},9713:t=>{"use strict";t.exports=rxjs.operators},7389:t=>{"use strict";t.exports=ui},1991:t=>{"use strict";t.exports=wu},8343:(t,e,n)=>{"use strict";const{normalizeIPv6:i,normalizeIPv4:r,removeDotSegments:o,recomposeAuthority:s,normalizeComponentEncoding:a}=n(4834),l=n(343);function c(t,e,n,i){const r={};return i||(t=p(h(t,n),n),e=p(h(e,n),n)),!(n=n||{}).tolerant&&e.scheme?(r.scheme=e.scheme,r.userinfo=e.userinfo,r.host=e.host,r.port=e.port,r.path=o(e.path||""),r.query=e.query):(void 0!==e.userinfo||void 0!==e.host||void 0!==e.port?(r.userinfo=e.userinfo,r.host=e.host,r.port=e.port,r.path=o(e.path||""),r.query=e.query):(e.path?("/"===e.path.charAt(0)?r.path=o(e.path):(void 0===t.userinfo&&void 0===t.host&&void 0===t.port||t.path?t.path?r.path=t.path.slice(0,t.path.lastIndexOf("/")+1)+e.path:r.path=e.path:r.path="/"+e.path,r.path=o(r.path)),r.query=e.query):(r.path=t.path,void 0!==e.query?r.query=e.query:r.query=t.query),r.userinfo=t.userinfo,r.host=t.host,r.port=t.port),r.scheme=t.scheme),r.fragment=e.fragment,r}function h(t,e){const n={host:t.host,scheme:t.scheme,userinfo:t.userinfo,port:t.port,path:t.path,query:t.query,nid:t.nid,nss:t.nss,uuid:t.uuid,fragment:t.fragment,reference:t.reference,resourceName:t.resourceName,secure:t.secure,error:""},i=Object.assign({},e),r=[],a=l[(i.scheme||n.scheme||"").toLowerCase()];a&&a.serialize&&a.serialize(n,i),void 0!==n.path&&(i.skipEscape?n.path=unescape(n.path):(n.path=escape(n.path),void 0!==n.scheme&&(n.path=n.path.split("%3A").join(":")))),"suffix"!==i.reference&&n.scheme&&r.push(n.scheme,":");const c=s(n);if(void 0!==c&&("suffix"!==i.reference&&r.push("//"),r.push(c),n.path&&"/"!==n.path.charAt(0)&&r.push("/")),void 0!==n.path){let t=n.path;i.absolutePath||a&&a.absolutePath||(t=o(t)),void 0===c&&(t=t.replace(/^\/\//u,"/%2F")),r.push(t)}return void 0!==n.query&&r.push("?",n.query),void 0!==n.fragment&&r.push("#",n.fragment),r.join("")}const u=Array.from({length:127},((t,e)=>/[^!"$&'()*+,\-.;=_`a-z{}~]/u.test(String.fromCharCode(e)))),d=/^(?:([^#/:?]+):)?(?:\/\/((?:([^#/?@]*)@)?(\[[^#/?\]]+\]|[^#/:?]*)(?::(\d*))?))?([^#?]*)(?:\?([^#]*))?(?:#((?:.|[\n\r])*))?/u;function p(t,e){const n=Object.assign({},e),o={scheme:void 0,userinfo:void 0,host:"",port:void 0,path:"",query:void 0,fragment:void 0},s=-1!==t.indexOf("%");let a=!1;"suffix"===n.reference&&(t=(n.scheme?n.scheme+":":"")+"//"+t);const c=t.match(d);if(c){if(o.scheme=c[1],o.userinfo=c[3],o.host=c[4],o.port=parseInt(c[5],10),o.path=c[6]||"",o.query=c[7],o.fragment=c[8],isNaN(o.port)&&(o.port=c[5]),o.host){const t=r(o.host);if(!1===t.isIPV4){const e=i(t.host);o.host=e.host.toLowerCase(),a=e.isIPV6}else o.host=t.host,a=!0}void 0!==o.scheme||void 0!==o.userinfo||void 0!==o.host||void 0!==o.port||void 0!==o.query||o.path?void 0===o.scheme?o.reference="relative":void 0===o.fragment?o.reference="absolute":o.reference="uri":o.reference="same-document",n.reference&&"suffix"!==n.reference&&n.reference!==o.reference&&(o.error=o.error||"URI is not a "+n.reference+" reference.");const t=l[(n.scheme||o.scheme||"").toLowerCase()];if(!(n.unicodeSupport||t&&t.unicodeSupport)&&o.host&&(n.domainHost||t&&t.domainHost)&&!1===a&&function(t){let e=0;for(let n=0,i=t.length;n<i;++n)if(e=t.charCodeAt(n),e>126||u[e])return!0;return!1}(o.host))try{o.host=URL.domainToASCII(o.host.toLowerCase())}catch(t){o.error=o.error||"Host's domain name can not be converted to ASCII: "+t}(!t||t&&!t.skipNormalize)&&(s&&void 0!==o.scheme&&(o.scheme=unescape(o.scheme)),s&&void 0!==o.host&&(o.host=unescape(o.host)),o.path&&(o.path=escape(unescape(o.path))),o.fragment&&(o.fragment=encodeURI(decodeURIComponent(o.fragment)))),t&&t.parse&&t.parse(o,n)}else o.error=o.error||"URI can not be parsed.";return o}const m={SCHEMES:l,normalize:function(t,e){return"string"==typeof t?t=h(p(t,e),e):"object"==typeof t&&(t=p(h(t,e),e)),t},resolve:function(t,e,n){const i=Object.assign({scheme:"null"},n);return h(c(p(t,i),p(e,i),i,!0),{...i,skipEscape:!0})},resolveComponents:c,equal:function(t,e,n){return"string"==typeof t?(t=unescape(t),t=h(a(p(t,n),!0),{...n,skipEscape:!0})):"object"==typeof t&&(t=h(a(t,!0),{...n,skipEscape:!0})),"string"==typeof e?(e=unescape(e),e=h(a(p(e,n),!0),{...n,skipEscape:!0})):"object"==typeof e&&(e=h(a(e,!0),{...n,skipEscape:!0})),t.toLowerCase()===e.toLowerCase()},serialize:h,parse:p};t.exports=m,t.exports.default=m,t.exports.fastUri=m},343:t=>{"use strict";const e=/^[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}$/iu,n=/([\da-z][\d\-a-z]{0,31}):((?:[\w!$'()*+,\-.:;=@]|%[\da-f]{2})+)/iu;function i(t){return"boolean"==typeof t.secure?t.secure:"wss"===String(t.scheme).toLowerCase()}function r(t){return t.host||(t.error=t.error||"HTTP URIs must have a host."),t}function o(t){const e="https"===String(t.scheme).toLowerCase();return t.port!==(e?443:80)&&""!==t.port||(t.port=void 0),t.path||(t.path="/"),t}const s={scheme:"http",domainHost:!0,parse:r,serialize:o},a={scheme:"ws",domainHost:!0,parse:function(t){return t.secure=i(t),t.resourceName=(t.path||"/")+(t.query?"?"+t.query:""),t.path=void 0,t.query=void 0,t},serialize:function(t){if(t.port!==(i(t)?443:80)&&""!==t.port||(t.port=void 0),"boolean"==typeof t.secure&&(t.scheme=t.secure?"wss":"ws",t.secure=void 0),t.resourceName){const[e,n]=t.resourceName.split("?");t.path=e&&"/"!==e?e:void 0,t.query=n,t.resourceName=void 0}return t.fragment=void 0,t}},l={http:s,https:{scheme:"https",domainHost:s.domainHost,parse:r,serialize:o},ws:a,wss:{scheme:"wss",domainHost:a.domainHost,parse:a.parse,serialize:a.serialize},urn:{scheme:"urn",parse:function(t,e){if(!t.path)return t.error="URN can not be parsed",t;const i=t.path.match(n);if(i){const n=e.scheme||t.scheme||"urn";t.nid=i[1].toLowerCase(),t.nss=i[2];const r=`${n}:${e.nid||t.nid}`,o=l[r];t.path=void 0,o&&(t=o.parse(t,e))}else t.error=t.error||"URN can not be parsed.";return t},serialize:function(t,e){const n=e.scheme||t.scheme||"urn",i=t.nid.toLowerCase(),r=`${n}:${e.nid||i}`,o=l[r];o&&(t=o.serialize(t,e));const s=t,a=t.nss;return s.path=`${i||e.nid}:${a}`,e.skipEscape=!0,s},skipNormalize:!0},"urn:uuid":{scheme:"urn:uuid",parse:function(t,n){const i=t;return i.uuid=i.nss,i.nss=void 0,n.tolerant||i.uuid&&e.test(i.uuid)||(i.error=i.error||"UUID is not valid."),i},serialize:function(t){const e=t;return e.nss=(t.uuid||"").toLowerCase(),e},skipNormalize:!0}};t.exports=l},4914:t=>{"use strict";t.exports={HEX:{0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,a:10,A:10,b:11,B:11,c:12,C:12,d:13,D:13,e:14,E:14,f:15,F:15}}},4834:(t,e,n)=>{"use strict";const{HEX:i}=n(4914),r=/^(?:(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)$/u;function o(t){if(c(t,".")<3)return{host:t,isIPV4:!1};const e=t.match(r)||[],[n]=e;return n?{host:l(n,"."),isIPV4:!0}:{host:t,isIPV4:!1}}function s(t,e=!1){let n="",r=!0;for(const e of t){if(void 0===i[e])return;"0"!==e&&!0===r&&(r=!1),r||(n+=e)}return e&&0===n.length&&(n="0"),n}function a(t){if(c(t,":")<2)return{host:t,isIPV6:!1};const e=function(t){let e=0;const n={error:!1,address:"",zone:""},i=[],r=[];let o=!1,a=!1,l=!1;function c(){if(r.length){if(!1===o){const t=s(r);if(void 0===t)return n.error=!0,!1;i.push(t)}r.length=0}return!0}for(let s=0;s<t.length;s++){const h=t[s];if("["!==h&&"]"!==h)if(":"!==h)if("%"===h){if(!c())break;o=!0}else r.push(h);else{if(!0===a&&(l=!0),!c())break;if(e++,i.push(":"),e>7){n.error=!0;break}s-1>=0&&":"===t[s-1]&&(a=!0)}}return r.length&&(o?n.zone=r.join(""):l?i.push(r.join("")):i.push(s(r))),n.address=i.join(""),n}(t);if(e.error)return{host:t,isIPV6:!1};{let t=e.address,n=e.address;return e.zone&&(t+="%"+e.zone,n+="%25"+e.zone),{host:t,escapedHost:n,isIPV6:!0}}}function l(t,e){let n="",i=!0;const r=t.length;for(let o=0;o<r;o++){const s=t[o];"0"===s&&i?(o+1<=r&&t[o+1]===e||o+1===r)&&(n+=s,i=!1):(i=s===e,n+=s)}return n}function c(t,e){let n=0;for(let i=0;i<t.length;i++)t[i]===e&&n++;return n}const h=/^\.\.?\//u,u=/^\/\.(?:\/|$)/u,d=/^\/\.\.(?:\/|$)/u,p=/^\/?(?:.|\n)*?(?=\/|$)/u;t.exports={recomposeAuthority:function(t){const e=[];if(void 0!==t.userinfo&&(e.push(t.userinfo),e.push("@")),void 0!==t.host){let n=unescape(t.host);const i=o(n);if(i.isIPV4)n=i.host;else{const e=a(i.host);n=!0===e.isIPV6?`[${e.escapedHost}]`:t.host}e.push(n)}return"number"!=typeof t.port&&"string"!=typeof t.port||(e.push(":"),e.push(String(t.port))),e.length?e.join(""):void 0},normalizeComponentEncoding:function(t,e){const n=!0!==e?escape:unescape;return void 0!==t.scheme&&(t.scheme=n(t.scheme)),void 0!==t.userinfo&&(t.userinfo=n(t.userinfo)),void 0!==t.host&&(t.host=n(t.host)),void 0!==t.path&&(t.path=n(t.path)),void 0!==t.query&&(t.query=n(t.query)),void 0!==t.fragment&&(t.fragment=n(t.fragment)),t},removeDotSegments:function(t){const e=[];for(;t.length;)if(t.match(h))t=t.replace(h,"");else if(t.match(u))t=t.replace(u,"/");else if(t.match(d))t=t.replace(d,"/"),e.pop();else if("."===t||".."===t)t="";else{const n=t.match(p);if(!n)throw new Error("Unexpected dot segment condition");{const i=n[0];t=t.slice(i.length),e.push(i)}}return e.join("")},normalizeIPv4:o,normalizeIPv6:a,stringArrayToHexStripped:s}},3837:t=>{"use strict";t.exports=JSON.parse('{"$id":"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#","description":"Meta-schema for $data reference (JSON AnySchema extension proposal)","type":"object","required":["$data"],"properties":{"$data":{"type":"string","anyOf":[{"format":"relative-json-pointer"},{"format":"json-pointer"}]}},"additionalProperties":false}')},7216:t=>{"use strict";t.exports=JSON.parse('{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://json-schema.org/draft/2020-12/meta/applicator","$vocabulary":{"https://json-schema.org/draft/2020-12/vocab/applicator":true},"$dynamicAnchor":"meta","title":"Applicator vocabulary meta-schema","type":["object","boolean"],"properties":{"prefixItems":{"$ref":"#/$defs/schemaArray"},"items":{"$dynamicRef":"#meta"},"contains":{"$dynamicRef":"#meta"},"additionalProperties":{"$dynamicRef":"#meta"},"properties":{"type":"object","additionalProperties":{"$dynamicRef":"#meta"},"default":{}},"patternProperties":{"type":"object","additionalProperties":{"$dynamicRef":"#meta"},"propertyNames":{"format":"regex"},"default":{}},"dependentSchemas":{"type":"object","additionalProperties":{"$dynamicRef":"#meta"},"default":{}},"propertyNames":{"$dynamicRef":"#meta"},"if":{"$dynamicRef":"#meta"},"then":{"$dynamicRef":"#meta"},"else":{"$dynamicRef":"#meta"},"allOf":{"$ref":"#/$defs/schemaArray"},"anyOf":{"$ref":"#/$defs/schemaArray"},"oneOf":{"$ref":"#/$defs/schemaArray"},"not":{"$dynamicRef":"#meta"}},"$defs":{"schemaArray":{"type":"array","minItems":1,"items":{"$dynamicRef":"#meta"}}}}')},8226:t=>{"use strict";t.exports=JSON.parse('{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://json-schema.org/draft/2020-12/meta/content","$vocabulary":{"https://json-schema.org/draft/2020-12/vocab/content":true},"$dynamicAnchor":"meta","title":"Content vocabulary meta-schema","type":["object","boolean"],"properties":{"contentEncoding":{"type":"string"},"contentMediaType":{"type":"string"},"contentSchema":{"$dynamicRef":"#meta"}}}')},518:t=>{"use strict";t.exports=JSON.parse('{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://json-schema.org/draft/2020-12/meta/core","$vocabulary":{"https://json-schema.org/draft/2020-12/vocab/core":true},"$dynamicAnchor":"meta","title":"Core vocabulary meta-schema","type":["object","boolean"],"properties":{"$id":{"$ref":"#/$defs/uriReferenceString","$comment":"Non-empty fragments not allowed.","pattern":"^[^#]*#?$"},"$schema":{"$ref":"#/$defs/uriString"},"$ref":{"$ref":"#/$defs/uriReferenceString"},"$anchor":{"$ref":"#/$defs/anchorString"},"$dynamicRef":{"$ref":"#/$defs/uriReferenceString"},"$dynamicAnchor":{"$ref":"#/$defs/anchorString"},"$vocabulary":{"type":"object","propertyNames":{"$ref":"#/$defs/uriString"},"additionalProperties":{"type":"boolean"}},"$comment":{"type":"string"},"$defs":{"type":"object","additionalProperties":{"$dynamicRef":"#meta"}}},"$defs":{"anchorString":{"type":"string","pattern":"^[A-Za-z_][-A-Za-z0-9._]*$"},"uriString":{"type":"string","format":"uri"},"uriReferenceString":{"type":"string","format":"uri-reference"}}}')},4588:t=>{"use strict";t.exports=JSON.parse('{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://json-schema.org/draft/2020-12/meta/format-annotation","$vocabulary":{"https://json-schema.org/draft/2020-12/vocab/format-annotation":true},"$dynamicAnchor":"meta","title":"Format vocabulary meta-schema for annotation results","type":["object","boolean"],"properties":{"format":{"type":"string"}}}')},5707:t=>{"use strict";t.exports=JSON.parse('{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://json-schema.org/draft/2020-12/meta/meta-data","$vocabulary":{"https://json-schema.org/draft/2020-12/vocab/meta-data":true},"$dynamicAnchor":"meta","title":"Meta-data vocabulary meta-schema","type":["object","boolean"],"properties":{"title":{"type":"string"},"description":{"type":"string"},"default":true,"deprecated":{"type":"boolean","default":false},"readOnly":{"type":"boolean","default":false},"writeOnly":{"type":"boolean","default":false},"examples":{"type":"array","items":true}}}')},9547:t=>{"use strict";t.exports=JSON.parse('{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://json-schema.org/draft/2020-12/meta/unevaluated","$vocabulary":{"https://json-schema.org/draft/2020-12/vocab/unevaluated":true},"$dynamicAnchor":"meta","title":"Unevaluated applicator vocabulary meta-schema","type":["object","boolean"],"properties":{"unevaluatedItems":{"$dynamicRef":"#meta"},"unevaluatedProperties":{"$dynamicRef":"#meta"}}}')},7082:t=>{"use strict";t.exports=JSON.parse('{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://json-schema.org/draft/2020-12/meta/validation","$vocabulary":{"https://json-schema.org/draft/2020-12/vocab/validation":true},"$dynamicAnchor":"meta","title":"Validation vocabulary meta-schema","type":["object","boolean"],"properties":{"type":{"anyOf":[{"$ref":"#/$defs/simpleTypes"},{"type":"array","items":{"$ref":"#/$defs/simpleTypes"},"minItems":1,"uniqueItems":true}]},"const":true,"enum":{"type":"array","items":true},"multipleOf":{"type":"number","exclusiveMinimum":0},"maximum":{"type":"number"},"exclusiveMaximum":{"type":"number"},"minimum":{"type":"number"},"exclusiveMinimum":{"type":"number"},"maxLength":{"$ref":"#/$defs/nonNegativeInteger"},"minLength":{"$ref":"#/$defs/nonNegativeIntegerDefault0"},"pattern":{"type":"string","format":"regex"},"maxItems":{"$ref":"#/$defs/nonNegativeInteger"},"minItems":{"$ref":"#/$defs/nonNegativeIntegerDefault0"},"uniqueItems":{"type":"boolean","default":false},"maxContains":{"$ref":"#/$defs/nonNegativeInteger"},"minContains":{"$ref":"#/$defs/nonNegativeInteger","default":1},"maxProperties":{"$ref":"#/$defs/nonNegativeInteger"},"minProperties":{"$ref":"#/$defs/nonNegativeIntegerDefault0"},"required":{"$ref":"#/$defs/stringArray"},"dependentRequired":{"type":"object","additionalProperties":{"$ref":"#/$defs/stringArray"}}},"$defs":{"nonNegativeInteger":{"type":"integer","minimum":0},"nonNegativeIntegerDefault0":{"$ref":"#/$defs/nonNegativeInteger","default":0},"simpleTypes":{"enum":["array","boolean","integer","null","number","object","string"]},"stringArray":{"type":"array","items":{"type":"string"},"uniqueItems":true,"default":[]}}}')},1678:t=>{"use strict";t.exports=JSON.parse('{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://json-schema.org/draft/2020-12/schema","$vocabulary":{"https://json-schema.org/draft/2020-12/vocab/core":true,"https://json-schema.org/draft/2020-12/vocab/applicator":true,"https://json-schema.org/draft/2020-12/vocab/unevaluated":true,"https://json-schema.org/draft/2020-12/vocab/validation":true,"https://json-schema.org/draft/2020-12/vocab/meta-data":true,"https://json-schema.org/draft/2020-12/vocab/format-annotation":true,"https://json-schema.org/draft/2020-12/vocab/content":true},"$dynamicAnchor":"meta","title":"Core and Validation specifications meta-schema","allOf":[{"$ref":"meta/core"},{"$ref":"meta/applicator"},{"$ref":"meta/unevaluated"},{"$ref":"meta/validation"},{"$ref":"meta/meta-data"},{"$ref":"meta/format-annotation"},{"$ref":"meta/content"}],"type":["object","boolean"],"$comment":"This meta-schema also defines keywords that have appeared in previous drafts in order to prevent incompatible extensions as they remain in common use.","properties":{"definitions":{"$comment":"\\"definitions\\" has been replaced by \\"$defs\\".","type":"object","additionalProperties":{"$dynamicRef":"#meta"},"deprecated":true,"default":{}},"dependencies":{"$comment":"\\"dependencies\\" has been split and replaced by \\"dependentSchemas\\" and \\"dependentRequired\\" in order to serve their differing semantics.","type":"object","additionalProperties":{"anyOf":[{"$dynamicRef":"#meta"},{"$ref":"meta/validation#/$defs/stringArray"}]},"deprecated":true,"default":{}},"$recursiveAnchor":{"$comment":"\\"$recursiveAnchor\\" has been replaced by \\"$dynamicAnchor\\".","$ref":"meta/core#/$defs/anchorString","deprecated":true},"$recursiveRef":{"$comment":"\\"$recursiveRef\\" has been replaced by \\"$dynamicRef\\".","$ref":"meta/core#/$defs/uriReferenceString","deprecated":true}}}')},2079:t=>{"use strict";t.exports=JSON.parse('{"$schema":"http://json-schema.org/draft-07/schema#","$id":"http://json-schema.org/draft-07/schema#","title":"Core schema meta-schema","definitions":{"schemaArray":{"type":"array","minItems":1,"items":{"$ref":"#"}},"nonNegativeInteger":{"type":"integer","minimum":0},"nonNegativeIntegerDefault0":{"allOf":[{"$ref":"#/definitions/nonNegativeInteger"},{"default":0}]},"simpleTypes":{"enum":["array","boolean","integer","null","number","object","string"]},"stringArray":{"type":"array","items":{"type":"string"},"uniqueItems":true,"default":[]}},"type":["object","boolean"],"properties":{"$id":{"type":"string","format":"uri-reference"},"$schema":{"type":"string","format":"uri"},"$ref":{"type":"string","format":"uri-reference"},"$comment":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"default":true,"readOnly":{"type":"boolean","default":false},"examples":{"type":"array","items":true},"multipleOf":{"type":"number","exclusiveMinimum":0},"maximum":{"type":"number"},"exclusiveMaximum":{"type":"number"},"minimum":{"type":"number"},"exclusiveMinimum":{"type":"number"},"maxLength":{"$ref":"#/definitions/nonNegativeInteger"},"minLength":{"$ref":"#/definitions/nonNegativeIntegerDefault0"},"pattern":{"type":"string","format":"regex"},"additionalItems":{"$ref":"#"},"items":{"anyOf":[{"$ref":"#"},{"$ref":"#/definitions/schemaArray"}],"default":true},"maxItems":{"$ref":"#/definitions/nonNegativeInteger"},"minItems":{"$ref":"#/definitions/nonNegativeIntegerDefault0"},"uniqueItems":{"type":"boolean","default":false},"contains":{"$ref":"#"},"maxProperties":{"$ref":"#/definitions/nonNegativeInteger"},"minProperties":{"$ref":"#/definitions/nonNegativeIntegerDefault0"},"required":{"$ref":"#/definitions/stringArray"},"additionalProperties":{"$ref":"#"},"definitions":{"type":"object","additionalProperties":{"$ref":"#"},"default":{}},"properties":{"type":"object","additionalProperties":{"$ref":"#"},"default":{}},"patternProperties":{"type":"object","additionalProperties":{"$ref":"#"},"propertyNames":{"format":"regex"},"default":{}},"dependencies":{"type":"object","additionalProperties":{"anyOf":[{"$ref":"#"},{"$ref":"#/definitions/stringArray"}]}},"propertyNames":{"$ref":"#"},"const":true,"enum":{"type":"array","items":true,"minItems":1,"uniqueItems":true},"type":{"anyOf":[{"$ref":"#/definitions/simpleTypes"},{"type":"array","items":{"$ref":"#/definitions/simpleTypes"},"minItems":1,"uniqueItems":true}]},"format":{"type":"string"},"contentMediaType":{"type":"string"},"contentEncoding":{"type":"string"},"if":{"$ref":"#"},"then":{"$ref":"#"},"else":{"$ref":"#"},"allOf":{"$ref":"#/definitions/schemaArray"},"anyOf":{"$ref":"#/definitions/schemaArray"},"oneOf":{"$ref":"#/definitions/schemaArray"},"not":{"$ref":"#"}},"default":true}')}},e={};function n(i){var r=e[i];if(void 0!==r)return r.exports;var o=e[i]={id:i,loaded:!1,exports:{}};return t[i].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}n.m=t,n.amdO={},n.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var i in e)n.o(e,i)&&!n.o(t,i)&&Object.defineProperty(t,i,{enumerable:!0,get:e[i]})},n.u=t=>t+".js",n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),n.hmd=t=>((t=Object.create(t)).children||(t.children=[]),Object.defineProperty(t,"exports",{enumerable:!0,set:()=>{throw new Error("ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: "+t.id)}}),t),n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},(()=>{var t;n.g.importScripts&&(t=n.g.location+"");var e=n.g.document;if(!t&&e&&(e.currentScript&&"SCRIPT"===e.currentScript.tagName.toUpperCase()&&(t=e.currentScript.src),!t)){var i=e.getElementsByTagName("script");if(i.length)for(var r=i.length-1;r>-1&&(!t||!/^http(s?):/.test(t));)t=i[r--].src}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),n.p=t})(),n.b=document.baseURI||self.location.href,n.nc=void 0;var i=n(6766);bio=i})();
|
|
8
8
|
//# sourceMappingURL=package.js.map
|