spessasynth_lib 4.3.6 → 4.3.7

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.
@@ -1,18 +1,18 @@
1
- function Ht(t,e,A=0){let s=0;for(let a=0;a<e;a++)s=s<<8|t[A+a];return s>>>0}function Nt(t,e){let A=Ht(t,e,t.currentIndex);return t.currentIndex+=e,A}function nA(t,e){let A=new Array(e).fill(0);for(let s=e-1;s>=0;s--)A[s]=t&255,t>>=8;return A}function X(t,e){let A=cs(t,e,t.currentIndex);return t.currentIndex+=e,A}function cs(t,e,A=0){let s=0;for(let a=0;a<e;a++)s|=t[A+a]<<a*8;return s>>>0}function hs(t,e,A){for(let s=0;s<A;s++)t[t.currentIndex++]=e>>s*8&255}function se(t,e){t[t.currentIndex++]=e&255,t[t.currentIndex++]=e>>8}function ge(t,e){hs(t,e,4)}function ls(t,e){let A=e<<8|t;return A>32767?A-65536:A}function Jn(t){return t>127?t-256:t}var ne=class extends Uint8Array{currentIndex=0;slice(t,e){let A=super.slice(t,e);return A.currentIndex=0,A}};function $e(t,e=t.length,A=0){let s="";for(let a=0;a<e;a++){let n=t[A+a];if(n===0)return s;s+=String.fromCharCode(n)}return s}function de(t,e){let A=t.currentIndex;return t.currentIndex+=e,$e(t,e,A)}function et(t,e=!1,A=!1){let s=t.length;e&&s++,A&&s%2!==0&&s++;let a=new ne(s);return Ne(a,t),a}function Ne(t,e,A=0){A>0&&e.length>A&&(e=e.slice(0,A));for(let s=0;s<e.length;s++)t[t.currentIndex++]=e.charCodeAt(s);if(A>e.length)for(let s=0;s<A-e.length;s++)t[t.currentIndex++]=0;return t}function pe(t){let e=0;for(;t;){let A=t[t.currentIndex++];if(e=e<<7|A&127,A>>7!==1)break}return e}function xA(t){let e=[t&127];for(t>>=7;t>0;)e.unshift(t&127|128),t>>=7;return e}function zA(t){t=Math.floor(t);let e=Math.floor(t/60),A=Math.round(t-e*60);return{minutes:e,seconds:A,time:`${e.toString().padStart(2,"0")}:${A.toString().padStart(2,"0")}`}}function js(t){let e="";for(let A=0;A<t.length;A++){let s=t[A].toString(16).padStart(2,"0").toUpperCase();e+=s,A<t.length-1&&(e+=" ")}return e}var d={warn:"color: orange;",unrecognized:"color: red;",info:"color: aqua;",recognized:"color: lime",value:"color: yellow; background-color: black;"},en;(()=>{var t=Uint8Array,e=Uint16Array,A=Int32Array,s=new t([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),a=new t([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),n=new t([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),r=function(x,D){for(var Q=new e(31),T=0;T<31;++T)Q[T]=D+=1<<x[T-1];for(var H=new A(Q[30]),T=1;T<30;++T)for(var z=Q[T];z<Q[T+1];++z)H[z]=z-Q[T]<<5|T;return{b:Q,r:H}},i=r(s,2),o=i.b,I=i.r;o[28]=258,I[258]=28;var l=r(a,0),B=l.b;l.r;var C=new e(32768);for(u=0;u<32768;++u)g=(u&43690)>>1|(u&21845)<<1,g=(g&52428)>>2|(g&13107)<<2,g=(g&61680)>>4|(g&3855)<<4,C[u]=((g&65280)>>8|(g&255)<<8)>>1;var g,u,E=function(x,D,Q){for(var T=x.length,H=0,z=new e(D);H<T;++H)x[H]&&++z[x[H]-1];var j=new e(D);for(H=1;H<D;++H)j[H]=j[H-1]+z[H-1]<<1;var W;if(Q){W=new e(1<<D);var K=15-D;for(H=0;H<T;++H)if(x[H])for(var te=H<<4|x[H],Ae=D-x[H],O=j[x[H]-1]++<<Ae,re=O|(1<<Ae)-1;O<=re;++O)W[C[O]>>K]=te}else for(W=new e(T),H=0;H<T;++H)x[H]&&(W[H]=C[j[x[H]-1]++]>>15-x[H]);return W},S=new t(288);for(u=0;u<144;++u)S[u]=8;var u;for(u=144;u<256;++u)S[u]=9;var u;for(u=256;u<280;++u)S[u]=7;var u;for(u=280;u<288;++u)S[u]=8;var u,k=new t(32);for(u=0;u<32;++u)k[u]=5;var u,w=E(S,9,1),M=E(k,5,1),R=function(x){for(var D=x[0],Q=1;Q<x.length;++Q)x[Q]>D&&(D=x[Q]);return D},v=function(x,D,Q){var T=D/8|0;return(x[T]|x[T+1]<<8)>>(D&7)&Q},N=function(x,D){var Q=D/8|0;return(x[Q]|x[Q+1]<<8|x[Q+2]<<16)>>(D&7)},m=function(x){return(x+7)/8|0},p=function(x,D,Q){return(D==null||D<0)&&(D=0),(Q==null||Q>x.length)&&(Q=x.length),new t(x.subarray(D,Q))},y=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],V=function(x,D,Q){var T=new Error(D||y[x]);if(T.code=x,Error.captureStackTrace&&Error.captureStackTrace(T,V),!Q)throw T;return T},Y=function(x,D,Q,T){var H=x.length,z=T?T.length:0;if(!H||D.f&&!D.l)return Q||new t(0);var j=!Q,W=j||D.i!=2,K=D.i;j&&(Q=new t(H*3));var te=function(Ce){var he=Q.length;if(Ce>he){var xe=new t(Math.max(he*2,Ce));xe.set(Q),Q=xe}},Ae=D.f||0,O=D.p||0,re=D.b||0,me=D.l,Le=D.d,Ee=D.m,Re=D.n,Oe=H*8;do{if(!me){Ae=v(x,O,1);var Bt=v(x,O+1,3);if(O+=3,Bt)if(Bt==1)me=w,Le=M,Ee=9,Re=5;else if(Bt==2){var Et=v(x,O,31)+257,eA=v(x,O+10,15)+4,tA=Et+v(x,O+5,31)+1;O+=14;for(var Je=new t(tA),Qt=new t(19),Fe=0;Fe<eA;++Fe)Qt[n[Fe]]=v(x,O+Fe*3,7);O+=eA*3;for(var Yt=R(Qt),bt=(1<<Yt)-1,UA=E(Qt,Yt,1),Fe=0;Fe<tA;){var qt=UA[v(x,O,bt)];O+=qt&15;var ze=qt>>4;if(ze<16)Je[Fe++]=ze;else{var It=0,dt=0;for(ze==16?(dt=3+v(x,O,3),O+=2,It=Je[Fe-1]):ze==17?(dt=3+v(x,O,7),O+=3):ze==18&&(dt=11+v(x,O,127),O+=7);dt--;)Je[Fe++]=It}}var Rt=Je.subarray(0,Et),Ke=Je.subarray(Et);Ee=R(Rt),Re=R(Ke),me=E(Rt,Ee,1),Le=E(Ke,Re,1)}else V(1);else{var ze=m(O)+4,ut=x[ze-4]|x[ze-3]<<8,tt=ze+ut;if(tt>H){K&&V(0);break}W&&te(re+ut),Q.set(x.subarray(ze,tt),re),D.b=re+=ut,D.p=O=tt*8,D.f=Ae;continue}if(O>Oe){K&&V(0);break}}W&&te(re+131072);for(var F=(1<<Ee)-1,b=(1<<Re)-1,L=O;;L=O){var It=me[N(x,O)&F],_=It>>4;if(O+=It&15,O>Oe){K&&V(0);break}if(It||V(2),_<256)Q[re++]=_;else if(_==256){L=O,me=null;break}else{var ie=_-254;if(_>264){var Fe=_-257,ce=s[Fe];ie=v(x,O,(1<<ce)-1)+o[Fe],O+=ce}var fe=Le[N(x,O)&b],$=fe>>4;fe||V(3),O+=fe&15;var Ke=B[$];if($>3){var ce=a[$];Ke+=N(x,O)&(1<<ce)-1,O+=ce}if(O>Oe){K&&V(0);break}W&&te(re+131072);var Te=re+ie;if(re<Ke){var Me=z-Ke,oe=Math.min(Ke,Te);for(Me+re<0&&V(3);re<oe;++re)Q[re]=T[Me+re]}for(;re<Te;++re)Q[re]=Q[re-Ke]}}D.l=me,D.p=L,D.b=re,D.f=Ae,me&&(Ae=1,D.m=Ee,D.d=Le,D.n=Re)}while(!Ae);return re!=Q.length&&j?p(Q,0,re):Q.subarray(0,re)},q=new t(0);function J(x,D){return Y(x,{i:2},D&&D.out,D&&D.dictionary)}var ee=typeof TextDecoder<"u"&&new TextDecoder;try{ee.decode(q,{stream:!0})}catch{}en=J})();var tn=en,U=class An{header;size;data;constructor(e,A,s){this.header=e,this.size=A,this.data=s}static read(e,A=!0,s=!1){let a=de(e,4),n=X(e,4);a===""&&(n=0);let r=A?e.slice(e.currentIndex,e.currentIndex+n):new ne(0);return(A||s)&&(e.currentIndex+=n,n%2!==0&&e.currentIndex++),new An(a,n,r)}static write(e,A,s=!1,a=!1){if(e.length!==4)throw new Error(`Invalid header length: ${e}`);let n=8,r=e,i=A.length;s&&i++;let o=i;a&&(n+=4,o+=4,r="LIST");let I=n+i;I%2!==0&&I++;let l=new ne(I);return Ne(l,r),ge(l,o),a&&Ne(l,e),l.set(A,n),l}static getParts(e,A,s=!1){let a=e,n=A.reduce((o,I)=>I.length+o,0);s&&(n+=4,a="LIST");let r=new ne(4);ge(r,n);let i=[et(a),r];return s&&i.push(et(e)),i.push(...A),n%2!==0&&i.push(new Uint8Array(1)),i}static writeParts(e,A,s=!1){let a=8,n=e,r=A.reduce((l,B)=>B.length+l,0),i=r;s&&(a+=4,i+=4,n="LIST");let o=a+r;o%2!==0&&o++;let I=new ne(o);Ne(I,n),ge(I,i),s&&Ne(I,e);for(let l of A)I.set(l,a),a+=l.length;return I}static findListType(e,A){return e.find(s=>s.header!=="LIST"?!1:(s.data.currentIndex=4,$e(s.data,4)===A))}};function bA(t,e){return{...e,...t}}var h=class _A{static infoEnabled=!1;static warnEnabled=!0;static groupEnabled=!1;static setLogLevel(e,A,s){this.infoEnabled=e,this.warnEnabled=A,this.groupEnabled=s}static info(...e){this.infoEnabled&&console.info(...e)}static warn(...e){this.warnEnabled&&console.warn(...e)}static group(...e){this.groupEnabled&&console.group(...e)}static groupCollapsed(...e){this.groupEnabled&&console.groupCollapsed(...e)}static groupEnd(){this.groupEnabled&&console.groupEnd()}static unsupported(e,A,s=""){this.infoEnabled&&this.info(`%cUnsupported %c${e}%c message: %c${js(A)}%c. ${s}`,d.warn,d.recognized,d.warn,d.unrecognized,d.warn)}static gmInfo(e,A,s=""){this.infoEnabled&&this.coolInfo(`General MIDI ${e}`,A,s)}static gmFail(e,A){this.infoEnabled&&this.unsupported(`General MIDI ${e}`,A)}static gsInfo(e,A,s=""){this.infoEnabled&&this.coolInfo(`Roland GS ${e}`,A,s)}static gsFail(e,A,s=""){this.infoEnabled&&this.unsupported(`Roland GS ${e}`,A,s)}static xgInfo(e,A,s=""){this.infoEnabled&&this.coolInfo(`Yamaha XG ${e}`,A,s)}static xgFail(e,A,s=""){this.infoEnabled&&this.unsupported(`Yamaha XG ${e}`,A,s)}static coolInfo(e,A,s=""){this.infoEnabled&&(s?_A.info(`%c${e}%c is now set to %c${A}%c ${s}.`,d.recognized,d.info,d.value,d.info):_A.info(`%c${e}%c is now set to %c${A}%c.`,d.recognized,d.info,d.value,d.info))}},sn={ConsoleColors:d,readBigEndian:Ht,readLittleEndian:cs,readLittleEndianIndexed:X,readBinaryString:$e,readBinaryStringIndexed:de,readVariableLengthQuantity:pe,inflateSync:tn},G={noteOff:128,noteOn:144,polyPressure:160,controllerChange:176,programChange:192,channelPressure:208,pitchWheel:224,systemExclusive:240,timecode:241,songPosition:242,songSelect:243,tuneRequest:246,clock:248,start:250,continue:251,stop:252,activeSensing:254,reset:255,sequenceNumber:0,text:1,copyright:2,trackName:3,instrumentName:4,lyric:5,marker:6,cuePoint:7,programName:8,midiChannelPrefix:32,midiPort:33,endOfTrack:47,setTempo:81,smpteOffset:84,timeSignature:88,keySignature:89,sequenceSpecific:127},f={bankSelect:0,modulationWheel:1,breathController:2,undefinedCC3:3,footController:4,portamentoTime:5,dataEntryMSB:6,mainVolume:7,balance:8,undefinedCC9:9,pan:10,expression:11,effectControl1:12,effectControl2:13,undefinedCC14:14,undefinedCC15:15,generalPurposeController1:16,generalPurposeController2:17,generalPurposeController3:18,generalPurposeController4:19,undefinedCC20:20,undefinedCC21:21,undefinedCC22:22,undefinedCC23:23,undefinedCC24:24,undefinedCC25:25,undefinedCC26:26,undefinedCC27:27,undefinedCC28:28,undefinedCC29:29,undefinedCC30:30,undefinedCC31:31,bankSelectLSB:32,modulationWheelLSB:33,breathControllerLSB:34,undefinedCC3LSB:35,footControllerLSB:36,portamentoTimeLSB:37,dataEntryLSB:38,mainVolumeLSB:39,balanceLSB:40,undefinedCC9LSB:41,panLSB:42,expressionLSB:43,effectControl1LSB:44,effectControl2LSB:45,undefinedCC14LSB:46,undefinedCC15LSB:47,undefinedCC16LSB:48,undefinedCC17LSB:49,undefinedCC18LSB:50,undefinedCC19LSB:51,undefinedCC20LSB:52,undefinedCC21LSB:53,undefinedCC22LSB:54,undefinedCC23LSB:55,undefinedCC24LSB:56,undefinedCC25LSB:57,undefinedCC26LSB:58,undefinedCC27LSB:59,undefinedCC28LSB:60,undefinedCC29LSB:61,undefinedCC30LSB:62,undefinedCC31LSB:63,sustainPedal:64,portamentoOnOff:65,sostenutoPedal:66,softPedal:67,legatoFootswitch:68,hold2Pedal:69,soundVariation:70,filterResonance:71,releaseTime:72,attackTime:73,brightness:74,decayTime:75,vibratoRate:76,vibratoDepth:77,vibratoDelay:78,soundController10:79,generalPurposeController5:80,generalPurposeController6:81,generalPurposeController7:82,generalPurposeController8:83,portamentoControl:84,undefinedCC85:85,undefinedCC86:86,undefinedCC87:87,undefinedCC88:88,undefinedCC89:89,undefinedCC90:90,reverbDepth:91,tremoloDepth:92,chorusDepth:93,variationDepth:94,phaserDepth:95,dataIncrement:96,dataDecrement:97,nonRegisteredParameterLSB:98,nonRegisteredParameterMSB:99,registeredParameterLSB:100,registeredParameterMSB:101,undefinedCC102LSB:102,undefinedCC103LSB:103,undefinedCC104LSB:104,undefinedCC105LSB:105,undefinedCC106LSB:106,undefinedCC107LSB:107,undefinedCC108LSB:108,undefinedCC109LSB:109,undefinedCC110LSB:110,undefinedCC111LSB:111,undefinedCC112LSB:112,undefinedCC113LSB:113,undefinedCC114LSB:114,undefinedCC115LSB:115,undefinedCC116LSB:116,undefinedCC117LSB:117,undefinedCC118LSB:118,undefinedCC119LSB:119,allSoundOff:120,resetAllControllers:121,localControlOnOff:122,allNotesOff:123,omniModeOff:124,omniModeOn:125,monoModeOn:126,polyModeOn:127},Ze={pitchWheelRange:0,fineTuning:1,coarseTuning:2,modulationDepth:5,resetParameters:16383},ke={partParameter:1,drumPitch:24,drumPitchFine:25,drumLevel:26,drumPan:28,drumReverb:29,drumChorus:30,drumDelay:31,awe32:127,SF2:120},Ue={vibratoRate:8,vibratoDepth:9,vibratoDelay:10,tvfCutoffFrequency:32,tvfResonance:33,envelopeAttackTime:99,envelopeDecayTime:100,envelopeReleaseTime:102},ue=class it{ticks;statusByte;data;constructor(e,A,s){this.ticks=e,this.statusByte=A,this.data=s}static pitchWheel(e,A,s){return new it(e,G.pitchWheel|A%16,new Uint8Array([s&127,s>>7&127]))}static channelPressure(e,A,s){return new it(e,G.channelPressure|A%16,new Uint8Array([s]))}static programChange(e,A,s){return new it(e,G.programChange|A%16,new Uint8Array([s]))}static controllerChange(e,A,s,a){return new it(e,G.controllerChange|A%16,new Uint8Array([s,a]))}static systemExclusive(e,A){return new it(e,G.systemExclusive,new Uint8Array(A))}static registeredParameter(e,A,s,a){if(s>16383||s<0||a>16383||a<0)throw new Error("Parameter and value must be between 0 and 16383.");return[it.controllerChange(e,A,f.registeredParameterMSB,s>>7),it.controllerChange(e,A,f.registeredParameterLSB,s&127),it.controllerChange(e,A,f.dataEntryMSB,a>>7),it.controllerChange(e,A,f.dataEntryLSB,a&127)]}},ws=(t,e)=>{for(let A=0;A<t.length;A++)e.push(t.charCodeAt(A))};function Kn(t){if(!t.tracks)throw new Error("MIDI has no tracks!");let e=[];for(let s of t.tracks){let a=[],n=0,r;for(let i of s.events){let o=Math.max(0,i.ticks-n);if(i.statusByte===G.endOfTrack){n+=o;continue}let I;i.statusByte<=G.sequenceSpecific?(I=[255,i.statusByte,...xA(i.data.length),...i.data],r=void 0):i.statusByte===G.systemExclusive?(I=[240,...xA(i.data.length),...i.data],r=void 0):(I=[],r!==i.statusByte&&(r=i.statusByte,I.push(i.statusByte)),I.push(...i.data)),a.push(...xA(o),...I),n+=o}a.push(0,255,G.endOfTrack,0),e.push(a)}let A=[];ws("MThd",A),A.push(...nA(6,4),0,t.format,...nA(t.tracks.length,2),...nA(t.timeDivision,2));for(let s of e)ws("MTrk",A),A=A.concat(nA(s.length,4),s);return new Uint8Array(A).buffer}var aA=`SPESSASYNTH_EMBEDDED_BANK_${Math.random()}_DO_NOT_DELETE`,Vn=32767,Xn={time:0},Zn=.03,Wn=.07,zn=.6;var lA=1/Math.cos(Math.PI/4)**2;var Ms=121,De=class{static getDefaultBank(t){return t==="gm2"?Ms:0}static getDrumBank(t){switch(t){default:throw new Error(`${t} doesn't have a bank MSB for drums.`);case"gm2":return 120;case"xg":return 127}}static isXGDrum(t){return t===120||t===127}static isValidXGMSB(t){return this.isXGDrum(t)||t===64||t===Ms}static isSystemXG(t){return t==="gm2"||t==="xg"}static addBankOffset(t,e,A){return this.isXGDrum(t)&&A?t:Math.min(t+e,127)}static subtractBankOffset(t,e,A){return this.isXGDrum(t)&&A?t:Math.max(0,t-e)}},je=class $A{static toMIDIString(e){return e.isGMGSDrum?`DRUM:${e.program}`:`${e.bankLSB}:${e.bankMSB}:${e.program}`}static fromMIDIString(e){let A=e.split(":");if(A.length>3||A.length<2)throw new Error(`Invalid MIDI string: ${e}`);return e.startsWith("DRUM")?{bankMSB:0,bankLSB:0,program:Number.parseInt(A[1]),isGMGSDrum:!0}:{bankLSB:Number.parseInt(A[0]),bankMSB:Number.parseInt(A[1]),program:Number.parseInt(A[2]),isGMGSDrum:!1}}static toFullMIDIString(e){return`${this.toMIDIString(e)} ${e.isDrum?"D":"M"} ${e.name}`}static fromFullMIDIString(e){let A=e.indexOf(" "),s=e.indexOf(" ",A+1);if(A===-1||s===-1)throw new Error(`Invalid named MIDI string: ${e}`);let a=e.slice(0,Math.max(0,A)),n=e.slice(A+1,s),r=e.slice(Math.max(0,s+1));return{...$A.fromMIDIString(a),isDrum:n==="D",name:r}}static matches(e,A){return e.isGMGSDrum||A.isGMGSDrum?e.isGMGSDrum===A.isGMGSDrum&&e.program===A.program:e.program===A.program&&e.bankLSB===A.bankLSB&&e.bankMSB===A.bankMSB}static compare(e,A){return e.isGMGSDrum&&!A.isGMGSDrum?1:!e.isGMGSDrum&&A.isGMGSDrum?-1:e.program!==A.program?e.program-A.program:e.bankMSB!==A.bankMSB?e.bankMSB-A.bankMSB:e.bankLSB-A.bankLSB}static isXGDrum(e){return e.isDrum&&!e.isGMGSDrum}static selectPatch(e,A,s){if(e.length===0)throw new Error("No presets!");A.isGMGSDrum&&De.isSystemXG(s)&&(A={...A,isGMGSDrum:!1,bankLSB:0,bankMSB:De.getDrumBank(s)});let{isGMGSDrum:a,bankLSB:n,bankMSB:r,program:i}=A,o=De.isSystemXG(s),I=De.isXGDrum(r)&&o,l=e.find(g=>this.matches(g,A));if(l&&(!I||I&&this.isXGDrum(l)))return l;let B=g=>{h.info(`%cPreset %c${$A.toMIDIString(A)}%c not found. (${s}) Replaced with %c${this.toFullMIDIString(g)}`,d.warn,d.unrecognized,d.warn,d.value)};if(a){let g=e.find(E=>E.isGMGSDrum&&E.program===i);return g||(g=e.find(E=>E.isDrum&&E.program===i),g)?(B(g),g):(g=this.getAnyDrums(e,!1),B(g),g)}if(I){let g=e.find(E=>E.program===i&&E.isDrum&&!E.isGMGSDrum);return g||(g=e.find(E=>E.isDrum&&E.program===i),g&&g.program<49)?(B(g),g):(g=this.getAnyDrums(e,!0),B(g),g)}let C=e.filter(g=>g.program===i&&!g.isDrum);if(C.length===0)return B(e[0]),e[0];if(l=o?C.find(g=>g.bankLSB===n):C.find(g=>g.bankMSB===r),l)return B(l),l;if(n!==64||!o){let g=Math.max(r,n);if(l=C.find(E=>E.bankLSB===g||E.bankMSB===g),l)return B(l),l}return B(C[0]),C[0]}static getAnyDrums(e,A){let s=A?e.find(a=>this.isXGDrum(a)):e.find(a=>a.isGMGSDrum);return s||(e.find(a=>a.isDrum)??e[0])}},Qe=Object.freeze({type:"Other"}),ae=class Be{static analyzeSysEx(e){if(e.length<3)return Qe;switch(e[0]){default:return Qe;case 126:case 127:return this.analyzeGM(e);case 65:return this.analyzeGS(e);case 67:return this.analyzeXG(e)}}static analyzeRPN(e,A,s){switch(A){default:return Qe;case Ze.pitchWheelRange:return{type:"Channel MIDI Param",channel:e,parameter:"pitchWheelRange",value:s/128};case Ze.fineTuning:return{type:"Channel MIDI Param",channel:e,parameter:"fineTune",value:(s-8192)/81.92};case Ze.coarseTuning:return{type:"Channel MIDI Param",channel:e,parameter:"keyShift",value:(s>>7)-64};case Ze.modulationDepth:return{type:"Channel MIDI Param",channel:e,parameter:"modulationDepth",value:s/1.28}}}static analyzeNRPN(e,A,s){let a=A>>7,n=A&127;switch(a){default:return Qe;case ke.partParameter:switch(n){default:return Qe;case Ue.vibratoRate:return{type:"Controller Change",channel:e,controller:f.vibratoRate,value:s>>7};case Ue.vibratoDepth:return{type:"Controller Change",channel:e,controller:f.vibratoDepth,value:s>>7};case Ue.vibratoDelay:return{type:"Controller Change",channel:e,controller:f.vibratoDelay,value:s>>7};case Ue.tvfCutoffFrequency:return{type:"Controller Change",channel:e,controller:f.brightness,value:s>>7};case Ue.tvfResonance:return{type:"Controller Change",channel:e,controller:f.filterResonance,value:s>>7};case Ue.envelopeAttackTime:return{type:"Controller Change",channel:e,controller:f.attackTime,value:s>>7};case Ue.envelopeDecayTime:return{type:"Controller Change",channel:e,controller:f.decayTime,value:s>>7};case Ue.envelopeReleaseTime:return{type:"Controller Change",channel:e,controller:f.releaseTime,value:s>>7}}case ke.drumPitch:case ke.drumPitchFine:case ke.drumLevel:case ke.drumPan:case ke.drumReverb:case ke.drumChorus:case ke.drumDelay:return{type:"Drum Setup"}}}static setGlobalMIDIParameter(e,A,s,a){switch(s){case"system":return[Be.reset(e,a)];case"keyShift":switch(A){default:return[Be.deviceControlMessage(e,4,[0,a+64])];case"xg":return[Be.xgMessage(e,0,0,6,[a+64])];case"gs":return[Be.gsMessage(e,64,0,5,[a+64])]}case"fineTune":switch(A){default:{let n=Math.floor(a*81.92+8192);return[Be.deviceControlMessage(e,3,[n&127,n>>7&127])]}case"xg":{let n=Math.floor(a*10+1024);return[Be.xgMessage(e,0,0,0,[n>>12&15,n>>8&15,n>>4&15,n&15])]}case"gs":{let n=Math.floor(a*10+1024);return[Be.gsMessage(e,64,0,0,[n>>12&15,n>>8&15,n>>4&15,n&15])]}}case"gain":switch(A){default:{let n=Math.floor(Math.sqrt(a)*16383);return[Be.deviceControlMessage(e,1,[n&127,n>>7&127])]}case"xg":{let n=Math.floor(a*127);return[Be.xgMessage(e,0,0,4,[n])]}case"gs":{let n=Math.floor(a*127);return[Be.gsMessage(e,64,0,4,[n])]}}case"pan":if(A==="gs"){let n=Math.floor(a*63)+64;return[Be.gsMessage(e,64,0,6,[n])]}else{let n=Math.floor(a*8192)+8192;return[Be.deviceControlMessage(e,2,[n&127,n>>7&127])]}}}static setChannelMIDIParameter(e,A,s,a,n){A%=16;let r=Be.channelToSyx(A);switch(a){case"pressure":return[ue.channelPressure(e,A,n)];case"pitchWheel":return[ue.pitchWheel(e,A,n)];case"pitchWheelRange":return ue.registeredParameter(e,A,Ze.pitchWheelRange,Math.floor(n*128));case"modulationDepth":return ue.registeredParameter(e,A,Ze.modulationDepth,Math.floor(n*1.28));case"rxChannel":return s==="xg"?[Be.xgMessage(e,8,A,4,[n])]:[Be.gsMessage(e,64,16|r,2,[n])];case"polyMode":return n?[ue.controllerChange(e,A,f.polyModeOn,0)]:[ue.controllerChange(e,A,f.monoModeOn,0)];case"keyShift":return ue.registeredParameter(e,A,Ze.coarseTuning,n+64<<7);case"fineTune":return ue.registeredParameter(e,A,Ze.fineTuning,Math.floor(n*81.92+8192));case"randomPan":return s==="xg"?[Be.xgMessage(e,8,A,14,[0])]:[Be.gsMessage(e,64,16|r,28,[0])];case"assignMode":return[Be.gsMessage(e,64,16|r,20,[n])];case"efxAssign":return[Be.gsMessage(e,64,16|r,34,[n])];case"cc1":return[Be.gsMessage(e,64,16|r,31,[n])];case"cc2":return[Be.gsMessage(e,64,16|r,32,[n])];case"drumMap":return[Be.gsMessage(e,64,16|r,21,[n])];case"velocitySenseDepth":return s==="xg"?[Be.xgMessage(e,8,A,12,[n])]:[Be.gsMessage(e,64,16|r,26,[n])];case"velocitySenseOffset":return s==="xg"?[Be.xgMessage(e,8,A,13,[n])]:[Be.gsMessage(e,64,16|r,27,[n])]}}static syxToChannel(e){return[9,0,1,2,3,4,5,6,7,8,10,11,12,13,14,15][e%16]}static channelToSyx(e){return[1,2,3,4,5,6,7,8,9,0,10,11,12,13,14,15][e%16]}static gs(e,A,s,a){let n=128-(e+A+s+a.reduce((r,i)=>r+i,0))%128&127;return[65,16,66,18,e,A,s,...a,n,247]}static gsMessage(e,A,s,a,n){return ue.systemExclusive(e,this.gs(A,s,a,n))}static xg(e,A,s,a){return[67,16,76,e,A,s,...a,247]}static xgMessage(e,A,s,a,n){return ue.systemExclusive(e,this.xg(A,s,a,n))}static deviceControl(e,A){return[127,127,4,e,...A,247]}static deviceControlMessage(e,A,s){return ue.systemExclusive(e,this.deviceControl(A,s))}static reset(e,A){switch(A){case"gs":return this.gsMessage(e,64,0,127,[0]);case"xg":return this.xgMessage(e,0,0,126,[0]);case"gm":return ue.systemExclusive(e,[126,127,9,1,127]);case"gm2":return ue.systemExclusive(e,[126,127,9,3,127])}}static analyzeGM(e){if(e.length<4)return Qe;if(e[2]===4)switch(e[3]){default:return Qe;case 1:{let A=(e[5]<<7|e[4])/16383;return{type:"Global MIDI Param",parameter:"gain",value:Math.pow(A,2)}}case 2:return{type:"Global MIDI Param",parameter:"pan",value:((e[5]<<7|e[4])-8192)/8192};case 3:return{type:"Global MIDI Param",parameter:"fineTune",value:((e[5]<<7|e[4])-8192)/81.92};case 4:return{type:"Global MIDI Param",parameter:"keyShift",value:e[5]-64};case 5:if(e[4]!==1||e[5]!==1||e[6]!==1||e[7]!==1)return Qe;switch(e[8]){default:return Qe;case 1:switch(e[9]){default:return Qe;case 1:case 2:return{type:"Reverb Param"}}case 2:switch(e[9]){default:return Qe;case 1:case 2:case 3:case 4:return{type:"Chorus Param"}}}}if(e[2]!==9)return Qe;switch(e[3]){default:return Qe;case 1:return{type:"Global MIDI Param",parameter:"system",value:"gm"};case 2:return{type:"Global MIDI Param",parameter:"system",value:"gm"};case 3:return{type:"Global MIDI Param",parameter:"system",value:"gm2"}}}static analyzeXG(e){if(e[2]!==76||e.length<7)return Qe;let A=e[3],s=e[4],a=e[5],n=e[6];if(A===6||A===7)return{type:"Display Data"};if(A===0&&s===0)switch(a){default:return Qe;case 0:return{type:"Global MIDI Param",parameter:"fineTune",value:(((e[6]&15)<<12|(e[7]&15)<<8|(e[8]&15)<<4|e[9]&15)-1024)/10};case 6:return{type:"Global MIDI Param",parameter:"keyShift",value:n-64};case 126:case 127:return{type:"Global MIDI Param",parameter:"system",value:"xg"}}if(A===2&&s===1)return a<=21?{type:"Reverb Param"}:a<=53?{type:"Chorus Param"}:{type:"Variation Param"};if(A===3&&s===0)return{type:"Variation Param"};if(A===8){let r=s;if(r>=16)return Qe;switch(a){default:return Qe;case 1:return{type:"Controller Change",channel:r,controller:f.bankSelect,value:n};case 2:return{type:"Controller Change",channel:r,controller:f.bankSelectLSB,value:n};case 3:return{type:"Program Change",channel:r,value:n};case 5:return{type:"Controller Change",channel:r,controller:n===1?f.polyModeOn:f.monoModeOn,value:0};case 7:return{type:"Drums On",channel:r,isDrum:n>0};case 8:return{type:"Channel MIDI Param",channel:r,parameter:"keyShift",value:n-64};case 11:return{type:"Controller Change",channel:r,controller:f.mainVolume,value:n};case 14:return{type:"Controller Change",channel:r,controller:f.pan,value:n};case 18:return{type:"Controller Change",channel:r,controller:f.chorusDepth,value:n};case 19:return{type:"Controller Change",channel:r,controller:f.reverbDepth,value:n};case 21:return{type:"Controller Change",channel:r,controller:f.vibratoRate,value:n};case 22:return{type:"Controller Change",channel:r,controller:f.vibratoDepth,value:n};case 23:return{type:"Controller Change",channel:r,controller:f.vibratoDelay,value:n};case 24:return{type:"Controller Change",channel:r,controller:f.brightness,value:n};case 25:return{type:"Controller Change",channel:r,controller:f.filterResonance,value:n};case 26:return{type:"Controller Change",channel:r,controller:f.attackTime,value:n};case 27:return{type:"Controller Change",channel:r,controller:f.decayTime,value:n};case 12:return{type:"Controller Change",channel:r,controller:f.releaseTime,value:n}}}return A>>4===3?{type:"Drum Setup"}:Qe}static analyzeGS(e){if(e.length<10||e[3]!==18)return Qe;if(e[2]===69)return{type:"Display Data"};if(e[2]!==66)return Qe;let A=e[4],s=e[5],a=e[6],n=e[7];if((A===0||A===64)&&s===0)switch(a){case 0:return{type:"Global MIDI Param",parameter:"fineTune",value:((n<<12|e[8]<<8|e[9]<<4|e[10])-1024)/10};case 4:return{type:"Global MIDI Param",parameter:"gain",value:n/127};case 5:return{type:"Global MIDI Param",parameter:"keyShift",value:n-64};case 6:return{type:"Global MIDI Param",parameter:"pan",value:(n-64)/63};case 127:switch(n){case 0:return{type:"Global MIDI Param",parameter:"system",value:"gs"};case 127:return{type:"Global MIDI Param",parameter:"system",value:"gm"}}return Qe}if(A===65)return{type:"Drum Setup"};if(A!==64)return Qe;if(s===0&&a===5)return{type:"Global MIDI Param",parameter:"keyShift",value:n-64};if(s===1){if(a>=48&&a<=55)return{type:"Reverb Param"};if(a>=56&&a<=64)return{type:"Chorus Param"};if(a>=80&&a<=90)return{type:"Delay Param"}}if(s===3&&a>=0&&a<=127)return{type:"Insertion Param"};if(s>>4===1){let r=Be.syxToChannel(s&15);switch(a){default:return Qe;case 0:return{type:"Program Change",channel:r,value:n};case 19:return{type:"Channel MIDI Param",channel:r,parameter:"polyMode",value:n===1};case 20:return{type:"Channel MIDI Param",channel:r,parameter:"assignMode",value:n};case 21:return{type:"Drums On",channel:r,isDrum:n>0};case 22:return{type:"Channel MIDI Param",channel:r,parameter:"keyShift",value:n-64};case 25:return{type:"Controller Change",channel:r,controller:f.mainVolume,value:n};case 26:return{type:"Channel MIDI Param",channel:r,parameter:"velocitySenseDepth",value:n};case 27:return{type:"Channel MIDI Param",channel:r,parameter:"velocitySenseOffset",value:n};case 28:return{type:"Controller Change",channel:r,controller:f.pan,value:n};case 31:return{type:"Channel MIDI Param",channel:r,parameter:"cc1",value:n};case 32:return{type:"Channel MIDI Param",channel:r,parameter:"cc2",value:n};case 33:return{type:"Controller Change",channel:r,controller:f.chorusDepth,value:n};case 34:return{type:"Controller Change",channel:r,controller:f.reverbDepth,value:n};case 42:return{type:"Channel MIDI Param",channel:r,parameter:"fineTune",value:((n<<7|e[8])-8192)/81.92};case 44:return{type:"Controller Change",channel:r,controller:f.variationDepth,value:n};case 48:return{type:"Controller Change",channel:r,controller:f.vibratoRate,value:n};case 49:return{type:"Controller Change",channel:r,controller:f.vibratoDepth,value:n};case 50:return{type:"Controller Change",channel:r,controller:f.brightness,value:n};case 51:return{type:"Controller Change",channel:r,controller:f.filterResonance,value:n};case 52:return{type:"Controller Change",channel:r,controller:f.attackTime,value:n};case 53:return{type:"Controller Change",channel:r,controller:f.decayTime,value:n};case 54:return{type:"Controller Change",channel:r,controller:f.releaseTime,value:n};case 55:return{type:"Controller Change",channel:r,controller:f.vibratoDelay,value:n}}}if(s>>4===4){let r=Be.syxToChannel(s&15);switch(a){default:return Qe;case 0:case 1:return{type:"Controller Change",channel:r,controller:f.bankSelectLSB,value:n};case 34:return{type:"Channel MIDI Param",channel:r,parameter:"efxAssign",value:n===1}}}return Qe}},_n="Created using SpessaSynth";function $n(t,e,A){let s="gm",a=[],n=new Array(t.tracks.length).fill(0),r=16+Math.max(...t.portChannelOffsetMap),i=[];for(let o=0;o<r;o++)i.push({program:0,isDrum:o%16===9,lastBank:void 0,lastBankLSB:void 0,hasBankSelect:!1});t.iterate((o,I,l)=>{let B=t.portChannelOffsetMap[n[I]];if(o.statusByte===G.midiPort){n[I]=o.data[0];return}let C=o.statusByte&240;if(C!==G.controllerChange&&C!==G.programChange&&C!==G.systemExclusive)return;if(C===G.systemExclusive){let k=ae.analyzeSysEx(o.data);switch(k.type){default:return;case"Drums On":{let u=k.channel+B;i[u].isDrum=k.isDrum;return}case"Global MIDI Param":k.parameter==="system"&&(s=k.value,k.value==="gm"&&a.push({tNum:I,e:o}));break;case"Controller Change":{let u=t.tracks[I],w=ue.controllerChange(o.ticks,k.channel,k.controller,k.value);u.events[l[I]]=w,o=w,h.info("%cReplaced a system exclusive with controller change!",d.info);break}case"Program Change":{let u=t.tracks[I],w=ue.programChange(o.ticks,k.channel,k.value);u.events[l[I]]=w,o=w,h.info("%cReplaced a system exclusive with program change!",d.info);break}}}let g=(o.statusByte&15)+B,E=i[g];if(C===G.programChange){let k={program:o.data[0],bankLSB:E.lastBankLSB?.data?.[1]??0,bankMSB:De.subtractBankOffset(E.lastBank?.data?.[1]??0,t.bankOffset,s==="xg"),isGMGSDrum:E.isDrum},u=A.getPreset(k,s);if(h.info(`%cInput patch: %c${je.toMIDIString(k)}%c. Channel %c${g}%c. Changing patch to ${u.toString()}.`,d.info,d.unrecognized,d.info,d.recognized,d.info),o.data[0]=u.program,u.isGMGSDrum&&De.isSystemXG(s)||E.lastBank===void 0||(E.lastBank.data[1]=De.addBankOffset(u.bankMSB,e,s==="xg"),E.lastBankLSB===void 0))return;E.lastBankLSB.data[1]=u.bankLSB;return}let S=o.data[0]===f.bankSelectLSB;o.data[0]!==f.bankSelect&&!S||(E.hasBankSelect=!0,S?E.lastBankLSB=o:E.lastBank=o)});for(let o=0;o<i.length;o++){let I=i[o];if(I.hasBankSelect)continue;let l=o%16,B=G.programChange|l,C=Math.floor(o/16)*16,g=t.portChannelOffsetMap.indexOf(C),E=t.tracks.find(M=>M.port===g&&M.channels.has(l));if(E===void 0)continue;let S=E.events.findIndex(M=>M.statusByte===B);if(S===-1){let M=E.events.findIndex(N=>N.statusByte>128&&N.statusByte<240&&(N.statusByte&15)===l);if(M===-1)continue;let R=E.events[M].ticks,v=A.getPreset({bankMSB:0,bankLSB:0,program:0,isGMGSDrum:!1},s).program;E.addEvents(M,ue.programChange(R,l,v)),S=M}h.info(`%cAdding bank select for %c${o}`,d.info,d.recognized);let k=E.events[S].ticks,u=A.getPreset({bankLSB:0,bankMSB:0,program:I.program,isGMGSDrum:I.isDrum},s),w=De.addBankOffset(u.bankMSB,e,s==="xg");E.addEvents(S,ue.controllerChange(k,l,f.bankSelect,w))}if(s==="gm"&&!De.isSystemXG(s)){for(let I of a){let l=t.tracks[I.tNum];l.deleteEvent(l.events.indexOf(I.e))}let o=0;t.tracks[0].events[0].statusByte===G.trackName&&o++,t.tracks[0].addEvents(o,ae.reset(0,"gs"))}t.flush()}var bs={bankOffset:0,metadata:{},correctBankOffset:!0,soundBank:void 0};function jn(t,e,A){let s=A.metadata;if(h.group("%cWriting the RMIDI File...",d.info),h.info("metadata",s),h.info("Initial bank offset",t.bankOffset),A.correctBankOffset){if(!A.soundBank)throw new Error("Sound bank must be provided if correcting bank offset.");$n(t,A.bankOffset,A.soundBank)}let a=new ne(t.writeMIDI());s.name??=t.getName(),s.creationDate??=new Date,s.copyright??=_n,s.software??="SpessaSynth",Object.entries(s).forEach(o=>{let I=o;I[1]&&t.setRMIDInfo(I[0],I[1])});let n=[],r=(o,I)=>{n.push(U.write(o,I))};for(let o of Object.entries(t.rmidiInfo)){let I=o[0],l=o[1];switch(I){case"album":r("IALB",l),r("IPRD",l);break;case"software":r("ISFT",l);break;case"infoEncoding":r("IENC",l);break;case"creationDate":r("ICRD",l);break;case"picture":r("IPIC",l);break;case"name":r("INAM",l);break;case"artist":r("IART",l);break;case"genre":r("IGNR",l);break;case"copyright":r("ICOP",l);break;case"comment":r("ICMT",l);break;case"engineer":r("IENG",l);break;case"subject":r("ISBJ",l);break;case"midiEncoding":r("MENC",l);break}}let i=new ne(2);return hs(i,A.bankOffset,2),n.push(U.write("DBNK",i)),h.info("%cFinished!",d.info),h.groupEnd(),U.writeParts("RIFF",[et("RMID"),U.write("data",a),U.writeParts("INFO",n,!0),new ne(e)]).buffer}var uA=class{rpnMSB={v:127,track:0,event:0};rpnLSB={v:127,track:0,event:0};nrpnMSB={v:0,track:0,event:0};nrpnLSB={v:0,track:0,event:0};dataMSB={v:0,track:0,event:0};dataLSB={v:0,track:0,event:0};channel;isRegistered=!0;constructor(t){this.channel=t}get paramMSB(){return this.isRegistered?this.rpnMSB:this.nrpnMSB}get paramLSB(){return this.isRegistered?this.rpnLSB:this.nrpnLSB}reset(){this.isRegistered=!0,this.rpnLSB.v=127,this.rpnMSB.v=127,this.nrpnMSB.v=0,this.nrpnLSB.v=0,this.resetData()}controllerChange(t,e,A,s){switch(t){case f.registeredParameterMSB:this.resetData(),this.isRegistered=!0,this.rpnMSB={v:e,track:A,event:s};break;case f.registeredParameterLSB:this.resetData(),this.isRegistered=!0,this.rpnLSB={v:e,track:A,event:s};break;case f.nonRegisteredParameterMSB:this.resetData(),this.isRegistered=!1,this.nrpnMSB={v:e,track:A,event:s};break;case f.nonRegisteredParameterLSB:this.resetData(),this.isRegistered=!1,this.nrpnLSB={v:e,track:A,event:s};break;case f.dataEntryMSB:return this.dataMSB={v:e,track:A,event:s},this.analyze();case f.dataEntryLSB:return this.dataLSB={v:e,track:A,event:s},this.analyze()}}resetData(){this.dataLSB.v=0,this.dataMSB.v=0}analyze(){let t=this.dataMSB.v<<7|this.dataLSB.v;return this.isRegistered?ae.analyzeRPN(this.channel,this.rpnMSB.v<<7|this.rpnLSB.v,t):ae.analyzeNRPN(this.channel,this.nrpnMSB.v<<7|this.nrpnLSB.v,t)}};function ea(t,e){h.groupCollapsed("%cSearching for all used programs and keys...",d.info);let A=16+Math.max(...t.portChannelOffsetMap),s=[],a="gs",n=0,r=C=>{a=C,n=0;for(let g=0;g<A;g++){let E=s[g];E.isDrum=g%16===9,E.bankMSB=De.getDefaultBank(C),E.bankLSB=0,E.keyShift=0,E.param.reset()}};for(let C=0;C<A;C++){let g=C%16===9;s.push({preset:e.getPreset({bankLSB:0,bankMSB:0,isGMGSDrum:g,program:0},a),bankMSB:0,bankLSB:0,param:new uA(C),isDrum:g,keyShift:0})}let i=new Map,o=t.tracks.map(C=>C.port),I=t.portChannelOffsetMap,{timeline:l,tracks:B}=t;for(let C of l){let g=C.tr,E=C.ev,S=B[g].events[E];if(S.statusByte===G.midiPort&&t.tracks[g].channels.size>0){let w=S.data[0];I[w]===void 0&&(h.warn(`Invalid port ${w} on track ${g}. (No offset found in the MIDI map.`),w=0),o[g]=w;continue}let k=S.statusByte&240;if(k!==G.noteOn&&k!==G.controllerChange&&k!==G.programChange&&k!==G.systemExclusive)continue;let u=I[o[g]]||0;switch(k){case G.programChange:{let w=s[(S.statusByte&15)+u];w.preset=e.getPreset({bankMSB:w.bankMSB,bankLSB:w.bankLSB,program:S.data[0],isGMGSDrum:w.isDrum},a);break}case G.controllerChange:{let w=s[(S.statusByte&15)+u],M=S.data[0],R=S.data[1];switch(M){case f.registeredParameterMSB:case f.registeredParameterLSB:case f.nonRegisteredParameterLSB:case f.nonRegisteredParameterMSB:w.param.controllerChange(M,R,g,E);break;case f.dataEntryMSB:case f.dataEntryLSB:{let v=w.param.controllerChange(M,R,g,E);v?.type==="Channel MIDI Param"&&v.parameter==="keyShift"&&(w.keyShift=w.isDrum?0:v.value);break}case f.resetAllControllers:w.param.reset();break;case f.bankSelect:w.bankMSB=R;break;case f.bankSelectLSB:w.bankLSB=R;break}break}case G.noteOn:{let w=s[(S.statusByte&15)+u];if(S.data[1]===0||!w.preset)continue;let M=i.get(w.preset);M||(M=new Map,i.set(w.preset,M));let R=S.data[0]+(w.isDrum?0:n)+w.keyShift,v=M.get(R);v||(v=new Set,M.set(R,v)),v.add(S.data[1]);break}case G.systemExclusive:{let w=ae.analyzeSysEx(S.data);switch(w.type){default:break;case"Global MIDI Param":w.parameter==="keyShift"?n=w.value:w.parameter==="system"&&(r(w.value),h.info(`%c${w.value.toUpperCase()} on detected!`,d.recognized));break;case"Channel MIDI Param":if(w.parameter==="keyShift"){let M=s[w.channel];M.keyShift=M.isDrum?0:w.value}break;case"Drums On":{let M=w.channel+u;s[M].isDrum=w.isDrum;break}case"Program Change":{let M=s[w.channel+u];M.preset=e.getPreset({bankMSB:M.bankMSB,bankLSB:M.bankLSB,program:w.value,isGMGSDrum:M.isDrum},a);break}case"Controller Change":{let M=w.channel+u;w.controller===f.bankSelectLSB?s[M].bankLSB=w.value:w.controller===f.bankSelect&&(s[M].bankMSB=w.value)}}}}}for(let[C,g]of i.entries())g.size===0&&(h.info(`%cDetected change but no keys for %c${C.name}`,d.info,d.value),i.delete(C));return h.groupEnd(),i}var ta=t=>(t.data=new ne(t.data.buffer),6e7/Ht(t.data,3));function Aa(t,e=0){let A=[];for(let B=0;B<16;B++)A.push([]);let s=0,a=60/(120*t.timeDivision),n=0,r=0,i=[];for(let B=0;B<16;B++)i.push(new Map);let o=(B,C)=>{let g=i[C].get(B);if(g===void 0)return;let E=g.shift();if(E===void 0)return;let S=A[C][E],k=s-S.start;S.length=C===9?Math.max(k,e):k,r--},{timeline:I,tracks:l}=t;for(;n<I.length;){let B=I[n],C=l[B.tr].events[B.ev],g=C.statusByte>>4,E=C.statusByte&15;if(g===8)o(C.data[0],E);else if(g===9){let k=C.data[0],u=C.data[1];if(u===0)o(k,E);else{let w={midiNote:k,start:s,length:-1,velocity:u},M=A[E];M.push(w);let R=i[E];R.has(k)||R.set(k,[]),i[E].get(k)?.push(M.length-1),r++}}else C.statusByte===81&&(a=60/(ta(C)*t.timeDivision));if(++n>=I.length)break;let S=I[n];s+=a*(l[S.tr].events[S.ev].ticks-C.ticks)}if(r>0)for(let B=0;B<i.length;B++)for(let C of i[B].values())for(let g of C){let E=A[B][g];E.length=s-E.start}return A}var sa={character:49,preLowpass:50,level:51,time:52,delayFeedback:53,preDelayTime:55},na={preLowpass:57,level:58,feedback:59,delay:60,rate:61,depth:62,sendLevelToReverb:63,sendLevelToDelay:64},aa={preLowpass:81,timeCenter:82,timeRatioLeft:83,timeRatioRight:84,levelCenter:85,levelLeft:86,levelRight:87,level:88,feedback:89,sendLevelToReverb:90};function ra(t,e){h.groupCollapsed("%cApplying changes to the MIDI file...",d.info);let{channels:A,reverbParams:s,chorusParams:a,delayParams:n,insertionParams:r}=e;h.info("Desired channel changes",A),h.info("Desired reverb parameters",s),h.info("Desired chorus parameters",a),h.info("Desired delay parameters",n),h.info("Desired insertion parameters",r);let i=e.drumSetupParams==="clear",o=new Set,I=new Map;if(A)for(let[m,p]of A)p==="clear"?o.add(m):I.set(m,p);let l=(e.midiParams?.system==="clear"?void 0:e.midiParams?.system)??"gs",B=!1,C=0,g=0,E=t.tracks.map(m=>m.port),S={},k=0,u=(m,p)=>{t.tracks[m].channels.size!==0&&(k===0&&(k+=16,S[p]=0),S[p]===void 0&&(S[p]=k,k+=16),E[m]=p)};for(let[m,p]of t.tracks.entries())u(m,p.port);let w=k,M=[];for(let m=0;m<w;m++)M.push({isFirstNoteOn:!0,param:new uA(m),clearedParams:{pLSB:!0,pMSB:!0,data:!0},keyShift:I.get(m)?.keyShift??0,fineTune:I.get(m)?.fineTune??0,currentFineTune:0,currentKeyShift:0});if(t.iterate((m,p,y)=>{let V=t.tracks[p],Y=y[p],q=()=>{V.deleteEvent(Y),y[p]--},J=W=>{let K=M[W],te=K.param,Ae=te.paramMSB,O=te.paramLSB;h.info(`%cClearing Non/Registered Parameter on ${W}. Clear MSB: %c${K.clearedParams.pMSB}%c, clear LSB: %c${K.clearedParams.pLSB}%c, clear data: %c${K.clearedParams.data}.`,d.info,d.recognized,d.info,d.recognized,d.info,d.recognized),K.clearedParams.data||(q(),p===Ae.track&&Y<Ae.event&&Ae.event--,p===O.track&&Y<O.event&&O.event--,K.clearedParams.data=!0),K.clearedParams.pMSB||(t.tracks[Ae.track].deleteEvent(Ae.event),y[Ae.track]--,Ae.track===O.track&&Ae.event<O.event&&O.event--,K.clearedParams.pMSB=!0),K.clearedParams.pLSB||(t.tracks[O.track].deleteEvent(O.event),y[O.track]--,K.clearedParams.pLSB=!0)},ee=W=>{V.addEvents(Y,W),y[p]++},x=(...W)=>{for(let K=W.length-1;K>=0;K--)ee(W[K])},D=S[E[p]]||0;if(m.statusByte===G.midiPort){u(p,m.data[0]);return}if(m.statusByte<G.noteOff||m.statusByte>G.systemExclusive)return;let Q=m.statusByte&240,T=m.statusByte&15,H=T+D;if(m.statusByte!==G.systemExclusive&&o.has(H)){q();return}let z=M[H],j=I.get(H);switch(Q){case G.noteOn:if(!j)break;if(z.isFirstNoteOn){if(z.isFirstNoteOn=!1,j.controllers)for(let[K,te]of j.controllers)te!=="clear"&&ee(ue.controllerChange(m.ticks,T,K,te));if(j.midiParams?.fineTune!==void 0&&j.midiParams.fineTune!=="clear"){let K=z.fineTune+j.midiParams.fineTune;z.currentKeyShift=Math.trunc(K/100),j.midiParams.fineTune=K%100}else{let K=z.fineTune+z.currentFineTune;z.currentKeyShift=Math.trunc(K/100),j.midiParams??={},j.midiParams.fineTune=K%100}let W=j.patch;if(W&&W!=="clear"){h.info(`%cSetting %c${H}%c to %c${je.toMIDIString(W)}%c. Track num: %c${p}`,d.info,d.recognized,d.info,d.recognized,d.info,d.recognized);let K=W.bankMSB,te=W.bankLSB,Ae=W.program;ee(ue.programChange(m.ticks,T,Ae));let O=(re,me)=>{ee(ue.controllerChange(m.ticks,T,re?f.bankSelectLSB:f.bankSelect,me))};if(De.isSystemXG(l)&&W.isGMGSDrum&&(h.info(`%cAdding XG Drum change on track %c${p}`,d.recognized,d.value),K=De.getDrumBank(l),te=0),O(!1,K),O(!0,te),W.isGMGSDrum&&!De.isSystemXG(l)&&T!==9){h.info(`%cAdding GS Drum change on track %c${p}`,d.recognized,d.value);let re=16|ae.channelToSyx(T);ee(ae.gsMessage(m.ticks,40,re,21,[1]))}}if(j.midiParams)for(let[K,te]of Object.entries(j.midiParams))te!=="clear"&&x(...ae.setChannelMIDIParameter(m.ticks,T,l,K,te))}m.data[0]+=z.keyShift+z.currentKeyShift;break;case G.noteOff:if(!j)break;m.data[0]+=z.keyShift+z.currentKeyShift;break;case G.programChange:if(j?.patch){q();return}break;case G.pitchWheel:j?.midiParams?.pitchWheel&&q();break;case G.channelPressure:j?.midiParams?.pressure&&q();break;case G.controllerChange:{let W=m.data[0],K=m.data[1];if(j?.controllers?.get(W)){q();return}switch(W){case f.bankSelect:case f.bankSelectLSB:j?.patch&&q();return;case f.registeredParameterLSB:case f.registeredParameterMSB:case f.nonRegisteredParameterMSB:case f.nonRegisteredParameterLSB:W===f.nonRegisteredParameterLSB||W===f.registeredParameterLSB?z.clearedParams.pLSB=!1:z.clearedParams.pMSB=!1,z.param.controllerChange(W,K,p,Y);return;case f.dataEntryMSB:case f.dataEntryLSB:{z.clearedParams.data=!1;let te=z.param.controllerChange(W,K,p,Y);if(!te)return;switch(te.type){case"Drum Setup":i&&J(H);return;case"Controller Change":{let Ae=te.controller,O=te.channel;if(j?.controllers?.get(Ae)){J(O);return}(Ae===f.bankSelect||Ae===f.bankSelectLSB)&&j?.patch&&J(O);break}case"Channel MIDI Param":if(te.parameter==="fineTune"&&z.fineTune){z.currentFineTune=te.value;let Ae=z.fineTune+te.value;z.currentKeyShift=Math.trunc(Ae/100);let O=Ae%100;h.info(`%cFine tuning already present on ${H}%c (${te.value})%c, new relative tune: %c${Ae}%c cents. Key shift: %c${z.currentKeyShift}%c semitones. Actual RPN value to set: %c${O} cents.`,d.info,d.recognized,d.info,d.value,d.info,d.value,d.info,d.value);let re=Math.floor(O*81.92)+8192;m.data[1]=W===f.dataEntryMSB?re>>7:re&127}else j?.midiParams?.[te.parameter]&&J(H);break}z.clearedParams.pLSB=!0,z.clearedParams.pMSB=!0;return}default:return}}case G.systemExclusive:{let W=ae.analyzeSysEx(m.data);switch(W.type){default:return;case"Drum Setup":i&&q();return;case"Reverb Param":s&&q();return;case"Chorus Param":a&&q();return;case"Delay Param":n&&q();return;case"Insertion Param":r&&q();return;case"Program Change":I.get(W.channel+D)?.patch&&q();return;case"Global MIDI Param":if(e.midiParams?.[W.parameter]){q();return}if(W.parameter==="system")switch(W.value){case"xg":h.info("%cXG system on detected",d.info),l="xg",B=!0,C=p,g=Y;for(let K of M)K.param.reset(),K.clearedParams={pLSB:!0,pMSB:!0,data:!0};return;case"gm2":h.info("%cGM2 system on detected",d.info),l="gm2",B=!0,C=p,g=Y;for(let K of M)K.param.reset(),K.clearedParams={pLSB:!0,pMSB:!0,data:!0};return;case"gs":h.info("%cGS on detected!",d.recognized),B=!0,C=p,g=Y;for(let K of M)K.param.reset(),K.clearedParams={pLSB:!0,pMSB:!0,data:!0};return;case"gm":h.info("%cGM on detected, removing!",d.info),q(),B=!1;return}break;case"Channel MIDI Param":{let K=I.get(W.channel+D);if(K?.midiParams?.[W.parameter]){q();return}if(W.parameter==="fineTune"){let te=M[W.channel+D];if(te.isFirstNoteOn&&K){let Ae=te.fineTune+W.value;te.currentKeyShift=Math.trunc(Ae/100),te.fineTune=Ae%100,h.info(`%cFine tuning already present on ${W.channel+D}, new relative tune: %c${Ae} cents`,d.info,d.recognized),q()}break}break}case"Controller Change":{let K=W.controller,te=I.get(W.channel+D);if(te?.controllers?.get(K)!==void 0){q();return}(K===f.bankSelect||K===f.bankSelectLSB)&&te?.patch&&q();return}}}}}),!B&&[...I.values()].some(m=>m.patch&&m.patch!=="clear")){let m=0;t.tracks[0].events[0].statusByte===G.trackName&&m++;let p=(e.midiParams?.system==="clear"?void 0:e.midiParams?.system)??"gs";t.tracks[0].addEvents(m,ae.reset(0,p)),C=0,g=m,l=p,h.info(`%c${p} reset on not detected. Adding it.`,d.info)}let R=Math.max(0,t.firstNoteOn),v=t.tracks[C],N=g+1;for(let m of Object.keys(e.midiParams??{})){if(m==="system")continue;let p=e.midiParams?.[m];!p||p==="clear"||v.addEvents(N,...ae.setGlobalMIDIParameter(R,l,m,p))}if(s&&s!=="clear"){let m=sa,p=s;v.addEvents(N,ae.gsMessage(R,64,1,m.level,[p.level]),ae.gsMessage(R,64,1,m.preLowpass,[p.preLowpass]),ae.gsMessage(R,64,1,m.character,[p.character]),ae.gsMessage(R,64,1,m.time,[p.time]),ae.gsMessage(R,64,1,m.delayFeedback,[p.delayFeedback]),ae.gsMessage(R,64,1,m.preDelayTime,[p.preDelayTime]))}if(a&&a!=="clear"){let m=na,p=a;v.addEvents(N,ae.gsMessage(R,64,1,m.level,[p.level]),ae.gsMessage(R,64,1,m.preLowpass,[p.preLowpass]),ae.gsMessage(R,64,1,m.feedback,[p.feedback]),ae.gsMessage(R,64,1,m.delay,[p.delay]),ae.gsMessage(R,64,1,m.rate,[p.rate]),ae.gsMessage(R,64,1,m.depth,[p.depth]),ae.gsMessage(R,64,1,m.sendLevelToReverb,[p.sendLevelToReverb]),ae.gsMessage(R,64,1,m.sendLevelToDelay,[p.sendLevelToDelay]))}if(n&&n!=="clear"){let m=aa,p=n;v.addEvents(N,ae.gsMessage(R,64,1,m.level,[p.level]),ae.gsMessage(R,64,1,m.preLowpass,[p.preLowpass]),ae.gsMessage(R,64,1,m.timeCenter,[p.timeCenter]),ae.gsMessage(R,64,1,m.timeRatioLeft,[p.timeRatioLeft]),ae.gsMessage(R,64,1,m.timeRatioRight,[p.timeRatioRight]),ae.gsMessage(R,64,1,m.levelCenter,[p.levelCenter]),ae.gsMessage(R,64,1,m.levelLeft,[p.levelLeft]),ae.gsMessage(R,64,1,m.levelRight,[p.levelRight]),ae.gsMessage(R,64,1,m.feedback,[p.feedback]),ae.gsMessage(R,64,1,m.sendLevelToReverb,[p.sendLevelToReverb]))}if(r&&r!=="clear"){let m=r;for(let p=0;p<m.params.length;p++){let y=m.params[p];y!==255&&v.addEvents(N,ae.gsMessage(R,64,3,p+3,[y]))}v.addEvents(N,ae.gsMessage(R,64,3,0,[m.type>>8,m.type&127]))}t.flush(),h.groupEnd()}var RA=class nn{name="";port=0;channels=new Set;events=[];static copyFrom(e){let A=new nn;return A.copyFrom(e),A}copyFrom(e){this.name=e.name,this.port=e.port,this.channels=new Set(e.channels),this.events=e.events.map(A=>new ue(A.ticks,A.statusByte,new ne(A.data)))}addEvent(e,A){this.events.splice(A,0,e)}addEvents(e,...A){this.events.splice(e,0,...A)}deleteEvent(e){this.events.splice(e,1)}pushEvent(e){this.events.push(e)}},ia={8:2,9:2,10:2,11:2,12:1,13:1,14:2};function Cs(t,e,A){h.groupCollapsed("%cParsing MIDI File...",d.info),t.fileName=A;let s=r=>{let i=de(r,4),o=Nt(r,4),I={type:i,size:o,data:new ne(o)},l=r.slice(r.currentIndex,r.currentIndex+I.size);return I.data.set(l,0),r.currentIndex+=I.size,I},a=s(e);if(a.type!=="MThd")throw h.groupEnd(),new SyntaxError(`Invalid MIDI Header! Expected "MThd", got "${a.type}"`);if(a.size!==6)throw h.groupEnd(),new RangeError(`Invalid MIDI header chunk size! Expected 6, got ${a.size}`);t.format=Nt(a.data,2);let n=Nt(a.data,2);t.timeDivision=Nt(a.data,2);for(let r=0;r<n;r++){let i=new RA,o=s(e);if(o.type!=="MTrk")throw h.groupEnd(),new SyntaxError(`Invalid track header! Expected "MTrk" got "${o.type}"`);let I,l=0;t.format===2&&r>0&&(l+=t.tracks[r-1].events[t.tracks[r-1].events.length-1].ticks);let B=o.data;for(;B.currentIndex<o.size;){l+=pe(B);let C=B[B.currentIndex],g;if(I!==void 0&&C<128)g=I;else{if(C<128)throw h.groupEnd(),new SyntaxError(`Unexpected byte with no running byte. (${C})`);g=C,B.currentIndex++}let E;g>=G.noteOff&&g<G.systemExclusive?(E=ia[g>>4],I=g):g===G.systemExclusive?E=pe(B):g===255?(g=B[B.currentIndex++],E=pe(B)):E=0;let S=new ne(E);S.set(B.slice(B.currentIndex,B.currentIndex+E)),i.pushEvent(new ue(l,g,S)),B.currentIndex+=E}t.tracks.push(i),h.info(`%cParsed %c${t.tracks.length}%c / %c${t.tracks.length}`,d.info,d.value,d.info,d.value)}h.info("%cAll tracks parsed correctly!",d.recognized),t.flush(!1),h.groupEnd()}function Bs(t){return t.toISOString().split(".")[0]+"Z"}var oa=[new Map([["domingo","Sunday"],["segunda-feira","Monday"],["ter\xE7a-feira","Tuesday"],["quarta-feira","Wednesday"],["quinta-feira","Thursday"],["sexta-feira","Friday"],["s\xE1bado","Saturday"],["janeiro","January"],["fevereiro","February"],["mar\xE7o","March"],["abril","April"],["maio","May"],["junho","June"],["julho","July"],["agosto","August"],["setembro","September"],["outubro","October"],["novembro","November"],["dezembro","December"]])];function ga(t){for(let e of oa){let A=t;for(let[a,n]of e.entries()){let r=new RegExp(a,"gi");A=A.replace(r,n)}let s=new Date(A);if(!Number.isNaN(s.getTime()))return s}}function Ia(t){let e=/^(\d{2})\.(\d{2})\.(\d{4})$/.exec(t);if(e){let A=Number.parseInt(e[1]),s=Number.parseInt(e[2])-1,a=Number.parseInt(e[3]),n=new Date(a,s,A);if(!Number.isNaN(n.getTime()))return n}}function ca(t){let e=/^(\d{1,2})\s{1,2}(\d{1,2})\s{1,2}(\d{2})$/.exec(t);if(e){let A=e[1],s=(Number.parseInt(e[2])+1).toString(),a=e[3],n=new Date(`${s}/${A}/${a}`);if(!Number.isNaN(n.getTime()))return n}}function ha(t){let e=/\b\d{4}\b/.exec(t);return e?new Date(e[0]):void 0}function Es(t){if(t=t.trim(),t.length===0)return new Date;let e=t.replaceAll(/\b(\d+)(st|nd|rd|th)\b/g,"$1").replace(/\s+at\s+/i," "),A=new Date(e);if(Number.isNaN(A.getTime())){let s=ga(t);if(s)return s;let a=Ia(t);if(a)return a;let n=ca(t);if(n)return n;let r=ha(t);return r||(h.warn(`Invalid date: "${t}". Replacing with the current date!`),new Date)}return A}function la(t,e,A){e.currentIndex+=8;let s=de(e,4);if(s!=="RMID")throw h.groupEnd(),new SyntaxError(`Invalid RMIDI Header! Expected "RMID", got "${s}"`);let a=U.read(e);if(a.header!=="data")throw h.groupEnd(),new SyntaxError(`Invalid RMIDI Chunk header! Expected "data", got "${a.header}"`);let n=a.data,r=!1,i=!1;for(;e.currentIndex<e.length;){let o=e.currentIndex,I=U.read(e,!0);if(I.header==="RIFF"){let l=de(I.data,4).toLowerCase();l==="sfbk"||l==="sfpk"||l==="dls "?(h.info("%cFound embedded soundbank!",d.recognized),t.embeddedSoundBank=e.slice(o,o+I.size).buffer):h.warn(`Unknown RIFF chunk: "${l}"`),l==="dls "?t.isDLSRMIDI=!0:r=!0}else if(I.header==="LIST"&&de(I.data,4)==="INFO")for(h.info("%cFound RMIDI INFO chunk!",d.recognized);I.data.currentIndex<I.size;){let l=U.read(I.data,!0),B=l.header,C=l.data;switch(B){default:h.warn(`Unknown RMIDI Info: ${B}`);break;case"INAM":t.rmidiInfo.name=C;break;case"IALB":case"IPRD":t.rmidiInfo.album=C;break;case"ICRT":case"ICRD":t.rmidiInfo.creationDate=C;break;case"IART":t.rmidiInfo.artist=C;break;case"IGNR":t.rmidiInfo.genre=C;break;case"IPIC":t.rmidiInfo.picture=C;break;case"ICOP":t.rmidiInfo.copyright=C;break;case"ICMT":t.rmidiInfo.comment=C;break;case"IENG":t.rmidiInfo.engineer=C;break;case"ISFT":t.rmidiInfo.software=C;break;case"ISBJ":t.rmidiInfo.subject=C;break;case"IENC":t.rmidiInfo.infoEncoding=C;break;case"MENC":t.rmidiInfo.midiEncoding=C;break;case"DBNK":t.bankOffset=cs(C,2),i=!0;break}}}r&&!i&&(t.bankOffset=1),t.isDLSRMIDI&&(t.bankOffset=0),t.embeddedSoundBank===void 0&&(t.bankOffset=0),Cs(t,n,A)}var HA={XMFFileType:0,nodeName:1,nodeIDNumber:2,resourceFormat:3,filenameOnDisk:4,filenameExtensionOnDisk:5,macOSFileTypeAndCreator:6,mimeType:7,title:8,copyrightNotice:9,comment:10,autoStart:11,preload:12,contentDescription:13,ID3Metadata:14},Gt={inLineResource:1,inFileResource:2,inFileNode:3,externalFile:4,externalXMF:5,XMFFileURIandNodeID:6},OA={StandardMIDIFile:0,StandardMIDIFileType1:1,DLS1:2,DLS2:3,DLS22:4,mobileDLS:5,unknown:-1,folder:-2},Ca={standard:0,MMA:1,registered:2,nonRegistered:3},rA={none:0,MMAUnpacker:1,registered:2,nonRegistered:3},Ba=class an{length;itemCount;metadataLength;metadata={};nodeData;innerNodes=[];packedContent=!1;nodeUnpackers=[];resourceFormat="unknown";referenceTypeID;constructor(e){let A=e.currentIndex;this.length=pe(e),this.itemCount=pe(e);let s=pe(e),a=s-(e.currentIndex-A),n=e.slice(e.currentIndex,e.currentIndex+a);e.currentIndex+=a,this.metadataLength=pe(n);let r=n.slice(n.currentIndex,n.currentIndex+this.metadataLength);n.currentIndex+=this.metadataLength;let i,o;for(;r.currentIndex<r.length;){r[r.currentIndex]===0?(r.currentIndex++,i=pe(r),Object.values(HA).includes(i)?o=Object.keys(HA).find(g=>HA[g]===i)??"":(h.info(`Unknown field specifier: ${i}`),o=`unknown_${i}`)):(i=de(r,pe(r)),o=i);let C=pe(r);if(C===0){let g=pe(r),E=r.slice(r.currentIndex,r.currentIndex+g);r.currentIndex+=g;let S=pe(E);this.metadata[o]=S<4?de(E,g-1):E.slice(E.currentIndex)}else h.info(`International content: ${C}`),r.currentIndex+=pe(r)}let I=n.currentIndex,l=pe(n),B=n.slice(n.currentIndex,I+l);if(n.currentIndex=I+l,l>0)for(this.packedContent=!0;B.currentIndex<l;){let C={id:pe(B)};switch(C.id){case rA.nonRegistered:case rA.registered:throw h.groupEnd(),new Error(`Unsupported unpacker ID: ${C.id}`);default:throw h.groupEnd(),new Error(`Unknown unpacker ID: ${C.id}`);case rA.none:C.standardID=pe(B);break;case rA.MMAUnpacker:{let g=B[B.currentIndex++];g===0&&(g<<=8,g|=B[B.currentIndex++],g<<=8,g|=B[B.currentIndex++]);let E=pe(B);C.manufacturerID=g,C.manufacturerInternalID=E}break}C.decodedSize=pe(B),this.nodeUnpackers.push(C)}switch(e.currentIndex=A+s,this.referenceTypeID=pe(e),this.nodeData=e.slice(e.currentIndex,A+this.length),e.currentIndex=A+this.length,this.referenceTypeID){case Gt.inLineResource:break;case Gt.externalXMF:case Gt.inFileNode:case Gt.XMFFileURIandNodeID:case Gt.externalFile:case Gt.inFileResource:throw h.groupEnd(),new Error(`Unsupported reference type: ${this.referenceTypeID}`);default:throw h.groupEnd(),new Error(`Unknown reference type: ${this.referenceTypeID}`)}if(this.isFile){if(this.packedContent){let g=this.nodeData.slice(2);h.info(`%cPacked content. Attempting to deflate. Target size: %c${this.nodeUnpackers[0].decodedSize}`,d.warn,d.value);try{this.nodeData=new ne(tn(g).buffer)}catch(E){if(h.groupEnd(),E instanceof Error)throw new Error(`Error unpacking XMF file contents: ${E.message}.`,{cause:E})}}let C=this.metadata.resourceFormat;if(C===void 0)h.warn("No resource format for this file node!");else{C[0]!==Ca.standard&&(h.info(`Non-standard formatTypeID: ${C.toString()}`),this.resourceFormat=C.toString());let g=C[1];Object.values(OA).includes(g)?this.resourceFormat=Object.keys(OA).find(E=>OA[E]===g):h.info(`Unrecognized resource format: ${g}`)}}else for(this.resourceFormat="folder";this.nodeData.currentIndex<this.nodeData.length;){let C=this.nodeData.currentIndex,g=pe(this.nodeData),E=this.nodeData.slice(C,C+g);this.nodeData.currentIndex=C+g,this.innerNodes.push(new an(E))}}get isFile(){return this.itemCount===0}};function Ea(t,e,A){t.bankOffset=0;let s=de(e,4);if(s!=="XMF_")throw h.groupEnd(),new SyntaxError(`Invalid XMF Header! Expected "_XMF", got "${s}"`);h.group("%cParsing XMF file...",d.info);let a=de(e,4);if(h.info(`%cXMF version: %c${a}`,d.info,d.recognized),a==="2.00"){let I=Nt(e,4),l=Nt(e,4);h.info(`%cFile Type ID: %c${I}%c, File Type Revision ID: %c${l}`,d.info,d.recognized,d.info,d.recognized)}pe(e);let n=pe(e);e.currentIndex+=n,e.currentIndex=pe(e);let r=new Ba(e),i,o=I=>{let l=(B,C)=>{I.metadata[B]!==void 0&&typeof I.metadata[B]=="string"&&(t.rmidiInfo[C]=et(I.metadata[B]))};if(l("nodeName","name"),l("title","name"),l("copyrightNotice","copyright"),l("comment","comment"),I.isFile)switch(I.resourceFormat){default:return;case"DLS1":case"DLS2":case"DLS22":case"mobileDLS":h.info("%cFound embedded DLS!",d.recognized),t.embeddedSoundBank=I.nodeData.buffer;break;case"StandardMIDIFile":case"StandardMIDIFileType1":h.info("%cFound embedded MIDI!",d.recognized),i=I.nodeData;break}else for(let B of I.innerNodes)o(B)};if(o(r),h.groupEnd(),!i)throw new Error("No MIDI data in the XMF file!");Cs(t,i,A)}function da(t,e){let A=new Map,s=e.systemParameters.keyShift,a=e.systemParameters.fineTune;for(let r=0;r<e.midiChannels.length;r++){let i=e.midiChannels[r];if(i.systemParameters.isMuted){A.set(r,"clear");continue}let o=i.systemParameters.keyShift+(i.drumChannel?0:s),I=i.systemParameters.fineTune+(i.drumChannel?0:a),l;i.systemParameters.presetLock&&i.patch&&(l={...i.patch});let B=new Map;for(let g=0;g<128;g++){if(!i.lockedControllers[g]||g===f.bankSelect)continue;let E=i.midiControllers[g]>>7;B.set(g,E)}let C={};for(let[g,E]of Object.entries(i.midiParameters))i.lockedMIDIParameters[g]&&(C[g]=E);A.set(r,{keyShift:o,fineTune:I,patch:l,controllers:B,midiParams:C})}let n={};for(let[r,i]of Object.entries(e.midiParameters))e.lockedMIDIParameters[r]&&(n[r]=i);t.modify({channels:A,drumSetupParams:e.systemParameters.drumLock?"clear":void 0,reverbParams:e.systemParameters.reverbLock?e.reverbProcessor:void 0,chorusParams:e.systemParameters.chorusLock?e.chorusProcessor:void 0,delayParams:e.systemParameters.delayLock?e.delayProcessor:void 0,insertionParams:e.systemParameters.insertionEffectLock?e.insertionProcessor:void 0,midiParams:n})}var Mt=class jA{tracks=[];timeline=[];timeDivision=480;duration=0;tempoChanges=[{ticks:0,tempo:120}];extraMetadata=[];lyrics=[];firstNoteOn=0;keyRange={min:0,max:127};lastVoiceEventTick=0;portChannelOffsetMap=[0];loop={start:0,end:0,type:"hard"};fileName;format=0;rmidiInfo={};bankOffset=0;isKaraokeFile=!1;isMultiPort=!1;isDLSRMIDI=!1;embeddedSoundBank;binaryName;get infoEncoding(){let e=this.rmidiInfo.infoEncoding;if(!e)return;let A=e.byteLength;return e[e.byteLength-1]===0&&A--,$e(e,A)}static fromArrayBuffer(e,A=""){let s=new jA,a=new ne(e);switch($e(a,4)){case"RIFF":la(s,a,A);break;case"XMF_":Ea(s,a,A);break;default:Cs(s,a,A);break}return s}static async fromFile(e){return this.fromArrayBuffer(await e.arrayBuffer(),e.name)}static copyFrom(e){let A=new jA;return A.copyFrom(e),A}copyFrom(e){this.copyMetadataFrom(e),this.embeddedSoundBank=e?.embeddedSoundBank?.slice(0)??void 0,this.tracks=e.tracks.map(A=>RA.copyFrom(A)),this.timeline=e.timeline.map(A=>({...A}))}midiTicksToSeconds(e){if(e=Math.max(e,0),this.tempoChanges.length===0)throw new Error("There are no tempo changes in the sequence. At least one is needed.");if(this.tempoChanges[this.tempoChanges.length-1].ticks!==0)throw new Error(`The last tempo change is not at 0 ticks. Got ${this.tempoChanges[this.tempoChanges.length-1].ticks} ticks.`);let A=this.tempoChanges.findIndex(a=>a.ticks<=e),s=0;for(;A<this.tempoChanges.length;){let a=this.tempoChanges[A++],n=e-a.ticks;s+=n*60/(a.tempo*this.timeDivision),e=a.ticks}return s}secondsToMIDITicks(e){if(e=Math.max(e,0),e===0)return 0;if(this.tempoChanges.length===0)throw new Error("There are no tempo changes in the sequence. At least one is needed.");if(this.tempoChanges[this.tempoChanges.length-1].ticks!==0)throw new Error(`The last tempo change is not at 0 ticks. Got ${this.tempoChanges[this.tempoChanges.length-1].ticks} ticks.`);let A=e,s=0;for(let a=this.tempoChanges.length-1;a>=0;a--){let n=this.tempoChanges[a],r=this.tempoChanges[a-1],i=r?r.ticks-n.ticks:1/0,o=60/(n.tempo*this.timeDivision),I=i*o;if(A<=I)return s+=Math.round(A/o),s;s+=i,A-=I}return s}getUsedProgramsAndKeys(e){return ea(this,e)}preloadSynth(e){h.groupCollapsed("%cPreloading samples...",d.info);let A=this.getUsedProgramsAndKeys(e.soundBankManager);for(let[s,a]of A.entries()){h.info(`%cPreloading used samples on %c${s.name}%c...`,d.info,d.recognized,d.info);for(let[n,r]of a.entries())for(let i of r)e.getVoicesForPreset(s,n,i)}h.groupEnd()}flush(e=!0){if(e)for(let A of this.tracks)A.events.sort((s,a)=>s.ticks-a.ticks);this.parseInternal()}getNoteTimes(e=0){return Aa(this,e)}writeMIDI(){return Kn(this)}writeRMIDI(e,A=bs){return jn(this,e,bA(A,bs))}modify(e){ra(this,e)}applySnapshot(e){da(this,e)}getName(e="Shift_JIS"){let A="",s=this.getRMIDInfo("name");if(s)return s.trim();if(this.binaryName){e=this.getRMIDInfo("midiEncoding")??e;try{A=new TextDecoder(e).decode(this.binaryName).trim()}catch(a){h.warn(`Failed to decode MIDI name: ${a}`)}}return A||this.fileName}getExtraMetadata(e="Shift_JIS"){e=this.infoEncoding??e;let A=new TextDecoder(e);return this.extraMetadata.map(s=>A.decode(s.data).replaceAll(/@T|@A/g,"").trim())}setRMIDInfo(e,A){if(this.rmidiInfo.infoEncoding=et("utf-8",!0),e==="picture")this.rmidiInfo.picture=new Uint8Array(A);else if(e==="creationDate")this.rmidiInfo.creationDate=et(Bs(A),!0);else{let s=new TextEncoder().encode(A);this.rmidiInfo[e]=new Uint8Array([...s,0])}}getRMIDInfo(e){if(!this.rmidiInfo[e])return;let A=this.infoEncoding??"UTF-8";if(e==="picture")return this.rmidiInfo[e].buffer;if(e==="creationDate")return Es($e(this.rmidiInfo[e]));try{let s=new TextDecoder(A),a=this.rmidiInfo[e];return a[a.length-1]===0&&(a=a?.slice(0,-1)),s.decode(a.buffer).trim()}catch(s){h.warn(`Failed to decode ${e} name: ${s}`);return}}iterate(e){let A=new Array(this.tracks.length).fill(0),s=this.tracks.length;for(;s>0;){let a=0,n=1/0;for(let o=0;o<this.tracks.length;o++){let I=this.tracks[o].events;A[o]>=I.length||I[A[o]].ticks<n&&(a=o,n=I[A[o]].ticks)}let r=this.tracks[a].events;if(A[a]>=r.length){s--;continue}let i=A[a];e(r[i],a,A),A[a]++}}copyMetadataFrom(e){this.fileName=e.fileName,this.timeDivision=e.timeDivision,this.duration=e.duration,this.firstNoteOn=e.firstNoteOn,this.lastVoiceEventTick=e.lastVoiceEventTick,this.format=e.format,this.bankOffset=e.bankOffset,this.isKaraokeFile=e.isKaraokeFile,this.isMultiPort=e.isMultiPort,this.isDLSRMIDI=e.isDLSRMIDI,this.isDLSRMIDI=e.isDLSRMIDI,this.tempoChanges=[...e.tempoChanges],this.extraMetadata=e.extraMetadata.map(A=>new ue(A.ticks,A.statusByte,new ne(A.data))),this.lyrics=e.lyrics.map(A=>new ue(A.ticks,A.statusByte,new ne(A.data))),this.portChannelOffsetMap=[...e.portChannelOffsetMap],this.binaryName=e?.binaryName?.slice(),this.loop={...e.loop},this.keyRange={...e.keyRange},this.rmidiInfo={};for(let A of Object.entries(e.rmidiInfo)){let s=A[0],a=A[1];this.rmidiInfo[s]=new Uint8Array(a)}}parseInternal(){h.group("%cInterpreting MIDI events...",d.info);let e=!1;this.tempoChanges=[{ticks:0,tempo:120}],this.extraMetadata=[],this.lyrics=[],this.firstNoteOn=0,this.keyRange={max:0,min:127},this.lastVoiceEventTick=0,this.portChannelOffsetMap=[0],this.loop={start:0,end:0,type:"hard"},this.isKaraokeFile=!1,this.isMultiPort=!1;let A=!1;this.rmidiInfo.name!==void 0&&(A=!0);let s=null,a=null,n="hard";for(let I of this.tracks){let l=new Set,B=!1;for(let g=0;g<I.events.length;g++){let E=I.events[g];if(E.statusByte>=128&&E.statusByte<240)switch(B=!0,E.ticks>this.lastVoiceEventTick&&(this.lastVoiceEventTick=E.ticks),E.statusByte&240){case G.controllerChange:switch(E.data[0]){case f.breathController:case f.undefinedCC111LSB:E.data[1]===0&&(s=E.ticks);break;case f.undefinedCC116LSB:s=E.ticks;break;case f.footController:case f.undefinedCC117LSB:a===null&&(E.data[0]!==4||E.data[0]===4&&E.data[1]===0)?(n="soft",a=E.ticks):(a=0,n="hard");break;case f.bankSelect:this.isDLSRMIDI&&E.data[1]!==0&&E.data[1]!==127&&(h.info("%cDLS RMIDI with offset 1 detected!",d.recognized),this.bankOffset=1)}break;case G.noteOn:{l.add(E.statusByte&15);let k=E.data[0];this.keyRange.min=Math.min(this.keyRange.min,k),this.keyRange.max=Math.max(this.keyRange.max,k);break}}let S=$e(E.data);switch(E.statusByte){case G.endOfTrack:g!==I.events.length-1&&(I.deleteEvent(g),g--,h.warn("Unexpected EndOfTrack. Removing!"));break;case G.setTempo:this.tempoChanges.push({ticks:E.ticks,tempo:6e7/Ht(E.data,3)});break;case G.marker:switch(S.trim().toLowerCase()){default:break;case"start":case"loopstart":s=E.ticks;break;case"loopend":a=E.ticks}break;case G.copyright:this.extraMetadata.push(E);break;case G.lyric:S.trim().startsWith("@KMIDI KARAOKE FILE")&&(this.isKaraokeFile=!0,h.info("%cKaraoke MIDI detected!",d.recognized)),this.isKaraokeFile?E.statusByte=G.text:this.lyrics.push(E);case G.text:{let k=S.trim();k.startsWith("@KMIDI KARAOKE FILE")?(this.isKaraokeFile=!0,h.info("%cKaraoke MIDI detected!",d.recognized)):this.isKaraokeFile&&(k.startsWith("@T")||k.startsWith("@A")?e?this.extraMetadata.push(E):(this.binaryName=E.data.slice(2),e=!0,A=!0):k.startsWith("@")||this.lyrics.push(E));break}}}I.channels=l,I.name="";let C=I.events.find(g=>g.statusByte===G.trackName);C&&this.tracks.indexOf(I)>0&&(I.name=$e(C.data),!B&&!I.name.toLowerCase().includes("setup")&&this.extraMetadata.push(C))}this.tempoChanges.reverse(),h.info("%cCorrecting loops, ports and detecting notes...",d.info);let r=[];for(let I of this.tracks){let l=I.events.find(B=>(B.statusByte&240)===G.noteOn);l&&r.push(l.ticks)}this.firstNoteOn=Math.min(...r),h.info(`%cFirst note-on detected at: %c${this.firstNoteOn}%c ticks!`,d.info,d.recognized,d.info),s??=this.firstNoteOn,(a===null||a===0)&&(a=this.lastVoiceEventTick),this.loop={start:s,end:a,type:n},this.lastVoiceEventTick=Math.max(this.lastVoiceEventTick,this.loop.end),h.info(`%cLoop points: start: %c${this.loop.start}%c end: %c${this.loop.end}`,d.info,d.recognized,d.info,d.recognized);let i=0;this.portChannelOffsetMap=[];for(let I of this.tracks)if(I.port=-1,I.channels.size!==0)for(let l of I.events){if(l.statusByte!==G.midiPort)continue;let B=l.data[0];I.port=B,this.portChannelOffsetMap[B]===void 0&&(this.portChannelOffsetMap[B]=i,i+=16)}this.portChannelOffsetMap=[...this.portChannelOffsetMap].map(I=>I??0);let o=1/0;for(let I of this.tracks)I.port!==-1&&o>I.port&&(o=I.port);o===1/0&&(o=0);for(let I of this.tracks)(I.port===-1||I.port===void 0)&&(I.port=o);if(this.portChannelOffsetMap.length===0&&(this.portChannelOffsetMap=[0]),this.portChannelOffsetMap.length<2?h.info("%cNo additional MIDI Ports detected.",d.info):(this.isMultiPort=!0,h.info("%cMIDI Ports detected!",d.recognized)),!A)if(this.tracks.length>1){if(!this.tracks[0].events.some(I=>I.statusByte>=G.noteOn&&I.statusByte<G.polyPressure)){let I=this.tracks[0].events.find(l=>l.statusByte===G.trackName);I&&(this.binaryName=I.data)}}else{let I=this.tracks[0].events.find(l=>l.statusByte===G.trackName);I&&(this.binaryName=I.data)}if(this.extraMetadata=this.extraMetadata.filter(I=>I.data.length>0),this.lyrics.sort((I,l)=>I.ticks-l.ticks),!this.tracks.some(I=>I.events[0].ticks===0)){let I=this.tracks[0],l=this?.binaryName?.buffer;l||(l=new Uint8Array(0).buffer),I.addEvents(0,new ue(0,G.trackName,new ne(l)))}this.duration=this.midiTicksToSeconds(this.lastVoiceEventTick),this.timeline.length=0,this.iterate((I,l,B)=>{this.timeline.push(Object.freeze({ev:B[l],tr:l}))}),this.binaryName?.length===0&&(this.binaryName=void 0),h.info(`%cMIDI file parsed. Total tick time: %c${this.lastVoiceEventTick}%c, total seconds time: %c${zA(Math.ceil(this.duration)).time}`,d.info,d.recognized,d.info,d.recognized),h.groupEnd()}};function fa(t,e){if(this.externalMIDIPlayback&&t.statusByte>=128){this.sendMIDIMessage([t.statusByte,...t.data]);return}let A=this._midiData.tracks[e],s,a=0;t.statusByte>=128&&t.statusByte<240?(s=t.statusByte&240,a=t.statusByte&15):s=t.statusByte;let n=this.midiPortChannelOffsets[this.currentMIDIPorts[e]]||0;switch(a+=n,s){case G.noteOn:{let r=this.playingNotes[a];if(!r){for(;this.playingNotes.length<=a;)this.playingNotes.push(new Map);r=this.playingNotes[a]}let i=t.data[1];i>0?(this.synth.noteOn(a,t.data[0],i),r.set(t.data[0],i)):(this.synth.noteOff(a,t.data[0]),r.delete(t.data[0]));break}case G.noteOff:{let r=this.playingNotes[a];if(!r){for(;this.playingNotes.length<=a;)this.playingNotes.push(new Map);r=this.playingNotes[a]}this.synth.noteOff(a,t.data[0]),r.delete(t.data[0]);break}case G.pitchWheel:this.synth.pitchWheel(a,t.data[1]<<7|t.data[0]);break;case G.controllerChange:if(this._midiData.isMultiPort&&A.channels.size===0)return;this.synth.controllerChange(a,t.data[0],t.data[1]);break;case G.programChange:if(this._midiData.isMultiPort&&A.channels.size===0)return;this.synth.programChange(a,t.data[0]);break;case G.polyPressure:this.synth.polyPressure(a,t.data[0],t.data[1]);break;case G.channelPressure:this.synth.channelPressure(a,t.data[0]);break;case G.systemExclusive:this.synth.systemExclusive(t.data,n);break;case G.setTempo:{let r=6e7/Ht(t.data,3);this.oneTickToSeconds=60/(r*this._midiData.timeDivision),this.oneTickToSeconds===0&&(this.oneTickToSeconds=60/(120*this._midiData.timeDivision),h.info("invalid tempo! falling back to 120 BPM"));break}case G.timeSignature:case G.endOfTrack:case G.midiChannelPrefix:case G.songPosition:case G.activeSensing:case G.keySignature:case G.sequenceNumber:case G.sequenceSpecific:case G.text:case G.lyric:case G.copyright:case G.trackName:case G.marker:case G.cuePoint:case G.instrumentName:case G.programName:break;case G.midiPort:this.assignMIDIPort(e,t.data[0]);break;case G.reset:this.synth.stopAllChannels(),this.synth.reset();break;default:h.info(`%cUnrecognized Event: %c${t.statusByte}%c status byte: %c${Object.keys(G).find(r=>G[r]===s)}`,d.warn,d.unrecognized,d.warn,d.value);break}s>=0&&s<128&&this.callEvent("metaEvent",{event:t,trackIndex:e})}function Qa(){if(this.paused||!this._midiData)return;let t=this.currentTime;for(;this.playedTime<t;){let{timeline:e,tracks:A,lastVoiceEventTick:s,loop:a}=this._midiData,n=e[this.index++],r=A[n.tr].events[n.ev];if(this.processEvent(r,n.tr),this.loopCount>0&&a.end<=r.ticks){this.loopCount!==1/0&&(this.loopCount--,this.callEvent("loopCountChange",{newCount:this.loopCount})),a.type==="soft"?this.jumpToTick(a.start):this.setTimeTicks(a.start);return}if(this.index>=e.length||r.ticks>=s){this.songIsFinished();return}let i=e[this.index],o=A[i.tr].events[i.ev];this.playedTime+=this.oneTickToSeconds*(o.ticks-r.ticks)}}function ua(t,e){this._midiData.tracks[t].channels.size!==0&&(this.midiPortChannelOffset===0&&(this.midiPortChannelOffset+=16,this.midiPortChannelOffsets[e]=0),this.midiPortChannelOffsets[e]===void 0&&(this.synth.midiChannels.length<this.midiPortChannelOffset+15&&this.addNewMIDIPort(),this.midiPortChannelOffsets[e]=this.midiPortChannelOffset,this.midiPortChannelOffset+=16),this.currentMIDIPorts[t]=e)}function ma(t){if(!t.tracks)throw new Error("This MIDI has no tracks!");if(t.duration===0){h.warn("This MIDI file has a duration of exactly 0 seconds."),this.pausedTime=0,this.isFinished=!0;return}this.oneTickToSeconds=60/(120*t.timeDivision),this._midiData=t,this.isFinished=!1,this.synth.clearEmbeddedSoundBank(),this._midiData.embeddedSoundBank!==void 0&&(h.info("%cEmbedded soundbank detected! Using it.",d.recognized),this.synth.setEmbeddedSoundBank(this._midiData.embeddedSoundBank,this._midiData.bankOffset),this.preload&&this._midiData.preloadSynth(this.synth)),this.currentMIDIPorts=this._midiData.tracks.map(e=>e.port),this.midiPortChannelOffset=0,this.midiPortChannelOffsets={};for(let[e,A]of this._midiData.tracks.entries())this.assignMIDIPort(e,A.port);this.firstNoteTime=this._midiData.midiTicksToSeconds(this._midiData.firstNoteOn),h.info(`%cTotal song time: ${zA(Math.ceil(this._midiData.duration)).time}`,d.recognized),this.callEvent("songChange",{songIndex:this._songIndex}),this._midiData.duration<=.2&&(h.warn(`%cVery short song: (${zA(Math.round(this._midiData.duration)).time}). Disabling loop!`,d.warn),this.loopCount=0),this.currentTime=0}var yt=new Int16Array(128).fill(0),Ge=(t,e)=>yt[t]=e<<7;Ge(f.mainVolume,100);Ge(f.balance,64);Ge(f.expression,127);Ge(f.pan,64);Ge(f.filterResonance,64);Ge(f.releaseTime,64);Ge(f.attackTime,64);Ge(f.brightness,64);Ge(f.decayTime,64);Ge(f.vibratoRate,64);Ge(f.vibratoDepth,64);Ge(f.vibratoDelay,64);Ge(f.generalPurposeController6,64);Ge(f.generalPurposeController8,64);Ge(f.registeredParameterLSB,127);Ge(f.registeredParameterMSB,127);Ge(f.nonRegisteredParameterLSB,0);Ge(f.nonRegisteredParameterMSB,0);var mA=new Int8Array(128).fill(127);mA[35]=0;mA[36]=0;function pa(t=!0){for(let e=0;e<128;e++){if(this.lockedControllers[e]){this.synthCore.callEvent("controllerChange",{channel:this.channel,controller:e,value:this._midiControllers[e]>>7});continue}let A=yt[e];this._midiControllers[e]!==A&&e!==f.portamentoControl&&e!==f.dataEntryMSB&&e!==f.registeredParameterMSB&&e!==f.registeredParameterLSB&&e!==f.nonRegisteredParameterMSB&&e!==f.nonRegisteredParameterLSB&&this.controllerChange(e,A>>7,t)}this.setMIDIParameter("pressure",0),this.setMIDIParameter("pitchWheelRange",2),this.setMIDIParameter("modulationDepth",50),this.setMIDIParameter("rxChannel",this.channel),this.setMIDIParameter("efxAssign",!1),this.setMIDIParameter("polyMode",!0),this.setMIDIParameter("keyShift",0),this.setMIDIParameter("fineTune",0),this.setMIDIParameter("assignMode",2),this.setMIDIParameter("randomPan",!1),this.setMIDIParameter("cc1",16),this.setMIDIParameter("cc2",17),this.setMIDIParameter("drumMap",this.channel%16===9?1:0),this.setMIDIParameter("velocitySenseOffset",64),this.setMIDIParameter("velocitySenseDepth",64),this.pitchWheel(8192),this.octaveTuning.fill(0),this.lastPortamentoNote=this.channelSystem==="xg"?60:-1,this.resetDrumParams(),this.resetGeneratorOverrides(),this.resetGeneratorOffsets(),this.dynamicModulators.resetModulators(),this.sf2NRPNGeneratorLSB=0,this.playingNotes.fill(!1),this.lastParameterIsRegistered=!0,this._midiControllers[f.nonRegisteredParameterLSB]=0,this._midiControllers[f.nonRegisteredParameterMSB]=0,this._midiControllers[f.registeredParameterLSB]=16256,this._midiControllers[f.registeredParameterMSB]=16256,this._midiControllers[f.dataEntryMSB]=0,this._midiControllers[f.dataEntryLSB]=0,this.setBankMSB(De.getDefaultBank(this.channelSystem)),this.setBankLSB(0),this.setGSDrums(!1),this.setDrums(this.channel%16===9),this.programChange(0)}var rn=[f.modulationWheel,f.expression,f.sustainPedal,f.portamentoOnOff,f.sostenutoPedal,f.softPedal,f.registeredParameterMSB,f.registeredParameterLSB];function ya(){this.pitchWheel(8192),this.setMIDIParameter("pressure",0);for(let t of rn){let e=yt[t];e!==this._midiControllers[t]&&this.controllerChange(t,e>>7)}}var iA=new Set([f.dataDecrement,f.dataIncrement,f.dataEntryMSB,f.dataEntryLSB,f.registeredParameterLSB,f.registeredParameterMSB,f.nonRegisteredParameterLSB,f.nonRegisteredParameterMSB,f.bankSelect,f.bankSelectLSB,f.resetAllControllers,f.monoModeOn,f.polyModeOn]);function Sa(t,e=void 0){if(!this._midiData)return!1;this.oneTickToSeconds=60/(120*this._midiData.timeDivision),this.sendMIDIReset(),this.playedTime=0,this.index=0;let A=this.synth.midiChannels.length,s=[];for(let I=0;I<A;I++)s.push({pitchWheel:8192,controllers:new Int16Array(yt),param:new uA(I),portamentoNote:-1});let a,n=0;function r(I){let l=s[I];l.pitchWheel=8192,l.param.reset();for(let B of rn)l.controllers[B]=yt[B]}let{timeline:i,tracks:o}=this._midiData;for(;;){let I=i[this.index],l=I.tr,B=o[l],C=B.events[I.ev];if(e===void 0){if(this.playedTime>=t)break}else if(C.ticks>=e)break;let g,E=0;C.statusByte>=128&&C.statusByte<240?(g=C.statusByte&240,E=C.statusByte&15):g=C.statusByte;let S=E+(this.midiPortChannelOffsets[B.port]||0);s[S]??={pitchWheel:8192,controllers:new Int16Array(yt),param:new uA(S),portamentoNote:-1};let k=s[S];switch(g){case G.noteOn:k.portamentoNote=C.data[0];break;case G.noteOff:break;case G.pitchWheel:k.pitchWheel=C.data[1]<<7|C.data[0];break;case G.systemExclusive:{let M=ae.analyzeSysEx(C.data);switch(M.type){default:this.processEvent(C,l);break;case"Controller Change":{let{controller:R,value:v,channel:N}=M;if(this._midiData.isMultiPort&&B.channels.size===0)break;if(R===f.resetAllControllers){r(N);break}iA.has(R)?this.sendMIDICC(N,R,v):s[N].controllers[R]=v<<7}}break}case G.controllerChange:{if(this._midiData.isMultiPort&&B.channels.size===0)break;let M=C.data[0],R=C.data[1];switch(M){default:if(M===f.resetAllControllers){r(S);break}iA.has(M)?this.sendMIDICC(S,M,R):k.controllers[M]=R<<7;break;case f.registeredParameterMSB:case f.registeredParameterLSB:case f.nonRegisteredParameterLSB:case f.nonRegisteredParameterMSB:k.param.controllerChange(M,R,0,0),this.sendMIDICC(S,M,R);break;case f.dataEntryMSB:case f.dataEntryLSB:{let v=k.param.controllerChange(M,R,0,0);this.sendMIDICC(S,M,R),v.type==="Controller Change"&&(iA.has(v.controller)?this.sendMIDICC(S,v.controller,v.value):k.controllers[v.controller]=v.value<<7);break}}break}case G.setTempo:{let M=6e7/Ht(C.data,3);this.oneTickToSeconds=60/(M*this._midiData.timeDivision),a=C,n=l;break}default:this.processEvent(C,l);break}let u=i[++this.index],w=o[u.tr].events[u.ev];if(w===void 0)return this.stop(),!1;this.playedTime+=this.oneTickToSeconds*(w.ticks-C.ticks)}for(let I=0;I<A;I++){let l=s[I];this.sendMIDIPitchWheel(I,l.pitchWheel),l.portamentoNote>=0&&(this.externalMIDIPlayback?this.sendMIDICC(I,f.portamentoControl,l.portamentoNote):this.synth.midiChannels[I].setLastNote(l.portamentoNote));for(let B=0;B<128;B++){let C=l.controllers[B]>>7;C!==yt[B]&&!iA.has(B)&&this.sendMIDICC(I,B,C)}}return a&&this.callEvent("metaEvent",{event:a,trackIndex:n}),this.paused&&(this.pausedTime=this.playedTime),!0}var on=class{songs=[];shuffledSongIndexes=[];synth;externalMIDIPlayback=!1;retriggerPausedNotes=!0;loopCount=0;skipToFirstNoteOn=!0;isFinished=!1;preload=!0;onEventCall;processTick=Qa.bind(this);firstNoteTime=0;oneTickToSeconds=0;index=0;playedTime=0;pausedTime=-1;absoluteStartTime=0;playingNotes=[];currentMIDIPorts=[];midiPortChannelOffset=0;midiPortChannelOffsets={};assignMIDIPort=ua.bind(this);loadNewSequence=ma.bind(this);processEvent=fa.bind(this);setTimeTo=Sa.bind(this);constructor(t){this.synth=t,this.absoluteStartTime=this.synth.currentTime,this.playingNotes=this.synth.midiChannels.map(()=>new Map)}_midiData;get midiData(){return this._midiData}get duration(){return this._midiData?.duration??0}_songIndex=0;get songIndex(){return this._songIndex}set songIndex(t){this._songIndex=t,this._songIndex=Math.max(0,t%this.songs.length),this.loadCurrentSong()}_shuffleMode=!1;get shuffleMode(){return this._shuffleMode}set shuffleMode(t){this._shuffleMode=t}_playbackRate=1;get playbackRate(){return this._playbackRate}set playbackRate(t){let e=this.currentTime;this._playbackRate=t,this.recalculateStartTime(e)}get currentTime(){return this.pausedTime!==void 0?this.pausedTime:(this.synth.currentTime-this.absoluteStartTime)*this._playbackRate}set currentTime(t){if(this._midiData)if(this.paused&&(this.pausedTime=t),t>this._midiData.duration||t<0)this.skipToFirstNoteOn?this.setTimeTicks(this._midiData.firstNoteOn-1):this.setTimeTicks(0);else if(this.skipToFirstNoteOn&&t<this.firstNoteTime){this.setTimeTicks(this._midiData.firstNoteOn-1);return}else{for(let e of this.playingNotes)e.clear();this.callEvent("timeChange",{newTime:t}),this.setTimeTo(t),this.recalculateStartTime(t)}}get paused(){return this.pausedTime!==void 0}play(){if(!this._midiData){h.warn("No songs loaded in the sequencer. Ignoring the play call.");return}if(this.currentTime>=this._midiData.duration&&(this.currentTime=0),this.paused&&this.recalculateStartTime(this.pausedTime??0),this.retriggerPausedNotes&&!this.externalMIDIPlayback)for(let t=0;t<this.playingNotes.length;t++){let e=this.playingNotes[t];for(let[A,s]of e)this.sendMIDINoteOn(t,A,s)}this.pausedTime=void 0}pause(){this.pauseInternal(!1)}loadNewSongList(t){if(this.songs=t,this.songs.length!==0){if(this._songIndex=0,this.shuffleSongIndexes(),this.callEvent("songListChange",{newSongList:[...this.songs]}),this.preload){h.group("%cPreloading all songs...",d.info);for(let e of this.songs)e.embeddedSoundBank===void 0&&e.preloadSynth(this.synth);h.groupEnd()}this.loadCurrentSong()}}callEvent(t,e){this?.onEventCall?.({type:t,data:e})}pauseInternal(t){this.paused||(this.stop(),this.callEvent("pause",{isFinished:t}),t&&this.callEvent("songEnded",{}))}songIsFinished(){if(this.isFinished=!0,this.songs.length===1){this.pauseInternal(!0);return}this._songIndex++,this._songIndex%=this.songs.length,this.loadCurrentSong()}stop(){this.pausedTime=this.currentTime,this.sendMIDIAllOff()}addNewMIDIPort(){for(let t=0;t<16;t++)this.synth.createMIDIChannel(),this.playingNotes.push(new Map)}sendMIDIMessage(t){if(!this.externalMIDIPlayback){h.warn(`Attempting to send ${js(t)} to the synthesizer via sendMIDIMessage. This shouldn't happen!`);return}this.callEvent("midiMessage",{message:t,time:this.synth.currentTime})}sendMIDIAllOff(){for(let t=0;t<16;t++)this.sendMIDICC(t,f.sustainPedal,0);if(!this.externalMIDIPlayback){this.synth.stopAllChannels();return}for(let t=0;t<this.playingNotes.length;t++){let e=this.playingNotes[t];for(let A of e.keys())this.sendMIDINoteOff(t,A)}for(let t=0;t<16;t++)this.sendMIDICC(t,f.allNotesOff,0)}sendMIDIReset(){if(this.sendMIDIAllOff(),!this.externalMIDIPlayback){this.synth.reset();return}this.sendMIDISysEx(ae.gs(64,0,127,[0]))}loadCurrentSong(){let t=this._songIndex;this._shuffleMode&&(t=this.shuffledSongIndexes[this._songIndex]),this.loadNewSequence(this.songs[t])}shuffleSongIndexes(){let t=this.songs.map((e,A)=>A);for(this.shuffledSongIndexes.length=0;t.length>0;){let e=t[Math.floor(Math.random()*t.length)];this.shuffledSongIndexes.push(e),t.splice(t.indexOf(e),1)}}setTimeTicks(t){if(!this._midiData)return;for(let s of this.playingNotes)s.clear();let e=this._midiData.midiTicksToSeconds(t);this.callEvent("timeChange",{newTime:e});let A=this.setTimeTo(0,t);this.recalculateStartTime(this.playedTime)}recalculateStartTime(t){this.absoluteStartTime=this.synth.currentTime-t/this._playbackRate}jumpToTick(t){if(!this._midiData)return;this.sendMIDIAllOff();let e=this._midiData,A=e.midiTicksToSeconds(t);this.callEvent("timeChange",{newTime:A}),this.recalculateStartTime(A),this.playedTime=A;let s=e.timeline.findIndex(n=>e.tracks[n.tr].events[n.ev].ticks>=t);this.index=s===-1?e.timeline.length:s;let a=e.tempoChanges.find(n=>n.ticks<=t);this.oneTickToSeconds=60/(a.tempo*e.timeDivision)}sendMIDINoteOn(t,e,A){if(!this.externalMIDIPlayback){this.synth.noteOn(t,e,A);return}t%=16,this.sendMIDIMessage([G.noteOn|t,e,A])}sendMIDINoteOff(t,e){if(!this.externalMIDIPlayback){this.synth.noteOff(t,e);return}t%=16,this.sendMIDIMessage([G.noteOff|t,e,64])}sendMIDICC(t,e,A){if(!this.externalMIDIPlayback){this.synth.controllerChange(t,e,A);return}t%=16,this.sendMIDIMessage([G.controllerChange|t,e,A])}sendMIDISysEx(t){if(!this.externalMIDIPlayback){this.synth.systemExclusive(t);return}this.sendMIDIMessage([G.systemExclusive,...t])}sendMIDIPitchWheel(t,e){if(!this.externalMIDIPlayback){this.synth.pitchWheel(t,e);return}t%=16,this.sendMIDIMessage([G.pitchWheel|t,e&127,e>>7])}},ka={linear:0,nearestNeighbor:1,hermite:2},Wt=Wt!==void 0?Wt:{},Rs=!1,gn;Wt.isInitialized=new Promise(t=>gn=t);var Da=function(t){var e,A,s,a,n,r,i,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",I="",l=0;t=t.replace(/[^A-Za-z0-9\+\/\=]/g,"");do a=o.indexOf(t.charAt(l++)),n=o.indexOf(t.charAt(l++)),r=o.indexOf(t.charAt(l++)),i=o.indexOf(t.charAt(l++)),e=a<<2|n>>4,A=(15&n)<<4|r>>2,s=(3&r)<<6|i,I+=String.fromCharCode(e),r!==64&&(I+=String.fromCharCode(A)),i!==64&&(I+=String.fromCharCode(s));while(l<t.length);return I};(function(){var t,e,A,s,a,n,r,i,o,I,l,B,C,g=g!==void 0?g:{};g.wasmBinary=Uint8Array.from(Da("AGFzbQEAAAABpQEYYAJ/fwF/YAF/AGAAAX9gBH9/f38AYAAAYAN/f38Bf2ABfwF/YAJ/fwBgBn9/f39/fwF/YAR/f39/AX9gBX9/f39/AX9gB39/f39/f38Bf2AGf39/f39/AGAIf39/f39/f38Bf2AFf39/f38AYAd/f39/f39/AGADf39/AGABfwF9YAF9AX1gAnx/AXxgAnx/AX9gA3x8fwF8YAJ8fAF8YAF8AXwCngIPA2VudgZtZW1vcnkCAIACA2VudgV0YWJsZQFwAQQEA2Vudgl0YWJsZUJhc2UDfwADZW52DkRZTkFNSUNUT1BfUFRSA38AA2VudghTVEFDS1RPUAN/AANlbnYJU1RBQ0tfTUFYA38ABmdsb2JhbAhJbmZpbml0eQN8AANlbnYFYWJvcnQAAQNlbnYNZW5sYXJnZU1lbW9yeQACA2Vudg5nZXRUb3RhbE1lbW9yeQACA2VudhdhYm9ydE9uQ2Fubm90R3Jvd01lbW9yeQACA2Vudg5fX19hc3NlcnRfZmFpbAADA2VudgtfX19zZXRFcnJObwABA2VudgZfYWJvcnQABANlbnYWX2Vtc2NyaXB0ZW5fbWVtY3B5X2JpZwAFA3d2BgYCAQcHAQIBAQcBCAcFAAkGCQoHBgYGBgEFBgIBBgYKAAgLAAYGBgYGBgYBAAoMDAMGBQANCAoJAAwODA8OAQAGBgcEABAJEAERAAADBQwAAAMHBxIGAQAABwIFEwMOBw8HBgYQFAoVExYXFxcXFgQFBQYFAAYkB38BIwELfwEjAgt/ASMDC38BQQALfwFBAAt8ASMEC38BQQALB9MCFRBfX2dyb3dXYXNtTWVtb3J5AAgRX19fZXJybm9fbG9jYXRpb24AYwVfZnJlZQBfB19tYWxsb2MAXgdfbWVtY3B5AHkHX21lbXNldAB6BV9zYnJrAHsXX3N0Yl92b3JiaXNfanNfY2hhbm5lbHMAJhRfc3RiX3ZvcmJpc19qc19jbG9zZQAlFV9zdGJfdm9yYmlzX2pzX2RlY29kZQAoE19zdGJfdm9yYmlzX2pzX29wZW4AJBpfc3RiX3ZvcmJpc19qc19zYW1wbGVfcmF0ZQAnC2R5bkNhbGxfaWlpAHwTZXN0YWJsaXNoU3RhY2tTcGFjZQAMC2dldFRlbXBSZXQwAA8LcnVuUG9zdFNldHMAeAtzZXRUZW1wUmV0MAAOCHNldFRocmV3AA0Kc3RhY2tBbGxvYwAJDHN0YWNrUmVzdG9yZQALCXN0YWNrU2F2ZQAKCQoBACMACwR9VFl9Csb2A3YGACAAQAALGwEBfyMGIQEjBiAAaiQGIwZBD2pBcHEkBiABCwQAIwYLBgAgACQGCwoAIAAkBiABJAcLEAAjCEUEQCAAJAggASQJCwsGACAAJAsLBAAjCwsRACAABEAgABARIAAgABASCwvvBwEKfyAAQYADaiEHIAcoAgAhBQJAIAUEQCAAQfwBaiEEIAQoAgAhASABQQBKBEAgAEHwAGohCANAIAUgAkEYbGpBEGohCSAJKAIAIQEgAQRAIAgoAgAhAyAFIAJBGGxqQQ1qIQogCi0AACEGIAZB/wFxIQYgAyAGQbAQbGpBBGohAyADKAIAIQMgA0EASgRAQQAhAwNAIAEgA0ECdGohASABKAIAIQEgACABEBIgA0EBaiEDIAgoAgAhASAKLQAAIQYgBkH/AXEhBiABIAZBsBBsakEEaiEBIAEoAgAhBiAJKAIAIQEgAyAGSA0ACwsgACABEBILIAUgAkEYbGpBFGohASABKAIAIQEgACABEBIgAkEBaiECIAQoAgAhASACIAFODQMgBygCACEFDAAACwALCwsgAEHwAGohAyADKAIAIQEgAQRAIABB7ABqIQUgBSgCACECIAJBAEoEQEEAIQIDQAJAIAEgAkGwEGxqQQhqIQQgBCgCACEEIAAgBBASIAEgAkGwEGxqQRxqIQQgBCgCACEEIAAgBBASIAEgAkGwEGxqQSBqIQQgBCgCACEEIAAgBBASIAEgAkGwEGxqQaQQaiEEIAQoAgAhBCAAIAQQEiABIAJBsBBsakGoEGohASABKAIAIQEgAUUhBCABQXxqIQFBACABIAQbIQEgACABEBIgAkEBaiECIAUoAgAhASACIAFODQAgAygCACEBDAELCyADKAIAIQELIAAgARASCyAAQfgBaiEBIAEoAgAhASAAIAEQEiAHKAIAIQEgACABEBIgAEGIA2ohAyADKAIAIQEgAQRAIABBhANqIQUgBSgCACECIAJBAEoEQEEAIQIDQCABIAJBKGxqQQRqIQEgASgCACEBIAAgARASIAJBAWohAiAFKAIAIQcgAygCACEBIAIgB0gNAAsLIAAgARASCyAAQQRqIQIgAigCACEBIAFBAEoEQEEAIQEDQCAAQZQGaiABQQJ0aiEDIAMoAgAhAyAAIAMQEiAAQZQHaiABQQJ0aiEDIAMoAgAhAyAAIAMQEiAAQdgHaiABQQJ0aiEDIAMoAgAhAyAAIAMQEiABQQFqIQEgAigCACEDIAEgA0ghAyABQRBJIQUgBSADcQ0ACwtBACEBA0AgAEGgCGogAUECdGohAiACKAIAIQIgACACEBIgAEGoCGogAUECdGohAiACKAIAIQIgACACEBIgAEGwCGogAUECdGohAiACKAIAIQIgACACEBIgAEG4CGogAUECdGohAiACKAIAIQIgACACEBIgAEHACGogAUECdGohAiACKAIAIQIgACACEBIgAUEBaiEBIAFBAkcNAAsLGwAgAEHEAGohACAAKAIAIQAgAEUEQCABEF8LC3wBAX8gAEHUB2ohASABQQA2AgAgAEGAC2ohASABQQA2AgAgAEH4CmohASABQQA2AgAgAEGcCGohASABQQA2AgAgAEHVCmohASABQQA6AAAgAEH8CmohASABQQA2AgAgAEHUC2ohASABQQA2AgAgAEHYC2ohACAAQQA2AgAL8AQBB38jBiELIwZBEGokBiALQQhqIQcgC0EEaiEKIAshCCAAQSRqIQYgBiwAACEGAn8gBgR/IABBgAtqIQYgBigCACEGIAZBf0oEQCAFQQA2AgAgACABIAIQFgwCCyAAQRRqIQYgBiABNgIAIAEgAmohAiAAQRxqIQkgCSACNgIAIABB2ABqIQIgAkEANgIAIABBABAXIQkgCUUEQCAFQQA2AgBBAAwCCyAAIAcgCCAKEBghCSAJBEAgBygCACECIAgoAgAhCSAKKAIAIQggACACIAkgCBAaIQogByAKNgIAIABBBGohAiACKAIAIQggCEEASgRAQQAhAgNAIABBlAZqIAJBAnRqIQcgBygCACEHIAcgCUECdGohByAAQdQGaiACQQJ0aiEMIAwgBzYCACACQQFqIQIgAiAISA0ACwsgAwRAIAMgCDYCAAsgBSAKNgIAIABB1AZqIQAgBCAANgIAIAYoAgAhACAAIAFrDAILAkACQAJAAkACQCACKAIAIgNBIGsOBAECAgACCyACQQA2AgAgAEHUAGohAiAAEBkhAwJAIANBf0cEQANAIAIoAgAhAyADDQIgABAZIQMgA0F/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ACECIABBmAhqIQYgBigCACEHIAUgA2shCSAJIAdqIQkgAiAJSSEJIAIgB0khDSACIAdrIQJBACACIA0bIQIgAiADaiECIAIgBUohByAFIAIgBxshAiAJBEAgASACNgIAIAYoAgAhACAAIAJqIQAgBiAANgIAQQEMBgsLCyAAQfQKaiECIAIoAgAhAiADIB9rIQYgBiACaiEGIABBmAhqIQIgAiAGNgIAIAhBATYCAAwBBSAAQZgIaiECIAYNAQsMAQsgBCADayEDIAIoAgAhBCADIARqIQMgAiADNgIACyATKAIAIQIgAgRAIABByABqIQIgAigCACECIABB0ABqIQAgACgCACEAIAIgAEcEQEHTE0HEE0HkGkHnFBAECwsgASAFNgIAQQELIQAgHCQGIAALqAIBBX8gAEHoCmohBSAFKAIAIQICQCACQQBIBEBBACEABSACIAFIBEAgAUEYSgRAIABBGBAsIQIgAUFoaiEBIAAgARAsIQAgAEEYdCEAIAAgAmohACAADwsgAkUEQCAAQeQKaiECIAJBADYCAAsgAEHkCmohAwJAAkACQANAIAAQLiECIAJBf0YNASAFKAIAIQQgAiAEdCECIAMoAgAhBiAGIAJqIQIgAyACNgIAIAUgBEEIaiICNgIAIAIgAUgNAAwCAAsACyAFQX82AgBBACEADAQLIARBeEgEQEEAIQAMBAsLCyAAQeQKaiEEIAQoAgAhA0EBIAF0IQAgAEF/aiEAIAMgAHEhACADIAF2IQMgBCADNgIAIAIgAWshASAFIAE2AgALCyAAC40CAAJAIABBAEgEf0EABSAAQYCAAUgEQCAAQRBIBEAgAEGACGohACAALAAAIQAMAwsgAEGABEgEQCAAQQV2IQAgAEGACGohACAALAAAIQAgAEEFaiEABSAAQQp2IQAgAEGACGohACAALAAAIQAgAEEKaiEACwwCCyAAQYCAgAhIBH8gAEGAgCBIBH8gAEEPdiEAIABBgAhqIQAgACwAACEAIABBD2oFIABBFHYhACAAQYAIaiEAIAAsAAAhACAAQRRqCwUgAEGAgICAAkgEfyAAQRl2IQAgAEGACGohACAALAAAIQAgAEEZagUgAEEediEAIABBgAhqIQAgACwAACEAIABBHmoLCwshAAsgAAuiAQEDfyAAQdQKaiECIAIsAAAhAQJAAkAgAQ0AIABB3ApqIQEgASgCACEBIAEEQEF/IQMFIAAQLyEBIAEEQCACLAAAIQEgAQ0CQaEUQcQTQfYLQbUUEAQFQX8hAwsLDAELIAFBf2pBGHRBGHUhASACIAE6AAAgAEHsCmohASABKAIAIQIgAkEBaiECIAEgAjYCACAAEDAhACAAQf8BcSEDCyADC6wCAQd/IABB3ApqIQIgAigCACEBAkAgAUUEQCAAQdgKaiEEIAQoAgAhASABQX9GBEAgAEHQCGohASABKAIAIQEgAUF/aiEBIABB4ApqIQMgAyABNgIAIAAQMSEBIAFFBEAgAkEBNgIADAMLIABB0wpqIQEgASwAACEBIAFBAXEhASABBH8gBCgCAAUgAEEgEBUMAwshAQsgAUEBaiEHIAQgBzYCACAAQdQIaiABaiEDIAMsAAAhBiAGQf8BcSEDIAZBf0cEQCACQQE2AgAgAEHgCmohAiACIAE2AgALIABB0AhqIQEgASgCACEBIAcgAU4EQCAEQX82AgALIABB1ApqIQAgACwAACEBIAEEQEHFFEHEE0HoC0HaFBAEBSAAIAY6AAAgAyEFCwsLIAULUQEDfyAAQRRqIQMgAygCACEBIABBHGohAiACKAIAIQIgASACSQR/IAFBAWohACADIAA2AgAgASwAAAUgAEHUAGohACAAQQE2AgBBAAshACAACyABAX8gABAyIQEgAQR/IAAQMwUgAEEeEBVBAAshACAAC2ABAX8gABAwIQEgAUH/AXFBzwBGBEAgABAwIQEgAUH/AXFB5wBGBEAgABAwIQEgAUH/AXFB5wBGBEAgABAwIQAgAEH/AXFB0wBGIQAFQQAhAAsFQQAhAAsFQQAhAAsgAAvZAwEGfyAAEDAhAQJ/IAFB/wFxBH8gAEEfEBVBAAUgABAwIQEgAEHTCmohAiACIAE6AAAgABAjIQUgABAjIQIgABAjGiAAECMhASAAQcwIaiEDIAMgATYCACAAECMaIAAQMCEBIAFB/wFxIQEgAEHQCGohAyADIAE2AgAgAEHUCGohBCAAIAQgARAiIQEgAUUEQCAAQQoQFUEADAILIABB8ApqIQQgBEF+NgIAIAIgBXEhAQJAIAFBf0cEQCADKAIAIQEgAUEASgRAA0ACQCABQX9qIQIgAEHUCGogAmohBiAGLAAAIQYgBkF/Rw0AIAFBAUwNBCACIQEMAQsLIAQgAjYCACAAQfQKaiEBIAEgBTYCAAsLCyAAQdUKaiEBIAEsAAAhASABBEAgAygCACEDIANBAEoEf0EAIQJBACEBA0AgAEHUCGogAWohBCAELQAAIQQgBEH/AXEhBCACIARqIQIgAUEBaiEBIAEgA0gNAAsgAkEbagVBGwshASAAQShqIQIgAigCACECIAEgA2ohASABIAJqIQEgAEEsaiEDIAMgAjYCACAAQTBqIQIgAiABNgIAIABBNGohASABIAU2AgALIABB2ApqIQAgAEEANgIAQQELCyEAIAALowEBB38gAEHoCmohAyADKAIAIQECQCABQRlIBEAgAEHkCmohBCABRQRAIARBADYCAAsgAEHUCmohBSAAQdwKaiEGA0AgBigCACEBIAEEQCAFLAAAIQEgAUUNAwsgABAuIQIgAkF/Rg0CIAMoAgAhASACIAF0IQIgBCgCACEHIAcgAmohAiAEIAI2AgAgAUEIaiECIAMgAjYCACABQRFIDQALCwsLrQUBCX8gABA0IAFBIGohAiACKAIAIQUCQAJAIAVFIgNFDQAgAUGkEGohAiACKAIAIQIgAg0AQX8hAQwBCyABQQRqIQIgAigCACECAkACQCACQQhKBEAgAUGkEGohAyADKAIAIQMgAw0BBSADDQELDAELIABB5ApqIQggCCgCACEJIAkQOiEHIAFBrBBqIQIgAigCACECIAJBAUoEQCABQaQQaigCACEKQQAhAwNAIAJBAXYhBSAFIANqIQQgCiAEQQJ0aiEGIAYoAgAhBiAGIAdLIQYgAiAFayECIAMgBCAGGyEDIAUgAiAGGyECIAJBAUoNAAsFQQAhAwsgAUEXaiECIAIsAAAhAiACRQRAIAFBqBBqIQIgAigCACECIAIgA0ECdGohAiACKAIAIQMLIAFBCGohASABKAIAIQEgASADaiEBIAEtAAAhASABQf8BcSEBIABB6ApqIQIgAigCACEAIAAgAUgEf0EAIQBBfwUgACABayEAIAkgAXYhASAIIAE2AgAgAwshASACIAA2AgAMAQsgAUEXaiEDIAMsAAAhAyADBEBBgRVBxBNB6gxBjBUQBAsCQCACQQBKBEAgASgCCCEIIABB5ApqIQlBACEBA0ACQCAIIAFqIQMgAywAACEEIARB/wFxIQMgBEF/RwRAIAUgAUECdGoh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IwZBEGokBiACIQECfCAAvUIgiKdB/////wdxIgNB/MOk/wNJBHwgA0GewZryA0kEfEQAAAAAAADwPwUgAEQAAAAAAAAAABByCwUgACAAoSADQf//v/8HSw0BGgJAAkACQAJAIAAgARBuQQNxDgMAAQIDCyABKwMAIAErAwgQcgwECyABKwMAIAErAwhBARBwmgwDCyABKwMAIAErAwgQcpoMAgsgASsDACABKwMIQQEQcAsLIQAgAiQGIAALywEBA38jBiECIwZBEGokBiACIQECQCAAvUIgiKdB/////wdxIgNB/MOk/wNJBEAgA0GAgMDyA08EQCAARAAAAAAAAAAAQQAQcCEACwUgA0H//7//B0sEQCAAIAChIQAMAgsCQAJAAkACQAJAIAAgARBuQQNxDgMAAQIDCyABKwMAIAErAwhBARBwIQAMBQsgASsDACABKwMIEHIhAAwECyABKwMAIAErAwhBARBwmiEADAMLIAErAwAgASsDCBBymiEACwsLIAIkBiAAC5sDAwJ/AX4CfCAAvSIDQj+IpyEBAnwCfwJAIANCIIinQf////8HcSICQarGmIQESwR8IANC////////////AINCgICAgICAgPj/AFYEQCAADwsgAETvOfr+Qi6GQGQEQCAARAAAAAAAAOB/og8FIABE0rx63SsjhsBjIABEUTAt1RBJh8BjcUUNAkQAAAAAAAAAACIADwsABSACQcLc2P4DSwRAIAJBscXC/wNLDQIgAUEBcyABawwDCyACQYCAwPEDSwR8QQAhASAABSAARAAAAAAAAPA/oA8LCwwCCyAARP6CK2VHFfc/oiABQQN0QYATaisDAKCqCyEBIAAgAbciBEQAAOD+Qi7mP6KhIgAgBER2PHk17znqPaIiBaELIQQgACAEIAQgBCAEoiIAIAAgACAAIABE0KS+cmk3Zj6iRPFr0sVBvbu+oKJELN4lr2pWET+gokSTvb4WbMFmv6CiRD5VVVVVVcU/oKKhIgCiRAAAAAAAAABAIAChoyAFoaBEAAAAAAAA8D+gIQAgAUUEQCAADwsgACABEGULnwMDAn8BfgV8IAC9IgNCIIinIQECfyADQgBTIgIgAUGAgMAASXIEfyADQv///////////wCDQgBRBEBEAAAAAAAA8L8gACAAoqMPCyACRQRAIABEAAAAAAAAUEOivSIDQiCIpyEBIANC/////w+DIQNBy3cMAgsgACAAoUQAAAAAAAAAAKMPBSABQf//v/8HSwRAIAAPCyADQv////8PgyIDQgBRIAFBgIDA/wNGcQR/RAAAAAAAAAAADwVBgXgLCwshAiABQeK+JWoiAUH//z9xQZ7Bmv8Daq1CIIYgA4S/RAAAAAAAAPC/oCIFIAVEAAAAAAAA4D+ioiEGIAUgBUQAAAAAAAAAQKCjIgcgB6IiCCAIoiEEIAIgAUEUdmq3IgBEAADg/kIu5j+iIAUgAER2PHk17znqPaIgByAGIAQgBCAERJ/GeNAJmsM/okSveI4dxXHMP6CiRAT6l5mZmdk/oKIgCCAEIAQgBEREUj7fEvHCP6JE3gPLlmRGxz+gokRZkyKUJEnSP6CiRJNVVVVVVeU/oKKgoKKgIAahoKAL8Q8DC38Cfgh8AkACQAJAIAG9Ig1CIIinIgVB/////wdxIgMgDaciBnJFBEBEAAAAAAAA8D8PCyAAvSIOQiCIpyEHIA6nIghFIgogB0GAgMD/A0ZxBEBEAAAAAAAA8D8PCyAHQf////8HcSIEQYCAwP8HTQRAIAhBAEcgBEGAgMD/B0ZxIANBgIDA/wdLckUEQCAGQQBHIANBgIDA/wdGIgtxRQRAAkACQAJAIAdBAEgiCUUNACADQf///5kESwR/QQIhAgwBBSADQf//v/8DSwR/IANBFHYhAiADQf///4kESwRAQQIgBkGzCCACayICdiIMQQFxa0EAIAwgAnQgBkYbIQIMAwsgBgR/QQAFQQIgA0GTCCACayICdiIGQQFxa0EAIAYgAnQgA0YbIQIMBAsFDAILCyECDAILIAZFDQAMAQsgCwRAIARBgIDAgHxqIAhyRQRARAAAAAAAAPA/DwsgBUF/SiECIARB//+//wNLBEAgAUQAAAAAAAAAACACGw8FRAAAAAAAAAAAIAGaIAIbDwsACyADQYCAwP8DRgRAIABEAAAAAAAA8D8gAKMgBUF/ShsPCyAFQYCAgIAERgRAIAAgAKIPCyAHQX9KIAVBgICA/wNGcQRAIACfDwsLIACZIQ8gCgRAIARFIARBgICAgARyQYCAwP8HRnIEQEQAAAAAAADwPyAPoyAPIAVBAEgbIQAgCUUEQCAADwsgAiAEQYCAwIB8anIEQCAAmiAAIAJBAUYbDwsMBQsLAnwgCQR8AkACQAJAIAIOAgABAgsMBwtEAAAAAAAA8L8MAgtEAAAAAAAA8D8MAQVEAAAAAAAA8D8LCyERAnwgA0GAgICPBEsEfCADQYCAwJ8ESwRAIARBgIDA/wNJBEAjCkQAAAAAAAAAACAFQQBIGw8FIwpEAAAAAAAAAAAgBUEAShsPCwALIARB//+//wNJBEAgEUScdQCIPOQ3fqJEnHUAiDzkN36iIBFEWfP4wh9upQGiRFnz+MIfbqUBoiAFQQBIGw8LIARBgIDA/wNNBEAgD0QAAAAAAADwv6AiAEQAAABgRxX3P6IiECAARETfXfgLrlQ+oiAAIACiRAAAAAAAAOA/IABEVVVVVVVV1T8gAEQAAAAAAADQP6KhoqGiRP6CK2VHFfc/oqEiAKC9QoCAgIBwg78iEiEPIBIgEKEMAgsgEUScdQCIPOQ3fqJEnHUAiDzkN36iIBFEWfP4wh9upQGiRFnz+MIfbqUBoiAFQQBKGw8FIA9EAAAAAAAAQEOiIgC9QiCIpyAEIARBgIDAAEkiBRshAkHMd0GBeCAFGyACQRR1aiEDIAJB//8/cSIEQYCAwP8DciECIARBj7EOSQRAQQAhBAUgBEH67C5JIgYhBCADIAZBAXNBAXFqIQMgAiACQYCAQGogBhshAgsgBEEDdEGwE2orAwAiFCACrUIghiAAIA8gBRu9Qv////8Pg4S/IhAgBEEDdEGQE2orAwAiEqEiE0QAAAAAAADwPyASIBCgoyIVoiIPvUKAgICAcIO/IgAgACAAoiIWRAAAAAAAAAhAoCAPIACgIBUgEyACQQF1QYCAgIACckGAgCBqIARBEnRqrUIghr8iEyAAoqEgECATIBKhoSAAoqGiIhCiIA8gD6IiACAAoiAAIAAgACAAIABE705FSih+yj+iRGXbyZNKhs0/oKJEAUEdqWB00T+gokRNJo9RVVXVP6CiRP+rb9u2bds/oKJEAzMzMzMz4z+goqAiEqC9QoCAgIBwg78iAKIiEyAQIACiIA8gEiAARAAAAAAAAAjAoCAWoaGioCIPoL1CgICAgHCDvyIARAAAAOAJx+4/oiIQIARBA3RBoBNqKwMAIA8gACAToaFE/QM63AnH7j+iIABE9QFbFOAvPj6ioaAiAKCgIAO3IhKgvUKAgICAcIO/IhMhDyATIBKhIBShIBChCwshECAAIBChIAGiIAEgDUKAgICAcIO/IgChIA+ioCEBIA8gAKIiACABoCIPvSINQiCIpyECIA2nIQMgAkH//7+EBEoEQCACQYCAwPt7aiADciABRP6CK2VHFZc8oCAPIAChZHINBgUgAkGA+P//B3FB/5fDhARLBEAgAkGA6Lz7A2ogA3IgASAPIAChZXINBgsLIBEgAkH/////B3EiA0GAgID/A0sEfyAAQYCAQEGAgMAAIANBFHZBgnhqdiACaiIDQRR2Qf8PcSIEQYF4anUgA3GtQiCGv6EiDyEAIAEgD6C9IQ1BACADQf//P3FBgIDAAHJBkwggBGt2IgNrIAMgAkEASBsFQQALIgJBFHREAAAAAAAA8D8gDUKAgICAcIO/Ig9EAAAAAEMu5j+iIhAgASAPIAChoUTvOfr+Qi7mP6IgD0Q5bKgMYVwgPqKhIg+gIgAgACAAIACiIgEgASABIAEgAUTQpL5yaTdmPqJE8WvSxUG9u76gokQs3iWvalYRP6CiRJO9vhZswWa/oKJEPlVVVVVVxT+goqEiAaIgAUQAAAAAAAAAwKCjIA8gACAQoaEiASAAIAGioKEgAKGhIgC9Ig1CIIinaiIDQYCAwABIBHwgACACEGUFIAOtQiCGIA1C/////w+DhL8LIgCiDwsLCyAAIAGgDwsgACAAoSIAIACjDwsgEURZ8/jCH26lAaJEWfP4wh9upQGiDwsgEUScdQCIPOQ3fqJEnHUAiDzkN36iCwMAAQvDAwEDfyACQYDAAE4EQCAAIAEgAhAHDwsgACEEIAAgAmohAyAAQQNxIAFBA3FGBEADQCAAQQNxBEAgAkUEQCAEDwsgACABLAAAOgAAIABBAWohACABQQFqIQEgAkEBayECDAELCyADQXxxIgJBQGohBQNAIAAgBUwEQCAAIAEoAgA2AgAgACABKAIENgIEIAAgASgCCDYCCCAAIAEoAgw2AgwgACABKAIQNgIQIAAgASgCFDYCFCAAIAEoAhg2AhggACABKAIcNgIcIAAgASgCIDYCICAAIAEoAiQ2AiQgACABKAIoNgIoIAAgASgCLDYCLCAAIAEoAjA2AjAgACABKAI0NgI0IAAgASgCODYCOCAAIAEoAjw2AjwgAEFAayEAIAFBQGshAQwBCwsDQCAAIAJIBEAgACABKAIANgIAIABBBGohACABQQRqIQEMAQsLBSADQQRrIQIDQCAAIAJIBEAgACABLAAAOgAAIAAgASwAAToAASAAIAEsAAI6AAIgACABLAADOgADIABBBGohACABQQRqIQEMAQsLCwNAIAAgA0gEQCAAIAEsAAA6AAAgAEEBaiEAIAFBAWohAQwBCwsgBAuYAgEEfyAAIAJqIQQgAUH/AXEhASACQcMATgRAA0AgAEEDcQRAIAAgAToAACAAQQFqIQAMAQsLIARBfHEiBUFAaiEGIAEgAUEIdHIgAUEQdHIgAUEYdHIhAwNAIAAgBkwEQCAAIAM2AgAgACADNgIEIAAgAzYCCCAAIAM2AgwgACADNgIQIAAgAzYCFCAAIAM2AhggACADNgIcIAAgAzYCICAAIAM2AiQgACADNgIoIAAgAzYCLCAAIAM2AjAgACADNgI0IAAgAzYCOCAAIAM2AjwgAEFAayEADAELCwNAIAAgBUgEQCAAIAM2AgAgAEEEaiEADAELCwsDQCAAIARIBEAgACABOgAAIABBAWohAAwBCwsgBCACawtVAQJ/IABBAEojBSgCACIBIABqIgAgAUhxIABBAEhyBEAQAxpBDBAFQX8PCyMFIAA2AgAQAiECIAAgAkoEQBABRQRAIwUgATYCAEEMEAVBfw8LCyABCw4AIAEgAiAAQQNxEQAACwgAQQAQAEEACwvAEQQAQYEIC7YKAQICAwMDAwQEBAQEBAQEAAEAAIAAAABWAAAAQAAAAD605DMJkfMzi7IBNDwgCjQjGhM0YKkcNKfXJjRLrzE0UDs9NHCHSTQjoFY0uJJkNFVtczSIn4E0/AuKNJMEkzRpkpw0Mr+mND+VsTSTH7005GnJNK2A1jQ2ceQ0pknzNIiMATXA9wk1Bu8SNXZ7HDXApiY1N3sxNdoDPTVeTEk1O2FWNblPZDX8JXM1inmBNYbjiTV82ZI1hWScNVKOpjUzYbE1Jei8NdwuyTXOQdY1QS7kNVcC8zWPZgE2T88JNvXDEjaYTRw26HUmNjJHMTZ0zDw2XhFJNmUiVjbODGQ2uN5yNpdTgTYcu4k2cq6SNq82nDaBXaY2NS2xNsewvDbk88g2AQPWNmDr4zYeu/I2okABN+umCTfxmBI3yR8cNx5FJjc9EzE3HpU8N2/WSDei41U398ljN4mXcjevLYE3vpKJN3SDkjfmCJw3viymN0f5sDd5ebw3/rjIN0fE1TeSqOM3+HPyN8AaATiTfgk4+W0SOAbyGzhiFCY4Vt8wONhdPDiSm0g48qRVODOHYzhuUHI40weBOGtqiTiCWJI4KtubOAn8pThoxbA4O0K8OCl+yDighdU42WXjOOgs8jjp9AA5RlYJOQ5DEjlRxBs5teMlOX+rMDmiJjw5xWBIOVNmVTmDRGM5aAlyOQHigDkkQok5nS2SOXutmzljy6U5mZGwOQ0LvDlmQ8g5C0fVOTIj4znt5fE5Hc8AOgUuCTowGBI6qZYbOhWzJTq3dzA6fO87OgomSDrHJ1U65gFjOnjCcTo7vIA66RmJOsYCkjrbf5s6y5qlOthdsDrv07s6swjIOogI1Tqf4OI6B5/xOlypADvQBQk7Xu0ROw9pGzuEgiU7/UMwO2e4Ozth60c7TelUO12/Yjuce3E7f5aAO7rxiDv515E7R1KbO0FqpTsnKrA74py7OxLOxzsXytQ7IJ7iOzVY8TumgwA8p90IPJjCETyCOxs8AVIlPFQQMDxhgTs8yLBHPOWqVDzofGI81DRxPM9wgDyWyYg8Oq2RPMAkmzzFOaU8hfavPOVluzyCk8c8uYvUPLRb4jx5EfE8+10APYm1CD3flxE9Ag4bPY0hJT253C89bUo7PUB2Rz2RbFQ9hTpiPSLucD0qS4A9f6GIPYiCkT1I95o9WAmlPfLCrz34Lrs9A1nHPW1N1D1cGeI90crwPVs4AD53jQg+M20RPpDgGj4n8SQ+LqkvPocTOz7KO0c+TS5UPjf4YT6Ep3A+jyWAPnN5iD7iV5E+3MmaPvnYpD5tj68+G/i6PpUexz4zD9Q+F9fhPj2E8D7GEgA/cmUIP5NCET8rsxo/zsAkP7F1Lz+y3Do/ZQFHPx3wUz/7tWE/+2BwPwAAgD8DAAAABAAAAAQAAAAGAAAAg/miAERObgD8KRUA0VcnAN009QBi28AAPJmVAEGQQwBjUf4Au96rALdhxQA6biQA0k1CAEkG4AAJ6i4AHJLRAOsd/gApsRwA6D6nAPU1ggBEuy4AnOmEALQmcABBfl8A1pE5AFODOQCc9DkAi1+EACj5vQD4HzsA3v+XAA+YBQARL+8AClqLAG0fbQDPfjYACcsnAEZPtwCeZj8ALepfALondQDl68cAPXvxAPc5BwCSUooA+2vqAB+xXwAIXY0AMANWAHv8RgDwq2sAILzPADb0mgDjqR0AXmGRAAgb5gCFmWUAoBRfAI1AaACA2P8AJ3NNAAYGMQDKVhUAyahzAHviYABrjMAAQcMSC11A+yH5PwAAAAAtRHQ+AAAAgJhG+DwAAABgUcx4OwAAAICDG/A5AAAAQCAlejgAAACAIoLjNgAAAAAd82k1AAAAAAAA4D8AAAAAAADgvwAAAAAAAPA/AAAAAAAA+D8AQagTCwgG0M9D6/1MPgBBuxMLigZAA7jiP09nZ1MuL3N0Yl92b3JiaXMuYwBmLT5hbGxvYy5hbGxvY19idWZmZXJfbGVuZ3RoX2luX2J5dGVzID09IGYtPnRlbXBfb2Zmc2V0AHZvcmJpc19kZWNvZGVfaW5pdGlhbABmLT5ieXRlc19pbl9zZWcgPiAwAGdldDhfcGFja2V0X3JhdwBmLT5ieXRlc19pbl9zZWcgPT0gMABuZXh0X3NlZ21lbnQAdm9yYmlzX2RlY29kZV9wYWNrZXRfcmVzdAAhYy0+c3BhcnNlAGNvZGVib29rX2RlY29kZV9zY2FsYXJfcmF3ACFjLT5zcGFyc2UgfHwgeiA8IGMtPnNvcnRlZF9lbnRyaWVzAGNvZGVib29rX2RlY29kZV9kZWludGVybGVhdmVfcmVwZWF0AHogPCBjLT5zb3J0ZWRfZW50cmllcwBjb2RlYm9va19kZWNvZGVfc3RhcnQAKG4gJiAzKSA9PSAwAGltZGN0X3N0ZXAzX2l0ZXIwX2xvb3AAMABnZXRfd2luZG93AGYtPnRlbXBfb2Zmc2V0ID09IGYtPmFsbG9jLmFsbG9jX2J1ZmZlcl9sZW5ndGhfaW5fYnl0ZXMAc3RhcnRfZGVjb2RlcgB2b3JiaXNjLT5zb3J0ZWRfZW50cmllcyA9PSAwAGNvbXB1dGVfY29kZXdvcmRzAHogPj0gMCAmJiB6IDwgMzIAbGVuW2ldID49IDAgJiYgbGVuW2ldIDwgMzIAYXZhaWxhYmxlW3ldID09IDAAayA9PSBjLT5zb3J0ZWRfZW50cmllcwBjb21wdXRlX3NvcnRlZF9odWZmbWFuAGMtPnNvcnRlZF9jb2Rld29yZHNbeF0gPT0gY29kZQBsZW4gIT0gTk9fQ09ERQBpbmNsdWRlX2luX3NvcnQAcG93KChmbG9hdCkgcisxLCBkaW0pID4gZW50cmllcwBsb29rdXAxX3ZhbHVlcwAoaW50KSBmbG9vcihwb3coKGZsb2F0KSByLCBkaW0pKSA8PSBlbnRyaWVzAOoPBG5hbWUB4g9+AAVhYm9ydAENZW5sYXJnZU1lbW9yeQIOZ2V0VG90YWxNZW1vcnkDF2Fib3J0T25DYW5ub3RHcm93TWVtb3J5BA5fX19hc3NlcnRfZmFpbAULX19fc2V0RXJyTm8GBl9hYm9ydAcWX2Vtc2NyaXB0ZW5fbWVtY3B5X2JpZwgQX19ncm93V2FzbU1lbW9yeQkKc3RhY2tBbGxvYwoJc3RhY2tTYXZlCwxzdGFja1Jlc3RvcmUME2VzdGFibGlzaFN0YWNrU3BhY2UNCHNldFRocmV3DgtzZXRUZW1wUmV0MA8LZ2V0VGVtcFJldDAQEV9zdGJfdm9yYmlzX2Nsb3NlEQ5fdm9yYmlzX2RlaW5pdBILX3NldHVwX2ZyZWUTGl9zdGJfdm9yYmlzX2ZsdXNoX3B1c2hkYXRhFCFfc3RiX3ZvcmJpc19kZWNvZGVfZnJhbWVfcHVzaGRhdGEVBl9lcnJvchYgX3ZvcmJpc19zZWFyY2hfZm9yX3BhZ2VfcHVzaGRhdGEXGF9pc193aG9sZV9wYWNrZXRfcHJlc2VudBgVX3ZvcmJpc19kZWNvZGVfcGFja2V0GQxfZ2V0OF9wYWNrZXQaFF92b3JiaXNfZmluaXNoX2ZyYW1lGxlfc3RiX3ZvcmJpc19vcGVuX3B1c2hkYXRhHAxfdm9yYmlzX2luaXQdDl9zdGFydF9kZWNvZGVyHg1fdm9yYmlzX2FsbG9jHxtfc3RiX3ZvcmJpc19nZXRfZmlsZV9vZmZzZXQgE19tYXliZV9zdGFydF9wYWNrZXQhDV9mbHVzaF9wYWNrZXQiBV9nZXRuIwZfZ2V0MzIkE19zdGJfdm9yYmlzX2pzX29wZW4lFF9zdGJfdm9yYmlzX2pzX2Nsb3NlJhdfc3RiX3ZvcmJpc19qc19jaGFubmVscycaX3N0Yl92b3JiaXNfanNfc2FtcGxlX3JhdGUoFV9zdGJfdm9yYmlzX2pzX2RlY29kZSkNX2NyYzMyX3VwZGF0ZSoWX3ZvcmJpc19kZWNvZGVfaW5pdGlhbCsaX3ZvcmJpc19kZWNvZGVfcGFja2V0X3Jlc3QsCV9nZXRfYml0cy0FX2lsb2cuEF9nZXQ4X3BhY2tldF9yYXcvDV9uZXh0X3NlZ21lbnQwBV9nZXQ4MQtfc3RhcnRfcGFnZTIQX2NhcHR1cmVfcGF0dGVybjMdX3N0YXJ0X3BhZ2Vfbm9fY2FwdHVyZXBhdHRlcm40DV9wcmVwX2h1ZmZtYW41G19jb2RlYm9va19kZWNvZGVfc2NhbGFyX3JhdzYOX3ByZWRpY3RfcG9pbnQ3D19kZWNvZGVfcmVzaWR1ZTgJX2RvX2Zsb29yOQ1faW52ZXJzZV9tZGN0OgxfYml0X3JldmVyc2U7EV9tYWtlX2Jsb2NrX2FycmF5PBJfc2V0dXBfdGVtcF9tYWxsb2M9JF9jb2RlYm9va19kZWNvZGVfZGVpbnRlcmxlYXZlX3JlcGVhdD4PX3Jlc2lkdWVfZGVjb2RlPxVfY29kZWJvb2tfZGVjb2RlX3N0ZXBAEF9jb2RlYm9va19kZWNvZGVBFl9jb2RlYm9va19kZWNvZGVfc3RhcnRCCl9kcmF3X2xpbmVDF19pbWRjdF9zdGVwM19pdGVyMF9sb29wRBlfaW1kY3Rfc3RlcDNfaW5uZXJfcl9sb29wRRlfaW1kY3Rfc3RlcDNfaW5uZXJfc19sb29wRh9faW1kY3Rfc3RlcDNfaW5uZXJfc19sb29wX2xkNjU0RwhfaXRlcl81NEgLX2dldF93aW5kb3dJEF92b3JiaXNfdmFsaWRhdGVKDV9zdGFydF9wYWNrZXRLBV9za2lwTAtfY3JjMzJfaW5pdE0NX3NldHVwX21hbGxvY04QX3NldHVwX3RlbXBfZnJlZU8SX2NvbXB1dGVfY29kZXdvcmRzUBdfY29tcHV0ZV9zb3J0ZWRfaHVmZm1hblEcX2NvbXB1dGVfYWNjZWxlcmF0ZWRfaHVmZm1hblIPX2Zsb2F0MzJfdW5wYWNrUw9fbG9va3VwMV92YWx1ZXNUDl9wb2ludF9jb21wYXJlVQpfbmVpZ2hib3JzVg9faW5pdF9ibG9ja3NpemVXCl9hZGRfZW50cnlYEF9pbmNsdWRlX2luX3NvcnRZD191aW50MzJfY29tcGFyZVoYX2NvbXB1dGVfdHdpZGRsZV9mYWN0b3JzWw9fY29tcHV0ZV93aW5kb3dcE19jb21wdXRlX2JpdHJldmVyc2VdB19zcXVhcmVeB19tYWxsb2NfBV9mcmVlYAhfcmVhbGxvY2ESX3RyeV9yZWFsbG9jX2NodW5rYg5fZGlzcG9zZV9jaHVua2MRX19fZXJybm9fbG9jYXRpb25kB19tZW1jbXBlB19zY2FsYm5mBl9xc29ydGcFX3NpZnRoBF9zaHJpCF90cmlua2xlagRfc2hsawVfcG50emwIX2FfY3R6X2xtBl9jeWNsZW4LX19fcmVtX3BpbzJvEV9fX3JlbV9waW8yX2xhcmdlcAZfX19zaW5xBl9sZGV4cHIGX19fY29zcwRfY29zdARfc2ludQRfZXhwdgRfbG9ndwRfcG93eAtydW5Qb3N0U2V0c3kHX21lbWNweXoHX21lbXNldHsFX3Nicmt8C2R5bkNhbGxfaWlpfQJiMA=="),function(F){return F.charCodeAt(0)});var g=g!==void 0?g:{},E={};for(t in g)g.hasOwnProperty(t)&&(E[t]=g[t]);g.arguments=[],g.thisProgram="./this.program",g.quit=function(F,b){throw b},g.preRun=[],g.postRun=[];var S=!1,k=!1,u=!1,w=!1;S=typeof window=="object",k=typeof importScripts=="function",u=typeof process=="object"&&typeof aaa=="function"&&!S&&!k,w=!S&&!u&&!k;var M="";function R(F){return g.locateFile?g.locateFile(F,M):M+F}u?(M="/",g.read=function(b,L){var _;return e||(e=void 0),A||(A=void 0),b=A.normalize(b),_=e.readFileSync(b),L?_:_.toString()},g.readBinary=function(b){var L=g.read(b,!0);return L.buffer||(L=new Uint8Array(L)),q(L.buffer),L},process.argv.length>1&&(g.thisProgram=process.argv[1].replace(/\\/g,"/")),g.arguments=process.argv.slice(2),process.on("uncaughtException",function(F){if(!(F instanceof Ke))throw F}),process.on("unhandledRejection",function(F,b){process.exit(1)}),g.quit=function(F){process.exit(F)},g.inspect=function(){return"[Emscripten Module object]"}):w?(typeof read<"u"&&(g.read=function(b){return read(b)}),g.readBinary=function(b){var L;return typeof readbuffer=="function"?new Uint8Array(readbuffer(b)):(q(typeof(L=read(b,"binary"))=="object"),L)},typeof scriptArgs<"u"?g.arguments=scriptArgs:typeof arguments<"u"&&(g.arguments=arguments),typeof quit=="function"&&(g.quit=function(F){quit(F)})):(S||k)&&(S?document.currentScript&&(M=document.currentScript.src):M=self.location.href,M=M.indexOf("blob:")!==0?M.split("/").slice(0,-1).join("/")+"/":"",g.read=function(b){var L=new XMLHttpRequest;return L.open("GET",b,!1),L.send(null),L.responseText},k&&(g.readBinary=function(b){var L=new XMLHttpRequest;return L.open("GET",b,!1),L.responseType="arraybuffer",L.send(null),new Uint8Array(L.response)}),g.readAsync=function(b,L,_){var ie=new XMLHttpRequest;ie.open("GET",b,!0),ie.responseType="arraybuffer",ie.onload=function(){if(ie.status==200||ie.status==0&&ie.response){L(ie.response);return}_()},ie.onerror=_,ie.send(null)},g.setWindowTitle=function(F){document.title=F});var v=g.print||(typeof console<"u"?console.log.bind(console):typeof print<"u"?print:null),N=g.printErr||(typeof printErr<"u"?printErr:typeof console<"u"&&console.warn.bind(console)||v);for(t in E)E.hasOwnProperty(t)&&(g[t]=E[t]);function m(F){var b=o;return o=o+F+15&-16,b}function p(F,b){return b||(b=16),F=Math.ceil(F/b)*b}function y(F){y.shown||(y.shown={}),y.shown[F]||(y.shown[F]=1,N(F))}E=void 0;var V={"f64-rem":function(F,b){return F%b},debugger:function(){}},Y=0;function q(F,b){F||tt("Assertion failed: "+b)}function J(F){var b=g["_"+F];return q(b,"Cannot call unknown function "+F+", make sure it is exported"),b}var ee={stackSave:function(){Rt()},stackRestore:function(){dt()},arrayToC:function(F){var b,L,_=It(F.length);return b=F,L=_,a.set(b,L),_},stringToC:function(F){var b=0;if(F!=null&&F!==0){var L=(F.length<<2)+1;b=It(L),z(F,b,L)}return b}},x={string:ee.stringToC,array:ee.arrayToC};function D(F,b,L,_,ie){var ce=J(F),fe=[],$=0;if(_)for(var Te=0;Te<_.length;Te++){var Me=x[L[Te]];Me?($===0&&($=Rt()),fe[Te]=Me(_[Te])):fe[Te]=_[Te]}var oe,Ce=ce.apply(null,fe);return Ce=(oe=Ce,b==="string"?Q(oe):b==="boolean"?!!oe:oe),$!==0&&dt($),Ce}function Q(F,b){if(b===0||!F)return"";for(var L,_,ie,ce=0,fe=0;ce|=_=n[F+fe>>0],(_!=0||b)&&(fe++,!b||fe!=b););b||(b=fe);var $="";if(ce<128){for(;b>0;)ie=String.fromCharCode.apply(String,n.subarray(F,F+Math.min(b,1024))),$=$?$+ie:ie,F+=1024,b-=1024;return $}return L=F,(function(Me,oe){for(var Ce=oe;Me[Ce];)++Ce;if(Ce-oe>16&&Me.subarray&&T)return T.decode(Me.subarray(oe,Ce));for(var he,xe,He,At,mt,ct="";;){if(!(he=Me[oe++]))return ct;if(!(128&he)){ct+=String.fromCharCode(he);continue}if(xe=63&Me[oe++],(224&he)==192){ct+=String.fromCharCode((31&he)<<6|xe);continue}if(He=63&Me[oe++],(240&he)==224?he=(15&he)<<12|xe<<6|He:(At=63&Me[oe++],(248&he)==240?he=(7&he)<<18|xe<<12|He<<6|At:(mt=63&Me[oe++],he=(252&he)==248?(3&he)<<24|xe<<18|He<<12|At<<6|mt:(1&he)<<30|xe<<24|He<<18|At<<12|mt<<6|63&Me[oe++])),he<65536)ct+=String.fromCharCode(he);else{var st=he-65536;ct+=String.fromCharCode(55296|st>>10,56320|1023&st)}}})(n,L)}var T=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0;function H(F,b,L,_){if(!(_>0))return 0;for(var ie=L,ce=L+_-1,fe=0;fe<F.length;++fe){var $=F.charCodeAt(fe);if($>=55296&&$<=57343&&($=65536+((1023&$)<<10)|1023&F.charCodeAt(++fe)),$<=127){if(L>=ce)break;b[L++]=$}else if($<=2047){if(L+1>=ce)break;b[L++]=192|$>>6,b[L++]=128|63&$}else if($<=65535){if(L+2>=ce)break;b[L++]=224|$>>12,b[L++]=128|$>>6&63,b[L++]=128|63&$}else if($<=2097151){if(L+3>=ce)break;b[L++]=240|$>>18,b[L++]=128|$>>12&63,b[L++]=128|$>>6&63,b[L++]=128|63&$}else if($<=67108863){if(L+4>=ce)break;b[L++]=248|$>>24,b[L++]=128|$>>18&63,b[L++]=128|$>>12&63,b[L++]=128|$>>6&63,b[L++]=128|63&$}else{if(L+5>=ce)break;b[L++]=252|$>>30,b[L++]=128|$>>24&63,b[L++]=128|$>>18&63,b[L++]=128|$>>12&63,b[L++]=128|$>>6&63,b[L++]=128|63&$}}return b[L]=0,L-ie}function z(F,b,L){return H(F,n,b,L)}typeof TextDecoder<"u"&&new TextDecoder("utf-16le");function j(F,b){return F%b>0&&(F+=b-F%b),F}function W(F){g.buffer=s=F}function K(){g.HEAP8=a=new Int8Array(s),g.HEAP16=new Int16Array(s),g.HEAP32=r=new Int32Array(s),g.HEAPU8=n=new Uint8Array(s),g.HEAPU16=new Uint16Array(s),g.HEAPU32=new Uint32Array(s),g.HEAPF32=new Float32Array(s),g.HEAPF64=new Float64Array(s)}function te(){var F=g.usingWasm?65536:16777216,b=2147483648-F;if(r[C>>2]>b)return!1;var L=O;for(O=Math.max(O,16777216);O<r[C>>2];)O=O<=536870912?j(2*O,F):Math.min(j((3*O+2147483648)/4,F),b);var _=g.reallocBuffer(O);return _&&_.byteLength==O?(W(_),K(),!0):(O=L,!1)}i=o=I=l=B=C=0,g.reallocBuffer||(g.reallocBuffer=function(F){try{if(ArrayBuffer.transfer)b=ArrayBuffer.transfer(s,F);else{var b,L=a;b=new ArrayBuffer(F),new Int8Array(b).set(L)}}catch{return!1}return!!ze(b)&&b});try{Function.prototype.call.bind(Object.getOwnPropertyDescriptor(ArrayBuffer.prototype,"byteLength").get)(new ArrayBuffer(4))}catch{}var Ae=g.TOTAL_STACK||5242880,O=g.TOTAL_MEMORY||16777216;function re(){return O}function me(F){for(;F.length>0;){var b=F.shift();if(typeof b=="function"){b();continue}var L=b.func;typeof L=="number"?b.arg===void 0?g.dynCall_v(L):g.dynCall_vi(L,b.arg):L(b.arg===void 0?null:b.arg)}}O<Ae&&N("TOTAL_MEMORY should be larger than TOTAL_STACK, was "+O+"! (TOTAL_STACK="+Ae+")"),g.buffer?s=g.buffer:(typeof WebAssembly=="object"&&typeof WebAssembly.Memory=="function"?(g.wasmMemory=new WebAssembly.Memory({initial:O/65536}),s=g.wasmMemory.buffer):s=new ArrayBuffer(O),g.buffer=s),K();var Le=[],Ee=[],Re=[],Oe=[],Bt=!1;function Et(F){Le.unshift(F)}function eA(F){Oe.unshift(F)}var tA=Math.floor,Je=0,Qt=null,Fe=null;g.preloadedImages={},g.preloadedAudios={};var Yt="data:application/octet-stream;base64,";function bt(F){return String.prototype.startsWith?F.startsWith(Yt):F.indexOf(Yt)===0}(function(){var b="main.wast",L="main.wasm",_="main.temp.asm";bt(b)||(b=R(b)),bt(L)||(L=R(L)),bt(_)||(_=R(_));var ie={global:null,env:null,asm2wasm:V,parent:g},ce=null;function fe(){try{if(g.wasmBinary)return new Uint8Array(g.wasmBinary);if(g.readBinary)return g.readBinary(L);throw"both async and sync fetching of the wasm failed"}catch(oe){tt(oe)}}g.asmPreload=g.asm;var $=g.reallocBuffer,Te=function(oe){oe=j(oe,g.usingWasm?65536:16777216);var Ce=g.buffer.byteLength;if(g.usingWasm)try{return g.wasmMemory.grow((oe-Ce)/65536)!==-1?g.buffer=g.wasmMemory.buffer:null}catch{return null}};g.reallocBuffer=function(oe){return Me==="asmjs"?$(oe):Te(oe)};var Me="";g.asm=function(oe,Ce,he){if(!(Ce=Ce).table){var xe,He=g.wasmTableSize;He===void 0&&(He=1024);var At=g.wasmMaxTableSize;typeof WebAssembly=="object"&&typeof WebAssembly.Table=="function"?At!==void 0?Ce.table=new WebAssembly.Table({initial:He,maximum:At,element:"anyfunc"}):Ce.table=new WebAssembly.Table({initial:He,element:"anyfunc"}):Ce.table=Array(He),g.wasmTable=Ce.table}return Ce.memoryBase||(Ce.memoryBase=g.STATIC_BASE),Ce.tableBase||(Ce.tableBase=0),xe=(function(ct,st,Ss){if(typeof WebAssembly!="object")return N("no native wasm support detected"),!1;if(!(g.wasmMemory instanceof WebAssembly.Memory))return N("no native wasm Memory in use"),!1;function Ft(Ve,rt){if((ce=Ve.exports).memory){var sA=ce.memory,ks=g.buffer,Ds;sA.byteLength<ks.byteLength&&N("the new buffer in mergeMemory is smaller than the previous one. in native wasm, we should grow memory here"),Ds=new Int8Array(ks),new Int8Array(sA).set(Ds),W(sA),K()}g.asm=ce,g.usingWasm=!0,(function(Qi){if(Je--,g.monitorRunDependencies&&g.monitorRunDependencies(Je),Je==0&&(Qt!==null&&(clearInterval(Qt),Qt=null),Fe)){var qn=Fe;Fe=null,qn()}})("wasm-instantiate")}if(st.memory=g.wasmMemory,ie.global={NaN:NaN,Infinity:1/0},ie["global.Math"]=Math,ie.env=st,Je++,g.monitorRunDependencies&&g.monitorRunDependencies(Je),g.instantiateWasm)try{return g.instantiateWasm(ie,Ft)}catch(Ve){return N("Module.instantiateWasm callback failed with error: "+Ve),!1}function vt(Ve){Ft(Ve.instance,Ve.module)}function AA(Ve){(!g.wasmBinary&&(S||k)&&typeof fetch=="function"?fetch(L,{credentials:"same-origin"}).then(function(rt){if(!rt.ok)throw"failed to load wasm binary file at '"+L+"'";return rt.arrayBuffer()}).catch(function(){return fe()}):new Promise(function(rt,sA){rt(fe())})).then(function(rt){return WebAssembly.instantiate(rt,ie)}).then(Ve).catch(function(rt){N("failed to asynchronously prepare wasm: "+rt),tt(rt)})}return g.wasmBinary||typeof WebAssembly.instantiateStreaming!="function"||bt(L)||typeof fetch!="function"?AA(vt):WebAssembly.instantiateStreaming(fetch(L,{credentials:"same-origin"}),ie).then(vt).catch(function(Ve){N("wasm streaming compile failed: "+Ve),N("falling back to ArrayBuffer instantiation"),AA(vt)}),{}})(oe,Ce,he),q(xe,"no binaryen method succeeded."),xe},g.asm})(),o=(i=1024)+4816,Ee.push(),g.STATIC_BASE=i,g.STATIC_BUMP=4816;var UA=o;o+=16,C=m(4),l=(I=p(o))+Ae,B=p(l),r[C>>2]=B,g.wasmTableSize=4,g.wasmMaxTableSize=4,g.asmGlobalArg={},g.asmLibraryArg={abort:tt,assert:q,enlargeMemory:te,getTotalMemory:re,abortOnCannotGrowMemory:function(){tt("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+O+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime, or (3) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")},invoke_iii:function(b,L,_){var ie=Rt();try{return g.dynCall_iii(b,L,_)}catch(ce){if(dt(ie),typeof ce!="number"&&ce!=="longjmp")throw ce;g.setThrew(1,0)}},___assert_fail:function(b,L,_,ie){tt("Assertion failed: "+Q(b)+", at: "+[L?Q(L):"unknown filename",_,ie?Q(ie):"unknown function"])},___setErrNo:function(b){return g.___errno_location&&(r[g.___errno_location()>>2]=b),b},_abort:function(){g.abort()},_emscripten_memcpy_big:function(b,L,_){return n.set(n.subarray(L,L+_),b),b},_llvm_floor_f64:tA,DYNAMICTOP_PTR:C,tempDoublePtr:UA,ABORT:Y,STACKTOP:I,STACK_MAX:l};var qt=g.asm(g.asmGlobalArg,g.asmLibraryArg,s);g.asm=qt,g.___errno_location=function(){return g.asm.___errno_location.apply(null,arguments)};var ze=g._emscripten_replace_memory=function(){return g.asm._emscripten_replace_memory.apply(null,arguments)};g._free=function(){return g.asm._free.apply(null,arguments)},g._malloc=function(){return g.asm._malloc.apply(null,arguments)},g._memcpy=function(){return g.asm._memcpy.apply(null,arguments)},g._memset=function(){return g.asm._memset.apply(null,arguments)},g._sbrk=function(){return g.asm._sbrk.apply(null,arguments)},g._stb_vorbis_js_channels=function(){return g.asm._stb_vorbis_js_channels.apply(null,arguments)},g._stb_vorbis_js_close=function(){return g.asm._stb_vorbis_js_close.apply(null,arguments)},g._stb_vorbis_js_decode=function(){return g.asm._stb_vorbis_js_decode.apply(null,arguments)},g._stb_vorbis_js_open=function(){return g.asm._stb_vorbis_js_open.apply(null,arguments)},g._stb_vorbis_js_sample_rate=function(){return g.asm._stb_vorbis_js_sample_rate.apply(null,arguments)},g.establishStackSpace=function(){return g.asm.establishStackSpace.apply(null,arguments)},g.getTempRet0=function(){return g.asm.getTempRet0.apply(null,arguments)},g.runPostSets=function(){return g.asm.runPostSets.apply(null,arguments)},g.setTempRet0=function(){return g.asm.setTempRet0.apply(null,arguments)},g.setThrew=function(){return g.asm.setThrew.apply(null,arguments)};var It=g.stackAlloc=function(){return g.asm.stackAlloc.apply(null,arguments)},dt=g.stackRestore=function(){return g.asm.stackRestore.apply(null,arguments)},Rt=g.stackSave=function(){return g.asm.stackSave.apply(null,arguments)};function Ke(F){this.name="ExitStatus",this.message="Program terminated with exit("+F+")",this.status=F}function ut(F){F=F||g.arguments,!(Je>0)&&((function(){if(g.preRun)for(typeof g.preRun=="function"&&(g.preRun=[g.preRun]);g.preRun.length;)Et(g.preRun.shift());me(Le)})(),!(Je>0)&&(g.calledRun||(g.setStatus?(g.setStatus("Running..."),setTimeout(function(){setTimeout(function(){g.setStatus("")},1),b()},1)):b())));function b(){!g.calledRun&&(g.calledRun=!0,Y||(Bt||(Bt=!0,me(Ee)),me(Re),g.onRuntimeInitialized&&g.onRuntimeInitialized(),(function(){if(g.postRun)for(typeof g.postRun=="function"&&(g.postRun=[g.postRun]);g.postRun.length;)eA(g.postRun.shift());me(Oe)})()))}}function tt(F){throw g.onAbort&&g.onAbort(F),F!==void 0?(v(F),N(F),F=JSON.stringify(F)):F="",Y=!0,"abort("+F+"). Build with -s ASSERTIONS=1 for more info."}if(g.dynCall_iii=function(){return g.asm.dynCall_iii.apply(null,arguments)},g.asm=qt,g.ccall=D,g.cwrap=function(b,L,_,ie){var ce=(_=_||[]).every(function(fe){return fe==="number"});return L!=="string"&&ce&&!ie?J(b):function(){return D(b,L,_,arguments,ie)}},Ke.prototype=Error(),Ke.prototype.constructor=Ke,Fe=function F(){g.calledRun||ut(),g.calledRun||(Fe=F)},g.run=ut,g.abort=tt,g.preInit)for(typeof g.preInit=="function"&&(g.preInit=[g.preInit]);g.preInit.length>0;)g.preInit.pop()();g.noExitRuntime=!0,ut(),g.onRuntimeInitialized=()=>{Rs=!0,gn()},Wt.decode=function(F){return(function(L){if(!Rs)throw Error("SF3 decoder has not been initialized yet. Did you await synth.isReady?");var _={};function ie(Ft){return new Int32Array(g.HEAPU8.buffer,Ft,1)[0]}function ce(Ft,vt){var AA=new ArrayBuffer(vt*Float32Array.BYTES_PER_ELEMENT),Ve=new Float32Array(AA);return Ve.set(new Float32Array(g.HEAPU8.buffer,Ft,vt)),Ve}_.open=g.cwrap("stb_vorbis_js_open","number",[]),_.close=g.cwrap("stb_vorbis_js_close","void",["number"]),_.channels=g.cwrap("stb_vorbis_js_channels","number",["number"]),_.sampleRate=g.cwrap("stb_vorbis_js_sample_rate","number",["number"]),_.decode=g.cwrap("stb_vorbis_js_decode","number",["number","number","number","number","number"]);var fe,$,Te,Me,oe=_.open(),Ce=(fe=L,$=L.byteLength,Te=g._malloc($),(Me=new Uint8Array(g.HEAPU8.buffer,Te,$)).set(new Uint8Array(fe,0,$)),Me),he=g._malloc(4),xe=g._malloc(4),He=_.decode(oe,Ce.byteOffset,Ce.byteLength,he,xe);if(g._free(Ce.byteOffset),He<0)throw _.close(oe),g._free(he),Error("stbvorbis decode failed: "+He);for(var At=_.channels(oe),mt=Array(At),ct=new Int32Array(g.HEAPU32.buffer,ie(he),At),st=0;st<At;st++)mt[st]=ce(ct[st],He),g._free(ct[st]);var Ss=_.sampleRate(oe);return _.close(oe),g._free(ie(he)),g._free(he),{data:mt,sampleRate:Ss,eof:!0,error:null}})(F)}})();var FA=Wt,wa={effectsEnabled:!0,maxBufferSize:128,initialTime:0,eventsEnabled:!0};var Ma=class{keyMappings=[];addMapping(t,e,A){this.keyMappings[t]??=[],this.keyMappings[t][e]=A}deleteMapping(t,e){this.keyMappings[t]?.[e]!==void 0&&(this.keyMappings[t][e]=void 0)}clearMappings(){this.keyMappings=[]}setMappings(t){this.keyMappings=t}getMappings(){return this.keyMappings}getVelocity(t,e){return this.keyMappings[t]?.[e]?.velocity??-1}getGain(t,e){return this.keyMappings[t]?.[e]?.gain??1}hasOverridePatch(t,e){let A=this.keyMappings[t]?.[e]?.patch?.bankMSB;return A!==void 0&&A>=0}getPatch(t,e){let A=this.keyMappings[t]?.[e];if(A)return A.patch;throw new Error("No modifier.")}};function ba(t){for(this.keyModifierManager.setMappings(t.keyMappings);this.midiChannels.length<t.midiChannels.length;)this.createMIDIChannel(!0);for(let A=0;A<t.midiChannels.length;A++)this.midiChannels[A].applySnapshot(t.midiChannels[A]);for(let[A,s]of Object.entries(t.reverbProcessor))this.reverbProcessor[A]=s;for(let[A,s]of Object.entries(this.chorusProcessor))this.chorusProcessor[A]=s;for(let[A,s]of Object.entries(this.delayProcessor))this.delayProcessor[A]=s;let e=t.insertionProcessor;this.systemExclusive(ae.gs(64,3,0,[e.type>>8,e.type&127]));for(let A=0;A<e.params.length;A++)e.params[A]!==255&&this.systemExclusive(ae.gs(64,3,3+A,[e.params[A]]));for(let[A,s]of Object.entries(t.midiParameters))this.setMIDIParameter(A,s);for(let[A,s]of Object.entries(t.lockedMIDIParameters))this.lockMIDIParameter(A,s);for(let[A,s]of Object.entries(t.systemParameters))this.setSystemParameter(A,s)}function Ra(){return{midiParameters:{...this.midiParameters},lockedMIDIParameters:{...this.lockedMIDIParameters},systemParameters:{...this.systemParameters},midiChannels:this.midiChannels.map(t=>t.getSnapshot()),keyMappings:this.keyModifierManager.getMappings(),reverbProcessor:this.reverbProcessor.getSnapshot(),chorusProcessor:this.chorusProcessor.getSnapshot(),delayProcessor:this.delayProcessor.getSnapshot(),insertionProcessor:this.getInsertionSnapshot()}}var In={effectsEnabled:!0,eventsEnabled:!0,voiceCap:350,autoAllocateVoices:!1,reverbGain:1,reverbLock:!1,chorusGain:1,chorusLock:!1,delayGain:1,delayLock:!1,insertionEffectLock:!1,drumLock:!1,blackMIDIMode:!1,deviceID:-1,gain:1,pan:0,keyShift:0,fineTune:0,interpolationType:ka.hermite,nrpnParamLock:!1,monophonicRetrigger:!1};function Fa(t,e){if(this.systemParameters[t]===e)return;let A=this.systemParameters[t];this.systemParameters[t]=e;for(let s of this.midiChannels)s.updateInternalParams();switch(t){default:break;case"voiceCap":{let s=Math.min(e,1e6);this.systemParameters.voiceCap=s;for(let a=s;a<this.voices.length;a++)this.voices[a].isActive=!1;s>this.voices.length&&(h.warn(`Allocating ${s-this.voices.length} new voices!`),this.allocateNewVoices(s-this.voices.length));break}case"keyShift":A!==e&&this.stopAllChannels(!0)}}var ds=-15e3,es=new Float32Array(15e3-ds+1);for(let t=0;t<es.length;t++){let e=ds+t;es[t]=Math.pow(2,e/1200)}function pA(t){return t<=-32767?0:es[t-ds]}var yA=-2e4,cn=16500,ts=new Float32Array(cn-yA+1);for(let t=0;t<ts.length;t++){let e=yA+t;ts[t]=440*Math.pow(2,(e-6900)/1200)}function As(t){return t<yA||t>cn?440*Math.pow(2,(t-6900)/1200):ts[t-yA|0]}var Tt=-16600,Ut=new Float32Array(16e3-Tt+1);for(let t=0;t<Ut.length;t++){let e=Tt+t;Ut[t]=Math.pow(10,-e/200)}function SA(t){return Ut[t-Tt|0]}var va=.03,fs=class Vt{static smoothingConstant=1;static cachedCoefficients=new Map;resonanceCb=0;currentInitialFc=13500;a0=0;a1=0;a2=0;a3=0;a4=0;x1=0;x2=0;y1=0;y2=0;lastTargetCutoff=1/0;initialized=!1;sampleRate;maxCutoff;constructor(e){this.sampleRate=e,this.maxCutoff=e*.45}static initCache(e){Vt.smoothingConstant=va*(44100/e);let A=new Vt(e);A.resonanceCb=0;for(let s=8e3;s<13500;s++)A.currentInitialFc=s,A.calculateCoefficients(s)}init(){this.lastTargetCutoff=1/0,this.resonanceCb=0,this.currentInitialFc=13500,this.a0=0,this.a1=0,this.a2=0,this.a3=0,this.a4=0,this.x1=0,this.x2=0,this.y1=0,this.y2=0,this.initialized=!1}calculateCoefficients(e){e=e|0;let A=this.resonanceCb,s=Vt.cachedCoefficients.get(A+e*961);if(s!==void 0){this.a0=s.a0,this.a1=s.a1,this.a2=s.a2,this.a3=s.a3,this.a4=s.a4;return}let a=As(e);a=Math.min(a,this.maxCutoff);let n=SA(-(A-3.01)),r=1/Math.sqrt(SA(-A)),i=2*Math.PI*a/this.sampleRate,o=Math.cos(i),I=Math.sin(i)/(2*n),l=(1-o)*r,B=l/2,C=B,g=1+I,E=-2*o,S=1-I,k={a0:B/g,a1:l/g,a2:C/g,a3:E/g,a4:S/g};this.a0=k.a0,this.a1=k.a1,this.a2=k.a2,this.a3=k.a3,this.a4=k.a4,Vt.cachedCoefficients.set(A+e*961,k)}},c=Object.freeze({invalid:-1,startAddrsOffset:0,endAddrOffset:1,startloopAddrsOffset:2,endloopAddrsOffset:3,startAddrsCoarseOffset:4,modLfoToPitch:5,vibLfoToPitch:6,modEnvToPitch:7,initialFilterFc:8,initialFilterQ:9,modLfoToFilterFc:10,modEnvToFilterFc:11,endAddrsCoarseOffset:12,modLfoToVolume:13,chorusEffectsSend:15,reverbEffectsSend:16,pan:17,delayModLFO:21,freqModLFO:22,delayVibLFO:23,freqVibLFO:24,delayModEnv:25,attackModEnv:26,holdModEnv:27,decayModEnv:28,sustainModEnv:29,releaseModEnv:30,keyNumToModEnvHold:31,keyNumToModEnvDecay:32,delayVolEnv:33,attackVolEnv:34,holdVolEnv:35,decayVolEnv:36,sustainVolEnv:37,releaseVolEnv:38,keyNumToVolEnvHold:39,keyNumToVolEnvDecay:40,instrument:41,keyRange:43,velRange:44,startloopAddrsCoarseOffset:45,keyNum:46,velocity:47,initialAttenuation:48,endloopAddrsCoarseOffset:50,coarseTune:51,fineTune:52,sampleID:53,sampleModes:54,scaleTuning:56,exclusiveClass:57,overridingRootKey:58,endOper:60,amplitude:61,vibLfoRate:62,vibLfoAmplitudeDepth:63,vibLfoToFilterFc:64,modLfoRate:65,modLfoAmplitudeDepth:66}),hn=Math.max(...Object.values(c)),Dt=hn+1,We=Object.freeze({[c.invalid]:{min:0,max:0,def:0,nrpn:0},[c.endOper]:{min:0,max:0,def:0,nrpn:0},[c.instrument]:{min:0,max:0,def:0,nrpn:0},[c.sampleID]:{min:0,max:0,def:0,nrpn:0},[c.keyRange]:{min:0,max:0,def:0,nrpn:0},[c.velRange]:{min:0,max:0,def:0,nrpn:0},[c.startAddrsOffset]:{min:0,max:32768,def:0,nrpn:1},[c.endAddrOffset]:{min:-32768,max:32768,def:0,nrpn:1},[c.startloopAddrsOffset]:{min:-32768,max:32768,def:0,nrpn:1},[c.endloopAddrsOffset]:{min:-32768,max:32768,def:0,nrpn:1},[c.startAddrsCoarseOffset]:{min:0,max:32768,def:0,nrpn:1},[c.modLfoToPitch]:{min:-12e3,max:12e3,def:0,nrpn:2},[c.vibLfoToPitch]:{min:-12e3,max:12e3,def:0,nrpn:2},[c.modEnvToPitch]:{min:-12e3,max:12e3,def:0,nrpn:2},[c.initialFilterFc]:{min:1500,max:13500,def:13500,nrpn:2},[c.initialFilterQ]:{min:0,max:960,def:0,nrpn:1},[c.modLfoToFilterFc]:{min:-12e3,max:12e3,def:0,nrpn:2},[c.modEnvToFilterFc]:{min:-12e3,max:12e3,def:0,nrpn:2},[c.endAddrsCoarseOffset]:{min:-32768,max:32768,def:0,nrpn:1},[c.modLfoToVolume]:{min:-960,max:960,def:0,nrpn:1},[c.chorusEffectsSend]:{min:0,max:1e3,def:0,nrpn:1},[c.reverbEffectsSend]:{min:0,max:1e3,def:0,nrpn:1},[c.pan]:{min:-500,max:500,def:0,nrpn:1},[c.delayModLFO]:{min:-12e3,max:5e3,def:-12e3,nrpn:2},[c.freqModLFO]:{min:-16e3,max:4500,def:0,nrpn:4},[c.delayVibLFO]:{min:-12e3,max:5e3,def:-12e3,nrpn:2},[c.freqVibLFO]:{min:-16e3,max:4500,def:0,nrpn:4},[c.delayModEnv]:{min:-32768,max:5e3,def:-32768,nrpn:2},[c.attackModEnv]:{min:-32768,max:8e3,def:-32768,nrpn:2},[c.holdModEnv]:{min:-12e3,max:5e3,def:-12e3,nrpn:2},[c.decayModEnv]:{min:-12e3,max:8e3,def:-12e3,nrpn:2},[c.sustainModEnv]:{min:0,max:1e3,def:0,nrpn:1},[c.releaseModEnv]:{min:-12e3,max:8e3,def:-12e3,nrpn:2},[c.keyNumToModEnvHold]:{min:-1200,max:1200,def:0,nrpn:1},[c.keyNumToModEnvDecay]:{min:-1200,max:1200,def:0,nrpn:1},[c.delayVolEnv]:{min:-12e3,max:5e3,def:-12e3,nrpn:2},[c.attackVolEnv]:{min:-12e3,max:8e3,def:-12e3,nrpn:2},[c.holdVolEnv]:{min:-12e3,max:5e3,def:-12e3,nrpn:2},[c.decayVolEnv]:{min:-12e3,max:8e3,def:-12e3,nrpn:2},[c.sustainVolEnv]:{min:0,max:1440,def:0,nrpn:1},[c.releaseVolEnv]:{min:-12e3,max:8e3,def:-12e3,nrpn:2},[c.keyNumToVolEnvHold]:{min:-1200,max:1200,def:0,nrpn:1},[c.keyNumToVolEnvDecay]:{min:-1200,max:1200,def:0,nrpn:1},[c.startloopAddrsCoarseOffset]:{min:-32768,max:32768,def:0,nrpn:1},[c.keyNum]:{min:-1,max:127,def:-1,nrpn:1},[c.velocity]:{min:-1,max:127,def:-1,nrpn:1},[c.initialAttenuation]:{min:0,max:1440,def:0,nrpn:1},[c.endloopAddrsCoarseOffset]:{min:-32768,max:32768,def:0,nrpn:1},[c.coarseTune]:{min:-120,max:120,def:0,nrpn:1},[c.fineTune]:{min:-12700,max:12700,def:0,nrpn:1},[c.scaleTuning]:{min:0,max:1200,def:100,nrpn:1},[c.exclusiveClass]:{min:0,max:99999,def:0,nrpn:0},[c.overridingRootKey]:{min:-1,max:127,def:-1,nrpn:0},[c.sampleModes]:{min:0,max:3,def:0,nrpn:0},[c.amplitude]:{min:-1e3,max:1e3,def:0,nrpn:1},[c.vibLfoRate]:{min:-1e3,max:1e3,def:0,nrpn:1},[c.vibLfoToFilterFc]:{min:-12e3,max:12e3,def:0,nrpn:2},[c.vibLfoAmplitudeDepth]:{min:0,max:1e3,def:0,nrpn:1},[c.modLfoRate]:{min:-1e3,max:1e3,def:0,nrpn:1},[c.modLfoAmplitudeDepth]:{min:0,max:1e3,def:0,nrpn:1}}),Xe=960,oA=900,Ga=class{outputGain=0;attenuationCb=Xe;state=0;sampleRate;updateInterval;sampleTime=0;releaseStartCb=Xe;releaseStartTimeSamples=0;attackDuration=0;decayDuration=0;releaseDuration=0;sustainCb=0;delayEnd=0;attackEnd=0;holdEnd=0;decayEnd=0;enteredRelease=!1;canEndOnSilentSustain=!1;constructor(t,e){this.sampleRate=t,this.updateInterval=e}startRelease(t){this.releaseStartTimeSamples=this.sampleTime;let e=t.overrideReleaseVolEnv||t.modulatedGenerators[c.releaseVolEnv];if(this.releaseDuration=this.timecentsToSamples(Math.max(-7200,e)),this.enteredRelease)this.releaseStartCb=this.attenuationCb;else{let s=Math.max(0,Math.min(Xe,this.sustainCb)),a=s/Xe,n=(60-t.targetKey)*t.modulatedGenerators[c.keyNumToVolEnvDecay];switch(this.decayDuration=this.timecentsToSamples(t.modulatedGenerators[c.decayVolEnv]+n)*a,this.state){case 0:this.releaseStartCb=Xe;break;case 1:{let r=1-(this.attackEnd-this.releaseStartTimeSamples)/this.attackDuration;this.releaseStartCb=200*Math.log10(r)*-1;break}case 2:this.releaseStartCb=0;break;case 3:this.releaseStartCb=(1-(this.decayEnd-this.releaseStartTimeSamples)/this.decayDuration)*s;break;case 4:this.releaseStartCb=s;break}this.releaseStartCb=Math.max(0,Math.min(this.releaseStartCb,Xe)),this.attenuationCb=this.releaseStartCb}this.enteredRelease=!0;let A=(Xe-this.releaseStartCb)/Xe;this.releaseDuration*=A,this.releaseStartCb>=oA&&(t.isActive=!1)}init(t){this.enteredRelease=!1,this.state=0,this.sampleTime=0,this.outputGain=0,this.canEndOnSilentSustain=t.modulatedGenerators[c.sustainVolEnv]>=oA,this.sustainCb=Math.min(Xe,t.modulatedGenerators[c.sustainVolEnv]),this.attackDuration=this.timecentsToSamples(t.modulatedGenerators[c.attackVolEnv]);let e=(60-t.targetKey)*t.modulatedGenerators[c.keyNumToVolEnvDecay],A=this.sustainCb/Xe;this.decayDuration=this.timecentsToSamples(t.modulatedGenerators[c.decayVolEnv]+e)*A,this.delayEnd=this.timecentsToSamples(t.modulatedGenerators[c.delayVolEnv]),this.attackEnd=this.attackDuration+this.delayEnd;let s=(60-t.targetKey)*t.modulatedGenerators[c.keyNumToVolEnvHold];this.holdEnd=this.timecentsToSamples(t.modulatedGenerators[c.holdVolEnv]+s)+this.attackEnd,this.decayEnd=this.decayDuration+this.holdEnd,this.attackEnd<=this.updateInterval&&(this.state=2)}process(t,e){let{releaseStartTimeSamples:A,releaseStartCb:s,releaseDuration:a,delayEnd:n,attackEnd:r,attackDuration:i,holdEnd:o,decayEnd:I,decayDuration:l,sustainCb:B}=this,C=this.sampleTime+=t;if(this.enteredRelease){let g=C-A,E=Xe-s;return this.attenuationCb=g/a*E+s,this.outputGain=Ut[this.attenuationCb-Tt|0]*e,this.attenuationCb<oA}switch(this.state){case 0:if(C<n)return this.attenuationCb=Xe,this.outputGain=0,!0;this.state++;case 1:if(C<r){this.attenuationCb=0;let g=1-(r-C)/i;return this.outputGain=g*e,!0}this.state++;case 2:if(C<o)return this.attenuationCb=0,this.outputGain=e,!0;this.state++;case 3:if(C<I)return this.attenuationCb=(1-(I-C)/l)*B,this.outputGain=e*Ut[this.attenuationCb-Tt|0],!0;this.state++;case 4:return this.canEndOnSilentSustain&&B>=oA?(this.attenuationCb=Xe,this.outputGain=0,!1):(this.attenuationCb=B,this.outputGain=e*Ut[B-Tt|0],!0)}}timecentsToSamples(t){return Math.max(0,Math.floor(pA(t)*this.sampleRate))}},ve={monoSample:1,rightSample:2,leftSample:4,linkedSample:8,romMonoSample:32769,romRightSample:32770,romLeftSample:32772,romLinkedSample:32776},Ie={noController:0,noteOnVelocity:2,noteOnKeyNum:3,polyPressure:10,channelPressure:13,pitchWheel:14,pitchWheelRange:16,link:127},le={linear:0,concave:1,convex:2,switch:3};var Ye=16384,kA=Object.keys(le).length,lt=new Float32Array(Ye+1),kt=new Float32Array(Ye+1);lt[0]=0;lt[lt.length-1]=1;kt[0]=0;kt[kt.length-1]=1;for(let t=1;t<Ye-1;t++){let e=-.4166666666666667*Math.log(t/(lt.length-1))/Math.LN10;kt[t]=1-e,lt[lt.length-1-t]=e}function ln(t,e,A){let s=!!(t&2);switch(t&1&&(A=1-A),e){case le.linear:return s?A*2-1:A;case le.switch:return A=A>.5?1:0,s?A*2-1:A;case le.concave:return s?(A=A*2-1,A<0?-lt[Math.trunc(A*-Ye)]:lt[Math.trunc(A*Ye)]):lt[Math.trunc(A*Ye)];case le.convex:return s?(A=A*2-1,A<0?-kt[Math.trunc(A*-Ye)]:kt[Math.trunc(A*Ye)]):kt[Math.trunc(A*Ye)]}}var YA=1,ss=new Float32Array(1e3);for(let t=0;t<ss.length;t++)ss[t]=ln(0,le.convex,t/1e3);var La=class{attackDuration=0;decayDuration=0;holdDuration=0;releaseDuration=0;sustainLevel=0;delayEnd=0;attackEnd=0;holdEnd=0;releaseStartLevel=0;currentValue=0;enteredRelease=!1;decayEnd=0;process(t,e){return this.enteredRelease?this.releaseStartLevel===0?0:Math.max(0,(1-(e-t.releaseStartTime)/this.releaseDuration)*this.releaseStartLevel):(e<this.delayEnd?this.currentValue=0:e<this.attackEnd?this.currentValue=ss[~~((1-(this.attackEnd-e)/this.attackDuration)*1e3)]:e<this.holdEnd?this.currentValue=YA:e<this.decayEnd?this.currentValue=(1-(this.decayEnd-e)/this.decayDuration)*(this.sustainLevel-YA)+YA:this.currentValue=this.sustainLevel,this.currentValue)}startRelease(t){this.releaseStartLevel=this.currentValue,this.enteredRelease=!0;let e=this.tc2Sec(Math.max(t.modulatedGenerators[c.releaseModEnv],-7200));this.releaseDuration=e*this.releaseStartLevel}init(t){this.enteredRelease=!1,this.sustainLevel=1-t.modulatedGenerators[c.sustainModEnv]/1e3,this.attackDuration=this.tc2Sec(t.modulatedGenerators[c.attackModEnv]);let e=(60-t.targetKey)*t.modulatedGenerators[c.keyNumToModEnvDecay],A=this.tc2Sec(t.modulatedGenerators[c.decayModEnv]+e);this.decayDuration=A*(1-this.sustainLevel);let s=(60-t.targetKey)*t.modulatedGenerators[c.keyNumToModEnvHold];this.holdDuration=this.tc2Sec(s+t.modulatedGenerators[c.holdModEnv]),this.delayEnd=t.startTime+this.tc2Sec(t.modulatedGenerators[c.delayModEnv]),this.attackEnd=this.delayEnd+this.attackDuration,this.holdEnd=this.attackEnd+this.holdDuration,this.decayEnd=this.holdEnd+this.decayDuration}tc2Sec(t){return t<=-10114?0:pA(t)}},Qs=class{isLooping=!1;sampleData;playbackStep=0;loopStart=0;loopEnd=0;loopLength=0;end=0;cursor=0},Pa=class extends Qs{process(t,e,A){let s=e*this.playbackStep,a=this.sampleData,{loopEnd:n,loopLength:r,end:i}=this,o=this.cursor;if(this.isLooping)for(let I=0;I<t;I++){for(;o>=n;)o-=r;let l=o|0,B=l+1;B>=n&&(B-=r);let C=o-l,g=a[B],E=a[l];A[I]=E+(g-E)*C,o+=s}else for(let I=0;I<t;I++){let l=o|0,B=l+1;if(B>=i)return A.fill(0,I,t),!1;let C=o-l,g=a[B],E=a[l];A[I]=E+(g-E)*C,o+=s}return this.cursor=o,!0}},Na=class extends Qs{process(t,e,A){let s=e*this.playbackStep,a=this.sampleData,{loopEnd:n,loopLength:r,end:i}=this,o=this.cursor;if(this.isLooping)for(let I=0;I<t;I++){for(;o>=n;)o-=r;A[I]=a[o|0],o+=s}else for(let I=0;I<t;I++){if(o>=i)return A.fill(0,I,t),!1;A[I]=a[o|0],o+=s}return this.cursor=o,!0}},Ta=class extends Qs{process(t,e,A){let s=e*this.playbackStep,a=this.sampleData,{loopEnd:n,loopLength:r,end:i}=this,o=this.cursor;if(this.isLooping)for(let I=0;I<t;I++){for(;o>=n;)o-=r;let l=o|0,B=l+1,C=l+2,g=l+3,E=o-l;B>=n&&(B-=r),C>=n&&(C-=r),g>=n&&(g-=r);let S=a[l],k=a[B],u=a[C],w=a[g],M=(u-S)*.5,R=k-u,v=M+R,N=v+R+(w-k)*.5,m=v+N;A[I]=((N*E-m)*E+M)*E+k,o+=s}else for(let I=0;I<t;I++){let l=o|0,B=l+1,C=l+2,g=l+3,E=o-l;if(g>=i)return A.fill(0,I,t),!1;let S=a[l],k=a[B],u=a[C],w=a[g],M=(u-S)*.5,R=k-u,v=M+R,N=v+R+(w-k)*.5,m=v+N;A[I]=((N*E-m)*E+M)*E+k,o+=s}return this.cursor=o,!0}},Ua=-2320,xa=class{oscillators=[new Pa,new Na,new Ta];wavetable=this.oscillators[In.interpolationType];filter;generators=new Int16Array(Dt);modulatedGenerators=new Int16Array(Dt);modulators=new Array;modulatorValues=new Int16Array(64);modEnv=new La;volEnv;resonanceOffset=0;priority=0;isActive=!1;hasRendered=!1;isInRelease=!1;isHeld=!1;channel=0;noteID=0;midiNote=0;targetKey=0;velocity=0;rootKey=0;pressure=0;gainModifier=1;loopingMode=0;startTime=0;releaseStartTime=1/0;tuningCents=0;tuningRatio=1;currentPan=0;portamentoFromKey=-1;portamentoDuration=0;overridePan=0;pitchOffset=0;reverbSend=1;chorusSend=1;delaySend=1;exclusiveClass=0;overrideReleaseVolEnv=0;vibLfoPhase=0;vibLfoStartTime=0;modLfoPhase=0;modLfoStartTime=0;constructor(t,e){this.volEnv=new Ga(t,e),this.filter=new fs(t)}exclusiveRelease(t,e=Wn){this.overrideReleaseVolEnv=Ua,this.isInRelease=!1,this.releaseVoice(t,e)}releaseVoice(t,e=Zn){this.releaseStartTime=t,this.releaseStartTime-this.startTime<e&&(this.releaseStartTime=this.startTime+e)}setup(t,e,A,s){this.isActive=!0,this.isInRelease=!1,this.hasRendered=!1,this.isHeld=!1,this.releaseStartTime=1/0,this.pressure=0,this.overrideReleaseVolEnv=0,this.portamentoDuration=0,this.portamentoFromKey=-1,this.vibLfoPhase=.25,this.modLfoPhase=.25,this.startTime=t,this.channel=e,this.midiNote=A,this.noteID=s}};function St(t,e){return(t>>e&1)>0}function qA(t){return t?1:0}var at=class ns{isBipolar;isNegative;index;isCC;curveType;constructor(e=Ie.noController,A=le.linear,s=!1,a=!1,n=!1){this.isBipolar=a,this.isNegative=n,this.index=e,this.isCC=s,this.curveType=A}get sourceName(){return this.isCC?Object.keys(f).find(e=>f[e]===this.index)??this.index.toString():Object.keys(Ie).find(e=>Ie[e]===this.index)??this.index.toString()}get curveTypeName(){return Object.keys(le).find(e=>le[e]===this.curveType)??this.curveType.toString()}static fromSourceEnum(e){let A=St(e,9),s=St(e,8),a=St(e,7);return new ns(e&127,e>>10&3,a,A,s)}static copyFrom(e){return new ns(e.index,e.curveType,e.isCC,e.isBipolar,e.isNegative)}toString(){return`${this.sourceName} ${this.curveTypeName} ${this.isBipolar?"bipolar":"unipolar"} ${this.isNegative?"negative":"positive"}`}toSourceEnum(){return this.curveType<<10|qA(this.isBipolar)<<9|qA(this.isNegative)<<8|qA(this.isCC)<<7|this.index}isIdentical(e){return this.index===e.index&&this.isNegative===e.isNegative&&this.isCC===e.isCC&&this.isBipolar===e.isBipolar&&this.curveType===e.curveType}getValue(e,A,s){let a;if(this.isCC)a=e.midiControllers[this.index];else switch(this.index){default:case Ie.noController:a=16383;break;case Ie.noteOnVelocity:a=s.velocity<<7;break;case Ie.noteOnKeyNum:a=s.targetKey<<7;break;case Ie.polyPressure:a=s.pressure<<7;break;case Ie.channelPressure:a=e.midiParameters.pressure<<7;break;case Ie.pitchWheel:a=A;break;case Ie.pitchWheelRange:a=Math.floor(e.midiParameters.pitchWheelRange*128)}let n=(this.isBipolar?2:0)|(this.isNegative?1:0);return Cn[Ye*(this.curveType*kA+n)+a]}},Cn=new Float32Array(Ye*4*kA);for(let t=0;t<kA;t++)for(let e=0;e<4;e++){let A=Ye*(t*kA+e);for(let s=0;s<Ye;s++)Cn[A+s]=ln(e,t,s/Ye)}function _e(t,e,A,s,a){return new at(a,t,s,e,A).toSourceEnum()}var Bn=_e(le.linear,!0,!1,!0,f.filterResonance),we=class as{destination=c.initialAttenuation;transformAmount=0;transformType=0;primarySource;secondarySource;constructor(e=new at,A=new at,s=c.invalid,a=0,n=0){this.primarySource=e,this.secondarySource=A,this.destination=s,this.transformAmount=a,this.transformType=n}get destinationName(){return Object.keys(c).find(e=>c[e]===this.destination)}static isIdentical(e,A,s=!1){return e.primarySource.isIdentical(A.primarySource)&&e.secondarySource.isIdentical(A.secondarySource)&&e.destination===A.destination&&e.transformType===A.transformType&&(!s||e.transformAmount===A.transformAmount)}static copyFrom(e){return new as(at.copyFrom(e.primarySource),at.copyFrom(e.secondarySource),e.destination,e.transformAmount,e.transformType)}toString(){return`Source: ${this.primarySource.toString()}
1
+ function Ht(t,e,A=0){let s=0;for(let a=0;a<e;a++)s=s<<8|t[A+a];return s>>>0}function Nt(t,e){let A=Ht(t,e,t.currentIndex);return t.currentIndex+=e,A}function nA(t,e){let A=new Array(e).fill(0);for(let s=e-1;s>=0;s--)A[s]=t&255,t>>=8;return A}function X(t,e){let A=cs(t,e,t.currentIndex);return t.currentIndex+=e,A}function cs(t,e,A=0){let s=0;for(let a=0;a<e;a++)s|=t[A+a]<<a*8;return s>>>0}function hs(t,e,A){for(let s=0;s<A;s++)t[t.currentIndex++]=e>>s*8&255}function se(t,e){t[t.currentIndex++]=e&255,t[t.currentIndex++]=e>>8}function ge(t,e){hs(t,e,4)}function ls(t,e){let A=e<<8|t;return A>32767?A-65536:A}function Jn(t){return t>127?t-256:t}var ne=class extends Uint8Array{currentIndex=0;slice(t,e){let A=super.slice(t,e);return A.currentIndex=0,A}};function $e(t,e=t.length,A=0){let s="";for(let a=0;a<e;a++){let n=t[A+a];if(n===0)return s;s+=String.fromCharCode(n)}return s}function de(t,e){let A=t.currentIndex;return t.currentIndex+=e,$e(t,e,A)}function et(t,e=!1,A=!1){let s=t.length;e&&s++,A&&s%2!==0&&s++;let a=new ne(s);return Ne(a,t),a}function Ne(t,e,A=0){A>0&&e.length>A&&(e=e.slice(0,A));for(let s=0;s<e.length;s++)t[t.currentIndex++]=e.charCodeAt(s);if(A>e.length)for(let s=0;s<A-e.length;s++)t[t.currentIndex++]=0;return t}function pe(t){let e=0;for(;t;){let A=t[t.currentIndex++];if(e=e<<7|A&127,A>>7!==1)break}return e}function xA(t){let e=[t&127];for(t>>=7;t>0;)e.unshift(t&127|128),t>>=7;return e}function zA(t){t=Math.floor(t);let e=Math.floor(t/60),A=Math.round(t-e*60);return{minutes:e,seconds:A,time:`${e.toString().padStart(2,"0")}:${A.toString().padStart(2,"0")}`}}function js(t){let e="";for(let A=0;A<t.length;A++){let s=t[A].toString(16).padStart(2,"0").toUpperCase();e+=s,A<t.length-1&&(e+=" ")}return e}var d={warn:"color: orange;",unrecognized:"color: red;",info:"color: aqua;",recognized:"color: lime",value:"color: yellow; background-color: black;"},en;(()=>{var t=Uint8Array,e=Uint16Array,A=Int32Array,s=new t([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),a=new t([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),n=new t([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),r=function(x,D){for(var Q=new e(31),T=0;T<31;++T)Q[T]=D+=1<<x[T-1];for(var H=new A(Q[30]),T=1;T<30;++T)for(var z=Q[T];z<Q[T+1];++z)H[z]=z-Q[T]<<5|T;return{b:Q,r:H}},i=r(s,2),o=i.b,I=i.r;o[28]=258,I[258]=28;var l=r(a,0),B=l.b;l.r;var C=new e(32768);for(u=0;u<32768;++u)g=(u&43690)>>1|(u&21845)<<1,g=(g&52428)>>2|(g&13107)<<2,g=(g&61680)>>4|(g&3855)<<4,C[u]=((g&65280)>>8|(g&255)<<8)>>1;var g,u,E=function(x,D,Q){for(var T=x.length,H=0,z=new e(D);H<T;++H)x[H]&&++z[x[H]-1];var j=new e(D);for(H=1;H<D;++H)j[H]=j[H-1]+z[H-1]<<1;var W;if(Q){W=new e(1<<D);var K=15-D;for(H=0;H<T;++H)if(x[H])for(var ee=H<<4|x[H],Ae=D-x[H],O=j[x[H]-1]++<<Ae,re=O|(1<<Ae)-1;O<=re;++O)W[C[O]>>K]=ee}else for(W=new e(T),H=0;H<T;++H)x[H]&&(W[H]=C[j[x[H]-1]++]>>15-x[H]);return W},S=new t(288);for(u=0;u<144;++u)S[u]=8;var u;for(u=144;u<256;++u)S[u]=9;var u;for(u=256;u<280;++u)S[u]=7;var u;for(u=280;u<288;++u)S[u]=8;var u,k=new t(32);for(u=0;u<32;++u)k[u]=5;var u,M=E(S,9,1),w=E(k,5,1),R=function(x){for(var D=x[0],Q=1;Q<x.length;++Q)x[Q]>D&&(D=x[Q]);return D},F=function(x,D,Q){var T=D/8|0;return(x[T]|x[T+1]<<8)>>(D&7)&Q},N=function(x,D){var Q=D/8|0;return(x[Q]|x[Q+1]<<8|x[Q+2]<<16)>>(D&7)},m=function(x){return(x+7)/8|0},p=function(x,D,Q){return(D==null||D<0)&&(D=0),(Q==null||Q>x.length)&&(Q=x.length),new t(x.subarray(D,Q))},y=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],V=function(x,D,Q){var T=new Error(D||y[x]);if(T.code=x,Error.captureStackTrace&&Error.captureStackTrace(T,V),!Q)throw T;return T},Y=function(x,D,Q,T){var H=x.length,z=T?T.length:0;if(!H||D.f&&!D.l)return Q||new t(0);var j=!Q,W=j||D.i!=2,K=D.i;j&&(Q=new t(H*3));var ee=function(Be){var he=Q.length;if(Be>he){var xe=new t(Math.max(he*2,Be));xe.set(Q),Q=xe}},Ae=D.f||0,O=D.p||0,re=D.b||0,ue=D.l,Le=D.d,Ee=D.m,Re=D.n,Oe=H*8;do{if(!ue){Ae=F(x,O,1);var Bt=F(x,O+1,3);if(O+=3,Bt)if(Bt==1)ue=M,Le=w,Ee=9,Re=5;else if(Bt==2){var Et=F(x,O,31)+257,eA=F(x,O+10,15)+4,tA=Et+F(x,O+5,31)+1;O+=14;for(var Je=new t(tA),Qt=new t(19),ve=0;ve<eA;++ve)Qt[n[ve]]=F(x,O+ve*3,7);O+=eA*3;for(var Yt=R(Qt),bt=(1<<Yt)-1,UA=E(Qt,Yt,1),ve=0;ve<tA;){var qt=UA[F(x,O,bt)];O+=qt&15;var ze=qt>>4;if(ze<16)Je[ve++]=ze;else{var It=0,dt=0;for(ze==16?(dt=3+F(x,O,3),O+=2,It=Je[ve-1]):ze==17?(dt=3+F(x,O,7),O+=3):ze==18&&(dt=11+F(x,O,127),O+=7);dt--;)Je[ve++]=It}}var Rt=Je.subarray(0,Et),Ke=Je.subarray(Et);Ee=R(Rt),Re=R(Ke),ue=E(Rt,Ee,1),Le=E(Ke,Re,1)}else V(1);else{var ze=m(O)+4,ut=x[ze-4]|x[ze-3]<<8,tt=ze+ut;if(tt>H){K&&V(0);break}W&&ee(re+ut),Q.set(x.subarray(ze,tt),re),D.b=re+=ut,D.p=O=tt*8,D.f=Ae;continue}if(O>Oe){K&&V(0);break}}W&&ee(re+131072);for(var v=(1<<Ee)-1,b=(1<<Re)-1,L=O;;L=O){var It=ue[N(x,O)&v],_=It>>4;if(O+=It&15,O>Oe){K&&V(0);break}if(It||V(2),_<256)Q[re++]=_;else if(_==256){L=O,ue=null;break}else{var ie=_-254;if(_>264){var ve=_-257,ce=s[ve];ie=F(x,O,(1<<ce)-1)+o[ve],O+=ce}var fe=Le[N(x,O)&b],$=fe>>4;fe||V(3),O+=fe&15;var Ke=B[$];if($>3){var ce=a[$];Ke+=N(x,O)&(1<<ce)-1,O+=ce}if(O>Oe){K&&V(0);break}W&&ee(re+131072);var Te=re+ie;if(re<Ke){var Me=z-Ke,oe=Math.min(Ke,Te);for(Me+re<0&&V(3);re<oe;++re)Q[re]=T[Me+re]}for(;re<Te;++re)Q[re]=Q[re-Ke]}}D.l=ue,D.p=L,D.b=re,D.f=Ae,ue&&(Ae=1,D.m=Ee,D.d=Le,D.n=Re)}while(!Ae);return re!=Q.length&&j?p(Q,0,re):Q.subarray(0,re)},q=new t(0);function J(x,D){return Y(x,{i:2},D&&D.out,D&&D.dictionary)}var te=typeof TextDecoder<"u"&&new TextDecoder;try{te.decode(q,{stream:!0})}catch{}en=J})();var tn=en,U=class An{header;size;data;constructor(e,A,s){this.header=e,this.size=A,this.data=s}static read(e,A=!0,s=!1){let a=de(e,4),n=X(e,4);a===""&&(n=0);let r=A?e.slice(e.currentIndex,e.currentIndex+n):new ne(0);return(A||s)&&(e.currentIndex+=n,n%2!==0&&e.currentIndex++),new An(a,n,r)}static write(e,A,s=!1,a=!1){if(e.length!==4)throw new Error(`Invalid header length: ${e}`);let n=8,r=e,i=A.length;s&&i++;let o=i;a&&(n+=4,o+=4,r="LIST");let I=n+i;I%2!==0&&I++;let l=new ne(I);return Ne(l,r),ge(l,o),a&&Ne(l,e),l.set(A,n),l}static getParts(e,A,s=!1){let a=e,n=A.reduce((o,I)=>I.length+o,0);s&&(n+=4,a="LIST");let r=new ne(4);ge(r,n);let i=[et(a),r];return s&&i.push(et(e)),i.push(...A),n%2!==0&&i.push(new Uint8Array(1)),i}static writeParts(e,A,s=!1){let a=8,n=e,r=A.reduce((l,B)=>B.length+l,0),i=r;s&&(a+=4,i+=4,n="LIST");let o=a+r;o%2!==0&&o++;let I=new ne(o);Ne(I,n),ge(I,i),s&&Ne(I,e);for(let l of A)I.set(l,a),a+=l.length;return I}static findListType(e,A){return e.find(s=>s.header!=="LIST"?!1:(s.data.currentIndex=4,$e(s.data,4)===A))}};function bA(t,e){return{...e,...t}}var h=class _A{static infoEnabled=!1;static warnEnabled=!0;static groupEnabled=!1;static setLogLevel(e,A,s){this.infoEnabled=e,this.warnEnabled=A,this.groupEnabled=s}static info(...e){this.infoEnabled&&console.info(...e)}static warn(...e){this.warnEnabled&&console.warn(...e)}static group(...e){this.groupEnabled&&console.group(...e)}static groupCollapsed(...e){this.groupEnabled&&console.groupCollapsed(...e)}static groupEnd(){this.groupEnabled&&console.groupEnd()}static unsupported(e,A,s=""){this.infoEnabled&&this.info(`%cUnsupported %c${e}%c message: %c${js(A)}%c. ${s}`,d.warn,d.recognized,d.warn,d.unrecognized,d.warn)}static gmInfo(e,A,s=""){this.infoEnabled&&this.coolInfo(`General MIDI ${e}`,A,s)}static gmFail(e,A){this.infoEnabled&&this.unsupported(`General MIDI ${e}`,A)}static gsInfo(e,A,s=""){this.infoEnabled&&this.coolInfo(`Roland GS ${e}`,A,s)}static gsFail(e,A,s=""){this.infoEnabled&&this.unsupported(`Roland GS ${e}`,A,s)}static xgInfo(e,A,s=""){this.infoEnabled&&this.coolInfo(`Yamaha XG ${e}`,A,s)}static xgFail(e,A,s=""){this.infoEnabled&&this.unsupported(`Yamaha XG ${e}`,A,s)}static coolInfo(e,A,s=""){this.infoEnabled&&(s?_A.info(`%c${e}%c is now set to %c${A}%c ${s}.`,d.recognized,d.info,d.value,d.info):_A.info(`%c${e}%c is now set to %c${A}%c.`,d.recognized,d.info,d.value,d.info))}},sn={ConsoleColors:d,readBigEndian:Ht,readLittleEndian:cs,readLittleEndianIndexed:X,readBinaryString:$e,readBinaryStringIndexed:de,readVariableLengthQuantity:pe,inflateSync:tn},G={noteOff:128,noteOn:144,polyPressure:160,controllerChange:176,programChange:192,channelPressure:208,pitchWheel:224,systemExclusive:240,timecode:241,songPosition:242,songSelect:243,tuneRequest:246,clock:248,start:250,continue:251,stop:252,activeSensing:254,reset:255,sequenceNumber:0,text:1,copyright:2,trackName:3,instrumentName:4,lyric:5,marker:6,cuePoint:7,programName:8,midiChannelPrefix:32,midiPort:33,endOfTrack:47,setTempo:81,smpteOffset:84,timeSignature:88,keySignature:89,sequenceSpecific:127},f={bankSelect:0,modulationWheel:1,breathController:2,undefinedCC3:3,footController:4,portamentoTime:5,dataEntryMSB:6,mainVolume:7,balance:8,undefinedCC9:9,pan:10,expression:11,effectControl1:12,effectControl2:13,undefinedCC14:14,undefinedCC15:15,generalPurposeController1:16,generalPurposeController2:17,generalPurposeController3:18,generalPurposeController4:19,undefinedCC20:20,undefinedCC21:21,undefinedCC22:22,undefinedCC23:23,undefinedCC24:24,undefinedCC25:25,undefinedCC26:26,undefinedCC27:27,undefinedCC28:28,undefinedCC29:29,undefinedCC30:30,undefinedCC31:31,bankSelectLSB:32,modulationWheelLSB:33,breathControllerLSB:34,undefinedCC3LSB:35,footControllerLSB:36,portamentoTimeLSB:37,dataEntryLSB:38,mainVolumeLSB:39,balanceLSB:40,undefinedCC9LSB:41,panLSB:42,expressionLSB:43,effectControl1LSB:44,effectControl2LSB:45,undefinedCC14LSB:46,undefinedCC15LSB:47,undefinedCC16LSB:48,undefinedCC17LSB:49,undefinedCC18LSB:50,undefinedCC19LSB:51,undefinedCC20LSB:52,undefinedCC21LSB:53,undefinedCC22LSB:54,undefinedCC23LSB:55,undefinedCC24LSB:56,undefinedCC25LSB:57,undefinedCC26LSB:58,undefinedCC27LSB:59,undefinedCC28LSB:60,undefinedCC29LSB:61,undefinedCC30LSB:62,undefinedCC31LSB:63,sustainPedal:64,portamentoOnOff:65,sostenutoPedal:66,softPedal:67,legatoFootswitch:68,hold2Pedal:69,soundVariation:70,filterResonance:71,releaseTime:72,attackTime:73,brightness:74,decayTime:75,vibratoRate:76,vibratoDepth:77,vibratoDelay:78,soundController10:79,generalPurposeController5:80,generalPurposeController6:81,generalPurposeController7:82,generalPurposeController8:83,portamentoControl:84,undefinedCC85:85,undefinedCC86:86,undefinedCC87:87,undefinedCC88:88,undefinedCC89:89,undefinedCC90:90,reverbDepth:91,tremoloDepth:92,chorusDepth:93,variationDepth:94,phaserDepth:95,dataIncrement:96,dataDecrement:97,nonRegisteredParameterLSB:98,nonRegisteredParameterMSB:99,registeredParameterLSB:100,registeredParameterMSB:101,undefinedCC102LSB:102,undefinedCC103LSB:103,undefinedCC104LSB:104,undefinedCC105LSB:105,undefinedCC106LSB:106,undefinedCC107LSB:107,undefinedCC108LSB:108,undefinedCC109LSB:109,undefinedCC110LSB:110,undefinedCC111LSB:111,undefinedCC112LSB:112,undefinedCC113LSB:113,undefinedCC114LSB:114,undefinedCC115LSB:115,undefinedCC116LSB:116,undefinedCC117LSB:117,undefinedCC118LSB:118,undefinedCC119LSB:119,allSoundOff:120,resetAllControllers:121,localControlOnOff:122,allNotesOff:123,omniModeOff:124,omniModeOn:125,monoModeOn:126,polyModeOn:127},Ze={pitchWheelRange:0,fineTuning:1,coarseTuning:2,modulationDepth:5,resetParameters:16383},ke={partParameter:1,drumPitch:24,drumPitchFine:25,drumLevel:26,drumPan:28,drumReverb:29,drumChorus:30,drumDelay:31,awe32:127,SF2:120},Ue={vibratoRate:8,vibratoDepth:9,vibratoDelay:10,tvfCutoffFrequency:32,tvfResonance:33,envelopeAttackTime:99,envelopeDecayTime:100,envelopeReleaseTime:102},Qe=class it{ticks;statusByte;data;constructor(e,A,s){this.ticks=e,this.statusByte=A,this.data=s}static pitchWheel(e,A,s){return new it(e,G.pitchWheel|A%16,new Uint8Array([s&127,s>>7&127]))}static channelPressure(e,A,s){return new it(e,G.channelPressure|A%16,new Uint8Array([s]))}static programChange(e,A,s){return new it(e,G.programChange|A%16,new Uint8Array([s]))}static controllerChange(e,A,s,a){return new it(e,G.controllerChange|A%16,new Uint8Array([s,a]))}static systemExclusive(e,A){return new it(e,G.systemExclusive,new Uint8Array(A))}static registeredParameter(e,A,s,a){if(s>16383||s<0||a>16383||a<0)throw new Error("Parameter and value must be between 0 and 16383.");return[it.controllerChange(e,A,f.registeredParameterMSB,s>>7),it.controllerChange(e,A,f.registeredParameterLSB,s&127),it.controllerChange(e,A,f.dataEntryMSB,a>>7),it.controllerChange(e,A,f.dataEntryLSB,a&127)]}},ws=(t,e)=>{for(let A=0;A<t.length;A++)e.push(t.charCodeAt(A))};function Kn(t){if(!t.tracks)throw new Error("MIDI has no tracks!");let e=[];for(let s of t.tracks){let a=[],n=0,r;for(let i of s.events){let o=Math.max(0,i.ticks-n);if(i.statusByte===G.endOfTrack){n+=o;continue}let I;i.statusByte<=G.sequenceSpecific?(I=[255,i.statusByte,...xA(i.data.length),...i.data],r=void 0):i.statusByte===G.systemExclusive?(I=[240,...xA(i.data.length),...i.data],r=void 0):(I=[],r!==i.statusByte&&(r=i.statusByte,I.push(i.statusByte)),I.push(...i.data)),a.push(...xA(o),...I),n+=o}a.push(0,255,G.endOfTrack,0),e.push(a)}let A=[];ws("MThd",A),A.push(...nA(6,4),0,t.format,...nA(t.tracks.length,2),...nA(t.timeDivision,2));for(let s of e)ws("MTrk",A),A=A.concat(nA(s.length,4),s);return new Uint8Array(A).buffer}var aA=`SPESSASYNTH_EMBEDDED_BANK_${Math.random()}_DO_NOT_DELETE`,Vn=32767,Xn={time:0},Zn=.03,Wn=.07,zn=.6;var lA=1/Math.cos(Math.PI/4)**2;var Ms=121,De=class{static getDefaultBank(t){return t==="gm2"?Ms:0}static getDrumBank(t){switch(t){default:throw new Error(`${t} doesn't have a bank MSB for drums.`);case"gm2":return 120;case"xg":return 127}}static isXGDrum(t){return t===120||t===127}static isValidXGMSB(t){return this.isXGDrum(t)||t===64||t===Ms}static isSystemXG(t){return t==="gm2"||t==="xg"}static addBankOffset(t,e,A){return this.isXGDrum(t)&&A?t:Math.min(t+e,127)}static subtractBankOffset(t,e,A){return this.isXGDrum(t)&&A?t:Math.max(0,t-e)}},je=class $A{static toMIDIString(e){return e.isGMGSDrum?`DRUM:${e.program}`:`${e.bankLSB}:${e.bankMSB}:${e.program}`}static fromMIDIString(e){let A=e.split(":");if(A.length>3||A.length<2)throw new Error(`Invalid MIDI string: ${e}`);return e.startsWith("DRUM")?{bankMSB:0,bankLSB:0,program:Number.parseInt(A[1]),isGMGSDrum:!0}:{bankLSB:Number.parseInt(A[0]),bankMSB:Number.parseInt(A[1]),program:Number.parseInt(A[2]),isGMGSDrum:!1}}static toFullMIDIString(e){return`${this.toMIDIString(e)} ${e.isDrum?"D":"M"} ${e.name}`}static fromFullMIDIString(e){let A=e.indexOf(" "),s=e.indexOf(" ",A+1);if(A===-1||s===-1)throw new Error(`Invalid named MIDI string: ${e}`);let a=e.slice(0,Math.max(0,A)),n=e.slice(A+1,s),r=e.slice(Math.max(0,s+1));return{...$A.fromMIDIString(a),isDrum:n==="D",name:r}}static matches(e,A){return e.isGMGSDrum||A.isGMGSDrum?e.isGMGSDrum===A.isGMGSDrum&&e.program===A.program:e.program===A.program&&e.bankLSB===A.bankLSB&&e.bankMSB===A.bankMSB}static compare(e,A){return e.isGMGSDrum&&!A.isGMGSDrum?1:!e.isGMGSDrum&&A.isGMGSDrum?-1:e.program!==A.program?e.program-A.program:e.bankMSB!==A.bankMSB?e.bankMSB-A.bankMSB:e.bankLSB-A.bankLSB}static isXGDrum(e){return e.isDrum&&!e.isGMGSDrum}static selectPatch(e,A,s){if(e.length===0)throw new Error("No presets!");A.isGMGSDrum&&De.isSystemXG(s)&&(A={...A,isGMGSDrum:!1,bankLSB:0,bankMSB:De.getDrumBank(s)});let{isGMGSDrum:a,bankLSB:n,bankMSB:r,program:i}=A,o=De.isSystemXG(s),I=De.isXGDrum(r)&&o,l=e.find(g=>this.matches(g,A));if(l&&(!I||I&&this.isXGDrum(l)))return l;let B=g=>{h.info(`%cPreset %c${$A.toMIDIString(A)}%c not found. (${s}) Replaced with %c${this.toFullMIDIString(g)}`,d.warn,d.unrecognized,d.warn,d.value)};if(a){let g=e.find(E=>E.isGMGSDrum&&E.program===i);return g||(g=e.find(E=>E.isDrum&&E.program===i),g)?(B(g),g):(g=this.getAnyDrums(e,!1),B(g),g)}if(I){let g=e.find(E=>E.program===i&&E.isDrum&&!E.isGMGSDrum);return g||(g=e.find(E=>E.isDrum&&E.program===i),g&&g.program<49)?(B(g),g):(g=this.getAnyDrums(e,!0),B(g),g)}let C=e.filter(g=>g.program===i&&!g.isDrum);if(C.length===0)return B(e[0]),e[0];if(l=o?C.find(g=>g.bankLSB===n):C.find(g=>g.bankMSB===r),l)return B(l),l;if(n!==64||!o){let g=Math.max(r,n);if(l=C.find(E=>E.bankLSB===g||E.bankMSB===g),l)return B(l),l}return B(C[0]),C[0]}static getAnyDrums(e,A){let s=A?e.find(a=>this.isXGDrum(a)):e.find(a=>a.isGMGSDrum);return s||(e.find(a=>a.isDrum)??e[0])}},me=Object.freeze({type:"Other"}),ae=class le{static analyzeSysEx(e){if(e.length<3)return me;switch(e[0]){default:return me;case 126:case 127:return this.analyzeGM(e);case 65:return this.analyzeGS(e);case 67:return this.analyzeXG(e)}}static analyzeRPN(e,A,s){switch(A){default:return me;case Ze.pitchWheelRange:return{type:"Channel MIDI Param",channel:e,parameter:"pitchWheelRange",value:s/128};case Ze.fineTuning:return{type:"Channel MIDI Param",channel:e,parameter:"fineTune",value:(s-8192)/81.92};case Ze.coarseTuning:return{type:"Channel MIDI Param",channel:e,parameter:"keyShift",value:(s>>7)-64};case Ze.modulationDepth:return{type:"Channel MIDI Param",channel:e,parameter:"modulationDepth",value:s/1.28}}}static analyzeNRPN(e,A,s){let a=A>>7,n=A&127;switch(a){default:return me;case ke.partParameter:switch(n){default:return me;case Ue.vibratoRate:return{type:"Controller Change",channel:e,controller:f.vibratoRate,value:s>>7};case Ue.vibratoDepth:return{type:"Controller Change",channel:e,controller:f.vibratoDepth,value:s>>7};case Ue.vibratoDelay:return{type:"Controller Change",channel:e,controller:f.vibratoDelay,value:s>>7};case Ue.tvfCutoffFrequency:return{type:"Controller Change",channel:e,controller:f.brightness,value:s>>7};case Ue.tvfResonance:return{type:"Controller Change",channel:e,controller:f.filterResonance,value:s>>7};case Ue.envelopeAttackTime:return{type:"Controller Change",channel:e,controller:f.attackTime,value:s>>7};case Ue.envelopeDecayTime:return{type:"Controller Change",channel:e,controller:f.decayTime,value:s>>7};case Ue.envelopeReleaseTime:return{type:"Controller Change",channel:e,controller:f.releaseTime,value:s>>7}}case ke.drumPitch:case ke.drumPitchFine:case ke.drumLevel:case ke.drumPan:case ke.drumReverb:case ke.drumChorus:case ke.drumDelay:return{type:"Drum Setup"}}}static setGlobalMIDIParameter(e,A,s,a){switch(s){case"system":return[le.reset(e,a)];case"keyShift":switch(A){default:return[le.deviceControlMessage(e,4,[0,a+64])];case"xg":return[le.xgMessage(e,0,0,6,[a+64])];case"gs":return[le.gsMessage(e,64,0,5,[a+64])]}case"fineTune":switch(A){default:{let n=Math.floor(a*81.92+8192);return[le.deviceControlMessage(e,3,[n&127,n>>7&127])]}case"xg":{let n=Math.floor(a*10+1024);return[le.xgMessage(e,0,0,0,[n>>12&15,n>>8&15,n>>4&15,n&15])]}case"gs":{let n=Math.floor(a*10+1024);return[le.gsMessage(e,64,0,0,[n>>12&15,n>>8&15,n>>4&15,n&15])]}}case"volume":switch(A){default:{let n=Math.floor(a*16383);return[le.deviceControlMessage(e,1,[n&127,n>>7&127])]}case"xg":{let n=Math.floor(a*127);return[le.xgMessage(e,0,0,4,[n])]}case"gs":{let n=Math.floor(a*127);return[le.gsMessage(e,64,0,4,[n])]}}case"pan":if(A==="gs"){let n=Math.floor(a*63)+64;return[le.gsMessage(e,64,0,6,[n])]}else{let n=Math.floor(a*8192)+8192;return[le.deviceControlMessage(e,2,[n&127,n>>7&127])]}}}static setChannelMIDIParameter(e,A,s,a,n){A%=16;let r=le.channelToSyx(A);switch(a){case"pressure":return[Qe.channelPressure(e,A,n)];case"pitchWheel":return[Qe.pitchWheel(e,A,n)];case"pitchWheelRange":return Qe.registeredParameter(e,A,Ze.pitchWheelRange,Math.floor(n*128));case"modulationDepth":return Qe.registeredParameter(e,A,Ze.modulationDepth,Math.floor(n*1.28));case"rxChannel":return s==="xg"?[le.xgMessage(e,8,A,4,[n])]:[le.gsMessage(e,64,16|r,2,[n])];case"polyMode":return n?[Qe.controllerChange(e,A,f.polyModeOn,0)]:[Qe.controllerChange(e,A,f.monoModeOn,0)];case"keyShift":return Qe.registeredParameter(e,A,Ze.coarseTuning,n+64<<7);case"fineTune":return Qe.registeredParameter(e,A,Ze.fineTuning,Math.floor(n*81.92+8192));case"randomPan":return s==="xg"?[le.xgMessage(e,8,A,14,[0])]:[le.gsMessage(e,64,16|r,28,[0])];case"assignMode":switch(s){default:case"gs":return[le.gsMessage(e,64,16|r,20,[n])];case"xg":return[le.xgMessage(e,8,A,6,[n])]}case"efxAssign":return[le.gsMessage(e,64,16|r,34,[n])];case"cc1":return[le.gsMessage(e,64,16|r,31,[n])];case"cc2":return[le.gsMessage(e,64,16|r,32,[n])];case"drumMap":return[le.gsMessage(e,64,16|r,21,[n])];case"velocitySenseDepth":return s==="xg"?[le.xgMessage(e,8,A,12,[n])]:[le.gsMessage(e,64,16|r,26,[n])];case"velocitySenseOffset":return s==="xg"?[le.xgMessage(e,8,A,13,[n])]:[le.gsMessage(e,64,16|r,27,[n])]}}static syxToChannel(e){return[9,0,1,2,3,4,5,6,7,8,10,11,12,13,14,15][e%16]}static channelToSyx(e){return[1,2,3,4,5,6,7,8,9,0,10,11,12,13,14,15][e%16]}static gs(e,A,s,a){let n=128-(e+A+s+a.reduce((r,i)=>r+i,0))%128&127;return[65,16,66,18,e,A,s,...a,n,247]}static gsMessage(e,A,s,a,n){return Qe.systemExclusive(e,this.gs(A,s,a,n))}static xg(e,A,s,a){return[67,16,76,e,A,s,...a,247]}static xgMessage(e,A,s,a,n){return Qe.systemExclusive(e,this.xg(A,s,a,n))}static deviceControl(e,A){return[127,127,4,e,...A,247]}static deviceControlMessage(e,A,s){return Qe.systemExclusive(e,this.deviceControl(A,s))}static reset(e,A){switch(A){case"gs":return this.gsMessage(e,64,0,127,[0]);case"xg":return this.xgMessage(e,0,0,126,[0]);case"gm":return Qe.systemExclusive(e,[126,127,9,1,127]);case"gm2":return Qe.systemExclusive(e,[126,127,9,3,127])}}static analyzeGM(e){if(e.length<4)return me;if(e[2]===4)switch(e[3]){default:return me;case 1:{let A=(e[5]<<7|e[4])/16383;return{type:"Global MIDI Param",parameter:"volume",value:Math.pow(A,2)}}case 2:return{type:"Global MIDI Param",parameter:"pan",value:((e[5]<<7|e[4])-8192)/8192};case 3:return{type:"Global MIDI Param",parameter:"fineTune",value:((e[5]<<7|e[4])-8192)/81.92};case 4:return{type:"Global MIDI Param",parameter:"keyShift",value:e[5]-64};case 5:if(e[4]!==1||e[5]!==1||e[6]!==1||e[7]!==1)return me;switch(e[8]){default:return me;case 1:switch(e[9]){default:return me;case 0:case 1:return{type:"Reverb Param"}}case 2:switch(e[9]){default:return me;case 0:case 1:case 2:case 3:case 4:return{type:"Chorus Param"}}}}if(e[2]!==9)return me;switch(e[3]){default:return me;case 1:return{type:"Global MIDI Param",parameter:"system",value:"gm"};case 2:return{type:"Global MIDI Param",parameter:"system",value:"gm"};case 3:return{type:"Global MIDI Param",parameter:"system",value:"gm2"}}}static analyzeXG(e){if(e[2]!==76||e.length<7)return me;let A=e[3],s=e[4],a=e[5],n=e[6];if(A===6||A===7)return{type:"Display Data"};if(A===0&&s===0)switch(a){default:return me;case 0:return{type:"Global MIDI Param",parameter:"fineTune",value:(((e[6]&15)<<12|(e[7]&15)<<8|(e[8]&15)<<4|e[9]&15)-1024)/10};case 6:return{type:"Global MIDI Param",parameter:"keyShift",value:n-64};case 126:case 127:return{type:"Global MIDI Param",parameter:"system",value:"xg"}}if(A===2&&s===1)return a<=21?{type:"Reverb Param"}:a<=53?{type:"Chorus Param"}:{type:"Variation Param"};if(A===3&&s===0)return{type:"Variation Param"};if(A===8){let r=s;switch(a){default:return me;case 1:return{type:"Controller Change",channel:r,controller:f.bankSelect,value:n};case 2:return{type:"Controller Change",channel:r,controller:f.bankSelectLSB,value:n};case 3:return{type:"Program Change",channel:r,value:n};case 5:return{type:"Controller Change",channel:r,controller:n===1?f.polyModeOn:f.monoModeOn,value:0};case 6:return{type:"Channel MIDI Param",channel:r,parameter:"assignMode",value:n};case 7:return{type:"Drums On",channel:r,isDrum:n>0};case 8:return{type:"Channel MIDI Param",channel:r,parameter:"keyShift",value:n-64};case 11:return{type:"Controller Change",channel:r,controller:f.mainVolume,value:n};case 14:return{type:"Controller Change",channel:r,controller:f.pan,value:n};case 18:return{type:"Controller Change",channel:r,controller:f.chorusDepth,value:n};case 19:return{type:"Controller Change",channel:r,controller:f.reverbDepth,value:n};case 21:return{type:"Controller Change",channel:r,controller:f.vibratoRate,value:n};case 22:return{type:"Controller Change",channel:r,controller:f.vibratoDepth,value:n};case 23:return{type:"Controller Change",channel:r,controller:f.vibratoDelay,value:n};case 24:return{type:"Controller Change",channel:r,controller:f.brightness,value:n};case 25:return{type:"Controller Change",channel:r,controller:f.filterResonance,value:n};case 26:return{type:"Controller Change",channel:r,controller:f.attackTime,value:n};case 27:return{type:"Controller Change",channel:r,controller:f.decayTime,value:n};case 12:return{type:"Controller Change",channel:r,controller:f.releaseTime,value:n}}}return A>>4===3?{type:"Drum Setup"}:me}static analyzeGS(e){if(e.length<10||e[3]!==18)return me;if(e[2]===69)return{type:"Display Data"};if(e[2]!==66)return me;let A=e[4],s=e[5],a=e[6],n=e[7];if((A===0||A===64)&&s===0)switch(a){case 0:return{type:"Global MIDI Param",parameter:"fineTune",value:((n<<12|e[8]<<8|e[9]<<4|e[10])-1024)/10};case 4:return{type:"Global MIDI Param",parameter:"volume",value:n/127};case 5:return{type:"Global MIDI Param",parameter:"keyShift",value:n-64};case 6:return{type:"Global MIDI Param",parameter:"pan",value:(n-64)/63};case 127:switch(n){case 0:case 1:return{type:"Global MIDI Param",parameter:"system",value:"gs"};case 127:return{type:"Global MIDI Param",parameter:"system",value:"gm"}}return me}if(A===65)return{type:"Drum Setup"};if(A!==64&&A!==80)return me;let r=A===80?16:0;if(s===1){if(a>=48&&a<=55)return{type:"Reverb Param"};if(a>=56&&a<=64)return{type:"Chorus Param"};if(a>=80&&a<=90)return{type:"Delay Param"}}if(s===3&&a>=0&&a<=127)return{type:"Insertion Param"};if(s>>4===1){let i=le.syxToChannel(s&15)+r;switch(a){default:return me;case 0:return{type:"Program Change",channel:i,value:n};case 19:return{type:"Channel MIDI Param",channel:i,parameter:"polyMode",value:n===1};case 20:return{type:"Channel MIDI Param",channel:i,parameter:"assignMode",value:n};case 21:return{type:"Drums On",channel:i,isDrum:n>0};case 22:return{type:"Channel MIDI Param",channel:i,parameter:"keyShift",value:n-64};case 25:return{type:"Controller Change",channel:i,controller:f.mainVolume,value:n};case 26:return{type:"Channel MIDI Param",channel:i,parameter:"velocitySenseDepth",value:n};case 27:return{type:"Channel MIDI Param",channel:i,parameter:"velocitySenseOffset",value:n};case 28:return{type:"Controller Change",channel:i,controller:f.pan,value:n};case 31:return{type:"Channel MIDI Param",channel:i,parameter:"cc1",value:n};case 32:return{type:"Channel MIDI Param",channel:i,parameter:"cc2",value:n};case 33:return{type:"Controller Change",channel:i,controller:f.chorusDepth,value:n};case 34:return{type:"Controller Change",channel:i,controller:f.reverbDepth,value:n};case 42:return{type:"Channel MIDI Param",channel:i,parameter:"fineTune",value:((n<<7|e[8])-8192)/81.92};case 44:return{type:"Controller Change",channel:i,controller:f.variationDepth,value:n};case 48:return{type:"Controller Change",channel:i,controller:f.vibratoRate,value:n};case 49:return{type:"Controller Change",channel:i,controller:f.vibratoDepth,value:n};case 50:return{type:"Controller Change",channel:i,controller:f.brightness,value:n};case 51:return{type:"Controller Change",channel:i,controller:f.filterResonance,value:n};case 52:return{type:"Controller Change",channel:i,controller:f.attackTime,value:n};case 53:return{type:"Controller Change",channel:i,controller:f.decayTime,value:n};case 54:return{type:"Controller Change",channel:i,controller:f.releaseTime,value:n};case 55:return{type:"Controller Change",channel:i,controller:f.vibratoDelay,value:n}}}if(s>>4===4){let i=le.syxToChannel(s&15)+r;switch(a){default:return me;case 0:case 1:return{type:"Controller Change",channel:i,controller:f.bankSelectLSB,value:n};case 34:return{type:"Channel MIDI Param",channel:i,parameter:"efxAssign",value:n===1}}}return me}},_n="Created using SpessaSynth";function $n(t,e,A){let s="gm",a=[],n=new Array(t.tracks.length).fill(0),r=16+Math.max(...t.portChannelOffsetMap),i=[];for(let o=0;o<r;o++)i.push({program:0,isDrum:o%16===9,lastBank:void 0,lastBankLSB:void 0,hasBankSelect:!1});t.iterate((o,I,l)=>{let B=t.portChannelOffsetMap[n[I]];if(o.statusByte===G.midiPort){n[I]=o.data[0];return}let C=o.statusByte&240;if(C!==G.controllerChange&&C!==G.programChange&&C!==G.systemExclusive)return;if(C===G.systemExclusive){let k=ae.analyzeSysEx(o.data);switch(k.type){default:return;case"Drums On":{let u=k.channel+B;if(!i[u])return;i[u].isDrum=k.isDrum;return}case"Global MIDI Param":k.parameter==="system"&&(s=k.value,k.value==="gm"&&a.push({tNum:I,e:o}));break;case"Controller Change":{let u=t.tracks[I];if(k.channel>=16)return;let M=Qe.controllerChange(o.ticks,k.channel,k.controller,k.value);u.events[l[I]]=M,o=M,h.info("%cReplaced a system exclusive with controller change!",d.info);break}case"Program Change":{if(k.channel>=16)return;let u=t.tracks[I],M=Qe.programChange(o.ticks,k.channel,k.value);u.events[l[I]]=M,o=M,h.info("%cReplaced a system exclusive with program change!",d.info);break}}}let g=(o.statusByte&15)+B,E=i[g];if(C===G.programChange){let k={program:o.data[0],bankLSB:E.lastBankLSB?.data?.[1]??0,bankMSB:De.subtractBankOffset(E.lastBank?.data?.[1]??0,t.bankOffset,s==="xg"),isGMGSDrum:E.isDrum},u=A.getPreset(k,s);if(h.info(`%cInput patch: %c${je.toMIDIString(k)}%c. Channel %c${g}%c. Changing patch to ${u.toString()}.`,d.info,d.unrecognized,d.info,d.recognized,d.info),o.data[0]=u.program,u.isGMGSDrum&&De.isSystemXG(s)||E.lastBank===void 0||(E.lastBank.data[1]=De.addBankOffset(u.bankMSB,e,s==="xg"),E.lastBankLSB===void 0))return;E.lastBankLSB.data[1]=u.bankLSB;return}let S=o.data[0]===f.bankSelectLSB;o.data[0]!==f.bankSelect&&!S||(E.hasBankSelect=!0,S?E.lastBankLSB=o:E.lastBank=o)});for(let o=0;o<i.length;o++){let I=i[o];if(I.hasBankSelect)continue;let l=o%16,B=G.programChange|l,C=Math.floor(o/16)*16,g=t.portChannelOffsetMap.indexOf(C),E=t.tracks.find(w=>w.port===g&&w.channels.has(l));if(E===void 0)continue;let S=E.events.findIndex(w=>w.statusByte===B);if(S===-1){let w=E.events.findIndex(N=>N.statusByte>128&&N.statusByte<240&&(N.statusByte&15)===l);if(w===-1)continue;let R=E.events[w].ticks,F=A.getPreset({bankMSB:0,bankLSB:0,program:0,isGMGSDrum:!1},s).program;E.addEvents(w,Qe.programChange(R,l,F)),S=w}h.info(`%cAdding bank select for %c${o}`,d.info,d.recognized);let k=E.events[S].ticks,u=A.getPreset({bankLSB:0,bankMSB:0,program:I.program,isGMGSDrum:I.isDrum},s),M=De.addBankOffset(u.bankMSB,e,s==="xg");E.addEvents(S,Qe.controllerChange(k,l,f.bankSelect,M))}if(s==="gm"&&!De.isSystemXG(s)){for(let I of a){let l=t.tracks[I.tNum];l.deleteEvent(l.events.indexOf(I.e))}let o=0;t.tracks[0].events[0].statusByte===G.trackName&&o++,t.tracks[0].addEvents(o,ae.reset(0,"gs"))}t.flush()}var bs={bankOffset:0,metadata:{},correctBankOffset:!0,soundBank:void 0};function jn(t,e,A){let s=A.metadata;if(h.group("%cWriting the RMIDI File...",d.info),h.info("metadata",s),h.info("Initial bank offset",t.bankOffset),A.correctBankOffset){if(!A.soundBank)throw new Error("Sound bank must be provided if correcting bank offset.");$n(t,A.bankOffset,A.soundBank)}let a=new ne(t.writeMIDI());s.name??=t.getName(),s.creationDate??=new Date,s.copyright??=_n,s.software??="SpessaSynth",Object.entries(s).forEach(o=>{let I=o;I[1]&&t.setRMIDInfo(I[0],I[1])});let n=[],r=(o,I)=>{n.push(U.write(o,I))};for(let o of Object.entries(t.rmidiInfo)){let I=o[0],l=o[1];switch(I){case"album":r("IALB",l),r("IPRD",l);break;case"software":r("ISFT",l);break;case"infoEncoding":r("IENC",l);break;case"creationDate":r("ICRD",l);break;case"picture":r("IPIC",l);break;case"name":r("INAM",l);break;case"artist":r("IART",l);break;case"genre":r("IGNR",l);break;case"copyright":r("ICOP",l);break;case"comment":r("ICMT",l);break;case"engineer":r("IENG",l);break;case"subject":r("ISBJ",l);break;case"midiEncoding":r("MENC",l);break}}let i=new ne(2);return hs(i,A.bankOffset,2),n.push(U.write("DBNK",i)),h.info("%cFinished!",d.info),h.groupEnd(),U.writeParts("RIFF",[et("RMID"),U.write("data",a),U.writeParts("INFO",n,!0),new ne(e)]).buffer}var uA=class{rpnMSB={v:127,track:0,event:0};rpnLSB={v:127,track:0,event:0};nrpnMSB={v:0,track:0,event:0};nrpnLSB={v:0,track:0,event:0};dataMSB={v:0,track:0,event:0};dataLSB={v:0,track:0,event:0};channel;isRegistered=!0;constructor(t){this.channel=t}get paramMSB(){return this.isRegistered?this.rpnMSB:this.nrpnMSB}get paramLSB(){return this.isRegistered?this.rpnLSB:this.nrpnLSB}reset(){this.isRegistered=!0,this.rpnLSB.v=127,this.rpnMSB.v=127,this.nrpnMSB.v=0,this.nrpnLSB.v=0,this.resetData()}controllerChange(t,e,A,s){switch(t){case f.registeredParameterMSB:this.resetData(),this.isRegistered=!0,this.rpnMSB={v:e,track:A,event:s};break;case f.registeredParameterLSB:this.resetData(),this.isRegistered=!0,this.rpnLSB={v:e,track:A,event:s};break;case f.nonRegisteredParameterMSB:this.resetData(),this.isRegistered=!1,this.nrpnMSB={v:e,track:A,event:s};break;case f.nonRegisteredParameterLSB:this.resetData(),this.isRegistered=!1,this.nrpnLSB={v:e,track:A,event:s};break;case f.dataEntryMSB:return this.dataMSB={v:e,track:A,event:s},this.analyze();case f.dataEntryLSB:return this.dataLSB={v:e,track:A,event:s},this.analyze()}}resetData(){this.dataLSB.v=0,this.dataMSB.v=0}analyze(){let t=this.dataMSB.v<<7|this.dataLSB.v;return this.isRegistered?ae.analyzeRPN(this.channel,this.rpnMSB.v<<7|this.rpnLSB.v,t):ae.analyzeNRPN(this.channel,this.nrpnMSB.v<<7|this.nrpnLSB.v,t)}};function ea(t,e){h.groupCollapsed("%cSearching for all used programs and keys...",d.info);let A=16+Math.max(...t.portChannelOffsetMap),s=[],a="gs",n=0,r=C=>{a=C,n=0;for(let g=0;g<A;g++){let E=s[g];E.isDrum=g%16===9,E.bankMSB=De.getDefaultBank(C),E.bankLSB=0,E.keyShift=0,E.param.reset()}};for(let C=0;C<A;C++){let g=C%16===9;s.push({preset:e.getPreset({bankLSB:0,bankMSB:0,isGMGSDrum:g,program:0},a),bankMSB:0,bankLSB:0,param:new uA(C),isDrum:g,keyShift:0})}let i=new Map,o=t.tracks.map(C=>C.port),I=t.portChannelOffsetMap,{timeline:l,tracks:B}=t;for(let C of l){let g=C.tr,E=C.ev,S=B[g].events[E];if(S.statusByte===G.midiPort&&t.tracks[g].channels.size>0){let M=S.data[0];I[M]===void 0&&(h.warn(`Invalid port ${M} on track ${g}. (No offset found in the MIDI map.`),M=0),o[g]=M;continue}let k=S.statusByte&240;if(k!==G.noteOn&&k!==G.controllerChange&&k!==G.programChange&&k!==G.systemExclusive)continue;let u=I[o[g]]||0;switch(k){case G.programChange:{let M=s[(S.statusByte&15)+u];M.preset=e.getPreset({bankMSB:M.bankMSB,bankLSB:M.bankLSB,program:S.data[0],isGMGSDrum:M.isDrum},a);break}case G.controllerChange:{let M=s[(S.statusByte&15)+u],w=S.data[0],R=S.data[1];switch(w){case f.registeredParameterMSB:case f.registeredParameterLSB:case f.nonRegisteredParameterLSB:case f.nonRegisteredParameterMSB:M.param.controllerChange(w,R,g,E);break;case f.dataEntryMSB:case f.dataEntryLSB:{let F=M.param.controllerChange(w,R,g,E);F?.type==="Channel MIDI Param"&&F.parameter==="keyShift"&&(M.keyShift=M.isDrum?0:F.value);break}case f.resetAllControllers:M.param.reset();break;case f.bankSelect:M.bankMSB=R;break;case f.bankSelectLSB:M.bankLSB=R;break}break}case G.noteOn:{let M=s[(S.statusByte&15)+u];if(S.data[1]===0||!M.preset)continue;let w=i.get(M.preset);w||(w=new Map,i.set(M.preset,w));let R=S.data[0]+(M.isDrum?0:n)+M.keyShift,F=w.get(R);F||(F=new Set,w.set(R,F)),F.add(S.data[1]);break}case G.systemExclusive:{let M=ae.analyzeSysEx(S.data);switch(M.type){default:break;case"Global MIDI Param":M.parameter==="keyShift"?n=M.value:M.parameter==="system"&&(r(M.value),h.info(`%c${M.value.toUpperCase()} on detected!`,d.recognized));break;case"Channel MIDI Param":if(M.parameter==="keyShift"){let w=s[M.channel];if(!w)break;w.keyShift=w.isDrum?0:M.value}break;case"Drums On":{let w=M.channel+u;if(!s[w])break;s[w].isDrum=M.isDrum;break}case"Program Change":{let w=s[M.channel+u];if(!w)break;w.preset=e.getPreset({bankMSB:w.bankMSB,bankLSB:w.bankLSB,program:M.value,isGMGSDrum:w.isDrum},a);break}case"Controller Change":{let w=s[M.channel+u];if(!w)break;M.controller===f.bankSelectLSB?w.bankLSB=M.value:M.controller===f.bankSelect&&(w.bankMSB=M.value)}}}}}for(let[C,g]of i.entries())g.size===0&&(h.info(`%cDetected change but no keys for %c${C.name}`,d.info,d.value),i.delete(C));return h.groupEnd(),i}var ta=t=>(t.data=new ne(t.data.buffer),6e7/Ht(t.data,3));function Aa(t,e=0){let A=[];for(let B=0;B<16;B++)A.push([]);let s=0,a=60/(120*t.timeDivision),n=0,r=0,i=[];for(let B=0;B<16;B++)i.push(new Map);let o=(B,C)=>{let g=i[C].get(B);if(g===void 0)return;let E=g.shift();if(E===void 0)return;let S=A[C][E],k=s-S.start;S.length=C===9?Math.max(k,e):k,r--},{timeline:I,tracks:l}=t;for(;n<I.length;){let B=I[n],C=l[B.tr].events[B.ev],g=C.statusByte>>4,E=C.statusByte&15;if(g===8)o(C.data[0],E);else if(g===9){let k=C.data[0],u=C.data[1];if(u===0)o(k,E);else{let M={midiNote:k,start:s,length:-1,velocity:u},w=A[E];w.push(M);let R=i[E];R.has(k)||R.set(k,[]),i[E].get(k)?.push(w.length-1),r++}}else C.statusByte===81&&(a=60/(ta(C)*t.timeDivision));if(++n>=I.length)break;let S=I[n];s+=a*(l[S.tr].events[S.ev].ticks-C.ticks)}if(r>0)for(let B=0;B<i.length;B++)for(let C of i[B].values())for(let g of C){let E=A[B][g];E.length=s-E.start}return A}var sa={character:49,preLowpass:50,level:51,time:52,delayFeedback:53,preDelayTime:55},na={preLowpass:57,level:58,feedback:59,delay:60,rate:61,depth:62,sendLevelToReverb:63,sendLevelToDelay:64},aa={preLowpass:81,timeCenter:82,timeRatioLeft:83,timeRatioRight:84,levelCenter:85,levelLeft:86,levelRight:87,level:88,feedback:89,sendLevelToReverb:90};function ra(t,e){h.groupCollapsed("%cApplying changes to the MIDI file...",d.info);let{channels:A,reverbParams:s,chorusParams:a,delayParams:n,insertionParams:r}=e;h.info("Desired channel changes",A),h.info("Desired reverb parameters",s),h.info("Desired chorus parameters",a),h.info("Desired delay parameters",n),h.info("Desired insertion parameters",r);let i=e.drumSetupParams==="clear",o=new Set,I=new Map;if(A)for(let[m,p]of A)p==="clear"?o.add(m):I.set(m,p);let l=(e.midiParams?.system==="clear"?void 0:e.midiParams?.system)??"gs",B=!1,C=0,g=0,E=t.tracks.map(m=>m.port),S={},k=0,u=(m,p)=>{t.tracks[m].channels.size!==0&&(k===0&&(k+=16,S[p]=0),S[p]===void 0&&(S[p]=k,k+=16),E[m]=p)};for(let[m,p]of t.tracks.entries())u(m,p.port);let M=k,w=[];for(let m=0;m<M;m++)w.push({isFirstNoteOn:!0,param:new uA(m),clearedParams:{pLSB:!0,pMSB:!0,data:!0},keyShift:I.get(m)?.keyShift??0,fineTune:I.get(m)?.fineTune??0,currentFineTune:0,currentKeyShift:0});if(t.iterate((m,p,y)=>{let V=t.tracks[p],Y=y[p],q=()=>{V.deleteEvent(Y),y[p]--},J=W=>{let K=w[W],ee=K.param,Ae=ee.paramMSB,O=ee.paramLSB;h.info(`%cClearing Non/Registered Parameter on ${W}. Clear MSB: %c${K.clearedParams.pMSB}%c, clear LSB: %c${K.clearedParams.pLSB}%c, clear data: %c${K.clearedParams.data}.`,d.info,d.recognized,d.info,d.recognized,d.info,d.recognized),K.clearedParams.data||(q(),p===Ae.track&&Y<Ae.event&&Ae.event--,p===O.track&&Y<O.event&&O.event--,K.clearedParams.data=!0),K.clearedParams.pMSB||(t.tracks[Ae.track].deleteEvent(Ae.event),y[Ae.track]--,Ae.track===O.track&&Ae.event<O.event&&O.event--,K.clearedParams.pMSB=!0),K.clearedParams.pLSB||(t.tracks[O.track].deleteEvent(O.event),y[O.track]--,K.clearedParams.pLSB=!0)},te=W=>{V.addEvents(Y,W),y[p]++},x=(...W)=>{for(let K=W.length-1;K>=0;K--)te(W[K])},D=S[E[p]]||0;if(m.statusByte===G.midiPort){u(p,m.data[0]);return}if(m.statusByte<G.noteOff||m.statusByte>G.systemExclusive)return;let Q=m.statusByte&240,T=m.statusByte&15,H=T+D;if(m.statusByte!==G.systemExclusive&&o.has(H)){q();return}let z=w[H],j=I.get(H);switch(Q){case G.noteOn:if(!j)break;if(z.isFirstNoteOn){if(z.isFirstNoteOn=!1,j.controllers)for(let[K,ee]of j.controllers)ee!=="clear"&&te(Qe.controllerChange(m.ticks,T,K,ee));if(j.midiParams?.fineTune!==void 0&&j.midiParams.fineTune!=="clear"){let K=z.fineTune+j.midiParams.fineTune;z.currentKeyShift=Math.trunc(K/100),j.midiParams.fineTune=K%100}else{let K=z.fineTune+z.currentFineTune;z.currentKeyShift=Math.trunc(K/100),j.midiParams??={},j.midiParams.fineTune=K%100}let W=j.patch;if(W&&W!=="clear"){h.info(`%cSetting %c${H}%c to %c${je.toMIDIString(W)}%c. Track num: %c${p}`,d.info,d.recognized,d.info,d.recognized,d.info,d.recognized);let K=W.bankMSB,ee=W.bankLSB,Ae=W.program;te(Qe.programChange(m.ticks,T,Ae));let O=(re,ue)=>{te(Qe.controllerChange(m.ticks,T,re?f.bankSelectLSB:f.bankSelect,ue))};if(De.isSystemXG(l)&&W.isGMGSDrum&&(h.info(`%cAdding XG Drum change on track %c${p}`,d.recognized,d.value),K=De.getDrumBank(l),ee=0),O(!1,K),O(!0,ee),W.isGMGSDrum&&!De.isSystemXG(l)&&T!==9){h.info(`%cAdding GS Drum change on track %c${p}`,d.recognized,d.value);let re=16|ae.channelToSyx(T);te(ae.gsMessage(m.ticks,40,re,21,[1]))}}if(j.midiParams)for(let[K,ee]of Object.entries(j.midiParams))ee!=="clear"&&x(...ae.setChannelMIDIParameter(m.ticks,T,l,K,ee))}m.data[0]+=z.keyShift+z.currentKeyShift;break;case G.noteOff:if(!j)break;m.data[0]+=z.keyShift+z.currentKeyShift;break;case G.programChange:if(j?.patch){q();return}break;case G.pitchWheel:j?.midiParams?.pitchWheel&&q();break;case G.channelPressure:j?.midiParams?.pressure&&q();break;case G.controllerChange:{let W=m.data[0],K=m.data[1];if(j?.controllers?.get(W)){q();return}switch(W){case f.bankSelect:case f.bankSelectLSB:j?.patch&&q();return;case f.registeredParameterLSB:case f.registeredParameterMSB:case f.nonRegisteredParameterMSB:case f.nonRegisteredParameterLSB:W===f.nonRegisteredParameterLSB||W===f.registeredParameterLSB?z.clearedParams.pLSB=!1:z.clearedParams.pMSB=!1,z.param.controllerChange(W,K,p,Y);return;case f.dataEntryMSB:case f.dataEntryLSB:{z.clearedParams.data=!1;let ee=z.param.controllerChange(W,K,p,Y);if(!ee)return;switch(ee.type){case"Drum Setup":i&&J(H);return;case"Controller Change":{let Ae=ee.controller,O=ee.channel;if(j?.controllers?.get(Ae)){J(O);return}(Ae===f.bankSelect||Ae===f.bankSelectLSB)&&j?.patch&&J(O);break}case"Channel MIDI Param":if(ee.parameter==="fineTune"&&z.fineTune){z.currentFineTune=ee.value;let Ae=z.fineTune+ee.value;z.currentKeyShift=Math.trunc(Ae/100);let O=Ae%100;h.info(`%cFine tuning already present on ${H}%c (${ee.value})%c, new relative tune: %c${Ae}%c cents. Key shift: %c${z.currentKeyShift}%c semitones. Actual RPN value to set: %c${O} cents.`,d.info,d.recognized,d.info,d.value,d.info,d.value,d.info,d.value);let re=Math.floor(O*81.92)+8192;m.data[1]=W===f.dataEntryMSB?re>>7:re&127}else j?.midiParams?.[ee.parameter]&&J(H);break}z.clearedParams.pLSB=!0,z.clearedParams.pMSB=!0;return}default:return}}case G.systemExclusive:{let W=ae.analyzeSysEx(m.data);switch(W.type){default:return;case"Drum Setup":i&&q();return;case"Reverb Param":s&&q();return;case"Chorus Param":a&&q();return;case"Delay Param":n&&q();return;case"Insertion Param":r&&q();return;case"Program Change":I.get(W.channel+D)?.patch&&q();return;case"Global MIDI Param":if(e.midiParams?.[W.parameter]){q();return}if(W.parameter==="system")switch(W.value){case"xg":h.info("%cXG system on detected",d.info),l="xg",B=!0,C=p,g=Y;for(let K of w)K.param.reset(),K.clearedParams={pLSB:!0,pMSB:!0,data:!0};return;case"gm2":h.info("%cGM2 system on detected",d.info),l="gm2",B=!0,C=p,g=Y;for(let K of w)K.param.reset(),K.clearedParams={pLSB:!0,pMSB:!0,data:!0};return;case"gs":h.info("%cGS on detected!",d.recognized),B=!0,C=p,g=Y;for(let K of w)K.param.reset(),K.clearedParams={pLSB:!0,pMSB:!0,data:!0};return;case"gm":h.info("%cGM on detected, removing!",d.info),q(),B=!1;return}break;case"Channel MIDI Param":{let K=I.get(W.channel+D);if(K?.midiParams?.[W.parameter]){q();return}if(W.parameter==="fineTune"){let ee=w[W.channel+D];if(ee&&ee.isFirstNoteOn&&K){let Ae=ee.fineTune+W.value;ee.currentKeyShift=Math.trunc(Ae/100),ee.fineTune=Ae%100,h.info(`%cFine tuning already present on ${W.channel+D}, new relative tune: %c${Ae} cents`,d.info,d.recognized),q()}break}break}case"Controller Change":{let K=W.controller,ee=I.get(W.channel+D);if(ee?.controllers?.get(K)!==void 0){q();return}(K===f.bankSelect||K===f.bankSelectLSB)&&ee?.patch&&q();return}}}}}),!B&&[...I.values()].some(m=>m.patch&&m.patch!=="clear")){let m=0;t.tracks[0].events[0].statusByte===G.trackName&&m++;let p=(e.midiParams?.system==="clear"?void 0:e.midiParams?.system)??"gs";t.tracks[0].addEvents(m,ae.reset(0,p)),C=0,g=m,l=p,h.info(`%c${p} reset on not detected. Adding it.`,d.info)}let R=Math.max(0,t.firstNoteOn),F=t.tracks[C],N=g+1;for(let m of Object.keys(e.midiParams??{})){if(m==="system")continue;let p=e.midiParams?.[m];!p||p==="clear"||F.addEvents(N,...ae.setGlobalMIDIParameter(R,l,m,p))}if(s&&s!=="clear"){let m=sa,p=s;F.addEvents(N,ae.gsMessage(R,64,1,m.level,[p.level]),ae.gsMessage(R,64,1,m.preLowpass,[p.preLowpass]),ae.gsMessage(R,64,1,m.character,[p.character]),ae.gsMessage(R,64,1,m.time,[p.time]),ae.gsMessage(R,64,1,m.delayFeedback,[p.delayFeedback]),ae.gsMessage(R,64,1,m.preDelayTime,[p.preDelayTime]))}if(a&&a!=="clear"){let m=na,p=a;F.addEvents(N,ae.gsMessage(R,64,1,m.level,[p.level]),ae.gsMessage(R,64,1,m.preLowpass,[p.preLowpass]),ae.gsMessage(R,64,1,m.feedback,[p.feedback]),ae.gsMessage(R,64,1,m.delay,[p.delay]),ae.gsMessage(R,64,1,m.rate,[p.rate]),ae.gsMessage(R,64,1,m.depth,[p.depth]),ae.gsMessage(R,64,1,m.sendLevelToReverb,[p.sendLevelToReverb]),ae.gsMessage(R,64,1,m.sendLevelToDelay,[p.sendLevelToDelay]))}if(n&&n!=="clear"){let m=aa,p=n;F.addEvents(N,ae.gsMessage(R,64,1,m.level,[p.level]),ae.gsMessage(R,64,1,m.preLowpass,[p.preLowpass]),ae.gsMessage(R,64,1,m.timeCenter,[p.timeCenter]),ae.gsMessage(R,64,1,m.timeRatioLeft,[p.timeRatioLeft]),ae.gsMessage(R,64,1,m.timeRatioRight,[p.timeRatioRight]),ae.gsMessage(R,64,1,m.levelCenter,[p.levelCenter]),ae.gsMessage(R,64,1,m.levelLeft,[p.levelLeft]),ae.gsMessage(R,64,1,m.levelRight,[p.levelRight]),ae.gsMessage(R,64,1,m.feedback,[p.feedback]),ae.gsMessage(R,64,1,m.sendLevelToReverb,[p.sendLevelToReverb]))}if(r&&r!=="clear"){let m=r;for(let p=0;p<m.params.length;p++){let y=m.params[p];y!==255&&F.addEvents(N,ae.gsMessage(R,64,3,p+3,[y]))}F.addEvents(N,ae.gsMessage(R,64,3,0,[m.type>>8,m.type&127]))}t.flush(),h.groupEnd()}var RA=class nn{name="";port=0;channels=new Set;events=[];static copyFrom(e){let A=new nn;return A.copyFrom(e),A}copyFrom(e){this.name=e.name,this.port=e.port,this.channels=new Set(e.channels),this.events=e.events.map(A=>new Qe(A.ticks,A.statusByte,new ne(A.data)))}addEvent(e,A){this.events.splice(A,0,e)}addEvents(e,...A){this.events.splice(e,0,...A)}deleteEvent(e){this.events.splice(e,1)}pushEvent(e){this.events.push(e)}},ia={8:2,9:2,10:2,11:2,12:1,13:1,14:2};function Cs(t,e,A){h.groupCollapsed("%cParsing MIDI File...",d.info),t.fileName=A;let s=r=>{let i=de(r,4),o=Nt(r,4),I={type:i,size:o,data:new ne(o)},l=r.slice(r.currentIndex,r.currentIndex+I.size);return I.data.set(l,0),r.currentIndex+=I.size,I},a=s(e);if(a.type!=="MThd")throw h.groupEnd(),new SyntaxError(`Invalid MIDI Header! Expected "MThd", got "${a.type}"`);if(a.size!==6)throw h.groupEnd(),new RangeError(`Invalid MIDI header chunk size! Expected 6, got ${a.size}`);t.format=Nt(a.data,2);let n=Nt(a.data,2);t.timeDivision=Nt(a.data,2);for(let r=0;r<n;r++){let i=new RA,o=s(e);if(o.type!=="MTrk")throw h.groupEnd(),new SyntaxError(`Invalid track header! Expected "MTrk" got "${o.type}"`);let I,l=0;t.format===2&&r>0&&(l+=t.tracks[r-1].events[t.tracks[r-1].events.length-1].ticks);let B=o.data;for(;B.currentIndex<o.size;){l+=pe(B);let C=B[B.currentIndex],g;if(I!==void 0&&C<128)g=I;else{if(C<128)throw h.groupEnd(),new SyntaxError(`Unexpected byte with no running byte. (${C})`);g=C,B.currentIndex++}let E;g>=G.noteOff&&g<G.systemExclusive?(E=ia[g>>4],I=g):g===G.systemExclusive?E=pe(B):g===255?(g=B[B.currentIndex++],E=pe(B)):E=0;let S=new ne(E);S.set(B.slice(B.currentIndex,B.currentIndex+E)),i.pushEvent(new Qe(l,g,S)),B.currentIndex+=E}t.tracks.push(i),h.info(`%cParsed %c${t.tracks.length}%c / %c${t.tracks.length}`,d.info,d.value,d.info,d.value)}h.info("%cAll tracks parsed correctly!",d.recognized),t.flush(!1),h.groupEnd()}function Bs(t){return t.toISOString().split(".")[0]+"Z"}var oa=[new Map([["domingo","Sunday"],["segunda-feira","Monday"],["ter\xE7a-feira","Tuesday"],["quarta-feira","Wednesday"],["quinta-feira","Thursday"],["sexta-feira","Friday"],["s\xE1bado","Saturday"],["janeiro","January"],["fevereiro","February"],["mar\xE7o","March"],["abril","April"],["maio","May"],["junho","June"],["julho","July"],["agosto","August"],["setembro","September"],["outubro","October"],["novembro","November"],["dezembro","December"]])];function ga(t){for(let e of oa){let A=t;for(let[a,n]of e.entries()){let r=new RegExp(a,"gi");A=A.replace(r,n)}let s=new Date(A);if(!Number.isNaN(s.getTime()))return s}}function Ia(t){let e=/^(\d{2})\.(\d{2})\.(\d{4})$/.exec(t);if(e){let A=Number.parseInt(e[1]),s=Number.parseInt(e[2])-1,a=Number.parseInt(e[3]),n=new Date(a,s,A);if(!Number.isNaN(n.getTime()))return n}}function ca(t){let e=/^(\d{1,2})\s{1,2}(\d{1,2})\s{1,2}(\d{2})$/.exec(t);if(e){let A=e[1],s=(Number.parseInt(e[2])+1).toString(),a=e[3],n=new Date(`${s}/${A}/${a}`);if(!Number.isNaN(n.getTime()))return n}}function ha(t){let e=/\b\d{4}\b/.exec(t);return e?new Date(e[0]):void 0}function Es(t){if(t=t.trim(),t.length===0)return new Date;let e=t.replaceAll(/\b(\d+)(st|nd|rd|th)\b/g,"$1").replace(/\s+at\s+/i," "),A=new Date(e);if(Number.isNaN(A.getTime())){let s=ga(t);if(s)return s;let a=Ia(t);if(a)return a;let n=ca(t);if(n)return n;let r=ha(t);return r||(h.warn(`Invalid date: "${t}". Replacing with the current date!`),new Date)}return A}function la(t,e,A){e.currentIndex+=8;let s=de(e,4);if(s!=="RMID")throw h.groupEnd(),new SyntaxError(`Invalid RMIDI Header! Expected "RMID", got "${s}"`);let a=U.read(e);if(a.header!=="data")throw h.groupEnd(),new SyntaxError(`Invalid RMIDI Chunk header! Expected "data", got "${a.header}"`);let n=a.data,r=!1,i=!1;for(;e.currentIndex<e.length;){let o=e.currentIndex,I=U.read(e,!0);if(I.header==="RIFF"){let l=de(I.data,4).toLowerCase();l==="sfbk"||l==="sfpk"||l==="dls "?(h.info("%cFound embedded soundbank!",d.recognized),t.embeddedSoundBank=e.slice(o,o+I.size).buffer):h.warn(`Unknown RIFF chunk: "${l}"`),l==="dls "?t.isDLSRMIDI=!0:r=!0}else if(I.header==="LIST"&&de(I.data,4)==="INFO")for(h.info("%cFound RMIDI INFO chunk!",d.recognized);I.data.currentIndex<I.size;){let l=U.read(I.data,!0),B=l.header,C=l.data;switch(B){default:h.warn(`Unknown RMIDI Info: ${B}`);break;case"INAM":t.rmidiInfo.name=C;break;case"IALB":case"IPRD":t.rmidiInfo.album=C;break;case"ICRT":case"ICRD":t.rmidiInfo.creationDate=C;break;case"IART":t.rmidiInfo.artist=C;break;case"IGNR":t.rmidiInfo.genre=C;break;case"IPIC":t.rmidiInfo.picture=C;break;case"ICOP":t.rmidiInfo.copyright=C;break;case"ICMT":t.rmidiInfo.comment=C;break;case"IENG":t.rmidiInfo.engineer=C;break;case"ISFT":t.rmidiInfo.software=C;break;case"ISBJ":t.rmidiInfo.subject=C;break;case"IENC":t.rmidiInfo.infoEncoding=C;break;case"MENC":t.rmidiInfo.midiEncoding=C;break;case"DBNK":t.bankOffset=cs(C,2),i=!0;break}}}r&&!i&&(t.bankOffset=1),t.isDLSRMIDI&&(t.bankOffset=0),t.embeddedSoundBank===void 0&&(t.bankOffset=0),Cs(t,n,A)}var HA={XMFFileType:0,nodeName:1,nodeIDNumber:2,resourceFormat:3,filenameOnDisk:4,filenameExtensionOnDisk:5,macOSFileTypeAndCreator:6,mimeType:7,title:8,copyrightNotice:9,comment:10,autoStart:11,preload:12,contentDescription:13,ID3Metadata:14},Gt={inLineResource:1,inFileResource:2,inFileNode:3,externalFile:4,externalXMF:5,XMFFileURIandNodeID:6},OA={StandardMIDIFile:0,StandardMIDIFileType1:1,DLS1:2,DLS2:3,DLS22:4,mobileDLS:5,unknown:-1,folder:-2},Ca={standard:0,MMA:1,registered:2,nonRegistered:3},rA={none:0,MMAUnpacker:1,registered:2,nonRegistered:3},Ba=class an{length;itemCount;metadataLength;metadata={};nodeData;innerNodes=[];packedContent=!1;nodeUnpackers=[];resourceFormat="unknown";referenceTypeID;constructor(e){let A=e.currentIndex;this.length=pe(e),this.itemCount=pe(e);let s=pe(e),a=s-(e.currentIndex-A),n=e.slice(e.currentIndex,e.currentIndex+a);e.currentIndex+=a,this.metadataLength=pe(n);let r=n.slice(n.currentIndex,n.currentIndex+this.metadataLength);n.currentIndex+=this.metadataLength;let i,o;for(;r.currentIndex<r.length;){r[r.currentIndex]===0?(r.currentIndex++,i=pe(r),Object.values(HA).includes(i)?o=Object.keys(HA).find(g=>HA[g]===i)??"":(h.info(`Unknown field specifier: ${i}`),o=`unknown_${i}`)):(i=de(r,pe(r)),o=i);let C=pe(r);if(C===0){let g=pe(r),E=r.slice(r.currentIndex,r.currentIndex+g);r.currentIndex+=g;let S=pe(E);this.metadata[o]=S<4?de(E,g-1):E.slice(E.currentIndex)}else h.info(`International content: ${C}`),r.currentIndex+=pe(r)}let I=n.currentIndex,l=pe(n),B=n.slice(n.currentIndex,I+l);if(n.currentIndex=I+l,l>0)for(this.packedContent=!0;B.currentIndex<l;){let C={id:pe(B)};switch(C.id){case rA.nonRegistered:case rA.registered:throw h.groupEnd(),new Error(`Unsupported unpacker ID: ${C.id}`);default:throw h.groupEnd(),new Error(`Unknown unpacker ID: ${C.id}`);case rA.none:C.standardID=pe(B);break;case rA.MMAUnpacker:{let g=B[B.currentIndex++];g===0&&(g<<=8,g|=B[B.currentIndex++],g<<=8,g|=B[B.currentIndex++]);let E=pe(B);C.manufacturerID=g,C.manufacturerInternalID=E}break}C.decodedSize=pe(B),this.nodeUnpackers.push(C)}switch(e.currentIndex=A+s,this.referenceTypeID=pe(e),this.nodeData=e.slice(e.currentIndex,A+this.length),e.currentIndex=A+this.length,this.referenceTypeID){case Gt.inLineResource:break;case Gt.externalXMF:case Gt.inFileNode:case Gt.XMFFileURIandNodeID:case Gt.externalFile:case Gt.inFileResource:throw h.groupEnd(),new Error(`Unsupported reference type: ${this.referenceTypeID}`);default:throw h.groupEnd(),new Error(`Unknown reference type: ${this.referenceTypeID}`)}if(this.isFile){if(this.packedContent){let g=this.nodeData.slice(2);h.info(`%cPacked content. Attempting to deflate. Target size: %c${this.nodeUnpackers[0].decodedSize}`,d.warn,d.value);try{this.nodeData=new ne(tn(g).buffer)}catch(E){if(h.groupEnd(),E instanceof Error)throw new Error(`Error unpacking XMF file contents: ${E.message}.`,{cause:E})}}let C=this.metadata.resourceFormat;if(C===void 0)h.warn("No resource format for this file node!");else{C[0]!==Ca.standard&&(h.info(`Non-standard formatTypeID: ${C.toString()}`),this.resourceFormat=C.toString());let g=C[1];Object.values(OA).includes(g)?this.resourceFormat=Object.keys(OA).find(E=>OA[E]===g):h.info(`Unrecognized resource format: ${g}`)}}else for(this.resourceFormat="folder";this.nodeData.currentIndex<this.nodeData.length;){let C=this.nodeData.currentIndex,g=pe(this.nodeData),E=this.nodeData.slice(C,C+g);this.nodeData.currentIndex=C+g,this.innerNodes.push(new an(E))}}get isFile(){return this.itemCount===0}};function Ea(t,e,A){t.bankOffset=0;let s=de(e,4);if(s!=="XMF_")throw h.groupEnd(),new SyntaxError(`Invalid XMF Header! Expected "_XMF", got "${s}"`);h.group("%cParsing XMF file...",d.info);let a=de(e,4);if(h.info(`%cXMF version: %c${a}`,d.info,d.recognized),a==="2.00"){let I=Nt(e,4),l=Nt(e,4);h.info(`%cFile Type ID: %c${I}%c, File Type Revision ID: %c${l}`,d.info,d.recognized,d.info,d.recognized)}pe(e);let n=pe(e);e.currentIndex+=n,e.currentIndex=pe(e);let r=new Ba(e),i,o=I=>{let l=(B,C)=>{I.metadata[B]!==void 0&&typeof I.metadata[B]=="string"&&(t.rmidiInfo[C]=et(I.metadata[B]))};if(l("nodeName","name"),l("title","name"),l("copyrightNotice","copyright"),l("comment","comment"),I.isFile)switch(I.resourceFormat){default:return;case"DLS1":case"DLS2":case"DLS22":case"mobileDLS":h.info("%cFound embedded DLS!",d.recognized),t.embeddedSoundBank=I.nodeData.buffer;break;case"StandardMIDIFile":case"StandardMIDIFileType1":h.info("%cFound embedded MIDI!",d.recognized),i=I.nodeData;break}else for(let B of I.innerNodes)o(B)};if(o(r),h.groupEnd(),!i)throw new Error("No MIDI data in the XMF file!");Cs(t,i,A)}function da(t,e){let A=new Map,s=e.systemParameters.keyShift,a=e.systemParameters.fineTune;for(let r=0;r<e.midiChannels.length;r++){let i=e.midiChannels[r];if(i.systemParameters.isMuted){A.set(r,"clear");continue}let o=i.systemParameters.keyShift+(i.drumChannel?0:s),I=i.systemParameters.fineTune+(i.drumChannel?0:a),l;i.systemParameters.presetLock&&i.patch&&(l={...i.patch});let B=new Map;for(let g=0;g<128;g++){if(!i.lockedControllers[g]||g===f.bankSelect)continue;let E=i.midiControllers[g]>>7;B.set(g,E)}let C={};for(let[g,E]of Object.entries(i.midiParameters))i.lockedMIDIParameters[g]&&(C[g]=E);A.set(r,{keyShift:o,fineTune:I,patch:l,controllers:B,midiParams:C})}let n={};for(let[r,i]of Object.entries(e.midiParameters))e.lockedMIDIParameters[r]&&(n[r]=i);t.modify({channels:A,drumSetupParams:e.systemParameters.drumLock?"clear":void 0,reverbParams:e.systemParameters.reverbLock?e.reverbProcessor:void 0,chorusParams:e.systemParameters.chorusLock?e.chorusProcessor:void 0,delayParams:e.systemParameters.delayLock?e.delayProcessor:void 0,insertionParams:e.systemParameters.insertionEffectLock?e.insertionProcessor:void 0,midiParams:n})}var Mt=class jA{tracks=[];timeline=[];timeDivision=480;duration=0;tempoChanges=[{ticks:0,tempo:120}];extraMetadata=[];lyrics=[];firstNoteOn=0;keyRange={min:0,max:127};lastVoiceEventTick=0;portChannelOffsetMap=[0];loop={start:0,end:0,type:"hard"};fileName;format=0;rmidiInfo={};bankOffset=0;isKaraokeFile=!1;isMultiPort=!1;isDLSRMIDI=!1;embeddedSoundBank;binaryName;get infoEncoding(){let e=this.rmidiInfo.infoEncoding;if(!e)return;let A=e.byteLength;return e[e.byteLength-1]===0&&A--,$e(e,A)}static fromArrayBuffer(e,A=""){let s=new jA,a=new ne(e);switch($e(a,4)){case"RIFF":la(s,a,A);break;case"XMF_":Ea(s,a,A);break;default:Cs(s,a,A);break}return s}static async fromFile(e){return this.fromArrayBuffer(await e.arrayBuffer(),e.name)}static copyFrom(e){let A=new jA;return A.copyFrom(e),A}copyFrom(e){this.copyMetadataFrom(e),this.embeddedSoundBank=e?.embeddedSoundBank?.slice(0)??void 0,this.tracks=e.tracks.map(A=>RA.copyFrom(A)),this.timeline=e.timeline.map(A=>({...A}))}midiTicksToSeconds(e){if(e=Math.max(e,0),this.tempoChanges.length===0)throw new Error("There are no tempo changes in the sequence. At least one is needed.");if(this.tempoChanges[this.tempoChanges.length-1].ticks!==0)throw new Error(`The last tempo change is not at 0 ticks. Got ${this.tempoChanges[this.tempoChanges.length-1].ticks} ticks.`);let A=this.tempoChanges.findIndex(a=>a.ticks<=e),s=0;for(;A<this.tempoChanges.length;){let a=this.tempoChanges[A++],n=e-a.ticks;s+=n*60/(a.tempo*this.timeDivision),e=a.ticks}return s}secondsToMIDITicks(e){if(e=Math.max(e,0),e===0)return 0;if(this.tempoChanges.length===0)throw new Error("There are no tempo changes in the sequence. At least one is needed.");if(this.tempoChanges[this.tempoChanges.length-1].ticks!==0)throw new Error(`The last tempo change is not at 0 ticks. Got ${this.tempoChanges[this.tempoChanges.length-1].ticks} ticks.`);let A=e,s=0;for(let a=this.tempoChanges.length-1;a>=0;a--){let n=this.tempoChanges[a],r=this.tempoChanges[a-1],i=r?r.ticks-n.ticks:1/0,o=60/(n.tempo*this.timeDivision),I=i*o;if(A<=I)return s+=Math.round(A/o),s;s+=i,A-=I}return s}getUsedProgramsAndKeys(e){return ea(this,e)}preloadSynth(e){h.groupCollapsed("%cPreloading samples...",d.info);let A=this.getUsedProgramsAndKeys(e.soundBankManager);for(let[s,a]of A.entries()){h.info(`%cPreloading used samples on %c${s.name}%c...`,d.info,d.recognized,d.info);for(let[n,r]of a.entries())for(let i of r)e.getVoicesForPreset(s,n,i)}h.groupEnd()}flush(e=!0){if(e)for(let A of this.tracks)A.events.sort((s,a)=>s.ticks-a.ticks);this.parseInternal()}getNoteTimes(e=0){return Aa(this,e)}writeMIDI(){return Kn(this)}writeRMIDI(e,A=bs){return jn(this,e,bA(A,bs))}modify(e){ra(this,e)}applySnapshot(e){da(this,e)}getName(e="Shift_JIS"){let A="",s=this.getRMIDInfo("name");if(s)return s.trim();if(this.binaryName){e=this.getRMIDInfo("midiEncoding")??e;try{A=new TextDecoder(e).decode(this.binaryName).trim()}catch(a){h.warn(`Failed to decode MIDI name: ${a}`)}}return A||this.fileName}getExtraMetadata(e="Shift_JIS"){e=this.infoEncoding??e;let A=new TextDecoder(e);return this.extraMetadata.map(s=>A.decode(s.data).replaceAll(/@T|@A/g,"").trim())}setRMIDInfo(e,A){if(this.rmidiInfo.infoEncoding=et("utf-8",!0),e==="picture")this.rmidiInfo.picture=new Uint8Array(A);else if(e==="creationDate")this.rmidiInfo.creationDate=et(Bs(A),!0);else{let s=new TextEncoder().encode(A);this.rmidiInfo[e]=new Uint8Array([...s,0])}}getRMIDInfo(e){if(!this.rmidiInfo[e])return;let A=this.infoEncoding??"UTF-8";if(e==="picture")return this.rmidiInfo[e].buffer;if(e==="creationDate")return Es($e(this.rmidiInfo[e]));try{let s=new TextDecoder(A),a=this.rmidiInfo[e];return a[a.length-1]===0&&(a=a?.slice(0,-1)),s.decode(a.buffer).trim()}catch(s){h.warn(`Failed to decode ${e} name: ${s}`);return}}iterate(e){let A=new Array(this.tracks.length).fill(0),s=this.tracks.length;for(;s>0;){let a=0,n=1/0;for(let o=0;o<this.tracks.length;o++){let I=this.tracks[o].events;A[o]>=I.length||I[A[o]].ticks<n&&(a=o,n=I[A[o]].ticks)}let r=this.tracks[a].events;if(A[a]>=r.length){s--;continue}let i=A[a];e(r[i],a,A),A[a]++}}copyMetadataFrom(e){this.fileName=e.fileName,this.timeDivision=e.timeDivision,this.duration=e.duration,this.firstNoteOn=e.firstNoteOn,this.lastVoiceEventTick=e.lastVoiceEventTick,this.format=e.format,this.bankOffset=e.bankOffset,this.isKaraokeFile=e.isKaraokeFile,this.isMultiPort=e.isMultiPort,this.isDLSRMIDI=e.isDLSRMIDI,this.isDLSRMIDI=e.isDLSRMIDI,this.tempoChanges=[...e.tempoChanges],this.extraMetadata=e.extraMetadata.map(A=>new Qe(A.ticks,A.statusByte,new ne(A.data))),this.lyrics=e.lyrics.map(A=>new Qe(A.ticks,A.statusByte,new ne(A.data))),this.portChannelOffsetMap=[...e.portChannelOffsetMap],this.binaryName=e?.binaryName?.slice(),this.loop={...e.loop},this.keyRange={...e.keyRange},this.rmidiInfo={};for(let A of Object.entries(e.rmidiInfo)){let s=A[0],a=A[1];this.rmidiInfo[s]=new Uint8Array(a)}}parseInternal(){h.group("%cInterpreting MIDI events...",d.info);let e=!1;this.tempoChanges=[{ticks:0,tempo:120}],this.extraMetadata=[],this.lyrics=[],this.firstNoteOn=0,this.keyRange={max:0,min:127},this.lastVoiceEventTick=0,this.portChannelOffsetMap=[0],this.loop={start:0,end:0,type:"hard"},this.isKaraokeFile=!1,this.isMultiPort=!1;let A=!1;this.rmidiInfo.name!==void 0&&(A=!0);let s=null,a=null,n="hard";for(let I of this.tracks){let l=new Set,B=!1;for(let g=0;g<I.events.length;g++){let E=I.events[g];if(E.statusByte>=128&&E.statusByte<240)switch(B=!0,E.ticks>this.lastVoiceEventTick&&(this.lastVoiceEventTick=E.ticks),E.statusByte&240){case G.controllerChange:switch(E.data[0]){case f.breathController:case f.undefinedCC111LSB:E.data[1]===0&&(s=E.ticks);break;case f.undefinedCC116LSB:s=E.ticks;break;case f.footController:case f.undefinedCC117LSB:a===null&&(E.data[0]!==4||E.data[0]===4&&E.data[1]===0)?(n="soft",a=E.ticks):(a=0,n="hard");break;case f.bankSelect:this.isDLSRMIDI&&E.data[1]!==0&&E.data[1]!==127&&(h.info("%cDLS RMIDI with offset 1 detected!",d.recognized),this.bankOffset=1)}break;case G.noteOn:{l.add(E.statusByte&15);let k=E.data[0];this.keyRange.min=Math.min(this.keyRange.min,k),this.keyRange.max=Math.max(this.keyRange.max,k);break}}let S=$e(E.data);switch(E.statusByte){case G.endOfTrack:g!==I.events.length-1&&(I.deleteEvent(g),g--,h.warn("Unexpected EndOfTrack. Removing!"));break;case G.setTempo:this.tempoChanges.push({ticks:E.ticks,tempo:6e7/Ht(E.data,3)});break;case G.marker:switch(S.trim().toLowerCase()){default:break;case"start":case"loopstart":s=E.ticks;break;case"loopend":a=E.ticks}break;case G.copyright:this.extraMetadata.push(E);break;case G.lyric:S.trim().startsWith("@KMIDI KARAOKE FILE")&&(this.isKaraokeFile=!0,h.info("%cKaraoke MIDI detected!",d.recognized)),this.isKaraokeFile?E.statusByte=G.text:this.lyrics.push(E);case G.text:{let k=S.trim();k.startsWith("@KMIDI KARAOKE FILE")?(this.isKaraokeFile=!0,h.info("%cKaraoke MIDI detected!",d.recognized)):this.isKaraokeFile&&(k.startsWith("@T")||k.startsWith("@A")?e?this.extraMetadata.push(E):(this.binaryName=E.data.slice(2),e=!0,A=!0):k.startsWith("@")||this.lyrics.push(E));break}}}I.channels=l,I.name="";let C=I.events.find(g=>g.statusByte===G.trackName);C&&this.tracks.indexOf(I)>0&&(I.name=$e(C.data),!B&&!I.name.toLowerCase().includes("setup")&&this.extraMetadata.push(C))}this.tempoChanges.reverse(),h.info("%cCorrecting loops, ports and detecting notes...",d.info);let r=[];for(let I of this.tracks){let l=I.events.find(B=>(B.statusByte&240)===G.noteOn);l&&r.push(l.ticks)}this.firstNoteOn=Math.min(...r),h.info(`%cFirst note-on detected at: %c${this.firstNoteOn}%c ticks!`,d.info,d.recognized,d.info),s??=this.firstNoteOn,(a===null||a===0)&&(a=this.lastVoiceEventTick),this.loop={start:s,end:a,type:n},this.lastVoiceEventTick=Math.max(this.lastVoiceEventTick,this.loop.end),h.info(`%cLoop points: start: %c${this.loop.start}%c end: %c${this.loop.end}`,d.info,d.recognized,d.info,d.recognized);let i=0;this.portChannelOffsetMap=[];for(let I of this.tracks)if(I.port=-1,I.channels.size!==0)for(let l of I.events){if(l.statusByte!==G.midiPort)continue;let B=l.data[0];I.port=B,this.portChannelOffsetMap[B]===void 0&&(this.portChannelOffsetMap[B]=i,i+=16)}this.portChannelOffsetMap=[...this.portChannelOffsetMap].map(I=>I??0);let o=1/0;for(let I of this.tracks)I.port!==-1&&o>I.port&&(o=I.port);o===1/0&&(o=0);for(let I of this.tracks)(I.port===-1||I.port===void 0)&&(I.port=o);if(this.portChannelOffsetMap.length===0&&(this.portChannelOffsetMap=[0]),this.portChannelOffsetMap.length<2?h.info("%cNo additional MIDI Ports detected.",d.info):(this.isMultiPort=!0,h.info("%cMIDI Ports detected!",d.recognized)),!A)if(this.tracks.length>1){if(!this.tracks[0].events.some(I=>I.statusByte>=G.noteOn&&I.statusByte<G.polyPressure)){let I=this.tracks[0].events.find(l=>l.statusByte===G.trackName);I&&(this.binaryName=I.data)}}else{let I=this.tracks[0].events.find(l=>l.statusByte===G.trackName);I&&(this.binaryName=I.data)}if(this.extraMetadata=this.extraMetadata.filter(I=>I.data.length>0),this.lyrics.sort((I,l)=>I.ticks-l.ticks),!this.tracks.some(I=>I.events[0].ticks===0)){let I=this.tracks[0],l=this?.binaryName?.buffer;l||(l=new Uint8Array(0).buffer),I.addEvents(0,new Qe(0,G.trackName,new ne(l)))}this.duration=this.midiTicksToSeconds(this.lastVoiceEventTick),this.timeline.length=0,this.iterate((I,l,B)=>{this.timeline.push(Object.freeze({ev:B[l],tr:l}))}),this.binaryName?.length===0&&(this.binaryName=void 0),h.info(`%cMIDI file parsed. Total tick time: %c${this.lastVoiceEventTick}%c, total seconds time: %c${zA(Math.ceil(this.duration)).time}`,d.info,d.recognized,d.info,d.recognized),h.groupEnd()}};function fa(t,e){if(this.externalMIDIPlayback&&t.statusByte>=128){this.sendMIDIMessage([t.statusByte,...t.data]);return}let A=this._midiData.tracks[e],s,a=0;t.statusByte>=128&&t.statusByte<240?(s=t.statusByte&240,a=t.statusByte&15):s=t.statusByte;let n=this.midiPortChannelOffsets[this.currentMIDIPorts[e]]||0;switch(a+=n,s){case G.noteOn:{let r=this.playingNotes[a];if(!r){for(;this.playingNotes.length<=a;)this.playingNotes.push(new Map);r=this.playingNotes[a]}let i=t.data[1];i>0?(this.synth.noteOn(a,t.data[0],i),r.set(t.data[0],i)):(this.synth.noteOff(a,t.data[0]),r.delete(t.data[0]));break}case G.noteOff:{let r=this.playingNotes[a];if(!r){for(;this.playingNotes.length<=a;)this.playingNotes.push(new Map);r=this.playingNotes[a]}this.synth.noteOff(a,t.data[0]),r.delete(t.data[0]);break}case G.pitchWheel:this.synth.pitchWheel(a,t.data[1]<<7|t.data[0]);break;case G.controllerChange:if(this._midiData.isMultiPort&&A.channels.size===0)return;this.synth.controllerChange(a,t.data[0],t.data[1]);break;case G.programChange:if(this._midiData.isMultiPort&&A.channels.size===0)return;this.synth.programChange(a,t.data[0]);break;case G.polyPressure:this.synth.polyPressure(a,t.data[0],t.data[1]);break;case G.channelPressure:this.synth.channelPressure(a,t.data[0]);break;case G.systemExclusive:this.synth.systemExclusive(t.data,n);break;case G.setTempo:{let r=6e7/Ht(t.data,3);this.oneTickToSeconds=60/(r*this._midiData.timeDivision),this.oneTickToSeconds===0&&(this.oneTickToSeconds=60/(120*this._midiData.timeDivision),h.info("invalid tempo! falling back to 120 BPM"));break}case G.timeSignature:case G.endOfTrack:case G.midiChannelPrefix:case G.songPosition:case G.activeSensing:case G.keySignature:case G.sequenceNumber:case G.sequenceSpecific:case G.text:case G.lyric:case G.copyright:case G.trackName:case G.marker:case G.cuePoint:case G.instrumentName:case G.programName:break;case G.midiPort:this.assignMIDIPort(e,t.data[0]);break;case G.reset:this.synth.stopAllChannels(),this.synth.reset();break;default:h.info(`%cUnrecognized Event: %c${t.statusByte}%c status byte: %c${Object.keys(G).find(r=>G[r]===s)}`,d.warn,d.unrecognized,d.warn,d.value);break}s>=0&&s<128&&this.callEvent("metaEvent",{event:t,trackIndex:e})}function Qa(){if(this.paused||!this._midiData)return;let t=this.currentTime;for(;this.playedTime<t;){let{timeline:e,tracks:A,lastVoiceEventTick:s,loop:a}=this._midiData,n=e[this.index++],r=A[n.tr].events[n.ev];if(this.processEvent(r,n.tr),this.loopCount>0&&a.end<=r.ticks){this.loopCount!==1/0&&(this.loopCount--,this.callEvent("loopCountChange",{newCount:this.loopCount})),a.type==="soft"?this.jumpToTick(a.start):this.setTimeTicks(a.start);return}if(this.index>=e.length||r.ticks>=s){this.songIsFinished();return}let i=e[this.index],o=A[i.tr].events[i.ev];this.playedTime+=this.oneTickToSeconds*(o.ticks-r.ticks)}}function ua(t,e){this._midiData.tracks[t].channels.size!==0&&(this.midiPortChannelOffset===0&&(this.midiPortChannelOffset+=16,this.midiPortChannelOffsets[e]=0),this.midiPortChannelOffsets[e]===void 0&&(this.synth.midiChannels.length<this.midiPortChannelOffset+15&&this.addNewMIDIPort(),this.midiPortChannelOffsets[e]=this.midiPortChannelOffset,this.midiPortChannelOffset+=16),this.currentMIDIPorts[t]=e)}function ma(t){if(!t.tracks)throw new Error("This MIDI has no tracks!");if(t.duration===0){h.warn("This MIDI file has a duration of exactly 0 seconds."),this.pausedTime=0,this.isFinished=!0;return}this.oneTickToSeconds=60/(120*t.timeDivision),this._midiData=t,this.isFinished=!1,this.synth.clearEmbeddedSoundBank(),this._midiData.embeddedSoundBank!==void 0&&(h.info("%cEmbedded soundbank detected! Using it.",d.recognized),this.synth.setEmbeddedSoundBank(this._midiData.embeddedSoundBank,this._midiData.bankOffset),this.preload&&this._midiData.preloadSynth(this.synth)),this.currentMIDIPorts=this._midiData.tracks.map(e=>e.port),this.midiPortChannelOffset=0,this.midiPortChannelOffsets={};for(let[e,A]of this._midiData.tracks.entries())this.assignMIDIPort(e,A.port);this.firstNoteTime=this._midiData.midiTicksToSeconds(this._midiData.firstNoteOn),h.info(`%cTotal song time: ${zA(Math.ceil(this._midiData.duration)).time}`,d.recognized),this.callEvent("songChange",{songIndex:this._songIndex}),this._midiData.duration<=.2&&(h.warn(`%cVery short song: (${zA(Math.round(this._midiData.duration)).time}). Disabling loop!`,d.warn),this.loopCount=0),this.currentTime=0}var yt=new Int16Array(128).fill(0),Ge=(t,e)=>yt[t]=e<<7;Ge(f.mainVolume,100);Ge(f.balance,64);Ge(f.expression,127);Ge(f.pan,64);Ge(f.filterResonance,64);Ge(f.releaseTime,64);Ge(f.attackTime,64);Ge(f.brightness,64);Ge(f.decayTime,64);Ge(f.vibratoRate,64);Ge(f.vibratoDepth,64);Ge(f.vibratoDelay,64);Ge(f.generalPurposeController6,64);Ge(f.generalPurposeController8,64);Ge(f.registeredParameterLSB,127);Ge(f.registeredParameterMSB,127);Ge(f.nonRegisteredParameterLSB,0);Ge(f.nonRegisteredParameterMSB,0);var mA=new Int8Array(128).fill(127);mA[35]=0;mA[36]=0;function pa(t=!0){for(let e=0;e<128;e++){if(this.lockedControllers[e]){this.synthCore.callEvent("controllerChange",{channel:this.channel,controller:e,value:this._midiControllers[e]>>7});continue}let A=yt[e];this._midiControllers[e]!==A&&e!==f.portamentoControl&&e!==f.dataEntryMSB&&e!==f.registeredParameterMSB&&e!==f.registeredParameterLSB&&e!==f.nonRegisteredParameterMSB&&e!==f.nonRegisteredParameterLSB&&this.controllerChange(e,A>>7,t)}this.setMIDIParameter("pressure",0),this.setMIDIParameter("pitchWheelRange",2),this.setMIDIParameter("modulationDepth",50),this.setMIDIParameter("rxChannel",this.channel),this.setMIDIParameter("efxAssign",!1),this.setMIDIParameter("polyMode",!0),this.setMIDIParameter("keyShift",0),this.setMIDIParameter("fineTune",0),this.setMIDIParameter("assignMode",2),this.setMIDIParameter("randomPan",!1),this.setMIDIParameter("cc1",16),this.setMIDIParameter("cc2",17),this.setMIDIParameter("drumMap",this.channel%16===9?1:0),this.setMIDIParameter("velocitySenseOffset",64),this.setMIDIParameter("velocitySenseDepth",64),this.pitchWheel(8192),this.octaveTuning.fill(0),this.lastPortamentoNote=this.channelSystem==="xg"?60:-1,this.resetDrumParams(),this.resetGeneratorOverrides(),this.resetGeneratorOffsets(),this.dynamicModulators.resetModulators(),this.sf2NRPNGeneratorLSB=0,this.playingNotes.fill(!1),this.lastParameterIsRegistered=!0,this._midiControllers[f.nonRegisteredParameterLSB]=0,this._midiControllers[f.nonRegisteredParameterMSB]=0,this._midiControllers[f.registeredParameterLSB]=16256,this._midiControllers[f.registeredParameterMSB]=16256,this._midiControllers[f.dataEntryMSB]=0,this._midiControllers[f.dataEntryLSB]=0,this.setBankMSB(De.getDefaultBank(this.channelSystem)),this.setBankLSB(0),this.setGSDrums(!1),this.setDrums(this.channel%16===9),this.programChange(0)}var rn=[f.modulationWheel,f.expression,f.sustainPedal,f.portamentoOnOff,f.sostenutoPedal,f.softPedal,f.registeredParameterMSB,f.registeredParameterLSB];function ya(){this.pitchWheel(8192),this.setMIDIParameter("pressure",0);for(let t of rn){let e=yt[t];e!==this._midiControllers[t]&&this.controllerChange(t,e>>7)}}var iA=new Set([f.dataDecrement,f.dataIncrement,f.dataEntryMSB,f.dataEntryLSB,f.registeredParameterLSB,f.registeredParameterMSB,f.nonRegisteredParameterLSB,f.nonRegisteredParameterMSB,f.bankSelect,f.bankSelectLSB,f.resetAllControllers,f.monoModeOn,f.polyModeOn]);function Sa(t,e=void 0){if(!this._midiData)return!1;this.oneTickToSeconds=60/(120*this._midiData.timeDivision),this.sendMIDIReset(),this.playedTime=0,this.index=0;let A=this.synth.midiChannels.length,s=[];for(let I=0;I<A;I++)s.push({pitchWheel:8192,controllers:new Int16Array(yt),param:new uA(I),portamentoNote:-1});let a,n=0;function r(I){let l=s[I];l.pitchWheel=8192,l.param.reset();for(let B of rn)l.controllers[B]=yt[B]}let{timeline:i,tracks:o}=this._midiData;for(;;){let I=i[this.index],l=I.tr,B=o[l],C=B.events[I.ev];if(e===void 0){if(this.playedTime>=t)break}else if(C.ticks>=e)break;let g,E=0;C.statusByte>=128&&C.statusByte<240?(g=C.statusByte&240,E=C.statusByte&15):g=C.statusByte;let S=E+(this.midiPortChannelOffsets[B.port]||0);s[S]??={pitchWheel:8192,controllers:new Int16Array(yt),param:new uA(S),portamentoNote:-1};let k=s[S];switch(g){case G.noteOn:k.portamentoNote=C.data[0];break;case G.noteOff:break;case G.pitchWheel:k.pitchWheel=C.data[1]<<7|C.data[0];break;case G.systemExclusive:{let w=ae.analyzeSysEx(C.data);switch(w.type){default:this.processEvent(C,l);break;case"Controller Change":{let{controller:R,value:F,channel:N}=w;if(N>=A||this._midiData.isMultiPort&&B.channels.size===0)break;if(R===f.resetAllControllers){r(N);break}iA.has(R)?this.sendMIDICC(N,R,F):s[N].controllers[R]=F<<7}}break}case G.controllerChange:{if(this._midiData.isMultiPort&&B.channels.size===0)break;let w=C.data[0],R=C.data[1];switch(w){default:if(w===f.resetAllControllers){r(S);break}iA.has(w)?this.sendMIDICC(S,w,R):k.controllers[w]=R<<7;break;case f.registeredParameterMSB:case f.registeredParameterLSB:case f.nonRegisteredParameterLSB:case f.nonRegisteredParameterMSB:k.param.controllerChange(w,R,0,0),this.sendMIDICC(S,w,R);break;case f.dataEntryMSB:case f.dataEntryLSB:{let F=k.param.controllerChange(w,R,0,0);this.sendMIDICC(S,w,R),F.type==="Controller Change"&&(iA.has(F.controller)?this.sendMIDICC(S,F.controller,F.value):k.controllers[F.controller]=F.value<<7);break}}break}case G.setTempo:{let w=6e7/Ht(C.data,3);this.oneTickToSeconds=60/(w*this._midiData.timeDivision),a=C,n=l;break}default:this.processEvent(C,l);break}let u=i[++this.index],M=o[u.tr].events[u.ev];if(M===void 0)return this.stop(),!1;this.playedTime+=this.oneTickToSeconds*(M.ticks-C.ticks)}for(let I=0;I<A;I++){let l=s[I];this.sendMIDIPitchWheel(I,l.pitchWheel),l.portamentoNote>=0&&(this.externalMIDIPlayback?this.sendMIDICC(I,f.portamentoControl,l.portamentoNote):this.synth.midiChannels[I].setLastNote(l.portamentoNote));for(let B=0;B<128;B++){let C=l.controllers[B]>>7;C!==yt[B]&&!iA.has(B)&&this.sendMIDICC(I,B,C)}}return a&&this.callEvent("metaEvent",{event:a,trackIndex:n}),this.paused&&(this.pausedTime=this.playedTime),!0}var on=class{songs=[];shuffledSongIndexes=[];synth;externalMIDIPlayback=!1;retriggerPausedNotes=!0;loopCount=0;skipToFirstNoteOn=!0;isFinished=!1;preload=!0;onEventCall;processTick=Qa.bind(this);firstNoteTime=0;oneTickToSeconds=0;index=0;playedTime=0;pausedTime=-1;absoluteStartTime=0;playingNotes=[];currentMIDIPorts=[];midiPortChannelOffset=0;midiPortChannelOffsets={};assignMIDIPort=ua.bind(this);loadNewSequence=ma.bind(this);processEvent=fa.bind(this);setTimeTo=Sa.bind(this);constructor(t){this.synth=t,this.absoluteStartTime=this.synth.currentTime,this.playingNotes=this.synth.midiChannels.map(()=>new Map)}_midiData;get midiData(){return this._midiData}get duration(){return this._midiData?.duration??0}_songIndex=0;get songIndex(){return this._songIndex}set songIndex(t){this._songIndex=t,this._songIndex=Math.max(0,t%this.songs.length),this.loadCurrentSong()}_shuffleMode=!1;get shuffleMode(){return this._shuffleMode}set shuffleMode(t){this._shuffleMode=t}_playbackRate=1;get playbackRate(){return this._playbackRate}set playbackRate(t){let e=this.currentTime;this._playbackRate=t,this.recalculateStartTime(e)}get currentTime(){return this.pausedTime!==void 0?this.pausedTime:(this.synth.currentTime-this.absoluteStartTime)*this._playbackRate}set currentTime(t){if(this._midiData)if(this.paused&&(this.pausedTime=t),t>this._midiData.duration||t<0)this.skipToFirstNoteOn?this.setTimeTicks(this._midiData.firstNoteOn-1):this.setTimeTicks(0);else if(this.skipToFirstNoteOn&&t<this.firstNoteTime){this.setTimeTicks(this._midiData.firstNoteOn-1);return}else{for(let e of this.playingNotes)e.clear();this.callEvent("timeChange",{newTime:t}),this.setTimeTo(t),this.recalculateStartTime(t)}}get paused(){return this.pausedTime!==void 0}play(){if(!this._midiData){h.warn("No songs loaded in the sequencer. Ignoring the play call.");return}if(this.currentTime>=this._midiData.duration&&(this.currentTime=0),this.paused&&this.recalculateStartTime(this.pausedTime??0),this.retriggerPausedNotes&&!this.externalMIDIPlayback)for(let t=0;t<this.playingNotes.length;t++){let e=this.playingNotes[t];for(let[A,s]of e)this.sendMIDINoteOn(t,A,s)}this.pausedTime=void 0}pause(){this.pauseInternal(!1)}loadNewSongList(t){if(this.songs=t,this.songs.length!==0){if(this._songIndex=0,this.shuffleSongIndexes(),this.callEvent("songListChange",{newSongList:[...this.songs]}),this.preload){h.group("%cPreloading all songs...",d.info);for(let e of this.songs)e.embeddedSoundBank===void 0&&e.preloadSynth(this.synth);h.groupEnd()}this.loadCurrentSong()}}callEvent(t,e){this?.onEventCall?.({type:t,data:e})}pauseInternal(t){this.paused||(this.stop(),this.callEvent("pause",{isFinished:t}),t&&this.callEvent("songEnded",{}))}songIsFinished(){if(this.isFinished=!0,this.songs.length===1){this.pauseInternal(!0);return}this._songIndex++,this._songIndex%=this.songs.length,this.loadCurrentSong()}stop(){this.pausedTime=this.currentTime,this.sendMIDIAllOff()}addNewMIDIPort(){for(let t=0;t<16;t++)this.synth.createMIDIChannel(),this.playingNotes.push(new Map)}sendMIDIMessage(t){if(!this.externalMIDIPlayback){h.warn(`Attempting to send ${js(t)} to the synthesizer via sendMIDIMessage. This shouldn't happen!`);return}this.callEvent("midiMessage",{message:t,time:this.synth.currentTime})}sendMIDIAllOff(){for(let t=0;t<16;t++)this.sendMIDICC(t,f.sustainPedal,0);if(!this.externalMIDIPlayback){this.synth.stopAllChannels();return}for(let t=0;t<this.playingNotes.length;t++){let e=this.playingNotes[t];for(let A of e.keys())this.sendMIDINoteOff(t,A)}for(let t=0;t<16;t++)this.sendMIDICC(t,f.allNotesOff,0)}sendMIDIReset(){if(this.sendMIDIAllOff(),!this.externalMIDIPlayback){this.synth.reset();return}this.sendMIDISysEx(ae.gs(64,0,127,[0]))}loadCurrentSong(){let t=this._songIndex;this._shuffleMode&&(t=this.shuffledSongIndexes[this._songIndex]),this.loadNewSequence(this.songs[t])}shuffleSongIndexes(){let t=this.songs.map((e,A)=>A);for(this.shuffledSongIndexes.length=0;t.length>0;){let e=t[Math.floor(Math.random()*t.length)];this.shuffledSongIndexes.push(e),t.splice(t.indexOf(e),1)}}setTimeTicks(t){if(!this._midiData)return;for(let s of this.playingNotes)s.clear();let e=this._midiData.midiTicksToSeconds(t);this.callEvent("timeChange",{newTime:e});let A=this.setTimeTo(0,t);this.recalculateStartTime(this.playedTime)}recalculateStartTime(t){this.absoluteStartTime=this.synth.currentTime-t/this._playbackRate}jumpToTick(t){if(!this._midiData)return;this.sendMIDIAllOff();let e=this._midiData,A=e.midiTicksToSeconds(t);this.callEvent("timeChange",{newTime:A}),this.recalculateStartTime(A),this.playedTime=A;let s=e.timeline.findIndex(n=>e.tracks[n.tr].events[n.ev].ticks>=t);this.index=s===-1?e.timeline.length:s;let a=e.tempoChanges.find(n=>n.ticks<=t);this.oneTickToSeconds=60/(a.tempo*e.timeDivision)}sendMIDINoteOn(t,e,A){if(!this.externalMIDIPlayback){this.synth.noteOn(t,e,A);return}t%=16,this.sendMIDIMessage([G.noteOn|t,e,A])}sendMIDINoteOff(t,e){if(!this.externalMIDIPlayback){this.synth.noteOff(t,e);return}t%=16,this.sendMIDIMessage([G.noteOff|t,e,64])}sendMIDICC(t,e,A){if(!this.externalMIDIPlayback){this.synth.controllerChange(t,e,A);return}t%=16,this.sendMIDIMessage([G.controllerChange|t,e,A])}sendMIDISysEx(t){if(!this.externalMIDIPlayback){this.synth.systemExclusive(t);return}this.sendMIDIMessage([G.systemExclusive,...t])}sendMIDIPitchWheel(t,e){if(!this.externalMIDIPlayback){this.synth.pitchWheel(t,e);return}t%=16,this.sendMIDIMessage([G.pitchWheel|t,e&127,e>>7])}},ka={linear:0,nearestNeighbor:1,hermite:2},Wt=Wt!==void 0?Wt:{},Rs=!1,gn;Wt.isInitialized=new Promise(t=>gn=t);var Da=function(t){var e,A,s,a,n,r,i,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",I="",l=0;t=t.replace(/[^A-Za-z0-9\+\/\=]/g,"");do a=o.indexOf(t.charAt(l++)),n=o.indexOf(t.charAt(l++)),r=o.indexOf(t.charAt(l++)),i=o.indexOf(t.charAt(l++)),e=a<<2|n>>4,A=(15&n)<<4|r>>2,s=(3&r)<<6|i,I+=String.fromCharCode(e),r!==64&&(I+=String.fromCharCode(A)),i!==64&&(I+=String.fromCharCode(s));while(l<t.length);return I};(function(){var t,e,A,s,a,n,r,i,o,I,l,B,C,g=g!==void 0?g:{};g.wasmBinary=Uint8Array.from(Da("AGFzbQEAAAABpQEYYAJ/fwF/YAF/AGAAAX9gBH9/f38AYAAAYAN/f38Bf2ABfwF/YAJ/fwBgBn9/f39/fwF/YAR/f39/AX9gBX9/f39/AX9gB39/f39/f38Bf2AGf39/f39/AGAIf39/f39/f38Bf2AFf39/f38AYAd/f39/f39/AGADf39/AGABfwF9YAF9AX1gAnx/AXxgAnx/AX9gA3x8fwF8YAJ8fAF8YAF8AXwCngIPA2VudgZtZW1vcnkCAIACA2VudgV0YWJsZQFwAQQEA2Vudgl0YWJsZUJhc2UDfwADZW52DkRZTkFNSUNUT1BfUFRSA38AA2VudghTVEFDS1RPUAN/AANlbnYJU1RBQ0tfTUFYA38ABmdsb2JhbAhJbmZpbml0eQN8AANlbnYFYWJvcnQAAQNlbnYNZW5sYXJnZU1lbW9yeQACA2Vudg5nZXRUb3RhbE1lbW9yeQACA2VudhdhYm9ydE9uQ2Fubm90R3Jvd01lbW9yeQACA2Vudg5fX19hc3NlcnRfZmFpbAADA2VudgtfX19zZXRFcnJObwABA2VudgZfYWJvcnQABANlbnYWX2Vtc2NyaXB0ZW5fbWVtY3B5X2JpZwAFA3d2BgYCAQcHAQIBAQcBCAcFAAkGCQoHBgYGBgEFBgIBBgYKAAgLAAYGBgYGBgYBAAoMDAMGBQANCAoJAAwODA8OAQAGBgcEABAJEAERAAADBQwAAAMHBxIGAQAABwIFEwMOBw8HBgYQFAoVExYXFxcXFgQFBQYFAAYkB38BIwELfwEjAgt/ASMDC38BQQALfwFBAAt8ASMEC38BQQALB9MCFRBfX2dyb3dXYXNtTWVtb3J5AAgRX19fZXJybm9fbG9jYXRpb24AYwVfZnJlZQBfB19tYWxsb2MAXgdfbWVtY3B5AHkHX21lbXNldAB6BV9zYnJrAHsXX3N0Yl92b3JiaXNfanNfY2hhbm5lbHMAJhRfc3RiX3ZvcmJpc19qc19jbG9zZQAlFV9zdGJfdm9yYmlzX2pzX2RlY29kZQAoE19zdGJfdm9yYmlzX2pzX29wZW4AJBpfc3RiX3ZvcmJpc19qc19zYW1wbGVfcmF0ZQAnC2R5bkNhbGxfaWlpAHwTZXN0YWJsaXNoU3RhY2tTcGFjZQAMC2dldFRlbXBSZXQwAA8LcnVuUG9zdFNldHMAeAtzZXRUZW1wUmV0MAAOCHNldFRocmV3AA0Kc3RhY2tBbGxvYwAJDHN0YWNrUmVzdG9yZQALCXN0YWNrU2F2ZQAKCQoBACMACwR9VFl9Csb2A3YGACAAQAALGwEBfyMGIQEjBiAAaiQGIwZBD2pBcHEkBiABCwQAIwYLBgAgACQGCwoAIAAkBiABJAcLEAAjCEUEQCAAJAggASQJCwsGACAAJAsLBAAjCwsRACAABEAgABARIAAgABASCwvvBwEKfyAAQYADaiEHIAcoAgAhBQJAIAUEQCAAQfwBaiEEIAQoAgAhASABQQBKBEAgAEHwAGohCANAIAUgAkEYbGpBEGohCSAJKAIAIQEgAQRAIAgoAgAhAyAFIAJBGGxqQQ1qIQogCi0AACEGIAZB/wFxIQYgAyAGQbAQbGpBBGohAyADKAIAIQMgA0EASgRAQQAhAwNAIAEgA0ECdGohASABKAIAIQEgACABEBIgA0EBaiEDIAgoAgAhASAKLQAAIQYgBkH/AXEhBiABIAZBsBBsakEEaiEBIAEoAgAhBiAJKAIAIQEgAyAGSA0ACwsgACABEBILIAUgAkEYbGpBFGohASABKAIAIQEgACABEBIgAkEBaiECIAQoAgAhASACIAFODQMgBygCACEFDAAACwALCwsgAEHwAGohAyADKAIAIQEgAQRAIABB7ABqIQUgBSgCACECIAJBAEoEQEEAIQIDQAJAIAEgAkGwEGxqQQhqIQQgBCgCACEEIAAgBBASIAEgAkGwEGxqQRxqIQQgBCgCACEEIAAgBBASIAEgAkGwEGxqQSBqIQQgBCgCACEEIAAgBBASIAEgAkGwEGxqQaQQaiEEIAQoAgAhBCAAIAQQEiABIAJBsBBsakGoEGohASABKAIAIQEgAUUhBCABQXxqIQFBACABIAQbIQEgACABEBIgAkEBaiECIAUoAgAhASACIAFODQAgAygCACEBDAELCyADKAIAIQELIAAgARASCyAAQfgBaiEBIAEoAgAhASAAIAEQEiAHKAIAIQEgACABEBIgAEGIA2ohAyADKAIAIQEgAQRAIABBhANqIQUgBSgCACECIAJBAEoEQEEAIQIDQCABIAJBKGxqQQRqIQEgASgCACEBIAAgARASIAJBAWohAiAFKAIAIQcgAygCACEBIAIgB0gNAAsLIAAgARASCyAAQQRqIQIgAigCACEBIAFBAEoEQEEAIQEDQCAAQZQGaiABQQJ0aiEDIAMoAgAhAyAAIAMQEiAAQZQHaiABQQJ0aiEDIAMoAgAhAyAAIAMQEiAAQdgHaiABQQJ0aiEDIAMoAgAhAyAAIAMQEiABQQFqIQEgAigCACEDIAEgA0ghAyABQRBJIQUgBSADcQ0ACwtBACEBA0AgAEGgCGogAUECdGohAiACKAIAIQIgACACEBIgAEGoCGogAUECdGohAiACKAIAIQIgACACEBIgAEGwCGogAUECdGohAiACKAIAIQIgACACEBIgAEG4CGogAUECdGohAiACKAIAIQIgACACEBIgAEHACGogAUECdGohAiACKAIAIQIgACACEBIgAUEBaiEBIAFBAkcNAAsLGwAgAEHEAGohACAAKAIAIQAgAEUEQCABEF8LC3wBAX8gAEHUB2ohASABQQA2AgAgAEGAC2ohASABQQA2AgAgAEH4CmohASABQQA2AgAgAEGcCGohASABQQA2AgAgAEHVCmohASABQQA6AAAgAEH8CmohASABQQA2AgAgAEHUC2ohASABQQA2AgAgAEHYC2ohACAAQQA2AgAL8AQBB38jBiELIwZBEGokBiALQQhqIQcgC0EEaiEKIAshCCAAQSRqIQYgBiwAACEGAn8gBgR/IABBgAtqIQYgBigCACEGIAZBf0oEQCAFQQA2AgAgACABIAIQFgwCCyAAQRRqIQYgBiABNgIAIAEgAmohAiAAQRxqIQkgCSACNgIAIABB2ABqIQIgAkEANgIAIABBABAXIQkgCUUEQCAFQQA2AgBBAAwCCyAAIAcgCCAKEBghCSAJBEAgBygCACECIAgoAgAhCSAKKAIAIQggACACIAkgCBAaIQogByAKNgIAIABBBGohAiACKAIAIQggCEEASgRAQQAhAgNAIABBlAZqIAJBAnRqIQcgBygCACEHIAcgCUECdGohByAAQdQGaiACQQJ0aiEMIAwgBzYCACACQQFqIQIgAiAISA0ACwsgAwRAIAMgCDYCAAsgBSAKNgIAIABB1AZqIQAgBCAANgIAIAYoAgAhACAAIAFrDAILAkACQAJAAkACQCACKAIAIgNBIGsOBAECAgACCyACQQA2AgAgAEHUAGohAiAAEBkhAwJAIANBf0cEQANAIAIoAgAhAyADDQIgABAZIQMgA0F/Rw0ACwsLIAVBADYCACAGKAIAIQAgACABawwFCwwBCwwBCyAAQdQHaiEEIAQoAgAhBCAERQRAIAJBADYCACAAQdQAaiECIAAQGSEDAkAgA0F/RwRAA0AgAigCACEDIAMNAiAAEBkhAyADQX9HDQALCwsgBUEANgIAIAYoAgAhACAAIAFrDAMLCyAAEBMgAiADNgIAIAVBADYCAEEBBSAAQQIQFUEACwshACALJAYgAAsJACAAIAE2AlgLpgoBDH8gAEGAC2ohCiAKKAIAIQYCQAJAAkAgBkEATA0AA0AgACAEQRRsakGQC2ohAyADQQA2AgAgBEEBaiEEIAQgBkgNAAsgBkEESA0ADAELIAJBBEgEQEEAIQIFIAJBfWohBkEAIQIDQAJAIAEgAmohBCAELAAAIQMgA0HPAEYEQCAEQcATQQQQZCEEIARFBEAgAkEaaiEJIAkgBk4NAiACQRtqIQcgASAJaiELIAssAAAhAyADQf8BcSEFIAcgBWohBCAEIAZODQIgBUEbaiEEIAMEQEEAIQMDQCADIAdqIQggASAIaiEIIAgtAAAhCCAIQf8BcSEIIAQgCGohBCADQQFqIQMgAyAFRw0ACyAEIQMFIAQhAwtBACEEQQAhBQNAIAUgAmohByABIAdqIQcgBywAACEHIAQgBxApIQQgBUEBaiEFIAVBFkcNAAtBFiEFA0AgBEEAECkhBCAFQQFqIQUgBUEaRw0ACyAKKAIAIQUgBUEBaiEHIAogBzYCACADQWZqIQMgACAFQRRsakGIC2ohCCAIIAM2AgAgACAFQRRsakGMC2ohAyADIAQ2AgAgAkEWaiEEIAEgBGohBCAELQAAIQQgBEH/AXEhBCACQRdqIQMgASADaiEDIAMtAAAhAyADQf8BcSEDIANBCHQhAyADIARyIQQgAkEYaiEDIAEgA2ohAyADLQAAIQMgA0H/AXEhAyADQRB0IQMgBCADciEEIAJBGWohAyABIANqIQMgAy0AACEDIANB/wFxIQMgA0EYdCEDIAQgA3IhBCAAQYQLaiAFQRRsaiEDIAMgBDYCACALLQAAIQQgBEH/AXEhBCAJIARqIQQgASAEaiEEIAQsAAAhBCAEQX9GBH9BfwUgAkEGaiEEIAEgBGohBCAELQAAIQQgBEH/AXEhBCACQQdqIQMgASADaiEDIAMtAAAhAyADQf8BcSEDIANBCHQhAyADIARyIQQgAkEIaiEDIAEgA2ohAyADLQAAIQMgA0H/AXEhAyADQRB0IQMgBCADciEEIAJBCWohAyABIANqIQMgAy0AACEDIANB/wFxIQMgA0EYdCEDIAQgA3ILIQQgACAFQRRsakGUC2ohAyADIAQ2AgAgACAFQRRsakGQC2ohBCAEIAk2AgAgB0EERgRAIAYhAgwDCwsLIAJBAWohAiACIAZIDQEgBiECCwsgCigCACEGIAZBAEoNAQsMAQsgAiEEIAYhAkEAIQYDQAJAIABBhAtqIAZBFGxqIQkgACAGQRRsakGQC2ohAyADKAIAIQsgACAGQRRsakGIC2ohDSANKAIAIQggBCALayEDIAggA0ohBSADIAggBRshByAAIAZBFGxqQYwLaiEOIA4oAgAhAyAHQQBKBEBBACEFA0AgBSALaiEMIAEgDGohDCAMLAAAIQwgAyAMECkhAyAFQQFqIQUgBSAHSA0ACwsgCCAHayEFIA0gBTYCACAOIAM2AgAgBQRAIAZBAWohBgUgCSgCACEFIAMgBUYNASACQX9qIQIgCiACNgIAIAkgAEGEC2ogAkEUbGoiAikCADcCACAJIAIpAgg3AgggCSACKAIQNgIQIAooAgAhAgsgBiACSA0BIAQhAgwCCwsgByALaiECIApBfzYCACAAQdQHaiEBIAFBADYCACAAQdgKaiEBIAFBfzYCACAAIAZBFGxqQZQLaiEBIAEoAgAhASAAQZgIaiEEIAQgATYCACABQX9HIQEgAEGcCGohACAAIAE2AgALIAILhgUBCH8gAEHYCmohAiACKAIAIQMgAEEUaiECIAIoAgAhAgJ/AkAgA0F/RgR/QQEhAwwBBSAAQdAIaiEEIAQoAgAhBQJAIAMgBUgEQANAIABB1AhqIANqIQQgBCwAACEGIAZB/wFxIQQgAiAEaiECIAZBf0cNAiADQQFqIQMgAyAFSA0ACwsLIAFBAEchBiAFQX9qIQQgAyAESCEEIAYgBHEEQCAAQRUQFUEADAMLIABBHGohBCAEKAIAIQQgAiAESwR/IABBARAVQQAFIAMgBUYhBCADQX9GIQMgBCADcgR/QQAhAwwDBUEBCwsLDAELIAAoAhwhCCAAQdQHaiEGIAFBAEchBCACIQECQAJAAkACQAJAAkACQAJAAkADQCABQRpqIQUgBSAITw0BIAFBwBNBBBBkIQIgAg0CIAFBBGohAiACLAAAIQIgAg0DIAMEQCAGKAIAIQIgAgRAIAFBBWohAiACLAAAIQIgAkEBcSECIAINBgsFIAFBBWohAiACLAAAIQIgAkEBcSECIAJFDQYLIAUsAAAhAiACQf8BcSEHIAFBG2ohCSAJIAdqIQEgASAISw0GAkAgAgRAQQAhAgNAIAkgAmohAyADLAAAIQUgBUH/AXEhAyABIANqIQEgBUF/Rw0CIAJBAWohAiACIAdJDQALBUEAIQILCyAHQX9qIQMgAiADSCEDIAQgA3ENByABIAhLDQhBASACIAdHDQoaQQAhAwwAAAsACyAAQQEQFUEADAgLIABBFRAVQQAMBwsgAEEVEBVBAAwGCyAAQRUQFUEADAULIABBFRAVQQAMBAsgAEEBEBVBAAwDCyAAQRUQFUEADAILIABBARAVC0EACyEAIAALewEFfyMGIQUjBkEQaiQGIAVBCGohBiAFQQRqIQQgBSEHIAAgAiAEIAMgBSAGECohBCAEBH8gBigCACEEIABBkANqIARBBmxqIQggAigCACEGIAMoAgAhBCAHKAIAIQMgACABIAggBiAEIAMgAhArBUEACyEAIAUkBiAACxsBAX8gABAuIQEgAEHoCmohACAAQQA2AgAgAQv5AwIMfwN9IABB1AdqIQkgCSgCACEGIAYEfyAAIAYQSCELIABBBGohBCAEKAIAIQogCkEASgRAIAZBAEohDCAGQX9qIQ0DQCAMBEAgAEGUBmogBUECdGooAgAhDiAAQZQHaiAFQQJ0aigCACEPQQAhBANAIAQgAmohByAOIAdBAnRqIQcgByoCACEQIAsgBEECdGohCCAIKgIAIREgECARlCEQIA8gBEECdGohCCAIKgIAIREgDSAEayEIIAsgCEECdGohCCAIKgIAIRIgESASlCERIBAgEZIhECAHIBA4AgAgBEEBaiEEIAQgBkcNAAsLIAVBAWohBSAFIApIDQALCyAJKAIABSAAQQRqIQQgBCgCACEKQQALIQsgASADayEHIAkgBzYCACAKQQBKBEAgASADSiEJQQAhBQNAIAkEQCAAQZQGaiAFQQJ0aigCACEMIABBlAdqIAVBAnRqKAIAIQ1BACEGIAMhBANAIAwgBEECdGohBCAEKAIAIQQgDSAGQQJ0aiEOIA4gBDYCACAGQQFqIQYgBiADaiEEIAYgB0cNAAsLIAVBAWohBSAFIApIDQALCyALRSEEIAEgA0ghBSABIAMgBRshASABIAJrIQEgAEH8CmohACAEBEBBACEBBSAAKAIAIQIgAiABaiECIAAgAjYCAAsgAQvRAQECfyMGIQYjBkHgC2okBiAGIQUgBSAEEBwgBUEUaiEEIAQgADYCACAAIAFqIQEgBUEcaiEEIAQgATYCACAFQSRqIQEgAUEBOgAAIAUQHSEBIAEEQCAFEB4hASABBEAgASAFQdwLEHkaIAFBFGohBCAEKAIAIQQgBCAAayEAIAIgADYCACADQQA2AgAFIAUQEUEAIQELBSAFQdQAaiEAIAAoAgAhACAARSEAIAVB2ABqIQEgASgCACEBIAMgAUEBIAAbNgIAQQAhAQsgBiQGIAELrQECAX8BfiAAQQBB3AsQehogAQRAIABBxABqIQIgASkCACEDIAIgAzcCACAAQcgAaiECIANCIIghAyADpyEBIAFBA2ohASABQXxxIQEgAiABNgIAIABB0ABqIQIgAiABNgIACyAAQdQAaiEBIAFBADYCACAAQdgAaiEBIAFBADYCACAAQRRqIQEgAUEANgIAIABB8ABqIQEgAUEANgIAIABBgAtqIQAgAEF/NgIAC9BNAiN/A30jBiEZIwZBgAhqJAYgGUHwB2ohAiAZIgxB7AdqIR0gDEHoB2ohHiAAEDEhAQJ/IAEEQCAAQdMKaiEBIAEtAAAhASABQf8BcSEBIAFBAnEhAyADRQRAIABBIhAVQQAMAgsgAUEEcSEDIAMEQCAAQSIQFUEADAILIAFBAXEhASABBEAgAEEiEBVBAAwCCyAAQdAIaiEBIAEoAgAhASABQQFHBEAgAEEiEBVBAAwCCyAAQdQIaiEBAkACQCABLAAAQR5rIgEEQCABQSJGBEAMAgUMAwsACyAAEDAhASABQf8BcUEBRwRAIABBIhAVQQAMBAsgACACQQYQIiEBIAFFBEAgAEEKEBVBAAwECyACEEkhASABRQRAIABBIhAVQQAMBAsgABAjIQEgAQRAIABBIhAVQQAMBAsgABAwIQEgAUH/AXEhAyAAQQRqIRMgEyADNgIAIAFB/wFxRQRAIABBIhAVQQAMBAsgAUH/AXFBEEoEQCAAQQUQFUEADAQLIAAQIyEBIAAgATYCACABRQRAIABBIhAVQQAMBAsgABAjGiAAECMaIAAQIxogABAwIQMgA0H/AXEhBCAEQQ9xIQEgBEEEdiEEQQEgAXQhBSAAQeQAaiEaIBogBTYCAEEBIAR0IQUgAEHoAGohFCAUIAU2AgAgAUF6aiEFIAVBB0sEQCAAQRQQFUEADAQLIANBoH9qQRh0QRh1IQMgA0EASARAIABBFBAVQQAMBAsgASAESwRAIABBFBAVQQAMBAsgABAwIQEgAUEBcSEBIAFFBEAgAEEiEBVBAAwECyAAEDEhAUEAIAFFDQMaIAAQSiEBQQAgAUUNAxogAEHUCmohAwNAIAAQLyEBIAAgARBLIANBADoAACABDQALIAAQSiEBQQAgAUUNAxogAEEkaiEBIAEsAAAhAQJAIAEEQCAAQQEQFyEBIAENASAAQdgAaiEAIAAoAgAhAUEAIAFBFUcNBRogAEEUNgIAQQAMBQsLEEwgABAZIQEgAUEFRwRAIABBFBAVQQAMBAtBACEBA0AgABAZIQMgA0H/AXEhAyACIAFqIQQgBCADOgAAIAFBAWohASABQQZHDQALIAIQSSEBIAFFBEAgAEEUEBVBAAwECyAAQQgQLCEBIAFBAWohASAAQewAaiENIA0gATYCACABQbAQbCEBIAAgARBNIQEgAEHwAGohFSAVIAE2AgAgAUUEQCAAQQMQFUEADAQLIA0oAgAhAiACQbAQbCECIAFBACACEHoaIA0oAgAhAQJAIAFBAEoEQCAAQRBqIRYDQAJAIBUoAgAhCiAKIAZBsBBsaiEJIABBCBAsIQEgAUH/AXEhASABQcIARwRAQT8hAQwBCyAAQQgQLCEBIAFB/wFxIQEgAUHDAEcEQEHBACEBDAELIABBCBAsIQEgAUH/AXEhASABQdYARwRAQcMAIQEMAQsgAEEIECwhASAAQQgQLCECIAJBCHQhAiABQf8BcSEBIAIgAXIhASAJIAE2AgAgAEEIECwhASAAQQgQLCECIABBCBAsIQMgA0EQdCEDIAJBCHQhAiACQYD+A3EhAiABQf8BcSEBIAIgAXIhASABIANyIQEgCiAGQbAQbGpBBGohDiAOIAE2AgAgAEEBECwhASABQQBHIgMEf0EABSAAQQEQLAshASABQf8BcSECIAogBkGwEGxqQRdqIREgESACOgAAIAkoAgAhBCAOKAIAIQEgBEUEQCABBH9ByAAhAQwCBUEACyEBCyACQf8BcQRAIAAgARA8IQIFIAAgARBNIQIgCiAGQbAQbGpBCGohASABIAI2AgALIAJFBEBBzQAhAQwBCwJAIAMEQCAAQQUQLCEDIA4oAgAhASABQQBMBEBBACEDDAILQQAhBANAIANBAWohBSABIARrIQEgARAtIQEgACABECwhASABIARqIQMgDigCACEPIAMgD0oEQEHTACEBDAQLIAIgBGohBCAFQf8BcSEPIAQgDyABEHoaIA4oAgAhASABIANKBH8gAyEEIAUhAwwBBUEACyEDCwUgDigCACEBIAFBAEwEQEEAIQMMAgtBACEDQQAhAQNAIBEsAAAhBAJAAkAgBEUNACAAQQEQLCEEIAQNACACIANqIQQgBEF/OgAADAELIABBBRAsIQQgBEEBaiEEIARB/wFxIQUgAiADaiEPIA8gBToAACABQQFqIQEgBEH/AXEhBCAEQSBGBEBB2gAhAQwFCwsgA0EBaiEDIA4oAgAhBCADIARIDQALIAEhAyAEIQELCyARLAAAIQQCfwJAIAQEfyABQQJ1IQQgAyAETgRAIBYoAgAhAyABIANKBEAgFiABNgIACyAAIAEQTSEBIAogBkGwEGxqQQhqIQMgAyABNgIAIAFFBEBB4QAhAQwFCyAOKAIAIQQgASACIAQQeRogDigCACEBIAAgAiABEE4gAygCACECIBFBADoAACAOKAIAIQQMAgsgCiAGQbAQbGpBrBBqIQQgBCADNgIAIAMEfyAAIAMQTSEBIAogBkGwEGxqQQhqIQMgAyABNgIAIAFFBEBB6wAhAQwFCyAEKAIAIQEgAUECdCEBIAAgARA8IQEgCiAGQbAQbGpBIGohAyADIAE2AgAgAUUEQEHtACEBDAULIAQoAgAhASABQQJ0IQEgACABEDwhBSAFRQRAQfAAIQEMBQsgDigCACEBIAQoAgAhDyAFIQcgBQVBACEPQQAhB0EACyEDIA9BA3QhBSAFIAFqIQUgFigCACEPIAUgD00EQCABIQUgBAwDCyAWIAU2AgAgASEFIAQFIAEhBAwBCwwBCyAEQQBKBEBBACEBQQAhAwNAIAIgA2ohBSAFLAAAIQUgBUH/AXFBCkohDyAFQX9HIQUgDyAFcSEFIAVBAXEhBSABIAVqIQEgA0EBaiEDIAMgBEgNAAsFQQAhAQsgCiAGQbAQbGpBrBBqIQ8gDyABNgIAIARBAnQhASAAIAEQTSEBIAogBkGwEGxqQSBqIQMgAyABNgIAIAFFBEBB6QAhAQwCC0EAIQMgDigCACEFQQAhByAPCyEBIAkgAiAFIAMQTyEEIARFBEBB9AAhAQwBCyABKAIAIQQgBARAIARBAnQhBCAEQQRqIQQgACAEEE0hBCAKIAZBsBBsakGkEGohBSAFIAQ2AgAgBEUEQEH5ACEBDAILIAEoAgAhBCAEQQJ0IQQgBEEEaiEEIAAgBBBNIQQgCiAGQbAQbGpBqBBqIQUgBSAENgIAIARFBEBB+wAhAQwCCyAEQQRqIQ8gBSAPNgIAIARBfzYCACAJIAIgAxBQCyARLAAAIQMgAwRAIAEoAgAhAyADQQJ0IQMgACAHIAMQTiAKIAZBsBBsakEgaiEDIAMoAgAhBCABKAIAIQUgBUECdCEFIAAgBCAFEE4gDigCACEEIAAgAiAEEE4gA0EANgIACyAJEFEgAEEEECwhAiACQf8BcSEDIAogBkGwEGxqQRVqIQUgBSADOgAAIAJB/wFxIQIgAkECSwRAQYABIQEMAQsgAgRAIABBIBAsIQIgAhBSISUgCiAGQbAQbGpBDGohDyAPICU4AgAgAEEgECwhAiACEFIhJSAKIAZBsBBsakEQaiEbIBsgJTgCACAAQQQQLCECIAJBAWohAiACQf8BcSECIAogBkGwEGxqQRRqIQQgBCACOgAAIABBARAsIQIgAkH/AXEhAiAKIAZBsBBsakEWaiEcIBwgAjoAACAFLAAAIQsgDigCACECIAkoAgAhAyALQQFGBH8gAiADEFMFIAMgAmwLIQIgCiAGQbAQbGpBGGohCyALIAI2AgAgAkUEQEGGASEBDAILIAJBAXQhAiAAIAIQPCEQIBBFBEBBiAEhAQwCCyALKAIAIQIgAkEASgRAQQAhAgNAIAQtAAAhAyADQf8BcSEDIAAgAxAsIQMgA0F/RgRAQYwBIQEMBAsgA0H//wNxIQMgECACQQF0aiEXIBcgAzsBACACQQFqIQIgCygCACEDIAIgA0gNAAsgAyECCyAFLAAAIQMCQCADQQFGBEAgESwAACEDIANBAEciFwRAIAEoAgAhAyADRQRAIAIhAQwDCwUgDigCACEDCyAKIAZBsBBsaiAAIANBAnQgCSgCAGwQTSIfNgIcIB9FBEBBkwEhAQwECyABIA4gFxshASABKAIAIQ4gDkEASgRAIAogBkGwEGxqQagQaiEgIAkoAgAiCkEASiEJQwAAAAAhJUEAIQEDQCAXBH8gICgCACECIAIgAUECdGohAiACKAIABSABCyEEIAkEQCALKAIAIRggHCwAAEUhISAKIAFsISJBACEDQQEhAgNAIAQgAm4hEiASIBhwIRIgECASQQF0aiESIBIvAQAhEiASQf//A3GyISQgGyoCACEmICYgJJQhJCAPKgIAISYgJCAmkiEkICUgJJIhJCAiIANqIRIgHyASQQJ0aiESIBIgJDgCACAlICQgIRshJSADQQFqIQMgAyAKSCISBEBBfyAYbiEjIAIgI0sEQEGeASEBDAkLIBggAmwhAgsgEg0ACwsgAUEBaiEBIAEgDkgNAAsLIAVBAjoAACALKAIAIQEFIAJBAnQhASAAIAEQTSECIAogBkGwEGxqQRxqIQEgASACNgIAIAsoAgAhCCACRQRAQaUBIQEMBAsgCEEATARAIAghAQwCCyAcLAAARSEDQwAAAAAhJUEAIQEDQCAQIAFBAXRqIQQgBC8BACEEIARB//8DcbIhJCAbKgIAISYgJiAklCEkIA8qAgAhJiAkICaSISQgJSAkkiEkIAIgAUECdGohBCAEICQ4AgAgJSAkIAMbISUgAUEBaiEBIAEgCEgNAAsgCCEBCwsgAUEBdCEBIAAgECABEE4LIAZBAWohBiANKAIAIQEgBiABSA0BDAMLCwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAUE/aw5nABYBFgIWFhYWAxYWFhYEFhYWFhYFFhYWFhYWBhYWFhYWFgcWFhYWFhYWCBYJFgoWFgsWFhYMFhYWFg0WDhYWFhYPFhYWFhYQFhEWFhYSFhYWFhYWExYWFhYWFhYWFhYUFhYWFhYWFRYLIABBFBAVQQAMGwsgAEEUEBVBAAwaCyAAQRQQFUEADBkLIABBFBAVQQAMGAsgAEEDEBVBAAwXCyAAQRQQFUEADBYLIABBFBAVQQAMFQsgAEEDEBVBAAwUCyAAQQMQFUEADBMLIABBAxAVQQAMEgsgAEEDEBVBAAwRCyAAQQMQFUEADBALIBEsAAAhASABBEAgACAHQQAQTgsgAEEUEBVBAAwPCyAAQQMQFUEADA4LIABBAxAVQQAMDQsgAEEUEBVBAAwMCyAAQRQQFUEADAsLIABBAxAVQQAMCgsgCygCACEBIAFBAXQhASAAIBAgARBOIABBFBAVQQAMCQsgCygCACEBIAFBAXQhASAAIBAgARBOIABBAxAVQQAMCAsgGEEBdCEBIAAgECABEE4gAEEUEBVBAAwHCyAIQQF0IQEgACAQIAEQTiAAQQMQFUEADAYLCwsgAEEGECwhASABQQFqIQEgAUH/AXEhAgJAIAIEQEEAIQEDQAJAIABBEBAsIQMgA0UhAyADRQ0AIAFBAWohASABIAJJDQEMAwsLIABBFBAVQQAMBQsLIABBBhAsIQEgAUEBaiEBIABB9ABqIQ8gDyABNgIAIAFBvAxsIQEgACABEE0hASAAQfgBaiEOIA4gATYCACABRQRAIABBAxAVQQAMBAsgDygCACEBAn8gAUEASgR/QQAhBEEAIQcCQAJAAkACQAJAAkADQCAAQRAQLCEBIAFB//8DcSECIABB+ABqIAdBAXRqIQMgAyACOwEAIAFB//8DcSEBIAFBAUsNASABRQ0CIA4oAgAhBSAAQQUQLCEBIAFB/wFxIQIgBSAHQbwMbGohCiAKIAI6AAAgAUH/AXEhASABBEBBfyEBQQAhAgNAIABBBBAsIQMgA0H/AXEhCCAFIAdBvAxsakEBaiACaiEGIAYgCDoAACADQf8BcSEDIAMgAUohCCADIAEgCBshAyACQQFqIQIgCi0AACEBIAFB/wFxIQEgAiABSQRAIAMhAQwBCwtBACEBA0AgAEEDECwhAiACQQFqIQIgAkH/AXEhAiAFIAdBvAxsakEhaiABaiEIIAggAjoAACAAQQIQLCECIAJB/wFxIQIgBSAHQbwMbGpBMWogAWohCCAIIAI6AAACQAJAIAJB/wFxRQ0AIABBCBAsIQIgAkH/AXEhBiAFIAdBvAxsakHBAGogAWohECAQIAY6AAAgAkH/AXEhAiANKAIAIQYgAiAGTg0HIAgsAAAhAiACQR9HDQAMAQtBACECA0AgAEEIECwhBiAGQf//A2ohBiAGQf//A3EhECAFIAdBvAxsakHSAGogAUEEdGogAkEBdGohCSAJIBA7AQAgBkEQdCEGIAZBEHUhBiANKAIAIRAgBiAQSCEGIAZFDQggAkEBaiECIAgtAAAhBiAGQf8BcSEGQQEgBnQhBiACIAZIDQALCyABQQFqIQIgASADSARAIAIhAQwBCwsLIABBAhAsIQEgAUEBaiEBIAFB/wFxIQEgBSAHQbwMbGpBtAxqIQIgAiABOgAAIABBBBAsIQEgAUH/AXEhAiAFIAdBvAxsakG1DGohECAQIAI6AAAgBSAHQbwMbGpB0gJqIQkgCUEAOwEAIAFB/wFxIQFBASABdCEBIAFB//8DcSEBIAUgB0G8DGxqQdQCaiECIAIgATsBACAFIAdBvAxsakG4DGohBiAGQQI2AgAgCiwAACEBAkACQCABBEBBACEIQQIhAwNAIAUgB0G8DGxqQQFqIAhqIQIgAi0AACECIAJB/wFxIQIgBSAHQbwMbGpBIWogAmohAiACLAAAIQsgCwRAQQAhAQNAIBAtAAAhAyADQf8BcSEDIAAgAxAsIQMgA0H//wNxIQsgBigCACEDIAUgB0G8DGxqQdICaiADQQF0aiERIBEgCzsBACADQQFqIQMgBiADNgIAIAFBAWohASACLQAAIQsgC0H/AXEhCyABIAtJDQALIAosAAAhAgUgASECCyADIQEgCEEBaiEIIAJB/wFxIQMgCCADSQRAIAEhAyACIQEMAQsLIAFBAEoNAQVBAiEBDAELDAELQQAhAgNAIAUgB0G8DGxqQdICaiACQQF0aiEDIAMuAQAhAyAMIAJBAnRqIQggCCADOwEAIAJB//8DcSEDIAwgAkECdGpBAmohCCAIIAM7AQAgAkEBaiECIAIgAUgNAAsLIAwgAUEEQQEQZiAGKAIAIQECQCABQQBKBEBBACEBA0AgDCABQQJ0akECaiECIAIuAQAhAiACQf8BcSECIAUgB0G8DGxqQcYGaiABaiEDIAMgAjoAACABQQFqIQEgBigCACECIAEgAkgNAAsgAkECTARAIAIhAQwCC0ECIQEDQCAJIAEgHSAeEFUgHSgCACECIAJB/wFxIQIgBSAHQbwMbGpBwAhqIAFBAXRqIQMgAyACOgAAIB4oAgAhAiACQf8BcSECIAUgB0G8DGxqIAFBAXRqQcEIaiEDIAMgAjoAACABQQFqIQEgBigCACECIAEgAkgNAAsgAiEBCwsgASAESiECIAEgBCACGyEEIAdBAWohByAPKAIAIQEgByABSA0ADAUACwALIABBFBAVQQAMCgsgDigCACEBIABBCBAsIQIgAkH/AXEhAiABIAdBvAxsaiEDIAMgAjoAACAAQRAQLCECIAJB//8DcSECIAEgB0G8DGxqQQJqIQMgAyACOwEAIABBEBAsIQIgAkH//wNxIQIgASAHQbwMbGpBBGohAyADIAI7AQAgAEEGECwhAiACQf8BcSECIAEgB0G8DGxqQQZqIQMgAyACOgAAIABBCBAsIQIgAkH/AXEhAiABIAdBvAxsakEHaiEDIAMgAjoAACAAQQQQLCECIAJBAWohAiACQf8BcSEEIAEgB0G8DGxqQQhqIQMgAyAEOgAAIAJB/wFxIQIgAgRAIAEgB0G8DGxqQQlqIQJBACEBA0AgAEEIECwhByAHQf8BcSEHIAIgAWohBCAEIAc6AAAgAUEBaiEBIAMtAAAhByAHQf8BcSEHIAEgB0kNAAsLIABBBBAVQQAMCQsgAEEUEBUMAgsgAEEUEBUMAQsgBEEBdAwCC0EADAUFQQALCyEQIABBBhAsIQEgAUEBaiEBIABB/AFqIQUgBSABNgIAIAFBGGwhASAAIAEQTSEBIABBgANqIQ4gDiABNgIAIAFFBEAgAEEDEBVBAAwECyAFKAIAIQIgAkEYbCECIAFBACACEHoaIAUoAgAhAQJAIAFBAEoEQEEAIQcCQAJAAkACQAJAAkACQAJAA0AgDigCACEEIABBEBAsIQEgAUH//wNxIQIgAEGAAmogB0EBdGohAyADIAI7AQAgAUH//wNxIQEgAUECSw0BIABBGBAsIQIgBCAHQRhsaiEBIAEgAjYCACAAQRgQLCECIAQgB0EYbGpBBGohAyADIAI2AgAgASgCACEBIAIgAUkNAiAAQRgQLCEBIAFBAWohASAEIAdBGGxqQQhqIQIgAiABNgIAIABBBhAsIQEgAUEBaiEBIAFB/wFxIQEgBCAHQRhsakEMaiEIIAggAToAACAAQQgQLCEBIAFB/wFxIQIgBCAHQRhsakENaiEGIAYgAjoAACABQf8BcSEBIA0oAgAhAiABIAJODQMgCCwAACEBIAEEf0EAIQEDQCAAQQMQLCEDIABBARAsIQIgAgR/IABBBRAsBUEACyECIAJBA3QhAiACIANqIQIgAkH/AXEhAiAMIAFqIQMgAyACOgAAIAFBAWohASAILQAAIQIgAkH/AXEhAyABIANJDQALIAJB/wFxBUEACyEBIAFBBHQhASAAIAEQTSEBIAQgB0EYbGpBFGohCiAKIAE2AgAgAUUNBCAILAAAIQIgAgRAQQAhAgNAIAwgAmotAAAhC0EAIQMDQEEBIAN0IQkgCSALcSEJIAkEQCAAQQgQLCEJIAlB//8DcSERIAooAgAhASABIAJBBHRqIANBAXRqIRYgFiAROwEAIAlBEHQhCSAJQRB1IQkgDSgCACERIBEgCUwNCQUgASACQQR0aiADQQF0aiEJIAlBfzsBAAsgA0EBaiEDIANBCEkNAAsgAkEBaiECIAgtAAAhAyADQf8BcSEDIAIgA0kNAAsLIBUoAgAhASAGLQAAIQIgAkH/AXEhAiABIAJBsBBsakEEaiEBIAEoAgAhASABQQJ0IQEgACABEE0hASAEIAdBGGxqQRBqIQogCiABNgIAIAFFDQYgFSgCACECIAYtAAAhAyADQf8BcSEDIAIgA0GwEGxqQQRqIQIgAigCACECIAJBAnQhAiABQQAgAhB6GiAVKAIAIQIgBi0AACEBIAFB/wFxIQMgAiADQbAQbGpBBGohASABKAIAIQEgAUEASgRAQQAhAQNAIAIgA0GwEGxqIQIgAigCACEDIAAgAxBNIQIgCigCACEEIAQgAUECdGohBCAEIAI2AgAgCigCACECIAIgAUECdGohAiACKAIAIQQgBEUNCQJAIANBAEoEQCAILQAAIQkgA0F/aiECIAlB/wFxIQkgASAJcCEJIAlB/wFxIQkgBCACaiEEIAQgCToAACADQQFGDQEgASEDA0AgCC0AACEJIAlB/wFxIQQgAyAEbSEDIAooAgAgAUECdGohBCAEKAIAIQsgAkF/aiEEIAlB/wFxIQkgAyAJbyEJIAlB/wFxIQkgCyAEaiELIAsgCToAACACQQFKBEAgBCECDAELCwsLIAFBAWohASAVKAIAIQIgBi0AACEDIANB/wFxIQMgAiADQbAQbGpBBGohBCAEKAIAIQQgASAESA0ACwsgB0EBaiEHIAUoAgAhASAHIAFIDQAMCgALAAsgAEEUEBUMBgsgAEEUEBUMBQsgAEEUEBUMBAsgAEEDEBUMAwsgAEEUEBUMAgsgAEEDEBUMAQsgAEEDEBULQQAMBQsLIABBBhAsIQEgAUEBaiEBIABBhANqIQcgByABNgIAIAFBKGwhASAAIAEQTSEBIABBiANqIQogCiABNgIAIAFFBEAgAEEDEBVBAAwECyAHKAIAIQIgAkEobCECIAFBACACEHoaIAcoAgAhAQJAIAFBAEoEQEEAIQECQAJAAkACQAJAAkACQAJAAkACQANAIAooAgAhBCAEIAFBKGxqIQwgAEEQECwhAiACDQEgEygCACECIAJBA2whAiAAIAIQTSECIAQgAUEobGpBBGohCCAIIAI2AgAgAkUNAiAAQQEQLCECIAIEfyAAQQQQLCECIAJBAWohAiACQf8BcQVBAQshAiAEIAFBKGxqQQhqIQYgBiACOgAAIABBARAsIQICQCACBEAgAEEIECwhAiACQQFqIQIgAkH//wNxIQMgDCADOwEAIAJB//8DcSECIAJFDQFBACECIBMoAgAhAwNAIANBf2ohAyADEC0hAyAAIAMQLCEDIANB/wFxIQMgCCgCACENIA0gAkEDbGohDSANIAM6AAAgEygCACEDIANBf2ohAyADEC0hAyAAIAMQLCENIA1B/wFxIQkgCCgCACEDIAMgAkEDbGpBAWohCyALIAk6AAAgAyACQQNsaiEDIAMsAAAhCyALQf8BcSERIBMoAgAhAyADIBFMDQYgDUH/AXEhDSADIA1MDQcgCyAJQRh0QRh1RiENIA0NCCACQQFqIQIgDC8BACENIA1B//8DcSENIAIgDUkNAAsFIAxBADsBAAsLIABBAhAsIQIgAg0GIAYsAAAhAyATKAIAIgxBAEohAgJAAkAgA0H/AXFBAUoEQCACRQ0BQQAhAgNAIABBBBAsIQMgA0H/AXEhAyAIKAIAIQwgDCACQQNsakECaiEMIAwgAzoAACAGLQAAIQwgDEH/AXEgA0ohAyADRQ0LIAJBAWohAiATKAIAIQMgAiADSA0ACwwBBSACBEAgCCgCACEIQQAhAgNAIAggAkEDbGpBAmohDSANQQA6AAAgAkEBaiECIAIgDEgNAAsLIAMNAQsMAQtBACECA0AgAEEIECwaIABBCBAsIQMgA0H/AXEhCCAEIAFBKGxqQQlqIAJqIQMgAyAIOgAAIABBCBAsIQggCEH/AXEhDCAEIAFBKGxqQRhqIAJqIQ0gDSAMOgAAIAMtAAAhAyADQf8BcSEDIA8oAgAhDCAMIANMDQogCEH/AXEhAyAFKAIAIQggAyAISCEDIANFDQsgAkEBaiECIAYtAAAhAyADQf8BcSEDIAIgA0kNAAsLIAFBAWohASAHKAIAIQIgASACSA0ADAwACwALIABBFBAVQQAMDgsgAEEDEBVBAAwNCyAAQRQQFUEADAwLIABBFBAVQQAMCwsgAEEUEBVBAAwKCyAAQRQQFUEADAkLIABBFBAVQQAMCAsgAEEUEBVBAAwHCyAAQRQQFUEADAYACwALCyAAQQYQLCEBIAFBAWohASAAQYwDaiECIAIgATYCAAJAIAFBAEoEQEEAIQECQAJAAkACQANAIABBARAsIQMgA0H/AXEhAyAAQZADaiABQQZsaiEEIAQgAzoAACAAQRAQLCEDIANB//8DcSEEIAAgAUEGbGpBkgNqIQMgAyAEOwEAIABBEBAsIQQgBEH//wNxIQggACABQQZsakGUA2ohBCAEIAg7AQAgAEEIECwhCCAIQf8BcSEGIAAgAUEGbGpBkQNqIQwgDCAGOgAAIAMuAQAhAyADDQEgBC4BACEDIAMNAiAIQf8BcSEDIAcoAgAhBCADIARIIQMgA0UNAyABQQFqIQEgAigCACEDIAEgA0gNAAwGAAsACyAAQRQQFUEADAgLIABBFBAVQQAMBwsgAEEUEBVBAAwGAAsACwsgABAhIABB1AdqIQEgAUEANgIAIBMoAgAhAQJAIAFBAEoEQEEAIQEDQAJAIBQoAgAhAiACQQJ0IQIgACACEE0hAyAAQZQGaiABQQJ0aiECIAIgAzYCACAUKAIAIQMgA0EBdCEDIANB/v///wdxIQMgACADEE0hByAAQZQHaiABQQJ0aiEDIAMgBzYCACAAIBAQTSEHIABB2AdqIAFBAnRqIQQgBCAHNgIAIAIoAgAhAiACRQ0AIAMoAgAhAyADRSEDIAdFIQcgByADcg0AIBQoAgAhAyADQQJ0IQMgAkEAIAMQehogAUEBaiEBIBMoAgAhAiABIAJIDQEMAwsLIABBAxAVQQAMBQsLIBooAgAhASAAQQAgARBWIQFBACABRQ0DGiAUKAIAIQEgAEEBIAEQViEBQQAgAUUNAxogGigCACEBIABB3ABqIQIgAiABNgIAIBQoAgAhASAAQeAAaiECIAIgATYCACABQQF0IQIgAkH+////B3EhBCAFKAIAIQggCEEASgR/IA4oAgAhByABQQJtIQNBACECQQAhAQNAIAcgAUEYbGohBSAFKAIAIQUgBSADSSEGIAUgAyAGGyEGIAcgAUEYbGpBBGohBSAFKAIAIQUgBSADSSEMIAUgAyAMGyEFIAUgBmshBSAHIAFBGGxqQQhqIQYgBigCACEGIAUgBm4hBSAFIAJKIQYgBSACIAYbIQIgAUEBaiEBIAEgCEgNAAsgAkECdCEBIAFBBGoFQQQLIQEgEygCACECIAIgAWwhASAAQQxqIQIgBCABSyEDIAIgBCABIAMbIgI2AgAgAEHVCmohASABQQE6AAAgAEHEAGohASABKAIAIQECQCABBEAgAEHQAGohASABKAIAIQEgAEHIAGohAyADKAIAIQMgASADRwRAQcwWQcQTQaAgQYQXEAQLIABBzABqIQMgAygCACEDIAJB3AtqIQIgAiADaiECIAIgAU0NASAAQQMQFUEADAULCyAAEB8hASAAQShqIQAgACABNgIAQQEMAwsgACACQQYQIiEBIAFBAEchASACLAAAIQMgA0HmAEYhAyABIANxBEAgAkEBaiEBIAEsAAAhASABQekARgRAIAJBAmohASABLAAAIQEgAUHzAEYEQCACQQNqIQEgASwAACEBIAFB6ABGBEAgAkEEaiEBIAEsAAAhASABQeUARgRAIAJBBWohASABLAAAIQEgAUHhAEYEQCAAEDAhASABQf8BcUHkAEYEQCAAEDAhASABQf8BcUUEQCAAQSYQFUEADAoLCwsLCwsLCwsgAEEiEBULQQALIQAgGSQGIAALDwEBfyAAQdwLEE0hASABCz8BAX8gAEEkaiEBIAEsAAAhASABBH9BAAUgAEEUaiEBIAEoAgAhASAAQRhqIQAgACgCACEAIAEgAGsLIQAgAAuBAgECfyAAQdgKaiEBIAEoAgAhAQJ/AkAgAUF/Rw0AIAAQMCEBIABB1ABqIQIgAigCACECIAIEf0EABSABQf8BcUHPAEcEQCAAQR4QFUEADAMLIAAQMCEBIAFB/wFxQecARwRAIABBHhAVQQAMAwsgABAwIQEgAUH/AXFB5wBHBEAgAEEeEBVBAAwDCyAAEDAhASABQf8BcUHTAEcEQCAAQR4QFUEADAMLIAAQMyEBIAEEQCAAQdMKaiEBIAEsAAAhASABQQFxIQEgAUUNAiAAQdwKaiEBIAFBADYCACAAQdQKaiEBIAFBADoAACAAQSAQFQtBAAsMAQsgABBKCyEAIAALFAEBfwNAIAAQLiEBIAFBf0cNAAsLZQEEfyAAQRRqIQMgAygCACEFIAUgAmohBiAAQRxqIQQgBCgCACEEIAYgBEsEfyAAQdQAaiEAIABBATYCAEEABSABIAUgAhB5GiADKAIAIQAgACACaiEAIAMgADYCAEEBCyEAIAALaAECfyAAEDAhAiACQf8BcSECIAAQMCEBIAFB/wFxIQEgAUEIdCEBIAEgAnIhAiAAEDAhASABQf8BcSEBIAFBEHQhASACIAFyIQIgABAwIQAgAEH/AXEhACAAQRh0IQAgAiAAciEAIAALEwEBf0EEEF4hACAAQQA2AgAgAAsTAQF/IAAoAgAhASABEBAgABBfCyEAIAAoAgAhACAABH8gAEEEaiEAIAAoAgAFQQALIQAgAAsaACAAKAIAIQAgAAR/IAAoAgAFQQALIQAgAAvbBwISfwF9IwYhECMGQRBqJAYgEEEEaiELIBAhDCAEQQA2AgAgACgCACEGAkACQCAGDQBBICEFA0ACQCALQQA2AgAgDEEANgIAIAUgAkohBiACIAUgBhshBiABIAYgCyAMQQAQGyEKIAAgCjYCAAJAAkACQAJAIAwoAgAOAgEAAgsgAiAFTCEHIAdBAXMhBSAFQQFxIQUgBiAFdCEFQQFBAiAHGyEGIAYhCUEAIAggBxshCCAFIQYMAgsgCygCACEHIAQoAgAhBSAFIAdqIQUgBCAFNgIAIAEgB2ohAUEAIQkgAiAHayECDAELQQEhCUF/IQgLAkACQAJAIAlBA3EOAwABAAELDAELDAELIAoEQCAKIQYMAwUgBiEFDAILAAsLIAkEfyAIBSAKIQYMAQshEgwBCyAGQQRqIQogCigCACEIIAhBAnQhCCAIEF4hDSANRQRAEAYLIAooAgAhCCAIQQBKBEAgCEECdCEIIA1BACAIEHoaC0EAIQVBACEKIAEhCCAGIQECQAJAAkADQCALQQA2AgAgDEEANgIAIAJBIEghBiACQSAgBhshCSABIAggCUEAIAsgDBAUIQEgAUUEQEEgIQYgCSEBA0AgAiAGSiEGIAZFDQQgAUEBdCEGIAYgAkohASACIAYgARshASAAKAIAIQkgCSAIIAFBACALIAwQFCEJIAlFDQALIAkhAQsgBCgCACEGIAYgAWohBiAEIAY2AgAgCCABaiEIIAIgAWshBiAMKAIAIREgESAKaiEJAkACQCAFIAlIBEAgBUUhAiAFQQF0IQFBgCAgASACGyECIAAoAgAhASABQQRqIQUgBSgCACEFIAVBAEoEQCACQQJ0IQ5BACEBA0AgDSABQQJ0aiEHIAcoAgAhBSAFIA4QYCEFIAVFDQYgByAFNgIAIAFBAWohASAAKAIAIQcgB0EEaiEFIAUoAgAhBSABIAVIDQALIAUhDiAHIQEMAgsFIAAoAgAiAUEEaiEHIAUhAiAHKAIAIQ4MAQsMAQsgDkEASgRAIBFBAEohEyALKAIAIRRBACEHA0AgEwRAIBQgB0ECdGooAgAhFSANIAdBAnRqKAIAIRZBACEFA0AgFSAFQQJ0aiEPIA8qAgAhFyAXQwAAgD9eBEBDAACAPyEXBSAXQwAAgL9dBEBDAACAvyEXCwsgBSAKaiEPIBYgD0ECdGohDyAPIBc4AgAgBUEBaiEFIAUgEUcNAAsLIAdBAWohBSAFIA5IBEAgBSEHDAELCwsLIAIhBSAJIQogBiECDAAACwALEAYMAQsgAyANNgIAIAohEgsLIBAkBiASCzwBAX8gAEEIdCECIAFB/wFxIQEgAEEYdiEAIAAgAXMhACAAQQJ0QdAZaiEAIAAoAgAhACAAIAJzIQAgAAvvBAEFfyAAQdgLaiEGIAZBADYCACAAQdQLaiEGIAZBADYCACAAQdQAaiEIIAgoAgAhBgJ/IAYEf0EABSAAQSRqIQcCQAJAA0ACQCAAECAhBkEAIAZFDQUaIABBARAsIQYgBkUNACAHLAAAIQYgBg0CA0AgABAZIQYgBkF/Rw0ACyAIKAIAIQYgBkUNAUEADAULCwwBCyAAQSMQFUEADAILIABBxABqIQYgBigCACEGIAYEQCAAQcgAaiEGIAYoAgAhByAAQdAAaiEGIAYoAgAhBiAHIAZHBEBB0xNBxBNBuhhBixQQBAsLIABBjANqIQcgBygCACEGIAZBf2ohBiAGEC0hBiAAIAYQLCEIIAhBf0YEf0EABSAHKAIAIQYgCCAGSAR/IAUgCDYCACAAQZADaiAIQQZsaiEHIAcsAAAhBQJAAkAgBQR/IABB6ABqIQUgBSgCACEFIABBARAsIQYgAEEBECwhCCAGQQBHIQkgBywAACEGIAZFIQcgBUEBdSEGIAkgB3IEfwwCBSAAQeQAaiEKIAooAgAhCSAFIAlrIQkgCUECdSEJIAEgCTYCACAKKAIAIQEgASAFaiEJIAYhASAJQQJ1CwUgAEHkAGohBSAFKAIAIQZBACEIIAYhBSAGQQF1IQZBASEHDAELIQYMAQsgAUEANgIAIAYhAQsgAiAGNgIAIAhBAEchAiACIAdyBEAgAyABNgIABSAFQQNsIQIgAEHkAGohASABKAIAIQAgAiAAayEAIABBAnUhACADIAA2AgAgASgCACEAIAAgAmohACAAQQJ1IQULIAQgBTYCAEEBBUEACwsLCyEAIAALjB0CJ38DfSMGIRwjBkGAFGokBiAcQYAMaiEdIBxBgARqISQgHEGAAmohFCAcISAgAi0AACEHIAdB/wFxIQcgAEHcAGogB0ECdGohByAHKAIAIR4gAEGIA2ohByAHKAIAIRYgAkEBaiEHIActAAAhByAHQf8BcSEXIBYgF0EobGohIiAeQQF1IR9BACAfayEpIABBBGohGiAaKAIAIQcCfwJAIAdBAEoEfyAWIBdBKGxqQQRqISogAEH4AWohKyAAQfAAaiElIABB6ApqIRggAEHkCmohISAUQQFqISwDQAJAICooAgAhByAHIA1BA2xqQQJqIQcgBy0AACEHIAdB/wFxIQcgHSANQQJ0aiEVIBVBADYCACAWIBdBKGxqQQlqIAdqIQcgBy0AACEHIAdB/wFxIQ8gAEH4AGogD0EBdGohByAHLgEAIQcgB0UNACArKAIAIRAgAEEBECwhBwJAAkAgB0UNACAQIA9BvAxsakG0DGohByAHLQAAIQcgB0H/AXEhByAHQX9qIQcgB0ECdEGQCGohByAHKAIAISMgAEHYB2ogDUECdGohByAHKAIAIRkgIxAtIQcgB0F/aiEHIAAgBxAsIQggCEH//wNxIQggGSAIOwEAIAAgBxAsIQcgB0H//wNxIQcgGUECaiEIIAggBzsBACAQIA9BvAxsaiEmICYsAAAhByAHBEBBACETQQIhBwNAIBAgD0G8DGxqQQFqIBNqIQggCC0AACEIIAhB/wFxIRsgECAPQbwMbGpBIWogG2ohCCAILAAAIQwgDEH/AXEhJyAQIA9BvAxsakExaiAbaiEIIAgsAAAhCCAIQf8BcSEoQQEgKHQhCSAJQX9qIS0gCARAICUoAgAhCyAQIA9BvAxsakHBAGogG2ohCCAILQAAIQggCEH/AXEhCiALIApBsBBsaiEOIBgoAgAhCCAIQQpIBEAgABA0CyAhKAIAIQkgCUH/B3EhCCALIApBsBBsakEkaiAIQQF0aiEIIAguAQAhCCAIQX9KBEAgCyAKQbAQbGpBCGohDiAOKAIAIQ4gDiAIaiEOIA4tAAAhDiAOQf8BcSEOIAkgDnYhCSAhIAk2AgAgGCgCACEJIAkgDmshCSAJQQBIIQ5BACAJIA4bIRFBfyAIIA4bIQkgGCARNgIABSAAIA4QNSEJCyALIApBsBBsakEXaiEIIAgsAAAhCCAIBEAgCyAKQbAQbGpBqBBqIQggCCgCACEIIAggCUECdGohCCAIKAIAIQkLBUEAIQkLIAwEQEEAIQsgByEIA0AgCSAtcSEKIBAgD0G8DGxqQdIAaiAbQQR0aiAKQQF0aiEKIAouAQAhDCAJICh1IQogDEF/SgR/ICUoAgAhDiAOIAxBsBBsaiESIBgoAgAhCSAJQQpIBEAgABA0CyAhKAIAIREgEUH/B3EhCSAOIAxBsBBsakEkaiAJQQF0aiEJIAkuAQAhCSAJQX9KBEAgDiAMQbAQbGpBCGohEiASKAIAIRIgEiAJaiESIBItAAAhEiASQf8BcSESIBEgEnYhESAhIBE2AgAgGCgCACERIBEgEmshESARQQBIIRJBACARIBIbIRFBfyAJIBIbIQkgGCARNgIABSAAIBIQNSEJCyAOIAxBsBBsakEXaiERIBEsAAAhESARBEAgDiAMQbAQbGpBqBBqIQwgDCgCACEMIAwgCUECdGohCSAJKAIAIQkLIAlB//8DcQVBAAshCSAZIAhBAXRqIAk7AQAgCEEBaiEIIAtBAWohCyALICdHBEAgCiEJDAELCyAHICdqIQcLIBNBAWohEyAmLQAAIQggCEH/AXEhCCATIAhJDQALCyAYKAIAIQcgB0F/Rg0AICxBAToAACAUQQE6AAAgECAPQbwMbGpBuAxqIQcgBygCACETIBNBAkoEQCAjQf//A2ohG0ECIQcDQCAQIA9BvAxsakHACGogB0EBdGohCCAILQAAIQggCEH/AXEhCyAQIA9BvAxsaiAHQQF0akHBCGohCCAILQAAIQggCEH/AXEhCiAQIA9BvAxsakHSAmogB0EBdGohCCAILwEAIQggCEH//wNxIQggECAPQbwMbGpB0gJqIAtBAXRqIQkgCS8BACEJIAlB//8DcSEJIBAgD0G8DGxqQdICaiAKQQF0aiEMIAwvAQAhDCAMQf//A3EhDCAZIAtBAXRqIQ4gDi4BACEOIBkgCkEBdGohFSAVLgEAIRUgCCAJIAwgDiAVEDYhCCAZIAdBAXRqIQ4gDi4BACEJICMgCGshDAJAAkAgCQRAIAwgCEghFSAMIAggFRtBAXQhFSAUIApqIQogCkEBOgAAIBQgC2ohCyALQQE6AAAgFCAHaiELIAtBAToAACAVIAlMBEAgDCAISg0DIBsgCWshCAwCCyAJQQFxIQsgCwR/IAlBAWohCSAJQQF2IQkgCCAJawUgCUEBdSEJIAkgCGoLIQgFIBQgB2ohCSAJQQA6AAALCyAOIAg7AQALIAdBAWohByAHIBNIDQALCyATQQBKBEBBACEHA0AgFCAHaiEIIAgsAAAhCCAIRQRAIBkgB0EBdGohCCAIQX87AQALIAdBAWohByAHIBNHDQALCwwBCyAVQQE2AgALIA1BAWohDSAaKAIAIQcgDSAHSA0BDAMLCyAAQRUQFUEABQwBCwwBCyAAQcQAaiETIBMoAgAhCSAJBEAgAEHIAGohCCAIKAIAIQggAEHQAGohDSANKAIAIQ0gCCANRwRAQdMTQcQTQc8ZQecUEAQLCyAHQQJ0IQggJCAdIAgQeRogIi4BACEIIAgEQCAWIBdBKGxqKAIEIQ0gCEH//wNxIQxBACEIA0AgDSAIQQNsaiELIAstAAAhCyALQf8BcSELIB0gC0ECdGohCyALKAIAIQ8gHSANIAhBA2xqLQABQQJ0aiEKAkACQCAPRQ0AIAooAgAhDyAPRQ0ADAELIApBADYCACALQQA2AgALIAhBAWohCCAIIAxJDQALCyAWIBdBKGxqQQhqIQsgCywAACEIIAgEQCAWIBdBKGxqQQRqIQxBACEJIAchDQNAAkAgDUEASgRAIAwoAgAhD0EAIQdBACEIA0AgDyAIQQNsakECaiEKIAotAAAhCiAKQf8BcSEKIAkgCkYEQCAdIAhBAnRqIQogCigCACEQICAgB2ohCiAQBEAgCkEBOgAAIBQgB0ECdGohCiAKQQA2AgAFIApBADoAACAAQZQGaiAIQQJ0aiEKIAooAgAhCiAUIAdBAnRqIRAgECAKNgIACyAHQQFqIQcLIAhBAWohCCAIIA1IDQALBUEAIQcLIBYgF0EobGpBGGogCWohCCAILQAAIQggCEH/AXEhCCAAIBQgByAfIAggIBA3IAlBAWohCSALLQAAIQcgB0H/AXEhByAJIAdPDQAgGigCACENDAELCyATKAIAIQkLIAkEQCAAQcgAaiEHIAcoAgAhByAAQdAAaiEIIAgoAgAhCCAHIAhHBEBB0xNBxBNB8BlB5xQQBAsLICIuAQAhByAHBEAgFiAXQShsaigCBCENIB5BAUohDCAHQf//A3EhCANAIAhBf2ohCSANIAlBA2xqIQcgBy0AACEHIAdB/wFxIQcgAEGUBmogB0ECdGohByAHKAIAISAgDSAJQQNsakEBaiEHIActAAAhByAHQf8BcSEHIABBlAZqIAdBAnRqIQcgBygCACEPIAwEQEEAIQcDQCAgIAdBAnRqIQsgCyoCACEuIA8gB0ECdGoiECoCACIvQwAAAABeIQogLkMAAAAAXgRAIAoEQCAuITAgLiAvkyEuBSAuIC+SITALBSAKBEAgLiEwIC4gL5IhLgUgLiAvkyEwCwsgCyAwOAIAIBAgLjgCACAHQQFqIQcgByAfSA0ACwsgCEEBSgRAIAkhCAwBCwsLIBooAgAhByAHQQBKBEAgH0ECdCEJQQAhBwNAICQgB0ECdGohCCAIKAIAIQ0gAEGUBmogB0ECdGohCCANBEAgCCgCACEIIAhBACAJEHoaBSAIKAIAIQggAEHYB2ogB0ECdGohDSANKAIAIQ0gACAiIAcgHiAIIA0QOAsgB0EBaiEHIBooAgAhCCAHIAhIDQALIAhBAEoEQEEAIQcDQCAAQZQGaiAHQQJ0aiEIIAgoAgAhCCACLQAAIQkgCUH/AXEhCSAIIB4gACAJEDkgB0EBaiEHIBooAgAhCCAHIAhIDQALCwsgABAhIABB1QpqIQIgAiwAACEHIAcEQCAAQZgIaiEGIAYgKTYCACAeIAVrIQYgAEH4CmohByAHIAY2AgAgAEGcCGohBiAGQQE2AgAgAkEAOgAABSAAQfgKaiEHIAcoAgAhAiACBEAgBCADayEIIAIgCEgEQCACIANqIQMgBiADNgIAIAdBADYCAAUgAiAIayECIAcgAjYCACAGIAQ2AgAgBCEDCwsLIABB4ApqIQIgAigCACECIABB8ApqIQYgBigCACEHIABBnAhqIggoAgAhBgJAAkAgAiAHRgRAIAYEQCAAQdMKaiECIAIsAAAhAiACQQRxIQIgAgRAIABB9ApqIQIgAigCACECIABBmAhqIQYgBigCACEHIAUgA2shCSAJIAdqIQkgAiAJSSEJIAIgB0khDSACIAdrIQJBACACIA0bIQIgAiADaiECIAIgBUohByAFIAIgBxshAiAJBEAgASACNgIAIAYoAgAhACAAIAJqIQAgBiAANgIAQQEMBgsLCyAAQfQKaiECIAIoAgAhAiADIB9rIQYgBiACaiEGIABBmAhqIQIgAiAGNgIAIAhBATYCAAwBBSAAQZgIaiECIAYNAQsMAQsgBCADayEDIAIoAgAhBCADIARqIQMgAiADNgIACyATKAIAIQIgAgRAIABByABqIQIgAigCACECIABB0ABqIQAgACgCACEAIAIgAEcEQEHTE0HEE0HkGkHnFBAECwsgASAFNgIAQQELIQAgHCQGIAALqAIBBX8gAEHoCmohBSAFKAIAIQICQCACQQBIBEBBACEABSACIAFIBEAgAUEYSgRAIABBGBAsIQIgAUFoaiEBIAAgARAsIQAgAEEYdCEAIAAgAmohACAADwsgAkUEQCAAQeQKaiECIAJBADYCAAsgAEHkCmohAwJAAkACQANAIAAQLiECIAJBf0YNASAFKAIAIQQgAiAEdCECIAMoAgAhBiAGIAJqIQIgAyACNgIAIAUgBEEIaiICNgIAIAIgAUgNAAwCAAsACyAFQX82AgBBACEADAQLIARBeEgEQEEAIQAMBAsLCyAAQeQKaiEEIAQoAgAhA0EBIAF0IQAgAEF/aiEAIAMgAHEhACADIAF2IQMgBCADNgIAIAIgAWshASAFIAE2AgALCyAAC40CAAJAIABBAEgEf0EABSAAQYCAAUgEQCAAQRBIBEAgAEGACGohACAALAAAIQAMAwsgAEGABEgEQCAAQQV2IQAgAEGACGohACAALAAAIQAgAEEFaiEABSAAQQp2IQAgAEGACGohACAALAAAIQAgAEEKaiEACwwCCyAAQYCAgAhIBH8gAEGAgCBIBH8gAEEPdiEAIABBgAhqIQAgACwAACEAIABBD2oFIABBFHYhACAAQYAIaiEAIAAsAAAhACAAQRRqCwUgAEGAgICAAkgEfyAAQRl2IQAgAEGACGohACAALAAAIQAgAEEZagUgAEEediEAIABBgAhqIQAgACwAACEAIABBHmoLCwshAAsgAAuiAQEDfyAAQdQKaiECIAIsAAAhAQJAAkAgAQ0AIABB3ApqIQEgASgCACEBIAEEQEF/IQMFIAAQLyEBIAEEQCACLAAAIQEgAQ0CQaEUQcQTQfYLQbUUEAQFQX8hAwsLDAELIAFBf2pBGHRBGHUhASACIAE6AAAgAEHsCmohASABKAIAIQIgAkEBaiECIAEgAjYCACAAEDAhACAAQf8BcSEDCyADC6wCAQd/IABB3ApqIQIgAigCACEBAkAgAUUEQCAAQdgKaiEEIAQoAgAhASABQX9GBEAgAEHQCGohASABKAIAIQEgAUF/aiEBIABB4ApqIQMgAyABNgIAIAAQMSEBIAFFBEAgAkEBNgIADAMLIABB0wpqIQEgASwAACEBIAFBAXEhASABBH8gBCgCAAUgAEEgEBUMAwshAQsgAUEBaiEHIAQgBzYCACAAQdQIaiABaiEDIAMsAAAhBiAGQf8BcSEDIAZBf0cEQCACQQE2AgAgAEHgCmohAiACIAE2AgALIABB0AhqIQEgASgCACEBIAcgAU4EQCAEQX82AgALIABB1ApqIQAgACwAACEBIAEEQEHFFEHEE0HoC0HaFBAEBSAAIAY6AAAgAyEFCwsLIAULUQEDfyAAQRRqIQMgAygCACEBIABBHGohAiACKAIAIQIgASACSQR/IAFBAWohACADIAA2AgAgASwAAAUgAEHUAGohACAAQQE2AgBBAAshACAACyABAX8gABAyIQEgAQR/IAAQMwUgAEEeEBVBAAshACAAC2ABAX8gABAwIQEgAUH/AXFBzwBGBEAgABAwIQEgAUH/AXFB5wBGBEAgABAwIQEgAUH/AXFB5wBGBEAgABAwIQAgAEH/AXFB0wBGIQAFQQAhAAsFQQAhAAsFQQAhAAsgAAvZAwEGfyAAEDAhAQJ/IAFB/wFxBH8gAEEfEBVBAAUgABAwIQEgAEHTCmohAiACIAE6AAAgABAjIQUgABAjIQIgABAjGiAAECMhASAAQcwIaiEDIAMgATYCACAAECMaIAAQMCEBIAFB/wFxIQEgAEHQCGohAyADIAE2AgAgAEHUCGohBCAAIAQgARAiIQEgAUUEQCAAQQoQFUEADAILIABB8ApqIQQgBEF+NgIAIAIgBXEhAQJAIAFBf0cEQCADKAIAIQEgAUEASgRAA0ACQCABQX9qIQIgAEHUCGogAmohBiAGLAAAIQYgBkF/Rw0AIAFBAUwNBCACIQEMAQsLIAQgAjYCACAAQfQKaiEBIAEgBTYCAAsLCyAAQdUKaiEBIAEsAAAhASABBEAgAygCACEDIANBAEoEf0EAIQJBACEBA0AgAEHUCGogAWohBCAELQAAIQQgBEH/AXEhBCACIARqIQIgAUEBaiEBIAEgA0gNAAsgAkEbagVBGwshASAAQShqIQIgAigCACECIAEgA2ohASABIAJqIQEgAEEsaiEDIAMgAjYCACAAQTBqIQIgAiABNgIAIABBNGohASABIAU2AgALIABB2ApqIQAgAEEANgIAQQELCyEAIAALowEBB38gAEHoCmohAyADKAIAIQECQCABQRlIBEAgAEHkCmohBCABRQRAIARBADYCAAsgAEHUCmohBSAAQdwKaiEGA0AgBigCACEBIAEEQCAFLAAAIQEgAUUNAwsgABAuIQIgAkF/Rg0CIAMoAgAhASACIAF0IQIgBCgCACEHIAcgAmohAiAEIAI2AgAgAUEIaiECIAMgAjYCACABQRFIDQALCwsLrQUBCX8gABA0IAFBIGohAiACKAIAIQUCQAJAIAVFIgNFDQAgAUGkEGohAiACKAIAIQIgAg0AQX8hAQwBCyABQQRqIQIgAigCACECAkACQCACQQhKBEAgAUGkEGohAyADKAIAIQMgAw0BBSADDQELDAELIABB5ApqIQggCCgCACEJIAkQOiEHIAFBrBBqIQIgAigCACECIAJBAUoEQCABQaQQaigCACEKQQAhAwNAIAJBAXYhBSAFIANqIQQgCiAEQQJ0aiEGIAYoAgAhBiAGIAdLIQYgAiAFayECIAMgBCAGGyEDIAUgAiAGGyECIAJBAUoNAAsFQQAhAwsgAUEXaiECIAIsAAAhAiACRQRAIAFBqBBqIQIgAigCACECIAIgA0ECdGohAiACKAIAIQMLIAFBCGohASABKAIAIQEgASADaiEBIAEtAAAhASABQf8BcSEBIABB6ApqIQIgAigCACEAIAAgAUgEf0EAIQBBfwUgACABayEAIAkgAXYhASAIIAE2AgAgAwshASACIAA2AgAMAQsgAUEXaiEDIAMsAAAhAyADBEBBgRVBxBNB6gxBjBUQBAsCQCACQQBKBEAgASgCCCEIIABB5ApqIQlBACEBA0ACQCAIIAFqIQMgAywAACEEIARB/wFxIQMgBEF/RwRAIAUgAUECdGoh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IwZBEGokBiACIQECfCAAvUIgiKdB/////wdxIgNB/MOk/wNJBHwgA0GewZryA0kEfEQAAAAAAADwPwUgAEQAAAAAAAAAABByCwUgACAAoSADQf//v/8HSw0BGgJAAkACQAJAIAAgARBuQQNxDgMAAQIDCyABKwMAIAErAwgQcgwECyABKwMAIAErAwhBARBwmgwDCyABKwMAIAErAwgQcpoMAgsgASsDACABKwMIQQEQcAsLIQAgAiQGIAALywEBA38jBiECIwZBEGokBiACIQECQCAAvUIgiKdB/////wdxIgNB/MOk/wNJBEAgA0GAgMDyA08EQCAARAAAAAAAAAAAQQAQcCEACwUgA0H//7//B0sEQCAAIAChIQAMAgsCQAJAAkACQAJAIAAgARBuQQNxDgMAAQIDCyABKwMAIAErAwhBARBwIQAMBQsgASsDACABKwMIEHIhAAwECyABKwMAIAErAwhBARBwmiEADAMLIAErAwAgASsDCBBymiEACwsLIAIkBiAAC5sDAwJ/AX4CfCAAvSIDQj+IpyEBAnwCfwJAIANCIIinQf////8HcSICQarGmIQESwR8IANC////////////AINCgICAgICAgPj/AFYEQCAADwsgAETvOfr+Qi6GQGQEQCAARAAAAAAAAOB/og8FIABE0rx63SsjhsBjIABEUTAt1RBJh8BjcUUNAkQAAAAAAAAAACIADwsABSACQcLc2P4DSwRAIAJBscXC/wNLDQIgAUEBcyABawwDCyACQYCAwPEDSwR8QQAhASAABSAARAAAAAAAAPA/oA8LCwwCCyAARP6CK2VHFfc/oiABQQN0QYATaisDAKCqCyEBIAAgAbciBEQAAOD+Qi7mP6KhIgAgBER2PHk17znqPaIiBaELIQQgACAEIAQgBCAEoiIAIAAgACAAIABE0KS+cmk3Zj6iRPFr0sVBvbu+oKJELN4lr2pWET+gokSTvb4WbMFmv6CiRD5VVVVVVcU/oKKhIgCiRAAAAAAAAABAIAChoyAFoaBEAAAAAAAA8D+gIQAgAUUEQCAADwsgACABEGULnwMDAn8BfgV8IAC9IgNCIIinIQECfyADQgBTIgIgAUGAgMAASXIEfyADQv///////////wCDQgBRBEBEAAAAAAAA8L8gACAAoqMPCyACRQRAIABEAAAAAAAAUEOivSIDQiCIpyEBIANC/////w+DIQNBy3cMAgsgACAAoUQAAAAAAAAAAKMPBSABQf//v/8HSwRAIAAPCyADQv////8PgyIDQgBRIAFBgIDA/wNGcQR/RAAAAAAAAAAADwVBgXgLCwshAiABQeK+JWoiAUH//z9xQZ7Bmv8Daq1CIIYgA4S/RAAAAAAAAPC/oCIFIAVEAAAAAAAA4D+ioiEGIAUgBUQAAAAAAAAAQKCjIgcgB6IiCCAIoiEEIAIgAUEUdmq3IgBEAADg/kIu5j+iIAUgAER2PHk17znqPaIgByAGIAQgBCAERJ/GeNAJmsM/okSveI4dxXHMP6CiRAT6l5mZmdk/oKIgCCAEIAQgBEREUj7fEvHCP6JE3gPLlmRGxz+gokRZkyKUJEnSP6CiRJNVVVVVVeU/oKKgoKKgIAahoKAL8Q8DC38Cfgh8AkACQAJAIAG9Ig1CIIinIgVB/////wdxIgMgDaciBnJFBEBEAAAAAAAA8D8PCyAAvSIOQiCIpyEHIA6nIghFIgogB0GAgMD/A0ZxBEBEAAAAAAAA8D8PCyAHQf////8HcSIEQYCAwP8HTQRAIAhBAEcgBEGAgMD/B0ZxIANBgIDA/wdLckUEQCAGQQBHIANBgIDA/wdGIgtxRQRAAkACQAJAIAdBAEgiCUUNACADQf///5kESwR/QQIhAgwBBSADQf//v/8DSwR/IANBFHYhAiADQf///4kESwRAQQIgBkGzCCACayICdiIMQQFxa0EAIAwgAnQgBkYbIQIMAwsgBgR/QQAFQQIgA0GTCCACayICdiIGQQFxa0EAIAYgAnQgA0YbIQIMBAsFDAILCyECDAILIAZFDQAMAQsgCwRAIARBgIDAgHxqIAhyRQRARAAAAAAAAPA/DwsgBUF/SiECIARB//+//wNLBEAgAUQAAAAAAAAAACACGw8FRAAAAAAAAAAAIAGaIAIbDwsACyADQYCAwP8DRgRAIABEAAAAAAAA8D8gAKMgBUF/ShsPCyAFQYCAgIAERgRAIAAgAKIPCyAHQX9KIAVBgICA/wNGcQRAIACfDwsLIACZIQ8gCgRAIARFIARBgICAgARyQYCAwP8HRnIEQEQAAAAAAADwPyAPoyAPIAVBAEgbIQAgCUUEQCAADwsgAiAEQYCAwIB8anIEQCAAmiAAIAJBAUYbDwsMBQsLAnwgCQR8AkACQAJAIAIOAgABAgsMBwtEAAAAAAAA8L8MAgtEAAAAAAAA8D8MAQVEAAAAAAAA8D8LCyERAnwgA0GAgICPBEsEfCADQYCAwJ8ESwRAIARBgIDA/wNJBEAjCkQAAAAAAAAAACAFQQBIGw8FIwpEAAAAAAAAAAAgBUEAShsPCwALIARB//+//wNJBEAgEUScdQCIPOQ3fqJEnHUAiDzkN36iIBFEWfP4wh9upQGiRFnz+MIfbqUBoiAFQQBIGw8LIARBgIDA/wNNBEAgD0QAAAAAAADwv6AiAEQAAABgRxX3P6IiECAARETfXfgLrlQ+oiAAIACiRAAAAAAAAOA/IABEVVVVVVVV1T8gAEQAAAAAAADQP6KhoqGiRP6CK2VHFfc/oqEiAKC9QoCAgIBwg78iEiEPIBIgEKEMAgsgEUScdQCIPOQ3fqJEnHUAiDzkN36iIBFEWfP4wh9upQGiRFnz+MIfbqUBoiAFQQBKGw8FIA9EAAAAAAAAQEOiIgC9QiCIpyAEIARBgIDAAEkiBRshAkHMd0GBeCAFGyACQRR1aiEDIAJB//8/cSIEQYCAwP8DciECIARBj7EOSQRAQQAhBAUgBEH67C5JIgYhBCADIAZBAXNBAXFqIQMgAiACQYCAQGogBhshAgsgBEEDdEGwE2orAwAiFCACrUIghiAAIA8gBRu9Qv////8Pg4S/IhAgBEEDdEGQE2orAwAiEqEiE0QAAAAAAADwPyASIBCgoyIVoiIPvUKAgICAcIO/IgAgACAAoiIWRAAAAAAAAAhAoCAPIACgIBUgEyACQQF1QYCAgIACckGAgCBqIARBEnRqrUIghr8iEyAAoqEgECATIBKhoSAAoqGiIhCiIA8gD6IiACAAoiAAIAAgACAAIABE705FSih+yj+iRGXbyZNKhs0/oKJEAUEdqWB00T+gokRNJo9RVVXVP6CiRP+rb9u2bds/oKJEAzMzMzMz4z+goqAiEqC9QoCAgIBwg78iAKIiEyAQIACiIA8gEiAARAAAAAAAAAjAoCAWoaGioCIPoL1CgICAgHCDvyIARAAAAOAJx+4/oiIQIARBA3RBoBNqKwMAIA8gACAToaFE/QM63AnH7j+iIABE9QFbFOAvPj6ioaAiAKCgIAO3IhKgvUKAgICAcIO/IhMhDyATIBKhIBShIBChCwshECAAIBChIAGiIAEgDUKAgICAcIO/IgChIA+ioCEBIA8gAKIiACABoCIPvSINQiCIpyECIA2nIQMgAkH//7+EBEoEQCACQYCAwPt7aiADciABRP6CK2VHFZc8oCAPIAChZHINBgUgAkGA+P//B3FB/5fDhARLBEAgAkGA6Lz7A2ogA3IgASAPIAChZXINBgsLIBEgAkH/////B3EiA0GAgID/A0sEfyAAQYCAQEGAgMAAIANBFHZBgnhqdiACaiIDQRR2Qf8PcSIEQYF4anUgA3GtQiCGv6EiDyEAIAEgD6C9IQ1BACADQf//P3FBgIDAAHJBkwggBGt2IgNrIAMgAkEASBsFQQALIgJBFHREAAAAAAAA8D8gDUKAgICAcIO/Ig9EAAAAAEMu5j+iIhAgASAPIAChoUTvOfr+Qi7mP6IgD0Q5bKgMYVwgPqKhIg+gIgAgACAAIACiIgEgASABIAEgAUTQpL5yaTdmPqJE8WvSxUG9u76gokQs3iWvalYRP6CiRJO9vhZswWa/oKJEPlVVVVVVxT+goqEiAaIgAUQAAAAAAAAAwKCjIA8gACAQoaEiASAAIAGioKEgAKGhIgC9Ig1CIIinaiIDQYCAwABIBHwgACACEGUFIAOtQiCGIA1C/////w+DhL8LIgCiDwsLCyAAIAGgDwsgACAAoSIAIACjDwsgEURZ8/jCH26lAaJEWfP4wh9upQGiDwsgEUScdQCIPOQ3fqJEnHUAiDzkN36iCwMAAQvDAwEDfyACQYDAAE4EQCAAIAEgAhAHDwsgACEEIAAgAmohAyAAQQNxIAFBA3FGBEADQCAAQQNxBEAgAkUEQCAEDwsgACABLAAAOgAAIABBAWohACABQQFqIQEgAkEBayECDAELCyADQXxxIgJBQGohBQNAIAAgBUwEQCAAIAEoAgA2AgAgACABKAIENgIEIAAgASgCCDYCCCAAIAEoAgw2AgwgACABKAIQNgIQIAAgASgCFDYCFCAAIAEoAhg2AhggACABKAIcNgIcIAAgASgCIDYCICAAIAEoAiQ2AiQgACABKAIoNgIoIAAgASgCLDYCLCAAIAEoAjA2AjAgACABKAI0NgI0IAAgASgCODYCOCAAIAEoAjw2AjwgAEFAayEAIAFBQGshAQwBCwsDQCAAIAJIBEAgACABKAIANgIAIABBBGohACABQQRqIQEMAQsLBSADQQRrIQIDQCAAIAJIBEAgACABLAAAOgAAIAAgASwAAToAASAAIAEsAAI6AAIgACABLAADOgADIABBBGohACABQQRqIQEMAQsLCwNAIAAgA0gEQCAAIAEsAAA6AAAgAEEBaiEAIAFBAWohAQwBCwsgBAuYAgEEfyAAIAJqIQQgAUH/AXEhASACQcMATgRAA0AgAEEDcQRAIAAgAToAACAAQQFqIQAMAQsLIARBfHEiBUFAaiEGIAEgAUEIdHIgAUEQdHIgAUEYdHIhAwNAIAAgBkwEQCAAIAM2AgAgACADNgIEIAAgAzYCCCAAIAM2AgwgACADNgIQIAAgAzYCFCAAIAM2AhggACADNgIcIAAgAzYCICAAIAM2AiQgACADNgIoIAAgAzYCLCAAIAM2AjAgACADNgI0IAAgAzYCOCAAIAM2AjwgAEFAayEADAELCwNAIAAgBUgEQCAAIAM2AgAgAEEEaiEADAELCwsDQCAAIARIBEAgACABOgAAIABBAWohAAwBCwsgBCACawtVAQJ/IABBAEojBSgCACIBIABqIgAgAUhxIABBAEhyBEAQAxpBDBAFQX8PCyMFIAA2AgAQAiECIAAgAkoEQBABRQRAIwUgATYCAEEMEAVBfw8LCyABCw4AIAEgAiAAQQNxEQAACwgAQQAQAEEACwvAEQQAQYEIC7YKAQICAwMDAwQEBAQEBAQEAAEAAIAAAABWAAAAQAAAAD605DMJkfMzi7IBNDwgCjQjGhM0YKkcNKfXJjRLrzE0UDs9NHCHSTQjoFY0uJJkNFVtczSIn4E0/AuKNJMEkzRpkpw0Mr+mND+VsTSTH7005GnJNK2A1jQ2ceQ0pknzNIiMATXA9wk1Bu8SNXZ7HDXApiY1N3sxNdoDPTVeTEk1O2FWNblPZDX8JXM1inmBNYbjiTV82ZI1hWScNVKOpjUzYbE1Jei8NdwuyTXOQdY1QS7kNVcC8zWPZgE2T88JNvXDEjaYTRw26HUmNjJHMTZ0zDw2XhFJNmUiVjbODGQ2uN5yNpdTgTYcu4k2cq6SNq82nDaBXaY2NS2xNsewvDbk88g2AQPWNmDr4zYeu/I2okABN+umCTfxmBI3yR8cNx5FJjc9EzE3HpU8N2/WSDei41U398ljN4mXcjevLYE3vpKJN3SDkjfmCJw3viymN0f5sDd5ebw3/rjIN0fE1TeSqOM3+HPyN8AaATiTfgk4+W0SOAbyGzhiFCY4Vt8wONhdPDiSm0g48qRVODOHYzhuUHI40weBOGtqiTiCWJI4KtubOAn8pThoxbA4O0K8OCl+yDighdU42WXjOOgs8jjp9AA5RlYJOQ5DEjlRxBs5teMlOX+rMDmiJjw5xWBIOVNmVTmDRGM5aAlyOQHigDkkQok5nS2SOXutmzljy6U5mZGwOQ0LvDlmQ8g5C0fVOTIj4znt5fE5Hc8AOgUuCTowGBI6qZYbOhWzJTq3dzA6fO87OgomSDrHJ1U65gFjOnjCcTo7vIA66RmJOsYCkjrbf5s6y5qlOthdsDrv07s6swjIOogI1Tqf4OI6B5/xOlypADvQBQk7Xu0ROw9pGzuEgiU7/UMwO2e4Ozth60c7TelUO12/Yjuce3E7f5aAO7rxiDv515E7R1KbO0FqpTsnKrA74py7OxLOxzsXytQ7IJ7iOzVY8TumgwA8p90IPJjCETyCOxs8AVIlPFQQMDxhgTs8yLBHPOWqVDzofGI81DRxPM9wgDyWyYg8Oq2RPMAkmzzFOaU8hfavPOVluzyCk8c8uYvUPLRb4jx5EfE8+10APYm1CD3flxE9Ag4bPY0hJT253C89bUo7PUB2Rz2RbFQ9hTpiPSLucD0qS4A9f6GIPYiCkT1I95o9WAmlPfLCrz34Lrs9A1nHPW1N1D1cGeI90crwPVs4AD53jQg+M20RPpDgGj4n8SQ+LqkvPocTOz7KO0c+TS5UPjf4YT6Ep3A+jyWAPnN5iD7iV5E+3MmaPvnYpD5tj68+G/i6PpUexz4zD9Q+F9fhPj2E8D7GEgA/cmUIP5NCET8rsxo/zsAkP7F1Lz+y3Do/ZQFHPx3wUz/7tWE/+2BwPwAAgD8DAAAABAAAAAQAAAAGAAAAg/miAERObgD8KRUA0VcnAN009QBi28AAPJmVAEGQQwBjUf4Au96rALdhxQA6biQA0k1CAEkG4AAJ6i4AHJLRAOsd/gApsRwA6D6nAPU1ggBEuy4AnOmEALQmcABBfl8A1pE5AFODOQCc9DkAi1+EACj5vQD4HzsA3v+XAA+YBQARL+8AClqLAG0fbQDPfjYACcsnAEZPtwCeZj8ALepfALondQDl68cAPXvxAPc5BwCSUooA+2vqAB+xXwAIXY0AMANWAHv8RgDwq2sAILzPADb0mgDjqR0AXmGRAAgb5gCFmWUAoBRfAI1AaACA2P8AJ3NNAAYGMQDKVhUAyahzAHviYABrjMAAQcMSC11A+yH5PwAAAAAtRHQ+AAAAgJhG+DwAAABgUcx4OwAAAICDG/A5AAAAQCAlejgAAACAIoLjNgAAAAAd82k1AAAAAAAA4D8AAAAAAADgvwAAAAAAAPA/AAAAAAAA+D8AQagTCwgG0M9D6/1MPgBBuxMLigZAA7jiP09nZ1MuL3N0Yl92b3JiaXMuYwBmLT5hbGxvYy5hbGxvY19idWZmZXJfbGVuZ3RoX2luX2J5dGVzID09IGYtPnRlbXBfb2Zmc2V0AHZvcmJpc19kZWNvZGVfaW5pdGlhbABmLT5ieXRlc19pbl9zZWcgPiAwAGdldDhfcGFja2V0X3JhdwBmLT5ieXRlc19pbl9zZWcgPT0gMABuZXh0X3NlZ21lbnQAdm9yYmlzX2RlY29kZV9wYWNrZXRfcmVzdAAhYy0+c3BhcnNlAGNvZGVib29rX2RlY29kZV9zY2FsYXJfcmF3ACFjLT5zcGFyc2UgfHwgeiA8IGMtPnNvcnRlZF9lbnRyaWVzAGNvZGVib29rX2RlY29kZV9kZWludGVybGVhdmVfcmVwZWF0AHogPCBjLT5zb3J0ZWRfZW50cmllcwBjb2RlYm9va19kZWNvZGVfc3RhcnQAKG4gJiAzKSA9PSAwAGltZGN0X3N0ZXAzX2l0ZXIwX2xvb3AAMABnZXRfd2luZG93AGYtPnRlbXBfb2Zmc2V0ID09IGYtPmFsbG9jLmFsbG9jX2J1ZmZlcl9sZW5ndGhfaW5fYnl0ZXMAc3RhcnRfZGVjb2RlcgB2b3JiaXNjLT5zb3J0ZWRfZW50cmllcyA9PSAwAGNvbXB1dGVfY29kZXdvcmRzAHogPj0gMCAmJiB6IDwgMzIAbGVuW2ldID49IDAgJiYgbGVuW2ldIDwgMzIAYXZhaWxhYmxlW3ldID09IDAAayA9PSBjLT5zb3J0ZWRfZW50cmllcwBjb21wdXRlX3NvcnRlZF9odWZmbWFuAGMtPnNvcnRlZF9jb2Rld29yZHNbeF0gPT0gY29kZQBsZW4gIT0gTk9fQ09ERQBpbmNsdWRlX2luX3NvcnQAcG93KChmbG9hdCkgcisxLCBkaW0pID4gZW50cmllcwBsb29rdXAxX3ZhbHVlcwAoaW50KSBmbG9vcihwb3coKGZsb2F0KSByLCBkaW0pKSA8PSBlbnRyaWVzAOoPBG5hbWUB4g9+AAVhYm9ydAENZW5sYXJnZU1lbW9yeQIOZ2V0VG90YWxNZW1vcnkDF2Fib3J0T25DYW5ub3RHcm93TWVtb3J5BA5fX19hc3NlcnRfZmFpbAULX19fc2V0RXJyTm8GBl9hYm9ydAcWX2Vtc2NyaXB0ZW5fbWVtY3B5X2JpZwgQX19ncm93V2FzbU1lbW9yeQkKc3RhY2tBbGxvYwoJc3RhY2tTYXZlCwxzdGFja1Jlc3RvcmUME2VzdGFibGlzaFN0YWNrU3BhY2UNCHNldFRocmV3DgtzZXRUZW1wUmV0MA8LZ2V0VGVtcFJldDAQEV9zdGJfdm9yYmlzX2Nsb3NlEQ5fdm9yYmlzX2RlaW5pdBILX3NldHVwX2ZyZWUTGl9zdGJfdm9yYmlzX2ZsdXNoX3B1c2hkYXRhFCFfc3RiX3ZvcmJpc19kZWNvZGVfZnJhbWVfcHVzaGRhdGEVBl9lcnJvchYgX3ZvcmJpc19zZWFyY2hfZm9yX3BhZ2VfcHVzaGRhdGEXGF9pc193aG9sZV9wYWNrZXRfcHJlc2VudBgVX3ZvcmJpc19kZWNvZGVfcGFja2V0GQxfZ2V0OF9wYWNrZXQaFF92b3JiaXNfZmluaXNoX2ZyYW1lGxlfc3RiX3ZvcmJpc19vcGVuX3B1c2hkYXRhHAxfdm9yYmlzX2luaXQdDl9zdGFydF9kZWNvZGVyHg1fdm9yYmlzX2FsbG9jHxtfc3RiX3ZvcmJpc19nZXRfZmlsZV9vZmZzZXQgE19tYXliZV9zdGFydF9wYWNrZXQhDV9mbHVzaF9wYWNrZXQiBV9nZXRuIwZfZ2V0MzIkE19zdGJfdm9yYmlzX2pzX29wZW4lFF9zdGJfdm9yYmlzX2pzX2Nsb3NlJhdfc3RiX3ZvcmJpc19qc19jaGFubmVscycaX3N0Yl92b3JiaXNfanNfc2FtcGxlX3JhdGUoFV9zdGJfdm9yYmlzX2pzX2RlY29kZSkNX2NyYzMyX3VwZGF0ZSoWX3ZvcmJpc19kZWNvZGVfaW5pdGlhbCsaX3ZvcmJpc19kZWNvZGVfcGFja2V0X3Jlc3QsCV9nZXRfYml0cy0FX2lsb2cuEF9nZXQ4X3BhY2tldF9yYXcvDV9uZXh0X3NlZ21lbnQwBV9nZXQ4MQtfc3RhcnRfcGFnZTIQX2NhcHR1cmVfcGF0dGVybjMdX3N0YXJ0X3BhZ2Vfbm9fY2FwdHVyZXBhdHRlcm40DV9wcmVwX2h1ZmZtYW41G19jb2RlYm9va19kZWNvZGVfc2NhbGFyX3JhdzYOX3ByZWRpY3RfcG9pbnQ3D19kZWNvZGVfcmVzaWR1ZTgJX2RvX2Zsb29yOQ1faW52ZXJzZV9tZGN0OgxfYml0X3JldmVyc2U7EV9tYWtlX2Jsb2NrX2FycmF5PBJfc2V0dXBfdGVtcF9tYWxsb2M9JF9jb2RlYm9va19kZWNvZGVfZGVpbnRlcmxlYXZlX3JlcGVhdD4PX3Jlc2lkdWVfZGVjb2RlPxVfY29kZWJvb2tfZGVjb2RlX3N0ZXBAEF9jb2RlYm9va19kZWNvZGVBFl9jb2RlYm9va19kZWNvZGVfc3RhcnRCCl9kcmF3X2xpbmVDF19pbWRjdF9zdGVwM19pdGVyMF9sb29wRBlfaW1kY3Rfc3RlcDNfaW5uZXJfcl9sb29wRRlfaW1kY3Rfc3RlcDNfaW5uZXJfc19sb29wRh9faW1kY3Rfc3RlcDNfaW5uZXJfc19sb29wX2xkNjU0RwhfaXRlcl81NEgLX2dldF93aW5kb3dJEF92b3JiaXNfdmFsaWRhdGVKDV9zdGFydF9wYWNrZXRLBV9za2lwTAtfY3JjMzJfaW5pdE0NX3NldHVwX21hbGxvY04QX3NldHVwX3RlbXBfZnJlZU8SX2NvbXB1dGVfY29kZXdvcmRzUBdfY29tcHV0ZV9zb3J0ZWRfaHVmZm1hblEcX2NvbXB1dGVfYWNjZWxlcmF0ZWRfaHVmZm1hblIPX2Zsb2F0MzJfdW5wYWNrUw9fbG9va3VwMV92YWx1ZXNUDl9wb2ludF9jb21wYXJlVQpfbmVpZ2hib3JzVg9faW5pdF9ibG9ja3NpemVXCl9hZGRfZW50cnlYEF9pbmNsdWRlX2luX3NvcnRZD191aW50MzJfY29tcGFyZVoYX2NvbXB1dGVfdHdpZGRsZV9mYWN0b3JzWw9fY29tcHV0ZV93aW5kb3dcE19jb21wdXRlX2JpdHJldmVyc2VdB19zcXVhcmVeB19tYWxsb2NfBV9mcmVlYAhfcmVhbGxvY2ESX3RyeV9yZWFsbG9jX2NodW5rYg5fZGlzcG9zZV9jaHVua2MRX19fZXJybm9fbG9jYXRpb25kB19tZW1jbXBlB19zY2FsYm5mBl9xc29ydGcFX3NpZnRoBF9zaHJpCF90cmlua2xlagRfc2hsawVfcG50emwIX2FfY3R6X2xtBl9jeWNsZW4LX19fcmVtX3BpbzJvEV9fX3JlbV9waW8yX2xhcmdlcAZfX19zaW5xBl9sZGV4cHIGX19fY29zcwRfY29zdARfc2ludQRfZXhwdgRfbG9ndwRfcG93eAtydW5Qb3N0U2V0c3kHX21lbWNweXoHX21lbXNldHsFX3Nicmt8C2R5bkNhbGxfaWlpfQJiMA=="),function(v){return v.charCodeAt(0)});var g=g!==void 0?g:{},E={};for(t in g)g.hasOwnProperty(t)&&(E[t]=g[t]);g.arguments=[],g.thisProgram="./this.program",g.quit=function(v,b){throw b},g.preRun=[],g.postRun=[];var S=!1,k=!1,u=!1,M=!1;S=typeof window=="object",k=typeof importScripts=="function",u=typeof process=="object"&&typeof aaa=="function"&&!S&&!k,M=!S&&!u&&!k;var w="";function R(v){return g.locateFile?g.locateFile(v,w):w+v}u?(w="/",g.read=function(b,L){var _;return e||(e=void 0),A||(A=void 0),b=A.normalize(b),_=e.readFileSync(b),L?_:_.toString()},g.readBinary=function(b){var L=g.read(b,!0);return L.buffer||(L=new Uint8Array(L)),q(L.buffer),L},process.argv.length>1&&(g.thisProgram=process.argv[1].replace(/\\/g,"/")),g.arguments=process.argv.slice(2),process.on("uncaughtException",function(v){if(!(v instanceof Ke))throw v}),process.on("unhandledRejection",function(v,b){process.exit(1)}),g.quit=function(v){process.exit(v)},g.inspect=function(){return"[Emscripten Module object]"}):M?(typeof read<"u"&&(g.read=function(b){return read(b)}),g.readBinary=function(b){var L;return typeof readbuffer=="function"?new Uint8Array(readbuffer(b)):(q(typeof(L=read(b,"binary"))=="object"),L)},typeof scriptArgs<"u"?g.arguments=scriptArgs:typeof arguments<"u"&&(g.arguments=arguments),typeof quit=="function"&&(g.quit=function(v){quit(v)})):(S||k)&&(S?document.currentScript&&(w=document.currentScript.src):w=self.location.href,w=w.indexOf("blob:")!==0?w.split("/").slice(0,-1).join("/")+"/":"",g.read=function(b){var L=new XMLHttpRequest;return L.open("GET",b,!1),L.send(null),L.responseText},k&&(g.readBinary=function(b){var L=new XMLHttpRequest;return L.open("GET",b,!1),L.responseType="arraybuffer",L.send(null),new Uint8Array(L.response)}),g.readAsync=function(b,L,_){var ie=new XMLHttpRequest;ie.open("GET",b,!0),ie.responseType="arraybuffer",ie.onload=function(){if(ie.status==200||ie.status==0&&ie.response){L(ie.response);return}_()},ie.onerror=_,ie.send(null)},g.setWindowTitle=function(v){document.title=v});var F=g.print||(typeof console<"u"?console.log.bind(console):typeof print<"u"?print:null),N=g.printErr||(typeof printErr<"u"?printErr:typeof console<"u"&&console.warn.bind(console)||F);for(t in E)E.hasOwnProperty(t)&&(g[t]=E[t]);function m(v){var b=o;return o=o+v+15&-16,b}function p(v,b){return b||(b=16),v=Math.ceil(v/b)*b}function y(v){y.shown||(y.shown={}),y.shown[v]||(y.shown[v]=1,N(v))}E=void 0;var V={"f64-rem":function(v,b){return v%b},debugger:function(){}},Y=0;function q(v,b){v||tt("Assertion failed: "+b)}function J(v){var b=g["_"+v];return q(b,"Cannot call unknown function "+v+", make sure it is exported"),b}var te={stackSave:function(){Rt()},stackRestore:function(){dt()},arrayToC:function(v){var b,L,_=It(v.length);return b=v,L=_,a.set(b,L),_},stringToC:function(v){var b=0;if(v!=null&&v!==0){var L=(v.length<<2)+1;b=It(L),z(v,b,L)}return b}},x={string:te.stringToC,array:te.arrayToC};function D(v,b,L,_,ie){var ce=J(v),fe=[],$=0;if(_)for(var Te=0;Te<_.length;Te++){var Me=x[L[Te]];Me?($===0&&($=Rt()),fe[Te]=Me(_[Te])):fe[Te]=_[Te]}var oe,Be=ce.apply(null,fe);return Be=(oe=Be,b==="string"?Q(oe):b==="boolean"?!!oe:oe),$!==0&&dt($),Be}function Q(v,b){if(b===0||!v)return"";for(var L,_,ie,ce=0,fe=0;ce|=_=n[v+fe>>0],(_!=0||b)&&(fe++,!b||fe!=b););b||(b=fe);var $="";if(ce<128){for(;b>0;)ie=String.fromCharCode.apply(String,n.subarray(v,v+Math.min(b,1024))),$=$?$+ie:ie,v+=1024,b-=1024;return $}return L=v,(function(Me,oe){for(var Be=oe;Me[Be];)++Be;if(Be-oe>16&&Me.subarray&&T)return T.decode(Me.subarray(oe,Be));for(var he,xe,He,At,mt,ct="";;){if(!(he=Me[oe++]))return ct;if(!(128&he)){ct+=String.fromCharCode(he);continue}if(xe=63&Me[oe++],(224&he)==192){ct+=String.fromCharCode((31&he)<<6|xe);continue}if(He=63&Me[oe++],(240&he)==224?he=(15&he)<<12|xe<<6|He:(At=63&Me[oe++],(248&he)==240?he=(7&he)<<18|xe<<12|He<<6|At:(mt=63&Me[oe++],he=(252&he)==248?(3&he)<<24|xe<<18|He<<12|At<<6|mt:(1&he)<<30|xe<<24|He<<18|At<<12|mt<<6|63&Me[oe++])),he<65536)ct+=String.fromCharCode(he);else{var st=he-65536;ct+=String.fromCharCode(55296|st>>10,56320|1023&st)}}})(n,L)}var T=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0;function H(v,b,L,_){if(!(_>0))return 0;for(var ie=L,ce=L+_-1,fe=0;fe<v.length;++fe){var $=v.charCodeAt(fe);if($>=55296&&$<=57343&&($=65536+((1023&$)<<10)|1023&v.charCodeAt(++fe)),$<=127){if(L>=ce)break;b[L++]=$}else if($<=2047){if(L+1>=ce)break;b[L++]=192|$>>6,b[L++]=128|63&$}else if($<=65535){if(L+2>=ce)break;b[L++]=224|$>>12,b[L++]=128|$>>6&63,b[L++]=128|63&$}else if($<=2097151){if(L+3>=ce)break;b[L++]=240|$>>18,b[L++]=128|$>>12&63,b[L++]=128|$>>6&63,b[L++]=128|63&$}else if($<=67108863){if(L+4>=ce)break;b[L++]=248|$>>24,b[L++]=128|$>>18&63,b[L++]=128|$>>12&63,b[L++]=128|$>>6&63,b[L++]=128|63&$}else{if(L+5>=ce)break;b[L++]=252|$>>30,b[L++]=128|$>>24&63,b[L++]=128|$>>18&63,b[L++]=128|$>>12&63,b[L++]=128|$>>6&63,b[L++]=128|63&$}}return b[L]=0,L-ie}function z(v,b,L){return H(v,n,b,L)}typeof TextDecoder<"u"&&new TextDecoder("utf-16le");function j(v,b){return v%b>0&&(v+=b-v%b),v}function W(v){g.buffer=s=v}function K(){g.HEAP8=a=new Int8Array(s),g.HEAP16=new Int16Array(s),g.HEAP32=r=new Int32Array(s),g.HEAPU8=n=new Uint8Array(s),g.HEAPU16=new Uint16Array(s),g.HEAPU32=new Uint32Array(s),g.HEAPF32=new Float32Array(s),g.HEAPF64=new Float64Array(s)}function ee(){var v=g.usingWasm?65536:16777216,b=2147483648-v;if(r[C>>2]>b)return!1;var L=O;for(O=Math.max(O,16777216);O<r[C>>2];)O=O<=536870912?j(2*O,v):Math.min(j((3*O+2147483648)/4,v),b);var _=g.reallocBuffer(O);return _&&_.byteLength==O?(W(_),K(),!0):(O=L,!1)}i=o=I=l=B=C=0,g.reallocBuffer||(g.reallocBuffer=function(v){try{if(ArrayBuffer.transfer)b=ArrayBuffer.transfer(s,v);else{var b,L=a;b=new ArrayBuffer(v),new Int8Array(b).set(L)}}catch{return!1}return!!ze(b)&&b});try{Function.prototype.call.bind(Object.getOwnPropertyDescriptor(ArrayBuffer.prototype,"byteLength").get)(new ArrayBuffer(4))}catch{}var Ae=g.TOTAL_STACK||5242880,O=g.TOTAL_MEMORY||16777216;function re(){return O}function ue(v){for(;v.length>0;){var b=v.shift();if(typeof b=="function"){b();continue}var L=b.func;typeof L=="number"?b.arg===void 0?g.dynCall_v(L):g.dynCall_vi(L,b.arg):L(b.arg===void 0?null:b.arg)}}O<Ae&&N("TOTAL_MEMORY should be larger than TOTAL_STACK, was "+O+"! (TOTAL_STACK="+Ae+")"),g.buffer?s=g.buffer:(typeof WebAssembly=="object"&&typeof WebAssembly.Memory=="function"?(g.wasmMemory=new WebAssembly.Memory({initial:O/65536}),s=g.wasmMemory.buffer):s=new ArrayBuffer(O),g.buffer=s),K();var Le=[],Ee=[],Re=[],Oe=[],Bt=!1;function Et(v){Le.unshift(v)}function eA(v){Oe.unshift(v)}var tA=Math.floor,Je=0,Qt=null,ve=null;g.preloadedImages={},g.preloadedAudios={};var Yt="data:application/octet-stream;base64,";function bt(v){return String.prototype.startsWith?v.startsWith(Yt):v.indexOf(Yt)===0}(function(){var b="main.wast",L="main.wasm",_="main.temp.asm";bt(b)||(b=R(b)),bt(L)||(L=R(L)),bt(_)||(_=R(_));var ie={global:null,env:null,asm2wasm:V,parent:g},ce=null;function fe(){try{if(g.wasmBinary)return new Uint8Array(g.wasmBinary);if(g.readBinary)return g.readBinary(L);throw"both async and sync fetching of the wasm failed"}catch(oe){tt(oe)}}g.asmPreload=g.asm;var $=g.reallocBuffer,Te=function(oe){oe=j(oe,g.usingWasm?65536:16777216);var Be=g.buffer.byteLength;if(g.usingWasm)try{return g.wasmMemory.grow((oe-Be)/65536)!==-1?g.buffer=g.wasmMemory.buffer:null}catch{return null}};g.reallocBuffer=function(oe){return Me==="asmjs"?$(oe):Te(oe)};var Me="";g.asm=function(oe,Be,he){if(!(Be=Be).table){var xe,He=g.wasmTableSize;He===void 0&&(He=1024);var At=g.wasmMaxTableSize;typeof WebAssembly=="object"&&typeof WebAssembly.Table=="function"?At!==void 0?Be.table=new WebAssembly.Table({initial:He,maximum:At,element:"anyfunc"}):Be.table=new WebAssembly.Table({initial:He,element:"anyfunc"}):Be.table=Array(He),g.wasmTable=Be.table}return Be.memoryBase||(Be.memoryBase=g.STATIC_BASE),Be.tableBase||(Be.tableBase=0),xe=(function(ct,st,Ss){if(typeof WebAssembly!="object")return N("no native wasm support detected"),!1;if(!(g.wasmMemory instanceof WebAssembly.Memory))return N("no native wasm Memory in use"),!1;function vt(Ve,rt){if((ce=Ve.exports).memory){var sA=ce.memory,ks=g.buffer,Ds;sA.byteLength<ks.byteLength&&N("the new buffer in mergeMemory is smaller than the previous one. in native wasm, we should grow memory here"),Ds=new Int8Array(ks),new Int8Array(sA).set(Ds),W(sA),K()}g.asm=ce,g.usingWasm=!0,(function(Qi){if(Je--,g.monitorRunDependencies&&g.monitorRunDependencies(Je),Je==0&&(Qt!==null&&(clearInterval(Qt),Qt=null),ve)){var qn=ve;ve=null,qn()}})("wasm-instantiate")}if(st.memory=g.wasmMemory,ie.global={NaN:NaN,Infinity:1/0},ie["global.Math"]=Math,ie.env=st,Je++,g.monitorRunDependencies&&g.monitorRunDependencies(Je),g.instantiateWasm)try{return g.instantiateWasm(ie,vt)}catch(Ve){return N("Module.instantiateWasm callback failed with error: "+Ve),!1}function Ft(Ve){vt(Ve.instance,Ve.module)}function AA(Ve){(!g.wasmBinary&&(S||k)&&typeof fetch=="function"?fetch(L,{credentials:"same-origin"}).then(function(rt){if(!rt.ok)throw"failed to load wasm binary file at '"+L+"'";return rt.arrayBuffer()}).catch(function(){return fe()}):new Promise(function(rt,sA){rt(fe())})).then(function(rt){return WebAssembly.instantiate(rt,ie)}).then(Ve).catch(function(rt){N("failed to asynchronously prepare wasm: "+rt),tt(rt)})}return g.wasmBinary||typeof WebAssembly.instantiateStreaming!="function"||bt(L)||typeof fetch!="function"?AA(Ft):WebAssembly.instantiateStreaming(fetch(L,{credentials:"same-origin"}),ie).then(Ft).catch(function(Ve){N("wasm streaming compile failed: "+Ve),N("falling back to ArrayBuffer instantiation"),AA(Ft)}),{}})(oe,Be,he),q(xe,"no binaryen method succeeded."),xe},g.asm})(),o=(i=1024)+4816,Ee.push(),g.STATIC_BASE=i,g.STATIC_BUMP=4816;var UA=o;o+=16,C=m(4),l=(I=p(o))+Ae,B=p(l),r[C>>2]=B,g.wasmTableSize=4,g.wasmMaxTableSize=4,g.asmGlobalArg={},g.asmLibraryArg={abort:tt,assert:q,enlargeMemory:ee,getTotalMemory:re,abortOnCannotGrowMemory:function(){tt("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+O+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime, or (3) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")},invoke_iii:function(b,L,_){var ie=Rt();try{return g.dynCall_iii(b,L,_)}catch(ce){if(dt(ie),typeof ce!="number"&&ce!=="longjmp")throw ce;g.setThrew(1,0)}},___assert_fail:function(b,L,_,ie){tt("Assertion failed: "+Q(b)+", at: "+[L?Q(L):"unknown filename",_,ie?Q(ie):"unknown function"])},___setErrNo:function(b){return g.___errno_location&&(r[g.___errno_location()>>2]=b),b},_abort:function(){g.abort()},_emscripten_memcpy_big:function(b,L,_){return n.set(n.subarray(L,L+_),b),b},_llvm_floor_f64:tA,DYNAMICTOP_PTR:C,tempDoublePtr:UA,ABORT:Y,STACKTOP:I,STACK_MAX:l};var qt=g.asm(g.asmGlobalArg,g.asmLibraryArg,s);g.asm=qt,g.___errno_location=function(){return g.asm.___errno_location.apply(null,arguments)};var ze=g._emscripten_replace_memory=function(){return g.asm._emscripten_replace_memory.apply(null,arguments)};g._free=function(){return g.asm._free.apply(null,arguments)},g._malloc=function(){return g.asm._malloc.apply(null,arguments)},g._memcpy=function(){return g.asm._memcpy.apply(null,arguments)},g._memset=function(){return g.asm._memset.apply(null,arguments)},g._sbrk=function(){return g.asm._sbrk.apply(null,arguments)},g._stb_vorbis_js_channels=function(){return g.asm._stb_vorbis_js_channels.apply(null,arguments)},g._stb_vorbis_js_close=function(){return g.asm._stb_vorbis_js_close.apply(null,arguments)},g._stb_vorbis_js_decode=function(){return g.asm._stb_vorbis_js_decode.apply(null,arguments)},g._stb_vorbis_js_open=function(){return g.asm._stb_vorbis_js_open.apply(null,arguments)},g._stb_vorbis_js_sample_rate=function(){return g.asm._stb_vorbis_js_sample_rate.apply(null,arguments)},g.establishStackSpace=function(){return g.asm.establishStackSpace.apply(null,arguments)},g.getTempRet0=function(){return g.asm.getTempRet0.apply(null,arguments)},g.runPostSets=function(){return g.asm.runPostSets.apply(null,arguments)},g.setTempRet0=function(){return g.asm.setTempRet0.apply(null,arguments)},g.setThrew=function(){return g.asm.setThrew.apply(null,arguments)};var It=g.stackAlloc=function(){return g.asm.stackAlloc.apply(null,arguments)},dt=g.stackRestore=function(){return g.asm.stackRestore.apply(null,arguments)},Rt=g.stackSave=function(){return g.asm.stackSave.apply(null,arguments)};function Ke(v){this.name="ExitStatus",this.message="Program terminated with exit("+v+")",this.status=v}function ut(v){v=v||g.arguments,!(Je>0)&&((function(){if(g.preRun)for(typeof g.preRun=="function"&&(g.preRun=[g.preRun]);g.preRun.length;)Et(g.preRun.shift());ue(Le)})(),!(Je>0)&&(g.calledRun||(g.setStatus?(g.setStatus("Running..."),setTimeout(function(){setTimeout(function(){g.setStatus("")},1),b()},1)):b())));function b(){!g.calledRun&&(g.calledRun=!0,Y||(Bt||(Bt=!0,ue(Ee)),ue(Re),g.onRuntimeInitialized&&g.onRuntimeInitialized(),(function(){if(g.postRun)for(typeof g.postRun=="function"&&(g.postRun=[g.postRun]);g.postRun.length;)eA(g.postRun.shift());ue(Oe)})()))}}function tt(v){throw g.onAbort&&g.onAbort(v),v!==void 0?(F(v),N(v),v=JSON.stringify(v)):v="",Y=!0,"abort("+v+"). Build with -s ASSERTIONS=1 for more info."}if(g.dynCall_iii=function(){return g.asm.dynCall_iii.apply(null,arguments)},g.asm=qt,g.ccall=D,g.cwrap=function(b,L,_,ie){var ce=(_=_||[]).every(function(fe){return fe==="number"});return L!=="string"&&ce&&!ie?J(b):function(){return D(b,L,_,arguments,ie)}},Ke.prototype=Error(),Ke.prototype.constructor=Ke,ve=function v(){g.calledRun||ut(),g.calledRun||(ve=v)},g.run=ut,g.abort=tt,g.preInit)for(typeof g.preInit=="function"&&(g.preInit=[g.preInit]);g.preInit.length>0;)g.preInit.pop()();g.noExitRuntime=!0,ut(),g.onRuntimeInitialized=()=>{Rs=!0,gn()},Wt.decode=function(v){return(function(L){if(!Rs)throw Error("SF3 decoder has not been initialized yet. Did you await synth.isReady?");var _={};function ie(vt){return new Int32Array(g.HEAPU8.buffer,vt,1)[0]}function ce(vt,Ft){var AA=new ArrayBuffer(Ft*Float32Array.BYTES_PER_ELEMENT),Ve=new Float32Array(AA);return Ve.set(new Float32Array(g.HEAPU8.buffer,vt,Ft)),Ve}_.open=g.cwrap("stb_vorbis_js_open","number",[]),_.close=g.cwrap("stb_vorbis_js_close","void",["number"]),_.channels=g.cwrap("stb_vorbis_js_channels","number",["number"]),_.sampleRate=g.cwrap("stb_vorbis_js_sample_rate","number",["number"]),_.decode=g.cwrap("stb_vorbis_js_decode","number",["number","number","number","number","number"]);var fe,$,Te,Me,oe=_.open(),Be=(fe=L,$=L.byteLength,Te=g._malloc($),(Me=new Uint8Array(g.HEAPU8.buffer,Te,$)).set(new Uint8Array(fe,0,$)),Me),he=g._malloc(4),xe=g._malloc(4),He=_.decode(oe,Be.byteOffset,Be.byteLength,he,xe);if(g._free(Be.byteOffset),He<0)throw _.close(oe),g._free(he),Error("stbvorbis decode failed: "+He);for(var At=_.channels(oe),mt=Array(At),ct=new Int32Array(g.HEAPU32.buffer,ie(he),At),st=0;st<At;st++)mt[st]=ce(ct[st],He),g._free(ct[st]);var Ss=_.sampleRate(oe);return _.close(oe),g._free(ie(he)),g._free(he),{data:mt,sampleRate:Ss,eof:!0,error:null}})(v)}})();var vA=Wt,wa={effectsEnabled:!0,maxBufferSize:128,initialTime:0,eventsEnabled:!0};var Ma=class{keyMappings=[];addMapping(t,e,A){this.keyMappings[t]??=[],this.keyMappings[t][e]=A}deleteMapping(t,e){this.keyMappings[t]?.[e]!==void 0&&(this.keyMappings[t][e]=void 0)}clearMappings(){this.keyMappings=[]}setMappings(t){this.keyMappings=t}getMappings(){return this.keyMappings}getVelocity(t,e){return this.keyMappings[t]?.[e]?.velocity??-1}getGain(t,e){return this.keyMappings[t]?.[e]?.gain??1}hasOverridePatch(t,e){let A=this.keyMappings[t]?.[e]?.patch?.bankMSB;return A!==void 0&&A>=0}getPatch(t,e){let A=this.keyMappings[t]?.[e];if(A)return A.patch;throw new Error("No modifier.")}};function ba(t){for(this.keyModifierManager.setMappings(t.keyMappings);this.midiChannels.length<t.midiChannels.length;)this.createMIDIChannel(!0);for(let A=0;A<t.midiChannels.length;A++)this.midiChannels[A].applySnapshot(t.midiChannels[A]);for(let[A,s]of Object.entries(t.reverbProcessor))this.reverbProcessor[A]=s;for(let[A,s]of Object.entries(this.chorusProcessor))this.chorusProcessor[A]=s;for(let[A,s]of Object.entries(this.delayProcessor))this.delayProcessor[A]=s;let e=t.insertionProcessor;this.systemExclusive(ae.gs(64,3,0,[e.type>>8,e.type&127]));for(let A=0;A<e.params.length;A++)e.params[A]!==255&&this.systemExclusive(ae.gs(64,3,3+A,[e.params[A]]));for(let[A,s]of Object.entries(t.midiParameters))this.setMIDIParameter(A,s);for(let[A,s]of Object.entries(t.lockedMIDIParameters))this.lockMIDIParameter(A,s);for(let[A,s]of Object.entries(t.systemParameters))this.setSystemParameter(A,s)}function Ra(){return{midiParameters:{...this.midiParameters},lockedMIDIParameters:{...this.lockedMIDIParameters},systemParameters:{...this.systemParameters},midiChannels:this.midiChannels.map(t=>t.getSnapshot()),keyMappings:this.keyModifierManager.getMappings(),reverbProcessor:this.reverbProcessor.getSnapshot(),chorusProcessor:this.chorusProcessor.getSnapshot(),delayProcessor:this.delayProcessor.getSnapshot(),insertionProcessor:this.getInsertionSnapshot()}}var In={effectsEnabled:!0,eventsEnabled:!0,voiceCap:350,autoAllocateVoices:!1,reverbGain:1,reverbLock:!1,chorusGain:1,chorusLock:!1,delayGain:1,delayLock:!1,insertionEffectLock:!1,drumLock:!1,blackMIDIMode:!1,deviceID:-1,gain:1,pan:0,keyShift:0,fineTune:0,interpolationType:ka.hermite,nrpnParamLock:!1,monophonicRetrigger:!1};function va(t,e){if(this.systemParameters[t]===e)return;let A=this.systemParameters[t];this.systemParameters[t]=e;for(let s of this.midiChannels)s.updateInternalParams();switch(t){default:break;case"voiceCap":{let s=Math.min(e,1e6);this.systemParameters.voiceCap=s;for(let a=s;a<this.voices.length;a++)this.voices[a].isActive=!1;s>this.voices.length&&(h.warn(`Allocating ${s-this.voices.length} new voices!`),this.allocateNewVoices(s-this.voices.length));break}case"keyShift":A!==e&&this.stopAllChannels(!0)}}var ds=-15e3,es=new Float32Array(15e3-ds+1);for(let t=0;t<es.length;t++){let e=ds+t;es[t]=Math.pow(2,e/1200)}function pA(t){return t<=-32767?0:es[t-ds]}var yA=-2e4,cn=16500,ts=new Float32Array(cn-yA+1);for(let t=0;t<ts.length;t++){let e=yA+t;ts[t]=440*Math.pow(2,(e-6900)/1200)}function As(t){return t<yA||t>cn?440*Math.pow(2,(t-6900)/1200):ts[t-yA|0]}var Tt=-16600,Ut=new Float32Array(16e3-Tt+1);for(let t=0;t<Ut.length;t++){let e=Tt+t;Ut[t]=Math.pow(10,-e/200)}function SA(t){return Ut[t-Tt|0]}var Fa=.03,fs=class Vt{static smoothingConstant=1;static cachedCoefficients=new Map;resonanceCb=0;currentInitialFc=13500;a0=0;a1=0;a2=0;a3=0;a4=0;x1=0;x2=0;y1=0;y2=0;lastTargetCutoff=1/0;initialized=!1;sampleRate;maxCutoff;constructor(e){this.sampleRate=e,this.maxCutoff=e*.45}static initCache(e){Vt.smoothingConstant=Fa*(44100/e);let A=new Vt(e);A.resonanceCb=0;for(let s=8e3;s<13500;s++)A.currentInitialFc=s,A.calculateCoefficients(s)}init(){this.lastTargetCutoff=1/0,this.resonanceCb=0,this.currentInitialFc=13500,this.a0=0,this.a1=0,this.a2=0,this.a3=0,this.a4=0,this.x1=0,this.x2=0,this.y1=0,this.y2=0,this.initialized=!1}calculateCoefficients(e){e=e|0;let A=this.resonanceCb,s=Vt.cachedCoefficients.get(A+e*961);if(s!==void 0){this.a0=s.a0,this.a1=s.a1,this.a2=s.a2,this.a3=s.a3,this.a4=s.a4;return}let a=As(e);a=Math.min(a,this.maxCutoff);let n=SA(-(A-3.01)),r=1/Math.sqrt(SA(-A)),i=2*Math.PI*a/this.sampleRate,o=Math.cos(i),I=Math.sin(i)/(2*n),l=(1-o)*r,B=l/2,C=B,g=1+I,E=-2*o,S=1-I,k={a0:B/g,a1:l/g,a2:C/g,a3:E/g,a4:S/g};this.a0=k.a0,this.a1=k.a1,this.a2=k.a2,this.a3=k.a3,this.a4=k.a4,Vt.cachedCoefficients.set(A+e*961,k)}},c=Object.freeze({invalid:-1,startAddrsOffset:0,endAddrOffset:1,startloopAddrsOffset:2,endloopAddrsOffset:3,startAddrsCoarseOffset:4,modLfoToPitch:5,vibLfoToPitch:6,modEnvToPitch:7,initialFilterFc:8,initialFilterQ:9,modLfoToFilterFc:10,modEnvToFilterFc:11,endAddrsCoarseOffset:12,modLfoToVolume:13,chorusEffectsSend:15,reverbEffectsSend:16,pan:17,delayModLFO:21,freqModLFO:22,delayVibLFO:23,freqVibLFO:24,delayModEnv:25,attackModEnv:26,holdModEnv:27,decayModEnv:28,sustainModEnv:29,releaseModEnv:30,keyNumToModEnvHold:31,keyNumToModEnvDecay:32,delayVolEnv:33,attackVolEnv:34,holdVolEnv:35,decayVolEnv:36,sustainVolEnv:37,releaseVolEnv:38,keyNumToVolEnvHold:39,keyNumToVolEnvDecay:40,instrument:41,keyRange:43,velRange:44,startloopAddrsCoarseOffset:45,keyNum:46,velocity:47,initialAttenuation:48,endloopAddrsCoarseOffset:50,coarseTune:51,fineTune:52,sampleID:53,sampleModes:54,scaleTuning:56,exclusiveClass:57,overridingRootKey:58,endOper:60,amplitude:61,vibLfoRate:62,vibLfoAmplitudeDepth:63,vibLfoToFilterFc:64,modLfoRate:65,modLfoAmplitudeDepth:66}),hn=Math.max(...Object.values(c)),Dt=hn+1,We=Object.freeze({[c.invalid]:{min:0,max:0,def:0,nrpn:0},[c.endOper]:{min:0,max:0,def:0,nrpn:0},[c.instrument]:{min:0,max:0,def:0,nrpn:0},[c.sampleID]:{min:0,max:0,def:0,nrpn:0},[c.keyRange]:{min:0,max:0,def:0,nrpn:0},[c.velRange]:{min:0,max:0,def:0,nrpn:0},[c.startAddrsOffset]:{min:0,max:32768,def:0,nrpn:1},[c.endAddrOffset]:{min:-32768,max:32768,def:0,nrpn:1},[c.startloopAddrsOffset]:{min:-32768,max:32768,def:0,nrpn:1},[c.endloopAddrsOffset]:{min:-32768,max:32768,def:0,nrpn:1},[c.startAddrsCoarseOffset]:{min:0,max:32768,def:0,nrpn:1},[c.modLfoToPitch]:{min:-12e3,max:12e3,def:0,nrpn:2},[c.vibLfoToPitch]:{min:-12e3,max:12e3,def:0,nrpn:2},[c.modEnvToPitch]:{min:-12e3,max:12e3,def:0,nrpn:2},[c.initialFilterFc]:{min:1500,max:13500,def:13500,nrpn:2},[c.initialFilterQ]:{min:0,max:960,def:0,nrpn:1},[c.modLfoToFilterFc]:{min:-12e3,max:12e3,def:0,nrpn:2},[c.modEnvToFilterFc]:{min:-12e3,max:12e3,def:0,nrpn:2},[c.endAddrsCoarseOffset]:{min:-32768,max:32768,def:0,nrpn:1},[c.modLfoToVolume]:{min:-960,max:960,def:0,nrpn:1},[c.chorusEffectsSend]:{min:0,max:1e3,def:0,nrpn:1},[c.reverbEffectsSend]:{min:0,max:1e3,def:0,nrpn:1},[c.pan]:{min:-500,max:500,def:0,nrpn:1},[c.delayModLFO]:{min:-12e3,max:5e3,def:-12e3,nrpn:2},[c.freqModLFO]:{min:-16e3,max:4500,def:0,nrpn:4},[c.delayVibLFO]:{min:-12e3,max:5e3,def:-12e3,nrpn:2},[c.freqVibLFO]:{min:-16e3,max:4500,def:0,nrpn:4},[c.delayModEnv]:{min:-32768,max:5e3,def:-32768,nrpn:2},[c.attackModEnv]:{min:-32768,max:8e3,def:-32768,nrpn:2},[c.holdModEnv]:{min:-12e3,max:5e3,def:-12e3,nrpn:2},[c.decayModEnv]:{min:-12e3,max:8e3,def:-12e3,nrpn:2},[c.sustainModEnv]:{min:0,max:1e3,def:0,nrpn:1},[c.releaseModEnv]:{min:-12e3,max:8e3,def:-12e3,nrpn:2},[c.keyNumToModEnvHold]:{min:-1200,max:1200,def:0,nrpn:1},[c.keyNumToModEnvDecay]:{min:-1200,max:1200,def:0,nrpn:1},[c.delayVolEnv]:{min:-12e3,max:5e3,def:-12e3,nrpn:2},[c.attackVolEnv]:{min:-12e3,max:8e3,def:-12e3,nrpn:2},[c.holdVolEnv]:{min:-12e3,max:5e3,def:-12e3,nrpn:2},[c.decayVolEnv]:{min:-12e3,max:8e3,def:-12e3,nrpn:2},[c.sustainVolEnv]:{min:0,max:1440,def:0,nrpn:1},[c.releaseVolEnv]:{min:-12e3,max:8e3,def:-12e3,nrpn:2},[c.keyNumToVolEnvHold]:{min:-1200,max:1200,def:0,nrpn:1},[c.keyNumToVolEnvDecay]:{min:-1200,max:1200,def:0,nrpn:1},[c.startloopAddrsCoarseOffset]:{min:-32768,max:32768,def:0,nrpn:1},[c.keyNum]:{min:-1,max:127,def:-1,nrpn:1},[c.velocity]:{min:-1,max:127,def:-1,nrpn:1},[c.initialAttenuation]:{min:0,max:1440,def:0,nrpn:1},[c.endloopAddrsCoarseOffset]:{min:-32768,max:32768,def:0,nrpn:1},[c.coarseTune]:{min:-120,max:120,def:0,nrpn:1},[c.fineTune]:{min:-12700,max:12700,def:0,nrpn:1},[c.scaleTuning]:{min:0,max:1200,def:100,nrpn:1},[c.exclusiveClass]:{min:0,max:99999,def:0,nrpn:0},[c.overridingRootKey]:{min:-1,max:127,def:-1,nrpn:0},[c.sampleModes]:{min:0,max:3,def:0,nrpn:0},[c.amplitude]:{min:-1e3,max:1e3,def:0,nrpn:1},[c.vibLfoRate]:{min:-1e3,max:1e3,def:0,nrpn:1},[c.vibLfoToFilterFc]:{min:-12e3,max:12e3,def:0,nrpn:2},[c.vibLfoAmplitudeDepth]:{min:0,max:1e3,def:0,nrpn:1},[c.modLfoRate]:{min:-1e3,max:1e3,def:0,nrpn:1},[c.modLfoAmplitudeDepth]:{min:0,max:1e3,def:0,nrpn:1}}),Xe=960,oA=900,Ga=class{outputGain=0;attenuationCb=Xe;state=0;sampleRate;updateInterval;sampleTime=0;releaseStartCb=Xe;releaseStartTimeSamples=0;attackDuration=0;decayDuration=0;releaseDuration=0;sustainCb=0;delayEnd=0;attackEnd=0;holdEnd=0;decayEnd=0;enteredRelease=!1;canEndOnSilentSustain=!1;constructor(t,e){this.sampleRate=t,this.updateInterval=e}startRelease(t){this.releaseStartTimeSamples=this.sampleTime;let e=t.overrideReleaseVolEnv||t.modulatedGenerators[c.releaseVolEnv];if(this.releaseDuration=this.timecentsToSamples(Math.max(-7200,e)),this.enteredRelease)this.releaseStartCb=this.attenuationCb;else{let s=Math.max(0,Math.min(Xe,this.sustainCb)),a=s/Xe,n=(60-t.targetKey)*t.modulatedGenerators[c.keyNumToVolEnvDecay];switch(this.decayDuration=this.timecentsToSamples(t.modulatedGenerators[c.decayVolEnv]+n)*a,this.state){case 0:this.releaseStartCb=Xe;break;case 1:{let r=1-(this.attackEnd-this.releaseStartTimeSamples)/this.attackDuration;this.releaseStartCb=200*Math.log10(r)*-1;break}case 2:this.releaseStartCb=0;break;case 3:this.releaseStartCb=(1-(this.decayEnd-this.releaseStartTimeSamples)/this.decayDuration)*s;break;case 4:this.releaseStartCb=s;break}this.releaseStartCb=Math.max(0,Math.min(this.releaseStartCb,Xe)),this.attenuationCb=this.releaseStartCb}this.enteredRelease=!0;let A=(Xe-this.releaseStartCb)/Xe;this.releaseDuration*=A,this.releaseStartCb>=oA&&(t.isActive=!1)}init(t){this.enteredRelease=!1,this.state=0,this.sampleTime=0,this.outputGain=0,this.canEndOnSilentSustain=t.modulatedGenerators[c.sustainVolEnv]>=oA,this.sustainCb=Math.min(Xe,t.modulatedGenerators[c.sustainVolEnv]),this.attackDuration=this.timecentsToSamples(t.modulatedGenerators[c.attackVolEnv]);let e=(60-t.targetKey)*t.modulatedGenerators[c.keyNumToVolEnvDecay],A=this.sustainCb/Xe;this.decayDuration=this.timecentsToSamples(t.modulatedGenerators[c.decayVolEnv]+e)*A,this.delayEnd=this.timecentsToSamples(t.modulatedGenerators[c.delayVolEnv]),this.attackEnd=this.attackDuration+this.delayEnd;let s=(60-t.targetKey)*t.modulatedGenerators[c.keyNumToVolEnvHold];this.holdEnd=this.timecentsToSamples(t.modulatedGenerators[c.holdVolEnv]+s)+this.attackEnd,this.decayEnd=this.decayDuration+this.holdEnd,this.attackEnd<=this.updateInterval&&(this.state=2)}process(t,e){let{releaseStartTimeSamples:A,releaseStartCb:s,releaseDuration:a,delayEnd:n,attackEnd:r,attackDuration:i,holdEnd:o,decayEnd:I,decayDuration:l,sustainCb:B}=this,C=this.sampleTime+=t;if(this.enteredRelease){let g=C-A,E=Xe-s;return this.attenuationCb=g/a*E+s,this.outputGain=Ut[this.attenuationCb-Tt|0]*e,this.attenuationCb<oA}switch(this.state){case 0:if(C<n)return this.attenuationCb=Xe,this.outputGain=0,!0;this.state++;case 1:if(C<r){this.attenuationCb=0;let g=1-(r-C)/i;return this.outputGain=g*e,!0}this.state++;case 2:if(C<o)return this.attenuationCb=0,this.outputGain=e,!0;this.state++;case 3:if(C<I)return this.attenuationCb=(1-(I-C)/l)*B,this.outputGain=e*Ut[this.attenuationCb-Tt|0],!0;this.state++;case 4:return this.canEndOnSilentSustain&&B>=oA?(this.attenuationCb=Xe,this.outputGain=0,!1):(this.attenuationCb=B,this.outputGain=e*Ut[B-Tt|0],!0)}}timecentsToSamples(t){return Math.max(0,Math.floor(pA(t)*this.sampleRate))}},Fe={monoSample:1,rightSample:2,leftSample:4,linkedSample:8,romMonoSample:32769,romRightSample:32770,romLeftSample:32772,romLinkedSample:32776},Ie={noController:0,noteOnVelocity:2,noteOnKeyNum:3,polyPressure:10,channelPressure:13,pitchWheel:14,pitchWheelRange:16,link:127},Ce={linear:0,concave:1,convex:2,switch:3};var Ye=16384,kA=Object.keys(Ce).length,lt=new Float32Array(Ye+1),kt=new Float32Array(Ye+1);lt[0]=0;lt[lt.length-1]=1;kt[0]=0;kt[kt.length-1]=1;for(let t=1;t<Ye-1;t++){let e=-.4166666666666667*Math.log(t/(lt.length-1))/Math.LN10;kt[t]=1-e,lt[lt.length-1-t]=e}function ln(t,e,A){let s=!!(t&2);switch(t&1&&(A=1-A),e){case Ce.linear:return s?A*2-1:A;case Ce.switch:return A=A>.5?1:0,s?A*2-1:A;case Ce.concave:return s?(A=A*2-1,A<0?-lt[Math.trunc(A*-Ye)]:lt[Math.trunc(A*Ye)]):lt[Math.trunc(A*Ye)];case Ce.convex:return s?(A=A*2-1,A<0?-kt[Math.trunc(A*-Ye)]:kt[Math.trunc(A*Ye)]):kt[Math.trunc(A*Ye)]}}var YA=1,ss=new Float32Array(1e3);for(let t=0;t<ss.length;t++)ss[t]=ln(0,Ce.convex,t/1e3);var La=class{attackDuration=0;decayDuration=0;holdDuration=0;releaseDuration=0;sustainLevel=0;delayEnd=0;attackEnd=0;holdEnd=0;releaseStartLevel=0;currentValue=0;enteredRelease=!1;decayEnd=0;process(t,e){return this.enteredRelease?this.releaseStartLevel===0?0:Math.max(0,(1-(e-t.releaseStartTime)/this.releaseDuration)*this.releaseStartLevel):(e<this.delayEnd?this.currentValue=0:e<this.attackEnd?this.currentValue=ss[~~((1-(this.attackEnd-e)/this.attackDuration)*1e3)]:e<this.holdEnd?this.currentValue=YA:e<this.decayEnd?this.currentValue=(1-(this.decayEnd-e)/this.decayDuration)*(this.sustainLevel-YA)+YA:this.currentValue=this.sustainLevel,this.currentValue)}startRelease(t){this.releaseStartLevel=this.currentValue,this.enteredRelease=!0;let e=this.tc2Sec(Math.max(t.modulatedGenerators[c.releaseModEnv],-7200));this.releaseDuration=e*this.releaseStartLevel}init(t){this.enteredRelease=!1,this.sustainLevel=1-t.modulatedGenerators[c.sustainModEnv]/1e3,this.attackDuration=this.tc2Sec(t.modulatedGenerators[c.attackModEnv]);let e=(60-t.targetKey)*t.modulatedGenerators[c.keyNumToModEnvDecay],A=this.tc2Sec(t.modulatedGenerators[c.decayModEnv]+e);this.decayDuration=A*(1-this.sustainLevel);let s=(60-t.targetKey)*t.modulatedGenerators[c.keyNumToModEnvHold];this.holdDuration=this.tc2Sec(s+t.modulatedGenerators[c.holdModEnv]),this.delayEnd=t.startTime+this.tc2Sec(t.modulatedGenerators[c.delayModEnv]),this.attackEnd=this.delayEnd+this.attackDuration,this.holdEnd=this.attackEnd+this.holdDuration,this.decayEnd=this.holdEnd+this.decayDuration}tc2Sec(t){return t<=-10114?0:pA(t)}},Qs=class{isLooping=!1;sampleData;playbackStep=0;loopStart=0;loopEnd=0;loopLength=0;end=0;cursor=0},Pa=class extends Qs{process(t,e,A){let s=e*this.playbackStep,a=this.sampleData,{loopEnd:n,loopLength:r,end:i}=this,o=this.cursor;if(this.isLooping)for(let I=0;I<t;I++){for(;o>=n;)o-=r;let l=o|0,B=l+1;B>=n&&(B-=r);let C=o-l,g=a[B],E=a[l];A[I]=E+(g-E)*C,o+=s}else for(let I=0;I<t;I++){let l=o|0,B=l+1;if(B>=i)return A.fill(0,I,t),!1;let C=o-l,g=a[B],E=a[l];A[I]=E+(g-E)*C,o+=s}return this.cursor=o,!0}},Na=class extends Qs{process(t,e,A){let s=e*this.playbackStep,a=this.sampleData,{loopEnd:n,loopLength:r,end:i}=this,o=this.cursor;if(this.isLooping)for(let I=0;I<t;I++){for(;o>=n;)o-=r;A[I]=a[o|0],o+=s}else for(let I=0;I<t;I++){if(o>=i)return A.fill(0,I,t),!1;A[I]=a[o|0],o+=s}return this.cursor=o,!0}},Ta=class extends Qs{process(t,e,A){let s=e*this.playbackStep,a=this.sampleData,{loopEnd:n,loopLength:r,end:i}=this,o=this.cursor;if(this.isLooping)for(let I=0;I<t;I++){for(;o>=n;)o-=r;let l=o|0,B=l+1,C=l+2,g=l+3,E=o-l;B>=n&&(B-=r),C>=n&&(C-=r),g>=n&&(g-=r);let S=a[l],k=a[B],u=a[C],M=a[g],w=(u-S)*.5,R=k-u,F=w+R,N=F+R+(M-k)*.5,m=F+N;A[I]=((N*E-m)*E+w)*E+k,o+=s}else for(let I=0;I<t;I++){let l=o|0,B=l+1,C=l+2,g=l+3,E=o-l;if(g>=i)return A.fill(0,I,t),!1;let S=a[l],k=a[B],u=a[C],M=a[g],w=(u-S)*.5,R=k-u,F=w+R,N=F+R+(M-k)*.5,m=F+N;A[I]=((N*E-m)*E+w)*E+k,o+=s}return this.cursor=o,!0}},Ua=-2320,xa=class{oscillators=[new Pa,new Na,new Ta];wavetable=this.oscillators[In.interpolationType];filter;generators=new Int16Array(Dt);modulatedGenerators=new Int16Array(Dt);modulators=new Array;modulatorValues=new Int16Array(64);modEnv=new La;volEnv;resonanceOffset=0;priority=0;isActive=!1;hasRendered=!1;isInRelease=!1;isHeld=!1;channel=0;noteID=0;midiNote=0;targetKey=0;velocity=0;rootKey=0;pressure=0;gainModifier=1;loopingMode=0;startTime=0;releaseStartTime=1/0;tuningCents=0;tuningRatio=1;currentPan=0;portamentoFromKey=-1;portamentoDuration=0;overridePan=0;pitchOffset=0;reverbSend=1;chorusSend=1;delaySend=1;exclusiveClass=0;overrideReleaseVolEnv=0;vibLfoPhase=0;vibLfoStartTime=0;modLfoPhase=0;modLfoStartTime=0;constructor(t,e){this.volEnv=new Ga(t,e),this.filter=new fs(t)}exclusiveRelease(t,e=Wn){this.overrideReleaseVolEnv=Ua,this.isInRelease=!1,this.releaseVoice(t,e)}releaseVoice(t,e=Zn){this.releaseStartTime=t,this.releaseStartTime-this.startTime<e&&(this.releaseStartTime=this.startTime+e)}setup(t,e,A,s){this.isActive=!0,this.isInRelease=!1,this.hasRendered=!1,this.isHeld=!1,this.releaseStartTime=1/0,this.pressure=0,this.overrideReleaseVolEnv=0,this.portamentoDuration=0,this.portamentoFromKey=-1,this.vibLfoPhase=.25,this.modLfoPhase=.25,this.startTime=t,this.channel=e,this.midiNote=A,this.noteID=s}};function St(t,e){return(t>>e&1)>0}function qA(t){return t?1:0}var at=class ns{isBipolar;isNegative;index;isCC;curveType;constructor(e=Ie.noController,A=Ce.linear,s=!1,a=!1,n=!1){this.isBipolar=a,this.isNegative=n,this.index=e,this.isCC=s,this.curveType=A}get sourceName(){return this.isCC?Object.keys(f).find(e=>f[e]===this.index)??this.index.toString():Object.keys(Ie).find(e=>Ie[e]===this.index)??this.index.toString()}get curveTypeName(){return Object.keys(Ce).find(e=>Ce[e]===this.curveType)??this.curveType.toString()}static fromSourceEnum(e){let A=St(e,9),s=St(e,8),a=St(e,7);return new ns(e&127,e>>10&3,a,A,s)}static copyFrom(e){return new ns(e.index,e.curveType,e.isCC,e.isBipolar,e.isNegative)}toString(){return`${this.sourceName} ${this.curveTypeName} ${this.isBipolar?"bipolar":"unipolar"} ${this.isNegative?"negative":"positive"}`}toSourceEnum(){return this.curveType<<10|qA(this.isBipolar)<<9|qA(this.isNegative)<<8|qA(this.isCC)<<7|this.index}isIdentical(e){return this.index===e.index&&this.isNegative===e.isNegative&&this.isCC===e.isCC&&this.isBipolar===e.isBipolar&&this.curveType===e.curveType}getValue(e,A,s){let a;if(this.isCC)a=e.midiControllers[this.index];else switch(this.index){default:case Ie.noController:a=16383;break;case Ie.noteOnVelocity:a=s.velocity<<7;break;case Ie.noteOnKeyNum:a=s.targetKey<<7;break;case Ie.polyPressure:a=s.pressure<<7;break;case Ie.channelPressure:a=e.midiParameters.pressure<<7;break;case Ie.pitchWheel:a=A;break;case Ie.pitchWheelRange:a=Math.floor(e.midiParameters.pitchWheelRange*128)}let n=(this.isBipolar?2:0)|(this.isNegative?1:0);return Cn[Ye*(this.curveType*kA+n)+a]}},Cn=new Float32Array(Ye*4*kA);for(let t=0;t<kA;t++)for(let e=0;e<4;e++){let A=Ye*(t*kA+e);for(let s=0;s<Ye;s++)Cn[A+s]=ln(e,t,s/Ye)}function _e(t,e,A,s,a){return new at(a,t,s,e,A).toSourceEnum()}var Bn=_e(Ce.linear,!0,!1,!0,f.filterResonance),we=class as{destination=c.initialAttenuation;transformAmount=0;transformType=0;primarySource;secondarySource;constructor(e=new at,A=new at,s=c.invalid,a=0,n=0){this.primarySource=e,this.secondarySource=A,this.destination=s,this.transformAmount=a,this.transformType=n}get destinationName(){return Object.keys(c).find(e=>c[e]===this.destination)}static isIdentical(e,A,s=!1){return e.primarySource.isIdentical(A.primarySource)&&e.secondarySource.isIdentical(A.secondarySource)&&e.destination===A.destination&&e.transformType===A.transformType&&(!s||e.transformAmount===A.transformAmount)}static copyFrom(e){return new as(at.copyFrom(e.primarySource),at.copyFrom(e.secondarySource),e.destination,e.transformAmount,e.transformType)}toString(){return`Source: ${this.primarySource.toString()}
2
2
  Secondary source: ${this.secondarySource.toString()}
3
3
  to: ${this.destinationName}
4
- amount: ${this.transformAmount}`+(this.transformType===2?"absolute value":"")}write(e,A){se(e,this.primarySource.toSourceEnum()),se(e,this.destination),se(e,this.transformAmount),se(e,this.secondarySource.toSourceEnum()),se(e,this.transformType),A&&A.mod++}sumTransform(e){let A=as.copyFrom(this);return A.transformAmount+=e.transformAmount,A}},ye=class extends we{constructor(t,e,A,s,a){super(at.fromSourceEnum(t),at.fromSourceEnum(e),A,s,a),this.destination>hn&&(this.destination=c.invalid)}},Ha=[new ye(_e(le.concave,!1,!0,!1,Ie.noteOnVelocity),0,c.initialAttenuation,960,0),new ye(129,0,c.vibLfoToPitch,50,0),new ye(_e(le.concave,!1,!0,!0,f.mainVolume),0,c.initialAttenuation,960,0),new ye(13,0,c.vibLfoToPitch,50,0),new ye(526,16,c.fineTune,12700,0),new ye(650,0,c.pan,500,0),new ye(_e(le.concave,!1,!0,!0,f.expression),0,c.initialAttenuation,960,0),new ye(219,0,c.reverbEffectsSend,200,0),new ye(221,0,c.chorusEffectsSend,200,0)],Oa=[new ye(_e(le.convex,!0,!1,!0,f.attackTime),0,c.attackVolEnv,6e3,0),new ye(_e(le.linear,!0,!1,!0,f.releaseTime),0,c.releaseVolEnv,3600,0),new ye(_e(le.linear,!0,!1,!0,f.decayTime),0,c.decayVolEnv,3600,0),new ye(_e(le.linear,!0,!1,!0,f.brightness),0,c.initialFilterFc,9600,0),new ye(Bn,0,c.initialFilterQ,250,0),new ye(_e(le.switch,!1,!1,!0,f.softPedal),0,c.initialAttenuation,50,0),new ye(_e(le.switch,!1,!1,!0,f.softPedal),0,c.initialFilterFc,-2400,0),new ye(_e(le.linear,!0,!1,!0,f.balance),0,c.pan,500,0)],En=[...Ha,...Oa],Pe=class{type;value=0;constructor(t,e,A=!0){if(this.type=t,e===void 0)throw new Error("No value provided.");if(this.value=Math.round(e),A){let s=We[t];s!==void 0&&(this.value=Math.max(s.min,Math.min(s.max,this.value)))}}write(t){se(t,this.type),se(t,this.value)}toString(){return`${Object.keys(c).find(t=>c[t]===this.type)}: ${this.value}`}},$t=class{velRange={min:-1,max:127};keyRange={min:-1,max:127};generators=[];modulators=[];get hasKeyRange(){return this.keyRange.min!==-1}get hasVelRange(){return this.velRange.min!==-1}get fineTuning(){let t=this.getGenerator(c.coarseTune,0),e=this.getGenerator(c.fineTune,0);return t*100+e}set fineTuning(t){let e=Math.trunc(t/100),A=t%100;this.setGenerator(c.coarseTune,e),this.setGenerator(c.fineTune,A)}addToGenerator(t,e,A=!0){let s=this.getGenerator(t,We[t].def);this.setGenerator(t,e+s,A)}setGenerator(t,e,A=!0){switch(t){case c.sampleID:throw new Error("Use setSample()");case c.instrument:throw new Error("Use setInstrument()");case c.velRange:case c.keyRange:throw new Error("Set the range manually")}if(e===null){this.generators=this.generators.filter(a=>a.type!==t);return}let s=this.generators.findIndex(a=>a.type===t);s===-1?this.addGenerators(new Pe(t,e,A)):this.generators[s]=new Pe(t,e,A)}addGenerators(...t){for(let e of t)switch(e.type){default:this.generators.push(e);break;case c.sampleID:case c.instrument:break;case c.velRange:this.velRange.min=e.value&127,this.velRange.max=e.value>>8&127;break;case c.keyRange:this.keyRange.min=e.value&127,this.keyRange.max=e.value>>8&127}}addModulators(...t){this.modulators.push(...t)}getGenerator(t,e){return this.generators.find(A=>A.type===t)?.value??e}copyFrom(t){this.generators=t.generators.map(e=>new Pe(e.type,e.value,!1)),this.modulators=t.modulators.map(we.copyFrom.bind(we)),this.velRange={...t.velRange},this.keyRange={...t.keyRange}}getWriteGenerators(t){let e=this.generators.filter(A=>A.type!==c.sampleID&&A.type!==c.instrument&&A.type!==c.keyRange&&A.type!==c.velRange);if(!t)throw new Error("No bank provided! ");return this.hasVelRange&&e.unshift(new Pe(c.velRange,this.velRange.max<<8|Math.max(this.velRange.min,0),!1)),this.hasKeyRange&&e.unshift(new Pe(c.keyRange,this.keyRange.max<<8|Math.max(this.keyRange.min,0),!1)),e}},Ya=48e3,vA=class{name;sampleRate;originalKey;pitchCorrection;linkedSample;sampleType;loopStart;loopEnd;linkedTo=[];dataOverridden=!0;compressedData;audioData;constructor(t,e,A,s,a,n,r){this.name=t,this.sampleRate=e,this.originalKey=A,this.pitchCorrection=s,this.loopStart=n,this.loopEnd=r,this.sampleType=a}get isCompressed(){return this.compressedData!==void 0}get isLinked(){return this.sampleType===ve.rightSample||this.sampleType===ve.leftSample||this.sampleType===ve.linkedSample}get useCount(){return this.linkedTo.length}getRawData(t){return this.compressedData&&t&&!this.dataOverridden?this.compressedData:this.encodeS16LE()}resampleData(t){let e=this.getAudioData(),A=t/this.sampleRate,s=new Float32Array(Math.floor(e.length*A));for(let a=0;a<s.length;a++)s[a]=e[Math.floor(a*(1/A))];e=s,this.sampleRate=t,this.loopStart=Math.floor(this.loopStart*A),this.loopEnd=Math.floor(this.loopEnd*A),this.audioData=e}async compressSample(t){if(!this.isCompressed)try{let e=this.getAudioData();(this.sampleRate<8e3||this.sampleRate>96e3)&&(this.resampleData(Ya),e=this.getAudioData());let A=await t(e,this.sampleRate);this.setCompressedData(A)}catch(e){h.warn(`Failed to compress ${this.name}. Leaving as uncompressed!`,e),this.compressedData=void 0}}setSampleType(t){if(this.sampleType=t,this.isLinked||(this.linkedSample&&(this.linkedSample.linkedSample=void 0,this.linkedSample.sampleType=t),this.linkedSample=void 0),(t&32768)>0)throw new Error("ROM samples are not supported.")}unlinkSample(){this.setSampleType(ve.monoSample)}setLinkedSample(t,e){if(t.linkedSample)throw new Error(`${t.name} is linked tp ${t.linkedSample.name}. Unlink it first.`);switch(this.linkedSample=t,t.linkedSample=this,e){case ve.leftSample:this.setSampleType(ve.leftSample),t.setSampleType(ve.rightSample);break;case ve.rightSample:this.setSampleType(ve.rightSample),t.setSampleType(ve.leftSample);break;case ve.linkedSample:this.setSampleType(ve.linkedSample),t.setSampleType(ve.linkedSample);break;default:throw new Error("Invalid sample type: "+e)}}linkTo(t){this.linkedTo.push(t)}unlinkFrom(t){let e=this.linkedTo.indexOf(t);if(e===-1){h.warn(`Cannot unlink ${t.name} from ${this.name}: not linked.`);return}this.linkedTo.splice(e,1)}getAudioData(){if(this.audioData)return this.audioData;if(this.isCompressed)return this.audioData=this.decodeVorbis(),this.audioData;throw new Error("Sample data is undefined for a BasicSample instance.")}setAudioData(t,e){this.audioData=t,this.sampleRate=e,this.dataOverridden=!0,this.compressedData=void 0}setCompressedData(t){this.audioData=void 0,this.compressedData=t,this.dataOverridden=!1}encodeS16LE(){let t=this.getAudioData(),e=new Int16Array(t.length),A=t.length;for(let s=0;s<A;s++){let a=t[s]*32768;a>32767?a=32767:a<-32768&&(a=-32768),e[s]=a}return new ne(e.buffer)}decodeVorbis(){if(this.audioData)return this.audioData;if(!this.compressedData)throw new Error("Compressed data is missing.");try{let t=FA.decode(this.compressedData).data[0];if(t===void 0)return h.warn(`Error decoding sample ${this.name}: Vorbis decode returned undefined.`),new Float32Array(0);for(let e=0;e<t.length;e++)t[e]=Math.max(-1,Math.min(t[e],.999969482421875));return t}catch(t){return h.warn(`Error decoding sample ${this.name}: ${t}`),new Float32Array(this.loopEnd+1)}}},qa=class extends vA{constructor(){super("",44100,60,0,ve.monoSample,0,0)}},dn=class extends $t{parentInstrument;useCount;constructor(t,e){super(),this.parentInstrument=t,this._sample=e,e.linkTo(this.parentInstrument),this.useCount=t.useCount}_sample;get sample(){return this._sample}set sample(t){this._sample&&this._sample.unlinkFrom(this.parentInstrument),this._sample=t,t.linkTo(this.parentInstrument)}getWriteGenerators(t){let e=super.getWriteGenerators(t),A=t.samples.indexOf(this.sample);if(A===-1)throw new Error(`${this.sample.name} does not exist in ${t.soundBankInfo.name}! Cannot write sampleID generator.`);return e.push(new Pe(c.sampleID,A,!1)),e}},fn=class extends $t{parentPreset;constructor(t,e){super(),this.parentPreset=t,this._instrument=e,this._instrument.linkTo(this.parentPreset)}_instrument;get instrument(){return this._instrument}set instrument(t){this._instrument&&this._instrument.unlinkFrom(this.parentPreset),this._instrument=t,this._instrument.linkTo(this.parentPreset)}getWriteGenerators(t){let e=super.getWriteGenerators(t);if(!t)throw new Error("Instrument ID cannot be determined without the sound bank itself.");let A=t.instruments.indexOf(this.instrument);if(A===-1)throw new Error(`${this.instrument.name} does not exist in ${t.soundBankInfo.name}! Cannot write instrument generator.`);return e.push(new Pe(c.instrument,A,!1)),e}},rs=new Int16Array(Dt);for(let t=0;t<rs.length;t++)We[t]&&(rs[t]=We[t].def);var zt=class ot{parentSoundBank;name="";program=0;bankMSB=0;bankLSB=0;isGMGSDrum=!1;zones=[];globalZone;library=0;genre=0;morphology=0;constructor(e,A=new $t){this.parentSoundBank=e,this.globalZone=A}get isDrum(){let e=this.parentSoundBank.isXGBank;return this.isGMGSDrum||e&&De.isXGDrum(this.bankMSB)}static isInRange(e,A){return A>=e.min&&A<=e.max}static addUniqueModulators(e,A){for(let s of A)e.some(a=>we.isIdentical(s,a))||e.push(s)}static subtractRanges(e,A){return{min:Math.max(e.min,A.min),max:Math.min(e.max,A.max)}}delete(){for(let e of this.zones)e.instrument?.unlinkFrom(this)}deleteZone(e){this.zones[e]?.instrument?.unlinkFrom(this),this.zones.splice(e,1)}createZone(e){let A=new fn(this,e);return this.zones.push(A),A}preload(e,A){for(let s=e;s<A+1;s++)for(let a=0;a<128;a++)for(let n of this.getVoiceParameters(s,a))n.sample.getAudioData()}matches(e){return je.matches(this,e)}getVoiceParameters(e,A){let s=new Array;for(let a of this.zones){if(!ot.isInRange(a.hasKeyRange?a.keyRange:this.globalZone.keyRange,e)||!ot.isInRange(a.hasVelRange?a.velRange:this.globalZone.velRange,A))continue;let n=a.instrument;if(!n||n.zones.length===0)continue;let r=new Int16Array(Dt);for(let o of this.globalZone.generators)r[o.type]=o.value;for(let o of a.generators)r[o.type]=o.value;let i=[...a.modulators];ot.addUniqueModulators(i,this.globalZone.modulators);for(let o of n.zones){if(!ot.isInRange(o.hasKeyRange?o.keyRange:n.globalZone.keyRange,e)||!ot.isInRange(o.hasVelRange?o.velRange:n.globalZone.velRange,A))continue;let I=[...o.modulators];ot.addUniqueModulators(I,n.globalZone.modulators),ot.addUniqueModulators(I,this.parentSoundBank.defaultModulators);for(let B of i){let C=I.findIndex(g=>we.isIdentical(B,g));C===-1?I.push(B):I[C]=I[C].sumTransform(B)}let l=new Int16Array(rs);for(let B of n.globalZone.generators)l[B.type]=B.value;for(let B of o.generators)l[B.type]=B.value;for(let B=0;B<l.length;B++)l[B]=Math.max(-32768,Math.min(32767,l[B]+r[B]));l[c.initialAttenuation]=Math.floor(l[c.initialAttenuation]*.4),s.push({sample:o.sample,generators:l,modulators:I})}}return s}toMIDIString(){return je.toMIDIString(this)}toString(){return je.toFullMIDIString(this)}toFlattenedInstrument(){let e=(I,l)=>{I.push(...l.filter(B=>!I.some(C=>C.type===B.type)))},A=(I,l)=>{I.push(...l.filter(B=>!I.some(C=>we.isIdentical(B,C))))},s=new _t;s.name=this.name;let a=[],n=[],r=this.globalZone;a.push(...r.generators),n.push(...r.modulators);let i=r.keyRange,o=r.velRange;for(let I of this.zones){if(!I.instrument)throw new Error("No instrument in a preset zone.");let l=I.keyRange;I.hasKeyRange||(l=i);let B=I.velRange;I.hasVelRange||(B=o);let C=I.generators.map(v=>new Pe(v.type,v.value));e(C,a);let g=[...I.modulators];A(g,n);let E=I.instrument,S=E.zones,k=[],u=[],w=E.globalZone;k.push(...w.generators),u.push(...w.modulators);let M=w.keyRange,R=w.velRange;for(let v of S){if(!v.sample)throw new Error("No sample in an instrument zone.");let N=v.keyRange;v.hasKeyRange||(N=M);let m=v.velRange;if(v.hasVelRange||(m=R),N=ot.subtractRanges(N,l),m=ot.subtractRanges(m,B),N.max<N.min||m.max<m.min)continue;let p=v.generators.map(J=>new Pe(J.type,J.value));e(p,k);let y=[...v.modulators];A(y,u);let V=[...y];for(let J of g){let ee=V.findIndex(x=>we.isIdentical(J,x));ee===-1?V.push(J):V[ee]=V[ee].sumTransform(J)}let Y=p.map(J=>new Pe(J.type,J.value));for(let J of C){if(J.type===c.velRange||J.type===c.keyRange||J.type===c.instrument||J.type===c.endOper||J.type===c.sampleModes)continue;let ee=p.findIndex(x=>x.type===J.type);if(ee===-1){let x=We[J.type].def+J.value;Y.push(new Pe(J.type,x))}else{let x=Y[ee].value+J.value;Y[ee]=new Pe(J.type,x)}}Y=Y.filter(J=>J.type!==c.sampleID&&J.type!==c.keyRange&&J.type!==c.velRange&&J.type!==c.endOper&&J.type!==c.instrument&&(!(J.type in We)||J.value!==We[J.type].def));let q=s.createZone(v.sample);q.keyRange=N,q.velRange=m,q.keyRange.min===0&&q.keyRange.max===127&&(q.keyRange.min=-1),q.velRange.min===0&&q.velRange.max===127&&(q.velRange.min=-1),q.addGenerators(...Y),q.addModulators(...V)}}return s}write(e,A){h.info(`%cWriting ${this.name}...`,d.info),Ne(e.pdta,this.name.slice(0,20),20),Ne(e.xdta,this.name.slice(20),20),se(e.pdta,this.program);let s=this.bankMSB;this.isGMGSDrum?s=128:this.bankMSB===0&&(s=this.bankLSB),se(e.pdta,s),e.xdta.currentIndex+=4,se(e.pdta,A&65535),se(e.xdta,A>>16),ge(e.pdta,this.library),ge(e.pdta,this.genre),ge(e.pdta,this.morphology),e.xdta.currentIndex+=12}},Ja=new Set([c.velRange,c.keyRange,c.instrument,c.sampleID,c.exclusiveClass,c.endOper,c.sampleModes,c.startloopAddrsOffset,c.startloopAddrsCoarseOffset,c.endloopAddrsOffset,c.endloopAddrsCoarseOffset,c.startAddrsOffset,c.startAddrsCoarseOffset,c.endAddrOffset,c.endAddrsCoarseOffset,c.initialAttenuation,c.fineTune,c.coarseTune,c.keyNumToVolEnvHold,c.keyNumToVolEnvDecay,c.keyNumToModEnvHold,c.keyNumToModEnvDecay]),_t=class{name="";zones=[];globalZone=new $t;linkedTo=[];get useCount(){return this.linkedTo.length}createZone(t){let e=new dn(this,t);return this.zones.push(e),e}linkTo(t){this.linkedTo.push(t);for(let e of this.zones)e.useCount++}unlinkFrom(t){let e=this.linkedTo.indexOf(t);if(e===-1){h.warn(`Cannot unlink ${t.name} from ${this.name}: not linked.`);return}this.linkedTo.splice(e,1);for(let A of this.zones)A.useCount--}deleteUnusedZones(){this.zones=this.zones.filter(t=>{let e=t.useCount>0;return e||t.sample.unlinkFrom(this),e})}delete(){if(this.useCount>0)throw new Error(`Cannot delete an instrument that is used by: ${this.linkedTo.map(t=>t.name).toString()}.`);for(let t of this.zones)t.sample.unlinkFrom(this)}deleteZone(t,e=!1){let A=this.zones[t];return A.useCount-=1,A.useCount<1||e?(A.sample.unlinkFrom(this),this.zones.splice(t,1),!0):!1}globalize(){let t=this.globalZone;for(let A=0;A<58;A++){if(Ja.has(A))continue;A=A;let s={},a=We[A]?.def||0;s[a]=0;for(let n of this.zones){let r=n.getGenerator(A,void 0);r===void 0?s[a]++:s[r]===void 0?s[r]=1:s[r]++;let i;switch(A){default:continue;case c.decayVolEnv:i=c.keyNumToVolEnvDecay;break;case c.holdVolEnv:i=c.keyNumToVolEnvHold;break;case c.decayModEnv:i=c.keyNumToModEnvDecay;break;case c.holdModEnv:i=c.keyNumToModEnvHold}if(n.getGenerator(i,void 0)!==void 0){s={};break}}if(Object.keys(s).length>0){let n=["0",0];for(let[i,o]of Object.entries(s))o>n[1]&&(n=[i,o]);let r=Number.parseInt(n[0]);r!==a&&t.setGenerator(A,r,!1);for(let i of this.zones){let o=i.getGenerator(A,void 0);o===void 0?r!==a&&i.setGenerator(A,a):o===r&&i.setGenerator(A,null)}}}let e=this.zones.length===0?[]:this.zones[0].modulators.map(A=>we.copyFrom(A));for(let A of e){let s=!0;for(let a of this.zones)s&&(a.modulators.find(n=>we.isIdentical(n,A))||(s=!1));if(s){t.addModulators(we.copyFrom(A));for(let a of this.zones){let n=a.modulators.find(r=>we.isIdentical(r,A));n&&n.transformAmount===A.transformAmount&&a.modulators.splice(a.modulators.indexOf(n),1)}}}}write(t,e){h.info(`%cWriting ${this.name}...`,d.info),Ne(t.pdta,this.name.slice(0,20),20),Ne(t.xdta,this.name.slice(20),20),se(t.pdta,e&65535),se(t.xdta,e>>>16)}};function Ka(t,e,A,s){let a=0,n=[],r=[];for(let l of t.samples){let B=l.getRawData(!0);a++,s?.(a/t.samples.length),h.info(`%cWrote sample %c${a}. ${l.name}%c of %c${t.samples.length}.`,d.info,d.recognized,d.info,d.recognized),n.push(B),r.push(B.length),l.isCompressed||n.push(new Uint8Array(92))}let i=U.getParts("smpl",n),o=U.getParts("sdta",i,!0),I=0;for(let[l,B]of t.samples.entries()){let C=r[l],g,E;B.isCompressed?(g=I,E=g+C):(g=I/2,E=g+C/2,I+=92),I+=C,e.push(g),A.push(E)}return o}var Va=class extends vA{linkedSampleIndex;s16leData;startByteOffset;endByteOffset;sampleID;constructor(t,e,A,s,a,n,r,i,o,I,l,B){let C=(I&16)>0;I&=-17,super(t,n,r,i,I,s-e/2,a-e/2),this.dataOverridden=!1,this.name=t,this.startByteOffset=e,this.endByteOffset=A,this.sampleID=B;let g=l instanceof ne?l.currentIndex:0;l instanceof ne?C?(this.loopStart+=this.startByteOffset/2,this.loopEnd+=this.startByteOffset/2,this.setCompressedData(l.slice(this.startByteOffset/2+g,this.endByteOffset/2+g))):this.s16leData=l.slice(g+this.startByteOffset,g+this.endByteOffset):this.setAudioData(l.slice(this.startByteOffset/2,this.endByteOffset/2),n),this.linkedSampleIndex=o}getLinkedSample(t){if(this.linkedSample||!this.isLinked)return;let e=t[this.linkedSampleIndex];e?e.linkedSample?(h.info(`%cInvalid linked sample for ${this.name}: ${e.name} is already linked to ${e.linkedSample.name}`,d.warn),this.unlinkSample()):this.setLinkedSample(e,this.sampleType):(h.info(`%cInvalid linked sample for ${this.name}. Setting to mono.`,d.warn),this.unlinkSample())}getAudioData(){if(this.audioData)return this.audioData;if(this.isCompressed)return super.getAudioData();if(!this.s16leData)throw console.error(this),new Error("Unexpected lack of audio data.");let t=this.endByteOffset-this.startByteOffset;if(t<1)return h.warn(`Invalid sample ${this.name}! Invalid length: ${t}`),new Float32Array(1);let e=new Float32Array(t/2),A=new Int16Array(this.s16leData.buffer),s=A.length;for(let a=0;a<s;a++)e[a]=A[a]/32768;return this.audioData=e,e}getRawData(t){return this.dataOverridden||this.compressedData?super.getRawData(t):this.s16leData??new Uint8Array(0)}};function Fs(t,e,A=!0){let s=[],a=0;for(;t.data.length>t.data.currentIndex;){let n=Xa(a,t.data,e);s.push(n),a++}if(s.pop(),A)for(let n of s)n.getLinkedSample(s);return s}function Xa(t,e,A){let s=de(e,20),a=X(e,4)*2,n=X(e,4)*2,r=X(e,4),i=X(e,4),o=X(e,4),I=e[e.currentIndex++];I>127&&(I=60);let l=Jn(e[e.currentIndex++]),B=X(e,2),C=X(e,2);return new Va(s,a,n,r,i,o,I,l,B,C,A,t)}function Za(t,e,A){let a=46*(t.samples.length+1),n=new ne(a),r=new ne(a),i=0;for(let[o,I]of t.samples.entries()){Ne(n,I.name.slice(0,20),20),Ne(r,I.name.slice(20),20);let l=e[o];ge(n,l),r.currentIndex+=4;let B=A[o];ge(n,B),r.currentIndex+=4;let C=I.loopStart+l,g=I.loopEnd+l;I.isCompressed&&(C-=l,g-=l),ge(n,C),ge(n,g),ge(n,I.sampleRate),n[n.currentIndex++]=I.originalKey,n[n.currentIndex++]=I.pitchCorrection,r.currentIndex+=14;let E=I.linkedSample?t.samples.indexOf(I.linkedSample):0;se(n,Math.max(0,E)&65535),se(r,Math.max(0,E)>>16),i=Math.max(i,E);let S=I.sampleType;I.isCompressed&&(S|=16),se(n,S),r.currentIndex+=2}return Ne(n,"EOS",46),Ne(r,"EOS",46),{pdta:U.write("shdr",n),xdta:U.write("shdr",r)}}function vs(t,e=!1){let A=e?t.presets:t.instruments,s=e?"pgen":"igen",a=e?"pmod":"imod",n=e?"pbag":"ibag",r=e?"phdr":"inst",i=e?38:22,o=0,I=new Array,l=0,B=new Array,C=new Array,g=new Array,E=0,S=new Array,k=m=>{I.push(o);let p=m.getWriteGenerators(t);o+=p.length,C.push(...p),B.push(l);let y=m.modulators;l+=y.length,g.push(...y)};for(let m of A){S.push(E),k(m.globalZone);for(let p of m.zones)k(p);E+=m.zones.length+1}C.push(new Pe(0,0,!1)),g.push(new ye(0,0,0,0,0)),I.push(o),B.push(l),S.push(E);let u=new ne(C.length*4);for(let m of C)m.write(u);let w=new ne(g.length*10);for(let m of g)m.write(w);let M=B.length*4,R={pdta:new ne(M),xdta:new ne(M)};for(let[m,p]of B.entries()){let y=I[m];se(R.pdta,y&65535),se(R.pdta,p&65535),se(R.xdta,y>>16),se(R.xdta,p>>16)}let v=(A.length+1)*i,N={pdta:new ne(v),xdta:new ne(v)};for(let[m,p]of A.entries())p.write(N,S[m]);return e?(Ne(N.pdta,"EOP",20),N.pdta.currentIndex+=4,se(N.pdta,E&65535),N.pdta.currentIndex+=12,Ne(N.xdta,"",20),N.xdta.currentIndex+=4,se(N.xdta,E>>16),N.xdta.currentIndex+=12):(Ne(N.pdta,"EOI",20),se(N.pdta,E&65535),Ne(N.xdta,"",20),se(N.xdta,E>>16)),{writeXdta:Math.max(o,l,E)>65535,gen:{pdta:U.write(s,u),xdta:U.write(a,new ne(4))},mod:{pdta:U.write(a,w),xdta:U.write(a,new ne(10))},bag:{pdta:U.write(n,R.pdta),xdta:U.write(n,R.xdta)},hdr:{pdta:U.write(r,N.pdta),xdta:U.write(r,N.xdta)}}}var Qn={writeDefaultModulators:!0,writeExtendedLimits:!0,software:"SpessaSynth"};function Wa(t,e){let A=bA(e,Qn);h.groupCollapsed("%cSaving soundbank...",d.info),h.group("%cWriting INFO...",d.info);let s=[],a=(u,w)=>{w&&s.push(...U.getParts(u,[et(w,!0,!0)]))},n=t.soundBankInfo;{let u=new ne(4);se(u,n.version.major),se(u,n.version.minor),s.push(U.write("ifil",u))}if(a("isng",n.soundEngine),a("INAM",n.name),a("irom",n.romInfo),n.romVersion){let u=new ne(4);se(u,n.romVersion.major),se(u,n.romVersion.minor),s.push(U.write("iver",u))}a("ICRD",Bs(n.creationDate)),a("IENG",n.engineer),a("IPRD",n.product),a("ICOP",n.copyright),a("ICMT",n?.subject?(n?.comment?n.comment+`
5
- `:"")+n.subject:n?.comment);let r=A.software;if(a("ISFT",r),t.defaultModulators.some(u=>!En.some(w=>we.isIdentical(w,u,!0)))&&A?.writeDefaultModulators){let u=t.defaultModulators;h.info(`%cWriting %c${u.length}%c default modulators...`,d.info,d.recognized,d.info);let w=new ne(10+u.length*10);for(let M of u)M.write(w);hs(w,0,10),s.push(...U.getParts("DMOD",[w]))}h.groupEnd(),h.info("%cWriting SDTA...",d.info);let i=[],o=[],I=Ka(t,i,o);h.info("%cWriting PDTA...",d.info),h.info("%cWriting SHDR...",d.info);let l=Za(t,i,o);h.group("%cWriting instruments...",d.info);let B=vs(t,!1);h.groupEnd(),h.group("%cWriting presets...",d.info);let C=vs(t,!0);h.groupEnd();let g=[C.hdr,C.bag,C.mod,C.gen,B.hdr,B.bag,B.mod,B.gen,l],E=U.getParts("pdta",g.map(u=>u.pdta),!0);A.writeExtendedLimits&&(B.writeXdta||C.writeXdta||t.presets.some(u=>u.name.length>20)||t.instruments.some(u=>u.name.length>20)||t.samples.some(u=>u.name.length>20))&&(h.info("%cWriting the xdta chunk as writeExtendedLimits is enabled and at least one condition was met.",d.info,d.value),s.push(...U.getParts("xdta",g.map(u=>u.xdta),!0)));let S=U.getParts("INFO",s,!0);h.info("%cWriting the output file...",d.info);let k=U.writeParts("RIFF",[et("sfbk"),...S,...I,...E]);return h.info(`%cSaved successfully! Final file size: %c${k.length}`,d.info,d.recognized),h.groupEnd(),k.buffer}var Ot=class{static verifyHeader(t,...e){for(let A of e)if(t.header.toLowerCase()===A.toLowerCase())return;this.parsingError(`Invalid DLS chunk header! Expected "${e.join(", or ")}" got "${t.header.toLowerCase()}"`)}static verifyText(t,...e){for(let A of e)if(t.toLowerCase()===A.toLowerCase())return;this.parsingError(`FourCC error: Expected "${e.join(", or ")}" got "${t.toLowerCase()}"`)}static parsingError(t){throw h.groupEnd(),new Error(`DLS parse error: ${t} The file may be corrupted.`)}static verifyAndReadList(t,...e){this.verifyHeader(t,"LIST"),t.data.currentIndex=0,this.verifyText(de(t.data,4),...e);let A=[];for(;t.data.length>t.data.currentIndex;)A.push(U.read(t.data));return A}},Z={none:0,modLfo:1,velocity:2,keyNum:3,volEnv:4,modEnv:5,pitchWheel:6,polyPressure:7,channelPressure:8,vibratoLfo:9,modulationWheel:129,volume:135,pan:138,expression:139,chorus:221,reverb:219,pitchWheelRange:256,fineTune:257,coarseTune:258},P={none:0,gain:1,reserved:2,pitch:3,pan:4,keyNum:5,chorusSend:128,reverbSend:129,modLfoFreq:260,modLfoDelay:261,vibLfoFreq:276,vibLfoDelay:277,volEnvAttack:518,volEnvDecay:519,reservedEG1:520,volEnvRelease:521,volEnvSustain:522,volEnvDelay:523,volEnvHold:524,modEnvAttack:778,modEnvDecay:779,reservedEG2:780,modEnvRelease:781,modEnvSustain:782,modEnvDelay:783,modEnvHold:784,filterCutoff:1280,filterQ:1281},Gs={forward:0,loopAndRelease:1},gA=20,IA=16,xt=class Xt extends Ot{gain=0;unityNote=60;fineTune=0;loops=new Array;fulOptions=2;static copyFrom(e){let A=new Xt;return A.unityNote=e.unityNote,A.gain=e.gain,A.fineTune=e.fineTune,A.loops=e.loops.map(s=>({...s})),A.fulOptions=e.fulOptions,A}static read(e){this.verifyHeader(e,"wsmp");let A=new Xt,s=X(e.data,4);if(s!==gA&&h.warn(`Wsmp cbSize mismatch: got ${s}, expected ${gA}.`),A.unityNote=X(e.data,2),A.fineTune=ls(e.data[e.data.currentIndex++],e.data[e.data.currentIndex++]),A.gain=X(e.data,4)|0,A.fulOptions=X(e.data,4),X(e.data,4)!==0){let a=X(e.data,4);a!==IA&&h.warn(`CbSize for loop in wsmp mismatch. Expected ${IA}, got ${a}.`);let n=X(e.data,4),r=X(e.data,4),i=X(e.data,4);A.loops.push({loopStart:r,loopLength:i,loopType:n})}return A}static fromSFSample(e){let A=new Xt;return A.unityNote=e.originalKey,A.fineTune=e.pitchCorrection,(e.loopEnd!==0||e.loopStart!==0)&&A.loops.push({loopStart:e.loopStart,loopLength:e.loopEnd-e.loopStart,loopType:Gs.forward}),A}static fromSFZone(e){let A=new Xt;A.unityNote=e.getGenerator(c.overridingRootKey,e.sample.originalKey),e.getGenerator(c.scaleTuning,100)===0&&e.keyRange.max-e.keyRange.min===0&&(A.unityNote=e.keyRange.min),A.fineTune=e.fineTuning+e.sample.pitchCorrection,A.gain=-(e.getGenerator(c.initialAttenuation,0)*.4)<<16;let s=e.getGenerator(c.sampleModes,0);if(s!==0){let a=e.sample.loopStart+e.getGenerator(c.startloopAddrsOffset,0)+e.getGenerator(c.startloopAddrsCoarseOffset,0)*32768,n=e.sample.loopEnd+e.getGenerator(c.endloopAddrsOffset,0)+e.getGenerator(c.endloopAddrsCoarseOffset,0)*32768,r;switch(s){case 1:default:r=0;break;case 3:r=1}A.loops.push({loopType:r,loopStart:a,loopLength:n-a})}return A}toSFZone(e,A){let s=0,a=this.loops[0];a&&(s=a.loopType===Gs.loopAndRelease?3:1),s!==0&&e.setGenerator(c.sampleModes,s);let n=-(this.gain>>16)/.4;if(n!==0&&e.setGenerator(c.initialAttenuation,n),e.fineTuning=this.fineTune-A.pitchCorrection,this.unityNote!==A.originalKey&&e.setGenerator(c.overridingRootKey,this.unityNote),a){let r=a.loopStart-A.loopStart,i=a.loopStart+a.loopLength-A.loopEnd;if(r!==0){let o=r%32768;e.setGenerator(c.startloopAddrsOffset,o);let I=Math.trunc(r/32768);I!==0&&e.setGenerator(c.startloopAddrsCoarseOffset,I)}if(i!==0){let o=i%32768;e.setGenerator(c.endloopAddrsOffset,o);let I=Math.trunc(i/32768);I!==0&&e.setGenerator(c.endloopAddrsCoarseOffset,I)}}}write(){let e=new ne(gA+this.loops.length*IA);ge(e,gA),se(e,this.unityNote),se(e,this.fineTune),ge(e,this.gain),ge(e,this.fulOptions),ge(e,this.loops.length);for(let A of this.loops)ge(e,IA),ge(e,A.loopType),ge(e,A.loopStart),ge(e,A.loopLength);return U.write("wsmp",e)}},JA={PCM:1,ALAW:6};function za(t,e){let A=Math.pow(2,e*8-1),s=Math.pow(2,e*8),a,n=!1;e===1?(a=255,n=!0):a=A;let r=t.length/e,i=new Float32Array(r);if(e===2){let o=new Int16Array(t.buffer),I=o.length;for(let l=0;l<I;l++)i[l]=o[l]/32768}else for(let o=0;o<i.length;o++){let I=X(t,e);n?i[o]=I/a-.5:(I>=A&&(I-=s),i[o]=I/a)}return i}function _a(t,e){let A=t.length/e,s=new Float32Array(A);for(let a=0;a<s.length;a++){let n=X(t,e),r=n^85;r&=127;let i=r>>4,o=r&15;i>0&&(o+=16),o=(o<<4)+8,i>1&&(o=o<<i-1),s[a]=(n>127?o:-o)/32768}return s}var $a=class extends vA{wFormatTag;bytesPerSample;rawData;constructor(t,e,A,s,a,n,r,i,o){super(t,e,A,s,ve.monoSample,a,n),this.dataOverridden=!1,this.rawData=r.data,this.wFormatTag=i,this.bytesPerSample=o}getAudioData(){if(!this.rawData)return new Float32Array(0);if(!this.audioData){let t;switch(this.wFormatTag){default:h.warn(`Failed to decode sample. Unknown wFormatTag: ${this.wFormatTag}`),t=new Float32Array(this.rawData.length/this.bytesPerSample);break;case JA.PCM:t=za(this.rawData,this.bytesPerSample);break;case JA.ALAW:t=_a(this.rawData,this.bytesPerSample);break}this.setAudioData(t,this.sampleRate)}return this.audioData??new Float32Array(0)}getRawData(t){return this.dataOverridden||this.isCompressed?super.getRawData(t):this.wFormatTag===JA.PCM&&this.bytesPerSample===2?this.rawData:this.encodeS16LE()}},Ls=class is extends Ot{waveSample=new xt;wFormatTag;bytesPerSample;sampleRate;dataChunk;name="Unnamed sample";constructor(e,A,s,a){super(),this.wFormatTag=e,this.bytesPerSample=A,this.sampleRate=s,this.dataChunk=a}static read(e){let A=this.verifyAndReadList(e,"wave"),s=A.find(C=>C.header==="fmt ");if(!s)throw new Error("No fmt chunk in the wave file!");let a=X(s.data,2),n=X(s.data,2);if(n!==1)throw new Error(`Only mono samples are supported. Fmt reports ${n} channels.`);let r=X(s.data,4);X(s.data,4),X(s.data,2);let i=X(s.data,2)/8,o=A.find(C=>C.header==="data");if(!o)throw new Error("No data chunk in the WAVE chunk!");let I=new is(a,i,r,o),l=U.findListType(A,"INFO");if(l){let C=U.read(l.data);for(;C.header!=="INAM"&&l.data.currentIndex<l.data.length;)C=U.read(l.data);C.header==="INAM"&&(I.name=de(C.data,C.size).trim())}let B=A.find(C=>C.header==="wsmp");return B&&(I.waveSample=xt.read(B)),I}static fromSFSample(e){let A=e.getRawData(!1),s=new is(1,2,e.sampleRate,new U("data",A.length,new ne(A.buffer)));return s.name=e.name,s.waveSample=xt.fromSFSample(e),s}toSFSample(e){let A=this.waveSample.unityNote,s=this.waveSample.fineTune,a=Math.trunc(s/100);A+=a,s-=a*100;let n=0,r=0,i=this.waveSample.loops?.[0];i&&(n=i.loopStart,r=i.loopStart+i.loopLength);let o=new $a(this.name,this.sampleRate,A,s,n,r,this.dataChunk,this.wFormatTag,this.bytesPerSample);e.addSamples(o)}write(){let e=this.writeFmt(),A=this.waveSample.write(),s=U.getParts("data",[this.dataChunk.data]),a=U.write("INAM",et(this.name,!0)),n=U.write("INFO",a,!1,!0);return h.info(`%cSaved %c${this.name}%c successfully!`,d.recognized,d.value,d.recognized),U.getParts("wave",[e,A,...s,n],!0)}writeFmt(){let e=new ne(18);return se(e,this.wFormatTag),se(e,1),ge(e,this.sampleRate),ge(e,this.sampleRate*2),se(e,2),se(e,this.bytesPerSample*8),U.write("fmt ",e)}},nt=class os{source;transform;bipolar;invert;constructor(e=Z.none,A=le.linear,s=!1,a=!1){this.source=e,this.transform=A,this.bipolar=s,this.invert=a}get sourceName(){return Object.keys(Z).find(e=>Z[e]===this.source)??this.source.toString()}get transformName(){return Object.keys(le).find(e=>le[e]===this.transform)??this.transform.toString()}static copyFrom(e){return new os(e.source,e.transform,e.bipolar,e.invert)}static fromSFSource(e){let A;if(e.isCC)switch(e.index){case f.modulationWheel:A=Z.modulationWheel;break;case f.mainVolume:A=Z.volume;break;case f.pan:A=Z.pan;break;case f.expression:A=Z.expression;break;case f.chorusDepth:A=Z.chorus;break;case f.reverbDepth:A=Z.reverb;break}else switch(e.index){case Ie.noController:A=Z.none;break;case Ie.noteOnKeyNum:A=Z.keyNum;break;case Ie.noteOnVelocity:A=Z.velocity;break;case Ie.pitchWheel:A=Z.pitchWheel;break;case Ie.pitchWheelRange:A=Z.pitchWheelRange;break;case Ie.polyPressure:A=Z.polyPressure;break;case Ie.channelPressure:A=Z.channelPressure}if(A!==void 0)return new os(A,e.curveType,e.isBipolar,e.isNegative)}toString(){return`${this.sourceName} ${this.transformName} ${this.bipolar?"bipolar":"unipolar"} ${this.invert?"inverted":"positive"}`}toTransformFlag(){return this.transform|(this.bipolar?1:0)<<4|(this.invert?1:0)<<5}toSFSource(){let e,A=!1;switch(this.source){default:case Z.modLfo:case Z.vibratoLfo:case Z.coarseTune:case Z.fineTune:case Z.modEnv:return;case Z.keyNum:e=Ie.noteOnKeyNum;break;case Z.none:e=Ie.noController;break;case Z.modulationWheel:e=f.modulationWheel,A=!0;break;case Z.pan:e=f.pan,A=!0;break;case Z.reverb:e=f.reverbDepth,A=!0;break;case Z.chorus:e=f.chorusDepth,A=!0;break;case Z.expression:e=f.expression,A=!0;break;case Z.volume:e=f.mainVolume,A=!0;break;case Z.velocity:e=Ie.noteOnVelocity;break;case Z.polyPressure:e=Ie.polyPressure;break;case Z.channelPressure:e=Ie.channelPressure;break;case Z.pitchWheel:e=Ie.pitchWheel;break;case Z.pitchWheelRange:e=Ie.pitchWheelRange;break}if(e!==void 0)return new at(e,this.transform,A,this.bipolar,this.invert)}},un=new ye(219,0,c.reverbEffectsSend,1e3,0),mn=new ye(221,0,c.chorusEffectsSend,1e3,0);new ye(129,0,c.vibLfoToPitch,0,0);new ye(13,0,c.vibLfoToPitch,0,0);var ja=new Set([c.sampleModes,c.initialAttenuation,c.keyRange,c.velRange,c.sampleID,c.fineTune,c.coarseTune,c.startAddrsOffset,c.startAddrsCoarseOffset,c.endAddrOffset,c.endAddrsCoarseOffset,c.startloopAddrsOffset,c.startloopAddrsCoarseOffset,c.endloopAddrsOffset,c.endloopAddrsCoarseOffset,c.overridingRootKey,c.exclusiveClass]),Jt=class pt{source;control;destination;scale;transform;constructor(e=new nt,A=new nt,s,a,n){this.source=e,this.control=A,this.destination=s,this.transform=a,this.scale=n}get isStaticParameter(){return this.source.source===Z.none&&this.control.source===Z.none}get shortScale(){return this.scale>>16}get transformName(){return Object.keys(le).find(e=>le[e]===this.transform)??this.transform.toString()}get destinationName(){return Object.keys(P).find(e=>P[e]===this.destination)??this.destination.toString()}static read(e){let A=X(e,2),s=X(e,2),a=X(e,2),n=X(e,2),r=X(e,4)|0,i=n&15,o=new nt(s,n>>4&15,St(n,8),St(n,9));return new pt(new nt(A,n>>10&15,St(n,14),St(n,15)),o,a,i,r)}static fromSFModulator(e,A){let s=l=>{h.warn(`Failed converting SF modulator into DLS:
4
+ amount: ${this.transformAmount}`+(this.transformType===2?"absolute value":"")}write(e,A){se(e,this.primarySource.toSourceEnum()),se(e,this.destination),se(e,this.transformAmount),se(e,this.secondarySource.toSourceEnum()),se(e,this.transformType),A&&A.mod++}sumTransform(e){let A=as.copyFrom(this);return A.transformAmount+=e.transformAmount,A}},ye=class extends we{constructor(t,e,A,s,a){super(at.fromSourceEnum(t),at.fromSourceEnum(e),A,s,a),this.destination>hn&&(this.destination=c.invalid)}},Ha=[new ye(_e(Ce.concave,!1,!0,!1,Ie.noteOnVelocity),0,c.initialAttenuation,960,0),new ye(129,0,c.vibLfoToPitch,50,0),new ye(_e(Ce.concave,!1,!0,!0,f.mainVolume),0,c.initialAttenuation,960,0),new ye(13,0,c.vibLfoToPitch,50,0),new ye(526,16,c.fineTune,12700,0),new ye(650,0,c.pan,500,0),new ye(_e(Ce.concave,!1,!0,!0,f.expression),0,c.initialAttenuation,960,0),new ye(219,0,c.reverbEffectsSend,200,0),new ye(221,0,c.chorusEffectsSend,200,0)],Oa=[new ye(_e(Ce.convex,!0,!1,!0,f.attackTime),0,c.attackVolEnv,6e3,0),new ye(_e(Ce.linear,!0,!1,!0,f.releaseTime),0,c.releaseVolEnv,3600,0),new ye(_e(Ce.linear,!0,!1,!0,f.decayTime),0,c.decayVolEnv,3600,0),new ye(_e(Ce.linear,!0,!1,!0,f.brightness),0,c.initialFilterFc,9600,0),new ye(Bn,0,c.initialFilterQ,250,0),new ye(_e(Ce.switch,!1,!1,!0,f.softPedal),0,c.initialAttenuation,50,0),new ye(_e(Ce.switch,!1,!1,!0,f.softPedal),0,c.initialFilterFc,-2400,0),new ye(_e(Ce.linear,!0,!1,!0,f.balance),0,c.pan,500,0)],En=[...Ha,...Oa],Pe=class{type;value=0;constructor(t,e,A=!0){if(this.type=t,e===void 0)throw new Error("No value provided.");if(this.value=Math.round(e),A){let s=We[t];s!==void 0&&(this.value=Math.max(s.min,Math.min(s.max,this.value)))}}write(t){se(t,this.type),se(t,this.value)}toString(){return`${Object.keys(c).find(t=>c[t]===this.type)}: ${this.value}`}},$t=class{velRange={min:-1,max:127};keyRange={min:-1,max:127};generators=[];modulators=[];get hasKeyRange(){return this.keyRange.min!==-1}get hasVelRange(){return this.velRange.min!==-1}get fineTuning(){let t=this.getGenerator(c.coarseTune,0),e=this.getGenerator(c.fineTune,0);return t*100+e}set fineTuning(t){let e=Math.trunc(t/100),A=t%100;this.setGenerator(c.coarseTune,e),this.setGenerator(c.fineTune,A)}addToGenerator(t,e,A=!0){let s=this.getGenerator(t,We[t].def);this.setGenerator(t,e+s,A)}setGenerator(t,e,A=!0){switch(t){case c.sampleID:throw new Error("Use setSample()");case c.instrument:throw new Error("Use setInstrument()");case c.velRange:case c.keyRange:throw new Error("Set the range manually")}if(e===null){this.generators=this.generators.filter(a=>a.type!==t);return}let s=this.generators.findIndex(a=>a.type===t);s===-1?this.addGenerators(new Pe(t,e,A)):this.generators[s]=new Pe(t,e,A)}addGenerators(...t){for(let e of t)switch(e.type){default:this.generators.push(e);break;case c.sampleID:case c.instrument:break;case c.velRange:this.velRange.min=e.value&127,this.velRange.max=e.value>>8&127;break;case c.keyRange:this.keyRange.min=e.value&127,this.keyRange.max=e.value>>8&127}}addModulators(...t){this.modulators.push(...t)}getGenerator(t,e){return this.generators.find(A=>A.type===t)?.value??e}copyFrom(t){this.generators=t.generators.map(e=>new Pe(e.type,e.value,!1)),this.modulators=t.modulators.map(we.copyFrom.bind(we)),this.velRange={...t.velRange},this.keyRange={...t.keyRange}}getWriteGenerators(t){let e=this.generators.filter(A=>A.type!==c.sampleID&&A.type!==c.instrument&&A.type!==c.keyRange&&A.type!==c.velRange);if(!t)throw new Error("No bank provided! ");return this.hasVelRange&&e.unshift(new Pe(c.velRange,this.velRange.max<<8|Math.max(this.velRange.min,0),!1)),this.hasKeyRange&&e.unshift(new Pe(c.keyRange,this.keyRange.max<<8|Math.max(this.keyRange.min,0),!1)),e}},Ya=48e3,FA=class{name;sampleRate;originalKey;pitchCorrection;linkedSample;sampleType;loopStart;loopEnd;linkedTo=[];dataOverridden=!0;compressedData;audioData;constructor(t,e,A,s,a,n,r){this.name=t,this.sampleRate=e,this.originalKey=A,this.pitchCorrection=s,this.loopStart=n,this.loopEnd=r,this.sampleType=a}get isCompressed(){return this.compressedData!==void 0}get isLinked(){return this.sampleType===Fe.rightSample||this.sampleType===Fe.leftSample||this.sampleType===Fe.linkedSample}get useCount(){return this.linkedTo.length}getRawData(t){return this.compressedData&&t&&!this.dataOverridden?this.compressedData:this.encodeS16LE()}resampleData(t){let e=this.getAudioData(),A=t/this.sampleRate,s=new Float32Array(Math.floor(e.length*A));for(let a=0;a<s.length;a++)s[a]=e[Math.floor(a*(1/A))];e=s,this.sampleRate=t,this.loopStart=Math.floor(this.loopStart*A),this.loopEnd=Math.floor(this.loopEnd*A),this.audioData=e}async compressSample(t){if(!this.isCompressed)try{let e=this.getAudioData();(this.sampleRate<8e3||this.sampleRate>96e3)&&(this.resampleData(Ya),e=this.getAudioData());let A=await t(e,this.sampleRate);this.setCompressedData(A)}catch(e){h.warn(`Failed to compress ${this.name}. Leaving as uncompressed!`,e),this.compressedData=void 0}}setSampleType(t){if(this.sampleType=t,this.isLinked||(this.linkedSample&&(this.linkedSample.linkedSample=void 0,this.linkedSample.sampleType=t),this.linkedSample=void 0),(t&32768)>0)throw new Error("ROM samples are not supported.")}unlinkSample(){this.setSampleType(Fe.monoSample)}setLinkedSample(t,e){if(t.linkedSample)throw new Error(`${t.name} is linked tp ${t.linkedSample.name}. Unlink it first.`);switch(this.linkedSample=t,t.linkedSample=this,e){case Fe.leftSample:this.setSampleType(Fe.leftSample),t.setSampleType(Fe.rightSample);break;case Fe.rightSample:this.setSampleType(Fe.rightSample),t.setSampleType(Fe.leftSample);break;case Fe.linkedSample:this.setSampleType(Fe.linkedSample),t.setSampleType(Fe.linkedSample);break;default:throw new Error("Invalid sample type: "+e)}}linkTo(t){this.linkedTo.push(t)}unlinkFrom(t){let e=this.linkedTo.indexOf(t);if(e===-1){h.warn(`Cannot unlink ${t.name} from ${this.name}: not linked.`);return}this.linkedTo.splice(e,1)}getAudioData(){if(this.audioData)return this.audioData;if(this.isCompressed)return this.audioData=this.decodeVorbis(),this.audioData;throw new Error("Sample data is undefined for a BasicSample instance.")}setAudioData(t,e){this.audioData=t,this.sampleRate=e,this.dataOverridden=!0,this.compressedData=void 0}setCompressedData(t){this.audioData=void 0,this.compressedData=t,this.dataOverridden=!1}encodeS16LE(){let t=this.getAudioData(),e=new Int16Array(t.length),A=t.length;for(let s=0;s<A;s++){let a=t[s]*32768;a>32767?a=32767:a<-32768&&(a=-32768),e[s]=a}return new ne(e.buffer)}decodeVorbis(){if(this.audioData)return this.audioData;if(!this.compressedData)throw new Error("Compressed data is missing.");try{let t=vA.decode(this.compressedData).data[0];if(t===void 0)return h.warn(`Error decoding sample ${this.name}: Vorbis decode returned undefined.`),new Float32Array(0);for(let e=0;e<t.length;e++)t[e]=Math.max(-1,Math.min(t[e],.999969482421875));return t}catch(t){return h.warn(`Error decoding sample ${this.name}: ${t}`),new Float32Array(this.loopEnd+1)}}},qa=class extends FA{constructor(){super("",44100,60,0,Fe.monoSample,0,0)}},dn=class extends $t{parentInstrument;useCount;constructor(t,e){super(),this.parentInstrument=t,this._sample=e,e.linkTo(this.parentInstrument),this.useCount=t.useCount}_sample;get sample(){return this._sample}set sample(t){this._sample&&this._sample.unlinkFrom(this.parentInstrument),this._sample=t,t.linkTo(this.parentInstrument)}getWriteGenerators(t){let e=super.getWriteGenerators(t),A=t.samples.indexOf(this.sample);if(A===-1)throw new Error(`${this.sample.name} does not exist in ${t.soundBankInfo.name}! Cannot write sampleID generator.`);return e.push(new Pe(c.sampleID,A,!1)),e}},fn=class extends $t{parentPreset;constructor(t,e){super(),this.parentPreset=t,this._instrument=e,this._instrument.linkTo(this.parentPreset)}_instrument;get instrument(){return this._instrument}set instrument(t){this._instrument&&this._instrument.unlinkFrom(this.parentPreset),this._instrument=t,this._instrument.linkTo(this.parentPreset)}getWriteGenerators(t){let e=super.getWriteGenerators(t);if(!t)throw new Error("Instrument ID cannot be determined without the sound bank itself.");let A=t.instruments.indexOf(this.instrument);if(A===-1)throw new Error(`${this.instrument.name} does not exist in ${t.soundBankInfo.name}! Cannot write instrument generator.`);return e.push(new Pe(c.instrument,A,!1)),e}},rs=new Int16Array(Dt);for(let t=0;t<rs.length;t++)We[t]&&(rs[t]=We[t].def);var zt=class ot{parentSoundBank;name="";program=0;bankMSB=0;bankLSB=0;isGMGSDrum=!1;zones=[];globalZone;library=0;genre=0;morphology=0;constructor(e,A=new $t){this.parentSoundBank=e,this.globalZone=A}get isDrum(){let e=this.parentSoundBank.isXGBank;return this.isGMGSDrum||e&&De.isXGDrum(this.bankMSB)}static isInRange(e,A){return A>=e.min&&A<=e.max}static addUniqueModulators(e,A){for(let s of A)e.some(a=>we.isIdentical(s,a))||e.push(s)}static subtractRanges(e,A){return{min:Math.max(e.min,A.min),max:Math.min(e.max,A.max)}}delete(){for(let e of this.zones)e.instrument?.unlinkFrom(this)}deleteZone(e){this.zones[e]?.instrument?.unlinkFrom(this),this.zones.splice(e,1)}createZone(e){let A=new fn(this,e);return this.zones.push(A),A}preload(e,A){for(let s=e;s<A+1;s++)for(let a=0;a<128;a++)for(let n of this.getVoiceParameters(s,a))n.sample.getAudioData()}matches(e){return je.matches(this,e)}getVoiceParameters(e,A){let s=new Array;for(let a of this.zones){if(!ot.isInRange(a.hasKeyRange?a.keyRange:this.globalZone.keyRange,e)||!ot.isInRange(a.hasVelRange?a.velRange:this.globalZone.velRange,A))continue;let n=a.instrument;if(!n||n.zones.length===0)continue;let r=new Int16Array(Dt);for(let o of this.globalZone.generators)r[o.type]=o.value;for(let o of a.generators)r[o.type]=o.value;let i=[...a.modulators];ot.addUniqueModulators(i,this.globalZone.modulators);for(let o of n.zones){if(!ot.isInRange(o.hasKeyRange?o.keyRange:n.globalZone.keyRange,e)||!ot.isInRange(o.hasVelRange?o.velRange:n.globalZone.velRange,A))continue;let I=[...o.modulators];ot.addUniqueModulators(I,n.globalZone.modulators),ot.addUniqueModulators(I,this.parentSoundBank.defaultModulators);for(let B of i){let C=I.findIndex(g=>we.isIdentical(B,g));C===-1?I.push(B):I[C]=I[C].sumTransform(B)}let l=new Int16Array(rs);for(let B of n.globalZone.generators)l[B.type]=B.value;for(let B of o.generators)l[B.type]=B.value;for(let B=0;B<l.length;B++)l[B]=Math.max(-32768,Math.min(32767,l[B]+r[B]));l[c.initialAttenuation]=Math.floor(l[c.initialAttenuation]*.4),s.push({sample:o.sample,generators:l,modulators:I})}}return s}toMIDIString(){return je.toMIDIString(this)}toString(){return je.toFullMIDIString(this)}toFlattenedInstrument(){let e=(I,l)=>{I.push(...l.filter(B=>!I.some(C=>C.type===B.type)))},A=(I,l)=>{I.push(...l.filter(B=>!I.some(C=>we.isIdentical(B,C))))},s=new _t;s.name=this.name;let a=[],n=[],r=this.globalZone;a.push(...r.generators),n.push(...r.modulators);let i=r.keyRange,o=r.velRange;for(let I of this.zones){if(!I.instrument)throw new Error("No instrument in a preset zone.");let l=I.keyRange;I.hasKeyRange||(l=i);let B=I.velRange;I.hasVelRange||(B=o);let C=I.generators.map(F=>new Pe(F.type,F.value));e(C,a);let g=[...I.modulators];A(g,n);let E=I.instrument,S=E.zones,k=[],u=[],M=E.globalZone;k.push(...M.generators),u.push(...M.modulators);let w=M.keyRange,R=M.velRange;for(let F of S){if(!F.sample)throw new Error("No sample in an instrument zone.");let N=F.keyRange;F.hasKeyRange||(N=w);let m=F.velRange;if(F.hasVelRange||(m=R),N=ot.subtractRanges(N,l),m=ot.subtractRanges(m,B),N.max<N.min||m.max<m.min)continue;let p=F.generators.map(J=>new Pe(J.type,J.value));e(p,k);let y=[...F.modulators];A(y,u);let V=[...y];for(let J of g){let te=V.findIndex(x=>we.isIdentical(J,x));te===-1?V.push(J):V[te]=V[te].sumTransform(J)}let Y=p.map(J=>new Pe(J.type,J.value));for(let J of C){if(J.type===c.velRange||J.type===c.keyRange||J.type===c.instrument||J.type===c.endOper||J.type===c.sampleModes)continue;let te=p.findIndex(x=>x.type===J.type);if(te===-1){let x=We[J.type].def+J.value;Y.push(new Pe(J.type,x))}else{let x=Y[te].value+J.value;Y[te]=new Pe(J.type,x)}}Y=Y.filter(J=>J.type!==c.sampleID&&J.type!==c.keyRange&&J.type!==c.velRange&&J.type!==c.endOper&&J.type!==c.instrument&&(!(J.type in We)||J.value!==We[J.type].def));let q=s.createZone(F.sample);q.keyRange=N,q.velRange=m,q.keyRange.min===0&&q.keyRange.max===127&&(q.keyRange.min=-1),q.velRange.min===0&&q.velRange.max===127&&(q.velRange.min=-1),q.addGenerators(...Y),q.addModulators(...V)}}return s}write(e,A){h.info(`%cWriting ${this.name}...`,d.info),Ne(e.pdta,this.name.slice(0,20),20),Ne(e.xdta,this.name.slice(20),20),se(e.pdta,this.program);let s=this.bankMSB;this.isGMGSDrum?s=128:this.bankMSB===0&&(s=this.bankLSB),se(e.pdta,s),e.xdta.currentIndex+=4,se(e.pdta,A&65535),se(e.xdta,A>>16),ge(e.pdta,this.library),ge(e.pdta,this.genre),ge(e.pdta,this.morphology),e.xdta.currentIndex+=12}},Ja=new Set([c.velRange,c.keyRange,c.instrument,c.sampleID,c.exclusiveClass,c.endOper,c.sampleModes,c.startloopAddrsOffset,c.startloopAddrsCoarseOffset,c.endloopAddrsOffset,c.endloopAddrsCoarseOffset,c.startAddrsOffset,c.startAddrsCoarseOffset,c.endAddrOffset,c.endAddrsCoarseOffset,c.initialAttenuation,c.fineTune,c.coarseTune,c.keyNumToVolEnvHold,c.keyNumToVolEnvDecay,c.keyNumToModEnvHold,c.keyNumToModEnvDecay]),_t=class{name="";zones=[];globalZone=new $t;linkedTo=[];get useCount(){return this.linkedTo.length}createZone(t){let e=new dn(this,t);return this.zones.push(e),e}linkTo(t){this.linkedTo.push(t);for(let e of this.zones)e.useCount++}unlinkFrom(t){let e=this.linkedTo.indexOf(t);if(e===-1){h.warn(`Cannot unlink ${t.name} from ${this.name}: not linked.`);return}this.linkedTo.splice(e,1);for(let A of this.zones)A.useCount--}deleteUnusedZones(){this.zones=this.zones.filter(t=>{let e=t.useCount>0;return e||t.sample.unlinkFrom(this),e})}delete(){if(this.useCount>0)throw new Error(`Cannot delete an instrument that is used by: ${this.linkedTo.map(t=>t.name).toString()}.`);for(let t of this.zones)t.sample.unlinkFrom(this)}deleteZone(t,e=!1){let A=this.zones[t];return A.useCount-=1,A.useCount<1||e?(A.sample.unlinkFrom(this),this.zones.splice(t,1),!0):!1}globalize(){let t=this.globalZone;for(let A=0;A<58;A++){if(Ja.has(A))continue;A=A;let s={},a=We[A]?.def||0;s[a]=0;for(let n of this.zones){let r=n.getGenerator(A,void 0);r===void 0?s[a]++:s[r]===void 0?s[r]=1:s[r]++;let i;switch(A){default:continue;case c.decayVolEnv:i=c.keyNumToVolEnvDecay;break;case c.holdVolEnv:i=c.keyNumToVolEnvHold;break;case c.decayModEnv:i=c.keyNumToModEnvDecay;break;case c.holdModEnv:i=c.keyNumToModEnvHold}if(n.getGenerator(i,void 0)!==void 0){s={};break}}if(Object.keys(s).length>0){let n=["0",0];for(let[i,o]of Object.entries(s))o>n[1]&&(n=[i,o]);let r=Number.parseInt(n[0]);r!==a&&t.setGenerator(A,r,!1);for(let i of this.zones){let o=i.getGenerator(A,void 0);o===void 0?r!==a&&i.setGenerator(A,a):o===r&&i.setGenerator(A,null)}}}let e=this.zones.length===0?[]:this.zones[0].modulators.map(A=>we.copyFrom(A));for(let A of e){let s=!0;for(let a of this.zones)s&&(a.modulators.find(n=>we.isIdentical(n,A))||(s=!1));if(s){t.addModulators(we.copyFrom(A));for(let a of this.zones){let n=a.modulators.find(r=>we.isIdentical(r,A));n&&n.transformAmount===A.transformAmount&&a.modulators.splice(a.modulators.indexOf(n),1)}}}}write(t,e){h.info(`%cWriting ${this.name}...`,d.info),Ne(t.pdta,this.name.slice(0,20),20),Ne(t.xdta,this.name.slice(20),20),se(t.pdta,e&65535),se(t.xdta,e>>>16)}};function Ka(t,e,A,s){let a=0,n=[],r=[];for(let l of t.samples){let B=l.getRawData(!0);a++,s?.(a/t.samples.length),h.info(`%cWrote sample %c${a}. ${l.name}%c of %c${t.samples.length}.`,d.info,d.recognized,d.info,d.recognized),n.push(B),r.push(B.length),l.isCompressed||n.push(new Uint8Array(92))}let i=U.getParts("smpl",n),o=U.getParts("sdta",i,!0),I=0;for(let[l,B]of t.samples.entries()){let C=r[l],g,E;B.isCompressed?(g=I,E=g+C):(g=I/2,E=g+C/2,I+=92),I+=C,e.push(g),A.push(E)}return o}var Va=class extends FA{linkedSampleIndex;s16leData;startByteOffset;endByteOffset;sampleID;constructor(t,e,A,s,a,n,r,i,o,I,l,B){let C=(I&16)>0;I&=-17,super(t,n,r,i,I,s-e/2,a-e/2),this.dataOverridden=!1,this.name=t,this.startByteOffset=e,this.endByteOffset=A,this.sampleID=B;let g=l instanceof ne?l.currentIndex:0;l instanceof ne?C?(this.loopStart+=this.startByteOffset/2,this.loopEnd+=this.startByteOffset/2,this.setCompressedData(l.slice(this.startByteOffset/2+g,this.endByteOffset/2+g))):this.s16leData=l.slice(g+this.startByteOffset,g+this.endByteOffset):this.setAudioData(l.slice(this.startByteOffset/2,this.endByteOffset/2),n),this.linkedSampleIndex=o}getLinkedSample(t){if(this.linkedSample||!this.isLinked)return;let e=t[this.linkedSampleIndex];e?e.linkedSample?(h.info(`%cInvalid linked sample for ${this.name}: ${e.name} is already linked to ${e.linkedSample.name}`,d.warn),this.unlinkSample()):this.setLinkedSample(e,this.sampleType):(h.info(`%cInvalid linked sample for ${this.name}. Setting to mono.`,d.warn),this.unlinkSample())}getAudioData(){if(this.audioData)return this.audioData;if(this.isCompressed)return super.getAudioData();if(!this.s16leData)throw console.error(this),new Error("Unexpected lack of audio data.");let t=this.endByteOffset-this.startByteOffset;if(t<1)return h.warn(`Invalid sample ${this.name}! Invalid length: ${t}`),new Float32Array(1);let e=new Float32Array(t/2),A=new Int16Array(this.s16leData.buffer),s=A.length;for(let a=0;a<s;a++)e[a]=A[a]/32768;return this.audioData=e,e}getRawData(t){return this.dataOverridden||this.compressedData?super.getRawData(t):this.s16leData??new Uint8Array(0)}};function vs(t,e,A=!0){let s=[],a=0;for(;t.data.length>t.data.currentIndex;){let n=Xa(a,t.data,e);s.push(n),a++}if(s.pop(),A)for(let n of s)n.getLinkedSample(s);return s}function Xa(t,e,A){let s=de(e,20),a=X(e,4)*2,n=X(e,4)*2,r=X(e,4),i=X(e,4),o=X(e,4),I=e[e.currentIndex++];I>127&&(I=60);let l=Jn(e[e.currentIndex++]),B=X(e,2),C=X(e,2);return new Va(s,a,n,r,i,o,I,l,B,C,A,t)}function Za(t,e,A){let a=46*(t.samples.length+1),n=new ne(a),r=new ne(a),i=0;for(let[o,I]of t.samples.entries()){Ne(n,I.name.slice(0,20),20),Ne(r,I.name.slice(20),20);let l=e[o];ge(n,l),r.currentIndex+=4;let B=A[o];ge(n,B),r.currentIndex+=4;let C=I.loopStart+l,g=I.loopEnd+l;I.isCompressed&&(C-=l,g-=l),ge(n,C),ge(n,g),ge(n,I.sampleRate),n[n.currentIndex++]=I.originalKey,n[n.currentIndex++]=I.pitchCorrection,r.currentIndex+=14;let E=I.linkedSample?t.samples.indexOf(I.linkedSample):0;se(n,Math.max(0,E)&65535),se(r,Math.max(0,E)>>16),i=Math.max(i,E);let S=I.sampleType;I.isCompressed&&(S|=16),se(n,S),r.currentIndex+=2}return Ne(n,"EOS",46),Ne(r,"EOS",46),{pdta:U.write("shdr",n),xdta:U.write("shdr",r)}}function Fs(t,e=!1){let A=e?t.presets:t.instruments,s=e?"pgen":"igen",a=e?"pmod":"imod",n=e?"pbag":"ibag",r=e?"phdr":"inst",i=e?38:22,o=0,I=new Array,l=0,B=new Array,C=new Array,g=new Array,E=0,S=new Array,k=m=>{I.push(o);let p=m.getWriteGenerators(t);o+=p.length,C.push(...p),B.push(l);let y=m.modulators;l+=y.length,g.push(...y)};for(let m of A){S.push(E),k(m.globalZone);for(let p of m.zones)k(p);E+=m.zones.length+1}C.push(new Pe(0,0,!1)),g.push(new ye(0,0,0,0,0)),I.push(o),B.push(l),S.push(E);let u=new ne(C.length*4);for(let m of C)m.write(u);let M=new ne(g.length*10);for(let m of g)m.write(M);let w=B.length*4,R={pdta:new ne(w),xdta:new ne(w)};for(let[m,p]of B.entries()){let y=I[m];se(R.pdta,y&65535),se(R.pdta,p&65535),se(R.xdta,y>>16),se(R.xdta,p>>16)}let F=(A.length+1)*i,N={pdta:new ne(F),xdta:new ne(F)};for(let[m,p]of A.entries())p.write(N,S[m]);return e?(Ne(N.pdta,"EOP",20),N.pdta.currentIndex+=4,se(N.pdta,E&65535),N.pdta.currentIndex+=12,Ne(N.xdta,"",20),N.xdta.currentIndex+=4,se(N.xdta,E>>16),N.xdta.currentIndex+=12):(Ne(N.pdta,"EOI",20),se(N.pdta,E&65535),Ne(N.xdta,"",20),se(N.xdta,E>>16)),{writeXdta:Math.max(o,l,E)>65535,gen:{pdta:U.write(s,u),xdta:U.write(a,new ne(4))},mod:{pdta:U.write(a,M),xdta:U.write(a,new ne(10))},bag:{pdta:U.write(n,R.pdta),xdta:U.write(n,R.xdta)},hdr:{pdta:U.write(r,N.pdta),xdta:U.write(r,N.xdta)}}}var Qn={writeDefaultModulators:!0,writeExtendedLimits:!0,software:"SpessaSynth"};function Wa(t,e){let A=bA(e,Qn);h.groupCollapsed("%cSaving soundbank...",d.info),h.group("%cWriting INFO...",d.info);let s=[],a=(u,M)=>{M&&s.push(...U.getParts(u,[et(M,!0,!0)]))},n=t.soundBankInfo;{let u=new ne(4);se(u,n.version.major),se(u,n.version.minor),s.push(U.write("ifil",u))}if(a("isng",n.soundEngine),a("INAM",n.name),a("irom",n.romInfo),n.romVersion){let u=new ne(4);se(u,n.romVersion.major),se(u,n.romVersion.minor),s.push(U.write("iver",u))}a("ICRD",Bs(n.creationDate)),a("IENG",n.engineer),a("IPRD",n.product),a("ICOP",n.copyright),a("ICMT",n?.subject?(n?.comment?n.comment+`
5
+ `:"")+n.subject:n?.comment);let r=A.software;if(a("ISFT",r),t.defaultModulators.some(u=>!En.some(M=>we.isIdentical(M,u,!0)))&&A?.writeDefaultModulators){let u=t.defaultModulators;h.info(`%cWriting %c${u.length}%c default modulators...`,d.info,d.recognized,d.info);let M=new ne(10+u.length*10);for(let w of u)w.write(M);hs(M,0,10),s.push(...U.getParts("DMOD",[M]))}h.groupEnd(),h.info("%cWriting SDTA...",d.info);let i=[],o=[],I=Ka(t,i,o);h.info("%cWriting PDTA...",d.info),h.info("%cWriting SHDR...",d.info);let l=Za(t,i,o);h.group("%cWriting instruments...",d.info);let B=Fs(t,!1);h.groupEnd(),h.group("%cWriting presets...",d.info);let C=Fs(t,!0);h.groupEnd();let g=[C.hdr,C.bag,C.mod,C.gen,B.hdr,B.bag,B.mod,B.gen,l],E=U.getParts("pdta",g.map(u=>u.pdta),!0);A.writeExtendedLimits&&(B.writeXdta||C.writeXdta||t.presets.some(u=>u.name.length>20)||t.instruments.some(u=>u.name.length>20)||t.samples.some(u=>u.name.length>20))&&(h.info("%cWriting the xdta chunk as writeExtendedLimits is enabled and at least one condition was met.",d.info,d.value),s.push(...U.getParts("xdta",g.map(u=>u.xdta),!0)));let S=U.getParts("INFO",s,!0);h.info("%cWriting the output file...",d.info);let k=U.writeParts("RIFF",[et("sfbk"),...S,...I,...E]);return h.info(`%cSaved successfully! Final file size: %c${k.length}`,d.info,d.recognized),h.groupEnd(),k.buffer}var Ot=class{static verifyHeader(t,...e){for(let A of e)if(t.header.toLowerCase()===A.toLowerCase())return;this.parsingError(`Invalid DLS chunk header! Expected "${e.join(", or ")}" got "${t.header.toLowerCase()}"`)}static verifyText(t,...e){for(let A of e)if(t.toLowerCase()===A.toLowerCase())return;this.parsingError(`FourCC error: Expected "${e.join(", or ")}" got "${t.toLowerCase()}"`)}static parsingError(t){throw h.groupEnd(),new Error(`DLS parse error: ${t} The file may be corrupted.`)}static verifyAndReadList(t,...e){this.verifyHeader(t,"LIST"),t.data.currentIndex=0,this.verifyText(de(t.data,4),...e);let A=[];for(;t.data.length>t.data.currentIndex;)A.push(U.read(t.data));return A}},Z={none:0,modLfo:1,velocity:2,keyNum:3,volEnv:4,modEnv:5,pitchWheel:6,polyPressure:7,channelPressure:8,vibratoLfo:9,modulationWheel:129,volume:135,pan:138,expression:139,chorus:221,reverb:219,pitchWheelRange:256,fineTune:257,coarseTune:258},P={none:0,gain:1,reserved:2,pitch:3,pan:4,keyNum:5,chorusSend:128,reverbSend:129,modLfoFreq:260,modLfoDelay:261,vibLfoFreq:276,vibLfoDelay:277,volEnvAttack:518,volEnvDecay:519,reservedEG1:520,volEnvRelease:521,volEnvSustain:522,volEnvDelay:523,volEnvHold:524,modEnvAttack:778,modEnvDecay:779,reservedEG2:780,modEnvRelease:781,modEnvSustain:782,modEnvDelay:783,modEnvHold:784,filterCutoff:1280,filterQ:1281},Gs={forward:0,loopAndRelease:1},gA=20,IA=16,xt=class Xt extends Ot{gain=0;unityNote=60;fineTune=0;loops=new Array;fulOptions=2;static copyFrom(e){let A=new Xt;return A.unityNote=e.unityNote,A.gain=e.gain,A.fineTune=e.fineTune,A.loops=e.loops.map(s=>({...s})),A.fulOptions=e.fulOptions,A}static read(e){this.verifyHeader(e,"wsmp");let A=new Xt,s=X(e.data,4);if(s!==gA&&h.warn(`Wsmp cbSize mismatch: got ${s}, expected ${gA}.`),A.unityNote=X(e.data,2),A.fineTune=ls(e.data[e.data.currentIndex++],e.data[e.data.currentIndex++]),A.gain=X(e.data,4)|0,A.fulOptions=X(e.data,4),X(e.data,4)!==0){let a=X(e.data,4);a!==IA&&h.warn(`CbSize for loop in wsmp mismatch. Expected ${IA}, got ${a}.`);let n=X(e.data,4),r=X(e.data,4),i=X(e.data,4);A.loops.push({loopStart:r,loopLength:i,loopType:n})}return A}static fromSFSample(e){let A=new Xt;return A.unityNote=e.originalKey,A.fineTune=e.pitchCorrection,(e.loopEnd!==0||e.loopStart!==0)&&A.loops.push({loopStart:e.loopStart,loopLength:e.loopEnd-e.loopStart,loopType:Gs.forward}),A}static fromSFZone(e){let A=new Xt;A.unityNote=e.getGenerator(c.overridingRootKey,e.sample.originalKey),e.getGenerator(c.scaleTuning,100)===0&&e.keyRange.max-e.keyRange.min===0&&(A.unityNote=e.keyRange.min),A.fineTune=e.fineTuning+e.sample.pitchCorrection,A.gain=-(e.getGenerator(c.initialAttenuation,0)*.4)<<16;let s=e.getGenerator(c.sampleModes,0);if(s!==0){let a=e.sample.loopStart+e.getGenerator(c.startloopAddrsOffset,0)+e.getGenerator(c.startloopAddrsCoarseOffset,0)*32768,n=e.sample.loopEnd+e.getGenerator(c.endloopAddrsOffset,0)+e.getGenerator(c.endloopAddrsCoarseOffset,0)*32768,r;switch(s){case 1:default:r=0;break;case 3:r=1}A.loops.push({loopType:r,loopStart:a,loopLength:n-a})}return A}toSFZone(e,A){let s=0,a=this.loops[0];a&&(s=a.loopType===Gs.loopAndRelease?3:1),s!==0&&e.setGenerator(c.sampleModes,s);let n=-(this.gain>>16)/.4;if(n!==0&&e.setGenerator(c.initialAttenuation,n),e.fineTuning=this.fineTune-A.pitchCorrection,this.unityNote!==A.originalKey&&e.setGenerator(c.overridingRootKey,this.unityNote),a){let r=a.loopStart-A.loopStart,i=a.loopStart+a.loopLength-A.loopEnd;if(r!==0){let o=r%32768;e.setGenerator(c.startloopAddrsOffset,o);let I=Math.trunc(r/32768);I!==0&&e.setGenerator(c.startloopAddrsCoarseOffset,I)}if(i!==0){let o=i%32768;e.setGenerator(c.endloopAddrsOffset,o);let I=Math.trunc(i/32768);I!==0&&e.setGenerator(c.endloopAddrsCoarseOffset,I)}}}write(){let e=new ne(gA+this.loops.length*IA);ge(e,gA),se(e,this.unityNote),se(e,this.fineTune),ge(e,this.gain),ge(e,this.fulOptions),ge(e,this.loops.length);for(let A of this.loops)ge(e,IA),ge(e,A.loopType),ge(e,A.loopStart),ge(e,A.loopLength);return U.write("wsmp",e)}},JA={PCM:1,ALAW:6};function za(t,e){let A=Math.pow(2,e*8-1),s=Math.pow(2,e*8),a,n=!1;e===1?(a=255,n=!0):a=A;let r=t.length/e,i=new Float32Array(r);if(e===2){let o=new Int16Array(t.buffer),I=o.length;for(let l=0;l<I;l++)i[l]=o[l]/32768}else for(let o=0;o<i.length;o++){let I=X(t,e);n?i[o]=I/a-.5:(I>=A&&(I-=s),i[o]=I/a)}return i}function _a(t,e){let A=t.length/e,s=new Float32Array(A);for(let a=0;a<s.length;a++){let n=X(t,e),r=n^85;r&=127;let i=r>>4,o=r&15;i>0&&(o+=16),o=(o<<4)+8,i>1&&(o=o<<i-1),s[a]=(n>127?o:-o)/32768}return s}var $a=class extends FA{wFormatTag;bytesPerSample;rawData;constructor(t,e,A,s,a,n,r,i,o){super(t,e,A,s,Fe.monoSample,a,n),this.dataOverridden=!1,this.rawData=r.data,this.wFormatTag=i,this.bytesPerSample=o}getAudioData(){if(!this.rawData)return new Float32Array(0);if(!this.audioData){let t;switch(this.wFormatTag){default:h.warn(`Failed to decode sample. Unknown wFormatTag: ${this.wFormatTag}`),t=new Float32Array(this.rawData.length/this.bytesPerSample);break;case JA.PCM:t=za(this.rawData,this.bytesPerSample);break;case JA.ALAW:t=_a(this.rawData,this.bytesPerSample);break}this.setAudioData(t,this.sampleRate)}return this.audioData??new Float32Array(0)}getRawData(t){return this.dataOverridden||this.isCompressed?super.getRawData(t):this.wFormatTag===JA.PCM&&this.bytesPerSample===2?this.rawData:this.encodeS16LE()}},Ls=class is extends Ot{waveSample=new xt;wFormatTag;bytesPerSample;sampleRate;dataChunk;name="Unnamed sample";constructor(e,A,s,a){super(),this.wFormatTag=e,this.bytesPerSample=A,this.sampleRate=s,this.dataChunk=a}static read(e){let A=this.verifyAndReadList(e,"wave"),s=A.find(C=>C.header==="fmt ");if(!s)throw new Error("No fmt chunk in the wave file!");let a=X(s.data,2),n=X(s.data,2);if(n!==1)throw new Error(`Only mono samples are supported. Fmt reports ${n} channels.`);let r=X(s.data,4);X(s.data,4),X(s.data,2);let i=X(s.data,2)/8,o=A.find(C=>C.header==="data");if(!o)throw new Error("No data chunk in the WAVE chunk!");let I=new is(a,i,r,o),l=U.findListType(A,"INFO");if(l){let C=U.read(l.data);for(;C.header!=="INAM"&&l.data.currentIndex<l.data.length;)C=U.read(l.data);C.header==="INAM"&&(I.name=de(C.data,C.size).trim())}let B=A.find(C=>C.header==="wsmp");return B&&(I.waveSample=xt.read(B)),I}static fromSFSample(e){let A=e.getRawData(!1),s=new is(1,2,e.sampleRate,new U("data",A.length,new ne(A.buffer)));return s.name=e.name,s.waveSample=xt.fromSFSample(e),s}toSFSample(e){let A=this.waveSample.unityNote,s=this.waveSample.fineTune,a=Math.trunc(s/100);A+=a,s-=a*100;let n=0,r=0,i=this.waveSample.loops?.[0];i&&(n=i.loopStart,r=i.loopStart+i.loopLength);let o=new $a(this.name,this.sampleRate,A,s,n,r,this.dataChunk,this.wFormatTag,this.bytesPerSample);e.addSamples(o)}write(){let e=this.writeFmt(),A=this.waveSample.write(),s=U.getParts("data",[this.dataChunk.data]),a=U.write("INAM",et(this.name,!0)),n=U.write("INFO",a,!1,!0);return h.info(`%cSaved %c${this.name}%c successfully!`,d.recognized,d.value,d.recognized),U.getParts("wave",[e,A,...s,n],!0)}writeFmt(){let e=new ne(18);return se(e,this.wFormatTag),se(e,1),ge(e,this.sampleRate),ge(e,this.sampleRate*2),se(e,2),se(e,this.bytesPerSample*8),U.write("fmt ",e)}},nt=class os{source;transform;bipolar;invert;constructor(e=Z.none,A=Ce.linear,s=!1,a=!1){this.source=e,this.transform=A,this.bipolar=s,this.invert=a}get sourceName(){return Object.keys(Z).find(e=>Z[e]===this.source)??this.source.toString()}get transformName(){return Object.keys(Ce).find(e=>Ce[e]===this.transform)??this.transform.toString()}static copyFrom(e){return new os(e.source,e.transform,e.bipolar,e.invert)}static fromSFSource(e){let A;if(e.isCC)switch(e.index){case f.modulationWheel:A=Z.modulationWheel;break;case f.mainVolume:A=Z.volume;break;case f.pan:A=Z.pan;break;case f.expression:A=Z.expression;break;case f.chorusDepth:A=Z.chorus;break;case f.reverbDepth:A=Z.reverb;break}else switch(e.index){case Ie.noController:A=Z.none;break;case Ie.noteOnKeyNum:A=Z.keyNum;break;case Ie.noteOnVelocity:A=Z.velocity;break;case Ie.pitchWheel:A=Z.pitchWheel;break;case Ie.pitchWheelRange:A=Z.pitchWheelRange;break;case Ie.polyPressure:A=Z.polyPressure;break;case Ie.channelPressure:A=Z.channelPressure}if(A!==void 0)return new os(A,e.curveType,e.isBipolar,e.isNegative)}toString(){return`${this.sourceName} ${this.transformName} ${this.bipolar?"bipolar":"unipolar"} ${this.invert?"inverted":"positive"}`}toTransformFlag(){return this.transform|(this.bipolar?1:0)<<4|(this.invert?1:0)<<5}toSFSource(){let e,A=!1;switch(this.source){default:case Z.modLfo:case Z.vibratoLfo:case Z.coarseTune:case Z.fineTune:case Z.modEnv:return;case Z.keyNum:e=Ie.noteOnKeyNum;break;case Z.none:e=Ie.noController;break;case Z.modulationWheel:e=f.modulationWheel,A=!0;break;case Z.pan:e=f.pan,A=!0;break;case Z.reverb:e=f.reverbDepth,A=!0;break;case Z.chorus:e=f.chorusDepth,A=!0;break;case Z.expression:e=f.expression,A=!0;break;case Z.volume:e=f.mainVolume,A=!0;break;case Z.velocity:e=Ie.noteOnVelocity;break;case Z.polyPressure:e=Ie.polyPressure;break;case Z.channelPressure:e=Ie.channelPressure;break;case Z.pitchWheel:e=Ie.pitchWheel;break;case Z.pitchWheelRange:e=Ie.pitchWheelRange;break}if(e!==void 0)return new at(e,this.transform,A,this.bipolar,this.invert)}},un=new ye(219,0,c.reverbEffectsSend,1e3,0),mn=new ye(221,0,c.chorusEffectsSend,1e3,0);new ye(129,0,c.vibLfoToPitch,0,0);new ye(13,0,c.vibLfoToPitch,0,0);var ja=new Set([c.sampleModes,c.initialAttenuation,c.keyRange,c.velRange,c.sampleID,c.fineTune,c.coarseTune,c.startAddrsOffset,c.startAddrsCoarseOffset,c.endAddrOffset,c.endAddrsCoarseOffset,c.startloopAddrsOffset,c.startloopAddrsCoarseOffset,c.endloopAddrsOffset,c.endloopAddrsCoarseOffset,c.overridingRootKey,c.exclusiveClass]),Jt=class pt{source;control;destination;scale;transform;constructor(e=new nt,A=new nt,s,a,n){this.source=e,this.control=A,this.destination=s,this.transform=a,this.scale=n}get isStaticParameter(){return this.source.source===Z.none&&this.control.source===Z.none}get shortScale(){return this.scale>>16}get transformName(){return Object.keys(Ce).find(e=>Ce[e]===this.transform)??this.transform.toString()}get destinationName(){return Object.keys(P).find(e=>P[e]===this.destination)??this.destination.toString()}static read(e){let A=X(e,2),s=X(e,2),a=X(e,2),n=X(e,2),r=X(e,4)|0,i=n&15,o=new nt(s,n>>4&15,St(n,8),St(n,9));return new pt(new nt(A,n>>10&15,St(n,14),St(n,15)),o,a,i,r)}static fromSFModulator(e,A){let s=l=>{h.warn(`Failed converting SF modulator into DLS:
6
6
  ${e.toString()}
7
- (${l})`)};if(e.transformType!==0){s("Absolute transform type is not supported");return}if(we.isIdentical(e,mn,!0)||we.isIdentical(e,un,!0))return;let a=nt.fromSFSource(e.primarySource);if(!a){s("Invalid primary source");return}let n=nt.fromSFSource(e.secondarySource);if(!n){s("Invalid secondary source");return}let r=pt.fromSFDestination(e.destination,e.transformAmount);if(r===void 0){s("Invalid destination");return}let i=e.transformAmount,o;if(typeof r=="number")o=r;else if(o=r.destination,i=r.amount,r.source!==Z.none){if(n.source!==Z.none&&a.source!==Z.none){s("Articulation generators with secondary source are not supported");return}a.source!==Z.none&&(n=a),a=new nt(r.source,le.linear,r.isBipolar)}let I=new pt(a,n,o,0,i<<16);A.connectionBlocks.push(I)}static copyFrom(e){return new pt(nt.copyFrom(e.source),nt.copyFrom(e.control),e.destination,e.transform,e.scale)}static fromSFGenerator(e,A){if(ja.has(e.type))return;let s=o=>{h.warn(`Failed converting SF2 generator into DLS:
7
+ (${l})`)};if(e.transformType!==0){s("Absolute transform type is not supported");return}if(we.isIdentical(e,mn,!0)||we.isIdentical(e,un,!0))return;let a=nt.fromSFSource(e.primarySource);if(!a){s("Invalid primary source");return}let n=nt.fromSFSource(e.secondarySource);if(!n){s("Invalid secondary source");return}let r=pt.fromSFDestination(e.destination,e.transformAmount);if(r===void 0){s("Invalid destination");return}let i=e.transformAmount,o;if(typeof r=="number")o=r;else if(o=r.destination,i=r.amount,r.source!==Z.none){if(n.source!==Z.none&&a.source!==Z.none){s("Articulation generators with secondary source are not supported");return}a.source!==Z.none&&(n=a),a=new nt(r.source,Ce.linear,r.isBipolar)}let I=new pt(a,n,o,0,i<<16);A.connectionBlocks.push(I)}static copyFrom(e){return new pt(nt.copyFrom(e.source),nt.copyFrom(e.control),e.destination,e.transform,e.scale)}static fromSFGenerator(e,A){if(ja.has(e.type))return;let s=o=>{h.warn(`Failed converting SF2 generator into DLS:
8
8
  ${e.toString()}
9
9
  (${o})`)},a=pt.fromSFDestination(e.type,e.value);if(a===void 0){s("Invalid type");return}let n=new nt,r,i=e.value;typeof a=="number"?r=a:(r=a.destination,i=a.amount,n.source=a.source,n.bipolar=a.isBipolar),A.connectionBlocks.push(new pt(n,new nt,r,0,i<<16))}static fromSFDestination(e,A){switch(e){default:return;case c.initialAttenuation:return{destination:P.gain,amount:-A,isBipolar:!1,source:Z.none};case c.fineTune:return P.pitch;case c.pan:return P.pan;case c.keyNum:return P.keyNum;case c.reverbEffectsSend:return P.reverbSend;case c.chorusEffectsSend:return P.chorusSend;case c.freqModLFO:return P.modLfoFreq;case c.delayModLFO:return P.modLfoDelay;case c.delayVibLFO:return P.vibLfoDelay;case c.freqVibLFO:return P.vibLfoFreq;case c.delayVolEnv:return P.volEnvDelay;case c.attackVolEnv:return P.volEnvAttack;case c.holdVolEnv:return P.volEnvHold;case c.decayVolEnv:return P.volEnvDecay;case c.sustainVolEnv:return{destination:P.volEnvSustain,amount:1e3-A,isBipolar:!1,source:Z.none};case c.releaseVolEnv:return P.volEnvRelease;case c.delayModEnv:return P.modEnvDelay;case c.attackModEnv:return P.modEnvAttack;case c.holdModEnv:return P.modEnvHold;case c.decayModEnv:return P.modEnvDecay;case c.sustainModEnv:return{destination:P.modEnvSustain,amount:1e3-A,isBipolar:!1,source:Z.none};case c.releaseModEnv:return P.modEnvRelease;case c.initialFilterFc:return P.filterCutoff;case c.initialFilterQ:return P.filterQ;case c.modEnvToFilterFc:return{source:Z.modEnv,destination:P.filterCutoff,amount:A,isBipolar:!1};case c.modEnvToPitch:return{source:Z.modEnv,destination:P.pitch,amount:A,isBipolar:!1};case c.modLfoToFilterFc:return{source:Z.modLfo,destination:P.filterCutoff,amount:A,isBipolar:!0};case c.modLfoToVolume:return{source:Z.modLfo,destination:P.gain,amount:A,isBipolar:!0};case c.modLfoToPitch:return{source:Z.modLfo,destination:P.pitch,amount:A,isBipolar:!0};case c.vibLfoToPitch:return{source:Z.vibratoLfo,destination:P.pitch,amount:A,isBipolar:!0};case c.keyNumToVolEnvHold:return{source:Z.keyNum,destination:P.volEnvHold,amount:A,isBipolar:!0};case c.keyNumToVolEnvDecay:return{source:Z.keyNum,destination:P.volEnvDecay,amount:A,isBipolar:!0};case c.keyNumToModEnvHold:return{source:Z.keyNum,destination:P.modEnvHold,amount:A,isBipolar:!0};case c.keyNumToModEnvDecay:return{source:Z.keyNum,destination:P.modEnvDecay,amount:A,isBipolar:!0};case c.scaleTuning:return{source:Z.keyNum,destination:P.pitch,amount:A*128,isBipolar:!1}}}toString(){return`Source: ${this.source.toString()},
10
10
  Control: ${this.control.toString()},
11
11
  Scale: ${this.scale} >> 16 = ${this.shortScale},
12
12
  Output transform: ${this.transformName}
13
13
  Destination: ${this.destinationName}`}write(){let e=new ne(12);return se(e,this.source.source),se(e,this.control.source),se(e,this.destination),se(e,this.transform|this.control.toTransformFlag()<<4|this.source.toTransformFlag()<<10),ge(e,this.scale),e}toSFGenerator(e){let A=this.destination,s=this.shortScale;switch(A){default:h.info(`%cFailed converting DLS articulator into SF generator: %c${this.toString()}%c
14
- (invalid destination)`,d.warn,d.value,d.unrecognized);return;case P.pan:e.setGenerator(c.pan,s);break;case P.gain:e.addToGenerator(c.initialAttenuation,-s/.4);break;case P.filterCutoff:e.setGenerator(c.initialFilterFc,s);break;case P.filterQ:e.setGenerator(c.initialFilterQ,s);break;case P.modLfoFreq:e.setGenerator(c.freqModLFO,s);break;case P.modLfoDelay:e.setGenerator(c.delayModLFO,s);break;case P.vibLfoFreq:e.setGenerator(c.freqVibLFO,s);break;case P.vibLfoDelay:e.setGenerator(c.delayVibLFO,s);break;case P.volEnvDelay:e.setGenerator(c.delayVolEnv,s);break;case P.volEnvAttack:e.setGenerator(c.attackVolEnv,s);break;case P.volEnvHold:e.setGenerator(c.holdVolEnv,s);break;case P.volEnvDecay:e.setGenerator(c.decayVolEnv,s);break;case P.volEnvRelease:e.setGenerator(c.releaseVolEnv,s);break;case P.volEnvSustain:e.setGenerator(c.sustainVolEnv,1e3-s);break;case P.modEnvDelay:e.setGenerator(c.delayModEnv,s);break;case P.modEnvAttack:e.setGenerator(c.attackModEnv,s);break;case P.modEnvHold:e.setGenerator(c.holdModEnv,s);break;case P.modEnvDecay:e.setGenerator(c.decayModEnv,s);break;case P.modEnvRelease:e.setGenerator(c.releaseModEnv,s);break;case P.modEnvSustain:e.setGenerator(c.sustainModEnv,1e3-s);break;case P.reverbSend:e.setGenerator(c.reverbEffectsSend,s);break;case P.chorusSend:e.setGenerator(c.chorusEffectsSend,s);break;case P.pitch:e.fineTuning+=s;break}}toSFModulator(e){let A=this.shortScale,s,a,n=new at,r=this.toCombinedSFDestination();if(r){s=r;let o=this.control.toSFSource();if(!o){this.failedConversion("Invalid control");return}a=o}else{let o=this.toSFDestination();if(!o){this.failedConversion("Invalid destination");return}typeof o=="object"?(A=o.newAmount,s=o.gen):s=o;let I=this.source.toSFSource();if(!I){this.failedConversion("Invalid source");return}a=I;let l=this.control.toSFSource();if(!l){this.failedConversion("Invalid control");return}n=l}this.transform!==le.linear&&a.curveType===le.linear&&(a.curveType=this.transform),s===c.initialAttenuation&&((this.source.source===Z.velocity||this.source.source===Z.volume||this.source.source===Z.expression)&&(a.isNegative=!0),A=Math.min(960,Math.max(0,A)));let i=new we(a,n,s,A,0);e.addModulators(i)}toCombinedSFDestination(){let e=this.source.source,A=this.destination;return e===Z.vibratoLfo&&A===P.pitch?c.vibLfoToPitch:e===Z.modLfo&&A===P.pitch?c.modLfoToPitch:e===Z.modLfo&&A===P.filterCutoff?c.modLfoToFilterFc:e===Z.modLfo&&A===P.gain?c.modLfoToVolume:e===Z.modEnv&&A===P.filterCutoff?c.modEnvToFilterFc:e===Z.modEnv&&A===P.pitch?c.modEnvToPitch:void 0}failedConversion(e){h.info(`%cFailed converting DLS articulator into SF2:
14
+ (invalid destination)`,d.warn,d.value,d.unrecognized);return;case P.pan:e.setGenerator(c.pan,s);break;case P.gain:e.addToGenerator(c.initialAttenuation,-s/.4);break;case P.filterCutoff:e.setGenerator(c.initialFilterFc,s);break;case P.filterQ:e.setGenerator(c.initialFilterQ,s);break;case P.modLfoFreq:e.setGenerator(c.freqModLFO,s);break;case P.modLfoDelay:e.setGenerator(c.delayModLFO,s);break;case P.vibLfoFreq:e.setGenerator(c.freqVibLFO,s);break;case P.vibLfoDelay:e.setGenerator(c.delayVibLFO,s);break;case P.volEnvDelay:e.setGenerator(c.delayVolEnv,s);break;case P.volEnvAttack:e.setGenerator(c.attackVolEnv,s);break;case P.volEnvHold:e.setGenerator(c.holdVolEnv,s);break;case P.volEnvDecay:e.setGenerator(c.decayVolEnv,s);break;case P.volEnvRelease:e.setGenerator(c.releaseVolEnv,s);break;case P.volEnvSustain:e.setGenerator(c.sustainVolEnv,1e3-s);break;case P.modEnvDelay:e.setGenerator(c.delayModEnv,s);break;case P.modEnvAttack:e.setGenerator(c.attackModEnv,s);break;case P.modEnvHold:e.setGenerator(c.holdModEnv,s);break;case P.modEnvDecay:e.setGenerator(c.decayModEnv,s);break;case P.modEnvRelease:e.setGenerator(c.releaseModEnv,s);break;case P.modEnvSustain:e.setGenerator(c.sustainModEnv,1e3-s);break;case P.reverbSend:e.setGenerator(c.reverbEffectsSend,s);break;case P.chorusSend:e.setGenerator(c.chorusEffectsSend,s);break;case P.pitch:e.fineTuning+=s;break}}toSFModulator(e){let A=this.shortScale,s,a,n=new at,r=this.toCombinedSFDestination();if(r){s=r;let o=this.control.toSFSource();if(!o){this.failedConversion("Invalid control");return}a=o}else{let o=this.toSFDestination();if(!o){this.failedConversion("Invalid destination");return}typeof o=="object"?(A=o.newAmount,s=o.gen):s=o;let I=this.source.toSFSource();if(!I){this.failedConversion("Invalid source");return}a=I;let l=this.control.toSFSource();if(!l){this.failedConversion("Invalid control");return}n=l}this.transform!==Ce.linear&&a.curveType===Ce.linear&&(a.curveType=this.transform),s===c.initialAttenuation&&((this.source.source===Z.velocity||this.source.source===Z.volume||this.source.source===Z.expression)&&(a.isNegative=!0),A=Math.min(960,Math.max(0,A)));let i=new we(a,n,s,A,0);e.addModulators(i)}toCombinedSFDestination(){let e=this.source.source,A=this.destination;return e===Z.vibratoLfo&&A===P.pitch?c.vibLfoToPitch:e===Z.modLfo&&A===P.pitch?c.modLfoToPitch:e===Z.modLfo&&A===P.filterCutoff?c.modLfoToFilterFc:e===Z.modLfo&&A===P.gain?c.modLfoToVolume:e===Z.modEnv&&A===P.filterCutoff?c.modEnvToFilterFc:e===Z.modEnv&&A===P.pitch?c.modEnvToPitch:void 0}failedConversion(e){h.info(`%cFailed converting DLS articulator into SF2:
15
15
  %c${this.toString()}%c
16
- (${e})`,d.warn,d.value,d.unrecognized)}toSFDestination(){let e=this.shortScale;switch(this.destination){default:case P.none:return;case P.pan:return c.pan;case P.gain:return{gen:c.initialAttenuation,newAmount:-e};case P.pitch:return c.fineTune;case P.keyNum:return c.overridingRootKey;case P.volEnvDelay:return c.delayVolEnv;case P.volEnvAttack:return c.attackVolEnv;case P.volEnvHold:return c.holdVolEnv;case P.volEnvDecay:return c.decayVolEnv;case P.volEnvSustain:return{gen:c.sustainVolEnv,newAmount:1e3-e};case P.volEnvRelease:return c.releaseVolEnv;case P.modEnvDelay:return c.delayModEnv;case P.modEnvAttack:return c.attackModEnv;case P.modEnvHold:return c.holdModEnv;case P.modEnvDecay:return c.decayModEnv;case P.modEnvSustain:return{gen:c.sustainModEnv,newAmount:1e3-e};case P.modEnvRelease:return c.releaseModEnv;case P.filterCutoff:return c.initialFilterFc;case P.filterQ:return c.initialFilterQ;case P.chorusSend:return c.chorusEffectsSend;case P.reverbSend:return c.reverbEffectsSend;case P.modLfoFreq:return c.freqModLFO;case P.modLfoDelay:return c.delayModLFO;case P.vibLfoFreq:return c.freqVibLFO;case P.vibLfoDelay:return c.delayVibLFO}}},pn=class extends Ot{connectionBlocks=new Array;mode="dls2";get length(){return this.connectionBlocks.length}copyFrom(t){this.mode=t.mode;for(let e of t.connectionBlocks)this.connectionBlocks.push(Jt.copyFrom(e))}fromSFZone(t){this.mode="dls2";let e=new $t;e.copyFrom(t);for(let A of e.generators){let s;switch(A.type){default:continue;case c.keyNumToVolEnvDecay:s=c.decayVolEnv;break;case c.keyNumToVolEnvHold:s=c.holdVolEnv;break;case c.keyNumToModEnvDecay:s=c.decayModEnv;break;case c.keyNumToModEnvHold:s=c.holdModEnv}let a=e.getGenerator(s,void 0),n=A.value*-128;if(a===void 0)continue;let r=a-60/128*n;e.setGenerator(A.type,n,!1),e.setGenerator(s,r,!1)}for(let A of e.generators)Jt.fromSFGenerator(A,this);for(let A of e.modulators)Jt.fromSFModulator(A,this)}read(t){let e=U.findListType(t,"lart"),A=U.findListType(t,"lar2");if(e)for(this.mode="dls1";e.data.currentIndex<e.data.length;){let s=U.read(e.data);if(s.header!=="art1"&&s.header!=="art2")continue;let a=s.data,n=X(a,4);n!==8&&h.warn(`CbSize in articulation mismatch. Expected 8, got ${n}`);let r=X(a,4);for(let i=0;i<r;i++)this.connectionBlocks.push(Jt.read(a))}else if(A)for(this.mode="dls2";A.data.currentIndex<A.data.length;){let s=U.read(A.data);if(s.header!=="art1"&&s.header!=="art2")continue;let a=s.data,n=X(a,4);n!==8&&h.warn(`CbSize in articulation mismatch. Expected 8, got ${n}`);let r=X(a,4);for(let i=0;i<r;i++)this.connectionBlocks.push(Jt.read(a))}}write(){let t=new ne(8);ge(t,8),ge(t,this.connectionBlocks.length);let e=this.connectionBlocks.map(s=>s.write()),A=U.getParts(this.mode==="dls2"?"art2":"art1",[t,...e]);return U.getParts(this.mode==="dls2"?"lar2":"lart",A,!0)}toSFZone(t){let e=(A,s,a,n)=>{let r=A/-128;if(t.setGenerator(s,r),r<=120){let i=Math.round(.46875*A),o=this.connectionBlocks.find(I=>I.isStaticParameter&&I.destination===n);o&&t.setGenerator(a,i+o.shortScale)}};for(let A of this.connectionBlocks){let s=A.shortScale,a=A.source.source,n=A.control.source,r=A.destination;if(A.isStaticParameter){A.toSFGenerator(t);continue}if(n===Z.none)if(a===Z.keyNum){if(r===P.pitch){t.setGenerator(c.scaleTuning,s/128);continue}if(r===P.modEnvHold||r===P.modEnvDecay||r===P.volEnvHold||r===P.volEnvDecay)continue}else{let i=A.toCombinedSFDestination();if(i){t.setGenerator(i,s);continue}}A.toSFModulator(t)}for(let A of this.connectionBlocks){if(A.source.source!==Z.keyNum)continue;let s=A.shortScale;switch(A.destination){default:case P.volEnvHold:e(s,c.keyNumToVolEnvHold,c.holdVolEnv,P.volEnvHold);break;case P.volEnvDecay:e(s,c.keyNumToVolEnvDecay,c.decayVolEnv,P.volEnvDecay);break;case P.modEnvHold:e(s,c.keyNumToModEnvHold,c.holdModEnv,P.modEnvHold);break;case P.modEnvDecay:e(s,c.keyNumToModEnvDecay,c.decayModEnv,P.modEnvDecay);break}}if(this.mode==="dls1"){t.setGenerator(c.delayVibLFO,t.getGenerator(c.delayModLFO,null)),t.setGenerator(c.freqVibLFO,t.getGenerator(c.freqModLFO,null)),t.setGenerator(c.vibLfoToPitch,t.getGenerator(c.modLfoToPitch,null)),t.setGenerator(c.modLfoToPitch,null);for(let A of t.modulators)A.destination===c.modLfoToPitch&&(A.destination=c.vibLfoToPitch)}}},KA=class CA{channel=1;tableIndex;fusOptions=0;phaseGroup=0;constructor(e){this.tableIndex=e}static copyFrom(e){let A=new CA(e.tableIndex);return A.channel=e.channel,A.phaseGroup=e.phaseGroup,A.fusOptions=e.fusOptions,A}static read(e){let A=X(e.data,2),s=X(e.data,2),a=X(e.data,4),n=new CA(X(e.data,4));return n.channel=a,n.fusOptions=A,n.phaseGroup=s,n}static fromSFZone(e,A){let s=e.indexOf(A.sample);if(s===-1)throw new Error(`Wave link error: Sample ${A.sample.name} does not exist in the sample list.`);let a=new CA(s);switch(A.sample.sampleType){default:case ve.leftSample:case ve.monoSample:a.channel=Math.trunc(1);break;case ve.rightSample:a.channel=2}return a}write(){let e=new ne(12);return se(e,this.fusOptions),se(e,this.phaseGroup),ge(e,this.channel),ge(e,this.tableIndex),U.write("wlnk",e)}},BA=class Pt extends Ot{articulation=new pn;keyRange={min:0,max:127};velRange={min:0,max:127};keyGroup=0;fusOptions=0;usLayer=0;waveSample;waveLink;constructor(e,A){super(),this.waveSample=A,this.waveLink=e}static copyFrom(e){let A=new Pt(KA.copyFrom(e.waveLink),xt.copyFrom(e.waveSample));return A.keyGroup=e.keyGroup,A.keyRange={...e.keyRange},A.velRange={...e.velRange},A.usLayer=e.usLayer,A.fusOptions=e.fusOptions,A.articulation.copyFrom(e.articulation),A}static read(e,A){let s=this.verifyAndReadList(A,"rgn ","rgn2"),a=s.find(S=>S.header==="wsmp"),n=a?xt.read(a):void 0,r=s.find(S=>S.header==="wlnk");if(!r){h.warn("Invalid DLS region: missing 'wlnk' chunk! Discarding...");return}let i=KA.read(r),o=s.find(S=>S.header==="rgnh");if(!o){h.warn("Invalid DLS region: missing 'rgnh' chunk! Discarding...");return}let I=e[i.tableIndex];I||Pt.parsingError(`Invalid sample index: ${i.tableIndex}. Samples available: ${e.length}`),n??=I.waveSample;let l=new Pt(i,n),B=X(o.data,2),C=X(o.data,2),g=X(o.data,2),E=X(o.data,2);return g===0&&E===0&&(E=127,g=0),l.keyRange.max=C,l.keyRange.min=B,l.velRange.max=E,l.velRange.min=g,l.fusOptions=X(o.data,2),l.keyGroup=X(o.data,2),o.data.length-o.data.currentIndex>=2&&(l.usLayer=X(o.data,2)),l.articulation.read(s),l}static fromSFZone(e,A){let s=xt.fromSFZone(e),a=new Pt(KA.fromSFZone(A,e),s);return a.keyRange.min=Math.max(e.keyRange.min,0),a.keyRange.max=e.keyRange.max,a.velRange.min=Math.max(e.velRange.min,0),a.velRange.max=e.velRange.max,a.keyGroup=e.getGenerator(c.exclusiveClass,0),a.articulation.fromSFZone(e),a}write(){let e=[this.writeHeader(),this.waveSample.write(),this.waveLink.write(),...this.articulation.write()];return U.getParts("rgn2",e,!0)}toSFZone(e,A){let s=A[this.waveLink.tableIndex];s||Pt.parsingError(`Invalid sample index: ${this.waveLink.tableIndex}`);let a=e.createZone(s);return a.keyRange=this.keyRange,a.velRange=this.velRange,this.keyRange.max===127&&this.keyRange.min===0&&(a.keyRange.min=-1),this.velRange.max===127&&this.velRange.min===0&&(a.velRange.min=-1),this.keyGroup!==0&&a.setGenerator(c.exclusiveClass,this.keyGroup),this.waveSample.toSFZone(a,s),this.articulation.toSFZone(a),a.generators=a.generators.filter(n=>n.value!==We[n.type].def),a}writeHeader(){let e=new ne(14);return se(e,Math.max(this.keyRange.min,0)),se(e,this.keyRange.max),se(e,Math.max(this.velRange.min,0)),se(e,this.velRange.max),se(e,this.fusOptions),se(e,this.keyGroup),se(e,this.usLayer),U.write("rgnh",e)}},VA=class EA extends Ot{articulation=new pn;regions=new Array;name="Unnamed";bankLSB=0;bankMSB=0;isGMGSDrum=!1;program=0;static copyFrom(e){let A=new EA;A.name=e.name,A.isGMGSDrum=e.isGMGSDrum,A.bankMSB=e.bankMSB,A.bankLSB=e.bankLSB,A.program=e.program,A.articulation.copyFrom(e.articulation);for(let s of e.regions)A.regions.push(BA.copyFrom(s));return A}static read(e,A){let s=this.verifyAndReadList(A,"ins "),a=s.find(B=>B.header==="insh");if(!a)throw h.groupEnd(),new Error("No instrument header!");let n="",r=U.findListType(s,"INFO");if(r){let B=U.read(r.data);for(;B.header!=="INAM";)B=U.read(r.data);n=de(B.data,B.data.length).trim()}n.length===0&&(n="Unnamed Instrument");let i=new EA;i.name=n;let o=X(a.data,4),I=X(a.data,4);i.program=X(a.data,4)&127,i.bankMSB=I>>>8&127,i.bankLSB=I&127,i.isGMGSDrum=I>>>31>0,h.groupCollapsed(`%cParsing %c"${n}"%c...`,d.info,d.recognized,d.info);let l=U.findListType(s,"lrgn");if(!l)throw h.groupEnd(),new Error("No region list!");i.articulation.read(s);for(let B=0;B<o;B++){let C=U.read(l.data);this.verifyHeader(C,"LIST");let g=de(C.data,4);g!=="rgn "&&g!=="rgn2"&&(h.groupEnd(),this.parsingError(`Invalid DLS region! Expected "rgn " or "rgn2" got "${g}"`));let E=BA.read(e,C);E&&i.regions.push(E)}return h.groupEnd(),i}static fromSFPreset(e,A){let s=new EA;s.name=e.name,s.bankLSB=e.bankLSB,s.bankMSB=e.bankMSB,s.program=e.program,s.isGMGSDrum=e.isGMGSDrum,h.group(`%cConverting %c${e.toString()}%c to DLS...`,d.info,d.value,d.info);let a=e.toFlattenedInstrument();for(let n of a.zones)s.regions.push(BA.fromSFZone(n,A));return h.groupEnd(),s}write(){h.groupCollapsed(`%cWriting %c${this.name}%c...`,d.info,d.recognized,d.info);let e=[this.writeHeader()],A=this.regions.flatMap(a=>a.write());e.push(...U.getParts("lrgn",A,!0)),this.articulation.length>0&&e.push(...this.articulation.write());let s=U.write("INAM",et(this.name,!0));return e.push(U.write("INFO",s,!1,!0)),h.groupEnd(),U.writeParts("ins ",e,!0)}toSFPreset(e){let A=new zt(e);A.name=this.name,A.bankMSB=this.bankMSB,A.bankLSB=this.bankLSB,A.isGMGSDrum=this.isGMGSDrum,A.program=this.program;let s=new _t;s.name=this.name,A.createZone(s),this.articulation.toSFZone(s.globalZone);for(let a of this.regions)a.toSFZone(s,e.samples);s.globalize(),s.globalZone.modulators.some(a=>a.destination===c.reverbEffectsSend)||s.globalZone.addModulators(we.copyFrom(un)),s.globalZone.modulators.some(a=>a.destination===c.chorusEffectsSend)||s.globalZone.addModulators(we.copyFrom(mn)),s.globalZone.generators=s.globalZone.generators.filter(a=>a.value!==We[a.type].def),e.addPresets(A),e.addInstruments(s)}writeHeader(){let e=new ne(12);ge(e,this.regions.length);let A=(this.bankMSB&127)<<8|this.bankLSB&127;return this.isGMGSDrum&&(A|=1<<31),ge(e,A),ge(e,this.program&127),U.write("insh",e)}},gs={software:"SpessaSynth"},yn=class Is extends Ot{samples=new Array;instruments=new Array;soundBankInfo={name:"Unnamed DLS sound bank",creationDate:new Date,software:"SpessaSynth",soundEngine:"DLS Level 2.2",product:"SpessaSynth DLS",version:{major:2,minor:4}};static read(e){if(!e)throw new Error("No data provided!");let A=new ne(e);h.group("%cParsing DLS file...",d.info);let s=U.read(A,!1);this.verifyHeader(s,"RIFF"),this.verifyText(de(A,4).toLowerCase(),"dls ");let a=[];for(;A.currentIndex<A.length;)a.push(U.read(A));let n=new Is,r=U.findListType(a,"INFO");if(r)for(;r.data.currentIndex<r.data.length;){let E=U.read(r.data),S=E.header,k=de(E.data,E.size);switch(S){case"INAM":n.soundBankInfo.name=k;break;case"ICRD":n.soundBankInfo.creationDate=Es(k);break;case"ICMT":n.soundBankInfo.comment=k;break;case"ISBJ":n.soundBankInfo.subject=k;break;case"ICOP":n.soundBankInfo.copyright=k;break;case"IENG":n.soundBankInfo.engineer=k;break;case"IPRD":n.soundBankInfo.product=k;break;case"ISFT":n.soundBankInfo.software=k}}this.printInfo(n);let i=a.find(E=>E.header==="colh");if(!i)return this.parsingError("No colh chunk!"),5;let o=X(i.data,4);h.info(`%cInstruments amount: %c${o}`,d.info,d.recognized);let I=U.findListType(a,"wvpl");if(!I)return this.parsingError("No wvpl chunk!"),5;let l=this.verifyAndReadList(I,"wvpl");for(let E of l)n.samples.push(Ls.read(E));let B=U.findListType(a,"lins");if(!B)return this.parsingError("No lins chunk!"),5;let C=this.verifyAndReadList(B,"lins");h.groupCollapsed("%cLoading instruments...",d.info),C.length!==o&&h.warn(`Colh reported invalid amount of instruments. Detected ${C.length}, expected ${o}`);for(let E of C)n.instruments.push(VA.read(n.samples,E));h.groupEnd();let g=a.find(E=>E.header==="pgal");if(g){h.info("%cFound the instrument aliasing chunk!",d.recognized);let E=g.data;(E[0]!==0||E[1]!==1||E[2]!==2||E[3]!==3)&&(E.currentIndex+=4);let S=n.instruments.find(u=>De.isXGDrum(u.bankMSB)||u.isGMGSDrum);if(!S)return h.warn("MobileBAE aliasing chunk without a drum preset. Aborting!"),n;let k=E.slice(E.currentIndex,E.currentIndex+128);E.currentIndex+=128;for(let u=0;u<128;u++){let w=k[u];if(w===u)continue;let M=S.regions.find(v=>v.keyRange.max===w&&v.keyRange.min===w);if(!M){h.warn(`Invalid drum alias ${u} to ${w}: region does not exist.`);continue}let R=BA.copyFrom(M);R.keyRange.max=u,R.keyRange.min=u,S.regions.push(R)}for(E.currentIndex+=4;E.currentIndex<E.length;){let u=X(E,2),w=u&127,M=u>>7&127,R=E[E.currentIndex++],v=E[E.currentIndex++];v!==0&&h.warn(`Invalid alias byte. Expected 0, got ${v}`);let N=X(E,2),m=N&127,p=N>>7&127,y=E[E.currentIndex++];v=E[E.currentIndex++],v!==0&&h.warn(`Invalid alias header. Expected 0, got ${v}`);let V=n.instruments.find(q=>q.bankLSB===m&&q.bankMSB===p&&q.program===y&&!q.isGMGSDrum);if(!V){h.warn(`Invalid alias. Missing instrument: ${m}:${p}:${y}`);continue}let Y=VA.copyFrom(V);Y.bankMSB=M,Y.bankLSB=w,Y.program=R,n.instruments.push(Y)}}return h.info(`%cParsing finished! %c"${n.soundBankInfo.name||"UNNAMED"}"%c has %c${n.instruments.length}%c instruments and %c${n.samples.length}%c samples.`,d.info,d.recognized,d.info,d.recognized,d.info,d.recognized,d.info),h.groupEnd(),n}static fromSF(e,A){h.groupCollapsed("%cSaving SF2 to DLS level 2...",d.info);let s=new Is;s.soundBankInfo={...e.soundBankInfo};for(let a=0;a<e.samples.length;a++){let n=e.samples[a];s.samples.push(Ls.fromSFSample(n)),A?.(a/e.samples.length)}for(let a of e.presets)s.instruments.push(VA.fromSFPreset(a,e.samples));return h.info("%cConversion complete!",d.recognized),h.groupEnd(),s}static printInfo(e){for(let[A,s]of Object.entries(e.soundBankInfo))if(typeof s=="object"&&"major"in s){let a=s;h.info(`%c${A}: %c"${a.major}.${a.minor}"`,d.info,d.recognized)}else h.info(`%c${A}: %c${s.toLocaleString()}`,d.info,d.recognized)}write(e=gs){let A=bA(e,gs);h.groupCollapsed("%cSaving DLS...",d.info);let s=new ne(4);ge(s,this.instruments.length);let a=U.write("colh",s);h.groupCollapsed("%cWriting instruments...",d.info);let n=U.getParts("lins",this.instruments.map(u=>u.write()),!0);h.info("%cSuccess!",d.recognized),h.groupEnd(),h.groupCollapsed("%cWriting WAVE samples...",d.info);let r=0,i=[],o=[],I=0;for(let u of this.samples){let w=u.write();A.progressFunction?.(I/this.samples.length),h.info(`%cWrote sample %c${I}. ${u.name}%c of %c${this.samples.length}.`,d.info,d.recognized,d.info,d.recognized),i.push(r),r+=w.reduce((M,R)=>M+R.length,0),o.push(...w),I++}let l=U.getParts("wvpl",o,!0);h.info("%cSucceeded!",d.recognized);let B=new ne(8+4*i.length);ge(B,8),ge(B,i.length);for(let u of i)ge(B,u);let C=U.write("ptbl",B);this.soundBankInfo.software=A.software;let g=[],E=this.soundBankInfo,S=(u,w)=>{w&&g.push(...U.getParts(u,[et(w,!0)]))};S("INAM",E.name),S("ICMT",E.comment),S("ICOP",E.copyright),S("ICRD",Bs(E.creationDate)),S("IENG",E.engineer),S("IPRD",E.product),S("ISFT",A.software),S("ISBJ",E.subject),h.info("%cCombining everything...");let k=U.writeParts("RIFF",[et("DLS "),a,...n,C,...l,...U.getParts("INFO",g,!0)]);return h.info("%cSaved successfully!",d.recognized),h.groupEnd(),k.buffer}toSF(){h.group("%cConverting DLS to SF2...",d.info);let e=new Sn;e.soundBankInfo.version.minor=4,e.soundBankInfo.version.major=2,e.soundBankInfo={...this.soundBankInfo};for(let A of this.samples)A.toSFSample(e);for(let A of this.instruments)A.toSFPreset(e);return e.flush(),h.info("%cConversion complete!",d.recognized),h.groupEnd(),e}},Sn=class dA{static isSF3DecoderReady=FA.isInitialized;soundBankInfo={name:"Unnamed",creationDate:new Date,software:"SpessaSynth",soundEngine:"E-mu 10K2",version:{major:2,minor:4}};presets=[];samples=[];instruments=[];defaultModulators=En.map(we.copyFrom.bind(we));customDefaultModulators=!1;_isXGBank=!1;get isXGBank(){return this._isXGBank}static mergeSoundBanks(...e){let A=e.shift();if(!A)throw new Error("No sound banks provided!");let s=A.presets;for(;e.length>0;){let n=e?.shift()?.presets;if(n)for(let r of n)s.some(i=>r.matches(i))||s.push(r)}let a=new dA;return a.addCompletePresets(s),a.soundBankInfo={...A.soundBankInfo},a}static getSampleSoundBankFile(){let e=new dA,A=new Float32Array(128);for(let r=0;r<128;r++)A[r]=r/128*2-1;let s=new qa;s.name="Saw",s.originalKey=65,s.pitchCorrection=20,s.loopEnd=127,s.setAudioData(A,44100),e.addSamples(s);let a=new _t;a.name="Saw Wave",a.globalZone.addGenerators(new Pe(c.initialAttenuation,375),new Pe(c.releaseVolEnv,-1e3),new Pe(c.sampleModes,1)),a.createZone(s),a.createZone(s).setGenerator(c.fineTune,-9),e.addInstruments(a);let n=new zt(e);return n.name="Saw Wave",n.createZone(a),e.addPresets(n),e.soundBankInfo.name="Dummy",e.flush(),e.writeSF2()}static copyFrom(e){let A=new dA;for(let s of e.presets)A.clonePreset(s);return A.soundBankInfo={...e.soundBankInfo},A}addCompletePresets(e){this.addPresets(...e);let A=[];for(let a of e)for(let n of a.zones)n.instrument&&!A.includes(n.instrument)&&A.push(n.instrument);this.addInstruments(...A);let s=[];for(let a of A)for(let n of a.zones)n.sample&&!s.includes(n.sample)&&s.push(n.sample);this.addSamples(...s)}async setSampleFormat(e){let A=0,s=e.format,a=e.progressFunction;for(let n of this.samples){switch(s){default:case"pcm":n.setAudioData(n.getAudioData(),n.sampleRate);break;case"compressed":{let r=e.compressionFunction;if(!r)throw new Error(`No compression function supplied but '${s}' was requested.`);await n.compressSample(r)}}A++,a?.(A/this.samples.length),h.info(`%cEncoded sample %c${A}. ${n.name}%c of %c${this.samples.length}%c. Compressed: %c${n.isCompressed}%c.`,d.info,d.recognized,d.info,d.recognized,d.info,n.isCompressed?d.recognized:d.unrecognized,d.info)}switch(s){default:case"pcm":this.soundBankInfo.version.major=2,this.soundBankInfo.version.minor=4;break;case"compressed":this.soundBankInfo.version.major=3,this.soundBankInfo.version.minor=0}}writeDLS(e=gs){let A=e.progressFunction;return yn.fromSF(this,A?s=>A(s/2):void 0).write({...e,progressFunction:A?s=>A(.5+s/2):void 0})}writeSF2(e=Qn){return Wa(this,e)}addPresets(...e){this.presets.push(...e)}addInstruments(...e){this.instruments.push(...e)}addSamples(...e){this.samples.push(...e)}cloneSample(e){let A=this.samples.find(a=>a.name===e.name);if(A)return A;let s=new vA(e.name,e.sampleRate,e.originalKey,e.pitchCorrection,e.sampleType,e.loopStart,e.loopEnd);if(e.isCompressed?s.setCompressedData(e.getRawData(!0)):s.setAudioData(e.getAudioData(),e.sampleRate),this.addSamples(s),e.linkedSample){let a=this.cloneSample(e.linkedSample);a.linkedSample||s.setLinkedSample(a,s.sampleType)}return s}cloneInstrument(e){let A=this.instruments.find(a=>a.name===e.name);if(A)return A;let s=new _t;s.name=e.name,s.globalZone.copyFrom(e.globalZone);for(let a of e.zones)s.createZone(this.cloneSample(a.sample)).copyFrom(a);return this.addInstruments(s),s}clonePreset(e){let A=this.presets.find(a=>a.name===e.name);if(A)return A;let s=new zt(this);s.name=e.name,s.bankMSB=e.bankMSB,s.bankLSB=e.bankLSB,s.isGMGSDrum=e.isGMGSDrum,s.program=e.program,s.library=e.library,s.genre=e.genre,s.morphology=e.morphology,s.globalZone.copyFrom(e.globalZone);for(let a of e.zones)s.createZone(this.cloneInstrument(a.instrument)).copyFrom(a);return this.addPresets(s),s}flush(){this.presets.sort(je.compare.bind(je)),this.parseInternal()}trim(e){let A=(s,a)=>{let n=0;for(let r=0;r<s.zones.length;r++){let i=s.zones[r],o=i.keyRange,I=i.velRange,l=!1;for(let[B,C]of a)if(B>=o.min&&B<=o.max&&[...C].some(g=>g>=I.min&&g<=I.max)){l=!0;break}l||(h.info(`%c${i.sample.name}%c removed from %c${s.name}%c.`,d.recognized,d.info,d.recognized,d.info),s.deleteZone(r)&&(n++,r--,h.info(`%c${i.sample.name}%c deleted`,d.recognized,d.info)),i.sample.useCount<1&&this.deleteSample(i.sample))}return n};h.groupCollapsed("%cTrimming sound bank...",d.info),h.info("Combinations to trim for:",e);for(let s=0;s<this.presets.length;s++){let a=this.presets[s],n=e.get(a);if(n===void 0)h.info(`%cDeleting preset %c${a.name}%c and its zones`,d.info,d.recognized,d.info),this.deletePreset(a),s--;else{h.groupCollapsed(`%cTrimming %c${a.name}`,d.info,d.recognized),h.info(`Keys for ${a.name}:`,n);let r=0;for(let i=0;i<a.zones.length;i++){let o=a.zones[i],I=o.keyRange,l=o.velRange,B=!1;for(let[C,g]of n)if(C>=I.min&&C<=I.max&&[...g].some(E=>E>=l.min&&E<=l.max)){B=!0;let E=A(o.instrument,n);h.info(`%cTrimmed off %c${E}%c instrument zones from %c${o.instrument.name}`,d.info,d.recognized,d.info,d.recognized);break}B||(r++,a.deleteZone(i),o.instrument.useCount<1&&this.deleteInstrument(o.instrument),i--)}h.info(`%cTrimmed off %c${r}%c preset zones from %c${a.name}`,d.info,d.recognized,d.info,d.recognized),h.groupEnd()}}this.removeUnusedElements(),h.info("%cSound bank modified!",d.recognized),h.groupEnd()}removeUnusedElements(){this.instruments=this.instruments.filter(e=>{e.deleteUnusedZones();let A=e.useCount<1;return A&&e.delete(),!A}),this.samples=this.samples.filter(e=>{let A=e.useCount<1;return A&&e.unlinkSample(),!A})}deleteInstrument(e){e.delete(),this.instruments.splice(this.instruments.indexOf(e),1)}deletePreset(e){e.delete(),this.presets.splice(this.presets.indexOf(e),1)}deleteSample(e){e.unlinkSample(),this.samples.splice(this.samples.indexOf(e),1)}getPreset(e,A){return je.selectPatch(this.presets,e,A)}destroySoundBank(){this.presets.length=0,this.instruments.length=0,this.samples.length=0}parsingError(e){throw new Error(`SF parsing error: ${e} The file may be corrupted.`)}parseInternal(){this._isXGBank=!1;let e=new Set([0,1,2,3,4,5,6,7,8,9,16,17,24,25,26,27,28,29,30,31,32,33,40,41,48,56,57,58,64,65,66,126,127]);for(let A of this.presets)if(De.isXGDrum(A.bankMSB)&&(this._isXGBank=!0,!e.has(A.program))){this._isXGBank=!1,h.info(`%cThis bank is not valid XG. Preset %c${A.toString()}%c is not a valid XG drum. XG mode will use presets on bank 128.`,d.info,d.value,d.info);break}}printInfo(){for(let[e,A]of Object.entries(this.soundBankInfo))if(typeof A=="object"&&"major"in A){let s=A;h.info(`%c${e}: %c"${s.major}.${s.minor}"`,d.info,d.recognized)}else h.info(`%c${e}: %c${A.toLocaleString()}`,d.info,d.recognized)}},er=class extends Pe{constructor(t){let e=t.currentIndex,A=t[e+1]<<8|t[e],s=ls(t[e+2],t[e+3]);t.currentIndex+=4,super(A,s,!1)}};function Ps(t){let e=[];for(;t.data.length>t.data.currentIndex;)e.push(new er(t.data));return e.pop(),e}function tr(t,e,A,s,a){let n=t.gen,r=t.mod,i=0,o=0;for(let I of a)for(let l=0;l<I.zonesCount;l++){let B=n[o++],C=n[o],g=e.slice(B,C),E=r[i++],S=r[i],k=A.slice(E,S);g.some(u=>u.type===c.instrument)?I.createSoundFontZone(k,g,s):(I.globalZone.addGenerators(...g),I.globalZone.addModulators(...k))}}var Ar=class extends zt{zoneStartIndex;zonesCount=0;constructor(t,e){super(e),this.name=de(t.data,20),this.program=X(t.data,2);let A=X(t.data,2);this.bankMSB=A&127,this.isGMGSDrum=(A&128)>0,this.bankLSB=A>>8,this.zoneStartIndex=X(t.data,2),this.library=X(t.data,4),this.genre=X(t.data,4),this.morphology=X(t.data,4)}createSoundFontZone(t,e,A){let s=e.find(r=>r.type===c.instrument),a;if(s)a=A[s.value];else throw new Error("No instrument ID found in preset zone.");if(!a)throw new Error(`Invalid instrument ID: ${s.value}, available instruments: ${A.length}`);let n=new fn(this,a);return n.addGenerators(...e),n.addModulators(...t),this.zones.push(n),n}};function Ns(t,e){let A=[];for(;t.data.length>t.data.currentIndex;){let s=new Ar(t,e);if(A.length>0){let a=A[A.length-1];a.zonesCount=s.zoneStartIndex-a.zoneStartIndex}A.push(s)}return A.pop(),A}var sr=class extends _t{zoneStartIndex;zonesCount=0;constructor(t){super(),this.name=de(t.data,20),this.zoneStartIndex=X(t.data,2)}createSoundFontZone(t,e,A){let s=e.find(r=>r.type===c.sampleID),a;if(s)a=A[s.value];else throw new Error("No sample ID found in instrument zone.");if(!a)throw new Error(`Invalid sample ID: ${s.value}, available samples: ${A.length}`);let n=new dn(this,a);return n.addGenerators(...e),n.addModulators(...t),this.zones.push(n),n}};function Ts(t){let e=[];for(;t.data.length>t.data.currentIndex;){let A=new sr(t);if(e.length>0){let s=e[e.length-1];s.zonesCount=A.zoneStartIndex-s.zoneStartIndex}e.push(A)}return e.pop(),e}function XA(t){let e=[];for(;t.data.length>t.data.currentIndex;){let A=t.data,s=X(A,2),a=X(A,2),n=ls(A[A.currentIndex++],A[A.currentIndex++]),r=X(A,2),i=X(A,2);e.push(new ye(s,r,a,n,i))}return e.pop(),e}function nr(t,e,A,s,a){let n=t.gen,r=t.mod,i=0,o=0;for(let I of a)for(let l=0;l<I.zonesCount;l++){let B=n[o++],C=n[o],g=e.slice(B,C),E=r[i++],S=r[i],k=A.slice(E,S);g.some(u=>u.type===c.sampleID)?I.createSoundFontZone(k,g,s):(I.globalZone.addGenerators(...g),I.globalZone.addModulators(...k))}}function cA(t){let e=[],A=[];for(;t.data.length>t.data.currentIndex;)A.push(X(t.data,2)),e.push(X(t.data,2));return{mod:e,gen:A}}var ar=class extends Sn{sampleDataStartIndex=0;constructor(t,e=!0){if(super(),e)throw new Error("Using the constructor directly is deprecated. Use SoundBankLoader.fromArrayBuffer() instead.");let A=new ne(t);h.group("%cParsing a SoundFont2 file...",d.info),A||(h.groupEnd(),this.parsingError("No data provided!"));let s=U.read(A,!1);this.verifyHeader(s,"riff");let a=de(A,4).toLowerCase();if(a!=="sfbk"&&a!=="sfpk")throw h.groupEnd(),new SyntaxError(`Invalid soundFont! Expected "sfbk" or "sfpk" got "${a}"`);let n=a==="sfpk",r=U.read(A);this.verifyHeader(r,"list");let i=de(r.data,4);if(i!=="INFO")throw h.groupEnd(),new SyntaxError(`Invalid soundFont! Expected "INFO" got "${i}"`);let o;for(;r.data.length>r.data.currentIndex;){let D=U.read(r.data),Q=$e(D.data,D.data.length),T=D.header;switch(T){case"ifil":case"iver":{let H=X(D.data,2),z=X(D.data,2);T==="ifil"?this.soundBankInfo.version={major:H,minor:z}:this.soundBankInfo.romVersion={major:H,minor:z};break}case"DMOD":this.defaultModulators=XA(D),this.customDefaultModulators=!0;break;case"LIST":de(D.data,4)==="xdta"&&(h.info("%cExtended SF2 found!",d.recognized),o=D);break;case"ICRD":this.soundBankInfo.creationDate=Es(de(D.data,D.data.length));break;case"ISFT":this.soundBankInfo.software=Q;break;case"IPRD":this.soundBankInfo.product=Q;break;case"IENG":this.soundBankInfo.engineer=Q;break;case"ICOP":this.soundBankInfo.copyright=Q;break;case"INAM":this.soundBankInfo.name=Q;break;case"ICMT":this.soundBankInfo.comment=Q;break;case"irom":this.soundBankInfo.romInfo=Q;break;case"isng":this.soundBankInfo.soundEngine=Q}}this.printInfo();let I={};o!==void 0&&(I.phdr=U.read(o.data),I.pbag=U.read(o.data),I.pmod=U.read(o.data),I.pgen=U.read(o.data),I.inst=U.read(o.data),I.ibag=U.read(o.data),I.imod=U.read(o.data),I.igen=U.read(o.data),I.shdr=U.read(o.data));let l=U.read(A,!1);this.verifyHeader(l,"list"),this.verifyText(de(A,4),"sdta"),h.info("%cVerifying smpl chunk...",d.warn);let B=U.read(A,!1);this.verifyHeader(B,"smpl");let C;if(n){h.info("%cSF2Pack detected, attempting to decode the smpl chunk...",d.info);try{C=FA.decode(A.buffer.slice(A.currentIndex,A.currentIndex+l.size-12)).data[0]}catch(D){throw h.groupEnd(),new Error(`SF2Pack Ogg Vorbis decode error: ${D}`,{cause:D})}h.info(`%cDecoded the smpl chunk! Length: %c${C.length}`,d.info,d.value)}else C=A,this.sampleDataStartIndex=A.currentIndex;h.info(`%cSkipping sample chunk, length: %c${l.size-12}`,d.info,d.value),A.currentIndex+=l.size-12,h.info("%cLoading preset data chunk...",d.warn);let g=U.read(A);this.verifyHeader(g,"list"),de(g.data,4);let E=U.read(g.data);this.verifyHeader(E,"phdr");let S=U.read(g.data);this.verifyHeader(S,"pbag");let k=U.read(g.data);this.verifyHeader(k,"pmod");let u=U.read(g.data);this.verifyHeader(u,"pgen");let w=U.read(g.data);this.verifyHeader(w,"inst");let M=U.read(g.data);this.verifyHeader(M,"ibag");let R=U.read(g.data);this.verifyHeader(R,"imod");let v=U.read(g.data);this.verifyHeader(v,"igen");let N=U.read(g.data);this.verifyHeader(N,"shdr"),h.info("%cParsing samples...",d.info),A.currentIndex=this.sampleDataStartIndex;let m=Fs(N,C,o===void 0);if(o&&I.shdr){let D=Fs(I.shdr,new Float32Array(1),!1);if(D.length===m.length)for(let[Q,T]of m.entries())T.name+=D[Q].name,T.linkedSampleIndex|=D[Q].linkedSampleIndex<<16}for(let D of m)D.name=D.name.trim();this.samples.push(...m);let p=Ps(v),y=XA(R),V=Ts(w);if(o&&I.inst){let D=Ts(I.inst);if(D.length===V.length){for(let[Q,T]of V.entries())T.name+=D[Q].name,T.zoneStartIndex|=D[Q].zoneStartIndex<<16;for(let[Q,T]of V.entries())Q<V.length-1&&(T.zonesCount=V[Q+1].zoneStartIndex-T.zoneStartIndex)}}for(let D of V)D.name=D.name.trim();this.instruments.push(...V);let Y=cA(M);if(o&&I.ibag){let D=cA(I.ibag);for(let Q=0;Q<Y.mod.length;Q++)Y.mod[Q]|=D.mod[Q]<<16;for(let Q=0;Q<Y.gen.length;Q++)Y.gen[Q]|=D.gen[Q]<<16}nr(Y,p,y,this.samples,V);let q=Ps(u),J=XA(k),ee=Ns(E,this);if(o&&I.phdr){let D=Ns(I.phdr,this);if(D.length===ee.length){for(let[Q,T]of ee.entries())T.name+=D[Q].name,T.zoneStartIndex|=D[Q].zoneStartIndex<<16;for(let[Q,T]of ee.entries())Q<ee.length-1&&(T.zonesCount=ee[Q+1].zoneStartIndex-T.zoneStartIndex)}}for(let D of ee)D.name=D.name.trim();this.addPresets(...ee);let x=cA(S);if(o&&I.pbag){let D=cA(I.pbag);for(let Q=0;Q<x.mod.length;Q++)x.mod[Q]|=D.mod[Q]<<16;for(let Q=0;Q<x.gen.length;Q++)x.gen[Q]|=D.gen[Q]<<16}tr(x,q,J,this.instruments,ee),this.flush(),h.info(`%cParsing finished! %c"${this.soundBankInfo.name}"%c has %c${this.presets.length}%c presets,
17
- %c${this.instruments.length}%c instruments and %c${this.samples.length}%c samples.`,d.info,d.recognized,d.info,d.recognized,d.info,d.recognized,d.info,d.recognized,d.info),h.groupEnd()}verifyHeader(t,e){t.header.toLowerCase()!==e.toLowerCase()&&(h.groupEnd(),this.parsingError(`Invalid chunk header! Expected "${e.toLowerCase()}" got "${t.header.toLowerCase()}"`))}verifyText(t,e){t.toLowerCase()!==e.toLowerCase()&&(h.groupEnd(),this.parsingError(`Invalid FourCC: Expected "${e.toLowerCase()}" got "${t.toLowerCase()}"\``))}},jt=class{static fromArrayBuffer(t){return de(new ne(t.slice(8,12)),4).toLowerCase()==="dls "?this.loadDLS(t):new ar(t,!1)}static loadDLS(t){return yn.read(t).toSF()}},DA=class kn extends we{isEffectModulator;isDefaultResonantModulator;isModWheelModulator;constructor(e,A,s,a,n,r,i,o){super(e,A,s,a,n),this.isEffectModulator=r,this.isDefaultResonantModulator=i,this.isModWheelModulator=o}static fromData(e,A,s,a,n){let r=e.toSourceEnum(),i=A.toSourceEnum();return new kn(e,A,s,a,n,(r===219||r===221)&&i===0&&(s===c.reverbEffectsSend||s===c.chorusEffectsSend),r===Bn&&i===0&&s===c.initialFilterQ,(e.isCC&&e.index===f.modulationWheel||A.isCC&&A.index===f.modulationWheel)&&(s===c.modLfoToPitch||s===c.vibLfoToPitch))}static fromModulator(e){return this.fromData(e.primarySource,e.secondarySource,e.destination,e.transformAmount,e.transformType)}},rr=class{sampleData;generators;modulators;exclusiveClass;targetKey;velocity;rootKey;loopStart;loopEnd;playbackStep;loopingMode;constructor(t,e,A,s){let a=t.sample,n=t.generators;this.modulators=t.modulators.map(DA.fromModulator.bind(DA)),this.generators=n,this.rootKey=a.originalKey,n[c.overridingRootKey]>-1&&(this.rootKey=n[c.overridingRootKey]),this.targetKey=e,n[c.keyNum]>-1&&(this.targetKey=n[c.keyNum]),this.velocity=A,n[c.velocity]>-1&&(this.velocity=n[c.velocity]),this.exclusiveClass=n[c.exclusiveClass],this.loopStart=a.loopStart,this.loopEnd=a.loopEnd,this.sampleData=a.getAudioData(),this.playbackStep=a.sampleRate/s*Math.pow(2,a.pitchCorrection/1200),this.loopingMode=n[c.sampleModes]}},Us=Math.PI/2,fA=-500,Dn=500,us=Dn-fA,wn=new Float32Array(us+1),Mn=new Float32Array(us+1);for(let t=fA;t<=Dn;t++){let e=(t-fA)/us,A=t-fA;wn[A]=Math.cos(Us*e),Mn[A]=Math.sin(Us*e)}function ir(t,e,A,s,a,n){if(!t.isInRelease&&e>=t.releaseStartTime&&(t.isInRelease=!0,t.volEnv.startRelease(t),t.modEnv.startRelease(t),t.loopingMode===3&&(t.wavetable.isLooping=!1)),t.hasRendered=!0,!t.isActive)return;let r=this.synthCore,i=r.sampleRate,o=t.modulatedGenerators,I=t.targetKey,l=t.pitchOffset+o[c.fineTune]+this.octaveTuning[I]+this.currentTuning,B=o[c.coarseTune],C=r.tunings[this.preset.program*128+t.midiNote];if(C!==-1&&(I=Math.trunc(C),B+=C-I),t.portamentoFromKey>-1){let Q=Math.min((e-t.startTime)/t.portamentoDuration,1),T=I-t.portamentoFromKey;B-=T*(1-Q)}l+=(I-t.rootKey)*o[c.scaleTuning];let g=0,E=0,S=t.gainModifier*(1+o[c.amplitude]/1e3);if(e>=t.vibLfoStartTime){let Q=o[c.vibLfoToPitch],T=o[c.vibLfoToFilterFc],H=o[c.vibLfoAmplitudeDepth];if(Q!==0||T!==0||H!==0){let z=Math.max(0,As(o[c.freqVibLFO])+o[c.vibLfoRate]/100)*n/i,j=1-4*Math.abs(t.vibLfoPhase-.5);(t.vibLfoPhase+=z)>=1&&(t.vibLfoPhase-=1),l+=j*Q,g+=j*T,S*=1-(j+1)/2*(H/1e3)}}if(e>=t.modLfoStartTime){let Q=o[c.modLfoToPitch],T=o[c.modLfoToVolume],H=o[c.modLfoToFilterFc],z=o[c.modLfoAmplitudeDepth];if(Q!==0||H!==0||T!==0||z!==0){let j=Math.max(0,As(o[c.freqModLFO])+o[c.modLfoRate]/100)*n/i,W=1-4*Math.abs(t.modLfoPhase-.5);(t.modLfoPhase+=j)>=1&&(t.modLfoPhase-=1),l+=W*Q,E+=-W*T,g+=W*H,S*=1-(W+1)/2*(z/1e3)}}let k=o[c.modEnvToPitch],u=o[c.modEnvToFilterFc];if(u!==0||k!==0){let Q=t.modEnv.process(t,e);g+=Q*u,l+=Q*k}E-=t.resonanceOffset;let w=l+B*100,M=w|0;M!==t.tuningCents&&(t.tuningCents=M,t.tuningRatio=Math.pow(2,w/1200));let R=SA(o[c.initialAttenuation])*SA(E);if(t.loopingMode===2&&!t.isInRelease){t.isActive=t.volEnv.process(n,R);return}let v=r.voiceBuffer;t.isActive=t.wavetable.process(n,t.tuningRatio,v);let N=t.volEnv.outputGain,m=t.volEnv.process(n,R),p=(t.volEnv.outputGain-N)/n;{let Q=t.filter,T=o[c.initialFilterFc];Q.initialized?Q.currentInitialFc+=(T-Q.currentInitialFc)*fs.smoothingConstant:(Q.initialized=!0,Q.currentInitialFc=T);let H=Q.currentInitialFc+g,z=o[c.initialFilterQ];if(Q.currentInitialFc>13499&&H>13499&&z===0){Q.currentInitialFc=13500;for(let j=0;j<n;j++)v[j]*=N,N+=p}else{(Math.abs(Q.lastTargetCutoff-H)>1||Q.resonanceCb!==z)&&(Q.lastTargetCutoff=H,Q.resonanceCb=z,Q.calculateCoefficients(H));let{a0:j,a1:W,a2:K,a3:te,a4:Ae}=Q,{x1:O,x2:re,y1:me,y2:Le}=Q;for(let Ee=0;Ee<n;Ee++){let Re=v[Ee],Oe=j*Re+W*O+K*re-te*me-Le*Ae;re=O,O=Re,Le=me,me=Oe,v[Ee]=Oe*N,N+=p}Q.x1=O,Q.x2=re,Q.y1=me,Q.y2=Le}}t.isActive=t.isActive&&m;let y;t.overridePan?y=t.overridePan:(t.currentPan+=(o[c.pan]-t.currentPan)*r.panSmoothingFactor,y=t.currentPan);let{systemParameters:V}=r,Y=this.currentGain*S,q=Math.min(Math.max(-500,y+this.currentPan),500)+500|0,J=wn[q]*Y,ee=Mn[q]*Y;if(this._midiParameters.efxAssign){let Q=r.insertionInputL,T=r.insertionInputR;for(let H=0;H<n;H++){let z=v[H];Q[H]+=J*z,T[H]+=ee*z}return}for(let Q=0;Q<n;Q++){let T=v[Q],H=Q+a;A[H]+=J*T,s[H]+=ee*T}if(!V.effectsEnabled)return;let x=o[c.reverbEffectsSend]*t.reverbSend;if(x>0){let Q=V.reverbGain*Y*(x/1e3),T=r.reverbInput;for(let H=0;H<n;H++)T[H]+=Q*v[H]}let D=o[c.chorusEffectsSend]*t.chorusSend;if(D>0){let Q=V.chorusGain*(D/1e3)*Y,T=r.chorusInput;for(let H=0;H<n;H++)T[H]+=Q*v[H]}if(r.delayActive){let Q=this._midiControllers[f.variationDepth]*t.delaySend;if(Q>0){let T=Y*V.delayGain*((Q>>7)/127),H=r.delayInput;for(let z=0;z<n;z++)H[z]+=T*v[z]}}}function or(t,e,A=!0){if(t>127||e<0)throw new Error("Invalid MIDI Controller.");if(t>=f.modulationWheelLSB&&t<=f.effectControl2LSB){let s=t-32;if(this.lockedControllers[s])return;this._midiControllers[s]=this._midiControllers[s]&16256|e&127,this.computeModulatorsAll(1,s)}if(!this.lockedControllers[t]){switch(this._midiControllers[t]=e<<7|this._midiControllers[t]&127,t){case f.omniModeOff:case f.omniModeOn:case f.allNotesOff:this.stopAllNotes();break;case f.allSoundOff:this.stopAllNotes(!0);break;case f.polyModeOn:this.stopAllNotes(!0),this.setMIDIParameter("polyMode",!0);break;case f.monoModeOn:this.stopAllNotes(!0),this.setMIDIParameter("polyMode",!1);break;case f.bankSelect:this.setBankMSB(e),this.channel%16===9&&De.isSystemXG(this.channelSystem)&&this.setBankMSB(127);break;case f.bankSelectLSB:this.setBankLSB(e);break;case f.variationDepth:this.synthCore.delayActive=!0;break;case f.registeredParameterLSB:case f.registeredParameterMSB:this._midiControllers[f.dataEntryMSB]=0,this.lastParameterIsRegistered=!0;break;case f.nonRegisteredParameterMSB:this.sf2NRPNGeneratorLSB=0,this._midiControllers[f.dataEntryMSB]=0,this.lastParameterIsRegistered=!1;break;case f.nonRegisteredParameterLSB:if(this._midiControllers[f.nonRegisteredParameterMSB]>>7===ke.SF2)switch(this.sf2NRPNGeneratorLSB%100!==0&&(this.sf2NRPNGeneratorLSB=0),e){case 100:this.sf2NRPNGeneratorLSB+=100;break;case 101:this.sf2NRPNGeneratorLSB+=1e3;break;case 102:this.sf2NRPNGeneratorLSB+=1e4;break;default:e<100&&(this.sf2NRPNGeneratorLSB+=e)}this._midiControllers[f.dataEntryMSB]=0,this.lastParameterIsRegistered=!1;break;case f.dataEntryMSB:case f.dataEntryLSB:this.dataEntry();break;case f.resetAllControllers:this.resetRP15();break;case f.sustainPedal:if(e<64){let s=0;if(this._voiceCount>0){for(let a of this.synthCore.voices)if(a.channel===this.channel&&a.isActive&&a.isHeld&&(a.isHeld=!1,a.releaseVoice(this.synthCore.currentTime),++s>=this._voiceCount))break}}break;case f.portamentoControl:this.lastPortamentoNote=e,this.portamentoForce=!0;break;default:this.computeModulatorsAll(1,t);break}A&&this.synthCore.callEvent("controllerChange",{channel:this.channel,controller:t,value:e})}}var gr=[c.delayModLFO,c.freqModLFO,c.delayVibLFO,c.freqVibLFO,c.delayModEnv,c.attackModEnv,c.holdModEnv,c.decayModEnv,c.sustainModEnv,c.releaseModEnv,c.delayVolEnv,c.attackVolEnv,c.holdVolEnv,c.decayVolEnv,c.sustainVolEnv,c.releaseVolEnv,c.fineTune,c.modLfoToPitch,c.vibLfoToPitch,c.modEnvToPitch,c.modLfoToVolume,c.initialFilterFc,c.initialFilterQ,c.modLfoToFilterFc,c.modEnvToFilterFc,c.chorusEffectsSend,c.reverbEffectsSend],ht=(t,e,A)=>Math.max(e,Math.min(A,t)),hA=t=>Math.max(-32768,1200*Math.log2(t/1e3)),Ir=t=>6900+1200*Math.log2(t/440);function cr(t,e){let A=e&127;e-=8192;let s=gr[t];s||h.unsupported(`AWE32 LSB for ${this.channel}`,[t],"Invalid Generator Number");let a,n,r,i;switch(s){default:break;case c.delayModLFO:case c.delayVibLFO:case c.delayVolEnv:case c.delayModEnv:a=4*ht(e,0,5900),this.setGeneratorOverride(s,hA(a));break;case c.attackVolEnv:case c.attackModEnv:a=ht(e,0,5940),this.setGeneratorOverride(s,hA(a));break;case c.holdVolEnv:case c.holdModEnv:a=ht(e,0,8191),this.setGeneratorOverride(s,hA(a));break;case c.decayModEnv:case c.decayVolEnv:case c.releaseVolEnv:case c.releaseModEnv:a=4*ht(e,0,5940),this.setGeneratorOverride(s,hA(a));break;case c.freqVibLFO:case c.freqModLFO:n=.084*A,this.setGeneratorOverride(s,Ir(n),!0);break;case c.sustainVolEnv:case c.sustainModEnv:r=A*7.5,this.setGeneratorOverride(s,r);break;case c.fineTune:this.setGeneratorOverride(s,e,!0);break;case c.modLfoToPitch:case c.vibLfoToPitch:i=ht(e,-127,127)*9.375,this.setGeneratorOverride(s,i,!0);break;case c.modEnvToPitch:i=ht(e,-127,127)*9.375,this.setGeneratorOverride(s,i);break;case c.modLfoToVolume:r=1.875*A,this.setGeneratorOverride(s,r,!0);break;case c.initialFilterFc:{let o=4335+59*A;this.setGeneratorOverride(s,o,!0);break}case c.initialFilterQ:r=215*(A/127),this.setGeneratorOverride(s,r,!0);break;case c.modLfoToFilterFc:i=ht(e,-64,63)*56.25,this.setGeneratorOverride(s,i,!0);break;case c.modEnvToFilterFc:i=ht(e,-64,63)*56.25,this.setGeneratorOverride(s,i);break;case c.chorusEffectsSend:case c.reverbEffectsSend:this.setGeneratorOverride(s,ht(e,0,255)*(1e3/255));break}}function hr(){let t=this._midiControllers[f.dataEntryMSB];if(this.lastParameterIsRegistered){let a=this._midiControllers[f.registeredParameterMSB]|this._midiControllers[f.registeredParameterLSB]>>7;switch(a){default:h.info(`%cUnrecognized RPN for %c${this.channel}%c: %c(0x${a.toString(16)})%c data value: %c${t}`,d.warn,d.recognized,d.warn,d.unrecognized,d.warn,d.value);break;case Ze.pitchWheelRange:{let n=t/128;this.setMIDIParameter("pitchWheelRange",n),h.coolInfo(`Pitch Wheel Range for ${this.channel}`,n,"semitones");break}case Ze.coarseTuning:{let n=(t>>7)-64;this.setMIDIParameter("keyShift",n),h.coolInfo(`Key shift for ${this.channel}`,n);break}case Ze.fineTuning:{let n=(t-8192)/81.92;this.setMIDIParameter("fineTune",n),h.coolInfo(`Fine tuning for ${this.channel}`,Math.round(n),"cents");break}case Ze.modulationDepth:{let n=t/1.28;this.setMIDIParameter("modulationDepth",n),h.coolInfo(`Modulation depth for ${this.channel}`,Math.round(n),"cents");break}case Ze.resetParameters:break}return}let e=this._midiControllers[f.nonRegisteredParameterMSB]>>7,A=this._midiControllers[f.nonRegisteredParameterLSB]>>7,s=t>>7;if(!(this.synthCore.systemParameters.drumLock&&e>=ke.drumPitch&&e<=ke.drumDelay))switch(e){default:h.info(`%cUnrecognized NRPN for %c${this.channel}%c: %c(0x${e.toString(16).toUpperCase()} 0x${A.toString(16).toUpperCase()})%c data value: %c${s}`,d.warn,d.recognized,d.warn,d.unrecognized,d.warn,d.value);break;case ke.partParameter:{let a=this._systemParameters.nrpnParamLock??this.synthCore.systemParameters.nrpnParamLock;switch(A){default:h.info(`%cUnrecognized NRPN for %c${this.channel}%c: %c(0x${e.toString(16)} 0x${A.toString(16)})%c data value: %c${s}`,d.warn,d.recognized,d.warn,d.unrecognized,d.warn,d.value);break;case Ue.vibratoRate:this.controllerChange(f.vibratoRate,s);break;case Ue.vibratoDepth:this.controllerChange(f.vibratoDepth,s);break;case Ue.vibratoDelay:this.controllerChange(f.vibratoDelay,s);break;case Ue.tvfCutoffFrequency:if(a)return;this.controllerChange(f.brightness,s),h.coolInfo(`Filter cutoff for ${this.channel}`,s.toString(),"");break;case Ue.tvfResonance:if(a)return;this.controllerChange(f.filterResonance,s),h.coolInfo(`Filter resonance for ${this.channel}`,s.toString(),"");break;case Ue.envelopeAttackTime:if(a)return;this.controllerChange(f.attackTime,s),h.coolInfo(`EG attack time for ${this.channel}`,s.toString(),"");break;case Ue.envelopeDecayTime:if(a)return;this.controllerChange(f.decayTime,s),h.coolInfo(`EG decay time for ${this.channel}`,s.toString(),"");break;case Ue.envelopeReleaseTime:if(a)return;this.controllerChange(f.releaseTime,s),h.coolInfo(`EG release time for ${this.channel}`,s.toString(),"");break}break}case ke.drumPitch:{let a=this.channelSystem==="xg"||this.patch.bankLSB===1?(s-64)*100:(s-64)*50;this.drumParams[A].pitch=a,h.coolInfo(`Drum ${A} pitch for ${this.channel}`,a,"cents");break}case ke.drumPitchFine:{let a=s-64;this.drumParams[A].pitch+=a,h.coolInfo(`Drum ${A} pitch fine for ${this.channel}`,this.drumParams[A].pitch,"cents");break}case ke.drumLevel:this.drumParams[A].gain=s/120,h.coolInfo(`Drum ${A} level for ${this.channel}`,s,"");break;case ke.drumPan:this.drumParams[A].pan=s,h.coolInfo(`Drum ${A} pan for ${this.channel}`,s,"");break;case ke.drumReverb:this.drumParams[A].reverbGain=s/127,h.coolInfo(`Drum ${A} reverb level for ${this.channel}`,s,"");break;case ke.drumChorus:this.drumParams[A].chorusGain=s/127,h.coolInfo(`Drum ${A} chorus level for ${this.channel}`,s,"");break;case ke.drumDelay:this.drumParams[A].delayGain=s/127,h.coolInfo(`Drum ${A} delay level for ${this.channel}`,t,"");break;case ke.awe32:cr.call(this,A,t);break;case ke.SF2:{if(A>100)break;let a=this.sf2NRPNGeneratorLSB,n=t-8192;this.setGeneratorOffset(a,n);break}}}var lr=40;function Cr(t){if(t<1)return 0;{let e=[1,2,4,8,16,32,64,80,96,112,120,124],A=[1,.5,.25,.125,.0625,.03125,.0625,.0625,.0625,.125,.25,1/3],s=[-.16653127382501215,.11863875218299408,.029479047361245264,-.005442312089231738,.1451520875973037,-.005056281449558275,-.005095486882876532,.03334009551111544,-.09361368678020432,.14132569702451822,-.15805565301011382,-.09918856955881927],a=[.028212773333433472,-.3388502064992847,-.15839529890929713,-.12398131766775483,-.2874848552685111,.012254866302537692,.005957797193345771,-.03745899330347374,.12911781869810196,-.15867193224162568,.504406322732748,.3786845131875458],n=[.7218950861255283,.5574536226347168,.47133893237025826,.48597095327079914,.44336276333518854,.6076986311801551,.30851975971827794,.30514889345633955,.3302511933827384,.153822885219165,.1302280559047337,.49865530675491687],r=[-2.2218487496163566,-1.6382721639824072,-1.3010299956639813,-.958607314841775,-.6020599913279624,-.3010299956639812,.31386722036915343,.6232492903979004,.9242792860618817,1.290034611362518,1.4265112613645752,1.9030899869919435],i=[2,4,8,16,32,64,80,96,112,120,124],o=-1;for(let l=i.length-1;l>=0;l--)if(i[l]<t){o=l;break}o+=1;let I=(t-e[o])*A[o];return Math.exp(2.302585092994046*(((s[o]*I+a[o])*I+n[o])*I+r[o]))/lr}}function Br(t,e){return Cr(t)*e}var Kt=(t,e,A)=>Math.max(e,Math.min(A,t));function Er(t,e,A=!0){if(e<1){this.noteOff(t);return}let s=this.synthCore.systemParameters.blackMIDIMode;if(s&&this.synthCore.voiceCount>200&&e<40||s&&e<10||this._systemParameters.isMuted||!this.preset)return;let a=Kt(e*(this._midiParameters.velocitySenseDepth/64)+(this._midiParameters.velocitySenseOffset-64)*2,0,127),n=t+this.currentKeyShift;if(t>127||t<0)return;let r=this.preset.program,i=this.synthCore.tunings[r*128+t];i>=0&&(n=Math.trunc(i)),((this._systemParameters.monophonicRetrigger??this.synthCore.systemParameters.monophonicRetrigger)||this._midiParameters.assignMode===0)&&this.killNote(t);let o=this.synthCore.keyModifierManager.getVelocity(this.channel,t);o>-1&&(a=o);let I=this.synthCore.keyModifierManager.getGain(this.channel,t),l=this.lastPortamentoNote,B=this.portamentoForce||this._midiControllers[f.portamentoOnOff]>=8192,C=this._midiControllers[f.portamentoTime]>>7,g=B&&!this._drumChannel&&l>=0&&l!==t&&C>0,E=-1,S=0;if(g){let p=Math.abs(t-l);E=l,S=Br(C,p),this.portamentoForce=!1}this.lastPortamentoNote=t,this.playingNotes[t]=!0,this._midiParameters.polyMode||(this.lastMonoNote>=0&&this.lastMonoNote!==t&&this.killNote(this.lastMonoNote),this.lastMonoNote=t,this.lastMonoVelocity=e);let k=this.synthCore.getVoices(this.channel,n,a),u=0,w=0,M=0,R=1,v=1,N=1;if(this._midiParameters.randomPan&&(u=Math.round(Math.random()*1e3-500)),this._drumChannel){let p=this.drumParams[t];if(!p.rxNoteOn)return;let y=p.pan-64;if(y!==0)if(y===-64)u=Math.round(Math.random()*1e3-500);else{let V=(this._midiControllers[f.pan]>>7)-64;u=Math.max(-63,Math.min(y+V,63))/63*500||1}M=p.pitch,w=p.exclusiveClass,R=p.reverbGain,v=p.chorusGain,N=p.delayGain,I===1&&(I=p.gain)}let m=A?this.noteOnID[t]++:this.noteOnID[t];for(let p of k){let y=this.synthCore.assignVoice(),V=this.synthCore.currentTime;if(y.setup(V,this.channel,t,m),y.wavetable=y.oscillators[this._systemParameters.interpolationType??this.synthCore.systemParameters.interpolationType],y.targetKey=p.targetKey,y.velocity=p.velocity,y.generators.set(p.generators),y.exclusiveClass=w||p.exclusiveClass,y.rootKey=p.rootKey,y.loopingMode=p.loopingMode,y.wavetable.sampleData=p.sampleData,y.wavetable.playbackStep=p.playbackStep,this.dynamicModulators.active){y.modulators=[...p.modulators];for(let D of this.dynamicModulators.modulatorList){let Q=y.modulators.findIndex(T=>we.isIdentical(T,D.mod));Q===-1?y.modulators.push(D.mod):y.modulators[Q]=D.mod}}else y.modulators=p.modulators;if(y.modulators.length>y.modulatorValues.length&&(h.warn(`${y.modulators.length} modulators! Increasing modulatorValues table.`),y.modulatorValues=new Int16Array(y.modulators.length)),this.generators.overridesEnabled){let D=this.generators.overrides;for(let Q=0;Q<Dt;Q++){let T=D[Q];T!==32767&&(y.generators[Q]=T)}}if(y.exclusiveClass!==0&&this._midiParameters.polyMode){let D=0;if(this._voiceCount>0){for(let Q of this.synthCore.voices)if(Q.isActive&&Q.channel===this.channel&&Q.exclusiveClass===y.exclusiveClass&&Q.hasRendered&&(Q.exclusiveRelease(this.synthCore.currentTime),++D>=this._voiceCount))break}}this.computeModulators(y),y.volEnv.init(y),y.modEnv.init(y),y.filter.init(),y.vibLfoStartTime=V+pA(y.modulatedGenerators[c.delayVibLFO]),y.modLfoStartTime=V+pA(y.modulatedGenerators[c.delayModLFO]);let Y=y.modulatedGenerators[c.startAddrsOffset]+y.modulatedGenerators[c.startAddrsCoarseOffset]*32768,q=y.modulatedGenerators[c.endAddrOffset]+y.modulatedGenerators[c.endAddrsCoarseOffset]*32768,J=y.modulatedGenerators[c.startloopAddrsOffset]+y.modulatedGenerators[c.startloopAddrsCoarseOffset]*32768,ee=y.modulatedGenerators[c.endloopAddrsOffset]+y.modulatedGenerators[c.endloopAddrsCoarseOffset]*32768,x=p.sampleData.length;if(y.wavetable.cursor=Kt(Y,0,x-1),y.wavetable.end=Kt(x+q,0,x),y.wavetable.loopStart=Kt(p.loopStart+J,0,x),y.wavetable.loopEnd=Kt(p.loopEnd+ee,0,x),y.wavetable.loopEnd<y.wavetable.loopStart){let D=y.wavetable.loopStart;y.wavetable.loopStart=y.wavetable.loopEnd,y.wavetable.loopEnd=D}y.wavetable.loopEnd-y.wavetable.loopStart<1&&(y.loopingMode===1||y.loopingMode===3)&&(y.loopingMode=0),y.wavetable.loopLength=y.wavetable.loopEnd-y.wavetable.loopStart,y.wavetable.isLooping=y.loopingMode===1||y.loopingMode===3,y.portamentoFromKey=E,y.portamentoDuration=S,y.overridePan=u,y.gainModifier=I,y.pitchOffset=M,y.reverbSend=R,y.chorusSend=v,y.delaySend=N,y.currentPan=Math.max(-500,Math.min(500,u||y.modulatedGenerators[c.pan]))}this._voiceCount+=k.length,A&&this.synthCore.callEvent("noteOn",{midiNote:t,channel:this.channel,velocity:e})}function dr(t){if(t>127||t<0)return;if(this.synthCore.systemParameters.blackMIDIMode&&!this._drumChannel||this._drumChannel&&this.drumParams[t].rxNoteOff){this.killNote(t),this.synthCore.callEvent("noteOff",{midiNote:t,channel:this.channel});return}this.playingNotes[t]=!1;let e=!this._midiParameters.polyMode,A=this._midiControllers[f.sustainPedal]>=8192&&!e,s=0,a=this.noteOffID[t];if(a<this.noteOnID[t]&&this.noteOffID[t]++,this._voiceCount>0){for(let n of this.synthCore.voices)if(n.channel===this.channel&&n.isActive&&n.midiNote===t&&n.noteID===a&&!n.isInRelease&&(A?n.isHeld=!0:n.releaseVoice(this.synthCore.currentTime),++s>=this._voiceCount))break}if(this.synthCore.callEvent("noteOff",{midiNote:t,channel:this.channel}),e){let n=this.playingNotes.lastIndexOf(!0);n===-1?this.lastMonoNote=-1:this.lastMonoNote===t&&this.noteOn(n,this.lastMonoVelocity,!1)}}function fr(t){if(this._systemParameters.presetLock)return;this.patch.program=t;let e=this.synthCore.soundBankManager.getPreset(this.patch,this.channelSystem);!e&&(e=this.synthCore.missingPresetHandler(this.patch,this.channelSystem),!e)||(this.preset=e,e.isDrum!==this._drumChannel&&this.setDrumFlag(e.isDrum),this.resetDrumParams(),this.synthCore.callEvent("programChange",{channel:this.channel,bankLSB:this.preset.bankLSB,bankMSB:this.preset.bankMSB,program:this.preset.program,name:this.preset.name,isGMGSDrum:this.preset.isGMGSDrum,isDrum:this.preset.isDrum}))}var Qr=[DA.fromModulator(new ye(_e(le.linear,!0,!1,!0,f.vibratoRate),0,c.vibLfoRate,1e3,0))],ur=class{modulatorList=[];active=!1;channel;constructor(t){this.channel=t}resetModulators(){this.modulatorList=Qr.map(t=>({mod:t,id:this.getModulatorID(t.primarySource.toSourceEnum(),t.destination,t.primarySource.isBipolar,t.primarySource.isNegative)})),this.active=!1}setupReceiver(t,e,A,s,a,n=!1){this.active=!0;let r=e-64,i=r/64,o=e/127;switch(t&15){case 0:this.setModulator(A,s,c.fineTune,r*100,n),h.coolInfo(`Channel ${this.channel} ${a} pitch control`,r,"semitones");break;case 1:this.setModulator(A,s,c.initialFilterFc,i*9600,n),h.coolInfo(`Channel ${this.channel} ${a} filter control`,i*9600,"cents");break;case 2:this.setModulator(A,s,c.amplitude,i*1e3,n),h.coolInfo(`Channel ${this.channel} ${a} amplitude control`,i*100,"%");break;case 3:this.setModulator(A,s,c.vibLfoRate,i*1e3,n),h.coolInfo(`Channel ${this.channel} ${a} LFO1 rate control`,i*10,"Hz");break;case 4:this.setModulator(A,s,c.vibLfoToPitch,o*600,n),h.coolInfo(`Channel ${this.channel} ${a} LFO1 pitch depth control`,o*600,"cents");break;case 5:this.setModulator(A,s,c.vibLfoToFilterFc,o*2400,n),h.coolInfo(`Channel ${this.channel} ${a} LFO1 filter depth control`,o*2400,"cents");break;case 6:this.setModulator(A,s,c.vibLfoAmplitudeDepth,o*1e3,n),h.coolInfo(`Channel ${this.channel} ${a} LFO1 amplitude depth control`,o*100,"%");break;case 7:this.setModulator(A,s,c.modLfoRate,i*1e3,n),h.coolInfo(`Channel ${this.channel} ${a} LFO2 rate control`,i*10,"Hz");break;case 8:this.setModulator(A,s,c.modLfoToPitch,o*600,n),h.coolInfo(`Channel ${this.channel} ${a} LFO2 pitch depth control`,o*600,"cents");break;case 9:this.setModulator(A,s,c.modLfoToFilterFc,o*2400,n),h.coolInfo(`Channel ${this.channel} ${a} LFO2 filter depth control`,o*2400,"cents");break;case 10:this.setModulator(A,s,c.modLfoAmplitudeDepth,o*1e3,n),h.coolInfo(`Channel ${this.channel} ${a} LFO2 amplitude depth control`,o*100,"%");break}}setModulator(t,e,A,s,a=!1,n=!1){let r=this.getModulatorID(t,A,a,n);s===0&&this.deleteModulator(r);let i=this.modulatorList.find(o=>o.id===r);if(i)i.mod.transformAmount=s;else{let o=DA.fromData(new at(t,le.linear,e,a),new at,A,s,0);this.modulatorList.push({mod:o,id:r})}}getModulatorID(t,e,A,s){return`${t}-${e}-${A}-${s}`}deleteModulator(t){this.modulatorList=this.modulatorList.filter(e=>e.id!==t)}},mr=1e3/200;function pr(t,e,A){let s=t.modulators[A];if(s.transformAmount===0)return t.modulatorValues[A]=0,0;let a=s.primarySource.getValue(this,e,t),n=s.secondarySource.getValue(this,e,t),r=s.transformAmount;s.isEffectModulator&&r<=1e3&&(r*=mr,r=Math.min(r,1e3));let i=a*n*r;return s.transformType===2&&(i=Math.abs(i)),s.isDefaultResonantModulator&&(t.resonanceOffset=Math.max(0,i/2)),s.isModWheelModulator&&(i*=this._midiParameters.modulationDepth/50),t.modulatorValues[A]=i,i}function yr(t,e=-1,A=0){let s=t.modulators,a=t.generators;if(this.generators.offsetsEnabled){let o=this.generators.offsets;a=new Int16Array(a);for(let I=0;I<a.length;I++)a[I]+=o[I]}let n=t.modulatedGenerators,r=this.perNotePitch?this.pitchWheels[t.midiNote]:this._midiParameters.pitchWheel;if(e===-1){n.set(a);for(let o=0;o<s.length;o++){let I=s[o];n[I.destination]=Math.min(32767,Math.max(-32768,n[I.destination]+this.computeModulator(t,r,o)))}for(let o=0;o<n.length;o++){let I=We[o];I&&(n[o]=Math.min(I.max,Math.max(I.min,n[o])))}return}let i=!!e;for(let o=0;o<s.length;o++){let I=s[o];if(I.primarySource.isCC===i&&I.primarySource.index===A||I.secondarySource.isCC===i&&I.secondarySource.index===A){let l=I.destination,B=a[l];this.computeModulator(t,r,o);for(let g=0;g<s.length;g++)s[g].destination===l&&(B+=t.modulatorValues[g]);let C=We[l];n[l]=Math.max(C.min,Math.min(B,C.max))}}}var bn=class Rn{pitch=0;gain=1;exclusiveClass=0;pan=64;reverbGain=0;chorusGain=1;delayGain=1;rxNoteOn=!0;rxNoteOff=!1;static copyFrom(e){let A=new Rn;return A.pitch=e.pitch,A.chorusGain=e.chorusGain,A.reverbGain=e.reverbGain,A.exclusiveClass=e.exclusiveClass,A.gain=e.gain,A.pan=e.pan,A.rxNoteOff=e.rxNoteOff,A.rxNoteOn=e.rxNoteOn,A}};function Sr(){return{patch:this.preset?{...this.patch,name:this.preset.name,isDrum:this.preset.isDrum}:void 0,lockedSystem:this.lockedSystem,midiControllers:this._midiControllers.slice(),lockedControllers:[...this.lockedControllers],pitchWheels:this.pitchWheels.slice(),generators:{...this.generators,offsets:this.generators.offsets.slice(),overrides:this.generators.overrides.slice()},midiParameters:{...this._midiParameters},lockedMIDIParameters:{...this.lockedMIDIParameters},systemParameters:{...this._systemParameters},octaveTuning:this.octaveTuning.slice(),perNotePitch:this.perNotePitch,drumParams:this.drumParams.map(t=>({...t})),drumChannel:this._drumChannel,channel:this.channel}}function kr(t){this.setDrums(t.drumChannel),this._midiControllers.set(t.midiControllers);for(let e=0;e<128;e++)this.lockController(e,t.lockedControllers[e]);this.pitchWheels.set(t.pitchWheels),this.octaveTuning.set(t.octaveTuning),this.perNotePitch=t.perNotePitch,this.generators.offsets.set(t.generators.offsets),this.generators.overrides.set(t.generators.overrides),this.generators.offsetsEnabled=t.generators.offsetsEnabled,this.generators.overridesEnabled=t.generators.overridesEnabled;for(let e=0;e<128;e++)this.drumParams[e]=bn.copyFrom(t.drumParams[e]);this.setSystemParameter("presetLock",!1),t.patch&&this.setPatch(t.patch),this.lockedSystem=t.lockedSystem;for(let[e,A]of Object.entries(t.midiParameters))this.setMIDIParameter(e,A);for(let[e,A]of Object.entries(t.lockedMIDIParameters))this.lockMIDIParameter(e,A);for(let[e,A]of Object.entries(t.systemParameters))this.setSystemParameter(e,A)}var xs={pitchWheel:8192,pitchWheelRange:2,pressure:0,modulationDepth:50,rxChannel:0,polyMode:!0,keyShift:0,fineTune:0,randomPan:!1,assignMode:2,efxAssign:!1,cc1:16,cc2:17,drumMap:0,velocitySenseDepth:64,velocitySenseOffset:64};function Dr(t,e){if(!this.lockedMIDIParameters[t]){switch(this._midiParameters[t]=e,t){case"pitchWheel":this.computeModulatorsAll(0,Ie.pitchWheel);break;case"pressure":this.computeModulatorsAll(0,Ie.channelPressure);break}this.updateInternalParams(),this.synthCore.callEvent("channelParamChange",{channel:this.channel,parameter:t,value:e})}}function wr(t,e){this.lockedMIDIParameters[t]=e}var Mr={presetLock:!1,isMuted:!1,gain:1,pan:0,keyShift:0,fineTune:0,interpolationType:null,nrpnParamLock:null,monophonicRetrigger:null};function br(t,e){if(this._systemParameters[t]===e)return;let A=this._systemParameters[t];switch(this._systemParameters[t]=e,this.updateInternalParams(),t){default:break;case"presetLock":e&&(this.lockedSystem=this.synthCore.midiParameters.system);break;case"isMuted":e&&this.stopAllNotes(!0);break;case"keyShift":!this._drumChannel&&A!==e&&this.stopAllNotes(!0)}}var Rr=class{pitchWheels=new Int16Array(128).fill(8192);drumParams=[];dynamicModulators;sf2NRPNGeneratorLSB=0;patch={bankMSB:0,bankLSB:0,program:0,isGMGSDrum:!1};preset;lockedSystem="gs";channel;synthCore;setSystemParameter=br.bind(this);lockMIDIParameter=wr.bind(this);noteOn=Er.bind(this);noteOff=dr.bind(this);programChange=fr.bind(this);controllerChange=or.bind(this);reset=pa.bind(this);renderVoice=ir.bind(this);setMIDIParameter=Dr.bind(this);lockedControllers=new Array(128).fill(!1);_midiControllers=new Int16Array(128);octaveTuning=new Int8Array(128);resetRP15=ya.bind(this);dataEntry=hr.bind(this);lockedMIDIParameters=Object.fromEntries(Object.keys(xs).map(t=>[t,!1]));_midiParameters={...xs};_systemParameters={...Mr};noteOnID=new Array(128).fill(0);noteOffID=new Array(128).fill(0);lastParameterIsRegistered=!0;perNotePitch=!1;currentPan=0;currentTuning=0;currentKeyShift=0;currentGain=0;lastPortamentoNote=-1;portamentoForce=!1;lastMonoNote=-1;lastMonoVelocity=0;playingNotes=new Array(128).fill(!1);generators={offsets:new Int16Array(Dt),offsetsEnabled:!1,overrides:new Int16Array(Dt),overridesEnabled:!1};computeModulator=pr.bind(this);computeModulators=yr.bind(this);constructor(t,e,A){this.synthCore=t,this.preset=e,this.channel=A,this._midiParameters.rxChannel=A,this.dynamicModulators=new ur(A),this.resetGeneratorOverrides(),this.resetGeneratorOffsets();for(let s=0;s<128;s++)this.drumParams.push(new bn);this.resetDrumParams()}_voiceCount=0;get voiceCount(){return this._voiceCount}set voiceCount(t){this._voiceCount=t}_drumChannel=!1;get drumChannel(){return this._drumChannel}get midiControllers(){return this._midiControllers}get systemParameters(){return this._systemParameters}get midiParameters(){return this._midiParameters}get channelSystem(){return this._systemParameters.presetLock?this.lockedSystem:this.synthCore.midiParameters.system}lockController(t,e){this.lockedControllers[t]=e}setDrums(t){if(De.isSystemXG(this.channelSystem))if(t)this.setBankMSB(De.getDrumBank(this.channelSystem)),this.setBankLSB(0);else{if(this.channel%16===9)throw new Error(`Cannot disable drums on channel ${this.channel} for XG.`);this.setBankMSB(0),this.setBankLSB(0)}else this.setGSDrums(t);this.setDrumFlag(t),this.programChange(this.patch.program)}stopAllNotes(t=!1){if(this.noteOnID.fill(0),this.noteOffID.fill(0),this.playingNotes.fill(!1),t){let e=0;if(this._voiceCount>0){for(let A of this.synthCore.voices)if(A.channel===this.channel&&A.isActive&&(A.isActive=!1,++e>=this._voiceCount))break}this.clearVoiceCount()}else{let e=0;if(this._voiceCount>0){for(let A of this.synthCore.voices)if(A.channel===this.channel&&A.isActive&&(A.releaseVoice(this.synthCore.currentTime),++e>=this._voiceCount))break}}this.synthCore.callEvent("stopAll",{channel:this.channel,force:t})}clearVoiceCount(){this._voiceCount=0}setOctaveTuning(t){if(t.length!==12)throw new Error("Tuning is not the length of 12.");for(let e=0;e<128;e++)this.octaveTuning[e]=t[e%12]}pitchWheel(t,e=-1){e===-1?(this.perNotePitch=!1,this.setMIDIParameter("pitchWheel",t)):(this.perNotePitch||this.pitchWheels.fill(this._midiParameters.pitchWheel),this.perNotePitch=!0,this.pitchWheels[e]=t,this.computeModulatorsAll(0,Ie.pitchWheel))}polyPressure(t,e){let A=0;if(this._voiceCount>0){for(let s of this.synthCore.voices)if(s.isActive&&s.channel===this.channel&&s.midiNote===t&&(s.pressure=e,this.computeModulators(s,0,Ie.polyPressure),++A>=this._voiceCount))break}this.synthCore.callEvent("polyPressure",{channel:this.channel,midiNote:t,pressure:e})}updateInternalParams(){let t=this.synthCore.systemParameters,e=this._systemParameters,A=this.synthCore.midiParameters,s=this._midiParameters,a=this._drumChannel?e.keyShift:t.keyShift+A.keyShift+e.keyShift+s.keyShift;this.currentKeyShift=Math.trunc(a),this.currentTuning=this._drumChannel?e.fineTune:t.fineTune+A.fineTune+e.fineTune+s.fineTune;let n=t.pan+A.pan+e.pan;this.currentPan=n*500,this.currentGain=zn*t.gain*A.gain*e.gain}setPatch(t){this.setBankMSB(t.bankMSB),this.setBankLSB(t.bankLSB),this.setGSDrums(t.isGMGSDrum),this.programChange(t.program)}setGSDrums(t){t!==this.patch.isGMGSDrum&&(this.setBankLSB(0),this.setBankMSB(0),this.patch.isGMGSDrum=t)}killNote(t,e=-12e3){let A=0;if(this.noteOffID[t]=0,this.noteOnID[t]=0,this._voiceCount>0){for(let s of this.synthCore.voices)if(s.channel===this.channel&&s.isActive&&s.midiNote===t&&(s.overrideReleaseVolEnv=e,s.isInRelease=!1,s.releaseVoice(this.synthCore.currentTime),++A>=this._voiceCount))break}}applySnapshot(t){kr.call(this,t)}getSnapshot(){return Sr.call(this)}setLastNote(t){this.lastPortamentoNote=t}destroy(){this.preset=void 0,this.lockedControllers=void 0,this._systemParameters=void 0,this._midiControllers=void 0,this._midiParameters=void 0}resetGeneratorOverrides(){this.generators.overrides.fill(Vn),this.generators.overridesEnabled=!1}setGeneratorOverride(t,e,A=!1){if(this.generators.overrides[t]=e,this.generators.overridesEnabled=!0,A){let s=0;if(this._voiceCount>0){for(let a of this.synthCore.voices)if(a.channel===this.channel&&a.isActive&&(a.generators[t]=e,this.computeModulators(a),++s>=this._voiceCount))break}}}resetGeneratorOffsets(){this.generators.offsets.fill(0),this.generators.offsetsEnabled=!1}setGeneratorOffset(t,e){this.generators.offsets[t]=e*We[t].nrpn,this.generators.offsetsEnabled=!0;let A=0;if(this._voiceCount>0){for(let s of this.synthCore.voices)if(s.channel===this.channel&&s.isActive&&(this.computeModulators(s),++A>=this._voiceCount))break}}resetDrumParams(){if(!(this.synthCore.systemParameters.drumLock||!this._drumChannel))for(let t=0;t<128;t++){let e=this.drumParams[t];e.pitch=0,e.gain=1,e.exclusiveClass=0,e.pan=64,e.reverbGain=mA[t]/127,e.chorusGain=this.channelSystem==="xg"?mA[t]/127:0,e.delayGain=0,e.rxNoteOn=!0,e.rxNoteOff=!1}}computeModulatorsAll(t,e){let A=0;if(this._voiceCount>0){for(let s of this.synthCore.voices)if(s.channel===this.channel&&s.isActive&&(this.computeModulators(s,t,e),++A>=this._voiceCount))break}}setBankMSB(t){this._systemParameters.presetLock||(this.patch.bankMSB=t)}setBankLSB(t){this._systemParameters.presetLock||(this.patch.bankLSB=t)}setDrumFlag(t){this._systemParameters.presetLock||!this.preset||this._drumChannel===t||(this._drumChannel=t,this.updateInternalParams())}},Fr=class extends zt{constructor(t,e){super(t.parentSoundBank,t.globalZone),this.bankMSB=De.addBankOffset(t.bankMSB,e,!0),this.name=t.name,this.bankLSB=t.bankLSB,this.isGMGSDrum=t.isGMGSDrum,this.program=t.program,this.genre=t.genre,this.morphology=t.morphology,this.library=t.library,this.zones=t.zones}},vr=class{soundBankList=[];presetListChangeCallback;selectablePresetList=[];constructor(t){this.presetListChangeCallback=t}_presetList=[];get presetList(){return[...this._presetList]}get priorityOrder(){return this.soundBankList.map(t=>t.id)}set priorityOrder(t){this.soundBankList.sort((e,A)=>t.indexOf(e.id)-t.indexOf(A.id)),this.generatePresetList()}deleteSoundBank(t){if(this.soundBankList.length===0){h.warn("1 soundbank left. Aborting!");return}let e=this.soundBankList.findIndex(A=>A.id===t);if(e===-1)throw new Error(`No sound bank with id "${t}"`);this.soundBankList.splice(e,1),this.generatePresetList()}addSoundBank(t,e,A=0){let s=this.soundBankList.find(a=>a.id===e);s===void 0?this.soundBankList.push({id:e,soundBank:t,bankOffset:A}):(s.soundBank=t,s.bankOffset=A),this.generatePresetList()}getPreset(t,e){if(!(this.soundBankList.length===0||this.selectablePresetList.length===0))return je.selectPatch(this.selectablePresetList,t,e)}destroy(){for(let t of this.soundBankList)t.soundBank.destroySoundBank();this.soundBankList=[]}generatePresetList(){let t=new Array,e=new Set;for(let A of this.soundBankList){let s=A.soundBank,a=A.bankOffset;for(let n of s.presets){let r=new Fr(n,a);e.has(r.toMIDIString())||(e.add(r.toMIDIString()),t.push(r))}}t.sort(je.compare.bind(je)),this.selectablePresetList=t,this._presetList=t.map(A=>({bankMSB:A.bankMSB,bankLSB:A.bankLSB,program:A.program,isGMGSDrum:A.isGMGSDrum,name:A.name,isDrum:A.isDrum})),this.presetListChangeCallback()}};function Hs(t,e,A){let s=t,a=e<<7|A;return t===127&&e===127&&A===127?-1:s+a*61e-6}function Gr(t,e=0){switch(t[2]){case 4:switch(t[3]){default:h.gmFail("Device Control",t);break;case 1:{let A=t[5]<<7|t[4],s=Math.pow(A/16383,2);this.setMIDIParameter("gain",s),h.gmInfo("Master Volume",A);break}case 2:{let A=((t[5]<<7|t[4])-8192)/8192;this.setMIDIParameter("pan",A),h.gmInfo("Master Balance",A);break}case 3:{let A=((t[5]<<7|t[4])-8192)/81.92;this.setMIDIParameter("fineTune",A),h.gmInfo("Master Fine Tuning",A,"cents");break}case 4:{let A=t[5]-64;this.setMIDIParameter("keyShift",A),h.gmInfo("Master Coarse Tuning",A,"keys");break}case 5:if(t[4]!==1||t[5]!==1||t[6]!==1||t[7]!==1){h.gmFail("Global Parameter Control",t);break}switch(t[8]){default:h.gmFail("Global Parameter Control",t);break;case 1:{let A=t[10];switch(t[9]){default:h.gmFail("Reverb Parameter Control",t);break;case 0:{let s=A===8?5:A;this.setReverbMacro(s),h.gmInfo("Reverb Type",s);break}case 1:this.reverbProcessor.time=A,h.gmInfo("Reverb Time",A)}break}case 2:{let A=t[10];switch(t[9]){default:h.gmFail("Chorus Parameter Control",t);break;case 0:this.setChorusMacro(A),h.gmInfo("Chorus Type",A);break;case 1:this.chorusProcessor.rate=A,h.gmInfo("Chorus Mod Rate",A);break;case 2:this.chorusProcessor.depth=A,h.gmInfo("Chorus Mod Depth",A);break;case 3:this.chorusProcessor.feedback=A,h.gmInfo("Chorus Mod Feedback",A);break;case 4:this.chorusProcessor.sendLevelToReverb=A,h.gmInfo("Chorus Send to Reverb",A);break}}}}break;case 9:switch(t[3]){default:h.gmFail("System Exclusive",t);break;case 1:h.coolInfo("MIDI System","General MIDI 1"),this.reset("gm");break;case 2:h.coolInfo("MIDI System","Roland GS"),this.reset("gs");break;case 3:h.coolInfo("MIDI System","General MIDI 2"),this.reset("gm2");break}break;case 8:{let A=4;switch(t[3]){case 1:{let s=t[A++],a=$e(t,16,A);if(A+=16,t.length<384){h.warn(`The Bulk Tuning Dump is too short! (${t.length} bytes, at least 384 are expected)`);return}for(let n=0;n<128;n++)this.tunings[s*128+n]=Hs(t[A++],t[A++],t[A++]);h.gmInfo("Bulk Tuning Dump",`${a}, program ${s}`);break}case 2:case 7:{t[3]===7&&A++;let s=t[A++],a=t[A++];for(let n=0;n<a;n++){let r=t[A++];this.tunings[s*128+r]=Hs(t[A++],t[A++],t[A++])}h.gmInfo("Single Note Tuning",`program: ${s}. Keys affected: ${a}`);break}case 9:case 8:{let s=new Int8Array(12);if(t[3]===8)for(let a=0;a<12;a++)s[a]=t[7+a]-64;else for(let a=0;a<24;a+=2){let n=(t[7+a]<<7|t[8+a])-8192;s[a/2]=Math.floor(n/81.92)}(t[4]&1)===1&&this.midiChannels[14+e].setOctaveTuning(s),(t[4]>>1&1)===1&&this.midiChannels[15+e].setOctaveTuning(s);for(let a=0;a<7;a++)(t[5]>>a&1)===1&&this.midiChannels[7+a+e].setOctaveTuning(s);for(let a=0;a<7;a++)(t[6]>>a&1)===1&&this.midiChannels[a+e].setOctaveTuning(s);h.gmInfo("Octave Scale Tuning",s.join(" "));break}default:h.gmFail("MIDI Tuning Standard",t);break}break}default:h.gmFail("Universal System Exclusive",t)}}function Lr(t,e=0){if(t[3]===18)switch(t[2]){case 66:{let A=t[4],s=t[5],a=t[6],n=Math.min(t[7],127);if(A===0&&s===0&&a===127&&n===0){h.coolInfo("MIDI System","Roland GS"),this.reset("gs");return}if(A===64){if(s===0){switch(a){case 0:{let r=((n<<12|t[8]<<8|t[9]<<4|t[10])-1024)/10;this.setMIDIParameter("fineTune",r),h.gsInfo("Master Tune",r,"cents");break}case 4:h.gsInfo("Master Volume",n),this.setMIDIParameter("gain",n/127);break;case 5:{let r=n-64;h.gsInfo("Master Key-Shift",r,"keys"),this.setMIDIParameter("keyShift",r);break}case 6:{let r=(n-64)/63;h.gsInfo("Master Pan",r),this.setMIDIParameter("pan",r);break}case 127:n===0?(h.coolInfo("MIDI System","Roland GS"),this.reset("gs")):n===127&&(h.coolInfo("MIDI System","General MIDI 1"),this.reset("gm"));break;default:h.gsFail("System Parameter",t);break}return}if(s===1){let r=a>=48&&a<=55,i=a>=56&&a<=64,o=a>=80&&a<=90;if(r&&this.systemParameters.reverbLock||i&&this.systemParameters.chorusLock||o&&this.systemParameters.delayLock)return;switch(this.delayActive||=a===64||o,a){default:h.gsFail("Patch Common Parameter",[a]);break;case 0:{let I=$e(t,16,7);h.gsInfo("Patch name",I),this.callEvent("displayMessage",[...t]);break}case 48:this.setReverbMacro(n),h.gsInfo("Reverb Macro",n);break;case 49:this.reverbProcessor.character=n,h.gsInfo("Reverb Character",n),this.callEvent("effectChange",{effect:"reverb",parameter:"character",value:n});break;case 50:this.reverbProcessor.preLowpass=n,h.gsInfo("Reverb Pre-LPF",n),this.callEvent("effectChange",{effect:"reverb",parameter:"preLowpass",value:n});break;case 51:this.reverbProcessor.level=n,h.gsInfo("Reverb Level",n),this.callEvent("effectChange",{effect:"reverb",parameter:"level",value:n});break;case 52:this.reverbProcessor.time=n,h.gsInfo("Reverb Time",n),this.callEvent("effectChange",{effect:"reverb",parameter:"time",value:n});break;case 53:this.reverbProcessor.delayFeedback=n,h.gsInfo("Reverb Delay Feedback",n),this.callEvent("effectChange",{effect:"reverb",parameter:"delayFeedback",value:n});break;case 54:break;case 55:this.reverbProcessor.preDelayTime=n,h.gsInfo("Reverb Predelay Time",n),this.callEvent("effectChange",{effect:"reverb",parameter:"preDelayTime",value:n});break;case 56:this.setChorusMacro(n),h.gsInfo("Chorus Macro",n);break;case 57:this.chorusProcessor.preLowpass=n,h.gsInfo("Chorus Pre-LPF",n),this.callEvent("effectChange",{effect:"chorus",parameter:"preLowpass",value:n});break;case 58:this.chorusProcessor.level=n,h.gsInfo("Chorus Level",n),this.callEvent("effectChange",{effect:"chorus",parameter:"level",value:n});break;case 59:this.chorusProcessor.feedback=n,h.gsInfo("Chorus Feedback",n),this.callEvent("effectChange",{effect:"chorus",parameter:"feedback",value:n});break;case 60:this.chorusProcessor.delay=n,h.gsInfo("Chorus Delay",n),this.callEvent("effectChange",{effect:"chorus",parameter:"delay",value:n});break;case 61:this.chorusProcessor.rate=n,h.gsInfo("Chorus Rate",n),this.callEvent("effectChange",{effect:"chorus",parameter:"rate",value:n});break;case 62:this.chorusProcessor.depth=n,h.gsInfo("Chorus Depth",n),this.callEvent("effectChange",{effect:"chorus",parameter:"depth",value:n});break;case 63:this.chorusProcessor.sendLevelToReverb=n,h.gsInfo("Chorus Send Level To Reverb",n),this.callEvent("effectChange",{effect:"chorus",parameter:"sendLevelToReverb",value:n});break;case 64:this.chorusProcessor.sendLevelToDelay=n,h.gsInfo("Chorus Send Level To Delay",n),this.callEvent("effectChange",{effect:"chorus",parameter:"sendLevelToDelay",value:n});break;case 80:this.setDelayMacro(n),h.gsInfo("Delay Macro",n);break;case 81:this.delayProcessor.preLowpass=n,h.gsInfo("Delay Pre-LPF",n),this.callEvent("effectChange",{effect:"delay",parameter:"preLowpass",value:n});break;case 82:this.delayProcessor.timeCenter=n,h.gsInfo("Delay Time Center",n),this.callEvent("effectChange",{effect:"delay",parameter:"timeCenter",value:n});break;case 83:this.delayProcessor.timeRatioLeft=n,h.gsInfo("Delay Time Ratio Left",n),this.callEvent("effectChange",{effect:"delay",parameter:"timeRatioLeft",value:n});break;case 84:this.delayProcessor.timeRatioRight=n,h.gsInfo("Delay Time Ratio Right",n),this.callEvent("effectChange",{effect:"delay",parameter:"timeRatioRight",value:n});break;case 85:this.delayProcessor.levelCenter=n,h.gsInfo("Delay Level Center",n),this.callEvent("effectChange",{effect:"delay",parameter:"levelCenter",value:n});break;case 86:this.delayProcessor.levelLeft=n,h.gsInfo("Delay Level Left",n),this.callEvent("effectChange",{effect:"delay",parameter:"levelLeft",value:n});break;case 87:this.delayProcessor.levelRight=n,h.gsInfo("Delay Level Right",n),this.callEvent("effectChange",{effect:"delay",parameter:"levelRight",value:n});break;case 88:this.delayProcessor.level=n,h.gsInfo("Delay Level",n),this.callEvent("effectChange",{effect:"delay",parameter:"level",value:n});break;case 89:this.delayProcessor.feedback=n,h.gsInfo("Delay Feedback",n),this.callEvent("effectChange",{effect:"delay",parameter:"feedback",value:n});break;case 90:this.delayProcessor.sendLevelToReverb=n,h.gsInfo("Delay Send Level To Reverb",n),this.callEvent("effectChange",{effect:"delay",parameter:"sendLevelToReverb",value:n});break}break}if(s===3){if(this.systemParameters.insertionEffectLock)return;if(a>=3&&a<=25&&(this.insertionParams[a-3]=n),a>=3&&a<=22){this.insertionProcessor.setParameter(a,n),h.gsInfo(`EFX Parameter ${a-2}`,n),this.callEvent("effectChange",{effect:"insertion",parameter:a,value:n});return}switch(a){default:h.gsFail("Insertion Effect",[a]);return;case 0:{let r=n<<8|t[8],i=this.insertionEffects.get(r);i?(h.gsInfo("EFX Type",r.toString(16)),this.insertionProcessor=i):(this.insertionProcessor=this.insertionFallback,h.gsFail("EFX Processor",[r],"Using Thru.")),this.resetInsertionParams(),this.insertionProcessor.reset(),this.callEvent("effectChange",{effect:"insertion",parameter:0,value:r});return}case 23:this.insertionProcessor.sendLevelToReverb=n/127*lA,h.gsInfo("EFX Send Level to Reverb",n),this.callEvent("effectChange",{effect:"insertion",parameter:a,value:n});return;case 24:this.insertionProcessor.sendLevelToChorus=n/127*lA,h.gsInfo("EFX Send Level to Chorus",n),this.callEvent("effectChange",{effect:"insertion",parameter:a,value:n});return;case 25:this.insertionProcessor.sendLevelToDelay=n/127*lA,this.delayActive=!0,h.gsInfo("EFX Send Level to Delay",n),this.callEvent("effectChange",{effect:"insertion",parameter:a,value:n});return}}if(s>>4===1){let r=ae.syxToChannel(s&15)+e,i=this.midiChannels[r];switch(a){default:h.gsFail(`Patch Part Parameter for ${r}`,[a]);return;case 0:i.controllerChange(f.bankSelect,n),i.programChange(t[8]);break;case 2:{let o=n===16?-1:n+e;i.setMIDIParameter("rxChannel",o),this.customChannelNumbers||=o!==i.channel,h.gsInfo(`Rx. Channel on ${r}`,o);break}case 19:i.setMIDIParameter("polyMode",n===1),h.gsInfo(`Mono/poly on ${r}`,i.midiParameters.polyMode?"POLY":"MONO");break;case 20:i.setMIDIParameter("assignMode",n),h.gsInfo(`Assign mode on ${r}`,n);break;case 21:{i.setMIDIParameter("drumMap",n);let o=n>0;i.setGSDrums(o),h.gsInfo(`Drums on ${r}`,o.toString());return}case 22:{let o=n-64;i.setMIDIParameter("keyShift",o),h.gsInfo(`Key Shift for ${r}`,o);return}case 25:i.controllerChange(f.mainVolume,n);return;case 26:i.setMIDIParameter("velocitySenseDepth",n),h.gsInfo(`Velocity Sense Depth for ${r}`,n);return;case 27:i.setMIDIParameter("velocitySenseOffset",n),h.gsInfo(`Velocity Sense Offset for ${r}`,n);return;case 28:{let o=n,I=o===0;i.setMIDIParameter("randomPan",I),I?h.gsInfo(`Random pan on ${r}`,"ON"):i.controllerChange(f.pan,o);break}case 31:i.setMIDIParameter("cc1",n),h.gsInfo(`CC1 Controller Number for ${r}`,n);break;case 32:i.setMIDIParameter("cc2",n),h.gsInfo(`CC2 Controller Number for ${r}`,n);break;case 33:i.controllerChange(f.chorusDepth,n);break;case 34:i.controllerChange(f.reverbDepth,n);break;case 42:{let o=((n<<7|t[8])-8192)/81.92;i.setMIDIParameter("fineTune",o),h.gsInfo(`Fine tuning for ${r}`,Math.round(o),"cents");break}case 44:i.controllerChange(f.variationDepth,n);break;case 48:i.controllerChange(f.vibratoRate,n);break;case 49:i.controllerChange(f.vibratoDepth,n);break;case 50:i.controllerChange(f.brightness,n);break;case 51:i.controllerChange(f.filterResonance,n);break;case 52:i.controllerChange(f.attackTime,n);break;case 53:i.controllerChange(f.decayTime,n);break;case 54:i.controllerChange(f.releaseTime,n);break;case 55:i.controllerChange(f.vibratoDelay,n);break;case 64:{let o=t.length-9,I=new Int8Array(12);for(let l=0;l<o;l++)I[l]=t[l+7]-64;i.setOctaveTuning(I),h.gsInfo(`Octave Scale Tuning for ${r}`,I.join(", "));break}}return}if(s>>4===2){let r=ae.syxToChannel(s&15)+e,i=this.midiChannels[r];switch(a&240){default:h.gsFail(`Patch Parameter Controller for ${r}`,[a&240]);break;case 0:if((a&15)===4){let o=n/127*600;i.setMIDIParameter("modulationDepth",o),h.gsInfo(`Modulation depth for ${r}`,Math.round(o),"cents");break}i.dynamicModulators.setupReceiver(a,n,f.modulationWheel,!0,"mod wheel");break;case 16:if((a&15)===0){let o=n-64;i.setMIDIParameter("pitchWheelRange",o),h.gsInfo(`Pitch Wheel Range for ${r}`,o,"semitones");break}i.dynamicModulators.setupReceiver(a,n,Ie.pitchWheel,!1,"pitch wheel",!0);break;case 32:i.dynamicModulators.setupReceiver(a,n,Ie.channelPressure,!1,"channel pressure");break;case 48:i.dynamicModulators.setupReceiver(a,n,Ie.polyPressure,!1,"poly pressure");break;case 64:i.dynamicModulators.setupReceiver(a,n,i.midiParameters.cc1,!0,"CC1");break;case 80:i.dynamicModulators.setupReceiver(a,n,i.midiParameters.cc2,!0,"CC2")}return}if(s>>4===4){let r=ae.syxToChannel(s&15)+e,i=this.midiChannels[r];switch(a){default:h.gsFail("Patch Part Parameter",[a]);break;case 0:case 1:i.controllerChange(f.bankSelectLSB,n);break;case 34:{let o=n===1;i.setMIDIParameter("efxAssign",o),this.insertionActive||=o,h.gsInfo(`EFX assign for ${r}`,o?"EFX":"BYPASS")}}return}h.gsFail("Patch Parameter",t);return}if(A===65){if(this.systemParameters.drumLock)return;let r=(s>>4)+1,i=a,o=s&15;switch(o){default:h.gsFail("Drum Setup",[o]);return;case 0:{let I=$e(t,12,7);h.gsInfo(`Patch Name for MAP${r}`,I);break}case 1:{let I=n-60;for(let l of this.midiChannels)l.midiParameters.drumMap===r&&(l.drumParams[i].pitch=I*(l.patch.bankLSB===1?100:50));h.gsInfo(`Drum Pitch for MAP${r}, key ${i}`,I);break}case 2:for(let I of this.midiChannels)I.midiParameters.drumMap===r&&(I.drumParams[i].gain=n/120);h.gsInfo(`Drum Level for MAP${r}, key ${i}`,n);break;case 3:for(let I of this.midiChannels)I.midiParameters.drumMap===r&&(I.drumParams[i].exclusiveClass=n);h.gsInfo(`Drum Assign Group for MAP${r}, key ${i}`,n);break;case 4:for(let I of this.midiChannels)I.midiParameters.drumMap===r&&(I.drumParams[i].pan=n);h.gsInfo(`Drum Pan for MAP${r}, key ${i}`,n);break;case 5:for(let I of this.midiChannels)I.midiParameters.drumMap===r&&(I.drumParams[i].reverbGain=n/127);h.gsInfo(`Drum Reverb for MAP${r}, key ${i}`,n);break;case 6:for(let I of this.midiChannels)I.midiParameters.drumMap===r&&(I.drumParams[i].chorusGain=n/127);h.gsInfo(`Drum Chorus for MAP${r}, key ${i}`,n);break;case 7:for(let I of this.midiChannels)I.midiParameters.drumMap===r&&(I.drumParams[i].rxNoteOff=n===1);h.gsInfo(`Drum Note Off for MAP${r}, key ${i}`,n===1?"ON":"OFF");break;case 8:for(let I of this.midiChannels)I.midiParameters.drumMap===r&&(I.drumParams[i].rxNoteOn=n===1);h.gsInfo(`Drum Note On for MAP${r}, key ${i}`,n===1?"ON":"OFF");break;case 9:for(let I of this.midiChannels)I.midiParameters.drumMap===r&&(I.drumParams[i].delayGain=n/127);h.gsInfo(`Drum Delay for MAP${r}, key ${i}`,n);break}return}h.gsFail("System Exclusive",t);return}case 69:t[4]===16&&(t[5]===0?this.callEvent("displayMessage",[...t]):t[5]===1?this.callEvent("displayMessage",[...t]):h.gsFail("Display Data",t));return;case 22:if(t[4]===16){this.setMIDIParameter("gain",t[7]/100),h.coolInfo("Roland Master Volume Control",t[7]);return}else h.unsupported("Roland",t)}else{h.unsupported("Roland",t);return}}function Pr(t,e=0){if(t[2]===76){let A=t[3],s=t[4],a=t[5],n=t[6];if(A===0&&s===0){switch(a){case 0:{let r=(((t[6]&15)<<12|(t[7]&15)<<8|(t[8]&15)<<4|t[9]&15)-1024)/10;this.setMIDIParameter("fineTune",r),h.xgInfo("Master Tune",r,"cents")}break;case 4:this.setMIDIParameter("gain",n/127),h.xgInfo("Master Volume",n);break;case 5:{let r=127-n;this.setMIDIParameter("gain",r/127),h.xgInfo("Master Attenuation",n);break}case 6:{let r=n-64;this.setMIDIParameter("keyShift",r),h.xgInfo("Master Transpose",n);break}case 127:case 126:h.coolInfo("MIDI System","Yamaha XG"),this.reset("xg");break}return}if(A===2&&s===1){let r,i=a;i<=21?r="Reverb":i<=53?r="Chorus":r="Variation",h.xgFail(`${r} parameter`,[i]);return}if(A===8){let r=s+e;if(r>=this.midiChannels.length){h.xgFail("Part Setup",t,`Invalid part number: ${r}`);return}let i=this.midiChannels[r];switch(a){default:h.xgFail("Part Setup",[t[5]]);break;case 1:i.controllerChange(f.bankSelect,n);break;case 2:i.controllerChange(f.bankSelectLSB,n);break;case 3:i.programChange(n);break;case 4:{let o=n+e;i.setMIDIParameter("rxChannel",o),this.customChannelNumbers||=o!==i.channel,h.xgInfo(`Rev. Channel on ${r}`,o);break}case 5:{let o=n===1;i.setMIDIParameter("polyMode",o),h.xgInfo(`Mono/poly on ${r}`,o?"POLY":"MONO");break}case 7:{let o=n!==0;i.setDrums(o),h.xgInfo(`Part Mode on ${r}`,o?"DRUM":"MELODIC");break}case 8:{let o=n-64;i.setMIDIParameter("keyShift",o),h.xgInfo(`Key Shift on ${r}`,o);break}case 11:i.controllerChange(f.mainVolume,n);break;case 12:i.setMIDIParameter("velocitySenseDepth",n),h.xgInfo(`Velocity Sense Depth on ${r}`,n);return;case 13:i.setMIDIParameter("velocitySenseOffset",n),h.xgInfo(`Velocity Sense Offset on ${r}`,n);return;case 14:{let o=n,I=o===0;i.setMIDIParameter("randomPan",I),I?h.xgInfo(`Random Pan for ${r}`,"ON"):i.controllerChange(f.pan,o);break}case 18:i.controllerChange(f.chorusDepth,n);break;case 19:i.controllerChange(f.reverbDepth,n);break;case 21:i.controllerChange(f.vibratoRate,n);break;case 22:i.controllerChange(f.vibratoDepth,n);break;case 23:i.controllerChange(f.vibratoDelay,n);break;case 24:i.controllerChange(f.brightness,n);break;case 25:i.controllerChange(f.filterResonance,n);break;case 26:i.controllerChange(f.attackTime,n);break;case 27:i.controllerChange(f.decayTime,n);break;case 28:i.controllerChange(f.releaseTime,n);break;case 35:{let o=n-64;i.setMIDIParameter("pitchWheelRange",o),h.xgInfo(`Pitch Wheel Range for ${r}`,o,"semitones")}}return}if(A>>4===3){if(this.systemParameters.drumLock)return;let r=s;switch(a){default:h.xgFail("Drum Setup",[a]);return;case 0:{let i=(n-64)*100;for(let o of this.midiChannels)o.drumChannel&&(o.drumParams[r].pitch=i);h.xgInfo(`Drum Pitch for key ${r}`,i,"semitones");break}case 1:{let i=n-64;for(let o of this.midiChannels)o.drumChannel&&(o.drumParams[r].pitch+=i,h.xgInfo(`Drum Pitch for key ${r}`,o.drumParams[r].pitch,"semitones"));break}case 2:for(let i of this.midiChannels)i.drumChannel&&(i.drumParams[r].gain=n/120);h.xgInfo(`Drum Level for key ${r}`,n);break;case 3:for(let i of this.midiChannels)i.drumChannel&&(i.drumParams[r].exclusiveClass=n);h.xgInfo(`Drum Alternate Group for key ${r}`,n);break;case 4:for(let i of this.midiChannels)i.drumChannel&&(i.drumParams[r].pan=n);h.xgInfo(`Drum Pan for key ${r}`,n);break;case 5:for(let i of this.midiChannels)i.drumChannel&&(i.drumParams[r].reverbGain=n/127);h.xgInfo(`Drum Reverb for key ${r}`,n);break;case 6:for(let i of this.midiChannels)i.drumChannel&&(i.drumParams[r].chorusGain=n/127);h.xgInfo(`Drum Chorus for key ${r}`,n);break;case 9:for(let i of this.midiChannels)i.drumChannel&&(i.drumParams[r].rxNoteOff=n===1);h.xgInfo(`Drum Note Off for key ${r}`,n===1?"ON":"OFF");break;case 10:for(let i of this.midiChannels)i.drumChannel&&(i.drumParams[r].rxNoteOn=n===1);h.xgInfo(`Drum Note On for key ${r}`,n===1?"ON":"OFF");break}return}if(A===6||A===7){this.callEvent("displayMessage",[...t]);return}h.xgFail("System Exclusive",t,"Unknown address")}else h.xgFail("System Exclusive",t)}function Nr(t,e=0){e+=this.portSelectChannelOffset;let A=t[0];if(!(this.systemParameters.deviceID!==-1&&t[1]!==127&&this.systemParameters.deviceID!==t[1]))switch(A){default:h.unsupported("System Exclusive",t,`Unknown manufacturer: ${A}`);break;case 126:case 127:Gr.call(this,t,e);break;case 65:Lr.call(this,t,e);break;case 67:Pr.call(this,t,e);break;case 245:if(t.length<2)return;for(this.portSelectChannelOffset=(t[1]-1)*16;this.midiChannels.length<=this.portSelectChannelOffset;){h.info(`%cPort select, channel offset %c${this.portSelectChannelOffset}%c. Creating a new port!`,d.info,d.value,d.info);for(let s=0;s<16;s++)this.createMIDIChannel(!0)}break}}var Fn=class{sendLevelToReverb=40/127;sendLevelToChorus=0;sendLevelToDelay=0;type=0;reset(){}process(t,e,A,s,a,n,r,i,o){let{sendLevelToReverb:I,sendLevelToChorus:l,sendLevelToDelay:B}=this;for(let C=0;C<o;C++){let g=t[C],E=e[C],S=i+C;A[S]+=g,s[S]+=E;let k=(g+E)*.5;a[C]+=k*I,n[C]+=k*l,r[C]+=k*B}}setParameter(t,e){}},Ct=class{static data=[[0,200,200,0,0,.05,.05,315,250,200,250,100,-180,0],[.1,205,205,.1,5,.1,.1,315,250,200,250,110,-180,1],[.2,210,210,.2,10,.15,.15,315,250,200,250,120,-180,2],[.3,215,215,.3,15,.2,.2,315,250,200,250,130,-180,3],[.4,220,220,.4,20,.25,.25,315,250,200,250,140,-180,4],[.5,225,225,.5,25,.3,.3,315,250,200,250,150,-180,5],[.6,230,230,.6,30,.35,.35,315,250,200,250,160,-168,5],[.7,235,235,.7,35,.4,.4,315,250,200,250,170,-168,5],[.8,240,240,.8,40,.45,.45,400,315,250,315,180,-168,5],[.9,245,245,.9,45,.5,.5,400,315,250,315,190,-168,5],[1,250,250,1,50,.55,.55,400,315,250,315,200,-156,5],[1.1,255,255,1.1,55,.6,.6,400,315,250,315,210,-156,5],[1.2,260,260,1.2,60,.65,.65,400,315,250,315,220,-156,5],[1.3,265,265,1.3,65,.7,.7,400,315,250,315,230,-156,5],[1.4,270,270,1.4,70,.75,.75,400,315,250,315,240,-144,5],[1.5,275,275,1.5,75,.8,.8,400,315,250,315,250,-144,5],[1.6,280,280,1.6,80,.85,.85,500,400,315,400,260,-144,5],[1.7,285,285,1.7,85,.9,.9,500,400,315,400,270,-144,5],[1.8,290,290,1.8,90,.95,.95,500,400,315,400,280,-132,5],[1.9,295,295,1.9,95,1,1,500,400,315,400,290,-132,5],[2,300,300,2,100,1.05,1.05,500,400,315,400,300,-132,5],[2.1,305,305,2.1,105,1.1,1.1,500,400,315,400,320,-132,5],[2.2,310,310,2.2,110,1.15,1.15,500,400,315,400,340,-120,5],[2.3,315,315,2.3,115,1.2,1.2,500,400,315,400,360,-120,5],[2.4,320,320,2.4,120,1.25,1.25,630,500,400,500,380,-120,5],[2.5,325,325,2.5,125,1.3,1.3,630,500,400,500,400,-120,5],[2.6,330,330,2.6,130,1.35,1.35,630,500,400,500,420,-108,5],[2.7,335,335,2.7,135,1.4,1.4,630,500,400,500,440,-108,5],[2.8,340,340,2.8,140,1.45,1.45,630,500,400,500,460,-108,5],[2.9,345,345,2.9,145,1.5,1.5,630,500,400,500,480,-108,5],[3,350,350,3,150,1.55,1.55,630,500,400,500,500,-96,6],[3.1,355,355,3.1,155,1.6,1.6,630,500,400,500,520,-96,6],[3.2,360,360,3.2,160,1.65,1.65,800,630,500,630,540,-96,6],[3.3,365,365,3.3,165,1.7,1.7,800,630,500,630,560,-96,6],[3.4,370,370,3.4,170,1.75,1.75,800,630,500,630,580,-84,6],[3.5,375,375,3.5,175,1.8,1.8,800,630,500,630,600,-84,6],[3.6,380,380,3.6,180,1.85,1.85,800,630,500,630,620,-84,6],[3.7,385,385,3.7,185,1.9,1.9,800,630,500,630,640,-84,6],[3.8,390,390,3.8,190,1.95,1.95,800,630,500,630,660,-72,6],[3.9,395,395,3.9,195,2,2,800,630,500,630,680,-72,6],[4,400,400,4,200,2.05,2.05,1e3,800,630,800,700,-72,6],[4.1,405,405,4.1,205,2.1,2.1,1e3,800,630,800,720,-72,6],[4.2,410,410,4.2,210,2.15,2.15,1e3,800,630,800,740,-60,6],[4.3,415,415,4.3,215,2.2,2.2,1e3,800,630,800,760,-60,6],[4.4,420,420,4.4,220,2.25,2.25,1e3,800,630,800,780,-60,6],[4.5,425,425,4.5,225,2.3,2.3,1e3,800,630,800,800,-60,6],[4.6,430,430,4.6,230,2.35,2.35,1e3,800,630,800,820,-48,6],[4.7,435,435,4.7,235,2.4,2.4,1e3,800,630,800,840,-48,6],[4.8,440,440,4.8,240,2.45,2.45,1250,1e3,800,1e3,860,-48,9],[4.9,445,445,4.9,245,2.5,2.5,1250,1e3,800,1e3,880,-48,9],[5,450,450,5,250,2.55,2.55,1250,1e3,800,1e3,900,-36,9],[5.5,455,455,5.5,255,2.6,2.6,1250,1e3,800,1e3,920,-36,9],[6,460,460,6,260,2.65,2.65,1250,1e3,800,1e3,940,-36,9],[6.5,465,465,6.5,265,2.7,2.7,1250,1e3,800,1e3,960,-36,9],[7,470,470,7,270,2.75,2.75,1250,1e3,800,1e3,980,-24,9],[7.5,475,475,7.5,275,2.8,2.8,1250,1e3,800,1e3,1e3,-24,9],[8,480,480,8,280,2.85,2.85,1600,1250,1e3,1250,1100,-24,9],[8.5,485,485,8.5,285,2.9,2.9,1600,1250,1e3,1250,1200,-24,9],[9,490,490,9,290,2.95,2.95,1600,1250,1e3,1250,1300,-12,9],[9.5,495,495,9.5,295,3,3,1600,1250,1e3,1250,1400,-12,9],[10,500,500,10,300,3.05,3.05,1600,1250,1e3,1250,1500,-12,9],[11,505,505,11,305,3.1,3.1,1600,1250,1e3,1250,1600,-12,9],[12,510,510,12,310,3.15,3.15,1600,1250,1e3,1250,1700,0,9],[13,515,515,13,315,3.2,3.2,1600,1250,1e3,1250,1800,0,9],[14,520,520,14,320,3.25,3.25,2e3,1600,1250,1600,1900,0,12],[15,525,525,15,325,3.3,3.3,2e3,1600,1250,1600,2e3,0,12],[16,530,530,16,330,3.35,3.35,2e3,1600,1250,1600,2100,12,12],[17,535,535,17,335,3.4,3.4,2e3,1600,1250,1600,2200,12,12],[18,540,540,18,340,3.45,3.45,2e3,1600,1250,1600,2300,12,12],[19,545,545,19,345,3.5,3.5,2e3,1600,1250,1600,2400,12,12],[20,550,550,20,350,3.55,3.55,2e3,1600,1250,1600,2500,24,12],[21,560,555,21,355,3.6,3.6,2e3,1600,1250,1600,2600,24,12],[22,570,560,22,360,3.65,3.65,2500,2e3,1600,2e3,2700,24,12],[23,580,565,23,365,3.7,3.7,2500,2e3,1600,2e3,2800,24,12],[24,590,570,24,370,3.75,3.75,2500,2e3,1600,2e3,2900,36,12],[25,600,575,25,375,3.8,3.8,2500,2e3,1600,2e3,3e3,36,12],[26,610,580,26,380,3.85,3.85,2500,2e3,1600,2e3,3100,36,12],[27,620,585,27,385,3.9,3.9,2500,2e3,1600,2e3,3200,36,12],[28,630,590,28,390,3.95,3.95,2500,2e3,1600,2e3,3300,48,12],[29,640,595,29,395,4,4,2500,2e3,1600,2e3,3400,48,12],[30,650,600,30,400,4.05,4.05,3150,2500,2e3,2500,3500,48,10],[31,660,610,31,405,4.1,4.1,3150,2500,2e3,2500,3600,48,10],[32,670,620,32,410,4.15,4.15,3150,2500,2e3,2500,3700,60,10],[33,680,630,33,415,4.2,4.2,3150,2500,2e3,2500,3800,60,10],[34,690,640,34,420,4.25,4.25,3150,2500,2e3,2500,3900,60,10],[35,700,650,35,425,4.3,4.3,3150,2500,2e3,2500,4e3,60,10],[36,710,660,36,430,4.35,4.35,3150,2500,2e3,2500,4100,72,10],[37,720,670,37,435,4.4,4.4,3150,2500,2e3,2500,4200,72,10],[38,730,680,38,440,4.45,4.45,4e3,3150,2500,3150,4300,72,11],[39,740,690,39,445,4.5,4.5,4e3,3150,2500,3150,4400,72,11],[40,750,700,40,450,4.55,4.55,4e3,3150,2500,3150,4500,84,11],[41,760,710,50,455,4.6,4.6,4e3,3150,2500,3150,4600,84,11],[42,770,720,60,460,4.65,4.65,4e3,3150,2500,3150,4700,84,11],[43,780,730,70,465,4.7,4.7,4e3,3150,2500,3150,4800,84,11],[44,790,740,80,470,4.75,4.75,4e3,3150,2500,3150,4900,96,11],[45,800,750,90,475,4.8,4.8,4e3,3150,2500,3150,5e3,96,11],[46,810,760,100,480,4.85,4.85,5e3,4e3,3150,4e3,5100,96,12],[47,820,770,110,485,4.9,4.9,5e3,4e3,3150,4e3,5200,96,12],[48,830,780,120,490,4.95,4.95,5e3,4e3,3150,4e3,5300,108,12],[49,840,790,130,495,5,5,5e3,4e3,3150,4e3,5400,108,12],[50,850,800,140,500,5.1,5.05,5e3,4e3,3150,4e3,5500,108,12],[52,860,810,150,505,5.2,5.1,5e3,4e3,3150,4e3,5600,108,12],[54,870,820,160,510,5.3,5.15,5e3,4e3,3150,4e3,5700,120,12],[56,880,830,170,515,5.4,5.2,5e3,4e3,3150,4e3,5800,120,12],[58,890,840,180,520,5.5,5.25,6300,5e3,4e3,5e3,5900,120,13],[60,900,850,190,525,5.6,5.3,6300,5e3,4e3,5e3,6e3,120,13],[62,910,860,200,530,5.7,5.35,6300,5e3,4e3,5e3,6100,132,13],[64,920,870,210,535,5.8,5.4,6300,5e3,4e3,5e3,6200,132,13],[66,930,880,220,540,5.9,5.45,6300,5e3,4e3,5e3,6300,132,13],[68,940,890,230,545,6,5.5,6300,5e3,4e3,5e3,6400,132,13],[70,950,900,240,550,6.1,5.55,6300,5e3,4e3,5e3,6500,144,13],[72,960,910,250,555,6.2,5.6,6300,5e3,4e3,5e3,6600,144,13],[74,970,920,260,560,6.3,5.65,8e3,6300,5e3,6300,6700,144,14],[76,980,930,270,565,6.4,5.7,8e3,6300,5e3,6300,6800,144,14],[78,990,940,280,570,6.5,5.75,8e3,6300,5e3,6300,6900,156,14],[80,1e3,950,290,575,6.6,5.8,8e3,6300,5e3,6300,7e3,156,14],[82,1e3,960,300,580,6.7,5.85,8e3,6300,5e3,6300,7100,156,14],[84,1e3,970,320,585,6.8,5.9,8e3,6300,5e3,6300,7200,156,14],[86,1e3,980,340,590,6.9,5.95,8e3,6300,5e3,6300,7300,168,14],[88,1e3,990,360,595,7,6,8e3,6300,5e3,6300,7400,168,14],[90,1e3,1e3,380,600,7.5,6.05,13500,8e3,6300,13500,7500,168,15],[92,1e3,1e3,400,605,8,6.1,13500,8e3,6300,13500,7600,168,15],[94,1e3,1e3,420,610,8.5,6.15,13500,8e3,6300,13500,7700,-180,15],[96,1e3,1e3,440,615,9,6.2,13500,8e3,6300,13500,7800,-180,15],[98,1e3,1e3,460,620,9.5,6.25,13500,8e3,6300,13500,7900,-180,15],[100,1e3,1e3,480,625,10,6.3,13500,8e3,6300,13500,8e3,-180,15],[100,1e3,1e3,500,630,10,6.35,13500,8e3,6300,13500,8e3,-180,15],[100,1e3,1e3,500,635,10,6.4,13500,8e3,6300,13500,8e3,-180,15]];static preDelayTime(t){return this.data[t][0]}static delayTime1(t){return this.data[t][1]}static delayTime2(t){return this.data[t][2]}static delayTime3(t){return this.data[t][3]}static delayTime4(t){return this.data[t][4]}static rate1(t){return this.data[t][5]}static rate2(t){return this.data[t][6]}static hfDamp(t){return this.data[t][7]}static cutoffFreq(t){return this.data[t][8]}static eqFreq(t){return this.data[t][9]}static lpf(t){return this.data[t][10]}static manual(t){return this.data[t][11]}static azimuth(t){return this.data[t][12]}static accl(t){return this.data[t][13]}},Os=Math.PI/2,QA=-64,vn=63,ms=vn-QA,wA=new Float32Array(ms+1),MA=new Float32Array(ms+1);for(let t=QA;t<=vn;t++){let e=(t-QA)/ms,A=t-QA;wA[A]=Math.cos(Os*e),MA[A]=Math.sin(Os*e)}function Se(t){t.x1=t.x2=t.y1=t.y2=0}var qe={b0:1,b1:0,b2:0,a0:1,a1:0,a2:0};function wt(t,e,A,s,a){let n=e.b0*t+e.b1*s.x1+e.b2*s.x2-e.a1*s.y1-e.a2*s.y2;s.x2=s.x1,s.x1=t,s.y2=s.y1,s.y1=n;let r=A.b0*n+A.b1*a.x1+A.b2*a.x2-A.a1*a.y1-A.a2*a.y2;return a.x2=a.x1,a.x1=n,a.y2=a.y1,a.y1=r,r}function gt(t,e,A){let s=e.b0*t+e.b1*A.x1+e.b2*A.x2-e.a1*A.y1-e.a2*A.y2;return A.x2=A.x1,A.x1=t,A.y2=A.y1,A.y1=s,s}function ft(t,e,A,s,a){let n=Math.pow(10,e/40),r=2*Math.PI*A/s,i=Math.cos(r),o=Math.sin(r)/2*Math.sqrt((n+1/n)*(1/1-1)+2),I,l,B,C,g,E;a?(I=n*(n+1-(n-1)*i+2*Math.sqrt(n)*o),l=2*n*(n-1-(n+1)*i),B=n*(n+1-(n-1)*i-2*Math.sqrt(n)*o),C=n+1+(n-1)*i+2*Math.sqrt(n)*o,g=-2*(n-1+(n+1)*i),E=n+1+(n-1)*i-2*Math.sqrt(n)*o):(I=n*(n+1+(n-1)*i+2*Math.sqrt(n)*o),l=-2*n*(n-1+(n+1)*i),B=n*(n+1+(n-1)*i-2*Math.sqrt(n)*o),C=n+1-(n-1)*i+2*Math.sqrt(n)*o,g=2*(n-1-(n+1)*i),E=n+1-(n-1)*i-2*Math.sqrt(n)*o),t.b0=I/C,t.b1=l/C,t.b2=B/C,t.a0=1,t.a1=g/C,t.a2=E/C}var be={x1:0,x2:0,y1:0,y2:0},Tr=class{type=256;sendLevelToReverb=0;sendLevelToChorus=0;sendLevelToDelay=0;sampleRate;level=1;lowFreq=400;lowGain=5;hiFreq=8e3;hiGain=-12;m1Freq=1600;m1Q=.5;m1Gain=8;m2Freq=1e3;m2Q=.5;m2Gain=-8;lowCoeffs={...qe};m1Coeffs={...qe};m2Coeffs={...qe};hiCoeffs={...qe};lowStateL={...be};lowStateR={...be};m1StateL={...be};m1StateR={...be};m2StateL={...be};m2StateR={...be};hiStateL={...be};hiStateR={...be};constructor(t){this.sampleRate=t,this.reset(),this.updateCoefficients()}reset(){this.level=1,this.lowFreq=400,this.lowGain=5,this.hiGain=-12,this.hiFreq=8e3,this.m1Freq=1600,this.m1Q=.5,this.m1Gain=8,this.m2Freq=1e3,this.m2Q=.5,this.m2Gain=-8,Se(this.lowStateL),Se(this.lowStateR),Se(this.m1StateL),Se(this.m1StateR),Se(this.m2StateL),Se(this.m2StateR),Se(this.hiStateL),Se(this.hiStateR),this.updateCoefficients()}setParameter(t,e){switch(t){default:break;case 3:this.lowFreq=e===1?400:200;break;case 4:this.lowGain=e-64;break;case 5:this.hiFreq=e===1?8e3:4e3;break;case 6:this.hiGain=e-64;break;case 7:this.m1Freq=Ct.eqFreq(e);break;case 8:this.m1Q=[.5,1,2,4,9][e]||1;break;case 9:this.m1Gain=e-64;break;case 10:this.m2Freq=Ct.eqFreq(e);break;case 11:this.m2Q=[.5,1,2,4,9][e]||1;break;case 12:this.m2Gain=e-64;break;case 22:this.level=e/127;break}this.updateCoefficients()}process(t,e,A,s,a,n,r,i,o){let{level:I,sendLevelToChorus:l,sendLevelToDelay:B,sendLevelToReverb:C,lowCoeffs:g,lowStateL:E,lowStateR:S,m1Coeffs:k,m1StateL:u,m1StateR:w,m2StateL:M,m2StateR:R,m2Coeffs:v,hiCoeffs:N,hiStateL:m,hiStateR:p}=this;for(let y=0;y<o;y++){let V=t[y],Y=e[y];V=gt(V,g,E),Y=gt(Y,g,S),V=gt(V,k,u),Y=gt(Y,k,w),V=gt(V,v,M),Y=gt(Y,v,R),V=gt(V,N,m),Y=gt(Y,N,p);let q=i+y;A[q]+=V*I,s[q]+=Y*I;let J=.5*(V+Y);a[y]+=J*C,n[y]+=J*l,r[y]+=J*B}}updateCoefficients(){Ur(this.lowCoeffs,this.lowFreq,this.lowGain/2,this.sampleRate),Ys(this.m1Coeffs,this.m1Freq,this.m1Gain,this.m1Q,this.sampleRate),Ys(this.m2Coeffs,this.m2Freq,this.m2Gain,this.m2Q,this.sampleRate),xr(this.hiCoeffs,this.hiFreq,this.hiGain/2,this.sampleRate)}},Gn=1;function Ys(t,e,A,s,a){let n=Math.pow(10,A/40),r=2*Math.PI*e/a,i=Math.cos(r),o=Math.sin(r)/(2*s),I=1+o*n,l=-2*i,B=1-o*n,C=1+o/n,g=-2*i,E=1-o/n;t.a0=1,t.a1=g/C,t.a2=E/C,t.b0=I/C,t.b1=l/C,t.b2=B/C}function Ur(t,e,A,s){let a=Math.pow(10,A/40),n=2*Math.PI*e/s,r=Math.cos(n),i=Math.sin(n)/2*Math.sqrt((a+1/a)*(1/Gn-1)+2),o=a*(a+1-(a-1)*r+2*Math.sqrt(a)*i),I=2*a*(a-1-(a+1)*r),l=a*(a+1-(a-1)*r-2*Math.sqrt(a)*i),B=a+1+(a-1)*r+2*Math.sqrt(a)*i,C=-2*(a-1+(a+1)*r),g=a+1+(a-1)*r-2*Math.sqrt(a)*i;t.a0=1,t.a1=C/B,t.a2=g/B,t.b0=o/B,t.b1=I/B,t.b2=l/B}function xr(t,e,A,s){let a=Math.pow(10,A/40),n=2*Math.PI*e/s,r=Math.cos(n),i=Math.sin(n)/2*Math.sqrt((a+1/a)*(1/Gn-1)+2),o=a*(a+1+(a-1)*r+2*Math.sqrt(a)*i),I=-2*a*(a-1+(a+1)*r),l=a*(a+1+(a-1)*r-2*Math.sqrt(a)*i),B=a+1-(a-1)*r+2*Math.sqrt(a)*i,C=2*(a-1-(a+1)*r),g=a+1-(a-1)*r-2*Math.sqrt(a)*i;t.a0=1,t.a1=C/B,t.a2=g/B,t.b0=o/B,t.b1=I/B,t.b2=l/B}var Lt=8,ZA=128,qs=4,WA=600,Hr=.9,Js=.35,Ln=class{sendLevelToReverb=40/127;sendLevelToChorus=0;sendLevelToDelay=0;type=288;manual=620;rate=.85;depth=64/ZA;reso=16/127;mix=1;lowGain=0;hiGain=0;prevInL;prevOutL;prevInR;prevOutR;lowShelfCoef={...qe};highShelfCoef={...qe};manualOffset=WA;lowShelfStateL={x1:0,x2:0,y1:0,y2:0};lowShelfStateR={x1:0,x2:0,y1:0,y2:0};highShelfStateL={x1:0,x2:0,y1:0,y2:0};highShelfStateR={x1:0,x2:0,y1:0,y2:0};prevL=0;prevR=0;level=104/127;phase=Js;sampleRate;constructor(t){this.sampleRate=t,this.prevInL=new Float32Array(Lt),this.prevOutL=new Float32Array(Lt),this.prevInR=new Float32Array(Lt),this.prevOutR=new Float32Array(Lt),this.reset()}reset(){this.phase=Js,this.setManual(620),this.rate=.85,this.depth=64/ZA,this.reso=16/127,this.mix=1,this.lowGain=0,this.hiGain=0,this.level=104/127,Se(this.highShelfStateL),Se(this.highShelfStateR),Se(this.lowShelfStateL),Se(this.lowShelfStateR),this.updateShelves(),this.clearAllPass()}process(t,e,A,s,a,n,r,i,o){let{sendLevelToReverb:I,sendLevelToChorus:l,sendLevelToDelay:B,level:C,manual:g,manualOffset:E,mix:S,lowShelfCoef:k,lowShelfStateR:u,lowShelfStateL:w,highShelfCoef:M,highShelfStateL:R,highShelfStateR:v,prevInL:N,prevInR:m,prevOutL:p,prevOutR:y,sampleRate:V,depth:Y}=this,{prevL:q,prevR:J,phase:ee}=this,x=this.rate/this.sampleRate,D=this.reso*Hr;for(let Q=0;Q<o;Q++){let T=wt(t[Q],k,M,w,R),H=wt(e[Q],k,M,u,v),z=2*Math.abs(ee-.5);(ee+=x)>=1&&(ee-=1);let j=E+g*(1-Y*z),W=Math.tan(Math.PI*j/V),K=Math.max(-.9999,Math.min(.9999,(1-W)/(1+W))),te=T+D*q,Ae=H+D*J;for(let Ee=0;Ee<Lt;Ee++){let Re=-K*te+N[Ee]+K*p[Ee];N[Ee]=te,p[Ee]=Re,te=Re;let Oe=-K*Ae+m[Ee]+K*y[Ee];m[Ee]=Ae,y[Ee]=Oe,Ae=Oe}q=te,J=Ae;let O=(T+te*S)*C,re=(H+Ae*S)*C,me=i+Q;A[me]+=O,s[me]+=re;let Le=(O+re)*.5;a[Q]+=Le*I,n[Q]+=Le*l,r[Q]+=Le*B}this.phase=ee,this.prevL=q,this.prevR=J}setParameter(t,e){switch(t){default:break;case 3:this.setManual(Ct.manual(e));break;case 4:this.rate=Ct.rate1(e);break;case 5:this.depth=e/ZA;break;case 6:this.reso=e/127;break;case 7:this.mix=e/127;break;case 19:this.lowGain=e-64;break;case 20:this.hiGain=e-64;break;case 22:this.level=e/127;break}this.updateShelves()}setManual(t){t>1e3?(this.manualOffset=WA*1.5*qs,this.manual=t):(this.manualOffset=WA,this.manual=t*qs)}clearAllPass(){this.prevR=0,this.prevL=0;for(let t=0;t<Lt;t++)this.prevInL[t]=0,this.prevOutL[t]=0,this.prevInR[t]=0,this.prevOutR[t]=0}updateShelves(){ft(this.lowShelfCoef,this.lowGain,200,this.sampleRate,!0),ft(this.highShelfCoef,this.hiGain,4e3,this.sampleRate,!1)}},Ks=Math.PI*2,Or=.935,Yr=2,qr=.01,Vs=127,Jr=class{sendLevelToReverb=40/127;sendLevelToChorus=0;sendLevelToDelay=0;type=294;modWave=1;modRate=3.05;modDepth=96;lowGain=0;hiGain=0;level=Vs/127;currentPan=0;phase=0;lsCoeffs={...qe};hsCoeffs={...qe};lsStateR={...be};lsStateL={...be};hsStateR={...be};hsStateL={...be};sampleRate;constructor(t){this.sampleRate=t,this.reset()}reset(){this.modWave=1,this.modRate=3.05,this.modDepth=96,this.lowGain=0,this.hiGain=0,this.level=Vs/127,this.currentPan=0,this.phase=0,Se(this.hsStateR),Se(this.hsStateL),Se(this.lsStateR),Se(this.lsStateL),this.updateShelves()}process(t,e,A,s,a,n,r,i,o){let{sendLevelToReverb:I,sendLevelToChorus:l,sendLevelToDelay:B,level:C,lsCoeffs:g,lsStateL:E,lsStateR:S,hsCoeffs:k,hsStateR:u,hsStateL:w,modWave:M}=this,R=Math.pow(this.modDepth/127,Yr),v=2/(1+R)*Or,N=this.modRate/this.sampleRate,{phase:m,currentPan:p}=this;for(let y=0;y<o;y++){let V=wt(t[y],g,k,E,w),Y=wt(e[y],g,k,S,u),q;switch(M){default:q=1-4*Math.abs(m-.5);break;case 1:q=m>.5?-1:-Math.cos((m-.75)*Ks);break;case 2:q=Math.sin(Ks*m);break;case 3:q=1-2*m;break;case 4:q=2*m-1;break}(m+=N)>=1&&(m-=1),p+=(q-p)*qr;let J=p*R,ee=(1-J)*.5*v,x=(1+J)*.5*v,D=V*C*ee,Q=Y*C*x,T=i+y;A[T]+=D,s[T]+=Q;let H=(D+Q)*.5;a[y]+=H*I,n[y]+=H*l,r[y]+=H*B}this.currentPan=p,this.phase=m}setParameter(t,e){switch(t){default:break;case 3:this.modWave=e;break;case 4:this.modRate=Ct.rate1(e);break;case 5:this.modDepth=e;break;case 19:this.lowGain=e-64;break;case 20:this.hiGain=e-64;break;case 22:this.level=e/127;break}this.updateShelves()}updateShelves(){ft(this.lsCoeffs,this.lowGain,200,this.sampleRate,!0),ft(this.hsCoeffs,this.hiGain,4e3,this.sampleRate,!1)}},Xs=96,Kr=.1,Vr=.1,Xr=27,Zr=28,Wr=-28,zr=400,_r=.62,$r=.005,Pn=5,Zs=Pn*.5,Nn=class{sendLevelToReverb=40/127;sendLevelToChorus=0;sendLevelToDelay=0;type=289;filType=1;sens=0;manual=68;peak=62;rate=2.05;depth=72;polarity=1;pan=0;lowGain=0;hiGain=0;level=Xs/127;coeffs={...qe};state={...be};hpCoeffs={...qe};hpState={...be};phase=0;lsCoeffs={...qe};hsCoeffs={...qe};lsState={...be};hsState={...be};sampleRate;lastFc=this.manual;attackCoeff;releaseCoeff;envelope=0;constructor(t){this.sampleRate=t,this.attackCoeff=Math.exp(-1/(Kr*t)),this.releaseCoeff=Math.exp(-1/(Vr*t)),this.reset()}reset(){this.filType=1,this.sens=0,this.setManual(68),this.peak=62,this.rate=2.05,this.depth=72,this.polarity=1,this.lowGain=0,this.hiGain=0,this.pan=0,this.level=Xs/127,this.phase=.2,this.lastFc=this.manual,Se(this.hsState),Se(this.lsState),Se(this.state),Se(this.hpState),this.updateShelves()}process(t,e,A,s,a,n,r,i,o){let{sendLevelToReverb:I,sendLevelToChorus:l,sendLevelToDelay:B,level:C,lsCoeffs:g,lsState:E,hsCoeffs:S,hsState:k,coeffs:u,state:w,sampleRate:M,filType:R,manual:v,pan:N,attackCoeff:m,releaseCoeff:p,hpState:y,hpCoeffs:V}=this,{phase:Y,lastFc:q,envelope:J}=this,ee=this.rate/this.sampleRate,x=Math.pow(10,this.peak/127*Zr/20),D=Math.pow(10,this.peak/127*Wr/20),Q=this.polarity===0?-1:Pn,T=this.depth/127*Q,H=this.sens/127,z=N+64|0,j=wA[z],W=MA[z];for(let K=0;K<o;K++){let te=wt((t[K]+e[K])*.5,g,S,E,k),Ae=Math.abs(te);J=Ae>J?m*J+(1-m)*Ae:p*J+(1-p)*Ae;let O=2*Math.abs(Y-.5)*T;(Y+=ee)>=1&&(Y-=1);let re=O>=Zs||Q<0?1:Math.sin(O*Math.PI/(2*Zs)),me=v*(1+H*J*Xr),Le=Math.max(20,me*(1+re*O));q+=(Math.max(10,Le)-q)*$r,jr(u,q,x,M);let Ee=te;R===1&&(ei(V,zr,D,M),Ee=gt(Ee,V,y));let Re=gt(Ee,u,w)*C,Oe=Re*j,Bt=Re*W,Et=i+K;A[Et]+=Oe,s[Et]+=Bt,a[K]+=Re*I,n[K]+=Re*l,r[K]+=Re*B}this.phase=Y,this.lastFc=q,this.envelope=J}setParameter(t,e){switch(t){default:break;case 3:this.filType=e;break;case 4:this.sens=e;break;case 5:this.setManual(e);break;case 6:this.peak=e;break;case 7:this.rate=Ct.rate1(e);break;case 8:this.depth=e;break;case 9:this.polarity=e;break;case 19:this.lowGain=e-64;break;case 20:this.hiGain=e-64;break;case 21:this.pan=e-64;break;case 22:this.level=e/127;break}this.updateShelves()}setManual(t){let e=t*_r,A=Ct.manual(Math.floor(e)),s=Ct.manual(Math.ceil(e)),a=e-Math.floor(e);this.manual=A+(s-A)*a}updateShelves(){ft(this.lsCoeffs,this.lowGain,200,this.sampleRate,!0),ft(this.hsCoeffs,this.hiGain,4e3,this.sampleRate,!1)}};function jr(t,e,A,s){let a=2*Math.PI*e/s,n=Math.cos(a),r=Math.sin(a)/(2*A),i=1-n,o=i/2,I=o,l=1+r,B=-2*n,C=1-r;t.a0=1,t.a1=B/l,t.a2=C/l,t.b0=o/l,t.b1=i/l,t.b2=I/l}function ei(t,e,A,s){let a=2*Math.PI*e/s,n=Math.cos(a),r=Math.sin(a)/(2*A),i=(1+n)/2,o=-(1+n),I=i,l=1+r,B=-2*n,C=1-r;t.a0=1,t.a1=B/l,t.a2=C/l,t.b0=i/l,t.b1=o/l,t.b2=I/l}var Ws=127,ti=class{sendLevelToReverb=40/127;sendLevelToChorus=0;sendLevelToDelay=0;type=4360;phPan=0;awPan=127;level=Ws/127;phaser;autoWah;bufferPh;bufferAw;constructor(t,e){this.phaser=new Ln(t),this.autoWah=new Nn(t),this.bufferAw=new Float32Array(e),this.bufferPh=new Float32Array(e),this.phaser.sendLevelToReverb=0,this.phaser.sendLevelToChorus=0,this.phaser.sendLevelToDelay=0,this.autoWah.sendLevelToReverb=0,this.autoWah.sendLevelToChorus=0,this.autoWah.sendLevelToDelay=0,this.reset()}reset(){this.phPan=0,this.awPan=127,this.level=Ws/127,this.phaser.reset(),this.autoWah.reset(),this.phaser.setParameter(22,127),this.autoWah.setParameter(22,127)}process(t,e,A,s,a,n,r,i,o){let{sendLevelToReverb:I,sendLevelToChorus:l,sendLevelToDelay:B,level:C}=this,{bufferPh:g,bufferAw:E}=this;this.bufferPh.fill(0),this.phaser.process(t,t,g,g,g,g,g,0,o),this.bufferAw.fill(0),this.autoWah.process(e,e,E,E,E,E,E,0,o);let S=this.phPan|0,k=wA[S],u=MA[S],w=this.awPan|0,M=wA[w],R=MA[w];for(let v=0;v<o;v++){let N=g[v]*.5*C,m=E[v]*.5*C,p=N*k+m*M,y=N*u+m*R,V=i+v;A[V]+=p,s[V]+=y;let Y=(p+y)*.5;a[v]+=Y*I,n[v]+=Y*l,r[v]+=Y*B}}setParameter(t,e){if(t>=3&&t<=7){this.phaser.setParameter(t,e);return}if(t>=8&&t<=14){this.autoWah.setParameter(t-5,e);return}switch(t){default:break;case 18:this.phPan=e;break;case 19:this.phaser.setParameter(22,e);break;case 20:this.awPan=e;break;case 21:this.autoWah.setParameter(22,e);break;case 22:this.level=e/127;break}}},zs=127,_s=Math.PI*2,Ai=.01,si=class{sendLevelToReverb=40/127;sendLevelToChorus=0;sendLevelToDelay=0;type=293;modWave=1;modRate=3.05;modDepth=96;lowGain=0;hiGain=0;level=zs/127;phase=0;currentGain=1;lsCoeffs={...qe};hsCoeffs={...qe};lsStateR={...be};lsStateL={...be};hsStateR={...be};hsStateL={...be};sampleRate;constructor(t){this.sampleRate=t,this.reset()}reset(){this.modWave=1,this.modRate=3.05,this.modDepth=96,this.lowGain=0,this.hiGain=0,this.level=zs/127,this.phase=0,this.currentGain=1,Se(this.hsStateR),Se(this.hsStateL),Se(this.lsStateR),Se(this.lsStateL),this.updateShelves()}process(t,e,A,s,a,n,r,i,o){let{sendLevelToReverb:I,sendLevelToChorus:l,sendLevelToDelay:B,level:C,lsCoeffs:g,lsStateL:E,lsStateR:S,hsCoeffs:k,hsStateR:u,hsStateL:w,modDepth:M,modWave:R}=this,v=this.modRate/this.sampleRate,{currentGain:N,phase:m}=this;for(let p=0;p<o;p++){let y=wt(t[p],g,k,E,w),V=wt(e[p],g,k,S,u),Y;switch(R){default:Y=1-4*Math.abs(m-.5);break;case 1:Y=m>.5?-1:-Math.cos((m-.75)*_s);break;case 2:Y=Math.sin(_s*m);break;case 3:Y=1-2*m;break;case 4:Y=2*m-1;break}(m+=v)>=1&&(m-=1);let q=1-(Y/2+.5)*(M/127);N+=(q-N)*Ai;let J=y*C*N,ee=V*C*N,x=i+p;A[x]+=J,s[x]+=ee;let D=(J+ee)*.5;a[p]+=D*I,n[p]+=D*l,r[p]+=D*B}this.phase=m,this.currentGain=N}setParameter(t,e){switch(t){default:break;case 3:this.modWave=e;break;case 4:this.modRate=Ct.rate1(e);break;case 5:this.modDepth=e;break;case 19:this.lowGain=e-64;break;case 20:this.hiGain=e-64;break;case 22:this.level=e/127;break}this.updateShelves()}updateShelves(){ft(this.lsCoeffs,this.lowGain,200,this.sampleRate,!0),ft(this.hsCoeffs,this.hiGain,4e3,this.sampleRate,!1)}},ni=[Fn,Tr,Ln,Jr,Nn,ti,si],ai=class{preDelay=0;preLPF=.5;inputDiffusion1=.75;inputDiffusion2=.625;decay=.5;decayDiffusion1=.7;decayDiffusion2=.5;damping=.005;excursionRate=.1;excursionDepth=.2;gain=1;sampleRate;lp1=0;lp2=0;lp3=0;excPhase=0;pDWrite=0;taps;pDelay;pDLength;delays=new Array;constructor(t){this.sampleRate=t,this.pDLength=t,this.pDelay=new Float32Array(this.pDLength);for(let e of[.004771345,.003595309,.012734787,.009307483,.022579886,.149625349,.060481839,.1249958,.030509727,.141695508,.089244313,.106280031])this.makeDelayLine(e);this.taps=Int16Array.from([.008937872,.099929438,.064278754,.067067639,.066866033,.006283391,.035818689,.011861161,.121870905,.041262054,.08981553,.070931756,.011256342,.004065724],e=>Math.round(e*this.sampleRate))}process(t,e,A,s,a){let n=this.preDelay|0,r=this.inputDiffusion1,i=this.inputDiffusion2,o=this.decay,I=this.decayDiffusion1,l=this.decayDiffusion2,B=1-this.damping,C=this.excursionRate/this.sampleRate,g=this.excursionDepth*this.sampleRate/1e3,E=this.pDWrite;for(let S=0;S<a;S++)this.pDelay[(E+S)%this.pDLength]=t[S];for(let S=0;S<a;S++){this.lp1+=this.preLPF*(this.pDelay[(this.pDLength+this.pDWrite-n+S)%this.pDLength]-this.lp1);let k=this.writeDelay(0,this.lp1-r*this.readDelay(0));k=this.writeDelay(1,r*(k-this.readDelay(1))+this.readDelay(0)),k=this.writeDelay(2,r*k+this.readDelay(1)-i*this.readDelay(2)),k=this.writeDelay(3,i*(k-this.readDelay(3))+this.readDelay(2));let u=i*k+this.readDelay(3),w=g*(1+Math.cos(this.excPhase*6.28)),M=g*(1+Math.sin(this.excPhase*6.2847)),R=this.writeDelay(4,u+o*this.readDelay(11)+I*this.readDelayCAt(4,w));this.writeDelay(5,this.readDelayCAt(4,w)-I*R),this.lp2+=B*(this.readDelay(5)-this.lp2),R=this.writeDelay(6,o*this.lp2-l*this.readDelay(6)),this.writeDelay(7,this.readDelay(6)+l*R),R=this.writeDelay(8,u+o*this.readDelay(7)+I*this.readDelayCAt(8,M)),this.writeDelay(9,this.readDelayCAt(8,M)-I*R),this.lp3+=B*(this.readDelay(9)-this.lp3),R=this.writeDelay(10,o*this.lp3-l*this.readDelay(10)),this.writeDelay(11,this.readDelay(10)+l*R);let v=this.readDelayAt(9,this.taps[0])+this.readDelayAt(9,this.taps[1])-this.readDelayAt(10,this.taps[2])+this.readDelayAt(11,this.taps[3])-this.readDelayAt(5,this.taps[4])-this.readDelayAt(6,this.taps[5])-this.readDelayAt(7,this.taps[6]),N=S+s;e[N]+=v*this.gain;let m=this.readDelayAt(5,this.taps[7])+this.readDelayAt(5,this.taps[8])-this.readDelayAt(6,this.taps[9])+this.readDelayAt(7,this.taps[10])-this.readDelayAt(9,this.taps[11])-this.readDelayAt(10,this.taps[12])-this.readDelayAt(11,this.taps[13]);A[N]+=m*this.gain,this.excPhase+=C;for(let p=0,y=this.delays[0];p<this.delays.length;y=this.delays[++p])y[1]=y[1]+1&y[3],y[2]=y[2]+1&y[3]}this.pDWrite=(E+a)%this.pDLength}makeDelayLine(t){let e=Math.round(t*this.sampleRate),A=2**Math.ceil(Math.log2(e));this.delays.push([new Float32Array(A),e-1,0,A-1])}writeDelay(t,e){return this.delays[t][0][this.delays[t][1]]=e}readDelay(t){return this.delays[t][0][this.delays[t][2]]}readDelayAt(t,e){let A=this.delays[t];return A[0][A[2]+e&A[3]]}readDelayCAt(t,e){let A=this.delays[t],s=e-~~e,a=A[3],n=~~e+A[2]-1,r=A[0][n++&a],i=A[0][n++&a],o=A[0][n++&a],I=A[0][n&a],l=(3*(i-o)-r+I)/2,B=2*o+r-(5*i+I)/2,C=(o-r)/2;return((l*s+B)*s+C)*s+i}},Zt=class{feedback=0;gain=1;buffer;bufferLength;writeIndex=0;constructor(t){this.buffer=new Float32Array(t),this.bufferLength=this.buffer.length,this._time=t-5}_time;get time(){return this._time}set time(t){this._time=Math.min(this.bufferLength,t)|0}clear(){this.buffer.fill(0)}process(t,e,A){let s=this.writeIndex,a=this._time,n=this.buffer,r=this.bufferLength,i=this.feedback,o=this.gain;for(let I=0;I<A;I++){let l=s-a;l<0&&(l+=r);let B=n[l];e[I]=B*o,n[s]=t[I]+B*i,++s>=r&&(s=0)}this.writeIndex=s}},ri=1.5,ii=class{dattorro;delayLeft;delayRight;delayLeftOutput;delayRightOutput;delayLeftInput;delayPreLPF;sampleRate;preLPFfc=8e3;preLPFa=0;preLPFz=0;characterTimeCoefficient=1;characterGainCoefficient=1;characterLPFCoefficient=0;delayGain=1;panDelayFeedback=0;constructor(t,e){this.sampleRate=t,this.delayLeftOutput=new Float32Array(e),this.delayRightOutput=new Float32Array(e),this.delayLeftInput=new Float32Array(e),this.delayPreLPF=new Float32Array(e),this.dattorro=new ai(t),this.delayLeft=new Zt(t),this.delayRight=new Zt(t)}_delayFeedback=0;get delayFeedback(){return this._delayFeedback}set delayFeedback(t){this._delayFeedback=t,this.updateFeedback()}_character=0;get character(){return this._character}set character(t){switch(this._character=t,this.dattorro.damping=.005,this.characterTimeCoefficient=1,this.characterGainCoefficient=1,this.characterLPFCoefficient=0,this.dattorro.inputDiffusion1=.75,this.dattorro.inputDiffusion2=.625,this.dattorro.decayDiffusion1=.7,this.dattorro.decayDiffusion2=.5,this.dattorro.excursionRate=.5,this.dattorro.excursionDepth=.7,t){case 0:this.dattorro.damping=.85,this.characterTimeCoefficient=.9,this.characterGainCoefficient=.9,this.characterLPFCoefficient=.2;break;case 1:this.dattorro.damping=.2,this.characterGainCoefficient=.7,this.characterTimeCoefficient=1,this.dattorro.decayDiffusion2=.64,this.dattorro.decayDiffusion1=.6,this.characterLPFCoefficient=.2;break;case 2:this.dattorro.damping=.56,this.characterGainCoefficient=.75,this.characterTimeCoefficient=1,this.dattorro.decayDiffusion2=.64,this.dattorro.decayDiffusion1=.6,this.characterLPFCoefficient=.1;break;case 3:this.dattorro.damping=.3,this.characterGainCoefficient=1.25,this.characterTimeCoefficient=1.3,this.characterLPFCoefficient=0,this.dattorro.decayDiffusion2=.7,this.dattorro.decayDiffusion1=.66;break;case 4:this.characterGainCoefficient=1,this.characterTimeCoefficient=1.2,this.characterLPFCoefficient=.1,this.dattorro.damping=.1,this.dattorro.decayDiffusion2=.69,this.dattorro.decayDiffusion1=.67;break;case 5:this.characterGainCoefficient=.75,this.dattorro.damping=.65,this.characterTimeCoefficient=.5;break}this.updateTime(),this.updateGain(),this.updateLowpass(),this.updateFeedback(),this.delayLeft.clear(),this.delayRight.clear()}_time=0;get time(){return this._time}set time(t){this._time=t,this.updateTime()}_preDelayTime=0;get preDelayTime(){return this._preDelayTime}set preDelayTime(t){this._preDelayTime=t,this.dattorro.preDelay=t/1e3*this.sampleRate}_level=0;get level(){return this._level}set level(t){this._level=t,this.updateGain()}_preLowpass=0;get preLowpass(){return this._preLowpass}set preLowpass(t){this._preLowpass=t,this.preLPFfc=8e3*.63**this._preLowpass;let e=Math.exp(-2*Math.PI*this.preLPFfc/this.sampleRate);this.preLPFa=1-e,this.updateLowpass()}process(t,e,A,s,a){switch(this._character){default:this.dattorro.process(t,e,A,s,a);return;case 6:{let n;if(this._preLowpass>0){let o=this.delayPreLPF,I=this.preLPFz,l=this.preLPFa;for(let B=0;B<a;B++){let C=t[B];I+=l*(C-I),o[B]=I}this.preLPFz=I,n=o}else n=t;this.delayLeft.process(n,this.delayLeftOutput,a);let r=this.delayGain,i=this.delayLeftOutput;for(let o=0,I=s;o<a;o++,I++){let l=i[o]*r;A[I]+=l,e[I]+=l}return}case 7:{let n;if(this._preLowpass>0){let B=this.delayPreLPF,C=this.preLPFz,g=this.preLPFa;for(let E=0;E<a;E++){let S=t[E];C+=g*(S-C),B[E]=C}this.preLPFz=C,n=B}else n=t;let r=this.panDelayFeedback,{delayLeftInput:i,delayLeftOutput:o,delayRightOutput:I}=this;for(let B=0;B<a;B++)i[B]=n[B]+I[B]*r;this.delayLeft.process(i,o,a),this.delayRight.process(o,I,a);let l=this.delayGain;for(let B=0,C=s;B<a;B++,C++)e[C]+=o[B]*l,A[C]+=I[B]*l;return}}}getSnapshot(){return{level:this._level,preLowpass:this._preLowpass,character:this._character,time:this._time,delayFeedback:this._delayFeedback,preDelayTime:this._preDelayTime}}updateFeedback(){let t=1-(1-this._delayFeedback/127)**1.9;this._character===6?this.delayLeft.feedback=t*.73:(this.delayLeft.feedback=this.delayRight.feedback=0,this.panDelayFeedback=t*.73)}updateLowpass(){this.dattorro.preLPF=Math.min(1,.1+(7-this.preLowpass)/14+this.characterLPFCoefficient)}updateGain(){this.dattorro.gain=this._level/345*this.characterGainCoefficient,this.delayGain=this._level/127*ri}updateTime(){let t=this._time/127;this.dattorro.decay=this.characterTimeCoefficient*(.05+.65*t);let e=Math.max(21,t*this.sampleRate*.4468|0);this.character===7?this.delayRight.time=this.delayLeft.time=Math.floor(e/2):this.delayLeft.time=e}},oi=1.3,gi=class{preLPFfc=8e3;preLPFa=0;preLPFz=0;leftDelayBuffer;rightDelayBuffer;sampleRate;phase=0;write=0;gain=.5;reverbGain=0;delayGain=0;depthSamples=0;delaySamples=1;rateInc=0;feedbackGain=0;constructor(t,e){this.sampleRate=t,this.leftDelayBuffer=new Float32Array(t),this.rightDelayBuffer=new Float32Array(t),this.preLowpass=0}_sendLevelToReverb=0;get sendLevelToReverb(){return this._sendLevelToReverb}set sendLevelToReverb(t){this._sendLevelToReverb=t,this.reverbGain=t/127}_sendLevelToDelay=0;get sendLevelToDelay(){return this._sendLevelToDelay}set sendLevelToDelay(t){this._sendLevelToDelay=t,this.delayGain=t/127}_preLowpass=0;get preLowpass(){return this._preLowpass}set preLowpass(t){this._preLowpass=t,this.preLPFfc=8e3*.63**this._preLowpass;let e=Math.exp(-2*Math.PI*this.preLPFfc/this.sampleRate);this.preLPFa=1-e}_depth=0;get depth(){return this._depth}set depth(t){this._depth=t,this.depthSamples=t/127*.025*this.sampleRate}_delay=0;get delay(){return this._delay}set delay(t){this._delay=t,this.delaySamples=Math.max(1,t/127*.025*this.sampleRate)}_feedback=0;get feedback(){return this._feedback}set feedback(t){this._feedback=t,this.feedbackGain=t*.00763}_rate=0;get rate(){return this._rate}set rate(t){this._rate=t;let e=t*.122;this.rateInc=e/this.sampleRate}_level=64;get level(){return this._level}set level(t){this.gain=t/127*oi,this._level=t}process(t,e,A,s,a,n,r){let i=this.leftDelayBuffer,o=this.rightDelayBuffer,I=this.rateInc,l=i.length,B=this.depthSamples,C=this.delaySamples,g=this.gain,E=this.reverbGain,S=this.delayGain,k=this.feedbackGain,u=this._preLowpass>0,w=this.phase,M=this.write,R=this.preLPFz,v=this.preLPFa;for(let N=0;N<r;N++){let m=t[N];u&&(R+=v*(m-R),m=R);let p=2*Math.abs(w-.5),y=Math.max(1,Math.min(C+p*B,l)),V=M-y;V<0&&(V+=l);let Y=V|0,q=Y+1;q>=l&&(q-=l);let J=V-Y,ee=i[Y]*(1-J)+i[q]*J;i[M]=m+ee*k;let x=Math.max(1,Math.min(C+(1-p)*B,l)),D=M-x;D<0&&(D+=l),Y=D|0,q=Y+1,q>=l&&(q-=l),J=D-Y;let Q=o[Y]*(1-J)+o[q]*J,T=N+n;e[T]+=ee*g,A[T]+=Q*g;let H=(ee+Q)/2;s[N]+=H*E,a[N]+=H*S,o[M]=m+Q*k,++M>=l&&(M=0),(w+=I)>=1&&(w-=1)}this.write=M,this.phase=w,this.preLPFz=R}getSnapshot(){return{preLowpass:this._preLowpass,depth:this._depth,delay:this._delay,sendLevelToDelay:this._sendLevelToDelay,sendLevelToReverb:this._sendLevelToReverb,rate:this._rate,feedback:this._feedback,level:this._level}}},Ii=[{start:1,end:20,timeStart:.1,resolution:.1},{start:20,end:35,timeStart:2,resolution:.2},{start:35,end:45,timeStart:5,resolution:.5},{start:45,end:55,timeStart:10,resolution:1},{start:55,end:70,timeStart:20,resolution:2},{start:70,end:80,timeStart:50,resolution:5},{start:80,end:90,timeStart:100,resolution:10},{start:90,end:105,timeStart:200,resolution:20},{start:105,end:116,timeStart:500,resolution:50}],ci=1.66,hi=class{preLPFfc=8e3;preLPFa=0;preLPFz=0;delayLeft;delayRight;delayCenter;sampleRate;delayCenterOutput;delayPreLPF;delayCenterTime;delayLeftMultiplier=.04;delayRightMultiplier=.04;gain=0;reverbGain=0;constructor(t,e){this.sampleRate=t,this.delayCenterOutput=new Float32Array(e),this.delayPreLPF=new Float32Array(e),this.delayCenterTime=.34*t,this.delayCenter=new Zt(t),this.delayLeft=new Zt(t),this.delayRight=new Zt(t)}_sendLevelToReverb=0;get sendLevelToReverb(){return this._sendLevelToReverb}set sendLevelToReverb(t){this._sendLevelToReverb=t,this.reverbGain=t/127}_preLowpass=0;get preLowpass(){return this._preLowpass}set preLowpass(t){this._preLowpass=t,this.preLPFfc=8e3*.63**this._preLowpass;let e=Math.exp(-2*Math.PI*this.preLPFfc/this.sampleRate);this.preLPFa=1-e}_levelRight=0;get levelRight(){return this._levelRight}set levelRight(t){this._levelRight=t,this.updateGain()}_level=64;get level(){return this._level}set level(t){this._level=t,this.gain=t/127*ci}_levelCenter=127;get levelCenter(){return this._levelCenter}set levelCenter(t){this._levelCenter=t,this.updateGain()}_levelLeft=0;get levelLeft(){return this._levelLeft}set levelLeft(t){this._levelLeft=t,this.updateGain()}_feedback=16;get feedback(){return this._feedback}set feedback(t){this._feedback=t,this.delayLeft.feedback=this.delayRight.feedback=0,this.delayCenter.feedback=(t-64)/66}_timeRatioRight=0;get timeRatioRight(){return this._timeRatioRight}set timeRatioRight(t){this._timeRatioRight=t,this.delayRightMultiplier=t*(100/2400),this.delayRight.time=this.delayCenterTime*this.delayRightMultiplier}_timeRatioLeft=0;get timeRatioLeft(){return this._timeRatioLeft}set timeRatioLeft(t){this._timeRatioLeft=t,this.delayLeftMultiplier=t*(100/2400),this.delayLeft.time=this.delayCenterTime*this.delayLeftMultiplier}_timeCenter=12;get timeCenter(){return this._timeCenter}set timeCenter(t){this._timeCenter=t;let e=.1;for(let A of Ii)if(t>=A.start&&t<A.end){e=A.timeStart+(t-A.start)*A.resolution;break}this.delayCenterTime=Math.max(2,this.sampleRate*(e/1e3)),this.delayCenter.time=this.delayCenterTime,this.delayLeft.time=this.delayCenterTime*this.delayLeftMultiplier,this.delayRight.time=this.delayCenterTime*this.delayRightMultiplier}process(t,e,A,s,a,n){let r;if(this._preLowpass>0){let B=this.delayPreLPF,C=this.preLPFz,g=this.preLPFa;for(let E=0;E<n;E++){let S=t[E];C+=g*(S-C),B[E]=C}this.preLPFz=C,r=B}else r=t;let{gain:i,reverbGain:o}=this;this.delayCenter.process(r,this.delayCenterOutput,n);let I=this.delayCenterOutput;for(let B=0,C=a;B<n;B++,C++){let g=I[B];s[B]+=g*o;let E=g*i;e[C]+=E,A[C]+=E}for(let B=0;B<n;B++)I[B]+=t[B];let l=this.delayPreLPF;this.delayLeft.process(I,l,n);for(let B=0,C=a;B<n;B++,C++){let g=l[B];e[C]+=g*i,s[B]+=g*o}this.delayRight.process(I,l,n);for(let B=0,C=a;B<n;B++,C++){let g=l[B];A[C]+=g*i,s[B]+=g*o}}getSnapshot(){return{level:this._level,preLowpass:this._preLowpass,timeCenter:this._timeCenter,timeRatioRight:this._timeRatioRight,timeRatioLeft:this._timeRatioLeft,levelCenter:this._levelCenter,levelLeft:this._levelLeft,levelRight:this._levelRight,feedback:this._feedback,sendLevelToReverb:this._sendLevelToReverb}}updateGain(){this.delayCenter.gain=this._levelCenter/127,this.delayLeft.gain=this._levelLeft/127,this.delayRight.gain=this._levelRight/127}},$s={gain:1,pan:0,keyShift:0,fineTune:0,system:"gs"};function li(t,e){if(!this.lockedMIDIParameters[t]){this.midiParameters[t]=e;for(let A of this.midiChannels)A.updateInternalParams();this.callEvent("globalParamChange",{parameter:t,value:e})}}function Ci(t,e){this.lockedMIDIParameters[t]=e}var Bi=.01,Ei=.05,di=class{voices=[];midiChannels=[];maxBufferSize;voiceBuffer;insertionInputL;insertionInputR;reverbInput;chorusInput;delayInput;delayActive=!1;soundBankManager=new vr(this.updatePresetList.bind(this));keyModifierManager=new Ma;sampleRate;tunings=new Float32Array(16384).fill(-1);lockedMIDIParameters=Object.fromEntries(Object.keys($s).map(t=>[t,!1]));midiParameters={...$s};systemParameters={...In};currentTime=0;defaultPreset;drumPreset;gainSmoothingFactor;panSmoothingFactor;eventCallbackHandler;missingPresetHandler;cachedVoices=new Map;lockMIDIParameter=Ci.bind(this);setSystemParameter=Fa.bind(this);systemExclusive=Nr.bind(this);reverbProcessor;chorusProcessor;delayProcessor;customChannelNumbers=!1;setMIDIParameter=li.bind(this);insertionFallback=new Fn;insertionProcessor=this.insertionFallback;insertionEffects=new Map;insertionActive=!1;portSelectChannelOffset=0;insertionParams=new Uint8Array(23).fill(255);lastPriorityAssignmentTime=0;eventQueue=[];sampleTime;constructor(t,e,A,s){this.eventCallbackHandler=t,this.missingPresetHandler=e,this.sampleRate=A,this.sampleTime=1/A,this.currentTime=s.initialTime,this.setSystemParameter("effectsEnabled",s.effectsEnabled),this.setSystemParameter("eventsEnabled",s.eventsEnabled),this.maxBufferSize=s.maxBufferSize,this.gainSmoothingFactor=Bi*(44100/A),this.panSmoothingFactor=Ei*(44100/A),fs.initCache(this.sampleRate);let a=this.maxBufferSize;this.reverbProcessor=s.reverbProcessor??new ii(A,a),this.chorusProcessor=s.chorusProcessor??new gi(A,a),this.delayProcessor=s.delayProcessor??new hi(A,a),this.voiceBuffer=new Float32Array(a),this.insertionInputL=new Float32Array(a),this.insertionInputR=new Float32Array(a),this.reverbInput=new Float32Array(a),this.chorusInput=new Float32Array(a),this.delayInput=new Float32Array(a);for(let n of ni)this.registerInsertionProcessor(n);this.resetInsertionParams(),this.allocateNewVoices(this.systemParameters.voiceCap)}_voiceCount=0;get voiceCount(){return this._voiceCount}controllerChange(t,e,A){if(this.customChannelNumbers){for(let s of this.midiChannels)s.midiParameters.rxChannel===t&&s.controllerChange(e,A);return}this.midiChannels[t+this.portSelectChannelOffset].controllerChange(e,A)}noteOn(t,e,A){if(this.customChannelNumbers){for(let s of this.midiChannels)s.midiParameters.rxChannel===t&&s.noteOn(e,A);return}this.midiChannels[t+this.portSelectChannelOffset].noteOn(e,A)}noteOff(t,e){if(this.customChannelNumbers){for(let A of this.midiChannels)A.midiParameters.rxChannel===t&&A.noteOff(e);return}this.midiChannels[t+this.portSelectChannelOffset].noteOff(e)}polyPressure(t,e,A){if(this.customChannelNumbers){for(let s of this.midiChannels)s.midiParameters.rxChannel===t&&s.polyPressure(e,A);return}this.midiChannels[t+this.portSelectChannelOffset].polyPressure(e,A)}channelPressure(t,e){if(this.customChannelNumbers){for(let A of this.midiChannels)A.midiParameters.rxChannel===t&&A.setMIDIParameter("pressure",e);return}this.midiChannels[t+this.portSelectChannelOffset].setMIDIParameter("pressure",e)}pitchWheel(t,e,A=-1){if(this.customChannelNumbers){for(let s of this.midiChannels)s.midiParameters.rxChannel===t&&s.pitchWheel(e,A);return}this.midiChannels[t+this.portSelectChannelOffset].pitchWheel(e,A)}programChange(t,e){if(this.customChannelNumbers){for(let A of this.midiChannels)A.midiParameters.rxChannel===t&&A.programChange(e);return}this.midiChannels[t+this.portSelectChannelOffset].programChange(e)}assignVoice(){for(let e=0;e<this.systemParameters.voiceCap;e++){let A=this.voices[e];if(!A.isActive)return A.priority=1/0,A}if(this.systemParameters.autoAllocateVoices){h.info(`%cAllocating a new voice, total count %c${this.systemParameters.voiceCap+1}.`,d.info,d.value),this.allocateNewVoices(1);let e=this.voices[this.voices.length-1];return this.systemParameters.voiceCap++,e.priority=1/0,e}this.assignVoicePriorities();let t=this.voices[0];for(let e=0;e<this.systemParameters.voiceCap;e++){let A=this.voices[e];A.priority<t.priority&&(t=A)}return t.priority=1/0,t}stopAllChannels(t){h.info("%cStop all received!",d.info);for(let e of this.midiChannels)e.stopAllNotes(t)}processMessage(t,e=0,A=Xn){let s=A.time;s>this.currentTime?(this.eventQueue.push({message:t,channelOffset:e,time:s}),this.eventQueue.sort((a,n)=>a.time-n.time)):this.processMessageInternal(t,e)}destroySynthProcessor(){this.voices.length=0;for(let t of this.midiChannels)t.destroy();this.clearCache(),this.midiChannels.length=0,this.soundBankManager.destroy()}getVoices(t,e,A){let s=this.midiChannels[t],a=this.keyModifierManager.hasOverridePatch(t,e),n=s.preset;if(a){let r=this.keyModifierManager.getPatch(t,e);n=this.soundBankManager.getPreset(r,this.midiParameters.system)}return n?this.getVoicesForPreset(n,e,A):[]}createMIDIChannel(t){let e=new Rr(this,this.defaultPreset,this.midiChannels.length);this.midiChannels.push(e),t&&(this.callEvent("channelAdded",void 0),e.setDrums(!0))}reset(t="gs"){if(this.callEvent("reset",t),this.setMIDIParameter("system",t),this.setMIDIParameter("gain",1),this.setMIDIParameter("pan",0),this.setMIDIParameter("keyShift",0),this.setMIDIParameter("fineTune",0),this.tunings.fill(-1),this.portSelectChannelOffset=0,this.customChannelNumbers=!1,this.setReverbMacro(4),this.setChorusMacro(2),this.setDelayMacro(0),this.systemParameters.delayLock||(this.delayActive=!1),this.resetInsertion(),!(!this.drumPreset||!this.defaultPreset))for(let e of this.midiChannels)e.reset(!1)}process(t,e,A=0,s=0){this.processSplit([[t,e]],t,e,A,s)}processSplit(t,e,A,s=0,a=0){if(this.eventQueue.length>0){let o=this.currentTime;for(;this.eventQueue[0]?.time<=o;){let I=this.eventQueue.shift();I&&this.processMessageInternal(I.message,I.channelOffset)}}s=Math.max(s,0);let n=a||t[0][0].length-s;if(n>this.maxBufferSize)throw new Error(`Requested ${n} samples, but maxBufferSize is ${this.maxBufferSize}`);this.reverbInput.fill(0),this.chorusInput.fill(0),this.delayActive&&this.delayInput.fill(0),this.insertionActive&&(this.insertionInputL.fill(0),this.insertionInputR.fill(0));for(let o of this.midiChannels)o.clearVoiceCount();this._voiceCount=0;let r=this.systemParameters.voiceCap,i=t.length;for(let o=0;o<r;o++){let I=this.voices[o],l=this.midiChannels[I.channel];if(!I.isActive)continue;let B=I.channel%i;l.renderVoice(I,this.currentTime,t[B][0],t[B][1],s,n),l.voiceCount++,this._voiceCount++}if(this.systemParameters.effectsEnabled){let{chorusInput:o,delayInput:I,reverbInput:l,insertionInputR:B,insertionInputL:C}=this;this.insertionActive&&this.insertionProcessor.process(C,B,e,A,l,o,I,s,n),this.chorusProcessor.process(o,e,A,l,I,s,n),this.delayActive&&this.midiParameters.system!=="xg"&&this.delayProcessor.process(I,e,A,l,s,n),this.reverbProcessor.process(l,e,A,s,n)}this.currentTime+=n*this.sampleTime}getVoicesForPreset(t,e,A){let s=this.getCachedVoice(t,e,A);if(s!==void 0)return s;let a=new Array;for(let n of t.getVoiceParameters(e,A)){let r=n.sample;if(n.sample.getAudioData()===void 0){h.warn(`Discarding invalid sample: ${r.name}`);continue}a.push(new rr(n,e,A,this.sampleRate))}return this.setCachedVoice(t,e,A,a),a}clearCache(){this.cachedVoices.clear()}callEvent(t,e){this.eventCallbackHandler(t,e)}getInsertionSnapshot(){return{type:this.insertionProcessor.type,params:this.insertionParams.slice()}}resetInsertionParams(){this.insertionParams.fill(255),this.insertionParams[20]=40,this.insertionParams[21]=0,this.insertionParams[22]=0}resetInsertion(){this.systemParameters.insertionEffectLock||(this.insertionActive=!1,this.insertionProcessor=this.insertionFallback,this.insertionProcessor.reset(),this.resetInsertionParams(),this.insertionProcessor.sendLevelToReverb=40/127*lA,this.insertionProcessor.sendLevelToChorus=0,this.insertionProcessor.sendLevelToDelay=0,this.callEvent("effectChange",{effect:"insertion",parameter:0,value:this.insertionProcessor.type}))}setReverbMacro(t){if(this.systemParameters.reverbLock)return;let e=this.reverbProcessor;switch(e.level=64,e.preDelayTime=0,e.character=t,t){case 0:e.character=0,e.preLowpass=3,e.time=80,e.delayFeedback=0,e.preDelayTime=0;break;case 1:e.preLowpass=4,e.time=56,e.delayFeedback=0;break;case 2:e.preLowpass=0,e.time=72,e.delayFeedback=0;break;case 3:e.preLowpass=4,e.time=72,e.delayFeedback=0;break;case 4:e.preLowpass=0,e.time=64,e.delayFeedback=0;break;case 5:e.preLowpass=0,e.time=88,e.delayFeedback=0;break;case 6:e.preLowpass=0,e.time=32,e.delayFeedback=40;break;case 7:e.preLowpass=0,e.time=64,e.delayFeedback=32;break;default:h.warn(`Invalid reverb macro: ${t}`);return}this.callEvent("effectChange",{effect:"reverb",parameter:"macro",value:t})}setChorusMacro(t){if(this.systemParameters.chorusLock)return;let e=this.chorusProcessor;switch(e.level=64,e.preLowpass=0,e.delay=127,e.sendLevelToDelay=0,e.sendLevelToReverb=0,t){case 0:e.feedback=0,e.delay=112,e.rate=3,e.depth=5;break;case 1:e.feedback=5,e.delay=80,e.rate=9,e.depth=19;break;case 2:e.feedback=8,e.delay=80,e.rate=3,e.depth=19;break;case 3:e.feedback=16,e.delay=64,e.rate=9,e.depth=16;break;case 4:e.feedback=64,e.delay=127,e.rate=2,e.depth=24;break;case 5:e.feedback=112,e.delay=127,e.rate=1,e.depth=5;break;case 6:e.feedback=0,e.depth=127,e.rate=0,e.depth=127;break;case 7:e.feedback=80,e.depth=127,e.rate=0,e.depth=127;break;default:h.warn(`Invalid chorus macro: ${t}`);return}this.callEvent("effectChange",{effect:"chorus",parameter:"macro",value:t})}setDelayMacro(t){if(this.systemParameters.delayLock)return;let e=this.delayProcessor;switch(e.level=64,e.preLowpass=0,e.sendLevelToReverb=0,e.levelRight=e.levelLeft=0,e.levelCenter=127,t){case 0:e.timeCenter=97,e.timeRatioRight=e.timeRatioLeft=1,e.feedback=80;break;case 1:e.timeCenter=106,e.timeRatioRight=e.timeRatioLeft=1,e.feedback=80;break;case 2:e.timeCenter=115,e.timeRatioRight=e.timeRatioLeft=1,e.feedback=72;break;case 3:e.timeCenter=83,e.timeRatioRight=e.timeRatioLeft=1,e.feedback=72;break;case 4:e.timeCenter=105,e.timeRatioLeft=12,e.timeRatioRight=24,e.levelCenter=0,e.levelLeft=125,e.levelRight=60,e.feedback=74;break;case 5:e.timeCenter=109,e.timeRatioLeft=12,e.timeRatioRight=24,e.levelCenter=0,e.levelLeft=125,e.levelRight=60,e.feedback=71;break;case 6:e.timeCenter=115,e.timeRatioLeft=12,e.timeRatioRight=24,e.levelCenter=0,e.levelLeft=120,e.levelRight=64,e.feedback=73;break;case 7:e.timeCenter=93,e.timeRatioLeft=12,e.timeRatioRight=24,e.levelCenter=0,e.levelLeft=120,e.levelRight=64,e.feedback=72;break;case 8:e.timeCenter=109,e.timeRatioLeft=12,e.timeRatioRight=24,e.levelCenter=0,e.levelLeft=114,e.levelRight=60,e.feedback=61,e.sendLevelToReverb=36;break;case 9:e.timeCenter=110,e.timeRatioLeft=21,e.timeRatioRight=32,e.levelCenter=97,e.levelLeft=127,e.levelRight=67,e.feedback=40;break;default:h.warn(`Invalid delay macro: ${t}`);return}this.callEvent("effectChange",{effect:"delay",parameter:"macro",value:t})}getCachedVoice(t,e,A){return this.cachedVoices.get(this.getCachedVoiceIndex(t,e,A))}setCachedVoice(t,e,A,s){this.cachedVoices.set(this.getCachedVoiceIndex(t,e,A),s)}allocateNewVoices(t){for(let e=0;e<t;e++)this.voices.push(new xa(this.sampleRate,this.maxBufferSize))}registerInsertionProcessor(t){let e=new t(this.sampleRate,this.maxBufferSize);this.insertionEffects.set(e.type,e)}processMessageInternal(t,e){let A=t[0],s,a=0;switch(A>=128&&A<240?(s=A&240,a=A&15):s=A,a+=e,s){case G.noteOn:{let n=t[2];n>0?this.noteOn(a,t[1],n):this.noteOff(a,t[1]);break}case G.noteOff:this.noteOff(a,t[1]);break;case G.pitchWheel:this.pitchWheel(a,t[2]<<7|t[1]);break;case G.controllerChange:this.controllerChange(a,t[1],t[2]);break;case G.programChange:this.programChange(a,t[1]);break;case G.polyPressure:this.polyPressure(a,t[1],t[2]);break;case G.channelPressure:this.channelPressure(a,t[1]);break;case G.systemExclusive:this.systemExclusive(new ne(t.slice(1)),e);break;case G.reset:this.stopAllChannels(!1),this.reset();break;default:break}}assignVoicePriorities(){if(this.lastPriorityAssignmentTime===this.currentTime)return;h.info("%cPolyphony exceeded, stealing voices",d.warn),this.lastPriorityAssignmentTime=this.currentTime;let t=this.systemParameters.voiceCap;for(let e=0;e<t;e++){let A=this.voices[e];A.priority=0,this.midiChannels[A.channel].drumChannel&&(A.priority+=5),A.isInRelease&&(A.priority-=5),A.priority+=A.velocity/25,A.priority-=A.volEnv.state,A.isInRelease&&(A.priority-=5),A.priority-=A.volEnv.attenuationCb/200}}updatePresetList(){let t=this.soundBankManager.presetList;this.clearCache(),this.callEvent("presetListChange",t),this.getDefaultPresets();for(let e of this.midiChannels){let A=e.systemParameters.presetLock;e.setSystemParameter("presetLock",!1),e.programChange(e.patch.program),e.setSystemParameter("presetLock",A)}this.reset()}getDefaultPresets(){this.defaultPreset=this.soundBankManager.getPreset({bankLSB:0,bankMSB:0,program:0,isGMGSDrum:!1},"xg"),this.drumPreset=this.soundBankManager.getPreset({bankLSB:0,bankMSB:0,program:0,isGMGSDrum:!0},"gs")}getCachedVoiceIndex(t,e,A){let s=t.bankMSB,a=t.bankLSB,{isGMGSDrum:n,program:r}=t;return n&&(s=128,a=0),s+a*128+r*16384+2097152*e+268435456*A}},Tn=class{processorInitialized=FA.isInitialized;sampleRate;onEventCall;process;processSplit;systemExclusive;controllerChange;noteOn;noteOff;polyPressure;channelPressure;pitchWheel;programChange;processMessage;synthCore;savedSnapshot;constructor(t,e={}){let A=bA(e,wa);if(this.sampleRate=t,!Number.isFinite(A.initialTime)||!Number.isFinite(t))throw new TypeError(`Initial time or sample rate is invalid! initial time: ${A.initialTime}, sample rate: ${t}`);this.synthCore=new di(this.callEvent.bind(this),this.missingPreset.bind(this),this.sampleRate,A);let s=this.synthCore;this.process=s.process.bind(s),this.processSplit=s.processSplit.bind(s),this.systemExclusive=s.systemExclusive.bind(s),this.controllerChange=s.controllerChange.bind(s),this.noteOn=s.noteOn.bind(s),this.noteOff=s.noteOff.bind(s),this.polyPressure=s.polyPressure.bind(s),this.channelPressure=s.channelPressure.bind(s),this.pitchWheel=s.pitchWheel.bind(s),this.programChange=s.programChange.bind(s),this.processMessage=s.processMessage.bind(s);for(let a=0;a<16;a++)this.synthCore.createMIDIChannel(!1);this.processorInitialized.then(()=>{h.info("%cSpessaSynth is ready!",d.recognized)})}get midiChannels(){return this.synthCore.midiChannels}get midiParameters(){return this.synthCore.midiParameters}get systemParameters(){return this.synthCore.systemParameters}get voiceCount(){return this.synthCore.voiceCount}get currentTime(){return this.synthCore.currentTime}get reverbProcessor(){return this.synthCore.reverbProcessor}get chorusProcessor(){return this.synthCore.chorusProcessor}get delayProcessor(){return this.synthCore.delayProcessor}get soundBankManager(){return this.synthCore.soundBankManager}get keyModifierManager(){return this.synthCore.keyModifierManager}onMissingPreset=(t,e)=>{h.warn(`No preset found for ${je.toMIDIString(t)}! Did you forget to add a sound bank?`)};lockMIDIParameter(t,e){this.synthCore.lockMIDIParameter(t,e)}setSystemParameter(t,e){this.synthCore.setSystemParameter(t,e)}reset(){this.synthCore.reset()}applySnapshot(t){this.savedSnapshot=t,ba.call(this.synthCore,t)}getSnapshot(){return Ra.call(this.synthCore)}setEmbeddedSoundBank(t,e){let A=jt.fromArrayBuffer(t);this.synthCore.soundBankManager.addSoundBank(A,aA,e);let s=this.synthCore.soundBankManager.priorityOrder;s.pop(),s.unshift(aA),this.synthCore.soundBankManager.priorityOrder=s,this.savedSnapshot!==void 0&&this.applySnapshot(this.savedSnapshot),h.info(`%cEmbedded sound bank set at offset %c${e}`,d.recognized,d.value)}clearEmbeddedSoundBank(){this.synthCore.soundBankManager.soundBankList.some(t=>t.id===aA)&&this.synthCore.soundBankManager.deleteSoundBank(aA)}createMIDIChannel(){this.synthCore.createMIDIChannel(!0)}stopAllChannels(t=!1){this.synthCore.stopAllChannels(t)}destroySynthProcessor(){this.synthCore.destroySynthProcessor()}clearCache(){this.synthCore.clearCache()}getVoicesForPreset(t,e,A){return this.synthCore.getVoicesForPreset(t,e,A)}callEvent(t,e){this.onEventCall?.({type:t,data:e})}missingPreset(t,e){return this.onMissingPreset(t,e)}};var GA=sn.ConsoleColors;var Un="spessasynth-worklet-processor";function xn(t,e){return{...e,...t}}var Hn={skipToFirstNoteOn:!0,initialPlaybackRate:1};var ps=class extends RA{events=[];constructor(e){super(),super.copyFrom(e),this.events=[]}},LA=class t extends Mt{tracks;timeline=[];embeddedSoundBank=void 0;embeddedSoundBankSize;constructor(e){super(),super.copyMetadataFrom(e),this.tracks=e.tracks.map(A=>new ps(A)),this.embeddedSoundBankSize=e instanceof t?e.embeddedSoundBankSize:e?.embeddedSoundBank?.byteLength}};var PA={shuffleOn:1,shuffleOff:2,index:3};var On=-1;var Yn=1,NA=class{synthesizer;sequencers=new Array;post;lastSequencerSync=0;voiceCounts=new Array(16).fill(0);alive=!1;eventsEnabled;constructor(e,A,s){this.synthesizer=new Tn(e,A),this.eventsEnabled=A.eventsEnabled??!1,this.post=s,this.synthesizer.onEventCall=a=>{if(a.type==="channelAdded"){let n=this.synthesizer.midiChannels.length;for(let r=this.voiceCounts.length;r<n;r++)this.voiceCounts.push(0)}this.post({type:"eventCall",data:a,currentTime:this.synthesizer.currentTime})}}createNewSequencer(){let e=new on(this.synthesizer),A=this.sequencers.length;this.sequencers.push(e),e.onEventCall=s=>{if(this.eventsEnabled){if(s.type==="songListChange"){let n=s.data.newSongList.map(r=>new LA(r));this.post({type:"sequencerReturn",data:{type:s.type,data:{newSongList:n,shuffledSongIndexes:e.shuffledSongIndexes},id:A},currentTime:this.synthesizer.currentTime});return}this.post({type:"sequencerReturn",data:{...s,id:A},currentTime:this.synthesizer.currentTime})}}}postReady(e,A,s=[]){this.post({type:"isFullyInitialized",data:{type:e,data:A},currentTime:this.synthesizer.currentTime},s)}postProgress(e,A){this.post({type:"renderingProgress",data:{type:e,data:A},currentTime:this.synthesizer.currentTime})}destroy(){this.synthesizer.destroySynthProcessor(),delete this.synthesizer,delete this.sequencers}handleMessage(e){let A=e.channelNumber,s;if(A>=0&&(s=this.synthesizer.midiChannels[A],s===void 0)){h.warn(`Trying to access channel ${A} which does not exist... ignoring!`);return}switch(e.type){case"midiMessage":{this.synthesizer.processMessage(e.data.messageData,e.data.channelOffset,e.data.options);break}case"ccReset":{this.synthesizer.reset();break}case"stopAll":{A===On?this.synthesizer.stopAllChannels(e.data===1):s?.stopAllNotes(e.data===1);break}case"addNewChannel":{this.synthesizer.createMIDIChannel();break}case"lockGlobalMIDIParameter":{this.synthesizer.lockMIDIParameter(e.data.parameter,e.data.isLocked);break}case"setGlobalSystemParameter":{this.synthesizer.setSystemParameter(e.data.parameter,e.data.value);break}case"lockChannelMIDIParameter":{s?.lockMIDIParameter(e.data.parameter,e.data.isLocked);break}case"setChannelSystemParameter":{s?.setSystemParameter(e.data.parameter,e.data.value);break}case"setDrums":{s?.setDrums(e.data);break}case"lockController":{s?.lockController(e.data.controller,e.data.isLocked);break}case"sequencerSpecific":{let a=this.sequencers[e.data.id];if(!a)return;let n=e.data;switch(n.type){default:break;case"loadNewSongList":{try{let i=n.data.map(o=>"duration"in o?Mt.copyFrom(o):Mt.fromArrayBuffer(o.binary,o.fileName));a.loadNewSongList(i)}catch(r){console.error(r),this.post({type:"sequencerReturn",data:{type:"midiError",data:r,id:e.data.id},currentTime:this.synthesizer.currentTime})}break}case"pause":{a.pause();break}case"play":{a.play();break}case"setTime":{a.currentTime=n.data;break}case"changeMIDIMessageSending":{a.externalMIDIPlayback=n.data;break}case"setPlaybackRate":{a.playbackRate=n.data;break}case"setLoopCount":{a.loopCount=n.data;break}case"changeSong":{switch(n.data.changeType){case PA.shuffleOff:{a.shuffleMode=!1;break}case PA.shuffleOn:{a.shuffleMode=!0;break}case PA.index:{n.data.data!==void 0&&(a.songIndex=n.data.data);break}}break}case"getMIDI":{if(!a.midiData)throw new Error("No MIDI is loaded!");this.post({type:"sequencerReturn",data:{type:"getMIDI",data:a.midiData,id:e.data.id},currentTime:this.synthesizer.currentTime});break}case"setSkipToFirstNote":{a.skipToFirstNoteOn=n.data;break}}break}case"soundBankManager":{try{let a=this.synthesizer.soundBankManager,n=e.data,r;switch(n.type){case"addSoundBank":{r=jt.fromArrayBuffer(n.data.soundBankBuffer),a.addSoundBank(r,n.data.id,n.data.bankOffset),this.postReady("soundBankManager",null);break}case"deleteSoundBank":{a.deleteSoundBank(n.data),this.postReady("soundBankManager",null);break}case"rearrangeSoundBanks":a.priorityOrder=n.data,this.postReady("soundBankManager",null)}}catch(a){this.post({type:"soundBankError",data:a,currentTime:this.synthesizer.currentTime})}break}case"keyModifierManager":{let a=e.data,n=this.synthesizer.keyModifierManager;switch(a.type){default:return;case"addMapping":{n.addMapping(a.data.channel,a.data.midiNote,a.data.mapping);break}case"clearMappings":{n.clearMappings();break}case"deleteMapping":n.deleteMapping(a.data.channel,a.data.midiNote)}break}case"requestSynthesizerSnapshot":{let a=this.synthesizer.getSnapshot();this.postReady("synthesizerSnapshot",a);break}case"requestNewSequencer":{this.createNewSequencer();break}case"setLogLevel":{h.setLogLevel(e.data.enableInfo,e.data.enableWarning,e.data.enableGroup);break}case"destroyWorklet":{this.alive=!1,this.synthesizer.destroySynthProcessor(),this.destroy();break}default:{h.warn("Unrecognized event!",e);break}}}};var TA=class extends NA{alive=!0;oneOutputMode;port;constructor(e,A,s,a){super(e,{effectsEnabled:!a.oneOutput,eventsEnabled:a?.eventsEnabled,initialTime:A},(n,r)=>{s.postMessage(n,r)}),this.port=s,this.oneOutputMode=a.oneOutput,this.synthesizer.processorInitialized.then(()=>{this.port.onmessage=n=>this.handleMessage(n.data),this.postReady("sf3Decoder",null)})}process(e,A){if(!this.alive)return!1;for(let i of this.sequencers)i.processTick();if(this.oneOutputMode){let i=A[0],o=[];for(let I=0;I<32;I+=2)o.push([i[I],i[I+1]]);this.synthesizer.setSystemParameter("effectsEnabled",!1),this.synthesizer.processSplit(o,i[0],i[0])}else this.synthesizer.processSplit(A.slice(1),A[0][0],A[0][1]);let s=this.synthesizer.currentTime;if(this.eventsEnabled&&s-this.lastSequencerSync>Yn){for(let i=0;i<this.sequencers.length;i++)this.post({type:"sequencerReturn",data:{type:"sync",data:this.sequencers[i].currentTime,id:i},currentTime:s});this.lastSequencerSync=s}let a=this.synthesizer.midiChannels,n=this.voiceCounts,r=!1;for(let i=0;i<a.length;i++)r||=a[i].voiceCount!==n[i],n[i]=a[i].voiceCount;return r&&this.post({type:"voiceCountChange",currentTime:s,data:n}),!0}handleMessage(e){if(e.type==="startOfflineRender"){this.startOfflineRender(e.data);return}super.handleMessage(e)}startOfflineRender(e){this.sequencers.length===0&&this.createNewSequencer();let A=this.sequencers[0];for(let[a,n]of e.soundBankList.entries())try{this.synthesizer.soundBankManager.addSoundBank(jt.fromArrayBuffer(n.soundBankBuffer),`bank-${a}`,n.bankOffset)}catch(r){this.post({type:"soundBankError",data:r,currentTime:this.synthesizer.currentTime})}e.snapshot!==void 0&&this.synthesizer.applySnapshot(e.snapshot),h.info("%cStarting to render the audio data!",GA.info),A.loopCount=e.loopCount,this.synthesizer.setSystemParameter("autoAllocateVoices",!0);let s=xn(e.sequencerOptions,Hn);A.skipToFirstNoteOn=s.skipToFirstNoteOn,A.playbackRate=s.initialPlaybackRate;try{A.loadNewSongList([Mt.copyFrom(e.midiSequence)]),A.play()}catch(a){console.error(a),this.post({type:"sequencerReturn",data:{type:"midiError",data:a,id:0},currentTime:this.synthesizer.currentTime})}this.postReady("startOfflineRender",null)}};var ys=class extends AudioWorkletProcessor{core;constructor(e){super(),this.core=new TA(sampleRate,currentTime,this.port,e.processorOptions)}process(e,A){return this.core.process(e,A)}};registerProcessor(Un,ys);h.info("%cProcessor successfully registered!",GA.recognized);
16
+ (${e})`,d.warn,d.value,d.unrecognized)}toSFDestination(){let e=this.shortScale;switch(this.destination){default:case P.none:return;case P.pan:return c.pan;case P.gain:return{gen:c.initialAttenuation,newAmount:-e};case P.pitch:return c.fineTune;case P.keyNum:return c.overridingRootKey;case P.volEnvDelay:return c.delayVolEnv;case P.volEnvAttack:return c.attackVolEnv;case P.volEnvHold:return c.holdVolEnv;case P.volEnvDecay:return c.decayVolEnv;case P.volEnvSustain:return{gen:c.sustainVolEnv,newAmount:1e3-e};case P.volEnvRelease:return c.releaseVolEnv;case P.modEnvDelay:return c.delayModEnv;case P.modEnvAttack:return c.attackModEnv;case P.modEnvHold:return c.holdModEnv;case P.modEnvDecay:return c.decayModEnv;case P.modEnvSustain:return{gen:c.sustainModEnv,newAmount:1e3-e};case P.modEnvRelease:return c.releaseModEnv;case P.filterCutoff:return c.initialFilterFc;case P.filterQ:return c.initialFilterQ;case P.chorusSend:return c.chorusEffectsSend;case P.reverbSend:return c.reverbEffectsSend;case P.modLfoFreq:return c.freqModLFO;case P.modLfoDelay:return c.delayModLFO;case P.vibLfoFreq:return c.freqVibLFO;case P.vibLfoDelay:return c.delayVibLFO}}},pn=class extends Ot{connectionBlocks=new Array;mode="dls2";get length(){return this.connectionBlocks.length}copyFrom(t){this.mode=t.mode;for(let e of t.connectionBlocks)this.connectionBlocks.push(Jt.copyFrom(e))}fromSFZone(t){this.mode="dls2";let e=new $t;e.copyFrom(t);for(let A of e.generators){let s;switch(A.type){default:continue;case c.keyNumToVolEnvDecay:s=c.decayVolEnv;break;case c.keyNumToVolEnvHold:s=c.holdVolEnv;break;case c.keyNumToModEnvDecay:s=c.decayModEnv;break;case c.keyNumToModEnvHold:s=c.holdModEnv}let a=e.getGenerator(s,void 0),n=A.value*-128;if(a===void 0)continue;let r=a-60/128*n;e.setGenerator(A.type,n,!1),e.setGenerator(s,r,!1)}for(let A of e.generators)Jt.fromSFGenerator(A,this);for(let A of e.modulators)Jt.fromSFModulator(A,this)}read(t){let e=U.findListType(t,"lart"),A=U.findListType(t,"lar2");if(e)for(this.mode="dls1";e.data.currentIndex<e.data.length;){let s=U.read(e.data);if(s.header!=="art1"&&s.header!=="art2")continue;let a=s.data,n=X(a,4);n!==8&&h.warn(`CbSize in articulation mismatch. Expected 8, got ${n}`);let r=X(a,4);for(let i=0;i<r;i++)this.connectionBlocks.push(Jt.read(a))}else if(A)for(this.mode="dls2";A.data.currentIndex<A.data.length;){let s=U.read(A.data);if(s.header!=="art1"&&s.header!=="art2")continue;let a=s.data,n=X(a,4);n!==8&&h.warn(`CbSize in articulation mismatch. Expected 8, got ${n}`);let r=X(a,4);for(let i=0;i<r;i++)this.connectionBlocks.push(Jt.read(a))}}write(){let t=new ne(8);ge(t,8),ge(t,this.connectionBlocks.length);let e=this.connectionBlocks.map(s=>s.write()),A=U.getParts(this.mode==="dls2"?"art2":"art1",[t,...e]);return U.getParts(this.mode==="dls2"?"lar2":"lart",A,!0)}toSFZone(t){let e=(A,s,a,n)=>{let r=A/-128;if(t.setGenerator(s,r),r<=120){let i=Math.round(.46875*A),o=this.connectionBlocks.find(I=>I.isStaticParameter&&I.destination===n);o&&t.setGenerator(a,i+o.shortScale)}};for(let A of this.connectionBlocks){let s=A.shortScale,a=A.source.source,n=A.control.source,r=A.destination;if(A.isStaticParameter){A.toSFGenerator(t);continue}if(n===Z.none)if(a===Z.keyNum){if(r===P.pitch){t.setGenerator(c.scaleTuning,s/128);continue}if(r===P.modEnvHold||r===P.modEnvDecay||r===P.volEnvHold||r===P.volEnvDecay)continue}else{let i=A.toCombinedSFDestination();if(i){t.setGenerator(i,s);continue}}A.toSFModulator(t)}for(let A of this.connectionBlocks){if(A.source.source!==Z.keyNum)continue;let s=A.shortScale;switch(A.destination){default:case P.volEnvHold:e(s,c.keyNumToVolEnvHold,c.holdVolEnv,P.volEnvHold);break;case P.volEnvDecay:e(s,c.keyNumToVolEnvDecay,c.decayVolEnv,P.volEnvDecay);break;case P.modEnvHold:e(s,c.keyNumToModEnvHold,c.holdModEnv,P.modEnvHold);break;case P.modEnvDecay:e(s,c.keyNumToModEnvDecay,c.decayModEnv,P.modEnvDecay);break}}if(this.mode==="dls1"){t.setGenerator(c.delayVibLFO,t.getGenerator(c.delayModLFO,null)),t.setGenerator(c.freqVibLFO,t.getGenerator(c.freqModLFO,null)),t.setGenerator(c.vibLfoToPitch,t.getGenerator(c.modLfoToPitch,null)),t.setGenerator(c.modLfoToPitch,null);for(let A of t.modulators)A.destination===c.modLfoToPitch&&(A.destination=c.vibLfoToPitch)}}},KA=class CA{channel=1;tableIndex;fusOptions=0;phaseGroup=0;constructor(e){this.tableIndex=e}static copyFrom(e){let A=new CA(e.tableIndex);return A.channel=e.channel,A.phaseGroup=e.phaseGroup,A.fusOptions=e.fusOptions,A}static read(e){let A=X(e.data,2),s=X(e.data,2),a=X(e.data,4),n=new CA(X(e.data,4));return n.channel=a,n.fusOptions=A,n.phaseGroup=s,n}static fromSFZone(e,A){let s=e.indexOf(A.sample);if(s===-1)throw new Error(`Wave link error: Sample ${A.sample.name} does not exist in the sample list.`);let a=new CA(s);switch(A.sample.sampleType){default:case Fe.leftSample:case Fe.monoSample:a.channel=Math.trunc(1);break;case Fe.rightSample:a.channel=2}return a}write(){let e=new ne(12);return se(e,this.fusOptions),se(e,this.phaseGroup),ge(e,this.channel),ge(e,this.tableIndex),U.write("wlnk",e)}},BA=class Pt extends Ot{articulation=new pn;keyRange={min:0,max:127};velRange={min:0,max:127};keyGroup=0;fusOptions=0;usLayer=0;waveSample;waveLink;constructor(e,A){super(),this.waveSample=A,this.waveLink=e}static copyFrom(e){let A=new Pt(KA.copyFrom(e.waveLink),xt.copyFrom(e.waveSample));return A.keyGroup=e.keyGroup,A.keyRange={...e.keyRange},A.velRange={...e.velRange},A.usLayer=e.usLayer,A.fusOptions=e.fusOptions,A.articulation.copyFrom(e.articulation),A}static read(e,A){let s=this.verifyAndReadList(A,"rgn ","rgn2"),a=s.find(S=>S.header==="wsmp"),n=a?xt.read(a):void 0,r=s.find(S=>S.header==="wlnk");if(!r){h.warn("Invalid DLS region: missing 'wlnk' chunk! Discarding...");return}let i=KA.read(r),o=s.find(S=>S.header==="rgnh");if(!o){h.warn("Invalid DLS region: missing 'rgnh' chunk! Discarding...");return}let I=e[i.tableIndex];I||Pt.parsingError(`Invalid sample index: ${i.tableIndex}. Samples available: ${e.length}`),n??=I.waveSample;let l=new Pt(i,n),B=X(o.data,2),C=X(o.data,2),g=X(o.data,2),E=X(o.data,2);return g===0&&E===0&&(E=127,g=0),l.keyRange.max=C,l.keyRange.min=B,l.velRange.max=E,l.velRange.min=g,l.fusOptions=X(o.data,2),l.keyGroup=X(o.data,2),o.data.length-o.data.currentIndex>=2&&(l.usLayer=X(o.data,2)),l.articulation.read(s),l}static fromSFZone(e,A){let s=xt.fromSFZone(e),a=new Pt(KA.fromSFZone(A,e),s);return a.keyRange.min=Math.max(e.keyRange.min,0),a.keyRange.max=e.keyRange.max,a.velRange.min=Math.max(e.velRange.min,0),a.velRange.max=e.velRange.max,a.keyGroup=e.getGenerator(c.exclusiveClass,0),a.articulation.fromSFZone(e),a}write(){let e=[this.writeHeader(),this.waveSample.write(),this.waveLink.write(),...this.articulation.write()];return U.getParts("rgn2",e,!0)}toSFZone(e,A){let s=A[this.waveLink.tableIndex];s||Pt.parsingError(`Invalid sample index: ${this.waveLink.tableIndex}`);let a=e.createZone(s);return a.keyRange=this.keyRange,a.velRange=this.velRange,this.keyRange.max===127&&this.keyRange.min===0&&(a.keyRange.min=-1),this.velRange.max===127&&this.velRange.min===0&&(a.velRange.min=-1),this.keyGroup!==0&&a.setGenerator(c.exclusiveClass,this.keyGroup),this.waveSample.toSFZone(a,s),this.articulation.toSFZone(a),a.generators=a.generators.filter(n=>n.value!==We[n.type].def),a}writeHeader(){let e=new ne(14);return se(e,Math.max(this.keyRange.min,0)),se(e,this.keyRange.max),se(e,Math.max(this.velRange.min,0)),se(e,this.velRange.max),se(e,this.fusOptions),se(e,this.keyGroup),se(e,this.usLayer),U.write("rgnh",e)}},VA=class EA extends Ot{articulation=new pn;regions=new Array;name="Unnamed";bankLSB=0;bankMSB=0;isGMGSDrum=!1;program=0;static copyFrom(e){let A=new EA;A.name=e.name,A.isGMGSDrum=e.isGMGSDrum,A.bankMSB=e.bankMSB,A.bankLSB=e.bankLSB,A.program=e.program,A.articulation.copyFrom(e.articulation);for(let s of e.regions)A.regions.push(BA.copyFrom(s));return A}static read(e,A){let s=this.verifyAndReadList(A,"ins "),a=s.find(B=>B.header==="insh");if(!a)throw h.groupEnd(),new Error("No instrument header!");let n="",r=U.findListType(s,"INFO");if(r){let B=U.read(r.data);for(;B.header!=="INAM";)B=U.read(r.data);n=de(B.data,B.data.length).trim()}n.length===0&&(n="Unnamed Instrument");let i=new EA;i.name=n;let o=X(a.data,4),I=X(a.data,4);i.program=X(a.data,4)&127,i.bankMSB=I>>>8&127,i.bankLSB=I&127,i.isGMGSDrum=I>>>31>0,h.groupCollapsed(`%cParsing %c"${n}"%c...`,d.info,d.recognized,d.info);let l=U.findListType(s,"lrgn");if(!l)throw h.groupEnd(),new Error("No region list!");i.articulation.read(s);for(let B=0;B<o;B++){let C=U.read(l.data);this.verifyHeader(C,"LIST");let g=de(C.data,4);g!=="rgn "&&g!=="rgn2"&&(h.groupEnd(),this.parsingError(`Invalid DLS region! Expected "rgn " or "rgn2" got "${g}"`));let E=BA.read(e,C);E&&i.regions.push(E)}return h.groupEnd(),i}static fromSFPreset(e,A){let s=new EA;s.name=e.name,s.bankLSB=e.bankLSB,s.bankMSB=e.bankMSB,s.program=e.program,s.isGMGSDrum=e.isGMGSDrum,h.group(`%cConverting %c${e.toString()}%c to DLS...`,d.info,d.value,d.info);let a=e.toFlattenedInstrument();for(let n of a.zones)s.regions.push(BA.fromSFZone(n,A));return h.groupEnd(),s}write(){h.groupCollapsed(`%cWriting %c${this.name}%c...`,d.info,d.recognized,d.info);let e=[this.writeHeader()],A=this.regions.flatMap(a=>a.write());e.push(...U.getParts("lrgn",A,!0)),this.articulation.length>0&&e.push(...this.articulation.write());let s=U.write("INAM",et(this.name,!0));return e.push(U.write("INFO",s,!1,!0)),h.groupEnd(),U.writeParts("ins ",e,!0)}toSFPreset(e){let A=new zt(e);A.name=this.name,A.bankMSB=this.bankMSB,A.bankLSB=this.bankLSB,A.isGMGSDrum=this.isGMGSDrum,A.program=this.program;let s=new _t;s.name=this.name,A.createZone(s),this.articulation.toSFZone(s.globalZone);for(let a of this.regions)a.toSFZone(s,e.samples);s.globalize(),s.globalZone.modulators.some(a=>a.destination===c.reverbEffectsSend)||s.globalZone.addModulators(we.copyFrom(un)),s.globalZone.modulators.some(a=>a.destination===c.chorusEffectsSend)||s.globalZone.addModulators(we.copyFrom(mn)),s.globalZone.generators=s.globalZone.generators.filter(a=>a.value!==We[a.type].def),e.addPresets(A),e.addInstruments(s)}writeHeader(){let e=new ne(12);ge(e,this.regions.length);let A=(this.bankMSB&127)<<8|this.bankLSB&127;return this.isGMGSDrum&&(A|=1<<31),ge(e,A),ge(e,this.program&127),U.write("insh",e)}},gs={software:"SpessaSynth"},yn=class Is extends Ot{samples=new Array;instruments=new Array;soundBankInfo={name:"Unnamed DLS sound bank",creationDate:new Date,software:"SpessaSynth",soundEngine:"DLS Level 2.2",product:"SpessaSynth DLS",version:{major:2,minor:4}};static read(e){if(!e)throw new Error("No data provided!");let A=new ne(e);h.group("%cParsing DLS file...",d.info);let s=U.read(A,!1);this.verifyHeader(s,"RIFF"),this.verifyText(de(A,4).toLowerCase(),"dls ");let a=[];for(;A.currentIndex<A.length;)a.push(U.read(A));let n=new Is,r=U.findListType(a,"INFO");if(r)for(;r.data.currentIndex<r.data.length;){let E=U.read(r.data),S=E.header,k=de(E.data,E.size);switch(S){case"INAM":n.soundBankInfo.name=k;break;case"ICRD":n.soundBankInfo.creationDate=Es(k);break;case"ICMT":n.soundBankInfo.comment=k;break;case"ISBJ":n.soundBankInfo.subject=k;break;case"ICOP":n.soundBankInfo.copyright=k;break;case"IENG":n.soundBankInfo.engineer=k;break;case"IPRD":n.soundBankInfo.product=k;break;case"ISFT":n.soundBankInfo.software=k}}this.printInfo(n);let i=a.find(E=>E.header==="colh");if(!i)return this.parsingError("No colh chunk!"),5;let o=X(i.data,4);h.info(`%cInstruments amount: %c${o}`,d.info,d.recognized);let I=U.findListType(a,"wvpl");if(!I)return this.parsingError("No wvpl chunk!"),5;let l=this.verifyAndReadList(I,"wvpl");for(let E of l)n.samples.push(Ls.read(E));let B=U.findListType(a,"lins");if(!B)return this.parsingError("No lins chunk!"),5;let C=this.verifyAndReadList(B,"lins");h.groupCollapsed("%cLoading instruments...",d.info),C.length!==o&&h.warn(`Colh reported invalid amount of instruments. Detected ${C.length}, expected ${o}`);for(let E of C)n.instruments.push(VA.read(n.samples,E));h.groupEnd();let g=a.find(E=>E.header==="pgal");if(g){h.info("%cFound the instrument aliasing chunk!",d.recognized);let E=g.data;(E[0]!==0||E[1]!==1||E[2]!==2||E[3]!==3)&&(E.currentIndex+=4);let S=n.instruments.find(u=>De.isXGDrum(u.bankMSB)||u.isGMGSDrum);if(!S)return h.warn("MobileBAE aliasing chunk without a drum preset. Aborting!"),n;let k=E.slice(E.currentIndex,E.currentIndex+128);E.currentIndex+=128;for(let u=0;u<128;u++){let M=k[u];if(M===u)continue;let w=S.regions.find(F=>F.keyRange.max===M&&F.keyRange.min===M);if(!w){h.warn(`Invalid drum alias ${u} to ${M}: region does not exist.`);continue}let R=BA.copyFrom(w);R.keyRange.max=u,R.keyRange.min=u,S.regions.push(R)}for(E.currentIndex+=4;E.currentIndex<E.length;){let u=X(E,2),M=u&127,w=u>>7&127,R=E[E.currentIndex++],F=E[E.currentIndex++];F!==0&&h.warn(`Invalid alias byte. Expected 0, got ${F}`);let N=X(E,2),m=N&127,p=N>>7&127,y=E[E.currentIndex++];F=E[E.currentIndex++],F!==0&&h.warn(`Invalid alias header. Expected 0, got ${F}`);let V=n.instruments.find(q=>q.bankLSB===m&&q.bankMSB===p&&q.program===y&&!q.isGMGSDrum);if(!V){h.warn(`Invalid alias. Missing instrument: ${m}:${p}:${y}`);continue}let Y=VA.copyFrom(V);Y.bankMSB=w,Y.bankLSB=M,Y.program=R,n.instruments.push(Y)}}return h.info(`%cParsing finished! %c"${n.soundBankInfo.name||"UNNAMED"}"%c has %c${n.instruments.length}%c instruments and %c${n.samples.length}%c samples.`,d.info,d.recognized,d.info,d.recognized,d.info,d.recognized,d.info),h.groupEnd(),n}static fromSF(e,A){h.groupCollapsed("%cSaving SF2 to DLS level 2...",d.info);let s=new Is;s.soundBankInfo={...e.soundBankInfo};for(let a=0;a<e.samples.length;a++){let n=e.samples[a];s.samples.push(Ls.fromSFSample(n)),A?.(a/e.samples.length)}for(let a of e.presets)s.instruments.push(VA.fromSFPreset(a,e.samples));return h.info("%cConversion complete!",d.recognized),h.groupEnd(),s}static printInfo(e){for(let[A,s]of Object.entries(e.soundBankInfo))if(typeof s=="object"&&"major"in s){let a=s;h.info(`%c${A}: %c"${a.major}.${a.minor}"`,d.info,d.recognized)}else h.info(`%c${A}: %c${s.toLocaleString()}`,d.info,d.recognized)}write(e=gs){let A=bA(e,gs);h.groupCollapsed("%cSaving DLS...",d.info);let s=new ne(4);ge(s,this.instruments.length);let a=U.write("colh",s);h.groupCollapsed("%cWriting instruments...",d.info);let n=U.getParts("lins",this.instruments.map(u=>u.write()),!0);h.info("%cSuccess!",d.recognized),h.groupEnd(),h.groupCollapsed("%cWriting WAVE samples...",d.info);let r=0,i=[],o=[],I=0;for(let u of this.samples){let M=u.write();A.progressFunction?.(I/this.samples.length),h.info(`%cWrote sample %c${I}. ${u.name}%c of %c${this.samples.length}.`,d.info,d.recognized,d.info,d.recognized),i.push(r),r+=M.reduce((w,R)=>w+R.length,0),o.push(...M),I++}let l=U.getParts("wvpl",o,!0);h.info("%cSucceeded!",d.recognized);let B=new ne(8+4*i.length);ge(B,8),ge(B,i.length);for(let u of i)ge(B,u);let C=U.write("ptbl",B);this.soundBankInfo.software=A.software;let g=[],E=this.soundBankInfo,S=(u,M)=>{M&&g.push(...U.getParts(u,[et(M,!0)]))};S("INAM",E.name),S("ICMT",E.comment),S("ICOP",E.copyright),S("ICRD",Bs(E.creationDate)),S("IENG",E.engineer),S("IPRD",E.product),S("ISFT",A.software),S("ISBJ",E.subject),h.info("%cCombining everything...");let k=U.writeParts("RIFF",[et("DLS "),a,...n,C,...l,...U.getParts("INFO",g,!0)]);return h.info("%cSaved successfully!",d.recognized),h.groupEnd(),k.buffer}toSF(){h.group("%cConverting DLS to SF2...",d.info);let e=new Sn("dls");e.soundBankInfo.version.minor=4,e.soundBankInfo.version.major=2,e.soundBankInfo={...this.soundBankInfo};for(let A of this.samples)A.toSFSample(e);for(let A of this.instruments)A.toSFPreset(e);return e.flush(),h.info("%cConversion complete!",d.recognized),h.groupEnd(),e}},Sn=class dA{static isSF3DecoderReady=vA.isInitialized;type;soundBankInfo={name:"Unnamed",creationDate:new Date,software:"SpessaSynth",soundEngine:"E-mu 10K2",version:{major:2,minor:4}};presets=[];samples=[];instruments=[];defaultModulators=En.map(we.copyFrom.bind(we));customDefaultModulators=!1;constructor(e="sf2"){this.type=e}_isXGBank=!1;get isXGBank(){return this._isXGBank}static mergeSoundBanks(...e){let A=e.shift();if(!A)throw new Error("No sound banks provided!");let s=A.presets;for(;e.length>0;){let n=e?.shift()?.presets;if(n)for(let r of n)s.some(i=>r.matches(i))||s.push(r)}let a=new dA;return a.addCompletePresets(s),a.soundBankInfo={...A.soundBankInfo},a}static getSampleSoundBankFile(){let e=new dA,A=new Float32Array(128);for(let r=0;r<128;r++)A[r]=r/128*2-1;let s=new qa;s.name="Saw",s.originalKey=65,s.pitchCorrection=20,s.loopEnd=127,s.setAudioData(A,44100),e.addSamples(s);let a=new _t;a.name="Saw Wave",a.globalZone.addGenerators(new Pe(c.initialAttenuation,375),new Pe(c.releaseVolEnv,-1e3),new Pe(c.sampleModes,1)),a.createZone(s),a.createZone(s).setGenerator(c.fineTune,-9),e.addInstruments(a);let n=new zt(e);return n.name="Saw Wave",n.createZone(a),e.addPresets(n),e.soundBankInfo.name="Dummy",e.flush(),e.writeSF2()}static copyFrom(e){let A=new dA;for(let s of e.presets)A.clonePreset(s);return A.soundBankInfo={...e.soundBankInfo},A}addCompletePresets(e){this.addPresets(...e);let A=[];for(let a of e)for(let n of a.zones)n.instrument&&!A.includes(n.instrument)&&A.push(n.instrument);this.addInstruments(...A);let s=[];for(let a of A)for(let n of a.zones)n.sample&&!s.includes(n.sample)&&s.push(n.sample);this.addSamples(...s)}async setSampleFormat(e){let A=0,s=e.format,a=e.progressFunction;for(let n of this.samples){switch(s){default:case"pcm":n.setAudioData(n.getAudioData(),n.sampleRate);break;case"compressed":{let r=e.compressionFunction;if(!r)throw new Error(`No compression function supplied but '${s}' was requested.`);await n.compressSample(r)}}A++,a?.(A/this.samples.length),h.info(`%cEncoded sample %c${A}. ${n.name}%c of %c${this.samples.length}%c. Compressed: %c${n.isCompressed}%c.`,d.info,d.recognized,d.info,d.recognized,d.info,n.isCompressed?d.recognized:d.unrecognized,d.info)}switch(s){default:case"pcm":this.soundBankInfo.version.major=2,this.soundBankInfo.version.minor=4;break;case"compressed":this.soundBankInfo.version.major=3,this.soundBankInfo.version.minor=0}}writeDLS(e=gs){let A=e.progressFunction;return yn.fromSF(this,A?s=>A(s/2):void 0).write({...e,progressFunction:A?s=>A(.5+s/2):void 0})}writeSF2(e=Qn){return Wa(this,e)}addPresets(...e){this.presets.push(...e)}addInstruments(...e){this.instruments.push(...e)}addSamples(...e){this.samples.push(...e)}cloneSample(e){let A=this.samples.find(a=>a.name===e.name);if(A)return A;let s=new FA(e.name,e.sampleRate,e.originalKey,e.pitchCorrection,e.sampleType,e.loopStart,e.loopEnd);if(e.isCompressed?s.setCompressedData(e.getRawData(!0)):s.setAudioData(e.getAudioData(),e.sampleRate),this.addSamples(s),e.linkedSample){let a=this.cloneSample(e.linkedSample);a.linkedSample||s.setLinkedSample(a,s.sampleType)}return s}cloneInstrument(e){let A=this.instruments.find(a=>a.name===e.name);if(A)return A;let s=new _t;s.name=e.name,s.globalZone.copyFrom(e.globalZone);for(let a of e.zones)s.createZone(this.cloneSample(a.sample)).copyFrom(a);return this.addInstruments(s),s}clonePreset(e){let A=this.presets.find(a=>a.name===e.name);if(A)return A;let s=new zt(this);s.name=e.name,s.bankMSB=e.bankMSB,s.bankLSB=e.bankLSB,s.isGMGSDrum=e.isGMGSDrum,s.program=e.program,s.library=e.library,s.genre=e.genre,s.morphology=e.morphology,s.globalZone.copyFrom(e.globalZone);for(let a of e.zones)s.createZone(this.cloneInstrument(a.instrument)).copyFrom(a);return this.addPresets(s),s}flush(){this.presets.sort(je.compare.bind(je)),this.parseInternal()}trim(e){let A=(s,a)=>{let n=0;for(let r=0;r<s.zones.length;r++){let i=s.zones[r],o=i.keyRange,I=i.velRange,l=!1;for(let[B,C]of a)if(B>=o.min&&B<=o.max&&[...C].some(g=>g>=I.min&&g<=I.max)){l=!0;break}l||(h.info(`%c${i.sample.name}%c removed from %c${s.name}%c.`,d.recognized,d.info,d.recognized,d.info),s.deleteZone(r)&&(n++,r--,h.info(`%c${i.sample.name}%c deleted`,d.recognized,d.info)),i.sample.useCount<1&&this.deleteSample(i.sample))}return n};h.groupCollapsed("%cTrimming sound bank...",d.info),h.info("Combinations to trim for:",e);for(let s=0;s<this.presets.length;s++){let a=this.presets[s],n=e.get(a);if(n===void 0)h.info(`%cDeleting preset %c${a.name}%c and its zones`,d.info,d.recognized,d.info),this.deletePreset(a),s--;else{h.groupCollapsed(`%cTrimming %c${a.name}`,d.info,d.recognized),h.info(`Keys for ${a.name}:`,n);let r=0;for(let i=0;i<a.zones.length;i++){let o=a.zones[i],I=o.keyRange,l=o.velRange,B=!1;for(let[C,g]of n)if(C>=I.min&&C<=I.max&&[...g].some(E=>E>=l.min&&E<=l.max)){B=!0;let E=A(o.instrument,n);h.info(`%cTrimmed off %c${E}%c instrument zones from %c${o.instrument.name}`,d.info,d.recognized,d.info,d.recognized);break}B||(r++,a.deleteZone(i),o.instrument.useCount<1&&this.deleteInstrument(o.instrument),i--)}h.info(`%cTrimmed off %c${r}%c preset zones from %c${a.name}`,d.info,d.recognized,d.info,d.recognized),h.groupEnd()}}this.removeUnusedElements(),h.info("%cSound bank modified!",d.recognized),h.groupEnd()}removeUnusedElements(){this.instruments=this.instruments.filter(e=>{e.deleteUnusedZones();let A=e.useCount<1;return A&&e.delete(),!A}),this.samples=this.samples.filter(e=>{let A=e.useCount<1;return A&&e.unlinkSample(),!A})}deleteInstrument(e){e.delete(),this.instruments.splice(this.instruments.indexOf(e),1)}deletePreset(e){e.delete(),this.presets.splice(this.presets.indexOf(e),1)}deleteSample(e){e.unlinkSample(),this.samples.splice(this.samples.indexOf(e),1)}getPreset(e,A){return je.selectPatch(this.presets,e,A)}destroySoundBank(){this.presets.length=0,this.instruments.length=0,this.samples.length=0}parsingError(e){throw new Error(`SF parsing error: ${e} The file may be corrupted.`)}parseInternal(){this._isXGBank=!1;let e=new Set([0,1,2,3,4,5,6,7,8,9,16,17,24,25,26,27,28,29,30,31,32,33,40,41,48,56,57,58,64,65,66,126,127]);for(let A of this.presets)if(De.isXGDrum(A.bankMSB)&&(this._isXGBank=!0,!e.has(A.program))){this._isXGBank=!1,h.info(`%cThis bank is not valid XG. Preset %c${A.toString()}%c is not a valid XG drum. XG mode will use presets on bank 128.`,d.info,d.value,d.info);break}}printInfo(){for(let[e,A]of Object.entries(this.soundBankInfo))if(typeof A=="object"&&"major"in A){let s=A;h.info(`%c${e}: %c"${s.major}.${s.minor}"`,d.info,d.recognized)}else h.info(`%c${e}: %c${A.toLocaleString()}`,d.info,d.recognized)}},er=class extends Pe{constructor(t){let e=t.currentIndex,A=t[e+1]<<8|t[e],s=ls(t[e+2],t[e+3]);t.currentIndex+=4,super(A,s,!1)}};function Ps(t){let e=[];for(;t.data.length>t.data.currentIndex;)e.push(new er(t.data));return e.pop(),e}function tr(t,e,A,s,a){let n=t.gen,r=t.mod,i=0,o=0;for(let I of a)for(let l=0;l<I.zonesCount;l++){let B=n[o++],C=n[o],g=e.slice(B,C),E=r[i++],S=r[i],k=A.slice(E,S);g.some(u=>u.type===c.instrument)?I.createSoundFontZone(k,g,s):(I.globalZone.addGenerators(...g),I.globalZone.addModulators(...k))}}var Ar=class extends zt{zoneStartIndex;zonesCount=0;constructor(t,e){super(e),this.name=de(t.data,20),this.program=X(t.data,2);let A=X(t.data,2);this.bankMSB=A&127,this.isGMGSDrum=(A&128)>0,this.bankLSB=A>>8,this.zoneStartIndex=X(t.data,2),this.library=X(t.data,4),this.genre=X(t.data,4),this.morphology=X(t.data,4)}createSoundFontZone(t,e,A){let s=e.find(r=>r.type===c.instrument),a;if(s)a=A[s.value];else throw new Error("No instrument ID found in preset zone.");if(!a)throw new Error(`Invalid instrument ID: ${s.value}, available instruments: ${A.length}`);let n=new fn(this,a);return n.addGenerators(...e),n.addModulators(...t),this.zones.push(n),n}};function Ns(t,e){let A=[];for(;t.data.length>t.data.currentIndex;){let s=new Ar(t,e);if(A.length>0){let a=A[A.length-1];a.zonesCount=s.zoneStartIndex-a.zoneStartIndex}A.push(s)}return A.pop(),A}var sr=class extends _t{zoneStartIndex;zonesCount=0;constructor(t){super(),this.name=de(t.data,20),this.zoneStartIndex=X(t.data,2)}createSoundFontZone(t,e,A){let s=e.find(r=>r.type===c.sampleID),a;if(s)a=A[s.value];else throw new Error("No sample ID found in instrument zone.");if(!a)throw new Error(`Invalid sample ID: ${s.value}, available samples: ${A.length}`);let n=new dn(this,a);return n.addGenerators(...e),n.addModulators(...t),this.zones.push(n),n}};function Ts(t){let e=[];for(;t.data.length>t.data.currentIndex;){let A=new sr(t);if(e.length>0){let s=e[e.length-1];s.zonesCount=A.zoneStartIndex-s.zoneStartIndex}e.push(A)}return e.pop(),e}function XA(t){let e=[];for(;t.data.length>t.data.currentIndex;){let A=t.data,s=X(A,2),a=X(A,2),n=ls(A[A.currentIndex++],A[A.currentIndex++]),r=X(A,2),i=X(A,2);e.push(new ye(s,r,a,n,i))}return e.pop(),e}function nr(t,e,A,s,a){let n=t.gen,r=t.mod,i=0,o=0;for(let I of a)for(let l=0;l<I.zonesCount;l++){let B=n[o++],C=n[o],g=e.slice(B,C),E=r[i++],S=r[i],k=A.slice(E,S);g.some(u=>u.type===c.sampleID)?I.createSoundFontZone(k,g,s):(I.globalZone.addGenerators(...g),I.globalZone.addModulators(...k))}}function cA(t){let e=[],A=[];for(;t.data.length>t.data.currentIndex;)A.push(X(t.data,2)),e.push(X(t.data,2));return{mod:e,gen:A}}var ar=class extends Sn{sampleDataStartIndex=0;constructor(t,e=!0){if(super("sf2"),e)throw new Error("Using the constructor directly is deprecated. Use SoundBankLoader.fromArrayBuffer() instead.");let A=new ne(t);h.group("%cParsing a SoundFont2 file...",d.info),A||(h.groupEnd(),this.parsingError("No data provided!"));let s=U.read(A,!1);this.verifyHeader(s,"riff");let a=de(A,4).toLowerCase();if(a!=="sfbk"&&a!=="sfpk")throw h.groupEnd(),new SyntaxError(`Invalid soundFont! Expected "sfbk" or "sfpk" got "${a}"`);let n=a==="sfpk",r=U.read(A);this.verifyHeader(r,"list");let i=de(r.data,4);if(i!=="INFO")throw h.groupEnd(),new SyntaxError(`Invalid soundFont! Expected "INFO" got "${i}"`);let o;for(;r.data.length>r.data.currentIndex;){let D=U.read(r.data),Q=$e(D.data,D.data.length),T=D.header;switch(T){case"ifil":case"iver":{let H=X(D.data,2),z=X(D.data,2);T==="ifil"?this.soundBankInfo.version={major:H,minor:z}:this.soundBankInfo.romVersion={major:H,minor:z};break}case"DMOD":this.defaultModulators=XA(D),this.customDefaultModulators=!0;break;case"LIST":de(D.data,4)==="xdta"&&(h.info("%cExtended SF2 found!",d.recognized),o=D);break;case"ICRD":this.soundBankInfo.creationDate=Es(de(D.data,D.data.length));break;case"ISFT":this.soundBankInfo.software=Q;break;case"IPRD":this.soundBankInfo.product=Q;break;case"IENG":this.soundBankInfo.engineer=Q;break;case"ICOP":this.soundBankInfo.copyright=Q;break;case"INAM":this.soundBankInfo.name=Q;break;case"ICMT":this.soundBankInfo.comment=Q;break;case"irom":this.soundBankInfo.romInfo=Q;break;case"isng":this.soundBankInfo.soundEngine=Q}}this.printInfo();let I={};o!==void 0&&(I.phdr=U.read(o.data),I.pbag=U.read(o.data),I.pmod=U.read(o.data),I.pgen=U.read(o.data),I.inst=U.read(o.data),I.ibag=U.read(o.data),I.imod=U.read(o.data),I.igen=U.read(o.data),I.shdr=U.read(o.data));let l=U.read(A,!1);this.verifyHeader(l,"list"),this.verifyText(de(A,4),"sdta"),h.info("%cVerifying smpl chunk...",d.warn);let B=U.read(A,!1);this.verifyHeader(B,"smpl");let C;if(n){h.info("%cSF2Pack detected, attempting to decode the smpl chunk...",d.info);try{C=vA.decode(A.buffer.slice(A.currentIndex,A.currentIndex+l.size-12)).data[0]}catch(D){throw h.groupEnd(),new Error(`SF2Pack Ogg Vorbis decode error: ${D}`,{cause:D})}h.info(`%cDecoded the smpl chunk! Length: %c${C.length}`,d.info,d.value)}else C=A,this.sampleDataStartIndex=A.currentIndex;h.info(`%cSkipping sample chunk, length: %c${l.size-12}`,d.info,d.value),A.currentIndex+=l.size-12,h.info("%cLoading preset data chunk...",d.warn);let g=U.read(A);this.verifyHeader(g,"list"),de(g.data,4);let E=U.read(g.data);this.verifyHeader(E,"phdr");let S=U.read(g.data);this.verifyHeader(S,"pbag");let k=U.read(g.data);this.verifyHeader(k,"pmod");let u=U.read(g.data);this.verifyHeader(u,"pgen");let M=U.read(g.data);this.verifyHeader(M,"inst");let w=U.read(g.data);this.verifyHeader(w,"ibag");let R=U.read(g.data);this.verifyHeader(R,"imod");let F=U.read(g.data);this.verifyHeader(F,"igen");let N=U.read(g.data);this.verifyHeader(N,"shdr"),h.info("%cParsing samples...",d.info),A.currentIndex=this.sampleDataStartIndex;let m=vs(N,C,o===void 0);if(o&&I.shdr){let D=vs(I.shdr,new Float32Array(1),!1);if(D.length===m.length)for(let[Q,T]of m.entries())T.name+=D[Q].name,T.linkedSampleIndex|=D[Q].linkedSampleIndex<<16}for(let D of m)D.name=D.name.trim();this.samples.push(...m);let p=Ps(F),y=XA(R),V=Ts(M);if(o&&I.inst){let D=Ts(I.inst);if(D.length===V.length){for(let[Q,T]of V.entries())T.name+=D[Q].name,T.zoneStartIndex|=D[Q].zoneStartIndex<<16;for(let[Q,T]of V.entries())Q<V.length-1&&(T.zonesCount=V[Q+1].zoneStartIndex-T.zoneStartIndex)}}for(let D of V)D.name=D.name.trim();this.instruments.push(...V);let Y=cA(w);if(o&&I.ibag){let D=cA(I.ibag);for(let Q=0;Q<Y.mod.length;Q++)Y.mod[Q]|=D.mod[Q]<<16;for(let Q=0;Q<Y.gen.length;Q++)Y.gen[Q]|=D.gen[Q]<<16}nr(Y,p,y,this.samples,V);let q=Ps(u),J=XA(k),te=Ns(E,this);if(o&&I.phdr){let D=Ns(I.phdr,this);if(D.length===te.length){for(let[Q,T]of te.entries())T.name+=D[Q].name,T.zoneStartIndex|=D[Q].zoneStartIndex<<16;for(let[Q,T]of te.entries())Q<te.length-1&&(T.zonesCount=te[Q+1].zoneStartIndex-T.zoneStartIndex)}}for(let D of te)D.name=D.name.trim();this.addPresets(...te);let x=cA(S);if(o&&I.pbag){let D=cA(I.pbag);for(let Q=0;Q<x.mod.length;Q++)x.mod[Q]|=D.mod[Q]<<16;for(let Q=0;Q<x.gen.length;Q++)x.gen[Q]|=D.gen[Q]<<16}tr(x,q,J,this.instruments,te),this.flush(),h.info(`%cParsing finished! %c"${this.soundBankInfo.name}"%c has %c${this.presets.length}%c presets,
17
+ %c${this.instruments.length}%c instruments and %c${this.samples.length}%c samples.`,d.info,d.recognized,d.info,d.recognized,d.info,d.recognized,d.info,d.recognized,d.info),h.groupEnd()}verifyHeader(t,e){t.header.toLowerCase()!==e.toLowerCase()&&(h.groupEnd(),this.parsingError(`Invalid chunk header! Expected "${e.toLowerCase()}" got "${t.header.toLowerCase()}"`))}verifyText(t,e){t.toLowerCase()!==e.toLowerCase()&&(h.groupEnd(),this.parsingError(`Invalid FourCC: Expected "${e.toLowerCase()}" got "${t.toLowerCase()}"\``))}},jt=class{static fromArrayBuffer(t){return de(new ne(t.slice(8,12)),4).toLowerCase()==="dls "?this.loadDLS(t):new ar(t,!1)}static loadDLS(t){return yn.read(t).toSF()}},DA=class kn extends we{isEffectModulator;isDefaultResonantModulator;isModWheelModulator;constructor(e,A,s,a,n,r,i,o){super(e,A,s,a,n),this.isEffectModulator=r,this.isDefaultResonantModulator=i,this.isModWheelModulator=o}static fromData(e,A,s,a,n){let r=e.toSourceEnum(),i=A.toSourceEnum();return new kn(e,A,s,a,n,(r===219||r===221)&&i===0&&(s===c.reverbEffectsSend||s===c.chorusEffectsSend),r===Bn&&i===0&&s===c.initialFilterQ,(e.isCC&&e.index===f.modulationWheel||A.isCC&&A.index===f.modulationWheel)&&(s===c.modLfoToPitch||s===c.vibLfoToPitch))}static fromModulator(e){return this.fromData(e.primarySource,e.secondarySource,e.destination,e.transformAmount,e.transformType)}},rr=class{sampleData;generators;modulators;exclusiveClass;targetKey;velocity;rootKey;loopStart;loopEnd;playbackStep;loopingMode;constructor(t,e,A,s){let a=t.sample,n=t.generators;this.modulators=t.modulators.map(DA.fromModulator.bind(DA)),this.generators=n,this.rootKey=a.originalKey,n[c.overridingRootKey]>-1&&(this.rootKey=n[c.overridingRootKey]),this.targetKey=e,n[c.keyNum]>-1&&(this.targetKey=n[c.keyNum]),this.velocity=A,n[c.velocity]>-1&&(this.velocity=n[c.velocity]),this.exclusiveClass=n[c.exclusiveClass],this.loopStart=a.loopStart,this.loopEnd=a.loopEnd,this.sampleData=a.getAudioData(),this.playbackStep=a.sampleRate/s*Math.pow(2,a.pitchCorrection/1200),this.loopingMode=n[c.sampleModes]}},Us=Math.PI/2,fA=-500,Dn=500,us=Dn-fA,wn=new Float32Array(us+1),Mn=new Float32Array(us+1);for(let t=fA;t<=Dn;t++){let e=(t-fA)/us,A=t-fA;wn[A]=Math.cos(Us*e),Mn[A]=Math.sin(Us*e)}function ir(t,e,A,s,a,n){if(!t.isInRelease&&e>=t.releaseStartTime&&(t.isInRelease=!0,t.volEnv.startRelease(t),t.modEnv.startRelease(t),t.loopingMode===3&&(t.wavetable.isLooping=!1)),t.hasRendered=!0,!t.isActive)return;let r=this.synthCore,i=r.sampleRate,o=t.modulatedGenerators,I=t.targetKey,l=t.pitchOffset+o[c.fineTune]+this.octaveTuning[I]+this.currentTuning,B=o[c.coarseTune],C=r.tunings[this.preset.program*128+t.midiNote];if(C!==-1&&(I=Math.trunc(C),B+=C-I),t.portamentoFromKey>-1){let Q=Math.min((e-t.startTime)/t.portamentoDuration,1),T=I-t.portamentoFromKey;B-=T*(1-Q)}l+=(I-t.rootKey)*o[c.scaleTuning];let g=0,E=0,S=t.gainModifier*(1+o[c.amplitude]/1e3);if(e>=t.vibLfoStartTime){let Q=o[c.vibLfoToPitch],T=o[c.vibLfoToFilterFc],H=o[c.vibLfoAmplitudeDepth];if(Q!==0||T!==0||H!==0){let z=Math.max(0,As(o[c.freqVibLFO])+o[c.vibLfoRate]/100)*n/i,j=1-4*Math.abs(t.vibLfoPhase-.5);(t.vibLfoPhase+=z)>=1&&(t.vibLfoPhase-=1),l+=j*Q,g+=j*T,S*=1-(j+1)/2*(H/1e3)}}if(e>=t.modLfoStartTime){let Q=o[c.modLfoToPitch],T=o[c.modLfoToVolume],H=o[c.modLfoToFilterFc],z=o[c.modLfoAmplitudeDepth];if(Q!==0||H!==0||T!==0||z!==0){let j=Math.max(0,As(o[c.freqModLFO])+o[c.modLfoRate]/100)*n/i,W=1-4*Math.abs(t.modLfoPhase-.5);(t.modLfoPhase+=j)>=1&&(t.modLfoPhase-=1),l+=W*Q,E+=-W*T,g+=W*H,S*=1-(W+1)/2*(z/1e3)}}let k=o[c.modEnvToPitch],u=o[c.modEnvToFilterFc];if(u!==0||k!==0){let Q=t.modEnv.process(t,e);g+=Q*u,l+=Q*k}E-=t.resonanceOffset;let M=l+B*100,w=M|0;w!==t.tuningCents&&(t.tuningCents=w,t.tuningRatio=Math.pow(2,M/1200));let R=SA(o[c.initialAttenuation])*SA(E);if(t.loopingMode===2&&!t.isInRelease){t.isActive=t.volEnv.process(n,R);return}let F=r.voiceBuffer;t.isActive=t.wavetable.process(n,t.tuningRatio,F);let N=t.volEnv.outputGain,m=t.volEnv.process(n,R),p=(t.volEnv.outputGain-N)/n;{let Q=t.filter,T=o[c.initialFilterFc];Q.initialized?Q.currentInitialFc+=(T-Q.currentInitialFc)*fs.smoothingConstant:(Q.initialized=!0,Q.currentInitialFc=T);let H=Q.currentInitialFc+g,z=o[c.initialFilterQ];if(Q.currentInitialFc>13499&&H>13499&&z===0){Q.currentInitialFc=13500;for(let j=0;j<n;j++)F[j]*=N,N+=p}else{(Math.abs(Q.lastTargetCutoff-H)>1||Q.resonanceCb!==z)&&(Q.lastTargetCutoff=H,Q.resonanceCb=z,Q.calculateCoefficients(H));let{a0:j,a1:W,a2:K,a3:ee,a4:Ae}=Q,{x1:O,x2:re,y1:ue,y2:Le}=Q;for(let Ee=0;Ee<n;Ee++){let Re=F[Ee],Oe=j*Re+W*O+K*re-ee*ue-Le*Ae;re=O,O=Re,Le=ue,ue=Oe,F[Ee]=Oe*N,N+=p}Q.x1=O,Q.x2=re,Q.y1=ue,Q.y2=Le}}t.isActive=t.isActive&&m;let y;t.overridePan?y=t.overridePan:(t.currentPan+=(o[c.pan]-t.currentPan)*r.panSmoothingFactor,y=t.currentPan);let{systemParameters:V}=r,Y=this.currentGain*S,q=Math.min(Math.max(-500,y+this.currentPan),500)+500|0,J=wn[q]*Y,te=Mn[q]*Y;if(this._midiParameters.efxAssign){let Q=r.insertionInputL,T=r.insertionInputR;for(let H=0;H<n;H++){let z=F[H];Q[H]+=J*z,T[H]+=te*z}return}for(let Q=0;Q<n;Q++){let T=F[Q],H=Q+a;A[H]+=J*T,s[H]+=te*T}if(!V.effectsEnabled)return;let x=o[c.reverbEffectsSend]*t.reverbSend;if(x>0){let Q=V.reverbGain*Y*(x/1e3),T=r.reverbInput;for(let H=0;H<n;H++)T[H]+=Q*F[H]}let D=o[c.chorusEffectsSend]*t.chorusSend;if(D>0){let Q=V.chorusGain*(D/1e3)*Y,T=r.chorusInput;for(let H=0;H<n;H++)T[H]+=Q*F[H]}if(r.delayActive){let Q=this._midiControllers[f.variationDepth]*t.delaySend;if(Q>0){let T=Y*V.delayGain*((Q>>7)/127),H=r.delayInput;for(let z=0;z<n;z++)H[z]+=T*F[z]}}}function or(t,e,A=!0){if(t>127||e<0)throw new Error("Invalid MIDI Controller.");if(t>=f.modulationWheelLSB&&t<=f.effectControl2LSB){let s=t-32;if(this.lockedControllers[s])return;this._midiControllers[s]=this._midiControllers[s]&16256|e&127,this.computeModulatorsAll(1,s)}if(!this.lockedControllers[t]){switch(this._midiControllers[t]=e<<7|this._midiControllers[t]&127,t){case f.omniModeOff:case f.omniModeOn:case f.allNotesOff:this.stopAllNotes();break;case f.allSoundOff:this.stopAllNotes(!0);break;case f.polyModeOn:this.stopAllNotes(!0),this.setMIDIParameter("polyMode",!0);break;case f.monoModeOn:this.stopAllNotes(!0),this.setMIDIParameter("polyMode",!1);break;case f.bankSelect:this.setBankMSB(e),this.channel%16===9&&De.isSystemXG(this.channelSystem)&&this.setBankMSB(127);break;case f.bankSelectLSB:this.setBankLSB(e);break;case f.variationDepth:this.synthCore.delayActive=!0;break;case f.registeredParameterLSB:case f.registeredParameterMSB:this._midiControllers[f.dataEntryMSB]=0,this.lastParameterIsRegistered=!0;break;case f.nonRegisteredParameterMSB:this.sf2NRPNGeneratorLSB=0,this._midiControllers[f.dataEntryMSB]=0,this.lastParameterIsRegistered=!1;break;case f.nonRegisteredParameterLSB:if(this._midiControllers[f.nonRegisteredParameterMSB]>>7===ke.SF2)switch(this.sf2NRPNGeneratorLSB%100!==0&&(this.sf2NRPNGeneratorLSB=0),e){case 100:this.sf2NRPNGeneratorLSB+=100;break;case 101:this.sf2NRPNGeneratorLSB+=1e3;break;case 102:this.sf2NRPNGeneratorLSB+=1e4;break;default:e<100&&(this.sf2NRPNGeneratorLSB+=e)}this._midiControllers[f.dataEntryMSB]=0,this.lastParameterIsRegistered=!1;break;case f.dataEntryMSB:case f.dataEntryLSB:this.dataEntry();break;case f.resetAllControllers:this.resetRP15();break;case f.sustainPedal:if(e<64){let s=0;if(this._voiceCount>0){for(let a of this.synthCore.voices)if(a.channel===this.channel&&a.isActive&&a.isHeld&&(a.isHeld=!1,a.releaseVoice(this.synthCore.currentTime),++s>=this._voiceCount))break}}break;case f.portamentoControl:this.lastPortamentoNote=e,this.portamentoForce=!0;break;default:this.computeModulatorsAll(1,t);break}A&&this.synthCore.callEvent("controllerChange",{channel:this.channel,controller:t,value:e})}}var gr=[c.delayModLFO,c.freqModLFO,c.delayVibLFO,c.freqVibLFO,c.delayModEnv,c.attackModEnv,c.holdModEnv,c.decayModEnv,c.sustainModEnv,c.releaseModEnv,c.delayVolEnv,c.attackVolEnv,c.holdVolEnv,c.decayVolEnv,c.sustainVolEnv,c.releaseVolEnv,c.fineTune,c.modLfoToPitch,c.vibLfoToPitch,c.modEnvToPitch,c.modLfoToVolume,c.initialFilterFc,c.initialFilterQ,c.modLfoToFilterFc,c.modEnvToFilterFc,c.chorusEffectsSend,c.reverbEffectsSend],ht=(t,e,A)=>Math.max(e,Math.min(A,t)),hA=t=>Math.max(-32768,1200*Math.log2(t/1e3)),Ir=t=>6900+1200*Math.log2(t/440);function cr(t,e){let A=e&127;e-=8192;let s=gr[t];s||h.unsupported(`AWE32 LSB for ${this.channel}`,[t],"Invalid Generator Number");let a,n,r,i;switch(s){default:break;case c.delayModLFO:case c.delayVibLFO:case c.delayVolEnv:case c.delayModEnv:a=4*ht(e,0,5900),this.setGeneratorOverride(s,hA(a));break;case c.attackVolEnv:case c.attackModEnv:a=ht(e,0,5940),this.setGeneratorOverride(s,hA(a));break;case c.holdVolEnv:case c.holdModEnv:a=ht(e,0,8191),this.setGeneratorOverride(s,hA(a));break;case c.decayModEnv:case c.decayVolEnv:case c.releaseVolEnv:case c.releaseModEnv:a=4*ht(e,0,5940),this.setGeneratorOverride(s,hA(a));break;case c.freqVibLFO:case c.freqModLFO:n=.084*A,this.setGeneratorOverride(s,Ir(n),!0);break;case c.sustainVolEnv:case c.sustainModEnv:r=A*7.5,this.setGeneratorOverride(s,r);break;case c.fineTune:this.setGeneratorOverride(s,e,!0);break;case c.modLfoToPitch:case c.vibLfoToPitch:i=ht(e,-127,127)*9.375,this.setGeneratorOverride(s,i,!0);break;case c.modEnvToPitch:i=ht(e,-127,127)*9.375,this.setGeneratorOverride(s,i);break;case c.modLfoToVolume:r=1.875*A,this.setGeneratorOverride(s,r,!0);break;case c.initialFilterFc:{let o=4335+59*A;this.setGeneratorOverride(s,o,!0);break}case c.initialFilterQ:r=215*(A/127),this.setGeneratorOverride(s,r,!0);break;case c.modLfoToFilterFc:i=ht(e,-64,63)*56.25,this.setGeneratorOverride(s,i,!0);break;case c.modEnvToFilterFc:i=ht(e,-64,63)*56.25,this.setGeneratorOverride(s,i);break;case c.chorusEffectsSend:case c.reverbEffectsSend:this.setGeneratorOverride(s,ht(e,0,255)*(1e3/255));break}}function hr(){let t=this._midiControllers[f.dataEntryMSB];if(this.lastParameterIsRegistered){let a=this._midiControllers[f.registeredParameterMSB]|this._midiControllers[f.registeredParameterLSB]>>7;switch(a){default:h.info(`%cUnrecognized RPN for %c${this.channel}%c: %c(0x${a.toString(16)})%c data value: %c${t}`,d.warn,d.recognized,d.warn,d.unrecognized,d.warn,d.value);break;case Ze.pitchWheelRange:{let n=t/128;this.setMIDIParameter("pitchWheelRange",n),h.coolInfo(`Pitch Wheel Range for ${this.channel}`,n,"semitones");break}case Ze.coarseTuning:{let n=(t>>7)-64;this.setMIDIParameter("keyShift",n),h.coolInfo(`Key shift for ${this.channel}`,n);break}case Ze.fineTuning:{let n=(t-8192)/81.92;this.setMIDIParameter("fineTune",n),h.coolInfo(`Fine tuning for ${this.channel}`,Math.round(n),"cents");break}case Ze.modulationDepth:{let n=t/1.28;this.setMIDIParameter("modulationDepth",n),h.coolInfo(`Modulation depth for ${this.channel}`,Math.round(n),"cents");break}case Ze.resetParameters:break}return}let e=this._midiControllers[f.nonRegisteredParameterMSB]>>7,A=this._midiControllers[f.nonRegisteredParameterLSB]>>7,s=t>>7;if(!(this.synthCore.systemParameters.drumLock&&e>=ke.drumPitch&&e<=ke.drumDelay))switch(e){default:h.info(`%cUnrecognized NRPN for %c${this.channel}%c: %c(0x${e.toString(16).toUpperCase()} 0x${A.toString(16).toUpperCase()})%c data value: %c${s}`,d.warn,d.recognized,d.warn,d.unrecognized,d.warn,d.value);break;case ke.partParameter:{let a=this._systemParameters.nrpnParamLock??this.synthCore.systemParameters.nrpnParamLock;switch(A){default:h.info(`%cUnrecognized NRPN for %c${this.channel}%c: %c(0x${e.toString(16)} 0x${A.toString(16)})%c data value: %c${s}`,d.warn,d.recognized,d.warn,d.unrecognized,d.warn,d.value);break;case Ue.vibratoRate:this.controllerChange(f.vibratoRate,s);break;case Ue.vibratoDepth:this.controllerChange(f.vibratoDepth,s);break;case Ue.vibratoDelay:this.controllerChange(f.vibratoDelay,s);break;case Ue.tvfCutoffFrequency:if(a)return;this.controllerChange(f.brightness,s),h.coolInfo(`Filter cutoff for ${this.channel}`,s.toString(),"");break;case Ue.tvfResonance:if(a)return;this.controllerChange(f.filterResonance,s),h.coolInfo(`Filter resonance for ${this.channel}`,s.toString(),"");break;case Ue.envelopeAttackTime:if(a)return;this.controllerChange(f.attackTime,s),h.coolInfo(`EG attack time for ${this.channel}`,s.toString(),"");break;case Ue.envelopeDecayTime:if(a)return;this.controllerChange(f.decayTime,s),h.coolInfo(`EG decay time for ${this.channel}`,s.toString(),"");break;case Ue.envelopeReleaseTime:if(a)return;this.controllerChange(f.releaseTime,s),h.coolInfo(`EG release time for ${this.channel}`,s.toString(),"");break}break}case ke.drumPitch:{let a=this.channelSystem==="xg"||this.patch.bankLSB===1?(s-64)*100:(s-64)*50;this.drumParams[A].pitch=a,h.coolInfo(`Drum ${A} pitch for ${this.channel}`,a,"cents");break}case ke.drumPitchFine:{let a=s-64;this.drumParams[A].pitch+=a,h.coolInfo(`Drum ${A} pitch fine for ${this.channel}`,this.drumParams[A].pitch,"cents");break}case ke.drumLevel:this.drumParams[A].gain=s/120,h.coolInfo(`Drum ${A} level for ${this.channel}`,s,"");break;case ke.drumPan:this.drumParams[A].pan=s,h.coolInfo(`Drum ${A} pan for ${this.channel}`,s,"");break;case ke.drumReverb:this.drumParams[A].reverbGain=s/127,h.coolInfo(`Drum ${A} reverb level for ${this.channel}`,s,"");break;case ke.drumChorus:this.drumParams[A].chorusGain=s/127,h.coolInfo(`Drum ${A} chorus level for ${this.channel}`,s,"");break;case ke.drumDelay:this.drumParams[A].delayGain=s/127,h.coolInfo(`Drum ${A} delay level for ${this.channel}`,t,"");break;case ke.awe32:cr.call(this,A,t);break;case ke.SF2:{if(A>100)break;let a=this.sf2NRPNGeneratorLSB,n=t-8192;this.setGeneratorOffset(a,n);break}}}var lr=40;function Cr(t){if(t<1)return 0;{let e=[1,2,4,8,16,32,64,80,96,112,120,124],A=[1,.5,.25,.125,.0625,.03125,.0625,.0625,.0625,.125,.25,1/3],s=[-.16653127382501215,.11863875218299408,.029479047361245264,-.005442312089231738,.1451520875973037,-.005056281449558275,-.005095486882876532,.03334009551111544,-.09361368678020432,.14132569702451822,-.15805565301011382,-.09918856955881927],a=[.028212773333433472,-.3388502064992847,-.15839529890929713,-.12398131766775483,-.2874848552685111,.012254866302537692,.005957797193345771,-.03745899330347374,.12911781869810196,-.15867193224162568,.504406322732748,.3786845131875458],n=[.7218950861255283,.5574536226347168,.47133893237025826,.48597095327079914,.44336276333518854,.6076986311801551,.30851975971827794,.30514889345633955,.3302511933827384,.153822885219165,.1302280559047337,.49865530675491687],r=[-2.2218487496163566,-1.6382721639824072,-1.3010299956639813,-.958607314841775,-.6020599913279624,-.3010299956639812,.31386722036915343,.6232492903979004,.9242792860618817,1.290034611362518,1.4265112613645752,1.9030899869919435],i=[2,4,8,16,32,64,80,96,112,120,124],o=-1;for(let l=i.length-1;l>=0;l--)if(i[l]<t){o=l;break}o+=1;let I=(t-e[o])*A[o];return Math.exp(2.302585092994046*(((s[o]*I+a[o])*I+n[o])*I+r[o]))/lr}}function Br(t,e){return Cr(t)*e}var Kt=(t,e,A)=>Math.max(e,Math.min(A,t));function Er(t,e,A=!0){if(e<1){this.noteOff(t);return}let s=this.synthCore.systemParameters.blackMIDIMode;if(s&&this.synthCore.voiceCount>200&&e<40||s&&e<10||this._systemParameters.isMuted||!this.preset)return;let a=Kt(e*(this._midiParameters.velocitySenseDepth/64)+(this._midiParameters.velocitySenseOffset-64)*2,0,127),n=t+this.currentKeyShift;if(t>127||t<0)return;let r=this.preset.program,i=this.synthCore.tunings[r*128+t];i>=0&&(n=Math.trunc(i)),((this._systemParameters.monophonicRetrigger??this.synthCore.systemParameters.monophonicRetrigger)||this._midiParameters.assignMode===0)&&this.killNote(t);let o=this.synthCore.keyModifierManager.getVelocity(this.channel,t);o>-1&&(a=o);let I=this.synthCore.keyModifierManager.getGain(this.channel,t),l=this.lastPortamentoNote,B=this.portamentoForce||this._midiControllers[f.portamentoOnOff]>=8192,C=this._midiControllers[f.portamentoTime]>>7,g=B&&!this._drumChannel&&l>=0&&l!==t&&C>0,E=-1,S=0;if(g){let p=Math.abs(t-l);E=l,S=Br(C,p),this.portamentoForce=!1}this.lastPortamentoNote=t,this.playingNotes[t]=!0,this._midiParameters.polyMode||(this.lastMonoNote>=0&&this.lastMonoNote!==t&&this.killNote(this.lastMonoNote),this.lastMonoNote=t,this.lastMonoVelocity=e);let k=this.synthCore.getVoices(this.channel,n,a),u=0,M=0,w=0,R=1,F=1,N=1;if(this._midiParameters.randomPan&&(u=Math.round(Math.random()*1e3-500)),this._drumChannel){let p=this.drumParams[t];if(!p.rxNoteOn)return;let y=p.pan-64;if(y!==0)if(y===-64)u=Math.round(Math.random()*1e3-500);else{let V=(this._midiControllers[f.pan]>>7)-64;u=Math.max(-63,Math.min(y+V,63))/63*500||1}w=p.pitch,M=p.exclusiveClass,R=p.reverbGain,F=p.chorusGain,N=p.delayGain,I===1&&(I=p.gain)}let m=A?this.noteOnID[t]++:this.noteOnID[t];for(let p of k){let y=this.synthCore.assignVoice(),V=this.synthCore.currentTime;if(y.setup(V,this.channel,t,m),y.wavetable=y.oscillators[this._systemParameters.interpolationType??this.synthCore.systemParameters.interpolationType],y.targetKey=p.targetKey,y.velocity=p.velocity,y.generators.set(p.generators),y.exclusiveClass=M||p.exclusiveClass,y.rootKey=p.rootKey,y.loopingMode=p.loopingMode,y.wavetable.sampleData=p.sampleData,y.wavetable.playbackStep=p.playbackStep,this.dynamicModulators.active){y.modulators=[...p.modulators];for(let D of this.dynamicModulators.modulatorList){let Q=y.modulators.findIndex(T=>we.isIdentical(T,D.mod));Q===-1?y.modulators.push(D.mod):y.modulators[Q]=D.mod}}else y.modulators=p.modulators;if(y.modulators.length>y.modulatorValues.length&&(h.warn(`${y.modulators.length} modulators! Increasing modulatorValues table.`),y.modulatorValues=new Int16Array(y.modulators.length)),this.generators.overridesEnabled){let D=this.generators.overrides;for(let Q=0;Q<Dt;Q++){let T=D[Q];T!==32767&&(y.generators[Q]=T)}}if(y.exclusiveClass!==0&&this._midiParameters.polyMode){let D=0;if(this._voiceCount>0){for(let Q of this.synthCore.voices)if(Q.isActive&&Q.channel===this.channel&&Q.exclusiveClass===y.exclusiveClass&&Q.hasRendered&&(Q.exclusiveRelease(this.synthCore.currentTime),++D>=this._voiceCount))break}}this.computeModulators(y),y.volEnv.init(y),y.modEnv.init(y),y.filter.init(),y.vibLfoStartTime=V+pA(y.modulatedGenerators[c.delayVibLFO]),y.modLfoStartTime=V+pA(y.modulatedGenerators[c.delayModLFO]);let Y=y.modulatedGenerators[c.startAddrsOffset]+y.modulatedGenerators[c.startAddrsCoarseOffset]*32768,q=y.modulatedGenerators[c.endAddrOffset]+y.modulatedGenerators[c.endAddrsCoarseOffset]*32768,J=y.modulatedGenerators[c.startloopAddrsOffset]+y.modulatedGenerators[c.startloopAddrsCoarseOffset]*32768,te=y.modulatedGenerators[c.endloopAddrsOffset]+y.modulatedGenerators[c.endloopAddrsCoarseOffset]*32768,x=p.sampleData.length;if(y.wavetable.cursor=Kt(Y,0,x-1),y.wavetable.end=Kt(x+q,0,x),y.wavetable.loopStart=Kt(p.loopStart+J,0,x),y.wavetable.loopEnd=Kt(p.loopEnd+te,0,x),y.wavetable.loopEnd<y.wavetable.loopStart){let D=y.wavetable.loopStart;y.wavetable.loopStart=y.wavetable.loopEnd,y.wavetable.loopEnd=D}y.wavetable.loopEnd-y.wavetable.loopStart<1&&(y.loopingMode===1||y.loopingMode===3)&&(y.loopingMode=0),y.wavetable.loopLength=y.wavetable.loopEnd-y.wavetable.loopStart,y.wavetable.isLooping=y.loopingMode===1||y.loopingMode===3,y.portamentoFromKey=E,y.portamentoDuration=S,y.overridePan=u,y.gainModifier=I,y.pitchOffset=w,y.reverbSend=R,y.chorusSend=F,y.delaySend=N,y.currentPan=Math.max(-500,Math.min(500,u||y.modulatedGenerators[c.pan]))}this._voiceCount+=k.length,A&&this.synthCore.callEvent("noteOn",{midiNote:t,channel:this.channel,velocity:e})}function dr(t){if(t>127||t<0)return;if(this.synthCore.systemParameters.blackMIDIMode&&!this._drumChannel||this._drumChannel&&this.drumParams[t].rxNoteOff){this.killNote(t),this.synthCore.callEvent("noteOff",{midiNote:t,channel:this.channel});return}this.playingNotes[t]=!1;let e=!this._midiParameters.polyMode,A=this._midiControllers[f.sustainPedal]>=8192&&!e,s=0,a=this.noteOffID[t];if(a<this.noteOnID[t]&&this.noteOffID[t]++,this._voiceCount>0){for(let n of this.synthCore.voices)if(n.channel===this.channel&&n.isActive&&n.midiNote===t&&n.noteID===a&&!n.isInRelease&&(A?n.isHeld=!0:n.releaseVoice(this.synthCore.currentTime),++s>=this._voiceCount))break}if(this.synthCore.callEvent("noteOff",{midiNote:t,channel:this.channel}),e){let n=this.playingNotes.lastIndexOf(!0);n===-1?this.lastMonoNote=-1:this.lastMonoNote===t&&this.noteOn(n,this.lastMonoVelocity,!1)}}function fr(t){if(this._systemParameters.presetLock)return;this.patch.program=t;let e=this.synthCore.soundBankManager.getPreset(this.patch,this.channelSystem);!e&&(e=this.synthCore.missingPresetHandler(this.patch,this.channelSystem),!e)||(this.preset=e,e.isDrum!==this._drumChannel&&this.setDrumFlag(e.isDrum),this.resetDrumParams(),this.synthCore.callEvent("programChange",{channel:this.channel,bankLSB:this.preset.bankLSB,bankMSB:this.preset.bankMSB,program:this.preset.program,name:this.preset.name,isGMGSDrum:this.preset.isGMGSDrum,isDrum:this.preset.isDrum}))}var Qr=[DA.fromModulator(new ye(_e(Ce.linear,!0,!1,!0,f.vibratoRate),0,c.vibLfoRate,1e3,0))],ur=class{modulatorList=[];active=!1;channel;constructor(t){this.channel=t}resetModulators(){this.modulatorList=Qr.map(t=>({mod:t,id:this.getModulatorID(t.primarySource.toSourceEnum(),t.destination,t.primarySource.isBipolar,t.primarySource.isNegative)})),this.active=!1}setupReceiver(t,e,A,s,a,n=!1){this.active=!0;let r=e-64,i=r/64,o=e/127;switch(t&15){case 0:this.setModulator(A,s,c.fineTune,r*100,n),h.coolInfo(`Channel ${this.channel} ${a} pitch control`,r,"semitones");break;case 1:this.setModulator(A,s,c.initialFilterFc,i*9600,n),h.coolInfo(`Channel ${this.channel} ${a} filter control`,i*9600,"cents");break;case 2:this.setModulator(A,s,c.amplitude,i*1e3,n),h.coolInfo(`Channel ${this.channel} ${a} amplitude control`,i*100,"%");break;case 3:this.setModulator(A,s,c.vibLfoRate,i*1e3,n),h.coolInfo(`Channel ${this.channel} ${a} LFO1 rate control`,i*10,"Hz");break;case 4:this.setModulator(A,s,c.vibLfoToPitch,o*600,n),h.coolInfo(`Channel ${this.channel} ${a} LFO1 pitch depth control`,o*600,"cents");break;case 5:this.setModulator(A,s,c.vibLfoToFilterFc,o*2400,n),h.coolInfo(`Channel ${this.channel} ${a} LFO1 filter depth control`,o*2400,"cents");break;case 6:this.setModulator(A,s,c.vibLfoAmplitudeDepth,o*1e3,n),h.coolInfo(`Channel ${this.channel} ${a} LFO1 amplitude depth control`,o*100,"%");break;case 7:this.setModulator(A,s,c.modLfoRate,i*1e3,n),h.coolInfo(`Channel ${this.channel} ${a} LFO2 rate control`,i*10,"Hz");break;case 8:this.setModulator(A,s,c.modLfoToPitch,o*600,n),h.coolInfo(`Channel ${this.channel} ${a} LFO2 pitch depth control`,o*600,"cents");break;case 9:this.setModulator(A,s,c.modLfoToFilterFc,o*2400,n),h.coolInfo(`Channel ${this.channel} ${a} LFO2 filter depth control`,o*2400,"cents");break;case 10:this.setModulator(A,s,c.modLfoAmplitudeDepth,o*1e3,n),h.coolInfo(`Channel ${this.channel} ${a} LFO2 amplitude depth control`,o*100,"%");break}}setModulator(t,e,A,s,a=!1,n=!1){let r=this.getModulatorID(t,A,a,n);s===0&&this.deleteModulator(r);let i=this.modulatorList.find(o=>o.id===r);if(i)i.mod.transformAmount=s;else{let o=DA.fromData(new at(t,Ce.linear,e,a),new at,A,s,0);this.modulatorList.push({mod:o,id:r})}}getModulatorID(t,e,A,s){return`${t}-${e}-${A}-${s}`}deleteModulator(t){this.modulatorList=this.modulatorList.filter(e=>e.id!==t)}},mr=1e3/200;function pr(t,e,A){let s=t.modulators[A];if(s.transformAmount===0)return t.modulatorValues[A]=0,0;let a=s.primarySource.getValue(this,e,t),n=s.secondarySource.getValue(this,e,t),r=s.transformAmount;s.isEffectModulator&&r<=1e3&&(r*=mr,r=Math.min(r,1e3));let i=a*n*r;return s.transformType===2&&(i=Math.abs(i)),s.isDefaultResonantModulator&&(t.resonanceOffset=Math.max(0,i/2)),s.isModWheelModulator&&(i*=this._midiParameters.modulationDepth/50),t.modulatorValues[A]=i,i}function yr(t,e=-1,A=0){let s=t.modulators,a=t.generators;if(this.generators.offsetsEnabled){let o=this.generators.offsets;a=new Int16Array(a);for(let I=0;I<a.length;I++)a[I]+=o[I]}let n=t.modulatedGenerators,r=this.perNotePitch?this.pitchWheels[t.midiNote]:this._midiParameters.pitchWheel;if(e===-1){n.set(a);for(let o=0;o<s.length;o++){let I=s[o];n[I.destination]=Math.min(32767,Math.max(-32768,n[I.destination]+this.computeModulator(t,r,o)))}for(let o=0;o<n.length;o++){let I=We[o];I&&(n[o]=Math.min(I.max,Math.max(I.min,n[o])))}return}let i=!!e;for(let o=0;o<s.length;o++){let I=s[o];if(I.primarySource.isCC===i&&I.primarySource.index===A||I.secondarySource.isCC===i&&I.secondarySource.index===A){let l=I.destination,B=a[l];this.computeModulator(t,r,o);for(let g=0;g<s.length;g++)s[g].destination===l&&(B+=t.modulatorValues[g]);let C=We[l];n[l]=Math.max(C.min,Math.min(B,C.max))}}}var bn=class Rn{pitch=0;gain=1;exclusiveClass=0;pan=64;reverbGain=0;chorusGain=1;delayGain=1;rxNoteOn=!0;rxNoteOff=!1;static copyFrom(e){let A=new Rn;return A.pitch=e.pitch,A.chorusGain=e.chorusGain,A.reverbGain=e.reverbGain,A.exclusiveClass=e.exclusiveClass,A.gain=e.gain,A.pan=e.pan,A.rxNoteOff=e.rxNoteOff,A.rxNoteOn=e.rxNoteOn,A}};function Sr(){return{patch:this.preset?{...this.patch,name:this.preset.name,isDrum:this.preset.isDrum}:void 0,lockedSystem:this.lockedSystem,midiControllers:this._midiControllers.slice(),lockedControllers:[...this.lockedControllers],pitchWheels:this.pitchWheels.slice(),generators:{...this.generators,offsets:this.generators.offsets.slice(),overrides:this.generators.overrides.slice()},midiParameters:{...this._midiParameters},lockedMIDIParameters:{...this.lockedMIDIParameters},systemParameters:{...this._systemParameters},octaveTuning:this.octaveTuning.slice(),perNotePitch:this.perNotePitch,drumParams:this.drumParams.map(t=>({...t})),drumChannel:this._drumChannel,channel:this.channel}}function kr(t){this.setDrums(t.drumChannel),this._midiControllers.set(t.midiControllers);for(let e=0;e<128;e++)this.lockController(e,t.lockedControllers[e]);this.pitchWheels.set(t.pitchWheels),this.octaveTuning.set(t.octaveTuning),this.perNotePitch=t.perNotePitch,this.generators.offsets.set(t.generators.offsets),this.generators.overrides.set(t.generators.overrides),this.generators.offsetsEnabled=t.generators.offsetsEnabled,this.generators.overridesEnabled=t.generators.overridesEnabled;for(let e=0;e<128;e++)this.drumParams[e]=bn.copyFrom(t.drumParams[e]);this.setSystemParameter("presetLock",!1),t.patch&&this.setPatch(t.patch),this.lockedSystem=t.lockedSystem;for(let[e,A]of Object.entries(t.midiParameters))this.setMIDIParameter(e,A);for(let[e,A]of Object.entries(t.lockedMIDIParameters))this.lockMIDIParameter(e,A);for(let[e,A]of Object.entries(t.systemParameters))this.setSystemParameter(e,A)}var xs={pitchWheel:8192,pitchWheelRange:2,pressure:0,modulationDepth:50,rxChannel:0,polyMode:!0,keyShift:0,fineTune:0,randomPan:!1,assignMode:2,efxAssign:!1,cc1:16,cc2:17,drumMap:0,velocitySenseDepth:64,velocitySenseOffset:64};function Dr(t,e){if(!this.lockedMIDIParameters[t]){switch(this._midiParameters[t]=e,t){case"pitchWheel":this.computeModulatorsAll(0,Ie.pitchWheel);break;case"pressure":this.computeModulatorsAll(0,Ie.channelPressure);break}this.updateInternalParams(),this.synthCore.callEvent("channelParamChange",{channel:this.channel,parameter:t,value:e})}}function wr(t,e){this.lockedMIDIParameters[t]=e}var Mr={presetLock:!1,isMuted:!1,gain:1,pan:0,keyShift:0,fineTune:0,interpolationType:null,nrpnParamLock:null,monophonicRetrigger:null};function br(t,e){if(this._systemParameters[t]===e)return;let A=this._systemParameters[t];switch(this._systemParameters[t]=e,this.updateInternalParams(),t){default:break;case"presetLock":e&&(this.lockedSystem=this.synthCore.midiParameters.system);break;case"isMuted":e&&this.stopAllNotes(!0);break;case"keyShift":!this._drumChannel&&A!==e&&this.stopAllNotes(!0)}}var Rr=class{pitchWheels=new Int16Array(128).fill(8192);drumParams=[];dynamicModulators;sf2NRPNGeneratorLSB=0;patch={bankMSB:0,bankLSB:0,program:0,isGMGSDrum:!1};preset;lockedSystem="gs";channel;synthCore;setSystemParameter=br.bind(this);lockMIDIParameter=wr.bind(this);noteOn=Er.bind(this);noteOff=dr.bind(this);programChange=fr.bind(this);controllerChange=or.bind(this);reset=pa.bind(this);renderVoice=ir.bind(this);setMIDIParameter=Dr.bind(this);lockedControllers=new Array(128).fill(!1);_midiControllers=new Int16Array(128);octaveTuning=new Int8Array(128);resetRP15=ya.bind(this);dataEntry=hr.bind(this);lockedMIDIParameters=Object.fromEntries(Object.keys(xs).map(t=>[t,!1]));_midiParameters={...xs};_systemParameters={...Mr};noteOnID=new Array(128).fill(0);noteOffID=new Array(128).fill(0);lastParameterIsRegistered=!0;perNotePitch=!1;currentPan=0;currentTuning=0;currentKeyShift=0;currentGain=0;lastPortamentoNote=-1;portamentoForce=!1;lastMonoNote=-1;lastMonoVelocity=0;playingNotes=new Array(128).fill(!1);generators={offsets:new Int16Array(Dt),offsetsEnabled:!1,overrides:new Int16Array(Dt),overridesEnabled:!1};computeModulator=pr.bind(this);computeModulators=yr.bind(this);constructor(t,e,A){this.synthCore=t,this.preset=e,this.channel=A,this._midiParameters.rxChannel=A,this.dynamicModulators=new ur(A),this.resetGeneratorOverrides(),this.resetGeneratorOffsets();for(let s=0;s<128;s++)this.drumParams.push(new bn);this.resetDrumParams()}_voiceCount=0;get voiceCount(){return this._voiceCount}set voiceCount(t){this._voiceCount=t}_drumChannel=!1;get drumChannel(){return this._drumChannel}get midiControllers(){return this._midiControllers}get systemParameters(){return this._systemParameters}get midiParameters(){return this._midiParameters}get channelSystem(){return this._systemParameters.presetLock?this.lockedSystem:this.synthCore.midiParameters.system}lockController(t,e){this.lockedControllers[t]=e}setDrums(t){if(De.isSystemXG(this.channelSystem))if(t)this.setBankMSB(De.getDrumBank(this.channelSystem)),this.setBankLSB(0);else{if(this.channel%16===9)throw new Error(`Cannot disable drums on channel ${this.channel} for XG.`);this.setBankMSB(0),this.setBankLSB(0)}else this.setGSDrums(t);this.setDrumFlag(t),this.programChange(this.patch.program)}stopAllNotes(t=!1){if(this.noteOnID.fill(0),this.noteOffID.fill(0),this.playingNotes.fill(!1),t){let e=0;if(this._voiceCount>0){for(let A of this.synthCore.voices)if(A.channel===this.channel&&A.isActive&&(A.isActive=!1,++e>=this._voiceCount))break}this.clearVoiceCount()}else{let e=0;if(this._voiceCount>0){for(let A of this.synthCore.voices)if(A.channel===this.channel&&A.isActive&&(A.releaseVoice(this.synthCore.currentTime),++e>=this._voiceCount))break}}this.synthCore.callEvent("stopAll",{channel:this.channel,force:t})}clearVoiceCount(){this._voiceCount=0}setOctaveTuning(t){if(t.length!==12)throw new Error("Tuning is not the length of 12.");for(let e=0;e<128;e++)this.octaveTuning[e]=t[e%12]}pitchWheel(t,e=-1){e===-1?(this.perNotePitch=!1,this.setMIDIParameter("pitchWheel",t)):(this.perNotePitch||this.pitchWheels.fill(this._midiParameters.pitchWheel),this.perNotePitch=!0,this.pitchWheels[e]=t,this.computeModulatorsAll(0,Ie.pitchWheel))}polyPressure(t,e){let A=0;if(this._voiceCount>0){for(let s of this.synthCore.voices)if(s.isActive&&s.channel===this.channel&&s.midiNote===t&&(s.pressure=e,this.computeModulators(s,0,Ie.polyPressure),++A>=this._voiceCount))break}this.synthCore.callEvent("polyPressure",{channel:this.channel,midiNote:t,pressure:e})}updateInternalParams(){let t=this.synthCore.systemParameters,e=this._systemParameters,A=this.synthCore.midiParameters,s=this._midiParameters,a=this._drumChannel?e.keyShift:t.keyShift+A.keyShift+e.keyShift+s.keyShift;this.currentKeyShift=Math.trunc(a),this.currentTuning=this._drumChannel?e.fineTune:t.fineTune+A.fineTune+e.fineTune+s.fineTune;let n=t.pan+A.pan+e.pan;this.currentPan=n*500,this.currentGain=zn*t.gain*Math.pow(A.volume,2)*e.gain}setPatch(t){this.setBankMSB(t.bankMSB),this.setBankLSB(t.bankLSB),this.setGSDrums(t.isGMGSDrum),this.programChange(t.program)}setGSDrums(t){t!==this.patch.isGMGSDrum&&(this.setBankLSB(0),this.setBankMSB(0),this.patch.isGMGSDrum=t)}killNote(t,e=-12e3){let A=0;if(this.noteOffID[t]=0,this.noteOnID[t]=0,this._voiceCount>0){for(let s of this.synthCore.voices)if(s.channel===this.channel&&s.isActive&&s.midiNote===t&&(s.overrideReleaseVolEnv=e,s.isInRelease=!1,s.releaseVoice(this.synthCore.currentTime),++A>=this._voiceCount))break}}applySnapshot(t){kr.call(this,t)}getSnapshot(){return Sr.call(this)}setLastNote(t){this.lastPortamentoNote=t}destroy(){this.preset=void 0,this.lockedControllers=void 0,this._systemParameters=void 0,this._midiControllers=void 0,this._midiParameters=void 0}resetGeneratorOverrides(){this.generators.overrides.fill(Vn),this.generators.overridesEnabled=!1}setGeneratorOverride(t,e,A=!1){if(this.generators.overrides[t]=e,this.generators.overridesEnabled=!0,A){let s=0;if(this._voiceCount>0){for(let a of this.synthCore.voices)if(a.channel===this.channel&&a.isActive&&(a.generators[t]=e,this.computeModulators(a),++s>=this._voiceCount))break}}}resetGeneratorOffsets(){this.generators.offsets.fill(0),this.generators.offsetsEnabled=!1}setGeneratorOffset(t,e){this.generators.offsets[t]=e*We[t].nrpn,this.generators.offsetsEnabled=!0;let A=0;if(this._voiceCount>0){for(let s of this.synthCore.voices)if(s.channel===this.channel&&s.isActive&&(this.computeModulators(s),++A>=this._voiceCount))break}}resetDrumParams(){if(!(this.synthCore.systemParameters.drumLock||!this._drumChannel))for(let t=0;t<128;t++){let e=this.drumParams[t];e.pitch=0,e.gain=1,e.exclusiveClass=0,e.pan=64,e.reverbGain=mA[t]/127,e.chorusGain=this.channelSystem==="xg"?mA[t]/127:0,e.delayGain=0,e.rxNoteOn=!0,e.rxNoteOff=!1}}computeModulatorsAll(t,e){let A=0;if(this._voiceCount>0){for(let s of this.synthCore.voices)if(s.channel===this.channel&&s.isActive&&(this.computeModulators(s,t,e),++A>=this._voiceCount))break}}setBankMSB(t){this._systemParameters.presetLock||(this.patch.bankMSB=t)}setBankLSB(t){this._systemParameters.presetLock||(this.patch.bankLSB=t)}setDrumFlag(t){this._systemParameters.presetLock||!this.preset||this._drumChannel===t||(this._drumChannel=t,this.updateInternalParams())}},vr=class extends zt{constructor(t,e){super(t.parentSoundBank,t.globalZone),this.bankMSB=De.addBankOffset(t.bankMSB,e,!0),this.name=t.name,this.bankLSB=t.bankLSB,this.isGMGSDrum=t.isGMGSDrum,this.program=t.program,this.genre=t.genre,this.morphology=t.morphology,this.library=t.library,this.zones=t.zones}},Fr=class{soundBankList=[];presetListChangeCallback;selectablePresetList=[];constructor(t){this.presetListChangeCallback=t}_presetList=[];get presetList(){return[...this._presetList]}get priorityOrder(){return this.soundBankList.map(t=>t.id)}set priorityOrder(t){this.soundBankList.sort((e,A)=>t.indexOf(e.id)-t.indexOf(A.id)),this.generatePresetList()}deleteSoundBank(t){if(this.soundBankList.length===0){h.warn("1 soundbank left. Aborting!");return}let e=this.soundBankList.findIndex(A=>A.id===t);if(e===-1)throw new Error(`No sound bank with id "${t}"`);this.soundBankList.splice(e,1),this.generatePresetList()}addSoundBank(t,e,A=0){let s=this.soundBankList.find(a=>a.id===e);s===void 0?this.soundBankList.push({id:e,soundBank:t,bankOffset:A}):(s.soundBank=t,s.bankOffset=A),this.generatePresetList()}getPreset(t,e){if(!(this.soundBankList.length===0||this.selectablePresetList.length===0))return je.selectPatch(this.selectablePresetList,t,e)}destroy(){for(let t of this.soundBankList)t.soundBank.destroySoundBank();this.soundBankList=[]}generatePresetList(){let t=new Array,e=new Set;for(let A of this.soundBankList){let s=A.soundBank,a=A.bankOffset;for(let n of s.presets){let r=new vr(n,a);e.has(r.toMIDIString())||(e.add(r.toMIDIString()),t.push(r))}}t.sort(je.compare.bind(je)),this.selectablePresetList=t,this._presetList=t.map(A=>({bankMSB:A.bankMSB,bankLSB:A.bankLSB,program:A.program,isGMGSDrum:A.isGMGSDrum,name:A.name,isDrum:A.isDrum})),this.presetListChangeCallback()}};function Hs(t,e,A){let s=t,a=e<<7|A;return t===127&&e===127&&A===127?-1:s+a*61e-6}function Gr(t,e=0){switch(t[2]){case 4:switch(t[3]){default:h.gmFail("Device Control",t);break;case 1:{let A=t[5]<<7|t[4];this.setMIDIParameter("volume",A/16383),h.gmInfo("Master Volume",A);break}case 2:{let A=((t[5]<<7|t[4])-8192)/8192;this.setMIDIParameter("pan",A),h.gmInfo("Master Balance",A);break}case 3:{let A=((t[5]<<7|t[4])-8192)/81.92;this.setMIDIParameter("fineTune",A),h.gmInfo("Master Fine Tuning",A,"cents");break}case 4:{let A=t[5]-64;this.setMIDIParameter("keyShift",A),h.gmInfo("Master Coarse Tuning",A,"keys");break}case 5:if(t[4]!==1||t[5]!==1||t[6]!==1||t[7]!==1){h.gmFail("Global Parameter Control",t);break}switch(t[8]){default:h.gmFail("Global Parameter Control",t);break;case 1:{let A=t[10];switch(t[9]){default:h.gmFail("Reverb Parameter Control",t);break;case 0:{let s=A===8?5:A;this.setReverbMacro(s),h.gmInfo("Reverb Type",s);break}case 1:this.reverbProcessor.time=A,h.gmInfo("Reverb Time",A)}break}case 2:{let A=t[10];switch(t[9]){default:h.gmFail("Chorus Parameter Control",t);break;case 0:this.setChorusMacro(A),h.gmInfo("Chorus Type",A);break;case 1:this.chorusProcessor.rate=A,h.gmInfo("Chorus Mod Rate",A);break;case 2:this.chorusProcessor.depth=A,h.gmInfo("Chorus Mod Depth",A);break;case 3:this.chorusProcessor.feedback=A,h.gmInfo("Chorus Mod Feedback",A);break;case 4:this.chorusProcessor.sendLevelToReverb=A,h.gmInfo("Chorus Send to Reverb",A);break}}}}break;case 9:switch(t[3]){default:h.gmFail("System Exclusive",t);break;case 1:h.coolInfo("MIDI System","General MIDI 1"),this.reset("gm");break;case 2:h.coolInfo("MIDI System","Roland GS"),this.reset("gs");break;case 3:h.coolInfo("MIDI System","General MIDI 2"),this.reset("gm2");break}break;case 8:{let A=4;switch(t[3]){case 1:{let s=t[A++],a=$e(t,16,A);if(A+=16,t.length<384){h.warn(`The Bulk Tuning Dump is too short! (${t.length} bytes, at least 384 are expected)`);return}for(let n=0;n<128;n++)this.tunings[s*128+n]=Hs(t[A++],t[A++],t[A++]);h.gmInfo("Bulk Tuning Dump",`${a}, program ${s}`);break}case 2:case 7:{t[3]===7&&A++;let s=t[A++],a=t[A++];for(let n=0;n<a;n++){let r=t[A++];this.tunings[s*128+r]=Hs(t[A++],t[A++],t[A++])}h.gmInfo("Single Note Tuning",`program: ${s}. Keys affected: ${a}`);break}case 9:case 8:{let s=new Int8Array(12);if(t[3]===8)for(let a=0;a<12;a++)s[a]=t[7+a]-64;else for(let a=0;a<24;a+=2){let n=(t[7+a]<<7|t[8+a])-8192;s[a/2]=Math.floor(n/81.92)}(t[4]&1)===1&&this.midiChannels[14+e].setOctaveTuning(s),(t[4]>>1&1)===1&&this.midiChannels[15+e].setOctaveTuning(s);for(let a=0;a<7;a++)(t[5]>>a&1)===1&&this.midiChannels[7+a+e].setOctaveTuning(s);for(let a=0;a<7;a++)(t[6]>>a&1)===1&&this.midiChannels[a+e].setOctaveTuning(s);h.gmInfo("Octave Scale Tuning",s.join(" "));break}default:h.gmFail("MIDI Tuning Standard",t);break}break}default:h.gmFail("Universal System Exclusive",t)}}function Lr(t,e=0){if(t[3]===18)switch(t[2]){case 66:{let A=t[4],s=t[5],a=t[6],n=Math.min(t[7],127);if(A===0&&s===0&&a===127&&(n===0||n===1)){if(n===1)for(h.gsInfo("Mode","Double Module");this.midiChannels.length<32;)this.createMIDIChannel(!0);h.coolInfo("MIDI System","Roland GS"),this.reset("gs");return}if(A===64||A===80){if(A===80&&(e+=16),s===0){switch(a){case 0:{let r=((n<<12|t[8]<<8|t[9]<<4|t[10])-1024)/10;this.setMIDIParameter("fineTune",r),h.gsInfo("Master Tune",r,"cents");break}case 4:h.gsInfo("Master Volume",n),this.setMIDIParameter("volume",n/127);break;case 5:{let r=n-64;h.gsInfo("Master Key-Shift",r,"keys"),this.setMIDIParameter("keyShift",r);break}case 6:{let r=(n-64)/63;h.gsInfo("Master Pan",r),this.setMIDIParameter("pan",r);break}case 127:n===0?(h.coolInfo("MIDI System","Roland GS"),this.reset("gs")):n===127&&(h.coolInfo("MIDI System","General MIDI 1"),this.reset("gm"));break;default:h.gsFail("System Parameter",t);break}return}if(s===1){let r=a>=48&&a<=55,i=a>=56&&a<=64,o=a>=80&&a<=90;if(r&&this.systemParameters.reverbLock||i&&this.systemParameters.chorusLock||o&&this.systemParameters.delayLock)return;switch(this.delayActive||=a===64||o,a){default:h.gsFail("Patch Common Parameter",[a]);break;case 0:{let I=$e(t,16,7);h.gsInfo("Patch name",I),this.callEvent("displayMessage",[...t]);break}case 48:this.setReverbMacro(n),h.gsInfo("Reverb Macro",n);break;case 49:this.reverbProcessor.character=n,h.gsInfo("Reverb Character",n),this.callEvent("effectChange",{effect:"reverb",parameter:"character",value:n});break;case 50:this.reverbProcessor.preLowpass=n,h.gsInfo("Reverb Pre-LPF",n),this.callEvent("effectChange",{effect:"reverb",parameter:"preLowpass",value:n});break;case 51:this.reverbProcessor.level=n,h.gsInfo("Reverb Level",n),this.callEvent("effectChange",{effect:"reverb",parameter:"level",value:n});break;case 52:this.reverbProcessor.time=n,h.gsInfo("Reverb Time",n),this.callEvent("effectChange",{effect:"reverb",parameter:"time",value:n});break;case 53:this.reverbProcessor.delayFeedback=n,h.gsInfo("Reverb Delay Feedback",n),this.callEvent("effectChange",{effect:"reverb",parameter:"delayFeedback",value:n});break;case 54:break;case 55:this.reverbProcessor.preDelayTime=n,h.gsInfo("Reverb Predelay Time",n),this.callEvent("effectChange",{effect:"reverb",parameter:"preDelayTime",value:n});break;case 56:this.setChorusMacro(n),h.gsInfo("Chorus Macro",n);break;case 57:this.chorusProcessor.preLowpass=n,h.gsInfo("Chorus Pre-LPF",n),this.callEvent("effectChange",{effect:"chorus",parameter:"preLowpass",value:n});break;case 58:this.chorusProcessor.level=n,h.gsInfo("Chorus Level",n),this.callEvent("effectChange",{effect:"chorus",parameter:"level",value:n});break;case 59:this.chorusProcessor.feedback=n,h.gsInfo("Chorus Feedback",n),this.callEvent("effectChange",{effect:"chorus",parameter:"feedback",value:n});break;case 60:this.chorusProcessor.delay=n,h.gsInfo("Chorus Delay",n),this.callEvent("effectChange",{effect:"chorus",parameter:"delay",value:n});break;case 61:this.chorusProcessor.rate=n,h.gsInfo("Chorus Rate",n),this.callEvent("effectChange",{effect:"chorus",parameter:"rate",value:n});break;case 62:this.chorusProcessor.depth=n,h.gsInfo("Chorus Depth",n),this.callEvent("effectChange",{effect:"chorus",parameter:"depth",value:n});break;case 63:this.chorusProcessor.sendLevelToReverb=n,h.gsInfo("Chorus Send Level To Reverb",n),this.callEvent("effectChange",{effect:"chorus",parameter:"sendLevelToReverb",value:n});break;case 64:this.chorusProcessor.sendLevelToDelay=n,h.gsInfo("Chorus Send Level To Delay",n),this.callEvent("effectChange",{effect:"chorus",parameter:"sendLevelToDelay",value:n});break;case 80:this.setDelayMacro(n),h.gsInfo("Delay Macro",n);break;case 81:this.delayProcessor.preLowpass=n,h.gsInfo("Delay Pre-LPF",n),this.callEvent("effectChange",{effect:"delay",parameter:"preLowpass",value:n});break;case 82:this.delayProcessor.timeCenter=n,h.gsInfo("Delay Time Center",n),this.callEvent("effectChange",{effect:"delay",parameter:"timeCenter",value:n});break;case 83:this.delayProcessor.timeRatioLeft=n,h.gsInfo("Delay Time Ratio Left",n),this.callEvent("effectChange",{effect:"delay",parameter:"timeRatioLeft",value:n});break;case 84:this.delayProcessor.timeRatioRight=n,h.gsInfo("Delay Time Ratio Right",n),this.callEvent("effectChange",{effect:"delay",parameter:"timeRatioRight",value:n});break;case 85:this.delayProcessor.levelCenter=n,h.gsInfo("Delay Level Center",n),this.callEvent("effectChange",{effect:"delay",parameter:"levelCenter",value:n});break;case 86:this.delayProcessor.levelLeft=n,h.gsInfo("Delay Level Left",n),this.callEvent("effectChange",{effect:"delay",parameter:"levelLeft",value:n});break;case 87:this.delayProcessor.levelRight=n,h.gsInfo("Delay Level Right",n),this.callEvent("effectChange",{effect:"delay",parameter:"levelRight",value:n});break;case 88:this.delayProcessor.level=n,h.gsInfo("Delay Level",n),this.callEvent("effectChange",{effect:"delay",parameter:"level",value:n});break;case 89:this.delayProcessor.feedback=n,h.gsInfo("Delay Feedback",n),this.callEvent("effectChange",{effect:"delay",parameter:"feedback",value:n});break;case 90:this.delayProcessor.sendLevelToReverb=n,h.gsInfo("Delay Send Level To Reverb",n),this.callEvent("effectChange",{effect:"delay",parameter:"sendLevelToReverb",value:n});break}break}if(s===3){if(this.systemParameters.insertionEffectLock)return;if(a>=3&&a<=25&&(this.insertionParams[a-3]=n),a>=3&&a<=22){this.insertionProcessor.setParameter(a,n),h.gsInfo(`EFX Parameter ${a-2}`,n),this.callEvent("effectChange",{effect:"insertion",parameter:a,value:n});return}switch(a){default:h.gsFail("Insertion Effect",[a]);return;case 0:{let r=n<<8|t[8],i=this.insertionEffects.get(r);i?(h.gsInfo("EFX Type",r.toString(16)),this.insertionProcessor=i):(this.insertionProcessor=this.insertionFallback,h.gsFail("EFX Processor",[r],"Using Thru.")),this.resetInsertionParams(),this.insertionProcessor.reset(),this.callEvent("effectChange",{effect:"insertion",parameter:0,value:r});return}case 23:this.insertionProcessor.sendLevelToReverb=n/127*lA,h.gsInfo("EFX Send Level to Reverb",n),this.callEvent("effectChange",{effect:"insertion",parameter:a,value:n});return;case 24:this.insertionProcessor.sendLevelToChorus=n/127*lA,h.gsInfo("EFX Send Level to Chorus",n),this.callEvent("effectChange",{effect:"insertion",parameter:a,value:n});return;case 25:this.insertionProcessor.sendLevelToDelay=n/127*lA,this.delayActive=!0,h.gsInfo("EFX Send Level to Delay",n),this.callEvent("effectChange",{effect:"insertion",parameter:a,value:n});return}}if(s>>4===1){let r=ae.syxToChannel(s&15)+e,i=this.midiChannels[r];switch(i||h.gsFail(`Patch Parameter for ${r}`,t,"Invalid channel number"),a){default:h.gsFail(`Patch Part Parameter for ${r}`,[a]);return;case 0:i.controllerChange(f.bankSelect,n),i.programChange(t[8]);break;case 2:{let o=n===16?-1:n+e;i.setMIDIParameter("rxChannel",o),this.customChannelNumbers||=o!==i.channel,h.gsInfo(`Rx. Channel on ${r}`,o);break}case 19:i.setMIDIParameter("polyMode",n===1),h.gsInfo(`Mono/poly on ${r}`,i.midiParameters.polyMode?"POLY":"MONO");break;case 20:i.setMIDIParameter("assignMode",n),h.gsInfo(`Assign mode on ${r}`,n);break;case 21:{i.setMIDIParameter("drumMap",n);let o=n>0;i.setGSDrums(o),h.gsInfo(`Drums on ${r}`,o.toString());return}case 22:{let o=n-64;i.setMIDIParameter("keyShift",o),h.gsInfo(`Key Shift for ${r}`,o);return}case 25:i.controllerChange(f.mainVolume,n);return;case 26:i.setMIDIParameter("velocitySenseDepth",n),h.gsInfo(`Velocity Sense Depth for ${r}`,n);return;case 27:i.setMIDIParameter("velocitySenseOffset",n),h.gsInfo(`Velocity Sense Offset for ${r}`,n);return;case 28:{let o=n,I=o===0;i.setMIDIParameter("randomPan",I),I?h.gsInfo(`Random pan on ${r}`,"ON"):i.controllerChange(f.pan,o);break}case 31:i.setMIDIParameter("cc1",n),h.gsInfo(`CC1 Controller Number for ${r}`,n);break;case 32:i.setMIDIParameter("cc2",n),h.gsInfo(`CC2 Controller Number for ${r}`,n);break;case 33:i.controllerChange(f.chorusDepth,n);break;case 34:i.controllerChange(f.reverbDepth,n);break;case 42:{let o=((n<<7|t[8])-8192)/81.92;i.setMIDIParameter("fineTune",o),h.gsInfo(`Fine tuning for ${r}`,Math.round(o),"cents");break}case 44:i.controllerChange(f.variationDepth,n);break;case 48:i.controllerChange(f.vibratoRate,n);break;case 49:i.controllerChange(f.vibratoDepth,n);break;case 50:i.controllerChange(f.brightness,n);break;case 51:i.controllerChange(f.filterResonance,n);break;case 52:i.controllerChange(f.attackTime,n);break;case 53:i.controllerChange(f.decayTime,n);break;case 54:i.controllerChange(f.releaseTime,n);break;case 55:i.controllerChange(f.vibratoDelay,n);break;case 64:{let o=t.length-9,I=new Int8Array(12);for(let l=0;l<o;l++)I[l]=t[l+7]-64;i.setOctaveTuning(I),h.gsInfo(`Octave Scale Tuning for ${r}`,I.join(", "));break}}return}if(s>>4===2){let r=ae.syxToChannel(s&15)+e,i=this.midiChannels[r];switch(a&240){default:h.gsFail(`Patch Parameter Controller for ${r}`,[a&240]);break;case 0:if((a&15)===4){let o=n/127*600;i.setMIDIParameter("modulationDepth",o),h.gsInfo(`Modulation depth for ${r}`,Math.round(o),"cents");break}i.dynamicModulators.setupReceiver(a,n,f.modulationWheel,!0,"mod wheel");break;case 16:if((a&15)===0){let o=n-64;i.setMIDIParameter("pitchWheelRange",o),h.gsInfo(`Pitch Wheel Range for ${r}`,o,"semitones");break}i.dynamicModulators.setupReceiver(a,n,Ie.pitchWheel,!1,"pitch wheel",!0);break;case 32:i.dynamicModulators.setupReceiver(a,n,Ie.channelPressure,!1,"channel pressure");break;case 48:i.dynamicModulators.setupReceiver(a,n,Ie.polyPressure,!1,"poly pressure");break;case 64:i.dynamicModulators.setupReceiver(a,n,i.midiParameters.cc1,!0,"CC1");break;case 80:i.dynamicModulators.setupReceiver(a,n,i.midiParameters.cc2,!0,"CC2")}return}if(s>>4===4){let r=ae.syxToChannel(s&15)+e,i=this.midiChannels[r];switch(a){default:h.gsFail("Patch Part Parameter",[a]);break;case 0:case 1:i.controllerChange(f.bankSelectLSB,n);break;case 34:{let o=n===1;i.setMIDIParameter("efxAssign",o),this.insertionActive||=o,h.gsInfo(`EFX assign for ${r}`,o?"EFX":"BYPASS")}}return}h.gsFail("Patch Parameter",t);return}if(A===65||A===81){if(this.systemParameters.drumLock)return;let r=(s>>4)+1,i=a,o=s&15;switch(o){default:h.gsFail("Drum Setup",[o]);return;case 0:{let I=$e(t,12,7);h.gsInfo(`Drum Map Name for MAP${r}`,I),this.callEvent("displayMessage",[...t]);break}case 1:{let I=n-60;for(let l of this.midiChannels)l.midiParameters.drumMap===r&&(l.drumParams[i].pitch=I*(l.patch.bankLSB===1?100:50));h.gsInfo(`Drum Pitch for MAP${r}, key ${i}`,I);break}case 2:for(let I of this.midiChannels)I.midiParameters.drumMap===r&&(I.drumParams[i].gain=n/120);h.gsInfo(`Drum Level for MAP${r}, key ${i}`,n);break;case 3:for(let I of this.midiChannels)I.midiParameters.drumMap===r&&(I.drumParams[i].exclusiveClass=n);h.gsInfo(`Drum Assign Group for MAP${r}, key ${i}`,n);break;case 4:for(let I of this.midiChannels)I.midiParameters.drumMap===r&&(I.drumParams[i].pan=n);h.gsInfo(`Drum Pan for MAP${r}, key ${i}`,n);break;case 5:for(let I of this.midiChannels)I.midiParameters.drumMap===r&&(I.drumParams[i].reverbGain=n/127);h.gsInfo(`Drum Reverb for MAP${r}, key ${i}`,n);break;case 6:for(let I of this.midiChannels)I.midiParameters.drumMap===r&&(I.drumParams[i].chorusGain=n/127);h.gsInfo(`Drum Chorus for MAP${r}, key ${i}`,n);break;case 7:for(let I of this.midiChannels)I.midiParameters.drumMap===r&&(I.drumParams[i].rxNoteOff=n===1);h.gsInfo(`Drum Note Off for MAP${r}, key ${i}`,n===1?"ON":"OFF");break;case 8:for(let I of this.midiChannels)I.midiParameters.drumMap===r&&(I.drumParams[i].rxNoteOn=n===1);h.gsInfo(`Drum Note On for MAP${r}, key ${i}`,n===1?"ON":"OFF");break;case 9:for(let I of this.midiChannels)I.midiParameters.drumMap===r&&(I.drumParams[i].delayGain=n/127);h.gsInfo(`Drum Delay for MAP${r}, key ${i}`,n);break}return}h.gsFail("System Exclusive",t);return}case 69:t[4]===16&&this.callEvent("displayMessage",[...t]);return;case 22:if(t[4]===16){this.setMIDIParameter("volume",t[7]/100),h.coolInfo("Roland Master Volume Control",t[7]);return}else h.unsupported("Roland",t)}else{h.unsupported("Roland",t);return}}function Pr(t,e=0){if(t[2]===76){let A=t[3],s=t[4],a=t[5],n=t[6];if(A===0&&s===0){switch(a){case 0:{let r=(((t[6]&15)<<12|(t[7]&15)<<8|(t[8]&15)<<4|t[9]&15)-1024)/10;this.setMIDIParameter("fineTune",r),h.xgInfo("Master Tune",r,"cents")}break;case 4:this.setMIDIParameter("volume",n/127),h.xgInfo("Master Volume",n);break;case 5:{let r=127-n;this.setMIDIParameter("volume",r/127),h.xgInfo("Master Attenuation",n);break}case 6:{let r=n-64;this.setMIDIParameter("keyShift",r),h.xgInfo("Master Transpose",n);break}case 127:case 126:h.coolInfo("MIDI System","Yamaha XG"),this.reset("xg");break}return}if(A===2&&s===1){let r,i=a;i<=21?r="Reverb":i<=53?r="Chorus":r="Variation",h.xgFail(`${r} parameter`,[i]);return}if(A===8){let r=s+e;if(r>=this.midiChannels.length){h.xgFail("Part Setup",t,`Invalid part number: ${r}`);return}let i=this.midiChannels[r];switch(a){default:h.xgFail("Part Setup",[t[5]]);break;case 1:i.controllerChange(f.bankSelect,n);break;case 2:i.controllerChange(f.bankSelectLSB,n);break;case 3:i.programChange(n);break;case 4:{let o=n+e;i.setMIDIParameter("rxChannel",o),this.customChannelNumbers||=o!==i.channel,h.xgInfo(`Rev. Channel on ${r}`,o);break}case 5:{let o=n===1;i.setMIDIParameter("polyMode",o),h.xgInfo(`Mono/poly on ${r}`,o?"POLY":"MONO");break}case 6:i.setMIDIParameter("assignMode",n),h.xgInfo(`Same Note Number Key On Assign on ${r}`,n);break;case 7:{let o=n!==0;i.setDrums(o),h.xgInfo(`Part Mode on ${r}`,o?"DRUM":"MELODIC");break}case 8:{let o=n-64;i.setMIDIParameter("keyShift",o),h.xgInfo(`Key Shift on ${r}`,o);break}case 11:i.controllerChange(f.mainVolume,n);break;case 12:i.setMIDIParameter("velocitySenseDepth",n),h.xgInfo(`Velocity Sense Depth on ${r}`,n);return;case 13:i.setMIDIParameter("velocitySenseOffset",n),h.xgInfo(`Velocity Sense Offset on ${r}`,n);return;case 14:{let o=n,I=o===0;i.setMIDIParameter("randomPan",I),I?h.xgInfo(`Random Pan for ${r}`,"ON"):i.controllerChange(f.pan,o);break}case 18:i.controllerChange(f.chorusDepth,n);break;case 19:i.controllerChange(f.reverbDepth,n);break;case 21:i.controllerChange(f.vibratoRate,n);break;case 22:i.controllerChange(f.vibratoDepth,n);break;case 23:i.controllerChange(f.vibratoDelay,n);break;case 24:i.controllerChange(f.brightness,n);break;case 25:i.controllerChange(f.filterResonance,n);break;case 26:i.controllerChange(f.attackTime,n);break;case 27:i.controllerChange(f.decayTime,n);break;case 28:i.controllerChange(f.releaseTime,n);break;case 35:{let o=n-64;i.setMIDIParameter("pitchWheelRange",o),h.xgInfo(`Pitch Wheel Range for ${r}`,o,"semitones")}}return}if(A>>4===3){if(this.systemParameters.drumLock)return;let r=s;switch(a){default:h.xgFail("Drum Setup",[a]);return;case 0:{let i=(n-64)*100;for(let o of this.midiChannels)o.drumChannel&&(o.drumParams[r].pitch=i);h.xgInfo(`Drum Pitch for key ${r}`,i,"semitones");break}case 1:{let i=n-64;for(let o of this.midiChannels)o.drumChannel&&(o.drumParams[r].pitch+=i,h.xgInfo(`Drum Pitch for key ${r}`,o.drumParams[r].pitch,"semitones"));break}case 2:for(let i of this.midiChannels)i.drumChannel&&(i.drumParams[r].gain=n/120);h.xgInfo(`Drum Level for key ${r}`,n);break;case 3:for(let i of this.midiChannels)i.drumChannel&&(i.drumParams[r].exclusiveClass=n);h.xgInfo(`Drum Alternate Group for key ${r}`,n);break;case 4:for(let i of this.midiChannels)i.drumChannel&&(i.drumParams[r].pan=n);h.xgInfo(`Drum Pan for key ${r}`,n);break;case 5:for(let i of this.midiChannels)i.drumChannel&&(i.drumParams[r].reverbGain=n/127);h.xgInfo(`Drum Reverb for key ${r}`,n);break;case 6:for(let i of this.midiChannels)i.drumChannel&&(i.drumParams[r].chorusGain=n/127);h.xgInfo(`Drum Chorus for key ${r}`,n);break;case 9:for(let i of this.midiChannels)i.drumChannel&&(i.drumParams[r].rxNoteOff=n===1);h.xgInfo(`Drum Note Off for key ${r}`,n===1?"ON":"OFF");break;case 10:for(let i of this.midiChannels)i.drumChannel&&(i.drumParams[r].rxNoteOn=n===1);h.xgInfo(`Drum Note On for key ${r}`,n===1?"ON":"OFF");break}return}if(A===6||A===7){this.callEvent("displayMessage",[...t]);return}h.xgFail("System Exclusive",t,"Unknown address")}else h.xgFail("System Exclusive",t)}function Nr(t,e=0){e+=this.portSelectChannelOffset;let A=t[0];if(!(this.systemParameters.deviceID!==-1&&t[1]!==127&&this.systemParameters.deviceID!==t[1]))switch(A){default:h.unsupported("System Exclusive",t,`Unknown manufacturer: ${A}`);break;case 126:case 127:Gr.call(this,t,e);break;case 65:Lr.call(this,t,e);break;case 67:Pr.call(this,t,e);break;case 245:if(t.length<2)return;for(this.portSelectChannelOffset=(t[1]-1)*16;this.midiChannels.length<=this.portSelectChannelOffset;){h.info(`%cPort select, channel offset %c${this.portSelectChannelOffset}%c. Creating a new port!`,d.info,d.value,d.info);for(let s=0;s<16;s++)this.createMIDIChannel(!0)}break}}var vn=class{sendLevelToReverb=40/127;sendLevelToChorus=0;sendLevelToDelay=0;type=0;reset(){}process(t,e,A,s,a,n,r,i,o){let{sendLevelToReverb:I,sendLevelToChorus:l,sendLevelToDelay:B}=this;for(let C=0;C<o;C++){let g=t[C],E=e[C],S=i+C;A[S]+=g,s[S]+=E;let k=(g+E)*.5;a[C]+=k*I,n[C]+=k*l,r[C]+=k*B}}setParameter(t,e){}},Ct=class{static data=[[0,200,200,0,0,.05,.05,315,250,200,250,100,-180,0],[.1,205,205,.1,5,.1,.1,315,250,200,250,110,-180,1],[.2,210,210,.2,10,.15,.15,315,250,200,250,120,-180,2],[.3,215,215,.3,15,.2,.2,315,250,200,250,130,-180,3],[.4,220,220,.4,20,.25,.25,315,250,200,250,140,-180,4],[.5,225,225,.5,25,.3,.3,315,250,200,250,150,-180,5],[.6,230,230,.6,30,.35,.35,315,250,200,250,160,-168,5],[.7,235,235,.7,35,.4,.4,315,250,200,250,170,-168,5],[.8,240,240,.8,40,.45,.45,400,315,250,315,180,-168,5],[.9,245,245,.9,45,.5,.5,400,315,250,315,190,-168,5],[1,250,250,1,50,.55,.55,400,315,250,315,200,-156,5],[1.1,255,255,1.1,55,.6,.6,400,315,250,315,210,-156,5],[1.2,260,260,1.2,60,.65,.65,400,315,250,315,220,-156,5],[1.3,265,265,1.3,65,.7,.7,400,315,250,315,230,-156,5],[1.4,270,270,1.4,70,.75,.75,400,315,250,315,240,-144,5],[1.5,275,275,1.5,75,.8,.8,400,315,250,315,250,-144,5],[1.6,280,280,1.6,80,.85,.85,500,400,315,400,260,-144,5],[1.7,285,285,1.7,85,.9,.9,500,400,315,400,270,-144,5],[1.8,290,290,1.8,90,.95,.95,500,400,315,400,280,-132,5],[1.9,295,295,1.9,95,1,1,500,400,315,400,290,-132,5],[2,300,300,2,100,1.05,1.05,500,400,315,400,300,-132,5],[2.1,305,305,2.1,105,1.1,1.1,500,400,315,400,320,-132,5],[2.2,310,310,2.2,110,1.15,1.15,500,400,315,400,340,-120,5],[2.3,315,315,2.3,115,1.2,1.2,500,400,315,400,360,-120,5],[2.4,320,320,2.4,120,1.25,1.25,630,500,400,500,380,-120,5],[2.5,325,325,2.5,125,1.3,1.3,630,500,400,500,400,-120,5],[2.6,330,330,2.6,130,1.35,1.35,630,500,400,500,420,-108,5],[2.7,335,335,2.7,135,1.4,1.4,630,500,400,500,440,-108,5],[2.8,340,340,2.8,140,1.45,1.45,630,500,400,500,460,-108,5],[2.9,345,345,2.9,145,1.5,1.5,630,500,400,500,480,-108,5],[3,350,350,3,150,1.55,1.55,630,500,400,500,500,-96,6],[3.1,355,355,3.1,155,1.6,1.6,630,500,400,500,520,-96,6],[3.2,360,360,3.2,160,1.65,1.65,800,630,500,630,540,-96,6],[3.3,365,365,3.3,165,1.7,1.7,800,630,500,630,560,-96,6],[3.4,370,370,3.4,170,1.75,1.75,800,630,500,630,580,-84,6],[3.5,375,375,3.5,175,1.8,1.8,800,630,500,630,600,-84,6],[3.6,380,380,3.6,180,1.85,1.85,800,630,500,630,620,-84,6],[3.7,385,385,3.7,185,1.9,1.9,800,630,500,630,640,-84,6],[3.8,390,390,3.8,190,1.95,1.95,800,630,500,630,660,-72,6],[3.9,395,395,3.9,195,2,2,800,630,500,630,680,-72,6],[4,400,400,4,200,2.05,2.05,1e3,800,630,800,700,-72,6],[4.1,405,405,4.1,205,2.1,2.1,1e3,800,630,800,720,-72,6],[4.2,410,410,4.2,210,2.15,2.15,1e3,800,630,800,740,-60,6],[4.3,415,415,4.3,215,2.2,2.2,1e3,800,630,800,760,-60,6],[4.4,420,420,4.4,220,2.25,2.25,1e3,800,630,800,780,-60,6],[4.5,425,425,4.5,225,2.3,2.3,1e3,800,630,800,800,-60,6],[4.6,430,430,4.6,230,2.35,2.35,1e3,800,630,800,820,-48,6],[4.7,435,435,4.7,235,2.4,2.4,1e3,800,630,800,840,-48,6],[4.8,440,440,4.8,240,2.45,2.45,1250,1e3,800,1e3,860,-48,9],[4.9,445,445,4.9,245,2.5,2.5,1250,1e3,800,1e3,880,-48,9],[5,450,450,5,250,2.55,2.55,1250,1e3,800,1e3,900,-36,9],[5.5,455,455,5.5,255,2.6,2.6,1250,1e3,800,1e3,920,-36,9],[6,460,460,6,260,2.65,2.65,1250,1e3,800,1e3,940,-36,9],[6.5,465,465,6.5,265,2.7,2.7,1250,1e3,800,1e3,960,-36,9],[7,470,470,7,270,2.75,2.75,1250,1e3,800,1e3,980,-24,9],[7.5,475,475,7.5,275,2.8,2.8,1250,1e3,800,1e3,1e3,-24,9],[8,480,480,8,280,2.85,2.85,1600,1250,1e3,1250,1100,-24,9],[8.5,485,485,8.5,285,2.9,2.9,1600,1250,1e3,1250,1200,-24,9],[9,490,490,9,290,2.95,2.95,1600,1250,1e3,1250,1300,-12,9],[9.5,495,495,9.5,295,3,3,1600,1250,1e3,1250,1400,-12,9],[10,500,500,10,300,3.05,3.05,1600,1250,1e3,1250,1500,-12,9],[11,505,505,11,305,3.1,3.1,1600,1250,1e3,1250,1600,-12,9],[12,510,510,12,310,3.15,3.15,1600,1250,1e3,1250,1700,0,9],[13,515,515,13,315,3.2,3.2,1600,1250,1e3,1250,1800,0,9],[14,520,520,14,320,3.25,3.25,2e3,1600,1250,1600,1900,0,12],[15,525,525,15,325,3.3,3.3,2e3,1600,1250,1600,2e3,0,12],[16,530,530,16,330,3.35,3.35,2e3,1600,1250,1600,2100,12,12],[17,535,535,17,335,3.4,3.4,2e3,1600,1250,1600,2200,12,12],[18,540,540,18,340,3.45,3.45,2e3,1600,1250,1600,2300,12,12],[19,545,545,19,345,3.5,3.5,2e3,1600,1250,1600,2400,12,12],[20,550,550,20,350,3.55,3.55,2e3,1600,1250,1600,2500,24,12],[21,560,555,21,355,3.6,3.6,2e3,1600,1250,1600,2600,24,12],[22,570,560,22,360,3.65,3.65,2500,2e3,1600,2e3,2700,24,12],[23,580,565,23,365,3.7,3.7,2500,2e3,1600,2e3,2800,24,12],[24,590,570,24,370,3.75,3.75,2500,2e3,1600,2e3,2900,36,12],[25,600,575,25,375,3.8,3.8,2500,2e3,1600,2e3,3e3,36,12],[26,610,580,26,380,3.85,3.85,2500,2e3,1600,2e3,3100,36,12],[27,620,585,27,385,3.9,3.9,2500,2e3,1600,2e3,3200,36,12],[28,630,590,28,390,3.95,3.95,2500,2e3,1600,2e3,3300,48,12],[29,640,595,29,395,4,4,2500,2e3,1600,2e3,3400,48,12],[30,650,600,30,400,4.05,4.05,3150,2500,2e3,2500,3500,48,10],[31,660,610,31,405,4.1,4.1,3150,2500,2e3,2500,3600,48,10],[32,670,620,32,410,4.15,4.15,3150,2500,2e3,2500,3700,60,10],[33,680,630,33,415,4.2,4.2,3150,2500,2e3,2500,3800,60,10],[34,690,640,34,420,4.25,4.25,3150,2500,2e3,2500,3900,60,10],[35,700,650,35,425,4.3,4.3,3150,2500,2e3,2500,4e3,60,10],[36,710,660,36,430,4.35,4.35,3150,2500,2e3,2500,4100,72,10],[37,720,670,37,435,4.4,4.4,3150,2500,2e3,2500,4200,72,10],[38,730,680,38,440,4.45,4.45,4e3,3150,2500,3150,4300,72,11],[39,740,690,39,445,4.5,4.5,4e3,3150,2500,3150,4400,72,11],[40,750,700,40,450,4.55,4.55,4e3,3150,2500,3150,4500,84,11],[41,760,710,50,455,4.6,4.6,4e3,3150,2500,3150,4600,84,11],[42,770,720,60,460,4.65,4.65,4e3,3150,2500,3150,4700,84,11],[43,780,730,70,465,4.7,4.7,4e3,3150,2500,3150,4800,84,11],[44,790,740,80,470,4.75,4.75,4e3,3150,2500,3150,4900,96,11],[45,800,750,90,475,4.8,4.8,4e3,3150,2500,3150,5e3,96,11],[46,810,760,100,480,4.85,4.85,5e3,4e3,3150,4e3,5100,96,12],[47,820,770,110,485,4.9,4.9,5e3,4e3,3150,4e3,5200,96,12],[48,830,780,120,490,4.95,4.95,5e3,4e3,3150,4e3,5300,108,12],[49,840,790,130,495,5,5,5e3,4e3,3150,4e3,5400,108,12],[50,850,800,140,500,5.1,5.05,5e3,4e3,3150,4e3,5500,108,12],[52,860,810,150,505,5.2,5.1,5e3,4e3,3150,4e3,5600,108,12],[54,870,820,160,510,5.3,5.15,5e3,4e3,3150,4e3,5700,120,12],[56,880,830,170,515,5.4,5.2,5e3,4e3,3150,4e3,5800,120,12],[58,890,840,180,520,5.5,5.25,6300,5e3,4e3,5e3,5900,120,13],[60,900,850,190,525,5.6,5.3,6300,5e3,4e3,5e3,6e3,120,13],[62,910,860,200,530,5.7,5.35,6300,5e3,4e3,5e3,6100,132,13],[64,920,870,210,535,5.8,5.4,6300,5e3,4e3,5e3,6200,132,13],[66,930,880,220,540,5.9,5.45,6300,5e3,4e3,5e3,6300,132,13],[68,940,890,230,545,6,5.5,6300,5e3,4e3,5e3,6400,132,13],[70,950,900,240,550,6.1,5.55,6300,5e3,4e3,5e3,6500,144,13],[72,960,910,250,555,6.2,5.6,6300,5e3,4e3,5e3,6600,144,13],[74,970,920,260,560,6.3,5.65,8e3,6300,5e3,6300,6700,144,14],[76,980,930,270,565,6.4,5.7,8e3,6300,5e3,6300,6800,144,14],[78,990,940,280,570,6.5,5.75,8e3,6300,5e3,6300,6900,156,14],[80,1e3,950,290,575,6.6,5.8,8e3,6300,5e3,6300,7e3,156,14],[82,1e3,960,300,580,6.7,5.85,8e3,6300,5e3,6300,7100,156,14],[84,1e3,970,320,585,6.8,5.9,8e3,6300,5e3,6300,7200,156,14],[86,1e3,980,340,590,6.9,5.95,8e3,6300,5e3,6300,7300,168,14],[88,1e3,990,360,595,7,6,8e3,6300,5e3,6300,7400,168,14],[90,1e3,1e3,380,600,7.5,6.05,13500,8e3,6300,13500,7500,168,15],[92,1e3,1e3,400,605,8,6.1,13500,8e3,6300,13500,7600,168,15],[94,1e3,1e3,420,610,8.5,6.15,13500,8e3,6300,13500,7700,-180,15],[96,1e3,1e3,440,615,9,6.2,13500,8e3,6300,13500,7800,-180,15],[98,1e3,1e3,460,620,9.5,6.25,13500,8e3,6300,13500,7900,-180,15],[100,1e3,1e3,480,625,10,6.3,13500,8e3,6300,13500,8e3,-180,15],[100,1e3,1e3,500,630,10,6.35,13500,8e3,6300,13500,8e3,-180,15],[100,1e3,1e3,500,635,10,6.4,13500,8e3,6300,13500,8e3,-180,15]];static preDelayTime(t){return this.data[t][0]}static delayTime1(t){return this.data[t][1]}static delayTime2(t){return this.data[t][2]}static delayTime3(t){return this.data[t][3]}static delayTime4(t){return this.data[t][4]}static rate1(t){return this.data[t][5]}static rate2(t){return this.data[t][6]}static hfDamp(t){return this.data[t][7]}static cutoffFreq(t){return this.data[t][8]}static eqFreq(t){return this.data[t][9]}static lpf(t){return this.data[t][10]}static manual(t){return this.data[t][11]}static azimuth(t){return this.data[t][12]}static accl(t){return this.data[t][13]}},Os=Math.PI/2,QA=-64,Fn=63,ms=Fn-QA,wA=new Float32Array(ms+1),MA=new Float32Array(ms+1);for(let t=QA;t<=Fn;t++){let e=(t-QA)/ms,A=t-QA;wA[A]=Math.cos(Os*e),MA[A]=Math.sin(Os*e)}function Se(t){t.x1=t.x2=t.y1=t.y2=0}var qe={b0:1,b1:0,b2:0,a0:1,a1:0,a2:0};function wt(t,e,A,s,a){let n=e.b0*t+e.b1*s.x1+e.b2*s.x2-e.a1*s.y1-e.a2*s.y2;s.x2=s.x1,s.x1=t,s.y2=s.y1,s.y1=n;let r=A.b0*n+A.b1*a.x1+A.b2*a.x2-A.a1*a.y1-A.a2*a.y2;return a.x2=a.x1,a.x1=n,a.y2=a.y1,a.y1=r,r}function gt(t,e,A){let s=e.b0*t+e.b1*A.x1+e.b2*A.x2-e.a1*A.y1-e.a2*A.y2;return A.x2=A.x1,A.x1=t,A.y2=A.y1,A.y1=s,s}function ft(t,e,A,s,a){let n=Math.pow(10,e/40),r=2*Math.PI*A/s,i=Math.cos(r),o=Math.sin(r)/2*Math.sqrt((n+1/n)*(1/1-1)+2),I,l,B,C,g,E;a?(I=n*(n+1-(n-1)*i+2*Math.sqrt(n)*o),l=2*n*(n-1-(n+1)*i),B=n*(n+1-(n-1)*i-2*Math.sqrt(n)*o),C=n+1+(n-1)*i+2*Math.sqrt(n)*o,g=-2*(n-1+(n+1)*i),E=n+1+(n-1)*i-2*Math.sqrt(n)*o):(I=n*(n+1+(n-1)*i+2*Math.sqrt(n)*o),l=-2*n*(n-1+(n+1)*i),B=n*(n+1+(n-1)*i-2*Math.sqrt(n)*o),C=n+1-(n-1)*i+2*Math.sqrt(n)*o,g=2*(n-1-(n+1)*i),E=n+1-(n-1)*i-2*Math.sqrt(n)*o),t.b0=I/C,t.b1=l/C,t.b2=B/C,t.a0=1,t.a1=g/C,t.a2=E/C}var be={x1:0,x2:0,y1:0,y2:0},Tr=class{type=256;sendLevelToReverb=0;sendLevelToChorus=0;sendLevelToDelay=0;sampleRate;level=1;lowFreq=400;lowGain=5;hiFreq=8e3;hiGain=-12;m1Freq=1600;m1Q=.5;m1Gain=8;m2Freq=1e3;m2Q=.5;m2Gain=-8;lowCoeffs={...qe};m1Coeffs={...qe};m2Coeffs={...qe};hiCoeffs={...qe};lowStateL={...be};lowStateR={...be};m1StateL={...be};m1StateR={...be};m2StateL={...be};m2StateR={...be};hiStateL={...be};hiStateR={...be};constructor(t){this.sampleRate=t,this.reset(),this.updateCoefficients()}reset(){this.level=1,this.lowFreq=400,this.lowGain=5,this.hiGain=-12,this.hiFreq=8e3,this.m1Freq=1600,this.m1Q=.5,this.m1Gain=8,this.m2Freq=1e3,this.m2Q=.5,this.m2Gain=-8,Se(this.lowStateL),Se(this.lowStateR),Se(this.m1StateL),Se(this.m1StateR),Se(this.m2StateL),Se(this.m2StateR),Se(this.hiStateL),Se(this.hiStateR),this.updateCoefficients()}setParameter(t,e){switch(t){default:break;case 3:this.lowFreq=e===1?400:200;break;case 4:this.lowGain=e-64;break;case 5:this.hiFreq=e===1?8e3:4e3;break;case 6:this.hiGain=e-64;break;case 7:this.m1Freq=Ct.eqFreq(e);break;case 8:this.m1Q=[.5,1,2,4,9][e]||1;break;case 9:this.m1Gain=e-64;break;case 10:this.m2Freq=Ct.eqFreq(e);break;case 11:this.m2Q=[.5,1,2,4,9][e]||1;break;case 12:this.m2Gain=e-64;break;case 22:this.level=e/127;break}this.updateCoefficients()}process(t,e,A,s,a,n,r,i,o){let{level:I,sendLevelToChorus:l,sendLevelToDelay:B,sendLevelToReverb:C,lowCoeffs:g,lowStateL:E,lowStateR:S,m1Coeffs:k,m1StateL:u,m1StateR:M,m2StateL:w,m2StateR:R,m2Coeffs:F,hiCoeffs:N,hiStateL:m,hiStateR:p}=this;for(let y=0;y<o;y++){let V=t[y],Y=e[y];V=gt(V,g,E),Y=gt(Y,g,S),V=gt(V,k,u),Y=gt(Y,k,M),V=gt(V,F,w),Y=gt(Y,F,R),V=gt(V,N,m),Y=gt(Y,N,p);let q=i+y;A[q]+=V*I,s[q]+=Y*I;let J=.5*(V+Y);a[y]+=J*C,n[y]+=J*l,r[y]+=J*B}}updateCoefficients(){Ur(this.lowCoeffs,this.lowFreq,this.lowGain/2,this.sampleRate),Ys(this.m1Coeffs,this.m1Freq,this.m1Gain,this.m1Q,this.sampleRate),Ys(this.m2Coeffs,this.m2Freq,this.m2Gain,this.m2Q,this.sampleRate),xr(this.hiCoeffs,this.hiFreq,this.hiGain/2,this.sampleRate)}},Gn=1;function Ys(t,e,A,s,a){let n=Math.pow(10,A/40),r=2*Math.PI*e/a,i=Math.cos(r),o=Math.sin(r)/(2*s),I=1+o*n,l=-2*i,B=1-o*n,C=1+o/n,g=-2*i,E=1-o/n;t.a0=1,t.a1=g/C,t.a2=E/C,t.b0=I/C,t.b1=l/C,t.b2=B/C}function Ur(t,e,A,s){let a=Math.pow(10,A/40),n=2*Math.PI*e/s,r=Math.cos(n),i=Math.sin(n)/2*Math.sqrt((a+1/a)*(1/Gn-1)+2),o=a*(a+1-(a-1)*r+2*Math.sqrt(a)*i),I=2*a*(a-1-(a+1)*r),l=a*(a+1-(a-1)*r-2*Math.sqrt(a)*i),B=a+1+(a-1)*r+2*Math.sqrt(a)*i,C=-2*(a-1+(a+1)*r),g=a+1+(a-1)*r-2*Math.sqrt(a)*i;t.a0=1,t.a1=C/B,t.a2=g/B,t.b0=o/B,t.b1=I/B,t.b2=l/B}function xr(t,e,A,s){let a=Math.pow(10,A/40),n=2*Math.PI*e/s,r=Math.cos(n),i=Math.sin(n)/2*Math.sqrt((a+1/a)*(1/Gn-1)+2),o=a*(a+1+(a-1)*r+2*Math.sqrt(a)*i),I=-2*a*(a-1+(a+1)*r),l=a*(a+1+(a-1)*r-2*Math.sqrt(a)*i),B=a+1-(a-1)*r+2*Math.sqrt(a)*i,C=2*(a-1-(a+1)*r),g=a+1-(a-1)*r-2*Math.sqrt(a)*i;t.a0=1,t.a1=C/B,t.a2=g/B,t.b0=o/B,t.b1=I/B,t.b2=l/B}var Lt=8,ZA=128,qs=4,WA=600,Hr=.9,Js=.35,Ln=class{sendLevelToReverb=40/127;sendLevelToChorus=0;sendLevelToDelay=0;type=288;manual=620;rate=.85;depth=64/ZA;reso=16/127;mix=1;lowGain=0;hiGain=0;prevInL;prevOutL;prevInR;prevOutR;lowShelfCoef={...qe};highShelfCoef={...qe};manualOffset=WA;lowShelfStateL={x1:0,x2:0,y1:0,y2:0};lowShelfStateR={x1:0,x2:0,y1:0,y2:0};highShelfStateL={x1:0,x2:0,y1:0,y2:0};highShelfStateR={x1:0,x2:0,y1:0,y2:0};prevL=0;prevR=0;level=104/127;phase=Js;sampleRate;constructor(t){this.sampleRate=t,this.prevInL=new Float32Array(Lt),this.prevOutL=new Float32Array(Lt),this.prevInR=new Float32Array(Lt),this.prevOutR=new Float32Array(Lt),this.reset()}reset(){this.phase=Js,this.setManual(620),this.rate=.85,this.depth=64/ZA,this.reso=16/127,this.mix=1,this.lowGain=0,this.hiGain=0,this.level=104/127,Se(this.highShelfStateL),Se(this.highShelfStateR),Se(this.lowShelfStateL),Se(this.lowShelfStateR),this.updateShelves(),this.clearAllPass()}process(t,e,A,s,a,n,r,i,o){let{sendLevelToReverb:I,sendLevelToChorus:l,sendLevelToDelay:B,level:C,manual:g,manualOffset:E,mix:S,lowShelfCoef:k,lowShelfStateR:u,lowShelfStateL:M,highShelfCoef:w,highShelfStateL:R,highShelfStateR:F,prevInL:N,prevInR:m,prevOutL:p,prevOutR:y,sampleRate:V,depth:Y}=this,{prevL:q,prevR:J,phase:te}=this,x=this.rate/this.sampleRate,D=this.reso*Hr;for(let Q=0;Q<o;Q++){let T=wt(t[Q],k,w,M,R),H=wt(e[Q],k,w,u,F),z=2*Math.abs(te-.5);(te+=x)>=1&&(te-=1);let j=E+g*(1-Y*z),W=Math.tan(Math.PI*j/V),K=Math.max(-.9999,Math.min(.9999,(1-W)/(1+W))),ee=T+D*q,Ae=H+D*J;for(let Ee=0;Ee<Lt;Ee++){let Re=-K*ee+N[Ee]+K*p[Ee];N[Ee]=ee,p[Ee]=Re,ee=Re;let Oe=-K*Ae+m[Ee]+K*y[Ee];m[Ee]=Ae,y[Ee]=Oe,Ae=Oe}q=ee,J=Ae;let O=(T+ee*S)*C,re=(H+Ae*S)*C,ue=i+Q;A[ue]+=O,s[ue]+=re;let Le=(O+re)*.5;a[Q]+=Le*I,n[Q]+=Le*l,r[Q]+=Le*B}this.phase=te,this.prevL=q,this.prevR=J}setParameter(t,e){switch(t){default:break;case 3:this.setManual(Ct.manual(e));break;case 4:this.rate=Ct.rate1(e);break;case 5:this.depth=e/ZA;break;case 6:this.reso=e/127;break;case 7:this.mix=e/127;break;case 19:this.lowGain=e-64;break;case 20:this.hiGain=e-64;break;case 22:this.level=e/127;break}this.updateShelves()}setManual(t){t>1e3?(this.manualOffset=WA*1.5*qs,this.manual=t):(this.manualOffset=WA,this.manual=t*qs)}clearAllPass(){this.prevR=0,this.prevL=0;for(let t=0;t<Lt;t++)this.prevInL[t]=0,this.prevOutL[t]=0,this.prevInR[t]=0,this.prevOutR[t]=0}updateShelves(){ft(this.lowShelfCoef,this.lowGain,200,this.sampleRate,!0),ft(this.highShelfCoef,this.hiGain,4e3,this.sampleRate,!1)}},Ks=Math.PI*2,Or=.935,Yr=2,qr=.01,Vs=127,Jr=class{sendLevelToReverb=40/127;sendLevelToChorus=0;sendLevelToDelay=0;type=294;modWave=1;modRate=3.05;modDepth=96;lowGain=0;hiGain=0;level=Vs/127;currentPan=0;phase=0;lsCoeffs={...qe};hsCoeffs={...qe};lsStateR={...be};lsStateL={...be};hsStateR={...be};hsStateL={...be};sampleRate;constructor(t){this.sampleRate=t,this.reset()}reset(){this.modWave=1,this.modRate=3.05,this.modDepth=96,this.lowGain=0,this.hiGain=0,this.level=Vs/127,this.currentPan=0,this.phase=0,Se(this.hsStateR),Se(this.hsStateL),Se(this.lsStateR),Se(this.lsStateL),this.updateShelves()}process(t,e,A,s,a,n,r,i,o){let{sendLevelToReverb:I,sendLevelToChorus:l,sendLevelToDelay:B,level:C,lsCoeffs:g,lsStateL:E,lsStateR:S,hsCoeffs:k,hsStateR:u,hsStateL:M,modWave:w}=this,R=Math.pow(this.modDepth/127,Yr),F=2/(1+R)*Or,N=this.modRate/this.sampleRate,{phase:m,currentPan:p}=this;for(let y=0;y<o;y++){let V=wt(t[y],g,k,E,M),Y=wt(e[y],g,k,S,u),q;switch(w){default:q=1-4*Math.abs(m-.5);break;case 1:q=m>.5?-1:-Math.cos((m-.75)*Ks);break;case 2:q=Math.sin(Ks*m);break;case 3:q=1-2*m;break;case 4:q=2*m-1;break}(m+=N)>=1&&(m-=1),p+=(q-p)*qr;let J=p*R,te=(1-J)*.5*F,x=(1+J)*.5*F,D=V*C*te,Q=Y*C*x,T=i+y;A[T]+=D,s[T]+=Q;let H=(D+Q)*.5;a[y]+=H*I,n[y]+=H*l,r[y]+=H*B}this.currentPan=p,this.phase=m}setParameter(t,e){switch(t){default:break;case 3:this.modWave=e;break;case 4:this.modRate=Ct.rate1(e);break;case 5:this.modDepth=e;break;case 19:this.lowGain=e-64;break;case 20:this.hiGain=e-64;break;case 22:this.level=e/127;break}this.updateShelves()}updateShelves(){ft(this.lsCoeffs,this.lowGain,200,this.sampleRate,!0),ft(this.hsCoeffs,this.hiGain,4e3,this.sampleRate,!1)}},Xs=96,Kr=.1,Vr=.1,Xr=27,Zr=28,Wr=-28,zr=400,_r=.62,$r=.005,Pn=5,Zs=Pn*.5,Nn=class{sendLevelToReverb=40/127;sendLevelToChorus=0;sendLevelToDelay=0;type=289;filType=1;sens=0;manual=68;peak=62;rate=2.05;depth=72;polarity=1;pan=0;lowGain=0;hiGain=0;level=Xs/127;coeffs={...qe};state={...be};hpCoeffs={...qe};hpState={...be};phase=0;lsCoeffs={...qe};hsCoeffs={...qe};lsState={...be};hsState={...be};sampleRate;lastFc=this.manual;attackCoeff;releaseCoeff;envelope=0;constructor(t){this.sampleRate=t,this.attackCoeff=Math.exp(-1/(Kr*t)),this.releaseCoeff=Math.exp(-1/(Vr*t)),this.reset()}reset(){this.filType=1,this.sens=0,this.setManual(68),this.peak=62,this.rate=2.05,this.depth=72,this.polarity=1,this.lowGain=0,this.hiGain=0,this.pan=0,this.level=Xs/127,this.phase=.2,this.lastFc=this.manual,Se(this.hsState),Se(this.lsState),Se(this.state),Se(this.hpState),this.updateShelves()}process(t,e,A,s,a,n,r,i,o){let{sendLevelToReverb:I,sendLevelToChorus:l,sendLevelToDelay:B,level:C,lsCoeffs:g,lsState:E,hsCoeffs:S,hsState:k,coeffs:u,state:M,sampleRate:w,filType:R,manual:F,pan:N,attackCoeff:m,releaseCoeff:p,hpState:y,hpCoeffs:V}=this,{phase:Y,lastFc:q,envelope:J}=this,te=this.rate/this.sampleRate,x=Math.pow(10,this.peak/127*Zr/20),D=Math.pow(10,this.peak/127*Wr/20),Q=this.polarity===0?-1:Pn,T=this.depth/127*Q,H=this.sens/127,z=N+64|0,j=wA[z],W=MA[z];for(let K=0;K<o;K++){let ee=wt((t[K]+e[K])*.5,g,S,E,k),Ae=Math.abs(ee);J=Ae>J?m*J+(1-m)*Ae:p*J+(1-p)*Ae;let O=2*Math.abs(Y-.5)*T;(Y+=te)>=1&&(Y-=1);let re=O>=Zs||Q<0?1:Math.sin(O*Math.PI/(2*Zs)),ue=F*(1+H*J*Xr),Le=Math.max(20,ue*(1+re*O));q+=(Math.max(10,Le)-q)*$r,jr(u,q,x,w);let Ee=ee;R===1&&(ei(V,zr,D,w),Ee=gt(Ee,V,y));let Re=gt(Ee,u,M)*C,Oe=Re*j,Bt=Re*W,Et=i+K;A[Et]+=Oe,s[Et]+=Bt,a[K]+=Re*I,n[K]+=Re*l,r[K]+=Re*B}this.phase=Y,this.lastFc=q,this.envelope=J}setParameter(t,e){switch(t){default:break;case 3:this.filType=e;break;case 4:this.sens=e;break;case 5:this.setManual(e);break;case 6:this.peak=e;break;case 7:this.rate=Ct.rate1(e);break;case 8:this.depth=e;break;case 9:this.polarity=e;break;case 19:this.lowGain=e-64;break;case 20:this.hiGain=e-64;break;case 21:this.pan=e-64;break;case 22:this.level=e/127;break}this.updateShelves()}setManual(t){let e=t*_r,A=Ct.manual(Math.floor(e)),s=Ct.manual(Math.ceil(e)),a=e-Math.floor(e);this.manual=A+(s-A)*a}updateShelves(){ft(this.lsCoeffs,this.lowGain,200,this.sampleRate,!0),ft(this.hsCoeffs,this.hiGain,4e3,this.sampleRate,!1)}};function jr(t,e,A,s){let a=2*Math.PI*e/s,n=Math.cos(a),r=Math.sin(a)/(2*A),i=1-n,o=i/2,I=o,l=1+r,B=-2*n,C=1-r;t.a0=1,t.a1=B/l,t.a2=C/l,t.b0=o/l,t.b1=i/l,t.b2=I/l}function ei(t,e,A,s){let a=2*Math.PI*e/s,n=Math.cos(a),r=Math.sin(a)/(2*A),i=(1+n)/2,o=-(1+n),I=i,l=1+r,B=-2*n,C=1-r;t.a0=1,t.a1=B/l,t.a2=C/l,t.b0=i/l,t.b1=o/l,t.b2=I/l}var Ws=127,ti=class{sendLevelToReverb=40/127;sendLevelToChorus=0;sendLevelToDelay=0;type=4360;phPan=0;awPan=127;level=Ws/127;phaser;autoWah;bufferPh;bufferAw;constructor(t,e){this.phaser=new Ln(t),this.autoWah=new Nn(t),this.bufferAw=new Float32Array(e),this.bufferPh=new Float32Array(e),this.phaser.sendLevelToReverb=0,this.phaser.sendLevelToChorus=0,this.phaser.sendLevelToDelay=0,this.autoWah.sendLevelToReverb=0,this.autoWah.sendLevelToChorus=0,this.autoWah.sendLevelToDelay=0,this.reset()}reset(){this.phPan=0,this.awPan=127,this.level=Ws/127,this.phaser.reset(),this.autoWah.reset(),this.phaser.setParameter(22,127),this.autoWah.setParameter(22,127)}process(t,e,A,s,a,n,r,i,o){let{sendLevelToReverb:I,sendLevelToChorus:l,sendLevelToDelay:B,level:C}=this,{bufferPh:g,bufferAw:E}=this;this.bufferPh.fill(0),this.phaser.process(t,t,g,g,g,g,g,0,o),this.bufferAw.fill(0),this.autoWah.process(e,e,E,E,E,E,E,0,o);let S=this.phPan|0,k=wA[S],u=MA[S],M=this.awPan|0,w=wA[M],R=MA[M];for(let F=0;F<o;F++){let N=g[F]*.5*C,m=E[F]*.5*C,p=N*k+m*w,y=N*u+m*R,V=i+F;A[V]+=p,s[V]+=y;let Y=(p+y)*.5;a[F]+=Y*I,n[F]+=Y*l,r[F]+=Y*B}}setParameter(t,e){if(t>=3&&t<=7){this.phaser.setParameter(t,e);return}if(t>=8&&t<=14){this.autoWah.setParameter(t-5,e);return}switch(t){default:break;case 18:this.phPan=e;break;case 19:this.phaser.setParameter(22,e);break;case 20:this.awPan=e;break;case 21:this.autoWah.setParameter(22,e);break;case 22:this.level=e/127;break}}},zs=127,_s=Math.PI*2,Ai=.01,si=class{sendLevelToReverb=40/127;sendLevelToChorus=0;sendLevelToDelay=0;type=293;modWave=1;modRate=3.05;modDepth=96;lowGain=0;hiGain=0;level=zs/127;phase=0;currentGain=1;lsCoeffs={...qe};hsCoeffs={...qe};lsStateR={...be};lsStateL={...be};hsStateR={...be};hsStateL={...be};sampleRate;constructor(t){this.sampleRate=t,this.reset()}reset(){this.modWave=1,this.modRate=3.05,this.modDepth=96,this.lowGain=0,this.hiGain=0,this.level=zs/127,this.phase=0,this.currentGain=1,Se(this.hsStateR),Se(this.hsStateL),Se(this.lsStateR),Se(this.lsStateL),this.updateShelves()}process(t,e,A,s,a,n,r,i,o){let{sendLevelToReverb:I,sendLevelToChorus:l,sendLevelToDelay:B,level:C,lsCoeffs:g,lsStateL:E,lsStateR:S,hsCoeffs:k,hsStateR:u,hsStateL:M,modDepth:w,modWave:R}=this,F=this.modRate/this.sampleRate,{currentGain:N,phase:m}=this;for(let p=0;p<o;p++){let y=wt(t[p],g,k,E,M),V=wt(e[p],g,k,S,u),Y;switch(R){default:Y=1-4*Math.abs(m-.5);break;case 1:Y=m>.5?-1:-Math.cos((m-.75)*_s);break;case 2:Y=Math.sin(_s*m);break;case 3:Y=1-2*m;break;case 4:Y=2*m-1;break}(m+=F)>=1&&(m-=1);let q=1-(Y/2+.5)*(w/127);N+=(q-N)*Ai;let J=y*C*N,te=V*C*N,x=i+p;A[x]+=J,s[x]+=te;let D=(J+te)*.5;a[p]+=D*I,n[p]+=D*l,r[p]+=D*B}this.phase=m,this.currentGain=N}setParameter(t,e){switch(t){default:break;case 3:this.modWave=e;break;case 4:this.modRate=Ct.rate1(e);break;case 5:this.modDepth=e;break;case 19:this.lowGain=e-64;break;case 20:this.hiGain=e-64;break;case 22:this.level=e/127;break}this.updateShelves()}updateShelves(){ft(this.lsCoeffs,this.lowGain,200,this.sampleRate,!0),ft(this.hsCoeffs,this.hiGain,4e3,this.sampleRate,!1)}},ni=[vn,Tr,Ln,Jr,Nn,ti,si],ai=class{preDelay=0;preLPF=.5;inputDiffusion1=.75;inputDiffusion2=.625;decay=.5;decayDiffusion1=.7;decayDiffusion2=.5;damping=.005;excursionRate=.1;excursionDepth=.2;gain=1;sampleRate;lp1=0;lp2=0;lp3=0;excPhase=0;pDWrite=0;taps;pDelay;pDLength;delays=new Array;constructor(t){this.sampleRate=t,this.pDLength=t,this.pDelay=new Float32Array(this.pDLength);for(let e of[.004771345,.003595309,.012734787,.009307483,.022579886,.149625349,.060481839,.1249958,.030509727,.141695508,.089244313,.106280031])this.makeDelayLine(e);this.taps=Int16Array.from([.008937872,.099929438,.064278754,.067067639,.066866033,.006283391,.035818689,.011861161,.121870905,.041262054,.08981553,.070931756,.011256342,.004065724],e=>Math.round(e*this.sampleRate))}process(t,e,A,s,a){let n=this.preDelay|0,r=this.inputDiffusion1,i=this.inputDiffusion2,o=this.decay,I=this.decayDiffusion1,l=this.decayDiffusion2,B=1-this.damping,C=this.excursionRate/this.sampleRate,g=this.excursionDepth*this.sampleRate/1e3,E=this.pDWrite;for(let S=0;S<a;S++)this.pDelay[(E+S)%this.pDLength]=t[S];for(let S=0;S<a;S++){this.lp1+=this.preLPF*(this.pDelay[(this.pDLength+this.pDWrite-n+S)%this.pDLength]-this.lp1);let k=this.writeDelay(0,this.lp1-r*this.readDelay(0));k=this.writeDelay(1,r*(k-this.readDelay(1))+this.readDelay(0)),k=this.writeDelay(2,r*k+this.readDelay(1)-i*this.readDelay(2)),k=this.writeDelay(3,i*(k-this.readDelay(3))+this.readDelay(2));let u=i*k+this.readDelay(3),M=g*(1+Math.cos(this.excPhase*6.28)),w=g*(1+Math.sin(this.excPhase*6.2847)),R=this.writeDelay(4,u+o*this.readDelay(11)+I*this.readDelayCAt(4,M));this.writeDelay(5,this.readDelayCAt(4,M)-I*R),this.lp2+=B*(this.readDelay(5)-this.lp2),R=this.writeDelay(6,o*this.lp2-l*this.readDelay(6)),this.writeDelay(7,this.readDelay(6)+l*R),R=this.writeDelay(8,u+o*this.readDelay(7)+I*this.readDelayCAt(8,w)),this.writeDelay(9,this.readDelayCAt(8,w)-I*R),this.lp3+=B*(this.readDelay(9)-this.lp3),R=this.writeDelay(10,o*this.lp3-l*this.readDelay(10)),this.writeDelay(11,this.readDelay(10)+l*R);let F=this.readDelayAt(9,this.taps[0])+this.readDelayAt(9,this.taps[1])-this.readDelayAt(10,this.taps[2])+this.readDelayAt(11,this.taps[3])-this.readDelayAt(5,this.taps[4])-this.readDelayAt(6,this.taps[5])-this.readDelayAt(7,this.taps[6]),N=S+s;e[N]+=F*this.gain;let m=this.readDelayAt(5,this.taps[7])+this.readDelayAt(5,this.taps[8])-this.readDelayAt(6,this.taps[9])+this.readDelayAt(7,this.taps[10])-this.readDelayAt(9,this.taps[11])-this.readDelayAt(10,this.taps[12])-this.readDelayAt(11,this.taps[13]);A[N]+=m*this.gain,this.excPhase+=C;for(let p=0,y=this.delays[0];p<this.delays.length;y=this.delays[++p])y[1]=y[1]+1&y[3],y[2]=y[2]+1&y[3]}this.pDWrite=(E+a)%this.pDLength}makeDelayLine(t){let e=Math.round(t*this.sampleRate),A=2**Math.ceil(Math.log2(e));this.delays.push([new Float32Array(A),e-1,0,A-1])}writeDelay(t,e){return this.delays[t][0][this.delays[t][1]]=e}readDelay(t){return this.delays[t][0][this.delays[t][2]]}readDelayAt(t,e){let A=this.delays[t];return A[0][A[2]+e&A[3]]}readDelayCAt(t,e){let A=this.delays[t],s=e-~~e,a=A[3],n=~~e+A[2]-1,r=A[0][n++&a],i=A[0][n++&a],o=A[0][n++&a],I=A[0][n&a],l=(3*(i-o)-r+I)/2,B=2*o+r-(5*i+I)/2,C=(o-r)/2;return((l*s+B)*s+C)*s+i}},Zt=class{feedback=0;gain=1;buffer;bufferLength;writeIndex=0;constructor(t){this.buffer=new Float32Array(t),this.bufferLength=this.buffer.length,this._time=t-5}_time;get time(){return this._time}set time(t){this._time=Math.min(this.bufferLength,t)|0}clear(){this.buffer.fill(0)}process(t,e,A){let s=this.writeIndex,a=this._time,n=this.buffer,r=this.bufferLength,i=this.feedback,o=this.gain;for(let I=0;I<A;I++){let l=s-a;l<0&&(l+=r);let B=n[l];e[I]=B*o,n[s]=t[I]+B*i,++s>=r&&(s=0)}this.writeIndex=s}},ri=1.5,ii=class{dattorro;delayLeft;delayRight;delayLeftOutput;delayRightOutput;delayLeftInput;delayPreLPF;sampleRate;preLPFfc=8e3;preLPFa=0;preLPFz=0;characterTimeCoefficient=1;characterGainCoefficient=1;characterLPFCoefficient=0;delayGain=1;panDelayFeedback=0;constructor(t,e){this.sampleRate=t,this.delayLeftOutput=new Float32Array(e),this.delayRightOutput=new Float32Array(e),this.delayLeftInput=new Float32Array(e),this.delayPreLPF=new Float32Array(e),this.dattorro=new ai(t),this.delayLeft=new Zt(t),this.delayRight=new Zt(t)}_delayFeedback=0;get delayFeedback(){return this._delayFeedback}set delayFeedback(t){this._delayFeedback=t,this.updateFeedback()}_character=0;get character(){return this._character}set character(t){switch(this._character=t,this.dattorro.damping=.005,this.characterTimeCoefficient=1,this.characterGainCoefficient=1,this.characterLPFCoefficient=0,this.dattorro.inputDiffusion1=.75,this.dattorro.inputDiffusion2=.625,this.dattorro.decayDiffusion1=.7,this.dattorro.decayDiffusion2=.5,this.dattorro.excursionRate=.5,this.dattorro.excursionDepth=.7,t){case 0:this.dattorro.damping=.85,this.characterTimeCoefficient=.9,this.characterGainCoefficient=.9,this.characterLPFCoefficient=.2;break;case 1:this.dattorro.damping=.2,this.characterGainCoefficient=.7,this.characterTimeCoefficient=1,this.dattorro.decayDiffusion2=.64,this.dattorro.decayDiffusion1=.6,this.characterLPFCoefficient=.2;break;case 2:this.dattorro.damping=.56,this.characterGainCoefficient=.75,this.characterTimeCoefficient=1,this.dattorro.decayDiffusion2=.64,this.dattorro.decayDiffusion1=.6,this.characterLPFCoefficient=.1;break;case 3:this.dattorro.damping=.3,this.characterGainCoefficient=1.25,this.characterTimeCoefficient=1.3,this.characterLPFCoefficient=0,this.dattorro.decayDiffusion2=.7,this.dattorro.decayDiffusion1=.66;break;case 4:this.characterGainCoefficient=1,this.characterTimeCoefficient=1.2,this.characterLPFCoefficient=.1,this.dattorro.damping=.1,this.dattorro.decayDiffusion2=.69,this.dattorro.decayDiffusion1=.67;break;case 5:this.characterGainCoefficient=.75,this.dattorro.damping=.65,this.characterTimeCoefficient=.5;break}this.updateTime(),this.updateGain(),this.updateLowpass(),this.updateFeedback(),this.delayLeft.clear(),this.delayRight.clear()}_time=0;get time(){return this._time}set time(t){this._time=t,this.updateTime()}_preDelayTime=0;get preDelayTime(){return this._preDelayTime}set preDelayTime(t){this._preDelayTime=t,this.dattorro.preDelay=t/1e3*this.sampleRate}_level=0;get level(){return this._level}set level(t){this._level=t,this.updateGain()}_preLowpass=0;get preLowpass(){return this._preLowpass}set preLowpass(t){this._preLowpass=t,this.preLPFfc=8e3*.63**this._preLowpass;let e=Math.exp(-2*Math.PI*this.preLPFfc/this.sampleRate);this.preLPFa=1-e,this.updateLowpass()}process(t,e,A,s,a){switch(this._character){default:this.dattorro.process(t,e,A,s,a);return;case 6:{let n;if(this._preLowpass>0){let o=this.delayPreLPF,I=this.preLPFz,l=this.preLPFa;for(let B=0;B<a;B++){let C=t[B];I+=l*(C-I),o[B]=I}this.preLPFz=I,n=o}else n=t;this.delayLeft.process(n,this.delayLeftOutput,a);let r=this.delayGain,i=this.delayLeftOutput;for(let o=0,I=s;o<a;o++,I++){let l=i[o]*r;A[I]+=l,e[I]+=l}return}case 7:{let n;if(this._preLowpass>0){let B=this.delayPreLPF,C=this.preLPFz,g=this.preLPFa;for(let E=0;E<a;E++){let S=t[E];C+=g*(S-C),B[E]=C}this.preLPFz=C,n=B}else n=t;let r=this.panDelayFeedback,{delayLeftInput:i,delayLeftOutput:o,delayRightOutput:I}=this;for(let B=0;B<a;B++)i[B]=n[B]+I[B]*r;this.delayLeft.process(i,o,a),this.delayRight.process(o,I,a);let l=this.delayGain;for(let B=0,C=s;B<a;B++,C++)e[C]+=o[B]*l,A[C]+=I[B]*l;return}}}getSnapshot(){return{level:this._level,preLowpass:this._preLowpass,character:this._character,time:this._time,delayFeedback:this._delayFeedback,preDelayTime:this._preDelayTime}}updateFeedback(){let t=1-(1-this._delayFeedback/127)**1.9;this._character===6?this.delayLeft.feedback=t*.73:(this.delayLeft.feedback=this.delayRight.feedback=0,this.panDelayFeedback=t*.73)}updateLowpass(){this.dattorro.preLPF=Math.min(1,.1+(7-this.preLowpass)/14+this.characterLPFCoefficient)}updateGain(){this.dattorro.gain=this._level/345*this.characterGainCoefficient,this.delayGain=this._level/127*ri}updateTime(){let t=this._time/127;this.dattorro.decay=this.characterTimeCoefficient*(.05+.65*t);let e=Math.max(21,t*this.sampleRate*.4468|0);this.character===7?this.delayRight.time=this.delayLeft.time=Math.floor(e/2):this.delayLeft.time=e}},oi=1.3,gi=class{preLPFfc=8e3;preLPFa=0;preLPFz=0;leftDelayBuffer;rightDelayBuffer;sampleRate;phase=0;write=0;gain=.5;reverbGain=0;delayGain=0;depthSamples=0;delaySamples=1;rateInc=0;feedbackGain=0;constructor(t,e){this.sampleRate=t,this.leftDelayBuffer=new Float32Array(t),this.rightDelayBuffer=new Float32Array(t),this.preLowpass=0}_sendLevelToReverb=0;get sendLevelToReverb(){return this._sendLevelToReverb}set sendLevelToReverb(t){this._sendLevelToReverb=t,this.reverbGain=t/127}_sendLevelToDelay=0;get sendLevelToDelay(){return this._sendLevelToDelay}set sendLevelToDelay(t){this._sendLevelToDelay=t,this.delayGain=t/127}_preLowpass=0;get preLowpass(){return this._preLowpass}set preLowpass(t){this._preLowpass=t,this.preLPFfc=8e3*.63**this._preLowpass;let e=Math.exp(-2*Math.PI*this.preLPFfc/this.sampleRate);this.preLPFa=1-e}_depth=0;get depth(){return this._depth}set depth(t){this._depth=t,this.depthSamples=t/127*.025*this.sampleRate}_delay=0;get delay(){return this._delay}set delay(t){this._delay=t,this.delaySamples=Math.max(1,t/127*.025*this.sampleRate)}_feedback=0;get feedback(){return this._feedback}set feedback(t){this._feedback=t,this.feedbackGain=t*.00763}_rate=0;get rate(){return this._rate}set rate(t){this._rate=t;let e=t*.122;this.rateInc=e/this.sampleRate}_level=64;get level(){return this._level}set level(t){this.gain=t/127*oi,this._level=t}process(t,e,A,s,a,n,r){let i=this.leftDelayBuffer,o=this.rightDelayBuffer,I=this.rateInc,l=i.length,B=this.depthSamples,C=this.delaySamples,g=this.gain,E=this.reverbGain,S=this.delayGain,k=this.feedbackGain,u=this._preLowpass>0,M=this.phase,w=this.write,R=this.preLPFz,F=this.preLPFa;for(let N=0;N<r;N++){let m=t[N];u&&(R+=F*(m-R),m=R);let p=2*Math.abs(M-.5),y=Math.max(1,Math.min(C+p*B,l)),V=w-y;V<0&&(V+=l);let Y=V|0,q=Y+1;q>=l&&(q-=l);let J=V-Y,te=i[Y]*(1-J)+i[q]*J;i[w]=m+te*k;let x=Math.max(1,Math.min(C+(1-p)*B,l)),D=w-x;D<0&&(D+=l),Y=D|0,q=Y+1,q>=l&&(q-=l),J=D-Y;let Q=o[Y]*(1-J)+o[q]*J,T=N+n;e[T]+=te*g,A[T]+=Q*g;let H=(te+Q)/2;s[N]+=H*E,a[N]+=H*S,o[w]=m+Q*k,++w>=l&&(w=0),(M+=I)>=1&&(M-=1)}this.write=w,this.phase=M,this.preLPFz=R}getSnapshot(){return{preLowpass:this._preLowpass,depth:this._depth,delay:this._delay,sendLevelToDelay:this._sendLevelToDelay,sendLevelToReverb:this._sendLevelToReverb,rate:this._rate,feedback:this._feedback,level:this._level}}},Ii=[{start:1,end:20,timeStart:.1,resolution:.1},{start:20,end:35,timeStart:2,resolution:.2},{start:35,end:45,timeStart:5,resolution:.5},{start:45,end:55,timeStart:10,resolution:1},{start:55,end:70,timeStart:20,resolution:2},{start:70,end:80,timeStart:50,resolution:5},{start:80,end:90,timeStart:100,resolution:10},{start:90,end:105,timeStart:200,resolution:20},{start:105,end:116,timeStart:500,resolution:50}],ci=1.66,hi=class{preLPFfc=8e3;preLPFa=0;preLPFz=0;delayLeft;delayRight;delayCenter;sampleRate;delayCenterOutput;delayPreLPF;delayCenterTime;delayLeftMultiplier=.04;delayRightMultiplier=.04;gain=0;reverbGain=0;constructor(t,e){this.sampleRate=t,this.delayCenterOutput=new Float32Array(e),this.delayPreLPF=new Float32Array(e),this.delayCenterTime=.34*t,this.delayCenter=new Zt(t),this.delayLeft=new Zt(t),this.delayRight=new Zt(t)}_sendLevelToReverb=0;get sendLevelToReverb(){return this._sendLevelToReverb}set sendLevelToReverb(t){this._sendLevelToReverb=t,this.reverbGain=t/127}_preLowpass=0;get preLowpass(){return this._preLowpass}set preLowpass(t){this._preLowpass=t,this.preLPFfc=8e3*.63**this._preLowpass;let e=Math.exp(-2*Math.PI*this.preLPFfc/this.sampleRate);this.preLPFa=1-e}_levelRight=0;get levelRight(){return this._levelRight}set levelRight(t){this._levelRight=t,this.updateGain()}_level=64;get level(){return this._level}set level(t){this._level=t,this.gain=t/127*ci}_levelCenter=127;get levelCenter(){return this._levelCenter}set levelCenter(t){this._levelCenter=t,this.updateGain()}_levelLeft=0;get levelLeft(){return this._levelLeft}set levelLeft(t){this._levelLeft=t,this.updateGain()}_feedback=16;get feedback(){return this._feedback}set feedback(t){this._feedback=t,this.delayLeft.feedback=this.delayRight.feedback=0,this.delayCenter.feedback=(t-64)/66}_timeRatioRight=0;get timeRatioRight(){return this._timeRatioRight}set timeRatioRight(t){this._timeRatioRight=t,this.delayRightMultiplier=t*(100/2400),this.delayRight.time=this.delayCenterTime*this.delayRightMultiplier}_timeRatioLeft=0;get timeRatioLeft(){return this._timeRatioLeft}set timeRatioLeft(t){this._timeRatioLeft=t,this.delayLeftMultiplier=t*(100/2400),this.delayLeft.time=this.delayCenterTime*this.delayLeftMultiplier}_timeCenter=12;get timeCenter(){return this._timeCenter}set timeCenter(t){this._timeCenter=t;let e=.1;for(let A of Ii)if(t>=A.start&&t<A.end){e=A.timeStart+(t-A.start)*A.resolution;break}this.delayCenterTime=Math.max(2,this.sampleRate*(e/1e3)),this.delayCenter.time=this.delayCenterTime,this.delayLeft.time=this.delayCenterTime*this.delayLeftMultiplier,this.delayRight.time=this.delayCenterTime*this.delayRightMultiplier}process(t,e,A,s,a,n){let r;if(this._preLowpass>0){let B=this.delayPreLPF,C=this.preLPFz,g=this.preLPFa;for(let E=0;E<n;E++){let S=t[E];C+=g*(S-C),B[E]=C}this.preLPFz=C,r=B}else r=t;let{gain:i,reverbGain:o}=this;this.delayCenter.process(r,this.delayCenterOutput,n);let I=this.delayCenterOutput;for(let B=0,C=a;B<n;B++,C++){let g=I[B];s[B]+=g*o;let E=g*i;e[C]+=E,A[C]+=E}for(let B=0;B<n;B++)I[B]+=t[B];let l=this.delayPreLPF;this.delayLeft.process(I,l,n);for(let B=0,C=a;B<n;B++,C++){let g=l[B];e[C]+=g*i,s[B]+=g*o}this.delayRight.process(I,l,n);for(let B=0,C=a;B<n;B++,C++){let g=l[B];A[C]+=g*i,s[B]+=g*o}}getSnapshot(){return{level:this._level,preLowpass:this._preLowpass,timeCenter:this._timeCenter,timeRatioRight:this._timeRatioRight,timeRatioLeft:this._timeRatioLeft,levelCenter:this._levelCenter,levelLeft:this._levelLeft,levelRight:this._levelRight,feedback:this._feedback,sendLevelToReverb:this._sendLevelToReverb}}updateGain(){this.delayCenter.gain=this._levelCenter/127,this.delayLeft.gain=this._levelLeft/127,this.delayRight.gain=this._levelRight/127}},$s={volume:1,pan:0,keyShift:0,fineTune:0,system:"gs"};function li(t,e){if(!this.lockedMIDIParameters[t]){this.midiParameters[t]=e;for(let A of this.midiChannels)A.updateInternalParams();this.callEvent("globalParamChange",{parameter:t,value:e})}}function Ci(t,e){this.lockedMIDIParameters[t]=e}var Bi=.01,Ei=.05,di=class{voices=[];midiChannels=[];maxBufferSize;voiceBuffer;insertionInputL;insertionInputR;reverbInput;chorusInput;delayInput;delayActive=!1;soundBankManager=new Fr(this.updatePresetList.bind(this));keyModifierManager=new Ma;sampleRate;tunings=new Float32Array(16384).fill(-1);lockedMIDIParameters=Object.fromEntries(Object.keys($s).map(t=>[t,!1]));midiParameters={...$s};systemParameters={...In};currentTime=0;defaultPreset;drumPreset;gainSmoothingFactor;panSmoothingFactor;eventCallbackHandler;missingPresetHandler;cachedVoices=new Map;lockMIDIParameter=Ci.bind(this);setSystemParameter=va.bind(this);systemExclusive=Nr.bind(this);reverbProcessor;chorusProcessor;delayProcessor;customChannelNumbers=!1;setMIDIParameter=li.bind(this);insertionFallback=new vn;insertionProcessor=this.insertionFallback;insertionEffects=new Map;insertionActive=!1;portSelectChannelOffset=0;insertionParams=new Uint8Array(23).fill(255);lastPriorityAssignmentTime=0;eventQueue=[];sampleTime;constructor(t,e,A,s){this.eventCallbackHandler=t,this.missingPresetHandler=e,this.sampleRate=A,this.sampleTime=1/A,this.currentTime=s.initialTime,this.setSystemParameter("effectsEnabled",s.effectsEnabled),this.setSystemParameter("eventsEnabled",s.eventsEnabled),this.maxBufferSize=s.maxBufferSize,this.gainSmoothingFactor=Bi*(44100/A),this.panSmoothingFactor=Ei*(44100/A),fs.initCache(this.sampleRate);let a=this.maxBufferSize;this.reverbProcessor=s.reverbProcessor??new ii(A,a),this.chorusProcessor=s.chorusProcessor??new gi(A,a),this.delayProcessor=s.delayProcessor??new hi(A,a),this.voiceBuffer=new Float32Array(a),this.insertionInputL=new Float32Array(a),this.insertionInputR=new Float32Array(a),this.reverbInput=new Float32Array(a),this.chorusInput=new Float32Array(a),this.delayInput=new Float32Array(a);for(let n of ni)this.registerInsertionProcessor(n);this.resetInsertionParams(),this.allocateNewVoices(this.systemParameters.voiceCap)}_voiceCount=0;get voiceCount(){return this._voiceCount}controllerChange(t,e,A){if(this.customChannelNumbers){for(let s of this.midiChannels)s.midiParameters.rxChannel===t&&s.controllerChange(e,A);return}this.midiChannels[t+this.portSelectChannelOffset].controllerChange(e,A)}noteOn(t,e,A){if(this.customChannelNumbers){for(let s of this.midiChannels)s.midiParameters.rxChannel===t&&s.noteOn(e,A);return}this.midiChannels[t+this.portSelectChannelOffset].noteOn(e,A)}noteOff(t,e){if(this.customChannelNumbers){for(let A of this.midiChannels)A.midiParameters.rxChannel===t&&A.noteOff(e);return}this.midiChannels[t+this.portSelectChannelOffset].noteOff(e)}polyPressure(t,e,A){if(this.customChannelNumbers){for(let s of this.midiChannels)s.midiParameters.rxChannel===t&&s.polyPressure(e,A);return}this.midiChannels[t+this.portSelectChannelOffset].polyPressure(e,A)}channelPressure(t,e){if(this.customChannelNumbers){for(let A of this.midiChannels)A.midiParameters.rxChannel===t&&A.setMIDIParameter("pressure",e);return}this.midiChannels[t+this.portSelectChannelOffset].setMIDIParameter("pressure",e)}pitchWheel(t,e,A=-1){if(this.customChannelNumbers){for(let s of this.midiChannels)s.midiParameters.rxChannel===t&&s.pitchWheel(e,A);return}this.midiChannels[t+this.portSelectChannelOffset].pitchWheel(e,A)}programChange(t,e){if(this.customChannelNumbers){for(let A of this.midiChannels)A.midiParameters.rxChannel===t&&A.programChange(e);return}this.midiChannels[t+this.portSelectChannelOffset].programChange(e)}assignVoice(){for(let e=0;e<this.systemParameters.voiceCap;e++){let A=this.voices[e];if(!A.isActive)return A.priority=1/0,A}if(this.systemParameters.autoAllocateVoices){h.info(`%cAllocating a new voice, total count %c${this.systemParameters.voiceCap+1}.`,d.info,d.value),this.allocateNewVoices(1);let e=this.voices[this.voices.length-1];return this.systemParameters.voiceCap++,e.priority=1/0,e}this.assignVoicePriorities();let t=this.voices[0];for(let e=0;e<this.systemParameters.voiceCap;e++){let A=this.voices[e];A.priority<t.priority&&(t=A)}return t.priority=1/0,t}stopAllChannels(t){h.info("%cStop all received!",d.info);for(let e of this.midiChannels)e.stopAllNotes(t)}processMessage(t,e=0,A=Xn){let s=A.time;s>this.currentTime?(this.eventQueue.push({message:t,channelOffset:e,time:s}),this.eventQueue.sort((a,n)=>a.time-n.time)):this.processMessageInternal(t,e)}destroySynthProcessor(){this.voices.length=0;for(let t of this.midiChannels)t.destroy();this.clearCache(),this.midiChannels.length=0,this.soundBankManager.destroy()}getVoices(t,e,A){let s=this.midiChannels[t],a=this.keyModifierManager.hasOverridePatch(t,e),n=s.preset;if(a){let r=this.keyModifierManager.getPatch(t,e);n=this.soundBankManager.getPreset(r,this.midiParameters.system)}return n?this.getVoicesForPreset(n,e,A):[]}createMIDIChannel(t){let e=new Rr(this,this.defaultPreset,this.midiChannels.length);this.midiChannels.push(e),t&&(this.callEvent("channelAdded",void 0),e.setDrums(!0))}reset(t="gs"){if(this.callEvent("reset",t),this.setMIDIParameter("system",t),this.setMIDIParameter("volume",1),this.setMIDIParameter("pan",0),this.setMIDIParameter("keyShift",0),this.setMIDIParameter("fineTune",0),this.tunings.fill(-1),this.portSelectChannelOffset=0,this.customChannelNumbers=!1,this.setReverbMacro(4),this.setChorusMacro(2),this.setDelayMacro(0),this.systemParameters.delayLock||(this.delayActive=!1),this.resetInsertion(),!(!this.drumPreset||!this.defaultPreset))for(let e of this.midiChannels)e.reset(!1)}process(t,e,A=0,s=0){this.processSplit([[t,e]],t,e,A,s)}processSplit(t,e,A,s=0,a=0){if(this.eventQueue.length>0){let o=this.currentTime;for(;this.eventQueue[0]?.time<=o;){let I=this.eventQueue.shift();I&&this.processMessageInternal(I.message,I.channelOffset)}}s=Math.max(s,0);let n=a||t[0][0].length-s;if(n>this.maxBufferSize)throw new Error(`Requested ${n} samples, but maxBufferSize is ${this.maxBufferSize}`);this.reverbInput.fill(0),this.chorusInput.fill(0),this.delayActive&&this.delayInput.fill(0),this.insertionActive&&(this.insertionInputL.fill(0),this.insertionInputR.fill(0));for(let o of this.midiChannels)o.clearVoiceCount();this._voiceCount=0;let r=this.systemParameters.voiceCap,i=t.length;for(let o=0;o<r;o++){let I=this.voices[o],l=this.midiChannels[I.channel];if(!I.isActive)continue;let B=I.channel%i;l.renderVoice(I,this.currentTime,t[B][0],t[B][1],s,n),l.voiceCount++,this._voiceCount++}if(this.systemParameters.effectsEnabled){let{chorusInput:o,delayInput:I,reverbInput:l,insertionInputR:B,insertionInputL:C}=this;this.insertionActive&&this.insertionProcessor.process(C,B,e,A,l,o,I,s,n),this.chorusProcessor.process(o,e,A,l,I,s,n),this.delayActive&&this.midiParameters.system!=="xg"&&this.delayProcessor.process(I,e,A,l,s,n),this.reverbProcessor.process(l,e,A,s,n)}this.currentTime+=n*this.sampleTime}getVoicesForPreset(t,e,A){let s=this.getCachedVoice(t,e,A);if(s!==void 0)return s;let a=new Array;for(let n of t.getVoiceParameters(e,A)){let r=n.sample;if(n.sample.getAudioData()===void 0){h.warn(`Discarding invalid sample: ${r.name}`);continue}a.push(new rr(n,e,A,this.sampleRate))}return this.setCachedVoice(t,e,A,a),a}clearCache(){this.cachedVoices.clear()}callEvent(t,e){this.eventCallbackHandler(t,e)}getInsertionSnapshot(){return{type:this.insertionProcessor.type,params:this.insertionParams.slice()}}resetInsertionParams(){this.insertionParams.fill(255),this.insertionParams[20]=40,this.insertionParams[21]=0,this.insertionParams[22]=0}resetInsertion(){this.systemParameters.insertionEffectLock||(this.insertionActive=!1,this.insertionProcessor=this.insertionFallback,this.insertionProcessor.reset(),this.resetInsertionParams(),this.insertionProcessor.sendLevelToReverb=40/127*lA,this.insertionProcessor.sendLevelToChorus=0,this.insertionProcessor.sendLevelToDelay=0,this.callEvent("effectChange",{effect:"insertion",parameter:0,value:this.insertionProcessor.type}))}setReverbMacro(t){if(this.systemParameters.reverbLock)return;let e=this.reverbProcessor;switch(e.level=64,e.preDelayTime=0,e.character=t,t){case 0:e.character=0,e.preLowpass=3,e.time=80,e.delayFeedback=0,e.preDelayTime=0;break;case 1:e.preLowpass=4,e.time=56,e.delayFeedback=0;break;case 2:e.preLowpass=0,e.time=72,e.delayFeedback=0;break;case 3:e.preLowpass=4,e.time=72,e.delayFeedback=0;break;case 4:e.preLowpass=0,e.time=64,e.delayFeedback=0;break;case 5:e.preLowpass=0,e.time=88,e.delayFeedback=0;break;case 6:e.preLowpass=0,e.time=32,e.delayFeedback=40;break;case 7:e.preLowpass=0,e.time=64,e.delayFeedback=32;break;default:h.warn(`Invalid reverb macro: ${t}`);return}this.callEvent("effectChange",{effect:"reverb",parameter:"macro",value:t})}setChorusMacro(t){if(this.systemParameters.chorusLock)return;let e=this.chorusProcessor;switch(e.level=64,e.preLowpass=0,e.delay=127,e.sendLevelToDelay=0,e.sendLevelToReverb=0,t){case 0:e.feedback=0,e.delay=112,e.rate=3,e.depth=5;break;case 1:e.feedback=5,e.delay=80,e.rate=9,e.depth=19;break;case 2:e.feedback=8,e.delay=80,e.rate=3,e.depth=19;break;case 3:e.feedback=16,e.delay=64,e.rate=9,e.depth=16;break;case 4:e.feedback=64,e.delay=127,e.rate=2,e.depth=24;break;case 5:e.feedback=112,e.delay=127,e.rate=1,e.depth=5;break;case 6:e.feedback=0,e.depth=127,e.rate=0,e.depth=127;break;case 7:e.feedback=80,e.depth=127,e.rate=0,e.depth=127;break;default:h.warn(`Invalid chorus macro: ${t}`);return}this.callEvent("effectChange",{effect:"chorus",parameter:"macro",value:t})}setDelayMacro(t){if(this.systemParameters.delayLock)return;let e=this.delayProcessor;switch(e.level=64,e.preLowpass=0,e.sendLevelToReverb=0,e.levelRight=e.levelLeft=0,e.levelCenter=127,t){case 0:e.timeCenter=97,e.timeRatioRight=e.timeRatioLeft=1,e.feedback=80;break;case 1:e.timeCenter=106,e.timeRatioRight=e.timeRatioLeft=1,e.feedback=80;break;case 2:e.timeCenter=115,e.timeRatioRight=e.timeRatioLeft=1,e.feedback=72;break;case 3:e.timeCenter=83,e.timeRatioRight=e.timeRatioLeft=1,e.feedback=72;break;case 4:e.timeCenter=105,e.timeRatioLeft=12,e.timeRatioRight=24,e.levelCenter=0,e.levelLeft=125,e.levelRight=60,e.feedback=74;break;case 5:e.timeCenter=109,e.timeRatioLeft=12,e.timeRatioRight=24,e.levelCenter=0,e.levelLeft=125,e.levelRight=60,e.feedback=71;break;case 6:e.timeCenter=115,e.timeRatioLeft=12,e.timeRatioRight=24,e.levelCenter=0,e.levelLeft=120,e.levelRight=64,e.feedback=73;break;case 7:e.timeCenter=93,e.timeRatioLeft=12,e.timeRatioRight=24,e.levelCenter=0,e.levelLeft=120,e.levelRight=64,e.feedback=72;break;case 8:e.timeCenter=109,e.timeRatioLeft=12,e.timeRatioRight=24,e.levelCenter=0,e.levelLeft=114,e.levelRight=60,e.feedback=61,e.sendLevelToReverb=36;break;case 9:e.timeCenter=110,e.timeRatioLeft=21,e.timeRatioRight=32,e.levelCenter=97,e.levelLeft=127,e.levelRight=67,e.feedback=40;break;default:h.warn(`Invalid delay macro: ${t}`);return}this.callEvent("effectChange",{effect:"delay",parameter:"macro",value:t})}getCachedVoice(t,e,A){return this.cachedVoices.get(this.getCachedVoiceIndex(t,e,A))}setCachedVoice(t,e,A,s){this.cachedVoices.set(this.getCachedVoiceIndex(t,e,A),s)}allocateNewVoices(t){for(let e=0;e<t;e++)this.voices.push(new xa(this.sampleRate,this.maxBufferSize))}registerInsertionProcessor(t){let e=new t(this.sampleRate,this.maxBufferSize);this.insertionEffects.set(e.type,e)}processMessageInternal(t,e){let A=t[0],s,a=0;switch(A>=128&&A<240?(s=A&240,a=A&15):s=A,a+=e,s){case G.noteOn:{let n=t[2];n>0?this.noteOn(a,t[1],n):this.noteOff(a,t[1]);break}case G.noteOff:this.noteOff(a,t[1]);break;case G.pitchWheel:this.pitchWheel(a,t[2]<<7|t[1]);break;case G.controllerChange:this.controllerChange(a,t[1],t[2]);break;case G.programChange:this.programChange(a,t[1]);break;case G.polyPressure:this.polyPressure(a,t[1],t[2]);break;case G.channelPressure:this.channelPressure(a,t[1]);break;case G.systemExclusive:this.systemExclusive(new ne(t.slice(1)),e);break;case G.reset:this.stopAllChannels(!1),this.reset();break;default:break}}assignVoicePriorities(){if(this.lastPriorityAssignmentTime===this.currentTime)return;h.info("%cPolyphony exceeded, stealing voices",d.warn),this.lastPriorityAssignmentTime=this.currentTime;let t=this.systemParameters.voiceCap;for(let e=0;e<t;e++){let A=this.voices[e];A.priority=0,this.midiChannels[A.channel].drumChannel&&(A.priority+=5),A.isInRelease&&(A.priority-=5),A.priority+=A.velocity/25,A.priority-=A.volEnv.state,A.isInRelease&&(A.priority-=5),A.priority-=A.volEnv.attenuationCb/200}}updatePresetList(){let t=this.soundBankManager.presetList;this.clearCache(),this.callEvent("presetListChange",t),this.getDefaultPresets();for(let e of this.midiChannels){let A=e.systemParameters.presetLock;e.setSystemParameter("presetLock",!1),e.programChange(e.patch.program),e.setSystemParameter("presetLock",A)}this.reset()}getDefaultPresets(){this.defaultPreset=this.soundBankManager.getPreset({bankLSB:0,bankMSB:0,program:0,isGMGSDrum:!1},"xg"),this.drumPreset=this.soundBankManager.getPreset({bankLSB:0,bankMSB:0,program:0,isGMGSDrum:!0},"gs")}getCachedVoiceIndex(t,e,A){let s=t.bankMSB,a=t.bankLSB,{isGMGSDrum:n,program:r}=t;return n&&(s=128,a=0),s+a*128+r*16384+2097152*e+268435456*A}},Tn=class{processorInitialized=vA.isInitialized;sampleRate;onEventCall;process;processSplit;systemExclusive;controllerChange;noteOn;noteOff;polyPressure;channelPressure;pitchWheel;programChange;processMessage;synthCore;savedSnapshot;constructor(t,e={}){let A=bA(e,wa);if(this.sampleRate=t,!Number.isFinite(A.initialTime)||!Number.isFinite(t))throw new TypeError(`Initial time or sample rate is invalid! initial time: ${A.initialTime}, sample rate: ${t}`);this.synthCore=new di(this.callEvent.bind(this),this.missingPreset.bind(this),this.sampleRate,A);let s=this.synthCore;this.process=s.process.bind(s),this.processSplit=s.processSplit.bind(s),this.systemExclusive=s.systemExclusive.bind(s),this.controllerChange=s.controllerChange.bind(s),this.noteOn=s.noteOn.bind(s),this.noteOff=s.noteOff.bind(s),this.polyPressure=s.polyPressure.bind(s),this.channelPressure=s.channelPressure.bind(s),this.pitchWheel=s.pitchWheel.bind(s),this.programChange=s.programChange.bind(s),this.processMessage=s.processMessage.bind(s);for(let a=0;a<16;a++)this.synthCore.createMIDIChannel(!1);this.processorInitialized.then(()=>{h.info("%cSpessaSynth is ready!",d.recognized)})}get midiChannels(){return this.synthCore.midiChannels}get midiParameters(){return this.synthCore.midiParameters}get systemParameters(){return this.synthCore.systemParameters}get voiceCount(){return this.synthCore.voiceCount}get currentTime(){return this.synthCore.currentTime}get reverbProcessor(){return this.synthCore.reverbProcessor}get chorusProcessor(){return this.synthCore.chorusProcessor}get delayProcessor(){return this.synthCore.delayProcessor}get soundBankManager(){return this.synthCore.soundBankManager}get keyModifierManager(){return this.synthCore.keyModifierManager}onMissingPreset=(t,e)=>{h.warn(`No preset found for ${je.toMIDIString(t)}! Did you forget to add a sound bank?`)};lockMIDIParameter(t,e){this.synthCore.lockMIDIParameter(t,e)}setSystemParameter(t,e){this.synthCore.setSystemParameter(t,e)}reset(){this.synthCore.reset()}applySnapshot(t){this.savedSnapshot=t,ba.call(this.synthCore,t)}getSnapshot(){return Ra.call(this.synthCore)}setEmbeddedSoundBank(t,e){let A=jt.fromArrayBuffer(t);this.synthCore.soundBankManager.addSoundBank(A,aA,e);let s=this.synthCore.soundBankManager.priorityOrder;s.pop(),s.unshift(aA),this.synthCore.soundBankManager.priorityOrder=s,this.savedSnapshot!==void 0&&this.applySnapshot(this.savedSnapshot),h.info(`%cEmbedded sound bank set at offset %c${e}`,d.recognized,d.value)}clearEmbeddedSoundBank(){this.synthCore.soundBankManager.soundBankList.some(t=>t.id===aA)&&this.synthCore.soundBankManager.deleteSoundBank(aA)}createMIDIChannel(){this.synthCore.createMIDIChannel(!0)}stopAllChannels(t=!1){this.synthCore.stopAllChannels(t)}destroySynthProcessor(){this.synthCore.destroySynthProcessor()}clearCache(){this.synthCore.clearCache()}getVoicesForPreset(t,e,A){return this.synthCore.getVoicesForPreset(t,e,A)}callEvent(t,e){this.onEventCall?.({type:t,data:e})}missingPreset(t,e){return this.onMissingPreset(t,e)}};var GA=sn.ConsoleColors;var Un="spessasynth-worklet-processor";function xn(t,e){return{...e,...t}}var Hn={skipToFirstNoteOn:!0,initialPlaybackRate:1};var ps=class extends RA{events=[];constructor(e){super(),super.copyFrom(e),this.events=[]}},LA=class t extends Mt{tracks;timeline=[];embeddedSoundBank=void 0;embeddedSoundBankSize;constructor(e){super(),super.copyMetadataFrom(e),this.tracks=e.tracks.map(A=>new ps(A)),this.embeddedSoundBankSize=e instanceof t?e.embeddedSoundBankSize:e?.embeddedSoundBank?.byteLength}};var PA={shuffleOn:1,shuffleOff:2,index:3};var On=-1;var Yn=1,NA=class{synthesizer;sequencers=new Array;post;lastSequencerSync=0;voiceCounts=new Array(16).fill(0);alive=!1;eventsEnabled;constructor(e,A,s){this.synthesizer=new Tn(e,A),this.eventsEnabled=A.eventsEnabled??!1,this.post=s,this.synthesizer.onEventCall=a=>{if(a.type==="channelAdded"){let n=this.synthesizer.midiChannels.length;for(let r=this.voiceCounts.length;r<n;r++)this.voiceCounts.push(0)}this.post({type:"eventCall",data:a,currentTime:this.synthesizer.currentTime})}}createNewSequencer(){let e=new on(this.synthesizer),A=this.sequencers.length;this.sequencers.push(e),e.onEventCall=s=>{if(this.eventsEnabled){if(s.type==="songListChange"){let n=s.data.newSongList.map(r=>new LA(r));this.post({type:"sequencerReturn",data:{type:s.type,data:{newSongList:n,shuffledSongIndexes:e.shuffledSongIndexes},id:A},currentTime:this.synthesizer.currentTime});return}this.post({type:"sequencerReturn",data:{...s,id:A},currentTime:this.synthesizer.currentTime})}}}postReady(e,A,s=[]){this.post({type:"isFullyInitialized",data:{type:e,data:A},currentTime:this.synthesizer.currentTime},s)}postProgress(e,A){this.post({type:"renderingProgress",data:{type:e,data:A},currentTime:this.synthesizer.currentTime})}destroy(){this.synthesizer.destroySynthProcessor(),delete this.synthesizer,delete this.sequencers}handleMessage(e){let A=e.channelNumber,s;if(A>=0&&(s=this.synthesizer.midiChannels[A],s===void 0)){h.warn(`Trying to access channel ${A} which does not exist... ignoring!`);return}switch(e.type){case"midiMessage":{this.synthesizer.processMessage(e.data.messageData,e.data.channelOffset,e.data.options);break}case"ccReset":{this.synthesizer.reset();break}case"stopAll":{A===On?this.synthesizer.stopAllChannels(e.data===1):s?.stopAllNotes(e.data===1);break}case"addNewChannel":{this.synthesizer.createMIDIChannel();break}case"lockGlobalMIDIParameter":{this.synthesizer.lockMIDIParameter(e.data.parameter,e.data.isLocked);break}case"setGlobalSystemParameter":{this.synthesizer.setSystemParameter(e.data.parameter,e.data.value);break}case"lockChannelMIDIParameter":{s?.lockMIDIParameter(e.data.parameter,e.data.isLocked);break}case"setChannelSystemParameter":{s?.setSystemParameter(e.data.parameter,e.data.value);break}case"setDrums":{s?.setDrums(e.data);break}case"lockController":{s?.lockController(e.data.controller,e.data.isLocked);break}case"sequencerSpecific":{let a=this.sequencers[e.data.id];if(!a)return;let n=e.data;switch(n.type){default:break;case"loadNewSongList":{try{let i=n.data.map(o=>"duration"in o?Mt.copyFrom(o):Mt.fromArrayBuffer(o.binary,o.fileName));a.loadNewSongList(i)}catch(r){console.error(r),this.post({type:"sequencerReturn",data:{type:"midiError",data:r,id:e.data.id},currentTime:this.synthesizer.currentTime})}break}case"pause":{a.pause();break}case"play":{a.play();break}case"setTime":{a.currentTime=n.data;break}case"changeMIDIMessageSending":{a.externalMIDIPlayback=n.data;break}case"setPlaybackRate":{a.playbackRate=n.data;break}case"setLoopCount":{a.loopCount=n.data;break}case"changeSong":{switch(n.data.changeType){case PA.shuffleOff:{a.shuffleMode=!1;break}case PA.shuffleOn:{a.shuffleMode=!0;break}case PA.index:{n.data.data!==void 0&&(a.songIndex=n.data.data);break}}break}case"getMIDI":{if(!a.midiData)throw new Error("No MIDI is loaded!");this.post({type:"sequencerReturn",data:{type:"getMIDI",data:a.midiData,id:e.data.id},currentTime:this.synthesizer.currentTime});break}case"setSkipToFirstNote":{a.skipToFirstNoteOn=n.data;break}}break}case"soundBankManager":{try{let a=this.synthesizer.soundBankManager,n=e.data,r;switch(n.type){case"addSoundBank":{r=jt.fromArrayBuffer(n.data.soundBankBuffer),a.addSoundBank(r,n.data.id,n.data.bankOffset),this.postReady("soundBankManager",null);break}case"deleteSoundBank":{a.deleteSoundBank(n.data),this.postReady("soundBankManager",null);break}case"rearrangeSoundBanks":a.priorityOrder=n.data,this.postReady("soundBankManager",null)}}catch(a){this.post({type:"soundBankError",data:a,currentTime:this.synthesizer.currentTime})}break}case"keyModifierManager":{let a=e.data,n=this.synthesizer.keyModifierManager;switch(a.type){default:return;case"addMapping":{n.addMapping(a.data.channel,a.data.midiNote,a.data.mapping);break}case"clearMappings":{n.clearMappings();break}case"deleteMapping":n.deleteMapping(a.data.channel,a.data.midiNote)}break}case"requestSynthesizerSnapshot":{let a=this.synthesizer.getSnapshot();this.postReady("synthesizerSnapshot",a);break}case"requestNewSequencer":{this.createNewSequencer();break}case"setLogLevel":{h.setLogLevel(e.data.enableInfo,e.data.enableWarning,e.data.enableGroup);break}case"destroyWorklet":{this.alive=!1,this.synthesizer.destroySynthProcessor(),this.destroy();break}default:{h.warn("Unrecognized event!",e);break}}}};var TA=class extends NA{alive=!0;oneOutputMode;port;constructor(e,A,s,a){super(e,{effectsEnabled:!a.oneOutput,eventsEnabled:a?.eventsEnabled,initialTime:A},(n,r)=>{s.postMessage(n,r)}),this.port=s,this.oneOutputMode=a.oneOutput,this.synthesizer.processorInitialized.then(()=>{this.port.onmessage=n=>this.handleMessage(n.data),this.postReady("sf3Decoder",null)})}process(e,A){if(!this.alive)return!1;for(let i of this.sequencers)i.processTick();if(this.oneOutputMode){let i=A[0],o=[];for(let I=0;I<32;I+=2)o.push([i[I],i[I+1]]);this.synthesizer.setSystemParameter("effectsEnabled",!1),this.synthesizer.processSplit(o,i[0],i[0])}else this.synthesizer.processSplit(A.slice(1),A[0][0],A[0][1]);let s=this.synthesizer.currentTime;if(this.eventsEnabled&&s-this.lastSequencerSync>Yn){for(let i=0;i<this.sequencers.length;i++)this.post({type:"sequencerReturn",data:{type:"sync",data:this.sequencers[i].currentTime,id:i},currentTime:s});this.lastSequencerSync=s}let a=this.synthesizer.midiChannels,n=this.voiceCounts,r=!1;for(let i=0;i<a.length;i++)r||=a[i].voiceCount!==n[i],n[i]=a[i].voiceCount;return r&&this.post({type:"voiceCountChange",currentTime:s,data:n}),!0}handleMessage(e){if(e.type==="startOfflineRender"){this.startOfflineRender(e.data);return}super.handleMessage(e)}startOfflineRender(e){this.sequencers.length===0&&this.createNewSequencer();let A=this.sequencers[0];for(let[a,n]of e.soundBankList.entries())try{this.synthesizer.soundBankManager.addSoundBank(jt.fromArrayBuffer(n.soundBankBuffer),`bank-${a}`,n.bankOffset)}catch(r){this.post({type:"soundBankError",data:r,currentTime:this.synthesizer.currentTime})}e.snapshot!==void 0&&this.synthesizer.applySnapshot(e.snapshot),h.info("%cStarting to render the audio data!",GA.info),A.loopCount=e.loopCount,this.synthesizer.setSystemParameter("autoAllocateVoices",!0);let s=xn(e.sequencerOptions,Hn);A.skipToFirstNoteOn=s.skipToFirstNoteOn,A.playbackRate=s.initialPlaybackRate;try{A.loadNewSongList([Mt.copyFrom(e.midiSequence)]),A.play()}catch(a){console.error(a),this.post({type:"sequencerReturn",data:{type:"midiError",data:a,id:0},currentTime:this.synthesizer.currentTime})}this.postReady("startOfflineRender",null)}};var ys=class extends AudioWorkletProcessor{core;constructor(e){super(),this.core=new TA(sampleRate,currentTime,this.port,e.processorOptions)}process(e,A){return this.core.process(e,A)}};registerProcessor(Un,ys);h.info("%cProcessor successfully registered!",GA.recognized);
18
18
  //# sourceMappingURL=spessasynth_processor.min.js.map