quake2ts 0.0.70 → 0.0.72

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.
Files changed (36) hide show
  1. package/package.json +1 -1
  2. package/packages/client/dist/browser/index.global.js +1 -1
  3. package/packages/client/dist/browser/index.global.js.map +1 -1
  4. package/packages/client/dist/cjs/index.cjs.map +1 -1
  5. package/packages/client/dist/esm/index.js.map +1 -1
  6. package/packages/client/dist/tsconfig.tsbuildinfo +1 -1
  7. package/packages/engine/dist/browser/index.global.js +14 -14
  8. package/packages/engine/dist/browser/index.global.js.map +1 -1
  9. package/packages/engine/dist/cjs/index.cjs +84 -0
  10. package/packages/engine/dist/cjs/index.cjs.map +1 -1
  11. package/packages/engine/dist/esm/index.js +81 -0
  12. package/packages/engine/dist/esm/index.js.map +1 -1
  13. package/packages/engine/dist/tsconfig.tsbuildinfo +1 -1
  14. package/packages/engine/dist/types/assets/manager.d.ts +4 -1
  15. package/packages/engine/dist/types/assets/manager.d.ts.map +1 -1
  16. package/packages/engine/dist/types/assets/sprite.d.ts +23 -0
  17. package/packages/engine/dist/types/assets/sprite.d.ts.map +1 -0
  18. package/packages/engine/dist/types/index.d.ts +1 -0
  19. package/packages/engine/dist/types/index.d.ts.map +1 -1
  20. package/packages/game/dist/browser/index.global.js +1 -1
  21. package/packages/game/dist/browser/index.global.js.map +1 -1
  22. package/packages/game/dist/cjs/index.cjs +259 -40
  23. package/packages/game/dist/cjs/index.cjs.map +1 -1
  24. package/packages/game/dist/esm/index.js +259 -40
  25. package/packages/game/dist/esm/index.js.map +1 -1
  26. package/packages/game/dist/tsconfig.tsbuildinfo +1 -1
  27. package/packages/game/dist/types/entities/entity.d.ts +4 -1
  28. package/packages/game/dist/types/entities/entity.d.ts.map +1 -1
  29. package/packages/game/dist/types/entities/funcs.d.ts.map +1 -1
  30. package/packages/game/dist/types/entities/lights.d.ts +3 -0
  31. package/packages/game/dist/types/entities/lights.d.ts.map +1 -0
  32. package/packages/game/dist/types/entities/paths.d.ts +3 -0
  33. package/packages/game/dist/types/entities/paths.d.ts.map +1 -0
  34. package/packages/game/dist/types/entities/spawn.d.ts.map +1 -1
  35. package/packages/game/dist/types/entities/utils.d.ts +5 -0
  36. package/packages/game/dist/types/entities/utils.d.ts.map +1 -1
@@ -1,7 +1,7 @@
1
- "use strict";var Quake2Engine=(()=>{var Mc=Object.create;var Nn=Object.defineProperty;var _c=Object.getOwnPropertyDescriptor;var Ac=Object.getOwnPropertyNames;var wc=Object.getPrototypeOf,Lc=Object.prototype.hasOwnProperty;var zc=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),ii=(t,e)=>{for(var r in e)Nn(t,r,{get:e[r],enumerable:!0})},_s=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Ac(e))!Lc.call(t,o)&&o!==r&&Nn(t,o,{get:()=>e[o],enumerable:!(n=_c(e,o))||n.enumerable});return t};var Ec=(t,e,r)=>(r=t!=null?Mc(wc(t)):{},_s(e||!t||!t.__esModule?Nn(r,"default",{value:t,enumerable:!0}):r,t)),Cc=t=>_s(Nn({},"__esModule",{value:!0}),t);var ta=zc((tm,ea)=>{"use strict";ea.exports=Worker});var Gd={};ii(Gd,{ATTN_IDLE:()=>Fa,ATTN_LOOP_NONE:()=>Ta,ATTN_NONE:()=>ko,ATTN_NORM:()=>Pa,ATTN_STATIC:()=>Ia,AssetDependencyError:()=>Yt,AssetDependencyTracker:()=>Pn,AssetManager:()=>Io,AudioApi:()=>qo,AudioContextController:()=>Ho,AudioRegistry:()=>br,AudioRegistryError:()=>En,AudioSystem:()=>Wo,BSP_SURFACE_FRAGMENT_SOURCE:()=>Qi,BSP_SURFACE_VERTEX_SOURCE:()=>$i,BSP_VERTEX_LAYOUT:()=>Yi,BspSurfacePipeline:()=>Ko,Camera:()=>ei,ConfigStringRegistry:()=>Jt,Cvar:()=>Fr,CvarRegistry:()=>qn,EngineHost:()=>$t,EngineRuntime:()=>Pr,FixedTimestepLoop:()=>Tt,Framebuffer:()=>Yo,IndexBuffer:()=>De,LruCache:()=>ut,MAX_SOUND_CHANNELS:()=>Gi,MD2_FRAGMENT_SHADER:()=>os,MD2_VERTEX_SHADER:()=>ns,MD3_FRAGMENT_SHADER:()=>fs,MD3_VERTEX_SHADER:()=>ms,Md2Loader:()=>er,Md2MeshBuffers:()=>Qo,Md2ParseError:()=>se,Md2Pipeline:()=>Jo,Md3Loader:()=>tr,Md3ModelMesh:()=>ti,Md3ParseError:()=>Ce,Md3Pipeline:()=>ri,Md3SurfaceMesh:()=>Rn,MusicSystem:()=>Xo,PARTICLE_FRAGMENT_SHADER:()=>hs,PARTICLE_VERTEX_SHADER:()=>ps,PakArchive:()=>Zt,PakIndexStore:()=>Fo,PakIngestionError:()=>dt,PakParseError:()=>Ee,PakValidationError:()=>Pt,PakValidator:()=>jn,ParticleRenderer:()=>oi,ParticleSystem:()=>ni,RERELEASE_KNOWN_PAKS:()=>xi,SKYBOX_FRAGMENT_SHADER:()=>ts,SKYBOX_VERTEX_SHADER:()=>es,SOUND_FULLVOLUME:()=>Sr,SOUND_LOOP_ATTENUATE:()=>Ra,ShaderProgram:()=>ye,SkyboxPipeline:()=>$o,SoundChannel:()=>Ro,SoundPrecache:()=>Bo,SoundRegistry:()=>No,Texture2D:()=>Mr,TextureCache:()=>rr,TextureCubeMap:()=>_r,VertexArray:()=>Se,VertexBuffer:()=>xe,VirtualFileSystem:()=>Yn,advanceAnimation:()=>Ys,applySurfaceState:()=>qa,attenuationToDistanceMultiplier:()=>jt,boxIntersectsFrustum:()=>In,buildBspGeometry:()=>Na,buildMd2Geometry:()=>is,buildMd2VertexData:()=>ss,buildMd3SurfaceGeometry:()=>ds,buildMd3VertexData:()=>us,calculateMaxAudibleDistance:()=>Do,calculatePakChecksum:()=>Ns,computeFrameBlend:()=>js,computeSkyScroll:()=>Ka,createAnimationState:()=>Ks,createAudioGraph:()=>Oo,createEngine:()=>Ud,createEngineRuntime:()=>Hs,createInitialChannels:()=>Vo,createProgramFromSources:()=>Oa,createWebGLContext:()=>Da,decodeOgg:()=>Po,deriveSurfaceRenderState:()=>Zi,extractFrustumPlanes:()=>Ba,filesToPakSources:()=>gi,findLeafForPoint:()=>Ki,gatherVisibleFaces:()=>Wa,groupMd2Animations:()=>Xs,ingestPakFiles:()=>Bs,ingestPaks:()=>Kn,interpolateMd3Tag:()=>fc,interpolateVec3:()=>$s,parseMd2:()=>vi,parseMd3:()=>bi,parsePcx:()=>Qs,parseWal:()=>Qn,parseWalTexture:()=>Zs,parseWav:()=>Zn,pcxToRgba:()=>Jn,pickChannel:()=>Uo,preparePcxTexture:()=>Js,removeViewTranslation:()=>ja,resolveLightStyles:()=>Ji,spatializeOrigin:()=>Go,spawnBlood:()=>yc,spawnBulletImpact:()=>pc,spawnExplosion:()=>hc,spawnMuzzleFlash:()=>gc,spawnTeleportFlash:()=>xc,spawnTrail:()=>vc,walToRgba:()=>Si,wireDropTarget:()=>Vs,wireFileInput:()=>Us});var Tc=()=>typeof performance<"u"?performance.now():Date.now(),Pc=t=>{typeof requestAnimationFrame=="function"?requestAnimationFrame(()=>t()):setTimeout(t,25)},Tt=class{constructor(e,r={}){this.callbacks=e;this.accumulatorMs=0;this.frame=0;this.running=!1;this.tick=()=>{if(!this.running)return;let e=this.options.now(),r=this.lastTimeMs===void 0?0:e-this.lastTimeMs;this.lastTimeMs=e,this.advance(r,e),this.running&&this.options.schedule(this.tick)};let n=r.fixedDeltaMs??25,o=r.maxSubSteps??5;this.options={fixedDeltaMs:n,maxSubSteps:o,maxDeltaMs:r.maxDeltaMs??n*o,startTimeMs:r.startTimeMs,now:r.now??Tc,schedule:r.schedule??Pc}}start(){this.running||(this.running=!0,this.lastTimeMs=this.options.startTimeMs??this.options.now(),this.options.schedule(this.tick))}stop(){this.running=!1}pump(e){let r=(this.lastTimeMs??0)+e;this.lastTimeMs=r,this.advance(e,r)}isRunning(){return this.running}get frameNumber(){return this.frame}advance(e,r){let n=Math.min(Math.max(e,0),this.options.maxDeltaMs);this.accumulatorMs=Math.min(this.accumulatorMs+n,this.options.fixedDeltaMs*this.options.maxSubSteps);let o=0;for(;this.accumulatorMs>=this.options.fixedDeltaMs&&o<this.options.maxSubSteps;)this.frame+=1,this.callbacks.simulate({frame:this.frame,deltaMs:this.options.fixedDeltaMs,nowMs:r}),this.accumulatorMs-=this.options.fixedDeltaMs,o+=1;let i=this.options.fixedDeltaMs===0?0:this.accumulatorMs/this.options.fixedDeltaMs;this.callbacks.render?.({alpha:i,nowMs:r,accumulatorMs:this.accumulatorMs,frame:this.frame})}};var $t=class{constructor(e,r,n={}){this.game=e;this.client=r;this.started=!1;this.stepSimulation=e=>{this.previousFrame=this.latestFrame,this.latestFrame=this.game.frame(e,this.latestCommand)};this.renderClient=e=>{this.client&&(this.latestCommand=this.client.render({...e,previous:this.previousFrame,latest:this.latestFrame}))};let o=n.loop?.now?.()??Date.now();this.startTimeMs=n.startTimeMs??n.loop?.startTimeMs??o,this.loop=new Tt({simulate:this.stepSimulation,render:this.renderClient},{...n.loop,startTimeMs:this.startTimeMs})}start(){this.started||(this.latestFrame=this.game.init(this.startTimeMs)??this.latestFrame,this.client?.init(this.latestFrame),this.started=!0,this.loop.start())}stop(){this.started&&(this.loop.stop(),this.client?.shutdown(),this.game.shutdown(),this.previousFrame=void 0,this.latestFrame=void 0,this.started=!1)}pump(e){this.loop.pump(e)}getLatestFrame(){return this.latestFrame}isRunning(){return this.loop.isRunning()}};var As={x:0,y:0,z:0};var jd=Math.PI/180;function ws(t,e){return{x:t.x-e.x,y:t.y-e.y,z:t.z-e.z}}function Fc(t,e){return{x:t.x*e,y:t.y*e,z:t.z*e}}function ai(t,e){return t.x*e.x+t.y*e.y+t.z*e.z}function Ic(t){return ai(t,t)}function ci(t){return Math.sqrt(Ic(t))}function Oe(t){let e=ci(t);return e===0?t:Fc(t,1/e)}var Rc=Math.PI/180,Kd=180/Math.PI,Qt=Rc;function kc(){return new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1])}function Ls(t,e){let r=e.x,n=e.y,o=e.z;return{x:t[0]*r+t[4]*n+t[8]*o+t[12],y:t[1]*r+t[5]*n+t[9]*o+t[13],z:t[2]*r+t[6]*n+t[10]*o+t[14]}}function zs(t,e){let r=kc();return r[0]=e[0].x,r[1]=e[0].y,r[2]=e[0].z,r[4]=e[1].x,r[5]=e[1].y,r[6]=e[1].z,r[8]=e[2].x,r[9]=e[2].y,r[10]=e[2].z,r[12]=t.x,r[13]=t.y,r[14]=t.z,r}var Ge=1,lt=2;var li=8,di=16,Dc=32;var Hc=16384;var Bn=65536,Es=1<<17,Oc=1<<18,Nc=1<<19,Bc=1<<20,Vc=1<<21,Uc=1<<22,Gc=1<<23,$d=1<<24,Vn=1<<25,Wc=1<<26,Qd=1<<27,Jd=1<<28,Zd=1<<29,Un=1<<30,eu=1<<31;var Tr=0;var Cs=4,Ts=8,Ps=16,Fs=32,Is=64;var tu=1<<25,ru=1<<28,nu=1<<29,ou=1<<30,iu=1<<31;var su=Ge|lt,au=Ge|Bn|lt|Vn|Un,cu=Ge|Bn|lt,lu=Ge|Es|lt|Vn|Un,du=Dc|li|di,uu=Ge|di|li,Xc=Ge|Vn|Un|lt|Wc,mu=Oc|Nc|Bc|Vc|Uc|Gc,fu=Ge|li|di|Vn|Un,pu=Ge|Bn|lt,hu=Ge|lt,yu=Ge|Bn|lt|Es,xu=Xc|Hc;var gu=Number.MAX_SAFE_INTEGER-1;var Gn=(t=>(t[t.None=0]="None",t[t.Archive=1]="Archive",t[t.UserInfo=2]="UserInfo",t[t.ServerInfo=4]="ServerInfo",t[t.Latch=8]="Latch",t[t.Cheat=16]="Cheat",t))(Gn||{});var Wn=256;var ui=256,mi=8192,Xn=2048,fi=512,pi=256,hi=Wn*2,yi=256,si=32,Cr=96;var X=(t=>(t[t.Name=0]="Name",t[t.CdTrack=1]="CdTrack",t[t.Sky=2]="Sky",t[t.SkyAxis=3]="SkyAxis",t[t.SkyRotate=4]="SkyRotate",t[t.StatusBar=5]="StatusBar",t[t.AirAccel=59]="AirAccel",t[t.MaxClients=60]="MaxClients",t[t.MapChecksum=61]="MapChecksum",t[t.Models=62]="Models",t[t.Sounds=62+mi]="Sounds",t[t.Images=t.Sounds+Xn]="Images",t[t.Lights=t.Images+fi]="Lights",t[t.ShadowLights=t.Lights+ui]="ShadowLights",t[t.Items=t.ShadowLights+yi]="Items",t[t.PlayerSkins=t.Items+pi]="PlayerSkins",t[t.General=t.PlayerSkins+Wn]="General",t[t.WheelWeapons=t.General+hi]="WheelWeapons",t[t.WheelAmmo=t.WheelWeapons+si]="WheelAmmo",t[t.WheelPowerups=t.WheelAmmo+si]="WheelPowerups",t[t.CdLoopCount=t.WheelPowerups+si]="CdLoopCount",t[t.GameStyle=t.CdLoopCount+1]="GameStyle",t[t.MaxConfigStrings=t.GameStyle+1]="MaxConfigStrings",t))(X||{}),Rs=X.MaxConfigStrings;function ks(t){return t>=5&&t<59?Cr*(59-t):t>=X.General&&t<X.WheelWeapons?Cr*(X.MaxConfigStrings-t):Cr}function qc(t){if(t<0||t>=X.MaxConfigStrings)throw new RangeError(`Configstring index ${t} is out of range (0-${X.MaxConfigStrings-1})`)}function Ds(t,e){let r=ks(t);if(e.length>r)throw new RangeError(`Configstring ${t} exceeds maximum length (${e.length} > ${r}); limit is ${Cr} chars per slot`)}var Jt=class{constructor(){this.values=new Map;this.modelCursor=X.Models;this.soundCursor=X.Sounds;this.imageCursor=X.Images;this.lightCursor=X.Lights;this.shadowLightCursor=X.ShadowLights;this.itemCursor=X.Items;this.playerSkinCursor=X.PlayerSkins;this.generalCursor=X.General}set(e,r){return qc(e),Ds(e,r),this.values.set(e,r),e}get(e){return this.values.get(e)}getAll(){let e=new Array(Rs).fill("");for(let[r,n]of this.values.entries())e[r]=n;return e}modelIndex(e){return this.register(e,X.Models,mi,"modelCursor")}soundIndex(e){return this.register(e,X.Sounds,Xn,"soundCursor")}findSoundIndex(e){for(let r=X.Sounds;r<X.Sounds+Xn;r+=1)if(this.values.get(r)===e)return r}imageIndex(e){return this.register(e,X.Images,fi,"imageCursor")}lightIndex(e){return this.register(e,X.Lights,ui,"lightCursor")}shadowLightIndex(e){return this.register(e,X.ShadowLights,yi,"shadowLightCursor")}itemIndex(e){return this.register(e,X.Items,pi,"itemCursor")}playerSkinIndex(e){return this.register(e,X.PlayerSkins,Wn,"playerSkinCursor")}generalIndex(e){return this.register(e,X.General,hi,"generalCursor")}register(e,r,n,o){for(let a=r;a<r+n;a+=1)if(this.values.get(a)===e)return a;let i=this[o],s=r+n;if(i>=s)throw new RangeError(`Out of configstring slots for range starting at ${r}`);return Ds(i,e),this.values.set(i,e),this[o]=i+1,i}};var Pr=class{constructor(e,r){this.engine=e;this.host=r;this.started=!1}start(){this.started||(this.engine.init(),this.host.start(),this.started=!0)}stop(){this.started&&(this.host.stop(),this.engine.shutdown(),this.started=!1)}pump(e){this.host.pump(e)}getLatestFrame(){return this.host.getLatestFrame()}isRunning(){return this.started&&this.host.isRunning()}};function Hs(t,e,r,n){return new Pr(t,new $t(e,r,n))}var Fr=class{constructor({name:e,defaultValue:r,description:n,flags:o=Gn.None,onChange:i}){this.modifiedCount=0;this.name=e,this.defaultValue=r,this.description=n,this.flags=o,this._value=r,this.onChange=i}get string(){return this._value}get number(){return Number(this._value)}get integer(){return Math.trunc(this.number)}get boolean(){return!!this.integer}set(e){if(this.flags&Gn.Latch){if(e===this._value){this.latched=void 0;return}if(this.latched===e)return;this.latched!==e&&(this.latched=e);return}this.apply(e)}reset(){this.latched=void 0,this.apply(this.defaultValue)}applyLatched(){if(this.latched===void 0)return!1;let e=this.latched;return this.latched=void 0,e===this._value?!1:(this.apply(e),!0)}apply(e){if(this._value===e)return;let r=this._value;this._value=e,this.modifiedCount+=1,this.onChange?.(this,r)}},qn=class{constructor(){this.cvars=new Map}register(e){let r=this.cvars.get(e.name);if(r)return r;let n=new Fr(e);return this.cvars.set(e.name,n),n}get(e){return this.cvars.get(e)}setValue(e,r){let n=this.get(e);if(!n)throw new Error(`Unknown cvar: ${e}`);return n.set(r),n}resetAll(){for(let e of this.cvars.values())e.reset()}applyLatched(){let e=!1;for(let r of this.cvars.values())e=r.applyLatched()||e;return e}list(){return[...this.cvars.values()].sort((e,r)=>e.name.localeCompare(r.name))}};var Yc="PACK";function jc(t,e,r){let n=[];for(let o=0;o<r;o+=1){let i=t.getUint8(e+o);if(i===0)break;n.push(i)}return String.fromCharCode(...n)}function te(t){return t.replace(/\\/g,"/").replace(/^\/+/,"").toLowerCase()}function Kc(){let t=new Uint32Array(256);for(let e=0;e<256;e+=1){let r=e;for(let n=0;n<8;n+=1)r=(r&1)!==0?3988292384^r>>>1:r>>>1;t[e]=r>>>0}return t}var $c=Kc();function Os(t){let e=4294967295;for(let r=0;r<t.length;r+=1){let n=t[r];e=$c[(e^n)&255]^e>>>8}return(e^4294967295)>>>0}var Ee=class extends Error{},Zt=class t{constructor(e,r,n,o){this.name=e;this.buffer=r;this.entries=new Map(n.map(i=>[i.name,i])),this.checksum=o,this.size=r.byteLength}static fromArrayBuffer(e,r){let n=new DataView(r);if(r.byteLength<12)throw new Ee("PAK buffer too small to contain header");let o=String.fromCharCode(n.getUint8(0),n.getUint8(1),n.getUint8(2),n.getUint8(3));if(o!==Yc)throw new Ee(`Invalid PAK header magic: ${o}`);let i=n.getInt32(4,!0),s=n.getInt32(8,!0);if(i<12)throw new Ee(`Invalid directory offset: ${i}`);if(s<=0||s%64!==0)throw new Ee(`Invalid directory length: ${s}`);if(i+s>r.byteLength)throw new Ee("Directory exceeds buffer length");let c=s/64,l=[],d=new Map;for(let u=0;u<c;u+=1){let m=i+u*64,f=jc(n,m,56),h=te(f),y=n.getInt32(m+56,!0),p=n.getInt32(m+60,!0);if(y<0||p<0||y+p>r.byteLength)throw new Ee(`Invalid entry bounds for ${f||"<unnamed>"} (offset=${y}, length=${p})`);if(!h)throw new Ee(`Entry ${u} has an empty name`);let x={name:h,offset:y,length:p};d.set(h,x)}return l.push(...d.values()),new t(e,r,l,Os(new Uint8Array(r)))}getEntry(e){return this.entries.get(te(e))}listEntries(){return Array.from(this.entries.values())}readFile(e){let r=this.getEntry(e);if(!r)throw new Ee(`File not found in PAK: ${e}`);return new Uint8Array(this.buffer,r.offset,r.length)}validate(){return{checksum:this.checksum,entries:this.listEntries()}}};function Ns(t){return Os(new Uint8Array(t))}var Yn=class{constructor(e=[]){this.mounts=[];this.files=new Map;e.forEach(r=>this.mountPak(r))}mountPak(e){this.mounts.push(e);for(let r of e.listEntries()){let n=te(r.name);this.files.set(n,{archive:e,entry:r})}}get mountedPaks(){return[...this.mounts]}hasFile(e){return this.files.has(te(e))}stat(e){let r=this.files.get(te(e));if(r)return{path:r.entry.name,size:r.entry.length,sourcePak:r.archive.name}}async readFile(e){let r=this.files.get(te(e));if(!r)throw new Error(`File not found in VFS: ${e}`);return r.archive.readFile(e)}list(e=""){let r=te(e).replace(/\/+$|^\//g,""),n=[],o=new Set,i=r?`${r}/`:"";for(let s of this.files.values()){if(r&&!s.entry.name.startsWith(i))continue;let a=r?s.entry.name.slice(i.length):s.entry.name,c=a.indexOf("/");c===-1?n.push({path:s.entry.name,size:s.entry.length,sourcePak:s.archive.name}):o.add(a.slice(0,c))}return n.sort((s,a)=>s.path.localeCompare(a.path)),{files:n,directories:[...o].sort()}}findByExtension(e){let r=e.startsWith(".")?e.toLowerCase():`.${e.toLowerCase()}`,n=[];for(let o of this.files.values())o.entry.name.toLowerCase().endsWith(r)&&n.push({path:o.entry.name,size:o.entry.length,sourcePak:o.archive.name});return n.sort((o,i)=>o.path.localeCompare(i.path))}};var xi=Object.freeze([{name:"pak0.pak",checksum:2378051181,description:"Base game assets"},{name:"pak0.pak@baseq2",checksum:2378051181,description:"Base game assets (baseq2)"},{name:"pak0.pak@rogue",checksum:3373211245,description:"Ground Zero (rogue) mission pack"},{name:"pak0.pak@xatrix",checksum:1358269824,description:"The Reckoning (xatrix) mission pack"}]),Pt=class extends Error{constructor(r){super(r.status==="unknown"?`Unknown PAK not allowed: ${r.name}`:`PAK checksum mismatch for ${r.name}`);this.result=r;this.name="PakValidationError"}},jn=class{constructor(e=xi){this.known=new Map;e.forEach(r=>this.known.set(this.normalizePakName(r.name),r))}validateArchive(e,r){let n=this.normalizePakName(r??("name"in e?e.name:"unknown")),o=e.checksum,i="size"in e?e.size:void 0,s=this.known.get(n);return s?s.checksum!==o?{name:n,checksum:o,expectedChecksum:s.checksum,status:"mismatch",size:i,description:s.description}:{name:n,checksum:o,expectedChecksum:s.checksum,status:"valid",size:i,description:s.description}:{name:n,checksum:o,status:"unknown",size:i}}assertValid(e,r){let n=this.validateArchive(e,r);if(n.status==="mismatch")throw new Pt(n);return n}normalizePakName(e){let r=te(e),n=r.split("/"),o=n.pop()??r,i=n.pop();return i?`${o}@${i}`:o}};var dt=class extends Error{constructor(r,n){super(`Failed to ingest PAK: ${r}`);this.file=r;this.name="PakIngestionError",n instanceof Error&&n.stack&&(this.stack=n.stack),this.cause=n}};async function Qc(t,e){if(typeof t.arrayBuffer=="function"){let r=await t.arrayBuffer();return e?.({file:"blob",loadedBytes:r.byteLength,totalBytes:r.byteLength,state:"reading"}),r}if(typeof FileReader<"u")return new Promise((r,n)=>{let o=new FileReader;o.onerror=()=>n(o.error??new Error("Unknown FileReader error")),o.onprogress=i=>{e?.({file:"blob",loadedBytes:i.loaded,totalBytes:i.total||t.size,state:"reading"})},o.onload=()=>{let i=o.result;i instanceof ArrayBuffer?r(i):n(new Error("Unexpected FileReader result"))},o.readAsArrayBuffer(t)});if(typeof Response<"u"){let r=await new Response(t).arrayBuffer();return e?.({file:"blob",loadedBytes:r.byteLength,totalBytes:r.byteLength,state:"reading"}),r}if(typeof t.stream=="function"){let r=t.stream().getReader(),n=[],o=0;for(;;){let{done:a,value:c}=await r.read();if(a)break;if(!c)continue;let l=c;n.push(l),o+=l.byteLength,e?.({file:"blob",loadedBytes:o,totalBytes:t.size,state:"reading"})}let i=new Uint8Array(o),s=0;for(let a of n)i.set(a,s),s+=a.byteLength;return i.buffer}throw new dt("blob",new Error("Unsupported Blob type"))}async function Jc(t,e){if(t.data instanceof ArrayBuffer)return e?.({file:t.name,loadedBytes:t.data.byteLength,totalBytes:t.data.byteLength,state:"reading"}),t.data;if(t.data instanceof Blob){let n=t.data.size;return Qc(t.data,o=>e?.({...o,file:t.name,totalBytes:n}))}let r=t.data.buffer.slice(t.data.byteOffset,t.data.byteOffset+t.data.byteLength);return e?.({file:t.name,loadedBytes:r.byteLength,totalBytes:r.byteLength,state:"reading"}),r}async function Kn(t,e,r){let n=typeof r=="function"?{onProgress:r}:r??{},o=n.persistIndexes??!!n.pakIndexStore,i=n.enforceValidation??!!n.validator,s=n.allowUnknownPaks??!0,a=n.stopOnError??!1,c=[];for(let l of e)try{let d=await Jc(l,n.onProgress),u=Zt.fromArrayBuffer(l.name,d),m=n.validator?.validateArchive(u);if(m){n.onValidationResult?.(m);let f=m.status==="mismatch",h=m.status==="unknown";if(f&&i||h&&!s){let y=new Pt(m);if(n.onError?.(l.name,y),a)throw new dt(l.name,y);c.push({archive:u,mounted:!1,validation:m});continue}}if(t.mountPak(u),o&&n.pakIndexStore)try{await n.pakIndexStore.persist(u)}catch(f){if(n.onError?.(l.name,f),a)throw new dt(l.name,f)}n.onProgress?.({file:l.name,loadedBytes:d.byteLength,totalBytes:d.byteLength,state:"parsed"}),c.push({archive:u,mounted:!0,validation:m})}catch(d){if(n.onProgress?.({file:l.name,loadedBytes:0,totalBytes:0,state:"error"}),n.onError?.(l.name,d),a)throw new dt(l.name,d)}return c}var ut=class{constructor(e){this.capacity=e;this.map=new Map;if(e<=0)throw new RangeError("LRU cache capacity must be greater than zero")}get size(){return this.map.size}has(e){return this.map.has(e)}get(e){let r=this.map.get(e);if(r!==void 0)return this.map.delete(e),this.map.set(e,r),r}set(e,r){if(this.map.has(e)&&this.map.delete(e),this.map.set(e,r),this.map.size>this.capacity){let n=this.map.keys().next();n.done||this.map.delete(n.value)}}delete(e){return this.map.delete(e)}clear(){this.map.clear()}entries(){return Array.from(this.map.entries()).reverse().map(([e,r])=>({key:e,value:r}))}};function Zc(t){return Array.isArray(t)?t:Array.from(t)}function gi(t){return Zc(t).map(e=>({name:e.name,data:e}))}async function Bs(t,e,r){let n=gi(e);return Kn(t,n,r??{})}function Vs(t,e){let r=o=>{o.preventDefault(),o.dataTransfer?.dropEffect&&(o.dataTransfer.dropEffect="copy")},n=o=>{o.preventDefault();let i=o.dataTransfer?.files;i&&i.length>0&&e(Array.from(i))};return t.addEventListener("dragover",r),t.addEventListener("drop",n),()=>{t.removeEventListener("dragover",r),t.removeEventListener("drop",n)}}function Us(t,e){let r=n=>{let o=n.target;!o||!o.files||o.files.length===0||(e(o.files),o.value="")};return t.addEventListener("change",r),()=>t.removeEventListener("change",r)}var el=844121161,tl=8,Gs=68,rl=[{x:-.525731,y:0,z:.850651},{x:-.442863,y:.238856,z:.864188},{x:-.295242,y:0,z:.955423},{x:-.309017,y:.5,z:.809017},{x:-.16246,y:.262866,z:.951056},{x:0,y:0,z:1},{x:0,y:.850651,z:.525731},{x:-.147621,y:.716567,z:.681718},{x:.147621,y:.716567,z:.681718},{x:0,y:.525731,z:.850651},{x:.309017,y:.5,z:.809017},{x:.525731,y:0,z:.850651},{x:.295242,y:0,z:.955423},{x:.442863,y:.238856,z:.864188},{x:.16246,y:.262866,z:.951056},{x:-.681718,y:.147621,z:.716567},{x:-.809017,y:.309017,z:.5},{x:-.587785,y:.425325,z:.688191},{x:-.850651,y:.525731,z:0},{x:-.864188,y:.442863,z:.238856},{x:-.716567,y:.681718,z:.147621},{x:-.688191,y:.587785,z:.425325},{x:-.5,y:.809017,z:.309017},{x:-.238856,y:.864188,z:.442863},{x:-.425325,y:.688191,z:.587785},{x:-.716567,y:.681718,z:-.147621},{x:-.5,y:.809017,z:-.309017},{x:-.525731,y:.850651,z:0},{x:0,y:.850651,z:-.525731},{x:-.238856,y:.864188,z:-.442863},{x:0,y:.955423,z:-.295242},{x:-.262866,y:.951056,z:-.16246},{x:0,y:1,z:0},{x:0,y:.955423,z:.295242},{x:-.262866,y:.951056,z:.16246},{x:.238856,y:.864188,z:.442863},{x:.262866,y:.951056,z:.16246},{x:.5,y:.809017,z:.309017},{x:.238856,y:.864188,z:-.442863},{x:.262866,y:.951056,z:-.16246},{x:.5,y:.809017,z:-.309017},{x:.850651,y:.525731,z:0},{x:.716567,y:.681718,z:.147621},{x:.716567,y:.681718,z:-.147621},{x:.525731,y:.850651,z:0},{x:.425325,y:.688191,z:.587785},{x:.864188,y:.442863,z:.238856},{x:.688191,y:.587785,z:.425325},{x:.809017,y:.309017,z:.5},{x:.681718,y:.147621,z:.716567},{x:.587785,y:.425325,z:.688191},{x:.955423,y:.295242,z:0},{x:1,y:0,z:0},{x:.951056,y:.16246,z:.262866},{x:.850651,y:-.525731,z:0},{x:.955423,y:-.295242,z:0},{x:.864188,y:-.442863,z:.238856},{x:.951056,y:-.16246,z:.262866},{x:.809017,y:-.309017,z:.5},{x:.681718,y:-.147621,z:.716567},{x:.850651,y:0,z:.525731},{x:.864188,y:.442863,z:-.238856},{x:.809017,y:.309017,z:-.5},{x:.951056,y:.16246,z:-.262866},{x:.525731,y:0,z:-.850651},{x:.681718,y:.147621,z:-.716567},{x:.681718,y:-.147621,z:-.716567},{x:.850651,y:0,z:-.525731},{x:.809017,y:-.309017,z:-.5},{x:.864188,y:-.442863,z:-.238856},{x:.951056,y:-.16246,z:-.262866},{x:.147621,y:.716567,z:-.681718},{x:.309017,y:.5,z:-.809017},{x:.425325,y:.688191,z:-.587785},{x:.442863,y:.238856,z:-.864188},{x:.587785,y:.425325,z:-.688191},{x:.688191,y:.587785,z:-.425325},{x:-.147621,y:.716567,z:-.681718},{x:-.309017,y:.5,z:-.809017},{x:0,y:.525731,z:-.850651},{x:-.525731,y:0,z:-.850651},{x:-.442863,y:.238856,z:-.864188},{x:-.295242,y:0,z:-.955423},{x:-.16246,y:.262866,z:-.951056},{x:0,y:0,z:-1},{x:.295242,y:0,z:-.955423},{x:.16246,y:.262866,z:-.951056},{x:-.442863,y:-.238856,z:-.864188},{x:-.309017,y:-.5,z:-.809017},{x:-.16246,y:-.262866,z:-.951056},{x:0,y:-.850651,z:-.525731},{x:-.147621,y:-.716567,z:-.681718},{x:.147621,y:-.716567,z:-.681718},{x:0,y:-.525731,z:-.850651},{x:.309017,y:-.5,z:-.809017},{x:.442863,y:-.238856,z:-.864188},{x:.16246,y:-.262866,z:-.951056},{x:.238856,y:-.864188,z:-.442863},{x:.5,y:-.809017,z:-.309017},{x:.425325,y:-.688191,z:-.587785},{x:.716567,y:-.681718,z:-.147621},{x:.688191,y:-.587785,z:-.425325},{x:.587785,y:-.425325,z:-.688191},{x:0,y:-.955423,z:-.295242},{x:0,y:-1,z:0},{x:.262866,y:-.951056,z:-.16246},{x:0,y:-.850651,z:.525731},{x:0,y:-.955423,z:.295242},{x:.238856,y:-.864188,z:.442863},{x:.262866,y:-.951056,z:.16246},{x:.5,y:-.809017,z:.309017},{x:.716567,y:-.681718,z:.147621},{x:.525731,y:-.850651,z:0},{x:-.238856,y:-.864188,z:-.442863},{x:-.5,y:-.809017,z:-.309017},{x:-.262866,y:-.951056,z:-.16246},{x:-.850651,y:-.525731,z:0},{x:-.716567,y:-.681718,z:-.147621},{x:-.716567,y:-.681718,z:.147621},{x:-.525731,y:-.850651,z:0},{x:-.5,y:-.809017,z:.309017},{x:-.238856,y:-.864188,z:.442863},{x:-.262866,y:-.951056,z:.16246},{x:-.864188,y:-.442863,z:.238856},{x:-.809017,y:-.309017,z:.5},{x:-.688191,y:-.587785,z:.425325},{x:-.681718,y:-.147621,z:.716567},{x:-.442863,y:-.238856,z:.864188},{x:-.587785,y:-.425325,z:.688191},{x:-.309017,y:-.5,z:.809017},{x:-.147621,y:-.716567,z:.681718},{x:-.425325,y:-.688191,z:.587785},{x:-.16246,y:-.262866,z:.951056},{x:.442863,y:-.238856,z:.864188},{x:.16246,y:-.262866,z:.951056},{x:.309017,y:-.5,z:.809017},{x:.147621,y:-.716567,z:.681718},{x:0,y:-.525731,z:.850651},{x:.425325,y:-.688191,z:.587785},{x:.587785,y:-.425325,z:.688191},{x:.688191,y:-.587785,z:.425325},{x:-.955423,y:.295242,z:0},{x:-.951056,y:.16246,z:.262866},{x:-1,y:0,z:0},{x:-.850651,y:0,z:.525731},{x:-.955423,y:-.295242,z:0},{x:-.951056,y:-.16246,z:.262866},{x:-.864188,y:.442863,z:-.238856},{x:-.951056,y:.16246,z:-.262866},{x:-.809017,y:.309017,z:-.5},{x:-.864188,y:-.442863,z:-.238856},{x:-.951056,y:-.16246,z:-.262866},{x:-.809017,y:-.309017,z:-.5},{x:-.681718,y:.147621,z:-.716567},{x:-.681718,y:-.147621,z:-.716567},{x:-.850651,y:0,z:-.525731},{x:-.688191,y:.587785,z:-.425325},{x:-.587785,y:.425325,z:-.688191},{x:-.425325,y:.688191,z:-.587785},{x:-.425325,y:-.688191,z:-.587785},{x:-.587785,y:-.425325,z:-.688191},{x:-.688191,y:-.587785,z:-.425325}],se=class extends Error{},er=class{constructor(e){this.vfs=e}async load(e){let r=await this.vfs.readFile(e),n=new Uint8Array(r.byteLength);return n.set(r),vi(n.buffer)}};function Ws(t,e,r){let n=[];for(let o=0;o<r;o+=1){let i=t.getUint8(e+o);if(i===0)break;n.push(i)}return String.fromCharCode(...n)}function Ir(t,e,r,n){if(r!==0&&(e<Gs||e+r>t.byteLength))throw new se(`${n} section is out of bounds`)}function nl(t){if(t.byteLength<Gs)throw new se("MD2 buffer too small to contain header");let e=new DataView(t),r=e.getInt32(0,!0),n=e.getInt32(4,!0);if(r!==el)throw new se(`Invalid MD2 ident: ${r}`);if(n!==tl)throw new se(`Unsupported MD2 version: ${n}`);let o={ident:r,version:n,skinWidth:e.getInt32(8,!0),skinHeight:e.getInt32(12,!0),frameSize:e.getInt32(16,!0),numSkins:e.getInt32(20,!0),numVertices:e.getInt32(24,!0),numTexCoords:e.getInt32(28,!0),numTriangles:e.getInt32(32,!0),numGlCommands:e.getInt32(36,!0),numFrames:e.getInt32(40,!0),offsetSkins:e.getInt32(44,!0),offsetTexCoords:e.getInt32(48,!0),offsetTriangles:e.getInt32(52,!0),offsetFrames:e.getInt32(56,!0),offsetGlCommands:e.getInt32(60,!0),offsetEnd:e.getInt32(64,!0)},i=40+o.numVertices*4;if(o.frameSize!==i)throw new se(`Unexpected frame size ${o.frameSize}, expected ${i}`);if(o.offsetEnd>t.byteLength)throw new se("MD2 offset_end exceeds buffer length");return o}function ol(t,e){let r=e.numSkins*64;Ir(t,e.offsetSkins,r,"skins");let n=new DataView(t,e.offsetSkins,r),o=[];for(let i=0;i<e.numSkins;i+=1)o.push({name:Ws(n,i*64,64)});return o}function il(t,e){let r=e.numTexCoords*4;Ir(t,e.offsetTexCoords,r,"texcoords");let n=new DataView(t,e.offsetTexCoords,r),o=[];for(let i=0;i<e.numTexCoords;i+=1){let s=i*4;o.push({s:n.getInt16(s,!0),t:n.getInt16(s+2,!0)})}return o}function sl(t,e){let r=e.numTriangles*12;Ir(t,e.offsetTriangles,r,"triangles");let n=new DataView(t,e.offsetTriangles,r),o=[];for(let i=0;i<e.numTriangles;i+=1){let s=i*12,a=[n.getUint16(s,!0),n.getUint16(s+2,!0),n.getUint16(s+4,!0)],c=[n.getUint16(s+6,!0),n.getUint16(s+8,!0),n.getUint16(s+10,!0)];if(a.some(l=>l>=e.numVertices)||c.some(l=>l>=e.numTexCoords))throw new se("Triangle references out of range vertex or texcoord");o.push({vertexIndices:a,texCoordIndices:c})}return o}function al(t,e){let r=e.numFrames*e.frameSize;Ir(t,e.offsetFrames,r,"frames");let n=[];for(let o=0;o<e.numFrames;o+=1){let i=e.offsetFrames+o*e.frameSize,s=new DataView(t,i,e.frameSize),a={x:s.getFloat32(0,!0),y:s.getFloat32(4,!0),z:s.getFloat32(8,!0)},c={x:s.getFloat32(12,!0),y:s.getFloat32(16,!0),z:s.getFloat32(20,!0)},l=Ws(s,24,16),d=[];for(let u=0;u<e.numVertices;u+=1){let m=40+u*4,f={x:s.getUint8(m)*a.x+c.x,y:s.getUint8(m+1)*a.y+c.y,z:s.getUint8(m+2)*a.z+c.z},h=s.getUint8(m+3),y=rl[h];if(!y)throw new se(`Invalid normal index ${h} in frame ${l}`);d.push({position:f,normalIndex:h,normal:y})}n.push({name:l,vertices:d})}return n}function cl(t,e){let r=e.numGlCommands*4;if(Ir(t,e.offsetGlCommands,r,"gl commands"),r===0)return[];let n=new DataView(t,e.offsetGlCommands,r),o=[],i=0;for(;;){if(i+4>r)throw new se("GL command list ended unexpectedly");let s=n.getInt32(i,!0);if(i+=4,s===0)break;let a=Math.abs(s),c=[],l=a*12;if(i+l>r)throw new se("GL command vertex block exceeds buffer");for(let d=0;d<a;d+=1){let u=n.getFloat32(i,!0),m=n.getFloat32(i+4,!0),f=n.getInt32(i+8,!0);if(i+=12,f<0||f>=e.numVertices)throw new se("GL command references invalid vertex index");c.push({s:u,t:m,vertexIndex:f})}o.push({mode:s>0?"strip":"fan",vertices:c})}if(i!==r)throw new se("GL command list did not consume expected data");return o}function vi(t){let e=nl(t),r=ol(t,e),n=il(t,e),o=sl(t,e),i=al(t,e),s=cl(t,e);return{header:e,skins:r,texCoords:n,triangles:o,frames:i,glCommands:s}}function Xs(t){let e=[],r=0;for(;r<t.length;){let n=t[r].name,o=n.replace(/\d+$/,"")||n,i=r;for(;i+1<t.length&&(t[i+1].name.replace(/\d+$/,"")||t[i+1].name)===o;)i+=1;e.push({name:o,firstFrame:r,lastFrame:i}),r=i+1}return e}var qs=860898377,ll=15,Ce=class extends Error{constructor(e){super(e),this.name="Md3ParseError"}};function Rr(t,e,r){let n=new Uint8Array(t.buffer,t.byteOffset+e,r);return new TextDecoder("utf-8").decode(n).replace(/\0.*$/,"").trim()}function dl(t){let e=(t>>8&255)*(2*Math.PI/255),r=(t&255)*(2*Math.PI/255),n=Math.sin(r);return{x:Math.cos(e)*n,y:Math.sin(e)*n,z:Math.cos(r)}}function $n(t,e,r,n){if(e<0||e+r>n)throw new Ce(`${t} exceeds buffer bounds`)}function ul(t){let e=t.getInt32(0,!0);if(e!==qs)throw new Ce(`Invalid MD3 ident: ${e}`);let r=t.getInt32(4,!0);if(r!==ll)throw new Ce(`Unsupported MD3 version: ${r}`);let n=Rr(t,8,64),o=t.getInt32(72,!0),i=t.getInt32(76,!0),s=t.getInt32(80,!0),a=t.getInt32(84,!0),c=t.getInt32(88,!0),l=t.getInt32(92,!0),d=t.getInt32(96,!0),u=t.getInt32(100,!0),m=t.getInt32(104,!0);if(i<=0||a<0||s<0)throw new Ce("Invalid MD3 counts");return{ident:e,version:r,name:n,flags:o,numFrames:i,numTags:s,numSurfaces:a,numSkins:c,ofsFrames:l,ofsTags:d,ofsSurfaces:u,ofsEnd:m}}function ml(t,e){let r=[];$n("Frames",e.ofsFrames,e.numFrames*56,t.byteLength);for(let o=0;o<e.numFrames;o+=1){let i=e.ofsFrames+o*56;r.push({minBounds:{x:t.getFloat32(i,!0),y:t.getFloat32(i+4,!0),z:t.getFloat32(i+8,!0)},maxBounds:{x:t.getFloat32(i+12,!0),y:t.getFloat32(i+16,!0),z:t.getFloat32(i+20,!0)},localOrigin:{x:t.getFloat32(i+24,!0),y:t.getFloat32(i+28,!0),z:t.getFloat32(i+32,!0)},radius:t.getFloat32(i+36,!0),name:Rr(t,i+40,16)})}return r}function fl(t,e){let r=[],o=e.numFrames*e.numTags*112;$n("Tags",e.ofsTags,o,t.byteLength);for(let i=0;i<e.numFrames;i+=1){let s=[];for(let a=0;a<e.numTags;a+=1){let c=e.ofsTags+(i*e.numTags+a)*112,l=c+64,d=l+12;s.push({name:Rr(t,c,64),origin:{x:t.getFloat32(l,!0),y:t.getFloat32(l+4,!0),z:t.getFloat32(l+8,!0)},axis:[{x:t.getFloat32(d,!0),y:t.getFloat32(d+4,!0),z:t.getFloat32(d+8,!0)},{x:t.getFloat32(d+12,!0),y:t.getFloat32(d+16,!0),z:t.getFloat32(d+20,!0)},{x:t.getFloat32(d+24,!0),y:t.getFloat32(d+28,!0),z:t.getFloat32(d+32,!0)}]})}r.push(s)}return r}function pl(t,e){let r=t.getInt32(e,!0);if(r!==qs)throw new Ce(`Invalid surface ident at ${e}: ${r}`);let n=Rr(t,e+4,64),o=t.getInt32(e+68,!0),i=t.getInt32(e+72,!0),s=t.getInt32(e+76,!0),a=t.getInt32(e+80,!0),c=t.getInt32(e+84,!0),l=t.getInt32(e+88,!0),d=t.getInt32(e+92,!0),u=t.getInt32(e+96,!0),m=t.getInt32(e+100,!0),f=t.getInt32(e+104,!0);if(i<=0||a<=0||c<=0)throw new Ce(`Invalid surface counts for ${n}`);let h=f;$n(`Surface ${n}`,e,h,t.byteLength);let y=[],p=e+l;for(let w=0;w<c;w+=1){let L=p+w*12;y.push({indices:[t.getInt32(L,!0),t.getInt32(L+4,!0),t.getInt32(L+8,!0)]})}let x=[],M=e+d;for(let w=0;w<s;w+=1){let L=M+w*68;x.push({name:Rr(t,L,64),shaderIndex:t.getInt32(L+64,!0)})}let v=[],S=e+u;for(let w=0;w<a;w+=1){let L=S+w*8;v.push({s:t.getFloat32(L,!0),t:t.getFloat32(L+4,!0)})}let b=[],_=e+m;for(let w=0;w<i;w+=1){let L=[];for(let P=0;P<a;P+=1){let A=_+(w*a+P)*8,N=t.getInt16(A,!0)/64,U=t.getInt16(A+2,!0)/64,V=t.getInt16(A+4,!0)/64,F=t.getUint16(A+6,!0);L.push({position:{x:N,y:U,z:V},latLng:F,normal:dl(F)})}b.push(L)}return{surface:{name:n,flags:o,numFrames:i,shaders:x,triangles:y,texCoords:v,vertices:b},nextOffset:e+f}}function bi(t){if(t.byteLength<108)throw new Ce("MD3 buffer too small for header");let e=new DataView(t),r=ul(e);$n("MD3 end",r.ofsEnd,0,t.byteLength);let n=ml(e,r),o=fl(e,r),i=[],s=r.ofsSurfaces;for(let a=0;a<r.numSurfaces;a+=1){let{surface:c,nextOffset:l}=pl(e,s);i.push(c),s=l}if(s!==r.ofsEnd)throw new Ce("Surface parsing did not reach ofsEnd");return{header:r,frames:n,tags:o,surfaces:i}}var tr=class{constructor(e){this.vfs=e}async load(e){let r=await this.vfs.readFile(e);return bi(r.slice().buffer)}};function Ys(t,e){let r=(t.sequence.end-t.sequence.start+1)/t.sequence.fps,n=t.sequence.loop!==!1,o=t.time+e;return n?o=(o%r+r)%r:o>r&&(o=r),{...t,time:Math.max(0,Math.min(o,r))}}function js(t){let e=t.sequence.end-t.sequence.start+1,r=1/t.sequence.fps,n=t.sequence.loop!==!1,o=t.time/r;if(!n&&o>=e)return{frame:t.sequence.end,nextFrame:t.sequence.end,lerp:0};let i=n?o%e:Math.min(o,e-1),s=Math.floor(i),a=t.sequence.start+s,c=s+1>=e?n?t.sequence.start:t.sequence.end:a+1,l=!n&&s>=e-1?0:i-s;return{frame:a,nextFrame:c,lerp:l}}function Ks(t){return{sequence:t,time:0}}function $s(t,e,r){return{x:t.x+(e.x-t.x)*r,y:t.y+(e.y-t.y)*r,z:t.z+(e.z-t.z)*r}}var kr=class extends Error{constructor(e){super(e),this.name="WalParseError"}};function Qn(t){if(t.byteLength<100)throw new kr("WAL buffer too small");let e=new DataView(t),r=new Uint8Array(t,0,32),n=new TextDecoder("utf-8").decode(r).replace(/\0.*$/,"").trim(),o=e.getInt32(32,!0),i=e.getInt32(36,!0),s=[e.getInt32(40,!0),e.getInt32(44,!0),e.getInt32(48,!0),e.getInt32(52,!0)],a=new Uint8Array(t,56,32),c=new TextDecoder("utf-8").decode(a).replace(/\0.*$/,"").trim(),l=e.getInt32(88,!0),d=e.getInt32(92,!0),u=e.getInt32(96,!0);if(o<=0||i<=0)throw new kr("Invalid WAL dimensions");let m=[],f=o,h=i;for(let y=0;y<s.length;y+=1){let p=s[y],x=Math.max(1,f*h|0);if(p<=0||p+x>t.byteLength)throw new kr(`Invalid WAL mip offset for level ${y}`);let M=new Uint8Array(t,p,x);m.push({level:y,width:f,height:h,data:M}),f=Math.max(1,f>>1),h=Math.max(1,h>>1)}return{name:n,width:o,height:i,mipmaps:m,animName:c,flags:l,contents:d,value:u}}var Ft=class extends Error{constructor(e){super(e),this.name="PcxParseError"}};function Qs(t){if(t.byteLength<128)throw new Ft("PCX buffer too small for header");let e=new DataView(t),r=e.getUint8(0),n=e.getUint8(2),o=e.getUint8(3),i=e.getUint16(4,!0),s=e.getUint16(6,!0),a=e.getUint16(8,!0),c=e.getUint16(10,!0);if(r!==10||n!==1)throw new Ft("Unsupported PCX encoding");if(o!==8)throw new Ft("Only 8bpp PCX files are supported");let l=a-i+1,d=c-s+1,u=e.getUint16(66,!0),m=t.byteLength-769;if(m<128||new DataView(t,m,1).getUint8(0)!==12)throw new Ft("Missing PCX palette");let f=new Uint8Array(t,m+1,768),h=new Uint8Array(t,128,m-128),y=new Uint8Array(l*d),p=0,x=0;for(let M=0;M<d;M+=1){let v=0;for(;v<u&&p<h.length;){let S=1,b=h[p++];if((b&192)===192){if(S=b&63,p>=h.length)throw new Ft("Unexpected end of PCX RLE data");b=h[p++]}for(let _=0;_<S&&v<u;_+=1)v<l&&(y[x++]=b),v+=1}}return{width:l,height:d,bitsPerPixel:o,pixels:y,palette:f}}function Jn(t){let e=new Uint8Array(t.width*t.height*4);for(let r=0;r<t.pixels.length;r+=1){let n=t.pixels[r],o=n*3,i=r*4;e[i]=t.palette[o],e[i+1]=t.palette[o+1],e[i+2]=t.palette[o+2],e[i+3]=n===255?0:255}return e}var rr=class{constructor(e={}){this.cache=new ut(e.capacity??128)}get size(){return this.cache.size}get(e){return this.cache.get(e.toLowerCase())}set(e,r){this.cache.set(e.toLowerCase(),r)}clear(){this.cache.clear()}};function Si(t,e){let r=[];for(let n of t.mipmaps){let o=new Uint8Array(n.width*n.height*4);for(let i=0;i<n.data.length;i+=1){let s=n.data[i],a=s*3,c=i*4;o[c]=e[a],o[c+1]=e[a+1],o[c+2]=e[a+2],o[c+3]=s===255?0:255}r.push({level:n.level,width:n.width,height:n.height,rgba:o})}return{width:t.width,height:t.height,levels:r,source:"wal"}}function Js(t){let e=Jn(t),r={level:0,width:t.width,height:t.height,rgba:e};return{width:t.width,height:t.height,levels:[r],source:"pcx"}}function Zs(t,e){return Si(Qn(t),e)}var It=class extends Error{constructor(e){super(e),this.name="WavParseError"}};function Mi(t,e,r){return new TextDecoder("ascii").decode(new Uint8Array(t.buffer,t.byteOffset+e,r))}function Zn(t){if(t.byteLength<44)throw new It("WAV buffer too small");let e=new DataView(t);if(Mi(e,0,4)!=="RIFF"||Mi(e,8,4)!=="WAVE")throw new It("Invalid WAV header");let r=12,n=-1,o=-1,i=0,s=0;for(;r+8<=t.byteLength;){let h=Mi(e,r,4),y=e.getUint32(r+4,!0),p=r+8;h==="fmt "?(n=p,i=y):h==="data"&&(o=p,s=y),r=p+y}if(n===-1||o===-1)throw new It("Missing fmt or data chunk");let a=e.getUint16(n,!0),c=e.getUint16(n+2,!0),l=e.getUint32(n+4,!0),d=e.getUint16(n+14,!0);if(a!==1)throw new It("Only PCM WAV is supported");let u=d/8,m=s/(u*c),f=new Float32Array(m*c);for(let h=0;h<m;h+=1)for(let y=0;y<c;y+=1){let p=h*c+y,x=o+p*u,M=0;if(d===8)M=e.getUint8(x),f[p]=(M-128)/128;else if(d===16)M=e.getInt16(x,!0),f[p]=M/32768;else if(d===24){let v=e.getUint8(x),S=e.getUint8(x+1),b=e.getInt8(x+2);M=v|S<<8|b<<16,f[p]=M/8388608}else throw new It(`Unsupported bitsPerSample: ${d}`)}return{sampleRate:l,channels:c,bitsPerSample:d,samples:f}}var hl=(t,e=4294967295,r=79764919)=>{let n=new Int32Array(256),o,i,s,a=e;for(o=0;o<256;o++){for(s=o<<24,i=8;i>0;--i)s=2147483648&s?s<<1^r:s<<1;n[o]=s}for(o=0;o<t.length;o++)a=a<<8^n[255&(a>>24^t[o])];return a};var _i=(t,e=hl)=>{let r=p=>new Uint8Array(p.length/2).map(((x,M)=>parseInt(p.substring(2*M,2*(M+1)),16))),n=p=>r(p)[0],o=new Map;[,8364,,8218,402,8222,8230,8224,8225,710,8240,352,8249,338,,381,,,8216,8217,8220,8221,8226,8211,8212,732,8482,353,8250,339,,382,376].forEach(((p,x)=>o.set(p,x)));let i=new Uint8Array(t.length),s,a,c,l=!1,d=0,u=42,m=t.length>13&&t.substring(0,9)==="dynEncode",f=0;m&&(f=11,a=n(t.substring(9,f)),a<=1&&(f+=2,u=n(t.substring(11,f))),a===1&&(f+=8,c=(p=>new DataView(r(p).buffer).getInt32(0,!0))(t.substring(13,f))));let h=256-u;for(let p=f;p<t.length;p++)if(s=t.charCodeAt(p),s!==61||l){if(s===92&&p<t.length-5&&m){let x=t.charCodeAt(p+1);x!==117&&x!==85||(s=parseInt(t.substring(p+2,p+6),16),p+=5)}if(s>255){let x=o.get(s);x&&(s=x+127)}l&&(l=!1,s-=64),i[d++]=s<u&&s>0?s+h:s-u}else l=!0;let y=i.subarray(0,d);if(m&&a===1){let p=e(y);if(p!==c){let x="Decode failed crc32 validation";throw console.error("`simple-yenc`\n",x+`
1
+ "use strict";var Quake2Engine=(()=>{var zc=Object.create;var Vn=Object.defineProperty;var Ec=Object.getOwnPropertyDescriptor;var Cc=Object.getOwnPropertyNames;var Tc=Object.getPrototypeOf,Pc=Object.prototype.hasOwnProperty;var Fc=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),ai=(t,e)=>{for(var r in e)Vn(t,r,{get:e[r],enumerable:!0})},Ls=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Cc(e))!Pc.call(t,o)&&o!==r&&Vn(t,o,{get:()=>e[o],enumerable:!(n=Ec(e,o))||n.enumerable});return t};var Ic=(t,e,r)=>(r=t!=null?zc(Tc(t)):{},Ls(e||!t||!t.__esModule?Vn(r,"default",{value:t,enumerable:!0}):r,t)),Rc=t=>Ls(Vn({},"__esModule",{value:!0}),t);var sa=Fc((dm,ia)=>{"use strict";ia.exports=Worker});var Qd={};ai(Qd,{ATTN_IDLE:()=>Ha,ATTN_LOOP_NONE:()=>ka,ATTN_NONE:()=>Ho,ATTN_NORM:()=>Da,ATTN_STATIC:()=>Oa,AssetDependencyError:()=>Kt,AssetDependencyTracker:()=>In,AssetManager:()=>ko,AudioApi:()=>Ko,AudioContextController:()=>No,AudioRegistry:()=>Mr,AudioRegistryError:()=>Tn,AudioSystem:()=>qo,BSP_SURFACE_FRAGMENT_SOURCE:()=>es,BSP_SURFACE_VERTEX_SOURCE:()=>Zi,BSP_VERTEX_LAYOUT:()=>$i,BspSurfacePipeline:()=>Qo,Camera:()=>ri,ConfigStringRegistry:()=>Zt,Cvar:()=>Rr,CvarRegistry:()=>Kn,EngineHost:()=>Qt,EngineRuntime:()=>Ir,FixedTimestepLoop:()=>Pt,Framebuffer:()=>jo,IndexBuffer:()=>De,LruCache:()=>ut,MAX_SOUND_CHANNELS:()=>qi,MD2_FRAGMENT_SHADER:()=>as,MD2_VERTEX_SHADER:()=>ss,MD3_FRAGMENT_SHADER:()=>ys,MD3_VERTEX_SHADER:()=>hs,Md2Loader:()=>tr,Md2MeshBuffers:()=>Zo,Md2ParseError:()=>se,Md2Pipeline:()=>ei,Md3Loader:()=>rr,Md3ModelMesh:()=>ni,Md3ParseError:()=>Ce,Md3Pipeline:()=>oi,Md3SurfaceMesh:()=>Dn,MusicSystem:()=>Yo,PARTICLE_FRAGMENT_SHADER:()=>gs,PARTICLE_VERTEX_SHADER:()=>xs,PakArchive:()=>er,PakIndexStore:()=>Ro,PakIngestionError:()=>dt,PakParseError:()=>Ee,PakValidationError:()=>Ft,PakValidator:()=>$n,ParticleRenderer:()=>si,ParticleSystem:()=>ii,RERELEASE_KNOWN_PAKS:()=>vi,SKYBOX_FRAGMENT_SHADER:()=>os,SKYBOX_VERTEX_SHADER:()=>ns,SOUND_FULLVOLUME:()=>_r,SOUND_LOOP_ATTENUATE:()=>Na,ShaderProgram:()=>ye,SkyboxPipeline:()=>Jo,SoundChannel:()=>Do,SoundPrecache:()=>Uo,SoundRegistry:()=>Vo,SpriteLoader:()=>nr,SpriteParseError:()=>mt,Texture2D:()=>Ar,TextureCache:()=>or,TextureCubeMap:()=>wr,VertexArray:()=>Se,VertexBuffer:()=>xe,VirtualFileSystem:()=>jn,advanceAnimation:()=>Js,applySurfaceState:()=>Qa,attenuationToDistanceMultiplier:()=>jt,boxIntersectsFrustum:()=>kn,buildBspGeometry:()=>Wa,buildMd2Geometry:()=>cs,buildMd2VertexData:()=>ls,buildMd3SurfaceGeometry:()=>fs,buildMd3VertexData:()=>ps,calculateMaxAudibleDistance:()=>Oo,calculatePakChecksum:()=>Us,computeFrameBlend:()=>Zs,computeSkyScroll:()=>ec,createAnimationState:()=>ea,createAudioGraph:()=>Bo,createEngine:()=>$d,createEngineRuntime:()=>Bs,createInitialChannels:()=>Go,createProgramFromSources:()=>Ga,createWebGLContext:()=>Va,decodeOgg:()=>Io,deriveSurfaceRenderState:()=>rs,extractFrustumPlanes:()=>Xa,filesToPakSources:()=>bi,findLeafForPoint:()=>Ji,gatherVisibleFaces:()=>ja,groupMd2Animations:()=>Ks,ingestPakFiles:()=>Gs,ingestPaks:()=>Qn,interpolateMd3Tag:()=>gc,interpolateVec3:()=>ta,parseMd2:()=>Si,parseMd3:()=>Mi,parsePcx:()=>ra,parseSprite:()=>_i,parseWal:()=>Zn,parseWalTexture:()=>oa,parseWav:()=>to,pcxToRgba:()=>eo,pickChannel:()=>Wo,preparePcxTexture:()=>na,removeViewTranslation:()=>Za,resolveLightStyles:()=>ts,spatializeOrigin:()=>Xo,spawnBlood:()=>Sc,spawnBulletImpact:()=>vc,spawnExplosion:()=>bc,spawnMuzzleFlash:()=>_c,spawnTeleportFlash:()=>Mc,spawnTrail:()=>Ac,walToRgba:()=>Ai,wireDropTarget:()=>Ws,wireFileInput:()=>Xs});var kc=()=>typeof performance<"u"?performance.now():Date.now(),Dc=t=>{typeof requestAnimationFrame=="function"?requestAnimationFrame(()=>t()):setTimeout(t,25)},Pt=class{constructor(e,r={}){this.callbacks=e;this.accumulatorMs=0;this.frame=0;this.running=!1;this.tick=()=>{if(!this.running)return;let e=this.options.now(),r=this.lastTimeMs===void 0?0:e-this.lastTimeMs;this.lastTimeMs=e,this.advance(r,e),this.running&&this.options.schedule(this.tick)};let n=r.fixedDeltaMs??25,o=r.maxSubSteps??5;this.options={fixedDeltaMs:n,maxSubSteps:o,maxDeltaMs:r.maxDeltaMs??n*o,startTimeMs:r.startTimeMs,now:r.now??kc,schedule:r.schedule??Dc}}start(){this.running||(this.running=!0,this.lastTimeMs=this.options.startTimeMs??this.options.now(),this.options.schedule(this.tick))}stop(){this.running=!1}pump(e){let r=(this.lastTimeMs??0)+e;this.lastTimeMs=r,this.advance(e,r)}isRunning(){return this.running}get frameNumber(){return this.frame}advance(e,r){let n=Math.min(Math.max(e,0),this.options.maxDeltaMs);this.accumulatorMs=Math.min(this.accumulatorMs+n,this.options.fixedDeltaMs*this.options.maxSubSteps);let o=0;for(;this.accumulatorMs>=this.options.fixedDeltaMs&&o<this.options.maxSubSteps;)this.frame+=1,this.callbacks.simulate({frame:this.frame,deltaMs:this.options.fixedDeltaMs,nowMs:r}),this.accumulatorMs-=this.options.fixedDeltaMs,o+=1;let i=this.options.fixedDeltaMs===0?0:this.accumulatorMs/this.options.fixedDeltaMs;this.callbacks.render?.({alpha:i,nowMs:r,accumulatorMs:this.accumulatorMs,frame:this.frame})}};var Qt=class{constructor(e,r,n={}){this.game=e;this.client=r;this.started=!1;this.stepSimulation=e=>{this.previousFrame=this.latestFrame,this.latestFrame=this.game.frame(e,this.latestCommand)};this.renderClient=e=>{this.client&&(this.latestCommand=this.client.render({...e,previous:this.previousFrame,latest:this.latestFrame}))};let o=n.loop?.now?.()??Date.now();this.startTimeMs=n.startTimeMs??n.loop?.startTimeMs??o,this.loop=new Pt({simulate:this.stepSimulation,render:this.renderClient},{...n.loop,startTimeMs:this.startTimeMs})}start(){this.started||(this.latestFrame=this.game.init(this.startTimeMs)??this.latestFrame,this.client?.init(this.latestFrame),this.started=!0,this.loop.start())}stop(){this.started&&(this.loop.stop(),this.client?.shutdown(),this.game.shutdown(),this.previousFrame=void 0,this.latestFrame=void 0,this.started=!1)}pump(e){this.loop.pump(e)}getLatestFrame(){return this.latestFrame}isRunning(){return this.loop.isRunning()}};var zs={x:0,y:0,z:0};var ru=Math.PI/180;function Es(t,e){return{x:t.x-e.x,y:t.y-e.y,z:t.z-e.z}}function Hc(t,e){return{x:t.x*e,y:t.y*e,z:t.z*e}}function li(t,e){return t.x*e.x+t.y*e.y+t.z*e.z}function Oc(t){return li(t,t)}function di(t){return Math.sqrt(Oc(t))}function Oe(t){let e=di(t);return e===0?t:Hc(t,1/e)}var Nc=Math.PI/180,nu=180/Math.PI,Jt=Nc;function Bc(){return new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1])}function Cs(t,e){let r=e.x,n=e.y,o=e.z;return{x:t[0]*r+t[4]*n+t[8]*o+t[12],y:t[1]*r+t[5]*n+t[9]*o+t[13],z:t[2]*r+t[6]*n+t[10]*o+t[14]}}function Ts(t,e){let r=Bc();return r[0]=e[0].x,r[1]=e[0].y,r[2]=e[0].z,r[4]=e[1].x,r[5]=e[1].y,r[6]=e[1].z,r[8]=e[2].x,r[9]=e[2].y,r[10]=e[2].z,r[12]=t.x,r[13]=t.y,r[14]=t.z,r}var Ge=1,lt=2;var ui=8,mi=16,Vc=32;var Uc=16384;var Un=65536,Ps=1<<17,Gc=1<<18,Wc=1<<19,Xc=1<<20,qc=1<<21,Yc=1<<22,Kc=1<<23,ou=1<<24,Gn=1<<25,jc=1<<26,iu=1<<27,su=1<<28,au=1<<29,Wn=1<<30,cu=1<<31;var Fr=0;var Fs=4,Is=8,Rs=16,ks=32,Ds=64;var lu=1<<25,du=1<<28,uu=1<<29,mu=1<<30,fu=1<<31;var pu=Ge|lt,hu=Ge|Un|lt|Gn|Wn,yu=Ge|Un|lt,xu=Ge|Ps|lt|Gn|Wn,gu=Vc|ui|mi,vu=Ge|mi|ui,$c=Ge|Gn|Wn|lt|jc,bu=Gc|Wc|Xc|qc|Yc|Kc,Su=Ge|ui|mi|Gn|Wn,Mu=Ge|Un|lt,_u=Ge|lt,Au=Ge|Un|lt|Ps,wu=$c|Uc;var Lu=Number.MAX_SAFE_INTEGER-1;var Xn=(t=>(t[t.None=0]="None",t[t.Archive=1]="Archive",t[t.UserInfo=2]="UserInfo",t[t.ServerInfo=4]="ServerInfo",t[t.Latch=8]="Latch",t[t.Cheat=16]="Cheat",t))(Xn||{});var qn=256;var fi=256,pi=8192,Yn=2048,hi=512,yi=256,xi=qn*2,gi=256,ci=32,Pr=96;var X=(t=>(t[t.Name=0]="Name",t[t.CdTrack=1]="CdTrack",t[t.Sky=2]="Sky",t[t.SkyAxis=3]="SkyAxis",t[t.SkyRotate=4]="SkyRotate",t[t.StatusBar=5]="StatusBar",t[t.AirAccel=59]="AirAccel",t[t.MaxClients=60]="MaxClients",t[t.MapChecksum=61]="MapChecksum",t[t.Models=62]="Models",t[t.Sounds=62+pi]="Sounds",t[t.Images=t.Sounds+Yn]="Images",t[t.Lights=t.Images+hi]="Lights",t[t.ShadowLights=t.Lights+fi]="ShadowLights",t[t.Items=t.ShadowLights+gi]="Items",t[t.PlayerSkins=t.Items+yi]="PlayerSkins",t[t.General=t.PlayerSkins+qn]="General",t[t.WheelWeapons=t.General+xi]="WheelWeapons",t[t.WheelAmmo=t.WheelWeapons+ci]="WheelAmmo",t[t.WheelPowerups=t.WheelAmmo+ci]="WheelPowerups",t[t.CdLoopCount=t.WheelPowerups+ci]="CdLoopCount",t[t.GameStyle=t.CdLoopCount+1]="GameStyle",t[t.MaxConfigStrings=t.GameStyle+1]="MaxConfigStrings",t))(X||{}),Hs=X.MaxConfigStrings;function Os(t){return t>=5&&t<59?Pr*(59-t):t>=X.General&&t<X.WheelWeapons?Pr*(X.MaxConfigStrings-t):Pr}function Qc(t){if(t<0||t>=X.MaxConfigStrings)throw new RangeError(`Configstring index ${t} is out of range (0-${X.MaxConfigStrings-1})`)}function Ns(t,e){let r=Os(t);if(e.length>r)throw new RangeError(`Configstring ${t} exceeds maximum length (${e.length} > ${r}); limit is ${Pr} chars per slot`)}var Zt=class{constructor(){this.values=new Map;this.modelCursor=X.Models;this.soundCursor=X.Sounds;this.imageCursor=X.Images;this.lightCursor=X.Lights;this.shadowLightCursor=X.ShadowLights;this.itemCursor=X.Items;this.playerSkinCursor=X.PlayerSkins;this.generalCursor=X.General}set(e,r){return Qc(e),Ns(e,r),this.values.set(e,r),e}get(e){return this.values.get(e)}getAll(){let e=new Array(Hs).fill("");for(let[r,n]of this.values.entries())e[r]=n;return e}modelIndex(e){return this.register(e,X.Models,pi,"modelCursor")}soundIndex(e){return this.register(e,X.Sounds,Yn,"soundCursor")}findSoundIndex(e){for(let r=X.Sounds;r<X.Sounds+Yn;r+=1)if(this.values.get(r)===e)return r}imageIndex(e){return this.register(e,X.Images,hi,"imageCursor")}lightIndex(e){return this.register(e,X.Lights,fi,"lightCursor")}shadowLightIndex(e){return this.register(e,X.ShadowLights,gi,"shadowLightCursor")}itemIndex(e){return this.register(e,X.Items,yi,"itemCursor")}playerSkinIndex(e){return this.register(e,X.PlayerSkins,qn,"playerSkinCursor")}generalIndex(e){return this.register(e,X.General,xi,"generalCursor")}register(e,r,n,o){for(let a=r;a<r+n;a+=1)if(this.values.get(a)===e)return a;let i=this[o],s=r+n;if(i>=s)throw new RangeError(`Out of configstring slots for range starting at ${r}`);return Ns(i,e),this.values.set(i,e),this[o]=i+1,i}};var Ir=class{constructor(e,r){this.engine=e;this.host=r;this.started=!1}start(){this.started||(this.engine.init(),this.host.start(),this.started=!0)}stop(){this.started&&(this.host.stop(),this.engine.shutdown(),this.started=!1)}pump(e){this.host.pump(e)}getLatestFrame(){return this.host.getLatestFrame()}isRunning(){return this.started&&this.host.isRunning()}};function Bs(t,e,r,n){return new Ir(t,new Qt(e,r,n))}var Rr=class{constructor({name:e,defaultValue:r,description:n,flags:o=Xn.None,onChange:i}){this.modifiedCount=0;this.name=e,this.defaultValue=r,this.description=n,this.flags=o,this._value=r,this.onChange=i}get string(){return this._value}get number(){return Number(this._value)}get integer(){return Math.trunc(this.number)}get boolean(){return!!this.integer}set(e){if(this.flags&Xn.Latch){if(e===this._value){this.latched=void 0;return}if(this.latched===e)return;this.latched!==e&&(this.latched=e);return}this.apply(e)}reset(){this.latched=void 0,this.apply(this.defaultValue)}applyLatched(){if(this.latched===void 0)return!1;let e=this.latched;return this.latched=void 0,e===this._value?!1:(this.apply(e),!0)}apply(e){if(this._value===e)return;let r=this._value;this._value=e,this.modifiedCount+=1,this.onChange?.(this,r)}},Kn=class{constructor(){this.cvars=new Map}register(e){let r=this.cvars.get(e.name);if(r)return r;let n=new Rr(e);return this.cvars.set(e.name,n),n}get(e){return this.cvars.get(e)}setValue(e,r){let n=this.get(e);if(!n)throw new Error(`Unknown cvar: ${e}`);return n.set(r),n}resetAll(){for(let e of this.cvars.values())e.reset()}applyLatched(){let e=!1;for(let r of this.cvars.values())e=r.applyLatched()||e;return e}list(){return[...this.cvars.values()].sort((e,r)=>e.name.localeCompare(r.name))}};var Jc="PACK";function Zc(t,e,r){let n=[];for(let o=0;o<r;o+=1){let i=t.getUint8(e+o);if(i===0)break;n.push(i)}return String.fromCharCode(...n)}function te(t){return t.replace(/\\/g,"/").replace(/^\/+/,"").toLowerCase()}function el(){let t=new Uint32Array(256);for(let e=0;e<256;e+=1){let r=e;for(let n=0;n<8;n+=1)r=(r&1)!==0?3988292384^r>>>1:r>>>1;t[e]=r>>>0}return t}var tl=el();function Vs(t){let e=4294967295;for(let r=0;r<t.length;r+=1){let n=t[r];e=tl[(e^n)&255]^e>>>8}return(e^4294967295)>>>0}var Ee=class extends Error{},er=class t{constructor(e,r,n,o){this.name=e;this.buffer=r;this.entries=new Map(n.map(i=>[i.name,i])),this.checksum=o,this.size=r.byteLength}static fromArrayBuffer(e,r){let n=new DataView(r);if(r.byteLength<12)throw new Ee("PAK buffer too small to contain header");let o=String.fromCharCode(n.getUint8(0),n.getUint8(1),n.getUint8(2),n.getUint8(3));if(o!==Jc)throw new Ee(`Invalid PAK header magic: ${o}`);let i=n.getInt32(4,!0),s=n.getInt32(8,!0);if(i<12)throw new Ee(`Invalid directory offset: ${i}`);if(s<=0||s%64!==0)throw new Ee(`Invalid directory length: ${s}`);if(i+s>r.byteLength)throw new Ee("Directory exceeds buffer length");let c=s/64,l=[],d=new Map;for(let u=0;u<c;u+=1){let m=i+u*64,f=Zc(n,m,56),h=te(f),y=n.getInt32(m+56,!0),p=n.getInt32(m+60,!0);if(y<0||p<0||y+p>r.byteLength)throw new Ee(`Invalid entry bounds for ${f||"<unnamed>"} (offset=${y}, length=${p})`);if(!h)throw new Ee(`Entry ${u} has an empty name`);let x={name:h,offset:y,length:p};d.set(h,x)}return l.push(...d.values()),new t(e,r,l,Vs(new Uint8Array(r)))}getEntry(e){return this.entries.get(te(e))}listEntries(){return Array.from(this.entries.values())}readFile(e){let r=this.getEntry(e);if(!r)throw new Ee(`File not found in PAK: ${e}`);return new Uint8Array(this.buffer,r.offset,r.length)}validate(){return{checksum:this.checksum,entries:this.listEntries()}}};function Us(t){return Vs(new Uint8Array(t))}var jn=class{constructor(e=[]){this.mounts=[];this.files=new Map;e.forEach(r=>this.mountPak(r))}mountPak(e){this.mounts.push(e);for(let r of e.listEntries()){let n=te(r.name);this.files.set(n,{archive:e,entry:r})}}get mountedPaks(){return[...this.mounts]}hasFile(e){return this.files.has(te(e))}stat(e){let r=this.files.get(te(e));if(r)return{path:r.entry.name,size:r.entry.length,sourcePak:r.archive.name}}async readFile(e){let r=this.files.get(te(e));if(!r)throw new Error(`File not found in VFS: ${e}`);return r.archive.readFile(e)}list(e=""){let r=te(e).replace(/\/+$|^\//g,""),n=[],o=new Set,i=r?`${r}/`:"";for(let s of this.files.values()){if(r&&!s.entry.name.startsWith(i))continue;let a=r?s.entry.name.slice(i.length):s.entry.name,c=a.indexOf("/");c===-1?n.push({path:s.entry.name,size:s.entry.length,sourcePak:s.archive.name}):o.add(a.slice(0,c))}return n.sort((s,a)=>s.path.localeCompare(a.path)),{files:n,directories:[...o].sort()}}findByExtension(e){let r=e.startsWith(".")?e.toLowerCase():`.${e.toLowerCase()}`,n=[];for(let o of this.files.values())o.entry.name.toLowerCase().endsWith(r)&&n.push({path:o.entry.name,size:o.entry.length,sourcePak:o.archive.name});return n.sort((o,i)=>o.path.localeCompare(i.path))}};var vi=Object.freeze([{name:"pak0.pak",checksum:2378051181,description:"Base game assets"},{name:"pak0.pak@baseq2",checksum:2378051181,description:"Base game assets (baseq2)"},{name:"pak0.pak@rogue",checksum:3373211245,description:"Ground Zero (rogue) mission pack"},{name:"pak0.pak@xatrix",checksum:1358269824,description:"The Reckoning (xatrix) mission pack"}]),Ft=class extends Error{constructor(r){super(r.status==="unknown"?`Unknown PAK not allowed: ${r.name}`:`PAK checksum mismatch for ${r.name}`);this.result=r;this.name="PakValidationError"}},$n=class{constructor(e=vi){this.known=new Map;e.forEach(r=>this.known.set(this.normalizePakName(r.name),r))}validateArchive(e,r){let n=this.normalizePakName(r??("name"in e?e.name:"unknown")),o=e.checksum,i="size"in e?e.size:void 0,s=this.known.get(n);return s?s.checksum!==o?{name:n,checksum:o,expectedChecksum:s.checksum,status:"mismatch",size:i,description:s.description}:{name:n,checksum:o,expectedChecksum:s.checksum,status:"valid",size:i,description:s.description}:{name:n,checksum:o,status:"unknown",size:i}}assertValid(e,r){let n=this.validateArchive(e,r);if(n.status==="mismatch")throw new Ft(n);return n}normalizePakName(e){let r=te(e),n=r.split("/"),o=n.pop()??r,i=n.pop();return i?`${o}@${i}`:o}};var dt=class extends Error{constructor(r,n){super(`Failed to ingest PAK: ${r}`);this.file=r;this.name="PakIngestionError",n instanceof Error&&n.stack&&(this.stack=n.stack),this.cause=n}};async function rl(t,e){if(typeof t.arrayBuffer=="function"){let r=await t.arrayBuffer();return e?.({file:"blob",loadedBytes:r.byteLength,totalBytes:r.byteLength,state:"reading"}),r}if(typeof FileReader<"u")return new Promise((r,n)=>{let o=new FileReader;o.onerror=()=>n(o.error??new Error("Unknown FileReader error")),o.onprogress=i=>{e?.({file:"blob",loadedBytes:i.loaded,totalBytes:i.total||t.size,state:"reading"})},o.onload=()=>{let i=o.result;i instanceof ArrayBuffer?r(i):n(new Error("Unexpected FileReader result"))},o.readAsArrayBuffer(t)});if(typeof Response<"u"){let r=await new Response(t).arrayBuffer();return e?.({file:"blob",loadedBytes:r.byteLength,totalBytes:r.byteLength,state:"reading"}),r}if(typeof t.stream=="function"){let r=t.stream().getReader(),n=[],o=0;for(;;){let{done:a,value:c}=await r.read();if(a)break;if(!c)continue;let l=c;n.push(l),o+=l.byteLength,e?.({file:"blob",loadedBytes:o,totalBytes:t.size,state:"reading"})}let i=new Uint8Array(o),s=0;for(let a of n)i.set(a,s),s+=a.byteLength;return i.buffer}throw new dt("blob",new Error("Unsupported Blob type"))}async function nl(t,e){if(t.data instanceof ArrayBuffer)return e?.({file:t.name,loadedBytes:t.data.byteLength,totalBytes:t.data.byteLength,state:"reading"}),t.data;if(t.data instanceof Blob){let n=t.data.size;return rl(t.data,o=>e?.({...o,file:t.name,totalBytes:n}))}let r=t.data.buffer.slice(t.data.byteOffset,t.data.byteOffset+t.data.byteLength);return e?.({file:t.name,loadedBytes:r.byteLength,totalBytes:r.byteLength,state:"reading"}),r}async function Qn(t,e,r){let n=typeof r=="function"?{onProgress:r}:r??{},o=n.persistIndexes??!!n.pakIndexStore,i=n.enforceValidation??!!n.validator,s=n.allowUnknownPaks??!0,a=n.stopOnError??!1,c=[];for(let l of e)try{let d=await nl(l,n.onProgress),u=er.fromArrayBuffer(l.name,d),m=n.validator?.validateArchive(u);if(m){n.onValidationResult?.(m);let f=m.status==="mismatch",h=m.status==="unknown";if(f&&i||h&&!s){let y=new Ft(m);if(n.onError?.(l.name,y),a)throw new dt(l.name,y);c.push({archive:u,mounted:!1,validation:m});continue}}if(t.mountPak(u),o&&n.pakIndexStore)try{await n.pakIndexStore.persist(u)}catch(f){if(n.onError?.(l.name,f),a)throw new dt(l.name,f)}n.onProgress?.({file:l.name,loadedBytes:d.byteLength,totalBytes:d.byteLength,state:"parsed"}),c.push({archive:u,mounted:!0,validation:m})}catch(d){if(n.onProgress?.({file:l.name,loadedBytes:0,totalBytes:0,state:"error"}),n.onError?.(l.name,d),a)throw new dt(l.name,d)}return c}var ut=class{constructor(e){this.capacity=e;this.map=new Map;if(e<=0)throw new RangeError("LRU cache capacity must be greater than zero")}get size(){return this.map.size}has(e){return this.map.has(e)}get(e){let r=this.map.get(e);if(r!==void 0)return this.map.delete(e),this.map.set(e,r),r}set(e,r){if(this.map.has(e)&&this.map.delete(e),this.map.set(e,r),this.map.size>this.capacity){let n=this.map.keys().next();n.done||this.map.delete(n.value)}}delete(e){return this.map.delete(e)}clear(){this.map.clear()}entries(){return Array.from(this.map.entries()).reverse().map(([e,r])=>({key:e,value:r}))}};function ol(t){return Array.isArray(t)?t:Array.from(t)}function bi(t){return ol(t).map(e=>({name:e.name,data:e}))}async function Gs(t,e,r){let n=bi(e);return Qn(t,n,r??{})}function Ws(t,e){let r=o=>{o.preventDefault(),o.dataTransfer?.dropEffect&&(o.dataTransfer.dropEffect="copy")},n=o=>{o.preventDefault();let i=o.dataTransfer?.files;i&&i.length>0&&e(Array.from(i))};return t.addEventListener("dragover",r),t.addEventListener("drop",n),()=>{t.removeEventListener("dragover",r),t.removeEventListener("drop",n)}}function Xs(t,e){let r=n=>{let o=n.target;!o||!o.files||o.files.length===0||(e(o.files),o.value="")};return t.addEventListener("change",r),()=>t.removeEventListener("change",r)}var il=844121161,sl=8,qs=68,al=[{x:-.525731,y:0,z:.850651},{x:-.442863,y:.238856,z:.864188},{x:-.295242,y:0,z:.955423},{x:-.309017,y:.5,z:.809017},{x:-.16246,y:.262866,z:.951056},{x:0,y:0,z:1},{x:0,y:.850651,z:.525731},{x:-.147621,y:.716567,z:.681718},{x:.147621,y:.716567,z:.681718},{x:0,y:.525731,z:.850651},{x:.309017,y:.5,z:.809017},{x:.525731,y:0,z:.850651},{x:.295242,y:0,z:.955423},{x:.442863,y:.238856,z:.864188},{x:.16246,y:.262866,z:.951056},{x:-.681718,y:.147621,z:.716567},{x:-.809017,y:.309017,z:.5},{x:-.587785,y:.425325,z:.688191},{x:-.850651,y:.525731,z:0},{x:-.864188,y:.442863,z:.238856},{x:-.716567,y:.681718,z:.147621},{x:-.688191,y:.587785,z:.425325},{x:-.5,y:.809017,z:.309017},{x:-.238856,y:.864188,z:.442863},{x:-.425325,y:.688191,z:.587785},{x:-.716567,y:.681718,z:-.147621},{x:-.5,y:.809017,z:-.309017},{x:-.525731,y:.850651,z:0},{x:0,y:.850651,z:-.525731},{x:-.238856,y:.864188,z:-.442863},{x:0,y:.955423,z:-.295242},{x:-.262866,y:.951056,z:-.16246},{x:0,y:1,z:0},{x:0,y:.955423,z:.295242},{x:-.262866,y:.951056,z:.16246},{x:.238856,y:.864188,z:.442863},{x:.262866,y:.951056,z:.16246},{x:.5,y:.809017,z:.309017},{x:.238856,y:.864188,z:-.442863},{x:.262866,y:.951056,z:-.16246},{x:.5,y:.809017,z:-.309017},{x:.850651,y:.525731,z:0},{x:.716567,y:.681718,z:.147621},{x:.716567,y:.681718,z:-.147621},{x:.525731,y:.850651,z:0},{x:.425325,y:.688191,z:.587785},{x:.864188,y:.442863,z:.238856},{x:.688191,y:.587785,z:.425325},{x:.809017,y:.309017,z:.5},{x:.681718,y:.147621,z:.716567},{x:.587785,y:.425325,z:.688191},{x:.955423,y:.295242,z:0},{x:1,y:0,z:0},{x:.951056,y:.16246,z:.262866},{x:.850651,y:-.525731,z:0},{x:.955423,y:-.295242,z:0},{x:.864188,y:-.442863,z:.238856},{x:.951056,y:-.16246,z:.262866},{x:.809017,y:-.309017,z:.5},{x:.681718,y:-.147621,z:.716567},{x:.850651,y:0,z:.525731},{x:.864188,y:.442863,z:-.238856},{x:.809017,y:.309017,z:-.5},{x:.951056,y:.16246,z:-.262866},{x:.525731,y:0,z:-.850651},{x:.681718,y:.147621,z:-.716567},{x:.681718,y:-.147621,z:-.716567},{x:.850651,y:0,z:-.525731},{x:.809017,y:-.309017,z:-.5},{x:.864188,y:-.442863,z:-.238856},{x:.951056,y:-.16246,z:-.262866},{x:.147621,y:.716567,z:-.681718},{x:.309017,y:.5,z:-.809017},{x:.425325,y:.688191,z:-.587785},{x:.442863,y:.238856,z:-.864188},{x:.587785,y:.425325,z:-.688191},{x:.688191,y:.587785,z:-.425325},{x:-.147621,y:.716567,z:-.681718},{x:-.309017,y:.5,z:-.809017},{x:0,y:.525731,z:-.850651},{x:-.525731,y:0,z:-.850651},{x:-.442863,y:.238856,z:-.864188},{x:-.295242,y:0,z:-.955423},{x:-.16246,y:.262866,z:-.951056},{x:0,y:0,z:-1},{x:.295242,y:0,z:-.955423},{x:.16246,y:.262866,z:-.951056},{x:-.442863,y:-.238856,z:-.864188},{x:-.309017,y:-.5,z:-.809017},{x:-.16246,y:-.262866,z:-.951056},{x:0,y:-.850651,z:-.525731},{x:-.147621,y:-.716567,z:-.681718},{x:.147621,y:-.716567,z:-.681718},{x:0,y:-.525731,z:-.850651},{x:.309017,y:-.5,z:-.809017},{x:.442863,y:-.238856,z:-.864188},{x:.16246,y:-.262866,z:-.951056},{x:.238856,y:-.864188,z:-.442863},{x:.5,y:-.809017,z:-.309017},{x:.425325,y:-.688191,z:-.587785},{x:.716567,y:-.681718,z:-.147621},{x:.688191,y:-.587785,z:-.425325},{x:.587785,y:-.425325,z:-.688191},{x:0,y:-.955423,z:-.295242},{x:0,y:-1,z:0},{x:.262866,y:-.951056,z:-.16246},{x:0,y:-.850651,z:.525731},{x:0,y:-.955423,z:.295242},{x:.238856,y:-.864188,z:.442863},{x:.262866,y:-.951056,z:.16246},{x:.5,y:-.809017,z:.309017},{x:.716567,y:-.681718,z:.147621},{x:.525731,y:-.850651,z:0},{x:-.238856,y:-.864188,z:-.442863},{x:-.5,y:-.809017,z:-.309017},{x:-.262866,y:-.951056,z:-.16246},{x:-.850651,y:-.525731,z:0},{x:-.716567,y:-.681718,z:-.147621},{x:-.716567,y:-.681718,z:.147621},{x:-.525731,y:-.850651,z:0},{x:-.5,y:-.809017,z:.309017},{x:-.238856,y:-.864188,z:.442863},{x:-.262866,y:-.951056,z:.16246},{x:-.864188,y:-.442863,z:.238856},{x:-.809017,y:-.309017,z:.5},{x:-.688191,y:-.587785,z:.425325},{x:-.681718,y:-.147621,z:.716567},{x:-.442863,y:-.238856,z:.864188},{x:-.587785,y:-.425325,z:.688191},{x:-.309017,y:-.5,z:.809017},{x:-.147621,y:-.716567,z:.681718},{x:-.425325,y:-.688191,z:.587785},{x:-.16246,y:-.262866,z:.951056},{x:.442863,y:-.238856,z:.864188},{x:.16246,y:-.262866,z:.951056},{x:.309017,y:-.5,z:.809017},{x:.147621,y:-.716567,z:.681718},{x:0,y:-.525731,z:.850651},{x:.425325,y:-.688191,z:.587785},{x:.587785,y:-.425325,z:.688191},{x:.688191,y:-.587785,z:.425325},{x:-.955423,y:.295242,z:0},{x:-.951056,y:.16246,z:.262866},{x:-1,y:0,z:0},{x:-.850651,y:0,z:.525731},{x:-.955423,y:-.295242,z:0},{x:-.951056,y:-.16246,z:.262866},{x:-.864188,y:.442863,z:-.238856},{x:-.951056,y:.16246,z:-.262866},{x:-.809017,y:.309017,z:-.5},{x:-.864188,y:-.442863,z:-.238856},{x:-.951056,y:-.16246,z:-.262866},{x:-.809017,y:-.309017,z:-.5},{x:-.681718,y:.147621,z:-.716567},{x:-.681718,y:-.147621,z:-.716567},{x:-.850651,y:0,z:-.525731},{x:-.688191,y:.587785,z:-.425325},{x:-.587785,y:.425325,z:-.688191},{x:-.425325,y:.688191,z:-.587785},{x:-.425325,y:-.688191,z:-.587785},{x:-.587785,y:-.425325,z:-.688191},{x:-.688191,y:-.587785,z:-.425325}],se=class extends Error{},tr=class{constructor(e){this.vfs=e}async load(e){let r=await this.vfs.readFile(e),n=new Uint8Array(r.byteLength);return n.set(r),Si(n.buffer)}};function Ys(t,e,r){let n=[];for(let o=0;o<r;o+=1){let i=t.getUint8(e+o);if(i===0)break;n.push(i)}return String.fromCharCode(...n)}function kr(t,e,r,n){if(r!==0&&(e<qs||e+r>t.byteLength))throw new se(`${n} section is out of bounds`)}function cl(t){if(t.byteLength<qs)throw new se("MD2 buffer too small to contain header");let e=new DataView(t),r=e.getInt32(0,!0),n=e.getInt32(4,!0);if(r!==il)throw new se(`Invalid MD2 ident: ${r}`);if(n!==sl)throw new se(`Unsupported MD2 version: ${n}`);let o={ident:r,version:n,skinWidth:e.getInt32(8,!0),skinHeight:e.getInt32(12,!0),frameSize:e.getInt32(16,!0),numSkins:e.getInt32(20,!0),numVertices:e.getInt32(24,!0),numTexCoords:e.getInt32(28,!0),numTriangles:e.getInt32(32,!0),numGlCommands:e.getInt32(36,!0),numFrames:e.getInt32(40,!0),offsetSkins:e.getInt32(44,!0),offsetTexCoords:e.getInt32(48,!0),offsetTriangles:e.getInt32(52,!0),offsetFrames:e.getInt32(56,!0),offsetGlCommands:e.getInt32(60,!0),offsetEnd:e.getInt32(64,!0)},i=40+o.numVertices*4;if(o.frameSize!==i)throw new se(`Unexpected frame size ${o.frameSize}, expected ${i}`);if(o.offsetEnd>t.byteLength)throw new se("MD2 offset_end exceeds buffer length");return o}function ll(t,e){let r=e.numSkins*64;kr(t,e.offsetSkins,r,"skins");let n=new DataView(t,e.offsetSkins,r),o=[];for(let i=0;i<e.numSkins;i+=1)o.push({name:Ys(n,i*64,64)});return o}function dl(t,e){let r=e.numTexCoords*4;kr(t,e.offsetTexCoords,r,"texcoords");let n=new DataView(t,e.offsetTexCoords,r),o=[];for(let i=0;i<e.numTexCoords;i+=1){let s=i*4;o.push({s:n.getInt16(s,!0),t:n.getInt16(s+2,!0)})}return o}function ul(t,e){let r=e.numTriangles*12;kr(t,e.offsetTriangles,r,"triangles");let n=new DataView(t,e.offsetTriangles,r),o=[];for(let i=0;i<e.numTriangles;i+=1){let s=i*12,a=[n.getUint16(s,!0),n.getUint16(s+2,!0),n.getUint16(s+4,!0)],c=[n.getUint16(s+6,!0),n.getUint16(s+8,!0),n.getUint16(s+10,!0)];if(a.some(l=>l>=e.numVertices)||c.some(l=>l>=e.numTexCoords))throw new se("Triangle references out of range vertex or texcoord");o.push({vertexIndices:a,texCoordIndices:c})}return o}function ml(t,e){let r=e.numFrames*e.frameSize;kr(t,e.offsetFrames,r,"frames");let n=[];for(let o=0;o<e.numFrames;o+=1){let i=e.offsetFrames+o*e.frameSize,s=new DataView(t,i,e.frameSize),a={x:s.getFloat32(0,!0),y:s.getFloat32(4,!0),z:s.getFloat32(8,!0)},c={x:s.getFloat32(12,!0),y:s.getFloat32(16,!0),z:s.getFloat32(20,!0)},l=Ys(s,24,16),d=[];for(let u=0;u<e.numVertices;u+=1){let m=40+u*4,f={x:s.getUint8(m)*a.x+c.x,y:s.getUint8(m+1)*a.y+c.y,z:s.getUint8(m+2)*a.z+c.z},h=s.getUint8(m+3),y=al[h];if(!y)throw new se(`Invalid normal index ${h} in frame ${l}`);d.push({position:f,normalIndex:h,normal:y})}n.push({name:l,vertices:d})}return n}function fl(t,e){let r=e.numGlCommands*4;if(kr(t,e.offsetGlCommands,r,"gl commands"),r===0)return[];let n=new DataView(t,e.offsetGlCommands,r),o=[],i=0;for(;;){if(i+4>r)throw new se("GL command list ended unexpectedly");let s=n.getInt32(i,!0);if(i+=4,s===0)break;let a=Math.abs(s),c=[],l=a*12;if(i+l>r)throw new se("GL command vertex block exceeds buffer");for(let d=0;d<a;d+=1){let u=n.getFloat32(i,!0),m=n.getFloat32(i+4,!0),f=n.getInt32(i+8,!0);if(i+=12,f<0||f>=e.numVertices)throw new se("GL command references invalid vertex index");c.push({s:u,t:m,vertexIndex:f})}o.push({mode:s>0?"strip":"fan",vertices:c})}if(i!==r)throw new se("GL command list did not consume expected data");return o}function Si(t){let e=cl(t),r=ll(t,e),n=dl(t,e),o=ul(t,e),i=ml(t,e),s=fl(t,e);return{header:e,skins:r,texCoords:n,triangles:o,frames:i,glCommands:s}}function Ks(t){let e=[],r=0;for(;r<t.length;){let n=t[r].name,o=n.replace(/\d+$/,"")||n,i=r;for(;i+1<t.length&&(t[i+1].name.replace(/\d+$/,"")||t[i+1].name)===o;)i+=1;e.push({name:o,firstFrame:r,lastFrame:i}),r=i+1}return e}var js=860898377,pl=15,Ce=class extends Error{constructor(e){super(e),this.name="Md3ParseError"}};function Dr(t,e,r){let n=new Uint8Array(t.buffer,t.byteOffset+e,r);return new TextDecoder("utf-8").decode(n).replace(/\0.*$/,"").trim()}function hl(t){let e=(t>>8&255)*(2*Math.PI/255),r=(t&255)*(2*Math.PI/255),n=Math.sin(r);return{x:Math.cos(e)*n,y:Math.sin(e)*n,z:Math.cos(r)}}function Jn(t,e,r,n){if(e<0||e+r>n)throw new Ce(`${t} exceeds buffer bounds`)}function yl(t){let e=t.getInt32(0,!0);if(e!==js)throw new Ce(`Invalid MD3 ident: ${e}`);let r=t.getInt32(4,!0);if(r!==pl)throw new Ce(`Unsupported MD3 version: ${r}`);let n=Dr(t,8,64),o=t.getInt32(72,!0),i=t.getInt32(76,!0),s=t.getInt32(80,!0),a=t.getInt32(84,!0),c=t.getInt32(88,!0),l=t.getInt32(92,!0),d=t.getInt32(96,!0),u=t.getInt32(100,!0),m=t.getInt32(104,!0);if(i<=0||a<0||s<0)throw new Ce("Invalid MD3 counts");return{ident:e,version:r,name:n,flags:o,numFrames:i,numTags:s,numSurfaces:a,numSkins:c,ofsFrames:l,ofsTags:d,ofsSurfaces:u,ofsEnd:m}}function xl(t,e){let r=[];Jn("Frames",e.ofsFrames,e.numFrames*56,t.byteLength);for(let o=0;o<e.numFrames;o+=1){let i=e.ofsFrames+o*56;r.push({minBounds:{x:t.getFloat32(i,!0),y:t.getFloat32(i+4,!0),z:t.getFloat32(i+8,!0)},maxBounds:{x:t.getFloat32(i+12,!0),y:t.getFloat32(i+16,!0),z:t.getFloat32(i+20,!0)},localOrigin:{x:t.getFloat32(i+24,!0),y:t.getFloat32(i+28,!0),z:t.getFloat32(i+32,!0)},radius:t.getFloat32(i+36,!0),name:Dr(t,i+40,16)})}return r}function gl(t,e){let r=[],o=e.numFrames*e.numTags*112;Jn("Tags",e.ofsTags,o,t.byteLength);for(let i=0;i<e.numFrames;i+=1){let s=[];for(let a=0;a<e.numTags;a+=1){let c=e.ofsTags+(i*e.numTags+a)*112,l=c+64,d=l+12;s.push({name:Dr(t,c,64),origin:{x:t.getFloat32(l,!0),y:t.getFloat32(l+4,!0),z:t.getFloat32(l+8,!0)},axis:[{x:t.getFloat32(d,!0),y:t.getFloat32(d+4,!0),z:t.getFloat32(d+8,!0)},{x:t.getFloat32(d+12,!0),y:t.getFloat32(d+16,!0),z:t.getFloat32(d+20,!0)},{x:t.getFloat32(d+24,!0),y:t.getFloat32(d+28,!0),z:t.getFloat32(d+32,!0)}]})}r.push(s)}return r}function vl(t,e){let r=t.getInt32(e,!0);if(r!==js)throw new Ce(`Invalid surface ident at ${e}: ${r}`);let n=Dr(t,e+4,64),o=t.getInt32(e+68,!0),i=t.getInt32(e+72,!0),s=t.getInt32(e+76,!0),a=t.getInt32(e+80,!0),c=t.getInt32(e+84,!0),l=t.getInt32(e+88,!0),d=t.getInt32(e+92,!0),u=t.getInt32(e+96,!0),m=t.getInt32(e+100,!0),f=t.getInt32(e+104,!0);if(i<=0||a<=0||c<=0)throw new Ce(`Invalid surface counts for ${n}`);let h=f;Jn(`Surface ${n}`,e,h,t.byteLength);let y=[],p=e+l;for(let w=0;w<c;w+=1){let L=p+w*12;y.push({indices:[t.getInt32(L,!0),t.getInt32(L+4,!0),t.getInt32(L+8,!0)]})}let x=[],M=e+d;for(let w=0;w<s;w+=1){let L=M+w*68;x.push({name:Dr(t,L,64),shaderIndex:t.getInt32(L+64,!0)})}let v=[],S=e+u;for(let w=0;w<a;w+=1){let L=S+w*8;v.push({s:t.getFloat32(L,!0),t:t.getFloat32(L+4,!0)})}let b=[],_=e+m;for(let w=0;w<i;w+=1){let L=[];for(let P=0;P<a;P+=1){let A=_+(w*a+P)*8,N=t.getInt16(A,!0)/64,U=t.getInt16(A+2,!0)/64,V=t.getInt16(A+4,!0)/64,F=t.getUint16(A+6,!0);L.push({position:{x:N,y:U,z:V},latLng:F,normal:hl(F)})}b.push(L)}return{surface:{name:n,flags:o,numFrames:i,shaders:x,triangles:y,texCoords:v,vertices:b},nextOffset:e+f}}function Mi(t){if(t.byteLength<108)throw new Ce("MD3 buffer too small for header");let e=new DataView(t),r=yl(e);Jn("MD3 end",r.ofsEnd,0,t.byteLength);let n=xl(e,r),o=gl(e,r),i=[],s=r.ofsSurfaces;for(let a=0;a<r.numSurfaces;a+=1){let{surface:c,nextOffset:l}=vl(e,s);i.push(c),s=l}if(s!==r.ofsEnd)throw new Ce("Surface parsing did not reach ofsEnd");return{header:r,frames:n,tags:o,surfaces:i}}var rr=class{constructor(e){this.vfs=e}async load(e){let r=await this.vfs.readFile(e);return Mi(r.slice().buffer)}};var bl=1229214514,Sl=2,$s=64,Qs=12,mt=class extends Error{};function Ml(t,e,r){let n=[];for(let o=0;o<r;o+=1){let i=t.getUint8(e+o);if(i===0)break;n.push(i)}return String.fromCharCode(...n)}function _i(t){if(t.byteLength<Qs)throw new mt("Sprite buffer too small to contain header");let e=new DataView(t),r=e.getInt32(0,!0),n=e.getInt32(4,!0),o=e.getInt32(8,!0);if(r!==bl)throw new mt(`Invalid Sprite ident: ${r}`);if(n!==Sl)throw new mt(`Unsupported Sprite version: ${n}`);let i=[],s=16+$s,a=Qs;for(let c=0;c<o;c+=1){if(a+s>t.byteLength)throw new mt("Sprite frame data exceeds buffer length");let l=e.getInt32(a,!0),d=e.getInt32(a+4,!0),u=e.getInt32(a+8,!0),m=e.getInt32(a+12,!0),f=Ml(e,a+16,$s);i.push({width:l,height:d,originX:u,originY:m,name:f}),a+=s}return{ident:r,version:n,numFrames:o,frames:i}}var nr=class{constructor(e){this.vfs=e}async load(e){let r=await this.vfs.readFile(e),n=new Uint8Array(r.byteLength);return n.set(r),_i(n.buffer)}};function Js(t,e){let r=(t.sequence.end-t.sequence.start+1)/t.sequence.fps,n=t.sequence.loop!==!1,o=t.time+e;return n?o=(o%r+r)%r:o>r&&(o=r),{...t,time:Math.max(0,Math.min(o,r))}}function Zs(t){let e=t.sequence.end-t.sequence.start+1,r=1/t.sequence.fps,n=t.sequence.loop!==!1,o=t.time/r;if(!n&&o>=e)return{frame:t.sequence.end,nextFrame:t.sequence.end,lerp:0};let i=n?o%e:Math.min(o,e-1),s=Math.floor(i),a=t.sequence.start+s,c=s+1>=e?n?t.sequence.start:t.sequence.end:a+1,l=!n&&s>=e-1?0:i-s;return{frame:a,nextFrame:c,lerp:l}}function ea(t){return{sequence:t,time:0}}function ta(t,e,r){return{x:t.x+(e.x-t.x)*r,y:t.y+(e.y-t.y)*r,z:t.z+(e.z-t.z)*r}}var Hr=class extends Error{constructor(e){super(e),this.name="WalParseError"}};function Zn(t){if(t.byteLength<100)throw new Hr("WAL buffer too small");let e=new DataView(t),r=new Uint8Array(t,0,32),n=new TextDecoder("utf-8").decode(r).replace(/\0.*$/,"").trim(),o=e.getInt32(32,!0),i=e.getInt32(36,!0),s=[e.getInt32(40,!0),e.getInt32(44,!0),e.getInt32(48,!0),e.getInt32(52,!0)],a=new Uint8Array(t,56,32),c=new TextDecoder("utf-8").decode(a).replace(/\0.*$/,"").trim(),l=e.getInt32(88,!0),d=e.getInt32(92,!0),u=e.getInt32(96,!0);if(o<=0||i<=0)throw new Hr("Invalid WAL dimensions");let m=[],f=o,h=i;for(let y=0;y<s.length;y+=1){let p=s[y],x=Math.max(1,f*h|0);if(p<=0||p+x>t.byteLength)throw new Hr(`Invalid WAL mip offset for level ${y}`);let M=new Uint8Array(t,p,x);m.push({level:y,width:f,height:h,data:M}),f=Math.max(1,f>>1),h=Math.max(1,h>>1)}return{name:n,width:o,height:i,mipmaps:m,animName:c,flags:l,contents:d,value:u}}var It=class extends Error{constructor(e){super(e),this.name="PcxParseError"}};function ra(t){if(t.byteLength<128)throw new It("PCX buffer too small for header");let e=new DataView(t),r=e.getUint8(0),n=e.getUint8(2),o=e.getUint8(3),i=e.getUint16(4,!0),s=e.getUint16(6,!0),a=e.getUint16(8,!0),c=e.getUint16(10,!0);if(r!==10||n!==1)throw new It("Unsupported PCX encoding");if(o!==8)throw new It("Only 8bpp PCX files are supported");let l=a-i+1,d=c-s+1,u=e.getUint16(66,!0),m=t.byteLength-769;if(m<128||new DataView(t,m,1).getUint8(0)!==12)throw new It("Missing PCX palette");let f=new Uint8Array(t,m+1,768),h=new Uint8Array(t,128,m-128),y=new Uint8Array(l*d),p=0,x=0;for(let M=0;M<d;M+=1){let v=0;for(;v<u&&p<h.length;){let S=1,b=h[p++];if((b&192)===192){if(S=b&63,p>=h.length)throw new It("Unexpected end of PCX RLE data");b=h[p++]}for(let _=0;_<S&&v<u;_+=1)v<l&&(y[x++]=b),v+=1}}return{width:l,height:d,bitsPerPixel:o,pixels:y,palette:f}}function eo(t){let e=new Uint8Array(t.width*t.height*4);for(let r=0;r<t.pixels.length;r+=1){let n=t.pixels[r],o=n*3,i=r*4;e[i]=t.palette[o],e[i+1]=t.palette[o+1],e[i+2]=t.palette[o+2],e[i+3]=n===255?0:255}return e}var or=class{constructor(e={}){this.cache=new ut(e.capacity??128)}get size(){return this.cache.size}get(e){return this.cache.get(e.toLowerCase())}set(e,r){this.cache.set(e.toLowerCase(),r)}clear(){this.cache.clear()}};function Ai(t,e){let r=[];for(let n of t.mipmaps){let o=new Uint8Array(n.width*n.height*4);for(let i=0;i<n.data.length;i+=1){let s=n.data[i],a=s*3,c=i*4;o[c]=e[a],o[c+1]=e[a+1],o[c+2]=e[a+2],o[c+3]=s===255?0:255}r.push({level:n.level,width:n.width,height:n.height,rgba:o})}return{width:t.width,height:t.height,levels:r,source:"wal"}}function na(t){let e=eo(t),r={level:0,width:t.width,height:t.height,rgba:e};return{width:t.width,height:t.height,levels:[r],source:"pcx"}}function oa(t,e){return Ai(Zn(t),e)}var Rt=class extends Error{constructor(e){super(e),this.name="WavParseError"}};function wi(t,e,r){return new TextDecoder("ascii").decode(new Uint8Array(t.buffer,t.byteOffset+e,r))}function to(t){if(t.byteLength<44)throw new Rt("WAV buffer too small");let e=new DataView(t);if(wi(e,0,4)!=="RIFF"||wi(e,8,4)!=="WAVE")throw new Rt("Invalid WAV header");let r=12,n=-1,o=-1,i=0,s=0;for(;r+8<=t.byteLength;){let h=wi(e,r,4),y=e.getUint32(r+4,!0),p=r+8;h==="fmt "?(n=p,i=y):h==="data"&&(o=p,s=y),r=p+y}if(n===-1||o===-1)throw new Rt("Missing fmt or data chunk");let a=e.getUint16(n,!0),c=e.getUint16(n+2,!0),l=e.getUint32(n+4,!0),d=e.getUint16(n+14,!0);if(a!==1)throw new Rt("Only PCM WAV is supported");let u=d/8,m=s/(u*c),f=new Float32Array(m*c);for(let h=0;h<m;h+=1)for(let y=0;y<c;y+=1){let p=h*c+y,x=o+p*u,M=0;if(d===8)M=e.getUint8(x),f[p]=(M-128)/128;else if(d===16)M=e.getInt16(x,!0),f[p]=M/32768;else if(d===24){let v=e.getUint8(x),S=e.getUint8(x+1),b=e.getInt8(x+2);M=v|S<<8|b<<16,f[p]=M/8388608}else throw new Rt(`Unsupported bitsPerSample: ${d}`)}return{sampleRate:l,channels:c,bitsPerSample:d,samples:f}}var _l=(t,e=4294967295,r=79764919)=>{let n=new Int32Array(256),o,i,s,a=e;for(o=0;o<256;o++){for(s=o<<24,i=8;i>0;--i)s=2147483648&s?s<<1^r:s<<1;n[o]=s}for(o=0;o<t.length;o++)a=a<<8^n[255&(a>>24^t[o])];return a};var Li=(t,e=_l)=>{let r=p=>new Uint8Array(p.length/2).map(((x,M)=>parseInt(p.substring(2*M,2*(M+1)),16))),n=p=>r(p)[0],o=new Map;[,8364,,8218,402,8222,8230,8224,8225,710,8240,352,8249,338,,381,,,8216,8217,8220,8221,8226,8211,8212,732,8482,353,8250,339,,382,376].forEach(((p,x)=>o.set(p,x)));let i=new Uint8Array(t.length),s,a,c,l=!1,d=0,u=42,m=t.length>13&&t.substring(0,9)==="dynEncode",f=0;m&&(f=11,a=n(t.substring(9,f)),a<=1&&(f+=2,u=n(t.substring(11,f))),a===1&&(f+=8,c=(p=>new DataView(r(p).buffer).getInt32(0,!0))(t.substring(13,f))));let h=256-u;for(let p=f;p<t.length;p++)if(s=t.charCodeAt(p),s!==61||l){if(s===92&&p<t.length-5&&m){let x=t.charCodeAt(p+1);x!==117&&x!==85||(s=parseInt(t.substring(p+2,p+6),16),p+=5)}if(s>255){let x=o.get(s);x&&(s=x+127)}l&&(l=!1,s-=64),i[d++]=s<u&&s>0?s+h:s-u}else l=!0;let y=i.subarray(0,d);if(m&&a===1){let p=e(y);if(p!==c){let x="Decode failed crc32 validation";throw console.error("`simple-yenc`\n",x+`
2
2
  `,"Expected: "+c+"; Got: "+p+`
3
- `,"Visit https://github.com/eshaz/simple-yenc for more information"),Error(x)}}return y};function $(){let t=Uint8Array,e=Float32Array;$.modules||Object.defineProperties($,{modules:{value:new WeakMap},setModule:{value(r,n){$.modules.set(r,Promise.resolve(n))}},getModule:{value(r,n){let o=$.modules.get(r);return o||(n?o=WebAssembly.compile(_i(n)):(n=r.wasm,o=$.inflateDynEncodeString(n).then(i=>WebAssembly.compile(i))),$.modules.set(r,o)),o}},concatFloat32:{value(r,n){let o=new e(n),i=0,s=0;for(;i<r.length;)o.set(r[i],s),s+=r[i++].length;return o}},getDecodedAudio:{value:(r,n,o,i,s)=>({errors:r,channelData:n,samplesDecoded:o,sampleRate:i,bitDepth:s})},getDecodedAudioMultiChannel:{value(r,n,o,i,s,a){let c=[],l,d;for(l=0;l<o;l++){let u=[];for(d=0;d<n.length;)u.push(n[d++][l]||[]);c.push($.concatFloat32(u,i))}return $.getDecodedAudio(r,c,i,s,a)}},inflateDynEncodeString:{value(r){return r=_i(r),new Promise(n=>{let o=String.raw`dynEncode012804c7886d(‰›•)((()>+ˆ*§§)§ˆ,§§§§)§ˆ+§§§)§+.-()(*)-+)(ˆ.7*§)i¸¸,3§(i¸¸,3/G+.••—š¡*(,˜ŽŽ(,3‡‡‰˜‡Š‰›+)2å:-œ),§H(P*DI*H(P*@I++hH)H*r,hH(H(P*<J,i)’^*<H,H(P*4’U((I-H(H*i0’J,^*DH+H-H*œšI+H,I*4)33H(H*H)“^*DH(H+H)^*@H+i§H)œi§›™3æ*).§K(iH“I/+§H,iHn,§H+i(H+i(rCJ0I,H*I-+hH,,hH(H-V)(i)œ’J.H.W)(i)’c)(H,i)“I,H-i*’I-4)33i(I.*hH(V)(H+n5(H(i*’I-i(I,i)I.+hH,i*’J+iHn,hi(I-i*I,+hH,H/’H-c)(H,iFn,hi(I,+hH,H0n5-H*V)(J(,hH/H(i)œ’J(H(V)(J(i)’c)(H)H(i)œ’H,c)(3H*i*’I*H,i)’I,4(3(-H(H,’W)(H-’I-H,i*’I,4)3(3(3H,H-’I1H+I,H.i)œH1V)(“J.i(v5(33H.-H(H,’i(c)(H,i*’I,4)333–)-§i*I*+§H*iHn,hiž73H,H(i)8(H+šJ+H)P*(H*’V)(J-“r,§H)P*,H.i)œ’H+H,“i)œ’V)(-H*i*’I*H+i)œI+H-H.’I.H,H-’i)œI,4)333Ã+)-§iø7i(^*(iü7I,*h+hH+iDn,h*hilI+i)I,+hH+,hH+iô7’H,c)(i)H+i´8’W)(œH,’I,H+i*’I+4)-+hH(H)8*J-i(p5.*h*h*hH-i')u,hH(P*(J+,hH(P*0J,H(P*,n50H+H,’H-b((3H(P*0i)’I.4)3H-i¨*n5*H-iÅ*s,hiž73H-i)œJ+V)&+I,H(H+V)æ,8(I.H(H*8*J-i(p51H-i)œJ+i¸7’V)(H(H+iø7’V)(8(’J/H(P*0J+s,hi73H+H,H.’J,’I.H(P*(m5(H.H(P*,s5.+hH,m5*H(P*(J.H+’H.H+H/“’U((b((H(H(P*0i)’J+^*0H,i)“I,4(3(3H(H.^*03H-i¨*o5)33i(73(3(3-H,H+i)žc)(H,i*’I,H+i)’I+4)33i)I-3H-3!2)0§K(i2“J,L(H,H(^*(H,H*^*4H,i(^*0H,i(^*DH,j(_*<H,H)P*(^*,H,H+P*(^*8*h*h+hH,i)8(I3i§I**h*h*h*h*h*h*hH,i*8(6+(),03H,j(_*@i*I-H,P*<J.i,’J(H,P*8J/s50H,H.i+’J0^*<i¦I*H.H,P*4J1’J.U(*H.U((J2›i')o5/H.U()I.H,H(^*<H0H1’U((H.i0œJ.i§›i0ži')™o5/H/H.H2šJ*H(’J.q50H,P*0J/H*’I-H,P*(J0,hH,P*,H-q,hi)I-423+hH*m5+H/H0’H(H1’U((b((H/i)’I/H(i)’I(H*i)“I*4(3(3H,H.^*<H,H-^*04*3iØ1U((5+i(I(i¨7i1^*(i$6iè1^*(i°7iè6^*(i¬7iÈ6^*(+hH(iÈ*n,hiÈ*I(+hH(i¨,n,hi¨,I(+hH(iØ,n,hiØ,I(+hH(iè,o,hH,i-’H(’i0c)(H(i*’I(4)33iè1i1H,i-’iÈ*8)Bi(I(+hH(ido,hH,i-’H(’i-c)(H(i*’I(4)33iÈ6iè6H,i-’iF8)BiØ1i)b((41-H,i-’H(’i/c)(H(i*’I(4)3(3(-H,i-’H(’i1c)(H(i*’I(4)3(3(-H,i-’H(’i0c)(H(i*’I(4)3(3(3H,H/^*0H,H(^*<3i(I*4*3H,H,i¸)’^*TH,H,iø-’^*PH,H,iX’^*LH,H,i(’^*HH,i-8(I(H,i-8(I-i¥I*H,i,8(I.H(iErH-iErš5)H(i©*’I1H-i)’I0i(i;H.i,’J(i(H(i(rCJ(“J*H*i;sCI*i¨1I-H(I/+hH/,hH,i-’H-V)(i)œ’H,i+8(c)(H/i)“I/H-i*’I-H*i)’I*4)-H(i)œi¨1’I/+hH(H*o,hH,i-’H/V)(i)œ’i(c)(H/i*’I/H(i)’I(4)33i¤I*H,iø-’H,i¸)’H,i-’i;8)5+H0H1’I2i(I-+hH-H2p,hH,H,iP’8*J*i(p5-H*i7u,hH,i-’H-i)œ’H*c)(H-i)’I-4*3i(I/i+I.i+I(*h*h*hH*i8“6*(*)3H-m,hi£I*403H-i)œH,’W)-I/i*I(4)3i3I.i/I(3H2H,H(8(H.’J(H-’J.p,hi¢I*4.3H,i-’H-i)œ’I*+hH(,hH*H/c)(H*i*’I*H(i)“I(4)-H.I-4+3(3(33H,W)1m,hiŸI*4,3H,iø-’H,i¸)’H,i-’H18)J(,hi¡I*H(i(p5,H1H,V)ú-H,V)ø-’o5,3H,i(’H,iX’H,i-’H1i)œ’H08)J(,hi I*H(i(p5,H0H,V)šH,V)˜’o5,3H,H,iP’H,iH’8+I*4+3(3(3H,i$6i¬78+I*3H*H3šm5(3i)I-H*i(r5)3H)H,P*0^*(H+H,P*<^*(H*I-3H,i2’L(H-33Á)+(i¨03b+(,(-(.(/(0(1(2(3(5(7(9(;(?(C(G(K(S([(c(k({(‹(›(«(Ë(ë( (*)(iø03O)()()()(*(*(*(*(+(+(+(+(,(,(,(,(-(-(-(-(i¨13M8(9(:(((0(/(1(.(2(-(3(,(4(+(5(*(6()(7(T7œ‰šœ‡Ž‰œš›*S7•œ‰Š”U”—Љ”›S0›‘–U œ`;$.getModule($,o).then(i=>WebAssembly.instantiate(i,{})).then(({exports:i})=>{let s=new Map(Object.entries(i)),a=s.get("puff"),c=s.get("memory").buffer,l=new t(c),d=new DataView(c),u=s.get("__heap_base"),m=r.length,f=u;u+=4,d.setInt32(f,m,!0);let h=u;u+=m,l.set(r,h);let y=u;u+=4,d.setInt32(y,l.byteLength-u,!0),a(u,y,h,f),n(l.slice(u,u+d.getInt32(y,!0)))})})}}}),Object.defineProperty(this,"wasm",{enumerable:!0,get:()=>this._wasm}),this.getOutputChannels=(r,n,o)=>{let i=[],s=0;for(;s<n;)i.push(r.slice(s*o,s++*o+o));return i},this.allocateTypedArray=(r,n,o=!0)=>{let i=this._wasm.malloc(n.BYTES_PER_ELEMENT*r);return o&&this._pointers.add(i),{ptr:i,len:r,buf:new n(this._wasm.HEAP,i,r)}},this.free=()=>{this._pointers.forEach(r=>{this._wasm.free(r)}),this._pointers.clear()},this.codeToString=r=>{let n=[],o=new Uint8Array(this._wasm.HEAP);for(let i=o[r];i!==0;i=o[++r])n.push(i);return String.fromCharCode.apply(null,n)},this.addError=(r,n,o,i,s,a)=>{r.push({message:n,frameLength:o,frameNumber:i,inputBytes:s,outputSamples:a})},this.instantiate=(r,n)=>(n&&$.setModule(r,n),this._wasm=new r($).instantiate(),this._pointers=new Set,this._wasm.ready.then(()=>this))}var ra=Ec(ta(),1);var yl=()=>globalThis.Worker||ra.default,nr=class extends yl(){constructor(e,r,n,o){$.modules||new $;let i=$.modules.get(n);if(!i){let s="text/javascript",a,c=`'use strict';(${((l,d,u)=>{let m,f,h=new Promise(y=>{f=y});self.onmessage=({data:{id:y,command:p,data:x}})=>{let M=h,v={id:y},S;p==="init"?(Object.defineProperties(l,{WASMAudioDecoderCommon:{value:d},EmscriptenWASM:{value:u},module:{value:x.module},isWebWorker:{value:!0}}),m=new l(x.options),f()):p==="free"?m.free():p==="ready"?M=M.then(()=>m.ready):p==="reset"?M=M.then(()=>m.reset()):(Object.assign(v,m[p](Array.isArray(x)?x.map(b=>new Uint8Array(b)):new Uint8Array(x))),S=v.channelData?v.channelData.map(b=>b.buffer):[]),M.then(()=>self.postMessage(v,S))}}).toString()})(${n}, ${$}, ${o})`;try{a=typeof process.versions.node<"u"}catch{}i=a?`data:${s};base64,${Buffer.from(c).toString("base64")}`:URL.createObjectURL(new Blob([c],{type:s})),$.modules.set(n,i)}super(i,{name:r}),this._id=Number.MIN_SAFE_INTEGER,this._enqueuedOperations=new Map,this.onmessage=({data:s})=>{let{id:a,...c}=s;this._enqueuedOperations.get(a)(c),this._enqueuedOperations.delete(a)},new o($).getModule().then(s=>{this.postToDecoder("init",{module:s,options:e})})}async postToDecoder(e,r){return new Promise(n=>{this.postMessage({command:e,id:this._id,data:r}),this._enqueuedOperations.set(this._id++,n)})}get ready(){return this.postToDecoder("ready")}async free(){await this.postToDecoder("free").finally(()=>{this.terminate()})}async reset(){await this.postToDecoder("reset")}};var eo=(t,e)=>{Object.defineProperty(t,"name",{value:e})};var Q=Symbol,na=", ",T=(()=>{let t="front",e="side",r="rear",n="left",o="center",i="right";return["",t+" ",e+" ",r+" "].map(s=>[[n,i],[n,i,o],[n,o,i],[o,n,i],[o]].flatMap(a=>a.map(c=>s+c).join(na)))})(),We="LFE",mt="monophonic (mono)",ft="stereo",Dr="surround",J=(t,...e)=>`${[mt,ft,`linear ${Dr}`,"quadraphonic",`5.0 ${Dr}`,`5.1 ${Dr}`,`6.1 ${Dr}`,`7.1 ${Dr}`][t-1]} (${e.join(na)})`,Hr=[mt,J(2,T[0][0]),J(3,T[0][2]),J(4,T[1][0],T[3][0]),J(5,T[1][2],T[3][0]),J(6,T[1][2],T[3][0],We),J(7,T[1][2],T[2][0],T[3][4],We),J(8,T[1][2],T[2][0],T[3][0],We)],oa=192e3,ia=176400,to=96e3,ro=88200,sa=64e3,pt=48e3,or=44100,ir=32e3,sr=24e3,ar=22050,cr=16e3,no=12e3,oo=11025,lr=8e3,aa=7350,Ne="absoluteGranulePosition",k="bandwidth",le="bitDepth",de="bitrate",Or=de+"Maximum",Nr=de+"Minimum",Br=de+"Nominal",Xe="buffer",Vr=Xe+"Fullness",j="codec",ue=j+"Frames",Ur="coupledStreamCount",dr="crc",Gr=dr+"16",Wr=dr+"32",q="data",C="description",qe="duration",ur="emphasis",Xr="hasOpusPadding",Me="header",ht="isContinuedPacket",qr="isCopyrighted",yt="isFirstPage",Yr="isHome",_e="isLastPage",Qe="isOriginal",Je="isPrivate",jr="isVbr",ve="layer",g="length",R="mode",Ze=R+"Extension",io="mpeg",et=io+"Version",Kr="numberAACFrames",$r="outputGain",Rt="preSkip",Qr="profile",so=Q(),tt="protection",Ai="rawData",Te="segments",D="subarray",xt="version",kt="vorbis",Jr=kt+"Comments",mr=kt+"Setup",ao="block",Zr=ao+"ingStrategy",co=Q(),rt=ao+"Size",gt=ao+"size0",vt=ao+"size1",en=Q(),lo="channel",nt=lo+"MappingFamily",tn=lo+"MappingTable",me=lo+"Mode",rn=Q(),E=lo+"s",ca="copyright",nn=ca+"Id",on=ca+"IdStart",ot="frame",it=ot+"Count",be=ot+"Length",uo="Number",st=ot+uo,Ye=ot+"Padding",I=ot+"Size",la="Rate",sn="inputSample"+la,wi="page",Dt=wi+"Checksum",fr=Q(),bt=wi+"SegmentTable",re=wi+"Sequence"+uo,Li="sample",an=Li+uo,H=Li+la,je=Q(),O=Li+"s",mo="stream",cn=mo+"Count",ln=mo+"Info",Ke=mo+"Serial"+uo,zi=mo+"StructureVersion",Ei="total",Ht=Ei+"BytesOut",Ot=Ei+"Duration",Nt=Ei+"Samples",B=Q(),Pe=Q(),dn=Q(),St=Q(),Be=Q(),fo=Q(),Ci=Q(),Mt=Q(),G=Q(),Fe=Q(),Ie=Q(),$e=Q(),_t=Q(),po=Q(),Ve=Q(),Ue=Q(),Re=Q(),ho=Q(),fe=Uint8Array,At=DataView,W="reserved",pe="bad",pr="free",un="none",yo="16bit CRC";var Ti=(t,e,r)=>{for(let n=0;n<t[g];n++){let o=e(n);for(let i=8;i>0;i--)o=r(o);t[n]=o}return t},gl=Ti(new fe(256),t=>t,t=>t&128?7^t<<1:t<<1),Z=[Ti(new Uint16Array(256),t=>t<<8,t=>t<<1^(t&32768?32773:0))],ee=[Ti(new Uint32Array(256),t=>t,t=>t>>>1^(t&1)*3988292384)];for(let t=0;t<15;t++){Z.push(new Uint16Array(256)),ee.push(new Uint32Array(256));for(let e=0;e<=255;e++)Z[t+1][e]=Z[0][Z[t][e]>>>8]^Z[t][e]<<8,ee[t+1][e]=ee[t][e]>>>8^ee[0][ee[t][e]&255]}var ua=t=>{let e=0,r=t[g];for(let n=0;n!==r;n++)e=gl[e^t[n]];return e},ma=t=>{let e=t[g],r=e-16,n=0,o=0;for(;o<=r;)n^=t[o++]<<8|t[o++],n=Z[15][n>>8]^Z[14][n&255]^Z[13][t[o++]]^Z[12][t[o++]]^Z[11][t[o++]]^Z[10][t[o++]]^Z[9][t[o++]]^Z[8][t[o++]]^Z[7][t[o++]]^Z[6][t[o++]]^Z[5][t[o++]]^Z[4][t[o++]]^Z[3][t[o++]]^Z[2][t[o++]]^Z[1][t[o++]]^Z[0][t[o++]];for(;o!==e;)n=(n&255)<<8^Z[0][n>>8^t[o++]];return n},fa=t=>{let e=t[g],r=e-16,n=0,o=0;for(;o<=r;)n=ee[15][(t[o++]^n)&255]^ee[14][(t[o++]^n>>>8)&255]^ee[13][(t[o++]^n>>>16)&255]^ee[12][t[o++]^n>>>24]^ee[11][t[o++]]^ee[10][t[o++]]^ee[9][t[o++]]^ee[8][t[o++]]^ee[7][t[o++]]^ee[6][t[o++]]^ee[5][t[o++]]^ee[4][t[o++]]^ee[3][t[o++]]^ee[2][t[o++]]^ee[1][t[o++]]^ee[0][t[o++]];for(;o!==e;)n=ee[0][(n^t[o++])&255]^n>>>8;return n^-1},fn=(...t)=>{let e=new fe(t.reduce((r,n)=>r+n[g],0));return t.reduce((r,n)=>(e.set(n,r),r+n[g]),0),e},Ae=t=>String.fromCharCode(...t),da=[0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15],mn=t=>da[t&15]<<4|da[t>>4],xo=class{constructor(e){this._data=e,this._pos=e[g]*8}set position(e){this._pos=e}get position(){return this._pos}read(e){let r=Math.floor(this._pos/8),n=this._pos%8;return this._pos-=e,(mn(this._data[r-1])<<8)+mn(this._data[r])>>7-n&255}},pa=(t,e)=>{try{return t.getBigInt64(e,!0)}catch{let r=t.getUint8(e+7)&128?-1:1,n=t.getUint32(e,!0),o=t.getUint32(e+4,!0);return r===-1&&(n=~n+1,o=~o+1),o>1048575&&console.warn("This platform does not support BigInt"),r*(n+o*2**32)}};var pn=class{constructor(e,r){this._onCodecHeader=e,this._onCodecUpdate=r,this[Ve]()}[Ue](){this._isEnabled=!0}[Ve](){this._headerCache=new Map,this._codecUpdateData=new WeakMap,this._codecHeaderSent=!1,this._codecShouldUpdate=!1,this._bitrate=null,this._isEnabled=!1}[po](e,r){if(this._onCodecUpdate){this._bitrate!==e&&(this._bitrate=e,this._codecShouldUpdate=!0);let n=this._codecUpdateData.get(this._headerCache.get(this._currentHeader));this._codecShouldUpdate&&n&&this._onCodecUpdate({bitrate:e,...n},r),this._codecShouldUpdate=!1}}[G](e){let r=this._headerCache.get(e);return r&&this._updateCurrentHeader(e),r}[Fe](e,r,n){this._isEnabled&&(this._codecHeaderSent||(this._onCodecHeader({...r}),this._codecHeaderSent=!0),this._updateCurrentHeader(e),this._headerCache.set(e,r),this._codecUpdateData.set(r,n))}_updateCurrentHeader(e){this._onCodecUpdate&&e!==this._currentHeader&&(this._codecShouldUpdate=!0,this._currentHeader=e)}};var ie=new WeakMap,ae=new WeakMap;var he=class{constructor(e,r){this._codecParser=e,this._headerCache=r}*[Ci](){let e;do{if(e=yield*this.Frame[Ie](this._codecParser,this._headerCache,0),e)return e;this._codecParser[Pe](1)}while(!0)}*[Mt](e){let r=yield*this[Ci](),n=ae.get(r)[g];if(e||this._codecParser._flushing||(yield*this.Header[G](this._codecParser,this._headerCache,n)))return this._headerCache[Ue](),this._codecParser[Pe](n),this._codecParser[St](r),r;this._codecParser[Be](`Missing ${ot} at ${n} bytes from current position.`,`Dropping current ${ot} and trying again.`),this._headerCache[Ve](),this._codecParser[Pe](1)}};var Bt=class{constructor(e,r){ae.set(this,{[Me]:e}),this[q]=r}};var we=class extends Bt{static*[Ie](e,r,n,o,i){let s=yield*e[G](n,o,i);if(s){let a=ie.get(s)[be],c=ie.get(s)[O],l=(yield*n[B](a,i))[D](0,a);return new r(s,l,c)}else return null}constructor(e,r,n){super(e,r),this[Me]=e,this[O]=n,this[qe]=n/e[H]*1e3,this[st]=null,this[Ht]=null,this[Nt]=null,this[Ot]=null,ae.get(this)[g]=r[g]}};var Pi="unsynchronizationFlag",Fi="extendedHeaderFlag",Ii="experimentalFlag",Ri="footerPresent",hn=class t{static*getID3v2Header(e,r,n){let i={},s=yield*e[B](3,n);if(s[0]!==73||s[1]!==68||s[2]!==51||(s=yield*e[B](10,n),i[xt]=`id3v2.${s[3]}.${s[4]}`,s[5]&15)||(i[Pi]=!!(s[5]&128),i[Fi]=!!(s[5]&64),i[Ii]=!!(s[5]&32),i[Ri]=!!(s[5]&16),s[6]&128||s[7]&128||s[8]&128||s[9]&128))return null;let a=s[6]<<21|s[7]<<14|s[8]<<7|s[9];return i[g]=10+a,new t(i)}constructor(e){this[xt]=e[xt],this[Pi]=e[Pi],this[Fi]=e[Fi],this[Ii]=e[Ii],this[Ri]=e[Ri],this[g]=e[g]}};var Le=class{constructor(e){ie.set(this,e),this[le]=e[le],this[de]=null,this[E]=e[E],this[me]=e[me],this[H]=e[H]}};var va={0:[pr,pr,pr,pr,pr],16:[32,32,32,32,8],240:[pe,pe,pe,pe,pe]},go=(t,e,r)=>8*((t+r)%e+e)*(1<<(t+r)/e)-8*e*(e/8|0);for(let t=2;t<15;t++)va[t<<4]=[t*32,go(t,4,0),go(t,4,-1),go(t,8,4),go(t,8,0)];var vl=0,bl=1,Sl=2,Ml=3,ha=4,vo="bands ",bo=" to 31",ya={0:vo+4+bo,16:vo+8+bo,32:vo+12+bo,48:vo+16+bo},Vt="bitrateIndex",yn="v2",wo="v1",So="Intensity stereo ",Mo=", MS stereo ",_o="on",Ao="off",_l={0:So+Ao+Mo+Ao,16:So+_o+Mo+Ao,32:So+Ao+Mo+_o,48:So+_o+Mo+_o},ki={0:{[C]:W},2:{[C]:"Layer III",[Ye]:1,[Ze]:_l,[wo]:{[Vt]:Sl,[O]:1152},[yn]:{[Vt]:ha,[O]:576}},4:{[C]:"Layer II",[Ye]:1,[Ze]:ya,[O]:1152,[wo]:{[Vt]:bl},[yn]:{[Vt]:ha}},6:{[C]:"Layer I",[Ye]:4,[Ze]:ya,[O]:384,[wo]:{[Vt]:vl},[yn]:{[Vt]:Ml}}},Di="MPEG Version ",xa="ISO/IEC ",Al={0:{[C]:`${Di}2.5 (later extension of MPEG 2)`,[ve]:yn,[H]:{0:oo,4:no,8:lr,12:W}},8:{[C]:W},16:{[C]:`${Di}2 (${xa}13818-3)`,[ve]:yn,[H]:{0:ar,4:sr,8:cr,12:W}},24:{[C]:`${Di}1 (${xa}11172-3)`,[ve]:wo,[H]:{0:or,4:pt,8:ir,12:W}},length:g},wl={0:yo,1:un},Ll={0:un,1:"50/15 ms",2:W,3:"CCIT J.17"},ga={0:{[E]:2,[C]:ft},64:{[E]:2,[C]:"joint "+ft},128:{[E]:2,[C]:"dual channel"},192:{[E]:1,[C]:mt}},Ut=class t extends Le{static*[G](e,r,n){let o={},i=yield*hn.getID3v2Header(e,r,n);i&&(yield*e[B](i[g],n),e[Pe](i[g]));let s=yield*e[B](4,n),a=Ae(s[D](0,4)),c=r[G](a);if(c)return new t(c);if(s[0]!==255||s[1]<224)return null;let l=Al[s[1]&24];if(l[C]===W)return null;let d=s[1]&6;if(ki[d][C]===W)return null;let u={...ki[d],...ki[d][l[ve]]};if(o[et]=l[C],o[ve]=u[C],o[O]=u[O],o[tt]=wl[s[1]&1],o[g]=4,o[de]=va[s[2]&240][u[Vt]],o[de]===pe||(o[H]=l[H][s[2]&12],o[H]===W)||(o[Ye]=s[2]&2&&u[Ye],o[Je]=!!(s[2]&1),o[be]=Math.floor(125*o[de]*o[O]/o[H]+o[Ye]),!o[be]))return null;let m=s[3]&192;if(o[me]=ga[m][C],o[E]=ga[m][E],o[Ze]=u[Ze][s[3]&48],o[qr]=!!(s[3]&8),o[Qe]=!!(s[3]&4),o[ur]=Ll[s[3]&3],o[ur]===W)return null;o[le]=16;{let{length:f,frameLength:h,samples:y,...p}=o;r[Fe](a,o,p)}return new t(o)}constructor(e){super(e),this[de]=e[de],this[ur]=e[ur],this[Ye]=e[Ye],this[qr]=e[qr],this[Qe]=e[Qe],this[Je]=e[Je],this[ve]=e[ve],this[Ze]=e[Ze],this[et]=e[et],this[tt]=e[tt]}};var xn=class t extends we{static*[Ie](e,r,n){return yield*super[Ie](Ut,t,e,r,n)}constructor(e,r,n){super(e,r,n)}};var gn=class extends he{constructor(e,r,n){super(e,r),this.Frame=xn,this.Header=Ut,n(this[j])}get[j](){return io}*[$e](){return yield*this[Mt]()}};var zl={0:"MPEG-4",8:"MPEG-2"},El={0:"valid",2:pe,4:pe,6:pe},Cl={0:yo,1:un},Tl={0:"AAC Main",64:"AAC LC (Low Complexity)",128:"AAC SSR (Scalable Sample Rate)",192:"AAC LTP (Long Term Prediction)"},Pl={0:to,4:ro,8:sa,12:pt,16:or,20:ir,24:sr,28:ar,32:cr,36:no,40:oo,44:lr,48:aa,52:W,56:W,60:"frequency is written explicitly"},ba={0:{[E]:0,[C]:"Defined in AOT Specific Config"},64:{[E]:1,[C]:mt},128:{[E]:2,[C]:J(2,T[0][0])},192:{[E]:3,[C]:J(3,T[1][3])},256:{[E]:4,[C]:J(4,T[1][3],T[3][4])},320:{[E]:5,[C]:J(5,T[1][3],T[3][0])},384:{[E]:6,[C]:J(6,T[1][3],T[3][0],We)},448:{[E]:8,[C]:J(8,T[1][3],T[2][0],T[3][0],We)}},Gt=class t extends Le{static*[G](e,r,n){let o={},i=yield*e[B](7,n),s=Ae([i[0],i[1],i[2],i[3]&252|i[6]&3]),a=r[G](s);if(a)Object.assign(o,a);else{if(i[0]!==255||i[1]<240||(o[et]=zl[i[1]&8],o[ve]=El[i[1]&6],o[ve]===pe))return null;let l=i[1]&1;o[tt]=Cl[l],o[g]=l?7:9,o[so]=i[2]&192,o[je]=i[2]&60;let d=i[2]&2;if(o[Qr]=Tl[o[so]],o[H]=Pl[o[je]],o[H]===W)return null;o[Je]=!!d,o[rn]=(i[2]<<8|i[3])&448,o[me]=ba[o[rn]][C],o[E]=ba[o[rn]][E],o[Qe]=!!(i[3]&32),o[Yr]=!!(i[3]&8),o[nn]=!!(i[3]&8),o[on]=!!(i[3]&4),o[le]=16,o[O]=1024,o[Kr]=i[6]&3;{let{length:u,channelModeBits:m,profileBits:f,sampleRateBits:h,frameLength:y,samples:p,numberAACFrames:x,...M}=o;r[Fe](s,o,M)}}if(o[be]=(i[3]<<11|i[4]<<3|i[5]>>5)&8191,!o[be])return null;let c=(i[5]<<6|i[6]>>2)&2047;return o[Vr]=c===2047?"VBR":c,new t(o)}constructor(e){super(e),this[nn]=e[nn],this[on]=e[on],this[Vr]=e[Vr],this[Yr]=e[Yr],this[Qe]=e[Qe],this[Je]=e[Je],this[ve]=e[ve],this[g]=e[g],this[et]=e[et],this[Kr]=e[Kr],this[Qr]=e[Qr],this[tt]=e[tt]}get audioSpecificConfig(){let e=ie.get(this),r=e[so]+64<<5|e[je]<<5|e[rn]>>3,n=new fe(2);return new At(n[Xe]).setUint16(0,r,!1),n}};var vn=class t extends we{static*[Ie](e,r,n){return yield*super[Ie](Gt,t,e,r,n)}constructor(e,r,n){super(e,r,n)}};var bn=class extends he{constructor(e,r,n){super(e,r),this.Frame=vn,this.Header=Gt,n(this[j])}get[j](){return"aac"}*[$e](){return yield*this[Mt]()}};var wt=class t extends we{static _getFrameFooterCrc16(e){return(e[e[g]-2]<<8)+e[e[g]-1]}static[ho](e){let r=t._getFrameFooterCrc16(e),n=ma(e[D](0,-2));return r===n}constructor(e,r,n){r[ln]=n,r[Gr]=t._getFrameFooterCrc16(e),super(r,e,ie.get(r)[O])}};var Sa="get from STREAMINFO metadata block",Fl={0:"Fixed",1:"Variable"},Ma={0:W,16:192};for(let t=2;t<16;t++)Ma[t<<4]=t<6?576*2**(t-2):2**t;var Il={0:Sa,1:ro,2:ia,3:oa,4:lr,5:cr,6:ar,7:sr,8:ir,9:or,10:pt,11:to,15:pe},Rl={0:{[E]:1,[C]:mt},16:{[E]:2,[C]:J(2,T[0][0])},32:{[E]:3,[C]:J(3,T[0][1])},48:{[E]:4,[C]:J(4,T[1][0],T[3][0])},64:{[E]:5,[C]:J(5,T[1][1],T[3][0])},80:{[E]:6,[C]:J(6,T[1][1],We,T[3][0])},96:{[E]:7,[C]:J(7,T[1][1],We,T[3][4],T[2][0])},112:{[E]:8,[C]:J(8,T[1][1],We,T[3][0],T[2][0])},128:{[E]:2,[C]:`${ft} (left, diff)`},144:{[E]:2,[C]:`${ft} (diff, right)`},160:{[E]:2,[C]:`${ft} (avg, diff)`},176:W,192:W,208:W,224:W,240:W},kl={0:Sa,2:8,4:12,6:W,8:16,10:20,12:24,14:W},Lt=class t extends Le{static _decodeUTF8Int(e){if(e[0]>254)return null;if(e[0]<128)return{value:e[0],length:1};let r=1;for(let s=64;s&e[0];s>>=1)r++;let n=r-1,o=0,i=0;for(;n>0;i+=6,n--){if((e[n]&192)!==128)return null;o|=(e[n]&63)<<i}return o|=(e[n]&127>>r)<<i,{value:o,length:r}}static[Re](e,r){let n={[B]:function*(){return e}};return t[G](n,r,0).next().value}static*[G](e,r,n){let o=yield*e[B](6,n);if(o[0]!==255||!(o[1]===248||o[1]===249))return null;let i={},s=Ae(o[D](0,4)),a=r[G](s);if(a)Object.assign(i,a);else{if(i[co]=o[1]&1,i[Zr]=Fl[i[co]],i[en]=o[2]&240,i[je]=o[2]&15,i[rt]=Ma[i[en]],i[rt]===W||(i[H]=Il[i[je]],i[H]===pe)||o[3]&1)return null;let l=Rl[o[3]&240];if(l===W||(i[E]=l[E],i[me]=l[C],i[le]=kl[o[3]&14],i[le]===W))return null}i[g]=5,o=yield*e[B](i[g]+8,n);let c=t._decodeUTF8Int(o[D](4));if(!c||(i[co]?i[an]=c.value:i[st]=c.value,i[g]+=c[g],i[en]===96?(o[g]<i[g]&&(o=yield*e[B](i[g],n)),i[rt]=o[i[g]-1]+1,i[g]+=1):i[en]===112&&(o[g]<i[g]&&(o=yield*e[B](i[g],n)),i[rt]=(o[i[g]-1]<<8)+o[i[g]]+1,i[g]+=2),i[O]=i[rt],i[je]===12?(o[g]<i[g]&&(o=yield*e[B](i[g],n)),i[H]=o[i[g]-1]*1e3,i[g]+=1):i[je]===13?(o[g]<i[g]&&(o=yield*e[B](i[g],n)),i[H]=(o[i[g]-1]<<8)+o[i[g]],i[g]+=2):i[je]===14&&(o[g]<i[g]&&(o=yield*e[B](i[g],n)),i[H]=((o[i[g]-1]<<8)+o[i[g]])*10,i[g]+=2),o[g]<i[g]&&(o=yield*e[B](i[g],n)),i[dr]=o[i[g]-1],i[dr]!==ua(o[D](0,i[g]-1))))return null;if(!a){let{blockingStrategyBits:l,frameNumber:d,sampleNumber:u,samples:m,sampleRateBits:f,blockSizeBits:h,crc:y,length:p,...x}=i;r[Fe](s,i,x)}return new t(i)}constructor(e){super(e),this[Gr]=null,this[Zr]=e[Zr],this[rt]=e[rt],this[st]=e[st],this[an]=e[an],this[ln]=null}};var Dl=2,Hl=512*1024,Wt=class extends he{constructor(e,r,n){super(e,r),this.Frame=wt,this.Header=Lt,n(this[j])}get[j](){return"flac"}*_getNextFrameSyncOffset(e){let r=yield*this._codecParser[B](2,0),n=r[g]-2;for(;e<n;){if(r[e]===255){let i=r[e+1];if(i===248||i===249)break;i!==255&&e++}e++}return e}*[$e](){do{let e=yield*Lt[G](this._codecParser,this._headerCache,0);if(e){let r=ie.get(e)[g]+Dl;for(;r<=Hl;){if(this._codecParser._flushing||(yield*Lt[G](this._codecParser,this._headerCache,r))){let n=yield*this._codecParser[B](r);if(this._codecParser._flushing||(n=n[D](0,r)),wt[ho](n)){let o=new wt(n,e);return this._headerCache[Ue](),this._codecParser[Pe](r),this._codecParser[St](o),o}}r=yield*this._getNextFrameSyncOffset(r+1)}this._codecParser[Be](`Unable to sync FLAC frame after searching ${r} bytes.`),this._codecParser[Pe](r)}else this._codecParser[Pe](yield*this._getNextFrameSyncOffset(1))}while(!0)}[_t](e){return e[re]===0?(this._headerCache[Ue](),this._streamInfo=e[q][D](13)):e[re]===1||(e[ue]=ae.get(e)[Te].map(r=>{let n=Lt[Re](r,this._headerCache);if(n)return new wt(r,n,this._streamInfo);this._codecParser[Be]("Failed to parse Ogg FLAC frame","Skipping invalid FLAC frame")}).filter(r=>!!r)),e}};var Xt=class t{static*[G](e,r,n){let o={},i=yield*e[B](28,n);if(i[0]!==79||i[1]!==103||i[2]!==103||i[3]!==83||(o[zi]=i[4],i[5]&248))return null;o[_e]=!!(i[5]&4),o[yt]=!!(i[5]&2),o[ht]=!!(i[5]&1);let a=new At(fe.from(i[D](0,28))[Xe]);o[Ne]=pa(a,6),o[Ke]=a.getInt32(14,!0),o[re]=a.getInt32(18,!0),o[Dt]=a.getInt32(22,!0);let c=i[26];o[g]=c+27,i=yield*e[B](o[g],n),o[be]=0,o[bt]=[],o[fr]=fe.from(i[D](27,o[g]));for(let l=0,d=0;l<c;l++){let u=o[fr][l];o[be]+=u,d+=u,(u!==255||l===c-1)&&(o[bt].push(d),d=0)}return new t(o)}constructor(e){ie.set(this,e),this[Ne]=e[Ne],this[ht]=e[ht],this[yt]=e[yt],this[_e]=e[_e],this[bt]=e[bt],this[re]=e[re],this[Dt]=e[Dt],this[Ke]=e[Ke]}};var Sn=class t extends Bt{static*[Ie](e,r,n){let o=yield*Xt[G](e,r,n);if(o){let i=ie.get(o)[be],s=ie.get(o)[g],a=s+i,c=(yield*e[B](a,0))[D](0,a),l=c[D](s,a);return new t(o,l,c)}else return null}constructor(e,r,n){super(e,r),ae.get(this)[g]=n[g],this[ue]=[],this[Ai]=n,this[Ne]=e[Ne],this[Wr]=e[Dt],this[qe]=0,this[ht]=e[ht],this[yt]=e[yt],this[_e]=e[_e],this[re]=e[re],this[O]=0,this[Ke]=e[Ke]}};var hr=class extends we{constructor(e,r,n){super(r,e,n)}};var _a={0:Hr.slice(0,2),1:Hr},ke="SILK-only",ce="CELT-only",Lo="Hybrid",zt="narrowband",zo="medium-band",Et="wideband",yr="super-wideband",xr="fullband",Ol={0:{[R]:ke,[k]:zt,[I]:10},8:{[R]:ke,[k]:zt,[I]:20},16:{[R]:ke,[k]:zt,[I]:40},24:{[R]:ke,[k]:zt,[I]:60},32:{[R]:ke,[k]:zo,[I]:10},40:{[R]:ke,[k]:zo,[I]:20},48:{[R]:ke,[k]:zo,[I]:40},56:{[R]:ke,[k]:zo,[I]:60},64:{[R]:ke,[k]:Et,[I]:10},72:{[R]:ke,[k]:Et,[I]:20},80:{[R]:ke,[k]:Et,[I]:40},88:{[R]:ke,[k]:Et,[I]:60},96:{[R]:Lo,[k]:yr,[I]:10},104:{[R]:Lo,[k]:yr,[I]:20},112:{[R]:Lo,[k]:xr,[I]:10},120:{[R]:Lo,[k]:xr,[I]:20},128:{[R]:ce,[k]:zt,[I]:2.5},136:{[R]:ce,[k]:zt,[I]:5},144:{[R]:ce,[k]:zt,[I]:10},152:{[R]:ce,[k]:zt,[I]:20},160:{[R]:ce,[k]:Et,[I]:2.5},168:{[R]:ce,[k]:Et,[I]:5},176:{[R]:ce,[k]:Et,[I]:10},184:{[R]:ce,[k]:Et,[I]:20},192:{[R]:ce,[k]:yr,[I]:2.5},200:{[R]:ce,[k]:yr,[I]:5},208:{[R]:ce,[k]:yr,[I]:10},216:{[R]:ce,[k]:yr,[I]:20},224:{[R]:ce,[k]:xr,[I]:2.5},232:{[R]:ce,[k]:xr,[I]:5},240:{[R]:ce,[k]:xr,[I]:10},248:{[R]:ce,[k]:xr,[I]:20}},gr=class t extends Le{static[Re](e,r,n){let o={};if(o[E]=e[9],o[nt]=e[18],o[g]=o[nt]!==0?21+o[E]:19,e[g]<o[g])throw new Error("Out of data while inside an Ogg Page");let i=r[0]&3,s=i===3?2:1,a=Ae(e[D](0,o[g]))+Ae(r[D](0,s)),c=n[G](a);if(c)return new t(c);if(a.substr(0,8)!=="OpusHead"||e[8]!==1)return null;o[q]=fe.from(e[D](0,o[g]));let l=new At(o[q][Xe]);if(o[le]=16,o[Rt]=l.getUint16(10,!0),o[sn]=l.getUint32(12,!0),o[H]=pt,o[$r]=l.getInt16(16,!0),o[nt]in _a&&(o[me]=_a[o[nt]][o[E]-1],!o[me]))return null;o[nt]!==0&&(o[cn]=e[19],o[Ur]=e[20],o[tn]=[...e[D](21,o[E]+21)]);let d=Ol[248&r[0]];switch(o[R]=d[R],o[k]=d[k],o[I]=d[I],i){case 0:o[it]=1;break;case 1:case 2:o[it]=2;break;case 3:o[jr]=!!(128&r[1]),o[Xr]=!!(64&r[1]),o[it]=63&r[1];break;default:return null}{let{length:u,data:m,channelMappingFamily:f,...h}=o;n[Fe](a,o,h)}return new t(o)}constructor(e){super(e),this[q]=e[q],this[k]=e[k],this[nt]=e[nt],this[tn]=e[tn],this[Ur]=e[Ur],this[it]=e[it],this[I]=e[I],this[Xr]=e[Xr],this[sn]=e[sn],this[jr]=e[jr],this[R]=e[R],this[$r]=e[$r],this[Rt]=e[Rt],this[cn]=e[cn]}};var Mn=class extends he{constructor(e,r,n){super(e,r),this.Frame=hr,this.Header=gr,n(this[j]),this._identificationHeader=null,this._preSkipRemaining=null}get[j](){return"opus"}[_t](e){return e[re]===0?(this._headerCache[Ue](),this._identificationHeader=e[q]):e[re]===1||(e[ue]=ae.get(e)[Te].map(r=>{let n=gr[Re](this._identificationHeader,r,this._headerCache);if(n){this._preSkipRemaining===null&&(this._preSkipRemaining=n[Rt]);let o=n[I]*n[it]/1e3*n[H];return this._preSkipRemaining>0&&(this._preSkipRemaining-=o,o=this._preSkipRemaining<0?-this._preSkipRemaining:0),new hr(r,n,o)}this._codecParser[fo]("Failed to parse Ogg Opus Header","Not a valid Ogg Opus file")})),e}};var vr=class extends we{constructor(e,r,n){super(r,e,n)}};var Hi={};for(let t=0;t<8;t++)Hi[t+6]=2**(6+t);var _n=class t extends Le{static[Re](e,r,n,o){if(e[g]<30)throw new Error("Out of data while inside an Ogg Page");let i=Ae(e[D](0,30)),s=r[G](i);if(s)return new t(s);let a={[g]:30};if(i.substr(0,7)!=="vorbis")return null;a[q]=fe.from(e[D](0,30));let c=new At(a[q][Xe]);if(a[xt]=c.getUint32(7,!0),a[xt]!==0||(a[E]=e[11],a[me]=Hr[a[E]-1]||"application defined",a[H]=c.getUint32(12,!0),a[Or]=c.getInt32(16,!0),a[Br]=c.getInt32(20,!0),a[Nr]=c.getInt32(24,!0),a[vt]=Hi[(e[28]&240)>>4],a[gt]=Hi[e[28]&15],a[gt]>a[vt])||e[29]!==1)return null;a[le]=32,a[mr]=o,a[Jr]=n;{let{length:l,data:d,version:u,vorbisSetup:m,vorbisComments:f,...h}=a;r[Fe](i,a,h)}return new t(a)}constructor(e){super(e),this[Or]=e[Or],this[Nr]=e[Nr],this[Br]=e[Br],this[gt]=e[gt],this[vt]=e[vt],this[q]=e[q],this[Jr]=e[Jr],this[mr]=e[mr]}};var An=class extends he{constructor(e,r,n){super(e,r),this.Frame=vr,n(this[j]),this._identificationHeader=null,this._setupComplete=!1,this._prevBlockSize=null}get[j](){return kt}[_t](e){e[ue]=[];for(let r of ae.get(e)[Te])if(r[0]===1)this._headerCache[Ue](),this._identificationHeader=e[q],this._setupComplete=!1;else if(r[0]===3)this._vorbisComments=r;else if(r[0]===5)this._vorbisSetup=r,this._mode=this._parseSetupHeader(r),this._setupComplete=!0;else if(this._setupComplete){let n=_n[Re](this._identificationHeader,this._headerCache,this._vorbisComments,this._vorbisSetup);n?e[ue].push(new vr(r,n,this._getSamples(r,n))):this._codecParser[logError]("Failed to parse Ogg Vorbis Header","Not a valid Ogg Vorbis file")}return e}_getSamples(e,r){let o=this._mode.blockFlags[e[0]>>1&this._mode.mask]?r[vt]:r[gt],i=this._prevBlockSize===null?0:(this._prevBlockSize+o)/4;return this._prevBlockSize=o,i}_parseSetupHeader(e){let r=new xo(e),n={count:0,blockFlags:[]};for(;(r.read(1)&1)!==1;);let o;for(;n.count<64&&r.position>0;){mn(r.read(8));let i=0;for(;r.read(8)===0&&i++<3;);if(i===4)o=r.read(7),n.blockFlags.unshift(o&1),r.position+=6,n.count++;else{((mn(o)&126)>>1)+1!==n.count&&this._codecParser[Be]("vorbis derived mode count did not match actual mode count");break}}return n.mask=(1<<Math.log2(n.count))-1,n}};var Oi=class{constructor(e,r,n){this._codecParser=e,this._headerCache=r,this._onCodec=n,this._continuedPacket=new fe,this._codec=null,this._isSupported=null,this._previousAbsoluteGranulePosition=null}get[j](){return this._codec||""}_updateCodec(e,r){this._codec!==e&&(this._headerCache[Ve](),this._parser=new r(this._codecParser,this._headerCache,this._onCodec),this._codec=e)}_checkCodecSupport({data:e}){let r=Ae(e[D](0,8));switch(r){case"fishead\0":return!1;case"OpusHead":return this._updateCodec("opus",Mn),!0;case(/^\x7fFLAC/.test(r)&&r):return this._updateCodec("flac",Wt),!0;case(/^\x01vorbis/.test(r)&&r):return this._updateCodec(kt,An),!0;default:return!1}}_checkPageSequenceNumber(e){e[re]!==this._pageSequenceNumber+1&&this._pageSequenceNumber>1&&e[re]>1&&this._codecParser[Be]("Unexpected gap in Ogg Page Sequence Number.",`Expected: ${this._pageSequenceNumber+1}, Got: ${e[re]}`),this._pageSequenceNumber=e[re]}_parsePage(e){this._isSupported===null&&(this._pageSequenceNumber=e[re],this._isSupported=this._checkCodecSupport(e)),this._checkPageSequenceNumber(e);let r=ae.get(e),n=ie.get(r[Me]),o=0;if(r[Te]=n[bt].map(i=>e[q][D](o,o+=i)),this._continuedPacket[g]&&(r[Te][0]=fn(this._continuedPacket,r[Te][0]),this._continuedPacket=new fe),n[fr][n[fr][g]-1]===255&&(this._continuedPacket=fn(this._continuedPacket,r[Te].pop())),this._previousAbsoluteGranulePosition!==null&&(e[O]=Number(e[Ne]-this._previousAbsoluteGranulePosition)),this._previousAbsoluteGranulePosition=e[Ne],this._isSupported){let i=this._parser[_t](e);return this._codecParser[St](i),i}else return e}},wn=class extends he{constructor(e,r,n){super(e,r),this._onCodec=n,this.Frame=Sn,this.Header=Xt,this._streams=new Map,this._currentSerialNumber=null}get[j](){let e=this._streams.get(this._currentSerialNumber);return e?e.codec:""}*[$e](){let e=yield*this[Mt](!0);this._currentSerialNumber=e[Ke];let r=this._streams.get(this._currentSerialNumber);return r||(r=new Oi(this._codecParser,this._headerCache,this._onCodec),this._streams.set(this._currentSerialNumber,r)),e[_e]&&this._streams.delete(this._currentSerialNumber),r._parsePage(e)}};var Ni=()=>{},Ln=class{constructor(e,{onCodec:r,onCodecHeader:n,onCodecUpdate:o,enableLogging:i=!1,enableFrameCRC32:s=!0}={}){this._inputMimeType=e,this._onCodec=r||Ni,this._onCodecHeader=n||Ni,this._onCodecUpdate=o,this._enableLogging=i,this._crc32=s?fa:Ni,this[Ve]()}get[j](){return this._parser?this._parser[j]:""}[Ve](){this._headerCache=new pn(this._onCodecHeader,this._onCodecUpdate),this._generator=this._getGenerator(),this._generator.next()}*flush(){this._flushing=!0;for(let e=this._generator.next();e.value;e=this._generator.next())yield e.value;this._flushing=!1,this[Ve]()}*parseChunk(e){for(let r=this._generator.next(e);r.value;r=this._generator.next())yield r.value}parseAll(e){return[...this.parseChunk(e),...this.flush()]}*_getGenerator(){if(this._inputMimeType.match(/aac/))this._parser=new bn(this,this._headerCache,this._onCodec);else if(this._inputMimeType.match(/mpeg/))this._parser=new gn(this,this._headerCache,this._onCodec);else if(this._inputMimeType.match(/flac/))this._parser=new Wt(this,this._headerCache,this._onCodec);else if(this._inputMimeType.match(/ogg/))this._parser=new wn(this,this._headerCache,this._onCodec);else throw new Error(`Unsupported Codec ${mimeType}`);for(this._frameNumber=0,this._currentReadPosition=0,this._totalBytesIn=0,this._totalBytesOut=0,this._totalSamples=0,this._sampleRate=void 0,this._rawData=new Uint8Array(0);;){let e=yield*this._parser[$e]();e&&(yield e)}}*[B](e=0,r=0){let n;for(;this._rawData[g]<=e+r;){if(n=yield,this._flushing)return this._rawData[D](r);n&&(this._totalBytesIn+=n[g],this._rawData=fn(this._rawData,n))}return this._rawData[D](r)}[Pe](e){this._currentReadPosition+=e,this._rawData=this._rawData[D](e)}[dn](e){this._sampleRate=e[Me][H],e[Me][de]=e[qe]>0?Math.round(e[q][g]/e[qe])*8:0,e[st]=this._frameNumber++,e[Ht]=this._totalBytesOut,e[Nt]=this._totalSamples,e[Ot]=this._totalSamples/this._sampleRate*1e3,e[Wr]=this._crc32(e[q]),this._headerCache[po](e[Me][de],e[Ot]),this._totalBytesOut+=e[q][g],this._totalSamples+=e[O]}[St](e){if(e[ue]){if(e[_e]){let r=e[O];e[ue].forEach(n=>{let o=n[O];r<o&&(n[O]=r>0?r:0,n[qe]=n[O]/n[Me][H]*1e3),r-=o,this[dn](n)})}else e[O]=0,e[ue].forEach(r=>{e[O]+=r[O],this[dn](r)});e[qe]=e[O]/this._sampleRate*1e3||0,e[Nt]=this._totalSamples,e[Ot]=this._totalSamples/this._sampleRate*1e3||0,e[Ht]=this._totalBytesOut}else this[dn](e)}_log(e,r){if(this._enableLogging){let n=[`${j}: ${this[j]}`,`inputMimeType: ${this._inputMimeType}`,`readPosition: ${this._currentReadPosition}`,`totalBytesIn: ${this._totalBytesIn}`,`${Ht}: ${this._totalBytesOut}`],o=Math.max(...n.map(i=>i[g]));r.push(`--stats--${"-".repeat(o-9)}`,...n,"-".repeat(o)),e("codec-parser",r.reduce((i,s)=>i+`
4
- `+s,""))}}[Be](...e){this._log(console.warn,e)}[fo](...e){this._log(console.error,e)}};var Aa=Ln;var Eo=ue;var Co=q;var wa=Me;var La=_e;var za=mr;var Ea=Nt;function at(t){var e=e;function r(){}e={};function n(z){throw z}var o,i,s,a,c,l,d,u,m,f,h;function y(){var z=h.buffer;o=new Int8Array(z),i=new Int16Array(z),a=new Uint8Array(z),c=new Uint16Array(z),s=new Int32Array(z),l=new Uint32Array(z),d=new Float32Array(z),u=new Float64Array(z),m=new BigInt64Array(z),f=new BigUint64Array(z)}for(var p=z=>{for(var ze,Er,Kt=0,Dn=0,Hn=z.length,On=new Uint8Array((Hn*3>>2)-(z[Hn-2]=="=")-(z[Hn-1]=="="));Kt<Hn;Kt+=4,Dn+=3)ze=K[z.charCodeAt(Kt+1)],Er=K[z.charCodeAt(Kt+2)],On[Dn]=K[z.charCodeAt(Kt)]<<2|ze>>4,On[Dn+1]=ze<<4|Er>>2,On[Dn+2]=Er<<6|K[z.charCodeAt(Kt+3)];return On},x=()=>n(""),M=()=>{},v={},S=z=>z(),b=()=>performance.now(),_=(z,ze)=>{if(v[z]&&(clearTimeout(v[z].id),delete v[z]),!ze)return 0;var Er=setTimeout(()=>{delete v[z],S(()=>Ms(z,b()))},ze);return v[z]={id:Er,timeout_ms:ze},0},w=Math.atan,L=Math.cos,P=Math.exp,A=Math.log,N=Math.pow,U=Math.sin,V=z=>{var ze=a.length;return z>>>=0,!1},F=z=>{throw`exit(${z})`},K=new Uint8Array(123),ge=25;ge>=0;--ge)K[48+ge]=52+ge,K[65+ge]=ge,K[97+ge]=26+ge;K[43]=62,K[47]=63;var Ct={e:x,d:M,f:_,b:w,a:L,i:P,h:A,g:N,c:U,k:V,j:F};function kn(z){zr=z.n,ys=z.o,xs=z.p,gs=z.q,vs=z.r,bs=z.s,Ss=z.t,Ms=z.v}var zr,ys,xs,gs,vs,bs,Ss,Ms;function bc(z){z.m()}at.wasm||Object.defineProperty(at,"wasm",{get:()=>String.raw`dynEncode012091253f87dì%nä= 4&¿nÝØä‘ÂLÚªã9ÚØ[äº\ ¼¡³R=}L]ŸÈÿ2 ÿù¶J1jj¡é,zäV|i¸Qk¹‡= 
3
+ `,"Visit https://github.com/eshaz/simple-yenc for more information"),Error(x)}}return y};function $(){let t=Uint8Array,e=Float32Array;$.modules||Object.defineProperties($,{modules:{value:new WeakMap},setModule:{value(r,n){$.modules.set(r,Promise.resolve(n))}},getModule:{value(r,n){let o=$.modules.get(r);return o||(n?o=WebAssembly.compile(Li(n)):(n=r.wasm,o=$.inflateDynEncodeString(n).then(i=>WebAssembly.compile(i))),$.modules.set(r,o)),o}},concatFloat32:{value(r,n){let o=new e(n),i=0,s=0;for(;i<r.length;)o.set(r[i],s),s+=r[i++].length;return o}},getDecodedAudio:{value:(r,n,o,i,s)=>({errors:r,channelData:n,samplesDecoded:o,sampleRate:i,bitDepth:s})},getDecodedAudioMultiChannel:{value(r,n,o,i,s,a){let c=[],l,d;for(l=0;l<o;l++){let u=[];for(d=0;d<n.length;)u.push(n[d++][l]||[]);c.push($.concatFloat32(u,i))}return $.getDecodedAudio(r,c,i,s,a)}},inflateDynEncodeString:{value(r){return r=Li(r),new Promise(n=>{let o=String.raw`dynEncode012804c7886d(‰›•)((()>+ˆ*§§)§ˆ,§§§§)§ˆ+§§§)§+.-()(*)-+)(ˆ.7*§)i¸¸,3§(i¸¸,3/G+.••—š¡*(,˜ŽŽ(,3‡‡‰˜‡Š‰›+)2å:-œ),§H(P*DI*H(P*@I++hH)H*r,hH(H(P*<J,i)’^*<H,H(P*4’U((I-H(H*i0’J,^*DH+H-H*œšI+H,I*4)33H(H*H)“^*DH(H+H)^*@H+i§H)œi§›™3æ*).§K(iH“I/+§H,iHn,§H+i(H+i(rCJ0I,H*I-+hH,,hH(H-V)(i)œ’J.H.W)(i)’c)(H,i)“I,H-i*’I-4)33i(I.*hH(V)(H+n5(H(i*’I-i(I,i)I.+hH,i*’J+iHn,hi(I-i*I,+hH,H/’H-c)(H,iFn,hi(I,+hH,H0n5-H*V)(J(,hH/H(i)œ’J(H(V)(J(i)’c)(H)H(i)œ’H,c)(3H*i*’I*H,i)’I,4(3(-H(H,’W)(H-’I-H,i*’I,4)3(3(3H,H-’I1H+I,H.i)œH1V)(“J.i(v5(33H.-H(H,’i(c)(H,i*’I,4)333–)-§i*I*+§H*iHn,hiž73H,H(i)8(H+šJ+H)P*(H*’V)(J-“r,§H)P*,H.i)œ’H+H,“i)œ’V)(-H*i*’I*H+i)œI+H-H.’I.H,H-’i)œI,4)333Ã+)-§iø7i(^*(iü7I,*h+hH+iDn,h*hilI+i)I,+hH+,hH+iô7’H,c)(i)H+i´8’W)(œH,’I,H+i*’I+4)-+hH(H)8*J-i(p5.*h*h*hH-i')u,hH(P*(J+,hH(P*0J,H(P*,n50H+H,’H-b((3H(P*0i)’I.4)3H-i¨*n5*H-iÅ*s,hiž73H-i)œJ+V)&+I,H(H+V)æ,8(I.H(H*8*J-i(p51H-i)œJ+i¸7’V)(H(H+iø7’V)(8(’J/H(P*0J+s,hi73H+H,H.’J,’I.H(P*(m5(H.H(P*,s5.+hH,m5*H(P*(J.H+’H.H+H/“’U((b((H(H(P*0i)’J+^*0H,i)“I,4(3(3H(H.^*03H-i¨*o5)33i(73(3(3-H,H+i)žc)(H,i*’I,H+i)’I+4)33i)I-3H-3!2)0§K(i2“J,L(H,H(^*(H,H*^*4H,i(^*0H,i(^*DH,j(_*<H,H)P*(^*,H,H+P*(^*8*h*h+hH,i)8(I3i§I**h*h*h*h*h*h*hH,i*8(6+(),03H,j(_*@i*I-H,P*<J.i,’J(H,P*8J/s50H,H.i+’J0^*<i¦I*H.H,P*4J1’J.U(*H.U((J2›i')o5/H.U()I.H,H(^*<H0H1’U((H.i0œJ.i§›i0ži')™o5/H/H.H2šJ*H(’J.q50H,P*0J/H*’I-H,P*(J0,hH,P*,H-q,hi)I-423+hH*m5+H/H0’H(H1’U((b((H/i)’I/H(i)’I(H*i)“I*4(3(3H,H.^*<H,H-^*04*3iØ1U((5+i(I(i¨7i1^*(i$6iè1^*(i°7iè6^*(i¬7iÈ6^*(+hH(iÈ*n,hiÈ*I(+hH(i¨,n,hi¨,I(+hH(iØ,n,hiØ,I(+hH(iè,o,hH,i-’H(’i0c)(H(i*’I(4)33iè1i1H,i-’iÈ*8)Bi(I(+hH(ido,hH,i-’H(’i-c)(H(i*’I(4)33iÈ6iè6H,i-’iF8)BiØ1i)b((41-H,i-’H(’i/c)(H(i*’I(4)3(3(-H,i-’H(’i1c)(H(i*’I(4)3(3(-H,i-’H(’i0c)(H(i*’I(4)3(3(3H,H/^*0H,H(^*<3i(I*4*3H,H,i¸)’^*TH,H,iø-’^*PH,H,iX’^*LH,H,i(’^*HH,i-8(I(H,i-8(I-i¥I*H,i,8(I.H(iErH-iErš5)H(i©*’I1H-i)’I0i(i;H.i,’J(i(H(i(rCJ(“J*H*i;sCI*i¨1I-H(I/+hH/,hH,i-’H-V)(i)œ’H,i+8(c)(H/i)“I/H-i*’I-H*i)’I*4)-H(i)œi¨1’I/+hH(H*o,hH,i-’H/V)(i)œ’i(c)(H/i*’I/H(i)’I(4)33i¤I*H,iø-’H,i¸)’H,i-’i;8)5+H0H1’I2i(I-+hH-H2p,hH,H,iP’8*J*i(p5-H*i7u,hH,i-’H-i)œ’H*c)(H-i)’I-4*3i(I/i+I.i+I(*h*h*hH*i8“6*(*)3H-m,hi£I*403H-i)œH,’W)-I/i*I(4)3i3I.i/I(3H2H,H(8(H.’J(H-’J.p,hi¢I*4.3H,i-’H-i)œ’I*+hH(,hH*H/c)(H*i*’I*H(i)“I(4)-H.I-4+3(3(33H,W)1m,hiŸI*4,3H,iø-’H,i¸)’H,i-’H18)J(,hi¡I*H(i(p5,H1H,V)ú-H,V)ø-’o5,3H,i(’H,iX’H,i-’H1i)œ’H08)J(,hi I*H(i(p5,H0H,V)šH,V)˜’o5,3H,H,iP’H,iH’8+I*4+3(3(3H,i$6i¬78+I*3H*H3šm5(3i)I-H*i(r5)3H)H,P*0^*(H+H,P*<^*(H*I-3H,i2’L(H-33Á)+(i¨03b+(,(-(.(/(0(1(2(3(5(7(9(;(?(C(G(K(S([(c(k({(‹(›(«(Ë(ë( (*)(iø03O)()()()(*(*(*(*(+(+(+(+(,(,(,(,(-(-(-(-(i¨13M8(9(:(((0(/(1(.(2(-(3(,(4(+(5(*(6()(7(T7œ‰šœ‡Ž‰œš›*S7•œ‰Š”U”—Љ”›S0›‘–U œ`;$.getModule($,o).then(i=>WebAssembly.instantiate(i,{})).then(({exports:i})=>{let s=new Map(Object.entries(i)),a=s.get("puff"),c=s.get("memory").buffer,l=new t(c),d=new DataView(c),u=s.get("__heap_base"),m=r.length,f=u;u+=4,d.setInt32(f,m,!0);let h=u;u+=m,l.set(r,h);let y=u;u+=4,d.setInt32(y,l.byteLength-u,!0),a(u,y,h,f),n(l.slice(u,u+d.getInt32(y,!0)))})})}}}),Object.defineProperty(this,"wasm",{enumerable:!0,get:()=>this._wasm}),this.getOutputChannels=(r,n,o)=>{let i=[],s=0;for(;s<n;)i.push(r.slice(s*o,s++*o+o));return i},this.allocateTypedArray=(r,n,o=!0)=>{let i=this._wasm.malloc(n.BYTES_PER_ELEMENT*r);return o&&this._pointers.add(i),{ptr:i,len:r,buf:new n(this._wasm.HEAP,i,r)}},this.free=()=>{this._pointers.forEach(r=>{this._wasm.free(r)}),this._pointers.clear()},this.codeToString=r=>{let n=[],o=new Uint8Array(this._wasm.HEAP);for(let i=o[r];i!==0;i=o[++r])n.push(i);return String.fromCharCode.apply(null,n)},this.addError=(r,n,o,i,s,a)=>{r.push({message:n,frameLength:o,frameNumber:i,inputBytes:s,outputSamples:a})},this.instantiate=(r,n)=>(n&&$.setModule(r,n),this._wasm=new r($).instantiate(),this._pointers=new Set,this._wasm.ready.then(()=>this))}var aa=Ic(sa(),1);var Al=()=>globalThis.Worker||aa.default,ir=class extends Al(){constructor(e,r,n,o){$.modules||new $;let i=$.modules.get(n);if(!i){let s="text/javascript",a,c=`'use strict';(${((l,d,u)=>{let m,f,h=new Promise(y=>{f=y});self.onmessage=({data:{id:y,command:p,data:x}})=>{let M=h,v={id:y},S;p==="init"?(Object.defineProperties(l,{WASMAudioDecoderCommon:{value:d},EmscriptenWASM:{value:u},module:{value:x.module},isWebWorker:{value:!0}}),m=new l(x.options),f()):p==="free"?m.free():p==="ready"?M=M.then(()=>m.ready):p==="reset"?M=M.then(()=>m.reset()):(Object.assign(v,m[p](Array.isArray(x)?x.map(b=>new Uint8Array(b)):new Uint8Array(x))),S=v.channelData?v.channelData.map(b=>b.buffer):[]),M.then(()=>self.postMessage(v,S))}}).toString()})(${n}, ${$}, ${o})`;try{a=typeof process.versions.node<"u"}catch{}i=a?`data:${s};base64,${Buffer.from(c).toString("base64")}`:URL.createObjectURL(new Blob([c],{type:s})),$.modules.set(n,i)}super(i,{name:r}),this._id=Number.MIN_SAFE_INTEGER,this._enqueuedOperations=new Map,this.onmessage=({data:s})=>{let{id:a,...c}=s;this._enqueuedOperations.get(a)(c),this._enqueuedOperations.delete(a)},new o($).getModule().then(s=>{this.postToDecoder("init",{module:s,options:e})})}async postToDecoder(e,r){return new Promise(n=>{this.postMessage({command:e,id:this._id,data:r}),this._enqueuedOperations.set(this._id++,n)})}get ready(){return this.postToDecoder("ready")}async free(){await this.postToDecoder("free").finally(()=>{this.terminate()})}async reset(){await this.postToDecoder("reset")}};var ro=(t,e)=>{Object.defineProperty(t,"name",{value:e})};var Q=Symbol,ca=", ",T=(()=>{let t="front",e="side",r="rear",n="left",o="center",i="right";return["",t+" ",e+" ",r+" "].map(s=>[[n,i],[n,i,o],[n,o,i],[o,n,i],[o]].flatMap(a=>a.map(c=>s+c).join(ca)))})(),We="LFE",ft="monophonic (mono)",pt="stereo",Or="surround",J=(t,...e)=>`${[ft,pt,`linear ${Or}`,"quadraphonic",`5.0 ${Or}`,`5.1 ${Or}`,`6.1 ${Or}`,`7.1 ${Or}`][t-1]} (${e.join(ca)})`,Nr=[ft,J(2,T[0][0]),J(3,T[0][2]),J(4,T[1][0],T[3][0]),J(5,T[1][2],T[3][0]),J(6,T[1][2],T[3][0],We),J(7,T[1][2],T[2][0],T[3][4],We),J(8,T[1][2],T[2][0],T[3][0],We)],la=192e3,da=176400,no=96e3,oo=88200,ua=64e3,ht=48e3,sr=44100,ar=32e3,cr=24e3,lr=22050,dr=16e3,io=12e3,so=11025,ur=8e3,ma=7350,Ne="absoluteGranulePosition",k="bandwidth",le="bitDepth",de="bitrate",Br=de+"Maximum",Vr=de+"Minimum",Ur=de+"Nominal",Xe="buffer",Gr=Xe+"Fullness",K="codec",ue=K+"Frames",Wr="coupledStreamCount",mr="crc",Xr=mr+"16",qr=mr+"32",q="data",C="description",qe="duration",fr="emphasis",Yr="hasOpusPadding",Me="header",yt="isContinuedPacket",Kr="isCopyrighted",xt="isFirstPage",jr="isHome",_e="isLastPage",Qe="isOriginal",Je="isPrivate",$r="isVbr",ve="layer",g="length",R="mode",Ze=R+"Extension",ao="mpeg",et=ao+"Version",Qr="numberAACFrames",Jr="outputGain",kt="preSkip",Zr="profile",co=Q(),tt="protection",zi="rawData",Te="segments",D="subarray",gt="version",Dt="vorbis",en=Dt+"Comments",pr=Dt+"Setup",lo="block",tn=lo+"ingStrategy",uo=Q(),rt=lo+"Size",vt=lo+"size0",bt=lo+"size1",rn=Q(),mo="channel",nt=mo+"MappingFamily",nn=mo+"MappingTable",me=mo+"Mode",on=Q(),E=mo+"s",fa="copyright",sn=fa+"Id",an=fa+"IdStart",ot="frame",it=ot+"Count",be=ot+"Length",fo="Number",st=ot+fo,Ye=ot+"Padding",I=ot+"Size",pa="Rate",cn="inputSample"+pa,Ei="page",Ht=Ei+"Checksum",hr=Q(),St=Ei+"SegmentTable",re=Ei+"Sequence"+fo,Ci="sample",ln=Ci+fo,H=Ci+pa,Ke=Q(),O=Ci+"s",po="stream",dn=po+"Count",un=po+"Info",je=po+"Serial"+fo,Ti=po+"StructureVersion",Pi="total",Ot=Pi+"BytesOut",Nt=Pi+"Duration",Bt=Pi+"Samples",B=Q(),Pe=Q(),mn=Q(),Mt=Q(),Be=Q(),ho=Q(),Fi=Q(),_t=Q(),G=Q(),Fe=Q(),Ie=Q(),$e=Q(),At=Q(),yo=Q(),Ve=Q(),Ue=Q(),Re=Q(),xo=Q(),fe=Uint8Array,wt=DataView,W="reserved",pe="bad",yr="free",fn="none",go="16bit CRC";var Ii=(t,e,r)=>{for(let n=0;n<t[g];n++){let o=e(n);for(let i=8;i>0;i--)o=r(o);t[n]=o}return t},Ll=Ii(new fe(256),t=>t,t=>t&128?7^t<<1:t<<1),Z=[Ii(new Uint16Array(256),t=>t<<8,t=>t<<1^(t&32768?32773:0))],ee=[Ii(new Uint32Array(256),t=>t,t=>t>>>1^(t&1)*3988292384)];for(let t=0;t<15;t++){Z.push(new Uint16Array(256)),ee.push(new Uint32Array(256));for(let e=0;e<=255;e++)Z[t+1][e]=Z[0][Z[t][e]>>>8]^Z[t][e]<<8,ee[t+1][e]=ee[t][e]>>>8^ee[0][ee[t][e]&255]}var ya=t=>{let e=0,r=t[g];for(let n=0;n!==r;n++)e=Ll[e^t[n]];return e},xa=t=>{let e=t[g],r=e-16,n=0,o=0;for(;o<=r;)n^=t[o++]<<8|t[o++],n=Z[15][n>>8]^Z[14][n&255]^Z[13][t[o++]]^Z[12][t[o++]]^Z[11][t[o++]]^Z[10][t[o++]]^Z[9][t[o++]]^Z[8][t[o++]]^Z[7][t[o++]]^Z[6][t[o++]]^Z[5][t[o++]]^Z[4][t[o++]]^Z[3][t[o++]]^Z[2][t[o++]]^Z[1][t[o++]]^Z[0][t[o++]];for(;o!==e;)n=(n&255)<<8^Z[0][n>>8^t[o++]];return n},ga=t=>{let e=t[g],r=e-16,n=0,o=0;for(;o<=r;)n=ee[15][(t[o++]^n)&255]^ee[14][(t[o++]^n>>>8)&255]^ee[13][(t[o++]^n>>>16)&255]^ee[12][t[o++]^n>>>24]^ee[11][t[o++]]^ee[10][t[o++]]^ee[9][t[o++]]^ee[8][t[o++]]^ee[7][t[o++]]^ee[6][t[o++]]^ee[5][t[o++]]^ee[4][t[o++]]^ee[3][t[o++]]^ee[2][t[o++]]^ee[1][t[o++]]^ee[0][t[o++]];for(;o!==e;)n=ee[0][(n^t[o++])&255]^n>>>8;return n^-1},hn=(...t)=>{let e=new fe(t.reduce((r,n)=>r+n[g],0));return t.reduce((r,n)=>(e.set(n,r),r+n[g]),0),e},Ae=t=>String.fromCharCode(...t),ha=[0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15],pn=t=>ha[t&15]<<4|ha[t>>4],vo=class{constructor(e){this._data=e,this._pos=e[g]*8}set position(e){this._pos=e}get position(){return this._pos}read(e){let r=Math.floor(this._pos/8),n=this._pos%8;return this._pos-=e,(pn(this._data[r-1])<<8)+pn(this._data[r])>>7-n&255}},va=(t,e)=>{try{return t.getBigInt64(e,!0)}catch{let r=t.getUint8(e+7)&128?-1:1,n=t.getUint32(e,!0),o=t.getUint32(e+4,!0);return r===-1&&(n=~n+1,o=~o+1),o>1048575&&console.warn("This platform does not support BigInt"),r*(n+o*2**32)}};var yn=class{constructor(e,r){this._onCodecHeader=e,this._onCodecUpdate=r,this[Ve]()}[Ue](){this._isEnabled=!0}[Ve](){this._headerCache=new Map,this._codecUpdateData=new WeakMap,this._codecHeaderSent=!1,this._codecShouldUpdate=!1,this._bitrate=null,this._isEnabled=!1}[yo](e,r){if(this._onCodecUpdate){this._bitrate!==e&&(this._bitrate=e,this._codecShouldUpdate=!0);let n=this._codecUpdateData.get(this._headerCache.get(this._currentHeader));this._codecShouldUpdate&&n&&this._onCodecUpdate({bitrate:e,...n},r),this._codecShouldUpdate=!1}}[G](e){let r=this._headerCache.get(e);return r&&this._updateCurrentHeader(e),r}[Fe](e,r,n){this._isEnabled&&(this._codecHeaderSent||(this._onCodecHeader({...r}),this._codecHeaderSent=!0),this._updateCurrentHeader(e),this._headerCache.set(e,r),this._codecUpdateData.set(r,n))}_updateCurrentHeader(e){this._onCodecUpdate&&e!==this._currentHeader&&(this._codecShouldUpdate=!0,this._currentHeader=e)}};var ie=new WeakMap,ae=new WeakMap;var he=class{constructor(e,r){this._codecParser=e,this._headerCache=r}*[Fi](){let e;do{if(e=yield*this.Frame[Ie](this._codecParser,this._headerCache,0),e)return e;this._codecParser[Pe](1)}while(!0)}*[_t](e){let r=yield*this[Fi](),n=ae.get(r)[g];if(e||this._codecParser._flushing||(yield*this.Header[G](this._codecParser,this._headerCache,n)))return this._headerCache[Ue](),this._codecParser[Pe](n),this._codecParser[Mt](r),r;this._codecParser[Be](`Missing ${ot} at ${n} bytes from current position.`,`Dropping current ${ot} and trying again.`),this._headerCache[Ve](),this._codecParser[Pe](1)}};var Vt=class{constructor(e,r){ae.set(this,{[Me]:e}),this[q]=r}};var we=class extends Vt{static*[Ie](e,r,n,o,i){let s=yield*e[G](n,o,i);if(s){let a=ie.get(s)[be],c=ie.get(s)[O],l=(yield*n[B](a,i))[D](0,a);return new r(s,l,c)}else return null}constructor(e,r,n){super(e,r),this[Me]=e,this[O]=n,this[qe]=n/e[H]*1e3,this[st]=null,this[Ot]=null,this[Bt]=null,this[Nt]=null,ae.get(this)[g]=r[g]}};var Ri="unsynchronizationFlag",ki="extendedHeaderFlag",Di="experimentalFlag",Hi="footerPresent",xn=class t{static*getID3v2Header(e,r,n){let i={},s=yield*e[B](3,n);if(s[0]!==73||s[1]!==68||s[2]!==51||(s=yield*e[B](10,n),i[gt]=`id3v2.${s[3]}.${s[4]}`,s[5]&15)||(i[Ri]=!!(s[5]&128),i[ki]=!!(s[5]&64),i[Di]=!!(s[5]&32),i[Hi]=!!(s[5]&16),s[6]&128||s[7]&128||s[8]&128||s[9]&128))return null;let a=s[6]<<21|s[7]<<14|s[8]<<7|s[9];return i[g]=10+a,new t(i)}constructor(e){this[gt]=e[gt],this[Ri]=e[Ri],this[ki]=e[ki],this[Di]=e[Di],this[Hi]=e[Hi],this[g]=e[g]}};var Le=class{constructor(e){ie.set(this,e),this[le]=e[le],this[de]=null,this[E]=e[E],this[me]=e[me],this[H]=e[H]}};var Aa={0:[yr,yr,yr,yr,yr],16:[32,32,32,32,8],240:[pe,pe,pe,pe,pe]},bo=(t,e,r)=>8*((t+r)%e+e)*(1<<(t+r)/e)-8*e*(e/8|0);for(let t=2;t<15;t++)Aa[t<<4]=[t*32,bo(t,4,0),bo(t,4,-1),bo(t,8,4),bo(t,8,0)];var zl=0,El=1,Cl=2,Tl=3,ba=4,So="bands ",Mo=" to 31",Sa={0:So+4+Mo,16:So+8+Mo,32:So+12+Mo,48:So+16+Mo},Ut="bitrateIndex",gn="v2",zo="v1",_o="Intensity stereo ",Ao=", MS stereo ",wo="on",Lo="off",Pl={0:_o+Lo+Ao+Lo,16:_o+wo+Ao+Lo,32:_o+Lo+Ao+wo,48:_o+wo+Ao+wo},Oi={0:{[C]:W},2:{[C]:"Layer III",[Ye]:1,[Ze]:Pl,[zo]:{[Ut]:Cl,[O]:1152},[gn]:{[Ut]:ba,[O]:576}},4:{[C]:"Layer II",[Ye]:1,[Ze]:Sa,[O]:1152,[zo]:{[Ut]:El},[gn]:{[Ut]:ba}},6:{[C]:"Layer I",[Ye]:4,[Ze]:Sa,[O]:384,[zo]:{[Ut]:zl},[gn]:{[Ut]:Tl}}},Ni="MPEG Version ",Ma="ISO/IEC ",Fl={0:{[C]:`${Ni}2.5 (later extension of MPEG 2)`,[ve]:gn,[H]:{0:so,4:io,8:ur,12:W}},8:{[C]:W},16:{[C]:`${Ni}2 (${Ma}13818-3)`,[ve]:gn,[H]:{0:lr,4:cr,8:dr,12:W}},24:{[C]:`${Ni}1 (${Ma}11172-3)`,[ve]:zo,[H]:{0:sr,4:ht,8:ar,12:W}},length:g},Il={0:go,1:fn},Rl={0:fn,1:"50/15 ms",2:W,3:"CCIT J.17"},_a={0:{[E]:2,[C]:pt},64:{[E]:2,[C]:"joint "+pt},128:{[E]:2,[C]:"dual channel"},192:{[E]:1,[C]:ft}},Gt=class t extends Le{static*[G](e,r,n){let o={},i=yield*xn.getID3v2Header(e,r,n);i&&(yield*e[B](i[g],n),e[Pe](i[g]));let s=yield*e[B](4,n),a=Ae(s[D](0,4)),c=r[G](a);if(c)return new t(c);if(s[0]!==255||s[1]<224)return null;let l=Fl[s[1]&24];if(l[C]===W)return null;let d=s[1]&6;if(Oi[d][C]===W)return null;let u={...Oi[d],...Oi[d][l[ve]]};if(o[et]=l[C],o[ve]=u[C],o[O]=u[O],o[tt]=Il[s[1]&1],o[g]=4,o[de]=Aa[s[2]&240][u[Ut]],o[de]===pe||(o[H]=l[H][s[2]&12],o[H]===W)||(o[Ye]=s[2]&2&&u[Ye],o[Je]=!!(s[2]&1),o[be]=Math.floor(125*o[de]*o[O]/o[H]+o[Ye]),!o[be]))return null;let m=s[3]&192;if(o[me]=_a[m][C],o[E]=_a[m][E],o[Ze]=u[Ze][s[3]&48],o[Kr]=!!(s[3]&8),o[Qe]=!!(s[3]&4),o[fr]=Rl[s[3]&3],o[fr]===W)return null;o[le]=16;{let{length:f,frameLength:h,samples:y,...p}=o;r[Fe](a,o,p)}return new t(o)}constructor(e){super(e),this[de]=e[de],this[fr]=e[fr],this[Ye]=e[Ye],this[Kr]=e[Kr],this[Qe]=e[Qe],this[Je]=e[Je],this[ve]=e[ve],this[Ze]=e[Ze],this[et]=e[et],this[tt]=e[tt]}};var vn=class t extends we{static*[Ie](e,r,n){return yield*super[Ie](Gt,t,e,r,n)}constructor(e,r,n){super(e,r,n)}};var bn=class extends he{constructor(e,r,n){super(e,r),this.Frame=vn,this.Header=Gt,n(this[K])}get[K](){return ao}*[$e](){return yield*this[_t]()}};var kl={0:"MPEG-4",8:"MPEG-2"},Dl={0:"valid",2:pe,4:pe,6:pe},Hl={0:go,1:fn},Ol={0:"AAC Main",64:"AAC LC (Low Complexity)",128:"AAC SSR (Scalable Sample Rate)",192:"AAC LTP (Long Term Prediction)"},Nl={0:no,4:oo,8:ua,12:ht,16:sr,20:ar,24:cr,28:lr,32:dr,36:io,40:so,44:ur,48:ma,52:W,56:W,60:"frequency is written explicitly"},wa={0:{[E]:0,[C]:"Defined in AOT Specific Config"},64:{[E]:1,[C]:ft},128:{[E]:2,[C]:J(2,T[0][0])},192:{[E]:3,[C]:J(3,T[1][3])},256:{[E]:4,[C]:J(4,T[1][3],T[3][4])},320:{[E]:5,[C]:J(5,T[1][3],T[3][0])},384:{[E]:6,[C]:J(6,T[1][3],T[3][0],We)},448:{[E]:8,[C]:J(8,T[1][3],T[2][0],T[3][0],We)}},Wt=class t extends Le{static*[G](e,r,n){let o={},i=yield*e[B](7,n),s=Ae([i[0],i[1],i[2],i[3]&252|i[6]&3]),a=r[G](s);if(a)Object.assign(o,a);else{if(i[0]!==255||i[1]<240||(o[et]=kl[i[1]&8],o[ve]=Dl[i[1]&6],o[ve]===pe))return null;let l=i[1]&1;o[tt]=Hl[l],o[g]=l?7:9,o[co]=i[2]&192,o[Ke]=i[2]&60;let d=i[2]&2;if(o[Zr]=Ol[o[co]],o[H]=Nl[o[Ke]],o[H]===W)return null;o[Je]=!!d,o[on]=(i[2]<<8|i[3])&448,o[me]=wa[o[on]][C],o[E]=wa[o[on]][E],o[Qe]=!!(i[3]&32),o[jr]=!!(i[3]&8),o[sn]=!!(i[3]&8),o[an]=!!(i[3]&4),o[le]=16,o[O]=1024,o[Qr]=i[6]&3;{let{length:u,channelModeBits:m,profileBits:f,sampleRateBits:h,frameLength:y,samples:p,numberAACFrames:x,...M}=o;r[Fe](s,o,M)}}if(o[be]=(i[3]<<11|i[4]<<3|i[5]>>5)&8191,!o[be])return null;let c=(i[5]<<6|i[6]>>2)&2047;return o[Gr]=c===2047?"VBR":c,new t(o)}constructor(e){super(e),this[sn]=e[sn],this[an]=e[an],this[Gr]=e[Gr],this[jr]=e[jr],this[Qe]=e[Qe],this[Je]=e[Je],this[ve]=e[ve],this[g]=e[g],this[et]=e[et],this[Qr]=e[Qr],this[Zr]=e[Zr],this[tt]=e[tt]}get audioSpecificConfig(){let e=ie.get(this),r=e[co]+64<<5|e[Ke]<<5|e[on]>>3,n=new fe(2);return new wt(n[Xe]).setUint16(0,r,!1),n}};var Sn=class t extends we{static*[Ie](e,r,n){return yield*super[Ie](Wt,t,e,r,n)}constructor(e,r,n){super(e,r,n)}};var Mn=class extends he{constructor(e,r,n){super(e,r),this.Frame=Sn,this.Header=Wt,n(this[K])}get[K](){return"aac"}*[$e](){return yield*this[_t]()}};var Lt=class t extends we{static _getFrameFooterCrc16(e){return(e[e[g]-2]<<8)+e[e[g]-1]}static[xo](e){let r=t._getFrameFooterCrc16(e),n=xa(e[D](0,-2));return r===n}constructor(e,r,n){r[un]=n,r[Xr]=t._getFrameFooterCrc16(e),super(r,e,ie.get(r)[O])}};var La="get from STREAMINFO metadata block",Bl={0:"Fixed",1:"Variable"},za={0:W,16:192};for(let t=2;t<16;t++)za[t<<4]=t<6?576*2**(t-2):2**t;var Vl={0:La,1:oo,2:da,3:la,4:ur,5:dr,6:lr,7:cr,8:ar,9:sr,10:ht,11:no,15:pe},Ul={0:{[E]:1,[C]:ft},16:{[E]:2,[C]:J(2,T[0][0])},32:{[E]:3,[C]:J(3,T[0][1])},48:{[E]:4,[C]:J(4,T[1][0],T[3][0])},64:{[E]:5,[C]:J(5,T[1][1],T[3][0])},80:{[E]:6,[C]:J(6,T[1][1],We,T[3][0])},96:{[E]:7,[C]:J(7,T[1][1],We,T[3][4],T[2][0])},112:{[E]:8,[C]:J(8,T[1][1],We,T[3][0],T[2][0])},128:{[E]:2,[C]:`${pt} (left, diff)`},144:{[E]:2,[C]:`${pt} (diff, right)`},160:{[E]:2,[C]:`${pt} (avg, diff)`},176:W,192:W,208:W,224:W,240:W},Gl={0:La,2:8,4:12,6:W,8:16,10:20,12:24,14:W},zt=class t extends Le{static _decodeUTF8Int(e){if(e[0]>254)return null;if(e[0]<128)return{value:e[0],length:1};let r=1;for(let s=64;s&e[0];s>>=1)r++;let n=r-1,o=0,i=0;for(;n>0;i+=6,n--){if((e[n]&192)!==128)return null;o|=(e[n]&63)<<i}return o|=(e[n]&127>>r)<<i,{value:o,length:r}}static[Re](e,r){let n={[B]:function*(){return e}};return t[G](n,r,0).next().value}static*[G](e,r,n){let o=yield*e[B](6,n);if(o[0]!==255||!(o[1]===248||o[1]===249))return null;let i={},s=Ae(o[D](0,4)),a=r[G](s);if(a)Object.assign(i,a);else{if(i[uo]=o[1]&1,i[tn]=Bl[i[uo]],i[rn]=o[2]&240,i[Ke]=o[2]&15,i[rt]=za[i[rn]],i[rt]===W||(i[H]=Vl[i[Ke]],i[H]===pe)||o[3]&1)return null;let l=Ul[o[3]&240];if(l===W||(i[E]=l[E],i[me]=l[C],i[le]=Gl[o[3]&14],i[le]===W))return null}i[g]=5,o=yield*e[B](i[g]+8,n);let c=t._decodeUTF8Int(o[D](4));if(!c||(i[uo]?i[ln]=c.value:i[st]=c.value,i[g]+=c[g],i[rn]===96?(o[g]<i[g]&&(o=yield*e[B](i[g],n)),i[rt]=o[i[g]-1]+1,i[g]+=1):i[rn]===112&&(o[g]<i[g]&&(o=yield*e[B](i[g],n)),i[rt]=(o[i[g]-1]<<8)+o[i[g]]+1,i[g]+=2),i[O]=i[rt],i[Ke]===12?(o[g]<i[g]&&(o=yield*e[B](i[g],n)),i[H]=o[i[g]-1]*1e3,i[g]+=1):i[Ke]===13?(o[g]<i[g]&&(o=yield*e[B](i[g],n)),i[H]=(o[i[g]-1]<<8)+o[i[g]],i[g]+=2):i[Ke]===14&&(o[g]<i[g]&&(o=yield*e[B](i[g],n)),i[H]=((o[i[g]-1]<<8)+o[i[g]])*10,i[g]+=2),o[g]<i[g]&&(o=yield*e[B](i[g],n)),i[mr]=o[i[g]-1],i[mr]!==ya(o[D](0,i[g]-1))))return null;if(!a){let{blockingStrategyBits:l,frameNumber:d,sampleNumber:u,samples:m,sampleRateBits:f,blockSizeBits:h,crc:y,length:p,...x}=i;r[Fe](s,i,x)}return new t(i)}constructor(e){super(e),this[Xr]=null,this[tn]=e[tn],this[rt]=e[rt],this[st]=e[st],this[ln]=e[ln],this[un]=null}};var Wl=2,Xl=512*1024,Xt=class extends he{constructor(e,r,n){super(e,r),this.Frame=Lt,this.Header=zt,n(this[K])}get[K](){return"flac"}*_getNextFrameSyncOffset(e){let r=yield*this._codecParser[B](2,0),n=r[g]-2;for(;e<n;){if(r[e]===255){let i=r[e+1];if(i===248||i===249)break;i!==255&&e++}e++}return e}*[$e](){do{let e=yield*zt[G](this._codecParser,this._headerCache,0);if(e){let r=ie.get(e)[g]+Wl;for(;r<=Xl;){if(this._codecParser._flushing||(yield*zt[G](this._codecParser,this._headerCache,r))){let n=yield*this._codecParser[B](r);if(this._codecParser._flushing||(n=n[D](0,r)),Lt[xo](n)){let o=new Lt(n,e);return this._headerCache[Ue](),this._codecParser[Pe](r),this._codecParser[Mt](o),o}}r=yield*this._getNextFrameSyncOffset(r+1)}this._codecParser[Be](`Unable to sync FLAC frame after searching ${r} bytes.`),this._codecParser[Pe](r)}else this._codecParser[Pe](yield*this._getNextFrameSyncOffset(1))}while(!0)}[At](e){return e[re]===0?(this._headerCache[Ue](),this._streamInfo=e[q][D](13)):e[re]===1||(e[ue]=ae.get(e)[Te].map(r=>{let n=zt[Re](r,this._headerCache);if(n)return new Lt(r,n,this._streamInfo);this._codecParser[Be]("Failed to parse Ogg FLAC frame","Skipping invalid FLAC frame")}).filter(r=>!!r)),e}};var qt=class t{static*[G](e,r,n){let o={},i=yield*e[B](28,n);if(i[0]!==79||i[1]!==103||i[2]!==103||i[3]!==83||(o[Ti]=i[4],i[5]&248))return null;o[_e]=!!(i[5]&4),o[xt]=!!(i[5]&2),o[yt]=!!(i[5]&1);let a=new wt(fe.from(i[D](0,28))[Xe]);o[Ne]=va(a,6),o[je]=a.getInt32(14,!0),o[re]=a.getInt32(18,!0),o[Ht]=a.getInt32(22,!0);let c=i[26];o[g]=c+27,i=yield*e[B](o[g],n),o[be]=0,o[St]=[],o[hr]=fe.from(i[D](27,o[g]));for(let l=0,d=0;l<c;l++){let u=o[hr][l];o[be]+=u,d+=u,(u!==255||l===c-1)&&(o[St].push(d),d=0)}return new t(o)}constructor(e){ie.set(this,e),this[Ne]=e[Ne],this[yt]=e[yt],this[xt]=e[xt],this[_e]=e[_e],this[St]=e[St],this[re]=e[re],this[Ht]=e[Ht],this[je]=e[je]}};var _n=class t extends Vt{static*[Ie](e,r,n){let o=yield*qt[G](e,r,n);if(o){let i=ie.get(o)[be],s=ie.get(o)[g],a=s+i,c=(yield*e[B](a,0))[D](0,a),l=c[D](s,a);return new t(o,l,c)}else return null}constructor(e,r,n){super(e,r),ae.get(this)[g]=n[g],this[ue]=[],this[zi]=n,this[Ne]=e[Ne],this[qr]=e[Ht],this[qe]=0,this[yt]=e[yt],this[xt]=e[xt],this[_e]=e[_e],this[re]=e[re],this[O]=0,this[je]=e[je]}};var xr=class extends we{constructor(e,r,n){super(r,e,n)}};var Ea={0:Nr.slice(0,2),1:Nr},ke="SILK-only",ce="CELT-only",Eo="Hybrid",Et="narrowband",Co="medium-band",Ct="wideband",gr="super-wideband",vr="fullband",ql={0:{[R]:ke,[k]:Et,[I]:10},8:{[R]:ke,[k]:Et,[I]:20},16:{[R]:ke,[k]:Et,[I]:40},24:{[R]:ke,[k]:Et,[I]:60},32:{[R]:ke,[k]:Co,[I]:10},40:{[R]:ke,[k]:Co,[I]:20},48:{[R]:ke,[k]:Co,[I]:40},56:{[R]:ke,[k]:Co,[I]:60},64:{[R]:ke,[k]:Ct,[I]:10},72:{[R]:ke,[k]:Ct,[I]:20},80:{[R]:ke,[k]:Ct,[I]:40},88:{[R]:ke,[k]:Ct,[I]:60},96:{[R]:Eo,[k]:gr,[I]:10},104:{[R]:Eo,[k]:gr,[I]:20},112:{[R]:Eo,[k]:vr,[I]:10},120:{[R]:Eo,[k]:vr,[I]:20},128:{[R]:ce,[k]:Et,[I]:2.5},136:{[R]:ce,[k]:Et,[I]:5},144:{[R]:ce,[k]:Et,[I]:10},152:{[R]:ce,[k]:Et,[I]:20},160:{[R]:ce,[k]:Ct,[I]:2.5},168:{[R]:ce,[k]:Ct,[I]:5},176:{[R]:ce,[k]:Ct,[I]:10},184:{[R]:ce,[k]:Ct,[I]:20},192:{[R]:ce,[k]:gr,[I]:2.5},200:{[R]:ce,[k]:gr,[I]:5},208:{[R]:ce,[k]:gr,[I]:10},216:{[R]:ce,[k]:gr,[I]:20},224:{[R]:ce,[k]:vr,[I]:2.5},232:{[R]:ce,[k]:vr,[I]:5},240:{[R]:ce,[k]:vr,[I]:10},248:{[R]:ce,[k]:vr,[I]:20}},br=class t extends Le{static[Re](e,r,n){let o={};if(o[E]=e[9],o[nt]=e[18],o[g]=o[nt]!==0?21+o[E]:19,e[g]<o[g])throw new Error("Out of data while inside an Ogg Page");let i=r[0]&3,s=i===3?2:1,a=Ae(e[D](0,o[g]))+Ae(r[D](0,s)),c=n[G](a);if(c)return new t(c);if(a.substr(0,8)!=="OpusHead"||e[8]!==1)return null;o[q]=fe.from(e[D](0,o[g]));let l=new wt(o[q][Xe]);if(o[le]=16,o[kt]=l.getUint16(10,!0),o[cn]=l.getUint32(12,!0),o[H]=ht,o[Jr]=l.getInt16(16,!0),o[nt]in Ea&&(o[me]=Ea[o[nt]][o[E]-1],!o[me]))return null;o[nt]!==0&&(o[dn]=e[19],o[Wr]=e[20],o[nn]=[...e[D](21,o[E]+21)]);let d=ql[248&r[0]];switch(o[R]=d[R],o[k]=d[k],o[I]=d[I],i){case 0:o[it]=1;break;case 1:case 2:o[it]=2;break;case 3:o[$r]=!!(128&r[1]),o[Yr]=!!(64&r[1]),o[it]=63&r[1];break;default:return null}{let{length:u,data:m,channelMappingFamily:f,...h}=o;n[Fe](a,o,h)}return new t(o)}constructor(e){super(e),this[q]=e[q],this[k]=e[k],this[nt]=e[nt],this[nn]=e[nn],this[Wr]=e[Wr],this[it]=e[it],this[I]=e[I],this[Yr]=e[Yr],this[cn]=e[cn],this[$r]=e[$r],this[R]=e[R],this[Jr]=e[Jr],this[kt]=e[kt],this[dn]=e[dn]}};var An=class extends he{constructor(e,r,n){super(e,r),this.Frame=xr,this.Header=br,n(this[K]),this._identificationHeader=null,this._preSkipRemaining=null}get[K](){return"opus"}[At](e){return e[re]===0?(this._headerCache[Ue](),this._identificationHeader=e[q]):e[re]===1||(e[ue]=ae.get(e)[Te].map(r=>{let n=br[Re](this._identificationHeader,r,this._headerCache);if(n){this._preSkipRemaining===null&&(this._preSkipRemaining=n[kt]);let o=n[I]*n[it]/1e3*n[H];return this._preSkipRemaining>0&&(this._preSkipRemaining-=o,o=this._preSkipRemaining<0?-this._preSkipRemaining:0),new xr(r,n,o)}this._codecParser[ho]("Failed to parse Ogg Opus Header","Not a valid Ogg Opus file")})),e}};var Sr=class extends we{constructor(e,r,n){super(r,e,n)}};var Bi={};for(let t=0;t<8;t++)Bi[t+6]=2**(6+t);var wn=class t extends Le{static[Re](e,r,n,o){if(e[g]<30)throw new Error("Out of data while inside an Ogg Page");let i=Ae(e[D](0,30)),s=r[G](i);if(s)return new t(s);let a={[g]:30};if(i.substr(0,7)!=="vorbis")return null;a[q]=fe.from(e[D](0,30));let c=new wt(a[q][Xe]);if(a[gt]=c.getUint32(7,!0),a[gt]!==0||(a[E]=e[11],a[me]=Nr[a[E]-1]||"application defined",a[H]=c.getUint32(12,!0),a[Br]=c.getInt32(16,!0),a[Ur]=c.getInt32(20,!0),a[Vr]=c.getInt32(24,!0),a[bt]=Bi[(e[28]&240)>>4],a[vt]=Bi[e[28]&15],a[vt]>a[bt])||e[29]!==1)return null;a[le]=32,a[pr]=o,a[en]=n;{let{length:l,data:d,version:u,vorbisSetup:m,vorbisComments:f,...h}=a;r[Fe](i,a,h)}return new t(a)}constructor(e){super(e),this[Br]=e[Br],this[Vr]=e[Vr],this[Ur]=e[Ur],this[vt]=e[vt],this[bt]=e[bt],this[q]=e[q],this[en]=e[en],this[pr]=e[pr]}};var Ln=class extends he{constructor(e,r,n){super(e,r),this.Frame=Sr,n(this[K]),this._identificationHeader=null,this._setupComplete=!1,this._prevBlockSize=null}get[K](){return Dt}[At](e){e[ue]=[];for(let r of ae.get(e)[Te])if(r[0]===1)this._headerCache[Ue](),this._identificationHeader=e[q],this._setupComplete=!1;else if(r[0]===3)this._vorbisComments=r;else if(r[0]===5)this._vorbisSetup=r,this._mode=this._parseSetupHeader(r),this._setupComplete=!0;else if(this._setupComplete){let n=wn[Re](this._identificationHeader,this._headerCache,this._vorbisComments,this._vorbisSetup);n?e[ue].push(new Sr(r,n,this._getSamples(r,n))):this._codecParser[logError]("Failed to parse Ogg Vorbis Header","Not a valid Ogg Vorbis file")}return e}_getSamples(e,r){let o=this._mode.blockFlags[e[0]>>1&this._mode.mask]?r[bt]:r[vt],i=this._prevBlockSize===null?0:(this._prevBlockSize+o)/4;return this._prevBlockSize=o,i}_parseSetupHeader(e){let r=new vo(e),n={count:0,blockFlags:[]};for(;(r.read(1)&1)!==1;);let o;for(;n.count<64&&r.position>0;){pn(r.read(8));let i=0;for(;r.read(8)===0&&i++<3;);if(i===4)o=r.read(7),n.blockFlags.unshift(o&1),r.position+=6,n.count++;else{((pn(o)&126)>>1)+1!==n.count&&this._codecParser[Be]("vorbis derived mode count did not match actual mode count");break}}return n.mask=(1<<Math.log2(n.count))-1,n}};var Vi=class{constructor(e,r,n){this._codecParser=e,this._headerCache=r,this._onCodec=n,this._continuedPacket=new fe,this._codec=null,this._isSupported=null,this._previousAbsoluteGranulePosition=null}get[K](){return this._codec||""}_updateCodec(e,r){this._codec!==e&&(this._headerCache[Ve](),this._parser=new r(this._codecParser,this._headerCache,this._onCodec),this._codec=e)}_checkCodecSupport({data:e}){let r=Ae(e[D](0,8));switch(r){case"fishead\0":return!1;case"OpusHead":return this._updateCodec("opus",An),!0;case(/^\x7fFLAC/.test(r)&&r):return this._updateCodec("flac",Xt),!0;case(/^\x01vorbis/.test(r)&&r):return this._updateCodec(Dt,Ln),!0;default:return!1}}_checkPageSequenceNumber(e){e[re]!==this._pageSequenceNumber+1&&this._pageSequenceNumber>1&&e[re]>1&&this._codecParser[Be]("Unexpected gap in Ogg Page Sequence Number.",`Expected: ${this._pageSequenceNumber+1}, Got: ${e[re]}`),this._pageSequenceNumber=e[re]}_parsePage(e){this._isSupported===null&&(this._pageSequenceNumber=e[re],this._isSupported=this._checkCodecSupport(e)),this._checkPageSequenceNumber(e);let r=ae.get(e),n=ie.get(r[Me]),o=0;if(r[Te]=n[St].map(i=>e[q][D](o,o+=i)),this._continuedPacket[g]&&(r[Te][0]=hn(this._continuedPacket,r[Te][0]),this._continuedPacket=new fe),n[hr][n[hr][g]-1]===255&&(this._continuedPacket=hn(this._continuedPacket,r[Te].pop())),this._previousAbsoluteGranulePosition!==null&&(e[O]=Number(e[Ne]-this._previousAbsoluteGranulePosition)),this._previousAbsoluteGranulePosition=e[Ne],this._isSupported){let i=this._parser[At](e);return this._codecParser[Mt](i),i}else return e}},zn=class extends he{constructor(e,r,n){super(e,r),this._onCodec=n,this.Frame=_n,this.Header=qt,this._streams=new Map,this._currentSerialNumber=null}get[K](){let e=this._streams.get(this._currentSerialNumber);return e?e.codec:""}*[$e](){let e=yield*this[_t](!0);this._currentSerialNumber=e[je];let r=this._streams.get(this._currentSerialNumber);return r||(r=new Vi(this._codecParser,this._headerCache,this._onCodec),this._streams.set(this._currentSerialNumber,r)),e[_e]&&this._streams.delete(this._currentSerialNumber),r._parsePage(e)}};var Ui=()=>{},En=class{constructor(e,{onCodec:r,onCodecHeader:n,onCodecUpdate:o,enableLogging:i=!1,enableFrameCRC32:s=!0}={}){this._inputMimeType=e,this._onCodec=r||Ui,this._onCodecHeader=n||Ui,this._onCodecUpdate=o,this._enableLogging=i,this._crc32=s?ga:Ui,this[Ve]()}get[K](){return this._parser?this._parser[K]:""}[Ve](){this._headerCache=new yn(this._onCodecHeader,this._onCodecUpdate),this._generator=this._getGenerator(),this._generator.next()}*flush(){this._flushing=!0;for(let e=this._generator.next();e.value;e=this._generator.next())yield e.value;this._flushing=!1,this[Ve]()}*parseChunk(e){for(let r=this._generator.next(e);r.value;r=this._generator.next())yield r.value}parseAll(e){return[...this.parseChunk(e),...this.flush()]}*_getGenerator(){if(this._inputMimeType.match(/aac/))this._parser=new Mn(this,this._headerCache,this._onCodec);else if(this._inputMimeType.match(/mpeg/))this._parser=new bn(this,this._headerCache,this._onCodec);else if(this._inputMimeType.match(/flac/))this._parser=new Xt(this,this._headerCache,this._onCodec);else if(this._inputMimeType.match(/ogg/))this._parser=new zn(this,this._headerCache,this._onCodec);else throw new Error(`Unsupported Codec ${mimeType}`);for(this._frameNumber=0,this._currentReadPosition=0,this._totalBytesIn=0,this._totalBytesOut=0,this._totalSamples=0,this._sampleRate=void 0,this._rawData=new Uint8Array(0);;){let e=yield*this._parser[$e]();e&&(yield e)}}*[B](e=0,r=0){let n;for(;this._rawData[g]<=e+r;){if(n=yield,this._flushing)return this._rawData[D](r);n&&(this._totalBytesIn+=n[g],this._rawData=hn(this._rawData,n))}return this._rawData[D](r)}[Pe](e){this._currentReadPosition+=e,this._rawData=this._rawData[D](e)}[mn](e){this._sampleRate=e[Me][H],e[Me][de]=e[qe]>0?Math.round(e[q][g]/e[qe])*8:0,e[st]=this._frameNumber++,e[Ot]=this._totalBytesOut,e[Bt]=this._totalSamples,e[Nt]=this._totalSamples/this._sampleRate*1e3,e[qr]=this._crc32(e[q]),this._headerCache[yo](e[Me][de],e[Nt]),this._totalBytesOut+=e[q][g],this._totalSamples+=e[O]}[Mt](e){if(e[ue]){if(e[_e]){let r=e[O];e[ue].forEach(n=>{let o=n[O];r<o&&(n[O]=r>0?r:0,n[qe]=n[O]/n[Me][H]*1e3),r-=o,this[mn](n)})}else e[O]=0,e[ue].forEach(r=>{e[O]+=r[O],this[mn](r)});e[qe]=e[O]/this._sampleRate*1e3||0,e[Bt]=this._totalSamples,e[Nt]=this._totalSamples/this._sampleRate*1e3||0,e[Ot]=this._totalBytesOut}else this[mn](e)}_log(e,r){if(this._enableLogging){let n=[`${K}: ${this[K]}`,`inputMimeType: ${this._inputMimeType}`,`readPosition: ${this._currentReadPosition}`,`totalBytesIn: ${this._totalBytesIn}`,`${Ot}: ${this._totalBytesOut}`],o=Math.max(...n.map(i=>i[g]));r.push(`--stats--${"-".repeat(o-9)}`,...n,"-".repeat(o)),e("codec-parser",r.reduce((i,s)=>i+`
4
+ `+s,""))}}[Be](...e){this._log(console.warn,e)}[ho](...e){this._log(console.error,e)}};var Ca=En;var To=ue;var Po=q;var Ta=Me;var Pa=_e;var Fa=pr;var Ia=Bt;function at(t){var e=e;function r(){}e={};function n(z){throw z}var o,i,s,a,c,l,d,u,m,f,h;function y(){var z=h.buffer;o=new Int8Array(z),i=new Int16Array(z),a=new Uint8Array(z),c=new Uint16Array(z),s=new Int32Array(z),l=new Uint32Array(z),d=new Float32Array(z),u=new Float64Array(z),m=new BigInt64Array(z),f=new BigUint64Array(z)}for(var p=z=>{for(var ze,Tr,$t=0,On=0,Nn=z.length,Bn=new Uint8Array((Nn*3>>2)-(z[Nn-2]=="=")-(z[Nn-1]=="="));$t<Nn;$t+=4,On+=3)ze=j[z.charCodeAt($t+1)],Tr=j[z.charCodeAt($t+2)],Bn[On]=j[z.charCodeAt($t)]<<2|ze>>4,Bn[On+1]=ze<<4|Tr>>2,Bn[On+2]=Tr<<6|j[z.charCodeAt($t+3)];return Bn},x=()=>n(""),M=()=>{},v={},S=z=>z(),b=()=>performance.now(),_=(z,ze)=>{if(v[z]&&(clearTimeout(v[z].id),delete v[z]),!ze)return 0;var Tr=setTimeout(()=>{delete v[z],S(()=>ws(z,b()))},ze);return v[z]={id:Tr,timeout_ms:ze},0},w=Math.atan,L=Math.cos,P=Math.exp,A=Math.log,N=Math.pow,U=Math.sin,V=z=>{var ze=a.length;return z>>>=0,!1},F=z=>{throw`exit(${z})`},j=new Uint8Array(123),ge=25;ge>=0;--ge)j[48+ge]=52+ge,j[65+ge]=ge,j[97+ge]=26+ge;j[43]=62,j[47]=63;var Tt={e:x,d:M,f:_,b:w,a:L,i:P,h:A,g:N,c:U,k:V,j:F};function Hn(z){Cr=z.n,vs=z.o,bs=z.p,Ss=z.q,Ms=z.r,_s=z.s,As=z.t,ws=z.v}var Cr,vs,bs,Ss,Ms,_s,As,ws;function wc(z){z.m()}at.wasm||Object.defineProperty(at,"wasm",{get:()=>String.raw`dynEncode012091253f87dì%nä= 4&¿nÝØä‘ÂLÚªã9ÚØ[äº\ ¼¡³R=}L]ŸÈÿ2 ÿù¶J1jj¡é,zäV|i¸Qk¹‡= 
5
5
  ¨¨Ÿ%‰€ýv²†±»ŸoúâLa:ê±ÊäÌÓ.÷؇ý×>àW>z¯°8¯ñ€\Ñós 9ˆ\§ôÊ@Ü (tÂø4° ¢7fqÓg²Jè6x[zç®&4=} p.(°tÍޖ™ã¾>÷CõË"*k?¿~ 7‚~H2ÛÜâ.ÏQä;Œ6{ÜãFÑá'DœD¤±°HQ>MínÎϕÎöʵ’Ñӓ…™Þ“‰Ž‘š†Š‚œÌP¼P¨Þˆ*X²E=M¦qíxMà ±=M̚ë4/<šgNO‰™/¢ ¢>ˆa~Ï®”ììììì0”ìœa笡çëOÓÇM Q9tùµyuéµµÞϒ/Ÿ±Óõò}E{òÓJ¹Û|· ôfÒ c’¬”Wêaûÿlʽp¹|)‘ÖEL–†¦ }‰ypÕSϹI†]¢ˆºãæ°ÿo¶7ÛRqš¾ÔÅEߨ‘]æˉwÚ{óç‰Vwó1¾”E­Øpˆàe"Æùû–¡Áª ‡ Ààð´Lõ›€ÎxEÓ¢N¦‘…9Ÿëùši&€ Ò§Ø!ÇFçS=MbäO?ß·™縪‡7ùa}5ðšûÕtsUŒþ£Kïg‡ˆN™¾)ø§\V0uSIö:ÌU4ж¯´Õn9ÔƒèE£ZƼ{hµmى¾6ÆžÑ+xñ´«„þ¸=M‚ߤ·å®«ïÆGFÝì|H?äE"þ!9«Æïpæ'][¯ù·£W÷O§&#aŸ‡x$qf=}ø ô bϗŸ×W÷LôožÝWQÕӎ)u †÷½èV|¥Gà¨Ö¸˜@Œê| ÇK5ò €A·Â9’CS2š¸‹¼¿,ä›Ý ÑÝy™!ÑR„%ÆÝÎ0Âv§ qTcó±hØÉã‰=}Z=}Ælü­ën¯ð(-°ÜwVχï.th¥í­‡S~SÏ»Z”ZÔZ
6
6
  3–BÌÛ¬•<éæO)ÎyÚ¯O*®uìÛ$öI¥Ý9ôø³\¤ò³Ù¹ÇP¸J׎y@ÔyOÇm—’ô½üœš¾|S?2àú¤F?½ûoo3ôž;<àáûܘ8‚ì²7ïë¨RäY¹|ÓºÌF,ƒÐ™-¸*\P!FJÒ8= o6HwLrúº”¶Ð۞\Ù¬o¢–9Iq„Ý.ôf¶Îȏ{Ī×N|Mfs…•¤ „ÉݖàŸâ§‘*+ã§­’ô¯î¬7ç×§ä)€Š!Z¨ƒÉž,Äp~ý·wsSGó—äs„E€\ýï鞧Ö:Ò'“Cç(_X$\¦½eҒ8$’X˜F|e‚•œíٙә‚†¡¤Û<ØÞÛ¸9‰¿ðÃÎ#b~× ‚4éîÿÏq
7
7
  ˜ód‡|0•wU‰—&®è·vh6¨—{Ú珁Ú18ә(ÓY‚\ƒ0¦= çˆèíß)Ø=} ˜[xü-v˜?N(Kk‘gš0}âډ´ð“†¬”œÕQNÍ¢usѳ=}. ëg…û= Í M—Bp'²¨ œx’4è@9t“§eݵ¾âð½ z?†‹Z¹FH'‰Ì¯¿<ŒK,üµ<{˜ ¶JãývåàÆeù0Ð"F¥ÃÒÞŽþԛÉvC›zl}„ðN’£ Í^ƒP%²¸FX»WÎêô¶…ŠäÉJ^gƒ×SÃã.žÄt*'ªG‘«ÒB<ÜӅ¿ºp­\àuV¯£›Åݑ½á–Þ ùߞ=}ÎÚ^‹Ÿÿí>¥!¨ â=M·? */¤"å)â·ÿîÿî*(%*›2[½"üríÔ4š’l½»a}¯CwpCÓèìGc-ã6®=M32†k?Êg­…–!So-™x›>³G+ã@ò,™ Áïƒá„åN0þŠÙ‚è.~È÷¡vTr¶‰­‚Æ[üB±º»ávëw¹{pÜºû"Aæ’±9Æ^¹³òïRIAy5GÂwÉfœ4@Tù|qý7†ðªwBL|ÔqŽ‘v!ª°|]KiÐJVQ5‰¸åõ§‡‡åŒ"H¼0e¬<óBîÚS€ÏUìHPÙA+çÉ'se†ÌNf°@ÈM,ð½egÖ¬x©“„‹û½2~«ŠÒ1;ֈ«…¯°4&90èE»Ó׺ç‚ʧJ<Æ¿&~Nu¼ãÙµ¢.UÇä(qQô^ö–·“%!É
@@ -138,7 +138,7 @@ KÙ:KµºKí{K]ûK£[KÚKóšKÓ½R׿ÿ'P^j9TîçmóœþL¿_o©×hÙtÙ
138
138
  ÁiŸ;ª•äÀž‡%Ёn= =M+W= ÓÖc[aS
139
139
  FÁð]Nô‡Ý'= “qr(¶ù¤nŒü«òÿ¿d&ÿ ÈõT4Þ=}z|ö ¿OW×SMtdH.τãRX&§o3ؘÜXÍ^œÊM–í£W´iâ]NüOå£S£Å·ƒç÷­˜Ý§½GÑU y¹¦ß§/6P0(Cúýb"þ¥°VٌÄᣈ’ÓÙ@¾YýòDŽŒ{òÃv?’EP©”=MBé­\ĽYäýRò øfâëEEf¼D+gC×úDZGÅÿ±Ç?TzÙ¡±†Ï€ÁÕ¯¦ð‰vZ’mT}Œ3x˘z×cºrÑM=M„ c-ɩԈ™7½wæc§Î»cû¾yf‡ÙWòŒÆÝÔc¥³ôØfƒ«Äñ·9‰ø%­g:y”^+{U]¤þ‚…[&fӁÏY낫‡Gªõ‡¹¦ÖŒðþ¬m„oÛø‘?/ÛS’.[S›9ÛùœC›…/û2”²Y£ÎÑ%/sy¢×ÌùJ­W6Oí\g0^JùêßÏ0í[Ü“'ÏÔ>žÀ-¿[ÔW?Y]±ž ØÙÃî<~ÎëR~Ìf¾Z—/×¼_á¾Þê+îoÐñ{Þ\e3K%©¹§íB¹§(c=}ËÈ·SzÔnf§èx}o\9öf|%Ýå¥~©‚Iǀ ü€ñY8}FfŸú@Rú1éþ3‚÷˂‹ótQøvœû|³Îaá,Óé>BG6Òê}—ÄJ|¶=}°Žˆöf6žõk¶ÌºHgN’j‡Ò{柾M;9·é—§WèO±›Ä3қËÒyt™ ;ù´ˆà©aš|—Ó^!ÝøûšÄ
140
140
  (VV¸ ÇÙcÏ>yoçz ÃvòG{3Þ£½šŠcמôŒ íŚé;°OÛ‰GØ<wÜW> rU]Žq­{û'ùÝír{*øï?t-ígùWÿ…&§] m}×ût¥‚Ë~ß&>&Õv!b#ÅÌ‚q¢µ|jŽÍüùÉ^Æ&™ôžþŸ~sIµ"“]d)uâ´‘ºvk Å\<͉ÿ­öꍽƒÂ
141
- ïBçϧmÙIólÜoëVbƒ¦¯éWÇû3`});var Sc={a:Ct};this.setModule=z=>{t.setModule(at,z)},this.getModule=()=>t.getModule(at),this.instantiate=()=>(this.getModule().then(z=>WebAssembly.instantiate(z,Sc)).then(z=>{let ze=z.exports;kn(ze),h=ze.l,y(),bc(ze),r()}),this.ready=new Promise(z=>{r=z}).then(()=>{this.HEAP=h.buffer,this.malloc=ys,this.free=Ss,this.create_decoder=zr,this.send_setup=xs,this.init_dsp=gs,this.decode_packets=vs,this.destroy_decoder=bs}),this)}function qt(){return this._init=()=>new this._WASMAudioDecoderCommon().instantiate(this._EmscriptenWASM,this._module).then(t=>{this._common=t,this._input=this._common.allocateTypedArray(this._inputSize,Uint8Array),this._firstPage=!0,this._inputLen=this._common.allocateTypedArray(1,Uint32Array),this._outputBufferPtr=this._common.allocateTypedArray(1,Uint32Array),this._channels=this._common.allocateTypedArray(1,Uint32Array),this._sampleRate=this._common.allocateTypedArray(1,Uint32Array),this._samplesDecoded=this._common.allocateTypedArray(1,Uint32Array);let e=256;this._errors=this._common.allocateTypedArray(e,Uint32Array),this._errorsLength=this._common.allocateTypedArray(1,Int32Array),this._frameNumber=0,this._inputBytes=0,this._outputSamples=0,this._decoder=this._common.wasm.create_decoder(this._input.ptr,this._inputLen.ptr,this._outputBufferPtr.ptr,this._channels.ptr,this._sampleRate.ptr,this._samplesDecoded.ptr,this._errors.ptr,this._errorsLength.ptr,e)}),Object.defineProperty(this,"ready",{enumerable:!0,get:()=>this._ready}),this.reset=()=>(this.free(),this._init()),this.free=()=>{this._common.wasm.destroy_decoder(this._decoder),this._common.free()},this.sendSetupHeader=t=>{this._input.buf.set(t),this._inputLen.buf[0]=t.length,this._common.wasm.send_setup(this._decoder,this._firstPage),this._firstPage=!1},this.initDsp=()=>{this._common.wasm.init_dsp(this._decoder)},this.decodePackets=t=>{let e=[],r=0,n=[];for(let o=0;o<t.length;o++){let i=t[o];this._input.buf.set(i),this._inputLen.buf[0]=i.length,this._common.wasm.decode_packets(this._decoder);let s=this._samplesDecoded.buf[0],a=[],c=new Uint32Array(this._common.wasm.HEAP,this._outputBufferPtr.buf[0],this._channels.buf[0]);for(let l=0;l<this._channels.buf[0];l++){let d=new Float32Array(s);s&&d.set(new Float32Array(this._common.wasm.HEAP,c[l],s)),a.push(d)}e.push(a),r+=s,this._frameNumber++,this._inputBytes+=i.length,this._outputSamples+=s;for(let l=0;l<this._errorsLength.buf;l+=2){let d=this._common.codeToString(this._errors.buf[l]),u=this._common.codeToString(this._errors.buf[l+1]);n.push({message:d+" vorbis_synthesis"+u,frameLength:i.length,frameNumber:this._frameNumber,inputBytes:this._inputBytes,outputSamples:this._outputSamples})}this._errorsLength.buf[0]=0}return this._WASMAudioDecoderCommon.getDecodedAudioMultiChannel(n,e,this._channels.buf[0],r,this._sampleRate.buf[0],16)},this._isWebWorker=qt.isWebWorker,this._WASMAudioDecoderCommon=qt.WASMAudioDecoderCommon||$,this._EmscriptenWASM=qt.EmscriptenWASM||at,this._module=qt.module,this._inputSize=128*1024,this._ready=this._init(),this}var To=Symbol(),ct=class{constructor(){this._onCodec=e=>{if(e!=="vorbis")throw new Error("@wasm-audio-decoders/ogg-vorbis does not support this codec "+e)},new $,this._init(),this._ready=this[To](qt)}_init(){this._vorbisSetupInProgress=!0,this._totalSamplesDecoded=0,this._codecParser=new Aa("audio/ogg",{onCodec:this._onCodec,enableFrameCRC32:!1})}async[To](e){if(this._decoder){let r=this._decoder;await r.ready.then(()=>r.free())}return this._decoder=new e,this._decoder.ready}get ready(){return this._ready}async reset(){return this._init(),this._decoder.reset()}free(){this._decoder.free()}async decodeOggPages(e){let r=[];for(let i=0;i<e.length;i++){let s=e[i];if(this._vorbisSetupInProgress&&(s[Co][0]===1&&this._decoder.sendSetupHeader(s[Co]),s[Eo].length)){let a=s[Eo][0][wa];this._decoder.sendSetupHeader(a[za]),this._decoder.initDsp(),this._vorbisSetupInProgress=!1}r.push(...s[Eo].map(a=>a[Co]))}let n=await this._decoder.decodePackets(r);this._totalSamplesDecoded+=n.samplesDecoded;let o=e[e.length-1];if(o&&o[La]){let i=this._totalSamplesDecoded-o[Ea];if(i>0){for(let s=0;s<n.channelData.length;s++)n.channelData[s]=n.channelData[s].subarray(0,n.samplesDecoded-i);n.samplesDecoded-=i,this._totalSamplesDecoded-=i}}return n}async decode(e){return this.decodeOggPages([...this._codecParser.parseChunk(e)])}async flush(){let e=await this.decodeOggPages([...this._codecParser.flush()]);return await this.reset(),e}async decodeFile(e){let r=await this.decodeOggPages([...this._codecParser.parseAll(e)]);return await this.reset(),r}};var Bi=class extends nr{constructor(e){super(e,"ogg-vorbis-decoder",qt,at)}async sendSetupHeader(e){return this.postToDecoder("sendSetupHeader",e)}async initDsp(){return this.postToDecoder("initDsp")}async decodePackets(e){return this.postToDecoder("decodePackets",e)}},zn=class extends ct{constructor(){super(),this._ready=super[To](Bi)}async free(){await this._decoder.free()}terminate(){this._decoder.terminate()}};eo(ct,"OggVorbisDecoder");eo(zn,"OggVorbisDecoderWebWorker");var Vi=class extends Error{constructor(e){super(e),this.name="OggDecodeError"}};async function Po(t,e=new ct){await e.ready;let r=await e.decode(new Uint8Array(t)),n=r.errors;if(n&&n.length>0)throw new Vi(n.map(o=>o.message).join("; "));return{sampleRate:r.sampleRate,channels:r.channelData.length,bitDepth:r.bitDepth,channelData:r.channelData}}var En=class extends Error{constructor(e){super(e),this.name="AudioRegistryError"}},br=class{constructor(e,r={}){this.vfs=e;this.refCounts=new Map;this.cache=new ut(r.cacheSize??64)}get size(){return this.cache.size}async load(e){let r=e.toLowerCase(),n=this.cache.get(r);if(n)return this.refCounts.set(r,(this.refCounts.get(r)??0)+1),n;let i=(await this.vfs.readFile(e)).slice().buffer,s=await this.decodeByExtension(e,i);return this.cache.set(r,s),this.refCounts.set(r,1),s}release(e){let r=e.toLowerCase(),n=this.refCounts.get(r)??0;n<=1?(this.cache.delete(r),this.refCounts.delete(r)):this.refCounts.set(r,n-1)}clearAll(){this.cache.clear(),this.refCounts.clear()}async decodeByExtension(e,r){let n=e.toLowerCase();if(n.endsWith(".wav")){let o=Zn(r),i=o.channels,s=Array.from({length:i},()=>new Float32Array(o.samples.length/i));for(let a=0;a<o.samples.length;a+=1)s[a%i][Math.floor(a/i)]=o.samples[a];return{sampleRate:o.sampleRate,channels:i,bitDepth:o.bitsPerSample,channelData:s}}if(n.endsWith(".ogg")||n.endsWith(".oga"))return Po(r);throw new En(`Unsupported audio format: ${e}`)}};var Nl="quake2ts-pak-indexes",Bl="pak-indexes";function Ca(){if(typeof indexedDB<"u")return indexedDB;if(typeof window<"u"&&"indexedDB"in window)return window.indexedDB;if(typeof globalThis<"u"&&"indexedDB"in globalThis)return globalThis.indexedDB}function Cn(t,e){let r=Ca();return r?new Promise((n,o)=>{let i=r.open(t,1);i.onupgradeneeded=()=>{let{result:s}=i;s.objectStoreNames.contains(e)||s.createObjectStore(e,{keyPath:"key"})},i.onerror=()=>o(i.error??new Error("Unknown IndexedDB error")),i.onsuccess=()=>n(i.result)}):Promise.reject(new Error("IndexedDB is not available in this environment"))}function Tn(t,e,r,n){return new Promise((o,i)=>{let a=t.transaction(e,r).objectStore(e),c=n(a);c.onsuccess=()=>o(c.result),c.onerror=()=>i(c.error??new Error("IndexedDB transaction error"))})}function Ui(t,e){return`${te(t)}:${e.toString(16)}`}function Vl(t){return t.map(e=>({...e}))}var Fo=class{constructor(e=Nl,r=Bl){this.dbName=e;this.storeName=r}get isSupported(){return!!Ca()}async persist(e){if(!this.isSupported)return;let r=e.validate(),n={...r,key:Ui(e.name,r.checksum),name:e.name,size:e.size,persistedAt:Date.now(),entries:Vl(r.entries)},o=await Cn(this.dbName,this.storeName);return await Tn(o,this.storeName,"readwrite",i=>i.put(n)),o.close(),n}async find(e,r){if(!this.isSupported)return;let n=await Cn(this.dbName,this.storeName),o=r!==void 0?Ui(e,r):void 0,i=await Tn(n,this.storeName,"readonly",s=>o?s.get(o):s.getAll());if(n.close(),!!i){if(Array.isArray(i)){let s=te(e),a=i.filter(c=>te(c.name)===s);return a.length===0?void 0:a.sort((c,l)=>l.persistedAt-c.persistedAt)[0]}return i}}async remove(e,r){if(!this.isSupported)return!1;let n=await Cn(this.dbName,this.storeName),o=r!==void 0?Ui(e,r):void 0,i=await Tn(n,this.storeName,"readwrite",s=>{if(o)return s.delete(o);let a=`${te(e)}:`;return s.delete(IDBKeyRange.bound(a,`${a}\uFFFF`,!1,!0))});return n.close(),typeof i=="number"?i>0:!0}async clear(){if(!this.isSupported)return;let e=await Cn(this.dbName,this.storeName);await Tn(e,this.storeName,"readwrite",r=>r.clear()),e.close()}async list(){if(!this.isSupported)return[];let e=await Cn(this.dbName,this.storeName),r=await Tn(e,this.storeName,"readonly",n=>n.getAll());return e.close(),r.sort((n,o)=>o.persistedAt-n.persistedAt)}};var Yt=class extends Error{constructor(r,n){super(n??`Missing dependencies: ${r.join(", ")}`);this.missing=r;this.name="AssetDependencyError"}},Pn=class{constructor(){this.nodes=new Map}register(e,r=[]){let n=this.nodes.get(e)??{dependencies:new Set,loaded:!1};r.forEach(o=>n.dependencies.add(o)),this.nodes.set(e,n),r.forEach(o=>{this.nodes.has(o)||this.nodes.set(o,{dependencies:new Set,loaded:!1})})}markLoaded(e){let r=this.nodes.get(e)??{dependencies:new Set,loaded:!1},n=this.getMissingDependencies(e,r);if(n.length>0)throw new Yt(n,`Asset ${e} is missing dependencies: ${n.join(", ")}`);r.loaded=!0,this.nodes.set(e,r)}markUnloaded(e){let r=this.nodes.get(e);r&&(r.loaded=!1)}isLoaded(e){return this.nodes.get(e)?.loaded??!1}missingDependencies(e){let r=this.nodes.get(e);return r?this.getMissingDependencies(e,r):[]}reset(){this.nodes.clear()}getMissingDependencies(e,r){let n=[];for(let o of r.dependencies)this.nodes.get(o)?.loaded||n.push(o);return n}},Io=class{constructor(e,r={}){this.vfs=e;this.textures=new rr({capacity:r.textureCacheCapacity??128}),this.audio=new br(e,{cacheSize:r.audioCacheSize??64}),this.dependencyTracker=r.dependencyTracker??new Pn,this.md2=new er(e),this.md3=new tr(e)}isAssetLoaded(e,r){return this.dependencyTracker.isLoaded(this.makeKey(e,r))}registerTexture(e,r){this.textures.set(e,r);let n=this.makeKey("texture",e);this.dependencyTracker.register(n),this.dependencyTracker.markLoaded(n)}async loadSound(e){let r=await this.audio.load(e),n=this.makeKey("sound",e);return this.dependencyTracker.register(n),this.dependencyTracker.markLoaded(n),r}async loadMd2Model(e,r=[]){let n=this.makeKey("model",e),o=r.map(a=>this.makeKey("texture",a));this.dependencyTracker.register(n,o);let i=this.dependencyTracker.missingDependencies(n);if(i.length>0)throw new Yt(i,`Asset ${n} is missing dependencies: ${i.join(", ")}`);let s=await this.md2.load(e);return this.dependencyTracker.markLoaded(n),s}async loadMd3Model(e,r=[]){let n=this.makeKey("model",e),o=r.map(a=>this.makeKey("texture",a));this.dependencyTracker.register(n,o);let i=this.dependencyTracker.missingDependencies(n);if(i.length>0)throw new Yt(i,`Asset ${n} is missing dependencies: ${i.join(", ")}`);let s=await this.md3.load(e);return this.dependencyTracker.markLoaded(n),s}resetForLevelChange(){this.textures.clear(),this.audio.clearAll(),this.dependencyTracker.reset()}makeKey(e,r){return`${e}:${te(r)}`}};var Gi=32,Ro=(u=>(u[u.Auto=0]="Auto",u[u.Weapon=1]="Weapon",u[u.Voice=2]="Voice",u[u.Item=3]="Item",u[u.Body=4]="Body",u[u.Aux=5]="Aux",u[u.Footstep=6]="Footstep",u[u.Aux3=7]="Aux3",u[u.NoPhsAdd=8]="NoPhsAdd",u[u.Reliable=16]="Reliable",u[u.ForcePos=32]="ForcePos",u))(Ro||{}),Ta=-1,ko=0,Pa=1,Fa=2,Ia=3,Sr=80,Ra=.003;function jt(t){return t===3?t*.001:t*5e-4}function Do(t){let e=jt(t);return e<=0?Number.POSITIVE_INFINITY:80+1/e}var Ho=class{constructor(e){this.factory=e}getContext(){return this.context||(this.context=this.factory()),this.context}async resume(){let e=this.getContext();e.state==="suspended"&&await e.resume()}getState(){return this.context?.state??"suspended"}};function Oo(t){let e=t.getContext(),r=e.createGain();r.gain.value=1;let n=e.createDynamicsCompressor(),o=e.createBiquadFilter?.();return o?(o.type="lowpass",o.frequency.value=2e4,o.Q.value=.707,r.connect(o),o.connect(n)):r.connect(n),n.connect(e.destination),{context:e,master:r,compressor:n,filter:o}}var No=class{constructor(e=new Jt){this.configStrings=e;this.buffers=new Map}registerName(e){return this.configStrings.soundIndex(e)}register(e,r){let n=this.registerName(e);return this.buffers.set(n,r),n}find(e){return this.configStrings.findSoundIndex(e)}get(e){return this.buffers.get(e)}has(e){return this.buffers.has(e)}};var Bo=class{constructor(e){this.vfs=e.vfs,this.registry=e.registry,this.contextController=e.context,this.soundRoot=e.soundRoot??"sound/",this.decodeAudio=e.decodeAudio??((r,n)=>{if(!r.decodeAudioData)throw new Error("decodeAudioData is not available on the provided audio context");return r.decodeAudioData(n)})}async precache(e){let r=[...new Set(e.map(i=>this.normalize(i)))],n={loaded:[],skipped:[],missing:[],errors:{}},o=this.contextController.getContext();for(let i of r)try{let s=this.registry.find(i);if(s!==void 0&&this.registry.has(s)){n.skipped.push(i);continue}if(!this.vfs.stat(i)){n.missing.push(i);continue}let l=(await this.vfs.readFile(i)).slice().buffer,d=await this.decodeAudio(o,l);this.registry.register(i,d),n.loaded.push(i)}catch(s){let a=s instanceof Error?s:new Error(String(s));n.errors[i]=a}return n}normalize(e){let r=te(e.replace(/^\//,""));return r.startsWith(this.soundRoot)?r:te(`${this.soundRoot}${r}`)}};var Ul=7,Fn=t=>t&Ul;function Vo(t){return Array.from({length:32},()=>({entnum:0,entchannel:0,endTimeMs:0,isPlayer:!1,active:!1})).map(e=>({...e,isPlayer:e.entnum===t}))}function Uo(t,e,r,n){if(r<0)throw new Error("pickChannel: entchannel must be non-negative");let o=Fn(r),i=-1,s=Number.POSITIVE_INFINITY;for(let a=0;a<t.length;a+=1){let c=t[a],l=Fn(c.entchannel);if(o!==0&&c.entnum===e&&l===o){i=a;break}if(c.active&&c.entnum===n.playerEntity&&e!==n.playerEntity)continue;let d=c.endTimeMs-n.nowMs;(i===-1||d<s)&&(s=d,i=a)}return i===-1?void 0:i}function Go(t,e,r,n,o){if(o)return{left:r,right:r,distanceComponent:0};let i=ws(t,e.origin),s=ci(i),a=Oe(i),c=s-80;c<0&&(c=0),c*=jt(n);let l=ai(e.right,a),d=e.mono??!1,u=d||n===0?1:.5*(1+l),m=d||n===0?1:.5*(1-l),f=Math.max(0,Math.floor(r*(1-c)*u));return{left:Math.max(0,Math.floor(r*(1-c)*m)),right:f,distanceComponent:c}}var Wo=class{constructor(e){this.activeSources=new Map;this.contextController=e.context,this.registry=e.registry,this.playerEntity=e.playerEntity,this.channels=Vo(e.playerEntity),this.listener=e.listener??{origin:As,right:{x:1,y:0,z:0}},this.sfxVolume=e.sfxVolume??1,this.masterVolume=e.masterVolume??1,this.resolveOcclusion=e.resolveOcclusion,this.graph=Oo(this.contextController),this.graph.master.gain.value=this.masterVolume}setListener(e){this.listener=e}setMasterVolume(e){this.masterVolume=e,this.graph.master.gain.value=e}setSfxVolume(e){this.sfxVolume=e}async ensureRunning(){await this.contextController.resume()}play(e){let r=this.registry.get(e.soundIndex);if(!r)return;let n=this.graph.context,o=n.currentTime*1e3,i=Uo(this.channels,e.entity,e.channel,{nowMs:o,playerEntity:this.playerEntity});if(i===void 0)return;let s=this.activeSources.get(i);s&&(s.source.onended=null,s.source.stop(),this.activeSources.delete(i));let a=n.createBufferSource();a.buffer=r,a.loop=e.looping??!1;let c=e.origin??this.listener.origin,l=n.createGain(),d=this.createPanner(n,e.attenuation),u=this.resolveOcclusion?.(this.listener,c,e.attenuation),m=ka(u?.gainScale??1),f=this.resolveOcclusion?this.createOcclusionFilter(n,u?.lowpassHz??2e4):void 0;this.applyOriginToPanner(d,c);let h=e.entity===this.playerEntity,y=Go(c,this.listener,e.volume,e.attenuation,h),x=(e.volume===0?0:Math.max(y.left,y.right)/Math.max(1,e.volume))*(e.volume/255)*this.masterVolume*this.sfxVolume;l.gain.value=x*m;let M=n.currentTime+(e.timeOffsetMs??0)/1e3,v=(e.looping?Number.POSITIVE_INFINITY:r.duration*1e3)+M*1e3;a.connect(d),f?(d.connect(f),f.connect(l)):d.connect(l),l.connect(this.graph.master),a.start(M),a.onended=()=>{this.channels[i].active=!1,this.activeSources.delete(i)};let S={channelIndex:i,entnum:e.entity,entchannel:Fn(e.channel),endTimeMs:v,source:a,panner:d,gain:l,baseGain:x,origin:c,attenuation:e.attenuation,occlusion:f?{scale:m,lowpassHz:u?.lowpassHz,filter:f}:u?{scale:m,lowpassHz:u.lowpassHz}:void 0};return this.channels[i]={entnum:e.entity,entchannel:Fn(e.channel),endTimeMs:v,isPlayer:e.entity===this.playerEntity,active:!0},this.activeSources.set(i,S),S}stop(e){let r=this.activeSources.get(e);r&&(r.source.stop(),this.channels[e].active=!1,this.activeSources.delete(e))}stopEntitySounds(e){for(let[r,n]of[...this.activeSources.entries()])n.entnum===e&&(n.source.stop(),this.channels[r].active=!1,this.activeSources.delete(r))}updateEntityPosition(e,r){for(let n of this.activeSources.values())if(n.entnum===e&&(this.applyOriginToPanner(n.panner,r),n.origin=r,this.resolveOcclusion)){let o=this.resolveOcclusion(this.listener,r,n.attenuation);this.applyOcclusion(n,o)}}positionedSound(e,r,n,o){return this.play({entity:0,channel:0,soundIndex:r,volume:n,attenuation:o,origin:e})}ambientSound(e,r,n){return this.play({entity:0,channel:0,soundIndex:r,volume:n,attenuation:0,origin:e,looping:!0})}getChannelState(e){return this.channels[e]}getDiagnostics(){return{activeChannels:this.activeSources.size,masterVolume:this.masterVolume,sfxVolume:this.sfxVolume,channels:[...this.channels],activeSounds:[...this.activeSources.values()].map(e=>({entnum:e.entnum,entchannel:e.entchannel,channelIndex:e.channelIndex,origin:e.origin,gain:e.gain.gain.value,baseGain:e.baseGain,attenuation:e.attenuation,maxDistance:e.panner.maxDistance,distanceModel:e.panner.distanceModel,occlusion:e.occlusion?{scale:e.occlusion.scale,lowpassHz:e.occlusion.lowpassHz}:void 0}))}}setUnderwater(e,r=400){let n=this.graph.filter;n&&(n.type="lowpass",n.Q.value=.707,n.frequency.value=e?r:2e4)}createPanner(e,r){let n=e.createPanner?e.createPanner():Object.assign(e.createGain(),{positionX:{value:this.listener.origin.x},positionY:{value:this.listener.origin.y},positionZ:{value:this.listener.origin.z}});return this.configurePanner(n,r)}configurePanner(e,r){let n=jt(r);return e.refDistance=80,e.maxDistance=Do(r),e.rolloffFactor=n,e.distanceModel=r===0?"linear":"inverse",e.positionX.value=this.listener.origin.x,e.positionY.value=this.listener.origin.y,e.positionZ.value=this.listener.origin.z,e}applyOriginToPanner(e,r){e.positionX.value=r.x,e.positionY.value=r.y,e.positionZ.value=r.z}createOcclusionFilter(e,r){if(!e.createBiquadFilter)return;let n=e.createBiquadFilter();return n.type="lowpass",n.Q.value=.707,n.frequency.value=Wi(r,10,2e4),n}applyOcclusion(e,r){let n=ka(r?.gainScale??1);if(e.gain.gain.value=e.baseGain*n,e.occlusion?.filter){let o=r?.lowpassHz??2e4;e.occlusion.filter.frequency.value=Wi(o,10,2e4)}e.occlusion?(e.occlusion.scale=n,e.occlusion.lowpassHz=r?.lowpassHz):r&&(e.occlusion={scale:n,lowpassHz:r.lowpassHz})}},Wi=(t,e,r)=>Math.min(r,Math.max(e,t)),ka=t=>Wi(t,0,1);var Xo=class{constructor(e){this.createElement=e.createElement,this.resolveSource=e.resolveSource??(async r=>r),this.volume=e.volume??1}async play(e,{loop:r=!0,restart:n=!1}={}){if(this.track===e&&this.element){this.element.loop=r,this.element.volume=this.volume,n&&(this.element.currentTime=0),(this.element.paused||n)&&await this.element.play();return}let o=await this.resolveSource(e),i=this.createElement();i.src=o,i.loop=r,i.volume=this.volume,i.currentTime=0,i.load(),await i.play(),this.element=i,this.track=e}pause(){!this.element||this.element.paused||this.element.pause()}async resume(){!this.element||!this.element.paused||await this.element.play()}stop(){this.element&&(this.element.pause(),this.element.currentTime=0,this.element=void 0,this.track=void 0)}setVolume(e){this.volume=e,this.element&&(this.element.volume=e)}getState(){let e=!!(this.element&&!this.element.paused&&!this.element.ended),r=!!this.element?.paused;return{track:this.track,paused:r,playing:e,volume:this.volume}}};var qo=class{constructor(e){this.registry=e.registry,this.system=e.system,this.music=e.music}soundindex(e){return this.registry.registerName(e)}sound(e,r,n,o,i,s){this.system.play({entity:e,channel:r,soundIndex:n,volume:o,attenuation:i,timeOffsetMs:s})}positioned_sound(e,r,n,o){this.system.positionedSound(e,r,n,o)}loop_sound(e,r,n,o,i){this.system.play({entity:e,channel:r,soundIndex:n,volume:o,attenuation:i,looping:!0})}stop_entity_sounds(e){this.system.stopEntitySounds(e)}set_listener(e){this.system.setListener(e)}play_music(e,r=!0){return this.music?this.music.play(e,{loop:r}):Promise.resolve()}pause_music(){this.music?.pause()}resume_music(){return this.music?.resume()??Promise.resolve()}stop_music(){this.music?.stop()}set_music_volume(e){this.music?.setVolume(e)}play_ambient(e,r,n){this.system.ambientSound(e,r,n)}play_channel(e){this.system.play({...e})}};function Gl(t){t.enable(t.DEPTH_TEST),t.depthFunc(t.LEQUAL),t.enable(t.CULL_FACE),t.cullFace(t.BACK),t.enable(t.BLEND),t.blendFuncSeparate(t.SRC_ALPHA,t.ONE_MINUS_SRC_ALPHA,t.ONE,t.ONE_MINUS_SRC_ALPHA)}function Wl(t,e,r,n){for(let o of e){let i=t.getExtension(o);if(!i)throw new Error(`Missing required WebGL extension: ${o}`);n.set(o,i)}for(let o of r){let i=t.getExtension(o);i&&n.set(o,i)}}function Da(t,e={}){let{contextAttributes:r,requiredExtensions:n=[],optionalExtensions:o=[]}=e,i=t.getContext("webgl2",r??{antialias:!0});if(!i)throw new Error("WebGL2 not supported or failed to initialize");Gl(i);let s=new Map;Wl(i,n,o,s);let a=!1,c=new Set,l=new Set,d=m=>{a=!0,m.preventDefault();for(let f of c)f()},u=()=>{a=!1;for(let m of l)m()};return t.addEventListener("webglcontextlost",d),t.addEventListener("webglcontextrestored",u),{gl:i,extensions:s,isLost:()=>a,onLost(m){return c.add(m),()=>c.delete(m)},onRestored(m){return l.add(m),()=>l.delete(m)},dispose(){t.removeEventListener("webglcontextlost",d),t.removeEventListener("webglcontextrestored",u),c.clear(),l.clear(),s.clear()}}}function Ha(t,e,r){let n=t.createShader(e);if(!n)throw new Error("Failed to allocate shader");if(t.shaderSource(n,r),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS)){let i=t.getShaderInfoLog(n)??"Unknown shader compile failure";throw t.deleteShader(n),new Error(i)}return n}function Xl(t,e,r,n){let o=t.createProgram();if(!o)throw new Error("Failed to allocate shader program");if(t.attachShader(o,e),t.attachShader(o,r),n)for(let[s,a]of Object.entries(n))t.bindAttribLocation(o,a,s);if(t.linkProgram(o),!t.getProgramParameter(o,t.LINK_STATUS)){let s=t.getProgramInfoLog(o)??"Unknown shader link failure";throw t.deleteProgram(o),new Error(s)}return o}var ye=class t{constructor(e,r){this.uniformLocations=new Map;this.attributeLocations=new Map;this.gl=e,this.program=r}static create(e,r,n){let o=Ha(e,e.VERTEX_SHADER,r.vertex),i=Ha(e,e.FRAGMENT_SHADER,r.fragment);try{let s=Xl(e,o,i,n);return new t(e,s)}finally{e.deleteShader(o),e.deleteShader(i)}}use(){this.gl.useProgram(this.program)}getUniformLocation(e){if(!this.uniformLocations.has(e)){let r=this.gl.getUniformLocation(this.program,e);this.uniformLocations.set(e,r)}return this.uniformLocations.get(e)??null}getAttributeLocation(e){if(!this.attributeLocations.has(e)){let r=this.gl.getAttribLocation(this.program,e);this.attributeLocations.set(e,r)}return this.attributeLocations.get(e)??-1}dispose(){this.gl.deleteProgram(this.program),this.uniformLocations.clear(),this.attributeLocations.clear()}};function Oa(t,e,r){return ye.create(t,e,r)}var xe=class{constructor(e,r=e.STATIC_DRAW,n){this.gl=e,this.target=n??e.ARRAY_BUFFER;let o=e.createBuffer();if(!o)throw new Error("Failed to allocate buffer");this.buffer=o,e.bindBuffer(this.target,this.buffer),e.bufferData(this.target,0,r)}bind(){this.gl.bindBuffer(this.target,this.buffer)}upload(e,r=this.gl.STATIC_DRAW){this.bind(),this.gl.bufferData(this.target,e,r)}update(e,r=0){this.bind(),this.gl.bufferSubData(this.target,r,e)}dispose(){this.gl.deleteBuffer(this.buffer)}},De=class extends xe{constructor(e,r=e.STATIC_DRAW){super(e,r,e.ELEMENT_ARRAY_BUFFER)}},Se=class{constructor(e){this.gl=e;let r=e.createVertexArray();if(!r)throw new Error("Failed to allocate vertex array object");this.vao=r}bind(){this.gl.bindVertexArray(this.vao)}configureAttributes(e,r){this.bind(),r&&r.bind();for(let n of e)this.gl.enableVertexAttribArray(n.index),this.gl.vertexAttribPointer(n.index,n.size,n.type,n.normalized??!1,n.stride??0,n.offset??0),n.divisor!==void 0&&this.gl.vertexAttribDivisor(n.index,n.divisor)}dispose(){this.gl.deleteVertexArray(this.vao)}},Mr=class{constructor(e,r=e.TEXTURE_2D){this.width=0;this.height=0;this.gl=e,this.target=r;let n=e.createTexture();if(!n)throw new Error("Failed to allocate texture");this.texture=n}bind(e=0){this.gl.activeTexture(this.gl.TEXTURE0+e),this.gl.bindTexture(this.target,this.texture)}setParameters(e){this.bind(),e.wrapS!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_WRAP_S,e.wrapS),e.wrapT!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_WRAP_T,e.wrapT),e.minFilter!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_MIN_FILTER,e.minFilter),e.magFilter!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_MAG_FILTER,e.magFilter)}upload(e,r,n){this.width=e,this.height=r,this.uploadImage(0,this.gl.RGBA,e,r,0,this.gl.RGBA,this.gl.UNSIGNED_BYTE,n)}uploadImage(e,r,n,o,i,s,a,c){this.bind(),this.gl.texImage2D(this.target,e,r,n,o,i,s,a,c)}dispose(){this.gl.deleteTexture(this.texture)}},_r=class{constructor(e){this.gl=e,this.target=e.TEXTURE_CUBE_MAP;let r=e.createTexture();if(!r)throw new Error("Failed to allocate cubemap texture");this.texture=r}bind(e=0){this.gl.activeTexture(this.gl.TEXTURE0+e),this.gl.bindTexture(this.target,this.texture)}setParameters(e){this.bind(),e.wrapS!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_WRAP_S,e.wrapS),e.wrapT!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_WRAP_T,e.wrapT),e.minFilter!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_MIN_FILTER,e.minFilter),e.magFilter!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_MAG_FILTER,e.magFilter)}uploadFace(e,r,n,o,i,s,a,c,l){this.bind(),this.gl.texImage2D(e,r,n,o,i,s,a,c,l)}dispose(){this.gl.deleteTexture(this.texture)}},Yo=class{constructor(e){this.gl=e;let r=e.createFramebuffer();if(!r)throw new Error("Failed to allocate framebuffer");this.framebuffer=r}bind(e=this.gl.FRAMEBUFFER){this.gl.bindFramebuffer(e,this.framebuffer)}attachTexture2D(e,r,n=0){this.bind(),this.gl.framebufferTexture2D(this.gl.FRAMEBUFFER,e,r.target,r.texture,n)}dispose(){this.gl.deleteFramebuffer(this.framebuffer)}};var qi=4,Xi=7*qi,Yi=[{index:0,size:3,type:5126,stride:Xi,offset:0},{index:1,size:2,type:5126,stride:Xi,offset:3*qi},{index:2,size:2,type:5126,stride:Xi,offset:5*qi}];function ql(t,e){return{width:t,height:t,padding:e,data:new Uint8Array(t*t*4),cursorX:0,cursorY:0,rowHeight:0}}function Yl(t){let e=t.width*t.height;if(e===0)throw new Error("Invalid lightmap with zero area");let r=t.samples.byteLength/e;if(!Number.isInteger(r)||r<3||r>4)throw new Error("Unsupported lightmap channel count");return r}function jl(t,e,r){let n=Yl(r),o=t.width*4,i=e.x+t.padding,s=e.y+t.padding,a=0;for(let c=0;c<r.height;c++){let l=(s+c)*o+i*4;for(let d=0;d<r.width;d++){let u=l+d*4;t.data[u]=r.samples[a],t.data[u+1]=r.samples[a+1],t.data[u+2]=r.samples[a+2],t.data[u+3]=n===4?r.samples[a+3]:255,a+=n}}}function Kl(t,e,r){let n=e.width+r.lightmapPadding*2,o=e.height+r.lightmapPadding*2;if(n>r.atlasSize||o>r.atlasSize)throw new Error("Lightmap too large for atlas");for(let a of t){if(a.cursorX+n>a.width&&(a.cursorX=0,a.cursorY+=a.rowHeight+r.lightmapPadding,a.rowHeight=0),a.cursorY+o>a.height)continue;let c={atlasIndex:t.indexOf(a),x:a.cursorX,y:a.cursorY,width:e.width,height:e.height};return a.cursorX+=n+r.lightmapPadding,a.rowHeight=Math.max(a.rowHeight,o),{placement:c,atlas:a}}let i=ql(r.atlasSize,r.lightmapPadding);t.push(i);let s={atlasIndex:t.length-1,x:0,y:0,width:e.width,height:e.height};return i.cursorX=n+r.lightmapPadding,i.rowHeight=o,{placement:s,atlas:i}}function jo(t){return t instanceof Float32Array?t:new Float32Array(t)}function $l(t,e){if(!t){let n=new Uint16Array(e);for(let o=0;o<e;o++)n[o]=o;return n}return t instanceof Uint16Array?t:new Uint16Array(t)}function Ql(t,e){let r=new Float32Array(t.length);for(let n=0;n<t.length;n+=2)r[n]=e.offset[0]+t[n]*e.scale[0],r[n+1]=e.offset[1]+t[n+1]*e.scale[1];return r}function Jl(t,e){let r=jo(t.vertices),n=jo(t.textureCoords),o=e?Ql(jo(t.lightmapCoords??t.textureCoords),e):jo(t.lightmapCoords??new Float32Array(n.length)),i=r.length/3;if(n.length/2!==i)throw new Error("Texture coordinates count mismatch");if(o.length/2!==i)throw new Error("Lightmap coordinates count mismatch");let s=new Float32Array(i*7);for(let a=0;a<i;a++){let c=a*3,l=a*2,d=a*7;s[d]=r[c],s[d+1]=r[c+1],s[d+2]=r[c+2],s[d+3]=n[l],s[d+4]=n[l+1],s[d+5]=o[l],s[d+6]=o[l+1]}return s}function Na(t,e,r={}){let n={atlasSize:r.atlasSize??1024,lightmapPadding:r.lightmapPadding??1},o=[],i=new Map;e.forEach((c,l)=>{if(!c.lightmap)return;let{placement:d,atlas:u}=Kl(o,c.lightmap,n);jl(u,d,c.lightmap),i.set(l,{atlasIndex:d.atlasIndex,offset:[(d.x+n.lightmapPadding)/n.atlasSize,(d.y+n.lightmapPadding)/n.atlasSize],scale:[d.width/n.atlasSize,d.height/n.atlasSize]})});let s=o.map(c=>{let l=new Mr(t);return l.setParameters({wrapS:t.CLAMP_TO_EDGE,wrapT:t.CLAMP_TO_EDGE,minFilter:t.LINEAR,magFilter:t.LINEAR}),l.uploadImage(0,t.RGBA,c.width,c.height,0,t.RGBA,t.UNSIGNED_BYTE,c.data),{texture:l,width:c.width,height:c.height,pixels:c.data}});return{surfaces:e.map((c,l)=>{let d=i.get(l),u=Jl(c,d),m=$l(c.indices,u.length/7),f=new xe(t,t.STATIC_DRAW,t.ARRAY_BUFFER);f.upload(u);let h=new De(t,t.STATIC_DRAW);h.upload(m);let y=new Se(t);return y.configureAttributes(Yi,f),{vao:y,vertexBuffer:f,indexBuffer:h,indexCount:m.length,vertexCount:u.length/7,texture:c.texture,surfaceFlags:c.surfaceFlags??Tr,lightmap:d,vertexData:u,indexData:m}}),lightmaps:s}}function Ar(t){let{normal:e,distance:r}=t,n=Math.sqrt(e.x*e.x+e.y*e.y+e.z*e.z);if(n===0)return t;let o=1/n;return{normal:{x:e.x*o,y:e.y*o,z:e.z*o},distance:r*o}}function Ba(t){if(t.length!==16)throw new Error("View-projection matrix must contain 16 elements");let e=t[0],r=t[4],n=t[8],o=t[12],i=t[1],s=t[5],a=t[9],c=t[13],l=t[2],d=t[6],u=t[10],m=t[14],f=t[3],h=t[7],y=t[11],p=t[15];return[Ar({normal:{x:f+e,y:h+r,z:y+n},distance:p+o}),Ar({normal:{x:f-e,y:h-r,z:y-n},distance:p-o}),Ar({normal:{x:f+i,y:h+s,z:y+a},distance:p+c}),Ar({normal:{x:f-i,y:h-s,z:y-a},distance:p-c}),Ar({normal:{x:f+l,y:h+d,z:y+u},distance:p+m}),Ar({normal:{x:f-l,y:h-d,z:y-u},distance:p-m})]}function Zl(t,e){return t.normal.x*e.x+t.normal.y*e.y+t.normal.z*e.z+t.distance}function In(t,e,r){for(let n of r){let o=n.normal.x>=0?e.x:t.x,i=n.normal.y>=0?e.y:t.y,s=n.normal.z>=0?e.z:t.z;if(Zl(n,{x:o,y:i,z:s})<0)return!1}return!0}function Va(t){return t<0}function Ua(t){return-t-1}function Ga(t,e){return t.normal[0]*e.x+t.normal[1]*e.y+t.normal[2]*e.z-t.dist}function e0(t,e,r){if(!t||e<0||r<0)return!0;let n=Math.ceil(t.numClusters/8),o=t.clusters[e].pvs,i=Math.floor(r/8),s=1<<r%8;return i<0||i>=n?!1:(o[i]&s)!==0}function t0(t,e){let r={x:t.mins[0],y:t.mins[1],z:t.mins[2]},n={x:t.maxs[0],y:t.maxs[1],z:t.maxs[2]};return In(r,n,e)}function Ki(t,e){let r=0;for(;r>=0;){let n=t.nodes[r],o=t.planes[n.planeIndex],s=Ga(o,e)>=0?0:1,a=n.children[s];if(Va(a))return Ua(a);r=a}return-1}function r0(t,e){let r=t.leafs[e],n=[];for(let o=0;o<r.numLeafFaces;o+=1)n.push(t.leafLists.leafFaces[e][o]);return n}function ji(t,e,r,n,o,i,s){if(Va(e)){let m=Ua(e),f=t.leafs[m];if(!e0(t.visibility,o,f.cluster)||!t0(f,n))return;let h={x:(f.mins[0]+f.maxs[0])*.5,y:(f.mins[1]+f.maxs[1])*.5,z:(f.mins[2]+f.maxs[2])*.5},y=h.x-r.x,p=h.y-r.y,x=h.z-r.z,M=-(y*y+p*p+x*x);for(let v of r0(t,m))s.has(v)||(s.add(v),i.push({faceIndex:v,leafIndex:m,sortKey:M}));return}let a=t.nodes[e],c=t.planes[a.planeIndex],l=Ga(c,r),d=l>=0?a.children[0]:a.children[1],u=l>=0?a.children[1]:a.children[0];In({x:a.mins[0],y:a.mins[1],z:a.mins[2]},{x:a.maxs[0],y:a.maxs[1],z:a.maxs[2]},n)&&(ji(t,d,r,n,o,i,s),ji(t,u,r,n,o,i,s))}function Wa(t,e,r){let n=Ki(t,e),o=n>=0?t.leafs[n].cluster:-1,i=[];return ji(t,0,e,r,o,i,new Set),i}var $i=`#version 300 es
141
+ ïBçϧmÙIólÜoëVbƒ¦¯éWÇû3`});var Lc={a:Tt};this.setModule=z=>{t.setModule(at,z)},this.getModule=()=>t.getModule(at),this.instantiate=()=>(this.getModule().then(z=>WebAssembly.instantiate(z,Lc)).then(z=>{let ze=z.exports;Hn(ze),h=ze.l,y(),wc(ze),r()}),this.ready=new Promise(z=>{r=z}).then(()=>{this.HEAP=h.buffer,this.malloc=vs,this.free=As,this.create_decoder=Cr,this.send_setup=bs,this.init_dsp=Ss,this.decode_packets=Ms,this.destroy_decoder=_s}),this)}function Yt(){return this._init=()=>new this._WASMAudioDecoderCommon().instantiate(this._EmscriptenWASM,this._module).then(t=>{this._common=t,this._input=this._common.allocateTypedArray(this._inputSize,Uint8Array),this._firstPage=!0,this._inputLen=this._common.allocateTypedArray(1,Uint32Array),this._outputBufferPtr=this._common.allocateTypedArray(1,Uint32Array),this._channels=this._common.allocateTypedArray(1,Uint32Array),this._sampleRate=this._common.allocateTypedArray(1,Uint32Array),this._samplesDecoded=this._common.allocateTypedArray(1,Uint32Array);let e=256;this._errors=this._common.allocateTypedArray(e,Uint32Array),this._errorsLength=this._common.allocateTypedArray(1,Int32Array),this._frameNumber=0,this._inputBytes=0,this._outputSamples=0,this._decoder=this._common.wasm.create_decoder(this._input.ptr,this._inputLen.ptr,this._outputBufferPtr.ptr,this._channels.ptr,this._sampleRate.ptr,this._samplesDecoded.ptr,this._errors.ptr,this._errorsLength.ptr,e)}),Object.defineProperty(this,"ready",{enumerable:!0,get:()=>this._ready}),this.reset=()=>(this.free(),this._init()),this.free=()=>{this._common.wasm.destroy_decoder(this._decoder),this._common.free()},this.sendSetupHeader=t=>{this._input.buf.set(t),this._inputLen.buf[0]=t.length,this._common.wasm.send_setup(this._decoder,this._firstPage),this._firstPage=!1},this.initDsp=()=>{this._common.wasm.init_dsp(this._decoder)},this.decodePackets=t=>{let e=[],r=0,n=[];for(let o=0;o<t.length;o++){let i=t[o];this._input.buf.set(i),this._inputLen.buf[0]=i.length,this._common.wasm.decode_packets(this._decoder);let s=this._samplesDecoded.buf[0],a=[],c=new Uint32Array(this._common.wasm.HEAP,this._outputBufferPtr.buf[0],this._channels.buf[0]);for(let l=0;l<this._channels.buf[0];l++){let d=new Float32Array(s);s&&d.set(new Float32Array(this._common.wasm.HEAP,c[l],s)),a.push(d)}e.push(a),r+=s,this._frameNumber++,this._inputBytes+=i.length,this._outputSamples+=s;for(let l=0;l<this._errorsLength.buf;l+=2){let d=this._common.codeToString(this._errors.buf[l]),u=this._common.codeToString(this._errors.buf[l+1]);n.push({message:d+" vorbis_synthesis"+u,frameLength:i.length,frameNumber:this._frameNumber,inputBytes:this._inputBytes,outputSamples:this._outputSamples})}this._errorsLength.buf[0]=0}return this._WASMAudioDecoderCommon.getDecodedAudioMultiChannel(n,e,this._channels.buf[0],r,this._sampleRate.buf[0],16)},this._isWebWorker=Yt.isWebWorker,this._WASMAudioDecoderCommon=Yt.WASMAudioDecoderCommon||$,this._EmscriptenWASM=Yt.EmscriptenWASM||at,this._module=Yt.module,this._inputSize=128*1024,this._ready=this._init(),this}var Fo=Symbol(),ct=class{constructor(){this._onCodec=e=>{if(e!=="vorbis")throw new Error("@wasm-audio-decoders/ogg-vorbis does not support this codec "+e)},new $,this._init(),this._ready=this[Fo](Yt)}_init(){this._vorbisSetupInProgress=!0,this._totalSamplesDecoded=0,this._codecParser=new Ca("audio/ogg",{onCodec:this._onCodec,enableFrameCRC32:!1})}async[Fo](e){if(this._decoder){let r=this._decoder;await r.ready.then(()=>r.free())}return this._decoder=new e,this._decoder.ready}get ready(){return this._ready}async reset(){return this._init(),this._decoder.reset()}free(){this._decoder.free()}async decodeOggPages(e){let r=[];for(let i=0;i<e.length;i++){let s=e[i];if(this._vorbisSetupInProgress&&(s[Po][0]===1&&this._decoder.sendSetupHeader(s[Po]),s[To].length)){let a=s[To][0][Ta];this._decoder.sendSetupHeader(a[Fa]),this._decoder.initDsp(),this._vorbisSetupInProgress=!1}r.push(...s[To].map(a=>a[Po]))}let n=await this._decoder.decodePackets(r);this._totalSamplesDecoded+=n.samplesDecoded;let o=e[e.length-1];if(o&&o[Pa]){let i=this._totalSamplesDecoded-o[Ia];if(i>0){for(let s=0;s<n.channelData.length;s++)n.channelData[s]=n.channelData[s].subarray(0,n.samplesDecoded-i);n.samplesDecoded-=i,this._totalSamplesDecoded-=i}}return n}async decode(e){return this.decodeOggPages([...this._codecParser.parseChunk(e)])}async flush(){let e=await this.decodeOggPages([...this._codecParser.flush()]);return await this.reset(),e}async decodeFile(e){let r=await this.decodeOggPages([...this._codecParser.parseAll(e)]);return await this.reset(),r}};var Gi=class extends ir{constructor(e){super(e,"ogg-vorbis-decoder",Yt,at)}async sendSetupHeader(e){return this.postToDecoder("sendSetupHeader",e)}async initDsp(){return this.postToDecoder("initDsp")}async decodePackets(e){return this.postToDecoder("decodePackets",e)}},Cn=class extends ct{constructor(){super(),this._ready=super[Fo](Gi)}async free(){await this._decoder.free()}terminate(){this._decoder.terminate()}};ro(ct,"OggVorbisDecoder");ro(Cn,"OggVorbisDecoderWebWorker");var Wi=class extends Error{constructor(e){super(e),this.name="OggDecodeError"}};async function Io(t,e=new ct){await e.ready;let r=await e.decode(new Uint8Array(t)),n=r.errors;if(n&&n.length>0)throw new Wi(n.map(o=>o.message).join("; "));return{sampleRate:r.sampleRate,channels:r.channelData.length,bitDepth:r.bitDepth,channelData:r.channelData}}var Tn=class extends Error{constructor(e){super(e),this.name="AudioRegistryError"}},Mr=class{constructor(e,r={}){this.vfs=e;this.refCounts=new Map;this.cache=new ut(r.cacheSize??64)}get size(){return this.cache.size}async load(e){let r=e.toLowerCase(),n=this.cache.get(r);if(n)return this.refCounts.set(r,(this.refCounts.get(r)??0)+1),n;let i=(await this.vfs.readFile(e)).slice().buffer,s=await this.decodeByExtension(e,i);return this.cache.set(r,s),this.refCounts.set(r,1),s}release(e){let r=e.toLowerCase(),n=this.refCounts.get(r)??0;n<=1?(this.cache.delete(r),this.refCounts.delete(r)):this.refCounts.set(r,n-1)}clearAll(){this.cache.clear(),this.refCounts.clear()}async decodeByExtension(e,r){let n=e.toLowerCase();if(n.endsWith(".wav")){let o=to(r),i=o.channels,s=Array.from({length:i},()=>new Float32Array(o.samples.length/i));for(let a=0;a<o.samples.length;a+=1)s[a%i][Math.floor(a/i)]=o.samples[a];return{sampleRate:o.sampleRate,channels:i,bitDepth:o.bitsPerSample,channelData:s}}if(n.endsWith(".ogg")||n.endsWith(".oga"))return Io(r);throw new Tn(`Unsupported audio format: ${e}`)}};var Yl="quake2ts-pak-indexes",Kl="pak-indexes";function Ra(){if(typeof indexedDB<"u")return indexedDB;if(typeof window<"u"&&"indexedDB"in window)return window.indexedDB;if(typeof globalThis<"u"&&"indexedDB"in globalThis)return globalThis.indexedDB}function Pn(t,e){let r=Ra();return r?new Promise((n,o)=>{let i=r.open(t,1);i.onupgradeneeded=()=>{let{result:s}=i;s.objectStoreNames.contains(e)||s.createObjectStore(e,{keyPath:"key"})},i.onerror=()=>o(i.error??new Error("Unknown IndexedDB error")),i.onsuccess=()=>n(i.result)}):Promise.reject(new Error("IndexedDB is not available in this environment"))}function Fn(t,e,r,n){return new Promise((o,i)=>{let a=t.transaction(e,r).objectStore(e),c=n(a);c.onsuccess=()=>o(c.result),c.onerror=()=>i(c.error??new Error("IndexedDB transaction error"))})}function Xi(t,e){return`${te(t)}:${e.toString(16)}`}function jl(t){return t.map(e=>({...e}))}var Ro=class{constructor(e=Yl,r=Kl){this.dbName=e;this.storeName=r}get isSupported(){return!!Ra()}async persist(e){if(!this.isSupported)return;let r=e.validate(),n={...r,key:Xi(e.name,r.checksum),name:e.name,size:e.size,persistedAt:Date.now(),entries:jl(r.entries)},o=await Pn(this.dbName,this.storeName);return await Fn(o,this.storeName,"readwrite",i=>i.put(n)),o.close(),n}async find(e,r){if(!this.isSupported)return;let n=await Pn(this.dbName,this.storeName),o=r!==void 0?Xi(e,r):void 0,i=await Fn(n,this.storeName,"readonly",s=>o?s.get(o):s.getAll());if(n.close(),!!i){if(Array.isArray(i)){let s=te(e),a=i.filter(c=>te(c.name)===s);return a.length===0?void 0:a.sort((c,l)=>l.persistedAt-c.persistedAt)[0]}return i}}async remove(e,r){if(!this.isSupported)return!1;let n=await Pn(this.dbName,this.storeName),o=r!==void 0?Xi(e,r):void 0,i=await Fn(n,this.storeName,"readwrite",s=>{if(o)return s.delete(o);let a=`${te(e)}:`;return s.delete(IDBKeyRange.bound(a,`${a}\uFFFF`,!1,!0))});return n.close(),typeof i=="number"?i>0:!0}async clear(){if(!this.isSupported)return;let e=await Pn(this.dbName,this.storeName);await Fn(e,this.storeName,"readwrite",r=>r.clear()),e.close()}async list(){if(!this.isSupported)return[];let e=await Pn(this.dbName,this.storeName),r=await Fn(e,this.storeName,"readonly",n=>n.getAll());return e.close(),r.sort((n,o)=>o.persistedAt-n.persistedAt)}};var Kt=class extends Error{constructor(r,n){super(n??`Missing dependencies: ${r.join(", ")}`);this.missing=r;this.name="AssetDependencyError"}},In=class{constructor(){this.nodes=new Map}register(e,r=[]){let n=this.nodes.get(e)??{dependencies:new Set,loaded:!1};r.forEach(o=>n.dependencies.add(o)),this.nodes.set(e,n),r.forEach(o=>{this.nodes.has(o)||this.nodes.set(o,{dependencies:new Set,loaded:!1})})}markLoaded(e){let r=this.nodes.get(e)??{dependencies:new Set,loaded:!1},n=this.getMissingDependencies(e,r);if(n.length>0)throw new Kt(n,`Asset ${e} is missing dependencies: ${n.join(", ")}`);r.loaded=!0,this.nodes.set(e,r)}markUnloaded(e){let r=this.nodes.get(e);r&&(r.loaded=!1)}isLoaded(e){return this.nodes.get(e)?.loaded??!1}missingDependencies(e){let r=this.nodes.get(e);return r?this.getMissingDependencies(e,r):[]}reset(){this.nodes.clear()}getMissingDependencies(e,r){let n=[];for(let o of r.dependencies)this.nodes.get(o)?.loaded||n.push(o);return n}},ko=class{constructor(e,r={}){this.vfs=e;this.textures=new or({capacity:r.textureCacheCapacity??128}),this.audio=new Mr(e,{cacheSize:r.audioCacheSize??64}),this.dependencyTracker=r.dependencyTracker??new In,this.md2=new tr(e),this.md3=new rr(e),this.sprite=new nr(e)}isAssetLoaded(e,r){return this.dependencyTracker.isLoaded(this.makeKey(e,r))}registerTexture(e,r){this.textures.set(e,r);let n=this.makeKey("texture",e);this.dependencyTracker.register(n),this.dependencyTracker.markLoaded(n)}async loadSound(e){let r=await this.audio.load(e),n=this.makeKey("sound",e);return this.dependencyTracker.register(n),this.dependencyTracker.markLoaded(n),r}async loadMd2Model(e,r=[]){let n=this.makeKey("model",e),o=r.map(a=>this.makeKey("texture",a));this.dependencyTracker.register(n,o);let i=this.dependencyTracker.missingDependencies(n);if(i.length>0)throw new Kt(i,`Asset ${n} is missing dependencies: ${i.join(", ")}`);let s=await this.md2.load(e);return this.dependencyTracker.markLoaded(n),s}async loadMd3Model(e,r=[]){let n=this.makeKey("model",e),o=r.map(a=>this.makeKey("texture",a));this.dependencyTracker.register(n,o);let i=this.dependencyTracker.missingDependencies(n);if(i.length>0)throw new Kt(i,`Asset ${n} is missing dependencies: ${i.join(", ")}`);let s=await this.md3.load(e);return this.dependencyTracker.markLoaded(n),s}async loadSprite(e){let r=this.makeKey("sprite",e);this.dependencyTracker.register(r);let n=await this.sprite.load(e);return this.dependencyTracker.markLoaded(r),n}resetForLevelChange(){this.textures.clear(),this.audio.clearAll(),this.dependencyTracker.reset()}makeKey(e,r){return`${e}:${te(r)}`}};var qi=32,Do=(u=>(u[u.Auto=0]="Auto",u[u.Weapon=1]="Weapon",u[u.Voice=2]="Voice",u[u.Item=3]="Item",u[u.Body=4]="Body",u[u.Aux=5]="Aux",u[u.Footstep=6]="Footstep",u[u.Aux3=7]="Aux3",u[u.NoPhsAdd=8]="NoPhsAdd",u[u.Reliable=16]="Reliable",u[u.ForcePos=32]="ForcePos",u))(Do||{}),ka=-1,Ho=0,Da=1,Ha=2,Oa=3,_r=80,Na=.003;function jt(t){return t===3?t*.001:t*5e-4}function Oo(t){let e=jt(t);return e<=0?Number.POSITIVE_INFINITY:80+1/e}var No=class{constructor(e){this.factory=e}getContext(){return this.context||(this.context=this.factory()),this.context}async resume(){let e=this.getContext();e.state==="suspended"&&await e.resume()}getState(){return this.context?.state??"suspended"}};function Bo(t){let e=t.getContext(),r=e.createGain();r.gain.value=1;let n=e.createDynamicsCompressor(),o=e.createBiquadFilter?.();return o?(o.type="lowpass",o.frequency.value=2e4,o.Q.value=.707,r.connect(o),o.connect(n)):r.connect(n),n.connect(e.destination),{context:e,master:r,compressor:n,filter:o}}var Vo=class{constructor(e=new Zt){this.configStrings=e;this.buffers=new Map}registerName(e){return this.configStrings.soundIndex(e)}register(e,r){let n=this.registerName(e);return this.buffers.set(n,r),n}find(e){return this.configStrings.findSoundIndex(e)}get(e){return this.buffers.get(e)}has(e){return this.buffers.has(e)}};var Uo=class{constructor(e){this.vfs=e.vfs,this.registry=e.registry,this.contextController=e.context,this.soundRoot=e.soundRoot??"sound/",this.decodeAudio=e.decodeAudio??((r,n)=>{if(!r.decodeAudioData)throw new Error("decodeAudioData is not available on the provided audio context");return r.decodeAudioData(n)})}async precache(e){let r=[...new Set(e.map(i=>this.normalize(i)))],n={loaded:[],skipped:[],missing:[],errors:{}},o=this.contextController.getContext();for(let i of r)try{let s=this.registry.find(i);if(s!==void 0&&this.registry.has(s)){n.skipped.push(i);continue}if(!this.vfs.stat(i)){n.missing.push(i);continue}let l=(await this.vfs.readFile(i)).slice().buffer,d=await this.decodeAudio(o,l);this.registry.register(i,d),n.loaded.push(i)}catch(s){let a=s instanceof Error?s:new Error(String(s));n.errors[i]=a}return n}normalize(e){let r=te(e.replace(/^\//,""));return r.startsWith(this.soundRoot)?r:te(`${this.soundRoot}${r}`)}};var $l=7,Rn=t=>t&$l;function Go(t){return Array.from({length:32},()=>({entnum:0,entchannel:0,endTimeMs:0,isPlayer:!1,active:!1})).map(e=>({...e,isPlayer:e.entnum===t}))}function Wo(t,e,r,n){if(r<0)throw new Error("pickChannel: entchannel must be non-negative");let o=Rn(r),i=-1,s=Number.POSITIVE_INFINITY;for(let a=0;a<t.length;a+=1){let c=t[a],l=Rn(c.entchannel);if(o!==0&&c.entnum===e&&l===o){i=a;break}if(c.active&&c.entnum===n.playerEntity&&e!==n.playerEntity)continue;let d=c.endTimeMs-n.nowMs;(i===-1||d<s)&&(s=d,i=a)}return i===-1?void 0:i}function Xo(t,e,r,n,o){if(o)return{left:r,right:r,distanceComponent:0};let i=Es(t,e.origin),s=di(i),a=Oe(i),c=s-80;c<0&&(c=0),c*=jt(n);let l=li(e.right,a),d=e.mono??!1,u=d||n===0?1:.5*(1+l),m=d||n===0?1:.5*(1-l),f=Math.max(0,Math.floor(r*(1-c)*u));return{left:Math.max(0,Math.floor(r*(1-c)*m)),right:f,distanceComponent:c}}var qo=class{constructor(e){this.activeSources=new Map;this.contextController=e.context,this.registry=e.registry,this.playerEntity=e.playerEntity,this.channels=Go(e.playerEntity),this.listener=e.listener??{origin:zs,right:{x:1,y:0,z:0}},this.sfxVolume=e.sfxVolume??1,this.masterVolume=e.masterVolume??1,this.resolveOcclusion=e.resolveOcclusion,this.graph=Bo(this.contextController),this.graph.master.gain.value=this.masterVolume}setListener(e){this.listener=e}setMasterVolume(e){this.masterVolume=e,this.graph.master.gain.value=e}setSfxVolume(e){this.sfxVolume=e}async ensureRunning(){await this.contextController.resume()}play(e){let r=this.registry.get(e.soundIndex);if(!r)return;let n=this.graph.context,o=n.currentTime*1e3,i=Wo(this.channels,e.entity,e.channel,{nowMs:o,playerEntity:this.playerEntity});if(i===void 0)return;let s=this.activeSources.get(i);s&&(s.source.onended=null,s.source.stop(),this.activeSources.delete(i));let a=n.createBufferSource();a.buffer=r,a.loop=e.looping??!1;let c=e.origin??this.listener.origin,l=n.createGain(),d=this.createPanner(n,e.attenuation),u=this.resolveOcclusion?.(this.listener,c,e.attenuation),m=Ba(u?.gainScale??1),f=this.resolveOcclusion?this.createOcclusionFilter(n,u?.lowpassHz??2e4):void 0;this.applyOriginToPanner(d,c);let h=e.entity===this.playerEntity,y=Xo(c,this.listener,e.volume,e.attenuation,h),x=(e.volume===0?0:Math.max(y.left,y.right)/Math.max(1,e.volume))*(e.volume/255)*this.masterVolume*this.sfxVolume;l.gain.value=x*m;let M=n.currentTime+(e.timeOffsetMs??0)/1e3,v=(e.looping?Number.POSITIVE_INFINITY:r.duration*1e3)+M*1e3;a.connect(d),f?(d.connect(f),f.connect(l)):d.connect(l),l.connect(this.graph.master),a.start(M),a.onended=()=>{this.channels[i].active=!1,this.activeSources.delete(i)};let S={channelIndex:i,entnum:e.entity,entchannel:Rn(e.channel),endTimeMs:v,source:a,panner:d,gain:l,baseGain:x,origin:c,attenuation:e.attenuation,occlusion:f?{scale:m,lowpassHz:u?.lowpassHz,filter:f}:u?{scale:m,lowpassHz:u.lowpassHz}:void 0};return this.channels[i]={entnum:e.entity,entchannel:Rn(e.channel),endTimeMs:v,isPlayer:e.entity===this.playerEntity,active:!0},this.activeSources.set(i,S),S}stop(e){let r=this.activeSources.get(e);r&&(r.source.stop(),this.channels[e].active=!1,this.activeSources.delete(e))}stopEntitySounds(e){for(let[r,n]of[...this.activeSources.entries()])n.entnum===e&&(n.source.stop(),this.channels[r].active=!1,this.activeSources.delete(r))}updateEntityPosition(e,r){for(let n of this.activeSources.values())if(n.entnum===e&&(this.applyOriginToPanner(n.panner,r),n.origin=r,this.resolveOcclusion)){let o=this.resolveOcclusion(this.listener,r,n.attenuation);this.applyOcclusion(n,o)}}positionedSound(e,r,n,o){return this.play({entity:0,channel:0,soundIndex:r,volume:n,attenuation:o,origin:e})}ambientSound(e,r,n){return this.play({entity:0,channel:0,soundIndex:r,volume:n,attenuation:0,origin:e,looping:!0})}getChannelState(e){return this.channels[e]}getDiagnostics(){return{activeChannels:this.activeSources.size,masterVolume:this.masterVolume,sfxVolume:this.sfxVolume,channels:[...this.channels],activeSounds:[...this.activeSources.values()].map(e=>({entnum:e.entnum,entchannel:e.entchannel,channelIndex:e.channelIndex,origin:e.origin,gain:e.gain.gain.value,baseGain:e.baseGain,attenuation:e.attenuation,maxDistance:e.panner.maxDistance,distanceModel:e.panner.distanceModel,occlusion:e.occlusion?{scale:e.occlusion.scale,lowpassHz:e.occlusion.lowpassHz}:void 0}))}}setUnderwater(e,r=400){let n=this.graph.filter;n&&(n.type="lowpass",n.Q.value=.707,n.frequency.value=e?r:2e4)}createPanner(e,r){let n=e.createPanner?e.createPanner():Object.assign(e.createGain(),{positionX:{value:this.listener.origin.x},positionY:{value:this.listener.origin.y},positionZ:{value:this.listener.origin.z}});return this.configurePanner(n,r)}configurePanner(e,r){let n=jt(r);return e.refDistance=80,e.maxDistance=Oo(r),e.rolloffFactor=n,e.distanceModel=r===0?"linear":"inverse",e.positionX.value=this.listener.origin.x,e.positionY.value=this.listener.origin.y,e.positionZ.value=this.listener.origin.z,e}applyOriginToPanner(e,r){e.positionX.value=r.x,e.positionY.value=r.y,e.positionZ.value=r.z}createOcclusionFilter(e,r){if(!e.createBiquadFilter)return;let n=e.createBiquadFilter();return n.type="lowpass",n.Q.value=.707,n.frequency.value=Yi(r,10,2e4),n}applyOcclusion(e,r){let n=Ba(r?.gainScale??1);if(e.gain.gain.value=e.baseGain*n,e.occlusion?.filter){let o=r?.lowpassHz??2e4;e.occlusion.filter.frequency.value=Yi(o,10,2e4)}e.occlusion?(e.occlusion.scale=n,e.occlusion.lowpassHz=r?.lowpassHz):r&&(e.occlusion={scale:n,lowpassHz:r.lowpassHz})}},Yi=(t,e,r)=>Math.min(r,Math.max(e,t)),Ba=t=>Yi(t,0,1);var Yo=class{constructor(e){this.createElement=e.createElement,this.resolveSource=e.resolveSource??(async r=>r),this.volume=e.volume??1}async play(e,{loop:r=!0,restart:n=!1}={}){if(this.track===e&&this.element){this.element.loop=r,this.element.volume=this.volume,n&&(this.element.currentTime=0),(this.element.paused||n)&&await this.element.play();return}let o=await this.resolveSource(e),i=this.createElement();i.src=o,i.loop=r,i.volume=this.volume,i.currentTime=0,i.load(),await i.play(),this.element=i,this.track=e}pause(){!this.element||this.element.paused||this.element.pause()}async resume(){!this.element||!this.element.paused||await this.element.play()}stop(){this.element&&(this.element.pause(),this.element.currentTime=0,this.element=void 0,this.track=void 0)}setVolume(e){this.volume=e,this.element&&(this.element.volume=e)}getState(){let e=!!(this.element&&!this.element.paused&&!this.element.ended),r=!!this.element?.paused;return{track:this.track,paused:r,playing:e,volume:this.volume}}};var Ko=class{constructor(e){this.registry=e.registry,this.system=e.system,this.music=e.music}soundindex(e){return this.registry.registerName(e)}sound(e,r,n,o,i,s){this.system.play({entity:e,channel:r,soundIndex:n,volume:o,attenuation:i,timeOffsetMs:s})}positioned_sound(e,r,n,o){this.system.positionedSound(e,r,n,o)}loop_sound(e,r,n,o,i){this.system.play({entity:e,channel:r,soundIndex:n,volume:o,attenuation:i,looping:!0})}stop_entity_sounds(e){this.system.stopEntitySounds(e)}set_listener(e){this.system.setListener(e)}play_music(e,r=!0){return this.music?this.music.play(e,{loop:r}):Promise.resolve()}pause_music(){this.music?.pause()}resume_music(){return this.music?.resume()??Promise.resolve()}stop_music(){this.music?.stop()}set_music_volume(e){this.music?.setVolume(e)}play_ambient(e,r,n){this.system.ambientSound(e,r,n)}play_channel(e){this.system.play({...e})}};function Ql(t){t.enable(t.DEPTH_TEST),t.depthFunc(t.LEQUAL),t.enable(t.CULL_FACE),t.cullFace(t.BACK),t.enable(t.BLEND),t.blendFuncSeparate(t.SRC_ALPHA,t.ONE_MINUS_SRC_ALPHA,t.ONE,t.ONE_MINUS_SRC_ALPHA)}function Jl(t,e,r,n){for(let o of e){let i=t.getExtension(o);if(!i)throw new Error(`Missing required WebGL extension: ${o}`);n.set(o,i)}for(let o of r){let i=t.getExtension(o);i&&n.set(o,i)}}function Va(t,e={}){let{contextAttributes:r,requiredExtensions:n=[],optionalExtensions:o=[]}=e,i=t.getContext("webgl2",r??{antialias:!0});if(!i)throw new Error("WebGL2 not supported or failed to initialize");Ql(i);let s=new Map;Jl(i,n,o,s);let a=!1,c=new Set,l=new Set,d=m=>{a=!0,m.preventDefault();for(let f of c)f()},u=()=>{a=!1;for(let m of l)m()};return t.addEventListener("webglcontextlost",d),t.addEventListener("webglcontextrestored",u),{gl:i,extensions:s,isLost:()=>a,onLost(m){return c.add(m),()=>c.delete(m)},onRestored(m){return l.add(m),()=>l.delete(m)},dispose(){t.removeEventListener("webglcontextlost",d),t.removeEventListener("webglcontextrestored",u),c.clear(),l.clear(),s.clear()}}}function Ua(t,e,r){let n=t.createShader(e);if(!n)throw new Error("Failed to allocate shader");if(t.shaderSource(n,r),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS)){let i=t.getShaderInfoLog(n)??"Unknown shader compile failure";throw t.deleteShader(n),new Error(i)}return n}function Zl(t,e,r,n){let o=t.createProgram();if(!o)throw new Error("Failed to allocate shader program");if(t.attachShader(o,e),t.attachShader(o,r),n)for(let[s,a]of Object.entries(n))t.bindAttribLocation(o,a,s);if(t.linkProgram(o),!t.getProgramParameter(o,t.LINK_STATUS)){let s=t.getProgramInfoLog(o)??"Unknown shader link failure";throw t.deleteProgram(o),new Error(s)}return o}var ye=class t{constructor(e,r){this.uniformLocations=new Map;this.attributeLocations=new Map;this.gl=e,this.program=r}static create(e,r,n){let o=Ua(e,e.VERTEX_SHADER,r.vertex),i=Ua(e,e.FRAGMENT_SHADER,r.fragment);try{let s=Zl(e,o,i,n);return new t(e,s)}finally{e.deleteShader(o),e.deleteShader(i)}}use(){this.gl.useProgram(this.program)}getUniformLocation(e){if(!this.uniformLocations.has(e)){let r=this.gl.getUniformLocation(this.program,e);this.uniformLocations.set(e,r)}return this.uniformLocations.get(e)??null}getAttributeLocation(e){if(!this.attributeLocations.has(e)){let r=this.gl.getAttribLocation(this.program,e);this.attributeLocations.set(e,r)}return this.attributeLocations.get(e)??-1}dispose(){this.gl.deleteProgram(this.program),this.uniformLocations.clear(),this.attributeLocations.clear()}};function Ga(t,e,r){return ye.create(t,e,r)}var xe=class{constructor(e,r=e.STATIC_DRAW,n){this.gl=e,this.target=n??e.ARRAY_BUFFER;let o=e.createBuffer();if(!o)throw new Error("Failed to allocate buffer");this.buffer=o,e.bindBuffer(this.target,this.buffer),e.bufferData(this.target,0,r)}bind(){this.gl.bindBuffer(this.target,this.buffer)}upload(e,r=this.gl.STATIC_DRAW){this.bind(),this.gl.bufferData(this.target,e,r)}update(e,r=0){this.bind(),this.gl.bufferSubData(this.target,r,e)}dispose(){this.gl.deleteBuffer(this.buffer)}},De=class extends xe{constructor(e,r=e.STATIC_DRAW){super(e,r,e.ELEMENT_ARRAY_BUFFER)}},Se=class{constructor(e){this.gl=e;let r=e.createVertexArray();if(!r)throw new Error("Failed to allocate vertex array object");this.vao=r}bind(){this.gl.bindVertexArray(this.vao)}configureAttributes(e,r){this.bind(),r&&r.bind();for(let n of e)this.gl.enableVertexAttribArray(n.index),this.gl.vertexAttribPointer(n.index,n.size,n.type,n.normalized??!1,n.stride??0,n.offset??0),n.divisor!==void 0&&this.gl.vertexAttribDivisor(n.index,n.divisor)}dispose(){this.gl.deleteVertexArray(this.vao)}},Ar=class{constructor(e,r=e.TEXTURE_2D){this.width=0;this.height=0;this.gl=e,this.target=r;let n=e.createTexture();if(!n)throw new Error("Failed to allocate texture");this.texture=n}bind(e=0){this.gl.activeTexture(this.gl.TEXTURE0+e),this.gl.bindTexture(this.target,this.texture)}setParameters(e){this.bind(),e.wrapS!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_WRAP_S,e.wrapS),e.wrapT!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_WRAP_T,e.wrapT),e.minFilter!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_MIN_FILTER,e.minFilter),e.magFilter!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_MAG_FILTER,e.magFilter)}upload(e,r,n){this.width=e,this.height=r,this.uploadImage(0,this.gl.RGBA,e,r,0,this.gl.RGBA,this.gl.UNSIGNED_BYTE,n)}uploadImage(e,r,n,o,i,s,a,c){this.bind(),this.gl.texImage2D(this.target,e,r,n,o,i,s,a,c)}dispose(){this.gl.deleteTexture(this.texture)}},wr=class{constructor(e){this.gl=e,this.target=e.TEXTURE_CUBE_MAP;let r=e.createTexture();if(!r)throw new Error("Failed to allocate cubemap texture");this.texture=r}bind(e=0){this.gl.activeTexture(this.gl.TEXTURE0+e),this.gl.bindTexture(this.target,this.texture)}setParameters(e){this.bind(),e.wrapS!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_WRAP_S,e.wrapS),e.wrapT!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_WRAP_T,e.wrapT),e.minFilter!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_MIN_FILTER,e.minFilter),e.magFilter!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_MAG_FILTER,e.magFilter)}uploadFace(e,r,n,o,i,s,a,c,l){this.bind(),this.gl.texImage2D(e,r,n,o,i,s,a,c,l)}dispose(){this.gl.deleteTexture(this.texture)}},jo=class{constructor(e){this.gl=e;let r=e.createFramebuffer();if(!r)throw new Error("Failed to allocate framebuffer");this.framebuffer=r}bind(e=this.gl.FRAMEBUFFER){this.gl.bindFramebuffer(e,this.framebuffer)}attachTexture2D(e,r,n=0){this.bind(),this.gl.framebufferTexture2D(this.gl.FRAMEBUFFER,e,r.target,r.texture,n)}dispose(){this.gl.deleteFramebuffer(this.framebuffer)}};var ji=4,Ki=7*ji,$i=[{index:0,size:3,type:5126,stride:Ki,offset:0},{index:1,size:2,type:5126,stride:Ki,offset:3*ji},{index:2,size:2,type:5126,stride:Ki,offset:5*ji}];function e0(t,e){return{width:t,height:t,padding:e,data:new Uint8Array(t*t*4),cursorX:0,cursorY:0,rowHeight:0}}function t0(t){let e=t.width*t.height;if(e===0)throw new Error("Invalid lightmap with zero area");let r=t.samples.byteLength/e;if(!Number.isInteger(r)||r<3||r>4)throw new Error("Unsupported lightmap channel count");return r}function r0(t,e,r){let n=t0(r),o=t.width*4,i=e.x+t.padding,s=e.y+t.padding,a=0;for(let c=0;c<r.height;c++){let l=(s+c)*o+i*4;for(let d=0;d<r.width;d++){let u=l+d*4;t.data[u]=r.samples[a],t.data[u+1]=r.samples[a+1],t.data[u+2]=r.samples[a+2],t.data[u+3]=n===4?r.samples[a+3]:255,a+=n}}}function n0(t,e,r){let n=e.width+r.lightmapPadding*2,o=e.height+r.lightmapPadding*2;if(n>r.atlasSize||o>r.atlasSize)throw new Error("Lightmap too large for atlas");for(let a of t){if(a.cursorX+n>a.width&&(a.cursorX=0,a.cursorY+=a.rowHeight+r.lightmapPadding,a.rowHeight=0),a.cursorY+o>a.height)continue;let c={atlasIndex:t.indexOf(a),x:a.cursorX,y:a.cursorY,width:e.width,height:e.height};return a.cursorX+=n+r.lightmapPadding,a.rowHeight=Math.max(a.rowHeight,o),{placement:c,atlas:a}}let i=e0(r.atlasSize,r.lightmapPadding);t.push(i);let s={atlasIndex:t.length-1,x:0,y:0,width:e.width,height:e.height};return i.cursorX=n+r.lightmapPadding,i.rowHeight=o,{placement:s,atlas:i}}function $o(t){return t instanceof Float32Array?t:new Float32Array(t)}function o0(t,e){if(!t){let n=new Uint16Array(e);for(let o=0;o<e;o++)n[o]=o;return n}return t instanceof Uint16Array?t:new Uint16Array(t)}function i0(t,e){let r=new Float32Array(t.length);for(let n=0;n<t.length;n+=2)r[n]=e.offset[0]+t[n]*e.scale[0],r[n+1]=e.offset[1]+t[n+1]*e.scale[1];return r}function s0(t,e){let r=$o(t.vertices),n=$o(t.textureCoords),o=e?i0($o(t.lightmapCoords??t.textureCoords),e):$o(t.lightmapCoords??new Float32Array(n.length)),i=r.length/3;if(n.length/2!==i)throw new Error("Texture coordinates count mismatch");if(o.length/2!==i)throw new Error("Lightmap coordinates count mismatch");let s=new Float32Array(i*7);for(let a=0;a<i;a++){let c=a*3,l=a*2,d=a*7;s[d]=r[c],s[d+1]=r[c+1],s[d+2]=r[c+2],s[d+3]=n[l],s[d+4]=n[l+1],s[d+5]=o[l],s[d+6]=o[l+1]}return s}function Wa(t,e,r={}){let n={atlasSize:r.atlasSize??1024,lightmapPadding:r.lightmapPadding??1},o=[],i=new Map;e.forEach((c,l)=>{if(!c.lightmap)return;let{placement:d,atlas:u}=n0(o,c.lightmap,n);r0(u,d,c.lightmap),i.set(l,{atlasIndex:d.atlasIndex,offset:[(d.x+n.lightmapPadding)/n.atlasSize,(d.y+n.lightmapPadding)/n.atlasSize],scale:[d.width/n.atlasSize,d.height/n.atlasSize]})});let s=o.map(c=>{let l=new Ar(t);return l.setParameters({wrapS:t.CLAMP_TO_EDGE,wrapT:t.CLAMP_TO_EDGE,minFilter:t.LINEAR,magFilter:t.LINEAR}),l.uploadImage(0,t.RGBA,c.width,c.height,0,t.RGBA,t.UNSIGNED_BYTE,c.data),{texture:l,width:c.width,height:c.height,pixels:c.data}});return{surfaces:e.map((c,l)=>{let d=i.get(l),u=s0(c,d),m=o0(c.indices,u.length/7),f=new xe(t,t.STATIC_DRAW,t.ARRAY_BUFFER);f.upload(u);let h=new De(t,t.STATIC_DRAW);h.upload(m);let y=new Se(t);return y.configureAttributes($i,f),{vao:y,vertexBuffer:f,indexBuffer:h,indexCount:m.length,vertexCount:u.length/7,texture:c.texture,surfaceFlags:c.surfaceFlags??Fr,lightmap:d,vertexData:u,indexData:m}}),lightmaps:s}}function Lr(t){let{normal:e,distance:r}=t,n=Math.sqrt(e.x*e.x+e.y*e.y+e.z*e.z);if(n===0)return t;let o=1/n;return{normal:{x:e.x*o,y:e.y*o,z:e.z*o},distance:r*o}}function Xa(t){if(t.length!==16)throw new Error("View-projection matrix must contain 16 elements");let e=t[0],r=t[4],n=t[8],o=t[12],i=t[1],s=t[5],a=t[9],c=t[13],l=t[2],d=t[6],u=t[10],m=t[14],f=t[3],h=t[7],y=t[11],p=t[15];return[Lr({normal:{x:f+e,y:h+r,z:y+n},distance:p+o}),Lr({normal:{x:f-e,y:h-r,z:y-n},distance:p-o}),Lr({normal:{x:f+i,y:h+s,z:y+a},distance:p+c}),Lr({normal:{x:f-i,y:h-s,z:y-a},distance:p-c}),Lr({normal:{x:f+l,y:h+d,z:y+u},distance:p+m}),Lr({normal:{x:f-l,y:h-d,z:y-u},distance:p-m})]}function a0(t,e){return t.normal.x*e.x+t.normal.y*e.y+t.normal.z*e.z+t.distance}function kn(t,e,r){for(let n of r){let o=n.normal.x>=0?e.x:t.x,i=n.normal.y>=0?e.y:t.y,s=n.normal.z>=0?e.z:t.z;if(a0(n,{x:o,y:i,z:s})<0)return!1}return!0}function qa(t){return t<0}function Ya(t){return-t-1}function Ka(t,e){return t.normal[0]*e.x+t.normal[1]*e.y+t.normal[2]*e.z-t.dist}function c0(t,e,r){if(!t||e<0||r<0)return!0;let n=Math.ceil(t.numClusters/8),o=t.clusters[e].pvs,i=Math.floor(r/8),s=1<<r%8;return i<0||i>=n?!1:(o[i]&s)!==0}function l0(t,e){let r={x:t.mins[0],y:t.mins[1],z:t.mins[2]},n={x:t.maxs[0],y:t.maxs[1],z:t.maxs[2]};return kn(r,n,e)}function Ji(t,e){let r=0;for(;r>=0;){let n=t.nodes[r],o=t.planes[n.planeIndex],s=Ka(o,e)>=0?0:1,a=n.children[s];if(qa(a))return Ya(a);r=a}return-1}function d0(t,e){let r=t.leafs[e],n=[];for(let o=0;o<r.numLeafFaces;o+=1)n.push(t.leafLists.leafFaces[e][o]);return n}function Qi(t,e,r,n,o,i,s){if(qa(e)){let m=Ya(e),f=t.leafs[m];if(!c0(t.visibility,o,f.cluster)||!l0(f,n))return;let h={x:(f.mins[0]+f.maxs[0])*.5,y:(f.mins[1]+f.maxs[1])*.5,z:(f.mins[2]+f.maxs[2])*.5},y=h.x-r.x,p=h.y-r.y,x=h.z-r.z,M=-(y*y+p*p+x*x);for(let v of d0(t,m))s.has(v)||(s.add(v),i.push({faceIndex:v,leafIndex:m,sortKey:M}));return}let a=t.nodes[e],c=t.planes[a.planeIndex],l=Ka(c,r),d=l>=0?a.children[0]:a.children[1],u=l>=0?a.children[1]:a.children[0];kn({x:a.mins[0],y:a.mins[1],z:a.mins[2]},{x:a.maxs[0],y:a.maxs[1],z:a.maxs[2]},n)&&(Qi(t,d,r,n,o,i,s),Qi(t,u,r,n,o,i,s))}function ja(t,e,r){let n=Ji(t,e),o=n>=0?t.leafs[n].cluster:-1,i=[];return Qi(t,0,e,r,o,i,new Set),i}var Zi=`#version 300 es
142
142
  precision highp float;
143
143
 
144
144
  layout(location = 0) in vec3 a_position;
@@ -160,7 +160,7 @@ void main() {
160
160
  v_texCoord = applyScroll(a_texCoord, u_texScroll);
161
161
  v_lightmapCoord = applyScroll(a_lightmapCoord, u_lightmapScroll);
162
162
  gl_Position = u_modelViewProjection * vec4(a_position, 1.0);
163
- }`,Qi=`#version 300 es
163
+ }`,es=`#version 300 es
164
164
  precision highp float;
165
165
 
166
166
  in vec2 v_texCoord;
@@ -197,7 +197,7 @@ void main() {
197
197
  }
198
198
 
199
199
  o_color = vec4(base.rgb, base.a * u_alpha);
200
- }`,Xa=[0,255,255,255];function Ji(t=Xa,e=[]){let r=new Float32Array(4);for(let n=0;n<4;n+=1){let o=t[n]??255;if(o===255){r[n]=0;continue}let i=e[o];r[n]=i!==void 0?i:1}return r}function n0(t){return[-(t*.25%1),0]}function Zi(t=Tr,e=0){let r=(t&Is)!==0,n=(t&Ts)!==0,o=(t&Cs)!==0,i=(t&Ps)!==0,s=(t&Fs)!==0,a=i?.33:s?.66:1,c=i||s,l=!c&&!o,d=r?n0(e):[0,0];return{alpha:a,blend:c,depthWrite:l,warp:n,flowOffset:d,sky:o}}var Ko=class{constructor(e){this.gl=e,this.program=ye.create(e,{vertex:$i,fragment:Qi},{a_position:0,a_texCoord:1,a_lightmapCoord:2}),this.uniformMvp=this.program.getUniformLocation("u_modelViewProjection"),this.uniformTexScroll=this.program.getUniformLocation("u_texScroll"),this.uniformLmScroll=this.program.getUniformLocation("u_lightmapScroll"),this.uniformLightStyles=this.program.getUniformLocation("u_lightStyleFactors"),this.uniformAlpha=this.program.getUniformLocation("u_alpha"),this.uniformApplyLightmap=this.program.getUniformLocation("u_applyLightmap"),this.uniformWarp=this.program.getUniformLocation("u_warp"),this.uniformDiffuse=this.program.getUniformLocation("u_diffuseMap"),this.uniformLightmap=this.program.getUniformLocation("u_lightmapAtlas"),this.uniformTime=this.program.getUniformLocation("u_time")}bind(e){let{modelViewProjection:r,styleIndices:n=Xa,styleValues:o=[],diffuseSampler:i=0,lightmapSampler:s,surfaceFlags:a=Tr,timeSeconds:c=0}=e,l=Zi(a,c),d=Ji(n,o);this.program.use(),this.gl.uniformMatrix4fv(this.uniformMvp,!1,r),this.gl.uniform2f(this.uniformTexScroll,l.flowOffset[0],l.flowOffset[1]),this.gl.uniform2f(this.uniformLmScroll,l.flowOffset[0],l.flowOffset[1]),this.gl.uniform4fv(this.uniformLightStyles,d),this.gl.uniform1f(this.uniformAlpha,l.alpha);let u=!l.sky&&s!==void 0;return this.gl.uniform1i(this.uniformApplyLightmap,u?1:0),this.gl.uniform1i(this.uniformWarp,l.warp?1:0),this.gl.uniform1f(this.uniformTime,c),this.gl.uniform1i(this.uniformDiffuse,i),this.gl.uniform1i(this.uniformLightmap,s??0),l}dispose(){this.program.dispose()}};function qa(t,e){t.depthMask(e.depthWrite),e.blend?(t.enable(t.BLEND),t.blendFunc(t.SRC_ALPHA,t.ONE_MINUS_SRC_ALPHA)):t.disable(t.BLEND)}var Ya=new Float32Array([-1,-1,1,1,-1,1,1,1,1,-1,-1,1,1,1,1,-1,1,1,-1,-1,-1,-1,1,-1,1,1,-1,-1,-1,-1,1,1,-1,1,-1,-1,-1,-1,-1,-1,-1,1,-1,1,1,-1,-1,-1,-1,1,1,-1,1,-1,1,-1,-1,1,1,-1,1,1,1,1,-1,-1,1,1,1,1,-1,1,-1,1,-1,-1,1,1,1,1,1,-1,1,-1,1,1,1,1,1,-1,-1,-1,-1,1,-1,-1,1,-1,1,-1,-1,-1,1,-1,1,-1,-1,1]),es=`#version 300 es
200
+ }`,$a=[0,255,255,255];function ts(t=$a,e=[]){let r=new Float32Array(4);for(let n=0;n<4;n+=1){let o=t[n]??255;if(o===255){r[n]=0;continue}let i=e[o];r[n]=i!==void 0?i:1}return r}function u0(t){return[-(t*.25%1),0]}function rs(t=Fr,e=0){let r=(t&Ds)!==0,n=(t&Is)!==0,o=(t&Fs)!==0,i=(t&Rs)!==0,s=(t&ks)!==0,a=i?.33:s?.66:1,c=i||s,l=!c&&!o,d=r?u0(e):[0,0];return{alpha:a,blend:c,depthWrite:l,warp:n,flowOffset:d,sky:o}}var Qo=class{constructor(e){this.gl=e,this.program=ye.create(e,{vertex:Zi,fragment:es},{a_position:0,a_texCoord:1,a_lightmapCoord:2}),this.uniformMvp=this.program.getUniformLocation("u_modelViewProjection"),this.uniformTexScroll=this.program.getUniformLocation("u_texScroll"),this.uniformLmScroll=this.program.getUniformLocation("u_lightmapScroll"),this.uniformLightStyles=this.program.getUniformLocation("u_lightStyleFactors"),this.uniformAlpha=this.program.getUniformLocation("u_alpha"),this.uniformApplyLightmap=this.program.getUniformLocation("u_applyLightmap"),this.uniformWarp=this.program.getUniformLocation("u_warp"),this.uniformDiffuse=this.program.getUniformLocation("u_diffuseMap"),this.uniformLightmap=this.program.getUniformLocation("u_lightmapAtlas"),this.uniformTime=this.program.getUniformLocation("u_time")}bind(e){let{modelViewProjection:r,styleIndices:n=$a,styleValues:o=[],diffuseSampler:i=0,lightmapSampler:s,surfaceFlags:a=Fr,timeSeconds:c=0}=e,l=rs(a,c),d=ts(n,o);this.program.use(),this.gl.uniformMatrix4fv(this.uniformMvp,!1,r),this.gl.uniform2f(this.uniformTexScroll,l.flowOffset[0],l.flowOffset[1]),this.gl.uniform2f(this.uniformLmScroll,l.flowOffset[0],l.flowOffset[1]),this.gl.uniform4fv(this.uniformLightStyles,d),this.gl.uniform1f(this.uniformAlpha,l.alpha);let u=!l.sky&&s!==void 0;return this.gl.uniform1i(this.uniformApplyLightmap,u?1:0),this.gl.uniform1i(this.uniformWarp,l.warp?1:0),this.gl.uniform1f(this.uniformTime,c),this.gl.uniform1i(this.uniformDiffuse,i),this.gl.uniform1i(this.uniformLightmap,s??0),l}dispose(){this.program.dispose()}};function Qa(t,e){t.depthMask(e.depthWrite),e.blend?(t.enable(t.BLEND),t.blendFunc(t.SRC_ALPHA,t.ONE_MINUS_SRC_ALPHA)):t.disable(t.BLEND)}var Ja=new Float32Array([-1,-1,1,1,-1,1,1,1,1,-1,-1,1,1,1,1,-1,1,1,-1,-1,-1,-1,1,-1,1,1,-1,-1,-1,-1,1,1,-1,1,-1,-1,-1,-1,-1,-1,-1,1,-1,1,1,-1,-1,-1,-1,1,1,-1,1,-1,1,-1,-1,1,1,-1,1,1,1,1,-1,-1,1,1,1,1,-1,1,-1,1,-1,-1,1,1,1,1,1,-1,1,-1,1,1,1,1,1,-1,-1,-1,-1,1,-1,-1,1,-1,1,-1,-1,-1,1,-1,1,-1,-1,1]),ns=`#version 300 es
201
201
  precision highp float;
202
202
 
203
203
  layout(location = 0) in vec3 a_position;
@@ -212,7 +212,7 @@ void main() {
212
212
  dir.xy += u_scroll;
213
213
  v_direction = dir;
214
214
  gl_Position = u_viewProjectionNoTranslation * vec4(a_position, 1.0);
215
- }`,ts=`#version 300 es
215
+ }`,os=`#version 300 es
216
216
  precision highp float;
217
217
 
218
218
  in vec3 v_direction;
@@ -222,7 +222,7 @@ out vec4 o_color;
222
222
 
223
223
  void main() {
224
224
  o_color = texture(u_skybox, v_direction);
225
- }`,$o=class{constructor(e){this.gl=e,this.program=ye.create(e,{vertex:es,fragment:ts},{a_position:0}),this.vao=new Se(e),this.vbo=new xe(e,e.STATIC_DRAW),this.vbo.upload(Ya,e.STATIC_DRAW);let r=[{index:0,size:3,type:e.FLOAT,stride:12,offset:0}];this.vao.configureAttributes(r,this.vbo),this.uniformViewProj=this.program.getUniformLocation("u_viewProjectionNoTranslation"),this.uniformScroll=this.program.getUniformLocation("u_scroll"),this.uniformSampler=this.program.getUniformLocation("u_skybox"),this.cubemap=new _r(e),this.cubemap.setParameters({minFilter:e.LINEAR,magFilter:e.LINEAR,wrapS:e.CLAMP_TO_EDGE,wrapT:e.CLAMP_TO_EDGE})}bind(e){let{viewProjection:r,scroll:n,textureUnit:o=0}=e;this.program.use(),this.gl.depthMask(!1),this.gl.uniformMatrix4fv(this.uniformViewProj,!1,r),this.gl.uniform2f(this.uniformScroll,n[0],n[1]),this.gl.uniform1i(this.uniformSampler,o),this.cubemap.bind(o),this.vao.bind()}draw(){this.gl.drawArrays(this.gl.TRIANGLES,0,Ya.length/3)}dispose(){this.vbo.dispose(),this.vao.dispose(),this.cubemap.dispose(),this.program.dispose()}};function ja(t){let e=new Float32Array(t);return e[12]=0,e[13]=0,e[14]=0,e}function Ka(t,e=[.01,.02]){let[r,n]=e;return[r*t,n*t]}var ns=`#version 300 es
225
+ }`,Jo=class{constructor(e){this.gl=e,this.program=ye.create(e,{vertex:ns,fragment:os},{a_position:0}),this.vao=new Se(e),this.vbo=new xe(e,e.STATIC_DRAW),this.vbo.upload(Ja,e.STATIC_DRAW);let r=[{index:0,size:3,type:e.FLOAT,stride:12,offset:0}];this.vao.configureAttributes(r,this.vbo),this.uniformViewProj=this.program.getUniformLocation("u_viewProjectionNoTranslation"),this.uniformScroll=this.program.getUniformLocation("u_scroll"),this.uniformSampler=this.program.getUniformLocation("u_skybox"),this.cubemap=new wr(e),this.cubemap.setParameters({minFilter:e.LINEAR,magFilter:e.LINEAR,wrapS:e.CLAMP_TO_EDGE,wrapT:e.CLAMP_TO_EDGE})}bind(e){let{viewProjection:r,scroll:n,textureUnit:o=0}=e;this.program.use(),this.gl.depthMask(!1),this.gl.uniformMatrix4fv(this.uniformViewProj,!1,r),this.gl.uniform2f(this.uniformScroll,n[0],n[1]),this.gl.uniform1i(this.uniformSampler,o),this.cubemap.bind(o),this.vao.bind()}draw(){this.gl.drawArrays(this.gl.TRIANGLES,0,Ja.length/3)}dispose(){this.vbo.dispose(),this.vao.dispose(),this.cubemap.dispose(),this.program.dispose()}};function Za(t){let e=new Float32Array(t);return e[12]=0,e[13]=0,e[14]=0,e}function ec(t,e=[.01,.02]){let[r,n]=e;return[r*t,n*t]}var ss=`#version 300 es
226
226
  precision highp float;
227
227
 
228
228
  layout(location = 0) in vec3 a_position;
@@ -240,7 +240,7 @@ void main() {
240
240
  v_light = max(dot(normal, normalize(u_lightDir)), 0.0);
241
241
  v_texCoord = a_texCoord;
242
242
  gl_Position = u_modelViewProjection * vec4(a_position, 1.0);
243
- }`,os=`#version 300 es
243
+ }`,as=`#version 300 es
244
244
  precision highp float;
245
245
 
246
246
  in vec2 v_texCoord;
@@ -254,7 +254,7 @@ out vec4 o_color;
254
254
  void main() {
255
255
  vec4 albedo = texture(u_diffuseMap, v_texCoord) * u_tint;
256
256
  o_color = vec4(albedo.rgb * v_light, albedo.a);
257
- }`;function o0(t){let e=t.x*t.x+t.y*t.y+t.z*t.z;if(e<=0)return{x:0,y:0,z:1};let r=1/Math.sqrt(e);return{x:t.x*r,y:t.y*r,z:t.z*r}}function rs(t,e,r){return t+(e-t)*r}function $a(t,e,r){return{x:rs(t.x,e.x,r),y:rs(t.y,e.y,r),z:rs(t.z,e.z,r)}}function i0(t,e,r){return[t/r.skinWidth,1-e/r.skinHeight]}function is(t){if(t.glCommands.length===0){let n=[],o=[];return t.triangles.forEach(i=>{let s=n.length;for(let a=0;a<3;a+=1){let c=i.vertexIndices[a],l=i.texCoordIndices[a],d=t.texCoords[l];n.push({vertexIndex:c,texCoord:i0(d.s,d.t,t.header)})}o.push(s,s+1,s+2)}),{vertices:n,indices:new Uint16Array(o)}}let e=[],r=[];for(let n of t.glCommands){let o=e.length;if(e.push(...n.vertices.map(i=>({vertexIndex:i.vertexIndex,texCoord:[i.s,1-i.t]}))),n.mode==="strip")for(let i=0;i<n.vertices.length-2;i+=1){let s=i%2===0,a=o+i+(s?0:1),c=o+i+(s?1:0),l=o+i+2;r.push(a,c,l)}else for(let i=1;i<n.vertices.length-1;i+=1)r.push(o,o+i,o+i+1)}return{vertices:e,indices:new Uint16Array(r)}}function ss(t,e,r){let{currentFrame:n,nextFrame:o,lerp:i}=r,s=t.frames[n],a=t.frames[o];if(!s||!a)throw new Error("Requested MD2 frames are out of range");let c=new Float32Array(e.vertices.length*8);return e.vertices.forEach((l,d)=>{let u=s.vertices[l.vertexIndex],m=a.vertices[l.vertexIndex];if(!u||!m)throw new Error("MD2 vertex index out of range for frame");let f=$a(u.position,m.position,i),h=o0($a(u.normal,m.normal,i)),y=d*8;c[y]=f.x,c[y+1]=f.y,c[y+2]=f.z,c[y+3]=h.x,c[y+4]=h.y,c[y+5]=h.z,c[y+6]=l.texCoord[0],c[y+7]=l.texCoord[1]}),c}var Qo=class{constructor(e,r,n){this.gl=e,this.geometry=is(r),this.vertexBuffer=new xe(e,e.STATIC_DRAW),this.indexBuffer=new De(e,e.STATIC_DRAW),this.vertexArray=new Se(e),this.indexCount=this.geometry.indices.length,this.vertexArray.configureAttributes([{index:0,size:3,type:e.FLOAT,stride:32,offset:0},{index:1,size:3,type:e.FLOAT,stride:32,offset:12},{index:2,size:2,type:e.FLOAT,stride:32,offset:24}],this.vertexBuffer),this.vertexArray.bind(),this.indexBuffer.bind(),this.indexBuffer.upload(this.geometry.indices,e.STATIC_DRAW),this.update(r,n)}update(e,r){let n=ss(e,this.geometry,r);this.vertexBuffer.upload(n,this.gl.STATIC_DRAW)}bind(){this.vertexArray.bind(),this.indexBuffer.bind()}dispose(){this.vertexBuffer.dispose(),this.indexBuffer.dispose(),this.vertexArray.dispose()}},Jo=class{constructor(e){this.gl=e,this.program=ye.create(e,{vertex:ns,fragment:os},{a_position:0,a_normal:1,a_texCoord:2}),this.uniformMvp=this.program.getUniformLocation("u_modelViewProjection"),this.uniformLightDir=this.program.getUniformLocation("u_lightDir"),this.uniformTint=this.program.getUniformLocation("u_tint"),this.uniformDiffuse=this.program.getUniformLocation("u_diffuseMap")}bind(e){let{modelViewProjection:r,lightDirection:n=[0,0,1],tint:o=[1,1,1,1],diffuseSampler:i=0}=e,s=new Float32Array(n),a=new Float32Array(o);this.program.use(),this.gl.uniformMatrix4fv(this.uniformMvp,!1,r),this.gl.uniform3fv(this.uniformLightDir,s),this.gl.uniform4fv(this.uniformTint,a),this.gl.uniform1i(this.uniformDiffuse,i)}draw(e){e.bind(),this.gl.drawElements(this.gl.TRIANGLES,e.indexCount,this.gl.UNSIGNED_SHORT,0)}dispose(){this.program.dispose()}};var Y=1e-6,He=typeof Float32Array<"u"?Float32Array:Array,as=Math.random;function Zo(t){return t>=0?Math.round(t):t%.5===0?Math.floor(t):Math.round(t)}var Fh=Math.PI/180,Ih=180/Math.PI;var oe={};ii(oe,{add:()=>W0,adjoint:()=>f0,clone:()=>a0,copy:()=>c0,create:()=>s0,decompose:()=>T0,determinant:()=>p0,equals:()=>j0,exactEquals:()=>Y0,frob:()=>G0,fromQuat:()=>I0,fromQuat2:()=>z0,fromRotation:()=>_0,fromRotationTranslation:()=>ec,fromRotationTranslationScale:()=>P0,fromRotationTranslationScaleOrigin:()=>F0,fromScaling:()=>M0,fromTranslation:()=>S0,fromValues:()=>l0,fromXRotation:()=>A0,fromYRotation:()=>w0,fromZRotation:()=>L0,frustum:()=>R0,getRotation:()=>C0,getScaling:()=>tc,getTranslation:()=>E0,identity:()=>Ja,invert:()=>m0,lookAt:()=>B0,mul:()=>K0,multiply:()=>Za,multiplyScalar:()=>X0,multiplyScalarAndAdd:()=>q0,ortho:()=>O0,orthoNO:()=>nc,orthoZO:()=>N0,perspective:()=>k0,perspectiveFromFieldOfView:()=>H0,perspectiveNO:()=>rc,perspectiveZO:()=>D0,rotate:()=>x0,rotateX:()=>g0,rotateY:()=>v0,rotateZ:()=>b0,scale:()=>y0,set:()=>d0,str:()=>U0,sub:()=>$0,subtract:()=>oc,targetTo:()=>V0,translate:()=>h0,transpose:()=>u0});function s0(){var t=new He(16);return He!=Float32Array&&(t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[11]=0,t[12]=0,t[13]=0,t[14]=0),t[0]=1,t[5]=1,t[10]=1,t[15]=1,t}function a0(t){var e=new He(16);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e}function c0(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t}function l0(t,e,r,n,o,i,s,a,c,l,d,u,m,f,h,y){var p=new He(16);return p[0]=t,p[1]=e,p[2]=r,p[3]=n,p[4]=o,p[5]=i,p[6]=s,p[7]=a,p[8]=c,p[9]=l,p[10]=d,p[11]=u,p[12]=m,p[13]=f,p[14]=h,p[15]=y,p}function d0(t,e,r,n,o,i,s,a,c,l,d,u,m,f,h,y,p){return t[0]=e,t[1]=r,t[2]=n,t[3]=o,t[4]=i,t[5]=s,t[6]=a,t[7]=c,t[8]=l,t[9]=d,t[10]=u,t[11]=m,t[12]=f,t[13]=h,t[14]=y,t[15]=p,t}function Ja(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function u0(t,e){if(t===e){var r=e[1],n=e[2],o=e[3],i=e[6],s=e[7],a=e[11];t[1]=e[4],t[2]=e[8],t[3]=e[12],t[4]=r,t[6]=e[9],t[7]=e[13],t[8]=n,t[9]=i,t[11]=e[14],t[12]=o,t[13]=s,t[14]=a}else t[0]=e[0],t[1]=e[4],t[2]=e[8],t[3]=e[12],t[4]=e[1],t[5]=e[5],t[6]=e[9],t[7]=e[13],t[8]=e[2],t[9]=e[6],t[10]=e[10],t[11]=e[14],t[12]=e[3],t[13]=e[7],t[14]=e[11],t[15]=e[15];return t}function m0(t,e){var r=e[0],n=e[1],o=e[2],i=e[3],s=e[4],a=e[5],c=e[6],l=e[7],d=e[8],u=e[9],m=e[10],f=e[11],h=e[12],y=e[13],p=e[14],x=e[15],M=r*a-n*s,v=r*c-o*s,S=r*l-i*s,b=n*c-o*a,_=n*l-i*a,w=o*l-i*c,L=d*y-u*h,P=d*p-m*h,A=d*x-f*h,N=u*p-m*y,U=u*x-f*y,V=m*x-f*p,F=M*V-v*U+S*N+b*A-_*P+w*L;return F?(F=1/F,t[0]=(a*V-c*U+l*N)*F,t[1]=(o*U-n*V-i*N)*F,t[2]=(y*w-p*_+x*b)*F,t[3]=(m*_-u*w-f*b)*F,t[4]=(c*A-s*V-l*P)*F,t[5]=(r*V-o*A+i*P)*F,t[6]=(p*S-h*w-x*v)*F,t[7]=(d*w-m*S+f*v)*F,t[8]=(s*U-a*A+l*L)*F,t[9]=(n*A-r*U-i*L)*F,t[10]=(h*_-y*S+x*M)*F,t[11]=(u*S-d*_-f*M)*F,t[12]=(a*P-s*N-c*L)*F,t[13]=(r*N-n*P+o*L)*F,t[14]=(y*v-h*b-p*M)*F,t[15]=(d*b-u*v+m*M)*F,t):null}function f0(t,e){var r=e[0],n=e[1],o=e[2],i=e[3],s=e[4],a=e[5],c=e[6],l=e[7],d=e[8],u=e[9],m=e[10],f=e[11],h=e[12],y=e[13],p=e[14],x=e[15],M=r*a-n*s,v=r*c-o*s,S=r*l-i*s,b=n*c-o*a,_=n*l-i*a,w=o*l-i*c,L=d*y-u*h,P=d*p-m*h,A=d*x-f*h,N=u*p-m*y,U=u*x-f*y,V=m*x-f*p;return t[0]=a*V-c*U+l*N,t[1]=o*U-n*V-i*N,t[2]=y*w-p*_+x*b,t[3]=m*_-u*w-f*b,t[4]=c*A-s*V-l*P,t[5]=r*V-o*A+i*P,t[6]=p*S-h*w-x*v,t[7]=d*w-m*S+f*v,t[8]=s*U-a*A+l*L,t[9]=n*A-r*U-i*L,t[10]=h*_-y*S+x*M,t[11]=u*S-d*_-f*M,t[12]=a*P-s*N-c*L,t[13]=r*N-n*P+o*L,t[14]=y*v-h*b-p*M,t[15]=d*b-u*v+m*M,t}function p0(t){var e=t[0],r=t[1],n=t[2],o=t[3],i=t[4],s=t[5],a=t[6],c=t[7],l=t[8],d=t[9],u=t[10],m=t[11],f=t[12],h=t[13],y=t[14],p=t[15],x=e*s-r*i,M=e*a-n*i,v=r*a-n*s,S=l*h-d*f,b=l*y-u*f,_=d*y-u*h,w=e*_-r*b+n*S,L=i*_-s*b+a*S,P=l*v-d*M+u*x,A=f*v-h*M+y*x;return c*w-o*L+p*P-m*A}function Za(t,e,r){var n=e[0],o=e[1],i=e[2],s=e[3],a=e[4],c=e[5],l=e[6],d=e[7],u=e[8],m=e[9],f=e[10],h=e[11],y=e[12],p=e[13],x=e[14],M=e[15],v=r[0],S=r[1],b=r[2],_=r[3];return t[0]=v*n+S*a+b*u+_*y,t[1]=v*o+S*c+b*m+_*p,t[2]=v*i+S*l+b*f+_*x,t[3]=v*s+S*d+b*h+_*M,v=r[4],S=r[5],b=r[6],_=r[7],t[4]=v*n+S*a+b*u+_*y,t[5]=v*o+S*c+b*m+_*p,t[6]=v*i+S*l+b*f+_*x,t[7]=v*s+S*d+b*h+_*M,v=r[8],S=r[9],b=r[10],_=r[11],t[8]=v*n+S*a+b*u+_*y,t[9]=v*o+S*c+b*m+_*p,t[10]=v*i+S*l+b*f+_*x,t[11]=v*s+S*d+b*h+_*M,v=r[12],S=r[13],b=r[14],_=r[15],t[12]=v*n+S*a+b*u+_*y,t[13]=v*o+S*c+b*m+_*p,t[14]=v*i+S*l+b*f+_*x,t[15]=v*s+S*d+b*h+_*M,t}function h0(t,e,r){var n=r[0],o=r[1],i=r[2],s,a,c,l,d,u,m,f,h,y,p,x;return e===t?(t[12]=e[0]*n+e[4]*o+e[8]*i+e[12],t[13]=e[1]*n+e[5]*o+e[9]*i+e[13],t[14]=e[2]*n+e[6]*o+e[10]*i+e[14],t[15]=e[3]*n+e[7]*o+e[11]*i+e[15]):(s=e[0],a=e[1],c=e[2],l=e[3],d=e[4],u=e[5],m=e[6],f=e[7],h=e[8],y=e[9],p=e[10],x=e[11],t[0]=s,t[1]=a,t[2]=c,t[3]=l,t[4]=d,t[5]=u,t[6]=m,t[7]=f,t[8]=h,t[9]=y,t[10]=p,t[11]=x,t[12]=s*n+d*o+h*i+e[12],t[13]=a*n+u*o+y*i+e[13],t[14]=c*n+m*o+p*i+e[14],t[15]=l*n+f*o+x*i+e[15]),t}function y0(t,e,r){var n=r[0],o=r[1],i=r[2];return t[0]=e[0]*n,t[1]=e[1]*n,t[2]=e[2]*n,t[3]=e[3]*n,t[4]=e[4]*o,t[5]=e[5]*o,t[6]=e[6]*o,t[7]=e[7]*o,t[8]=e[8]*i,t[9]=e[9]*i,t[10]=e[10]*i,t[11]=e[11]*i,t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t}function x0(t,e,r,n){var o=n[0],i=n[1],s=n[2],a=Math.sqrt(o*o+i*i+s*s),c,l,d,u,m,f,h,y,p,x,M,v,S,b,_,w,L,P,A,N,U,V,F,K;return a<Y?null:(a=1/a,o*=a,i*=a,s*=a,c=Math.sin(r),l=Math.cos(r),d=1-l,u=e[0],m=e[1],f=e[2],h=e[3],y=e[4],p=e[5],x=e[6],M=e[7],v=e[8],S=e[9],b=e[10],_=e[11],w=o*o*d+l,L=i*o*d+s*c,P=s*o*d-i*c,A=o*i*d-s*c,N=i*i*d+l,U=s*i*d+o*c,V=o*s*d+i*c,F=i*s*d-o*c,K=s*s*d+l,t[0]=u*w+y*L+v*P,t[1]=m*w+p*L+S*P,t[2]=f*w+x*L+b*P,t[3]=h*w+M*L+_*P,t[4]=u*A+y*N+v*U,t[5]=m*A+p*N+S*U,t[6]=f*A+x*N+b*U,t[7]=h*A+M*N+_*U,t[8]=u*V+y*F+v*K,t[9]=m*V+p*F+S*K,t[10]=f*V+x*F+b*K,t[11]=h*V+M*F+_*K,e!==t&&(t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t)}function g0(t,e,r){var n=Math.sin(r),o=Math.cos(r),i=e[4],s=e[5],a=e[6],c=e[7],l=e[8],d=e[9],u=e[10],m=e[11];return e!==t&&(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[4]=i*o+l*n,t[5]=s*o+d*n,t[6]=a*o+u*n,t[7]=c*o+m*n,t[8]=l*o-i*n,t[9]=d*o-s*n,t[10]=u*o-a*n,t[11]=m*o-c*n,t}function v0(t,e,r){var n=Math.sin(r),o=Math.cos(r),i=e[0],s=e[1],a=e[2],c=e[3],l=e[8],d=e[9],u=e[10],m=e[11];return e!==t&&(t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[0]=i*o-l*n,t[1]=s*o-d*n,t[2]=a*o-u*n,t[3]=c*o-m*n,t[8]=i*n+l*o,t[9]=s*n+d*o,t[10]=a*n+u*o,t[11]=c*n+m*o,t}function b0(t,e,r){var n=Math.sin(r),o=Math.cos(r),i=e[0],s=e[1],a=e[2],c=e[3],l=e[4],d=e[5],u=e[6],m=e[7];return e!==t&&(t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[0]=i*o+l*n,t[1]=s*o+d*n,t[2]=a*o+u*n,t[3]=c*o+m*n,t[4]=l*o-i*n,t[5]=d*o-s*n,t[6]=u*o-a*n,t[7]=m*o-c*n,t}function S0(t,e){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=e[0],t[13]=e[1],t[14]=e[2],t[15]=1,t}function M0(t,e){return t[0]=e[0],t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=e[1],t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=e[2],t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function _0(t,e,r){var n=r[0],o=r[1],i=r[2],s=Math.sqrt(n*n+o*o+i*i),a,c,l;return s<Y?null:(s=1/s,n*=s,o*=s,i*=s,a=Math.sin(e),c=Math.cos(e),l=1-c,t[0]=n*n*l+c,t[1]=o*n*l+i*a,t[2]=i*n*l-o*a,t[3]=0,t[4]=n*o*l-i*a,t[5]=o*o*l+c,t[6]=i*o*l+n*a,t[7]=0,t[8]=n*i*l+o*a,t[9]=o*i*l-n*a,t[10]=i*i*l+c,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t)}function A0(t,e){var r=Math.sin(e),n=Math.cos(e);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=n,t[6]=r,t[7]=0,t[8]=0,t[9]=-r,t[10]=n,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function w0(t,e){var r=Math.sin(e),n=Math.cos(e);return t[0]=n,t[1]=0,t[2]=-r,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=r,t[9]=0,t[10]=n,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function L0(t,e){var r=Math.sin(e),n=Math.cos(e);return t[0]=n,t[1]=r,t[2]=0,t[3]=0,t[4]=-r,t[5]=n,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function ec(t,e,r){var n=e[0],o=e[1],i=e[2],s=e[3],a=n+n,c=o+o,l=i+i,d=n*a,u=n*c,m=n*l,f=o*c,h=o*l,y=i*l,p=s*a,x=s*c,M=s*l;return t[0]=1-(f+y),t[1]=u+M,t[2]=m-x,t[3]=0,t[4]=u-M,t[5]=1-(d+y),t[6]=h+p,t[7]=0,t[8]=m+x,t[9]=h-p,t[10]=1-(d+f),t[11]=0,t[12]=r[0],t[13]=r[1],t[14]=r[2],t[15]=1,t}function z0(t,e){var r=new He(3),n=-e[0],o=-e[1],i=-e[2],s=e[3],a=e[4],c=e[5],l=e[6],d=e[7],u=n*n+o*o+i*i+s*s;return u>0?(r[0]=(a*s+d*n+c*i-l*o)*2/u,r[1]=(c*s+d*o+l*n-a*i)*2/u,r[2]=(l*s+d*i+a*o-c*n)*2/u):(r[0]=(a*s+d*n+c*i-l*o)*2,r[1]=(c*s+d*o+l*n-a*i)*2,r[2]=(l*s+d*i+a*o-c*n)*2),ec(t,e,r),t}function E0(t,e){return t[0]=e[12],t[1]=e[13],t[2]=e[14],t}function tc(t,e){var r=e[0],n=e[1],o=e[2],i=e[4],s=e[5],a=e[6],c=e[8],l=e[9],d=e[10];return t[0]=Math.sqrt(r*r+n*n+o*o),t[1]=Math.sqrt(i*i+s*s+a*a),t[2]=Math.sqrt(c*c+l*l+d*d),t}function C0(t,e){var r=new He(3);tc(r,e);var n=1/r[0],o=1/r[1],i=1/r[2],s=e[0]*n,a=e[1]*o,c=e[2]*i,l=e[4]*n,d=e[5]*o,u=e[6]*i,m=e[8]*n,f=e[9]*o,h=e[10]*i,y=s+d+h,p=0;return y>0?(p=Math.sqrt(y+1)*2,t[3]=.25*p,t[0]=(u-f)/p,t[1]=(m-c)/p,t[2]=(a-l)/p):s>d&&s>h?(p=Math.sqrt(1+s-d-h)*2,t[3]=(u-f)/p,t[0]=.25*p,t[1]=(a+l)/p,t[2]=(m+c)/p):d>h?(p=Math.sqrt(1+d-s-h)*2,t[3]=(m-c)/p,t[0]=(a+l)/p,t[1]=.25*p,t[2]=(u+f)/p):(p=Math.sqrt(1+h-s-d)*2,t[3]=(a-l)/p,t[0]=(m+c)/p,t[1]=(u+f)/p,t[2]=.25*p),t}function T0(t,e,r,n){e[0]=n[12],e[1]=n[13],e[2]=n[14];var o=n[0],i=n[1],s=n[2],a=n[4],c=n[5],l=n[6],d=n[8],u=n[9],m=n[10];r[0]=Math.sqrt(o*o+i*i+s*s),r[1]=Math.sqrt(a*a+c*c+l*l),r[2]=Math.sqrt(d*d+u*u+m*m);var f=1/r[0],h=1/r[1],y=1/r[2],p=o*f,x=i*h,M=s*y,v=a*f,S=c*h,b=l*y,_=d*f,w=u*h,L=m*y,P=p+S+L,A=0;return P>0?(A=Math.sqrt(P+1)*2,t[3]=.25*A,t[0]=(b-w)/A,t[1]=(_-M)/A,t[2]=(x-v)/A):p>S&&p>L?(A=Math.sqrt(1+p-S-L)*2,t[3]=(b-w)/A,t[0]=.25*A,t[1]=(x+v)/A,t[2]=(_+M)/A):S>L?(A=Math.sqrt(1+S-p-L)*2,t[3]=(_-M)/A,t[0]=(x+v)/A,t[1]=.25*A,t[2]=(b+w)/A):(A=Math.sqrt(1+L-p-S)*2,t[3]=(x-v)/A,t[0]=(_+M)/A,t[1]=(b+w)/A,t[2]=.25*A),t}function P0(t,e,r,n){var o=e[0],i=e[1],s=e[2],a=e[3],c=o+o,l=i+i,d=s+s,u=o*c,m=o*l,f=o*d,h=i*l,y=i*d,p=s*d,x=a*c,M=a*l,v=a*d,S=n[0],b=n[1],_=n[2];return t[0]=(1-(h+p))*S,t[1]=(m+v)*S,t[2]=(f-M)*S,t[3]=0,t[4]=(m-v)*b,t[5]=(1-(u+p))*b,t[6]=(y+x)*b,t[7]=0,t[8]=(f+M)*_,t[9]=(y-x)*_,t[10]=(1-(u+h))*_,t[11]=0,t[12]=r[0],t[13]=r[1],t[14]=r[2],t[15]=1,t}function F0(t,e,r,n,o){var i=e[0],s=e[1],a=e[2],c=e[3],l=i+i,d=s+s,u=a+a,m=i*l,f=i*d,h=i*u,y=s*d,p=s*u,x=a*u,M=c*l,v=c*d,S=c*u,b=n[0],_=n[1],w=n[2],L=o[0],P=o[1],A=o[2],N=(1-(y+x))*b,U=(f+S)*b,V=(h-v)*b,F=(f-S)*_,K=(1-(m+x))*_,ge=(p+M)*_,Ct=(h+v)*w,kn=(p-M)*w,zr=(1-(m+y))*w;return t[0]=N,t[1]=U,t[2]=V,t[3]=0,t[4]=F,t[5]=K,t[6]=ge,t[7]=0,t[8]=Ct,t[9]=kn,t[10]=zr,t[11]=0,t[12]=r[0]+L-(N*L+F*P+Ct*A),t[13]=r[1]+P-(U*L+K*P+kn*A),t[14]=r[2]+A-(V*L+ge*P+zr*A),t[15]=1,t}function I0(t,e){var r=e[0],n=e[1],o=e[2],i=e[3],s=r+r,a=n+n,c=o+o,l=r*s,d=n*s,u=n*a,m=o*s,f=o*a,h=o*c,y=i*s,p=i*a,x=i*c;return t[0]=1-u-h,t[1]=d+x,t[2]=m-p,t[3]=0,t[4]=d-x,t[5]=1-l-h,t[6]=f+y,t[7]=0,t[8]=m+p,t[9]=f-y,t[10]=1-l-u,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function R0(t,e,r,n,o,i,s){var a=1/(r-e),c=1/(o-n),l=1/(i-s);return t[0]=i*2*a,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=i*2*c,t[6]=0,t[7]=0,t[8]=(r+e)*a,t[9]=(o+n)*c,t[10]=(s+i)*l,t[11]=-1,t[12]=0,t[13]=0,t[14]=s*i*2*l,t[15]=0,t}function rc(t,e,r,n,o){var i=1/Math.tan(e/2);if(t[0]=i/r,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=i,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[11]=-1,t[12]=0,t[13]=0,t[15]=0,o!=null&&o!==1/0){var s=1/(n-o);t[10]=(o+n)*s,t[14]=2*o*n*s}else t[10]=-1,t[14]=-2*n;return t}var k0=rc;function D0(t,e,r,n,o){var i=1/Math.tan(e/2);if(t[0]=i/r,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=i,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[11]=-1,t[12]=0,t[13]=0,t[15]=0,o!=null&&o!==1/0){var s=1/(n-o);t[10]=o*s,t[14]=o*n*s}else t[10]=-1,t[14]=-n;return t}function H0(t,e,r,n){var o=Math.tan(e.upDegrees*Math.PI/180),i=Math.tan(e.downDegrees*Math.PI/180),s=Math.tan(e.leftDegrees*Math.PI/180),a=Math.tan(e.rightDegrees*Math.PI/180),c=2/(s+a),l=2/(o+i);return t[0]=c,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=l,t[6]=0,t[7]=0,t[8]=-((s-a)*c*.5),t[9]=(o-i)*l*.5,t[10]=n/(r-n),t[11]=-1,t[12]=0,t[13]=0,t[14]=n*r/(r-n),t[15]=0,t}function nc(t,e,r,n,o,i,s){var a=1/(e-r),c=1/(n-o),l=1/(i-s);return t[0]=-2*a,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*c,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*l,t[11]=0,t[12]=(e+r)*a,t[13]=(o+n)*c,t[14]=(s+i)*l,t[15]=1,t}var O0=nc;function N0(t,e,r,n,o,i,s){var a=1/(e-r),c=1/(n-o),l=1/(i-s);return t[0]=-2*a,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*c,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=l,t[11]=0,t[12]=(e+r)*a,t[13]=(o+n)*c,t[14]=i*l,t[15]=1,t}function B0(t,e,r,n){var o,i,s,a,c,l,d,u,m,f,h=e[0],y=e[1],p=e[2],x=n[0],M=n[1],v=n[2],S=r[0],b=r[1],_=r[2];return Math.abs(h-S)<Y&&Math.abs(y-b)<Y&&Math.abs(p-_)<Y?Ja(t):(d=h-S,u=y-b,m=p-_,f=1/Math.sqrt(d*d+u*u+m*m),d*=f,u*=f,m*=f,o=M*m-v*u,i=v*d-x*m,s=x*u-M*d,f=Math.sqrt(o*o+i*i+s*s),f?(f=1/f,o*=f,i*=f,s*=f):(o=0,i=0,s=0),a=u*s-m*i,c=m*o-d*s,l=d*i-u*o,f=Math.sqrt(a*a+c*c+l*l),f?(f=1/f,a*=f,c*=f,l*=f):(a=0,c=0,l=0),t[0]=o,t[1]=a,t[2]=d,t[3]=0,t[4]=i,t[5]=c,t[6]=u,t[7]=0,t[8]=s,t[9]=l,t[10]=m,t[11]=0,t[12]=-(o*h+i*y+s*p),t[13]=-(a*h+c*y+l*p),t[14]=-(d*h+u*y+m*p),t[15]=1,t)}function V0(t,e,r,n){var o=e[0],i=e[1],s=e[2],a=n[0],c=n[1],l=n[2],d=o-r[0],u=i-r[1],m=s-r[2],f=d*d+u*u+m*m;f>0&&(f=1/Math.sqrt(f),d*=f,u*=f,m*=f);var h=c*m-l*u,y=l*d-a*m,p=a*u-c*d;return f=h*h+y*y+p*p,f>0&&(f=1/Math.sqrt(f),h*=f,y*=f,p*=f),t[0]=h,t[1]=y,t[2]=p,t[3]=0,t[4]=u*p-m*y,t[5]=m*h-d*p,t[6]=d*y-u*h,t[7]=0,t[8]=d,t[9]=u,t[10]=m,t[11]=0,t[12]=o,t[13]=i,t[14]=s,t[15]=1,t}function U0(t){return"mat4("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+", "+t[4]+", "+t[5]+", "+t[6]+", "+t[7]+", "+t[8]+", "+t[9]+", "+t[10]+", "+t[11]+", "+t[12]+", "+t[13]+", "+t[14]+", "+t[15]+")"}function G0(t){return Math.sqrt(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]+t[3]*t[3]+t[4]*t[4]+t[5]*t[5]+t[6]*t[6]+t[7]*t[7]+t[8]*t[8]+t[9]*t[9]+t[10]*t[10]+t[11]*t[11]+t[12]*t[12]+t[13]*t[13]+t[14]*t[14]+t[15]*t[15])}function W0(t,e,r){return t[0]=e[0]+r[0],t[1]=e[1]+r[1],t[2]=e[2]+r[2],t[3]=e[3]+r[3],t[4]=e[4]+r[4],t[5]=e[5]+r[5],t[6]=e[6]+r[6],t[7]=e[7]+r[7],t[8]=e[8]+r[8],t[9]=e[9]+r[9],t[10]=e[10]+r[10],t[11]=e[11]+r[11],t[12]=e[12]+r[12],t[13]=e[13]+r[13],t[14]=e[14]+r[14],t[15]=e[15]+r[15],t}function oc(t,e,r){return t[0]=e[0]-r[0],t[1]=e[1]-r[1],t[2]=e[2]-r[2],t[3]=e[3]-r[3],t[4]=e[4]-r[4],t[5]=e[5]-r[5],t[6]=e[6]-r[6],t[7]=e[7]-r[7],t[8]=e[8]-r[8],t[9]=e[9]-r[9],t[10]=e[10]-r[10],t[11]=e[11]-r[11],t[12]=e[12]-r[12],t[13]=e[13]-r[13],t[14]=e[14]-r[14],t[15]=e[15]-r[15],t}function X0(t,e,r){return t[0]=e[0]*r,t[1]=e[1]*r,t[2]=e[2]*r,t[3]=e[3]*r,t[4]=e[4]*r,t[5]=e[5]*r,t[6]=e[6]*r,t[7]=e[7]*r,t[8]=e[8]*r,t[9]=e[9]*r,t[10]=e[10]*r,t[11]=e[11]*r,t[12]=e[12]*r,t[13]=e[13]*r,t[14]=e[14]*r,t[15]=e[15]*r,t}function q0(t,e,r,n){return t[0]=e[0]+r[0]*n,t[1]=e[1]+r[1]*n,t[2]=e[2]+r[2]*n,t[3]=e[3]+r[3]*n,t[4]=e[4]+r[4]*n,t[5]=e[5]+r[5]*n,t[6]=e[6]+r[6]*n,t[7]=e[7]+r[7]*n,t[8]=e[8]+r[8]*n,t[9]=e[9]+r[9]*n,t[10]=e[10]+r[10]*n,t[11]=e[11]+r[11]*n,t[12]=e[12]+r[12]*n,t[13]=e[13]+r[13]*n,t[14]=e[14]+r[14]*n,t[15]=e[15]+r[15]*n,t}function Y0(t,e){return t[0]===e[0]&&t[1]===e[1]&&t[2]===e[2]&&t[3]===e[3]&&t[4]===e[4]&&t[5]===e[5]&&t[6]===e[6]&&t[7]===e[7]&&t[8]===e[8]&&t[9]===e[9]&&t[10]===e[10]&&t[11]===e[11]&&t[12]===e[12]&&t[13]===e[13]&&t[14]===e[14]&&t[15]===e[15]}function j0(t,e){var r=t[0],n=t[1],o=t[2],i=t[3],s=t[4],a=t[5],c=t[6],l=t[7],d=t[8],u=t[9],m=t[10],f=t[11],h=t[12],y=t[13],p=t[14],x=t[15],M=e[0],v=e[1],S=e[2],b=e[3],_=e[4],w=e[5],L=e[6],P=e[7],A=e[8],N=e[9],U=e[10],V=e[11],F=e[12],K=e[13],ge=e[14],Ct=e[15];return Math.abs(r-M)<=Y*Math.max(1,Math.abs(r),Math.abs(M))&&Math.abs(n-v)<=Y*Math.max(1,Math.abs(n),Math.abs(v))&&Math.abs(o-S)<=Y*Math.max(1,Math.abs(o),Math.abs(S))&&Math.abs(i-b)<=Y*Math.max(1,Math.abs(i),Math.abs(b))&&Math.abs(s-_)<=Y*Math.max(1,Math.abs(s),Math.abs(_))&&Math.abs(a-w)<=Y*Math.max(1,Math.abs(a),Math.abs(w))&&Math.abs(c-L)<=Y*Math.max(1,Math.abs(c),Math.abs(L))&&Math.abs(l-P)<=Y*Math.max(1,Math.abs(l),Math.abs(P))&&Math.abs(d-A)<=Y*Math.max(1,Math.abs(d),Math.abs(A))&&Math.abs(u-N)<=Y*Math.max(1,Math.abs(u),Math.abs(N))&&Math.abs(m-U)<=Y*Math.max(1,Math.abs(m),Math.abs(U))&&Math.abs(f-V)<=Y*Math.max(1,Math.abs(f),Math.abs(V))&&Math.abs(h-F)<=Y*Math.max(1,Math.abs(h),Math.abs(F))&&Math.abs(y-K)<=Y*Math.max(1,Math.abs(y),Math.abs(K))&&Math.abs(p-ge)<=Y*Math.max(1,Math.abs(p),Math.abs(ge))&&Math.abs(x-Ct)<=Y*Math.max(1,Math.abs(x),Math.abs(Ct))}var K0=Za,$0=oc;var ne={};ii(ne,{add:()=>td,angle:()=>Ad,bezier:()=>yd,ceil:()=>rd,clone:()=>Q0,copy:()=>Z0,create:()=>ic,cross:()=>md,dist:()=>Fd,distance:()=>dc,div:()=>Pd,divide:()=>lc,dot:()=>cs,equals:()=>Ed,exactEquals:()=>zd,floor:()=>nd,forEach:()=>Dd,fromValues:()=>J0,hermite:()=>hd,inverse:()=>dd,len:()=>Rd,length:()=>sc,lerp:()=>fd,max:()=>id,min:()=>od,mul:()=>Td,multiply:()=>cc,negate:()=>ld,normalize:()=>ud,random:()=>xd,rotateX:()=>Sd,rotateY:()=>Md,rotateZ:()=>_d,round:()=>sd,scale:()=>ad,scaleAndAdd:()=>cd,set:()=>ed,slerp:()=>pd,sqrDist:()=>Id,sqrLen:()=>kd,squaredDistance:()=>uc,squaredLength:()=>mc,str:()=>Ld,sub:()=>Cd,subtract:()=>ac,transformMat3:()=>vd,transformMat4:()=>gd,transformQuat:()=>bd,zero:()=>wd});function ic(){var t=new He(3);return He!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0),t}function Q0(t){var e=new He(3);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e}function sc(t){var e=t[0],r=t[1],n=t[2];return Math.sqrt(e*e+r*r+n*n)}function J0(t,e,r){var n=new He(3);return n[0]=t,n[1]=e,n[2]=r,n}function Z0(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t}function ed(t,e,r,n){return t[0]=e,t[1]=r,t[2]=n,t}function td(t,e,r){return t[0]=e[0]+r[0],t[1]=e[1]+r[1],t[2]=e[2]+r[2],t}function ac(t,e,r){return t[0]=e[0]-r[0],t[1]=e[1]-r[1],t[2]=e[2]-r[2],t}function cc(t,e,r){return t[0]=e[0]*r[0],t[1]=e[1]*r[1],t[2]=e[2]*r[2],t}function lc(t,e,r){return t[0]=e[0]/r[0],t[1]=e[1]/r[1],t[2]=e[2]/r[2],t}function rd(t,e){return t[0]=Math.ceil(e[0]),t[1]=Math.ceil(e[1]),t[2]=Math.ceil(e[2]),t}function nd(t,e){return t[0]=Math.floor(e[0]),t[1]=Math.floor(e[1]),t[2]=Math.floor(e[2]),t}function od(t,e,r){return t[0]=Math.min(e[0],r[0]),t[1]=Math.min(e[1],r[1]),t[2]=Math.min(e[2],r[2]),t}function id(t,e,r){return t[0]=Math.max(e[0],r[0]),t[1]=Math.max(e[1],r[1]),t[2]=Math.max(e[2],r[2]),t}function sd(t,e){return t[0]=Zo(e[0]),t[1]=Zo(e[1]),t[2]=Zo(e[2]),t}function ad(t,e,r){return t[0]=e[0]*r,t[1]=e[1]*r,t[2]=e[2]*r,t}function cd(t,e,r,n){return t[0]=e[0]+r[0]*n,t[1]=e[1]+r[1]*n,t[2]=e[2]+r[2]*n,t}function dc(t,e){var r=e[0]-t[0],n=e[1]-t[1],o=e[2]-t[2];return Math.sqrt(r*r+n*n+o*o)}function uc(t,e){var r=e[0]-t[0],n=e[1]-t[1],o=e[2]-t[2];return r*r+n*n+o*o}function mc(t){var e=t[0],r=t[1],n=t[2];return e*e+r*r+n*n}function ld(t,e){return t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t}function dd(t,e){return t[0]=1/e[0],t[1]=1/e[1],t[2]=1/e[2],t}function ud(t,e){var r=e[0],n=e[1],o=e[2],i=r*r+n*n+o*o;return i>0&&(i=1/Math.sqrt(i)),t[0]=e[0]*i,t[1]=e[1]*i,t[2]=e[2]*i,t}function cs(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function md(t,e,r){var n=e[0],o=e[1],i=e[2],s=r[0],a=r[1],c=r[2];return t[0]=o*c-i*a,t[1]=i*s-n*c,t[2]=n*a-o*s,t}function fd(t,e,r,n){var o=e[0],i=e[1],s=e[2];return t[0]=o+n*(r[0]-o),t[1]=i+n*(r[1]-i),t[2]=s+n*(r[2]-s),t}function pd(t,e,r,n){var o=Math.acos(Math.min(Math.max(cs(e,r),-1),1)),i=Math.sin(o),s=Math.sin((1-n)*o)/i,a=Math.sin(n*o)/i;return t[0]=s*e[0]+a*r[0],t[1]=s*e[1]+a*r[1],t[2]=s*e[2]+a*r[2],t}function hd(t,e,r,n,o,i){var s=i*i,a=s*(2*i-3)+1,c=s*(i-2)+i,l=s*(i-1),d=s*(3-2*i);return t[0]=e[0]*a+r[0]*c+n[0]*l+o[0]*d,t[1]=e[1]*a+r[1]*c+n[1]*l+o[1]*d,t[2]=e[2]*a+r[2]*c+n[2]*l+o[2]*d,t}function yd(t,e,r,n,o,i){var s=1-i,a=s*s,c=i*i,l=a*s,d=3*i*a,u=3*c*s,m=c*i;return t[0]=e[0]*l+r[0]*d+n[0]*u+o[0]*m,t[1]=e[1]*l+r[1]*d+n[1]*u+o[1]*m,t[2]=e[2]*l+r[2]*d+n[2]*u+o[2]*m,t}function xd(t,e){e=e===void 0?1:e;var r=as()*2*Math.PI,n=as()*2-1,o=Math.sqrt(1-n*n)*e;return t[0]=Math.cos(r)*o,t[1]=Math.sin(r)*o,t[2]=n*e,t}function gd(t,e,r){var n=e[0],o=e[1],i=e[2],s=r[3]*n+r[7]*o+r[11]*i+r[15];return s=s||1,t[0]=(r[0]*n+r[4]*o+r[8]*i+r[12])/s,t[1]=(r[1]*n+r[5]*o+r[9]*i+r[13])/s,t[2]=(r[2]*n+r[6]*o+r[10]*i+r[14])/s,t}function vd(t,e,r){var n=e[0],o=e[1],i=e[2];return t[0]=n*r[0]+o*r[3]+i*r[6],t[1]=n*r[1]+o*r[4]+i*r[7],t[2]=n*r[2]+o*r[5]+i*r[8],t}function bd(t,e,r){var n=r[0],o=r[1],i=r[2],s=r[3],a=e[0],c=e[1],l=e[2],d=o*l-i*c,u=i*a-n*l,m=n*c-o*a;return d=d+d,u=u+u,m=m+m,t[0]=a+s*d+o*m-i*u,t[1]=c+s*u+i*d-n*m,t[2]=l+s*m+n*u-o*d,t}function Sd(t,e,r,n){var o=[],i=[];return o[0]=e[0]-r[0],o[1]=e[1]-r[1],o[2]=e[2]-r[2],i[0]=o[0],i[1]=o[1]*Math.cos(n)-o[2]*Math.sin(n),i[2]=o[1]*Math.sin(n)+o[2]*Math.cos(n),t[0]=i[0]+r[0],t[1]=i[1]+r[1],t[2]=i[2]+r[2],t}function Md(t,e,r,n){var o=[],i=[];return o[0]=e[0]-r[0],o[1]=e[1]-r[1],o[2]=e[2]-r[2],i[0]=o[2]*Math.sin(n)+o[0]*Math.cos(n),i[1]=o[1],i[2]=o[2]*Math.cos(n)-o[0]*Math.sin(n),t[0]=i[0]+r[0],t[1]=i[1]+r[1],t[2]=i[2]+r[2],t}function _d(t,e,r,n){var o=[],i=[];return o[0]=e[0]-r[0],o[1]=e[1]-r[1],o[2]=e[2]-r[2],i[0]=o[0]*Math.cos(n)-o[1]*Math.sin(n),i[1]=o[0]*Math.sin(n)+o[1]*Math.cos(n),i[2]=o[2],t[0]=i[0]+r[0],t[1]=i[1]+r[1],t[2]=i[2]+r[2],t}function Ad(t,e){var r=t[0],n=t[1],o=t[2],i=e[0],s=e[1],a=e[2],c=Math.sqrt((r*r+n*n+o*o)*(i*i+s*s+a*a)),l=c&&cs(t,e)/c;return Math.acos(Math.min(Math.max(l,-1),1))}function wd(t){return t[0]=0,t[1]=0,t[2]=0,t}function Ld(t){return"vec3("+t[0]+", "+t[1]+", "+t[2]+")"}function zd(t,e){return t[0]===e[0]&&t[1]===e[1]&&t[2]===e[2]}function Ed(t,e){var r=t[0],n=t[1],o=t[2],i=e[0],s=e[1],a=e[2];return Math.abs(r-i)<=Y*Math.max(1,Math.abs(r),Math.abs(i))&&Math.abs(n-s)<=Y*Math.max(1,Math.abs(n),Math.abs(s))&&Math.abs(o-a)<=Y*Math.max(1,Math.abs(o),Math.abs(a))}var Cd=ac,Td=cc,Pd=lc,Fd=dc,Id=uc,Rd=sc,kd=mc,Dd=(function(){var t=ic();return function(e,r,n,o,i,s){var a,c;for(r||(r=3),n||(n=0),o?c=Math.min(o*r+n,e.length):c=e.length,a=n;a<c;a+=r)t[0]=e[a],t[1]=e[a+1],t[2]=e[a+2],i(t,t,s),e[a]=t[0],e[a+1]=t[1],e[a+2]=t[2];return e}})();var ei=class{constructor(){this._position=ne.create();this._angles=ne.create();this._bobAngles=ne.create();this._bobOffset=ne.create();this._kickAngles=ne.create();this._rollAngle=0;this._fov=90;this._aspect=1;this._near=.1;this._far=1e3;this._viewMatrix=oe.create();this._projectionMatrix=oe.create();this._viewProjectionMatrix=oe.create();this._dirty=!0}get position(){return this._position}set position(e){ne.copy(this._position,e),this._dirty=!0}get angles(){return this._angles}set angles(e){ne.copy(this._angles,e),this._dirty=!0}get bobAngles(){return this._bobAngles}set bobAngles(e){ne.copy(this._bobAngles,e),this._dirty=!0}get kickAngles(){return this._kickAngles}set kickAngles(e){ne.copy(this._kickAngles,e),this._dirty=!0}get bobOffset(){return this._bobOffset}set bobOffset(e){ne.copy(this._bobOffset,e),this._dirty=!0}get rollAngle(){return this._rollAngle}set rollAngle(e){this._rollAngle=e,this._dirty=!0}get fov(){return this._fov}set fov(e){this._fov=e,this._dirty=!0}get aspect(){return this._aspect}set aspect(e){this._aspect=e,this._dirty=!0}get viewMatrix(){return this.updateMatrices(),this._viewMatrix}get projectionMatrix(){return this.updateMatrices(),this._projectionMatrix}get viewProjectionMatrix(){return this.updateMatrices(),this._viewProjectionMatrix}getViewmodelProjectionMatrix(e){let r=oe.create();return oe.perspective(r,e*Qt,this._aspect,this._near,this._far),r}updateMatrices(){if(!this._dirty)return;oe.perspective(this._projectionMatrix,this._fov*Qt,this._aspect,this._near,this._far);let e=oe.fromValues(0,-1,0,0,0,0,1,0,-1,0,0,0,0,0,0,1),r=this._angles[0]+this._bobAngles[0]+this._kickAngles[0],n=this._angles[1]+this._bobAngles[1]+this._kickAngles[1],o=this._angles[2]+this._bobAngles[2]+this._kickAngles[2]+this._rollAngle,i=r*Qt,s=n*Qt,a=o*Qt,c=oe.create();oe.identity(c),oe.rotateZ(c,c,-s),oe.rotateY(c,c,-i),oe.rotateX(c,c,-a);let l=oe.create();oe.multiply(l,e,c);let d=ne.add(ne.create(),this._position,this._bobOffset),u=ne.negate(ne.create(),d),m=ne.create();ne.transformMat4(m,u,c);let f=ne.fromValues(m[1]||0,m[2]||0,m[0]||0);oe.copy(this._viewMatrix,l),this._viewMatrix[12]=f[0],this._viewMatrix[13]=f[1],this._viewMatrix[14]=f[2],oe.multiply(this._viewProjectionMatrix,this._projectionMatrix,this._viewMatrix),this._dirty=!1}};var Hd=[.2,.2,.2],Od={x:0,y:0,z:1},Nd=[.8,.8,.8];function ls(t,e,r){return t+(e-t)*r}function Lr(t,e,r){return{x:ls(t.x,e.x,r),y:ls(t.y,e.y,r),z:ls(t.z,e.z,r)}}function wr(t){return t<0?0:t>1?1:t}function ds(t){let e=[],r=[];for(let n of t.triangles){let o=e.length,[i,s,a]=n.indices,c=t.texCoords[i],l=t.texCoords[s],d=t.texCoords[a];if(!c||!l||!d)throw new Error(`Missing texCoord for triangle in surface ${t.name}`);e.push({vertexIndex:i,texCoord:[c.s,1-c.t]},{vertexIndex:s,texCoord:[l.s,1-l.t]},{vertexIndex:a,texCoord:[d.s,1-d.t]}),r.push(o,o+1,o+2)}return{vertices:e,indices:new Uint16Array(r)}}function Bd(t,e,r){let n=r?.ambient??Hd,o=r?.directional??{direction:Od,color:Nd},i=Oe(t),s=Oe(o.direction),a=wr(i.x*s.x+i.y*s.y+i.z*s.z),c=n[0]+o.color[0]*a,l=n[1]+o.color[1]*a,d=n[2]+o.color[2]*a;if(r?.dynamicLights){let u=r.modelMatrix?Ls(r.modelMatrix,e):e;for(let m of r.dynamicLights){let f=u.x-m.origin.x,h=u.y-m.origin.y,y=u.z-m.origin.z,p=f*f+h*h+y*y,x=m.radius*m.radius;if(p<x&&x>0){let M=1-Math.sqrt(p)/m.radius,v=Math.sqrt(p),S=v>0?wr(-(f*i.x+h*i.y+y*i.z)/v):0,b=wr(M*S);c+=m.color[0]*b,l+=m.color[1]*b,d+=m.color[2]*b}}}return[wr(c),wr(l),wr(d)]}function us(t,e,r,n){let o=t.vertices[r.currentFrame],i=t.vertices[r.nextFrame];if(!o||!i)throw new Error("Requested MD3 frames are out of range");let s=new Float32Array(e.vertices.length*12);return e.vertices.forEach((a,c)=>{let l=o[a.vertexIndex],d=i[a.vertexIndex];if(!l||!d)throw new Error(`Vertex index ${a.vertexIndex} missing for frame`);let u=Lr(l.position,d.position,r.lerp),m=Oe(Lr(l.normal,d.normal,r.lerp)),f=Bd(m,u,n),h=c*12;s[h]=u.x,s[h+1]=u.y,s[h+2]=u.z,s[h+3]=m.x,s[h+4]=m.y,s[h+5]=m.z,s[h+6]=a.texCoord[0],s[h+7]=a.texCoord[1],s[h+8]=f[0],s[h+9]=f[1],s[h+10]=f[2],s[h+11]=1}),s}function fc(t,e,r){let n=t.tags[0];if(!n)return null;let o=n.findIndex(y=>y.name===r);if(o===-1)return null;let i=t.tags[e.currentFrame]?.[o],s=t.tags[e.nextFrame]?.[o];if(!i||!s)throw new Error(`Tag ${r} is missing for one of the interpolated frames`);let a=Lr(i.origin,s.origin,e.lerp),c=Oe(Lr(i.axis[0],s.axis[0],e.lerp)),l=Oe(Lr(i.axis[1],s.axis[1],e.lerp)),d=Oe(Lr(i.axis[2],s.axis[2],e.lerp)),u=c,m=Oe({x:l.x-u.x*(u.x*l.x+u.y*l.y+u.z*l.z),y:l.y-u.y*(u.x*l.x+u.y*l.y+u.z*l.z),z:l.z-u.z*(u.x*l.x+u.y*l.y+u.z*l.z)}),f=Oe({x:u.y*m.z-u.z*m.y,y:u.z*m.x-u.x*m.z,z:u.x*m.y-u.y*m.x}),h=[u,m,f];return{origin:a,axis:h,matrix:zs(a,h)}}var ms=`#version 300 es
257
+ }`;function m0(t){let e=t.x*t.x+t.y*t.y+t.z*t.z;if(e<=0)return{x:0,y:0,z:1};let r=1/Math.sqrt(e);return{x:t.x*r,y:t.y*r,z:t.z*r}}function is(t,e,r){return t+(e-t)*r}function tc(t,e,r){return{x:is(t.x,e.x,r),y:is(t.y,e.y,r),z:is(t.z,e.z,r)}}function f0(t,e,r){return[t/r.skinWidth,1-e/r.skinHeight]}function cs(t){if(t.glCommands.length===0){let n=[],o=[];return t.triangles.forEach(i=>{let s=n.length;for(let a=0;a<3;a+=1){let c=i.vertexIndices[a],l=i.texCoordIndices[a],d=t.texCoords[l];n.push({vertexIndex:c,texCoord:f0(d.s,d.t,t.header)})}o.push(s,s+1,s+2)}),{vertices:n,indices:new Uint16Array(o)}}let e=[],r=[];for(let n of t.glCommands){let o=e.length;if(e.push(...n.vertices.map(i=>({vertexIndex:i.vertexIndex,texCoord:[i.s,1-i.t]}))),n.mode==="strip")for(let i=0;i<n.vertices.length-2;i+=1){let s=i%2===0,a=o+i+(s?0:1),c=o+i+(s?1:0),l=o+i+2;r.push(a,c,l)}else for(let i=1;i<n.vertices.length-1;i+=1)r.push(o,o+i,o+i+1)}return{vertices:e,indices:new Uint16Array(r)}}function ls(t,e,r){let{currentFrame:n,nextFrame:o,lerp:i}=r,s=t.frames[n],a=t.frames[o];if(!s||!a)throw new Error("Requested MD2 frames are out of range");let c=new Float32Array(e.vertices.length*8);return e.vertices.forEach((l,d)=>{let u=s.vertices[l.vertexIndex],m=a.vertices[l.vertexIndex];if(!u||!m)throw new Error("MD2 vertex index out of range for frame");let f=tc(u.position,m.position,i),h=m0(tc(u.normal,m.normal,i)),y=d*8;c[y]=f.x,c[y+1]=f.y,c[y+2]=f.z,c[y+3]=h.x,c[y+4]=h.y,c[y+5]=h.z,c[y+6]=l.texCoord[0],c[y+7]=l.texCoord[1]}),c}var Zo=class{constructor(e,r,n){this.gl=e,this.geometry=cs(r),this.vertexBuffer=new xe(e,e.STATIC_DRAW),this.indexBuffer=new De(e,e.STATIC_DRAW),this.vertexArray=new Se(e),this.indexCount=this.geometry.indices.length,this.vertexArray.configureAttributes([{index:0,size:3,type:e.FLOAT,stride:32,offset:0},{index:1,size:3,type:e.FLOAT,stride:32,offset:12},{index:2,size:2,type:e.FLOAT,stride:32,offset:24}],this.vertexBuffer),this.vertexArray.bind(),this.indexBuffer.bind(),this.indexBuffer.upload(this.geometry.indices,e.STATIC_DRAW),this.update(r,n)}update(e,r){let n=ls(e,this.geometry,r);this.vertexBuffer.upload(n,this.gl.STATIC_DRAW)}bind(){this.vertexArray.bind(),this.indexBuffer.bind()}dispose(){this.vertexBuffer.dispose(),this.indexBuffer.dispose(),this.vertexArray.dispose()}},ei=class{constructor(e){this.gl=e,this.program=ye.create(e,{vertex:ss,fragment:as},{a_position:0,a_normal:1,a_texCoord:2}),this.uniformMvp=this.program.getUniformLocation("u_modelViewProjection"),this.uniformLightDir=this.program.getUniformLocation("u_lightDir"),this.uniformTint=this.program.getUniformLocation("u_tint"),this.uniformDiffuse=this.program.getUniformLocation("u_diffuseMap")}bind(e){let{modelViewProjection:r,lightDirection:n=[0,0,1],tint:o=[1,1,1,1],diffuseSampler:i=0}=e,s=new Float32Array(n),a=new Float32Array(o);this.program.use(),this.gl.uniformMatrix4fv(this.uniformMvp,!1,r),this.gl.uniform3fv(this.uniformLightDir,s),this.gl.uniform4fv(this.uniformTint,a),this.gl.uniform1i(this.uniformDiffuse,i)}draw(e){e.bind(),this.gl.drawElements(this.gl.TRIANGLES,e.indexCount,this.gl.UNSIGNED_SHORT,0)}dispose(){this.program.dispose()}};var Y=1e-6,He=typeof Float32Array<"u"?Float32Array:Array,ds=Math.random;function ti(t){return t>=0?Math.round(t):t%.5===0?Math.floor(t):Math.round(t)}var Uh=Math.PI/180,Gh=180/Math.PI;var oe={};ai(oe,{add:()=>J0,adjoint:()=>S0,clone:()=>h0,copy:()=>y0,create:()=>p0,decompose:()=>O0,determinant:()=>M0,equals:()=>rd,exactEquals:()=>td,frob:()=>Q0,fromQuat:()=>V0,fromQuat2:()=>k0,fromRotation:()=>P0,fromRotationTranslation:()=>ic,fromRotationTranslationScale:()=>N0,fromRotationTranslationScaleOrigin:()=>B0,fromScaling:()=>T0,fromTranslation:()=>C0,fromValues:()=>x0,fromXRotation:()=>F0,fromYRotation:()=>I0,fromZRotation:()=>R0,frustum:()=>U0,getRotation:()=>H0,getScaling:()=>sc,getTranslation:()=>D0,identity:()=>nc,invert:()=>b0,lookAt:()=>K0,mul:()=>nd,multiply:()=>oc,multiplyScalar:()=>Z0,multiplyScalarAndAdd:()=>ed,ortho:()=>q0,orthoNO:()=>cc,orthoZO:()=>Y0,perspective:()=>G0,perspectiveFromFieldOfView:()=>X0,perspectiveNO:()=>ac,perspectiveZO:()=>W0,rotate:()=>w0,rotateX:()=>L0,rotateY:()=>z0,rotateZ:()=>E0,scale:()=>A0,set:()=>g0,str:()=>$0,sub:()=>od,subtract:()=>lc,targetTo:()=>j0,translate:()=>_0,transpose:()=>v0});function p0(){var t=new He(16);return He!=Float32Array&&(t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[11]=0,t[12]=0,t[13]=0,t[14]=0),t[0]=1,t[5]=1,t[10]=1,t[15]=1,t}function h0(t){var e=new He(16);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e}function y0(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t}function x0(t,e,r,n,o,i,s,a,c,l,d,u,m,f,h,y){var p=new He(16);return p[0]=t,p[1]=e,p[2]=r,p[3]=n,p[4]=o,p[5]=i,p[6]=s,p[7]=a,p[8]=c,p[9]=l,p[10]=d,p[11]=u,p[12]=m,p[13]=f,p[14]=h,p[15]=y,p}function g0(t,e,r,n,o,i,s,a,c,l,d,u,m,f,h,y,p){return t[0]=e,t[1]=r,t[2]=n,t[3]=o,t[4]=i,t[5]=s,t[6]=a,t[7]=c,t[8]=l,t[9]=d,t[10]=u,t[11]=m,t[12]=f,t[13]=h,t[14]=y,t[15]=p,t}function nc(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function v0(t,e){if(t===e){var r=e[1],n=e[2],o=e[3],i=e[6],s=e[7],a=e[11];t[1]=e[4],t[2]=e[8],t[3]=e[12],t[4]=r,t[6]=e[9],t[7]=e[13],t[8]=n,t[9]=i,t[11]=e[14],t[12]=o,t[13]=s,t[14]=a}else t[0]=e[0],t[1]=e[4],t[2]=e[8],t[3]=e[12],t[4]=e[1],t[5]=e[5],t[6]=e[9],t[7]=e[13],t[8]=e[2],t[9]=e[6],t[10]=e[10],t[11]=e[14],t[12]=e[3],t[13]=e[7],t[14]=e[11],t[15]=e[15];return t}function b0(t,e){var r=e[0],n=e[1],o=e[2],i=e[3],s=e[4],a=e[5],c=e[6],l=e[7],d=e[8],u=e[9],m=e[10],f=e[11],h=e[12],y=e[13],p=e[14],x=e[15],M=r*a-n*s,v=r*c-o*s,S=r*l-i*s,b=n*c-o*a,_=n*l-i*a,w=o*l-i*c,L=d*y-u*h,P=d*p-m*h,A=d*x-f*h,N=u*p-m*y,U=u*x-f*y,V=m*x-f*p,F=M*V-v*U+S*N+b*A-_*P+w*L;return F?(F=1/F,t[0]=(a*V-c*U+l*N)*F,t[1]=(o*U-n*V-i*N)*F,t[2]=(y*w-p*_+x*b)*F,t[3]=(m*_-u*w-f*b)*F,t[4]=(c*A-s*V-l*P)*F,t[5]=(r*V-o*A+i*P)*F,t[6]=(p*S-h*w-x*v)*F,t[7]=(d*w-m*S+f*v)*F,t[8]=(s*U-a*A+l*L)*F,t[9]=(n*A-r*U-i*L)*F,t[10]=(h*_-y*S+x*M)*F,t[11]=(u*S-d*_-f*M)*F,t[12]=(a*P-s*N-c*L)*F,t[13]=(r*N-n*P+o*L)*F,t[14]=(y*v-h*b-p*M)*F,t[15]=(d*b-u*v+m*M)*F,t):null}function S0(t,e){var r=e[0],n=e[1],o=e[2],i=e[3],s=e[4],a=e[5],c=e[6],l=e[7],d=e[8],u=e[9],m=e[10],f=e[11],h=e[12],y=e[13],p=e[14],x=e[15],M=r*a-n*s,v=r*c-o*s,S=r*l-i*s,b=n*c-o*a,_=n*l-i*a,w=o*l-i*c,L=d*y-u*h,P=d*p-m*h,A=d*x-f*h,N=u*p-m*y,U=u*x-f*y,V=m*x-f*p;return t[0]=a*V-c*U+l*N,t[1]=o*U-n*V-i*N,t[2]=y*w-p*_+x*b,t[3]=m*_-u*w-f*b,t[4]=c*A-s*V-l*P,t[5]=r*V-o*A+i*P,t[6]=p*S-h*w-x*v,t[7]=d*w-m*S+f*v,t[8]=s*U-a*A+l*L,t[9]=n*A-r*U-i*L,t[10]=h*_-y*S+x*M,t[11]=u*S-d*_-f*M,t[12]=a*P-s*N-c*L,t[13]=r*N-n*P+o*L,t[14]=y*v-h*b-p*M,t[15]=d*b-u*v+m*M,t}function M0(t){var e=t[0],r=t[1],n=t[2],o=t[3],i=t[4],s=t[5],a=t[6],c=t[7],l=t[8],d=t[9],u=t[10],m=t[11],f=t[12],h=t[13],y=t[14],p=t[15],x=e*s-r*i,M=e*a-n*i,v=r*a-n*s,S=l*h-d*f,b=l*y-u*f,_=d*y-u*h,w=e*_-r*b+n*S,L=i*_-s*b+a*S,P=l*v-d*M+u*x,A=f*v-h*M+y*x;return c*w-o*L+p*P-m*A}function oc(t,e,r){var n=e[0],o=e[1],i=e[2],s=e[3],a=e[4],c=e[5],l=e[6],d=e[7],u=e[8],m=e[9],f=e[10],h=e[11],y=e[12],p=e[13],x=e[14],M=e[15],v=r[0],S=r[1],b=r[2],_=r[3];return t[0]=v*n+S*a+b*u+_*y,t[1]=v*o+S*c+b*m+_*p,t[2]=v*i+S*l+b*f+_*x,t[3]=v*s+S*d+b*h+_*M,v=r[4],S=r[5],b=r[6],_=r[7],t[4]=v*n+S*a+b*u+_*y,t[5]=v*o+S*c+b*m+_*p,t[6]=v*i+S*l+b*f+_*x,t[7]=v*s+S*d+b*h+_*M,v=r[8],S=r[9],b=r[10],_=r[11],t[8]=v*n+S*a+b*u+_*y,t[9]=v*o+S*c+b*m+_*p,t[10]=v*i+S*l+b*f+_*x,t[11]=v*s+S*d+b*h+_*M,v=r[12],S=r[13],b=r[14],_=r[15],t[12]=v*n+S*a+b*u+_*y,t[13]=v*o+S*c+b*m+_*p,t[14]=v*i+S*l+b*f+_*x,t[15]=v*s+S*d+b*h+_*M,t}function _0(t,e,r){var n=r[0],o=r[1],i=r[2],s,a,c,l,d,u,m,f,h,y,p,x;return e===t?(t[12]=e[0]*n+e[4]*o+e[8]*i+e[12],t[13]=e[1]*n+e[5]*o+e[9]*i+e[13],t[14]=e[2]*n+e[6]*o+e[10]*i+e[14],t[15]=e[3]*n+e[7]*o+e[11]*i+e[15]):(s=e[0],a=e[1],c=e[2],l=e[3],d=e[4],u=e[5],m=e[6],f=e[7],h=e[8],y=e[9],p=e[10],x=e[11],t[0]=s,t[1]=a,t[2]=c,t[3]=l,t[4]=d,t[5]=u,t[6]=m,t[7]=f,t[8]=h,t[9]=y,t[10]=p,t[11]=x,t[12]=s*n+d*o+h*i+e[12],t[13]=a*n+u*o+y*i+e[13],t[14]=c*n+m*o+p*i+e[14],t[15]=l*n+f*o+x*i+e[15]),t}function A0(t,e,r){var n=r[0],o=r[1],i=r[2];return t[0]=e[0]*n,t[1]=e[1]*n,t[2]=e[2]*n,t[3]=e[3]*n,t[4]=e[4]*o,t[5]=e[5]*o,t[6]=e[6]*o,t[7]=e[7]*o,t[8]=e[8]*i,t[9]=e[9]*i,t[10]=e[10]*i,t[11]=e[11]*i,t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t}function w0(t,e,r,n){var o=n[0],i=n[1],s=n[2],a=Math.sqrt(o*o+i*i+s*s),c,l,d,u,m,f,h,y,p,x,M,v,S,b,_,w,L,P,A,N,U,V,F,j;return a<Y?null:(a=1/a,o*=a,i*=a,s*=a,c=Math.sin(r),l=Math.cos(r),d=1-l,u=e[0],m=e[1],f=e[2],h=e[3],y=e[4],p=e[5],x=e[6],M=e[7],v=e[8],S=e[9],b=e[10],_=e[11],w=o*o*d+l,L=i*o*d+s*c,P=s*o*d-i*c,A=o*i*d-s*c,N=i*i*d+l,U=s*i*d+o*c,V=o*s*d+i*c,F=i*s*d-o*c,j=s*s*d+l,t[0]=u*w+y*L+v*P,t[1]=m*w+p*L+S*P,t[2]=f*w+x*L+b*P,t[3]=h*w+M*L+_*P,t[4]=u*A+y*N+v*U,t[5]=m*A+p*N+S*U,t[6]=f*A+x*N+b*U,t[7]=h*A+M*N+_*U,t[8]=u*V+y*F+v*j,t[9]=m*V+p*F+S*j,t[10]=f*V+x*F+b*j,t[11]=h*V+M*F+_*j,e!==t&&(t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t)}function L0(t,e,r){var n=Math.sin(r),o=Math.cos(r),i=e[4],s=e[5],a=e[6],c=e[7],l=e[8],d=e[9],u=e[10],m=e[11];return e!==t&&(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[4]=i*o+l*n,t[5]=s*o+d*n,t[6]=a*o+u*n,t[7]=c*o+m*n,t[8]=l*o-i*n,t[9]=d*o-s*n,t[10]=u*o-a*n,t[11]=m*o-c*n,t}function z0(t,e,r){var n=Math.sin(r),o=Math.cos(r),i=e[0],s=e[1],a=e[2],c=e[3],l=e[8],d=e[9],u=e[10],m=e[11];return e!==t&&(t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[0]=i*o-l*n,t[1]=s*o-d*n,t[2]=a*o-u*n,t[3]=c*o-m*n,t[8]=i*n+l*o,t[9]=s*n+d*o,t[10]=a*n+u*o,t[11]=c*n+m*o,t}function E0(t,e,r){var n=Math.sin(r),o=Math.cos(r),i=e[0],s=e[1],a=e[2],c=e[3],l=e[4],d=e[5],u=e[6],m=e[7];return e!==t&&(t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[0]=i*o+l*n,t[1]=s*o+d*n,t[2]=a*o+u*n,t[3]=c*o+m*n,t[4]=l*o-i*n,t[5]=d*o-s*n,t[6]=u*o-a*n,t[7]=m*o-c*n,t}function C0(t,e){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=e[0],t[13]=e[1],t[14]=e[2],t[15]=1,t}function T0(t,e){return t[0]=e[0],t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=e[1],t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=e[2],t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function P0(t,e,r){var n=r[0],o=r[1],i=r[2],s=Math.sqrt(n*n+o*o+i*i),a,c,l;return s<Y?null:(s=1/s,n*=s,o*=s,i*=s,a=Math.sin(e),c=Math.cos(e),l=1-c,t[0]=n*n*l+c,t[1]=o*n*l+i*a,t[2]=i*n*l-o*a,t[3]=0,t[4]=n*o*l-i*a,t[5]=o*o*l+c,t[6]=i*o*l+n*a,t[7]=0,t[8]=n*i*l+o*a,t[9]=o*i*l-n*a,t[10]=i*i*l+c,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t)}function F0(t,e){var r=Math.sin(e),n=Math.cos(e);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=n,t[6]=r,t[7]=0,t[8]=0,t[9]=-r,t[10]=n,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function I0(t,e){var r=Math.sin(e),n=Math.cos(e);return t[0]=n,t[1]=0,t[2]=-r,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=r,t[9]=0,t[10]=n,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function R0(t,e){var r=Math.sin(e),n=Math.cos(e);return t[0]=n,t[1]=r,t[2]=0,t[3]=0,t[4]=-r,t[5]=n,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function ic(t,e,r){var n=e[0],o=e[1],i=e[2],s=e[3],a=n+n,c=o+o,l=i+i,d=n*a,u=n*c,m=n*l,f=o*c,h=o*l,y=i*l,p=s*a,x=s*c,M=s*l;return t[0]=1-(f+y),t[1]=u+M,t[2]=m-x,t[3]=0,t[4]=u-M,t[5]=1-(d+y),t[6]=h+p,t[7]=0,t[8]=m+x,t[9]=h-p,t[10]=1-(d+f),t[11]=0,t[12]=r[0],t[13]=r[1],t[14]=r[2],t[15]=1,t}function k0(t,e){var r=new He(3),n=-e[0],o=-e[1],i=-e[2],s=e[3],a=e[4],c=e[5],l=e[6],d=e[7],u=n*n+o*o+i*i+s*s;return u>0?(r[0]=(a*s+d*n+c*i-l*o)*2/u,r[1]=(c*s+d*o+l*n-a*i)*2/u,r[2]=(l*s+d*i+a*o-c*n)*2/u):(r[0]=(a*s+d*n+c*i-l*o)*2,r[1]=(c*s+d*o+l*n-a*i)*2,r[2]=(l*s+d*i+a*o-c*n)*2),ic(t,e,r),t}function D0(t,e){return t[0]=e[12],t[1]=e[13],t[2]=e[14],t}function sc(t,e){var r=e[0],n=e[1],o=e[2],i=e[4],s=e[5],a=e[6],c=e[8],l=e[9],d=e[10];return t[0]=Math.sqrt(r*r+n*n+o*o),t[1]=Math.sqrt(i*i+s*s+a*a),t[2]=Math.sqrt(c*c+l*l+d*d),t}function H0(t,e){var r=new He(3);sc(r,e);var n=1/r[0],o=1/r[1],i=1/r[2],s=e[0]*n,a=e[1]*o,c=e[2]*i,l=e[4]*n,d=e[5]*o,u=e[6]*i,m=e[8]*n,f=e[9]*o,h=e[10]*i,y=s+d+h,p=0;return y>0?(p=Math.sqrt(y+1)*2,t[3]=.25*p,t[0]=(u-f)/p,t[1]=(m-c)/p,t[2]=(a-l)/p):s>d&&s>h?(p=Math.sqrt(1+s-d-h)*2,t[3]=(u-f)/p,t[0]=.25*p,t[1]=(a+l)/p,t[2]=(m+c)/p):d>h?(p=Math.sqrt(1+d-s-h)*2,t[3]=(m-c)/p,t[0]=(a+l)/p,t[1]=.25*p,t[2]=(u+f)/p):(p=Math.sqrt(1+h-s-d)*2,t[3]=(a-l)/p,t[0]=(m+c)/p,t[1]=(u+f)/p,t[2]=.25*p),t}function O0(t,e,r,n){e[0]=n[12],e[1]=n[13],e[2]=n[14];var o=n[0],i=n[1],s=n[2],a=n[4],c=n[5],l=n[6],d=n[8],u=n[9],m=n[10];r[0]=Math.sqrt(o*o+i*i+s*s),r[1]=Math.sqrt(a*a+c*c+l*l),r[2]=Math.sqrt(d*d+u*u+m*m);var f=1/r[0],h=1/r[1],y=1/r[2],p=o*f,x=i*h,M=s*y,v=a*f,S=c*h,b=l*y,_=d*f,w=u*h,L=m*y,P=p+S+L,A=0;return P>0?(A=Math.sqrt(P+1)*2,t[3]=.25*A,t[0]=(b-w)/A,t[1]=(_-M)/A,t[2]=(x-v)/A):p>S&&p>L?(A=Math.sqrt(1+p-S-L)*2,t[3]=(b-w)/A,t[0]=.25*A,t[1]=(x+v)/A,t[2]=(_+M)/A):S>L?(A=Math.sqrt(1+S-p-L)*2,t[3]=(_-M)/A,t[0]=(x+v)/A,t[1]=.25*A,t[2]=(b+w)/A):(A=Math.sqrt(1+L-p-S)*2,t[3]=(x-v)/A,t[0]=(_+M)/A,t[1]=(b+w)/A,t[2]=.25*A),t}function N0(t,e,r,n){var o=e[0],i=e[1],s=e[2],a=e[3],c=o+o,l=i+i,d=s+s,u=o*c,m=o*l,f=o*d,h=i*l,y=i*d,p=s*d,x=a*c,M=a*l,v=a*d,S=n[0],b=n[1],_=n[2];return t[0]=(1-(h+p))*S,t[1]=(m+v)*S,t[2]=(f-M)*S,t[3]=0,t[4]=(m-v)*b,t[5]=(1-(u+p))*b,t[6]=(y+x)*b,t[7]=0,t[8]=(f+M)*_,t[9]=(y-x)*_,t[10]=(1-(u+h))*_,t[11]=0,t[12]=r[0],t[13]=r[1],t[14]=r[2],t[15]=1,t}function B0(t,e,r,n,o){var i=e[0],s=e[1],a=e[2],c=e[3],l=i+i,d=s+s,u=a+a,m=i*l,f=i*d,h=i*u,y=s*d,p=s*u,x=a*u,M=c*l,v=c*d,S=c*u,b=n[0],_=n[1],w=n[2],L=o[0],P=o[1],A=o[2],N=(1-(y+x))*b,U=(f+S)*b,V=(h-v)*b,F=(f-S)*_,j=(1-(m+x))*_,ge=(p+M)*_,Tt=(h+v)*w,Hn=(p-M)*w,Cr=(1-(m+y))*w;return t[0]=N,t[1]=U,t[2]=V,t[3]=0,t[4]=F,t[5]=j,t[6]=ge,t[7]=0,t[8]=Tt,t[9]=Hn,t[10]=Cr,t[11]=0,t[12]=r[0]+L-(N*L+F*P+Tt*A),t[13]=r[1]+P-(U*L+j*P+Hn*A),t[14]=r[2]+A-(V*L+ge*P+Cr*A),t[15]=1,t}function V0(t,e){var r=e[0],n=e[1],o=e[2],i=e[3],s=r+r,a=n+n,c=o+o,l=r*s,d=n*s,u=n*a,m=o*s,f=o*a,h=o*c,y=i*s,p=i*a,x=i*c;return t[0]=1-u-h,t[1]=d+x,t[2]=m-p,t[3]=0,t[4]=d-x,t[5]=1-l-h,t[6]=f+y,t[7]=0,t[8]=m+p,t[9]=f-y,t[10]=1-l-u,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function U0(t,e,r,n,o,i,s){var a=1/(r-e),c=1/(o-n),l=1/(i-s);return t[0]=i*2*a,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=i*2*c,t[6]=0,t[7]=0,t[8]=(r+e)*a,t[9]=(o+n)*c,t[10]=(s+i)*l,t[11]=-1,t[12]=0,t[13]=0,t[14]=s*i*2*l,t[15]=0,t}function ac(t,e,r,n,o){var i=1/Math.tan(e/2);if(t[0]=i/r,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=i,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[11]=-1,t[12]=0,t[13]=0,t[15]=0,o!=null&&o!==1/0){var s=1/(n-o);t[10]=(o+n)*s,t[14]=2*o*n*s}else t[10]=-1,t[14]=-2*n;return t}var G0=ac;function W0(t,e,r,n,o){var i=1/Math.tan(e/2);if(t[0]=i/r,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=i,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[11]=-1,t[12]=0,t[13]=0,t[15]=0,o!=null&&o!==1/0){var s=1/(n-o);t[10]=o*s,t[14]=o*n*s}else t[10]=-1,t[14]=-n;return t}function X0(t,e,r,n){var o=Math.tan(e.upDegrees*Math.PI/180),i=Math.tan(e.downDegrees*Math.PI/180),s=Math.tan(e.leftDegrees*Math.PI/180),a=Math.tan(e.rightDegrees*Math.PI/180),c=2/(s+a),l=2/(o+i);return t[0]=c,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=l,t[6]=0,t[7]=0,t[8]=-((s-a)*c*.5),t[9]=(o-i)*l*.5,t[10]=n/(r-n),t[11]=-1,t[12]=0,t[13]=0,t[14]=n*r/(r-n),t[15]=0,t}function cc(t,e,r,n,o,i,s){var a=1/(e-r),c=1/(n-o),l=1/(i-s);return t[0]=-2*a,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*c,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*l,t[11]=0,t[12]=(e+r)*a,t[13]=(o+n)*c,t[14]=(s+i)*l,t[15]=1,t}var q0=cc;function Y0(t,e,r,n,o,i,s){var a=1/(e-r),c=1/(n-o),l=1/(i-s);return t[0]=-2*a,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*c,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=l,t[11]=0,t[12]=(e+r)*a,t[13]=(o+n)*c,t[14]=i*l,t[15]=1,t}function K0(t,e,r,n){var o,i,s,a,c,l,d,u,m,f,h=e[0],y=e[1],p=e[2],x=n[0],M=n[1],v=n[2],S=r[0],b=r[1],_=r[2];return Math.abs(h-S)<Y&&Math.abs(y-b)<Y&&Math.abs(p-_)<Y?nc(t):(d=h-S,u=y-b,m=p-_,f=1/Math.sqrt(d*d+u*u+m*m),d*=f,u*=f,m*=f,o=M*m-v*u,i=v*d-x*m,s=x*u-M*d,f=Math.sqrt(o*o+i*i+s*s),f?(f=1/f,o*=f,i*=f,s*=f):(o=0,i=0,s=0),a=u*s-m*i,c=m*o-d*s,l=d*i-u*o,f=Math.sqrt(a*a+c*c+l*l),f?(f=1/f,a*=f,c*=f,l*=f):(a=0,c=0,l=0),t[0]=o,t[1]=a,t[2]=d,t[3]=0,t[4]=i,t[5]=c,t[6]=u,t[7]=0,t[8]=s,t[9]=l,t[10]=m,t[11]=0,t[12]=-(o*h+i*y+s*p),t[13]=-(a*h+c*y+l*p),t[14]=-(d*h+u*y+m*p),t[15]=1,t)}function j0(t,e,r,n){var o=e[0],i=e[1],s=e[2],a=n[0],c=n[1],l=n[2],d=o-r[0],u=i-r[1],m=s-r[2],f=d*d+u*u+m*m;f>0&&(f=1/Math.sqrt(f),d*=f,u*=f,m*=f);var h=c*m-l*u,y=l*d-a*m,p=a*u-c*d;return f=h*h+y*y+p*p,f>0&&(f=1/Math.sqrt(f),h*=f,y*=f,p*=f),t[0]=h,t[1]=y,t[2]=p,t[3]=0,t[4]=u*p-m*y,t[5]=m*h-d*p,t[6]=d*y-u*h,t[7]=0,t[8]=d,t[9]=u,t[10]=m,t[11]=0,t[12]=o,t[13]=i,t[14]=s,t[15]=1,t}function $0(t){return"mat4("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+", "+t[4]+", "+t[5]+", "+t[6]+", "+t[7]+", "+t[8]+", "+t[9]+", "+t[10]+", "+t[11]+", "+t[12]+", "+t[13]+", "+t[14]+", "+t[15]+")"}function Q0(t){return Math.sqrt(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]+t[3]*t[3]+t[4]*t[4]+t[5]*t[5]+t[6]*t[6]+t[7]*t[7]+t[8]*t[8]+t[9]*t[9]+t[10]*t[10]+t[11]*t[11]+t[12]*t[12]+t[13]*t[13]+t[14]*t[14]+t[15]*t[15])}function J0(t,e,r){return t[0]=e[0]+r[0],t[1]=e[1]+r[1],t[2]=e[2]+r[2],t[3]=e[3]+r[3],t[4]=e[4]+r[4],t[5]=e[5]+r[5],t[6]=e[6]+r[6],t[7]=e[7]+r[7],t[8]=e[8]+r[8],t[9]=e[9]+r[9],t[10]=e[10]+r[10],t[11]=e[11]+r[11],t[12]=e[12]+r[12],t[13]=e[13]+r[13],t[14]=e[14]+r[14],t[15]=e[15]+r[15],t}function lc(t,e,r){return t[0]=e[0]-r[0],t[1]=e[1]-r[1],t[2]=e[2]-r[2],t[3]=e[3]-r[3],t[4]=e[4]-r[4],t[5]=e[5]-r[5],t[6]=e[6]-r[6],t[7]=e[7]-r[7],t[8]=e[8]-r[8],t[9]=e[9]-r[9],t[10]=e[10]-r[10],t[11]=e[11]-r[11],t[12]=e[12]-r[12],t[13]=e[13]-r[13],t[14]=e[14]-r[14],t[15]=e[15]-r[15],t}function Z0(t,e,r){return t[0]=e[0]*r,t[1]=e[1]*r,t[2]=e[2]*r,t[3]=e[3]*r,t[4]=e[4]*r,t[5]=e[5]*r,t[6]=e[6]*r,t[7]=e[7]*r,t[8]=e[8]*r,t[9]=e[9]*r,t[10]=e[10]*r,t[11]=e[11]*r,t[12]=e[12]*r,t[13]=e[13]*r,t[14]=e[14]*r,t[15]=e[15]*r,t}function ed(t,e,r,n){return t[0]=e[0]+r[0]*n,t[1]=e[1]+r[1]*n,t[2]=e[2]+r[2]*n,t[3]=e[3]+r[3]*n,t[4]=e[4]+r[4]*n,t[5]=e[5]+r[5]*n,t[6]=e[6]+r[6]*n,t[7]=e[7]+r[7]*n,t[8]=e[8]+r[8]*n,t[9]=e[9]+r[9]*n,t[10]=e[10]+r[10]*n,t[11]=e[11]+r[11]*n,t[12]=e[12]+r[12]*n,t[13]=e[13]+r[13]*n,t[14]=e[14]+r[14]*n,t[15]=e[15]+r[15]*n,t}function td(t,e){return t[0]===e[0]&&t[1]===e[1]&&t[2]===e[2]&&t[3]===e[3]&&t[4]===e[4]&&t[5]===e[5]&&t[6]===e[6]&&t[7]===e[7]&&t[8]===e[8]&&t[9]===e[9]&&t[10]===e[10]&&t[11]===e[11]&&t[12]===e[12]&&t[13]===e[13]&&t[14]===e[14]&&t[15]===e[15]}function rd(t,e){var r=t[0],n=t[1],o=t[2],i=t[3],s=t[4],a=t[5],c=t[6],l=t[7],d=t[8],u=t[9],m=t[10],f=t[11],h=t[12],y=t[13],p=t[14],x=t[15],M=e[0],v=e[1],S=e[2],b=e[3],_=e[4],w=e[5],L=e[6],P=e[7],A=e[8],N=e[9],U=e[10],V=e[11],F=e[12],j=e[13],ge=e[14],Tt=e[15];return Math.abs(r-M)<=Y*Math.max(1,Math.abs(r),Math.abs(M))&&Math.abs(n-v)<=Y*Math.max(1,Math.abs(n),Math.abs(v))&&Math.abs(o-S)<=Y*Math.max(1,Math.abs(o),Math.abs(S))&&Math.abs(i-b)<=Y*Math.max(1,Math.abs(i),Math.abs(b))&&Math.abs(s-_)<=Y*Math.max(1,Math.abs(s),Math.abs(_))&&Math.abs(a-w)<=Y*Math.max(1,Math.abs(a),Math.abs(w))&&Math.abs(c-L)<=Y*Math.max(1,Math.abs(c),Math.abs(L))&&Math.abs(l-P)<=Y*Math.max(1,Math.abs(l),Math.abs(P))&&Math.abs(d-A)<=Y*Math.max(1,Math.abs(d),Math.abs(A))&&Math.abs(u-N)<=Y*Math.max(1,Math.abs(u),Math.abs(N))&&Math.abs(m-U)<=Y*Math.max(1,Math.abs(m),Math.abs(U))&&Math.abs(f-V)<=Y*Math.max(1,Math.abs(f),Math.abs(V))&&Math.abs(h-F)<=Y*Math.max(1,Math.abs(h),Math.abs(F))&&Math.abs(y-j)<=Y*Math.max(1,Math.abs(y),Math.abs(j))&&Math.abs(p-ge)<=Y*Math.max(1,Math.abs(p),Math.abs(ge))&&Math.abs(x-Tt)<=Y*Math.max(1,Math.abs(x),Math.abs(Tt))}var nd=oc,od=lc;var ne={};ai(ne,{add:()=>ld,angle:()=>Fd,bezier:()=>Ad,ceil:()=>dd,clone:()=>id,copy:()=>ad,create:()=>dc,cross:()=>bd,dist:()=>Bd,distance:()=>hc,div:()=>Nd,divide:()=>pc,dot:()=>us,equals:()=>Dd,exactEquals:()=>kd,floor:()=>ud,forEach:()=>Wd,fromValues:()=>sd,hermite:()=>_d,inverse:()=>gd,len:()=>Ud,length:()=>uc,lerp:()=>Sd,max:()=>fd,min:()=>md,mul:()=>Od,multiply:()=>fc,negate:()=>xd,normalize:()=>vd,random:()=>wd,rotateX:()=>Cd,rotateY:()=>Td,rotateZ:()=>Pd,round:()=>pd,scale:()=>hd,scaleAndAdd:()=>yd,set:()=>cd,slerp:()=>Md,sqrDist:()=>Vd,sqrLen:()=>Gd,squaredDistance:()=>yc,squaredLength:()=>xc,str:()=>Rd,sub:()=>Hd,subtract:()=>mc,transformMat3:()=>zd,transformMat4:()=>Ld,transformQuat:()=>Ed,zero:()=>Id});function dc(){var t=new He(3);return He!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0),t}function id(t){var e=new He(3);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e}function uc(t){var e=t[0],r=t[1],n=t[2];return Math.sqrt(e*e+r*r+n*n)}function sd(t,e,r){var n=new He(3);return n[0]=t,n[1]=e,n[2]=r,n}function ad(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t}function cd(t,e,r,n){return t[0]=e,t[1]=r,t[2]=n,t}function ld(t,e,r){return t[0]=e[0]+r[0],t[1]=e[1]+r[1],t[2]=e[2]+r[2],t}function mc(t,e,r){return t[0]=e[0]-r[0],t[1]=e[1]-r[1],t[2]=e[2]-r[2],t}function fc(t,e,r){return t[0]=e[0]*r[0],t[1]=e[1]*r[1],t[2]=e[2]*r[2],t}function pc(t,e,r){return t[0]=e[0]/r[0],t[1]=e[1]/r[1],t[2]=e[2]/r[2],t}function dd(t,e){return t[0]=Math.ceil(e[0]),t[1]=Math.ceil(e[1]),t[2]=Math.ceil(e[2]),t}function ud(t,e){return t[0]=Math.floor(e[0]),t[1]=Math.floor(e[1]),t[2]=Math.floor(e[2]),t}function md(t,e,r){return t[0]=Math.min(e[0],r[0]),t[1]=Math.min(e[1],r[1]),t[2]=Math.min(e[2],r[2]),t}function fd(t,e,r){return t[0]=Math.max(e[0],r[0]),t[1]=Math.max(e[1],r[1]),t[2]=Math.max(e[2],r[2]),t}function pd(t,e){return t[0]=ti(e[0]),t[1]=ti(e[1]),t[2]=ti(e[2]),t}function hd(t,e,r){return t[0]=e[0]*r,t[1]=e[1]*r,t[2]=e[2]*r,t}function yd(t,e,r,n){return t[0]=e[0]+r[0]*n,t[1]=e[1]+r[1]*n,t[2]=e[2]+r[2]*n,t}function hc(t,e){var r=e[0]-t[0],n=e[1]-t[1],o=e[2]-t[2];return Math.sqrt(r*r+n*n+o*o)}function yc(t,e){var r=e[0]-t[0],n=e[1]-t[1],o=e[2]-t[2];return r*r+n*n+o*o}function xc(t){var e=t[0],r=t[1],n=t[2];return e*e+r*r+n*n}function xd(t,e){return t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t}function gd(t,e){return t[0]=1/e[0],t[1]=1/e[1],t[2]=1/e[2],t}function vd(t,e){var r=e[0],n=e[1],o=e[2],i=r*r+n*n+o*o;return i>0&&(i=1/Math.sqrt(i)),t[0]=e[0]*i,t[1]=e[1]*i,t[2]=e[2]*i,t}function us(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function bd(t,e,r){var n=e[0],o=e[1],i=e[2],s=r[0],a=r[1],c=r[2];return t[0]=o*c-i*a,t[1]=i*s-n*c,t[2]=n*a-o*s,t}function Sd(t,e,r,n){var o=e[0],i=e[1],s=e[2];return t[0]=o+n*(r[0]-o),t[1]=i+n*(r[1]-i),t[2]=s+n*(r[2]-s),t}function Md(t,e,r,n){var o=Math.acos(Math.min(Math.max(us(e,r),-1),1)),i=Math.sin(o),s=Math.sin((1-n)*o)/i,a=Math.sin(n*o)/i;return t[0]=s*e[0]+a*r[0],t[1]=s*e[1]+a*r[1],t[2]=s*e[2]+a*r[2],t}function _d(t,e,r,n,o,i){var s=i*i,a=s*(2*i-3)+1,c=s*(i-2)+i,l=s*(i-1),d=s*(3-2*i);return t[0]=e[0]*a+r[0]*c+n[0]*l+o[0]*d,t[1]=e[1]*a+r[1]*c+n[1]*l+o[1]*d,t[2]=e[2]*a+r[2]*c+n[2]*l+o[2]*d,t}function Ad(t,e,r,n,o,i){var s=1-i,a=s*s,c=i*i,l=a*s,d=3*i*a,u=3*c*s,m=c*i;return t[0]=e[0]*l+r[0]*d+n[0]*u+o[0]*m,t[1]=e[1]*l+r[1]*d+n[1]*u+o[1]*m,t[2]=e[2]*l+r[2]*d+n[2]*u+o[2]*m,t}function wd(t,e){e=e===void 0?1:e;var r=ds()*2*Math.PI,n=ds()*2-1,o=Math.sqrt(1-n*n)*e;return t[0]=Math.cos(r)*o,t[1]=Math.sin(r)*o,t[2]=n*e,t}function Ld(t,e,r){var n=e[0],o=e[1],i=e[2],s=r[3]*n+r[7]*o+r[11]*i+r[15];return s=s||1,t[0]=(r[0]*n+r[4]*o+r[8]*i+r[12])/s,t[1]=(r[1]*n+r[5]*o+r[9]*i+r[13])/s,t[2]=(r[2]*n+r[6]*o+r[10]*i+r[14])/s,t}function zd(t,e,r){var n=e[0],o=e[1],i=e[2];return t[0]=n*r[0]+o*r[3]+i*r[6],t[1]=n*r[1]+o*r[4]+i*r[7],t[2]=n*r[2]+o*r[5]+i*r[8],t}function Ed(t,e,r){var n=r[0],o=r[1],i=r[2],s=r[3],a=e[0],c=e[1],l=e[2],d=o*l-i*c,u=i*a-n*l,m=n*c-o*a;return d=d+d,u=u+u,m=m+m,t[0]=a+s*d+o*m-i*u,t[1]=c+s*u+i*d-n*m,t[2]=l+s*m+n*u-o*d,t}function Cd(t,e,r,n){var o=[],i=[];return o[0]=e[0]-r[0],o[1]=e[1]-r[1],o[2]=e[2]-r[2],i[0]=o[0],i[1]=o[1]*Math.cos(n)-o[2]*Math.sin(n),i[2]=o[1]*Math.sin(n)+o[2]*Math.cos(n),t[0]=i[0]+r[0],t[1]=i[1]+r[1],t[2]=i[2]+r[2],t}function Td(t,e,r,n){var o=[],i=[];return o[0]=e[0]-r[0],o[1]=e[1]-r[1],o[2]=e[2]-r[2],i[0]=o[2]*Math.sin(n)+o[0]*Math.cos(n),i[1]=o[1],i[2]=o[2]*Math.cos(n)-o[0]*Math.sin(n),t[0]=i[0]+r[0],t[1]=i[1]+r[1],t[2]=i[2]+r[2],t}function Pd(t,e,r,n){var o=[],i=[];return o[0]=e[0]-r[0],o[1]=e[1]-r[1],o[2]=e[2]-r[2],i[0]=o[0]*Math.cos(n)-o[1]*Math.sin(n),i[1]=o[0]*Math.sin(n)+o[1]*Math.cos(n),i[2]=o[2],t[0]=i[0]+r[0],t[1]=i[1]+r[1],t[2]=i[2]+r[2],t}function Fd(t,e){var r=t[0],n=t[1],o=t[2],i=e[0],s=e[1],a=e[2],c=Math.sqrt((r*r+n*n+o*o)*(i*i+s*s+a*a)),l=c&&us(t,e)/c;return Math.acos(Math.min(Math.max(l,-1),1))}function Id(t){return t[0]=0,t[1]=0,t[2]=0,t}function Rd(t){return"vec3("+t[0]+", "+t[1]+", "+t[2]+")"}function kd(t,e){return t[0]===e[0]&&t[1]===e[1]&&t[2]===e[2]}function Dd(t,e){var r=t[0],n=t[1],o=t[2],i=e[0],s=e[1],a=e[2];return Math.abs(r-i)<=Y*Math.max(1,Math.abs(r),Math.abs(i))&&Math.abs(n-s)<=Y*Math.max(1,Math.abs(n),Math.abs(s))&&Math.abs(o-a)<=Y*Math.max(1,Math.abs(o),Math.abs(a))}var Hd=mc,Od=fc,Nd=pc,Bd=hc,Vd=yc,Ud=uc,Gd=xc,Wd=(function(){var t=dc();return function(e,r,n,o,i,s){var a,c;for(r||(r=3),n||(n=0),o?c=Math.min(o*r+n,e.length):c=e.length,a=n;a<c;a+=r)t[0]=e[a],t[1]=e[a+1],t[2]=e[a+2],i(t,t,s),e[a]=t[0],e[a+1]=t[1],e[a+2]=t[2];return e}})();var ri=class{constructor(){this._position=ne.create();this._angles=ne.create();this._bobAngles=ne.create();this._bobOffset=ne.create();this._kickAngles=ne.create();this._rollAngle=0;this._fov=90;this._aspect=1;this._near=.1;this._far=1e3;this._viewMatrix=oe.create();this._projectionMatrix=oe.create();this._viewProjectionMatrix=oe.create();this._dirty=!0}get position(){return this._position}set position(e){ne.copy(this._position,e),this._dirty=!0}get angles(){return this._angles}set angles(e){ne.copy(this._angles,e),this._dirty=!0}get bobAngles(){return this._bobAngles}set bobAngles(e){ne.copy(this._bobAngles,e),this._dirty=!0}get kickAngles(){return this._kickAngles}set kickAngles(e){ne.copy(this._kickAngles,e),this._dirty=!0}get bobOffset(){return this._bobOffset}set bobOffset(e){ne.copy(this._bobOffset,e),this._dirty=!0}get rollAngle(){return this._rollAngle}set rollAngle(e){this._rollAngle=e,this._dirty=!0}get fov(){return this._fov}set fov(e){this._fov=e,this._dirty=!0}get aspect(){return this._aspect}set aspect(e){this._aspect=e,this._dirty=!0}get viewMatrix(){return this.updateMatrices(),this._viewMatrix}get projectionMatrix(){return this.updateMatrices(),this._projectionMatrix}get viewProjectionMatrix(){return this.updateMatrices(),this._viewProjectionMatrix}getViewmodelProjectionMatrix(e){let r=oe.create();return oe.perspective(r,e*Jt,this._aspect,this._near,this._far),r}updateMatrices(){if(!this._dirty)return;oe.perspective(this._projectionMatrix,this._fov*Jt,this._aspect,this._near,this._far);let e=oe.fromValues(0,-1,0,0,0,0,1,0,-1,0,0,0,0,0,0,1),r=this._angles[0]+this._bobAngles[0]+this._kickAngles[0],n=this._angles[1]+this._bobAngles[1]+this._kickAngles[1],o=this._angles[2]+this._bobAngles[2]+this._kickAngles[2]+this._rollAngle,i=r*Jt,s=n*Jt,a=o*Jt,c=oe.create();oe.identity(c),oe.rotateZ(c,c,-s),oe.rotateY(c,c,-i),oe.rotateX(c,c,-a);let l=oe.create();oe.multiply(l,e,c);let d=ne.add(ne.create(),this._position,this._bobOffset),u=ne.negate(ne.create(),d),m=ne.create();ne.transformMat4(m,u,c);let f=ne.fromValues(m[1]||0,m[2]||0,m[0]||0);oe.copy(this._viewMatrix,l),this._viewMatrix[12]=f[0],this._viewMatrix[13]=f[1],this._viewMatrix[14]=f[2],oe.multiply(this._viewProjectionMatrix,this._projectionMatrix,this._viewMatrix),this._dirty=!1}};var Xd=[.2,.2,.2],qd={x:0,y:0,z:1},Yd=[.8,.8,.8];function ms(t,e,r){return t+(e-t)*r}function Er(t,e,r){return{x:ms(t.x,e.x,r),y:ms(t.y,e.y,r),z:ms(t.z,e.z,r)}}function zr(t){return t<0?0:t>1?1:t}function fs(t){let e=[],r=[];for(let n of t.triangles){let o=e.length,[i,s,a]=n.indices,c=t.texCoords[i],l=t.texCoords[s],d=t.texCoords[a];if(!c||!l||!d)throw new Error(`Missing texCoord for triangle in surface ${t.name}`);e.push({vertexIndex:i,texCoord:[c.s,1-c.t]},{vertexIndex:s,texCoord:[l.s,1-l.t]},{vertexIndex:a,texCoord:[d.s,1-d.t]}),r.push(o,o+1,o+2)}return{vertices:e,indices:new Uint16Array(r)}}function Kd(t,e,r){let n=r?.ambient??Xd,o=r?.directional??{direction:qd,color:Yd},i=Oe(t),s=Oe(o.direction),a=zr(i.x*s.x+i.y*s.y+i.z*s.z),c=n[0]+o.color[0]*a,l=n[1]+o.color[1]*a,d=n[2]+o.color[2]*a;if(r?.dynamicLights){let u=r.modelMatrix?Cs(r.modelMatrix,e):e;for(let m of r.dynamicLights){let f=u.x-m.origin.x,h=u.y-m.origin.y,y=u.z-m.origin.z,p=f*f+h*h+y*y,x=m.radius*m.radius;if(p<x&&x>0){let M=1-Math.sqrt(p)/m.radius,v=Math.sqrt(p),S=v>0?zr(-(f*i.x+h*i.y+y*i.z)/v):0,b=zr(M*S);c+=m.color[0]*b,l+=m.color[1]*b,d+=m.color[2]*b}}}return[zr(c),zr(l),zr(d)]}function ps(t,e,r,n){let o=t.vertices[r.currentFrame],i=t.vertices[r.nextFrame];if(!o||!i)throw new Error("Requested MD3 frames are out of range");let s=new Float32Array(e.vertices.length*12);return e.vertices.forEach((a,c)=>{let l=o[a.vertexIndex],d=i[a.vertexIndex];if(!l||!d)throw new Error(`Vertex index ${a.vertexIndex} missing for frame`);let u=Er(l.position,d.position,r.lerp),m=Oe(Er(l.normal,d.normal,r.lerp)),f=Kd(m,u,n),h=c*12;s[h]=u.x,s[h+1]=u.y,s[h+2]=u.z,s[h+3]=m.x,s[h+4]=m.y,s[h+5]=m.z,s[h+6]=a.texCoord[0],s[h+7]=a.texCoord[1],s[h+8]=f[0],s[h+9]=f[1],s[h+10]=f[2],s[h+11]=1}),s}function gc(t,e,r){let n=t.tags[0];if(!n)return null;let o=n.findIndex(y=>y.name===r);if(o===-1)return null;let i=t.tags[e.currentFrame]?.[o],s=t.tags[e.nextFrame]?.[o];if(!i||!s)throw new Error(`Tag ${r} is missing for one of the interpolated frames`);let a=Er(i.origin,s.origin,e.lerp),c=Oe(Er(i.axis[0],s.axis[0],e.lerp)),l=Oe(Er(i.axis[1],s.axis[1],e.lerp)),d=Oe(Er(i.axis[2],s.axis[2],e.lerp)),u=c,m=Oe({x:l.x-u.x*(u.x*l.x+u.y*l.y+u.z*l.z),y:l.y-u.y*(u.x*l.x+u.y*l.y+u.z*l.z),z:l.z-u.z*(u.x*l.x+u.y*l.y+u.z*l.z)}),f=Oe({x:u.y*m.z-u.z*m.y,y:u.z*m.x-u.x*m.z,z:u.x*m.y-u.y*m.x}),h=[u,m,f];return{origin:a,axis:h,matrix:Ts(a,h)}}var hs=`#version 300 es
258
258
  precision highp float;
259
259
 
260
260
  layout(location = 0) in vec3 a_position;
@@ -271,7 +271,7 @@ void main() {
271
271
  v_texCoord = a_texCoord;
272
272
  v_color = a_color;
273
273
  gl_Position = u_modelViewProjection * vec4(a_position, 1.0);
274
- }`,fs=`#version 300 es
274
+ }`,ys=`#version 300 es
275
275
  precision highp float;
276
276
 
277
277
  in vec2 v_texCoord;
@@ -285,7 +285,7 @@ out vec4 o_color;
285
285
  void main() {
286
286
  vec4 albedo = texture(u_diffuseMap, v_texCoord) * u_tint;
287
287
  o_color = vec4(albedo.rgb * v_color.rgb, albedo.a * v_color.a);
288
- }`,Rn=class{constructor(e,r,n,o){this.gl=e,this.geometry=ds(r),this.vertexBuffer=new xe(e,e.STATIC_DRAW),this.indexBuffer=new De(e,e.STATIC_DRAW),this.vertexArray=new Se(e),this.indexCount=this.geometry.indices.length,this.vertexArray.configureAttributes([{index:0,size:3,type:e.FLOAT,stride:48,offset:0},{index:1,size:3,type:e.FLOAT,stride:48,offset:12},{index:2,size:2,type:e.FLOAT,stride:48,offset:24},{index:3,size:4,type:e.FLOAT,stride:48,offset:32}],this.vertexBuffer),this.vertexArray.bind(),this.indexBuffer.bind(),this.indexBuffer.upload(this.geometry.indices,e.STATIC_DRAW),this.update(r,n,o)}update(e,r,n){let o=us(e,this.geometry,r,n);this.vertexBuffer.upload(o,this.gl.STATIC_DRAW)}bind(){this.vertexArray.bind(),this.indexBuffer.bind()}dispose(){this.vertexBuffer.dispose(),this.indexBuffer.dispose(),this.vertexArray.dispose()}},ti=class{constructor(e,r,n,o){this.surfaces=new Map;this.gl=e,this.model=r,this.blend=n,this.lighting=o,r.surfaces.forEach(i=>{this.surfaces.set(i.name,new Rn(e,i,n,o))})}update(e,r){this.blend=e,this.lighting=r??this.lighting;for(let n of this.model.surfaces)this.surfaces.get(n.name)?.update(n,e,this.lighting)}dispose(){for(let e of this.surfaces.values())e.dispose();this.surfaces.clear()}},ri=class{constructor(e){this.gl=e,this.program=ye.create(e,{vertex:ms,fragment:fs},{a_position:0,a_normal:1,a_texCoord:2,a_color:3}),this.uniformMvp=this.program.getUniformLocation("u_modelViewProjection"),this.uniformTint=this.program.getUniformLocation("u_tint"),this.uniformDiffuse=this.program.getUniformLocation("u_diffuseMap")}bind(e,r=[1,1,1,1],n=0){this.program.use(),this.gl.uniformMatrix4fv(this.uniformMvp,!1,e),this.gl.uniform4fv(this.uniformTint,new Float32Array(r)),this.gl.uniform1i(this.uniformDiffuse,n)}drawSurface(e,r){let n=r?.diffuseSampler??0,o=r?.tint??[1,1,1,1];this.gl.uniform4fv(this.uniformTint,new Float32Array(o)),this.gl.uniform1i(this.uniformDiffuse,n),e.bind(),this.gl.drawElements(this.gl.TRIANGLES,e.indexCount,this.gl.UNSIGNED_SHORT,0)}dispose(){this.program.dispose()}};var Vd=[1,1,1,1],ni=class{constructor(e,r=Math.random){this.maxParticles=e,this.random=r,this.alive=new Uint8Array(e),this.positionX=new Float32Array(e),this.positionY=new Float32Array(e),this.positionZ=new Float32Array(e),this.velocityX=new Float32Array(e),this.velocityY=new Float32Array(e),this.velocityZ=new Float32Array(e),this.colorR=new Float32Array(e),this.colorG=new Float32Array(e),this.colorB=new Float32Array(e),this.colorA=new Float32Array(e),this.size=new Float32Array(e),this.lifetime=new Float32Array(e),this.remaining=new Float32Array(e),this.gravity=new Float32Array(e),this.damping=new Float32Array(e),this.bounce=new Float32Array(e),this.fade=new Uint8Array(e),this.blendMode=new Uint8Array(e)}spawn(e){let r=this.findFreeSlot();if(r===-1)return null;let n=e.color??Vd,o=e.velocity??{x:0,y:0,z:0};return this.alive[r]=1,this.positionX[r]=e.position.x,this.positionY[r]=e.position.y,this.positionZ[r]=e.position.z,this.velocityX[r]=o.x,this.velocityY[r]=o.y,this.velocityZ[r]=o.z,this.colorR[r]=n[0],this.colorG[r]=n[1],this.colorB[r]=n[2],this.colorA[r]=n[3],this.size[r]=e.size??2.5,this.lifetime[r]=e.lifetime,this.remaining[r]=e.lifetime,this.gravity[r]=e.gravity??800,this.damping[r]=e.damping??0,this.bounce[r]=e.bounce??.25,this.fade[r]=e.fade?1:0,this.blendMode[r]=e.blendMode==="additive"?1:0,r}update(e,r={}){let n=r.floorZ??-1/0;for(let o=0;o<this.maxParticles;o+=1){if(!this.alive[o])continue;if(this.remaining[o]-=e,this.remaining[o]<=0){this.alive[o]=0;continue}let i=Math.max(0,1-this.damping[o]*e);this.velocityX[o]*=i,this.velocityY[o]*=i,this.velocityZ[o]=this.velocityZ[o]*i-this.gravity[o]*e,this.positionX[o]+=this.velocityX[o]*e,this.positionY[o]+=this.velocityY[o]*e,this.positionZ[o]+=this.velocityZ[o]*e,this.positionZ[o]<n&&(this.positionZ[o]=n,this.velocityZ[o]=-this.velocityZ[o]*this.bounce[o],this.velocityX[o]*=.7,this.velocityY[o]*=.7)}}killAll(){this.alive.fill(0)}aliveCount(){let e=0;for(let r=0;r<this.maxParticles;r+=1)this.alive[r]&&(e+=1);return e}getState(e){return{alive:this.alive[e]===1,position:{x:this.positionX[e],y:this.positionY[e],z:this.positionZ[e]},velocity:{x:this.velocityX[e],y:this.velocityY[e],z:this.velocityZ[e]},remaining:this.remaining[e],color:[this.colorR[e],this.colorG[e],this.colorB[e],this.colorA[e]],size:this.size[e],blendMode:this.blendMode[e]===1?"additive":"alpha"}}buildMesh(e,r){let n=[],o=[],i=[],s=a=>{let c=o.length,l=0;for(let d=0;d<this.maxParticles;d+=1){if(!this.alive[d]||(a==="additive"?1:0)!==this.blendMode[d])continue;l+=1;let u=n.length/9,m=this.size[d]*.5,f=this.fade[d]?Math.max(this.remaining[d]/this.lifetime[d],0):1,h=this.blendMode[d]===1?1.2:1,y=this.colorR[d]*h,p=this.colorG[d]*h,x=this.colorB[d]*h,M=this.colorA[d]*f,v=this.positionX[d],S=this.positionY[d],b=this.positionZ[d],_=e.x*m,w=e.y*m,L=e.z*m,P=r.x*m,A=r.y*m,N=r.z*m,U=[{x:v-_-P,y:S-w-A,z:b-L-N},{x:v+_-P,y:S+w-A,z:b+L-N},{x:v-_+P,y:S-w+A,z:b-L+N},{x:v+_+P,y:S+w+A,z:b+L+N}],V=[[0,1],[1,1],[0,0],[1,0]];U.forEach((F,K)=>{n.push(F.x,F.y,F.z,V[K]?.[0]??0,V[K]?.[1]??0,y,p,x,M)}),o.push(u,u+1,u+2,u+2,u+1,u+3)}l>0&&i.push({blendMode:a,start:c,count:o.length-c})};return s("alpha"),s("additive"),{vertices:new Float32Array(n),indices:new Uint16Array(o),batches:i}}findFreeSlot(){for(let e=0;e<this.maxParticles;e+=1)if(!this.alive[e])return e;return-1}},ps=`#version 300 es
288
+ }`,Dn=class{constructor(e,r,n,o){this.gl=e,this.geometry=fs(r),this.vertexBuffer=new xe(e,e.STATIC_DRAW),this.indexBuffer=new De(e,e.STATIC_DRAW),this.vertexArray=new Se(e),this.indexCount=this.geometry.indices.length,this.vertexArray.configureAttributes([{index:0,size:3,type:e.FLOAT,stride:48,offset:0},{index:1,size:3,type:e.FLOAT,stride:48,offset:12},{index:2,size:2,type:e.FLOAT,stride:48,offset:24},{index:3,size:4,type:e.FLOAT,stride:48,offset:32}],this.vertexBuffer),this.vertexArray.bind(),this.indexBuffer.bind(),this.indexBuffer.upload(this.geometry.indices,e.STATIC_DRAW),this.update(r,n,o)}update(e,r,n){let o=ps(e,this.geometry,r,n);this.vertexBuffer.upload(o,this.gl.STATIC_DRAW)}bind(){this.vertexArray.bind(),this.indexBuffer.bind()}dispose(){this.vertexBuffer.dispose(),this.indexBuffer.dispose(),this.vertexArray.dispose()}},ni=class{constructor(e,r,n,o){this.surfaces=new Map;this.gl=e,this.model=r,this.blend=n,this.lighting=o,r.surfaces.forEach(i=>{this.surfaces.set(i.name,new Dn(e,i,n,o))})}update(e,r){this.blend=e,this.lighting=r??this.lighting;for(let n of this.model.surfaces)this.surfaces.get(n.name)?.update(n,e,this.lighting)}dispose(){for(let e of this.surfaces.values())e.dispose();this.surfaces.clear()}},oi=class{constructor(e){this.gl=e,this.program=ye.create(e,{vertex:hs,fragment:ys},{a_position:0,a_normal:1,a_texCoord:2,a_color:3}),this.uniformMvp=this.program.getUniformLocation("u_modelViewProjection"),this.uniformTint=this.program.getUniformLocation("u_tint"),this.uniformDiffuse=this.program.getUniformLocation("u_diffuseMap")}bind(e,r=[1,1,1,1],n=0){this.program.use(),this.gl.uniformMatrix4fv(this.uniformMvp,!1,e),this.gl.uniform4fv(this.uniformTint,new Float32Array(r)),this.gl.uniform1i(this.uniformDiffuse,n)}drawSurface(e,r){let n=r?.diffuseSampler??0,o=r?.tint??[1,1,1,1];this.gl.uniform4fv(this.uniformTint,new Float32Array(o)),this.gl.uniform1i(this.uniformDiffuse,n),e.bind(),this.gl.drawElements(this.gl.TRIANGLES,e.indexCount,this.gl.UNSIGNED_SHORT,0)}dispose(){this.program.dispose()}};var jd=[1,1,1,1],ii=class{constructor(e,r=Math.random){this.maxParticles=e,this.random=r,this.alive=new Uint8Array(e),this.positionX=new Float32Array(e),this.positionY=new Float32Array(e),this.positionZ=new Float32Array(e),this.velocityX=new Float32Array(e),this.velocityY=new Float32Array(e),this.velocityZ=new Float32Array(e),this.colorR=new Float32Array(e),this.colorG=new Float32Array(e),this.colorB=new Float32Array(e),this.colorA=new Float32Array(e),this.size=new Float32Array(e),this.lifetime=new Float32Array(e),this.remaining=new Float32Array(e),this.gravity=new Float32Array(e),this.damping=new Float32Array(e),this.bounce=new Float32Array(e),this.fade=new Uint8Array(e),this.blendMode=new Uint8Array(e)}spawn(e){let r=this.findFreeSlot();if(r===-1)return null;let n=e.color??jd,o=e.velocity??{x:0,y:0,z:0};return this.alive[r]=1,this.positionX[r]=e.position.x,this.positionY[r]=e.position.y,this.positionZ[r]=e.position.z,this.velocityX[r]=o.x,this.velocityY[r]=o.y,this.velocityZ[r]=o.z,this.colorR[r]=n[0],this.colorG[r]=n[1],this.colorB[r]=n[2],this.colorA[r]=n[3],this.size[r]=e.size??2.5,this.lifetime[r]=e.lifetime,this.remaining[r]=e.lifetime,this.gravity[r]=e.gravity??800,this.damping[r]=e.damping??0,this.bounce[r]=e.bounce??.25,this.fade[r]=e.fade?1:0,this.blendMode[r]=e.blendMode==="additive"?1:0,r}update(e,r={}){let n=r.floorZ??-1/0;for(let o=0;o<this.maxParticles;o+=1){if(!this.alive[o])continue;if(this.remaining[o]-=e,this.remaining[o]<=0){this.alive[o]=0;continue}let i=Math.max(0,1-this.damping[o]*e);this.velocityX[o]*=i,this.velocityY[o]*=i,this.velocityZ[o]=this.velocityZ[o]*i-this.gravity[o]*e,this.positionX[o]+=this.velocityX[o]*e,this.positionY[o]+=this.velocityY[o]*e,this.positionZ[o]+=this.velocityZ[o]*e,this.positionZ[o]<n&&(this.positionZ[o]=n,this.velocityZ[o]=-this.velocityZ[o]*this.bounce[o],this.velocityX[o]*=.7,this.velocityY[o]*=.7)}}killAll(){this.alive.fill(0)}aliveCount(){let e=0;for(let r=0;r<this.maxParticles;r+=1)this.alive[r]&&(e+=1);return e}getState(e){return{alive:this.alive[e]===1,position:{x:this.positionX[e],y:this.positionY[e],z:this.positionZ[e]},velocity:{x:this.velocityX[e],y:this.velocityY[e],z:this.velocityZ[e]},remaining:this.remaining[e],color:[this.colorR[e],this.colorG[e],this.colorB[e],this.colorA[e]],size:this.size[e],blendMode:this.blendMode[e]===1?"additive":"alpha"}}buildMesh(e,r){let n=[],o=[],i=[],s=a=>{let c=o.length,l=0;for(let d=0;d<this.maxParticles;d+=1){if(!this.alive[d]||(a==="additive"?1:0)!==this.blendMode[d])continue;l+=1;let u=n.length/9,m=this.size[d]*.5,f=this.fade[d]?Math.max(this.remaining[d]/this.lifetime[d],0):1,h=this.blendMode[d]===1?1.2:1,y=this.colorR[d]*h,p=this.colorG[d]*h,x=this.colorB[d]*h,M=this.colorA[d]*f,v=this.positionX[d],S=this.positionY[d],b=this.positionZ[d],_=e.x*m,w=e.y*m,L=e.z*m,P=r.x*m,A=r.y*m,N=r.z*m,U=[{x:v-_-P,y:S-w-A,z:b-L-N},{x:v+_-P,y:S+w-A,z:b+L-N},{x:v-_+P,y:S-w+A,z:b-L+N},{x:v+_+P,y:S+w+A,z:b+L+N}],V=[[0,1],[1,1],[0,0],[1,0]];U.forEach((F,j)=>{n.push(F.x,F.y,F.z,V[j]?.[0]??0,V[j]?.[1]??0,y,p,x,M)}),o.push(u,u+1,u+2,u+2,u+1,u+3)}l>0&&i.push({blendMode:a,start:c,count:o.length-c})};return s("alpha"),s("additive"),{vertices:new Float32Array(n),indices:new Uint16Array(o),batches:i}}findFreeSlot(){for(let e=0;e<this.maxParticles;e+=1)if(!this.alive[e])return e;return-1}},xs=`#version 300 es
289
289
  precision highp float;
290
290
 
291
291
  layout(location = 0) in vec3 a_position;
@@ -301,7 +301,7 @@ void main() {
301
301
  v_uv = a_uv;
302
302
  v_color = a_color;
303
303
  gl_Position = u_viewProjection * vec4(a_position, 1.0);
304
- }`,hs=`#version 300 es
304
+ }`,gs=`#version 300 es
305
305
  precision highp float;
306
306
 
307
307
  in vec2 v_uv;
@@ -313,5 +313,5 @@ void main() {
313
313
  float dist = distance(v_uv, vec2(0.5));
314
314
  float alpha = v_color.a * (1.0 - smoothstep(0.35, 0.5, dist));
315
315
  o_color = vec4(v_color.rgb, alpha);
316
- }`,oi=class{constructor(e,r){this.vertexCapacity=0;this.indexCapacity=0;this.gl=e,this.system=r,this.program=ye.create(e,{vertex:ps,fragment:hs}),this.vertexBuffer=new xe(e,e.DYNAMIC_DRAW),this.indexBuffer=new De(e,e.DYNAMIC_DRAW),this.vertexArray=new Se(e),this.vertexArray.configureAttributes([{index:0,size:3,type:e.FLOAT,stride:36,offset:0},{index:1,size:2,type:e.FLOAT,stride:36,offset:12},{index:2,size:4,type:e.FLOAT,stride:36,offset:20}],this.vertexBuffer)}render(e){let r=this.system.buildMesh(e.viewRight,e.viewUp);if(r.indices.length===0)return;let n=r.vertices;r.vertices.byteLength>this.vertexCapacity?(this.vertexCapacity=r.vertices.byteLength,this.vertexBuffer.upload(n,this.gl.DYNAMIC_DRAW)):this.vertexBuffer.update(n);let o=r.indices;r.indices.byteLength>this.indexCapacity?(this.indexCapacity=r.indices.byteLength,this.indexBuffer.upload(o,this.gl.DYNAMIC_DRAW)):this.indexBuffer.update(o),this.gl.depthMask(!1),this.program.use();let i=this.program.getUniformLocation("u_viewProjection");this.gl.uniformMatrix4fv(i,!1,e.viewProjection),this.vertexArray.bind();for(let s of r.batches)s.blendMode==="additive"?this.gl.blendFunc(this.gl.SRC_ALPHA,this.gl.ONE):this.gl.blendFuncSeparate(this.gl.SRC_ALPHA,this.gl.ONE_MINUS_SRC_ALPHA,this.gl.ONE,this.gl.ONE_MINUS_SRC_ALPHA),this.gl.drawElements(this.gl.TRIANGLES,s.count,this.gl.UNSIGNED_SHORT,s.start*2);this.gl.depthMask(!0)}dispose(){this.program.dispose(),this.vertexBuffer.dispose(),this.indexBuffer.dispose(),this.vertexArray.dispose()}};function pc(t){let{system:e,origin:r,normal:n={x:0,y:0,z:1}}=t;for(let o=0;o<12;o+=1){let i=200+e.random()*180,s=e.random()*.35;e.spawn({position:r,velocity:{x:n.x*i+(e.random()-.5)*80,y:n.y*i+(e.random()-.5)*80,z:Math.max(n.z*i,120)+s*80},color:[1,.8,.4,1],size:2.5,lifetime:.45+e.random()*.1,gravity:600,damping:2,bounce:.45,blendMode:"additive",fade:!0})}for(let o=0;o<8;o+=1)e.spawn({position:r,velocity:{x:(e.random()-.5)*40,y:(e.random()-.5)*40,z:80+e.random()*40},color:[.45,.45,.45,.75],size:6,lifetime:.6,gravity:200,damping:4,bounce:.15,blendMode:"alpha",fade:!0})}function hc(t){let{system:e,origin:r}=t;for(let n=0;n<40;n+=1){let o=e.random()*Math.PI*2,i=Math.acos(2*e.random()-1),s=220+e.random()*260,a={x:Math.sin(i)*Math.cos(o),y:Math.sin(i)*Math.sin(o),z:Math.cos(i)};e.spawn({position:r,velocity:{x:a.x*s,y:a.y*s,z:a.z*s},color:[1,.6,.2,1],size:5,lifetime:.9,gravity:700,damping:1,bounce:.35,blendMode:"additive",fade:!0})}for(let n=0;n<16;n+=1)e.spawn({position:r,velocity:{x:(e.random()-.5)*30,y:(e.random()-.5)*30,z:120+e.random()*120},color:[.25,.25,.25,.9],size:12,lifetime:1.2,gravity:300,damping:3,blendMode:"alpha",fade:!0})}function yc(t){let{system:e,origin:r,direction:n={x:0,y:0,z:1}}=t;for(let o=0;o<24;o+=1){let i=120+e.random()*180;e.spawn({position:r,velocity:{x:n.x*i+(e.random()-.5)*70,y:n.y*i+(e.random()-.5)*70,z:n.z*i+e.random()*80},color:[.6,0,0,.95],size:3,lifetime:.8,gravity:900,damping:1,bounce:.2,blendMode:"alpha",fade:!0})}}function xc(t){let{system:e,origin:r}=t;for(let n=0;n<30;n+=1){let o=e.random()*Math.PI*2,i=8+e.random()*8;e.spawn({position:r,velocity:{x:Math.cos(o)*i,y:Math.sin(o)*i,z:100+e.random()*80},color:[.4,.6,1,.9],size:4,lifetime:.5,gravity:300,damping:2,blendMode:"additive",fade:!0})}}function gc(t){let{system:e,origin:r,direction:n={x:1,y:0,z:0}}=t;for(let o=0;o<10;o+=1){let i=350+e.random()*100;e.spawn({position:r,velocity:{x:n.x*i+(e.random()-.5)*30,y:n.y*i+(e.random()-.5)*30,z:n.z*i+(e.random()-.5)*30},color:[1,.8,.3,1],size:3,lifetime:.25,gravity:200,damping:1,blendMode:"additive",fade:!0})}}function vc(t){let{system:e,origin:r,direction:n={x:0,y:0,z:0}}=t;for(let o=0;o<6;o+=1)e.spawn({position:{x:r.x+n.x*o*2,y:r.y+n.y*o*2,z:r.z+n.z*o*2},velocity:{x:(e.random()-.5)*15,y:(e.random()-.5)*15,z:20+e.random()*15},color:[.6,.6,.6,.8],size:2.2,lifetime:.6,gravity:200,damping:1.5,blendMode:"alpha",fade:!0})}function Ud(t){return{init(){t.trace({x:0,y:0,z:0},{x:0,y:0,z:0})},shutdown(){},createMainLoop(e,r){return new Tt(e,r)}}}return Cc(Gd);})();
316
+ }`,si=class{constructor(e,r){this.vertexCapacity=0;this.indexCapacity=0;this.gl=e,this.system=r,this.program=ye.create(e,{vertex:xs,fragment:gs}),this.vertexBuffer=new xe(e,e.DYNAMIC_DRAW),this.indexBuffer=new De(e,e.DYNAMIC_DRAW),this.vertexArray=new Se(e),this.vertexArray.configureAttributes([{index:0,size:3,type:e.FLOAT,stride:36,offset:0},{index:1,size:2,type:e.FLOAT,stride:36,offset:12},{index:2,size:4,type:e.FLOAT,stride:36,offset:20}],this.vertexBuffer)}render(e){let r=this.system.buildMesh(e.viewRight,e.viewUp);if(r.indices.length===0)return;let n=r.vertices;r.vertices.byteLength>this.vertexCapacity?(this.vertexCapacity=r.vertices.byteLength,this.vertexBuffer.upload(n,this.gl.DYNAMIC_DRAW)):this.vertexBuffer.update(n);let o=r.indices;r.indices.byteLength>this.indexCapacity?(this.indexCapacity=r.indices.byteLength,this.indexBuffer.upload(o,this.gl.DYNAMIC_DRAW)):this.indexBuffer.update(o),this.gl.depthMask(!1),this.program.use();let i=this.program.getUniformLocation("u_viewProjection");this.gl.uniformMatrix4fv(i,!1,e.viewProjection),this.vertexArray.bind();for(let s of r.batches)s.blendMode==="additive"?this.gl.blendFunc(this.gl.SRC_ALPHA,this.gl.ONE):this.gl.blendFuncSeparate(this.gl.SRC_ALPHA,this.gl.ONE_MINUS_SRC_ALPHA,this.gl.ONE,this.gl.ONE_MINUS_SRC_ALPHA),this.gl.drawElements(this.gl.TRIANGLES,s.count,this.gl.UNSIGNED_SHORT,s.start*2);this.gl.depthMask(!0)}dispose(){this.program.dispose(),this.vertexBuffer.dispose(),this.indexBuffer.dispose(),this.vertexArray.dispose()}};function vc(t){let{system:e,origin:r,normal:n={x:0,y:0,z:1}}=t;for(let o=0;o<12;o+=1){let i=200+e.random()*180,s=e.random()*.35;e.spawn({position:r,velocity:{x:n.x*i+(e.random()-.5)*80,y:n.y*i+(e.random()-.5)*80,z:Math.max(n.z*i,120)+s*80},color:[1,.8,.4,1],size:2.5,lifetime:.45+e.random()*.1,gravity:600,damping:2,bounce:.45,blendMode:"additive",fade:!0})}for(let o=0;o<8;o+=1)e.spawn({position:r,velocity:{x:(e.random()-.5)*40,y:(e.random()-.5)*40,z:80+e.random()*40},color:[.45,.45,.45,.75],size:6,lifetime:.6,gravity:200,damping:4,bounce:.15,blendMode:"alpha",fade:!0})}function bc(t){let{system:e,origin:r}=t;for(let n=0;n<40;n+=1){let o=e.random()*Math.PI*2,i=Math.acos(2*e.random()-1),s=220+e.random()*260,a={x:Math.sin(i)*Math.cos(o),y:Math.sin(i)*Math.sin(o),z:Math.cos(i)};e.spawn({position:r,velocity:{x:a.x*s,y:a.y*s,z:a.z*s},color:[1,.6,.2,1],size:5,lifetime:.9,gravity:700,damping:1,bounce:.35,blendMode:"additive",fade:!0})}for(let n=0;n<16;n+=1)e.spawn({position:r,velocity:{x:(e.random()-.5)*30,y:(e.random()-.5)*30,z:120+e.random()*120},color:[.25,.25,.25,.9],size:12,lifetime:1.2,gravity:300,damping:3,blendMode:"alpha",fade:!0})}function Sc(t){let{system:e,origin:r,direction:n={x:0,y:0,z:1}}=t;for(let o=0;o<24;o+=1){let i=120+e.random()*180;e.spawn({position:r,velocity:{x:n.x*i+(e.random()-.5)*70,y:n.y*i+(e.random()-.5)*70,z:n.z*i+e.random()*80},color:[.6,0,0,.95],size:3,lifetime:.8,gravity:900,damping:1,bounce:.2,blendMode:"alpha",fade:!0})}}function Mc(t){let{system:e,origin:r}=t;for(let n=0;n<30;n+=1){let o=e.random()*Math.PI*2,i=8+e.random()*8;e.spawn({position:r,velocity:{x:Math.cos(o)*i,y:Math.sin(o)*i,z:100+e.random()*80},color:[.4,.6,1,.9],size:4,lifetime:.5,gravity:300,damping:2,blendMode:"additive",fade:!0})}}function _c(t){let{system:e,origin:r,direction:n={x:1,y:0,z:0}}=t;for(let o=0;o<10;o+=1){let i=350+e.random()*100;e.spawn({position:r,velocity:{x:n.x*i+(e.random()-.5)*30,y:n.y*i+(e.random()-.5)*30,z:n.z*i+(e.random()-.5)*30},color:[1,.8,.3,1],size:3,lifetime:.25,gravity:200,damping:1,blendMode:"additive",fade:!0})}}function Ac(t){let{system:e,origin:r,direction:n={x:0,y:0,z:0}}=t;for(let o=0;o<6;o+=1)e.spawn({position:{x:r.x+n.x*o*2,y:r.y+n.y*o*2,z:r.z+n.z*o*2},velocity:{x:(e.random()-.5)*15,y:(e.random()-.5)*15,z:20+e.random()*15},color:[.6,.6,.6,.8],size:2.2,lifetime:.6,gravity:200,damping:1.5,blendMode:"alpha",fade:!0})}function $d(t){return{init(){t.trace({x:0,y:0,z:0},{x:0,y:0,z:0})},shutdown(){},createMainLoop(e,r){return new Pt(e,r)}}}return Rc(Qd);})();
317
317
  //# sourceMappingURL=index.global.js.map