quake2ts 0.0.511 → 0.0.513
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/packages/client/dist/browser/index.global.js +17 -17
- package/packages/client/dist/browser/index.global.js.map +1 -1
- package/packages/client/dist/cjs/index.cjs +168 -38
- package/packages/client/dist/cjs/index.cjs.map +1 -1
- package/packages/client/dist/esm/index.js +168 -38
- package/packages/client/dist/esm/index.js.map +1 -1
- package/packages/client/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/client/dist/types/demo/handler.d.ts +0 -1
- package/packages/client/dist/types/demo/handler.d.ts.map +1 -1
- package/packages/engine/dist/browser/index.global.js +17 -17
- package/packages/engine/dist/browser/index.global.js.map +1 -1
- package/packages/engine/dist/cjs/index.cjs +461 -9
- package/packages/engine/dist/cjs/index.cjs.map +1 -1
- package/packages/engine/dist/esm/index.js +456 -9
- package/packages/engine/dist/esm/index.js.map +1 -1
- package/packages/engine/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/engine/dist/types/assets/manager.d.ts +3 -0
- package/packages/engine/dist/types/assets/manager.d.ts.map +1 -1
- package/packages/engine/dist/types/assets/pakWriter.d.ts +8 -0
- package/packages/engine/dist/types/assets/pakWriter.d.ts.map +1 -0
- package/packages/engine/dist/types/assets/resourceTracker.d.ts +33 -0
- package/packages/engine/dist/types/assets/resourceTracker.d.ts.map +1 -0
- package/packages/engine/dist/types/demo/clipper.d.ts +22 -0
- package/packages/engine/dist/types/demo/clipper.d.ts.map +1 -0
- package/packages/engine/dist/types/demo/delta.d.ts +3 -0
- package/packages/engine/dist/types/demo/delta.d.ts.map +1 -0
- package/packages/engine/dist/types/demo/playback.d.ts +40 -0
- package/packages/engine/dist/types/demo/playback.d.ts.map +1 -1
- package/packages/engine/dist/types/index.d.ts +4 -0
- package/packages/engine/dist/types/index.d.ts.map +1 -1
- package/packages/game/dist/tsconfig.tsbuildinfo +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
"use strict";var Quake2Engine=(()=>{var g0=Object.create;var ws=Object.defineProperty;var y0=Object.getOwnPropertyDescriptor;var x0=Object.getOwnPropertyNames;var b0=Object.getPrototypeOf,_0=Object.prototype.hasOwnProperty;var v0=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),ma=(e,t)=>{for(var r in t)ws(e,r,{get:t[r],enumerable:!0})},Xc=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of x0(t))!_0.call(e,i)&&i!==r&&ws(e,i,{get:()=>t[i],enumerable:!(n=y0(t,i))||n.enumerable});return e};var S0=(e,t,r)=>(r=e!=null?g0(b0(e)):{},Xc(t||!e||!e.__esModule?ws(r,"default",{value:e,enumerable:!0}):r,e)),w0=e=>Xc(ws({},"__esModule",{value:!0}),e);var Ed=v0((__,Md)=>{"use strict";Md.exports=Worker});var Zx={};ma(Zx,{ATTN_IDLE:()=>Ia,ATTN_LOOP_NONE:()=>La,ATTN_NONE:()=>Wn,ATTN_NORM:()=>Ta,ATTN_STATIC:()=>Rs,AssetDependencyError:()=>Ir,AssetDependencyTracker:()=>Ki,AssetManager:()=>vo,AssetPreviewGenerator:()=>fa,AudioApi:()=>Zr,AudioContextController:()=>So,AudioOcclusion:()=>Zi,AudioRegistry:()=>bn,AudioRegistryError:()=>Gi,AudioSystem:()=>Co,BSP_SURFACE_FRAGMENT_SOURCE:()=>fl,BSP_SURFACE_VERTEX_SOURCE:()=>ul,BSP_VERTEX_LAYOUT:()=>ll,BspLoader:()=>qr,BspParseError:()=>Q,BspSurfacePipeline:()=>Po,Camera:()=>Uo,Command:()=>Nn,CommandRegistry:()=>Ur,ConfigStringRegistry:()=>$r,Cvar:()=>Xn,CvarRegistry:()=>Xr,DemoAnalyzer:()=>Dn,DemoCameraMode:()=>zc,DemoEventType:()=>kc,DemoPlaybackController:()=>gs,DemoReader:()=>Ct,DemoRecorder:()=>ys,DemoValidator:()=>ua,DynamicLightManager:()=>zo,EngineHost:()=>Kr,EngineRuntime:()=>Kn,FileType:()=>Pc,FixedTimestepLoop:()=>ur,Framebuffer:()=>Fo,IndexBuffer:()=>xe,LruCache:()=>Nt,MAX_SOUND_CHANNELS:()=>Gn,MD2_FRAGMENT_SHADER:()=>bl,MD2_VERTEX_SHADER:()=>xl,MD3_FRAGMENT_SHADER:()=>Tl,MD3_VERTEX_SHADER:()=>Ll,MapAnalyzer:()=>ha,Md2Loader:()=>jr,Md2MeshBuffers:()=>Bo,Md2ParseError:()=>pe,Md2Pipeline:()=>Oo,Md3Loader:()=>Qr,Md3ModelMesh:()=>Ho,Md3ParseError:()=>Ge,Md3Pipeline:()=>Vo,Md3SurfaceMesh:()=>qi,MusicSystem:()=>Ro,NetworkMessageParser:()=>zt,PARTICLE_FRAGMENT_SHADER:()=>Cl,PARTICLE_VERTEX_SHADER:()=>Il,PROTOCOL_VERSION_RERELEASE:()=>Pn,PakArchive:()=>Yr,PakIndexStore:()=>_o,PakIngestionError:()=>Ot,PakParseError:()=>Ve,PakValidationError:()=>hr,PakValidator:()=>ks,ParticleRenderer:()=>Wo,ParticleSystem:()=>Go,PlaybackState:()=>da,RERELEASE_KNOWN_PAKS:()=>Ra,SKYBOX_FRAGMENT_SHADER:()=>gl,SKYBOX_VERTEX_SHADER:()=>pl,SOUND_FULLVOLUME:()=>Dt,SOUND_LOOP_ATTENUATE:()=>Ca,ShaderProgram:()=>Ee,SkyboxPipeline:()=>Do,SoundChannel:()=>st,SoundPrecache:()=>Mo,SoundRegistry:()=>Ao,SpriteLoader:()=>Jr,SpriteParseError:()=>Ut,Texture2D:()=>_n,TextureCache:()=>en,TextureCubeMap:()=>vn,TgaParseError:()=>yt,U_ALPHA:()=>bc,U_ANGLE1:()=>yc,U_ANGLE2:()=>uc,U_ANGLE3:()=>fc,U_EFFECTS16:()=>la,U_EFFECTS8:()=>sa,U_EVENT:()=>mc,U_FRAME16:()=>_c,U_FRAME8:()=>hc,U_INSTANCE_BITS:()=>Tc,U_LOOP_ATTENUATION_HIGH:()=>Cc,U_LOOP_VOLUME:()=>Ic,U_MODEL:()=>xc,U_MODEL2:()=>vc,U_MODEL3:()=>Sc,U_MODEL4:()=>wc,U_OLDORIGIN:()=>Ac,U_OLD_FRAME_HIGH:()=>Fc,U_ORIGIN1:()=>cc,U_ORIGIN2:()=>dc,U_ORIGIN3:()=>gc,U_OWNER_HIGH:()=>Rc,U_REMOVE:()=>pc,U_RENDERFX16:()=>aa,U_RENDERFX8:()=>ia,U_SCALE:()=>Lc,U_SKIN16:()=>ca,U_SKIN8:()=>oa,U_SOLID:()=>Ec,U_SOUND:()=>Mc,VertexArray:()=>Fe,VertexBuffer:()=>Le,VirtualFileSystem:()=>Fs,advanceAnimation:()=>_d,applySurfaceState:()=>mu,attenuationToDistanceMultiplier:()=>Bt,boxIntersectsFrustum:()=>Yi,buildBspGeometry:()=>au,buildMd2Geometry:()=>_l,buildMd2VertexData:()=>vl,buildMd3SurfaceGeometry:()=>Ml,buildMd3VertexData:()=>El,calculateMaxAudibleDistance:()=>fr,calculatePakChecksum:()=>ld,computeFrameBlend:()=>vd,computeSkyScroll:()=>yu,createAnimationState:()=>Sd,createAudioGraph:()=>wo,createBspSurfaces:()=>ou,createEmptyEntityState:()=>Or,createEmptyProtocolPlayerState:()=>ps,createEngine:()=>$x,createEngineRuntime:()=>od,createFaceLightmap:()=>Ps,createInitialChannels:()=>Eo,createOcclusionResolver:()=>ru,createProgramFromSources:()=>su,createWebGLContext:()=>nu,decodeOgg:()=>bo,deriveSurfaceRenderState:()=>ml,detectFileType:()=>Dc,extractFrustumPlanes:()=>lu,filesToPakSources:()=>Fa,findLeafForPoint:()=>dl,gatherVisibleFaces:()=>fu,groupMd2Animations:()=>gd,ingestPakFiles:()=>cd,ingestPaks:()=>zs,interpolateMd3Tag:()=>Pu,interpolateVec3:()=>wd,isBinaryFile:()=>f0,isTextFile:()=>Bc,parseBsp:()=>$n,parseMd2:()=>ka,parseMd3:()=>za,parsePcx:()=>jn,parseSprite:()=>Pa,parseTga:()=>Da,parseWal:()=>Bs,parseWalTexture:()=>Us,parseWav:()=>Hs,pcxToRgba:()=>Os,pickChannel:()=>Lo,preparePcxTexture:()=>Ns,removeViewTranslation:()=>gu,resolveLightStyles:()=>hl,spatializeOrigin:()=>To,spawnBlood:()=>Ou,spawnBulletImpact:()=>Du,spawnExplosion:()=>Bu,spawnMuzzleFlash:()=>Uu,spawnSplash:()=>Vu,spawnSteam:()=>Gu,spawnTeleportFlash:()=>Nu,spawnTrail:()=>Hu,walToRgba:()=>Ba,wireDropTarget:()=>dd,wireFileInput:()=>ud});var A0=()=>typeof performance<"u"?performance.now():Date.now(),M0=e=>{typeof requestAnimationFrame=="function"?requestAnimationFrame(()=>e()):setTimeout(e,25)},ur=class{constructor(t,r={}){this.callbacks=t;this.accumulatorMs=0;this.frame=0;this.running=!1;this.tick=()=>{if(!this.running)return;let t=this.options.now(),r=this.lastTimeMs===void 0?0:t-this.lastTimeMs;this.lastTimeMs=t,this.advance(r,t),this.running&&this.options.schedule(this.tick)};let n=r.fixedDeltaMs??25,i=r.maxSubSteps??5;this.options={fixedDeltaMs:n,maxSubSteps:i,maxDeltaMs:r.maxDeltaMs??n*i,startTimeMs:r.startTimeMs,now:r.now??A0,schedule:r.schedule??M0}}start(){this.running||(this.running=!0,this.lastTimeMs=this.options.startTimeMs??this.options.now(),this.options.schedule(this.tick))}stop(){this.running=!1}pump(t){let r=(this.lastTimeMs??0)+t;this.lastTimeMs=r,this.advance(t,r)}isRunning(){return this.running}get frameNumber(){return this.frame}advance(t,r){let n=Math.min(Math.max(t,0),this.options.maxDeltaMs);this.accumulatorMs=Math.min(this.accumulatorMs+n,this.options.fixedDeltaMs*this.options.maxSubSteps);let i=0;for(;this.accumulatorMs>=this.options.fixedDeltaMs&&i<this.options.maxSubSteps;)this.frame+=1,this.callbacks.simulate({frame:this.frame,deltaMs:this.options.fixedDeltaMs,nowMs:r}),this.accumulatorMs-=this.options.fixedDeltaMs,i+=1;let s=this.options.fixedDeltaMs===0?0:this.accumulatorMs/this.options.fixedDeltaMs;this.callbacks.render?.({alpha:s,nowMs:r,accumulatorMs:this.accumulatorMs,frame:this.frame})}};var Nn=class{constructor(t,r,n){this.name=t,this.callback=r,this.description=n}execute(t){this.callback(t)}},Ur=class{constructor(){this.commands=new Map;this.history=[];this.historyLimit=64;this.autocompleteProviders=[]}register(t,r,n){let i=new Nn(t,r,n);return this.commands.set(t,i),i}registerCommand(t,r){this.register(t,r)}registerAutocompleteProvider(t){this.autocompleteProviders.push(t)}get(t){return this.commands.get(t)}execute(t){let r=t.trim();if(r.length===0)return!1;(this.history.length===0||this.history[this.history.length-1]!==r)&&(this.history.push(r),this.history.length>this.historyLimit&&this.history.shift());let n=this.tokenize(t);if(n.length===0)return!1;let i=n[0],s=n.slice(1),o=this.get(i);return o?(o.execute(s),!0):(this.onConsoleOutput?.(`Unknown command "${i}"`),!1)}executeCommand(t){this.execute(t)}getHistory(){return[...this.history]}getSuggestions(t){let r=new Set;for(let n of this.commands.keys())n.startsWith(t)&&r.add(n);for(let n of this.autocompleteProviders){let i=n();for(let s of i)s.startsWith(t)&&r.add(s)}return Array.from(r).sort()}tokenize(t){let r=[],n="",i=!1;for(let s=0;s<t.length;s++){let o=t[s];o==='"'?i=!i:o===" "&&!i?n.length>0&&(r.push(n),n=""):n+=o}return n.length>0&&r.push(n),r}list(){return[...this.commands.values()].sort((t,r)=>t.name.localeCompare(r.name))}};var E0=Object.defineProperty,Kc=(e,t)=>{for(var r in t)E0(e,r,{get:t[r],enumerable:!0})},$c={x:0,y:0,z:0};var Qx=Math.PI/180;function As(e,t){return{x:e.x-t.x,y:e.y-t.y,z:e.z-t.z}}function L0(e,t){return{x:e.x*t,y:e.y*t,z:e.z*t}}function ga(e,t){return e.x*t.x+e.y*t.y+e.z*t.z}function T0(e){return ga(e,e)}function Hn(e){return Math.sqrt(T0(e))}function Je(e){let t=Hn(e);return t===0?e:L0(e,1/t)}var I0=Math.PI/180,C0=180/Math.PI,Gr=I0,ya=C0;var Hr=[[-.525731,0,.850651],[-.442863,.238856,.864188],[-.295242,0,.955423],[-.309017,.5,.809017],[-.16246,.262866,.951056],[0,0,1],[0,.850651,.525731],[-.147621,.716567,.681718],[.147621,.716567,.681718],[0,.525731,.850651],[.309017,.5,.809017],[.525731,0,.850651],[.295242,0,.955423],[.442863,.238856,.864188],[.16246,.262866,.951056],[-.681718,.147621,.716567],[-.809017,.309017,.5],[-.587785,.425325,.688191],[-.850651,.525731,0],[-.864188,.442863,.238856],[-.716567,.681718,.147621],[-.688191,.587785,.425325],[-.5,.809017,.309017],[-.238856,.864188,.442863],[-.425325,.688191,.587785],[-.716567,.681718,-.147621],[-.5,.809017,-.309017],[-.525731,.850651,0],[0,.850651,-.525731],[-.238856,.864188,-.442863],[0,.955423,-.295242],[-.262866,.951056,-.16246],[0,1,0],[0,.955423,.295242],[-.262866,.951056,.16246],[.238856,.864188,.442863],[.262866,.951056,.16246],[.5,.809017,.309017],[.238856,.864188,-.442863],[.262866,.951056,-.16246],[.5,.809017,-.309017],[.850651,.525731,0],[.716567,.681718,.147621],[.716567,.681718,-.147621],[.525731,.850651,0],[.425325,.688191,.587785],[.864188,.442863,.238856],[.688191,.587785,.425325],[.809017,.309017,.5],[.681718,.147621,.716567],[.587785,.425325,.688191],[.955423,.295242,0],[1,0,0],[.951056,.16246,.262866],[.850651,-.525731,0],[.955423,-.295242,0],[.864188,-.442863,.238856],[.951056,-.16246,.262866],[.809017,-.309017,.5],[.681718,-.147621,.716567],[.850651,0,.525731],[.864188,.442863,-.238856],[.809017,.309017,-.5],[.951056,.16246,-.262866],[.525731,0,-.850651],[.681718,.147621,-.716567],[.681718,-.147621,-.716567],[.850651,0,-.525731],[.809017,-.309017,-.5],[.864188,-.442863,-.238856],[.951056,-.16246,-.262866],[.147621,.716567,-.681718],[.309017,.5,-.809017],[.425325,.688191,-.587785],[.442863,.238856,-.864188],[.587785,.425325,-.688191],[.688191,.587785,-.425325],[-.147621,.716567,-.681718],[-.309017,.5,-.809017],[0,.525731,-.850651],[-.525731,0,-.850651],[-.442863,.238856,-.864188],[-.295242,0,-.955423],[-.16246,.262866,-.951056],[0,0,-1],[.295242,0,-.955423],[.16246,.262866,-.951056],[-.442863,-.238856,-.864188],[-.309017,-.5,-.809017],[-.16246,-.262866,-.951056],[0,-.850651,-.525731],[-.147621,-.716567,-.681718],[.147621,-.716567,-.681718],[0,-.525731,-.850651],[.309017,-.5,-.809017],[.442863,-.238856,-.864188],[.16246,-.262866,-.951056],[.238856,-.864188,-.442863],[.5,-.809017,-.309017],[.425325,-.688191,-.587785],[.716567,-.681718,-.147621],[.688191,-.587785,-.425325],[.587785,-.425325,-.688191],[0,-.955423,-.295242],[0,-1,0],[.262866,-.951056,-.16246],[0,-.850651,.525731],[0,-.955423,.295242],[.238856,-.864188,.442863],[.262866,-.951056,.16246],[.5,-.809017,.309017],[.716567,-.681718,.147621],[.525731,-.850651,0],[-.238856,-.864188,-.442863],[-.5,-.809017,-.309017],[-.262866,-.951056,-.16246],[-.850651,-.525731,0],[-.716567,-.681718,-.147621],[-.716567,-.681718,.147621],[-.525731,-.850651,0],[-.5,-.809017,.309017],[-.238856,-.864188,.442863],[-.262866,-.951056,.16246],[-.864188,-.442863,.238856],[-.809017,-.309017,.5],[-.688191,-.587785,.425325],[-.681718,-.147621,.716567],[-.442863,-.238856,.864188],[-.587785,-.425325,.688191],[-.309017,-.5,.809017],[-.147621,-.716567,.681718],[-.425325,-.688191,.587785],[-.16246,-.262866,.951056],[.442863,-.238856,.864188],[.16246,-.262866,.951056],[.309017,-.5,.809017],[.147621,-.716567,.681718],[0,-.525731,.850651],[.425325,-.688191,.587785],[.587785,-.425325,.688191],[.688191,-.587785,.425325],[-.955423,.295242,0],[-.951056,.16246,.262866],[-1,0,0],[-.850651,0,.525731],[-.955423,-.295242,0],[-.951056,-.16246,.262866],[-.864188,.442863,-.238856],[-.951056,.16246,-.262866],[-.809017,.309017,-.5],[-.864188,-.442863,-.238856],[-.951056,-.16246,-.262866],[-.809017,-.309017,-.5],[-.681718,.147621,-.716567],[-.681718,-.147621,-.716567],[-.850651,0,-.525731],[-.688191,.587785,-.425325],[-.587785,.425325,-.688191],[-.425325,.688191,-.587785],[-.425325,-.688191,-.587785],[-.587785,-.425325,-.688191],[-.688191,-.587785,-.425325]];function R0(){return new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1])}function Zc(e,t){let r=t.x,n=t.y,i=t.z;return{x:e[0]*r+e[4]*n+e[8]*i+e[12],y:e[1]*r+e[5]*n+e[9]*i+e[13],z:e[2]*r+e[6]*n+e[10]*i+e[14]}}function Yc(e,t){let r=R0();return r[0]=t[0].x,r[1]=t[0].y,r[2]=t[0].z,r[4]=t[1].x,r[5]=t[1].y,r[6]=t[1].z,r[8]=t[2].x,r[9]=t[2].y,r[10]=t[2].z,r[12]=e.x,r[13]=e.y,r[14]=e.z,r}var it=1,Pt=2;var xa=8,ba=16,F0=32;var k0=16384;var Ms=65536,qc=1<<17,z0=1<<18,P0=1<<19,D0=1<<20,B0=1<<21,O0=1<<22,N0=1<<23,Jx=1<<24,Es=1<<25,U0=1<<26,eb=1<<27,tb=1<<28,rb=1<<29,Ls=1<<30,nb=1<<31;var Vn=0;var jc=4,Qc=8,Jc=16,ed=32,td=64;var ib=1<<25,sb=1<<28,ob=1<<29,ab=1<<30,lb=1<<31;var cb=it|Pt,db=it|Ms|Pt|Es|Ls,ub=it|Ms|Pt,fb=it|qc|Pt|Es|Ls,hb=F0|xa|ba,mb=it|ba|xa,H0=it|Es|Ls|Pt|U0,pb=z0|P0|D0|B0|O0|N0,gb=it|xa|ba|Es|Ls,yb=it|Ms|Pt,xb=it|Pt,bb=it|Ms|Pt|qc,_b=H0|k0;var vb=Number.MAX_SAFE_INTEGER-1;var Ts=(e=>(e[e.None=0]="None",e[e.Archive=1]="Archive",e[e.UserInfo=2]="UserInfo",e[e.ServerInfo=4]="ServerInfo",e[e.Latch=8]="Latch",e[e.Cheat=16]="Cheat",e))(Ts||{});var Is=256;var _a=256,va=8192,Cs=2048,Sa=512,wa=256,Aa=Is*2,Ma=256,pa=32,Un=96;var j=(e=>(e[e.Name=0]="Name",e[e.CdTrack=1]="CdTrack",e[e.Sky=2]="Sky",e[e.SkyAxis=3]="SkyAxis",e[e.SkyRotate=4]="SkyRotate",e[e.StatusBar=5]="StatusBar",e[e.HealthBarName=55]="HealthBarName",e[e.CONFIG_N64_PHYSICS=56]="CONFIG_N64_PHYSICS",e[e.CONFIG_CTF_TEAMS=57]="CONFIG_CTF_TEAMS",e[e.CONFIG_COOP_RESPAWN_STRING=58]="CONFIG_COOP_RESPAWN_STRING",e[e.Story=54]="Story",e[e.AirAccel=59]="AirAccel",e[e.MaxClients=60]="MaxClients",e[e.MapChecksum=61]="MapChecksum",e[e.Models=62]="Models",e[e.Sounds=62+va]="Sounds",e[e.Images=e.Sounds+Cs]="Images",e[e.Lights=e.Images+Sa]="Lights",e[e.ShadowLights=e.Lights+_a]="ShadowLights",e[e.Items=e.ShadowLights+Ma]="Items",e[e.PlayerSkins=e.Items+wa]="PlayerSkins",e[e.General=e.PlayerSkins+Is]="General",e[e.WheelWeapons=e.General+Aa]="WheelWeapons",e[e.WheelAmmo=e.WheelWeapons+pa]="WheelAmmo",e[e.WheelPowerups=e.WheelAmmo+pa]="WheelPowerups",e[e.CdLoopCount=e.WheelPowerups+pa]="CdLoopCount",e[e.GameStyle=e.CdLoopCount+1]="GameStyle",e[e.MaxConfigStrings=e.GameStyle+1]="MaxConfigStrings",e))(j||{}),rd=j.MaxConfigStrings;function nd(e){return e>=5&&e<59?Un*(59-e):e>=j.General&&e<j.WheelWeapons?Un*(j.MaxConfigStrings-e):Un}var V0={};Kc(V0,{addReplayFrame:()=>K0,createReplaySession:()=>X0,deserializeReplay:()=>W0,serializeReplay:()=>G0});function G0(e){return JSON.stringify(e,null,2)}function W0(e){let t=JSON.parse(e);if(!t.metadata||!Array.isArray(t.frames))throw new Error("Invalid replay format: missing metadata or frames");return t}function X0(e,t){return{metadata:{map:e,date:new Date().toISOString(),version:"1.0",seed:t},frames:[]}}function K0(e,t,r,n){e.frames.push({serverFrame:r,cmd:t,timestamp:Date.now()-n})}var F=(e=>(e[e.bad=0]="bad",e[e.muzzleflash=1]="muzzleflash",e[e.muzzleflash2=2]="muzzleflash2",e[e.temp_entity=3]="temp_entity",e[e.layout=4]="layout",e[e.inventory=5]="inventory",e[e.nop=6]="nop",e[e.disconnect=7]="disconnect",e[e.reconnect=8]="reconnect",e[e.sound=9]="sound",e[e.print=10]="print",e[e.stufftext=11]="stufftext",e[e.serverdata=12]="serverdata",e[e.configstring=13]="configstring",e[e.spawnbaseline=14]="spawnbaseline",e[e.centerprint=15]="centerprint",e[e.download=16]="download",e[e.playerinfo=17]="playerinfo",e[e.packetentities=18]="packetentities",e[e.deltapacketentities=19]="deltapacketentities",e[e.frame=20]="frame",e[e.splitclient=21]="splitclient",e[e.configblast=22]="configblast",e[e.spawnbaselineblast=23]="spawnbaselineblast",e[e.level_restart=24]="level_restart",e[e.damage=25]="damage",e[e.locprint=26]="locprint",e[e.fog=27]="fog",e[e.waitingforplayers=28]="waitingforplayers",e[e.bot_chat=29]="bot_chat",e[e.poi=30]="poi",e[e.help_path=31]="help_path",e[e.muzzleflash3=32]="muzzleflash3",e[e.achievement=33]="achievement",e))(F||{});var I=(e=>(e[e.GUNSHOT=0]="GUNSHOT",e[e.BLOOD=1]="BLOOD",e[e.BLASTER=2]="BLASTER",e[e.RAILTRAIL=3]="RAILTRAIL",e[e.SHOTGUN=4]="SHOTGUN",e[e.EXPLOSION1=5]="EXPLOSION1",e[e.EXPLOSION2=6]="EXPLOSION2",e[e.ROCKET_EXPLOSION=7]="ROCKET_EXPLOSION",e[e.GRENADE_EXPLOSION=8]="GRENADE_EXPLOSION",e[e.SPARKS=9]="SPARKS",e[e.SPLASH=10]="SPLASH",e[e.BUBBLETRAIL=11]="BUBBLETRAIL",e[e.SCREEN_SPARKS=12]="SCREEN_SPARKS",e[e.SHIELD_SPARKS=13]="SHIELD_SPARKS",e[e.BULLET_SPARKS=14]="BULLET_SPARKS",e[e.LASER_SPARKS=15]="LASER_SPARKS",e[e.PARASITE_ATTACK=16]="PARASITE_ATTACK",e[e.ROCKET_EXPLOSION_WATER=17]="ROCKET_EXPLOSION_WATER",e[e.GRENADE_EXPLOSION_WATER=18]="GRENADE_EXPLOSION_WATER",e[e.MEDIC_CABLE_ATTACK=19]="MEDIC_CABLE_ATTACK",e[e.BFG_EXPLOSION=20]="BFG_EXPLOSION",e[e.BFG_BIGEXPLOSION=21]="BFG_BIGEXPLOSION",e[e.BOSSTPORT=22]="BOSSTPORT",e[e.BFG_LASER=23]="BFG_LASER",e[e.GRAPPLE_CABLE=24]="GRAPPLE_CABLE",e[e.WELDING_SPARKS=25]="WELDING_SPARKS",e[e.GREENBLOOD=26]="GREENBLOOD",e[e.BLUEHYPERBLASTER=27]="BLUEHYPERBLASTER",e[e.PLASMA_EXPLOSION=28]="PLASMA_EXPLOSION",e[e.TUNNEL_SPARKS=29]="TUNNEL_SPARKS",e[e.BLASTER2=30]="BLASTER2",e[e.RAILTRAIL2=31]="RAILTRAIL2",e[e.FLAME=32]="FLAME",e[e.LIGHTNING=33]="LIGHTNING",e[e.DEBUGTRAIL=34]="DEBUGTRAIL",e[e.PLAIN_EXPLOSION=35]="PLAIN_EXPLOSION",e[e.FLASHLIGHT=36]="FLASHLIGHT",e[e.FORCEWALL=37]="FORCEWALL",e[e.HEATBEAM=38]="HEATBEAM",e[e.MONSTER_HEATBEAM=39]="MONSTER_HEATBEAM",e[e.STEAM=40]="STEAM",e[e.BUBBLETRAIL2=41]="BUBBLETRAIL2",e[e.MOREBLOOD=42]="MOREBLOOD",e[e.HEATBEAM_SPARKS=43]="HEATBEAM_SPARKS",e[e.HEATBEAM_STEAM=44]="HEATBEAM_STEAM",e[e.CHAINFIST_SMOKE=45]="CHAINFIST_SMOKE",e[e.ELECTRIC_SPARKS=46]="ELECTRIC_SPARKS",e[e.TRACKER_EXPLOSION=47]="TRACKER_EXPLOSION",e[e.TELEPORT_EFFECT=48]="TELEPORT_EFFECT",e[e.DBALL_GOAL=49]="DBALL_GOAL",e[e.WIDOWBEAMOUT=50]="WIDOWBEAMOUT",e[e.NUKEBLAST=51]="NUKEBLAST",e[e.WIDOWSPLASH=52]="WIDOWSPLASH",e[e.EXPLOSION1_BIG=53]="EXPLOSION1_BIG",e[e.EXPLOSION1_NP=54]="EXPLOSION1_NP",e[e.FLECHETTE=55]="FLECHETTE",e[e.BLUEHYPERBLASTER_KEX=56]="BLUEHYPERBLASTER_KEX",e[e.BFG_ZAP=57]="BFG_ZAP",e[e.BERSERK_SLAM=58]="BERSERK_SLAM",e[e.GRAPPLE_CABLE_2=59]="GRAPPLE_CABLE_2",e[e.POWER_SPLASH=60]="POWER_SPLASH",e[e.LIGHTNING_BEAM=61]="LIGHTNING_BEAM",e[e.EXPLOSION1_NL=62]="EXPLOSION1_NL",e[e.EXPLOSION2_NL=63]="EXPLOSION2_NL",e))(I||{});var $0=12,Z0=9,Sb=Math.ceil($0*Z0/16),Y0=23,q0=2,wb=Math.ceil(Y0*q0/16);var j0={};Kc(j0,{U_ANGLE1:()=>ih,U_ANGLE2:()=>sh,U_ANGLE3:()=>oh,U_EFFECTS:()=>ch,U_EVENT:()=>fh,U_FRAME:()=>ah,U_MODEL:()=>J0,U_MODEL2:()=>mh,U_MODEL3:()=>ph,U_MODEL4:()=>gh,U_MOREBITS:()=>hh,U_NUMBER:()=>Q0,U_ORIGIN1:()=>th,U_ORIGIN2:()=>rh,U_ORIGIN3:()=>nh,U_REMOVE:()=>yh,U_RENDERFX:()=>dh,U_SKIN:()=>lh,U_SOLID:()=>uh,U_SOUND:()=>eh});var Q0=1,J0=2,eh=4,th=8,rh=16,nh=32,ih=64,sh=128,oh=256,ah=512,lh=1024,ch=2048,dh=4096,uh=8192,fh=16384,hh=32768,mh=1,ph=2,gh=4,yh=32768;var Wr=class{constructor(e){e instanceof Uint8Array?this.view=new DataView(e.buffer,e.byteOffset,e.byteLength):this.view=new DataView(e),this.offset=0,this.length=this.view.byteLength}getPosition(){return this.offset}getReadPosition(){return this.offset}getLength(){return this.length}getRemaining(){return this.length-this.offset}seek(e){if(e<0||e>this.length)throw new Error(`Seek out of bounds: ${e} (length: ${this.length})`);this.offset=e}setReadPosition(e){this.seek(e)}hasMore(){return this.offset<this.length}hasBytes(e){return this.offset+e<=this.length}readChar(){let e=this.view.getInt8(this.offset);return this.offset+=1,e}readByte(){let e=this.view.getUint8(this.offset);return this.offset+=1,e}readShort(){let e=this.view.getInt16(this.offset,!0);return this.offset+=2,e}readUShort(){let e=this.view.getUint16(this.offset,!0);return this.offset+=2,e}readLong(){let e=this.view.getInt32(this.offset,!0);return this.offset+=4,e}readULong(){let e=this.view.getUint32(this.offset,!0);return this.offset+=4,e}readFloat(){let e=this.view.getFloat32(this.offset,!0);return this.offset+=4,e}readString(){let e="";for(;this.offset<this.length;){let t=this.readChar();if(t===-1||t===0)break;e+=String.fromCharCode(t)}return e}readStringLine(){let e="";for(;this.offset<this.length;){let t=this.readChar();if(t===-1||t===0||t===10)break;e+=String.fromCharCode(t)}return e}readCoord(){return this.readShort()*(1/8)}readAngle(){return this.readChar()*(360/256)}readAngle16(){return this.readShort()*360/65536}readData(e){if(this.offset+e>this.length)throw new Error(`Read out of bounds: ${this.offset+e} (length: ${this.length})`);let t=new Uint8Array(this.view.buffer,this.view.byteOffset+this.offset,e);return this.offset+=e,new Uint8Array(t)}readPos(e){e.x=this.readCoord(),e.y=this.readCoord(),e.z=this.readCoord()}readDir(e){let t=this.readByte();if(t>=162){e.x=0,e.y=0,e.z=0;return}let r=Hr[t];e.x=r[0],e.y=r[1],e.z=r[2]}},Ea=class{constructor(e=1400){typeof e=="number"?(this.buffer=new Uint8Array(e),this.fixed=!1):(this.buffer=e,this.fixed=!0),this.view=new DataView(this.buffer.buffer,this.buffer.byteOffset,this.buffer.byteLength),this.offset=0}ensureSpace(e){if(this.offset+e>this.buffer.byteLength){if(this.fixed)throw new Error(`Buffer overflow: capacity ${this.buffer.byteLength}, needed ${this.offset+e}`);let t=Math.max(this.buffer.byteLength*2,this.offset+e),r=new Uint8Array(t);r.set(this.buffer),this.buffer=r,this.view=new DataView(this.buffer.buffer,this.buffer.byteOffset,this.buffer.byteLength)}}writeByte(e){this.ensureSpace(1),this.view.setUint8(this.offset,e),this.offset+=1}writeChar(e){this.ensureSpace(1),this.view.setInt8(this.offset,e),this.offset+=1}writeShort(e){this.ensureSpace(2),this.view.setInt16(this.offset,e,!0),this.offset+=2}writeLong(e){this.ensureSpace(4),this.view.setInt32(this.offset,e,!0),this.offset+=4}writeFloat(e){this.ensureSpace(4),this.view.setFloat32(this.offset,e,!0),this.offset+=4}writeString(e){let t=e.length;this.ensureSpace(t+1);for(let r=0;r<t;r++)this.view.setUint8(this.offset+r,e.charCodeAt(r));this.view.setUint8(this.offset+t,0),this.offset+=t+1}writeCoord(e){this.writeShort(Math.trunc(e*8))}writeAngle(e){this.writeByte(Math.trunc(e*256/360)&255)}writeAngle16(e){this.writeShort(Math.trunc(e*65536/360)&65535)}writePos(e){this.writeCoord(e.x),this.writeCoord(e.y),this.writeCoord(e.z)}writeDir(e){let t=-1,r=0;if(e.x===0&&e.y===0&&e.z===0){this.writeByte(0);return}for(let n=0;n<Hr.length;n++){let i=Hr[n],s=e.x*i[0]+e.y*i[1]+e.z*i[2];s>t&&(t=s,r=n)}this.writeByte(r)}getData(){return this.buffer.slice(0,this.offset)}getBuffer(){return this.buffer}getOffset(){return this.offset}reset(){this.offset=0}};var Vr=class me{constructor(){this.qport=0,this.incomingSequence=0,this.outgoingSequence=0,this.incomingAcknowledged=0,this.incomingReliableAcknowledged=!1,this.incomingReliableSequence=0,this.outgoingReliableSequence=0,this.reliableLength=0,this.fragmentSendOffset=0,this.fragmentBuffer=null,this.fragmentLength=0,this.fragmentReceived=0,this.lastReceived=0,this.lastSent=0,this.remoteAddress=null,this.reliableMessage=new Ea(me.MAX_RELIABLE_BUFFER);let t=Date.now();this.lastReceived=t,this.lastSent=t,this.qport=Math.floor(Math.random()*65536)}setup(t,r=null){this.qport=t,this.remoteAddress=r,this.reset()}reset(){this.incomingSequence=0,this.outgoingSequence=0,this.incomingAcknowledged=0,this.incomingReliableAcknowledged=!1,this.incomingReliableSequence=0,this.outgoingReliableSequence=0,this.reliableLength=0,this.reliableMessage.reset(),this.fragmentSendOffset=0,this.fragmentBuffer=null,this.fragmentLength=0,this.fragmentReceived=0,this.lastReceived=Date.now(),this.lastSent=Date.now()}transmit(t){this.outgoingSequence++,this.lastSent=Date.now();let r=0,n=!1,i=0;this.reliableLength>0&&(this.reliableLength>me.FRAGMENT_SIZE?(n=!0,this.fragmentSendOffset>=this.reliableLength&&(this.fragmentSendOffset=0),r=this.reliableLength-this.fragmentSendOffset,r>me.FRAGMENT_SIZE&&(r=me.FRAGMENT_SIZE),i=this.fragmentSendOffset,this.fragmentSendOffset+=r):r=this.reliableLength);let s=me.PACKET_HEADER,o=r>0?2+(n?8:0):0,a=t?t.length:0;s+o+r+a>me.MAX_MSGLEN&&(a=me.MAX_MSGLEN-s-o-r,a<0&&(a=0));let d=new ArrayBuffer(s+o+r+a),l=new DataView(d),c=new Uint8Array(d),f=this.outgoingSequence;r>0&&(f|=2147483648,(this.outgoingReliableSequence&1)!==0&&(f|=1073741824)),l.setUint32(0,f,!0);let u=this.incomingSequence;(this.incomingReliableSequence&1)!==0&&(u|=2147483648),l.setUint32(4,u,!0),l.setUint16(8,this.qport,!0);let h=s;if(r>0){let m=r;n&&(m|=32768),l.setUint16(h,m,!0),h+=2,n&&(l.setUint32(h,i,!0),h+=4,l.setUint32(h,this.reliableLength,!0),h+=4);let p=this.reliableMessage.getBuffer().subarray(i,i+r);c.set(p,h),h+=r}if(t&&a>0){let m=t.slice(0,a);c.set(m,h)}return c}process(t){if(t.length<me.PACKET_HEADER)return null;this.lastReceived=Date.now();let r=new DataView(t.buffer,t.byteOffset,t.byteLength),n=r.getUint32(0,!0),i=r.getUint32(4,!0),s=r.getUint16(8,!0);if(this.qport!==s)return null;let o=n&1073741823;if((o-this.incomingSequence|0)<=0)return null;this.incomingSequence=o;let a=i&2147483647,d=(i&2147483648)!==0;if(a>this.incomingAcknowledged&&(this.incomingAcknowledged=a),this.reliableLength>0){let m=d?1:0,g=this.outgoingReliableSequence&1;m!==g&&(this.reliableLength=0,this.reliableMessage.reset(),this.outgoingReliableSequence^=1,this.fragmentSendOffset=0)}let l=(n&2147483648)!==0,c=(n&1073741824)!==0?1:0,f=me.PACKET_HEADER,u=null;if(l){if(f+2>t.byteLength)return null;let m=r.getUint16(f,!0);f+=2;let g=(m&32768)!==0;m&=32767;let p=this.incomingReliableSequence&1;if(c===p)if(g){if(f+8>t.byteLength)return null;let y=r.getUint32(f,!0);f+=4;let v=r.getUint32(f,!0);if(f+=4,v>me.MAX_RELIABLE_BUFFER)return console.warn(`NetChan: received invalid fragment total ${v} > ${me.MAX_RELIABLE_BUFFER}`),null;if((!this.fragmentBuffer||this.fragmentBuffer.length!==v)&&(this.fragmentBuffer=new Uint8Array(v),this.fragmentLength=v,this.fragmentReceived=0),f+m>t.byteLength)return null;let b=t.subarray(f,f+m);y===this.fragmentReceived&&y+m<=v&&(this.fragmentBuffer.set(b,y),this.fragmentReceived+=m,this.fragmentReceived>=v&&(u=this.fragmentBuffer,this.incomingReliableSequence++,this.fragmentBuffer=null,this.fragmentLength=0,this.fragmentReceived=0))}else{if(this.incomingReliableSequence++,f+m>t.byteLength)return null;u=t.slice(f,f+m)}f+=m}let h=t.slice(f);if(u&&u.length>0){let m=u.length+h.length,g=new Uint8Array(m);return g.set(u,0),g.set(h,u.length),g}return h||new Uint8Array(0)}canSendReliable(){return this.reliableLength===0}writeReliableByte(t){if(this.reliableLength+1>me.MAX_RELIABLE_BUFFER)throw new Error("NetChan reliable buffer overflow");this.reliableMessage.writeByte(t),this.reliableLength++}writeReliableShort(t){if(this.reliableLength+2>me.MAX_RELIABLE_BUFFER)throw new Error("NetChan reliable buffer overflow");this.reliableMessage.writeShort(t),this.reliableLength+=2}writeReliableLong(t){if(this.reliableLength+4>me.MAX_RELIABLE_BUFFER)throw new Error("NetChan reliable buffer overflow");this.reliableMessage.writeLong(t),this.reliableLength+=4}writeReliableString(t){let r=t.length+1;if(this.reliableLength+r>me.MAX_RELIABLE_BUFFER)throw new Error("NetChan reliable buffer overflow");this.reliableMessage.writeString(t),this.reliableLength+=r}getReliableData(){return this.reliableLength===0?new Uint8Array(0):this.reliableMessage.getBuffer().subarray(0,this.reliableLength)}needsKeepalive(t){return t-this.lastSent>1e3}isTimedOut(t,r=3e4){return t-this.lastReceived>r}};Vr.MAX_MSGLEN=1400;Vr.FRAGMENT_SIZE=1024;Vr.PACKET_HEADER=10;Vr.HEADER_OVERHEAD=Vr.PACKET_HEADER+2;Vr.MAX_RELIABLE_BUFFER=262144;var id=(e=>(e[e.Bullets=0]="Bullets",e[e.Shells=1]="Shells",e[e.Rockets=2]="Rockets",e[e.Grenades=3]="Grenades",e[e.Cells=4]="Cells",e[e.Slugs=5]="Slugs",e[e.MagSlugs=6]="MagSlugs",e[e.Trap=7]="Trap",e[e.Flechettes=8]="Flechettes",e[e.Tesla=9]="Tesla",e[e.Disruptor=10]="Disruptor",e[e.Prox=11]="Prox",e[e.Nuke=12]="Nuke",e[e.Rounds=13]="Rounds",e))(id||{}),Ab=Object.keys(id).length/2;var Gn=32,st=(e=>(e[e.Auto=0]="Auto",e[e.Weapon=1]="Weapon",e[e.Voice=2]="Voice",e[e.Item=3]="Item",e[e.Body=4]="Body",e[e.Aux=5]="Aux",e[e.Footstep=6]="Footstep",e[e.Aux3=7]="Aux3",e[e.NoPhsAdd=8]="NoPhsAdd",e[e.Reliable=16]="Reliable",e[e.ForcePos=32]="ForcePos",e))(st||{}),La=-1,Wn=0,Ta=1,Ia=2,Rs=3,Dt=80,Ca=.003;function Bt(e){return e===Rs?e*.001:e*5e-4}function fr(e){let t=Bt(e);return t<=0?Number.POSITIVE_INFINITY:Dt+1/t}var Xn=class{constructor({name:t,defaultValue:r,description:n,flags:i=Ts.None,onChange:s}){this.modifiedCount=0;this.name=t,this.defaultValue=r,this.description=n,this.flags=i,this._value=r,this.onChange=s}get string(){return this._value}get number(){return Number(this._value)}get integer(){return Math.trunc(this.number)}get boolean(){return!!this.integer}set(t){if(this.flags&Ts.Latch){if(t===this._value){this.latched=void 0;return}if(this.latched===t)return;this.latched!==t&&(this.latched=t);return}this.apply(t)}reset(){this.latched=void 0,this.apply(this.defaultValue)}applyLatched(){if(this.latched===void 0)return!1;let t=this.latched;return this.latched=void 0,t===this._value?!1:(this.apply(t),!0)}apply(t){if(this._value===t)return;let r=this._value;this._value=t,this.modifiedCount+=1,this.onChange?.(this,r)}},Xr=class{constructor(){this.cvars=new Map}register(t){let r=this.cvars.get(t.name);if(r)return r;let n=t.onChange,i=(o,a)=>{n?.(o,a),this.onCvarChange?.(o.name,o.string)},s=new Xn({...t,onChange:i});return this.cvars.set(t.name,s),s}get(t){return this.cvars.get(t)}getCvar(t){return this.get(t)}setValue(t,r){let n=this.get(t);if(!n)throw new Error(`Unknown cvar: ${t}`);return n.set(r),n}setCvar(t,r){this.setValue(t,r)}resetAll(){for(let t of this.cvars.values())t.reset()}applyLatched(){let t=!1;for(let r of this.cvars.values())t=r.applyLatched()||t;return t}list(){return[...this.cvars.values()].sort((t,r)=>t.name.localeCompare(r.name))}listCvars(){return this.list().map(t=>({name:t.name,value:t.string,defaultValue:t.defaultValue,flags:t.flags,description:t.description}))}};var Kr=class{constructor(t,r,n={}){this.game=t;this.client=r;this.started=!1;this.paused_=!1;this.commands=new Ur;this.cvars=new Xr;this.stepSimulation=t=>{this.previousFrame=this.latestFrame,this.latestFrame=this.game.frame(t,this.latestCommand)};this.renderClient=t=>{this.client&&(this.latestCommand=this.client.render({...t,previous:this.previousFrame,latest:this.latestFrame}))};let i=n.loop?.now?.()??Date.now();this.startTimeMs=n.startTimeMs??n.loop?.startTimeMs??i,this.loop=new ur({simulate:this.stepSimulation,render:this.renderClient},{...n.loop,startTimeMs:this.startTimeMs}),this.commands.registerAutocompleteProvider(()=>this.cvars.list().map(s=>s.name))}start(){if(!this.started){try{this.latestFrame=this.game.init(this.startTimeMs)??this.latestFrame,this.client?.init(this.latestFrame)}catch(t){throw this.game.shutdown(),this.client?.shutdown(),t}this.started=!0,this.paused_=!1,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,this.paused_=!1)}setPaused(t){this.paused_=t,t?this.loop.stop():this.started&&this.loop.start()}get paused(){return this.paused_}pump(t){this.loop.pump(t)}getLatestFrame(){return this.latestFrame}isRunning(){return this.loop.isRunning()}};function xh(e){if(e<0||e>=j.MaxConfigStrings)throw new RangeError(`Configstring index ${e} is out of range (0-${j.MaxConfigStrings-1})`)}function sd(e,t){let r=nd(e);if(t.length>r)throw new RangeError(`Configstring ${e} exceeds maximum length (${t.length} > ${r}); limit is ${Un} chars per slot`)}var $r=class{constructor(){this.values=new Map;this.modelCursor=j.Models;this.soundCursor=j.Sounds;this.imageCursor=j.Images;this.lightCursor=j.Lights;this.shadowLightCursor=j.ShadowLights;this.itemCursor=j.Items;this.playerSkinCursor=j.PlayerSkins;this.generalCursor=j.General}set(t,r){return xh(t),sd(t,r),this.values.set(t,r),t}get(t){return this.values.get(t)}getName(t){return this.get(t)}getAll(){let t=new Array(rd).fill("");for(let[r,n]of this.values.entries())t[r]=n;return t}modelIndex(t){return this.register(t,j.Models,va,"modelCursor")}soundIndex(t){return this.register(t,j.Sounds,Cs,"soundCursor")}findSoundIndex(t){for(let r=j.Sounds;r<j.Sounds+Cs;r+=1)if(this.values.get(r)===t)return r}imageIndex(t){return this.register(t,j.Images,Sa,"imageCursor")}lightIndex(t){return this.register(t,j.Lights,_a,"lightCursor")}shadowLightIndex(t){return this.register(t,j.ShadowLights,Ma,"shadowLightCursor")}itemIndex(t){return this.register(t,j.Items,wa,"itemCursor")}playerSkinIndex(t){return this.register(t,j.PlayerSkins,Is,"playerSkinCursor")}generalIndex(t){return this.register(t,j.General,Aa,"generalCursor")}register(t,r,n,i){for(let a=r;a<r+n;a+=1)if(this.values.get(a)===t)return a;let s=this[i],o=r+n;if(s>=o)throw new RangeError(`Out of configstring slots for range starting at ${r}`);return sd(s,t),this.values.set(s,t),this[i]=s+1,s}};var Zr=class{constructor(t){this.registry=t.registry,this.system=t.system,this.music=t.music,this.client=t.client}soundindex(t){return this.registry.registerName(t)}sound(t,r,n,i,s,o){this.system.play({entity:t,channel:r,soundIndex:n,volume:i,attenuation:s,timeOffsetMs:o}),this.triggerSubtitle(n)}positioned_sound(t,r,n,i){this.system.positionedSound(t,r,n,i),this.triggerSubtitle(r)}loop_sound(t,r,n,i,s){let o=this.system.play({entity:t,channel:r,soundIndex:n,volume:i,attenuation:s,looping:!0});return this.triggerSubtitle(n),o}stop_entity_sounds(t){this.system.stopEntitySounds(t)}setPlaybackRate(t){this.system.setPlaybackRate(t)}set_listener(t){this.system.setListener(t)}play_music(t,r=!0){return this.music?this.music.play(t,{loop:r}):Promise.resolve()}play_track(t,r=!0){return this.music?this.music.playTrack(t):Promise.resolve()}pause_music(){this.music?.pause()}resume_music(){return this.music?.resume()??Promise.resolve()}stop_music(){this.music?.stop()}set_music_volume(t){this.music?.setVolume(t)}play_ambient(t,r,n){this.system.ambientSound(t,r,n),this.triggerSubtitle(r)}play_channel(t){this.system.play({...t}),this.triggerSubtitle(t.soundIndex)}triggerSubtitle(t){if(!this.client)return;let r=this.registry.getName(t);if(!r)return;let n=r.match(/\[(.*?)\]/);n&&this.client.showSubtitle(n[1],r)}};var Kn=class{constructor(t,r){this.engine=t;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(t){this.host.pump(t)}getLatestFrame(){return this.host.getLatestFrame()}isRunning(){return this.started&&this.host.isRunning()}};function od(e,t,r,n,i){let s=new Zr({...n,client:r}),o=new Kr(t,r,i);return{runtime:new Kn(e,o),audio:s}}var bh="PACK";function _h(e,t,r){let n=[];for(let i=0;i<r;i+=1){let s=e.getUint8(t+i);if(s===0)break;n.push(s)}return String.fromCharCode(...n)}function de(e){return e.replace(/\\/g,"/").replace(/^\/+/,"").toLowerCase()}function vh(){let e=new Uint32Array(256);for(let t=0;t<256;t+=1){let r=t;for(let n=0;n<8;n+=1)r=(r&1)!==0?3988292384^r>>>1:r>>>1;e[t]=r>>>0}return e}var Sh=vh();function ad(e){let t=4294967295;for(let r=0;r<e.length;r+=1){let n=e[r];t=Sh[(t^n)&255]^t>>>8}return(t^4294967295)>>>0}var Ve=class extends Error{},Yr=class e{constructor(t,r,n,i){this.name=t;this.buffer=r;this.entries=new Map(n.map(s=>[s.name,s])),this.checksum=i,this.size=r.byteLength}static fromArrayBuffer(t,r){let n=new DataView(r);if(r.byteLength<12)throw new Ve("PAK buffer too small to contain header");let i=String.fromCharCode(n.getUint8(0),n.getUint8(1),n.getUint8(2),n.getUint8(3));if(i!==bh)throw new Ve(`Invalid PAK header magic: ${i}`);let s=n.getInt32(4,!0),o=n.getInt32(8,!0);if(s<12)throw new Ve(`Invalid directory offset: ${s}`);if(o<=0||o%64!==0)throw new Ve(`Invalid directory length: ${o}`);if(s+o>r.byteLength)throw new Ve("Directory exceeds buffer length");let d=o/64,l=[],c=new Map;for(let f=0;f<d;f+=1){let u=s+f*64,h=_h(n,u,56),m=de(h),g=n.getInt32(u+56,!0),p=n.getInt32(u+60,!0);if(g<0||p<0||g+p>r.byteLength)throw new Ve(`Invalid entry bounds for ${h||"<unnamed>"} (offset=${g}, length=${p})`);if(!m)throw new Ve(`Entry ${f} has an empty name`);let y={name:m,offset:g,length:p};c.set(m,y)}return l.push(...c.values()),new e(t,r,l,ad(new Uint8Array(r)))}getEntry(t){return this.entries.get(de(t))}listEntries(){return Array.from(this.entries.values())}readFile(t){let r=this.getEntry(t);if(!r)throw new Ve(`File not found in PAK: ${t}`);return new Uint8Array(this.buffer,r.offset,r.length)}validate(){return{checksum:this.checksum,entries:this.listEntries()}}};function ld(e){return ad(new Uint8Array(e))}var Fs=class{constructor(t=[]){this.mounts=[];this.files=new Map;t.forEach(r=>this.mountPak(r))}mountPak(t,r=0){let n=this.mounts.findIndex(i=>i.pak===t);n!==-1&&this.mounts.splice(n,1),this.mounts.push({pak:t,priority:r}),this.mounts.sort((i,s)=>s.priority-i.priority);for(let i of t.listEntries()){let s=de(i.name),o={archive:t,entry:i,priority:r};this.files.has(s)||this.files.set(s,[]);let a=this.files.get(s),d=a.findIndex(l=>l.archive===t);d!==-1&&a.splice(d,1),a.unshift(o),a.sort((l,c)=>c.priority-l.priority)}}setPriority(t,r){this.mountPak(t,r)}getPaks(){return[...this.mounts].sort((t,r)=>t.priority-r.priority)}get mountedPaks(){return this.mounts.map(t=>t.pak)}hasFile(t){return this.files.has(de(t))}getSource(t){let r=this.files.get(de(t));if(!(!r||r.length===0))return r[0]}stat(t){let r=this.getSource(t);if(r)return{path:r.entry.name,size:r.entry.length,sourcePak:r.archive.name}}getFileMetadata(t){let r=this.getSource(t);if(r)return{path:r.entry.name,size:r.entry.length,sourcePak:r.archive.name,offset:r.entry.offset}}async readFile(t){let r=this.getSource(t);if(!r)throw new Error(`File not found in VFS: ${t}`);return r.archive.readFile(t)}async readBinaryFile(t){return this.readFile(t)}streamFile(t,r=1024*1024){let n=this.getSource(t);if(!n)throw new Error(`File not found in VFS: ${t}`);let{archive:i,entry:s}=n,o=i.readFile(t),a=0,d=o.length;return new ReadableStream({pull(l){if(a>=d){l.close();return}let c=Math.min(a+r,d),f=o.slice(a,c);a=c,l.enqueue(f)}})}async readTextFile(t){let r=await this.readFile(t);return new TextDecoder("utf-8").decode(r)}list(t=""){let r=de(t).replace(/\/+$|^\//g,""),n=[],i=new Set,s=r?`${r}/`:"";for(let[o,a]of this.files){let d=a[0];if(r&&!d.entry.name.startsWith(s))continue;let l=r?d.entry.name.slice(s.length):d.entry.name,c=l.indexOf("/");c===-1?n.push({path:d.entry.name,size:d.entry.length,sourcePak:d.archive.name}):i.add(l.slice(0,c))}return n.sort((o,a)=>o.path.localeCompare(a.path)),{files:n,directories:[...i].sort()}}async listDirectory(t){return this.list(t).files}findByExtension(t){let r=t.startsWith(".")?t.toLowerCase():`.${t.toLowerCase()}`,n=[];for(let[i,s]of this.files){let o=s[0];o.entry.name.toLowerCase().endsWith(r)&&n.push({path:o.entry.name,size:o.entry.length,sourcePak:o.archive.name})}return n.sort((i,s)=>i.path.localeCompare(s.path))}listByExtension(t){let r=new Set(t.map(i=>i.startsWith(".")?i.toLowerCase():`.${i.toLowerCase()}`)),n=[];for(let[i,s]of this.files){let o=s[0],a=o.entry.name.toLowerCase();for(let d of r)if(a.endsWith(d)){n.push({path:o.entry.name,size:o.entry.length,sourcePak:o.archive.name});break}}return n.sort((i,s)=>i.path.localeCompare(s.path))}searchFiles(t){let r=[];for(let[n,i]of this.files){let s=i[0];t.test(s.entry.name)&&r.push({path:s.entry.name,size:s.entry.length,sourcePak:s.archive.name})}return r.sort((n,i)=>n.path.localeCompare(i.path))}getPakInfo(){return this.mounts.map(t=>({filename:t.pak.name,entryCount:t.pak.listEntries().length,totalSize:t.pak.size}))}getDirectoryTree(){let t={name:"",path:"",files:[],directories:[]},r=new Map;r.set("",t);let n=Array.from(this.files.values()).map(i=>{let s=i[0];return{path:s.entry.name,size:s.entry.length,sourcePak:s.archive.name}}).sort((i,s)=>i.path.localeCompare(s.path));for(let i of n){let s=i.path.split("/"),o=s.pop(),a="",d=t;for(let l of s){let c=a;a=a?`${a}/${l}`:l;let f=r.get(a);f||(f={name:l,path:a,files:[],directories:[]},d.directories.push(f),r.set(a,f)),d=f}d.files.push(i)}return t}};var Ra=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"}]),hr=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"}},ks=class{constructor(t=Ra){this.known=new Map;t.forEach(r=>this.known.set(this.normalizePakName(r.name),r))}validateArchive(t,r){let n=this.normalizePakName(r??("name"in t?t.name:"unknown")),i=t.checksum,s="size"in t?t.size:void 0,o=this.known.get(n);return o?o.checksum!==i?{name:n,checksum:i,expectedChecksum:o.checksum,status:"mismatch",size:s,description:o.description}:{name:n,checksum:i,expectedChecksum:o.checksum,status:"valid",size:s,description:o.description}:{name:n,checksum:i,status:"unknown",size:s}}assertValid(t,r){let n=this.validateArchive(t,r);if(n.status==="mismatch")throw new hr(n);return n}normalizePakName(t){let r=de(t),n=r.split("/"),i=n.pop()??r,s=n.pop();return s?`${i}@${s}`:i}};var Ot=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 wh(e,t){if(typeof e.arrayBuffer=="function"){let r=await e.arrayBuffer();return t?.({file:"blob",loadedBytes:r.byteLength,totalBytes:r.byteLength,state:"reading"}),r}if(typeof FileReader<"u")return new Promise((r,n)=>{let i=new FileReader;i.onerror=()=>n(i.error??new Error("Unknown FileReader error")),i.onprogress=s=>{t?.({file:"blob",loadedBytes:s.loaded,totalBytes:s.total||e.size,state:"reading"})},i.onload=()=>{let s=i.result;s instanceof ArrayBuffer?r(s):n(new Error("Unexpected FileReader result"))},i.readAsArrayBuffer(e)});if(typeof Response<"u"){let r=await new Response(e).arrayBuffer();return t?.({file:"blob",loadedBytes:r.byteLength,totalBytes:r.byteLength,state:"reading"}),r}if(typeof e.stream=="function"){let r=e.stream().getReader(),n=[],i=0;for(;;){let{done:a,value:d}=await r.read();if(a)break;if(!d)continue;let l=d;n.push(l),i+=l.byteLength,t?.({file:"blob",loadedBytes:i,totalBytes:e.size,state:"reading"})}let s=new Uint8Array(i),o=0;for(let a of n)s.set(a,o),o+=a.byteLength;return s.buffer}throw new Ot("blob",new Error("Unsupported Blob type"))}async function Ah(e,t){if(e.data instanceof ArrayBuffer)return t?.({file:e.name,loadedBytes:e.data.byteLength,totalBytes:e.data.byteLength,state:"reading"}),e.data;if(e.data instanceof Blob){let n=e.data.size;return wh(e.data,i=>t?.({...i,file:e.name,totalBytes:n}))}let r=e.data.buffer.slice(e.data.byteOffset,e.data.byteOffset+e.data.byteLength);return t?.({file:e.name,loadedBytes:r.byteLength,totalBytes:r.byteLength,state:"reading"}),r}async function zs(e,t,r){let n=typeof r=="function"?{onProgress:r}:r??{},i=n.persistIndexes??!!n.pakIndexStore,s=n.enforceValidation??!!n.validator,o=n.allowUnknownPaks??!0,a=n.stopOnError??!1,d=[];for(let l of t)try{let c=await Ah(l,n.onProgress),f=Yr.fromArrayBuffer(l.name,c),u=n.validator?.validateArchive(f);if(u){n.onValidationResult?.(u);let h=u.status==="mismatch",m=u.status==="unknown";if(h&&s||m&&!o){let g=new hr(u);if(n.onError?.(l.name,g),a)throw new Ot(l.name,g);d.push({archive:f,mounted:!1,validation:u});continue}}if(e.mountPak(f),i&&n.pakIndexStore)try{await n.pakIndexStore.persist(f)}catch(h){if(n.onError?.(l.name,h),a)throw new Ot(l.name,h)}n.onProgress?.({file:l.name,loadedBytes:c.byteLength,totalBytes:c.byteLength,state:"parsed"}),d.push({archive:f,mounted:!0,validation:u})}catch(c){if(n.onProgress?.({file:l.name,loadedBytes:0,totalBytes:0,state:"error"}),n.onError?.(l.name,c),a)throw new Ot(l.name,c)}return d}var Nt=class{constructor(t){this.capacity=t;this.map=new Map;if(t<=0)throw new RangeError("LRU cache capacity must be greater than zero")}get size(){return this.map.size}has(t){return this.map.has(t)}get(t){let r=this.map.get(t);if(r!==void 0)return this.map.delete(t),this.map.set(t,r),r}set(t,r){if(this.map.has(t)&&this.map.delete(t),this.map.set(t,r),this.map.size>this.capacity){let n=this.map.keys().next();n.done||this.map.delete(n.value)}}delete(t){return this.map.delete(t)}clear(){this.map.clear()}entries(){return Array.from(this.map.entries()).reverse().map(([t,r])=>({key:t,value:r}))}};function Mh(e){return Array.isArray(e)?e:Array.from(e)}function Fa(e){return Mh(e).map(t=>({name:t.name,data:t}))}async function cd(e,t,r){let n=Fa(t);return zs(e,n,r??{})}function dd(e,t){let r=i=>{i.preventDefault(),i.dataTransfer?.dropEffect&&(i.dataTransfer.dropEffect="copy")},n=i=>{i.preventDefault();let s=i.dataTransfer?.files;s&&s.length>0&&t(Array.from(s))};return e.addEventListener("dragover",r),e.addEventListener("drop",n),()=>{e.removeEventListener("dragover",r),e.removeEventListener("drop",n)}}function ud(e,t){let r=n=>{let i=n.target;!i||!i.files||i.files.length===0||(t(i.files),i.value="")};return e.addEventListener("change",r),()=>e.removeEventListener("change",r)}var Eh="IBSP",Lh=38,hd=19,Th=8+hd*8;var Q=class extends Error{},qr=class{constructor(t){this.vfs=t}async load(t){let r=await this.vfs.readFile(t),n=new Uint8Array(r.byteLength);return n.set(r),$n(n.buffer)}};function $n(e){if(e.byteLength<Th)throw new Q("BSP too small to contain header");let t=new DataView(e),r=String.fromCharCode(t.getUint8(0),t.getUint8(1),t.getUint8(2),t.getUint8(3));if(r!==Eh)throw new Q(`Invalid BSP magic ${r}`);let n=t.getInt32(4,!0);if(n!==Lh)throw new Q(`Unsupported BSP version ${n}`);let i=new Map;for(let S=0;S<hd;S+=1){let M=t.getInt32(8+S*8,!0),L=t.getInt32(12+S*8,!0);if(M<0||L<0||M+L>e.byteLength)throw new Q(`Invalid lump bounds for index ${S}`);i.set(S,{offset:M,length:L})}let s={version:n,lumps:i},o=Ch(e,i.get(0)),a=Fh(e,i.get(1)),d=kh(e,i.get(2)),l=zh(e,i.get(4)),c=Ph(e,i.get(5)),f=Dh(e,i.get(6)),u=new Uint8Array(e,i.get(7).offset,i.get(7).length),h=Xh(f,i.get(7)),m=Bh(e,i.get(8)),g=Oh(e,i.get(11)),p=Nh(e,i.get(12)),y=Uh(e,i.get(13)),v=Hh(e,i.get(14)),b=Vh(e,i.get(15)),x=Gh(e,i.get(9),i.get(10),m),_=Wh(e,i.get(3));return{header:s,entities:o,planes:a,vertices:d,nodes:l,texInfo:c,faces:f,lightMaps:u,lightMapInfo:h,leafs:m,leafLists:x,edges:g,surfEdges:p,models:y,brushes:v,brushSides:b,visibility:_,pickEntity(S){let M=null,L=1/0;for(let w of o.entities){let T=w.properties.model;if(!T||!T.startsWith("*"))continue;let k=parseInt(T.substring(1),10);if(isNaN(k)||k<0||k>=y.length)continue;let U=y[k],C=Ih(S.origin,S.direction,U.mins,U.maxs);C!==null&&C<L&&(L=C,M={entity:w,model:U,distance:C})}return M}}}function Ih(e,t,r,n){let i=0,s=1/0;for(let o=0;o<3;o++)if(Math.abs(t[o])<1e-8){if(e[o]<r[o]||e[o]>n[o])return null}else{let a=1/t[o],d=(r[o]-e[o])*a,l=(n[o]-e[o])*a;if(d>l){let c=d;d=l,l=c}if(i=Math.max(i,d),s=Math.min(s,l),i>s)return null}return i}function Ch(e,t){let r=new TextDecoder().decode(new Uint8Array(e,t.offset,t.length)),n=Rh(r),i=n.find(s=>s.classname==="worldspawn");return{raw:r,entities:n,worldspawn:i,getUniqueClassnames(){let s=new Set;for(let o of n)o.classname&&s.add(o.classname);return Array.from(s).sort()}}}function Rh(e){let t=[],r=/\{([^}]*)\}/gms,n;for(;(n=r.exec(e))!==null;){let i=n[1],s={},o=/"([^\"]*)"\s+"([^\"]*)"/g,a;for(;(a=o.exec(i))!==null;)s[a[1]]=a[2];t.push({classname:s.classname,properties:s})}return t}function Fh(e,t){let r=new DataView(e,t.offset,t.length),n=t.length/20;if(n%1!==0)throw new Q("Plane lump has invalid length");let i=[];for(let s=0;s<n;s+=1){let o=[r.getFloat32(s*20,!0),r.getFloat32(s*20+4,!0),r.getFloat32(s*20+8,!0)],a=r.getFloat32(s*20+12,!0),d=r.getInt32(s*20+16,!0);i.push({normal:o,dist:a,type:d})}return i}function kh(e,t){let r=new DataView(e,t.offset,t.length),n=t.length/12;if(n%1!==0)throw new Q("Vertex lump has invalid length");let i=[];for(let s=0;s<n;s+=1)i.push([r.getFloat32(s*12,!0),r.getFloat32(s*12+4,!0),r.getFloat32(s*12+8,!0)]);return i}function zh(e,t){let r=new DataView(e,t.offset,t.length),n=28,i=t.length/n;if(i%1!==0)throw new Q("Node lump has invalid length");let s=[];for(let o=0;o<i;o+=1){let a=o*n,d=r.getInt32(a,!0),l=[r.getInt32(a+4,!0),r.getInt32(a+8,!0)],c=[r.getInt16(a+12,!0),r.getInt16(a+14,!0),r.getInt16(a+16,!0)],f=[r.getInt16(a+18,!0),r.getInt16(a+20,!0),r.getInt16(a+22,!0)],u=r.getUint16(a+24,!0),h=r.getUint16(a+26,!0);s.push({planeIndex:d,children:l,mins:c,maxs:f,firstFace:u,numFaces:h})}return s}function Ph(e,t){let r=new DataView(e,t.offset,t.length),n=76,i=t.length/n;if(i%1!==0)throw new Q("TexInfo lump has invalid length");let s=[];for(let o=0;o<i;o+=1){let a=o*n,d=[r.getFloat32(a,!0),r.getFloat32(a+4,!0),r.getFloat32(a+8,!0)],l=r.getFloat32(a+12,!0),c=[r.getFloat32(a+16,!0),r.getFloat32(a+20,!0),r.getFloat32(a+24,!0)],f=r.getFloat32(a+28,!0),u=r.getInt32(a+32,!0),h=r.getInt32(a+36,!0),m=new Uint8Array(e,t.offset+a+40,32),g=new TextDecoder("utf-8").decode(m).replace(/\0.*$/,""),p=r.getInt32(a+72,!0);s.push({s:d,sOffset:l,t:c,tOffset:f,flags:u,value:h,texture:g,nextTexInfo:p})}return s}function Dh(e,t){let r=new DataView(e,t.offset,t.length),n=20,i=t.length/n;if(i%1!==0)throw new Q("Face lump has invalid length");let s=[];for(let o=0;o<i;o+=1){let a=o*n,d=r.getUint16(a,!0),l=r.getInt16(a+2,!0),c=r.getInt32(a+4,!0),f=r.getInt16(a+8,!0),u=r.getInt16(a+10,!0),h=[r.getUint8(a+12),r.getUint8(a+13),r.getUint8(a+14),r.getUint8(a+15)],m=r.getInt32(a+16,!0);s.push({planeIndex:d,side:l,firstEdge:c,numEdges:f,texInfo:u,styles:h,lightOffset:m})}return s}function Bh(e,t){let r=new DataView(e,t.offset,t.length),n=28,i=t.length/n;if(i%1!==0)throw new Q("Leaf lump has invalid length");let s=[];for(let o=0;o<i;o+=1){let a=o*n,d=r.getInt32(a,!0),l=r.getInt16(a+4,!0),c=r.getInt16(a+6,!0),f=[r.getInt16(a+8,!0),r.getInt16(a+10,!0),r.getInt16(a+12,!0)],u=[r.getInt16(a+14,!0),r.getInt16(a+16,!0),r.getInt16(a+18,!0)],h=r.getUint16(a+20,!0),m=r.getUint16(a+22,!0),g=r.getUint16(a+24,!0),p=r.getUint16(a+26,!0);s.push({contents:d,cluster:l,area:c,mins:f,maxs:u,firstLeafFace:h,numLeafFaces:m,firstLeafBrush:g,numLeafBrushes:p})}return s}function Oh(e,t){let r=new DataView(e,t.offset,t.length),n=4,i=t.length/n;if(i%1!==0)throw new Q("Edge lump has invalid length");let s=[];for(let o=0;o<i;o+=1){let a=o*n;s.push({vertices:[r.getUint16(a,!0),r.getUint16(a+2,!0)]})}return s}function Nh(e,t){let r=t.length/4;if(r%1!==0)throw new Q("SurfEdge lump has invalid length");let n=new DataView(e,t.offset,t.length),i=new Int32Array(r);for(let s=0;s<r;s+=1)i[s]=n.getInt32(s*4,!0);return i}function Uh(e,t){let r=new DataView(e,t.offset,t.length),n=48;if(t.length%n!==0)throw new Q("Model lump has invalid length");let i=t.length/n,s=[];for(let o=0;o<i;o+=1){let a=o*n,d=[r.getFloat32(a,!0),r.getFloat32(a+4,!0),r.getFloat32(a+8,!0)],l=[r.getFloat32(a+12,!0),r.getFloat32(a+16,!0),r.getFloat32(a+20,!0)],c=[r.getFloat32(a+24,!0),r.getFloat32(a+28,!0),r.getFloat32(a+32,!0)],f=r.getInt32(a+36,!0),u=r.getInt32(a+40,!0),h=r.getInt32(a+44,!0);s.push({mins:d,maxs:l,origin:c,headNode:f,firstFace:u,numFaces:h})}return s}function Hh(e,t){let r=new DataView(e,t.offset,t.length),n=12,i=t.length/n;if(i%1!==0)throw new Q("Brush lump has invalid length");let s=[];for(let o=0;o<i;o+=1){let a=o*n;s.push({firstSide:r.getInt32(a,!0),numSides:r.getInt32(a+4,!0),contents:r.getInt32(a+8,!0)})}return s}function Vh(e,t){let r=new DataView(e,t.offset,t.length),n=4,i=t.length/n;if(i%1!==0)throw new Q("Brush side lump has invalid length");let s=[];for(let o=0;o<i;o+=1){let a=o*n;s.push({planeIndex:r.getUint16(a,!0),texInfo:r.getInt16(a+2,!0)})}return s}function Gh(e,t,r,n){let i=[],s=[],o=t.length/2,a=r.length/2,d=new DataView(e,t.offset,t.length),l=new DataView(e,r.offset,r.length);for(let c of n){if(c.firstLeafFace+c.numLeafFaces>o)throw new Q("Leaf faces reference data past lump bounds");if(c.firstLeafBrush+c.numLeafBrushes>a)throw new Q("Leaf brushes reference data past lump bounds");let f=[];for(let h=0;h<c.numLeafFaces;h+=1)f.push(d.getUint16((c.firstLeafFace+h)*2,!0));let u=[];for(let h=0;h<c.numLeafBrushes;h+=1)u.push(l.getUint16((c.firstLeafBrush+h)*2,!0));i.push(f),s.push(u)}return{leafFaces:i,leafBrushes:s}}function Wh(e,t){if(t.length===0)return;if(t.length<4)throw new Q("Visibility lump too small");let r=new DataView(e,t.offset,t.length),n=r.getInt32(0,!0),i=4+n*8;if(n<0||i>t.length)throw new Q("Visibility lump truncated");let s=4,o=[];for(let a=0;a<n;a+=1){let d=r.getInt32(s,!0),l=r.getInt32(s+4,!0);s+=8;let c=t.offset+d,f=t.offset+l,u=t.offset+t.length;if(d<0||l<0||c>=u||f>=u)throw new Q("Visibility offsets out of range");o.push({pvs:fd(e,c,n,t),phs:fd(e,f,n,t)})}return{numClusters:n,clusters:o}}function fd(e,t,r,n){let i=Math.ceil(r/8),s=new Uint8Array(i),o=new Uint8Array(e),a=t,d=0,l=n.offset+n.length;for(;d<i;){if(a>=l)throw new Q("Visibility data truncated");let c=o[a++];if(c!==0){s[d++]=c;continue}if(a>=l)throw new Q("Visibility run exceeds lump bounds");let f=o[a++];for(let u=0;u<f&&d<i;u+=1)s[d++]=0}return s}function Xh(e,t){return e.map(r=>{if(!(r.lightOffset<0))return{offset:r.lightOffset,length:Math.max(0,t.length-r.lightOffset)}})}function Ps(e,t,r){if(e.lightOffset<0||e.lightOffset>=t.byteLength)return;let n=t.byteLength-e.lightOffset,i=Math.min(r?.length??n,n);if(!(i<=0))return t.subarray(e.lightOffset,e.lightOffset+i)}var Kh=844121161,$h=8,md=68,Zh=[{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}],pe=class extends Error{},jr=class{constructor(t){this.vfs=t;this.cache=new Map}async load(t){if(this.cache.has(t))return this.cache.get(t);let r=await this.vfs.readFile(t),n=new Uint8Array(r.byteLength);n.set(r);let i=ka(n.buffer);return this.cache.set(t,i),i}get(t){return this.cache.get(t)}};function pd(e,t,r){let n=[];for(let i=0;i<r;i+=1){let s=e.getUint8(t+i);if(s===0)break;n.push(s)}return String.fromCharCode(...n)}function Zn(e,t,r,n){if(r!==0&&(t<md||t+r>e.byteLength))throw new pe(`${n} section is out of bounds`)}function Yh(e){if(e.byteLength<md)throw new pe("MD2 buffer too small to contain header");let t=new DataView(e),r=t.getInt32(0,!0),n=t.getInt32(4,!0);if(r!==Kh)throw new pe(`Invalid MD2 ident: ${r}`);if(n!==$h)throw new pe(`Unsupported MD2 version: ${n}`);let i={ident:r,version:n,skinWidth:t.getInt32(8,!0),skinHeight:t.getInt32(12,!0),frameSize:t.getInt32(16,!0),numSkins:t.getInt32(20,!0),numVertices:t.getInt32(24,!0),numTexCoords:t.getInt32(28,!0),numTriangles:t.getInt32(32,!0),numGlCommands:t.getInt32(36,!0),numFrames:t.getInt32(40,!0),offsetSkins:t.getInt32(44,!0),offsetTexCoords:t.getInt32(48,!0),offsetTriangles:t.getInt32(52,!0),offsetFrames:t.getInt32(56,!0),offsetGlCommands:t.getInt32(60,!0),offsetEnd:t.getInt32(64,!0),magic:r},s=40+i.numVertices*4;if(i.frameSize!==s)throw new pe(`Unexpected frame size ${i.frameSize}, expected ${s}`);if(i.offsetEnd>e.byteLength)throw new pe("MD2 offset_end exceeds buffer length");return i}function qh(e,t){let r=t.numSkins*64;Zn(e,t.offsetSkins,r,"skins");let n=new DataView(e,t.offsetSkins,r),i=[];for(let s=0;s<t.numSkins;s+=1)i.push({name:pd(n,s*64,64)});return i}function jh(e,t){let r=t.numTexCoords*4;Zn(e,t.offsetTexCoords,r,"texcoords");let n=new DataView(e,t.offsetTexCoords,r),i=[];for(let s=0;s<t.numTexCoords;s+=1){let o=s*4;i.push({s:n.getInt16(o,!0),t:n.getInt16(o+2,!0)})}return i}function Qh(e,t){let r=t.numTriangles*12;Zn(e,t.offsetTriangles,r,"triangles");let n=new DataView(e,t.offsetTriangles,r),i=[];for(let s=0;s<t.numTriangles;s+=1){let o=s*12,a=[n.getUint16(o,!0),n.getUint16(o+2,!0),n.getUint16(o+4,!0)],d=[n.getUint16(o+6,!0),n.getUint16(o+8,!0),n.getUint16(o+10,!0)];if(a.some(l=>l>=t.numVertices)||d.some(l=>l>=t.numTexCoords))throw new pe("Triangle references out of range vertex or texcoord");i.push({vertexIndices:a,texCoordIndices:d})}return i}function Jh(e,t){let r=t.numFrames*t.frameSize;Zn(e,t.offsetFrames,r,"frames");let n=[];for(let i=0;i<t.numFrames;i+=1){let s=t.offsetFrames+i*t.frameSize,o=new DataView(e,s,t.frameSize),a={x:o.getFloat32(0,!0),y:o.getFloat32(4,!0),z:o.getFloat32(8,!0)},d={x:o.getFloat32(12,!0),y:o.getFloat32(16,!0),z:o.getFloat32(20,!0)},l=pd(o,24,16),c=[],f=1/0,u=1/0,h=1/0,m=-1/0,g=-1/0,p=-1/0;for(let y=0;y<t.numVertices;y+=1){let v=40+y*4,b=o.getUint8(v)*a.x+d.x,x=o.getUint8(v+1)*a.y+d.y,_=o.getUint8(v+2)*a.z+d.z;b<f&&(f=b),x<u&&(u=x),_<h&&(h=_),b>m&&(m=b),x>g&&(g=x),_>p&&(p=_);let A={x:b,y:x,z:_},S=o.getUint8(v+3),M=Zh[S];if(!M)throw new pe(`Invalid normal index ${S} in frame ${l}`);c.push({position:A,normalIndex:S,normal:M})}n.push({name:l,vertices:c,minBounds:{x:f,y:u,z:h},maxBounds:{x:m,y:g,z:p}})}return n}function em(e,t){let r=t.numGlCommands*4;if(Zn(e,t.offsetGlCommands,r,"gl commands"),r===0)return[];let n=new DataView(e,t.offsetGlCommands,r),i=[],s=0;for(;;){if(s+4>r)throw new pe("GL command list ended unexpectedly");let o=n.getInt32(s,!0);if(s+=4,o===0)break;let a=Math.abs(o),d=[],l=a*12;if(s+l>r)throw new pe("GL command vertex block exceeds buffer");for(let c=0;c<a;c+=1){let f=n.getFloat32(s,!0),u=n.getFloat32(s+4,!0),h=n.getInt32(s+8,!0);if(s+=12,h<0||h>=t.numVertices)throw new pe("GL command references invalid vertex index");d.push({s:f,t:u,vertexIndex:h})}i.push({mode:o>0?"strip":"fan",vertices:d})}if(s!==r)throw new pe("GL command list did not consume expected data");return i}function ka(e){let t=Yh(e),r=qh(e,t),n=jh(e,t),i=Qh(e,t),s=Jh(e,t),o=em(e,t);return{header:t,skins:r,texCoords:n,triangles:i,frames:s,glCommands:o}}function gd(e){let t=[],r=0;for(;r<e.length;){let n=e[r].name,i=n.replace(/\d+$/,"")||n,s=r;for(;s+1<e.length&&(e[s+1].name.replace(/\d+$/,"")||e[s+1].name)===i;)s+=1;t.push({name:i,firstFrame:r,lastFrame:s}),r=s+1}return t}var yd=860898377,tm=15,Ge=class extends Error{constructor(t){super(t),this.name="Md3ParseError"}};function Yn(e,t,r){let n=new Uint8Array(e.buffer,e.byteOffset+t,r);return new TextDecoder("utf-8").decode(n).replace(/\0.*$/,"").trim()}function rm(e){let t=(e>>8&255)*(2*Math.PI/255),r=(e&255)*(2*Math.PI/255),n=Math.sin(r);return{x:Math.cos(t)*n,y:Math.sin(t)*n,z:Math.cos(r)}}function Ds(e,t,r,n){if(t<0||t+r>n)throw new Ge(`${e} exceeds buffer bounds`)}function nm(e){let t=e.getInt32(0,!0);if(t!==yd)throw new Ge(`Invalid MD3 ident: ${t}`);let r=e.getInt32(4,!0);if(r!==tm)throw new Ge(`Unsupported MD3 version: ${r}`);let n=Yn(e,8,64),i=e.getInt32(72,!0),s=e.getInt32(76,!0),o=e.getInt32(80,!0),a=e.getInt32(84,!0),d=e.getInt32(88,!0),l=e.getInt32(92,!0),c=e.getInt32(96,!0),f=e.getInt32(100,!0),u=e.getInt32(104,!0);if(s<=0||a<0||o<0)throw new Ge("Invalid MD3 counts");return{ident:t,version:r,name:n,flags:i,numFrames:s,numTags:o,numSurfaces:a,numSkins:d,ofsFrames:l,ofsTags:c,ofsSurfaces:f,ofsEnd:u,magic:t}}function im(e,t){let r=[];Ds("Frames",t.ofsFrames,t.numFrames*56,e.byteLength);for(let i=0;i<t.numFrames;i+=1){let s=t.ofsFrames+i*56;r.push({minBounds:{x:e.getFloat32(s,!0),y:e.getFloat32(s+4,!0),z:e.getFloat32(s+8,!0)},maxBounds:{x:e.getFloat32(s+12,!0),y:e.getFloat32(s+16,!0),z:e.getFloat32(s+20,!0)},localOrigin:{x:e.getFloat32(s+24,!0),y:e.getFloat32(s+28,!0),z:e.getFloat32(s+32,!0)},radius:e.getFloat32(s+36,!0),name:Yn(e,s+40,16)})}return r}function sm(e,t){let r=[],i=t.numFrames*t.numTags*112;Ds("Tags",t.ofsTags,i,e.byteLength);for(let s=0;s<t.numFrames;s+=1){let o=[];for(let a=0;a<t.numTags;a+=1){let d=t.ofsTags+(s*t.numTags+a)*112,l=d+64,c=l+12;o.push({name:Yn(e,d,64),origin:{x:e.getFloat32(l,!0),y:e.getFloat32(l+4,!0),z:e.getFloat32(l+8,!0)},axis:[{x:e.getFloat32(c,!0),y:e.getFloat32(c+4,!0),z:e.getFloat32(c+8,!0)},{x:e.getFloat32(c+12,!0),y:e.getFloat32(c+16,!0),z:e.getFloat32(c+20,!0)},{x:e.getFloat32(c+24,!0),y:e.getFloat32(c+28,!0),z:e.getFloat32(c+32,!0)}]})}r.push(o)}return r}function om(e,t){let r=e.getInt32(t,!0);if(r!==yd)throw new Ge(`Invalid surface ident at ${t}: ${r}`);let n=Yn(e,t+4,64),i=e.getInt32(t+68,!0),s=e.getInt32(t+72,!0),o=e.getInt32(t+76,!0),a=e.getInt32(t+80,!0),d=e.getInt32(t+84,!0),l=e.getInt32(t+88,!0),c=e.getInt32(t+92,!0),f=e.getInt32(t+96,!0),u=e.getInt32(t+100,!0),h=e.getInt32(t+104,!0);if(s<=0||a<=0||d<=0)throw new Ge(`Invalid surface counts for ${n}`);let m=h;Ds(`Surface ${n}`,t,m,e.byteLength);let g=[],p=t+l;for(let S=0;S<d;S+=1){let M=p+S*12;g.push({indices:[e.getInt32(M,!0),e.getInt32(M+4,!0),e.getInt32(M+8,!0)]})}let y=[],v=t+c;for(let S=0;S<o;S+=1){let M=v+S*68;y.push({name:Yn(e,M,64),shaderIndex:e.getInt32(M+64,!0)})}let b=[],x=t+f;for(let S=0;S<a;S+=1){let M=x+S*8;b.push({s:e.getFloat32(M,!0),t:e.getFloat32(M+4,!0)})}let _=[],A=t+u;for(let S=0;S<s;S+=1){let M=[];for(let L=0;L<a;L+=1){let w=A+(S*a+L)*8,T=e.getInt16(w,!0)/64,k=e.getInt16(w+2,!0)/64,U=e.getInt16(w+4,!0)/64,C=e.getUint16(w+6,!0);M.push({position:{x:T,y:k,z:U},latLng:C,normal:rm(C)})}_.push(M)}return{surface:{name:n,flags:i,numFrames:s,shaders:y,triangles:g,texCoords:b,vertices:_},nextOffset:t+h}}function za(e){if(e.byteLength<108)throw new Ge("MD3 buffer too small for header");let t=new DataView(e),r=nm(t);Ds("MD3 end",r.ofsEnd,0,e.byteLength);let n=im(t,r),i=sm(t,r),s=[],o=r.ofsSurfaces;for(let a=0;a<r.numSurfaces;a+=1){let{surface:d,nextOffset:l}=om(t,o);s.push(d),o=l}if(o!==r.ofsEnd)throw new Ge("Surface parsing did not reach ofsEnd");return{header:r,frames:n,tags:i,surfaces:s}}var Qr=class{constructor(t){this.vfs=t;this.cache=new Map}async load(t){if(this.cache.has(t))return this.cache.get(t);let r=await this.vfs.readFile(t),n=za(r.slice().buffer);return this.cache.set(t,n),n}get(t){return this.cache.get(t)}};var am=844317769,lm=2,xd=64,bd=12,Ut=class extends Error{};function cm(e,t,r){let n=[];for(let i=0;i<r;i+=1){let s=e.getUint8(t+i);if(s===0)break;n.push(s)}return String.fromCharCode(...n)}function Pa(e){if(e.byteLength<bd)throw new Ut("Sprite buffer too small to contain header");let t=new DataView(e),r=t.getInt32(0,!0),n=t.getInt32(4,!0),i=t.getInt32(8,!0);if(r!==am)throw new Ut(`Invalid Sprite ident: ${r}`);if(n!==lm)throw new Ut(`Unsupported Sprite version: ${n}`);let s=[],o=16+xd,a=bd;for(let d=0;d<i;d+=1){if(a+o>e.byteLength)throw new Ut("Sprite frame data exceeds buffer length");let l=t.getInt32(a,!0),c=t.getInt32(a+4,!0),f=t.getInt32(a+8,!0),u=t.getInt32(a+12,!0),h=cm(t,a+16,xd);s.push({width:l,height:c,originX:f,originY:u,name:h}),a+=o}return{ident:r,version:n,numFrames:i,frames:s}}var Jr=class{constructor(t){this.vfs=t}async load(t){let r=await this.vfs.readFile(t),n=new Uint8Array(r.byteLength);return n.set(r),Pa(n.buffer)}};function _d(e,t){let r=(e.sequence.end-e.sequence.start+1)/e.sequence.fps,n=e.sequence.loop!==!1,i=e.time+t;return n?i=(i%r+r)%r:i>r&&(i=r),{...e,time:Math.max(0,Math.min(i,r))}}function vd(e){let t=e.sequence.end-e.sequence.start+1,r=1/e.sequence.fps,n=e.sequence.loop!==!1,i=e.time/r;if(!n&&i>=t)return{frame0:e.sequence.end,frame1:e.sequence.end,lerp:0};let s=n?i%t:Math.min(i,t-1),o=Math.floor(s),a=e.sequence.start+o,d=o+1>=t?n?e.sequence.start:e.sequence.end:a+1,l=!n&&o>=t-1?0:s-o;return{frame0:a,frame1:d,lerp:l}}function Sd(e){return{sequence:e,time:0}}function wd(e,t,r){return{x:e.x+(t.x-e.x)*r,y:e.y+(t.y-e.y)*r,z:e.z+(t.z-e.z)*r}}var qn=class extends Error{constructor(t){super(t),this.name="WalParseError"}};function Bs(e){if(e.byteLength<100)throw new qn("WAL buffer too small");let t=new DataView(e),r=new Uint8Array(e,0,32),n=new TextDecoder("utf-8").decode(r).replace(/\0.*$/,"").trim(),i=t.getInt32(32,!0),s=t.getInt32(36,!0),o=[t.getInt32(40,!0),t.getInt32(44,!0),t.getInt32(48,!0),t.getInt32(52,!0)],a=new Uint8Array(e,56,32),d=new TextDecoder("utf-8").decode(a).replace(/\0.*$/,"").trim(),l=t.getInt32(88,!0),c=t.getInt32(92,!0),f=t.getInt32(96,!0);if(i<=0||s<=0)throw new qn("Invalid WAL dimensions");let u=[],h=i,m=s;for(let g=0;g<o.length;g+=1){let p=o[g],y=Math.max(1,h*m|0);if(p<=0||p+y>e.byteLength)throw new qn(`Invalid WAL mip offset for level ${g}`);let v=new Uint8Array(e,p,y);u.push({level:g,width:h,height:m,data:v}),h=Math.max(1,h>>1),m=Math.max(1,m>>1)}return{name:n,width:i,height:s,mipmaps:u,animName:d,flags:l,contents:c,value:f}}var mr=class extends Error{constructor(t){super(t),this.name="PcxParseError"}};function jn(e){if(e.byteLength<128)throw new mr("PCX buffer too small for header");let t=new DataView(e),r=t.getUint8(0),n=t.getUint8(2),i=t.getUint8(3),s=t.getUint16(4,!0),o=t.getUint16(6,!0),a=t.getUint16(8,!0),d=t.getUint16(10,!0);if(r!==10||n!==1)throw new mr("Unsupported PCX encoding");if(i!==8)throw new mr("Only 8bpp PCX files are supported");let l=a-s+1,c=d-o+1,f=t.getUint16(66,!0),u=e.byteLength-769;if(u<128||new DataView(e,u,1).getUint8(0)!==12)throw new mr("Missing PCX palette");let h=new Uint8Array(e,u+1,768),m=new Uint8Array(e,128,u-128),g=new Uint8Array(l*c),p=0,y=0;for(let v=0;v<c;v+=1){let b=0;for(;b<f&&p<m.length;){let x=1,_=m[p++];if((_&192)===192){if(x=_&63,p>=m.length)throw new mr("Unexpected end of PCX RLE data");_=m[p++]}for(let A=0;A<x&&b<f;A+=1)b<l&&(g[y++]=_),b+=1}}return{width:l,height:c,bitsPerPixel:i,pixels:g,palette:h}}function Os(e){let t=new Uint8Array(e.width*e.height*4);for(let r=0;r<e.pixels.length;r+=1){let n=e.pixels[r],i=n*3,s=r*4;t[s]=e.palette[i],t[s+1]=e.palette[i+1],t[s+2]=e.palette[i+2],t[s+3]=n===255?0:255}return t}var yt=class extends Error{constructor(t){super(t),this.name="TgaParseError"}};function Da(e){let t=new DataView(e);if(e.byteLength<18)throw new yt("Buffer too small for TGA header");let r=t.getUint8(0),n=t.getUint8(1),i=t.getUint8(2),s=t.getUint16(12,!0),o=t.getUint16(14,!0),a=t.getUint8(16),d=t.getUint8(17);if(i!==2&&i!==10&&i!==3&&i!==11)throw new yt(`Unsupported TGA image type: ${i} (only RGB/Grayscale supported)`);if(a!==24&&a!==32&&a!==8)throw new yt(`Unsupported pixel depth: ${a} (only 8, 24, 32 bpp supported)`);let l=i>=9,c=i===3||i===11,f=a/8,u=18+r;if(n===1){let b=t.getUint16(5,!0),x=t.getUint8(7);u+=b*(x/8)}let h=s*o,m=new Uint8Array(h*4),g=(d&32)!==0,p=0,y=new Uint8Array(e),v=b=>{if(c){let x=y[u++];m[b]=x,m[b+1]=x,m[b+2]=x,m[b+3]=255}else{let x=y[u++],_=y[u++],A=y[u++],S=a===32?y[u++]:255;m[b]=A,m[b+1]=_,m[b+2]=x,m[b+3]=S}};if(l){let b=0;for(;b<h;){if(u>=e.byteLength)throw new yt("Unexpected end of TGA RLE data");let x=y[u++],_=(x&127)+1,A=(x&128)!==0;if(b+_>h)throw new yt("TGA RLE packet exceeds image bounds");if(A){let S=c?y[u]:y[u+2],M=c?y[u]:y[u+1],L=y[u],w=c?255:a===32?y[u+3]:255;u+=f;for(let T=0;T<_;T++){let k=(b+T)*4;m[k]=S,m[k+1]=M,m[k+2]=L,m[k+3]=w}}else for(let S=0;S<_;S++)v((b+S)*4);b+=_}}else for(let b=0;b<h;b++){if(u>=e.byteLength)throw new yt("Unexpected end of TGA data");v(b*4)}if(!g){let b=s*4,x=new Uint8Array(b);for(let _=0;_<o/2;_++){let A=_*b,S=(o-1-_)*b;x.set(m.subarray(A,A+b)),m.set(m.subarray(S,S+b),A),m.set(x,S)}}return{width:s,height:o,bitsPerPixel:32,pixels:m}}var en=class{constructor(t={}){this.cache=new Nt(t.capacity??128)}get size(){return this.cache.size}get(t){return this.cache.get(t.toLowerCase())}set(t,r){this.cache.set(t.toLowerCase(),r)}clear(){this.cache.clear()}};function Ba(e,t){let r=[];for(let n of e.mipmaps){let i=new Uint8Array(n.width*n.height*4);for(let s=0;s<n.data.length;s+=1){let o=n.data[s],a=o*3,d=s*4;i[d]=t[a],i[d+1]=t[a+1],i[d+2]=t[a+2],i[d+3]=o===255?0:255}r.push({level:n.level,width:n.width,height:n.height,rgba:i})}return{width:e.width,height:e.height,levels:r,source:"wal"}}function Ns(e){let t=Os(e),r={level:0,width:e.width,height:e.height,rgba:t};return{width:e.width,height:e.height,levels:[r],source:"pcx"}}function Ad(e){let t={level:0,width:e.width,height:e.height,rgba:e.pixels};return{width:e.width,height:e.height,levels:[t],source:"tga"}}function Us(e,t){return Ba(Bs(e),t)}var pr=class extends Error{constructor(t){super(t),this.name="WavParseError"}};function Oa(e,t,r){return new TextDecoder("ascii").decode(new Uint8Array(e.buffer,e.byteOffset+t,r))}function Hs(e){if(e.byteLength<44)throw new pr("WAV buffer too small");let t=new DataView(e);if(Oa(t,0,4)!=="RIFF"||Oa(t,8,4)!=="WAVE")throw new pr("Invalid WAV header");let r=12,n=-1,i=-1,s=0,o=0;for(;r+8<=e.byteLength;){let m=Oa(t,r,4),g=t.getUint32(r+4,!0),p=r+8;m==="fmt "?(n=p,s=g):m==="data"&&(i=p,o=g),r=p+g}if(n===-1||i===-1)throw new pr("Missing fmt or data chunk");let a=t.getUint16(n,!0),d=t.getUint16(n+2,!0),l=t.getUint32(n+4,!0),c=t.getUint16(n+14,!0);if(a!==1)throw new pr("Only PCM WAV is supported");let f=c/8,u=o/(f*d),h=new Float32Array(u*d);for(let m=0;m<u;m+=1)for(let g=0;g<d;g+=1){let p=m*d+g,y=i+p*f,v=0;if(c===8)v=t.getUint8(y),h[p]=(v-128)/128;else if(c===16)v=t.getInt16(y,!0),h[p]=v/32768;else if(c===24){let b=t.getUint8(y),x=t.getUint8(y+1),_=t.getInt8(y+2);v=b|x<<8|_<<16,h[p]=v/8388608}else throw new pr(`Unsupported bitsPerSample: ${c}`)}return{sampleRate:l,channels:d,bitsPerSample:c,samples:h}}var dm=(e,t=4294967295,r=79764919)=>{let n=new Int32Array(256),i,s,o,a=t;for(i=0;i<256;i++){for(o=i<<24,s=8;s>0;--s)o=2147483648&o?o<<1^r:o<<1;n[i]=o}for(i=0;i<e.length;i++)a=a<<8^n[255&(a>>24^e[i])];return a};var Na=(e,t=dm)=>{let r=p=>new Uint8Array(p.length/2).map(((y,v)=>parseInt(p.substring(2*v,2*(v+1)),16))),n=p=>r(p)[0],i=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,y)=>i.set(p,y)));let s=new Uint8Array(e.length),o,a,d,l=!1,c=0,f=42,u=e.length>13&&e.substring(0,9)==="dynEncode",h=0;u&&(h=11,a=n(e.substring(9,h)),a<=1&&(h+=2,f=n(e.substring(11,h))),a===1&&(h+=8,d=(p=>new DataView(r(p).buffer).getInt32(0,!0))(e.substring(13,h))));let m=256-f;for(let p=h;p<e.length;p++)if(o=e.charCodeAt(p),o!==61||l){if(o===92&&p<e.length-5&&u){let y=e.charCodeAt(p+1);y!==117&&y!==85||(o=parseInt(e.substring(p+2,p+6),16),p+=5)}if(o>255){let y=i.get(o);y&&(o=y+127)}l&&(l=!1,o-=64),s[c++]=o<f&&o>0?o+m:o-f}else l=!0;let g=s.subarray(0,c);if(u&&a===1){let p=t(g);if(p!==d){let y="Decode failed crc32 validation";throw console.error("`simple-yenc`\n",y+`
|
|
2
|
-
`,"Expected: "+
|
|
3
|
-
`,"Visit https://github.com/eshaz/simple-yenc for more information"),Error(y)}}return g};function re(){let e=Uint8Array,t=Float32Array;re.modules||Object.defineProperties(re,{modules:{value:new WeakMap},setModule:{value(r,n){re.modules.set(r,Promise.resolve(n))}},getModule:{value(r,n){let i=re.modules.get(r);return i||(n?i=WebAssembly.compile(Na(n)):(n=r.wasm,i=re.inflateDynEncodeString(n).then(s=>WebAssembly.compile(s))),re.modules.set(r,i)),i}},concatFloat32:{value(r,n){let i=new t(n),s=0,o=0;for(;s<r.length;)i.set(r[s],o),o+=r[s++].length;return i}},getDecodedAudio:{value:(r,n,i,s,o)=>({errors:r,channelData:n,samplesDecoded:i,sampleRate:s,bitDepth:o})},getDecodedAudioMultiChannel:{value(r,n,i,s,o,a){let d=[],l,c;for(l=0;l<i;l++){let f=[];for(c=0;c<n.length;)f.push(n[c++][l]||[]);d.push(re.concatFloat32(f,s))}return re.getDecodedAudio(r,d,s,o,a)}},inflateDynEncodeString:{value(r){return r=Na(r),new Promise(n=>{let i=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*4U((I-H(H*i0J,^*DH+H-H*I+H,I*4)33H(H*H)^*DH(H+H)^*@H+i§H)i§3æ*).§K(iHI/+§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,hi73H,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ô7H,c)(i)H+i´8W)(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,hi73H-i)J+V)&+I,H(H+V)æ,8(I.H(H*8*J-i(p51H-i)J+i¸7V)(H(H+iø7V)(8(J/H(P*0J+s,hi73H+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(i2J,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*4J1J.U(*H.U((J2i')o5/H.U()I.H,H(^*<H0H1U((H.i0J.i§i0i')o5/H/H.H2J*H(J.q50H,P*0J/H*I-H,P*(J0,hH,P*,H-q,hi)I-423+hH*m5+H/H0H(H1U((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-iEr5)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¨1I/+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+H0H1I2i(I-+hH-H2p,hH,H,iP8*J*i(p5-H*i7u,hH,i-H-i)H*c)(H-i)I-4*3i(I/i+I.i+I(*h*h*hH*i86*(*)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,hiI*4,3H,iø-H,i¸)H,i-H18)J(,hi¡I*H(i(p5,H1H,V)ú-H,V)ø-o5,3H,i(H,iXH,i-H1i)H08)J(,hi I*H(i(p5,H0H,V)H,V)o5,3H,H,iPH,iH8+I*4+3(3(3H,i$6i¬78+I*3H*H3m5(3i)I-H*i(r5)3H)H,P*0^*(H+H,P*<^*(H*I-3H,i2L(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*S7US0U `;re.getModule(re,i).then(s=>WebAssembly.instantiate(s,{})).then(({exports:s})=>{let o=new Map(Object.entries(s)),a=o.get("puff"),d=o.get("memory").buffer,l=new e(d),c=new DataView(d),f=o.get("__heap_base"),u=r.length,h=f;f+=4,c.setInt32(h,u,!0);let m=f;f+=u,l.set(r,m);let g=f;f+=4,c.setInt32(g,l.byteLength-f,!0),a(f,g,m,h),n(l.slice(f,f+c.getInt32(g,!0)))})})}}}),Object.defineProperty(this,"wasm",{enumerable:!0,get:()=>this._wasm}),this.getOutputChannels=(r,n,i)=>{let s=[],o=0;for(;o<n;)s.push(r.slice(o*i,o++*i+i));return s},this.allocateTypedArray=(r,n,i=!0)=>{let s=this._wasm.malloc(n.BYTES_PER_ELEMENT*r);return i&&this._pointers.add(s),{ptr:s,len:r,buf:new n(this._wasm.HEAP,s,r)}},this.free=()=>{this._pointers.forEach(r=>{this._wasm.free(r)}),this._pointers.clear()},this.codeToString=r=>{let n=[],i=new Uint8Array(this._wasm.HEAP);for(let s=i[r];s!==0;s=i[++r])n.push(s);return String.fromCharCode.apply(null,n)},this.addError=(r,n,i,s,o,a)=>{r.push({message:n,frameLength:i,frameNumber:s,inputBytes:o,outputSamples:a})},this.instantiate=(r,n)=>(n&&re.setModule(r,n),this._wasm=new r(re).instantiate(),this._pointers=new Set,this._wasm.ready.then(()=>this))}var Ld=S0(Ed(),1);var um=()=>globalThis.Worker||Ld.default,tn=class extends um(){constructor(t,r,n,i){re.modules||new re;let s=re.modules.get(n);if(!s){let o="text/javascript",a,d=`'use strict';(${((l,c,f)=>{let u,h,m=new Promise(g=>{h=g});self.onmessage=({data:{id:g,command:p,data:y}})=>{let v=m,b={id:g},x;p==="init"?(Object.defineProperties(l,{WASMAudioDecoderCommon:{value:c},EmscriptenWASM:{value:f},module:{value:y.module},isWebWorker:{value:!0}}),u=new l(y.options),h()):p==="free"?u.free():p==="ready"?v=v.then(()=>u.ready):p==="reset"?v=v.then(()=>u.reset()):(Object.assign(b,u[p](Array.isArray(y)?y.map(_=>new Uint8Array(_)):new Uint8Array(y))),x=b.channelData?b.channelData.map(_=>_.buffer):[]),v.then(()=>self.postMessage(b,x))}}).toString()})(${n}, ${re}, ${i})`;try{a=typeof process.versions.node<"u"}catch{}s=a?`data:${o};base64,${Buffer.from(d).toString("base64")}`:URL.createObjectURL(new Blob([d],{type:o})),re.modules.set(n,s)}super(s,{name:r}),this._id=Number.MIN_SAFE_INTEGER,this._enqueuedOperations=new Map,this.onmessage=({data:o})=>{let{id:a,...d}=o;this._enqueuedOperations.get(a)(d),this._enqueuedOperations.delete(a)},new i(re).getModule().then(o=>{this.postToDecoder("init",{module:o,options:t})})}async postToDecoder(t,r){return new Promise(n=>{this.postMessage({command:t,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 Vs=(e,t)=>{Object.defineProperty(e,"name",{value:t})};var ne=Symbol,Td=", ",B=(()=>{let e="front",t="side",r="rear",n="left",i="center",s="right";return["",e+" ",t+" ",r+" "].map(o=>[[n,s],[n,s,i],[n,i,s],[i,n,s],[i]].flatMap(a=>a.map(d=>o+d).join(Td)))})(),ot="LFE",Ht="monophonic (mono)",Vt="stereo",Qn="surround",se=(e,...t)=>`${[Ht,Vt,`linear ${Qn}`,"quadraphonic",`5.0 ${Qn}`,`5.1 ${Qn}`,`6.1 ${Qn}`,`7.1 ${Qn}`][e-1]} (${t.join(Td)})`,Jn=[Ht,se(2,B[0][0]),se(3,B[0][2]),se(4,B[1][0],B[3][0]),se(5,B[1][2],B[3][0]),se(6,B[1][2],B[3][0],ot),se(7,B[1][2],B[2][0],B[3][4],ot),se(8,B[1][2],B[2][0],B[3][0],ot)],Id=192e3,Cd=176400,Gs=96e3,Ws=88200,Rd=64e3,Gt=48e3,rn=44100,nn=32e3,sn=24e3,on=22050,an=16e3,Xs=12e3,Ks=11025,ln=8e3,Fd=7350,et="absoluteGranulePosition",H="bandwidth",be="bitDepth",_e="bitrate",ei=_e+"Maximum",ti=_e+"Minimum",ri=_e+"Nominal",at="buffer",ni=at+"Fullness",te="codec",ve=te+"Frames",ii="coupledStreamCount",cn="crc",si=cn+"16",oi=cn+"32",J="data",D="description",lt="duration",dn="emphasis",ai="hasOpusPadding",ze="header",Wt="isContinuedPacket",li="isCopyrighted",Xt="isFirstPage",ci="isHome",Pe="isLastPage",xt="isOriginal",bt="isPrivate",di="isVbr",Ce="layer",E="length",N="mode",_t=N+"Extension",$s="mpeg",vt=$s+"Version",ui="numberAACFrames",fi="outputGain",gr="preSkip",hi="profile",Zs=ne(),St="protection",Ua="rawData",We="segments",V="subarray",Kt="version",yr="vorbis",mi=yr+"Comments",un=yr+"Setup",Ys="block",pi=Ys+"ingStrategy",qs=ne(),wt=Ys+"Size",$t=Ys+"size0",Zt=Ys+"size1",gi=ne(),js="channel",At=js+"MappingFamily",yi=js+"MappingTable",Se=js+"Mode",xi=ne(),z=js+"s",kd="copyright",bi=kd+"Id",_i=kd+"IdStart",Mt="frame",Et=Mt+"Count",Re=Mt+"Length",Qs="Number",Lt=Mt+Qs,ct=Mt+"Padding",O=Mt+"Size",zd="Rate",vi="inputSample"+zd,Ha="page",xr=Ha+"Checksum",fn=ne(),Yt=Ha+"SegmentTable",ce=Ha+"Sequence"+Qs,Va="sample",Si=Va+Qs,W=Va+zd,dt=ne(),X=Va+"s",Js="stream",wi=Js+"Count",Ai=Js+"Info",ut=Js+"Serial"+Qs,Ga=Js+"StructureVersion",Wa="total",br=Wa+"BytesOut",_r=Wa+"Duration",vr=Wa+"Samples",$=ne(),Xe=ne(),Mi=ne(),qt=ne(),tt=ne(),eo=ne(),Xa=ne(),jt=ne(),Y=ne(),Ke=ne(),$e=ne(),ft=ne(),Qt=ne(),to=ne(),rt=ne(),nt=ne(),Ze=ne(),ro=ne(),we=Uint8Array,Jt=DataView,q="reserved",Ae="bad",hn="free",Ei="none",no="16bit CRC";var Ka=(e,t,r)=>{for(let n=0;n<e[E];n++){let i=t(n);for(let s=8;s>0;s--)i=r(i);e[n]=i}return e},hm=Ka(new we(256),e=>e,e=>e&128?7^e<<1:e<<1),oe=[Ka(new Uint16Array(256),e=>e<<8,e=>e<<1^(e&32768?32773:0))],ae=[Ka(new Uint32Array(256),e=>e,e=>e>>>1^(e&1)*3988292384)];for(let e=0;e<15;e++){oe.push(new Uint16Array(256)),ae.push(new Uint32Array(256));for(let t=0;t<=255;t++)oe[e+1][t]=oe[0][oe[e][t]>>>8]^oe[e][t]<<8,ae[e+1][t]=ae[e][t]>>>8^ae[0][ae[e][t]&255]}var Dd=e=>{let t=0,r=e[E];for(let n=0;n!==r;n++)t=hm[t^e[n]];return t},Bd=e=>{let t=e[E],r=t-16,n=0,i=0;for(;i<=r;)n^=e[i++]<<8|e[i++],n=oe[15][n>>8]^oe[14][n&255]^oe[13][e[i++]]^oe[12][e[i++]]^oe[11][e[i++]]^oe[10][e[i++]]^oe[9][e[i++]]^oe[8][e[i++]]^oe[7][e[i++]]^oe[6][e[i++]]^oe[5][e[i++]]^oe[4][e[i++]]^oe[3][e[i++]]^oe[2][e[i++]]^oe[1][e[i++]]^oe[0][e[i++]];for(;i!==t;)n=(n&255)<<8^oe[0][n>>8^e[i++]];return n},Od=e=>{let t=e[E],r=t-16,n=0,i=0;for(;i<=r;)n=ae[15][(e[i++]^n)&255]^ae[14][(e[i++]^n>>>8)&255]^ae[13][(e[i++]^n>>>16)&255]^ae[12][e[i++]^n>>>24]^ae[11][e[i++]]^ae[10][e[i++]]^ae[9][e[i++]]^ae[8][e[i++]]^ae[7][e[i++]]^ae[6][e[i++]]^ae[5][e[i++]]^ae[4][e[i++]]^ae[3][e[i++]]^ae[2][e[i++]]^ae[1][e[i++]]^ae[0][e[i++]];for(;i!==t;)n=ae[0][(n^e[i++])&255]^n>>>8;return n^-1},Ti=(...e)=>{let t=new we(e.reduce((r,n)=>r+n[E],0));return e.reduce((r,n)=>(t.set(n,r),r+n[E]),0),t},De=e=>String.fromCharCode(...e),Pd=[0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15],Li=e=>Pd[e&15]<<4|Pd[e>>4],io=class{constructor(t){this._data=t,this._pos=t[E]*8}set position(t){this._pos=t}get position(){return this._pos}read(t){let r=Math.floor(this._pos/8),n=this._pos%8;return this._pos-=t,(Li(this._data[r-1])<<8)+Li(this._data[r])>>7-n&255}},Nd=(e,t)=>{try{return e.getBigInt64(t,!0)}catch{let r=e.getUint8(t+7)&128?-1:1,n=e.getUint32(t,!0),i=e.getUint32(t+4,!0);return r===-1&&(n=~n+1,i=~i+1),i>1048575&&console.warn("This platform does not support BigInt"),r*(n+i*2**32)}};var Ii=class{constructor(t,r){this._onCodecHeader=t,this._onCodecUpdate=r,this[rt]()}[nt](){this._isEnabled=!0}[rt](){this._headerCache=new Map,this._codecUpdateData=new WeakMap,this._codecHeaderSent=!1,this._codecShouldUpdate=!1,this._bitrate=null,this._isEnabled=!1}[to](t,r){if(this._onCodecUpdate){this._bitrate!==t&&(this._bitrate=t,this._codecShouldUpdate=!0);let n=this._codecUpdateData.get(this._headerCache.get(this._currentHeader));this._codecShouldUpdate&&n&&this._onCodecUpdate({bitrate:t,...n},r),this._codecShouldUpdate=!1}}[Y](t){let r=this._headerCache.get(t);return r&&this._updateCurrentHeader(t),r}[Ke](t,r,n){this._isEnabled&&(this._codecHeaderSent||(this._onCodecHeader({...r}),this._codecHeaderSent=!0),this._updateCurrentHeader(t),this._headerCache.set(t,r),this._codecUpdateData.set(r,n))}_updateCurrentHeader(t){this._onCodecUpdate&&t!==this._currentHeader&&(this._codecShouldUpdate=!0,this._currentHeader=t)}};var ue=new WeakMap,ge=new WeakMap;var Me=class{constructor(t,r){this._codecParser=t,this._headerCache=r}*[Xa](){let t;do{if(t=yield*this.Frame[$e](this._codecParser,this._headerCache,0),t)return t;this._codecParser[Xe](1)}while(!0)}*[jt](t){let r=yield*this[Xa](),n=ge.get(r)[E];if(t||this._codecParser._flushing||(yield*this.Header[Y](this._codecParser,this._headerCache,n)))return this._headerCache[nt](),this._codecParser[Xe](n),this._codecParser[qt](r),r;this._codecParser[tt](`Missing ${Mt} at ${n} bytes from current position.`,`Dropping current ${Mt} and trying again.`),this._headerCache[rt](),this._codecParser[Xe](1)}};var Sr=class{constructor(t,r){ge.set(this,{[ze]:t}),this[J]=r}};var Be=class extends Sr{static*[$e](t,r,n,i,s){let o=yield*t[Y](n,i,s);if(o){let a=ue.get(o)[Re],d=ue.get(o)[X],l=(yield*n[$](a,s))[V](0,a);return new r(o,l,d)}else return null}constructor(t,r,n){super(t,r),this[ze]=t,this[X]=n,this[lt]=n/t[W]*1e3,this[Lt]=null,this[br]=null,this[vr]=null,this[_r]=null,ge.get(this)[E]=r[E]}};var $a="unsynchronizationFlag",Za="extendedHeaderFlag",Ya="experimentalFlag",qa="footerPresent",Ci=class e{static*getID3v2Header(t,r,n){let s={},o=yield*t[$](3,n);if(o[0]!==73||o[1]!==68||o[2]!==51||(o=yield*t[$](10,n),s[Kt]=`id3v2.${o[3]}.${o[4]}`,o[5]&15)||(s[$a]=!!(o[5]&128),s[Za]=!!(o[5]&64),s[Ya]=!!(o[5]&32),s[qa]=!!(o[5]&16),o[6]&128||o[7]&128||o[8]&128||o[9]&128))return null;let a=o[6]<<21|o[7]<<14|o[8]<<7|o[9];return s[E]=10+a,new e(s)}constructor(t){this[Kt]=t[Kt],this[$a]=t[$a],this[Za]=t[Za],this[Ya]=t[Ya],this[qa]=t[qa],this[E]=t[E]}};var Oe=class{constructor(t){ue.set(this,t),this[be]=t[be],this[_e]=null,this[z]=t[z],this[Se]=t[Se],this[W]=t[W]}};var Wd={0:[hn,hn,hn,hn,hn],16:[32,32,32,32,8],240:[Ae,Ae,Ae,Ae,Ae]},so=(e,t,r)=>8*((e+r)%t+t)*(1<<(e+r)/t)-8*t*(t/8|0);for(let e=2;e<15;e++)Wd[e<<4]=[e*32,so(e,4,0),so(e,4,-1),so(e,8,4),so(e,8,0)];var mm=0,pm=1,gm=2,ym=3,Ud=4,oo="bands ",ao=" to 31",Hd={0:oo+4+ao,16:oo+8+ao,32:oo+12+ao,48:oo+16+ao},wr="bitrateIndex",Ri="v2",ho="v1",lo="Intensity stereo ",co=", MS stereo ",uo="on",fo="off",xm={0:lo+fo+co+fo,16:lo+uo+co+fo,32:lo+fo+co+uo,48:lo+uo+co+uo},ja={0:{[D]:q},2:{[D]:"Layer III",[ct]:1,[_t]:xm,[ho]:{[wr]:gm,[X]:1152},[Ri]:{[wr]:Ud,[X]:576}},4:{[D]:"Layer II",[ct]:1,[_t]:Hd,[X]:1152,[ho]:{[wr]:pm},[Ri]:{[wr]:Ud}},6:{[D]:"Layer I",[ct]:4,[_t]:Hd,[X]:384,[ho]:{[wr]:mm},[Ri]:{[wr]:ym}}},Qa="MPEG Version ",Vd="ISO/IEC ",bm={0:{[D]:`${Qa}2.5 (later extension of MPEG 2)`,[Ce]:Ri,[W]:{0:Ks,4:Xs,8:ln,12:q}},8:{[D]:q},16:{[D]:`${Qa}2 (${Vd}13818-3)`,[Ce]:Ri,[W]:{0:on,4:sn,8:an,12:q}},24:{[D]:`${Qa}1 (${Vd}11172-3)`,[Ce]:ho,[W]:{0:rn,4:Gt,8:nn,12:q}},length:E},_m={0:no,1:Ei},vm={0:Ei,1:"50/15 ms",2:q,3:"CCIT J.17"},Gd={0:{[z]:2,[D]:Vt},64:{[z]:2,[D]:"joint "+Vt},128:{[z]:2,[D]:"dual channel"},192:{[z]:1,[D]:Ht}},Ar=class e extends Oe{static*[Y](t,r,n){let i={},s=yield*Ci.getID3v2Header(t,r,n);s&&(yield*t[$](s[E],n),t[Xe](s[E]));let o=yield*t[$](4,n),a=De(o[V](0,4)),d=r[Y](a);if(d)return new e(d);if(o[0]!==255||o[1]<224)return null;let l=bm[o[1]&24];if(l[D]===q)return null;let c=o[1]&6;if(ja[c][D]===q)return null;let f={...ja[c],...ja[c][l[Ce]]};if(i[vt]=l[D],i[Ce]=f[D],i[X]=f[X],i[St]=_m[o[1]&1],i[E]=4,i[_e]=Wd[o[2]&240][f[wr]],i[_e]===Ae||(i[W]=l[W][o[2]&12],i[W]===q)||(i[ct]=o[2]&2&&f[ct],i[bt]=!!(o[2]&1),i[Re]=Math.floor(125*i[_e]*i[X]/i[W]+i[ct]),!i[Re]))return null;let u=o[3]&192;if(i[Se]=Gd[u][D],i[z]=Gd[u][z],i[_t]=f[_t][o[3]&48],i[li]=!!(o[3]&8),i[xt]=!!(o[3]&4),i[dn]=vm[o[3]&3],i[dn]===q)return null;i[be]=16;{let{length:h,frameLength:m,samples:g,...p}=i;r[Ke](a,i,p)}return new e(i)}constructor(t){super(t),this[_e]=t[_e],this[dn]=t[dn],this[ct]=t[ct],this[li]=t[li],this[xt]=t[xt],this[bt]=t[bt],this[Ce]=t[Ce],this[_t]=t[_t],this[vt]=t[vt],this[St]=t[St]}};var Fi=class e extends Be{static*[$e](t,r,n){return yield*super[$e](Ar,e,t,r,n)}constructor(t,r,n){super(t,r,n)}};var ki=class extends Me{constructor(t,r,n){super(t,r),this.Frame=Fi,this.Header=Ar,n(this[te])}get[te](){return $s}*[ft](){return yield*this[jt]()}};var Sm={0:"MPEG-4",8:"MPEG-2"},wm={0:"valid",2:Ae,4:Ae,6:Ae},Am={0:no,1:Ei},Mm={0:"AAC Main",64:"AAC LC (Low Complexity)",128:"AAC SSR (Scalable Sample Rate)",192:"AAC LTP (Long Term Prediction)"},Em={0:Gs,4:Ws,8:Rd,12:Gt,16:rn,20:nn,24:sn,28:on,32:an,36:Xs,40:Ks,44:ln,48:Fd,52:q,56:q,60:"frequency is written explicitly"},Xd={0:{[z]:0,[D]:"Defined in AOT Specific Config"},64:{[z]:1,[D]:Ht},128:{[z]:2,[D]:se(2,B[0][0])},192:{[z]:3,[D]:se(3,B[1][3])},256:{[z]:4,[D]:se(4,B[1][3],B[3][4])},320:{[z]:5,[D]:se(5,B[1][3],B[3][0])},384:{[z]:6,[D]:se(6,B[1][3],B[3][0],ot)},448:{[z]:8,[D]:se(8,B[1][3],B[2][0],B[3][0],ot)}},Mr=class e extends Oe{static*[Y](t,r,n){let i={},s=yield*t[$](7,n),o=De([s[0],s[1],s[2],s[3]&252|s[6]&3]),a=r[Y](o);if(a)Object.assign(i,a);else{if(s[0]!==255||s[1]<240||(i[vt]=Sm[s[1]&8],i[Ce]=wm[s[1]&6],i[Ce]===Ae))return null;let l=s[1]&1;i[St]=Am[l],i[E]=l?7:9,i[Zs]=s[2]&192,i[dt]=s[2]&60;let c=s[2]&2;if(i[hi]=Mm[i[Zs]],i[W]=Em[i[dt]],i[W]===q)return null;i[bt]=!!c,i[xi]=(s[2]<<8|s[3])&448,i[Se]=Xd[i[xi]][D],i[z]=Xd[i[xi]][z],i[xt]=!!(s[3]&32),i[ci]=!!(s[3]&8),i[bi]=!!(s[3]&8),i[_i]=!!(s[3]&4),i[be]=16,i[X]=1024,i[ui]=s[6]&3;{let{length:f,channelModeBits:u,profileBits:h,sampleRateBits:m,frameLength:g,samples:p,numberAACFrames:y,...v}=i;r[Ke](o,i,v)}}if(i[Re]=(s[3]<<11|s[4]<<3|s[5]>>5)&8191,!i[Re])return null;let d=(s[5]<<6|s[6]>>2)&2047;return i[ni]=d===2047?"VBR":d,new e(i)}constructor(t){super(t),this[bi]=t[bi],this[_i]=t[_i],this[ni]=t[ni],this[ci]=t[ci],this[xt]=t[xt],this[bt]=t[bt],this[Ce]=t[Ce],this[E]=t[E],this[vt]=t[vt],this[ui]=t[ui],this[hi]=t[hi],this[St]=t[St]}get audioSpecificConfig(){let t=ue.get(this),r=t[Zs]+64<<5|t[dt]<<5|t[xi]>>3,n=new we(2);return new Jt(n[at]).setUint16(0,r,!1),n}};var zi=class e extends Be{static*[$e](t,r,n){return yield*super[$e](Mr,e,t,r,n)}constructor(t,r,n){super(t,r,n)}};var Pi=class extends Me{constructor(t,r,n){super(t,r),this.Frame=zi,this.Header=Mr,n(this[te])}get[te](){return"aac"}*[ft](){return yield*this[jt]()}};var er=class e extends Be{static _getFrameFooterCrc16(t){return(t[t[E]-2]<<8)+t[t[E]-1]}static[ro](t){let r=e._getFrameFooterCrc16(t),n=Bd(t[V](0,-2));return r===n}constructor(t,r,n){r[Ai]=n,r[si]=e._getFrameFooterCrc16(t),super(r,t,ue.get(r)[X])}};var Kd="get from STREAMINFO metadata block",Lm={0:"Fixed",1:"Variable"},$d={0:q,16:192};for(let e=2;e<16;e++)$d[e<<4]=e<6?576*2**(e-2):2**e;var Tm={0:Kd,1:Ws,2:Cd,3:Id,4:ln,5:an,6:on,7:sn,8:nn,9:rn,10:Gt,11:Gs,15:Ae},Im={0:{[z]:1,[D]:Ht},16:{[z]:2,[D]:se(2,B[0][0])},32:{[z]:3,[D]:se(3,B[0][1])},48:{[z]:4,[D]:se(4,B[1][0],B[3][0])},64:{[z]:5,[D]:se(5,B[1][1],B[3][0])},80:{[z]:6,[D]:se(6,B[1][1],ot,B[3][0])},96:{[z]:7,[D]:se(7,B[1][1],ot,B[3][4],B[2][0])},112:{[z]:8,[D]:se(8,B[1][1],ot,B[3][0],B[2][0])},128:{[z]:2,[D]:`${Vt} (left, diff)`},144:{[z]:2,[D]:`${Vt} (diff, right)`},160:{[z]:2,[D]:`${Vt} (avg, diff)`},176:q,192:q,208:q,224:q,240:q},Cm={0:Kd,2:8,4:12,6:q,8:16,10:20,12:24,14:q},tr=class e extends Oe{static _decodeUTF8Int(t){if(t[0]>254)return null;if(t[0]<128)return{value:t[0],length:1};let r=1;for(let o=64;o&t[0];o>>=1)r++;let n=r-1,i=0,s=0;for(;n>0;s+=6,n--){if((t[n]&192)!==128)return null;i|=(t[n]&63)<<s}return i|=(t[n]&127>>r)<<s,{value:i,length:r}}static[Ze](t,r){let n={[$]:function*(){return t}};return e[Y](n,r,0).next().value}static*[Y](t,r,n){let i=yield*t[$](6,n);if(i[0]!==255||!(i[1]===248||i[1]===249))return null;let s={},o=De(i[V](0,4)),a=r[Y](o);if(a)Object.assign(s,a);else{if(s[qs]=i[1]&1,s[pi]=Lm[s[qs]],s[gi]=i[2]&240,s[dt]=i[2]&15,s[wt]=$d[s[gi]],s[wt]===q||(s[W]=Tm[s[dt]],s[W]===Ae)||i[3]&1)return null;let l=Im[i[3]&240];if(l===q||(s[z]=l[z],s[Se]=l[D],s[be]=Cm[i[3]&14],s[be]===q))return null}s[E]=5,i=yield*t[$](s[E]+8,n);let d=e._decodeUTF8Int(i[V](4));if(!d||(s[qs]?s[Si]=d.value:s[Lt]=d.value,s[E]+=d[E],s[gi]===96?(i[E]<s[E]&&(i=yield*t[$](s[E],n)),s[wt]=i[s[E]-1]+1,s[E]+=1):s[gi]===112&&(i[E]<s[E]&&(i=yield*t[$](s[E],n)),s[wt]=(i[s[E]-1]<<8)+i[s[E]]+1,s[E]+=2),s[X]=s[wt],s[dt]===12?(i[E]<s[E]&&(i=yield*t[$](s[E],n)),s[W]=i[s[E]-1]*1e3,s[E]+=1):s[dt]===13?(i[E]<s[E]&&(i=yield*t[$](s[E],n)),s[W]=(i[s[E]-1]<<8)+i[s[E]],s[E]+=2):s[dt]===14&&(i[E]<s[E]&&(i=yield*t[$](s[E],n)),s[W]=((i[s[E]-1]<<8)+i[s[E]])*10,s[E]+=2),i[E]<s[E]&&(i=yield*t[$](s[E],n)),s[cn]=i[s[E]-1],s[cn]!==Dd(i[V](0,s[E]-1))))return null;if(!a){let{blockingStrategyBits:l,frameNumber:c,sampleNumber:f,samples:u,sampleRateBits:h,blockSizeBits:m,crc:g,length:p,...y}=s;r[Ke](o,s,y)}return new e(s)}constructor(t){super(t),this[si]=null,this[pi]=t[pi],this[wt]=t[wt],this[Lt]=t[Lt],this[Si]=t[Si],this[Ai]=null}};var Rm=2,Fm=512*1024,Er=class extends Me{constructor(t,r,n){super(t,r),this.Frame=er,this.Header=tr,n(this[te])}get[te](){return"flac"}*_getNextFrameSyncOffset(t){let r=yield*this._codecParser[$](2,0),n=r[E]-2;for(;t<n;){if(r[t]===255){let s=r[t+1];if(s===248||s===249)break;s!==255&&t++}t++}return t}*[ft](){do{let t=yield*tr[Y](this._codecParser,this._headerCache,0);if(t){let r=ue.get(t)[E]+Rm;for(;r<=Fm;){if(this._codecParser._flushing||(yield*tr[Y](this._codecParser,this._headerCache,r))){let n=yield*this._codecParser[$](r);if(this._codecParser._flushing||(n=n[V](0,r)),er[ro](n)){let i=new er(n,t);return this._headerCache[nt](),this._codecParser[Xe](r),this._codecParser[qt](i),i}}r=yield*this._getNextFrameSyncOffset(r+1)}this._codecParser[tt](`Unable to sync FLAC frame after searching ${r} bytes.`),this._codecParser[Xe](r)}else this._codecParser[Xe](yield*this._getNextFrameSyncOffset(1))}while(!0)}[Qt](t){return t[ce]===0?(this._headerCache[nt](),this._streamInfo=t[J][V](13)):t[ce]===1||(t[ve]=ge.get(t)[We].map(r=>{let n=tr[Ze](r,this._headerCache);if(n)return new er(r,n,this._streamInfo);this._codecParser[tt]("Failed to parse Ogg FLAC frame","Skipping invalid FLAC frame")}).filter(r=>!!r)),t}};var Lr=class e{static*[Y](t,r,n){let i={},s=yield*t[$](28,n);if(s[0]!==79||s[1]!==103||s[2]!==103||s[3]!==83||(i[Ga]=s[4],s[5]&248))return null;i[Pe]=!!(s[5]&4),i[Xt]=!!(s[5]&2),i[Wt]=!!(s[5]&1);let a=new Jt(we.from(s[V](0,28))[at]);i[et]=Nd(a,6),i[ut]=a.getInt32(14,!0),i[ce]=a.getInt32(18,!0),i[xr]=a.getInt32(22,!0);let d=s[26];i[E]=d+27,s=yield*t[$](i[E],n),i[Re]=0,i[Yt]=[],i[fn]=we.from(s[V](27,i[E]));for(let l=0,c=0;l<d;l++){let f=i[fn][l];i[Re]+=f,c+=f,(f!==255||l===d-1)&&(i[Yt].push(c),c=0)}return new e(i)}constructor(t){ue.set(this,t),this[et]=t[et],this[Wt]=t[Wt],this[Xt]=t[Xt],this[Pe]=t[Pe],this[Yt]=t[Yt],this[ce]=t[ce],this[xr]=t[xr],this[ut]=t[ut]}};var Di=class e extends Sr{static*[$e](t,r,n){let i=yield*Lr[Y](t,r,n);if(i){let s=ue.get(i)[Re],o=ue.get(i)[E],a=o+s,d=(yield*t[$](a,0))[V](0,a),l=d[V](o,a);return new e(i,l,d)}else return null}constructor(t,r,n){super(t,r),ge.get(this)[E]=n[E],this[ve]=[],this[Ua]=n,this[et]=t[et],this[oi]=t[xr],this[lt]=0,this[Wt]=t[Wt],this[Xt]=t[Xt],this[Pe]=t[Pe],this[ce]=t[ce],this[X]=0,this[ut]=t[ut]}};var mn=class extends Be{constructor(t,r,n){super(r,t,n)}};var Zd={0:Jn.slice(0,2),1:Jn},Ye="SILK-only",ye="CELT-only",mo="Hybrid",rr="narrowband",po="medium-band",nr="wideband",pn="super-wideband",gn="fullband",km={0:{[N]:Ye,[H]:rr,[O]:10},8:{[N]:Ye,[H]:rr,[O]:20},16:{[N]:Ye,[H]:rr,[O]:40},24:{[N]:Ye,[H]:rr,[O]:60},32:{[N]:Ye,[H]:po,[O]:10},40:{[N]:Ye,[H]:po,[O]:20},48:{[N]:Ye,[H]:po,[O]:40},56:{[N]:Ye,[H]:po,[O]:60},64:{[N]:Ye,[H]:nr,[O]:10},72:{[N]:Ye,[H]:nr,[O]:20},80:{[N]:Ye,[H]:nr,[O]:40},88:{[N]:Ye,[H]:nr,[O]:60},96:{[N]:mo,[H]:pn,[O]:10},104:{[N]:mo,[H]:pn,[O]:20},112:{[N]:mo,[H]:gn,[O]:10},120:{[N]:mo,[H]:gn,[O]:20},128:{[N]:ye,[H]:rr,[O]:2.5},136:{[N]:ye,[H]:rr,[O]:5},144:{[N]:ye,[H]:rr,[O]:10},152:{[N]:ye,[H]:rr,[O]:20},160:{[N]:ye,[H]:nr,[O]:2.5},168:{[N]:ye,[H]:nr,[O]:5},176:{[N]:ye,[H]:nr,[O]:10},184:{[N]:ye,[H]:nr,[O]:20},192:{[N]:ye,[H]:pn,[O]:2.5},200:{[N]:ye,[H]:pn,[O]:5},208:{[N]:ye,[H]:pn,[O]:10},216:{[N]:ye,[H]:pn,[O]:20},224:{[N]:ye,[H]:gn,[O]:2.5},232:{[N]:ye,[H]:gn,[O]:5},240:{[N]:ye,[H]:gn,[O]:10},248:{[N]:ye,[H]:gn,[O]:20}},yn=class e extends Oe{static[Ze](t,r,n){let i={};if(i[z]=t[9],i[At]=t[18],i[E]=i[At]!==0?21+i[z]:19,t[E]<i[E])throw new Error("Out of data while inside an Ogg Page");let s=r[0]&3,o=s===3?2:1,a=De(t[V](0,i[E]))+De(r[V](0,o)),d=n[Y](a);if(d)return new e(d);if(a.substr(0,8)!=="OpusHead"||t[8]!==1)return null;i[J]=we.from(t[V](0,i[E]));let l=new Jt(i[J][at]);if(i[be]=16,i[gr]=l.getUint16(10,!0),i[vi]=l.getUint32(12,!0),i[W]=Gt,i[fi]=l.getInt16(16,!0),i[At]in Zd&&(i[Se]=Zd[i[At]][i[z]-1],!i[Se]))return null;i[At]!==0&&(i[wi]=t[19],i[ii]=t[20],i[yi]=[...t[V](21,i[z]+21)]);let c=km[248&r[0]];switch(i[N]=c[N],i[H]=c[H],i[O]=c[O],s){case 0:i[Et]=1;break;case 1:case 2:i[Et]=2;break;case 3:i[di]=!!(128&r[1]),i[ai]=!!(64&r[1]),i[Et]=63&r[1];break;default:return null}{let{length:f,data:u,channelMappingFamily:h,...m}=i;n[Ke](a,i,m)}return new e(i)}constructor(t){super(t),this[J]=t[J],this[H]=t[H],this[At]=t[At],this[yi]=t[yi],this[ii]=t[ii],this[Et]=t[Et],this[O]=t[O],this[ai]=t[ai],this[vi]=t[vi],this[di]=t[di],this[N]=t[N],this[fi]=t[fi],this[gr]=t[gr],this[wi]=t[wi]}};var Bi=class extends Me{constructor(t,r,n){super(t,r),this.Frame=mn,this.Header=yn,n(this[te]),this._identificationHeader=null,this._preSkipRemaining=null}get[te](){return"opus"}[Qt](t){return t[ce]===0?(this._headerCache[nt](),this._identificationHeader=t[J]):t[ce]===1||(t[ve]=ge.get(t)[We].map(r=>{let n=yn[Ze](this._identificationHeader,r,this._headerCache);if(n){this._preSkipRemaining===null&&(this._preSkipRemaining=n[gr]);let i=n[O]*n[Et]/1e3*n[W];return this._preSkipRemaining>0&&(this._preSkipRemaining-=i,i=this._preSkipRemaining<0?-this._preSkipRemaining:0),new mn(r,n,i)}this._codecParser[eo]("Failed to parse Ogg Opus Header","Not a valid Ogg Opus file")})),t}};var xn=class extends Be{constructor(t,r,n){super(r,t,n)}};var Ja={};for(let e=0;e<8;e++)Ja[e+6]=2**(6+e);var Oi=class e extends Oe{static[Ze](t,r,n,i){if(t[E]<30)throw new Error("Out of data while inside an Ogg Page");let s=De(t[V](0,30)),o=r[Y](s);if(o)return new e(o);let a={[E]:30};if(s.substr(0,7)!=="vorbis")return null;a[J]=we.from(t[V](0,30));let d=new Jt(a[J][at]);if(a[Kt]=d.getUint32(7,!0),a[Kt]!==0||(a[z]=t[11],a[Se]=Jn[a[z]-1]||"application defined",a[W]=d.getUint32(12,!0),a[ei]=d.getInt32(16,!0),a[ri]=d.getInt32(20,!0),a[ti]=d.getInt32(24,!0),a[Zt]=Ja[(t[28]&240)>>4],a[$t]=Ja[t[28]&15],a[$t]>a[Zt])||t[29]!==1)return null;a[be]=32,a[un]=i,a[mi]=n;{let{length:l,data:c,version:f,vorbisSetup:u,vorbisComments:h,...m}=a;r[Ke](s,a,m)}return new e(a)}constructor(t){super(t),this[ei]=t[ei],this[ti]=t[ti],this[ri]=t[ri],this[$t]=t[$t],this[Zt]=t[Zt],this[J]=t[J],this[mi]=t[mi],this[un]=t[un]}};var Ni=class extends Me{constructor(t,r,n){super(t,r),this.Frame=xn,n(this[te]),this._identificationHeader=null,this._setupComplete=!1,this._prevBlockSize=null}get[te](){return yr}[Qt](t){t[ve]=[];for(let r of ge.get(t)[We])if(r[0]===1)this._headerCache[nt](),this._identificationHeader=t[J],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=Oi[Ze](this._identificationHeader,this._headerCache,this._vorbisComments,this._vorbisSetup);n?t[ve].push(new xn(r,n,this._getSamples(r,n))):this._codecParser[logError]("Failed to parse Ogg Vorbis Header","Not a valid Ogg Vorbis file")}return t}_getSamples(t,r){let i=this._mode.blockFlags[t[0]>>1&this._mode.mask]?r[Zt]:r[$t],s=this._prevBlockSize===null?0:(this._prevBlockSize+i)/4;return this._prevBlockSize=i,s}_parseSetupHeader(t){let r=new io(t),n={count:0,blockFlags:[]};for(;(r.read(1)&1)!==1;);let i;for(;n.count<64&&r.position>0;){Li(r.read(8));let s=0;for(;r.read(8)===0&&s++<3;);if(s===4)i=r.read(7),n.blockFlags.unshift(i&1),r.position+=6,n.count++;else{((Li(i)&126)>>1)+1!==n.count&&this._codecParser[tt]("vorbis derived mode count did not match actual mode count");break}}return n.mask=(1<<Math.log2(n.count))-1,n}};var el=class{constructor(t,r,n){this._codecParser=t,this._headerCache=r,this._onCodec=n,this._continuedPacket=new we,this._codec=null,this._isSupported=null,this._previousAbsoluteGranulePosition=null}get[te](){return this._codec||""}_updateCodec(t,r){this._codec!==t&&(this._headerCache[rt](),this._parser=new r(this._codecParser,this._headerCache,this._onCodec),this._codec=t)}_checkCodecSupport({data:t}){let r=De(t[V](0,8));switch(r){case"fishead\0":return!1;case"OpusHead":return this._updateCodec("opus",Bi),!0;case(/^\x7fFLAC/.test(r)&&r):return this._updateCodec("flac",Er),!0;case(/^\x01vorbis/.test(r)&&r):return this._updateCodec(yr,Ni),!0;default:return!1}}_checkPageSequenceNumber(t){t[ce]!==this._pageSequenceNumber+1&&this._pageSequenceNumber>1&&t[ce]>1&&this._codecParser[tt]("Unexpected gap in Ogg Page Sequence Number.",`Expected: ${this._pageSequenceNumber+1}, Got: ${t[ce]}`),this._pageSequenceNumber=t[ce]}_parsePage(t){this._isSupported===null&&(this._pageSequenceNumber=t[ce],this._isSupported=this._checkCodecSupport(t)),this._checkPageSequenceNumber(t);let r=ge.get(t),n=ue.get(r[ze]),i=0;if(r[We]=n[Yt].map(s=>t[J][V](i,i+=s)),this._continuedPacket[E]&&(r[We][0]=Ti(this._continuedPacket,r[We][0]),this._continuedPacket=new we),n[fn][n[fn][E]-1]===255&&(this._continuedPacket=Ti(this._continuedPacket,r[We].pop())),this._previousAbsoluteGranulePosition!==null&&(t[X]=Number(t[et]-this._previousAbsoluteGranulePosition)),this._previousAbsoluteGranulePosition=t[et],this._isSupported){let s=this._parser[Qt](t);return this._codecParser[qt](s),s}else return t}},Ui=class extends Me{constructor(t,r,n){super(t,r),this._onCodec=n,this.Frame=Di,this.Header=Lr,this._streams=new Map,this._currentSerialNumber=null}get[te](){let t=this._streams.get(this._currentSerialNumber);return t?t.codec:""}*[ft](){let t=yield*this[jt](!0);this._currentSerialNumber=t[ut];let r=this._streams.get(this._currentSerialNumber);return r||(r=new el(this._codecParser,this._headerCache,this._onCodec),this._streams.set(this._currentSerialNumber,r)),t[Pe]&&this._streams.delete(this._currentSerialNumber),r._parsePage(t)}};var tl=()=>{},Hi=class{constructor(t,{onCodec:r,onCodecHeader:n,onCodecUpdate:i,enableLogging:s=!1,enableFrameCRC32:o=!0}={}){this._inputMimeType=t,this._onCodec=r||tl,this._onCodecHeader=n||tl,this._onCodecUpdate=i,this._enableLogging=s,this._crc32=o?Od:tl,this[rt]()}get[te](){return this._parser?this._parser[te]:""}[rt](){this._headerCache=new Ii(this._onCodecHeader,this._onCodecUpdate),this._generator=this._getGenerator(),this._generator.next()}*flush(){this._flushing=!0;for(let t=this._generator.next();t.value;t=this._generator.next())yield t.value;this._flushing=!1,this[rt]()}*parseChunk(t){for(let r=this._generator.next(t);r.value;r=this._generator.next())yield r.value}parseAll(t){return[...this.parseChunk(t),...this.flush()]}*_getGenerator(){if(this._inputMimeType.match(/aac/))this._parser=new Pi(this,this._headerCache,this._onCodec);else if(this._inputMimeType.match(/mpeg/))this._parser=new ki(this,this._headerCache,this._onCodec);else if(this._inputMimeType.match(/flac/))this._parser=new Er(this,this._headerCache,this._onCodec);else if(this._inputMimeType.match(/ogg/))this._parser=new Ui(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 t=yield*this._parser[ft]();t&&(yield t)}}*[$](t=0,r=0){let n;for(;this._rawData[E]<=t+r;){if(n=yield,this._flushing)return this._rawData[V](r);n&&(this._totalBytesIn+=n[E],this._rawData=Ti(this._rawData,n))}return this._rawData[V](r)}[Xe](t){this._currentReadPosition+=t,this._rawData=this._rawData[V](t)}[Mi](t){this._sampleRate=t[ze][W],t[ze][_e]=t[lt]>0?Math.round(t[J][E]/t[lt])*8:0,t[Lt]=this._frameNumber++,t[br]=this._totalBytesOut,t[vr]=this._totalSamples,t[_r]=this._totalSamples/this._sampleRate*1e3,t[oi]=this._crc32(t[J]),this._headerCache[to](t[ze][_e],t[_r]),this._totalBytesOut+=t[J][E],this._totalSamples+=t[X]}[qt](t){if(t[ve]){if(t[Pe]){let r=t[X];t[ve].forEach(n=>{let i=n[X];r<i&&(n[X]=r>0?r:0,n[lt]=n[X]/n[ze][W]*1e3),r-=i,this[Mi](n)})}else t[X]=0,t[ve].forEach(r=>{t[X]+=r[X],this[Mi](r)});t[lt]=t[X]/this._sampleRate*1e3||0,t[vr]=this._totalSamples,t[_r]=this._totalSamples/this._sampleRate*1e3||0,t[br]=this._totalBytesOut}else this[Mi](t)}_log(t,r){if(this._enableLogging){let n=[`${te}: ${this[te]}`,`inputMimeType: ${this._inputMimeType}`,`readPosition: ${this._currentReadPosition}`,`totalBytesIn: ${this._totalBytesIn}`,`${br}: ${this._totalBytesOut}`],i=Math.max(...n.map(s=>s[E]));r.push(`--stats--${"-".repeat(i-9)}`,...n,"-".repeat(i)),t("codec-parser",r.reduce((s,o)=>s+`
|
|
4
|
-
`+o,""))}}[
|
|
1
|
+
"use strict";var Quake2Engine=(()=>{var w0=Object.create;var Js=Object.defineProperty;var A0=Object.getOwnPropertyDescriptor;var M0=Object.getOwnPropertyNames;var E0=Object.getPrototypeOf,L0=Object.prototype.hasOwnProperty;var T0=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Ga=(e,t)=>{for(var r in t)Js(e,r,{get:t[r],enumerable:!0})},jc=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of M0(t))!L0.call(e,i)&&i!==r&&Js(e,i,{get:()=>t[i],enumerable:!(n=A0(t,i))||n.enumerable});return e};var I0=(e,t,r)=>(r=e!=null?w0(E0(e)):{},jc(t||!e||!e.__esModule?Js(r,"default",{value:e,enumerable:!0}):r,e)),C0=e=>jc(Js({},"__esModule",{value:!0}),e);var Fd=T0((C_,kd)=>{"use strict";kd.exports=Worker});var tb={};Ga(tb,{ATTN_IDLE:()=>il,ATTN_LOOP_NONE:()=>rl,ATTN_NONE:()=>jn,ATTN_NORM:()=>nl,ATTN_STATIC:()=>ao,AssetDependencyError:()=>Cr,AssetDependencyTracker:()=>Ji,AssetManager:()=>ea,AssetPreviewGenerator:()=>Ha,AudioApi:()=>Yr,AudioContextController:()=>ta,AudioOcclusion:()=>ts,AudioRegistry:()=>_n,AudioRegistryError:()=>qi,AudioSystem:()=>ca,BSP_SURFACE_FRAGMENT_SOURCE:()=>Vl,BSP_SURFACE_VERTEX_SOURCE:()=>Hl,BSP_VERTEX_LAYOUT:()=>Ol,BspLoader:()=>jr,BspParseError:()=>Q,BspSurfacePipeline:()=>ma,Camera:()=>ba,Command:()=>Kn,CommandRegistry:()=>Hr,ConfigStringRegistry:()=>Zr,Cvar:()=>Qn,CvarRegistry:()=>Kr,DemoAnalyzer:()=>Gn,DemoCameraMode:()=>Uc,DemoClipper:()=>Ua,DemoEventType:()=>Nc,DemoPlaybackController:()=>Ks,DemoReader:()=>je,DemoRecorder:()=>$s,DemoValidator:()=>Oa,DynamicLightManager:()=>ha,EngineHost:()=>$r,EngineRuntime:()=>Jn,FileType:()=>Hc,FixedTimestepLoop:()=>fr,Framebuffer:()=>ua,IndexBuffer:()=>xe,LruCache:()=>Ut,MAX_SOUND_CHANNELS:()=>qn,MD2_FRAGMENT_SHADER:()=>Yl,MD2_VERTEX_SHADER:()=>Zl,MD3_FRAGMENT_SHADER:()=>ic,MD3_VERTEX_SHADER:()=>nc,MapAnalyzer:()=>Va,Md2Loader:()=>Qr,Md2MeshBuffers:()=>ga,Md2ParseError:()=>pe,Md2Pipeline:()=>ya,Md3Loader:()=>Jr,Md3ModelMesh:()=>_a,Md3ParseError:()=>Ge,Md3Pipeline:()=>va,Md3SurfaceMesh:()=>ns,MusicSystem:()=>da,NetworkMessageParser:()=>st,PARTICLE_FRAGMENT_SHADER:()=>oc,PARTICLE_VERTEX_SHADER:()=>sc,PROTOCOL_VERSION_RERELEASE:()=>Dn,PakArchive:()=>qr,PakIndexStore:()=>Jo,PakIngestionError:()=>Nt,PakParseError:()=>Ve,PakValidationError:()=>mr,PakValidator:()=>ho,PakWriter:()=>co,ParticleRenderer:()=>wa,ParticleSystem:()=>Sa,PlaybackState:()=>Ba,RERELEASE_KNOWN_PAKS:()=>al,ResourceLoadTracker:()=>uo,ResourceType:()=>ol,SKYBOX_FRAGMENT_SHADER:()=>Kl,SKYBOX_VERTEX_SHADER:()=>Xl,SOUND_FULLVOLUME:()=>Bt,SOUND_LOOP_ATTENUATE:()=>sl,ShaderProgram:()=>Ee,SkyboxPipeline:()=>pa,SoundChannel:()=>at,SoundPrecache:()=>ia,SoundRegistry:()=>na,SpriteLoader:()=>en,SpriteParseError:()=>Ht,Texture2D:()=>vn,TextureCache:()=>tn,TextureCubeMap:()=>Sn,TgaParseError:()=>bt,U_ALPHA:()=>ks,U_ANGLE1:()=>Cs,U_ANGLE2:()=>As,U_ANGLE3:()=>Ms,U_EFFECTS16:()=>Hn,U_EFFECTS8:()=>On,U_EVENT:()=>Ls,U_FRAME16:()=>Fs,U_FRAME8:()=>Es,U_INSTANCE_BITS:()=>Hs,U_LOOP_ATTENUATION_HIGH:()=>Gs,U_LOOP_VOLUME:()=>Vs,U_MODEL:()=>Rs,U_MODEL2:()=>Ps,U_MODEL3:()=>zs,U_MODEL4:()=>Ds,U_OLDORIGIN:()=>Bs,U_OLD_FRAME_HIGH:()=>Xs,U_ORIGIN1:()=>Ss,U_ORIGIN2:()=>ws,U_ORIGIN3:()=>Is,U_OWNER_HIGH:()=>Ws,U_REMOVE:()=>Ts,U_RENDERFX16:()=>Un,U_RENDERFX8:()=>Bn,U_SCALE:()=>Us,U_SKIN16:()=>Vn,U_SKIN8:()=>Nn,U_SOLID:()=>Ns,U_SOUND:()=>Os,VertexArray:()=>ke,VertexBuffer:()=>Le,VirtualFileSystem:()=>fo,advanceAnimation:()=>Ld,applyEntityDelta:()=>Na,applySurfaceState:()=>vu,attenuationToDistanceMultiplier:()=>Ot,boxIntersectsFrustum:()=>rs,buildBspGeometry:()=>mu,buildMd2Geometry:()=>ql,buildMd2VertexData:()=>jl,buildMd3SurfaceGeometry:()=>tc,buildMd3VertexData:()=>rc,calculateMaxAudibleDistance:()=>hr,calculatePakChecksum:()=>md,computeFrameBlend:()=>Td,computeSkyScroll:()=>Au,createAnimationState:()=>Id,createAudioGraph:()=>ra,createBspSurfaces:()=>hu,createEmptyEntityState:()=>zt,createEmptyProtocolPlayerState:()=>Nr,createEngine:()=>eb,createEngineRuntime:()=>fd,createFaceLightmap:()=>po,createInitialChannels:()=>sa,createOcclusionResolver:()=>cu,createProgramFromSources:()=>fu,createWebGLContext:()=>du,decodeOgg:()=>Qo,deriveSurfaceRenderState:()=>Wl,detectFileType:()=>Vc,extractFrustumPlanes:()=>pu,filesToPakSources:()=>ll,findLeafForPoint:()=>Ul,gatherVisibleFaces:()=>bu,groupMd2Animations:()=>wd,ingestPakFiles:()=>gd,ingestPaks:()=>mo,interpolateMd3Tag:()=>Vu,interpolateVec3:()=>Cd,isBinaryFile:()=>b0,isTextFile:()=>Gc,parseBsp:()=>ei,parseMd2:()=>cl,parseMd3:()=>dl,parsePcx:()=>ii,parseSprite:()=>ul,parseTga:()=>fl,parseWal:()=>yo,parseWalTexture:()=>_o,parseWav:()=>vo,pcxToRgba:()=>xo,pickChannel:()=>oa,preparePcxTexture:()=>bo,removeViewTranslation:()=>wu,resolveLightStyles:()=>Gl,spatializeOrigin:()=>aa,spawnBlood:()=>Xu,spawnBulletImpact:()=>Gu,spawnExplosion:()=>Wu,spawnMuzzleFlash:()=>$u,spawnSplash:()=>Yu,spawnSteam:()=>qu,spawnTeleportFlash:()=>Ku,spawnTrail:()=>Zu,walToRgba:()=>hl,wireDropTarget:()=>yd,wireFileInput:()=>xd});var R0=()=>typeof performance<"u"?performance.now():Date.now(),k0=e=>{typeof requestAnimationFrame=="function"?requestAnimationFrame(()=>e()):setTimeout(e,25)},fr=class{constructor(t,r={}){this.callbacks=t;this.accumulatorMs=0;this.frame=0;this.running=!1;this.tick=()=>{if(!this.running)return;let t=this.options.now(),r=this.lastTimeMs===void 0?0:t-this.lastTimeMs;this.lastTimeMs=t,this.advance(r,t),this.running&&this.options.schedule(this.tick)};let n=r.fixedDeltaMs??25,i=r.maxSubSteps??5;this.options={fixedDeltaMs:n,maxSubSteps:i,maxDeltaMs:r.maxDeltaMs??n*i,startTimeMs:r.startTimeMs,now:r.now??R0,schedule:r.schedule??k0}}start(){this.running||(this.running=!0,this.lastTimeMs=this.options.startTimeMs??this.options.now(),this.options.schedule(this.tick))}stop(){this.running=!1}pump(t){let r=(this.lastTimeMs??0)+t;this.lastTimeMs=r,this.advance(t,r)}isRunning(){return this.running}get frameNumber(){return this.frame}advance(t,r){let n=Math.min(Math.max(t,0),this.options.maxDeltaMs);this.accumulatorMs=Math.min(this.accumulatorMs+n,this.options.fixedDeltaMs*this.options.maxSubSteps);let i=0;for(;this.accumulatorMs>=this.options.fixedDeltaMs&&i<this.options.maxSubSteps;)this.frame+=1,this.callbacks.simulate({frame:this.frame,deltaMs:this.options.fixedDeltaMs,nowMs:r}),this.accumulatorMs-=this.options.fixedDeltaMs,i+=1;let s=this.options.fixedDeltaMs===0?0:this.accumulatorMs/this.options.fixedDeltaMs;this.callbacks.render?.({alpha:s,nowMs:r,accumulatorMs:this.accumulatorMs,frame:this.frame})}};var Kn=class{constructor(t,r,n){this.name=t,this.callback=r,this.description=n}execute(t){this.callback(t)}},Hr=class{constructor(){this.commands=new Map;this.history=[];this.historyLimit=64;this.autocompleteProviders=[]}register(t,r,n){let i=new Kn(t,r,n);return this.commands.set(t,i),i}registerCommand(t,r){this.register(t,r)}registerAutocompleteProvider(t){this.autocompleteProviders.push(t)}get(t){return this.commands.get(t)}execute(t){let r=t.trim();if(r.length===0)return!1;(this.history.length===0||this.history[this.history.length-1]!==r)&&(this.history.push(r),this.history.length>this.historyLimit&&this.history.shift());let n=this.tokenize(t);if(n.length===0)return!1;let i=n[0],s=n.slice(1),o=this.get(i);return o?(o.execute(s),!0):(this.onConsoleOutput?.(`Unknown command "${i}"`),!1)}executeCommand(t){this.execute(t)}getHistory(){return[...this.history]}getSuggestions(t){let r=new Set;for(let n of this.commands.keys())n.startsWith(t)&&r.add(n);for(let n of this.autocompleteProviders){let i=n();for(let s of i)s.startsWith(t)&&r.add(s)}return Array.from(r).sort()}tokenize(t){let r=[],n="",i=!1;for(let s=0;s<t.length;s++){let o=t[s];o==='"'?i=!i:o===" "&&!i?n.length>0&&(r.push(n),n=""):n+=o}return n.length>0&&r.push(n),r}list(){return[...this.commands.values()].sort((t,r)=>t.name.localeCompare(r.name))}};var F0=Object.defineProperty,Qc=(e,t)=>{for(var r in t)F0(e,r,{get:t[r],enumerable:!0})},Jc={x:0,y:0,z:0};var sb=Math.PI/180;function eo(e,t){return{x:e.x-t.x,y:e.y-t.y,z:e.z-t.z}}function P0(e,t){return{x:e.x*t,y:e.y*t,z:e.z*t}}function Xa(e,t){return e.x*t.x+e.y*t.y+e.z*t.z}function z0(e){return Xa(e,e)}function Zn(e){return Math.sqrt(z0(e))}function et(e){let t=Zn(e);return t===0?e:P0(e,1/t)}var D0=Math.PI/180,B0=180/Math.PI,Wr=D0,Ka=B0;var Vr=[[-.525731,0,.850651],[-.442863,.238856,.864188],[-.295242,0,.955423],[-.309017,.5,.809017],[-.16246,.262866,.951056],[0,0,1],[0,.850651,.525731],[-.147621,.716567,.681718],[.147621,.716567,.681718],[0,.525731,.850651],[.309017,.5,.809017],[.525731,0,.850651],[.295242,0,.955423],[.442863,.238856,.864188],[.16246,.262866,.951056],[-.681718,.147621,.716567],[-.809017,.309017,.5],[-.587785,.425325,.688191],[-.850651,.525731,0],[-.864188,.442863,.238856],[-.716567,.681718,.147621],[-.688191,.587785,.425325],[-.5,.809017,.309017],[-.238856,.864188,.442863],[-.425325,.688191,.587785],[-.716567,.681718,-.147621],[-.5,.809017,-.309017],[-.525731,.850651,0],[0,.850651,-.525731],[-.238856,.864188,-.442863],[0,.955423,-.295242],[-.262866,.951056,-.16246],[0,1,0],[0,.955423,.295242],[-.262866,.951056,.16246],[.238856,.864188,.442863],[.262866,.951056,.16246],[.5,.809017,.309017],[.238856,.864188,-.442863],[.262866,.951056,-.16246],[.5,.809017,-.309017],[.850651,.525731,0],[.716567,.681718,.147621],[.716567,.681718,-.147621],[.525731,.850651,0],[.425325,.688191,.587785],[.864188,.442863,.238856],[.688191,.587785,.425325],[.809017,.309017,.5],[.681718,.147621,.716567],[.587785,.425325,.688191],[.955423,.295242,0],[1,0,0],[.951056,.16246,.262866],[.850651,-.525731,0],[.955423,-.295242,0],[.864188,-.442863,.238856],[.951056,-.16246,.262866],[.809017,-.309017,.5],[.681718,-.147621,.716567],[.850651,0,.525731],[.864188,.442863,-.238856],[.809017,.309017,-.5],[.951056,.16246,-.262866],[.525731,0,-.850651],[.681718,.147621,-.716567],[.681718,-.147621,-.716567],[.850651,0,-.525731],[.809017,-.309017,-.5],[.864188,-.442863,-.238856],[.951056,-.16246,-.262866],[.147621,.716567,-.681718],[.309017,.5,-.809017],[.425325,.688191,-.587785],[.442863,.238856,-.864188],[.587785,.425325,-.688191],[.688191,.587785,-.425325],[-.147621,.716567,-.681718],[-.309017,.5,-.809017],[0,.525731,-.850651],[-.525731,0,-.850651],[-.442863,.238856,-.864188],[-.295242,0,-.955423],[-.16246,.262866,-.951056],[0,0,-1],[.295242,0,-.955423],[.16246,.262866,-.951056],[-.442863,-.238856,-.864188],[-.309017,-.5,-.809017],[-.16246,-.262866,-.951056],[0,-.850651,-.525731],[-.147621,-.716567,-.681718],[.147621,-.716567,-.681718],[0,-.525731,-.850651],[.309017,-.5,-.809017],[.442863,-.238856,-.864188],[.16246,-.262866,-.951056],[.238856,-.864188,-.442863],[.5,-.809017,-.309017],[.425325,-.688191,-.587785],[.716567,-.681718,-.147621],[.688191,-.587785,-.425325],[.587785,-.425325,-.688191],[0,-.955423,-.295242],[0,-1,0],[.262866,-.951056,-.16246],[0,-.850651,.525731],[0,-.955423,.295242],[.238856,-.864188,.442863],[.262866,-.951056,.16246],[.5,-.809017,.309017],[.716567,-.681718,.147621],[.525731,-.850651,0],[-.238856,-.864188,-.442863],[-.5,-.809017,-.309017],[-.262866,-.951056,-.16246],[-.850651,-.525731,0],[-.716567,-.681718,-.147621],[-.716567,-.681718,.147621],[-.525731,-.850651,0],[-.5,-.809017,.309017],[-.238856,-.864188,.442863],[-.262866,-.951056,.16246],[-.864188,-.442863,.238856],[-.809017,-.309017,.5],[-.688191,-.587785,.425325],[-.681718,-.147621,.716567],[-.442863,-.238856,.864188],[-.587785,-.425325,.688191],[-.309017,-.5,.809017],[-.147621,-.716567,.681718],[-.425325,-.688191,.587785],[-.16246,-.262866,.951056],[.442863,-.238856,.864188],[.16246,-.262866,.951056],[.309017,-.5,.809017],[.147621,-.716567,.681718],[0,-.525731,.850651],[.425325,-.688191,.587785],[.587785,-.425325,.688191],[.688191,-.587785,.425325],[-.955423,.295242,0],[-.951056,.16246,.262866],[-1,0,0],[-.850651,0,.525731],[-.955423,-.295242,0],[-.951056,-.16246,.262866],[-.864188,.442863,-.238856],[-.951056,.16246,-.262866],[-.809017,.309017,-.5],[-.864188,-.442863,-.238856],[-.951056,-.16246,-.262866],[-.809017,-.309017,-.5],[-.681718,.147621,-.716567],[-.681718,-.147621,-.716567],[-.850651,0,-.525731],[-.688191,.587785,-.425325],[-.587785,.425325,-.688191],[-.425325,.688191,-.587785],[-.425325,-.688191,-.587785],[-.587785,-.425325,-.688191],[-.688191,-.587785,-.425325]];function O0(){return new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1])}function ed(e,t){let r=t.x,n=t.y,i=t.z;return{x:e[0]*r+e[4]*n+e[8]*i+e[12],y:e[1]*r+e[5]*n+e[9]*i+e[13],z:e[2]*r+e[6]*n+e[10]*i+e[14]}}function td(e,t){let r=O0();return r[0]=t[0].x,r[1]=t[0].y,r[2]=t[0].z,r[4]=t[1].x,r[5]=t[1].y,r[6]=t[1].z,r[8]=t[2].x,r[9]=t[2].y,r[10]=t[2].z,r[12]=e.x,r[13]=e.y,r[14]=e.z,r}var ot=1,Dt=2;var $a=8,Za=16,N0=32;var U0=16384;var to=65536,rd=1<<17,H0=1<<18,V0=1<<19,G0=1<<20,W0=1<<21,X0=1<<22,K0=1<<23,ob=1<<24,ro=1<<25,$0=1<<26,ab=1<<27,lb=1<<28,cb=1<<29,no=1<<30,db=1<<31;var Yn=0;var nd=4,id=8,sd=16,od=32,ad=64;var ub=1<<25,fb=1<<28,hb=1<<29,mb=1<<30,pb=1<<31;var gb=ot|Dt,yb=ot|to|Dt|ro|no,xb=ot|to|Dt,bb=ot|rd|Dt|ro|no,_b=N0|$a|Za,vb=ot|Za|$a,Z0=ot|ro|no|Dt|$0,Sb=H0|V0|G0|W0|X0|K0,wb=ot|$a|Za|ro|no,Ab=ot|to|Dt,Mb=ot|Dt,Eb=ot|to|Dt|rd,Lb=Z0|U0;var Tb=Number.MAX_SAFE_INTEGER-1;var io=(e=>(e[e.None=0]="None",e[e.Archive=1]="Archive",e[e.UserInfo=2]="UserInfo",e[e.ServerInfo=4]="ServerInfo",e[e.Latch=8]="Latch",e[e.Cheat=16]="Cheat",e))(io||{});var so=256;var Ya=256,qa=8192,oo=2048,ja=512,Qa=256,Ja=so*2,el=256,Wa=32,$n=96;var j=(e=>(e[e.Name=0]="Name",e[e.CdTrack=1]="CdTrack",e[e.Sky=2]="Sky",e[e.SkyAxis=3]="SkyAxis",e[e.SkyRotate=4]="SkyRotate",e[e.StatusBar=5]="StatusBar",e[e.HealthBarName=55]="HealthBarName",e[e.CONFIG_N64_PHYSICS=56]="CONFIG_N64_PHYSICS",e[e.CONFIG_CTF_TEAMS=57]="CONFIG_CTF_TEAMS",e[e.CONFIG_COOP_RESPAWN_STRING=58]="CONFIG_COOP_RESPAWN_STRING",e[e.Story=54]="Story",e[e.AirAccel=59]="AirAccel",e[e.MaxClients=60]="MaxClients",e[e.MapChecksum=61]="MapChecksum",e[e.Models=62]="Models",e[e.Sounds=62+qa]="Sounds",e[e.Images=e.Sounds+oo]="Images",e[e.Lights=e.Images+ja]="Lights",e[e.ShadowLights=e.Lights+Ya]="ShadowLights",e[e.Items=e.ShadowLights+el]="Items",e[e.PlayerSkins=e.Items+Qa]="PlayerSkins",e[e.General=e.PlayerSkins+so]="General",e[e.WheelWeapons=e.General+Ja]="WheelWeapons",e[e.WheelAmmo=e.WheelWeapons+Wa]="WheelAmmo",e[e.WheelPowerups=e.WheelAmmo+Wa]="WheelPowerups",e[e.CdLoopCount=e.WheelPowerups+Wa]="CdLoopCount",e[e.GameStyle=e.CdLoopCount+1]="GameStyle",e[e.MaxConfigStrings=e.GameStyle+1]="MaxConfigStrings",e))(j||{}),ld=j.MaxConfigStrings;function cd(e){return e>=5&&e<59?$n*(59-e):e>=j.General&&e<j.WheelWeapons?$n*(j.MaxConfigStrings-e):$n}var Y0={};Qc(Y0,{addReplayFrame:()=>J0,createReplaySession:()=>Q0,deserializeReplay:()=>j0,serializeReplay:()=>q0});function q0(e){return JSON.stringify(e,null,2)}function j0(e){let t=JSON.parse(e);if(!t.metadata||!Array.isArray(t.frames))throw new Error("Invalid replay format: missing metadata or frames");return t}function Q0(e,t){return{metadata:{map:e,date:new Date().toISOString(),version:"1.0",seed:t},frames:[]}}function J0(e,t,r,n){e.frames.push({serverFrame:r,cmd:t,timestamp:Date.now()-n})}var k=(e=>(e[e.bad=0]="bad",e[e.muzzleflash=1]="muzzleflash",e[e.muzzleflash2=2]="muzzleflash2",e[e.temp_entity=3]="temp_entity",e[e.layout=4]="layout",e[e.inventory=5]="inventory",e[e.nop=6]="nop",e[e.disconnect=7]="disconnect",e[e.reconnect=8]="reconnect",e[e.sound=9]="sound",e[e.print=10]="print",e[e.stufftext=11]="stufftext",e[e.serverdata=12]="serverdata",e[e.configstring=13]="configstring",e[e.spawnbaseline=14]="spawnbaseline",e[e.centerprint=15]="centerprint",e[e.download=16]="download",e[e.playerinfo=17]="playerinfo",e[e.packetentities=18]="packetentities",e[e.deltapacketentities=19]="deltapacketentities",e[e.frame=20]="frame",e[e.splitclient=21]="splitclient",e[e.configblast=22]="configblast",e[e.spawnbaselineblast=23]="spawnbaselineblast",e[e.level_restart=24]="level_restart",e[e.damage=25]="damage",e[e.locprint=26]="locprint",e[e.fog=27]="fog",e[e.waitingforplayers=28]="waitingforplayers",e[e.bot_chat=29]="bot_chat",e[e.poi=30]="poi",e[e.help_path=31]="help_path",e[e.muzzleflash3=32]="muzzleflash3",e[e.achievement=33]="achievement",e))(k||{});var I=(e=>(e[e.GUNSHOT=0]="GUNSHOT",e[e.BLOOD=1]="BLOOD",e[e.BLASTER=2]="BLASTER",e[e.RAILTRAIL=3]="RAILTRAIL",e[e.SHOTGUN=4]="SHOTGUN",e[e.EXPLOSION1=5]="EXPLOSION1",e[e.EXPLOSION2=6]="EXPLOSION2",e[e.ROCKET_EXPLOSION=7]="ROCKET_EXPLOSION",e[e.GRENADE_EXPLOSION=8]="GRENADE_EXPLOSION",e[e.SPARKS=9]="SPARKS",e[e.SPLASH=10]="SPLASH",e[e.BUBBLETRAIL=11]="BUBBLETRAIL",e[e.SCREEN_SPARKS=12]="SCREEN_SPARKS",e[e.SHIELD_SPARKS=13]="SHIELD_SPARKS",e[e.BULLET_SPARKS=14]="BULLET_SPARKS",e[e.LASER_SPARKS=15]="LASER_SPARKS",e[e.PARASITE_ATTACK=16]="PARASITE_ATTACK",e[e.ROCKET_EXPLOSION_WATER=17]="ROCKET_EXPLOSION_WATER",e[e.GRENADE_EXPLOSION_WATER=18]="GRENADE_EXPLOSION_WATER",e[e.MEDIC_CABLE_ATTACK=19]="MEDIC_CABLE_ATTACK",e[e.BFG_EXPLOSION=20]="BFG_EXPLOSION",e[e.BFG_BIGEXPLOSION=21]="BFG_BIGEXPLOSION",e[e.BOSSTPORT=22]="BOSSTPORT",e[e.BFG_LASER=23]="BFG_LASER",e[e.GRAPPLE_CABLE=24]="GRAPPLE_CABLE",e[e.WELDING_SPARKS=25]="WELDING_SPARKS",e[e.GREENBLOOD=26]="GREENBLOOD",e[e.BLUEHYPERBLASTER=27]="BLUEHYPERBLASTER",e[e.PLASMA_EXPLOSION=28]="PLASMA_EXPLOSION",e[e.TUNNEL_SPARKS=29]="TUNNEL_SPARKS",e[e.BLASTER2=30]="BLASTER2",e[e.RAILTRAIL2=31]="RAILTRAIL2",e[e.FLAME=32]="FLAME",e[e.LIGHTNING=33]="LIGHTNING",e[e.DEBUGTRAIL=34]="DEBUGTRAIL",e[e.PLAIN_EXPLOSION=35]="PLAIN_EXPLOSION",e[e.FLASHLIGHT=36]="FLASHLIGHT",e[e.FORCEWALL=37]="FORCEWALL",e[e.HEATBEAM=38]="HEATBEAM",e[e.MONSTER_HEATBEAM=39]="MONSTER_HEATBEAM",e[e.STEAM=40]="STEAM",e[e.BUBBLETRAIL2=41]="BUBBLETRAIL2",e[e.MOREBLOOD=42]="MOREBLOOD",e[e.HEATBEAM_SPARKS=43]="HEATBEAM_SPARKS",e[e.HEATBEAM_STEAM=44]="HEATBEAM_STEAM",e[e.CHAINFIST_SMOKE=45]="CHAINFIST_SMOKE",e[e.ELECTRIC_SPARKS=46]="ELECTRIC_SPARKS",e[e.TRACKER_EXPLOSION=47]="TRACKER_EXPLOSION",e[e.TELEPORT_EFFECT=48]="TELEPORT_EFFECT",e[e.DBALL_GOAL=49]="DBALL_GOAL",e[e.WIDOWBEAMOUT=50]="WIDOWBEAMOUT",e[e.NUKEBLAST=51]="NUKEBLAST",e[e.WIDOWSPLASH=52]="WIDOWSPLASH",e[e.EXPLOSION1_BIG=53]="EXPLOSION1_BIG",e[e.EXPLOSION1_NP=54]="EXPLOSION1_NP",e[e.FLECHETTE=55]="FLECHETTE",e[e.BLUEHYPERBLASTER_KEX=56]="BLUEHYPERBLASTER_KEX",e[e.BFG_ZAP=57]="BFG_ZAP",e[e.BERSERK_SLAM=58]="BERSERK_SLAM",e[e.GRAPPLE_CABLE_2=59]="GRAPPLE_CABLE_2",e[e.POWER_SPLASH=60]="POWER_SPLASH",e[e.LIGHTNING_BEAM=61]="LIGHTNING_BEAM",e[e.EXPLOSION1_NL=62]="EXPLOSION1_NL",e[e.EXPLOSION2_NL=63]="EXPLOSION2_NL",e))(I||{});var eh=12,th=9,Ib=Math.ceil(eh*th/16),rh=23,nh=2,Cb=Math.ceil(rh*nh/16);var ih={};Qc(ih,{U_ANGLE1:()=>uh,U_ANGLE2:()=>fh,U_ANGLE3:()=>hh,U_EFFECTS:()=>gh,U_EVENT:()=>bh,U_FRAME:()=>mh,U_MODEL:()=>oh,U_MODEL2:()=>vh,U_MODEL3:()=>Sh,U_MODEL4:()=>wh,U_MOREBITS:()=>_h,U_NUMBER:()=>sh,U_ORIGIN1:()=>lh,U_ORIGIN2:()=>ch,U_ORIGIN3:()=>dh,U_REMOVE:()=>Ah,U_RENDERFX:()=>yh,U_SKIN:()=>ph,U_SOLID:()=>xh,U_SOUND:()=>ah});var sh=1,oh=2,ah=4,lh=8,ch=16,dh=32,uh=64,fh=128,hh=256,mh=512,ph=1024,gh=2048,yh=4096,xh=8192,bh=16384,_h=32768,vh=1,Sh=2,wh=4,Ah=32768;var Xr=class{constructor(e){e instanceof Uint8Array?this.view=new DataView(e.buffer,e.byteOffset,e.byteLength):this.view=new DataView(e),this.offset=0,this.length=this.view.byteLength}getPosition(){return this.offset}getReadPosition(){return this.offset}getLength(){return this.length}getRemaining(){return this.length-this.offset}seek(e){if(e<0||e>this.length)throw new Error(`Seek out of bounds: ${e} (length: ${this.length})`);this.offset=e}setReadPosition(e){this.seek(e)}hasMore(){return this.offset<this.length}hasBytes(e){return this.offset+e<=this.length}readChar(){let e=this.view.getInt8(this.offset);return this.offset+=1,e}readByte(){let e=this.view.getUint8(this.offset);return this.offset+=1,e}readShort(){let e=this.view.getInt16(this.offset,!0);return this.offset+=2,e}readUShort(){let e=this.view.getUint16(this.offset,!0);return this.offset+=2,e}readLong(){let e=this.view.getInt32(this.offset,!0);return this.offset+=4,e}readULong(){let e=this.view.getUint32(this.offset,!0);return this.offset+=4,e}readFloat(){let e=this.view.getFloat32(this.offset,!0);return this.offset+=4,e}readString(){let e="";for(;this.offset<this.length;){let t=this.readChar();if(t===-1||t===0)break;e+=String.fromCharCode(t)}return e}readStringLine(){let e="";for(;this.offset<this.length;){let t=this.readChar();if(t===-1||t===0||t===10)break;e+=String.fromCharCode(t)}return e}readCoord(){return this.readShort()*(1/8)}readAngle(){return this.readChar()*(360/256)}readAngle16(){return this.readShort()*360/65536}readData(e){if(this.offset+e>this.length)throw new Error(`Read out of bounds: ${this.offset+e} (length: ${this.length})`);let t=new Uint8Array(this.view.buffer,this.view.byteOffset+this.offset,e);return this.offset+=e,new Uint8Array(t)}readPos(e){e.x=this.readCoord(),e.y=this.readCoord(),e.z=this.readCoord()}readDir(e){let t=this.readByte();if(t>=162){e.x=0,e.y=0,e.z=0;return}let r=Vr[t];e.x=r[0],e.y=r[1],e.z=r[2]}},tl=class{constructor(e=1400){typeof e=="number"?(this.buffer=new Uint8Array(e),this.fixed=!1):(this.buffer=e,this.fixed=!0),this.view=new DataView(this.buffer.buffer,this.buffer.byteOffset,this.buffer.byteLength),this.offset=0}ensureSpace(e){if(this.offset+e>this.buffer.byteLength){if(this.fixed)throw new Error(`Buffer overflow: capacity ${this.buffer.byteLength}, needed ${this.offset+e}`);let t=Math.max(this.buffer.byteLength*2,this.offset+e),r=new Uint8Array(t);r.set(this.buffer),this.buffer=r,this.view=new DataView(this.buffer.buffer,this.buffer.byteOffset,this.buffer.byteLength)}}writeByte(e){this.ensureSpace(1),this.view.setUint8(this.offset,e),this.offset+=1}writeChar(e){this.ensureSpace(1),this.view.setInt8(this.offset,e),this.offset+=1}writeShort(e){this.ensureSpace(2),this.view.setInt16(this.offset,e,!0),this.offset+=2}writeLong(e){this.ensureSpace(4),this.view.setInt32(this.offset,e,!0),this.offset+=4}writeFloat(e){this.ensureSpace(4),this.view.setFloat32(this.offset,e,!0),this.offset+=4}writeString(e){let t=e.length;this.ensureSpace(t+1);for(let r=0;r<t;r++)this.view.setUint8(this.offset+r,e.charCodeAt(r));this.view.setUint8(this.offset+t,0),this.offset+=t+1}writeCoord(e){this.writeShort(Math.trunc(e*8))}writeAngle(e){this.writeByte(Math.trunc(e*256/360)&255)}writeAngle16(e){this.writeShort(Math.trunc(e*65536/360)&65535)}writePos(e){this.writeCoord(e.x),this.writeCoord(e.y),this.writeCoord(e.z)}writeDir(e){let t=-1,r=0;if(e.x===0&&e.y===0&&e.z===0){this.writeByte(0);return}for(let n=0;n<Vr.length;n++){let i=Vr[n],s=e.x*i[0]+e.y*i[1]+e.z*i[2];s>t&&(t=s,r=n)}this.writeByte(r)}getData(){return this.buffer.slice(0,this.offset)}getBuffer(){return this.buffer}getOffset(){return this.offset}reset(){this.offset=0}};var Gr=class me{constructor(){this.qport=0,this.incomingSequence=0,this.outgoingSequence=0,this.incomingAcknowledged=0,this.incomingReliableAcknowledged=!1,this.incomingReliableSequence=0,this.outgoingReliableSequence=0,this.reliableLength=0,this.fragmentSendOffset=0,this.fragmentBuffer=null,this.fragmentLength=0,this.fragmentReceived=0,this.lastReceived=0,this.lastSent=0,this.remoteAddress=null,this.reliableMessage=new tl(me.MAX_RELIABLE_BUFFER);let t=Date.now();this.lastReceived=t,this.lastSent=t,this.qport=Math.floor(Math.random()*65536)}setup(t,r=null){this.qport=t,this.remoteAddress=r,this.reset()}reset(){this.incomingSequence=0,this.outgoingSequence=0,this.incomingAcknowledged=0,this.incomingReliableAcknowledged=!1,this.incomingReliableSequence=0,this.outgoingReliableSequence=0,this.reliableLength=0,this.reliableMessage.reset(),this.fragmentSendOffset=0,this.fragmentBuffer=null,this.fragmentLength=0,this.fragmentReceived=0,this.lastReceived=Date.now(),this.lastSent=Date.now()}transmit(t){this.outgoingSequence++,this.lastSent=Date.now();let r=0,n=!1,i=0;this.reliableLength>0&&(this.reliableLength>me.FRAGMENT_SIZE?(n=!0,this.fragmentSendOffset>=this.reliableLength&&(this.fragmentSendOffset=0),r=this.reliableLength-this.fragmentSendOffset,r>me.FRAGMENT_SIZE&&(r=me.FRAGMENT_SIZE),i=this.fragmentSendOffset,this.fragmentSendOffset+=r):r=this.reliableLength);let s=me.PACKET_HEADER,o=r>0?2+(n?8:0):0,a=t?t.length:0;s+o+r+a>me.MAX_MSGLEN&&(a=me.MAX_MSGLEN-s-o-r,a<0&&(a=0));let c=new ArrayBuffer(s+o+r+a),l=new DataView(c),d=new Uint8Array(c),f=this.outgoingSequence;r>0&&(f|=2147483648,(this.outgoingReliableSequence&1)!==0&&(f|=1073741824)),l.setUint32(0,f,!0);let u=this.incomingSequence;(this.incomingReliableSequence&1)!==0&&(u|=2147483648),l.setUint32(4,u,!0),l.setUint16(8,this.qport,!0);let h=s;if(r>0){let m=r;n&&(m|=32768),l.setUint16(h,m,!0),h+=2,n&&(l.setUint32(h,i,!0),h+=4,l.setUint32(h,this.reliableLength,!0),h+=4);let p=this.reliableMessage.getBuffer().subarray(i,i+r);d.set(p,h),h+=r}if(t&&a>0){let m=t.slice(0,a);d.set(m,h)}return d}process(t){if(t.length<me.PACKET_HEADER)return null;this.lastReceived=Date.now();let r=new DataView(t.buffer,t.byteOffset,t.byteLength),n=r.getUint32(0,!0),i=r.getUint32(4,!0),s=r.getUint16(8,!0);if(this.qport!==s)return null;let o=n&1073741823;if((o-this.incomingSequence|0)<=0)return null;this.incomingSequence=o;let a=i&2147483647,c=(i&2147483648)!==0;if(a>this.incomingAcknowledged&&(this.incomingAcknowledged=a),this.reliableLength>0){let m=c?1:0,g=this.outgoingReliableSequence&1;m!==g&&(this.reliableLength=0,this.reliableMessage.reset(),this.outgoingReliableSequence^=1,this.fragmentSendOffset=0)}let l=(n&2147483648)!==0,d=(n&1073741824)!==0?1:0,f=me.PACKET_HEADER,u=null;if(l){if(f+2>t.byteLength)return null;let m=r.getUint16(f,!0);f+=2;let g=(m&32768)!==0;m&=32767;let p=this.incomingReliableSequence&1;if(d===p)if(g){if(f+8>t.byteLength)return null;let y=r.getUint32(f,!0);f+=4;let _=r.getUint32(f,!0);if(f+=4,_>me.MAX_RELIABLE_BUFFER)return console.warn(`NetChan: received invalid fragment total ${_} > ${me.MAX_RELIABLE_BUFFER}`),null;if((!this.fragmentBuffer||this.fragmentBuffer.length!==_)&&(this.fragmentBuffer=new Uint8Array(_),this.fragmentLength=_,this.fragmentReceived=0),f+m>t.byteLength)return null;let b=t.subarray(f,f+m);y===this.fragmentReceived&&y+m<=_&&(this.fragmentBuffer.set(b,y),this.fragmentReceived+=m,this.fragmentReceived>=_&&(u=this.fragmentBuffer,this.incomingReliableSequence++,this.fragmentBuffer=null,this.fragmentLength=0,this.fragmentReceived=0))}else{if(this.incomingReliableSequence++,f+m>t.byteLength)return null;u=t.slice(f,f+m)}f+=m}let h=t.slice(f);if(u&&u.length>0){let m=u.length+h.length,g=new Uint8Array(m);return g.set(u,0),g.set(h,u.length),g}return h||new Uint8Array(0)}canSendReliable(){return this.reliableLength===0}writeReliableByte(t){if(this.reliableLength+1>me.MAX_RELIABLE_BUFFER)throw new Error("NetChan reliable buffer overflow");this.reliableMessage.writeByte(t),this.reliableLength++}writeReliableShort(t){if(this.reliableLength+2>me.MAX_RELIABLE_BUFFER)throw new Error("NetChan reliable buffer overflow");this.reliableMessage.writeShort(t),this.reliableLength+=2}writeReliableLong(t){if(this.reliableLength+4>me.MAX_RELIABLE_BUFFER)throw new Error("NetChan reliable buffer overflow");this.reliableMessage.writeLong(t),this.reliableLength+=4}writeReliableString(t){let r=t.length+1;if(this.reliableLength+r>me.MAX_RELIABLE_BUFFER)throw new Error("NetChan reliable buffer overflow");this.reliableMessage.writeString(t),this.reliableLength+=r}getReliableData(){return this.reliableLength===0?new Uint8Array(0):this.reliableMessage.getBuffer().subarray(0,this.reliableLength)}needsKeepalive(t){return t-this.lastSent>1e3}isTimedOut(t,r=3e4){return t-this.lastReceived>r}};Gr.MAX_MSGLEN=1400;Gr.FRAGMENT_SIZE=1024;Gr.PACKET_HEADER=10;Gr.HEADER_OVERHEAD=Gr.PACKET_HEADER+2;Gr.MAX_RELIABLE_BUFFER=262144;var dd=(e=>(e[e.Bullets=0]="Bullets",e[e.Shells=1]="Shells",e[e.Rockets=2]="Rockets",e[e.Grenades=3]="Grenades",e[e.Cells=4]="Cells",e[e.Slugs=5]="Slugs",e[e.MagSlugs=6]="MagSlugs",e[e.Trap=7]="Trap",e[e.Flechettes=8]="Flechettes",e[e.Tesla=9]="Tesla",e[e.Disruptor=10]="Disruptor",e[e.Prox=11]="Prox",e[e.Nuke=12]="Nuke",e[e.Rounds=13]="Rounds",e))(dd||{}),Rb=Object.keys(dd).length/2;var qn=32,at=(e=>(e[e.Auto=0]="Auto",e[e.Weapon=1]="Weapon",e[e.Voice=2]="Voice",e[e.Item=3]="Item",e[e.Body=4]="Body",e[e.Aux=5]="Aux",e[e.Footstep=6]="Footstep",e[e.Aux3=7]="Aux3",e[e.NoPhsAdd=8]="NoPhsAdd",e[e.Reliable=16]="Reliable",e[e.ForcePos=32]="ForcePos",e))(at||{}),rl=-1,jn=0,nl=1,il=2,ao=3,Bt=80,sl=.003;function Ot(e){return e===ao?e*.001:e*5e-4}function hr(e){let t=Ot(e);return t<=0?Number.POSITIVE_INFINITY:Bt+1/t}var Qn=class{constructor({name:t,defaultValue:r,description:n,flags:i=io.None,onChange:s}){this.modifiedCount=0;this.name=t,this.defaultValue=r,this.description=n,this.flags=i,this._value=r,this.onChange=s}get string(){return this._value}get number(){return Number(this._value)}get integer(){return Math.trunc(this.number)}get boolean(){return!!this.integer}set(t){if(this.flags&io.Latch){if(t===this._value){this.latched=void 0;return}if(this.latched===t)return;this.latched!==t&&(this.latched=t);return}this.apply(t)}reset(){this.latched=void 0,this.apply(this.defaultValue)}applyLatched(){if(this.latched===void 0)return!1;let t=this.latched;return this.latched=void 0,t===this._value?!1:(this.apply(t),!0)}apply(t){if(this._value===t)return;let r=this._value;this._value=t,this.modifiedCount+=1,this.onChange?.(this,r)}},Kr=class{constructor(){this.cvars=new Map}register(t){let r=this.cvars.get(t.name);if(r)return r;let n=t.onChange,i=(o,a)=>{n?.(o,a),this.onCvarChange?.(o.name,o.string)},s=new Qn({...t,onChange:i});return this.cvars.set(t.name,s),s}get(t){return this.cvars.get(t)}getCvar(t){return this.get(t)}setValue(t,r){let n=this.get(t);if(!n)throw new Error(`Unknown cvar: ${t}`);return n.set(r),n}setCvar(t,r){this.setValue(t,r)}resetAll(){for(let t of this.cvars.values())t.reset()}applyLatched(){let t=!1;for(let r of this.cvars.values())t=r.applyLatched()||t;return t}list(){return[...this.cvars.values()].sort((t,r)=>t.name.localeCompare(r.name))}listCvars(){return this.list().map(t=>({name:t.name,value:t.string,defaultValue:t.defaultValue,flags:t.flags,description:t.description}))}};var $r=class{constructor(t,r,n={}){this.game=t;this.client=r;this.started=!1;this.paused_=!1;this.commands=new Hr;this.cvars=new Kr;this.stepSimulation=t=>{this.previousFrame=this.latestFrame,this.latestFrame=this.game.frame(t,this.latestCommand)};this.renderClient=t=>{this.client&&(this.latestCommand=this.client.render({...t,previous:this.previousFrame,latest:this.latestFrame}))};let i=n.loop?.now?.()??Date.now();this.startTimeMs=n.startTimeMs??n.loop?.startTimeMs??i,this.loop=new fr({simulate:this.stepSimulation,render:this.renderClient},{...n.loop,startTimeMs:this.startTimeMs}),this.commands.registerAutocompleteProvider(()=>this.cvars.list().map(s=>s.name))}start(){if(!this.started){try{this.latestFrame=this.game.init(this.startTimeMs)??this.latestFrame,this.client?.init(this.latestFrame)}catch(t){throw this.game.shutdown(),this.client?.shutdown(),t}this.started=!0,this.paused_=!1,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,this.paused_=!1)}setPaused(t){this.paused_=t,t?this.loop.stop():this.started&&this.loop.start()}get paused(){return this.paused_}pump(t){this.loop.pump(t)}getLatestFrame(){return this.latestFrame}isRunning(){return this.loop.isRunning()}};function Mh(e){if(e<0||e>=j.MaxConfigStrings)throw new RangeError(`Configstring index ${e} is out of range (0-${j.MaxConfigStrings-1})`)}function ud(e,t){let r=cd(e);if(t.length>r)throw new RangeError(`Configstring ${e} exceeds maximum length (${t.length} > ${r}); limit is ${$n} chars per slot`)}var Zr=class{constructor(){this.values=new Map;this.modelCursor=j.Models;this.soundCursor=j.Sounds;this.imageCursor=j.Images;this.lightCursor=j.Lights;this.shadowLightCursor=j.ShadowLights;this.itemCursor=j.Items;this.playerSkinCursor=j.PlayerSkins;this.generalCursor=j.General}set(t,r){return Mh(t),ud(t,r),this.values.set(t,r),t}get(t){return this.values.get(t)}getName(t){return this.get(t)}getAll(){let t=new Array(ld).fill("");for(let[r,n]of this.values.entries())t[r]=n;return t}modelIndex(t){return this.register(t,j.Models,qa,"modelCursor")}soundIndex(t){return this.register(t,j.Sounds,oo,"soundCursor")}findSoundIndex(t){for(let r=j.Sounds;r<j.Sounds+oo;r+=1)if(this.values.get(r)===t)return r}imageIndex(t){return this.register(t,j.Images,ja,"imageCursor")}lightIndex(t){return this.register(t,j.Lights,Ya,"lightCursor")}shadowLightIndex(t){return this.register(t,j.ShadowLights,el,"shadowLightCursor")}itemIndex(t){return this.register(t,j.Items,Qa,"itemCursor")}playerSkinIndex(t){return this.register(t,j.PlayerSkins,so,"playerSkinCursor")}generalIndex(t){return this.register(t,j.General,Ja,"generalCursor")}register(t,r,n,i){for(let a=r;a<r+n;a+=1)if(this.values.get(a)===t)return a;let s=this[i],o=r+n;if(s>=o)throw new RangeError(`Out of configstring slots for range starting at ${r}`);return ud(s,t),this.values.set(s,t),this[i]=s+1,s}};var Yr=class{constructor(t){this.registry=t.registry,this.system=t.system,this.music=t.music,this.client=t.client}soundindex(t){return this.registry.registerName(t)}sound(t,r,n,i,s,o){this.system.play({entity:t,channel:r,soundIndex:n,volume:i,attenuation:s,timeOffsetMs:o}),this.triggerSubtitle(n)}positioned_sound(t,r,n,i){this.system.positionedSound(t,r,n,i),this.triggerSubtitle(r)}loop_sound(t,r,n,i,s){let o=this.system.play({entity:t,channel:r,soundIndex:n,volume:i,attenuation:s,looping:!0});return this.triggerSubtitle(n),o}stop_entity_sounds(t){this.system.stopEntitySounds(t)}setPlaybackRate(t){this.system.setPlaybackRate(t)}set_listener(t){this.system.setListener(t)}play_music(t,r=!0){return this.music?this.music.play(t,{loop:r}):Promise.resolve()}play_track(t,r=!0){return this.music?this.music.playTrack(t):Promise.resolve()}pause_music(){this.music?.pause()}resume_music(){return this.music?.resume()??Promise.resolve()}stop_music(){this.music?.stop()}set_music_volume(t){this.music?.setVolume(t)}play_ambient(t,r,n){this.system.ambientSound(t,r,n),this.triggerSubtitle(r)}play_channel(t){this.system.play({...t}),this.triggerSubtitle(t.soundIndex)}triggerSubtitle(t){if(!this.client)return;let r=this.registry.getName(t);if(!r)return;let n=r.match(/\[(.*?)\]/);n&&this.client.showSubtitle(n[1],r)}};var Jn=class{constructor(t,r){this.engine=t;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(t){this.host.pump(t)}getLatestFrame(){return this.host.getLatestFrame()}isRunning(){return this.started&&this.host.isRunning()}};function fd(e,t,r,n,i){let s=new Yr({...n,client:r}),o=new $r(t,r,i);return{runtime:new Jn(e,o),audio:s}}var Eh="PACK";function Lh(e,t,r){let n=[];for(let i=0;i<r;i+=1){let s=e.getUint8(t+i);if(s===0)break;n.push(s)}return String.fromCharCode(...n)}function se(e){return e.replace(/\\/g,"/").replace(/^\/+/,"").toLowerCase()}function Th(){let e=new Uint32Array(256);for(let t=0;t<256;t+=1){let r=t;for(let n=0;n<8;n+=1)r=(r&1)!==0?3988292384^r>>>1:r>>>1;e[t]=r>>>0}return e}var Ih=Th();function hd(e){let t=4294967295;for(let r=0;r<e.length;r+=1){let n=e[r];t=Ih[(t^n)&255]^t>>>8}return(t^4294967295)>>>0}var Ve=class extends Error{},qr=class e{constructor(t,r,n,i){this.name=t;this.buffer=r;this.entries=new Map(n.map(s=>[s.name,s])),this.checksum=i,this.size=r.byteLength}static fromArrayBuffer(t,r){let n=new DataView(r);if(r.byteLength<12)throw new Ve("PAK buffer too small to contain header");let i=String.fromCharCode(n.getUint8(0),n.getUint8(1),n.getUint8(2),n.getUint8(3));if(i!==Eh)throw new Ve(`Invalid PAK header magic: ${i}`);let s=n.getInt32(4,!0),o=n.getInt32(8,!0);if(s<12)throw new Ve(`Invalid directory offset: ${s}`);if(o<0||o%64!==0)throw new Ve(`Invalid directory length: ${o}`);if(s+o>r.byteLength)throw new Ve("Directory exceeds buffer length");let c=o/64,l=[],d=new Map;for(let f=0;f<c;f+=1){let u=s+f*64,h=Lh(n,u,56),m=se(h),g=n.getInt32(u+56,!0),p=n.getInt32(u+60,!0);if(g<0||p<0||g+p>r.byteLength)throw new Ve(`Invalid entry bounds for ${h||"<unnamed>"} (offset=${g}, length=${p})`);if(!m)throw new Ve(`Entry ${f} has an empty name`);let y={name:m,offset:g,length:p};d.set(m,y)}return l.push(...d.values()),new e(t,r,l,hd(new Uint8Array(r)))}getEntry(t){return this.entries.get(se(t))}listEntries(){return Array.from(this.entries.values())}readFile(t){let r=this.getEntry(t);if(!r)throw new Ve(`File not found in PAK: ${t}`);return new Uint8Array(this.buffer,r.offset,r.length)}validate(){return{checksum:this.checksum,entries:this.listEntries()}}};function md(e){return hd(new Uint8Array(e))}var lo=12,pd=64,co=class e{constructor(){this.files=new Map}addFile(t,r){let n=se(t);if(!n)throw new Error(`Invalid path: ${t}`);if(n.length>56)throw new Error(`Path too long: ${t} (max 56 chars)`);this.files.set(n,r)}removeFile(t){let r=se(t);return this.files.delete(r)}build(){let t=lo,r=Array.from(this.files.keys()).sort(),n=r.length*pd,i=0;for(let f of r)i+=this.files.get(f).byteLength;let s=lo+i+n,o=new Uint8Array(s),a=new DataView(o.buffer);a.setUint8(0,80),a.setUint8(1,65),a.setUint8(2,67),a.setUint8(3,75);let c=lo+i;a.setInt32(4,c,!0),a.setInt32(8,n,!0);let l=lo,d=c;for(let f of r){let u=this.files.get(f);o.set(u,l);for(let h=0;h<56;h++)h<f.length?a.setUint8(d+h,f.charCodeAt(h)):a.setUint8(d+h,0);a.setInt32(d+56,l,!0),a.setInt32(d+60,u.byteLength,!0),l+=u.byteLength,d+=pd}return o}static buildFromEntries(t){let r=new e;for(let[n,i]of t)r.addFile(n,i);return r.build()}};var ol=(o=>(o.Texture="texture",o.Sound="sound",o.Model="model",o.Map="map",o.Sprite="sprite",o.ConfigString="configString",o))(ol||{}),uo=class{constructor(){this.tracking=!1;this.entries=[];this.currentFrame=0;this.currentTime=0}startTracking(){this.tracking=!0,this.entries=[]}stopTracking(){this.tracking=!1;let t={byFrame:new Map,byTime:new Map,uniqueResources:new Map};for(let r of this.entries){t.byFrame.has(r.frame)||t.byFrame.set(r.frame,[]),t.byFrame.get(r.frame).push(r),t.byTime.has(r.timestamp)||t.byTime.set(r.timestamp,[]),t.byTime.get(r.timestamp).push(r);let n=`${r.type}:${r.path}`;t.uniqueResources.has(n)||t.uniqueResources.set(n,r)}return t}recordLoad(t,r,n,i){this.tracking&&this.entries.push({type:t,path:r,timestamp:this.currentTime,frame:this.currentFrame,size:n,pakSource:i})}setCurrentFrame(t){this.currentFrame=t}setCurrentTime(t){this.currentTime=t}};var fo=class{constructor(t=[]){this.mounts=[];this.files=new Map;t.forEach(r=>this.mountPak(r))}mountPak(t,r=0){let n=this.mounts.findIndex(i=>i.pak===t);n!==-1&&this.mounts.splice(n,1),this.mounts.push({pak:t,priority:r}),this.mounts.sort((i,s)=>s.priority-i.priority);for(let i of t.listEntries()){let s=se(i.name),o={archive:t,entry:i,priority:r};this.files.has(s)||this.files.set(s,[]);let a=this.files.get(s),c=a.findIndex(l=>l.archive===t);c!==-1&&a.splice(c,1),a.unshift(o),a.sort((l,d)=>d.priority-l.priority)}}setPriority(t,r){this.mountPak(t,r)}getPaks(){return[...this.mounts].sort((t,r)=>t.priority-r.priority)}get mountedPaks(){return this.mounts.map(t=>t.pak)}hasFile(t){return this.files.has(se(t))}getSource(t){let r=this.files.get(se(t));if(!(!r||r.length===0))return r[0]}stat(t){let r=this.getSource(t);if(r)return{path:r.entry.name,size:r.entry.length,sourcePak:r.archive.name}}getFileMetadata(t){let r=this.getSource(t);if(r)return{path:r.entry.name,size:r.entry.length,sourcePak:r.archive.name,offset:r.entry.offset}}async readFile(t){let r=this.getSource(t);if(!r)throw new Error(`File not found in VFS: ${t}`);return r.archive.readFile(t)}async readBinaryFile(t){return this.readFile(t)}streamFile(t,r=1024*1024){let n=this.getSource(t);if(!n)throw new Error(`File not found in VFS: ${t}`);let{archive:i,entry:s}=n,o=i.readFile(t),a=0,c=o.length;return new ReadableStream({pull(l){if(a>=c){l.close();return}let d=Math.min(a+r,c),f=o.slice(a,d);a=d,l.enqueue(f)}})}async readTextFile(t){let r=await this.readFile(t);return new TextDecoder("utf-8").decode(r)}list(t=""){let r=se(t).replace(/\/+$|^\//g,""),n=[],i=new Set,s=r?`${r}/`:"";for(let[o,a]of this.files){let c=a[0];if(r&&!c.entry.name.startsWith(s))continue;let l=r?c.entry.name.slice(s.length):c.entry.name,d=l.indexOf("/");d===-1?n.push({path:c.entry.name,size:c.entry.length,sourcePak:c.archive.name}):i.add(l.slice(0,d))}return n.sort((o,a)=>o.path.localeCompare(a.path)),{files:n,directories:[...i].sort()}}async listDirectory(t){return this.list(t).files}findByExtension(t){let r=t.startsWith(".")?t.toLowerCase():`.${t.toLowerCase()}`,n=[];for(let[i,s]of this.files){let o=s[0];o.entry.name.toLowerCase().endsWith(r)&&n.push({path:o.entry.name,size:o.entry.length,sourcePak:o.archive.name})}return n.sort((i,s)=>i.path.localeCompare(s.path))}listByExtension(t){let r=new Set(t.map(i=>i.startsWith(".")?i.toLowerCase():`.${i.toLowerCase()}`)),n=[];for(let[i,s]of this.files){let o=s[0],a=o.entry.name.toLowerCase();for(let c of r)if(a.endsWith(c)){n.push({path:o.entry.name,size:o.entry.length,sourcePak:o.archive.name});break}}return n.sort((i,s)=>i.path.localeCompare(s.path))}searchFiles(t){let r=[];for(let[n,i]of this.files){let s=i[0];t.test(s.entry.name)&&r.push({path:s.entry.name,size:s.entry.length,sourcePak:s.archive.name})}return r.sort((n,i)=>n.path.localeCompare(i.path))}getPakInfo(){return this.mounts.map(t=>({filename:t.pak.name,entryCount:t.pak.listEntries().length,totalSize:t.pak.size}))}getDirectoryTree(){let t={name:"",path:"",files:[],directories:[]},r=new Map;r.set("",t);let n=Array.from(this.files.values()).map(i=>{let s=i[0];return{path:s.entry.name,size:s.entry.length,sourcePak:s.archive.name}}).sort((i,s)=>i.path.localeCompare(s.path));for(let i of n){let s=i.path.split("/"),o=s.pop(),a="",c=t;for(let l of s){let d=a;a=a?`${a}/${l}`:l;let f=r.get(a);f||(f={name:l,path:a,files:[],directories:[]},c.directories.push(f),r.set(a,f)),c=f}c.files.push(i)}return t}};var al=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"}]),mr=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"}},ho=class{constructor(t=al){this.known=new Map;t.forEach(r=>this.known.set(this.normalizePakName(r.name),r))}validateArchive(t,r){let n=this.normalizePakName(r??("name"in t?t.name:"unknown")),i=t.checksum,s="size"in t?t.size:void 0,o=this.known.get(n);return o?o.checksum!==i?{name:n,checksum:i,expectedChecksum:o.checksum,status:"mismatch",size:s,description:o.description}:{name:n,checksum:i,expectedChecksum:o.checksum,status:"valid",size:s,description:o.description}:{name:n,checksum:i,status:"unknown",size:s}}assertValid(t,r){let n=this.validateArchive(t,r);if(n.status==="mismatch")throw new mr(n);return n}normalizePakName(t){let r=se(t),n=r.split("/"),i=n.pop()??r,s=n.pop();return s?`${i}@${s}`:i}};var Nt=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 Ch(e,t){if(typeof e.arrayBuffer=="function"){let r=await e.arrayBuffer();return t?.({file:"blob",loadedBytes:r.byteLength,totalBytes:r.byteLength,state:"reading"}),r}if(typeof FileReader<"u")return new Promise((r,n)=>{let i=new FileReader;i.onerror=()=>n(i.error??new Error("Unknown FileReader error")),i.onprogress=s=>{t?.({file:"blob",loadedBytes:s.loaded,totalBytes:s.total||e.size,state:"reading"})},i.onload=()=>{let s=i.result;s instanceof ArrayBuffer?r(s):n(new Error("Unexpected FileReader result"))},i.readAsArrayBuffer(e)});if(typeof Response<"u"){let r=await new Response(e).arrayBuffer();return t?.({file:"blob",loadedBytes:r.byteLength,totalBytes:r.byteLength,state:"reading"}),r}if(typeof e.stream=="function"){let r=e.stream().getReader(),n=[],i=0;for(;;){let{done:a,value:c}=await r.read();if(a)break;if(!c)continue;let l=c;n.push(l),i+=l.byteLength,t?.({file:"blob",loadedBytes:i,totalBytes:e.size,state:"reading"})}let s=new Uint8Array(i),o=0;for(let a of n)s.set(a,o),o+=a.byteLength;return s.buffer}throw new Nt("blob",new Error("Unsupported Blob type"))}async function Rh(e,t){if(e.data instanceof ArrayBuffer)return t?.({file:e.name,loadedBytes:e.data.byteLength,totalBytes:e.data.byteLength,state:"reading"}),e.data;if(e.data instanceof Blob){let n=e.data.size;return Ch(e.data,i=>t?.({...i,file:e.name,totalBytes:n}))}let r=e.data.buffer.slice(e.data.byteOffset,e.data.byteOffset+e.data.byteLength);return t?.({file:e.name,loadedBytes:r.byteLength,totalBytes:r.byteLength,state:"reading"}),r}async function mo(e,t,r){let n=typeof r=="function"?{onProgress:r}:r??{},i=n.persistIndexes??!!n.pakIndexStore,s=n.enforceValidation??!!n.validator,o=n.allowUnknownPaks??!0,a=n.stopOnError??!1,c=[];for(let l of t)try{let d=await Rh(l,n.onProgress),f=qr.fromArrayBuffer(l.name,d),u=n.validator?.validateArchive(f);if(u){n.onValidationResult?.(u);let h=u.status==="mismatch",m=u.status==="unknown";if(h&&s||m&&!o){let g=new mr(u);if(n.onError?.(l.name,g),a)throw new Nt(l.name,g);c.push({archive:f,mounted:!1,validation:u});continue}}if(e.mountPak(f),i&&n.pakIndexStore)try{await n.pakIndexStore.persist(f)}catch(h){if(n.onError?.(l.name,h),a)throw new Nt(l.name,h)}n.onProgress?.({file:l.name,loadedBytes:d.byteLength,totalBytes:d.byteLength,state:"parsed"}),c.push({archive:f,mounted:!0,validation:u})}catch(d){if(n.onProgress?.({file:l.name,loadedBytes:0,totalBytes:0,state:"error"}),n.onError?.(l.name,d),a)throw new Nt(l.name,d)}return c}var Ut=class{constructor(t){this.capacity=t;this.map=new Map;if(t<=0)throw new RangeError("LRU cache capacity must be greater than zero")}get size(){return this.map.size}has(t){return this.map.has(t)}get(t){let r=this.map.get(t);if(r!==void 0)return this.map.delete(t),this.map.set(t,r),r}set(t,r){if(this.map.has(t)&&this.map.delete(t),this.map.set(t,r),this.map.size>this.capacity){let n=this.map.keys().next();n.done||this.map.delete(n.value)}}delete(t){return this.map.delete(t)}clear(){this.map.clear()}entries(){return Array.from(this.map.entries()).reverse().map(([t,r])=>({key:t,value:r}))}};function kh(e){return Array.isArray(e)?e:Array.from(e)}function ll(e){return kh(e).map(t=>({name:t.name,data:t}))}async function gd(e,t,r){let n=ll(t);return mo(e,n,r??{})}function yd(e,t){let r=i=>{i.preventDefault(),i.dataTransfer?.dropEffect&&(i.dataTransfer.dropEffect="copy")},n=i=>{i.preventDefault();let s=i.dataTransfer?.files;s&&s.length>0&&t(Array.from(s))};return e.addEventListener("dragover",r),e.addEventListener("drop",n),()=>{e.removeEventListener("dragover",r),e.removeEventListener("drop",n)}}function xd(e,t){let r=n=>{let i=n.target;!i||!i.files||i.files.length===0||(t(i.files),i.value="")};return e.addEventListener("change",r),()=>e.removeEventListener("change",r)}var Fh="IBSP",Ph=38,_d=19,zh=8+_d*8;var Q=class extends Error{},jr=class{constructor(t){this.vfs=t}async load(t){let r=await this.vfs.readFile(t),n=new Uint8Array(r.byteLength);return n.set(r),ei(n.buffer)}};function ei(e){if(e.byteLength<zh)throw new Q("BSP too small to contain header");let t=new DataView(e),r=String.fromCharCode(t.getUint8(0),t.getUint8(1),t.getUint8(2),t.getUint8(3));if(r!==Fh)throw new Q(`Invalid BSP magic ${r}`);let n=t.getInt32(4,!0);if(n!==Ph)throw new Q(`Unsupported BSP version ${n}`);let i=new Map;for(let S=0;S<_d;S+=1){let M=t.getInt32(8+S*8,!0),L=t.getInt32(12+S*8,!0);if(M<0||L<0||M+L>e.byteLength)throw new Q(`Invalid lump bounds for index ${S}`);i.set(S,{offset:M,length:L})}let s={version:n,lumps:i},o=Bh(e,i.get(0)),a=Nh(e,i.get(1)),c=Uh(e,i.get(2)),l=Hh(e,i.get(4)),d=Vh(e,i.get(5)),f=Gh(e,i.get(6)),u=new Uint8Array(e,i.get(7).offset,i.get(7).length),h=Qh(f,i.get(7)),m=Wh(e,i.get(8)),g=Xh(e,i.get(11)),p=Kh(e,i.get(12)),y=$h(e,i.get(13)),_=Zh(e,i.get(14)),b=Yh(e,i.get(15)),x=qh(e,i.get(9),i.get(10),m),v=jh(e,i.get(3));return{header:s,entities:o,planes:a,vertices:c,nodes:l,texInfo:d,faces:f,lightMaps:u,lightMapInfo:h,leafs:m,leafLists:x,edges:g,surfEdges:p,models:y,brushes:_,brushSides:b,visibility:v,pickEntity(S){let M=null,L=1/0;for(let w of o.entities){let T=w.properties.model;if(!T||!T.startsWith("*"))continue;let F=parseInt(T.substring(1),10);if(isNaN(F)||F<0||F>=y.length)continue;let U=y[F],C=Dh(S.origin,S.direction,U.mins,U.maxs);C!==null&&C<L&&(L=C,M={entity:w,model:U,distance:C})}return M}}}function Dh(e,t,r,n){let i=0,s=1/0;for(let o=0;o<3;o++)if(Math.abs(t[o])<1e-8){if(e[o]<r[o]||e[o]>n[o])return null}else{let a=1/t[o],c=(r[o]-e[o])*a,l=(n[o]-e[o])*a;if(c>l){let d=c;c=l,l=d}if(i=Math.max(i,c),s=Math.min(s,l),i>s)return null}return i}function Bh(e,t){let r=new TextDecoder().decode(new Uint8Array(e,t.offset,t.length)),n=Oh(r),i=n.find(s=>s.classname==="worldspawn");return{raw:r,entities:n,worldspawn:i,getUniqueClassnames(){let s=new Set;for(let o of n)o.classname&&s.add(o.classname);return Array.from(s).sort()}}}function Oh(e){let t=[],r=/\{([^}]*)\}/gms,n;for(;(n=r.exec(e))!==null;){let i=n[1],s={},o=/"([^\"]*)"\s+"([^\"]*)"/g,a;for(;(a=o.exec(i))!==null;)s[a[1]]=a[2];t.push({classname:s.classname,properties:s})}return t}function Nh(e,t){let r=new DataView(e,t.offset,t.length),n=t.length/20;if(n%1!==0)throw new Q("Plane lump has invalid length");let i=[];for(let s=0;s<n;s+=1){let o=[r.getFloat32(s*20,!0),r.getFloat32(s*20+4,!0),r.getFloat32(s*20+8,!0)],a=r.getFloat32(s*20+12,!0),c=r.getInt32(s*20+16,!0);i.push({normal:o,dist:a,type:c})}return i}function Uh(e,t){let r=new DataView(e,t.offset,t.length),n=t.length/12;if(n%1!==0)throw new Q("Vertex lump has invalid length");let i=[];for(let s=0;s<n;s+=1)i.push([r.getFloat32(s*12,!0),r.getFloat32(s*12+4,!0),r.getFloat32(s*12+8,!0)]);return i}function Hh(e,t){let r=new DataView(e,t.offset,t.length),n=28,i=t.length/n;if(i%1!==0)throw new Q("Node lump has invalid length");let s=[];for(let o=0;o<i;o+=1){let a=o*n,c=r.getInt32(a,!0),l=[r.getInt32(a+4,!0),r.getInt32(a+8,!0)],d=[r.getInt16(a+12,!0),r.getInt16(a+14,!0),r.getInt16(a+16,!0)],f=[r.getInt16(a+18,!0),r.getInt16(a+20,!0),r.getInt16(a+22,!0)],u=r.getUint16(a+24,!0),h=r.getUint16(a+26,!0);s.push({planeIndex:c,children:l,mins:d,maxs:f,firstFace:u,numFaces:h})}return s}function Vh(e,t){let r=new DataView(e,t.offset,t.length),n=76,i=t.length/n;if(i%1!==0)throw new Q("TexInfo lump has invalid length");let s=[];for(let o=0;o<i;o+=1){let a=o*n,c=[r.getFloat32(a,!0),r.getFloat32(a+4,!0),r.getFloat32(a+8,!0)],l=r.getFloat32(a+12,!0),d=[r.getFloat32(a+16,!0),r.getFloat32(a+20,!0),r.getFloat32(a+24,!0)],f=r.getFloat32(a+28,!0),u=r.getInt32(a+32,!0),h=r.getInt32(a+36,!0),m=new Uint8Array(e,t.offset+a+40,32),g=new TextDecoder("utf-8").decode(m).replace(/\0.*$/,""),p=r.getInt32(a+72,!0);s.push({s:c,sOffset:l,t:d,tOffset:f,flags:u,value:h,texture:g,nextTexInfo:p})}return s}function Gh(e,t){let r=new DataView(e,t.offset,t.length),n=20,i=t.length/n;if(i%1!==0)throw new Q("Face lump has invalid length");let s=[];for(let o=0;o<i;o+=1){let a=o*n,c=r.getUint16(a,!0),l=r.getInt16(a+2,!0),d=r.getInt32(a+4,!0),f=r.getInt16(a+8,!0),u=r.getInt16(a+10,!0),h=[r.getUint8(a+12),r.getUint8(a+13),r.getUint8(a+14),r.getUint8(a+15)],m=r.getInt32(a+16,!0);s.push({planeIndex:c,side:l,firstEdge:d,numEdges:f,texInfo:u,styles:h,lightOffset:m})}return s}function Wh(e,t){let r=new DataView(e,t.offset,t.length),n=28,i=t.length/n;if(i%1!==0)throw new Q("Leaf lump has invalid length");let s=[];for(let o=0;o<i;o+=1){let a=o*n,c=r.getInt32(a,!0),l=r.getInt16(a+4,!0),d=r.getInt16(a+6,!0),f=[r.getInt16(a+8,!0),r.getInt16(a+10,!0),r.getInt16(a+12,!0)],u=[r.getInt16(a+14,!0),r.getInt16(a+16,!0),r.getInt16(a+18,!0)],h=r.getUint16(a+20,!0),m=r.getUint16(a+22,!0),g=r.getUint16(a+24,!0),p=r.getUint16(a+26,!0);s.push({contents:c,cluster:l,area:d,mins:f,maxs:u,firstLeafFace:h,numLeafFaces:m,firstLeafBrush:g,numLeafBrushes:p})}return s}function Xh(e,t){let r=new DataView(e,t.offset,t.length),n=4,i=t.length/n;if(i%1!==0)throw new Q("Edge lump has invalid length");let s=[];for(let o=0;o<i;o+=1){let a=o*n;s.push({vertices:[r.getUint16(a,!0),r.getUint16(a+2,!0)]})}return s}function Kh(e,t){let r=t.length/4;if(r%1!==0)throw new Q("SurfEdge lump has invalid length");let n=new DataView(e,t.offset,t.length),i=new Int32Array(r);for(let s=0;s<r;s+=1)i[s]=n.getInt32(s*4,!0);return i}function $h(e,t){let r=new DataView(e,t.offset,t.length),n=48;if(t.length%n!==0)throw new Q("Model lump has invalid length");let i=t.length/n,s=[];for(let o=0;o<i;o+=1){let a=o*n,c=[r.getFloat32(a,!0),r.getFloat32(a+4,!0),r.getFloat32(a+8,!0)],l=[r.getFloat32(a+12,!0),r.getFloat32(a+16,!0),r.getFloat32(a+20,!0)],d=[r.getFloat32(a+24,!0),r.getFloat32(a+28,!0),r.getFloat32(a+32,!0)],f=r.getInt32(a+36,!0),u=r.getInt32(a+40,!0),h=r.getInt32(a+44,!0);s.push({mins:c,maxs:l,origin:d,headNode:f,firstFace:u,numFaces:h})}return s}function Zh(e,t){let r=new DataView(e,t.offset,t.length),n=12,i=t.length/n;if(i%1!==0)throw new Q("Brush lump has invalid length");let s=[];for(let o=0;o<i;o+=1){let a=o*n;s.push({firstSide:r.getInt32(a,!0),numSides:r.getInt32(a+4,!0),contents:r.getInt32(a+8,!0)})}return s}function Yh(e,t){let r=new DataView(e,t.offset,t.length),n=4,i=t.length/n;if(i%1!==0)throw new Q("Brush side lump has invalid length");let s=[];for(let o=0;o<i;o+=1){let a=o*n;s.push({planeIndex:r.getUint16(a,!0),texInfo:r.getInt16(a+2,!0)})}return s}function qh(e,t,r,n){let i=[],s=[],o=t.length/2,a=r.length/2,c=new DataView(e,t.offset,t.length),l=new DataView(e,r.offset,r.length);for(let d of n){if(d.firstLeafFace+d.numLeafFaces>o)throw new Q("Leaf faces reference data past lump bounds");if(d.firstLeafBrush+d.numLeafBrushes>a)throw new Q("Leaf brushes reference data past lump bounds");let f=[];for(let h=0;h<d.numLeafFaces;h+=1)f.push(c.getUint16((d.firstLeafFace+h)*2,!0));let u=[];for(let h=0;h<d.numLeafBrushes;h+=1)u.push(l.getUint16((d.firstLeafBrush+h)*2,!0));i.push(f),s.push(u)}return{leafFaces:i,leafBrushes:s}}function jh(e,t){if(t.length===0)return;if(t.length<4)throw new Q("Visibility lump too small");let r=new DataView(e,t.offset,t.length),n=r.getInt32(0,!0),i=4+n*8;if(n<0||i>t.length)throw new Q("Visibility lump truncated");let s=4,o=[];for(let a=0;a<n;a+=1){let c=r.getInt32(s,!0),l=r.getInt32(s+4,!0);s+=8;let d=t.offset+c,f=t.offset+l,u=t.offset+t.length;if(c<0||l<0||d>=u||f>=u)throw new Q("Visibility offsets out of range");o.push({pvs:bd(e,d,n,t),phs:bd(e,f,n,t)})}return{numClusters:n,clusters:o}}function bd(e,t,r,n){let i=Math.ceil(r/8),s=new Uint8Array(i),o=new Uint8Array(e),a=t,c=0,l=n.offset+n.length;for(;c<i;){if(a>=l)throw new Q("Visibility data truncated");let d=o[a++];if(d!==0){s[c++]=d;continue}if(a>=l)throw new Q("Visibility run exceeds lump bounds");let f=o[a++];for(let u=0;u<f&&c<i;u+=1)s[c++]=0}return s}function Qh(e,t){return e.map(r=>{if(!(r.lightOffset<0))return{offset:r.lightOffset,length:Math.max(0,t.length-r.lightOffset)}})}function po(e,t,r){if(e.lightOffset<0||e.lightOffset>=t.byteLength)return;let n=t.byteLength-e.lightOffset,i=Math.min(r?.length??n,n);if(!(i<=0))return t.subarray(e.lightOffset,e.lightOffset+i)}var Jh=844121161,em=8,vd=68,tm=[{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}],pe=class extends Error{},Qr=class{constructor(t){this.vfs=t;this.cache=new Map}async load(t){if(this.cache.has(t))return this.cache.get(t);let r=await this.vfs.readFile(t),n=new Uint8Array(r.byteLength);n.set(r);let i=cl(n.buffer);return this.cache.set(t,i),i}get(t){return this.cache.get(t)}};function Sd(e,t,r){let n=[];for(let i=0;i<r;i+=1){let s=e.getUint8(t+i);if(s===0)break;n.push(s)}return String.fromCharCode(...n)}function ti(e,t,r,n){if(r!==0&&(t<vd||t+r>e.byteLength))throw new pe(`${n} section is out of bounds`)}function rm(e){if(e.byteLength<vd)throw new pe("MD2 buffer too small to contain header");let t=new DataView(e),r=t.getInt32(0,!0),n=t.getInt32(4,!0);if(r!==Jh)throw new pe(`Invalid MD2 ident: ${r}`);if(n!==em)throw new pe(`Unsupported MD2 version: ${n}`);let i={ident:r,version:n,skinWidth:t.getInt32(8,!0),skinHeight:t.getInt32(12,!0),frameSize:t.getInt32(16,!0),numSkins:t.getInt32(20,!0),numVertices:t.getInt32(24,!0),numTexCoords:t.getInt32(28,!0),numTriangles:t.getInt32(32,!0),numGlCommands:t.getInt32(36,!0),numFrames:t.getInt32(40,!0),offsetSkins:t.getInt32(44,!0),offsetTexCoords:t.getInt32(48,!0),offsetTriangles:t.getInt32(52,!0),offsetFrames:t.getInt32(56,!0),offsetGlCommands:t.getInt32(60,!0),offsetEnd:t.getInt32(64,!0),magic:r},s=40+i.numVertices*4;if(i.frameSize!==s)throw new pe(`Unexpected frame size ${i.frameSize}, expected ${s}`);if(i.offsetEnd>e.byteLength)throw new pe("MD2 offset_end exceeds buffer length");return i}function nm(e,t){let r=t.numSkins*64;ti(e,t.offsetSkins,r,"skins");let n=new DataView(e,t.offsetSkins,r),i=[];for(let s=0;s<t.numSkins;s+=1)i.push({name:Sd(n,s*64,64)});return i}function im(e,t){let r=t.numTexCoords*4;ti(e,t.offsetTexCoords,r,"texcoords");let n=new DataView(e,t.offsetTexCoords,r),i=[];for(let s=0;s<t.numTexCoords;s+=1){let o=s*4;i.push({s:n.getInt16(o,!0),t:n.getInt16(o+2,!0)})}return i}function sm(e,t){let r=t.numTriangles*12;ti(e,t.offsetTriangles,r,"triangles");let n=new DataView(e,t.offsetTriangles,r),i=[];for(let s=0;s<t.numTriangles;s+=1){let o=s*12,a=[n.getUint16(o,!0),n.getUint16(o+2,!0),n.getUint16(o+4,!0)],c=[n.getUint16(o+6,!0),n.getUint16(o+8,!0),n.getUint16(o+10,!0)];if(a.some(l=>l>=t.numVertices)||c.some(l=>l>=t.numTexCoords))throw new pe("Triangle references out of range vertex or texcoord");i.push({vertexIndices:a,texCoordIndices:c})}return i}function om(e,t){let r=t.numFrames*t.frameSize;ti(e,t.offsetFrames,r,"frames");let n=[];for(let i=0;i<t.numFrames;i+=1){let s=t.offsetFrames+i*t.frameSize,o=new DataView(e,s,t.frameSize),a={x:o.getFloat32(0,!0),y:o.getFloat32(4,!0),z:o.getFloat32(8,!0)},c={x:o.getFloat32(12,!0),y:o.getFloat32(16,!0),z:o.getFloat32(20,!0)},l=Sd(o,24,16),d=[],f=1/0,u=1/0,h=1/0,m=-1/0,g=-1/0,p=-1/0;for(let y=0;y<t.numVertices;y+=1){let _=40+y*4,b=o.getUint8(_)*a.x+c.x,x=o.getUint8(_+1)*a.y+c.y,v=o.getUint8(_+2)*a.z+c.z;b<f&&(f=b),x<u&&(u=x),v<h&&(h=v),b>m&&(m=b),x>g&&(g=x),v>p&&(p=v);let A={x:b,y:x,z:v},S=o.getUint8(_+3),M=tm[S];if(!M)throw new pe(`Invalid normal index ${S} in frame ${l}`);d.push({position:A,normalIndex:S,normal:M})}n.push({name:l,vertices:d,minBounds:{x:f,y:u,z:h},maxBounds:{x:m,y:g,z:p}})}return n}function am(e,t){let r=t.numGlCommands*4;if(ti(e,t.offsetGlCommands,r,"gl commands"),r===0)return[];let n=new DataView(e,t.offsetGlCommands,r),i=[],s=0;for(;;){if(s+4>r)throw new pe("GL command list ended unexpectedly");let o=n.getInt32(s,!0);if(s+=4,o===0)break;let a=Math.abs(o),c=[],l=a*12;if(s+l>r)throw new pe("GL command vertex block exceeds buffer");for(let d=0;d<a;d+=1){let f=n.getFloat32(s,!0),u=n.getFloat32(s+4,!0),h=n.getInt32(s+8,!0);if(s+=12,h<0||h>=t.numVertices)throw new pe("GL command references invalid vertex index");c.push({s:f,t:u,vertexIndex:h})}i.push({mode:o>0?"strip":"fan",vertices:c})}if(s!==r)throw new pe("GL command list did not consume expected data");return i}function cl(e){let t=rm(e),r=nm(e,t),n=im(e,t),i=sm(e,t),s=om(e,t),o=am(e,t);return{header:t,skins:r,texCoords:n,triangles:i,frames:s,glCommands:o}}function wd(e){let t=[],r=0;for(;r<e.length;){let n=e[r].name,i=n.replace(/\d+$/,"")||n,s=r;for(;s+1<e.length&&(e[s+1].name.replace(/\d+$/,"")||e[s+1].name)===i;)s+=1;t.push({name:i,firstFrame:r,lastFrame:s}),r=s+1}return t}var Ad=860898377,lm=15,Ge=class extends Error{constructor(t){super(t),this.name="Md3ParseError"}};function ri(e,t,r){let n=new Uint8Array(e.buffer,e.byteOffset+t,r);return new TextDecoder("utf-8").decode(n).replace(/\0.*$/,"").trim()}function cm(e){let t=(e>>8&255)*(2*Math.PI/255),r=(e&255)*(2*Math.PI/255),n=Math.sin(r);return{x:Math.cos(t)*n,y:Math.sin(t)*n,z:Math.cos(r)}}function go(e,t,r,n){if(t<0||t+r>n)throw new Ge(`${e} exceeds buffer bounds`)}function dm(e){let t=e.getInt32(0,!0);if(t!==Ad)throw new Ge(`Invalid MD3 ident: ${t}`);let r=e.getInt32(4,!0);if(r!==lm)throw new Ge(`Unsupported MD3 version: ${r}`);let n=ri(e,8,64),i=e.getInt32(72,!0),s=e.getInt32(76,!0),o=e.getInt32(80,!0),a=e.getInt32(84,!0),c=e.getInt32(88,!0),l=e.getInt32(92,!0),d=e.getInt32(96,!0),f=e.getInt32(100,!0),u=e.getInt32(104,!0);if(s<=0||a<0||o<0)throw new Ge("Invalid MD3 counts");return{ident:t,version:r,name:n,flags:i,numFrames:s,numTags:o,numSurfaces:a,numSkins:c,ofsFrames:l,ofsTags:d,ofsSurfaces:f,ofsEnd:u,magic:t}}function um(e,t){let r=[];go("Frames",t.ofsFrames,t.numFrames*56,e.byteLength);for(let i=0;i<t.numFrames;i+=1){let s=t.ofsFrames+i*56;r.push({minBounds:{x:e.getFloat32(s,!0),y:e.getFloat32(s+4,!0),z:e.getFloat32(s+8,!0)},maxBounds:{x:e.getFloat32(s+12,!0),y:e.getFloat32(s+16,!0),z:e.getFloat32(s+20,!0)},localOrigin:{x:e.getFloat32(s+24,!0),y:e.getFloat32(s+28,!0),z:e.getFloat32(s+32,!0)},radius:e.getFloat32(s+36,!0),name:ri(e,s+40,16)})}return r}function fm(e,t){let r=[],i=t.numFrames*t.numTags*112;go("Tags",t.ofsTags,i,e.byteLength);for(let s=0;s<t.numFrames;s+=1){let o=[];for(let a=0;a<t.numTags;a+=1){let c=t.ofsTags+(s*t.numTags+a)*112,l=c+64,d=l+12;o.push({name:ri(e,c,64),origin:{x:e.getFloat32(l,!0),y:e.getFloat32(l+4,!0),z:e.getFloat32(l+8,!0)},axis:[{x:e.getFloat32(d,!0),y:e.getFloat32(d+4,!0),z:e.getFloat32(d+8,!0)},{x:e.getFloat32(d+12,!0),y:e.getFloat32(d+16,!0),z:e.getFloat32(d+20,!0)},{x:e.getFloat32(d+24,!0),y:e.getFloat32(d+28,!0),z:e.getFloat32(d+32,!0)}]})}r.push(o)}return r}function hm(e,t){let r=e.getInt32(t,!0);if(r!==Ad)throw new Ge(`Invalid surface ident at ${t}: ${r}`);let n=ri(e,t+4,64),i=e.getInt32(t+68,!0),s=e.getInt32(t+72,!0),o=e.getInt32(t+76,!0),a=e.getInt32(t+80,!0),c=e.getInt32(t+84,!0),l=e.getInt32(t+88,!0),d=e.getInt32(t+92,!0),f=e.getInt32(t+96,!0),u=e.getInt32(t+100,!0),h=e.getInt32(t+104,!0);if(s<=0||a<=0||c<=0)throw new Ge(`Invalid surface counts for ${n}`);let m=h;go(`Surface ${n}`,t,m,e.byteLength);let g=[],p=t+l;for(let S=0;S<c;S+=1){let M=p+S*12;g.push({indices:[e.getInt32(M,!0),e.getInt32(M+4,!0),e.getInt32(M+8,!0)]})}let y=[],_=t+d;for(let S=0;S<o;S+=1){let M=_+S*68;y.push({name:ri(e,M,64),shaderIndex:e.getInt32(M+64,!0)})}let b=[],x=t+f;for(let S=0;S<a;S+=1){let M=x+S*8;b.push({s:e.getFloat32(M,!0),t:e.getFloat32(M+4,!0)})}let v=[],A=t+u;for(let S=0;S<s;S+=1){let M=[];for(let L=0;L<a;L+=1){let w=A+(S*a+L)*8,T=e.getInt16(w,!0)/64,F=e.getInt16(w+2,!0)/64,U=e.getInt16(w+4,!0)/64,C=e.getUint16(w+6,!0);M.push({position:{x:T,y:F,z:U},latLng:C,normal:cm(C)})}v.push(M)}return{surface:{name:n,flags:i,numFrames:s,shaders:y,triangles:g,texCoords:b,vertices:v},nextOffset:t+h}}function dl(e){if(e.byteLength<108)throw new Ge("MD3 buffer too small for header");let t=new DataView(e),r=dm(t);go("MD3 end",r.ofsEnd,0,e.byteLength);let n=um(t,r),i=fm(t,r),s=[],o=r.ofsSurfaces;for(let a=0;a<r.numSurfaces;a+=1){let{surface:c,nextOffset:l}=hm(t,o);s.push(c),o=l}if(o!==r.ofsEnd)throw new Ge("Surface parsing did not reach ofsEnd");return{header:r,frames:n,tags:i,surfaces:s}}var Jr=class{constructor(t){this.vfs=t;this.cache=new Map}async load(t){if(this.cache.has(t))return this.cache.get(t);let r=await this.vfs.readFile(t),n=dl(r.slice().buffer);return this.cache.set(t,n),n}get(t){return this.cache.get(t)}};var mm=844317769,pm=2,Md=64,Ed=12,Ht=class extends Error{};function gm(e,t,r){let n=[];for(let i=0;i<r;i+=1){let s=e.getUint8(t+i);if(s===0)break;n.push(s)}return String.fromCharCode(...n)}function ul(e){if(e.byteLength<Ed)throw new Ht("Sprite buffer too small to contain header");let t=new DataView(e),r=t.getInt32(0,!0),n=t.getInt32(4,!0),i=t.getInt32(8,!0);if(r!==mm)throw new Ht(`Invalid Sprite ident: ${r}`);if(n!==pm)throw new Ht(`Unsupported Sprite version: ${n}`);let s=[],o=16+Md,a=Ed;for(let c=0;c<i;c+=1){if(a+o>e.byteLength)throw new Ht("Sprite frame data exceeds buffer length");let l=t.getInt32(a,!0),d=t.getInt32(a+4,!0),f=t.getInt32(a+8,!0),u=t.getInt32(a+12,!0),h=gm(t,a+16,Md);s.push({width:l,height:d,originX:f,originY:u,name:h}),a+=o}return{ident:r,version:n,numFrames:i,frames:s}}var en=class{constructor(t){this.vfs=t}async load(t){let r=await this.vfs.readFile(t),n=new Uint8Array(r.byteLength);return n.set(r),ul(n.buffer)}};function Ld(e,t){let r=(e.sequence.end-e.sequence.start+1)/e.sequence.fps,n=e.sequence.loop!==!1,i=e.time+t;return n?i=(i%r+r)%r:i>r&&(i=r),{...e,time:Math.max(0,Math.min(i,r))}}function Td(e){let t=e.sequence.end-e.sequence.start+1,r=1/e.sequence.fps,n=e.sequence.loop!==!1,i=e.time/r;if(!n&&i>=t)return{frame0:e.sequence.end,frame1:e.sequence.end,lerp:0};let s=n?i%t:Math.min(i,t-1),o=Math.floor(s),a=e.sequence.start+o,c=o+1>=t?n?e.sequence.start:e.sequence.end:a+1,l=!n&&o>=t-1?0:s-o;return{frame0:a,frame1:c,lerp:l}}function Id(e){return{sequence:e,time:0}}function Cd(e,t,r){return{x:e.x+(t.x-e.x)*r,y:e.y+(t.y-e.y)*r,z:e.z+(t.z-e.z)*r}}var ni=class extends Error{constructor(t){super(t),this.name="WalParseError"}};function yo(e){if(e.byteLength<100)throw new ni("WAL buffer too small");let t=new DataView(e),r=new Uint8Array(e,0,32),n=new TextDecoder("utf-8").decode(r).replace(/\0.*$/,"").trim(),i=t.getInt32(32,!0),s=t.getInt32(36,!0),o=[t.getInt32(40,!0),t.getInt32(44,!0),t.getInt32(48,!0),t.getInt32(52,!0)],a=new Uint8Array(e,56,32),c=new TextDecoder("utf-8").decode(a).replace(/\0.*$/,"").trim(),l=t.getInt32(88,!0),d=t.getInt32(92,!0),f=t.getInt32(96,!0);if(i<=0||s<=0)throw new ni("Invalid WAL dimensions");let u=[],h=i,m=s;for(let g=0;g<o.length;g+=1){let p=o[g],y=Math.max(1,h*m|0);if(p<=0||p+y>e.byteLength)throw new ni(`Invalid WAL mip offset for level ${g}`);let _=new Uint8Array(e,p,y);u.push({level:g,width:h,height:m,data:_}),h=Math.max(1,h>>1),m=Math.max(1,m>>1)}return{name:n,width:i,height:s,mipmaps:u,animName:c,flags:l,contents:d,value:f}}var pr=class extends Error{constructor(t){super(t),this.name="PcxParseError"}};function ii(e){if(e.byteLength<128)throw new pr("PCX buffer too small for header");let t=new DataView(e),r=t.getUint8(0),n=t.getUint8(2),i=t.getUint8(3),s=t.getUint16(4,!0),o=t.getUint16(6,!0),a=t.getUint16(8,!0),c=t.getUint16(10,!0);if(r!==10||n!==1)throw new pr("Unsupported PCX encoding");if(i!==8)throw new pr("Only 8bpp PCX files are supported");let l=a-s+1,d=c-o+1,f=t.getUint16(66,!0),u=e.byteLength-769;if(u<128||new DataView(e,u,1).getUint8(0)!==12)throw new pr("Missing PCX palette");let h=new Uint8Array(e,u+1,768),m=new Uint8Array(e,128,u-128),g=new Uint8Array(l*d),p=0,y=0;for(let _=0;_<d;_+=1){let b=0;for(;b<f&&p<m.length;){let x=1,v=m[p++];if((v&192)===192){if(x=v&63,p>=m.length)throw new pr("Unexpected end of PCX RLE data");v=m[p++]}for(let A=0;A<x&&b<f;A+=1)b<l&&(g[y++]=v),b+=1}}return{width:l,height:d,bitsPerPixel:i,pixels:g,palette:h}}function xo(e){let t=new Uint8Array(e.width*e.height*4);for(let r=0;r<e.pixels.length;r+=1){let n=e.pixels[r],i=n*3,s=r*4;t[s]=e.palette[i],t[s+1]=e.palette[i+1],t[s+2]=e.palette[i+2],t[s+3]=n===255?0:255}return t}var bt=class extends Error{constructor(t){super(t),this.name="TgaParseError"}};function fl(e){let t=new DataView(e);if(e.byteLength<18)throw new bt("Buffer too small for TGA header");let r=t.getUint8(0),n=t.getUint8(1),i=t.getUint8(2),s=t.getUint16(12,!0),o=t.getUint16(14,!0),a=t.getUint8(16),c=t.getUint8(17);if(i!==2&&i!==10&&i!==3&&i!==11)throw new bt(`Unsupported TGA image type: ${i} (only RGB/Grayscale supported)`);if(a!==24&&a!==32&&a!==8)throw new bt(`Unsupported pixel depth: ${a} (only 8, 24, 32 bpp supported)`);let l=i>=9,d=i===3||i===11,f=a/8,u=18+r;if(n===1){let b=t.getUint16(5,!0),x=t.getUint8(7);u+=b*(x/8)}let h=s*o,m=new Uint8Array(h*4),g=(c&32)!==0,p=0,y=new Uint8Array(e),_=b=>{if(d){let x=y[u++];m[b]=x,m[b+1]=x,m[b+2]=x,m[b+3]=255}else{let x=y[u++],v=y[u++],A=y[u++],S=a===32?y[u++]:255;m[b]=A,m[b+1]=v,m[b+2]=x,m[b+3]=S}};if(l){let b=0;for(;b<h;){if(u>=e.byteLength)throw new bt("Unexpected end of TGA RLE data");let x=y[u++],v=(x&127)+1,A=(x&128)!==0;if(b+v>h)throw new bt("TGA RLE packet exceeds image bounds");if(A){let S=d?y[u]:y[u+2],M=d?y[u]:y[u+1],L=y[u],w=d?255:a===32?y[u+3]:255;u+=f;for(let T=0;T<v;T++){let F=(b+T)*4;m[F]=S,m[F+1]=M,m[F+2]=L,m[F+3]=w}}else for(let S=0;S<v;S++)_((b+S)*4);b+=v}}else for(let b=0;b<h;b++){if(u>=e.byteLength)throw new bt("Unexpected end of TGA data");_(b*4)}if(!g){let b=s*4,x=new Uint8Array(b);for(let v=0;v<o/2;v++){let A=v*b,S=(o-1-v)*b;x.set(m.subarray(A,A+b)),m.set(m.subarray(S,S+b),A),m.set(x,S)}}return{width:s,height:o,bitsPerPixel:32,pixels:m}}var tn=class{constructor(t={}){this.cache=new Ut(t.capacity??128)}get size(){return this.cache.size}get(t){return this.cache.get(t.toLowerCase())}set(t,r){this.cache.set(t.toLowerCase(),r)}clear(){this.cache.clear()}};function hl(e,t){let r=[];for(let n of e.mipmaps){let i=new Uint8Array(n.width*n.height*4);for(let s=0;s<n.data.length;s+=1){let o=n.data[s],a=o*3,c=s*4;i[c]=t[a],i[c+1]=t[a+1],i[c+2]=t[a+2],i[c+3]=o===255?0:255}r.push({level:n.level,width:n.width,height:n.height,rgba:i})}return{width:e.width,height:e.height,levels:r,source:"wal"}}function bo(e){let t=xo(e),r={level:0,width:e.width,height:e.height,rgba:t};return{width:e.width,height:e.height,levels:[r],source:"pcx"}}function Rd(e){let t={level:0,width:e.width,height:e.height,rgba:e.pixels};return{width:e.width,height:e.height,levels:[t],source:"tga"}}function _o(e,t){return hl(yo(e),t)}var gr=class extends Error{constructor(t){super(t),this.name="WavParseError"}};function ml(e,t,r){return new TextDecoder("ascii").decode(new Uint8Array(e.buffer,e.byteOffset+t,r))}function vo(e){if(e.byteLength<44)throw new gr("WAV buffer too small");let t=new DataView(e);if(ml(t,0,4)!=="RIFF"||ml(t,8,4)!=="WAVE")throw new gr("Invalid WAV header");let r=12,n=-1,i=-1,s=0,o=0;for(;r+8<=e.byteLength;){let m=ml(t,r,4),g=t.getUint32(r+4,!0),p=r+8;m==="fmt "?(n=p,s=g):m==="data"&&(i=p,o=g),r=p+g}if(n===-1||i===-1)throw new gr("Missing fmt or data chunk");let a=t.getUint16(n,!0),c=t.getUint16(n+2,!0),l=t.getUint32(n+4,!0),d=t.getUint16(n+14,!0);if(a!==1)throw new gr("Only PCM WAV is supported");let f=d/8,u=o/(f*c),h=new Float32Array(u*c);for(let m=0;m<u;m+=1)for(let g=0;g<c;g+=1){let p=m*c+g,y=i+p*f,_=0;if(d===8)_=t.getUint8(y),h[p]=(_-128)/128;else if(d===16)_=t.getInt16(y,!0),h[p]=_/32768;else if(d===24){let b=t.getUint8(y),x=t.getUint8(y+1),v=t.getInt8(y+2);_=b|x<<8|v<<16,h[p]=_/8388608}else throw new gr(`Unsupported bitsPerSample: ${d}`)}return{sampleRate:l,channels:c,bitsPerSample:d,samples:h}}var ym=(e,t=4294967295,r=79764919)=>{let n=new Int32Array(256),i,s,o,a=t;for(i=0;i<256;i++){for(o=i<<24,s=8;s>0;--s)o=2147483648&o?o<<1^r:o<<1;n[i]=o}for(i=0;i<e.length;i++)a=a<<8^n[255&(a>>24^e[i])];return a};var pl=(e,t=ym)=>{let r=p=>new Uint8Array(p.length/2).map(((y,_)=>parseInt(p.substring(2*_,2*(_+1)),16))),n=p=>r(p)[0],i=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,y)=>i.set(p,y)));let s=new Uint8Array(e.length),o,a,c,l=!1,d=0,f=42,u=e.length>13&&e.substring(0,9)==="dynEncode",h=0;u&&(h=11,a=n(e.substring(9,h)),a<=1&&(h+=2,f=n(e.substring(11,h))),a===1&&(h+=8,c=(p=>new DataView(r(p).buffer).getInt32(0,!0))(e.substring(13,h))));let m=256-f;for(let p=h;p<e.length;p++)if(o=e.charCodeAt(p),o!==61||l){if(o===92&&p<e.length-5&&u){let y=e.charCodeAt(p+1);y!==117&&y!==85||(o=parseInt(e.substring(p+2,p+6),16),p+=5)}if(o>255){let y=i.get(o);y&&(o=y+127)}l&&(l=!1,o-=64),s[d++]=o<f&&o>0?o+m:o-f}else l=!0;let g=s.subarray(0,d);if(u&&a===1){let p=t(g);if(p!==c){let y="Decode failed crc32 validation";throw console.error("`simple-yenc`\n",y+`
|
|
2
|
+
`,"Expected: "+c+"; Got: "+p+`
|
|
3
|
+
`,"Visit https://github.com/eshaz/simple-yenc for more information"),Error(y)}}return g};function re(){let e=Uint8Array,t=Float32Array;re.modules||Object.defineProperties(re,{modules:{value:new WeakMap},setModule:{value(r,n){re.modules.set(r,Promise.resolve(n))}},getModule:{value(r,n){let i=re.modules.get(r);return i||(n?i=WebAssembly.compile(pl(n)):(n=r.wasm,i=re.inflateDynEncodeString(n).then(s=>WebAssembly.compile(s))),re.modules.set(r,i)),i}},concatFloat32:{value(r,n){let i=new t(n),s=0,o=0;for(;s<r.length;)i.set(r[s],o),o+=r[s++].length;return i}},getDecodedAudio:{value:(r,n,i,s,o)=>({errors:r,channelData:n,samplesDecoded:i,sampleRate:s,bitDepth:o})},getDecodedAudioMultiChannel:{value(r,n,i,s,o,a){let c=[],l,d;for(l=0;l<i;l++){let f=[];for(d=0;d<n.length;)f.push(n[d++][l]||[]);c.push(re.concatFloat32(f,s))}return re.getDecodedAudio(r,c,s,o,a)}},inflateDynEncodeString:{value(r){return r=pl(r),new Promise(n=>{let i=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*4U((I-H(H*i0J,^*DH+H-H*I+H,I*4)33H(H*H)^*DH(H+H)^*@H+i§H)i§3æ*).§K(iHI/+§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,hi73H,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ô7H,c)(i)H+i´8W)(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,hi73H-i)J+V)&+I,H(H+V)æ,8(I.H(H*8*J-i(p51H-i)J+i¸7V)(H(H+iø7V)(8(J/H(P*0J+s,hi73H+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(i2J,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*4J1J.U(*H.U((J2i')o5/H.U()I.H,H(^*<H0H1U((H.i0J.i§i0i')o5/H/H.H2J*H(J.q50H,P*0J/H*I-H,P*(J0,hH,P*,H-q,hi)I-423+hH*m5+H/H0H(H1U((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-iEr5)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¨1I/+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+H0H1I2i(I-+hH-H2p,hH,H,iP8*J*i(p5-H*i7u,hH,i-H-i)H*c)(H-i)I-4*3i(I/i+I.i+I(*h*h*hH*i86*(*)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,hiI*4,3H,iø-H,i¸)H,i-H18)J(,hi¡I*H(i(p5,H1H,V)ú-H,V)ø-o5,3H,i(H,iXH,i-H1i)H08)J(,hi I*H(i(p5,H0H,V)H,V)o5,3H,H,iPH,iH8+I*4+3(3(3H,i$6i¬78+I*3H*H3m5(3i)I-H*i(r5)3H)H,P*0^*(H+H,P*<^*(H*I-3H,i2L(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*S7US0U `;re.getModule(re,i).then(s=>WebAssembly.instantiate(s,{})).then(({exports:s})=>{let o=new Map(Object.entries(s)),a=o.get("puff"),c=o.get("memory").buffer,l=new e(c),d=new DataView(c),f=o.get("__heap_base"),u=r.length,h=f;f+=4,d.setInt32(h,u,!0);let m=f;f+=u,l.set(r,m);let g=f;f+=4,d.setInt32(g,l.byteLength-f,!0),a(f,g,m,h),n(l.slice(f,f+d.getInt32(g,!0)))})})}}}),Object.defineProperty(this,"wasm",{enumerable:!0,get:()=>this._wasm}),this.getOutputChannels=(r,n,i)=>{let s=[],o=0;for(;o<n;)s.push(r.slice(o*i,o++*i+i));return s},this.allocateTypedArray=(r,n,i=!0)=>{let s=this._wasm.malloc(n.BYTES_PER_ELEMENT*r);return i&&this._pointers.add(s),{ptr:s,len:r,buf:new n(this._wasm.HEAP,s,r)}},this.free=()=>{this._pointers.forEach(r=>{this._wasm.free(r)}),this._pointers.clear()},this.codeToString=r=>{let n=[],i=new Uint8Array(this._wasm.HEAP);for(let s=i[r];s!==0;s=i[++r])n.push(s);return String.fromCharCode.apply(null,n)},this.addError=(r,n,i,s,o,a)=>{r.push({message:n,frameLength:i,frameNumber:s,inputBytes:o,outputSamples:a})},this.instantiate=(r,n)=>(n&&re.setModule(r,n),this._wasm=new r(re).instantiate(),this._pointers=new Set,this._wasm.ready.then(()=>this))}var Pd=I0(Fd(),1);var xm=()=>globalThis.Worker||Pd.default,rn=class extends xm(){constructor(t,r,n,i){re.modules||new re;let s=re.modules.get(n);if(!s){let o="text/javascript",a,c=`'use strict';(${((l,d,f)=>{let u,h,m=new Promise(g=>{h=g});self.onmessage=({data:{id:g,command:p,data:y}})=>{let _=m,b={id:g},x;p==="init"?(Object.defineProperties(l,{WASMAudioDecoderCommon:{value:d},EmscriptenWASM:{value:f},module:{value:y.module},isWebWorker:{value:!0}}),u=new l(y.options),h()):p==="free"?u.free():p==="ready"?_=_.then(()=>u.ready):p==="reset"?_=_.then(()=>u.reset()):(Object.assign(b,u[p](Array.isArray(y)?y.map(v=>new Uint8Array(v)):new Uint8Array(y))),x=b.channelData?b.channelData.map(v=>v.buffer):[]),_.then(()=>self.postMessage(b,x))}}).toString()})(${n}, ${re}, ${i})`;try{a=typeof process.versions.node<"u"}catch{}s=a?`data:${o};base64,${Buffer.from(c).toString("base64")}`:URL.createObjectURL(new Blob([c],{type:o})),re.modules.set(n,s)}super(s,{name:r}),this._id=Number.MIN_SAFE_INTEGER,this._enqueuedOperations=new Map,this.onmessage=({data:o})=>{let{id:a,...c}=o;this._enqueuedOperations.get(a)(c),this._enqueuedOperations.delete(a)},new i(re).getModule().then(o=>{this.postToDecoder("init",{module:o,options:t})})}async postToDecoder(t,r){return new Promise(n=>{this.postMessage({command:t,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 So=(e,t)=>{Object.defineProperty(e,"name",{value:t})};var ne=Symbol,zd=", ",B=(()=>{let e="front",t="side",r="rear",n="left",i="center",s="right";return["",e+" ",t+" ",r+" "].map(o=>[[n,s],[n,s,i],[n,i,s],[i,n,s],[i]].flatMap(a=>a.map(c=>o+c).join(zd)))})(),lt="LFE",Vt="monophonic (mono)",Gt="stereo",si="surround",oe=(e,...t)=>`${[Vt,Gt,`linear ${si}`,"quadraphonic",`5.0 ${si}`,`5.1 ${si}`,`6.1 ${si}`,`7.1 ${si}`][e-1]} (${t.join(zd)})`,oi=[Vt,oe(2,B[0][0]),oe(3,B[0][2]),oe(4,B[1][0],B[3][0]),oe(5,B[1][2],B[3][0]),oe(6,B[1][2],B[3][0],lt),oe(7,B[1][2],B[2][0],B[3][4],lt),oe(8,B[1][2],B[2][0],B[3][0],lt)],Dd=192e3,Bd=176400,wo=96e3,Ao=88200,Od=64e3,Wt=48e3,nn=44100,sn=32e3,on=24e3,an=22050,ln=16e3,Mo=12e3,Eo=11025,cn=8e3,Nd=7350,tt="absoluteGranulePosition",H="bandwidth",be="bitDepth",_e="bitrate",ai=_e+"Maximum",li=_e+"Minimum",ci=_e+"Nominal",ct="buffer",di=ct+"Fullness",te="codec",ve=te+"Frames",ui="coupledStreamCount",dn="crc",fi=dn+"16",hi=dn+"32",J="data",D="description",dt="duration",un="emphasis",mi="hasOpusPadding",Pe="header",Xt="isContinuedPacket",pi="isCopyrighted",Kt="isFirstPage",gi="isHome",ze="isLastPage",_t="isOriginal",vt="isPrivate",yi="isVbr",Ce="layer",E="length",N="mode",St=N+"Extension",Lo="mpeg",wt=Lo+"Version",xi="numberAACFrames",bi="outputGain",yr="preSkip",_i="profile",To=ne(),At="protection",gl="rawData",We="segments",V="subarray",$t="version",xr="vorbis",vi=xr+"Comments",fn=xr+"Setup",Io="block",Si=Io+"ingStrategy",Co=ne(),Mt=Io+"Size",Zt=Io+"size0",Yt=Io+"size1",wi=ne(),Ro="channel",Et=Ro+"MappingFamily",Ai=Ro+"MappingTable",Se=Ro+"Mode",Mi=ne(),P=Ro+"s",Ud="copyright",Ei=Ud+"Id",Li=Ud+"IdStart",Lt="frame",Tt=Lt+"Count",Re=Lt+"Length",ko="Number",It=Lt+ko,ut=Lt+"Padding",O=Lt+"Size",Hd="Rate",Ti="inputSample"+Hd,yl="page",br=yl+"Checksum",hn=ne(),qt=yl+"SegmentTable",de=yl+"Sequence"+ko,xl="sample",Ii=xl+ko,W=xl+Hd,ft=ne(),X=xl+"s",Fo="stream",Ci=Fo+"Count",Ri=Fo+"Info",ht=Fo+"Serial"+ko,bl=Fo+"StructureVersion",_l="total",_r=_l+"BytesOut",vr=_l+"Duration",Sr=_l+"Samples",$=ne(),Xe=ne(),ki=ne(),jt=ne(),rt=ne(),Po=ne(),vl=ne(),Qt=ne(),Y=ne(),Ke=ne(),$e=ne(),mt=ne(),Jt=ne(),zo=ne(),nt=ne(),it=ne(),Ze=ne(),Do=ne(),we=Uint8Array,er=DataView,q="reserved",Ae="bad",mn="free",Fi="none",Bo="16bit CRC";var Sl=(e,t,r)=>{for(let n=0;n<e[E];n++){let i=t(n);for(let s=8;s>0;s--)i=r(i);e[n]=i}return e},_m=Sl(new we(256),e=>e,e=>e&128?7^e<<1:e<<1),ae=[Sl(new Uint16Array(256),e=>e<<8,e=>e<<1^(e&32768?32773:0))],le=[Sl(new Uint32Array(256),e=>e,e=>e>>>1^(e&1)*3988292384)];for(let e=0;e<15;e++){ae.push(new Uint16Array(256)),le.push(new Uint32Array(256));for(let t=0;t<=255;t++)ae[e+1][t]=ae[0][ae[e][t]>>>8]^ae[e][t]<<8,le[e+1][t]=le[e][t]>>>8^le[0][le[e][t]&255]}var Gd=e=>{let t=0,r=e[E];for(let n=0;n!==r;n++)t=_m[t^e[n]];return t},Wd=e=>{let t=e[E],r=t-16,n=0,i=0;for(;i<=r;)n^=e[i++]<<8|e[i++],n=ae[15][n>>8]^ae[14][n&255]^ae[13][e[i++]]^ae[12][e[i++]]^ae[11][e[i++]]^ae[10][e[i++]]^ae[9][e[i++]]^ae[8][e[i++]]^ae[7][e[i++]]^ae[6][e[i++]]^ae[5][e[i++]]^ae[4][e[i++]]^ae[3][e[i++]]^ae[2][e[i++]]^ae[1][e[i++]]^ae[0][e[i++]];for(;i!==t;)n=(n&255)<<8^ae[0][n>>8^e[i++]];return n},Xd=e=>{let t=e[E],r=t-16,n=0,i=0;for(;i<=r;)n=le[15][(e[i++]^n)&255]^le[14][(e[i++]^n>>>8)&255]^le[13][(e[i++]^n>>>16)&255]^le[12][e[i++]^n>>>24]^le[11][e[i++]]^le[10][e[i++]]^le[9][e[i++]]^le[8][e[i++]]^le[7][e[i++]]^le[6][e[i++]]^le[5][e[i++]]^le[4][e[i++]]^le[3][e[i++]]^le[2][e[i++]]^le[1][e[i++]]^le[0][e[i++]];for(;i!==t;)n=le[0][(n^e[i++])&255]^n>>>8;return n^-1},zi=(...e)=>{let t=new we(e.reduce((r,n)=>r+n[E],0));return e.reduce((r,n)=>(t.set(n,r),r+n[E]),0),t},De=e=>String.fromCharCode(...e),Vd=[0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15],Pi=e=>Vd[e&15]<<4|Vd[e>>4],Oo=class{constructor(t){this._data=t,this._pos=t[E]*8}set position(t){this._pos=t}get position(){return this._pos}read(t){let r=Math.floor(this._pos/8),n=this._pos%8;return this._pos-=t,(Pi(this._data[r-1])<<8)+Pi(this._data[r])>>7-n&255}},Kd=(e,t)=>{try{return e.getBigInt64(t,!0)}catch{let r=e.getUint8(t+7)&128?-1:1,n=e.getUint32(t,!0),i=e.getUint32(t+4,!0);return r===-1&&(n=~n+1,i=~i+1),i>1048575&&console.warn("This platform does not support BigInt"),r*(n+i*2**32)}};var Di=class{constructor(t,r){this._onCodecHeader=t,this._onCodecUpdate=r,this[nt]()}[it](){this._isEnabled=!0}[nt](){this._headerCache=new Map,this._codecUpdateData=new WeakMap,this._codecHeaderSent=!1,this._codecShouldUpdate=!1,this._bitrate=null,this._isEnabled=!1}[zo](t,r){if(this._onCodecUpdate){this._bitrate!==t&&(this._bitrate=t,this._codecShouldUpdate=!0);let n=this._codecUpdateData.get(this._headerCache.get(this._currentHeader));this._codecShouldUpdate&&n&&this._onCodecUpdate({bitrate:t,...n},r),this._codecShouldUpdate=!1}}[Y](t){let r=this._headerCache.get(t);return r&&this._updateCurrentHeader(t),r}[Ke](t,r,n){this._isEnabled&&(this._codecHeaderSent||(this._onCodecHeader({...r}),this._codecHeaderSent=!0),this._updateCurrentHeader(t),this._headerCache.set(t,r),this._codecUpdateData.set(r,n))}_updateCurrentHeader(t){this._onCodecUpdate&&t!==this._currentHeader&&(this._codecShouldUpdate=!0,this._currentHeader=t)}};var ue=new WeakMap,ge=new WeakMap;var Me=class{constructor(t,r){this._codecParser=t,this._headerCache=r}*[vl](){let t;do{if(t=yield*this.Frame[$e](this._codecParser,this._headerCache,0),t)return t;this._codecParser[Xe](1)}while(!0)}*[Qt](t){let r=yield*this[vl](),n=ge.get(r)[E];if(t||this._codecParser._flushing||(yield*this.Header[Y](this._codecParser,this._headerCache,n)))return this._headerCache[it](),this._codecParser[Xe](n),this._codecParser[jt](r),r;this._codecParser[rt](`Missing ${Lt} at ${n} bytes from current position.`,`Dropping current ${Lt} and trying again.`),this._headerCache[nt](),this._codecParser[Xe](1)}};var wr=class{constructor(t,r){ge.set(this,{[Pe]:t}),this[J]=r}};var Be=class extends wr{static*[$e](t,r,n,i,s){let o=yield*t[Y](n,i,s);if(o){let a=ue.get(o)[Re],c=ue.get(o)[X],l=(yield*n[$](a,s))[V](0,a);return new r(o,l,c)}else return null}constructor(t,r,n){super(t,r),this[Pe]=t,this[X]=n,this[dt]=n/t[W]*1e3,this[It]=null,this[_r]=null,this[Sr]=null,this[vr]=null,ge.get(this)[E]=r[E]}};var wl="unsynchronizationFlag",Al="extendedHeaderFlag",Ml="experimentalFlag",El="footerPresent",Bi=class e{static*getID3v2Header(t,r,n){let s={},o=yield*t[$](3,n);if(o[0]!==73||o[1]!==68||o[2]!==51||(o=yield*t[$](10,n),s[$t]=`id3v2.${o[3]}.${o[4]}`,o[5]&15)||(s[wl]=!!(o[5]&128),s[Al]=!!(o[5]&64),s[Ml]=!!(o[5]&32),s[El]=!!(o[5]&16),o[6]&128||o[7]&128||o[8]&128||o[9]&128))return null;let a=o[6]<<21|o[7]<<14|o[8]<<7|o[9];return s[E]=10+a,new e(s)}constructor(t){this[$t]=t[$t],this[wl]=t[wl],this[Al]=t[Al],this[Ml]=t[Ml],this[El]=t[El],this[E]=t[E]}};var Oe=class{constructor(t){ue.set(this,t),this[be]=t[be],this[_e]=null,this[P]=t[P],this[Se]=t[Se],this[W]=t[W]}};var jd={0:[mn,mn,mn,mn,mn],16:[32,32,32,32,8],240:[Ae,Ae,Ae,Ae,Ae]},No=(e,t,r)=>8*((e+r)%t+t)*(1<<(e+r)/t)-8*t*(t/8|0);for(let e=2;e<15;e++)jd[e<<4]=[e*32,No(e,4,0),No(e,4,-1),No(e,8,4),No(e,8,0)];var vm=0,Sm=1,wm=2,Am=3,$d=4,Uo="bands ",Ho=" to 31",Zd={0:Uo+4+Ho,16:Uo+8+Ho,32:Uo+12+Ho,48:Uo+16+Ho},Ar="bitrateIndex",Oi="v2",Ko="v1",Vo="Intensity stereo ",Go=", MS stereo ",Wo="on",Xo="off",Mm={0:Vo+Xo+Go+Xo,16:Vo+Wo+Go+Xo,32:Vo+Xo+Go+Wo,48:Vo+Wo+Go+Wo},Ll={0:{[D]:q},2:{[D]:"Layer III",[ut]:1,[St]:Mm,[Ko]:{[Ar]:wm,[X]:1152},[Oi]:{[Ar]:$d,[X]:576}},4:{[D]:"Layer II",[ut]:1,[St]:Zd,[X]:1152,[Ko]:{[Ar]:Sm},[Oi]:{[Ar]:$d}},6:{[D]:"Layer I",[ut]:4,[St]:Zd,[X]:384,[Ko]:{[Ar]:vm},[Oi]:{[Ar]:Am}}},Tl="MPEG Version ",Yd="ISO/IEC ",Em={0:{[D]:`${Tl}2.5 (later extension of MPEG 2)`,[Ce]:Oi,[W]:{0:Eo,4:Mo,8:cn,12:q}},8:{[D]:q},16:{[D]:`${Tl}2 (${Yd}13818-3)`,[Ce]:Oi,[W]:{0:an,4:on,8:ln,12:q}},24:{[D]:`${Tl}1 (${Yd}11172-3)`,[Ce]:Ko,[W]:{0:nn,4:Wt,8:sn,12:q}},length:E},Lm={0:Bo,1:Fi},Tm={0:Fi,1:"50/15 ms",2:q,3:"CCIT J.17"},qd={0:{[P]:2,[D]:Gt},64:{[P]:2,[D]:"joint "+Gt},128:{[P]:2,[D]:"dual channel"},192:{[P]:1,[D]:Vt}},Mr=class e extends Oe{static*[Y](t,r,n){let i={},s=yield*Bi.getID3v2Header(t,r,n);s&&(yield*t[$](s[E],n),t[Xe](s[E]));let o=yield*t[$](4,n),a=De(o[V](0,4)),c=r[Y](a);if(c)return new e(c);if(o[0]!==255||o[1]<224)return null;let l=Em[o[1]&24];if(l[D]===q)return null;let d=o[1]&6;if(Ll[d][D]===q)return null;let f={...Ll[d],...Ll[d][l[Ce]]};if(i[wt]=l[D],i[Ce]=f[D],i[X]=f[X],i[At]=Lm[o[1]&1],i[E]=4,i[_e]=jd[o[2]&240][f[Ar]],i[_e]===Ae||(i[W]=l[W][o[2]&12],i[W]===q)||(i[ut]=o[2]&2&&f[ut],i[vt]=!!(o[2]&1),i[Re]=Math.floor(125*i[_e]*i[X]/i[W]+i[ut]),!i[Re]))return null;let u=o[3]&192;if(i[Se]=qd[u][D],i[P]=qd[u][P],i[St]=f[St][o[3]&48],i[pi]=!!(o[3]&8),i[_t]=!!(o[3]&4),i[un]=Tm[o[3]&3],i[un]===q)return null;i[be]=16;{let{length:h,frameLength:m,samples:g,...p}=i;r[Ke](a,i,p)}return new e(i)}constructor(t){super(t),this[_e]=t[_e],this[un]=t[un],this[ut]=t[ut],this[pi]=t[pi],this[_t]=t[_t],this[vt]=t[vt],this[Ce]=t[Ce],this[St]=t[St],this[wt]=t[wt],this[At]=t[At]}};var Ni=class e extends Be{static*[$e](t,r,n){return yield*super[$e](Mr,e,t,r,n)}constructor(t,r,n){super(t,r,n)}};var Ui=class extends Me{constructor(t,r,n){super(t,r),this.Frame=Ni,this.Header=Mr,n(this[te])}get[te](){return Lo}*[mt](){return yield*this[Qt]()}};var Im={0:"MPEG-4",8:"MPEG-2"},Cm={0:"valid",2:Ae,4:Ae,6:Ae},Rm={0:Bo,1:Fi},km={0:"AAC Main",64:"AAC LC (Low Complexity)",128:"AAC SSR (Scalable Sample Rate)",192:"AAC LTP (Long Term Prediction)"},Fm={0:wo,4:Ao,8:Od,12:Wt,16:nn,20:sn,24:on,28:an,32:ln,36:Mo,40:Eo,44:cn,48:Nd,52:q,56:q,60:"frequency is written explicitly"},Qd={0:{[P]:0,[D]:"Defined in AOT Specific Config"},64:{[P]:1,[D]:Vt},128:{[P]:2,[D]:oe(2,B[0][0])},192:{[P]:3,[D]:oe(3,B[1][3])},256:{[P]:4,[D]:oe(4,B[1][3],B[3][4])},320:{[P]:5,[D]:oe(5,B[1][3],B[3][0])},384:{[P]:6,[D]:oe(6,B[1][3],B[3][0],lt)},448:{[P]:8,[D]:oe(8,B[1][3],B[2][0],B[3][0],lt)}},Er=class e extends Oe{static*[Y](t,r,n){let i={},s=yield*t[$](7,n),o=De([s[0],s[1],s[2],s[3]&252|s[6]&3]),a=r[Y](o);if(a)Object.assign(i,a);else{if(s[0]!==255||s[1]<240||(i[wt]=Im[s[1]&8],i[Ce]=Cm[s[1]&6],i[Ce]===Ae))return null;let l=s[1]&1;i[At]=Rm[l],i[E]=l?7:9,i[To]=s[2]&192,i[ft]=s[2]&60;let d=s[2]&2;if(i[_i]=km[i[To]],i[W]=Fm[i[ft]],i[W]===q)return null;i[vt]=!!d,i[Mi]=(s[2]<<8|s[3])&448,i[Se]=Qd[i[Mi]][D],i[P]=Qd[i[Mi]][P],i[_t]=!!(s[3]&32),i[gi]=!!(s[3]&8),i[Ei]=!!(s[3]&8),i[Li]=!!(s[3]&4),i[be]=16,i[X]=1024,i[xi]=s[6]&3;{let{length:f,channelModeBits:u,profileBits:h,sampleRateBits:m,frameLength:g,samples:p,numberAACFrames:y,..._}=i;r[Ke](o,i,_)}}if(i[Re]=(s[3]<<11|s[4]<<3|s[5]>>5)&8191,!i[Re])return null;let c=(s[5]<<6|s[6]>>2)&2047;return i[di]=c===2047?"VBR":c,new e(i)}constructor(t){super(t),this[Ei]=t[Ei],this[Li]=t[Li],this[di]=t[di],this[gi]=t[gi],this[_t]=t[_t],this[vt]=t[vt],this[Ce]=t[Ce],this[E]=t[E],this[wt]=t[wt],this[xi]=t[xi],this[_i]=t[_i],this[At]=t[At]}get audioSpecificConfig(){let t=ue.get(this),r=t[To]+64<<5|t[ft]<<5|t[Mi]>>3,n=new we(2);return new er(n[ct]).setUint16(0,r,!1),n}};var Hi=class e extends Be{static*[$e](t,r,n){return yield*super[$e](Er,e,t,r,n)}constructor(t,r,n){super(t,r,n)}};var Vi=class extends Me{constructor(t,r,n){super(t,r),this.Frame=Hi,this.Header=Er,n(this[te])}get[te](){return"aac"}*[mt](){return yield*this[Qt]()}};var tr=class e extends Be{static _getFrameFooterCrc16(t){return(t[t[E]-2]<<8)+t[t[E]-1]}static[Do](t){let r=e._getFrameFooterCrc16(t),n=Wd(t[V](0,-2));return r===n}constructor(t,r,n){r[Ri]=n,r[fi]=e._getFrameFooterCrc16(t),super(r,t,ue.get(r)[X])}};var Jd="get from STREAMINFO metadata block",Pm={0:"Fixed",1:"Variable"},eu={0:q,16:192};for(let e=2;e<16;e++)eu[e<<4]=e<6?576*2**(e-2):2**e;var zm={0:Jd,1:Ao,2:Bd,3:Dd,4:cn,5:ln,6:an,7:on,8:sn,9:nn,10:Wt,11:wo,15:Ae},Dm={0:{[P]:1,[D]:Vt},16:{[P]:2,[D]:oe(2,B[0][0])},32:{[P]:3,[D]:oe(3,B[0][1])},48:{[P]:4,[D]:oe(4,B[1][0],B[3][0])},64:{[P]:5,[D]:oe(5,B[1][1],B[3][0])},80:{[P]:6,[D]:oe(6,B[1][1],lt,B[3][0])},96:{[P]:7,[D]:oe(7,B[1][1],lt,B[3][4],B[2][0])},112:{[P]:8,[D]:oe(8,B[1][1],lt,B[3][0],B[2][0])},128:{[P]:2,[D]:`${Gt} (left, diff)`},144:{[P]:2,[D]:`${Gt} (diff, right)`},160:{[P]:2,[D]:`${Gt} (avg, diff)`},176:q,192:q,208:q,224:q,240:q},Bm={0:Jd,2:8,4:12,6:q,8:16,10:20,12:24,14:q},rr=class e extends Oe{static _decodeUTF8Int(t){if(t[0]>254)return null;if(t[0]<128)return{value:t[0],length:1};let r=1;for(let o=64;o&t[0];o>>=1)r++;let n=r-1,i=0,s=0;for(;n>0;s+=6,n--){if((t[n]&192)!==128)return null;i|=(t[n]&63)<<s}return i|=(t[n]&127>>r)<<s,{value:i,length:r}}static[Ze](t,r){let n={[$]:function*(){return t}};return e[Y](n,r,0).next().value}static*[Y](t,r,n){let i=yield*t[$](6,n);if(i[0]!==255||!(i[1]===248||i[1]===249))return null;let s={},o=De(i[V](0,4)),a=r[Y](o);if(a)Object.assign(s,a);else{if(s[Co]=i[1]&1,s[Si]=Pm[s[Co]],s[wi]=i[2]&240,s[ft]=i[2]&15,s[Mt]=eu[s[wi]],s[Mt]===q||(s[W]=zm[s[ft]],s[W]===Ae)||i[3]&1)return null;let l=Dm[i[3]&240];if(l===q||(s[P]=l[P],s[Se]=l[D],s[be]=Bm[i[3]&14],s[be]===q))return null}s[E]=5,i=yield*t[$](s[E]+8,n);let c=e._decodeUTF8Int(i[V](4));if(!c||(s[Co]?s[Ii]=c.value:s[It]=c.value,s[E]+=c[E],s[wi]===96?(i[E]<s[E]&&(i=yield*t[$](s[E],n)),s[Mt]=i[s[E]-1]+1,s[E]+=1):s[wi]===112&&(i[E]<s[E]&&(i=yield*t[$](s[E],n)),s[Mt]=(i[s[E]-1]<<8)+i[s[E]]+1,s[E]+=2),s[X]=s[Mt],s[ft]===12?(i[E]<s[E]&&(i=yield*t[$](s[E],n)),s[W]=i[s[E]-1]*1e3,s[E]+=1):s[ft]===13?(i[E]<s[E]&&(i=yield*t[$](s[E],n)),s[W]=(i[s[E]-1]<<8)+i[s[E]],s[E]+=2):s[ft]===14&&(i[E]<s[E]&&(i=yield*t[$](s[E],n)),s[W]=((i[s[E]-1]<<8)+i[s[E]])*10,s[E]+=2),i[E]<s[E]&&(i=yield*t[$](s[E],n)),s[dn]=i[s[E]-1],s[dn]!==Gd(i[V](0,s[E]-1))))return null;if(!a){let{blockingStrategyBits:l,frameNumber:d,sampleNumber:f,samples:u,sampleRateBits:h,blockSizeBits:m,crc:g,length:p,...y}=s;r[Ke](o,s,y)}return new e(s)}constructor(t){super(t),this[fi]=null,this[Si]=t[Si],this[Mt]=t[Mt],this[It]=t[It],this[Ii]=t[Ii],this[Ri]=null}};var Om=2,Nm=512*1024,Lr=class extends Me{constructor(t,r,n){super(t,r),this.Frame=tr,this.Header=rr,n(this[te])}get[te](){return"flac"}*_getNextFrameSyncOffset(t){let r=yield*this._codecParser[$](2,0),n=r[E]-2;for(;t<n;){if(r[t]===255){let s=r[t+1];if(s===248||s===249)break;s!==255&&t++}t++}return t}*[mt](){do{let t=yield*rr[Y](this._codecParser,this._headerCache,0);if(t){let r=ue.get(t)[E]+Om;for(;r<=Nm;){if(this._codecParser._flushing||(yield*rr[Y](this._codecParser,this._headerCache,r))){let n=yield*this._codecParser[$](r);if(this._codecParser._flushing||(n=n[V](0,r)),tr[Do](n)){let i=new tr(n,t);return this._headerCache[it](),this._codecParser[Xe](r),this._codecParser[jt](i),i}}r=yield*this._getNextFrameSyncOffset(r+1)}this._codecParser[rt](`Unable to sync FLAC frame after searching ${r} bytes.`),this._codecParser[Xe](r)}else this._codecParser[Xe](yield*this._getNextFrameSyncOffset(1))}while(!0)}[Jt](t){return t[de]===0?(this._headerCache[it](),this._streamInfo=t[J][V](13)):t[de]===1||(t[ve]=ge.get(t)[We].map(r=>{let n=rr[Ze](r,this._headerCache);if(n)return new tr(r,n,this._streamInfo);this._codecParser[rt]("Failed to parse Ogg FLAC frame","Skipping invalid FLAC frame")}).filter(r=>!!r)),t}};var Tr=class e{static*[Y](t,r,n){let i={},s=yield*t[$](28,n);if(s[0]!==79||s[1]!==103||s[2]!==103||s[3]!==83||(i[bl]=s[4],s[5]&248))return null;i[ze]=!!(s[5]&4),i[Kt]=!!(s[5]&2),i[Xt]=!!(s[5]&1);let a=new er(we.from(s[V](0,28))[ct]);i[tt]=Kd(a,6),i[ht]=a.getInt32(14,!0),i[de]=a.getInt32(18,!0),i[br]=a.getInt32(22,!0);let c=s[26];i[E]=c+27,s=yield*t[$](i[E],n),i[Re]=0,i[qt]=[],i[hn]=we.from(s[V](27,i[E]));for(let l=0,d=0;l<c;l++){let f=i[hn][l];i[Re]+=f,d+=f,(f!==255||l===c-1)&&(i[qt].push(d),d=0)}return new e(i)}constructor(t){ue.set(this,t),this[tt]=t[tt],this[Xt]=t[Xt],this[Kt]=t[Kt],this[ze]=t[ze],this[qt]=t[qt],this[de]=t[de],this[br]=t[br],this[ht]=t[ht]}};var Gi=class e extends wr{static*[$e](t,r,n){let i=yield*Tr[Y](t,r,n);if(i){let s=ue.get(i)[Re],o=ue.get(i)[E],a=o+s,c=(yield*t[$](a,0))[V](0,a),l=c[V](o,a);return new e(i,l,c)}else return null}constructor(t,r,n){super(t,r),ge.get(this)[E]=n[E],this[ve]=[],this[gl]=n,this[tt]=t[tt],this[hi]=t[br],this[dt]=0,this[Xt]=t[Xt],this[Kt]=t[Kt],this[ze]=t[ze],this[de]=t[de],this[X]=0,this[ht]=t[ht]}};var pn=class extends Be{constructor(t,r,n){super(r,t,n)}};var tu={0:oi.slice(0,2),1:oi},Ye="SILK-only",ye="CELT-only",$o="Hybrid",nr="narrowband",Zo="medium-band",ir="wideband",gn="super-wideband",yn="fullband",Um={0:{[N]:Ye,[H]:nr,[O]:10},8:{[N]:Ye,[H]:nr,[O]:20},16:{[N]:Ye,[H]:nr,[O]:40},24:{[N]:Ye,[H]:nr,[O]:60},32:{[N]:Ye,[H]:Zo,[O]:10},40:{[N]:Ye,[H]:Zo,[O]:20},48:{[N]:Ye,[H]:Zo,[O]:40},56:{[N]:Ye,[H]:Zo,[O]:60},64:{[N]:Ye,[H]:ir,[O]:10},72:{[N]:Ye,[H]:ir,[O]:20},80:{[N]:Ye,[H]:ir,[O]:40},88:{[N]:Ye,[H]:ir,[O]:60},96:{[N]:$o,[H]:gn,[O]:10},104:{[N]:$o,[H]:gn,[O]:20},112:{[N]:$o,[H]:yn,[O]:10},120:{[N]:$o,[H]:yn,[O]:20},128:{[N]:ye,[H]:nr,[O]:2.5},136:{[N]:ye,[H]:nr,[O]:5},144:{[N]:ye,[H]:nr,[O]:10},152:{[N]:ye,[H]:nr,[O]:20},160:{[N]:ye,[H]:ir,[O]:2.5},168:{[N]:ye,[H]:ir,[O]:5},176:{[N]:ye,[H]:ir,[O]:10},184:{[N]:ye,[H]:ir,[O]:20},192:{[N]:ye,[H]:gn,[O]:2.5},200:{[N]:ye,[H]:gn,[O]:5},208:{[N]:ye,[H]:gn,[O]:10},216:{[N]:ye,[H]:gn,[O]:20},224:{[N]:ye,[H]:yn,[O]:2.5},232:{[N]:ye,[H]:yn,[O]:5},240:{[N]:ye,[H]:yn,[O]:10},248:{[N]:ye,[H]:yn,[O]:20}},xn=class e extends Oe{static[Ze](t,r,n){let i={};if(i[P]=t[9],i[Et]=t[18],i[E]=i[Et]!==0?21+i[P]:19,t[E]<i[E])throw new Error("Out of data while inside an Ogg Page");let s=r[0]&3,o=s===3?2:1,a=De(t[V](0,i[E]))+De(r[V](0,o)),c=n[Y](a);if(c)return new e(c);if(a.substr(0,8)!=="OpusHead"||t[8]!==1)return null;i[J]=we.from(t[V](0,i[E]));let l=new er(i[J][ct]);if(i[be]=16,i[yr]=l.getUint16(10,!0),i[Ti]=l.getUint32(12,!0),i[W]=Wt,i[bi]=l.getInt16(16,!0),i[Et]in tu&&(i[Se]=tu[i[Et]][i[P]-1],!i[Se]))return null;i[Et]!==0&&(i[Ci]=t[19],i[ui]=t[20],i[Ai]=[...t[V](21,i[P]+21)]);let d=Um[248&r[0]];switch(i[N]=d[N],i[H]=d[H],i[O]=d[O],s){case 0:i[Tt]=1;break;case 1:case 2:i[Tt]=2;break;case 3:i[yi]=!!(128&r[1]),i[mi]=!!(64&r[1]),i[Tt]=63&r[1];break;default:return null}{let{length:f,data:u,channelMappingFamily:h,...m}=i;n[Ke](a,i,m)}return new e(i)}constructor(t){super(t),this[J]=t[J],this[H]=t[H],this[Et]=t[Et],this[Ai]=t[Ai],this[ui]=t[ui],this[Tt]=t[Tt],this[O]=t[O],this[mi]=t[mi],this[Ti]=t[Ti],this[yi]=t[yi],this[N]=t[N],this[bi]=t[bi],this[yr]=t[yr],this[Ci]=t[Ci]}};var Wi=class extends Me{constructor(t,r,n){super(t,r),this.Frame=pn,this.Header=xn,n(this[te]),this._identificationHeader=null,this._preSkipRemaining=null}get[te](){return"opus"}[Jt](t){return t[de]===0?(this._headerCache[it](),this._identificationHeader=t[J]):t[de]===1||(t[ve]=ge.get(t)[We].map(r=>{let n=xn[Ze](this._identificationHeader,r,this._headerCache);if(n){this._preSkipRemaining===null&&(this._preSkipRemaining=n[yr]);let i=n[O]*n[Tt]/1e3*n[W];return this._preSkipRemaining>0&&(this._preSkipRemaining-=i,i=this._preSkipRemaining<0?-this._preSkipRemaining:0),new pn(r,n,i)}this._codecParser[Po]("Failed to parse Ogg Opus Header","Not a valid Ogg Opus file")})),t}};var bn=class extends Be{constructor(t,r,n){super(r,t,n)}};var Il={};for(let e=0;e<8;e++)Il[e+6]=2**(6+e);var Xi=class e extends Oe{static[Ze](t,r,n,i){if(t[E]<30)throw new Error("Out of data while inside an Ogg Page");let s=De(t[V](0,30)),o=r[Y](s);if(o)return new e(o);let a={[E]:30};if(s.substr(0,7)!=="vorbis")return null;a[J]=we.from(t[V](0,30));let c=new er(a[J][ct]);if(a[$t]=c.getUint32(7,!0),a[$t]!==0||(a[P]=t[11],a[Se]=oi[a[P]-1]||"application defined",a[W]=c.getUint32(12,!0),a[ai]=c.getInt32(16,!0),a[ci]=c.getInt32(20,!0),a[li]=c.getInt32(24,!0),a[Yt]=Il[(t[28]&240)>>4],a[Zt]=Il[t[28]&15],a[Zt]>a[Yt])||t[29]!==1)return null;a[be]=32,a[fn]=i,a[vi]=n;{let{length:l,data:d,version:f,vorbisSetup:u,vorbisComments:h,...m}=a;r[Ke](s,a,m)}return new e(a)}constructor(t){super(t),this[ai]=t[ai],this[li]=t[li],this[ci]=t[ci],this[Zt]=t[Zt],this[Yt]=t[Yt],this[J]=t[J],this[vi]=t[vi],this[fn]=t[fn]}};var Ki=class extends Me{constructor(t,r,n){super(t,r),this.Frame=bn,n(this[te]),this._identificationHeader=null,this._setupComplete=!1,this._prevBlockSize=null}get[te](){return xr}[Jt](t){t[ve]=[];for(let r of ge.get(t)[We])if(r[0]===1)this._headerCache[it](),this._identificationHeader=t[J],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=Xi[Ze](this._identificationHeader,this._headerCache,this._vorbisComments,this._vorbisSetup);n?t[ve].push(new bn(r,n,this._getSamples(r,n))):this._codecParser[logError]("Failed to parse Ogg Vorbis Header","Not a valid Ogg Vorbis file")}return t}_getSamples(t,r){let i=this._mode.blockFlags[t[0]>>1&this._mode.mask]?r[Yt]:r[Zt],s=this._prevBlockSize===null?0:(this._prevBlockSize+i)/4;return this._prevBlockSize=i,s}_parseSetupHeader(t){let r=new Oo(t),n={count:0,blockFlags:[]};for(;(r.read(1)&1)!==1;);let i;for(;n.count<64&&r.position>0;){Pi(r.read(8));let s=0;for(;r.read(8)===0&&s++<3;);if(s===4)i=r.read(7),n.blockFlags.unshift(i&1),r.position+=6,n.count++;else{((Pi(i)&126)>>1)+1!==n.count&&this._codecParser[rt]("vorbis derived mode count did not match actual mode count");break}}return n.mask=(1<<Math.log2(n.count))-1,n}};var Cl=class{constructor(t,r,n){this._codecParser=t,this._headerCache=r,this._onCodec=n,this._continuedPacket=new we,this._codec=null,this._isSupported=null,this._previousAbsoluteGranulePosition=null}get[te](){return this._codec||""}_updateCodec(t,r){this._codec!==t&&(this._headerCache[nt](),this._parser=new r(this._codecParser,this._headerCache,this._onCodec),this._codec=t)}_checkCodecSupport({data:t}){let r=De(t[V](0,8));switch(r){case"fishead\0":return!1;case"OpusHead":return this._updateCodec("opus",Wi),!0;case(/^\x7fFLAC/.test(r)&&r):return this._updateCodec("flac",Lr),!0;case(/^\x01vorbis/.test(r)&&r):return this._updateCodec(xr,Ki),!0;default:return!1}}_checkPageSequenceNumber(t){t[de]!==this._pageSequenceNumber+1&&this._pageSequenceNumber>1&&t[de]>1&&this._codecParser[rt]("Unexpected gap in Ogg Page Sequence Number.",`Expected: ${this._pageSequenceNumber+1}, Got: ${t[de]}`),this._pageSequenceNumber=t[de]}_parsePage(t){this._isSupported===null&&(this._pageSequenceNumber=t[de],this._isSupported=this._checkCodecSupport(t)),this._checkPageSequenceNumber(t);let r=ge.get(t),n=ue.get(r[Pe]),i=0;if(r[We]=n[qt].map(s=>t[J][V](i,i+=s)),this._continuedPacket[E]&&(r[We][0]=zi(this._continuedPacket,r[We][0]),this._continuedPacket=new we),n[hn][n[hn][E]-1]===255&&(this._continuedPacket=zi(this._continuedPacket,r[We].pop())),this._previousAbsoluteGranulePosition!==null&&(t[X]=Number(t[tt]-this._previousAbsoluteGranulePosition)),this._previousAbsoluteGranulePosition=t[tt],this._isSupported){let s=this._parser[Jt](t);return this._codecParser[jt](s),s}else return t}},$i=class extends Me{constructor(t,r,n){super(t,r),this._onCodec=n,this.Frame=Gi,this.Header=Tr,this._streams=new Map,this._currentSerialNumber=null}get[te](){let t=this._streams.get(this._currentSerialNumber);return t?t.codec:""}*[mt](){let t=yield*this[Qt](!0);this._currentSerialNumber=t[ht];let r=this._streams.get(this._currentSerialNumber);return r||(r=new Cl(this._codecParser,this._headerCache,this._onCodec),this._streams.set(this._currentSerialNumber,r)),t[ze]&&this._streams.delete(this._currentSerialNumber),r._parsePage(t)}};var Rl=()=>{},Zi=class{constructor(t,{onCodec:r,onCodecHeader:n,onCodecUpdate:i,enableLogging:s=!1,enableFrameCRC32:o=!0}={}){this._inputMimeType=t,this._onCodec=r||Rl,this._onCodecHeader=n||Rl,this._onCodecUpdate=i,this._enableLogging=s,this._crc32=o?Xd:Rl,this[nt]()}get[te](){return this._parser?this._parser[te]:""}[nt](){this._headerCache=new Di(this._onCodecHeader,this._onCodecUpdate),this._generator=this._getGenerator(),this._generator.next()}*flush(){this._flushing=!0;for(let t=this._generator.next();t.value;t=this._generator.next())yield t.value;this._flushing=!1,this[nt]()}*parseChunk(t){for(let r=this._generator.next(t);r.value;r=this._generator.next())yield r.value}parseAll(t){return[...this.parseChunk(t),...this.flush()]}*_getGenerator(){if(this._inputMimeType.match(/aac/))this._parser=new Vi(this,this._headerCache,this._onCodec);else if(this._inputMimeType.match(/mpeg/))this._parser=new Ui(this,this._headerCache,this._onCodec);else if(this._inputMimeType.match(/flac/))this._parser=new Lr(this,this._headerCache,this._onCodec);else if(this._inputMimeType.match(/ogg/))this._parser=new $i(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 t=yield*this._parser[mt]();t&&(yield t)}}*[$](t=0,r=0){let n;for(;this._rawData[E]<=t+r;){if(n=yield,this._flushing)return this._rawData[V](r);n&&(this._totalBytesIn+=n[E],this._rawData=zi(this._rawData,n))}return this._rawData[V](r)}[Xe](t){this._currentReadPosition+=t,this._rawData=this._rawData[V](t)}[ki](t){this._sampleRate=t[Pe][W],t[Pe][_e]=t[dt]>0?Math.round(t[J][E]/t[dt])*8:0,t[It]=this._frameNumber++,t[_r]=this._totalBytesOut,t[Sr]=this._totalSamples,t[vr]=this._totalSamples/this._sampleRate*1e3,t[hi]=this._crc32(t[J]),this._headerCache[zo](t[Pe][_e],t[vr]),this._totalBytesOut+=t[J][E],this._totalSamples+=t[X]}[jt](t){if(t[ve]){if(t[ze]){let r=t[X];t[ve].forEach(n=>{let i=n[X];r<i&&(n[X]=r>0?r:0,n[dt]=n[X]/n[Pe][W]*1e3),r-=i,this[ki](n)})}else t[X]=0,t[ve].forEach(r=>{t[X]+=r[X],this[ki](r)});t[dt]=t[X]/this._sampleRate*1e3||0,t[Sr]=this._totalSamples,t[vr]=this._totalSamples/this._sampleRate*1e3||0,t[_r]=this._totalBytesOut}else this[ki](t)}_log(t,r){if(this._enableLogging){let n=[`${te}: ${this[te]}`,`inputMimeType: ${this._inputMimeType}`,`readPosition: ${this._currentReadPosition}`,`totalBytesIn: ${this._totalBytesIn}`,`${_r}: ${this._totalBytesOut}`],i=Math.max(...n.map(s=>s[E]));r.push(`--stats--${"-".repeat(i-9)}`,...n,"-".repeat(i)),t("codec-parser",r.reduce((s,o)=>s+`
|
|
4
|
+
`+o,""))}}[rt](...t){this._log(console.warn,t)}[Po](...t){this._log(console.error,t)}};var ru=Zi;var Yo=ve;var qo=J;var nu=Pe;var iu=ze;var su=fn;var ou=Sr;function Ct(e){var t=t;function r(){}t={};function n(R){throw R}var i,s,o,a,c,l,d,f,u,h,m;function g(){var R=m.buffer;i=new Int8Array(R),s=new Int16Array(R),a=new Uint8Array(R),c=new Uint16Array(R),o=new Int32Array(R),l=new Uint32Array(R),d=new Float32Array(R),f=new Float64Array(R),u=new BigInt64Array(R),h=new BigUint64Array(R)}for(var p=R=>{for(var He,Xn,Ur=0,qs=0,js=R.length,Qs=new Uint8Array((js*3>>2)-(R[js-2]=="=")-(R[js-1]=="="));Ur<js;Ur+=4,qs+=3)He=Z[R.charCodeAt(Ur+1)],Xn=Z[R.charCodeAt(Ur+2)],Qs[qs]=Z[R.charCodeAt(Ur)]<<2|He>>4,Qs[qs+1]=He<<4|Xn>>2,Qs[qs+2]=Xn<<6|Z[R.charCodeAt(Ur+3)];return Qs},y=()=>n(""),_=()=>{},b={},x=R=>R(),v=()=>performance.now(),A=(R,He)=>{if(b[R]&&(clearTimeout(b[R].id),delete b[R]),!He)return 0;var Xn=setTimeout(()=>{delete b[R],x(()=>qc(R,v()))},He);return b[R]={id:Xn,timeout_ms:He},0},S=Math.atan,M=Math.cos,L=Math.exp,w=Math.log,T=Math.pow,F=Math.sin,U=R=>{var He=a.length;return R>>>=0,!1},C=R=>{throw`exit(${R})`},Z=new Uint8Array(123),Ie=25;Ie>=0;--Ie)Z[48+Ie]=52+Ie,Z[65+Ie]=Ie,Z[97+Ie]=26+Ie;Z[43]=62,Z[47]=63;var ur={e:y,d:_,f:A,b:S,a:M,i:L,h:w,g:T,c:F,k:U,j:C};function Ys(R){Wn=R.n,Wc=R.o,Xc=R.p,Kc=R.q,$c=R.r,Zc=R.s,Yc=R.t,qc=R.v}var Wn,Wc,Xc,Kc,$c,Zc,Yc,qc;function v0(R){R.m()}Ct.wasm||Object.defineProperty(Ct,"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¯ñ\Ñós9\§ôÊ@Ü (tÃø4° ¢7fqÓg²Jè6x[zç®&4=} p.(°tÍÞã¾>÷CõË"*k?¿~7~H2ÛÜâ.ÏQä;6{ÜãFÑá'DD¤±°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ïgN¾)ø§\V0uSIö:ÌU4ж¯´Õn9ÔèE£ZƼ{hµmÙ¾6ÆÑ+xñ´«þ¸=Mߤ·å®«ïÆGFÝì|H?äE"þ!9«Æïpæ'][¯ù·£W÷O§&#ax$qf=}ø ô bÏ×W÷LôoÝWQÕÓ)u÷½èV|¥Gà¨Ö¸@ê|ÇK5ò A·Â9CS2¸¼¿,äÝÑÝy!ÑR%ÆÝÎ0Âv§ qTcó±hØÉã=}Z=}Ælüën¯ð(-°ÜwVÏï.th¥íS~SÏ»ZZÔZ
|
|
6
6
|
3BÌÛ¬<éæ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óäsE\ýïé§Ö:Ò'Cç(_X$\¦½eÒ8$XF|eíÙÓ¡¤Û<ØÞÛ¸9¿ðÃÎ#b~× 4éîÿÏq
|
|
7
7
|
ód|0wU&®è·vh6¨{ÚçÚ18Ó(ÓY\0¦= çèíß)Ø=}[xü-v?N(Kkg0}âÚ´ð¬ÕQNÍ¢usѳ=}. ëg
û= ÍMBp'²¨ x4è@9t§eݵ¾âð½ z?Z¹FH'̯¿<K,üµ<{ ¶JãývåàÆeù0Ð"F¥ÃÒÞþÔÉvCzl}ðN£ Í^P%²¸FX»WÎêô¶
äÉJ^g×SÃã.Ät*'ªG«ÒB<ÜÓ
¿ºp\àuV¯£ÅݽáÞ ùß=}ÎÚ^ÿí>¥!¨ â=M·?*/¤"å)â·ÿîÿî*(%*2[½"üríÔ4l½»a}¯CwpCÓèìGc-ã6®=M32k?Êg
!So-x>³G+ã@ò, ÁïáåN0þÙè.~È÷¡vTr¶Ã[üB±º»ávëw¹{pܺû"Aæ±9Æ^¹³òïRIAy5GÂwÉf4@Tù|qý7ðªwBL|Ôqv!ª°|]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ÑUy¹¦ß§/6P0(Cúýb"þ¥°VÙÄá£ÓÙ@¾YýòD{òÃv?EP©=MBé\ĽYäýRò øfâëEEf¼D+gC×úDZGÅÿ±Ç?TzÙ¡±ÏÁÕ¯¦ðvZmT}3xËz×cºrÑM=Mc-É©Ô7½wæc§Î»cû¾yfÙWòÆÝÔc¥³ôØf«Äñ·9ø%g:y^+{U]¤þ
[&fÓÏYë«Gªõ¹¦Öðþ¬moÛø?/ÛS.[S9ÛùC
/û2²Y£ÎÑ%/sy¢×ÌùJW6Oí\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¶ÌºHgNjÒ{æ¾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 p0={a:dr};this.setModule=R=>{e.setModule(Tt,R)},this.getModule=()=>e.getModule(Tt),this.instantiate=()=>(this.getModule().then(R=>WebAssembly.instantiate(R,p0)).then(R=>{let He=R.exports;bs(He),m=He.l,g(),m0(He),r()}),this.ready=new Promise(R=>{r=R}).then(()=>{this.HEAP=m.buffer,this.malloc=Oc,this.free=Gc,this.create_decoder=Bn,this.send_setup=Nc,this.init_dsp=Uc,this.decode_packets=Hc,this.destroy_decoder=Vc}),this)}function Tr(){return this._init=()=>new this._WASMAudioDecoderCommon().instantiate(this._EmscriptenWASM,this._module).then(e=>{this._common=e,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 t=256;this._errors=this._common.allocateTypedArray(t,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,t)}),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=e=>{this._input.buf.set(e),this._inputLen.buf[0]=e.length,this._common.wasm.send_setup(this._decoder,this._firstPage),this._firstPage=!1},this.initDsp=()=>{this._common.wasm.init_dsp(this._decoder)},this.decodePackets=e=>{let t=[],r=0,n=[];for(let i=0;i<e.length;i++){let s=e[i];this._input.buf.set(s),this._inputLen.buf[0]=s.length,this._common.wasm.decode_packets(this._decoder);let o=this._samplesDecoded.buf[0],a=[],d=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 c=new Float32Array(o);o&&c.set(new Float32Array(this._common.wasm.HEAP,d[l],o)),a.push(c)}t.push(a),r+=o,this._frameNumber++,this._inputBytes+=s.length,this._outputSamples+=o;for(let l=0;l<this._errorsLength.buf;l+=2){let c=this._common.codeToString(this._errors.buf[l]),f=this._common.codeToString(this._errors.buf[l+1]);n.push({message:c+" vorbis_synthesis"+f,frameLength:s.length,frameNumber:this._frameNumber,inputBytes:this._inputBytes,outputSamples:this._outputSamples})}this._errorsLength.buf[0]=0}return this._WASMAudioDecoderCommon.getDecodedAudioMultiChannel(n,t,this._channels.buf[0],r,this._sampleRate.buf[0],16)},this._isWebWorker=Tr.isWebWorker,this._WASMAudioDecoderCommon=Tr.WASMAudioDecoderCommon||re,this._EmscriptenWASM=Tr.EmscriptenWASM||Tt,this._module=Tr.module,this._inputSize=128*1024,this._ready=this._init(),this}var xo=Symbol(),It=class{constructor(){this._onCodec=t=>{if(t!=="vorbis")throw new Error("@wasm-audio-decoders/ogg-vorbis does not support this codec "+t)},new re,this._init(),this._ready=this[xo](Tr)}_init(){this._vorbisSetupInProgress=!0,this._totalSamplesDecoded=0,this._codecParser=new Yd("audio/ogg",{onCodec:this._onCodec,enableFrameCRC32:!1})}async[xo](t){if(this._decoder){let r=this._decoder;await r.ready.then(()=>r.free())}return this._decoder=new t,this._decoder.ready}get ready(){return this._ready}async reset(){return this._init(),this._decoder.reset()}free(){this._decoder.free()}async decodeOggPages(t){let r=[];for(let s=0;s<t.length;s++){let o=t[s];if(this._vorbisSetupInProgress&&(o[yo][0]===1&&this._decoder.sendSetupHeader(o[yo]),o[go].length)){let a=o[go][0][qd];this._decoder.sendSetupHeader(a[Qd]),this._decoder.initDsp(),this._vorbisSetupInProgress=!1}r.push(...o[go].map(a=>a[yo]))}let n=await this._decoder.decodePackets(r);this._totalSamplesDecoded+=n.samplesDecoded;let i=t[t.length-1];if(i&&i[jd]){let s=this._totalSamplesDecoded-i[Jd];if(s>0){for(let o=0;o<n.channelData.length;o++)n.channelData[o]=n.channelData[o].subarray(0,n.samplesDecoded-s);n.samplesDecoded-=s,this._totalSamplesDecoded-=s}}return n}async decode(t){return this.decodeOggPages([...this._codecParser.parseChunk(t)])}async flush(){let t=await this.decodeOggPages([...this._codecParser.flush()]);return await this.reset(),t}async decodeFile(t){let r=await this.decodeOggPages([...this._codecParser.parseAll(t)]);return await this.reset(),r}};var rl=class extends tn{constructor(t){super(t,"ogg-vorbis-decoder",Tr,Tt)}async sendSetupHeader(t){return this.postToDecoder("sendSetupHeader",t)}async initDsp(){return this.postToDecoder("initDsp")}async decodePackets(t){return this.postToDecoder("decodePackets",t)}},Vi=class extends It{constructor(){super(),this._ready=super[xo](rl)}async free(){await this._decoder.free()}terminate(){this._decoder.terminate()}};Vs(It,"OggVorbisDecoder");Vs(Vi,"OggVorbisDecoderWebWorker");var nl=class extends Error{constructor(t){super(t),this.name="OggDecodeError"}};async function bo(e,t=new It){await t.ready;let r=await t.decode(new Uint8Array(e)),n=r.errors;if(n&&n.length>0)throw new nl(n.map(i=>i.message).join("; "));return{sampleRate:r.sampleRate,channels:r.channelData.length,bitDepth:r.bitDepth,channelData:r.channelData}}var Gi=class extends Error{constructor(t){super(t),this.name="AudioRegistryError"}},bn=class{constructor(t,r={}){this.vfs=t;this.refCounts=new Map;this.cache=new Nt(r.cacheSize??64)}get size(){return this.cache.size}async load(t){let r=t.toLowerCase(),n=this.cache.get(r);if(n)return this.refCounts.set(r,(this.refCounts.get(r)??0)+1),n;let s=(await this.vfs.readFile(t)).slice().buffer,o=await this.decodeByExtension(t,s);return this.cache.set(r,o),this.refCounts.set(r,1),o}release(t){let r=t.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(t,r){let n=t.toLowerCase();if(n.endsWith(".wav")){let i=Hs(r),s=i.channels,o=Array.from({length:s},()=>new Float32Array(i.samples.length/s));for(let a=0;a<i.samples.length;a+=1)o[a%s][Math.floor(a/s)]=i.samples[a];return{sampleRate:i.sampleRate,channels:s,bitDepth:i.bitsPerSample,channelData:o}}if(n.endsWith(".ogg")||n.endsWith(".oga"))return bo(r);throw new Gi(`Unsupported audio format: ${t}`)}};var zm="quake2ts-pak-indexes",Pm="pak-indexes";function eu(){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 Wi(e,t){let r=eu();return r?new Promise((n,i)=>{let s=r.open(e,1);s.onupgradeneeded=()=>{let{result:o}=s;o.objectStoreNames.contains(t)||o.createObjectStore(t,{keyPath:"key"})},s.onerror=()=>i(s.error??new Error("Unknown IndexedDB error")),s.onsuccess=()=>n(s.result)}):Promise.reject(new Error("IndexedDB is not available in this environment"))}function Xi(e,t,r,n){return new Promise((i,s)=>{let a=e.transaction(t,r).objectStore(t),d=n(a);d.onsuccess=()=>i(d.result),d.onerror=()=>s(d.error??new Error("IndexedDB transaction error"))})}function il(e,t){return`${de(e)}:${t.toString(16)}`}function Dm(e){return e.map(t=>({...t}))}var _o=class{constructor(t=zm,r=Pm){this.dbName=t;this.storeName=r}get isSupported(){return!!eu()}async persist(t){if(!this.isSupported)return;let r=t.validate(),n={...r,key:il(t.name,r.checksum),name:t.name,size:t.size,persistedAt:Date.now(),entries:Dm(r.entries)},i=await Wi(this.dbName,this.storeName);return await Xi(i,this.storeName,"readwrite",s=>s.put(n)),i.close(),n}async find(t,r){if(!this.isSupported)return;let n=await Wi(this.dbName,this.storeName),i=r!==void 0?il(t,r):void 0,s=await Xi(n,this.storeName,"readonly",o=>i?o.get(i):o.getAll());if(n.close(),!!s){if(Array.isArray(s)){let o=de(t),a=s.filter(d=>de(d.name)===o);return a.length===0?void 0:a.sort((d,l)=>l.persistedAt-d.persistedAt)[0]}return s}}async remove(t,r){if(!this.isSupported)return!1;let n=await Wi(this.dbName,this.storeName),i=r!==void 0?il(t,r):void 0,s=await Xi(n,this.storeName,"readwrite",o=>{if(i)return o.delete(i);let a=`${de(t)}:`;return o.delete(IDBKeyRange.bound(a,`${a}\uFFFF`,!1,!0))});return n.close(),typeof s=="number"?s>0:!0}async clear(){if(!this.isSupported)return;let t=await Wi(this.dbName,this.storeName);await Xi(t,this.storeName,"readwrite",r=>r.clear()),t.close()}async list(){if(!this.isSupported)return[];let t=await Wi(this.dbName,this.storeName),r=await Xi(t,this.storeName,"readonly",n=>n.getAll());return t.close(),r.sort((n,i)=>i.persistedAt-n.persistedAt)}};var Ir=class extends Error{constructor(r,n){super(n??`Missing dependencies: ${r.join(", ")}`);this.missing=r;this.name="AssetDependencyError"}},Ki=class{constructor(){this.nodes=new Map}register(t,r=[]){let n=this.nodes.get(t)??{dependencies:new Set,loaded:!1};r.forEach(i=>n.dependencies.add(i)),this.nodes.set(t,n),r.forEach(i=>{this.nodes.has(i)||this.nodes.set(i,{dependencies:new Set,loaded:!1})})}markLoaded(t){let r=this.nodes.get(t)??{dependencies:new Set,loaded:!1},n=this.getMissingDependencies(t,r);if(n.length>0)throw new Ir(n,`Asset ${t} is missing dependencies: ${n.join(", ")}`);r.loaded=!0,this.nodes.set(t,r)}markUnloaded(t){let r=this.nodes.get(t);r&&(r.loaded=!1)}isLoaded(t){return this.nodes.get(t)?.loaded??!1}missingDependencies(t){let r=this.nodes.get(t);return r?this.getMissingDependencies(t,r):[]}reset(){this.nodes.clear()}getMissingDependencies(t,r){let n=[];for(let i of r.dependencies)this.nodes.get(i)?.loaded||n.push(i);return n}},vo=class{constructor(t,r={}){this.vfs=t;this.maps=new Map;this.textures=new en({capacity:r.textureCacheCapacity??128}),this.audio=new bn(t,{cacheSize:r.audioCacheSize??64}),this.dependencyTracker=r.dependencyTracker??new Ki,this.md2=new jr(t),this.md3=new Qr(t),this.sprite=new Jr(t),this.bsp=new qr(t),this.palette=new Uint8Array(768);for(let n=0;n<256;n++)this.palette[n*3]=n,this.palette[n*3+1]=n,this.palette[n*3+2]=n}async loadPalette(t="pics/colormap.pcx"){try{let r=await this.vfs.readFile(t),n=jn(r);n.palette&&(this.palette=n.palette)}catch(r){console.warn(`Failed to load palette from ${t}:`,r)}}isAssetLoaded(t,r){return this.dependencyTracker.isLoaded(this.makeKey(t,r))}registerTexture(t,r){this.textures.set(t,r);let n=this.makeKey("texture",t);this.dependencyTracker.register(n),this.dependencyTracker.markLoaded(n)}async loadTexture(t){let r=this.textures.get(t);if(r)return r;let n=await this.vfs.readFile(t),i=t.split(".").pop()?.toLowerCase(),s;if(i==="wal")s=Us(n,this.palette);else if(i==="pcx")s=Ns(jn(n));else if(i==="tga")s=Ad(Da(n));else throw new Error(`Unsupported texture format for loadTexture: ${i}`);return this.registerTexture(t,s),s}async loadSound(t){let r=await this.audio.load(t),n=this.makeKey("sound",t);return this.dependencyTracker.register(n),this.dependencyTracker.markLoaded(n),r}async loadMd2Model(t,r=[]){let n=this.makeKey("model",t),i=r.map(a=>this.makeKey("texture",a));this.dependencyTracker.register(n,i);let s=this.dependencyTracker.missingDependencies(n);if(s.length>0)throw new Ir(s,`Asset ${n} is missing dependencies: ${s.join(", ")}`);let o=await this.md2.load(t);return this.dependencyTracker.markLoaded(n),o}getMd2Model(t){return this.md2.get(t)}async loadMd3Model(t,r=[]){let n=this.makeKey("model",t),i=r.map(a=>this.makeKey("texture",a));this.dependencyTracker.register(n,i);let s=this.dependencyTracker.missingDependencies(n);if(s.length>0)throw new Ir(s,`Asset ${n} is missing dependencies: ${s.join(", ")}`);let o=await this.md3.load(t);return this.dependencyTracker.markLoaded(n),o}getMd3Model(t){return this.md3.get(t)}async loadSprite(t){let r=this.makeKey("sprite",t);this.dependencyTracker.register(r);let n=await this.sprite.load(t);return this.dependencyTracker.markLoaded(r),n}async loadMap(t){let r=this.makeKey("map",t);if(this.maps.has(t))return this.maps.get(t);this.dependencyTracker.register(r);let n=await this.bsp.load(t);return this.maps.set(t,n),this.dependencyTracker.markLoaded(r),n}getMap(t){return this.maps.get(t)}listFiles(t){return this.vfs.findByExtension(t)}resetForLevelChange(){this.textures.clear(),this.audio.clearAll(),this.dependencyTracker.reset(),this.maps.clear()}makeKey(t,r){return`${t}:${de(r)}`}};var So=class{constructor(t){this.factory=t}getContext(){return this.context||(this.context=this.factory()),this.context}async resume(){let t=this.getContext();t.state==="suspended"&&await t.resume()}getState(){return this.context?.state??"suspended"}};function wo(e){let t=e.getContext(),r=t.createGain();r.gain.value=1;let n=t.createDynamicsCompressor(),i=t.createBiquadFilter?.(),s;if(t.createConvolver&&t.createGain){let o=t.createConvolver(),a=t.createGain(),d=t.createGain();a.connect(o),o.connect(d),s={convolver:o,input:a,output:d}}return i?(i.type="lowpass",i.frequency.value=2e4,i.Q.value=.707,r.connect(i),i.connect(n),s&&s.output.connect(i)):(r.connect(n),s&&s.output.connect(n)),n.connect(t.destination),{context:t,master:r,compressor:n,filter:i,reverb:s}}var Ao=class{constructor(t=new $r){this.configStrings=t;this.buffers=new Map}registerName(t){return this.configStrings.soundIndex(t)}register(t,r){let n=this.registerName(t);return this.buffers.set(n,r),n}find(t){return this.configStrings.findSoundIndex(t)}get(t){return this.buffers.get(t)}has(t){return this.buffers.has(t)}getName(t){return this.configStrings.getName(t)}};var Mo=class{constructor(t){this.vfs=t.vfs,this.registry=t.registry,this.contextController=t.context,this.soundRoot=t.soundRoot??"sound/",this.decodeAudio=t.decodeAudio??((r,n)=>{if(!r.decodeAudioData)throw new Error("decodeAudioData is not available on the provided audio context");return r.decodeAudioData(n)})}async precache(t){let r=[...new Set(t.map(s=>this.normalize(s)))],n={loaded:[],skipped:[],missing:[],errors:{}},i=this.contextController.getContext();for(let s of r)try{let o=this.registry.find(s);if(o!==void 0&&this.registry.has(o)){n.skipped.push(s);continue}if(!this.vfs.stat(s)){n.missing.push(s);continue}let l=(await this.vfs.readFile(s)).slice().buffer,c=await this.decodeAudio(i,l);this.registry.register(s,c),n.loaded.push(s)}catch(o){let a=o instanceof Error?o:new Error(String(o));n.errors[s]=a}return n}normalize(t){let r=de(t.replace(/^\//,""));return r.startsWith(this.soundRoot)?r:de(`${this.soundRoot}${r}`)}};var Bm=7,$i=e=>e&Bm;function Eo(e){return Array.from({length:Gn},()=>({entnum:0,entchannel:st.Auto,endTimeMs:0,isPlayer:!1,active:!1})).map(t=>({...t,isPlayer:t.entnum===e}))}function Lo(e,t,r,n){if(r<0)throw new Error("pickChannel: entchannel must be non-negative");let i=$i(r),s=-1,o=Number.POSITIVE_INFINITY;for(let a=0;a<e.length;a+=1){let d=e[a],l=$i(d.entchannel);if(i!==st.Auto&&d.entnum===t&&l===i){s=a;break}if(d.active&&d.entnum===n.playerEntity&&t!==n.playerEntity)continue;let c=d.endTimeMs-n.nowMs;(s===-1||c<o)&&(o=c,s=a)}return s===-1?void 0:s}function To(e,t,r,n,i){if(i)return{left:r,right:r,distanceComponent:0};let s=As(e,t.origin),o=Hn(s),a=Je(s),d=o-Dt;d<0&&(d=0),d*=Bt(n);let l=ga(t.right,a),c=t.mono??!1,f=c||n===0?1:.5*(1+l),u=c||n===0?1:.5*(1-l),h=Math.max(0,Math.floor(r*(1-d)*f));return{left:Math.max(0,Math.floor(r*(1-d)*u)),right:h,distanceComponent:d}}var Io=class{constructor(t){this.activePreset=null;this.enabled=!0;this.node=t,this.node.input.gain.value=.5,this.node.output.gain.value=1}setPreset(t){this.activePreset=t,this.node.convolver.buffer!==(t?.buffer??null)&&(this.node.convolver.buffer=t?.buffer??null),t&&t.gain!==void 0?this.node.output.gain.value=t.gain:this.node.output.gain.value=1}setEnabled(t){this.enabled=t,t?this.node.input.gain.value=.5:this.node.input.gain.value=0}getOutputNode(){return this.node.output}getInputNode(){return this.node.input}};var Co=class{constructor(t){this.activeSources=new Map;this.playbackRate=1;this.contextController=t.context,this.registry=t.registry,this.playerEntity=t.playerEntity,this.channels=Eo(t.playerEntity),this.listener=t.listener??{origin:$c,right:{x:1,y:0,z:0}},this.sfxVolume=t.sfxVolume??1,this.masterVolume=t.masterVolume??1,this.resolveOcclusion=t.resolveOcclusion,this.graph=wo(this.contextController),this.graph.master.gain.value=this.masterVolume,this.graph.reverb&&(this.reverb=new Io(this.graph.reverb))}setListener(t){this.listener=t}setMasterVolume(t){this.masterVolume=t,this.graph.master.gain.value=t}setSfxVolume(t){this.sfxVolume=t}setPlaybackRate(t){this.playbackRate=t;for(let r of this.activeSources.values())r.source.playbackRate&&(r.source.playbackRate.value=t),this.updateSourceGain(r)}async ensureRunning(){await this.contextController.resume()}setReverbPreset(t){this.reverb?.setPreset(t)}play(t){let r=this.registry.get(t.soundIndex);if(!r)return;let n=this.graph.context,i=n.currentTime*1e3,s=Lo(this.channels,t.entity,t.channel,{nowMs:i,playerEntity:this.playerEntity});if(s===void 0)return;let o=this.activeSources.get(s);o&&(o.source.onended=null,o.source.stop(),this.activeSources.delete(s));let a=n.createBufferSource();a.buffer=r,a.loop=t.looping??!1,a.playbackRate&&(a.playbackRate.value=this.playbackRate);let d=t.origin??this.listener.origin,l=n.createGain(),c=this.createPanner(n,t.attenuation),f=this.resolveOcclusion?.(this.listener,d,t.attenuation),u=tu(f?.gainScale??1),h=this.resolveOcclusion?this.createOcclusionFilter(n,f?.lowpassHz??2e4):void 0;this.applyOriginToPanner(c,d);let m=t.entity===this.playerEntity,g=To(d,this.listener,t.volume,t.attenuation,m),y=(t.volume===0?0:Math.max(g.left,g.right)/Math.max(1,t.volume))*(t.volume/255)*this.masterVolume*this.sfxVolume,v=Math.abs(this.playbackRate-1)<.001?1:0;l.gain.value=y*u*v;let b=n.currentTime+(t.timeOffsetMs??0)/1e3,x=(t.looping?Number.POSITIVE_INFINITY:r.duration*1e3)+b*1e3;a.connect(c),this.reverb&&this.reverb.getInputNode();let _=c;h?(c.connect(h),h.connect(l),_=l):(c.connect(l),_=l),l.connect(this.graph.master),this.reverb&&l.connect(this.reverb.getInputNode()),a.start(b),a.onended=()=>{this.channels[s].active=!1,this.activeSources.delete(s)};let A={channelIndex:s,entnum:t.entity,entchannel:$i(t.channel),endTimeMs:x,source:a,panner:c,gain:l,baseGain:y,origin:d,attenuation:t.attenuation,occlusion:h?{scale:u,lowpassHz:f?.lowpassHz,filter:h}:f?{scale:u,lowpassHz:f.lowpassHz}:void 0};return this.channels[s]={entnum:t.entity,entchannel:$i(t.channel),endTimeMs:x,isPlayer:t.entity===this.playerEntity,active:!0},this.activeSources.set(s,A),A}stop(t){let r=this.activeSources.get(t);r&&(r.source.stop(),this.channels[t].active=!1,this.activeSources.delete(t))}stopEntitySounds(t){for(let[r,n]of[...this.activeSources.entries()])n.entnum===t&&(n.source.stop(),this.channels[r].active=!1,this.activeSources.delete(r))}updateEntityPosition(t,r){for(let n of this.activeSources.values())if(n.entnum===t&&(this.applyOriginToPanner(n.panner,r),n.origin=r,this.resolveOcclusion)){let i=this.resolveOcclusion(this.listener,r,n.attenuation);this.applyOcclusion(n,i)}}positionedSound(t,r,n,i){return this.play({entity:0,channel:st.Auto,soundIndex:r,volume:n,attenuation:i,origin:t})}ambientSound(t,r,n){return this.play({entity:0,channel:st.Auto,soundIndex:r,volume:n,attenuation:Wn,origin:t,looping:!0})}getChannelState(t){return this.channels[t]}getDiagnostics(){return{activeChannels:this.activeSources.size,masterVolume:this.masterVolume,sfxVolume:this.sfxVolume,channels:[...this.channels],activeSounds:[...this.activeSources.values()].map(t=>({entnum:t.entnum,entchannel:t.entchannel,channelIndex:t.channelIndex,origin:t.origin,gain:t.gain.gain.value,baseGain:t.baseGain,attenuation:t.attenuation,maxDistance:t.panner.maxDistance,distanceModel:t.panner.distanceModel,occlusion:t.occlusion?{scale:t.occlusion.scale,lowpassHz:t.occlusion.lowpassHz}:void 0}))}}setUnderwater(t,r=400){let n=this.graph.filter;n&&(n.type="lowpass",n.Q.value=.707,n.frequency.value=t?r:2e4)}createPanner(t,r){let n=t.createPanner?t.createPanner():Object.assign(t.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(t,r){let n=Bt(r);return t.refDistance=Dt,t.maxDistance=fr(r),t.rolloffFactor=n,t.distanceModel=r===0?"linear":"inverse",t.positionX.value=this.listener.origin.x,t.positionY.value=this.listener.origin.y,t.positionZ.value=this.listener.origin.z,t}applyOriginToPanner(t,r){t.positionX.value=r.x,t.positionY.value=r.y,t.positionZ.value=r.z}createOcclusionFilter(t,r){if(!t.createBiquadFilter)return;let n=t.createBiquadFilter();return n.type="lowpass",n.Q.value=.707,n.frequency.value=sl(r,10,2e4),n}updateSourceGain(t){let r=t.occlusion?.scale??1,n=Math.abs(this.playbackRate-1)<.001?1:0;t.gain.gain.value=t.baseGain*r*n}applyOcclusion(t,r){let n=tu(r?.gainScale??1),i=Math.abs(this.playbackRate-1)<.001?1:0;if(t.gain.gain.value=t.baseGain*n*i,t.occlusion?.filter){let s=r?.lowpassHz??2e4;t.occlusion.filter.frequency.value=sl(s,10,2e4)}t.occlusion?(t.occlusion.scale=n,t.occlusion.lowpassHz=r?.lowpassHz):r&&(t.occlusion={scale:n,lowpassHz:r.lowpassHz})}},sl=(e,t,r)=>Math.min(r,Math.max(t,e)),tu=e=>sl(e,0,1);var Zi=class{constructor(t){this.trace=t;this.resolve=(t,r,n)=>{let i=Hn(As(r,t.origin)),s=fr(n),d=2e4*(1-Math.min(i,s)/Math.max(1,s)*.9),l=this.trace(t.origin,r,void 0,void 0),c=1,f=2e4;l.fraction<1&&(c=.3,f=400);let u=Math.min(d,f);if(c<1||u<2e4)return{gainScale:c,lowpassHz:u}}}};function ru(e){return new Zi(e).resolve}var Ro=class{constructor(t){this.createElement=t.createElement,this.resolveSource=t.resolveSource??(async r=>r),this.volume=t.volume??1,this.crossfadeDuration=t.crossfadeDuration??1}async playTrack(t){let r=`music/track${t.toString().padStart(2,"0")}.ogg`;return this.play(r)}async play(t,{loop:r=!0,restart:n=!1}={}){if(this.track===t&&this.currentElement){this.currentElement.loop=r,this.cancelFade(),this.fadingElement&&(this.fadingElement.pause(),this.fadingElement=void 0),this.currentElement.volume=this.volume,n&&(this.currentElement.currentTime=0),(this.currentElement.paused||n)&&await this.currentElement.play();return}let i=await this.resolveSource(t);this.cancelFade(),this.fadingElement&&(this.fadingElement.pause(),this.fadingElement=void 0),this.currentElement&&(this.fadingElement=this.currentElement,this.currentElement=void 0);let s=this.createElement();s.src=i,s.loop=r,s.volume=0,s.currentTime=0,s.load();try{await s.play()}catch(o){console.warn(`MusicSystem: Failed to play ${t}`,o),this.fadingElement}this.currentElement=s,this.track=t,this.startCrossfade()}pause(){this.cancelFade(),this.currentElement&&!this.currentElement.paused&&this.currentElement.pause(),this.fadingElement&&(this.fadingElement.pause(),this.fadingElement=void 0)}async resume(){!this.currentElement||!this.currentElement.paused||(await this.currentElement.play(),this.currentElement.volume=this.volume)}stop(){this.cancelFade(),this.currentElement&&(this.currentElement.pause(),this.currentElement.currentTime=0,this.currentElement=void 0),this.fadingElement&&(this.fadingElement.pause(),this.fadingElement=void 0),this.track=void 0}setVolume(t){this.volume=t,this.currentElement&&!this.fadeInterval&&(this.currentElement.volume=t)}getState(){let t=!!(this.currentElement&&!this.currentElement.paused&&!this.currentElement.ended),r=!!this.currentElement?.paused;return{track:this.track,paused:r,playing:t,volume:this.volume}}startCrossfade(){let r=this.crossfadeDuration*1e3/50,n=this.volume/r,i=0,s=this.fadingElement?this.fadingElement.volume:0,o=()=>{let a=!1;this.currentElement&&(i=Math.min(this.volume,i+n),this.currentElement.volume=i,i<this.volume&&(a=!0)),this.fadingElement&&(s=Math.max(0,s-n),this.fadingElement.volume=s,s>0?a=!0:(this.fadingElement.pause(),this.fadingElement=void 0)),a||this.cancelFade()};o(),(this.currentElement&&this.currentElement.volume<this.volume||this.fadingElement)&&(this.fadeInterval=setInterval(o,50))}cancelFade(){this.fadeInterval&&(clearInterval(this.fadeInterval),this.fadeInterval=void 0)}};function Om(e){e.enable(e.DEPTH_TEST),e.depthFunc(e.LEQUAL),e.enable(e.CULL_FACE),e.cullFace(e.BACK),e.enable(e.BLEND),e.blendFuncSeparate(e.SRC_ALPHA,e.ONE_MINUS_SRC_ALPHA,e.ONE,e.ONE_MINUS_SRC_ALPHA)}function Nm(e,t,r,n){for(let i of t){let s=e.getExtension(i);if(!s)throw new Error(`Missing required WebGL extension: ${i}`);n.set(i,s)}for(let i of r){let s=e.getExtension(i);s&&n.set(i,s)}}function nu(e,t={}){let{contextAttributes:r,requiredExtensions:n=[],optionalExtensions:i=[]}=t,s=e.getContext("webgl2",r??{antialias:!0});if(!s)throw new Error("WebGL2 not supported or failed to initialize");Om(s);let o=new Map;Nm(s,n,i,o);let a=!1,d=new Set,l=new Set,c=u=>{a=!0,u.preventDefault();for(let h of d)h()},f=()=>{a=!1;for(let u of l)u()};return e.addEventListener("webglcontextlost",c),e.addEventListener("webglcontextrestored",f),{gl:s,extensions:o,isLost:()=>a,onLost(u){return d.add(u),()=>d.delete(u)},onRestored(u){return l.add(u),()=>l.delete(u)},dispose(){e.removeEventListener("webglcontextlost",c),e.removeEventListener("webglcontextrestored",f),d.clear(),l.clear(),o.clear()}}}function iu(e,t,r){let n=e.createShader(t);if(!n)throw new Error("Failed to allocate shader");if(e.shaderSource(n,r),e.compileShader(n),!e.getShaderParameter(n,e.COMPILE_STATUS)){let s=e.getShaderInfoLog(n)??"Unknown shader compile failure";throw e.deleteShader(n),new Error(s)}return n}function Um(e,t,r,n){let i=e.createProgram();if(!i)throw new Error("Failed to allocate shader program");if(e.attachShader(i,t),e.attachShader(i,r),n)for(let[o,a]of Object.entries(n))e.bindAttribLocation(i,a,o);if(e.linkProgram(i),!e.getProgramParameter(i,e.LINK_STATUS)){let o=e.getProgramInfoLog(i)??"Unknown shader link failure";throw e.deleteProgram(i),new Error(o)}return i}var Ee=class e{constructor(t,r){this.uniformLocations=new Map;this.attributeLocations=new Map;this.gl=t,this.program=r}static create(t,r,n){let i=iu(t,t.VERTEX_SHADER,r.vertex),s=iu(t,t.FRAGMENT_SHADER,r.fragment);try{let o=Um(t,i,s,n);return new e(t,o)}finally{t.deleteShader(i),t.deleteShader(s)}}use(){this.gl.useProgram(this.program)}getUniformLocation(t){if(!this.uniformLocations.has(t)){let r=this.gl.getUniformLocation(this.program,t);this.uniformLocations.set(t,r)}return this.uniformLocations.get(t)??null}getAttributeLocation(t){if(!this.attributeLocations.has(t)){let r=this.gl.getAttribLocation(this.program,t);this.attributeLocations.set(t,r)}return this.attributeLocations.get(t)??-1}dispose(){this.gl.deleteProgram(this.program),this.uniformLocations.clear(),this.attributeLocations.clear()}};function su(e,t,r){return Ee.create(e,t,r)}var Le=class{constructor(t,r=t.STATIC_DRAW,n){this.gl=t,this.target=n??t.ARRAY_BUFFER;let i=t.createBuffer();if(!i)throw new Error("Failed to allocate buffer");this.buffer=i,t.bindBuffer(this.target,this.buffer),t.bufferData(this.target,0,r)}bind(){this.gl.bindBuffer(this.target,this.buffer)}upload(t,r=this.gl.STATIC_DRAW){this.bind(),this.gl.bufferData(this.target,t,r)}update(t,r=0){this.bind(),this.gl.bufferSubData(this.target,r,t)}dispose(){this.gl.deleteBuffer(this.buffer)}},xe=class extends Le{constructor(t,r=t.STATIC_DRAW){super(t,r,t.ELEMENT_ARRAY_BUFFER)}},Fe=class{constructor(t){this.gl=t;let r=t.createVertexArray();if(!r)throw new Error("Failed to allocate vertex array object");this.vao=r}bind(){this.gl.bindVertexArray(this.vao)}configureAttributes(t,r){this.bind(),r&&r.bind();for(let n of t)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)}},_n=class{constructor(t,r=t.TEXTURE_2D){this.width=0;this.height=0;this.gl=t,this.target=r;let n=t.createTexture();if(!n)throw new Error("Failed to allocate texture");this.texture=n}bind(t=0){this.gl.activeTexture(this.gl.TEXTURE0+t),this.gl.bindTexture(this.target,this.texture)}setParameters(t){this.bind(),t.wrapS!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_WRAP_S,t.wrapS),t.wrapT!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_WRAP_T,t.wrapT),t.minFilter!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_MIN_FILTER,t.minFilter),t.magFilter!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_MAG_FILTER,t.magFilter)}upload(t,r,n){this.width=t,this.height=r,this.uploadImage(0,this.gl.RGBA,t,r,0,this.gl.RGBA,this.gl.UNSIGNED_BYTE,n)}uploadImage(t,r,n,i,s,o,a,d){this.bind(),this.gl.texImage2D(this.target,t,r,n,i,s,o,a,d)}dispose(){this.gl.deleteTexture(this.texture)}},vn=class{constructor(t){this.gl=t,this.target=t.TEXTURE_CUBE_MAP;let r=t.createTexture();if(!r)throw new Error("Failed to allocate cubemap texture");this.texture=r}bind(t=0){this.gl.activeTexture(this.gl.TEXTURE0+t),this.gl.bindTexture(this.target,this.texture)}setParameters(t){this.bind(),t.wrapS!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_WRAP_S,t.wrapS),t.wrapT!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_WRAP_T,t.wrapT),t.minFilter!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_MIN_FILTER,t.minFilter),t.magFilter!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_MAG_FILTER,t.magFilter)}uploadFace(t,r,n,i,s,o,a,d,l){this.bind(),this.gl.texImage2D(t,r,n,i,s,o,a,d,l)}dispose(){this.gl.deleteTexture(this.texture)}},Fo=class{constructor(t){this.gl=t;let r=t.createFramebuffer();if(!r)throw new Error("Failed to allocate framebuffer");this.framebuffer=r}bind(t=this.gl.FRAMEBUFFER){this.gl.bindFramebuffer(t,this.framebuffer)}attachTexture2D(t,r,n=0){this.bind(),this.gl.framebufferTexture2D(this.gl.FRAMEBUFFER,t,r.target,r.texture,n)}dispose(){this.gl.deleteFramebuffer(this.framebuffer)}};var al=4,ol=7*al,ll=[{index:0,size:3,type:5126,stride:ol,offset:0},{index:1,size:2,type:5126,stride:ol,offset:3*al},{index:2,size:2,type:5126,stride:ol,offset:5*al}];function Hm(e,t){return{width:e,height:e,padding:t,data:new Uint8Array(e*e*4),cursorX:0,cursorY:0,rowHeight:0}}function Vm(e){let t=e.width*e.height;if(t===0)throw new Error("Invalid lightmap with zero area");let r=e.samples.byteLength/t;if(!Number.isInteger(r)||r<3||r>4)throw new Error("Unsupported lightmap channel count");return r}function Gm(e,t,r){let n=Vm(r),i=e.width*4,s=t.x+e.padding,o=t.y+e.padding,a=0;for(let d=0;d<r.height;d++){let l=(o+d)*i+s*4;for(let c=0;c<r.width;c++){let f=l+c*4;e.data[f]=r.samples[a],e.data[f+1]=r.samples[a+1],e.data[f+2]=r.samples[a+2],e.data[f+3]=n===4?r.samples[a+3]:255,a+=n}}}function Wm(e,t,r){let n=t.width+r.lightmapPadding*2,i=t.height+r.lightmapPadding*2;if(n>r.atlasSize||i>r.atlasSize)throw new Error("Lightmap too large for atlas");for(let a of e){if(a.cursorX+n>a.width&&(a.cursorX=0,a.cursorY+=a.rowHeight+r.lightmapPadding,a.rowHeight=0),a.cursorY+i>a.height)continue;let d={atlasIndex:e.indexOf(a),x:a.cursorX,y:a.cursorY,width:t.width,height:t.height};return a.cursorX+=n+r.lightmapPadding,a.rowHeight=Math.max(a.rowHeight,i),{placement:d,atlas:a}}let s=Hm(r.atlasSize,r.lightmapPadding);e.push(s);let o={atlasIndex:e.length-1,x:0,y:0,width:t.width,height:t.height};return s.cursorX=n+r.lightmapPadding,s.rowHeight=i,{placement:o,atlas:s}}function ko(e){return e instanceof Float32Array?e:new Float32Array(e)}function Xm(e,t){if(!e){let n=new Uint16Array(t);for(let i=0;i<t;i++)n[i]=i;return n}return e instanceof Uint16Array?e:new Uint16Array(e)}function Km(e,t){let r=new Float32Array(e.length);for(let n=0;n<e.length;n+=2)r[n]=t.offset[0]+e[n]*t.scale[0],r[n+1]=t.offset[1]+e[n+1]*t.scale[1];return r}function $m(e,t){let r=ko(e.vertices),n=ko(e.textureCoords),i=t?Km(ko(e.lightmapCoords??e.textureCoords),t):ko(e.lightmapCoords??new Float32Array(n.length)),s=r.length/3;if(n.length/2!==s)throw new Error("Texture coordinates count mismatch");if(i.length/2!==s)throw new Error("Lightmap coordinates count mismatch");let o=new Float32Array(s*7);for(let a=0;a<s;a++){let d=a*3,l=a*2,c=a*7;o[c]=r[d],o[c+1]=r[d+1],o[c+2]=r[d+2],o[c+3]=n[l],o[c+4]=n[l+1],o[c+5]=i[l],o[c+6]=i[l+1]}return o}function ou(e){let t=[];for(let r=0;r<e.faces.length;r++){let n=e.faces[r];if(n.texInfo<0)continue;let i=e.texInfo[n.texInfo],s=[],o=[],a=[];for(let u=0;u<n.numEdges;u++){let h=e.surfEdges[n.firstEdge+u],m=e.edges[Math.abs(h)],g=h>=0?m.vertices[0]:m.vertices[1],p=e.vertices[g];s.push(p[0],p[1],p[2]);let y=p[0]*i.s[0]+p[1]*i.s[1]+p[2]*i.s[2]+i.sOffset,v=p[0]*i.t[0]+p[1]*i.t[1]+p[2]*i.t[2]+i.tOffset;o.push(y,v),a.push(y,v)}let d=[],l=s.length/3;for(let u=1;u<l-1;u++)d.push(0,u,u+1);let c,f=e.lightMapInfo[r];if(f){let u=1/0,h=-1/0,m=1/0,g=-1/0;for(let _=0;_<o.length;_+=2){let A=o[_],S=o[_+1];A<u&&(u=A),A>h&&(h=A),S<m&&(m=S),S>g&&(g=S)}let p=Math.floor(u/16),y=Math.floor(m/16),v=Math.ceil(h/16)-p+1,b=Math.ceil(g/16)-y+1,x=Ps(n,e.lightMaps,f);if(x&&x.length===v*b*3){c={width:v,height:b,samples:x};for(let _=0;_<a.length;_+=2)a[_]=o[_]/16-p+.5,a[_+1]=o[_+1]/16-y+.5}}t.push({vertices:new Float32Array(s),textureCoords:new Float32Array(o),lightmapCoords:new Float32Array(a),indices:new Uint16Array(d),texture:i.texture,surfaceFlags:i.flags,lightmap:c,faceIndex:r})}return t}function au(e,t,r,n={}){let i=t;if(r&&n.hiddenClassnames&&n.hiddenClassnames.size>0){let c=new Set;for(let f of r.entities.entities)if(f.classname&&n.hiddenClassnames.has(f.classname)){let u=f.properties.model;if(u&&u.startsWith("*")){let h=parseInt(u.substring(1),10);if(!isNaN(h)&&h>=0&&h<r.models.length){let m=r.models[h];for(let g=0;g<m.numFaces;g++)c.add(m.firstFace+g)}}}c.size>0&&(i=t.filter(f=>!c.has(f.faceIndex)))}let s={atlasSize:n.atlasSize??1024,lightmapPadding:n.lightmapPadding??1,hiddenClassnames:n.hiddenClassnames??new Set},o=[],a=new Map;i.forEach((c,f)=>{if(!c.lightmap)return;let{placement:u,atlas:h}=Wm(o,c.lightmap,s);Gm(h,u,c.lightmap),a.set(f,{atlasIndex:u.atlasIndex,offset:[(u.x+s.lightmapPadding)/s.atlasSize,(u.y+s.lightmapPadding)/s.atlasSize],scale:[u.width/s.atlasSize,u.height/s.atlasSize]})});let d=o.map(c=>{let f=new _n(e);return f.setParameters({wrapS:e.CLAMP_TO_EDGE,wrapT:e.CLAMP_TO_EDGE,minFilter:e.LINEAR,magFilter:e.LINEAR}),f.uploadImage(0,e.RGBA,c.width,c.height,0,e.RGBA,e.UNSIGNED_BYTE,c.data),{texture:f,width:c.width,height:c.height,pixels:c.data}});return{surfaces:i.map((c,f)=>{let u=a.get(f),h=$m(c,u),m=Xm(c.indices,h.length/7),g=new Le(e,e.STATIC_DRAW,e.ARRAY_BUFFER);g.upload(h);let p=new xe(e,e.STATIC_DRAW);p.upload(m);let y=new Fe(e);return y.configureAttributes(ll,g),{vao:y,vertexBuffer:g,indexBuffer:p,indexCount:m.length,vertexCount:h.length/7,texture:c.texture,surfaceFlags:c.surfaceFlags??Vn,lightmap:u,vertexData:h,indexData:m}}),lightmaps:d}}function Sn(e){let{normal:t,distance:r}=e,n=Math.sqrt(t.x*t.x+t.y*t.y+t.z*t.z);if(n===0)return e;let i=1/n;return{normal:{x:t.x*i,y:t.y*i,z:t.z*i},distance:r*i}}function lu(e){if(e.length!==16)throw new Error("View-projection matrix must contain 16 elements");let t=e[0],r=e[4],n=e[8],i=e[12],s=e[1],o=e[5],a=e[9],d=e[13],l=e[2],c=e[6],f=e[10],u=e[14],h=e[3],m=e[7],g=e[11],p=e[15];return[Sn({normal:{x:h+t,y:m+r,z:g+n},distance:p+i}),Sn({normal:{x:h-t,y:m-r,z:g-n},distance:p-i}),Sn({normal:{x:h+s,y:m+o,z:g+a},distance:p+d}),Sn({normal:{x:h-s,y:m-o,z:g-a},distance:p-d}),Sn({normal:{x:h+l,y:m+c,z:g+f},distance:p+u}),Sn({normal:{x:h-l,y:m-c,z:g-f},distance:p-u})]}function Zm(e,t){return e.normal.x*t.x+e.normal.y*t.y+e.normal.z*t.z+e.distance}function Yi(e,t,r){for(let n of r){let i=n.normal.x>=0?t.x:e.x,s=n.normal.y>=0?t.y:e.y,o=n.normal.z>=0?t.z:e.z;if(Zm(n,{x:i,y:s,z:o})<0)return!1}return!0}function cu(e){return e<0}function du(e){return-e-1}function uu(e,t){return e.normal[0]*t.x+e.normal[1]*t.y+e.normal[2]*t.z-e.dist}function Ym(e,t,r){if(!e||t<0||r<0)return!0;let n=Math.ceil(e.numClusters/8),i=e.clusters[t].pvs,s=Math.floor(r/8),o=1<<r%8;return s<0||s>=n?!1:(i[s]&o)!==0}function qm(e,t){let r={x:e.mins[0],y:e.mins[1],z:e.mins[2]},n={x:e.maxs[0],y:e.maxs[1],z:e.maxs[2]};return Yi(r,n,t)}function dl(e,t){let r=0;for(;r>=0;){let n=e.nodes[r],i=e.planes[n.planeIndex],o=uu(i,t)>=0?0:1,a=n.children[o];if(cu(a))return du(a);r=a}return-1}function jm(e,t){let r=e.leafs[t],n=[];for(let i=0;i<r.numLeafFaces;i+=1)n.push(e.leafLists.leafFaces[t][i]);return n}function cl(e,t,r,n,i,s,o){if(cu(t)){let u=du(t),h=e.leafs[u];if(!Ym(e.visibility,i,h.cluster)||!qm(h,n))return;let m={x:(h.mins[0]+h.maxs[0])*.5,y:(h.mins[1]+h.maxs[1])*.5,z:(h.mins[2]+h.maxs[2])*.5},g=m.x-r.x,p=m.y-r.y,y=m.z-r.z,v=-(g*g+p*p+y*y);for(let b of jm(e,u))o.has(b)||(o.add(b),s.push({faceIndex:b,leafIndex:u,sortKey:v}));return}let a=e.nodes[t],d=e.planes[a.planeIndex],l=uu(d,r),c=l>=0?a.children[0]:a.children[1],f=l>=0?a.children[1]:a.children[0];Yi({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)&&(cl(e,c,r,n,i,s,o),cl(e,f,r,n,i,s,o))}function fu(e,t,r){let n=dl(e,t),i=n>=0?e.leafs[n].cluster:-1,s=[];return cl(e,0,t,r,i,s,new Set),s}var ir=32,zo=class{constructor(){this.lights=[]}addLight(t,r){if(t.key!==void 0){let n=this.lights.findIndex(i=>i.key===t.key);if(n!==-1){this.lights[n]=t;return}}this.lights.push(t)}clear(){this.lights=[]}update(t,r=0){if(this.lights=this.lights.filter(n=>n.die>t),r>0)for(let n of this.lights)n.radiusSpeed!==void 0&&n.radiusSpeed!==0&&(n.intensity+=n.radiusSpeed*r,n.intensity<0&&(n.intensity=0))}getActiveLights(){return this.lights}};function wn(e){let t=[];for(let r=0;r<e.length;r+=3){let n=e[r],i=e[r+1],s=e[r+2];t.push(n,i,i,s,s,n)}return e instanceof Uint32Array||Math.max(...t)>65535?new Uint32Array(t):new Uint16Array(t)}var ul=`#version 300 es
|
|
141
|
+
ïBçϧmÙIólÜoëVb¦¯éWÇû3`});var S0={a:ur};this.setModule=R=>{e.setModule(Ct,R)},this.getModule=()=>e.getModule(Ct),this.instantiate=()=>(this.getModule().then(R=>WebAssembly.instantiate(R,S0)).then(R=>{let He=R.exports;Ys(He),m=He.l,g(),v0(He),r()}),this.ready=new Promise(R=>{r=R}).then(()=>{this.HEAP=m.buffer,this.malloc=Wc,this.free=Yc,this.create_decoder=Wn,this.send_setup=Xc,this.init_dsp=Kc,this.decode_packets=$c,this.destroy_decoder=Zc}),this)}function Ir(){return this._init=()=>new this._WASMAudioDecoderCommon().instantiate(this._EmscriptenWASM,this._module).then(e=>{this._common=e,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 t=256;this._errors=this._common.allocateTypedArray(t,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,t)}),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=e=>{this._input.buf.set(e),this._inputLen.buf[0]=e.length,this._common.wasm.send_setup(this._decoder,this._firstPage),this._firstPage=!1},this.initDsp=()=>{this._common.wasm.init_dsp(this._decoder)},this.decodePackets=e=>{let t=[],r=0,n=[];for(let i=0;i<e.length;i++){let s=e[i];this._input.buf.set(s),this._inputLen.buf[0]=s.length,this._common.wasm.decode_packets(this._decoder);let o=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(o);o&&d.set(new Float32Array(this._common.wasm.HEAP,c[l],o)),a.push(d)}t.push(a),r+=o,this._frameNumber++,this._inputBytes+=s.length,this._outputSamples+=o;for(let l=0;l<this._errorsLength.buf;l+=2){let d=this._common.codeToString(this._errors.buf[l]),f=this._common.codeToString(this._errors.buf[l+1]);n.push({message:d+" vorbis_synthesis"+f,frameLength:s.length,frameNumber:this._frameNumber,inputBytes:this._inputBytes,outputSamples:this._outputSamples})}this._errorsLength.buf[0]=0}return this._WASMAudioDecoderCommon.getDecodedAudioMultiChannel(n,t,this._channels.buf[0],r,this._sampleRate.buf[0],16)},this._isWebWorker=Ir.isWebWorker,this._WASMAudioDecoderCommon=Ir.WASMAudioDecoderCommon||re,this._EmscriptenWASM=Ir.EmscriptenWASM||Ct,this._module=Ir.module,this._inputSize=128*1024,this._ready=this._init(),this}var jo=Symbol(),Rt=class{constructor(){this._onCodec=t=>{if(t!=="vorbis")throw new Error("@wasm-audio-decoders/ogg-vorbis does not support this codec "+t)},new re,this._init(),this._ready=this[jo](Ir)}_init(){this._vorbisSetupInProgress=!0,this._totalSamplesDecoded=0,this._codecParser=new ru("audio/ogg",{onCodec:this._onCodec,enableFrameCRC32:!1})}async[jo](t){if(this._decoder){let r=this._decoder;await r.ready.then(()=>r.free())}return this._decoder=new t,this._decoder.ready}get ready(){return this._ready}async reset(){return this._init(),this._decoder.reset()}free(){this._decoder.free()}async decodeOggPages(t){let r=[];for(let s=0;s<t.length;s++){let o=t[s];if(this._vorbisSetupInProgress&&(o[qo][0]===1&&this._decoder.sendSetupHeader(o[qo]),o[Yo].length)){let a=o[Yo][0][nu];this._decoder.sendSetupHeader(a[su]),this._decoder.initDsp(),this._vorbisSetupInProgress=!1}r.push(...o[Yo].map(a=>a[qo]))}let n=await this._decoder.decodePackets(r);this._totalSamplesDecoded+=n.samplesDecoded;let i=t[t.length-1];if(i&&i[iu]){let s=this._totalSamplesDecoded-i[ou];if(s>0){for(let o=0;o<n.channelData.length;o++)n.channelData[o]=n.channelData[o].subarray(0,n.samplesDecoded-s);n.samplesDecoded-=s,this._totalSamplesDecoded-=s}}return n}async decode(t){return this.decodeOggPages([...this._codecParser.parseChunk(t)])}async flush(){let t=await this.decodeOggPages([...this._codecParser.flush()]);return await this.reset(),t}async decodeFile(t){let r=await this.decodeOggPages([...this._codecParser.parseAll(t)]);return await this.reset(),r}};var kl=class extends rn{constructor(t){super(t,"ogg-vorbis-decoder",Ir,Ct)}async sendSetupHeader(t){return this.postToDecoder("sendSetupHeader",t)}async initDsp(){return this.postToDecoder("initDsp")}async decodePackets(t){return this.postToDecoder("decodePackets",t)}},Yi=class extends Rt{constructor(){super(),this._ready=super[jo](kl)}async free(){await this._decoder.free()}terminate(){this._decoder.terminate()}};So(Rt,"OggVorbisDecoder");So(Yi,"OggVorbisDecoderWebWorker");var Fl=class extends Error{constructor(t){super(t),this.name="OggDecodeError"}};async function Qo(e,t=new Rt){await t.ready;let r=await t.decode(new Uint8Array(e)),n=r.errors;if(n&&n.length>0)throw new Fl(n.map(i=>i.message).join("; "));return{sampleRate:r.sampleRate,channels:r.channelData.length,bitDepth:r.bitDepth,channelData:r.channelData}}var qi=class extends Error{constructor(t){super(t),this.name="AudioRegistryError"}},_n=class{constructor(t,r={}){this.vfs=t;this.refCounts=new Map;this.cache=new Ut(r.cacheSize??64)}get size(){return this.cache.size}async load(t){let r=t.toLowerCase(),n=this.cache.get(r);if(n)return this.refCounts.set(r,(this.refCounts.get(r)??0)+1),n;let s=(await this.vfs.readFile(t)).slice().buffer,o=await this.decodeByExtension(t,s);return this.cache.set(r,o),this.refCounts.set(r,1),o}release(t){let r=t.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(t,r){let n=t.toLowerCase();if(n.endsWith(".wav")){let i=vo(r),s=i.channels,o=Array.from({length:s},()=>new Float32Array(i.samples.length/s));for(let a=0;a<i.samples.length;a+=1)o[a%s][Math.floor(a/s)]=i.samples[a];return{sampleRate:i.sampleRate,channels:s,bitDepth:i.bitsPerSample,channelData:o}}if(n.endsWith(".ogg")||n.endsWith(".oga"))return Qo(r);throw new qi(`Unsupported audio format: ${t}`)}};var Hm="quake2ts-pak-indexes",Vm="pak-indexes";function au(){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 ji(e,t){let r=au();return r?new Promise((n,i)=>{let s=r.open(e,1);s.onupgradeneeded=()=>{let{result:o}=s;o.objectStoreNames.contains(t)||o.createObjectStore(t,{keyPath:"key"})},s.onerror=()=>i(s.error??new Error("Unknown IndexedDB error")),s.onsuccess=()=>n(s.result)}):Promise.reject(new Error("IndexedDB is not available in this environment"))}function Qi(e,t,r,n){return new Promise((i,s)=>{let a=e.transaction(t,r).objectStore(t),c=n(a);c.onsuccess=()=>i(c.result),c.onerror=()=>s(c.error??new Error("IndexedDB transaction error"))})}function Pl(e,t){return`${se(e)}:${t.toString(16)}`}function Gm(e){return e.map(t=>({...t}))}var Jo=class{constructor(t=Hm,r=Vm){this.dbName=t;this.storeName=r}get isSupported(){return!!au()}async persist(t){if(!this.isSupported)return;let r=t.validate(),n={...r,key:Pl(t.name,r.checksum),name:t.name,size:t.size,persistedAt:Date.now(),entries:Gm(r.entries)},i=await ji(this.dbName,this.storeName);return await Qi(i,this.storeName,"readwrite",s=>s.put(n)),i.close(),n}async find(t,r){if(!this.isSupported)return;let n=await ji(this.dbName,this.storeName),i=r!==void 0?Pl(t,r):void 0,s=await Qi(n,this.storeName,"readonly",o=>i?o.get(i):o.getAll());if(n.close(),!!s){if(Array.isArray(s)){let o=se(t),a=s.filter(c=>se(c.name)===o);return a.length===0?void 0:a.sort((c,l)=>l.persistedAt-c.persistedAt)[0]}return s}}async remove(t,r){if(!this.isSupported)return!1;let n=await ji(this.dbName,this.storeName),i=r!==void 0?Pl(t,r):void 0,s=await Qi(n,this.storeName,"readwrite",o=>{if(i)return o.delete(i);let a=`${se(t)}:`;return o.delete(IDBKeyRange.bound(a,`${a}\uFFFF`,!1,!0))});return n.close(),typeof s=="number"?s>0:!0}async clear(){if(!this.isSupported)return;let t=await ji(this.dbName,this.storeName);await Qi(t,this.storeName,"readwrite",r=>r.clear()),t.close()}async list(){if(!this.isSupported)return[];let t=await ji(this.dbName,this.storeName),r=await Qi(t,this.storeName,"readonly",n=>n.getAll());return t.close(),r.sort((n,i)=>i.persistedAt-n.persistedAt)}};var Cr=class extends Error{constructor(r,n){super(n??`Missing dependencies: ${r.join(", ")}`);this.missing=r;this.name="AssetDependencyError"}},Ji=class{constructor(){this.nodes=new Map}register(t,r=[]){let n=this.nodes.get(t)??{dependencies:new Set,loaded:!1};r.forEach(i=>n.dependencies.add(i)),this.nodes.set(t,n),r.forEach(i=>{this.nodes.has(i)||this.nodes.set(i,{dependencies:new Set,loaded:!1})})}markLoaded(t){let r=this.nodes.get(t)??{dependencies:new Set,loaded:!1},n=this.getMissingDependencies(t,r);if(n.length>0)throw new Cr(n,`Asset ${t} is missing dependencies: ${n.join(", ")}`);r.loaded=!0,this.nodes.set(t,r)}markUnloaded(t){let r=this.nodes.get(t);r&&(r.loaded=!1)}isLoaded(t){return this.nodes.get(t)?.loaded??!1}missingDependencies(t){let r=this.nodes.get(t);return r?this.getMissingDependencies(t,r):[]}reset(){this.nodes.clear()}getMissingDependencies(t,r){let n=[];for(let i of r.dependencies)this.nodes.get(i)?.loaded||n.push(i);return n}},ea=class{constructor(t,r={}){this.vfs=t;this.maps=new Map;this.textures=new tn({capacity:r.textureCacheCapacity??128}),this.audio=new _n(t,{cacheSize:r.audioCacheSize??64}),this.dependencyTracker=r.dependencyTracker??new Ji,this.resourceTracker=r.resourceTracker,this.md2=new Qr(t),this.md3=new Jr(t),this.sprite=new en(t),this.bsp=new jr(t),this.palette=new Uint8Array(768);for(let n=0;n<256;n++)this.palette[n*3]=n,this.palette[n*3+1]=n,this.palette[n*3+2]=n}async loadPalette(t="pics/colormap.pcx"){try{let r=await this.vfs.readFile(t),n=ii(r);n.palette&&(this.palette=n.palette)}catch(r){console.warn(`Failed to load palette from ${t}:`,r)}}isAssetLoaded(t,r){return this.dependencyTracker.isLoaded(this.makeKey(t,r))}registerTexture(t,r){this.textures.set(t,r);let n=this.makeKey("texture",t);this.dependencyTracker.register(n),this.dependencyTracker.markLoaded(n)}async loadTexture(t){this.resourceTracker&&this.resourceTracker.recordLoad("texture",t);let r=this.textures.get(t);if(r)return r;let n=await this.vfs.readFile(t),i=t.split(".").pop()?.toLowerCase(),s;if(i==="wal")s=_o(n,this.palette);else if(i==="pcx")s=bo(ii(n));else if(i==="tga")s=Rd(fl(n));else throw new Error(`Unsupported texture format for loadTexture: ${i}`);return this.registerTexture(t,s),s}async loadSound(t){this.resourceTracker&&this.resourceTracker.recordLoad("sound",t);let r=await this.audio.load(t),n=this.makeKey("sound",t);return this.dependencyTracker.register(n),this.dependencyTracker.markLoaded(n),r}async loadMd2Model(t,r=[]){this.resourceTracker&&this.resourceTracker.recordLoad("model",t);let n=this.makeKey("model",t),i=r.map(a=>this.makeKey("texture",a));this.dependencyTracker.register(n,i);let s=this.dependencyTracker.missingDependencies(n);if(s.length>0)throw new Cr(s,`Asset ${n} is missing dependencies: ${s.join(", ")}`);let o=await this.md2.load(t);return this.dependencyTracker.markLoaded(n),o}getMd2Model(t){return this.resourceTracker&&this.resourceTracker.recordLoad("model",t),this.md2.get(t)}async loadMd3Model(t,r=[]){this.resourceTracker&&this.resourceTracker.recordLoad("model",t);let n=this.makeKey("model",t),i=r.map(a=>this.makeKey("texture",a));this.dependencyTracker.register(n,i);let s=this.dependencyTracker.missingDependencies(n);if(s.length>0)throw new Cr(s,`Asset ${n} is missing dependencies: ${s.join(", ")}`);let o=await this.md3.load(t);return this.dependencyTracker.markLoaded(n),o}getMd3Model(t){return this.resourceTracker&&this.resourceTracker.recordLoad("model",t),this.md3.get(t)}async loadSprite(t){this.resourceTracker&&this.resourceTracker.recordLoad("sprite",t);let r=this.makeKey("sprite",t);this.dependencyTracker.register(r);let n=await this.sprite.load(t);return this.dependencyTracker.markLoaded(r),n}async loadMap(t){this.resourceTracker&&this.resourceTracker.recordLoad("map",t);let r=this.makeKey("map",t);if(this.maps.has(t))return this.maps.get(t);this.dependencyTracker.register(r);let n=await this.bsp.load(t);return this.maps.set(t,n),this.dependencyTracker.markLoaded(r),n}getMap(t){return this.maps.get(t)}listFiles(t){return this.vfs.findByExtension(t)}resetForLevelChange(){this.textures.clear(),this.audio.clearAll(),this.dependencyTracker.reset(),this.maps.clear()}makeKey(t,r){return`${t}:${se(r)}`}};var ta=class{constructor(t){this.factory=t}getContext(){return this.context||(this.context=this.factory()),this.context}async resume(){let t=this.getContext();t.state==="suspended"&&await t.resume()}getState(){return this.context?.state??"suspended"}};function ra(e){let t=e.getContext(),r=t.createGain();r.gain.value=1;let n=t.createDynamicsCompressor(),i=t.createBiquadFilter?.(),s;if(t.createConvolver&&t.createGain){let o=t.createConvolver(),a=t.createGain(),c=t.createGain();a.connect(o),o.connect(c),s={convolver:o,input:a,output:c}}return i?(i.type="lowpass",i.frequency.value=2e4,i.Q.value=.707,r.connect(i),i.connect(n),s&&s.output.connect(i)):(r.connect(n),s&&s.output.connect(n)),n.connect(t.destination),{context:t,master:r,compressor:n,filter:i,reverb:s}}var na=class{constructor(t=new Zr){this.configStrings=t;this.buffers=new Map}registerName(t){return this.configStrings.soundIndex(t)}register(t,r){let n=this.registerName(t);return this.buffers.set(n,r),n}find(t){return this.configStrings.findSoundIndex(t)}get(t){return this.buffers.get(t)}has(t){return this.buffers.has(t)}getName(t){return this.configStrings.getName(t)}};var ia=class{constructor(t){this.vfs=t.vfs,this.registry=t.registry,this.contextController=t.context,this.soundRoot=t.soundRoot??"sound/",this.decodeAudio=t.decodeAudio??((r,n)=>{if(!r.decodeAudioData)throw new Error("decodeAudioData is not available on the provided audio context");return r.decodeAudioData(n)})}async precache(t){let r=[...new Set(t.map(s=>this.normalize(s)))],n={loaded:[],skipped:[],missing:[],errors:{}},i=this.contextController.getContext();for(let s of r)try{let o=this.registry.find(s);if(o!==void 0&&this.registry.has(o)){n.skipped.push(s);continue}if(!this.vfs.stat(s)){n.missing.push(s);continue}let l=(await this.vfs.readFile(s)).slice().buffer,d=await this.decodeAudio(i,l);this.registry.register(s,d),n.loaded.push(s)}catch(o){let a=o instanceof Error?o:new Error(String(o));n.errors[s]=a}return n}normalize(t){let r=se(t.replace(/^\//,""));return r.startsWith(this.soundRoot)?r:se(`${this.soundRoot}${r}`)}};var Wm=7,es=e=>e&Wm;function sa(e){return Array.from({length:qn},()=>({entnum:0,entchannel:at.Auto,endTimeMs:0,isPlayer:!1,active:!1})).map(t=>({...t,isPlayer:t.entnum===e}))}function oa(e,t,r,n){if(r<0)throw new Error("pickChannel: entchannel must be non-negative");let i=es(r),s=-1,o=Number.POSITIVE_INFINITY;for(let a=0;a<e.length;a+=1){let c=e[a],l=es(c.entchannel);if(i!==at.Auto&&c.entnum===t&&l===i){s=a;break}if(c.active&&c.entnum===n.playerEntity&&t!==n.playerEntity)continue;let d=c.endTimeMs-n.nowMs;(s===-1||d<o)&&(o=d,s=a)}return s===-1?void 0:s}function aa(e,t,r,n,i){if(i)return{left:r,right:r,distanceComponent:0};let s=eo(e,t.origin),o=Zn(s),a=et(s),c=o-Bt;c<0&&(c=0),c*=Ot(n);let l=Xa(t.right,a),d=t.mono??!1,f=d||n===0?1:.5*(1+l),u=d||n===0?1:.5*(1-l),h=Math.max(0,Math.floor(r*(1-c)*f));return{left:Math.max(0,Math.floor(r*(1-c)*u)),right:h,distanceComponent:c}}var la=class{constructor(t){this.activePreset=null;this.enabled=!0;this.node=t,this.node.input.gain.value=.5,this.node.output.gain.value=1}setPreset(t){this.activePreset=t,this.node.convolver.buffer!==(t?.buffer??null)&&(this.node.convolver.buffer=t?.buffer??null),t&&t.gain!==void 0?this.node.output.gain.value=t.gain:this.node.output.gain.value=1}setEnabled(t){this.enabled=t,t?this.node.input.gain.value=.5:this.node.input.gain.value=0}getOutputNode(){return this.node.output}getInputNode(){return this.node.input}};var ca=class{constructor(t){this.activeSources=new Map;this.playbackRate=1;this.contextController=t.context,this.registry=t.registry,this.playerEntity=t.playerEntity,this.channels=sa(t.playerEntity),this.listener=t.listener??{origin:Jc,right:{x:1,y:0,z:0}},this.sfxVolume=t.sfxVolume??1,this.masterVolume=t.masterVolume??1,this.resolveOcclusion=t.resolveOcclusion,this.graph=ra(this.contextController),this.graph.master.gain.value=this.masterVolume,this.graph.reverb&&(this.reverb=new la(this.graph.reverb))}setListener(t){this.listener=t}setMasterVolume(t){this.masterVolume=t,this.graph.master.gain.value=t}setSfxVolume(t){this.sfxVolume=t}setPlaybackRate(t){this.playbackRate=t;for(let r of this.activeSources.values())r.source.playbackRate&&(r.source.playbackRate.value=t),this.updateSourceGain(r)}async ensureRunning(){await this.contextController.resume()}setReverbPreset(t){this.reverb?.setPreset(t)}play(t){let r=this.registry.get(t.soundIndex);if(!r)return;let n=this.graph.context,i=n.currentTime*1e3,s=oa(this.channels,t.entity,t.channel,{nowMs:i,playerEntity:this.playerEntity});if(s===void 0)return;let o=this.activeSources.get(s);o&&(o.source.onended=null,o.source.stop(),this.activeSources.delete(s));let a=n.createBufferSource();a.buffer=r,a.loop=t.looping??!1,a.playbackRate&&(a.playbackRate.value=this.playbackRate);let c=t.origin??this.listener.origin,l=n.createGain(),d=this.createPanner(n,t.attenuation),f=this.resolveOcclusion?.(this.listener,c,t.attenuation),u=lu(f?.gainScale??1),h=this.resolveOcclusion?this.createOcclusionFilter(n,f?.lowpassHz??2e4):void 0;this.applyOriginToPanner(d,c);let m=t.entity===this.playerEntity,g=aa(c,this.listener,t.volume,t.attenuation,m),y=(t.volume===0?0:Math.max(g.left,g.right)/Math.max(1,t.volume))*(t.volume/255)*this.masterVolume*this.sfxVolume,_=Math.abs(this.playbackRate-1)<.001?1:0;l.gain.value=y*u*_;let b=n.currentTime+(t.timeOffsetMs??0)/1e3,x=(t.looping?Number.POSITIVE_INFINITY:r.duration*1e3)+b*1e3;a.connect(d),this.reverb&&this.reverb.getInputNode();let v=d;h?(d.connect(h),h.connect(l),v=l):(d.connect(l),v=l),l.connect(this.graph.master),this.reverb&&l.connect(this.reverb.getInputNode()),a.start(b),a.onended=()=>{this.channels[s].active=!1,this.activeSources.delete(s)};let A={channelIndex:s,entnum:t.entity,entchannel:es(t.channel),endTimeMs:x,source:a,panner:d,gain:l,baseGain:y,origin:c,attenuation:t.attenuation,occlusion:h?{scale:u,lowpassHz:f?.lowpassHz,filter:h}:f?{scale:u,lowpassHz:f.lowpassHz}:void 0};return this.channels[s]={entnum:t.entity,entchannel:es(t.channel),endTimeMs:x,isPlayer:t.entity===this.playerEntity,active:!0},this.activeSources.set(s,A),A}stop(t){let r=this.activeSources.get(t);r&&(r.source.stop(),this.channels[t].active=!1,this.activeSources.delete(t))}stopEntitySounds(t){for(let[r,n]of[...this.activeSources.entries()])n.entnum===t&&(n.source.stop(),this.channels[r].active=!1,this.activeSources.delete(r))}updateEntityPosition(t,r){for(let n of this.activeSources.values())if(n.entnum===t&&(this.applyOriginToPanner(n.panner,r),n.origin=r,this.resolveOcclusion)){let i=this.resolveOcclusion(this.listener,r,n.attenuation);this.applyOcclusion(n,i)}}positionedSound(t,r,n,i){return this.play({entity:0,channel:at.Auto,soundIndex:r,volume:n,attenuation:i,origin:t})}ambientSound(t,r,n){return this.play({entity:0,channel:at.Auto,soundIndex:r,volume:n,attenuation:jn,origin:t,looping:!0})}getChannelState(t){return this.channels[t]}getDiagnostics(){return{activeChannels:this.activeSources.size,masterVolume:this.masterVolume,sfxVolume:this.sfxVolume,channels:[...this.channels],activeSounds:[...this.activeSources.values()].map(t=>({entnum:t.entnum,entchannel:t.entchannel,channelIndex:t.channelIndex,origin:t.origin,gain:t.gain.gain.value,baseGain:t.baseGain,attenuation:t.attenuation,maxDistance:t.panner.maxDistance,distanceModel:t.panner.distanceModel,occlusion:t.occlusion?{scale:t.occlusion.scale,lowpassHz:t.occlusion.lowpassHz}:void 0}))}}setUnderwater(t,r=400){let n=this.graph.filter;n&&(n.type="lowpass",n.Q.value=.707,n.frequency.value=t?r:2e4)}createPanner(t,r){let n=t.createPanner?t.createPanner():Object.assign(t.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(t,r){let n=Ot(r);return t.refDistance=Bt,t.maxDistance=hr(r),t.rolloffFactor=n,t.distanceModel=r===0?"linear":"inverse",t.positionX.value=this.listener.origin.x,t.positionY.value=this.listener.origin.y,t.positionZ.value=this.listener.origin.z,t}applyOriginToPanner(t,r){t.positionX.value=r.x,t.positionY.value=r.y,t.positionZ.value=r.z}createOcclusionFilter(t,r){if(!t.createBiquadFilter)return;let n=t.createBiquadFilter();return n.type="lowpass",n.Q.value=.707,n.frequency.value=zl(r,10,2e4),n}updateSourceGain(t){let r=t.occlusion?.scale??1,n=Math.abs(this.playbackRate-1)<.001?1:0;t.gain.gain.value=t.baseGain*r*n}applyOcclusion(t,r){let n=lu(r?.gainScale??1),i=Math.abs(this.playbackRate-1)<.001?1:0;if(t.gain.gain.value=t.baseGain*n*i,t.occlusion?.filter){let s=r?.lowpassHz??2e4;t.occlusion.filter.frequency.value=zl(s,10,2e4)}t.occlusion?(t.occlusion.scale=n,t.occlusion.lowpassHz=r?.lowpassHz):r&&(t.occlusion={scale:n,lowpassHz:r.lowpassHz})}},zl=(e,t,r)=>Math.min(r,Math.max(t,e)),lu=e=>zl(e,0,1);var ts=class{constructor(t){this.trace=t;this.resolve=(t,r,n)=>{let i=Zn(eo(r,t.origin)),s=hr(n),c=2e4*(1-Math.min(i,s)/Math.max(1,s)*.9),l=this.trace(t.origin,r,void 0,void 0),d=1,f=2e4;l.fraction<1&&(d=.3,f=400);let u=Math.min(c,f);if(d<1||u<2e4)return{gainScale:d,lowpassHz:u}}}};function cu(e){return new ts(e).resolve}var da=class{constructor(t){this.createElement=t.createElement,this.resolveSource=t.resolveSource??(async r=>r),this.volume=t.volume??1,this.crossfadeDuration=t.crossfadeDuration??1}async playTrack(t){let r=`music/track${t.toString().padStart(2,"0")}.ogg`;return this.play(r)}async play(t,{loop:r=!0,restart:n=!1}={}){if(this.track===t&&this.currentElement){this.currentElement.loop=r,this.cancelFade(),this.fadingElement&&(this.fadingElement.pause(),this.fadingElement=void 0),this.currentElement.volume=this.volume,n&&(this.currentElement.currentTime=0),(this.currentElement.paused||n)&&await this.currentElement.play();return}let i=await this.resolveSource(t);this.cancelFade(),this.fadingElement&&(this.fadingElement.pause(),this.fadingElement=void 0),this.currentElement&&(this.fadingElement=this.currentElement,this.currentElement=void 0);let s=this.createElement();s.src=i,s.loop=r,s.volume=0,s.currentTime=0,s.load();try{await s.play()}catch(o){console.warn(`MusicSystem: Failed to play ${t}`,o),this.fadingElement}this.currentElement=s,this.track=t,this.startCrossfade()}pause(){this.cancelFade(),this.currentElement&&!this.currentElement.paused&&this.currentElement.pause(),this.fadingElement&&(this.fadingElement.pause(),this.fadingElement=void 0)}async resume(){!this.currentElement||!this.currentElement.paused||(await this.currentElement.play(),this.currentElement.volume=this.volume)}stop(){this.cancelFade(),this.currentElement&&(this.currentElement.pause(),this.currentElement.currentTime=0,this.currentElement=void 0),this.fadingElement&&(this.fadingElement.pause(),this.fadingElement=void 0),this.track=void 0}setVolume(t){this.volume=t,this.currentElement&&!this.fadeInterval&&(this.currentElement.volume=t)}getState(){let t=!!(this.currentElement&&!this.currentElement.paused&&!this.currentElement.ended),r=!!this.currentElement?.paused;return{track:this.track,paused:r,playing:t,volume:this.volume}}startCrossfade(){let r=this.crossfadeDuration*1e3/50,n=this.volume/r,i=0,s=this.fadingElement?this.fadingElement.volume:0,o=()=>{let a=!1;this.currentElement&&(i=Math.min(this.volume,i+n),this.currentElement.volume=i,i<this.volume&&(a=!0)),this.fadingElement&&(s=Math.max(0,s-n),this.fadingElement.volume=s,s>0?a=!0:(this.fadingElement.pause(),this.fadingElement=void 0)),a||this.cancelFade()};o(),(this.currentElement&&this.currentElement.volume<this.volume||this.fadingElement)&&(this.fadeInterval=setInterval(o,50))}cancelFade(){this.fadeInterval&&(clearInterval(this.fadeInterval),this.fadeInterval=void 0)}};function Xm(e){e.enable(e.DEPTH_TEST),e.depthFunc(e.LEQUAL),e.enable(e.CULL_FACE),e.cullFace(e.BACK),e.enable(e.BLEND),e.blendFuncSeparate(e.SRC_ALPHA,e.ONE_MINUS_SRC_ALPHA,e.ONE,e.ONE_MINUS_SRC_ALPHA)}function Km(e,t,r,n){for(let i of t){let s=e.getExtension(i);if(!s)throw new Error(`Missing required WebGL extension: ${i}`);n.set(i,s)}for(let i of r){let s=e.getExtension(i);s&&n.set(i,s)}}function du(e,t={}){let{contextAttributes:r,requiredExtensions:n=[],optionalExtensions:i=[]}=t,s=e.getContext("webgl2",r??{antialias:!0});if(!s)throw new Error("WebGL2 not supported or failed to initialize");Xm(s);let o=new Map;Km(s,n,i,o);let a=!1,c=new Set,l=new Set,d=u=>{a=!0,u.preventDefault();for(let h of c)h()},f=()=>{a=!1;for(let u of l)u()};return e.addEventListener("webglcontextlost",d),e.addEventListener("webglcontextrestored",f),{gl:s,extensions:o,isLost:()=>a,onLost(u){return c.add(u),()=>c.delete(u)},onRestored(u){return l.add(u),()=>l.delete(u)},dispose(){e.removeEventListener("webglcontextlost",d),e.removeEventListener("webglcontextrestored",f),c.clear(),l.clear(),o.clear()}}}function uu(e,t,r){let n=e.createShader(t);if(!n)throw new Error("Failed to allocate shader");if(e.shaderSource(n,r),e.compileShader(n),!e.getShaderParameter(n,e.COMPILE_STATUS)){let s=e.getShaderInfoLog(n)??"Unknown shader compile failure";throw e.deleteShader(n),new Error(s)}return n}function $m(e,t,r,n){let i=e.createProgram();if(!i)throw new Error("Failed to allocate shader program");if(e.attachShader(i,t),e.attachShader(i,r),n)for(let[o,a]of Object.entries(n))e.bindAttribLocation(i,a,o);if(e.linkProgram(i),!e.getProgramParameter(i,e.LINK_STATUS)){let o=e.getProgramInfoLog(i)??"Unknown shader link failure";throw e.deleteProgram(i),new Error(o)}return i}var Ee=class e{constructor(t,r){this.uniformLocations=new Map;this.attributeLocations=new Map;this.gl=t,this.program=r}static create(t,r,n){let i=uu(t,t.VERTEX_SHADER,r.vertex),s=uu(t,t.FRAGMENT_SHADER,r.fragment);try{let o=$m(t,i,s,n);return new e(t,o)}finally{t.deleteShader(i),t.deleteShader(s)}}use(){this.gl.useProgram(this.program)}getUniformLocation(t){if(!this.uniformLocations.has(t)){let r=this.gl.getUniformLocation(this.program,t);this.uniformLocations.set(t,r)}return this.uniformLocations.get(t)??null}getAttributeLocation(t){if(!this.attributeLocations.has(t)){let r=this.gl.getAttribLocation(this.program,t);this.attributeLocations.set(t,r)}return this.attributeLocations.get(t)??-1}dispose(){this.gl.deleteProgram(this.program),this.uniformLocations.clear(),this.attributeLocations.clear()}};function fu(e,t,r){return Ee.create(e,t,r)}var Le=class{constructor(t,r=t.STATIC_DRAW,n){this.gl=t,this.target=n??t.ARRAY_BUFFER;let i=t.createBuffer();if(!i)throw new Error("Failed to allocate buffer");this.buffer=i,t.bindBuffer(this.target,this.buffer),t.bufferData(this.target,0,r)}bind(){this.gl.bindBuffer(this.target,this.buffer)}upload(t,r=this.gl.STATIC_DRAW){this.bind(),this.gl.bufferData(this.target,t,r)}update(t,r=0){this.bind(),this.gl.bufferSubData(this.target,r,t)}dispose(){this.gl.deleteBuffer(this.buffer)}},xe=class extends Le{constructor(t,r=t.STATIC_DRAW){super(t,r,t.ELEMENT_ARRAY_BUFFER)}},ke=class{constructor(t){this.gl=t;let r=t.createVertexArray();if(!r)throw new Error("Failed to allocate vertex array object");this.vao=r}bind(){this.gl.bindVertexArray(this.vao)}configureAttributes(t,r){this.bind(),r&&r.bind();for(let n of t)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)}},vn=class{constructor(t,r=t.TEXTURE_2D){this.width=0;this.height=0;this.gl=t,this.target=r;let n=t.createTexture();if(!n)throw new Error("Failed to allocate texture");this.texture=n}bind(t=0){this.gl.activeTexture(this.gl.TEXTURE0+t),this.gl.bindTexture(this.target,this.texture)}setParameters(t){this.bind(),t.wrapS!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_WRAP_S,t.wrapS),t.wrapT!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_WRAP_T,t.wrapT),t.minFilter!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_MIN_FILTER,t.minFilter),t.magFilter!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_MAG_FILTER,t.magFilter)}upload(t,r,n){this.width=t,this.height=r,this.uploadImage(0,this.gl.RGBA,t,r,0,this.gl.RGBA,this.gl.UNSIGNED_BYTE,n)}uploadImage(t,r,n,i,s,o,a,c){this.bind(),this.gl.texImage2D(this.target,t,r,n,i,s,o,a,c)}dispose(){this.gl.deleteTexture(this.texture)}},Sn=class{constructor(t){this.gl=t,this.target=t.TEXTURE_CUBE_MAP;let r=t.createTexture();if(!r)throw new Error("Failed to allocate cubemap texture");this.texture=r}bind(t=0){this.gl.activeTexture(this.gl.TEXTURE0+t),this.gl.bindTexture(this.target,this.texture)}setParameters(t){this.bind(),t.wrapS!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_WRAP_S,t.wrapS),t.wrapT!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_WRAP_T,t.wrapT),t.minFilter!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_MIN_FILTER,t.minFilter),t.magFilter!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_MAG_FILTER,t.magFilter)}uploadFace(t,r,n,i,s,o,a,c,l){this.bind(),this.gl.texImage2D(t,r,n,i,s,o,a,c,l)}dispose(){this.gl.deleteTexture(this.texture)}},ua=class{constructor(t){this.gl=t;let r=t.createFramebuffer();if(!r)throw new Error("Failed to allocate framebuffer");this.framebuffer=r}bind(t=this.gl.FRAMEBUFFER){this.gl.bindFramebuffer(t,this.framebuffer)}attachTexture2D(t,r,n=0){this.bind(),this.gl.framebufferTexture2D(this.gl.FRAMEBUFFER,t,r.target,r.texture,n)}dispose(){this.gl.deleteFramebuffer(this.framebuffer)}};var Bl=4,Dl=7*Bl,Ol=[{index:0,size:3,type:5126,stride:Dl,offset:0},{index:1,size:2,type:5126,stride:Dl,offset:3*Bl},{index:2,size:2,type:5126,stride:Dl,offset:5*Bl}];function Zm(e,t){return{width:e,height:e,padding:t,data:new Uint8Array(e*e*4),cursorX:0,cursorY:0,rowHeight:0}}function Ym(e){let t=e.width*e.height;if(t===0)throw new Error("Invalid lightmap with zero area");let r=e.samples.byteLength/t;if(!Number.isInteger(r)||r<3||r>4)throw new Error("Unsupported lightmap channel count");return r}function qm(e,t,r){let n=Ym(r),i=e.width*4,s=t.x+e.padding,o=t.y+e.padding,a=0;for(let c=0;c<r.height;c++){let l=(o+c)*i+s*4;for(let d=0;d<r.width;d++){let f=l+d*4;e.data[f]=r.samples[a],e.data[f+1]=r.samples[a+1],e.data[f+2]=r.samples[a+2],e.data[f+3]=n===4?r.samples[a+3]:255,a+=n}}}function jm(e,t,r){let n=t.width+r.lightmapPadding*2,i=t.height+r.lightmapPadding*2;if(n>r.atlasSize||i>r.atlasSize)throw new Error("Lightmap too large for atlas");for(let a of e){if(a.cursorX+n>a.width&&(a.cursorX=0,a.cursorY+=a.rowHeight+r.lightmapPadding,a.rowHeight=0),a.cursorY+i>a.height)continue;let c={atlasIndex:e.indexOf(a),x:a.cursorX,y:a.cursorY,width:t.width,height:t.height};return a.cursorX+=n+r.lightmapPadding,a.rowHeight=Math.max(a.rowHeight,i),{placement:c,atlas:a}}let s=Zm(r.atlasSize,r.lightmapPadding);e.push(s);let o={atlasIndex:e.length-1,x:0,y:0,width:t.width,height:t.height};return s.cursorX=n+r.lightmapPadding,s.rowHeight=i,{placement:o,atlas:s}}function fa(e){return e instanceof Float32Array?e:new Float32Array(e)}function Qm(e,t){if(!e){let n=new Uint16Array(t);for(let i=0;i<t;i++)n[i]=i;return n}return e instanceof Uint16Array?e:new Uint16Array(e)}function Jm(e,t){let r=new Float32Array(e.length);for(let n=0;n<e.length;n+=2)r[n]=t.offset[0]+e[n]*t.scale[0],r[n+1]=t.offset[1]+e[n+1]*t.scale[1];return r}function ep(e,t){let r=fa(e.vertices),n=fa(e.textureCoords),i=t?Jm(fa(e.lightmapCoords??e.textureCoords),t):fa(e.lightmapCoords??new Float32Array(n.length)),s=r.length/3;if(n.length/2!==s)throw new Error("Texture coordinates count mismatch");if(i.length/2!==s)throw new Error("Lightmap coordinates count mismatch");let o=new Float32Array(s*7);for(let a=0;a<s;a++){let c=a*3,l=a*2,d=a*7;o[d]=r[c],o[d+1]=r[c+1],o[d+2]=r[c+2],o[d+3]=n[l],o[d+4]=n[l+1],o[d+5]=i[l],o[d+6]=i[l+1]}return o}function hu(e){let t=[];for(let r=0;r<e.faces.length;r++){let n=e.faces[r];if(n.texInfo<0)continue;let i=e.texInfo[n.texInfo],s=[],o=[],a=[];for(let u=0;u<n.numEdges;u++){let h=e.surfEdges[n.firstEdge+u],m=e.edges[Math.abs(h)],g=h>=0?m.vertices[0]:m.vertices[1],p=e.vertices[g];s.push(p[0],p[1],p[2]);let y=p[0]*i.s[0]+p[1]*i.s[1]+p[2]*i.s[2]+i.sOffset,_=p[0]*i.t[0]+p[1]*i.t[1]+p[2]*i.t[2]+i.tOffset;o.push(y,_),a.push(y,_)}let c=[],l=s.length/3;for(let u=1;u<l-1;u++)c.push(0,u,u+1);let d,f=e.lightMapInfo[r];if(f){let u=1/0,h=-1/0,m=1/0,g=-1/0;for(let v=0;v<o.length;v+=2){let A=o[v],S=o[v+1];A<u&&(u=A),A>h&&(h=A),S<m&&(m=S),S>g&&(g=S)}let p=Math.floor(u/16),y=Math.floor(m/16),_=Math.ceil(h/16)-p+1,b=Math.ceil(g/16)-y+1,x=po(n,e.lightMaps,f);if(x&&x.length===_*b*3){d={width:_,height:b,samples:x};for(let v=0;v<a.length;v+=2)a[v]=o[v]/16-p+.5,a[v+1]=o[v+1]/16-y+.5}}t.push({vertices:new Float32Array(s),textureCoords:new Float32Array(o),lightmapCoords:new Float32Array(a),indices:new Uint16Array(c),texture:i.texture,surfaceFlags:i.flags,lightmap:d,faceIndex:r})}return t}function mu(e,t,r,n={}){let i=t;if(r&&n.hiddenClassnames&&n.hiddenClassnames.size>0){let d=new Set;for(let f of r.entities.entities)if(f.classname&&n.hiddenClassnames.has(f.classname)){let u=f.properties.model;if(u&&u.startsWith("*")){let h=parseInt(u.substring(1),10);if(!isNaN(h)&&h>=0&&h<r.models.length){let m=r.models[h];for(let g=0;g<m.numFaces;g++)d.add(m.firstFace+g)}}}d.size>0&&(i=t.filter(f=>!d.has(f.faceIndex)))}let s={atlasSize:n.atlasSize??1024,lightmapPadding:n.lightmapPadding??1,hiddenClassnames:n.hiddenClassnames??new Set},o=[],a=new Map;i.forEach((d,f)=>{if(!d.lightmap)return;let{placement:u,atlas:h}=jm(o,d.lightmap,s);qm(h,u,d.lightmap),a.set(f,{atlasIndex:u.atlasIndex,offset:[(u.x+s.lightmapPadding)/s.atlasSize,(u.y+s.lightmapPadding)/s.atlasSize],scale:[u.width/s.atlasSize,u.height/s.atlasSize]})});let c=o.map(d=>{let f=new vn(e);return f.setParameters({wrapS:e.CLAMP_TO_EDGE,wrapT:e.CLAMP_TO_EDGE,minFilter:e.LINEAR,magFilter:e.LINEAR}),f.uploadImage(0,e.RGBA,d.width,d.height,0,e.RGBA,e.UNSIGNED_BYTE,d.data),{texture:f,width:d.width,height:d.height,pixels:d.data}});return{surfaces:i.map((d,f)=>{let u=a.get(f),h=ep(d,u),m=Qm(d.indices,h.length/7),g=new Le(e,e.STATIC_DRAW,e.ARRAY_BUFFER);g.upload(h);let p=new xe(e,e.STATIC_DRAW);p.upload(m);let y=new ke(e);return y.configureAttributes(Ol,g),{vao:y,vertexBuffer:g,indexBuffer:p,indexCount:m.length,vertexCount:h.length/7,texture:d.texture,surfaceFlags:d.surfaceFlags??Yn,lightmap:u,vertexData:h,indexData:m}}),lightmaps:c}}function wn(e){let{normal:t,distance:r}=e,n=Math.sqrt(t.x*t.x+t.y*t.y+t.z*t.z);if(n===0)return e;let i=1/n;return{normal:{x:t.x*i,y:t.y*i,z:t.z*i},distance:r*i}}function pu(e){if(e.length!==16)throw new Error("View-projection matrix must contain 16 elements");let t=e[0],r=e[4],n=e[8],i=e[12],s=e[1],o=e[5],a=e[9],c=e[13],l=e[2],d=e[6],f=e[10],u=e[14],h=e[3],m=e[7],g=e[11],p=e[15];return[wn({normal:{x:h+t,y:m+r,z:g+n},distance:p+i}),wn({normal:{x:h-t,y:m-r,z:g-n},distance:p-i}),wn({normal:{x:h+s,y:m+o,z:g+a},distance:p+c}),wn({normal:{x:h-s,y:m-o,z:g-a},distance:p-c}),wn({normal:{x:h+l,y:m+d,z:g+f},distance:p+u}),wn({normal:{x:h-l,y:m-d,z:g-f},distance:p-u})]}function tp(e,t){return e.normal.x*t.x+e.normal.y*t.y+e.normal.z*t.z+e.distance}function rs(e,t,r){for(let n of r){let i=n.normal.x>=0?t.x:e.x,s=n.normal.y>=0?t.y:e.y,o=n.normal.z>=0?t.z:e.z;if(tp(n,{x:i,y:s,z:o})<0)return!1}return!0}function gu(e){return e<0}function yu(e){return-e-1}function xu(e,t){return e.normal[0]*t.x+e.normal[1]*t.y+e.normal[2]*t.z-e.dist}function rp(e,t,r){if(!e||t<0||r<0)return!0;let n=Math.ceil(e.numClusters/8),i=e.clusters[t].pvs,s=Math.floor(r/8),o=1<<r%8;return s<0||s>=n?!1:(i[s]&o)!==0}function np(e,t){let r={x:e.mins[0],y:e.mins[1],z:e.mins[2]},n={x:e.maxs[0],y:e.maxs[1],z:e.maxs[2]};return rs(r,n,t)}function Ul(e,t){let r=0;for(;r>=0;){let n=e.nodes[r],i=e.planes[n.planeIndex],o=xu(i,t)>=0?0:1,a=n.children[o];if(gu(a))return yu(a);r=a}return-1}function ip(e,t){let r=e.leafs[t],n=[];for(let i=0;i<r.numLeafFaces;i+=1)n.push(e.leafLists.leafFaces[t][i]);return n}function Nl(e,t,r,n,i,s,o){if(gu(t)){let u=yu(t),h=e.leafs[u];if(!rp(e.visibility,i,h.cluster)||!np(h,n))return;let m={x:(h.mins[0]+h.maxs[0])*.5,y:(h.mins[1]+h.maxs[1])*.5,z:(h.mins[2]+h.maxs[2])*.5},g=m.x-r.x,p=m.y-r.y,y=m.z-r.z,_=-(g*g+p*p+y*y);for(let b of ip(e,u))o.has(b)||(o.add(b),s.push({faceIndex:b,leafIndex:u,sortKey:_}));return}let a=e.nodes[t],c=e.planes[a.planeIndex],l=xu(c,r),d=l>=0?a.children[0]:a.children[1],f=l>=0?a.children[1]:a.children[0];rs({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)&&(Nl(e,d,r,n,i,s,o),Nl(e,f,r,n,i,s,o))}function bu(e,t,r){let n=Ul(e,t),i=n>=0?e.leafs[n].cluster:-1,s=[];return Nl(e,0,t,r,i,s,new Set),s}var sr=32,ha=class{constructor(){this.lights=[]}addLight(t,r){if(t.key!==void 0){let n=this.lights.findIndex(i=>i.key===t.key);if(n!==-1){this.lights[n]=t;return}}this.lights.push(t)}clear(){this.lights=[]}update(t,r=0){if(this.lights=this.lights.filter(n=>n.die>t),r>0)for(let n of this.lights)n.radiusSpeed!==void 0&&n.radiusSpeed!==0&&(n.intensity+=n.radiusSpeed*r,n.intensity<0&&(n.intensity=0))}getActiveLights(){return this.lights}};function An(e){let t=[];for(let r=0;r<e.length;r+=3){let n=e[r],i=e[r+1],s=e[r+2];t.push(n,i,i,s,s,n)}return e instanceof Uint32Array||Math.max(...t)>65535?new Uint32Array(t):new Uint16Array(t)}var Hl=`#version 300 es
|
|
142
142
|
precision highp float;
|
|
143
143
|
|
|
144
144
|
layout(location = 0) in vec3 a_position;
|
|
@@ -187,7 +187,7 @@ void main() {
|
|
|
187
187
|
v_lightmapStep = a_lightmapStep;
|
|
188
188
|
v_position = pos;
|
|
189
189
|
gl_Position = u_modelViewProjection * vec4(pos, 1.0);
|
|
190
|
-
}`,
|
|
190
|
+
}`,Vl=`#version 300 es
|
|
191
191
|
precision highp float;
|
|
192
192
|
|
|
193
193
|
struct DLight {
|
|
@@ -196,7 +196,7 @@ struct DLight {
|
|
|
196
196
|
float intensity;
|
|
197
197
|
};
|
|
198
198
|
|
|
199
|
-
const int MAX_DLIGHTS = ${
|
|
199
|
+
const int MAX_DLIGHTS = ${sr};
|
|
200
200
|
|
|
201
201
|
in vec2 v_texCoord;
|
|
202
202
|
in vec2 v_lightmapCoord;
|
|
@@ -290,7 +290,7 @@ void main() {
|
|
|
290
290
|
}
|
|
291
291
|
|
|
292
292
|
o_color = finalColor;
|
|
293
|
-
}`,
|
|
293
|
+
}`,_u=[0,255,255,255],sp=[0,-1,-1,-1];function Gl(e=_u,t=[]){let r=new Float32Array(4);for(let n=0;n<4;n+=1){let i=e[n]??255;if(i===255){r[n]=0;continue}let s=t[i];r[n]=s!==void 0?s:1}return r}function op(e){return[-(e*.25%1),0]}function Wl(e=Yn,t=0){let r=(e&ad)!==0,n=(e&id)!==0,i=(e&nd)!==0,s=(e&sd)!==0,o=(e&od)!==0,a=s?.33:o?.66:1,c=s||o,l=!c&&!i,d=r?op(t):[0,0];return{alpha:a,blend:c,depthWrite:l,warp:n,flowOffset:d,sky:i}}var ma=class{constructor(t){this.uniformDlights=[];this.gl=t,this.program=Ee.create(t,{vertex:Hl,fragment:Vl},{a_position:0,a_texCoord:1,a_lightmapCoord:2,a_lightmapStep:3}),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.uniformStyleLayerMapping=this.program.getUniformLocation("u_styleLayerMapping"),this.uniformAlpha=this.program.getUniformLocation("u_alpha"),this.uniformApplyLightmap=this.program.getUniformLocation("u_applyLightmap"),this.uniformWarp=this.program.getUniformLocation("u_warp"),this.uniformLightmapOnly=this.program.getUniformLocation("u_lightmapOnly"),this.uniformDiffuse=this.program.getUniformLocation("u_diffuseMap"),this.uniformLightmap=this.program.getUniformLocation("u_lightmapAtlas"),this.uniformTime=this.program.getUniformLocation("u_time"),this.uniformRenderMode=this.program.getUniformLocation("u_renderMode"),this.uniformSolidColor=this.program.getUniformLocation("u_solidColor"),this.uniformNumDlights=this.program.getUniformLocation("u_numDlights");for(let r=0;r<sr;r++)this.uniformDlights.push({pos:this.program.getUniformLocation(`u_dlights[${r}].position`),color:this.program.getUniformLocation(`u_dlights[${r}].color`),intensity:this.program.getUniformLocation(`u_dlights[${r}].intensity`)})}bind(t){let{modelViewProjection:r,styleIndices:n=_u,styleLayers:i=sp,styleValues:s=[],diffuseSampler:o=0,lightmapSampler:a,surfaceFlags:c=Yn,timeSeconds:l=0,texScroll:d,alpha:f,warp:u,dlights:h=[],renderMode:m,lightmapOnly:g}=t,p=Wl(c,l),y=Gl(n,s),_=d?d[0]:p.flowOffset[0],b=d?d[1]:p.flowOffset[1],x=f!==void 0?f:p.alpha,v=u!==void 0?u:p.warp;this.program.use(),this.gl.uniformMatrix4fv(this.uniformMvp,!1,r),this.gl.uniform2f(this.uniformTexScroll,_,b),this.gl.uniform2f(this.uniformLmScroll,p.flowOffset[0],p.flowOffset[1]),this.gl.uniform4fv(this.uniformLightStyles,y),this.gl.uniform4fv(this.uniformStyleLayerMapping,i),this.gl.uniform1f(this.uniformAlpha,x);let A=!p.sky&&a!==void 0&&!v;this.gl.uniform1i(this.uniformApplyLightmap,A?1:0),this.gl.uniform1i(this.uniformWarp,v?1:0),this.gl.uniform1i(this.uniformLightmapOnly,g?1:0),this.gl.uniform1f(this.uniformTime,l),this.gl.uniform1i(this.uniformDiffuse,o),this.gl.uniform1i(this.uniformLightmap,a??0);let S=0,M=[1,1,1,1];m&&(m.mode==="solid"||m.mode==="wireframe"?S=1:m.mode==="solid-faceted"&&(S=2),m.color?M=[...m.color]:m.generateRandomColor&&(M=[1,1,1,1])),this.gl.uniform1i(this.uniformRenderMode,S),this.gl.uniform4f(this.uniformSolidColor,M[0],M[1],M[2],M[3]);let L=Math.min(h.length,sr);this.gl.uniform1i(this.uniformNumDlights,L);for(let w=0;w<L;w++){let T=h[w];this.gl.uniform3f(this.uniformDlights[w].pos,T.origin.x,T.origin.y,T.origin.z),this.gl.uniform3f(this.uniformDlights[w].color,T.color.x,T.color.y,T.color.z),this.gl.uniform1f(this.uniformDlights[w].intensity,T.intensity)}return p}draw(t,r){if(t.vao.bind(),r&&r.mode==="wireframe"){if(!t.wireframeIndexBuffer){let n=t;n.wireframeIndexBuffer=new xe(this.gl,this.gl.STATIC_DRAW);let i=An(t.indexData);n.wireframeIndexBuffer.upload(i),n.wireframeIndexCount=i.length}t.wireframeIndexBuffer.bind(),this.gl.drawElements(this.gl.LINES,t.wireframeIndexCount,this.gl.UNSIGNED_SHORT,0)}else t.indexBuffer.bind(),this.gl.drawElements(this.gl.TRIANGLES,t.indexCount,this.gl.UNSIGNED_SHORT,0)}dispose(){this.program.dispose()}};function vu(e,t){e.depthMask(t.depthWrite),t.blend?(e.enable(e.BLEND),e.blendFunc(e.SRC_ALPHA,e.ONE_MINUS_SRC_ALPHA)):e.disable(e.BLEND)}var Su=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]),Xl=`#version 300 es
|
|
294
294
|
precision highp float;
|
|
295
295
|
|
|
296
296
|
layout(location = 0) in vec3 a_position;
|
|
@@ -305,7 +305,7 @@ void main() {
|
|
|
305
305
|
dir.xy += u_scroll;
|
|
306
306
|
v_direction = dir;
|
|
307
307
|
gl_Position = u_viewProjectionNoTranslation * vec4(a_position, 1.0);
|
|
308
|
-
}`,
|
|
308
|
+
}`,Kl=`#version 300 es
|
|
309
309
|
precision highp float;
|
|
310
310
|
|
|
311
311
|
in vec3 v_direction;
|
|
@@ -315,7 +315,7 @@ out vec4 o_color;
|
|
|
315
315
|
|
|
316
316
|
void main() {
|
|
317
317
|
o_color = texture(u_skybox, v_direction);
|
|
318
|
-
}`,
|
|
318
|
+
}`,pa=class{constructor(t){this.gl=t,this.program=Ee.create(t,{vertex:Xl,fragment:Kl},{a_position:0}),this.vao=new ke(t),this.vbo=new Le(t,t.STATIC_DRAW),this.vbo.upload(Su,t.STATIC_DRAW);let r=[{index:0,size:3,type:t.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 Sn(t),this.cubemap.setParameters({minFilter:t.LINEAR,magFilter:t.LINEAR,wrapS:t.CLAMP_TO_EDGE,wrapT:t.CLAMP_TO_EDGE})}bind(t){let{viewProjection:r,scroll:n,textureUnit:i=0}=t;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,i),this.cubemap.bind(i),this.vao.bind()}draw(){this.gl.drawArrays(this.gl.TRIANGLES,0,Su.length/3)}dispose(){this.vbo.dispose(),this.vao.dispose(),this.cubemap.dispose(),this.program.dispose()}};function wu(e){let t=new Float32Array(e);return t[12]=0,t[13]=0,t[14]=0,t}function Au(e,t=[.01,.02]){let[r,n]=t;return[r*e,n*e]}var Zl=`#version 300 es
|
|
319
319
|
precision highp float;
|
|
320
320
|
|
|
321
321
|
layout(location = 0) in vec3 a_position;
|
|
@@ -328,7 +328,7 @@ struct DLight {
|
|
|
328
328
|
float intensity;
|
|
329
329
|
};
|
|
330
330
|
|
|
331
|
-
const int MAX_DLIGHTS = ${
|
|
331
|
+
const int MAX_DLIGHTS = ${sr};
|
|
332
332
|
|
|
333
333
|
uniform mat4 u_modelViewProjection;
|
|
334
334
|
uniform mat4 u_modelMatrix;
|
|
@@ -367,7 +367,7 @@ void main() {
|
|
|
367
367
|
v_texCoord = a_texCoord;
|
|
368
368
|
v_position = worldPos.xyz;
|
|
369
369
|
gl_Position = u_modelViewProjection * vec4(a_position, 1.0);
|
|
370
|
-
}`,
|
|
370
|
+
}`,Yl=`#version 300 es
|
|
371
371
|
precision highp float;
|
|
372
372
|
|
|
373
373
|
in vec2 v_texCoord;
|
|
@@ -403,7 +403,7 @@ void main() {
|
|
|
403
403
|
}
|
|
404
404
|
|
|
405
405
|
o_color = finalColor;
|
|
406
|
-
}`;function ep(e){let t=e.x*e.x+e.y*e.y+e.z*e.z;if(t<=0)return{x:0,y:0,z:1};let r=1/Math.sqrt(t);return{x:e.x*r,y:e.y*r,z:e.z*r}}function yl(e,t,r){return e+(t-e)*r}function xu(e,t,r){return{x:yl(e.x,t.x,r),y:yl(e.y,t.y,r),z:yl(e.z,t.z,r)}}function tp(e,t,r){return[e/r.skinWidth,1-t/r.skinHeight]}function _l(e){if(e.glCommands.length===0){let n=[],i=[];return e.triangles.forEach(s=>{let o=n.length;for(let a=0;a<3;a+=1){let d=s.vertexIndices[a],l=s.texCoordIndices[a],c=e.texCoords[l];n.push({vertexIndex:d,texCoord:tp(c.s,c.t,e.header)})}i.push(o,o+1,o+2)}),{vertices:n,indices:new Uint16Array(i)}}let t=[],r=[];for(let n of e.glCommands){let i=t.length;if(t.push(...n.vertices.map(s=>({vertexIndex:s.vertexIndex,texCoord:[s.s,1-s.t]}))),n.mode==="strip")for(let s=0;s<n.vertices.length-2;s+=1){let o=s%2===0,a=i+s+(o?0:1),d=i+s+(o?1:0),l=i+s+2;r.push(a,d,l)}else for(let s=1;s<n.vertices.length-1;s+=1)r.push(i,i+s,i+s+1)}return{vertices:t,indices:new Uint16Array(r)}}function vl(e,t,r){let{frame0:n,frame1:i,lerp:s}=r,o=e.frames[n],a=e.frames[i];if(!o||!a)throw new Error("Requested MD2 frames are out of range");let d=new Float32Array(t.vertices.length*8);return t.vertices.forEach((l,c)=>{let f=o.vertices[l.vertexIndex],u=a.vertices[l.vertexIndex];if(!f||!u)throw new Error("MD2 vertex index out of range for frame");let h=xu(f.position,u.position,s),m=ep(xu(f.normal,u.normal,s)),g=c*8;d[g]=h.x,d[g+1]=h.y,d[g+2]=h.z,d[g+3]=m.x,d[g+4]=m.y,d[g+5]=m.z,d[g+6]=l.texCoord[0],d[g+7]=l.texCoord[1]}),d}var Bo=class{constructor(t,r,n){this.gl=t,this.geometry=_l(r),this.vertexBuffer=new Le(t,t.STATIC_DRAW),this.indexBuffer=new xe(t,t.STATIC_DRAW),this.vertexArray=new Fe(t),this.indexCount=this.geometry.indices.length,this.vertexArray.configureAttributes([{index:0,size:3,type:t.FLOAT,stride:32,offset:0},{index:1,size:3,type:t.FLOAT,stride:32,offset:12},{index:2,size:2,type:t.FLOAT,stride:32,offset:24}],this.vertexBuffer),this.vertexArray.bind(),this.indexBuffer.bind(),this.indexBuffer.upload(this.geometry.indices,t.STATIC_DRAW),this.update(r,n)}update(t,r){let n=vl(t,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(),this.wireframeIndexBuffer?.dispose()}},Oo=class{constructor(t){this.uniformDlights=[];this.gl=t,this.program=Ee.create(t,{vertex:xl,fragment:bl},{a_position:0,a_normal:1,a_texCoord:2}),this.uniformMvp=this.program.getUniformLocation("u_modelViewProjection"),this.uniformModelMatrix=this.program.getUniformLocation("u_modelMatrix"),this.uniformLightDir=this.program.getUniformLocation("u_lightDir"),this.uniformAmbient=this.program.getUniformLocation("u_ambient"),this.uniformTint=this.program.getUniformLocation("u_tint"),this.uniformDiffuse=this.program.getUniformLocation("u_diffuseMap"),this.uniformRenderMode=this.program.getUniformLocation("u_renderMode"),this.uniformSolidColor=this.program.getUniformLocation("u_solidColor"),this.uniformNumDlights=this.program.getUniformLocation("u_numDlights");for(let r=0;r<ir;r++)this.uniformDlights.push({pos:this.program.getUniformLocation(`u_dlights[${r}].position`),color:this.program.getUniformLocation(`u_dlights[${r}].color`),intensity:this.program.getUniformLocation(`u_dlights[${r}].intensity`)})}bind(t){let{modelViewProjection:r,modelMatrix:n,lightDirection:i=[0,0,1],ambientLight:s=.2,tint:o=[1,1,1,1],diffuseSampler:a=0,dlights:d=[],renderMode:l}=t,c=new Float32Array(i),f=new Float32Array(o);this.program.use(),this.gl.uniformMatrix4fv(this.uniformMvp,!1,r),n?this.gl.uniformMatrix4fv(this.uniformModelMatrix,!1,n):this.gl.uniformMatrix4fv(this.uniformModelMatrix,!1,new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1])),this.gl.uniform3fv(this.uniformLightDir,c),this.gl.uniform1f(this.uniformAmbient,s),this.gl.uniform4fv(this.uniformTint,f),this.gl.uniform1i(this.uniformDiffuse,a);let u=0,h=[1,1,1,1];l&&(l.mode==="solid"||l.mode==="wireframe"?u=1:l.mode==="solid-faceted"&&(u=2),l.color?h=[...l.color]:l.generateRandomColor),this.gl.uniform1i(this.uniformRenderMode,u),this.gl.uniform4f(this.uniformSolidColor,h[0],h[1],h[2],h[3]);let m=Math.min(d.length,ir);this.gl.uniform1i(this.uniformNumDlights,m);for(let g=0;g<m;g++){let p=d[g];this.gl.uniform3f(this.uniformDlights[g].pos,p.origin.x,p.origin.y,p.origin.z),this.gl.uniform3f(this.uniformDlights[g].color,p.color.x,p.color.y,p.color.z),this.gl.uniform1f(this.uniformDlights[g].intensity,p.intensity)}}draw(t,r){if(t.vertexArray.bind(),r&&r.mode==="wireframe"){if(!t.wireframeIndexBuffer){t.wireframeIndexBuffer=new xe(this.gl,this.gl.STATIC_DRAW);let n=wn(t.geometry.indices);t.wireframeIndexBuffer.upload(n),t.wireframeIndexCount=n.length}t.wireframeIndexBuffer.bind(),this.gl.drawElements(this.gl.LINES,t.wireframeIndexCount,this.gl.UNSIGNED_SHORT,0)}else t.indexBuffer.bind(),this.gl.drawElements(this.gl.TRIANGLES,t.indexCount,this.gl.UNSIGNED_SHORT,0)}dispose(){this.program.dispose()}};var ee=1e-6,qe=typeof Float32Array<"u"?Float32Array:Array,Sl=Math.random;function No(e){return e>=0?Math.round(e):e%.5===0?Math.floor(e):Math.round(e)}var yw=Math.PI/180,xw=180/Math.PI;var le={};ma(le,{add:()=>Up,adjoint:()=>cp,clone:()=>np,copy:()=>ip,create:()=>rp,decompose:()=>Ep,determinant:()=>dp,equals:()=>Wp,exactEquals:()=>Gp,frob:()=>Np,fromQuat:()=>Ip,fromQuat2:()=>wp,fromRotation:()=>bp,fromRotationTranslation:()=>Su,fromRotationTranslationScale:()=>Lp,fromRotationTranslationScaleOrigin:()=>Tp,fromScaling:()=>xp,fromTranslation:()=>yp,fromValues:()=>sp,fromXRotation:()=>_p,fromYRotation:()=>vp,fromZRotation:()=>Sp,frustum:()=>Cp,getRotation:()=>Mp,getScaling:()=>wu,getTranslation:()=>Ap,identity:()=>_u,invert:()=>lp,lookAt:()=>Dp,mul:()=>Xp,multiply:()=>vu,multiplyScalar:()=>Hp,multiplyScalarAndAdd:()=>Vp,ortho:()=>zp,orthoNO:()=>Mu,orthoZO:()=>Pp,perspective:()=>Rp,perspectiveFromFieldOfView:()=>kp,perspectiveNO:()=>Au,perspectiveZO:()=>Fp,rotate:()=>hp,rotateX:()=>mp,rotateY:()=>pp,rotateZ:()=>gp,scale:()=>fp,set:()=>op,str:()=>Op,sub:()=>Kp,subtract:()=>Eu,targetTo:()=>Bp,translate:()=>up,transpose:()=>ap});function rp(){var e=new qe(16);return qe!=Float32Array&&(e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0),e[0]=1,e[5]=1,e[10]=1,e[15]=1,e}function np(e){var t=new qe(16);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 ip(e,t){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 sp(e,t,r,n,i,s,o,a,d,l,c,f,u,h,m,g){var p=new qe(16);return p[0]=e,p[1]=t,p[2]=r,p[3]=n,p[4]=i,p[5]=s,p[6]=o,p[7]=a,p[8]=d,p[9]=l,p[10]=c,p[11]=f,p[12]=u,p[13]=h,p[14]=m,p[15]=g,p}function op(e,t,r,n,i,s,o,a,d,l,c,f,u,h,m,g,p){return e[0]=t,e[1]=r,e[2]=n,e[3]=i,e[4]=s,e[5]=o,e[6]=a,e[7]=d,e[8]=l,e[9]=c,e[10]=f,e[11]=u,e[12]=h,e[13]=m,e[14]=g,e[15]=p,e}function _u(e){return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function ap(e,t){if(e===t){var r=t[1],n=t[2],i=t[3],s=t[6],o=t[7],a=t[11];e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=r,e[6]=t[9],e[7]=t[13],e[8]=n,e[9]=s,e[11]=t[14],e[12]=i,e[13]=o,e[14]=a}else e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15];return e}function lp(e,t){var r=t[0],n=t[1],i=t[2],s=t[3],o=t[4],a=t[5],d=t[6],l=t[7],c=t[8],f=t[9],u=t[10],h=t[11],m=t[12],g=t[13],p=t[14],y=t[15],v=r*a-n*o,b=r*d-i*o,x=r*l-s*o,_=n*d-i*a,A=n*l-s*a,S=i*l-s*d,M=c*g-f*m,L=c*p-u*m,w=c*y-h*m,T=f*p-u*g,k=f*y-h*g,U=u*y-h*p,C=v*U-b*k+x*T+_*w-A*L+S*M;return C?(C=1/C,e[0]=(a*U-d*k+l*T)*C,e[1]=(i*k-n*U-s*T)*C,e[2]=(g*S-p*A+y*_)*C,e[3]=(u*A-f*S-h*_)*C,e[4]=(d*w-o*U-l*L)*C,e[5]=(r*U-i*w+s*L)*C,e[6]=(p*x-m*S-y*b)*C,e[7]=(c*S-u*x+h*b)*C,e[8]=(o*k-a*w+l*M)*C,e[9]=(n*w-r*k-s*M)*C,e[10]=(m*A-g*x+y*v)*C,e[11]=(f*x-c*A-h*v)*C,e[12]=(a*L-o*T-d*M)*C,e[13]=(r*T-n*L+i*M)*C,e[14]=(g*b-m*_-p*v)*C,e[15]=(c*_-f*b+u*v)*C,e):null}function cp(e,t){var r=t[0],n=t[1],i=t[2],s=t[3],o=t[4],a=t[5],d=t[6],l=t[7],c=t[8],f=t[9],u=t[10],h=t[11],m=t[12],g=t[13],p=t[14],y=t[15],v=r*a-n*o,b=r*d-i*o,x=r*l-s*o,_=n*d-i*a,A=n*l-s*a,S=i*l-s*d,M=c*g-f*m,L=c*p-u*m,w=c*y-h*m,T=f*p-u*g,k=f*y-h*g,U=u*y-h*p;return e[0]=a*U-d*k+l*T,e[1]=i*k-n*U-s*T,e[2]=g*S-p*A+y*_,e[3]=u*A-f*S-h*_,e[4]=d*w-o*U-l*L,e[5]=r*U-i*w+s*L,e[6]=p*x-m*S-y*b,e[7]=c*S-u*x+h*b,e[8]=o*k-a*w+l*M,e[9]=n*w-r*k-s*M,e[10]=m*A-g*x+y*v,e[11]=f*x-c*A-h*v,e[12]=a*L-o*T-d*M,e[13]=r*T-n*L+i*M,e[14]=g*b-m*_-p*v,e[15]=c*_-f*b+u*v,e}function dp(e){var t=e[0],r=e[1],n=e[2],i=e[3],s=e[4],o=e[5],a=e[6],d=e[7],l=e[8],c=e[9],f=e[10],u=e[11],h=e[12],m=e[13],g=e[14],p=e[15],y=t*o-r*s,v=t*a-n*s,b=r*a-n*o,x=l*m-c*h,_=l*g-f*h,A=c*g-f*m,S=t*A-r*_+n*x,M=s*A-o*_+a*x,L=l*b-c*v+f*y,w=h*b-m*v+g*y;return d*S-i*M+p*L-u*w}function vu(e,t,r){var n=t[0],i=t[1],s=t[2],o=t[3],a=t[4],d=t[5],l=t[6],c=t[7],f=t[8],u=t[9],h=t[10],m=t[11],g=t[12],p=t[13],y=t[14],v=t[15],b=r[0],x=r[1],_=r[2],A=r[3];return e[0]=b*n+x*a+_*f+A*g,e[1]=b*i+x*d+_*u+A*p,e[2]=b*s+x*l+_*h+A*y,e[3]=b*o+x*c+_*m+A*v,b=r[4],x=r[5],_=r[6],A=r[7],e[4]=b*n+x*a+_*f+A*g,e[5]=b*i+x*d+_*u+A*p,e[6]=b*s+x*l+_*h+A*y,e[7]=b*o+x*c+_*m+A*v,b=r[8],x=r[9],_=r[10],A=r[11],e[8]=b*n+x*a+_*f+A*g,e[9]=b*i+x*d+_*u+A*p,e[10]=b*s+x*l+_*h+A*y,e[11]=b*o+x*c+_*m+A*v,b=r[12],x=r[13],_=r[14],A=r[15],e[12]=b*n+x*a+_*f+A*g,e[13]=b*i+x*d+_*u+A*p,e[14]=b*s+x*l+_*h+A*y,e[15]=b*o+x*c+_*m+A*v,e}function up(e,t,r){var n=r[0],i=r[1],s=r[2],o,a,d,l,c,f,u,h,m,g,p,y;return t===e?(e[12]=t[0]*n+t[4]*i+t[8]*s+t[12],e[13]=t[1]*n+t[5]*i+t[9]*s+t[13],e[14]=t[2]*n+t[6]*i+t[10]*s+t[14],e[15]=t[3]*n+t[7]*i+t[11]*s+t[15]):(o=t[0],a=t[1],d=t[2],l=t[3],c=t[4],f=t[5],u=t[6],h=t[7],m=t[8],g=t[9],p=t[10],y=t[11],e[0]=o,e[1]=a,e[2]=d,e[3]=l,e[4]=c,e[5]=f,e[6]=u,e[7]=h,e[8]=m,e[9]=g,e[10]=p,e[11]=y,e[12]=o*n+c*i+m*s+t[12],e[13]=a*n+f*i+g*s+t[13],e[14]=d*n+u*i+p*s+t[14],e[15]=l*n+h*i+y*s+t[15]),e}function fp(e,t,r){var n=r[0],i=r[1],s=r[2];return e[0]=t[0]*n,e[1]=t[1]*n,e[2]=t[2]*n,e[3]=t[3]*n,e[4]=t[4]*i,e[5]=t[5]*i,e[6]=t[6]*i,e[7]=t[7]*i,e[8]=t[8]*s,e[9]=t[9]*s,e[10]=t[10]*s,e[11]=t[11]*s,e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e}function hp(e,t,r,n){var i=n[0],s=n[1],o=n[2],a=Math.sqrt(i*i+s*s+o*o),d,l,c,f,u,h,m,g,p,y,v,b,x,_,A,S,M,L,w,T,k,U,C,Z;return a<ee?null:(a=1/a,i*=a,s*=a,o*=a,d=Math.sin(r),l=Math.cos(r),c=1-l,f=t[0],u=t[1],h=t[2],m=t[3],g=t[4],p=t[5],y=t[6],v=t[7],b=t[8],x=t[9],_=t[10],A=t[11],S=i*i*c+l,M=s*i*c+o*d,L=o*i*c-s*d,w=i*s*c-o*d,T=s*s*c+l,k=o*s*c+i*d,U=i*o*c+s*d,C=s*o*c-i*d,Z=o*o*c+l,e[0]=f*S+g*M+b*L,e[1]=u*S+p*M+x*L,e[2]=h*S+y*M+_*L,e[3]=m*S+v*M+A*L,e[4]=f*w+g*T+b*k,e[5]=u*w+p*T+x*k,e[6]=h*w+y*T+_*k,e[7]=m*w+v*T+A*k,e[8]=f*U+g*C+b*Z,e[9]=u*U+p*C+x*Z,e[10]=h*U+y*C+_*Z,e[11]=m*U+v*C+A*Z,t!==e&&(e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]),e)}function mp(e,t,r){var n=Math.sin(r),i=Math.cos(r),s=t[4],o=t[5],a=t[6],d=t[7],l=t[8],c=t[9],f=t[10],u=t[11];return t!==e&&(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]),e[4]=s*i+l*n,e[5]=o*i+c*n,e[6]=a*i+f*n,e[7]=d*i+u*n,e[8]=l*i-s*n,e[9]=c*i-o*n,e[10]=f*i-a*n,e[11]=u*i-d*n,e}function pp(e,t,r){var n=Math.sin(r),i=Math.cos(r),s=t[0],o=t[1],a=t[2],d=t[3],l=t[8],c=t[9],f=t[10],u=t[11];return t!==e&&(e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]),e[0]=s*i-l*n,e[1]=o*i-c*n,e[2]=a*i-f*n,e[3]=d*i-u*n,e[8]=s*n+l*i,e[9]=o*n+c*i,e[10]=a*n+f*i,e[11]=d*n+u*i,e}function gp(e,t,r){var n=Math.sin(r),i=Math.cos(r),s=t[0],o=t[1],a=t[2],d=t[3],l=t[4],c=t[5],f=t[6],u=t[7];return t!==e&&(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[0]=s*i+l*n,e[1]=o*i+c*n,e[2]=a*i+f*n,e[3]=d*i+u*n,e[4]=l*i-s*n,e[5]=c*i-o*n,e[6]=f*i-a*n,e[7]=u*i-d*n,e}function yp(e,t){return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=t[0],e[13]=t[1],e[14]=t[2],e[15]=1,e}function xp(e,t){return e[0]=t[0],e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=t[1],e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=t[2],e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function bp(e,t,r){var n=r[0],i=r[1],s=r[2],o=Math.sqrt(n*n+i*i+s*s),a,d,l;return o<ee?null:(o=1/o,n*=o,i*=o,s*=o,a=Math.sin(t),d=Math.cos(t),l=1-d,e[0]=n*n*l+d,e[1]=i*n*l+s*a,e[2]=s*n*l-i*a,e[3]=0,e[4]=n*i*l-s*a,e[5]=i*i*l+d,e[6]=s*i*l+n*a,e[7]=0,e[8]=n*s*l+i*a,e[9]=i*s*l-n*a,e[10]=s*s*l+d,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e)}function _p(e,t){var r=Math.sin(t),n=Math.cos(t);return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=n,e[6]=r,e[7]=0,e[8]=0,e[9]=-r,e[10]=n,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function vp(e,t){var r=Math.sin(t),n=Math.cos(t);return e[0]=n,e[1]=0,e[2]=-r,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=r,e[9]=0,e[10]=n,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function Sp(e,t){var r=Math.sin(t),n=Math.cos(t);return e[0]=n,e[1]=r,e[2]=0,e[3]=0,e[4]=-r,e[5]=n,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function Su(e,t,r){var n=t[0],i=t[1],s=t[2],o=t[3],a=n+n,d=i+i,l=s+s,c=n*a,f=n*d,u=n*l,h=i*d,m=i*l,g=s*l,p=o*a,y=o*d,v=o*l;return e[0]=1-(h+g),e[1]=f+v,e[2]=u-y,e[3]=0,e[4]=f-v,e[5]=1-(c+g),e[6]=m+p,e[7]=0,e[8]=u+y,e[9]=m-p,e[10]=1-(c+h),e[11]=0,e[12]=r[0],e[13]=r[1],e[14]=r[2],e[15]=1,e}function wp(e,t){var r=new qe(3),n=-t[0],i=-t[1],s=-t[2],o=t[3],a=t[4],d=t[5],l=t[6],c=t[7],f=n*n+i*i+s*s+o*o;return f>0?(r[0]=(a*o+c*n+d*s-l*i)*2/f,r[1]=(d*o+c*i+l*n-a*s)*2/f,r[2]=(l*o+c*s+a*i-d*n)*2/f):(r[0]=(a*o+c*n+d*s-l*i)*2,r[1]=(d*o+c*i+l*n-a*s)*2,r[2]=(l*o+c*s+a*i-d*n)*2),Su(e,t,r),e}function Ap(e,t){return e[0]=t[12],e[1]=t[13],e[2]=t[14],e}function wu(e,t){var r=t[0],n=t[1],i=t[2],s=t[4],o=t[5],a=t[6],d=t[8],l=t[9],c=t[10];return e[0]=Math.sqrt(r*r+n*n+i*i),e[1]=Math.sqrt(s*s+o*o+a*a),e[2]=Math.sqrt(d*d+l*l+c*c),e}function Mp(e,t){var r=new qe(3);wu(r,t);var n=1/r[0],i=1/r[1],s=1/r[2],o=t[0]*n,a=t[1]*i,d=t[2]*s,l=t[4]*n,c=t[5]*i,f=t[6]*s,u=t[8]*n,h=t[9]*i,m=t[10]*s,g=o+c+m,p=0;return g>0?(p=Math.sqrt(g+1)*2,e[3]=.25*p,e[0]=(f-h)/p,e[1]=(u-d)/p,e[2]=(a-l)/p):o>c&&o>m?(p=Math.sqrt(1+o-c-m)*2,e[3]=(f-h)/p,e[0]=.25*p,e[1]=(a+l)/p,e[2]=(u+d)/p):c>m?(p=Math.sqrt(1+c-o-m)*2,e[3]=(u-d)/p,e[0]=(a+l)/p,e[1]=.25*p,e[2]=(f+h)/p):(p=Math.sqrt(1+m-o-c)*2,e[3]=(a-l)/p,e[0]=(u+d)/p,e[1]=(f+h)/p,e[2]=.25*p),e}function Ep(e,t,r,n){t[0]=n[12],t[1]=n[13],t[2]=n[14];var i=n[0],s=n[1],o=n[2],a=n[4],d=n[5],l=n[6],c=n[8],f=n[9],u=n[10];r[0]=Math.sqrt(i*i+s*s+o*o),r[1]=Math.sqrt(a*a+d*d+l*l),r[2]=Math.sqrt(c*c+f*f+u*u);var h=1/r[0],m=1/r[1],g=1/r[2],p=i*h,y=s*m,v=o*g,b=a*h,x=d*m,_=l*g,A=c*h,S=f*m,M=u*g,L=p+x+M,w=0;return L>0?(w=Math.sqrt(L+1)*2,e[3]=.25*w,e[0]=(_-S)/w,e[1]=(A-v)/w,e[2]=(y-b)/w):p>x&&p>M?(w=Math.sqrt(1+p-x-M)*2,e[3]=(_-S)/w,e[0]=.25*w,e[1]=(y+b)/w,e[2]=(A+v)/w):x>M?(w=Math.sqrt(1+x-p-M)*2,e[3]=(A-v)/w,e[0]=(y+b)/w,e[1]=.25*w,e[2]=(_+S)/w):(w=Math.sqrt(1+M-p-x)*2,e[3]=(y-b)/w,e[0]=(A+v)/w,e[1]=(_+S)/w,e[2]=.25*w),e}function Lp(e,t,r,n){var i=t[0],s=t[1],o=t[2],a=t[3],d=i+i,l=s+s,c=o+o,f=i*d,u=i*l,h=i*c,m=s*l,g=s*c,p=o*c,y=a*d,v=a*l,b=a*c,x=n[0],_=n[1],A=n[2];return e[0]=(1-(m+p))*x,e[1]=(u+b)*x,e[2]=(h-v)*x,e[3]=0,e[4]=(u-b)*_,e[5]=(1-(f+p))*_,e[6]=(g+y)*_,e[7]=0,e[8]=(h+v)*A,e[9]=(g-y)*A,e[10]=(1-(f+m))*A,e[11]=0,e[12]=r[0],e[13]=r[1],e[14]=r[2],e[15]=1,e}function Tp(e,t,r,n,i){var s=t[0],o=t[1],a=t[2],d=t[3],l=s+s,c=o+o,f=a+a,u=s*l,h=s*c,m=s*f,g=o*c,p=o*f,y=a*f,v=d*l,b=d*c,x=d*f,_=n[0],A=n[1],S=n[2],M=i[0],L=i[1],w=i[2],T=(1-(g+y))*_,k=(h+x)*_,U=(m-b)*_,C=(h-x)*A,Z=(1-(u+y))*A,Ie=(p+v)*A,dr=(m+b)*S,bs=(p-v)*S,Bn=(1-(u+g))*S;return e[0]=T,e[1]=k,e[2]=U,e[3]=0,e[4]=C,e[5]=Z,e[6]=Ie,e[7]=0,e[8]=dr,e[9]=bs,e[10]=Bn,e[11]=0,e[12]=r[0]+M-(T*M+C*L+dr*w),e[13]=r[1]+L-(k*M+Z*L+bs*w),e[14]=r[2]+w-(U*M+Ie*L+Bn*w),e[15]=1,e}function Ip(e,t){var r=t[0],n=t[1],i=t[2],s=t[3],o=r+r,a=n+n,d=i+i,l=r*o,c=n*o,f=n*a,u=i*o,h=i*a,m=i*d,g=s*o,p=s*a,y=s*d;return e[0]=1-f-m,e[1]=c+y,e[2]=u-p,e[3]=0,e[4]=c-y,e[5]=1-l-m,e[6]=h+g,e[7]=0,e[8]=u+p,e[9]=h-g,e[10]=1-l-f,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function Cp(e,t,r,n,i,s,o){var a=1/(r-t),d=1/(i-n),l=1/(s-o);return e[0]=s*2*a,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=s*2*d,e[6]=0,e[7]=0,e[8]=(r+t)*a,e[9]=(i+n)*d,e[10]=(o+s)*l,e[11]=-1,e[12]=0,e[13]=0,e[14]=o*s*2*l,e[15]=0,e}function Au(e,t,r,n,i){var s=1/Math.tan(t/2);if(e[0]=s/r,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=s,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[11]=-1,e[12]=0,e[13]=0,e[15]=0,i!=null&&i!==1/0){var o=1/(n-i);e[10]=(i+n)*o,e[14]=2*i*n*o}else e[10]=-1,e[14]=-2*n;return e}var Rp=Au;function Fp(e,t,r,n,i){var s=1/Math.tan(t/2);if(e[0]=s/r,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=s,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[11]=-1,e[12]=0,e[13]=0,e[15]=0,i!=null&&i!==1/0){var o=1/(n-i);e[10]=i*o,e[14]=i*n*o}else e[10]=-1,e[14]=-n;return e}function kp(e,t,r,n){var i=Math.tan(t.upDegrees*Math.PI/180),s=Math.tan(t.downDegrees*Math.PI/180),o=Math.tan(t.leftDegrees*Math.PI/180),a=Math.tan(t.rightDegrees*Math.PI/180),d=2/(o+a),l=2/(i+s);return e[0]=d,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=l,e[6]=0,e[7]=0,e[8]=-((o-a)*d*.5),e[9]=(i-s)*l*.5,e[10]=n/(r-n),e[11]=-1,e[12]=0,e[13]=0,e[14]=n*r/(r-n),e[15]=0,e}function Mu(e,t,r,n,i,s,o){var a=1/(t-r),d=1/(n-i),l=1/(s-o);return e[0]=-2*a,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=-2*d,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=2*l,e[11]=0,e[12]=(t+r)*a,e[13]=(i+n)*d,e[14]=(o+s)*l,e[15]=1,e}var zp=Mu;function Pp(e,t,r,n,i,s,o){var a=1/(t-r),d=1/(n-i),l=1/(s-o);return e[0]=-2*a,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=-2*d,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=l,e[11]=0,e[12]=(t+r)*a,e[13]=(i+n)*d,e[14]=s*l,e[15]=1,e}function Dp(e,t,r,n){var i,s,o,a,d,l,c,f,u,h,m=t[0],g=t[1],p=t[2],y=n[0],v=n[1],b=n[2],x=r[0],_=r[1],A=r[2];return Math.abs(m-x)<ee&&Math.abs(g-_)<ee&&Math.abs(p-A)<ee?_u(e):(c=m-x,f=g-_,u=p-A,h=1/Math.sqrt(c*c+f*f+u*u),c*=h,f*=h,u*=h,i=v*u-b*f,s=b*c-y*u,o=y*f-v*c,h=Math.sqrt(i*i+s*s+o*o),h?(h=1/h,i*=h,s*=h,o*=h):(i=0,s=0,o=0),a=f*o-u*s,d=u*i-c*o,l=c*s-f*i,h=Math.sqrt(a*a+d*d+l*l),h?(h=1/h,a*=h,d*=h,l*=h):(a=0,d=0,l=0),e[0]=i,e[1]=a,e[2]=c,e[3]=0,e[4]=s,e[5]=d,e[6]=f,e[7]=0,e[8]=o,e[9]=l,e[10]=u,e[11]=0,e[12]=-(i*m+s*g+o*p),e[13]=-(a*m+d*g+l*p),e[14]=-(c*m+f*g+u*p),e[15]=1,e)}function Bp(e,t,r,n){var i=t[0],s=t[1],o=t[2],a=n[0],d=n[1],l=n[2],c=i-r[0],f=s-r[1],u=o-r[2],h=c*c+f*f+u*u;h>0&&(h=1/Math.sqrt(h),c*=h,f*=h,u*=h);var m=d*u-l*f,g=l*c-a*u,p=a*f-d*c;return h=m*m+g*g+p*p,h>0&&(h=1/Math.sqrt(h),m*=h,g*=h,p*=h),e[0]=m,e[1]=g,e[2]=p,e[3]=0,e[4]=f*p-u*g,e[5]=u*m-c*p,e[6]=c*g-f*m,e[7]=0,e[8]=c,e[9]=f,e[10]=u,e[11]=0,e[12]=i,e[13]=s,e[14]=o,e[15]=1,e}function Op(e){return"mat4("+e[0]+", "+e[1]+", "+e[2]+", "+e[3]+", "+e[4]+", "+e[5]+", "+e[6]+", "+e[7]+", "+e[8]+", "+e[9]+", "+e[10]+", "+e[11]+", "+e[12]+", "+e[13]+", "+e[14]+", "+e[15]+")"}function Np(e){return Math.sqrt(e[0]*e[0]+e[1]*e[1]+e[2]*e[2]+e[3]*e[3]+e[4]*e[4]+e[5]*e[5]+e[6]*e[6]+e[7]*e[7]+e[8]*e[8]+e[9]*e[9]+e[10]*e[10]+e[11]*e[11]+e[12]*e[12]+e[13]*e[13]+e[14]*e[14]+e[15]*e[15])}function Up(e,t,r){return e[0]=t[0]+r[0],e[1]=t[1]+r[1],e[2]=t[2]+r[2],e[3]=t[3]+r[3],e[4]=t[4]+r[4],e[5]=t[5]+r[5],e[6]=t[6]+r[6],e[7]=t[7]+r[7],e[8]=t[8]+r[8],e[9]=t[9]+r[9],e[10]=t[10]+r[10],e[11]=t[11]+r[11],e[12]=t[12]+r[12],e[13]=t[13]+r[13],e[14]=t[14]+r[14],e[15]=t[15]+r[15],e}function Eu(e,t,r){return e[0]=t[0]-r[0],e[1]=t[1]-r[1],e[2]=t[2]-r[2],e[3]=t[3]-r[3],e[4]=t[4]-r[4],e[5]=t[5]-r[5],e[6]=t[6]-r[6],e[7]=t[7]-r[7],e[8]=t[8]-r[8],e[9]=t[9]-r[9],e[10]=t[10]-r[10],e[11]=t[11]-r[11],e[12]=t[12]-r[12],e[13]=t[13]-r[13],e[14]=t[14]-r[14],e[15]=t[15]-r[15],e}function Hp(e,t,r){return e[0]=t[0]*r,e[1]=t[1]*r,e[2]=t[2]*r,e[3]=t[3]*r,e[4]=t[4]*r,e[5]=t[5]*r,e[6]=t[6]*r,e[7]=t[7]*r,e[8]=t[8]*r,e[9]=t[9]*r,e[10]=t[10]*r,e[11]=t[11]*r,e[12]=t[12]*r,e[13]=t[13]*r,e[14]=t[14]*r,e[15]=t[15]*r,e}function Vp(e,t,r,n){return e[0]=t[0]+r[0]*n,e[1]=t[1]+r[1]*n,e[2]=t[2]+r[2]*n,e[3]=t[3]+r[3]*n,e[4]=t[4]+r[4]*n,e[5]=t[5]+r[5]*n,e[6]=t[6]+r[6]*n,e[7]=t[7]+r[7]*n,e[8]=t[8]+r[8]*n,e[9]=t[9]+r[9]*n,e[10]=t[10]+r[10]*n,e[11]=t[11]+r[11]*n,e[12]=t[12]+r[12]*n,e[13]=t[13]+r[13]*n,e[14]=t[14]+r[14]*n,e[15]=t[15]+r[15]*n,e}function Gp(e,t){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]}function Wp(e,t){var r=e[0],n=e[1],i=e[2],s=e[3],o=e[4],a=e[5],d=e[6],l=e[7],c=e[8],f=e[9],u=e[10],h=e[11],m=e[12],g=e[13],p=e[14],y=e[15],v=t[0],b=t[1],x=t[2],_=t[3],A=t[4],S=t[5],M=t[6],L=t[7],w=t[8],T=t[9],k=t[10],U=t[11],C=t[12],Z=t[13],Ie=t[14],dr=t[15];return Math.abs(r-v)<=ee*Math.max(1,Math.abs(r),Math.abs(v))&&Math.abs(n-b)<=ee*Math.max(1,Math.abs(n),Math.abs(b))&&Math.abs(i-x)<=ee*Math.max(1,Math.abs(i),Math.abs(x))&&Math.abs(s-_)<=ee*Math.max(1,Math.abs(s),Math.abs(_))&&Math.abs(o-A)<=ee*Math.max(1,Math.abs(o),Math.abs(A))&&Math.abs(a-S)<=ee*Math.max(1,Math.abs(a),Math.abs(S))&&Math.abs(d-M)<=ee*Math.max(1,Math.abs(d),Math.abs(M))&&Math.abs(l-L)<=ee*Math.max(1,Math.abs(l),Math.abs(L))&&Math.abs(c-w)<=ee*Math.max(1,Math.abs(c),Math.abs(w))&&Math.abs(f-T)<=ee*Math.max(1,Math.abs(f),Math.abs(T))&&Math.abs(u-k)<=ee*Math.max(1,Math.abs(u),Math.abs(k))&&Math.abs(h-U)<=ee*Math.max(1,Math.abs(h),Math.abs(U))&&Math.abs(m-C)<=ee*Math.max(1,Math.abs(m),Math.abs(C))&&Math.abs(g-Z)<=ee*Math.max(1,Math.abs(g),Math.abs(Z))&&Math.abs(p-Ie)<=ee*Math.max(1,Math.abs(p),Math.abs(Ie))&&Math.abs(y-dr)<=ee*Math.max(1,Math.abs(y),Math.abs(dr))}var Xp=vu,Kp=Eu;var P={};ma(P,{add:()=>jp,angle:()=>_1,bezier:()=>f1,ceil:()=>Qp,clone:()=>$p,copy:()=>Yp,create:()=>Lu,cross:()=>l1,dist:()=>T1,distance:()=>Fu,div:()=>L1,divide:()=>Ru,dot:()=>wl,equals:()=>A1,exactEquals:()=>w1,floor:()=>Jp,forEach:()=>F1,fromValues:()=>Zp,hermite:()=>u1,inverse:()=>o1,len:()=>C1,length:()=>Tu,lerp:()=>c1,max:()=>t1,min:()=>e1,mul:()=>E1,multiply:()=>Cu,negate:()=>s1,normalize:()=>a1,random:()=>h1,rotateX:()=>y1,rotateY:()=>x1,rotateZ:()=>b1,round:()=>r1,scale:()=>n1,scaleAndAdd:()=>i1,set:()=>qp,slerp:()=>d1,sqrDist:()=>I1,sqrLen:()=>R1,squaredDistance:()=>ku,squaredLength:()=>zu,str:()=>S1,sub:()=>M1,subtract:()=>Iu,transformMat3:()=>p1,transformMat4:()=>m1,transformQuat:()=>g1,zero:()=>v1});function Lu(){var e=new qe(3);return qe!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0),e}function $p(e){var t=new qe(3);return t[0]=e[0],t[1]=e[1],t[2]=e[2],t}function Tu(e){var t=e[0],r=e[1],n=e[2];return Math.sqrt(t*t+r*r+n*n)}function Zp(e,t,r){var n=new qe(3);return n[0]=e,n[1]=t,n[2]=r,n}function Yp(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e}function qp(e,t,r,n){return e[0]=t,e[1]=r,e[2]=n,e}function jp(e,t,r){return e[0]=t[0]+r[0],e[1]=t[1]+r[1],e[2]=t[2]+r[2],e}function Iu(e,t,r){return e[0]=t[0]-r[0],e[1]=t[1]-r[1],e[2]=t[2]-r[2],e}function Cu(e,t,r){return e[0]=t[0]*r[0],e[1]=t[1]*r[1],e[2]=t[2]*r[2],e}function Ru(e,t,r){return e[0]=t[0]/r[0],e[1]=t[1]/r[1],e[2]=t[2]/r[2],e}function Qp(e,t){return e[0]=Math.ceil(t[0]),e[1]=Math.ceil(t[1]),e[2]=Math.ceil(t[2]),e}function Jp(e,t){return e[0]=Math.floor(t[0]),e[1]=Math.floor(t[1]),e[2]=Math.floor(t[2]),e}function e1(e,t,r){return e[0]=Math.min(t[0],r[0]),e[1]=Math.min(t[1],r[1]),e[2]=Math.min(t[2],r[2]),e}function t1(e,t,r){return e[0]=Math.max(t[0],r[0]),e[1]=Math.max(t[1],r[1]),e[2]=Math.max(t[2],r[2]),e}function r1(e,t){return e[0]=No(t[0]),e[1]=No(t[1]),e[2]=No(t[2]),e}function n1(e,t,r){return e[0]=t[0]*r,e[1]=t[1]*r,e[2]=t[2]*r,e}function i1(e,t,r,n){return e[0]=t[0]+r[0]*n,e[1]=t[1]+r[1]*n,e[2]=t[2]+r[2]*n,e}function Fu(e,t){var r=t[0]-e[0],n=t[1]-e[1],i=t[2]-e[2];return Math.sqrt(r*r+n*n+i*i)}function ku(e,t){var r=t[0]-e[0],n=t[1]-e[1],i=t[2]-e[2];return r*r+n*n+i*i}function zu(e){var t=e[0],r=e[1],n=e[2];return t*t+r*r+n*n}function s1(e,t){return e[0]=-t[0],e[1]=-t[1],e[2]=-t[2],e}function o1(e,t){return e[0]=1/t[0],e[1]=1/t[1],e[2]=1/t[2],e}function a1(e,t){var r=t[0],n=t[1],i=t[2],s=r*r+n*n+i*i;return s>0&&(s=1/Math.sqrt(s)),e[0]=t[0]*s,e[1]=t[1]*s,e[2]=t[2]*s,e}function wl(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function l1(e,t,r){var n=t[0],i=t[1],s=t[2],o=r[0],a=r[1],d=r[2];return e[0]=i*d-s*a,e[1]=s*o-n*d,e[2]=n*a-i*o,e}function c1(e,t,r,n){var i=t[0],s=t[1],o=t[2];return e[0]=i+n*(r[0]-i),e[1]=s+n*(r[1]-s),e[2]=o+n*(r[2]-o),e}function d1(e,t,r,n){var i=Math.acos(Math.min(Math.max(wl(t,r),-1),1)),s=Math.sin(i),o=Math.sin((1-n)*i)/s,a=Math.sin(n*i)/s;return e[0]=o*t[0]+a*r[0],e[1]=o*t[1]+a*r[1],e[2]=o*t[2]+a*r[2],e}function u1(e,t,r,n,i,s){var o=s*s,a=o*(2*s-3)+1,d=o*(s-2)+s,l=o*(s-1),c=o*(3-2*s);return e[0]=t[0]*a+r[0]*d+n[0]*l+i[0]*c,e[1]=t[1]*a+r[1]*d+n[1]*l+i[1]*c,e[2]=t[2]*a+r[2]*d+n[2]*l+i[2]*c,e}function f1(e,t,r,n,i,s){var o=1-s,a=o*o,d=s*s,l=a*o,c=3*s*a,f=3*d*o,u=d*s;return e[0]=t[0]*l+r[0]*c+n[0]*f+i[0]*u,e[1]=t[1]*l+r[1]*c+n[1]*f+i[1]*u,e[2]=t[2]*l+r[2]*c+n[2]*f+i[2]*u,e}function h1(e,t){t=t===void 0?1:t;var r=Sl()*2*Math.PI,n=Sl()*2-1,i=Math.sqrt(1-n*n)*t;return e[0]=Math.cos(r)*i,e[1]=Math.sin(r)*i,e[2]=n*t,e}function m1(e,t,r){var n=t[0],i=t[1],s=t[2],o=r[3]*n+r[7]*i+r[11]*s+r[15];return o=o||1,e[0]=(r[0]*n+r[4]*i+r[8]*s+r[12])/o,e[1]=(r[1]*n+r[5]*i+r[9]*s+r[13])/o,e[2]=(r[2]*n+r[6]*i+r[10]*s+r[14])/o,e}function p1(e,t,r){var n=t[0],i=t[1],s=t[2];return e[0]=n*r[0]+i*r[3]+s*r[6],e[1]=n*r[1]+i*r[4]+s*r[7],e[2]=n*r[2]+i*r[5]+s*r[8],e}function g1(e,t,r){var n=r[0],i=r[1],s=r[2],o=r[3],a=t[0],d=t[1],l=t[2],c=i*l-s*d,f=s*a-n*l,u=n*d-i*a;return c=c+c,f=f+f,u=u+u,e[0]=a+o*c+i*u-s*f,e[1]=d+o*f+s*c-n*u,e[2]=l+o*u+n*f-i*c,e}function y1(e,t,r,n){var i=[],s=[];return i[0]=t[0]-r[0],i[1]=t[1]-r[1],i[2]=t[2]-r[2],s[0]=i[0],s[1]=i[1]*Math.cos(n)-i[2]*Math.sin(n),s[2]=i[1]*Math.sin(n)+i[2]*Math.cos(n),e[0]=s[0]+r[0],e[1]=s[1]+r[1],e[2]=s[2]+r[2],e}function x1(e,t,r,n){var i=[],s=[];return i[0]=t[0]-r[0],i[1]=t[1]-r[1],i[2]=t[2]-r[2],s[0]=i[2]*Math.sin(n)+i[0]*Math.cos(n),s[1]=i[1],s[2]=i[2]*Math.cos(n)-i[0]*Math.sin(n),e[0]=s[0]+r[0],e[1]=s[1]+r[1],e[2]=s[2]+r[2],e}function b1(e,t,r,n){var i=[],s=[];return i[0]=t[0]-r[0],i[1]=t[1]-r[1],i[2]=t[2]-r[2],s[0]=i[0]*Math.cos(n)-i[1]*Math.sin(n),s[1]=i[0]*Math.sin(n)+i[1]*Math.cos(n),s[2]=i[2],e[0]=s[0]+r[0],e[1]=s[1]+r[1],e[2]=s[2]+r[2],e}function _1(e,t){var r=e[0],n=e[1],i=e[2],s=t[0],o=t[1],a=t[2],d=Math.sqrt((r*r+n*n+i*i)*(s*s+o*o+a*a)),l=d&&wl(e,t)/d;return Math.acos(Math.min(Math.max(l,-1),1))}function v1(e){return e[0]=0,e[1]=0,e[2]=0,e}function S1(e){return"vec3("+e[0]+", "+e[1]+", "+e[2]+")"}function w1(e,t){return e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]}function A1(e,t){var r=e[0],n=e[1],i=e[2],s=t[0],o=t[1],a=t[2];return Math.abs(r-s)<=ee*Math.max(1,Math.abs(r),Math.abs(s))&&Math.abs(n-o)<=ee*Math.max(1,Math.abs(n),Math.abs(o))&&Math.abs(i-a)<=ee*Math.max(1,Math.abs(i),Math.abs(a))}var M1=Iu,E1=Cu,L1=Ru,T1=Fu,I1=ku,C1=Tu,R1=zu,F1=(function(){var e=Lu();return function(t,r,n,i,s,o){var a,d;for(r||(r=3),n||(n=0),i?d=Math.min(i*r+n,t.length):d=t.length,a=n;a<d;a+=r)e[0]=t[a],e[1]=t[a+1],e[2]=t[a+2],s(e,e,o),t[a]=e[0],t[a+1]=e[1],t[a+2]=e[2];return t}})();var Uo=class{constructor(){this._position=P.create();this._angles=P.create();this._bobAngles=P.create();this._bobOffset=P.create();this._kickAngles=P.create();this._rollAngle=0;this._fov=90;this._aspect=1;this._near=.1;this._far=1e3;this._viewMatrix=le.create();this._projectionMatrix=le.create();this._viewProjectionMatrix=le.create();this._dirty=!0}get position(){return this._position}set position(t){P.equals(this._position,t)||(P.copy(this._position,t),this._dirty=!0,this.triggerMoveEvent())}get angles(){return this._angles}set angles(t){P.equals(this._angles,t)||(P.copy(this._angles,t),this._dirty=!0,this.triggerMoveEvent())}get bobAngles(){return this._bobAngles}set bobAngles(t){P.copy(this._bobAngles,t),this._dirty=!0}get kickAngles(){return this._kickAngles}set kickAngles(t){P.copy(this._kickAngles,t),this._dirty=!0}get bobOffset(){return this._bobOffset}set bobOffset(t){P.copy(this._bobOffset,t),this._dirty=!0}get rollAngle(){return this._rollAngle}set rollAngle(t){this._rollAngle=t,this._dirty=!0}get fov(){return this._fov}set fov(t){this._fov=t,this._dirty=!0}get aspect(){return this._aspect}set aspect(t){this._aspect=t,this._dirty=!0}setPosition(t,r,n){let i=P.fromValues(t,r,n);P.equals(this._position,i)||(P.copy(this._position,i),this._dirty=!0,this.triggerMoveEvent())}setRotation(t,r,n){let i=P.fromValues(t,r,n);P.equals(this._angles,i)||(P.copy(this._angles,i),this._dirty=!0,this.triggerMoveEvent())}setFov(t){this.fov=t}setAspectRatio(t){this.aspect=t}lookAt(t){let r=P.create();if(P.subtract(r,t,this._position),P.length(r)<.001)return;let i=Math.atan2(r[1],r[0])*ya,s=Math.hypot(r[0],r[1]),o=-Math.atan2(r[2],s)*ya;this.setRotation(o,i,0)}triggerMoveEvent(){this.onCameraMove&&this.onCameraMove({position:P.clone(this._position),angles:P.clone(this._angles)})}get viewMatrix(){return this.updateMatrices(),this._viewMatrix}get projectionMatrix(){return this.updateMatrices(),this._projectionMatrix}get viewProjectionMatrix(){return this.updateMatrices(),this._viewProjectionMatrix}getViewmodelProjectionMatrix(t){let r=le.create();return le.perspective(r,t*Gr,this._aspect,this._near,this._far),r}screenToWorldRay(t,r){let n=t*2-1,i=1-r*2,s=P.fromValues(n,i,-1),o=P.fromValues(n,i,1),a=le.create();le.invert(a,this.viewProjectionMatrix);let d=P.create(),l=P.create();P.transformMat4(d,s,a),P.transformMat4(l,o,a);let c=P.create();return P.subtract(c,l,d),P.normalize(c,c),{origin:P.clone(this._position),direction:c}}updateMatrices(){if(!this._dirty)return;le.perspective(this._projectionMatrix,this._fov*Gr,this._aspect,this._near,this._far);let t=le.fromValues(0,0,-1,0,-1,0,0,0,0,1,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],i=this._angles[2]+this._bobAngles[2]+this._kickAngles[2]+this._rollAngle,s=r*Gr,o=n*Gr,a=i*Gr,d=le.create();le.identity(d),le.rotateZ(d,d,-o),le.rotateY(d,d,-s),le.rotateX(d,d,-a);let l=le.create();le.multiply(l,t,d);let c=P.add(P.create(),this._position,this._bobOffset),f=P.negate(P.create(),c),u=P.create();P.transformMat4(u,f,d);let h=P.fromValues(u[1]?-u[1]:0,u[2]||0,u[0]?-u[0]:0);le.copy(this._viewMatrix,l),this._viewMatrix[12]=h[0],this._viewMatrix[13]=h[1],this._viewMatrix[14]=h[2],le.multiply(this._viewProjectionMatrix,this._projectionMatrix,this._viewMatrix),this._dirty=!1}};var k1=[.2,.2,.2],z1={x:0,y:0,z:1},P1=[.8,.8,.8];function Al(e,t,r){return e+(t-e)*r}function Mn(e,t,r){return{x:Al(e.x,t.x,r),y:Al(e.y,t.y,r),z:Al(e.z,t.z,r)}}function An(e){return e<0?0:e>1?1:e}function Ml(e){let t=[],r=[];for(let n of e.triangles){let i=t.length,[s,o,a]=n.indices,d=e.texCoords[s],l=e.texCoords[o],c=e.texCoords[a];if(!d||!l||!c)throw new Error(`Missing texCoord for triangle in surface ${e.name}`);t.push({vertexIndex:s,texCoord:[d.s,1-d.t]},{vertexIndex:o,texCoord:[l.s,1-l.t]},{vertexIndex:a,texCoord:[c.s,1-c.t]}),r.push(i,i+1,i+2)}return{vertices:t,indices:new Uint16Array(r)}}function D1(e,t,r){let n=r?.ambient??k1,i=r?.directional??{direction:z1,color:P1},s=Je(e),o=Je(i.direction),a=An(s.x*o.x+s.y*o.y+s.z*o.z),d=n[0]+i.color[0]*a,l=n[1]+i.color[1]*a,c=n[2]+i.color[2]*a;if(r?.dynamicLights){let f=r.modelMatrix?Zc(r.modelMatrix,t):t;for(let u of r.dynamicLights){let h=f.x-u.origin.x,m=f.y-u.origin.y,g=f.z-u.origin.z,p=h*h+m*m+g*g,y=u.radius*u.radius;if(p<y&&y>0){let v=1-Math.sqrt(p)/u.radius,b=Math.sqrt(p),x=b>0?An(-(h*s.x+m*s.y+g*s.z)/b):0,_=An(v*x);d+=u.color[0]*_,l+=u.color[1]*_,c+=u.color[2]*_}}}return[An(d),An(l),An(c)]}function El(e,t,r,n){let i=e.vertices[r.frame0],s=e.vertices[r.frame1];if(!i||!s)throw new Error("Requested MD3 frames are out of range");let o=new Float32Array(t.vertices.length*12);return t.vertices.forEach((a,d)=>{let l=i[a.vertexIndex],c=s[a.vertexIndex];if(!l||!c)throw new Error(`Vertex index ${a.vertexIndex} missing for frame`);let f=Mn(l.position,c.position,r.lerp),u=Je(Mn(l.normal,c.normal,r.lerp)),h=D1(u,f,n),m=d*12;o[m]=f.x,o[m+1]=f.y,o[m+2]=f.z,o[m+3]=u.x,o[m+4]=u.y,o[m+5]=u.z,o[m+6]=a.texCoord[0],o[m+7]=a.texCoord[1],o[m+8]=h[0],o[m+9]=h[1],o[m+10]=h[2],o[m+11]=1}),o}function Pu(e,t,r){let n=e.tags[0];if(!n)return null;let i=n.findIndex(g=>g.name===r);if(i===-1)return null;let s=e.tags[t.frame0]?.[i],o=e.tags[t.frame1]?.[i];if(!s||!o)throw new Error(`Tag ${r} is missing for one of the interpolated frames`);let a=Mn(s.origin,o.origin,t.lerp),d=Je(Mn(s.axis[0],o.axis[0],t.lerp)),l=Je(Mn(s.axis[1],o.axis[1],t.lerp)),c=Je(Mn(s.axis[2],o.axis[2],t.lerp)),f=d,u=Je({x:l.x-f.x*(f.x*l.x+f.y*l.y+f.z*l.z),y:l.y-f.y*(f.x*l.x+f.y*l.y+f.z*l.z),z:l.z-f.z*(f.x*l.x+f.y*l.y+f.z*l.z)}),h=Je({x:f.y*u.z-f.z*u.y,y:f.z*u.x-f.x*u.z,z:f.x*u.y-f.y*u.x}),m=[f,u,h];return{origin:a,axis:m,matrix:Yc(a,m)}}var Ll=`#version 300 es
|
|
406
|
+
}`;function ap(e){let t=e.x*e.x+e.y*e.y+e.z*e.z;if(t<=0)return{x:0,y:0,z:1};let r=1/Math.sqrt(t);return{x:e.x*r,y:e.y*r,z:e.z*r}}function $l(e,t,r){return e+(t-e)*r}function Mu(e,t,r){return{x:$l(e.x,t.x,r),y:$l(e.y,t.y,r),z:$l(e.z,t.z,r)}}function lp(e,t,r){return[e/r.skinWidth,1-t/r.skinHeight]}function ql(e){if(e.glCommands.length===0){let n=[],i=[];return e.triangles.forEach(s=>{let o=n.length;for(let a=0;a<3;a+=1){let c=s.vertexIndices[a],l=s.texCoordIndices[a],d=e.texCoords[l];n.push({vertexIndex:c,texCoord:lp(d.s,d.t,e.header)})}i.push(o,o+1,o+2)}),{vertices:n,indices:new Uint16Array(i)}}let t=[],r=[];for(let n of e.glCommands){let i=t.length;if(t.push(...n.vertices.map(s=>({vertexIndex:s.vertexIndex,texCoord:[s.s,1-s.t]}))),n.mode==="strip")for(let s=0;s<n.vertices.length-2;s+=1){let o=s%2===0,a=i+s+(o?0:1),c=i+s+(o?1:0),l=i+s+2;r.push(a,c,l)}else for(let s=1;s<n.vertices.length-1;s+=1)r.push(i,i+s,i+s+1)}return{vertices:t,indices:new Uint16Array(r)}}function jl(e,t,r){let{frame0:n,frame1:i,lerp:s}=r,o=e.frames[n],a=e.frames[i];if(!o||!a)throw new Error("Requested MD2 frames are out of range");let c=new Float32Array(t.vertices.length*8);return t.vertices.forEach((l,d)=>{let f=o.vertices[l.vertexIndex],u=a.vertices[l.vertexIndex];if(!f||!u)throw new Error("MD2 vertex index out of range for frame");let h=Mu(f.position,u.position,s),m=ap(Mu(f.normal,u.normal,s)),g=d*8;c[g]=h.x,c[g+1]=h.y,c[g+2]=h.z,c[g+3]=m.x,c[g+4]=m.y,c[g+5]=m.z,c[g+6]=l.texCoord[0],c[g+7]=l.texCoord[1]}),c}var ga=class{constructor(t,r,n){this.gl=t,this.geometry=ql(r),this.vertexBuffer=new Le(t,t.STATIC_DRAW),this.indexBuffer=new xe(t,t.STATIC_DRAW),this.vertexArray=new ke(t),this.indexCount=this.geometry.indices.length,this.vertexArray.configureAttributes([{index:0,size:3,type:t.FLOAT,stride:32,offset:0},{index:1,size:3,type:t.FLOAT,stride:32,offset:12},{index:2,size:2,type:t.FLOAT,stride:32,offset:24}],this.vertexBuffer),this.vertexArray.bind(),this.indexBuffer.bind(),this.indexBuffer.upload(this.geometry.indices,t.STATIC_DRAW),this.update(r,n)}update(t,r){let n=jl(t,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(),this.wireframeIndexBuffer?.dispose()}},ya=class{constructor(t){this.uniformDlights=[];this.gl=t,this.program=Ee.create(t,{vertex:Zl,fragment:Yl},{a_position:0,a_normal:1,a_texCoord:2}),this.uniformMvp=this.program.getUniformLocation("u_modelViewProjection"),this.uniformModelMatrix=this.program.getUniformLocation("u_modelMatrix"),this.uniformLightDir=this.program.getUniformLocation("u_lightDir"),this.uniformAmbient=this.program.getUniformLocation("u_ambient"),this.uniformTint=this.program.getUniformLocation("u_tint"),this.uniformDiffuse=this.program.getUniformLocation("u_diffuseMap"),this.uniformRenderMode=this.program.getUniformLocation("u_renderMode"),this.uniformSolidColor=this.program.getUniformLocation("u_solidColor"),this.uniformNumDlights=this.program.getUniformLocation("u_numDlights");for(let r=0;r<sr;r++)this.uniformDlights.push({pos:this.program.getUniformLocation(`u_dlights[${r}].position`),color:this.program.getUniformLocation(`u_dlights[${r}].color`),intensity:this.program.getUniformLocation(`u_dlights[${r}].intensity`)})}bind(t){let{modelViewProjection:r,modelMatrix:n,lightDirection:i=[0,0,1],ambientLight:s=.2,tint:o=[1,1,1,1],diffuseSampler:a=0,dlights:c=[],renderMode:l}=t,d=new Float32Array(i),f=new Float32Array(o);this.program.use(),this.gl.uniformMatrix4fv(this.uniformMvp,!1,r),n?this.gl.uniformMatrix4fv(this.uniformModelMatrix,!1,n):this.gl.uniformMatrix4fv(this.uniformModelMatrix,!1,new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1])),this.gl.uniform3fv(this.uniformLightDir,d),this.gl.uniform1f(this.uniformAmbient,s),this.gl.uniform4fv(this.uniformTint,f),this.gl.uniform1i(this.uniformDiffuse,a);let u=0,h=[1,1,1,1];l&&(l.mode==="solid"||l.mode==="wireframe"?u=1:l.mode==="solid-faceted"&&(u=2),l.color?h=[...l.color]:l.generateRandomColor),this.gl.uniform1i(this.uniformRenderMode,u),this.gl.uniform4f(this.uniformSolidColor,h[0],h[1],h[2],h[3]);let m=Math.min(c.length,sr);this.gl.uniform1i(this.uniformNumDlights,m);for(let g=0;g<m;g++){let p=c[g];this.gl.uniform3f(this.uniformDlights[g].pos,p.origin.x,p.origin.y,p.origin.z),this.gl.uniform3f(this.uniformDlights[g].color,p.color.x,p.color.y,p.color.z),this.gl.uniform1f(this.uniformDlights[g].intensity,p.intensity)}}draw(t,r){if(t.vertexArray.bind(),r&&r.mode==="wireframe"){if(!t.wireframeIndexBuffer){t.wireframeIndexBuffer=new xe(this.gl,this.gl.STATIC_DRAW);let n=An(t.geometry.indices);t.wireframeIndexBuffer.upload(n),t.wireframeIndexCount=n.length}t.wireframeIndexBuffer.bind(),this.gl.drawElements(this.gl.LINES,t.wireframeIndexCount,this.gl.UNSIGNED_SHORT,0)}else t.indexBuffer.bind(),this.gl.drawElements(this.gl.TRIANGLES,t.indexCount,this.gl.UNSIGNED_SHORT,0)}dispose(){this.program.dispose()}};var ee=1e-6,qe=typeof Float32Array<"u"?Float32Array:Array,Ql=Math.random;function xa(e){return e>=0?Math.round(e):e%.5===0?Math.floor(e):Math.round(e)}var Lw=Math.PI/180,Tw=180/Math.PI;var ce={};Ga(ce,{add:()=>$p,adjoint:()=>gp,clone:()=>dp,copy:()=>up,create:()=>cp,decompose:()=>Fp,determinant:()=>yp,equals:()=>jp,exactEquals:()=>qp,frob:()=>Kp,fromQuat:()=>Dp,fromQuat2:()=>Cp,fromRotation:()=>Ep,fromRotationTranslation:()=>Iu,fromRotationTranslationScale:()=>Pp,fromRotationTranslationScaleOrigin:()=>zp,fromScaling:()=>Mp,fromTranslation:()=>Ap,fromValues:()=>fp,fromXRotation:()=>Lp,fromYRotation:()=>Tp,fromZRotation:()=>Ip,frustum:()=>Bp,getRotation:()=>kp,getScaling:()=>Cu,getTranslation:()=>Rp,identity:()=>Lu,invert:()=>pp,lookAt:()=>Gp,mul:()=>Qp,multiply:()=>Tu,multiplyScalar:()=>Zp,multiplyScalarAndAdd:()=>Yp,ortho:()=>Hp,orthoNO:()=>ku,orthoZO:()=>Vp,perspective:()=>Op,perspectiveFromFieldOfView:()=>Up,perspectiveNO:()=>Ru,perspectiveZO:()=>Np,rotate:()=>_p,rotateX:()=>vp,rotateY:()=>Sp,rotateZ:()=>wp,scale:()=>bp,set:()=>hp,str:()=>Xp,sub:()=>Jp,subtract:()=>Fu,targetTo:()=>Wp,translate:()=>xp,transpose:()=>mp});function cp(){var e=new qe(16);return qe!=Float32Array&&(e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0),e[0]=1,e[5]=1,e[10]=1,e[15]=1,e}function dp(e){var t=new qe(16);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 up(e,t){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 fp(e,t,r,n,i,s,o,a,c,l,d,f,u,h,m,g){var p=new qe(16);return p[0]=e,p[1]=t,p[2]=r,p[3]=n,p[4]=i,p[5]=s,p[6]=o,p[7]=a,p[8]=c,p[9]=l,p[10]=d,p[11]=f,p[12]=u,p[13]=h,p[14]=m,p[15]=g,p}function hp(e,t,r,n,i,s,o,a,c,l,d,f,u,h,m,g,p){return e[0]=t,e[1]=r,e[2]=n,e[3]=i,e[4]=s,e[5]=o,e[6]=a,e[7]=c,e[8]=l,e[9]=d,e[10]=f,e[11]=u,e[12]=h,e[13]=m,e[14]=g,e[15]=p,e}function Lu(e){return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function mp(e,t){if(e===t){var r=t[1],n=t[2],i=t[3],s=t[6],o=t[7],a=t[11];e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=r,e[6]=t[9],e[7]=t[13],e[8]=n,e[9]=s,e[11]=t[14],e[12]=i,e[13]=o,e[14]=a}else e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15];return e}function pp(e,t){var r=t[0],n=t[1],i=t[2],s=t[3],o=t[4],a=t[5],c=t[6],l=t[7],d=t[8],f=t[9],u=t[10],h=t[11],m=t[12],g=t[13],p=t[14],y=t[15],_=r*a-n*o,b=r*c-i*o,x=r*l-s*o,v=n*c-i*a,A=n*l-s*a,S=i*l-s*c,M=d*g-f*m,L=d*p-u*m,w=d*y-h*m,T=f*p-u*g,F=f*y-h*g,U=u*y-h*p,C=_*U-b*F+x*T+v*w-A*L+S*M;return C?(C=1/C,e[0]=(a*U-c*F+l*T)*C,e[1]=(i*F-n*U-s*T)*C,e[2]=(g*S-p*A+y*v)*C,e[3]=(u*A-f*S-h*v)*C,e[4]=(c*w-o*U-l*L)*C,e[5]=(r*U-i*w+s*L)*C,e[6]=(p*x-m*S-y*b)*C,e[7]=(d*S-u*x+h*b)*C,e[8]=(o*F-a*w+l*M)*C,e[9]=(n*w-r*F-s*M)*C,e[10]=(m*A-g*x+y*_)*C,e[11]=(f*x-d*A-h*_)*C,e[12]=(a*L-o*T-c*M)*C,e[13]=(r*T-n*L+i*M)*C,e[14]=(g*b-m*v-p*_)*C,e[15]=(d*v-f*b+u*_)*C,e):null}function gp(e,t){var r=t[0],n=t[1],i=t[2],s=t[3],o=t[4],a=t[5],c=t[6],l=t[7],d=t[8],f=t[9],u=t[10],h=t[11],m=t[12],g=t[13],p=t[14],y=t[15],_=r*a-n*o,b=r*c-i*o,x=r*l-s*o,v=n*c-i*a,A=n*l-s*a,S=i*l-s*c,M=d*g-f*m,L=d*p-u*m,w=d*y-h*m,T=f*p-u*g,F=f*y-h*g,U=u*y-h*p;return e[0]=a*U-c*F+l*T,e[1]=i*F-n*U-s*T,e[2]=g*S-p*A+y*v,e[3]=u*A-f*S-h*v,e[4]=c*w-o*U-l*L,e[5]=r*U-i*w+s*L,e[6]=p*x-m*S-y*b,e[7]=d*S-u*x+h*b,e[8]=o*F-a*w+l*M,e[9]=n*w-r*F-s*M,e[10]=m*A-g*x+y*_,e[11]=f*x-d*A-h*_,e[12]=a*L-o*T-c*M,e[13]=r*T-n*L+i*M,e[14]=g*b-m*v-p*_,e[15]=d*v-f*b+u*_,e}function yp(e){var t=e[0],r=e[1],n=e[2],i=e[3],s=e[4],o=e[5],a=e[6],c=e[7],l=e[8],d=e[9],f=e[10],u=e[11],h=e[12],m=e[13],g=e[14],p=e[15],y=t*o-r*s,_=t*a-n*s,b=r*a-n*o,x=l*m-d*h,v=l*g-f*h,A=d*g-f*m,S=t*A-r*v+n*x,M=s*A-o*v+a*x,L=l*b-d*_+f*y,w=h*b-m*_+g*y;return c*S-i*M+p*L-u*w}function Tu(e,t,r){var n=t[0],i=t[1],s=t[2],o=t[3],a=t[4],c=t[5],l=t[6],d=t[7],f=t[8],u=t[9],h=t[10],m=t[11],g=t[12],p=t[13],y=t[14],_=t[15],b=r[0],x=r[1],v=r[2],A=r[3];return e[0]=b*n+x*a+v*f+A*g,e[1]=b*i+x*c+v*u+A*p,e[2]=b*s+x*l+v*h+A*y,e[3]=b*o+x*d+v*m+A*_,b=r[4],x=r[5],v=r[6],A=r[7],e[4]=b*n+x*a+v*f+A*g,e[5]=b*i+x*c+v*u+A*p,e[6]=b*s+x*l+v*h+A*y,e[7]=b*o+x*d+v*m+A*_,b=r[8],x=r[9],v=r[10],A=r[11],e[8]=b*n+x*a+v*f+A*g,e[9]=b*i+x*c+v*u+A*p,e[10]=b*s+x*l+v*h+A*y,e[11]=b*o+x*d+v*m+A*_,b=r[12],x=r[13],v=r[14],A=r[15],e[12]=b*n+x*a+v*f+A*g,e[13]=b*i+x*c+v*u+A*p,e[14]=b*s+x*l+v*h+A*y,e[15]=b*o+x*d+v*m+A*_,e}function xp(e,t,r){var n=r[0],i=r[1],s=r[2],o,a,c,l,d,f,u,h,m,g,p,y;return t===e?(e[12]=t[0]*n+t[4]*i+t[8]*s+t[12],e[13]=t[1]*n+t[5]*i+t[9]*s+t[13],e[14]=t[2]*n+t[6]*i+t[10]*s+t[14],e[15]=t[3]*n+t[7]*i+t[11]*s+t[15]):(o=t[0],a=t[1],c=t[2],l=t[3],d=t[4],f=t[5],u=t[6],h=t[7],m=t[8],g=t[9],p=t[10],y=t[11],e[0]=o,e[1]=a,e[2]=c,e[3]=l,e[4]=d,e[5]=f,e[6]=u,e[7]=h,e[8]=m,e[9]=g,e[10]=p,e[11]=y,e[12]=o*n+d*i+m*s+t[12],e[13]=a*n+f*i+g*s+t[13],e[14]=c*n+u*i+p*s+t[14],e[15]=l*n+h*i+y*s+t[15]),e}function bp(e,t,r){var n=r[0],i=r[1],s=r[2];return e[0]=t[0]*n,e[1]=t[1]*n,e[2]=t[2]*n,e[3]=t[3]*n,e[4]=t[4]*i,e[5]=t[5]*i,e[6]=t[6]*i,e[7]=t[7]*i,e[8]=t[8]*s,e[9]=t[9]*s,e[10]=t[10]*s,e[11]=t[11]*s,e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e}function _p(e,t,r,n){var i=n[0],s=n[1],o=n[2],a=Math.sqrt(i*i+s*s+o*o),c,l,d,f,u,h,m,g,p,y,_,b,x,v,A,S,M,L,w,T,F,U,C,Z;return a<ee?null:(a=1/a,i*=a,s*=a,o*=a,c=Math.sin(r),l=Math.cos(r),d=1-l,f=t[0],u=t[1],h=t[2],m=t[3],g=t[4],p=t[5],y=t[6],_=t[7],b=t[8],x=t[9],v=t[10],A=t[11],S=i*i*d+l,M=s*i*d+o*c,L=o*i*d-s*c,w=i*s*d-o*c,T=s*s*d+l,F=o*s*d+i*c,U=i*o*d+s*c,C=s*o*d-i*c,Z=o*o*d+l,e[0]=f*S+g*M+b*L,e[1]=u*S+p*M+x*L,e[2]=h*S+y*M+v*L,e[3]=m*S+_*M+A*L,e[4]=f*w+g*T+b*F,e[5]=u*w+p*T+x*F,e[6]=h*w+y*T+v*F,e[7]=m*w+_*T+A*F,e[8]=f*U+g*C+b*Z,e[9]=u*U+p*C+x*Z,e[10]=h*U+y*C+v*Z,e[11]=m*U+_*C+A*Z,t!==e&&(e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]),e)}function vp(e,t,r){var n=Math.sin(r),i=Math.cos(r),s=t[4],o=t[5],a=t[6],c=t[7],l=t[8],d=t[9],f=t[10],u=t[11];return t!==e&&(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]),e[4]=s*i+l*n,e[5]=o*i+d*n,e[6]=a*i+f*n,e[7]=c*i+u*n,e[8]=l*i-s*n,e[9]=d*i-o*n,e[10]=f*i-a*n,e[11]=u*i-c*n,e}function Sp(e,t,r){var n=Math.sin(r),i=Math.cos(r),s=t[0],o=t[1],a=t[2],c=t[3],l=t[8],d=t[9],f=t[10],u=t[11];return t!==e&&(e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]),e[0]=s*i-l*n,e[1]=o*i-d*n,e[2]=a*i-f*n,e[3]=c*i-u*n,e[8]=s*n+l*i,e[9]=o*n+d*i,e[10]=a*n+f*i,e[11]=c*n+u*i,e}function wp(e,t,r){var n=Math.sin(r),i=Math.cos(r),s=t[0],o=t[1],a=t[2],c=t[3],l=t[4],d=t[5],f=t[6],u=t[7];return t!==e&&(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[0]=s*i+l*n,e[1]=o*i+d*n,e[2]=a*i+f*n,e[3]=c*i+u*n,e[4]=l*i-s*n,e[5]=d*i-o*n,e[6]=f*i-a*n,e[7]=u*i-c*n,e}function Ap(e,t){return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=t[0],e[13]=t[1],e[14]=t[2],e[15]=1,e}function Mp(e,t){return e[0]=t[0],e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=t[1],e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=t[2],e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function Ep(e,t,r){var n=r[0],i=r[1],s=r[2],o=Math.sqrt(n*n+i*i+s*s),a,c,l;return o<ee?null:(o=1/o,n*=o,i*=o,s*=o,a=Math.sin(t),c=Math.cos(t),l=1-c,e[0]=n*n*l+c,e[1]=i*n*l+s*a,e[2]=s*n*l-i*a,e[3]=0,e[4]=n*i*l-s*a,e[5]=i*i*l+c,e[6]=s*i*l+n*a,e[7]=0,e[8]=n*s*l+i*a,e[9]=i*s*l-n*a,e[10]=s*s*l+c,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e)}function Lp(e,t){var r=Math.sin(t),n=Math.cos(t);return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=n,e[6]=r,e[7]=0,e[8]=0,e[9]=-r,e[10]=n,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function Tp(e,t){var r=Math.sin(t),n=Math.cos(t);return e[0]=n,e[1]=0,e[2]=-r,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=r,e[9]=0,e[10]=n,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function Ip(e,t){var r=Math.sin(t),n=Math.cos(t);return e[0]=n,e[1]=r,e[2]=0,e[3]=0,e[4]=-r,e[5]=n,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function Iu(e,t,r){var n=t[0],i=t[1],s=t[2],o=t[3],a=n+n,c=i+i,l=s+s,d=n*a,f=n*c,u=n*l,h=i*c,m=i*l,g=s*l,p=o*a,y=o*c,_=o*l;return e[0]=1-(h+g),e[1]=f+_,e[2]=u-y,e[3]=0,e[4]=f-_,e[5]=1-(d+g),e[6]=m+p,e[7]=0,e[8]=u+y,e[9]=m-p,e[10]=1-(d+h),e[11]=0,e[12]=r[0],e[13]=r[1],e[14]=r[2],e[15]=1,e}function Cp(e,t){var r=new qe(3),n=-t[0],i=-t[1],s=-t[2],o=t[3],a=t[4],c=t[5],l=t[6],d=t[7],f=n*n+i*i+s*s+o*o;return f>0?(r[0]=(a*o+d*n+c*s-l*i)*2/f,r[1]=(c*o+d*i+l*n-a*s)*2/f,r[2]=(l*o+d*s+a*i-c*n)*2/f):(r[0]=(a*o+d*n+c*s-l*i)*2,r[1]=(c*o+d*i+l*n-a*s)*2,r[2]=(l*o+d*s+a*i-c*n)*2),Iu(e,t,r),e}function Rp(e,t){return e[0]=t[12],e[1]=t[13],e[2]=t[14],e}function Cu(e,t){var r=t[0],n=t[1],i=t[2],s=t[4],o=t[5],a=t[6],c=t[8],l=t[9],d=t[10];return e[0]=Math.sqrt(r*r+n*n+i*i),e[1]=Math.sqrt(s*s+o*o+a*a),e[2]=Math.sqrt(c*c+l*l+d*d),e}function kp(e,t){var r=new qe(3);Cu(r,t);var n=1/r[0],i=1/r[1],s=1/r[2],o=t[0]*n,a=t[1]*i,c=t[2]*s,l=t[4]*n,d=t[5]*i,f=t[6]*s,u=t[8]*n,h=t[9]*i,m=t[10]*s,g=o+d+m,p=0;return g>0?(p=Math.sqrt(g+1)*2,e[3]=.25*p,e[0]=(f-h)/p,e[1]=(u-c)/p,e[2]=(a-l)/p):o>d&&o>m?(p=Math.sqrt(1+o-d-m)*2,e[3]=(f-h)/p,e[0]=.25*p,e[1]=(a+l)/p,e[2]=(u+c)/p):d>m?(p=Math.sqrt(1+d-o-m)*2,e[3]=(u-c)/p,e[0]=(a+l)/p,e[1]=.25*p,e[2]=(f+h)/p):(p=Math.sqrt(1+m-o-d)*2,e[3]=(a-l)/p,e[0]=(u+c)/p,e[1]=(f+h)/p,e[2]=.25*p),e}function Fp(e,t,r,n){t[0]=n[12],t[1]=n[13],t[2]=n[14];var i=n[0],s=n[1],o=n[2],a=n[4],c=n[5],l=n[6],d=n[8],f=n[9],u=n[10];r[0]=Math.sqrt(i*i+s*s+o*o),r[1]=Math.sqrt(a*a+c*c+l*l),r[2]=Math.sqrt(d*d+f*f+u*u);var h=1/r[0],m=1/r[1],g=1/r[2],p=i*h,y=s*m,_=o*g,b=a*h,x=c*m,v=l*g,A=d*h,S=f*m,M=u*g,L=p+x+M,w=0;return L>0?(w=Math.sqrt(L+1)*2,e[3]=.25*w,e[0]=(v-S)/w,e[1]=(A-_)/w,e[2]=(y-b)/w):p>x&&p>M?(w=Math.sqrt(1+p-x-M)*2,e[3]=(v-S)/w,e[0]=.25*w,e[1]=(y+b)/w,e[2]=(A+_)/w):x>M?(w=Math.sqrt(1+x-p-M)*2,e[3]=(A-_)/w,e[0]=(y+b)/w,e[1]=.25*w,e[2]=(v+S)/w):(w=Math.sqrt(1+M-p-x)*2,e[3]=(y-b)/w,e[0]=(A+_)/w,e[1]=(v+S)/w,e[2]=.25*w),e}function Pp(e,t,r,n){var i=t[0],s=t[1],o=t[2],a=t[3],c=i+i,l=s+s,d=o+o,f=i*c,u=i*l,h=i*d,m=s*l,g=s*d,p=o*d,y=a*c,_=a*l,b=a*d,x=n[0],v=n[1],A=n[2];return e[0]=(1-(m+p))*x,e[1]=(u+b)*x,e[2]=(h-_)*x,e[3]=0,e[4]=(u-b)*v,e[5]=(1-(f+p))*v,e[6]=(g+y)*v,e[7]=0,e[8]=(h+_)*A,e[9]=(g-y)*A,e[10]=(1-(f+m))*A,e[11]=0,e[12]=r[0],e[13]=r[1],e[14]=r[2],e[15]=1,e}function zp(e,t,r,n,i){var s=t[0],o=t[1],a=t[2],c=t[3],l=s+s,d=o+o,f=a+a,u=s*l,h=s*d,m=s*f,g=o*d,p=o*f,y=a*f,_=c*l,b=c*d,x=c*f,v=n[0],A=n[1],S=n[2],M=i[0],L=i[1],w=i[2],T=(1-(g+y))*v,F=(h+x)*v,U=(m-b)*v,C=(h-x)*A,Z=(1-(u+y))*A,Ie=(p+_)*A,ur=(m+b)*S,Ys=(p-_)*S,Wn=(1-(u+g))*S;return e[0]=T,e[1]=F,e[2]=U,e[3]=0,e[4]=C,e[5]=Z,e[6]=Ie,e[7]=0,e[8]=ur,e[9]=Ys,e[10]=Wn,e[11]=0,e[12]=r[0]+M-(T*M+C*L+ur*w),e[13]=r[1]+L-(F*M+Z*L+Ys*w),e[14]=r[2]+w-(U*M+Ie*L+Wn*w),e[15]=1,e}function Dp(e,t){var r=t[0],n=t[1],i=t[2],s=t[3],o=r+r,a=n+n,c=i+i,l=r*o,d=n*o,f=n*a,u=i*o,h=i*a,m=i*c,g=s*o,p=s*a,y=s*c;return e[0]=1-f-m,e[1]=d+y,e[2]=u-p,e[3]=0,e[4]=d-y,e[5]=1-l-m,e[6]=h+g,e[7]=0,e[8]=u+p,e[9]=h-g,e[10]=1-l-f,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function Bp(e,t,r,n,i,s,o){var a=1/(r-t),c=1/(i-n),l=1/(s-o);return e[0]=s*2*a,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=s*2*c,e[6]=0,e[7]=0,e[8]=(r+t)*a,e[9]=(i+n)*c,e[10]=(o+s)*l,e[11]=-1,e[12]=0,e[13]=0,e[14]=o*s*2*l,e[15]=0,e}function Ru(e,t,r,n,i){var s=1/Math.tan(t/2);if(e[0]=s/r,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=s,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[11]=-1,e[12]=0,e[13]=0,e[15]=0,i!=null&&i!==1/0){var o=1/(n-i);e[10]=(i+n)*o,e[14]=2*i*n*o}else e[10]=-1,e[14]=-2*n;return e}var Op=Ru;function Np(e,t,r,n,i){var s=1/Math.tan(t/2);if(e[0]=s/r,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=s,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[11]=-1,e[12]=0,e[13]=0,e[15]=0,i!=null&&i!==1/0){var o=1/(n-i);e[10]=i*o,e[14]=i*n*o}else e[10]=-1,e[14]=-n;return e}function Up(e,t,r,n){var i=Math.tan(t.upDegrees*Math.PI/180),s=Math.tan(t.downDegrees*Math.PI/180),o=Math.tan(t.leftDegrees*Math.PI/180),a=Math.tan(t.rightDegrees*Math.PI/180),c=2/(o+a),l=2/(i+s);return e[0]=c,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=l,e[6]=0,e[7]=0,e[8]=-((o-a)*c*.5),e[9]=(i-s)*l*.5,e[10]=n/(r-n),e[11]=-1,e[12]=0,e[13]=0,e[14]=n*r/(r-n),e[15]=0,e}function ku(e,t,r,n,i,s,o){var a=1/(t-r),c=1/(n-i),l=1/(s-o);return e[0]=-2*a,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=-2*c,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=2*l,e[11]=0,e[12]=(t+r)*a,e[13]=(i+n)*c,e[14]=(o+s)*l,e[15]=1,e}var Hp=ku;function Vp(e,t,r,n,i,s,o){var a=1/(t-r),c=1/(n-i),l=1/(s-o);return e[0]=-2*a,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=-2*c,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=l,e[11]=0,e[12]=(t+r)*a,e[13]=(i+n)*c,e[14]=s*l,e[15]=1,e}function Gp(e,t,r,n){var i,s,o,a,c,l,d,f,u,h,m=t[0],g=t[1],p=t[2],y=n[0],_=n[1],b=n[2],x=r[0],v=r[1],A=r[2];return Math.abs(m-x)<ee&&Math.abs(g-v)<ee&&Math.abs(p-A)<ee?Lu(e):(d=m-x,f=g-v,u=p-A,h=1/Math.sqrt(d*d+f*f+u*u),d*=h,f*=h,u*=h,i=_*u-b*f,s=b*d-y*u,o=y*f-_*d,h=Math.sqrt(i*i+s*s+o*o),h?(h=1/h,i*=h,s*=h,o*=h):(i=0,s=0,o=0),a=f*o-u*s,c=u*i-d*o,l=d*s-f*i,h=Math.sqrt(a*a+c*c+l*l),h?(h=1/h,a*=h,c*=h,l*=h):(a=0,c=0,l=0),e[0]=i,e[1]=a,e[2]=d,e[3]=0,e[4]=s,e[5]=c,e[6]=f,e[7]=0,e[8]=o,e[9]=l,e[10]=u,e[11]=0,e[12]=-(i*m+s*g+o*p),e[13]=-(a*m+c*g+l*p),e[14]=-(d*m+f*g+u*p),e[15]=1,e)}function Wp(e,t,r,n){var i=t[0],s=t[1],o=t[2],a=n[0],c=n[1],l=n[2],d=i-r[0],f=s-r[1],u=o-r[2],h=d*d+f*f+u*u;h>0&&(h=1/Math.sqrt(h),d*=h,f*=h,u*=h);var m=c*u-l*f,g=l*d-a*u,p=a*f-c*d;return h=m*m+g*g+p*p,h>0&&(h=1/Math.sqrt(h),m*=h,g*=h,p*=h),e[0]=m,e[1]=g,e[2]=p,e[3]=0,e[4]=f*p-u*g,e[5]=u*m-d*p,e[6]=d*g-f*m,e[7]=0,e[8]=d,e[9]=f,e[10]=u,e[11]=0,e[12]=i,e[13]=s,e[14]=o,e[15]=1,e}function Xp(e){return"mat4("+e[0]+", "+e[1]+", "+e[2]+", "+e[3]+", "+e[4]+", "+e[5]+", "+e[6]+", "+e[7]+", "+e[8]+", "+e[9]+", "+e[10]+", "+e[11]+", "+e[12]+", "+e[13]+", "+e[14]+", "+e[15]+")"}function Kp(e){return Math.sqrt(e[0]*e[0]+e[1]*e[1]+e[2]*e[2]+e[3]*e[3]+e[4]*e[4]+e[5]*e[5]+e[6]*e[6]+e[7]*e[7]+e[8]*e[8]+e[9]*e[9]+e[10]*e[10]+e[11]*e[11]+e[12]*e[12]+e[13]*e[13]+e[14]*e[14]+e[15]*e[15])}function $p(e,t,r){return e[0]=t[0]+r[0],e[1]=t[1]+r[1],e[2]=t[2]+r[2],e[3]=t[3]+r[3],e[4]=t[4]+r[4],e[5]=t[5]+r[5],e[6]=t[6]+r[6],e[7]=t[7]+r[7],e[8]=t[8]+r[8],e[9]=t[9]+r[9],e[10]=t[10]+r[10],e[11]=t[11]+r[11],e[12]=t[12]+r[12],e[13]=t[13]+r[13],e[14]=t[14]+r[14],e[15]=t[15]+r[15],e}function Fu(e,t,r){return e[0]=t[0]-r[0],e[1]=t[1]-r[1],e[2]=t[2]-r[2],e[3]=t[3]-r[3],e[4]=t[4]-r[4],e[5]=t[5]-r[5],e[6]=t[6]-r[6],e[7]=t[7]-r[7],e[8]=t[8]-r[8],e[9]=t[9]-r[9],e[10]=t[10]-r[10],e[11]=t[11]-r[11],e[12]=t[12]-r[12],e[13]=t[13]-r[13],e[14]=t[14]-r[14],e[15]=t[15]-r[15],e}function Zp(e,t,r){return e[0]=t[0]*r,e[1]=t[1]*r,e[2]=t[2]*r,e[3]=t[3]*r,e[4]=t[4]*r,e[5]=t[5]*r,e[6]=t[6]*r,e[7]=t[7]*r,e[8]=t[8]*r,e[9]=t[9]*r,e[10]=t[10]*r,e[11]=t[11]*r,e[12]=t[12]*r,e[13]=t[13]*r,e[14]=t[14]*r,e[15]=t[15]*r,e}function Yp(e,t,r,n){return e[0]=t[0]+r[0]*n,e[1]=t[1]+r[1]*n,e[2]=t[2]+r[2]*n,e[3]=t[3]+r[3]*n,e[4]=t[4]+r[4]*n,e[5]=t[5]+r[5]*n,e[6]=t[6]+r[6]*n,e[7]=t[7]+r[7]*n,e[8]=t[8]+r[8]*n,e[9]=t[9]+r[9]*n,e[10]=t[10]+r[10]*n,e[11]=t[11]+r[11]*n,e[12]=t[12]+r[12]*n,e[13]=t[13]+r[13]*n,e[14]=t[14]+r[14]*n,e[15]=t[15]+r[15]*n,e}function qp(e,t){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]}function jp(e,t){var r=e[0],n=e[1],i=e[2],s=e[3],o=e[4],a=e[5],c=e[6],l=e[7],d=e[8],f=e[9],u=e[10],h=e[11],m=e[12],g=e[13],p=e[14],y=e[15],_=t[0],b=t[1],x=t[2],v=t[3],A=t[4],S=t[5],M=t[6],L=t[7],w=t[8],T=t[9],F=t[10],U=t[11],C=t[12],Z=t[13],Ie=t[14],ur=t[15];return Math.abs(r-_)<=ee*Math.max(1,Math.abs(r),Math.abs(_))&&Math.abs(n-b)<=ee*Math.max(1,Math.abs(n),Math.abs(b))&&Math.abs(i-x)<=ee*Math.max(1,Math.abs(i),Math.abs(x))&&Math.abs(s-v)<=ee*Math.max(1,Math.abs(s),Math.abs(v))&&Math.abs(o-A)<=ee*Math.max(1,Math.abs(o),Math.abs(A))&&Math.abs(a-S)<=ee*Math.max(1,Math.abs(a),Math.abs(S))&&Math.abs(c-M)<=ee*Math.max(1,Math.abs(c),Math.abs(M))&&Math.abs(l-L)<=ee*Math.max(1,Math.abs(l),Math.abs(L))&&Math.abs(d-w)<=ee*Math.max(1,Math.abs(d),Math.abs(w))&&Math.abs(f-T)<=ee*Math.max(1,Math.abs(f),Math.abs(T))&&Math.abs(u-F)<=ee*Math.max(1,Math.abs(u),Math.abs(F))&&Math.abs(h-U)<=ee*Math.max(1,Math.abs(h),Math.abs(U))&&Math.abs(m-C)<=ee*Math.max(1,Math.abs(m),Math.abs(C))&&Math.abs(g-Z)<=ee*Math.max(1,Math.abs(g),Math.abs(Z))&&Math.abs(p-Ie)<=ee*Math.max(1,Math.abs(p),Math.abs(Ie))&&Math.abs(y-ur)<=ee*Math.max(1,Math.abs(y),Math.abs(ur))}var Qp=Tu,Jp=Fu;var z={};Ga(z,{add:()=>i1,angle:()=>L1,bezier:()=>b1,ceil:()=>s1,clone:()=>e1,copy:()=>r1,create:()=>Pu,cross:()=>p1,dist:()=>z1,distance:()=>Nu,div:()=>P1,divide:()=>Ou,dot:()=>Jl,equals:()=>R1,exactEquals:()=>C1,floor:()=>o1,forEach:()=>N1,fromValues:()=>t1,hermite:()=>x1,inverse:()=>h1,len:()=>B1,length:()=>zu,lerp:()=>g1,max:()=>l1,min:()=>a1,mul:()=>F1,multiply:()=>Bu,negate:()=>f1,normalize:()=>m1,random:()=>_1,rotateX:()=>A1,rotateY:()=>M1,rotateZ:()=>E1,round:()=>c1,scale:()=>d1,scaleAndAdd:()=>u1,set:()=>n1,slerp:()=>y1,sqrDist:()=>D1,sqrLen:()=>O1,squaredDistance:()=>Uu,squaredLength:()=>Hu,str:()=>I1,sub:()=>k1,subtract:()=>Du,transformMat3:()=>S1,transformMat4:()=>v1,transformQuat:()=>w1,zero:()=>T1});function Pu(){var e=new qe(3);return qe!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0),e}function e1(e){var t=new qe(3);return t[0]=e[0],t[1]=e[1],t[2]=e[2],t}function zu(e){var t=e[0],r=e[1],n=e[2];return Math.sqrt(t*t+r*r+n*n)}function t1(e,t,r){var n=new qe(3);return n[0]=e,n[1]=t,n[2]=r,n}function r1(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e}function n1(e,t,r,n){return e[0]=t,e[1]=r,e[2]=n,e}function i1(e,t,r){return e[0]=t[0]+r[0],e[1]=t[1]+r[1],e[2]=t[2]+r[2],e}function Du(e,t,r){return e[0]=t[0]-r[0],e[1]=t[1]-r[1],e[2]=t[2]-r[2],e}function Bu(e,t,r){return e[0]=t[0]*r[0],e[1]=t[1]*r[1],e[2]=t[2]*r[2],e}function Ou(e,t,r){return e[0]=t[0]/r[0],e[1]=t[1]/r[1],e[2]=t[2]/r[2],e}function s1(e,t){return e[0]=Math.ceil(t[0]),e[1]=Math.ceil(t[1]),e[2]=Math.ceil(t[2]),e}function o1(e,t){return e[0]=Math.floor(t[0]),e[1]=Math.floor(t[1]),e[2]=Math.floor(t[2]),e}function a1(e,t,r){return e[0]=Math.min(t[0],r[0]),e[1]=Math.min(t[1],r[1]),e[2]=Math.min(t[2],r[2]),e}function l1(e,t,r){return e[0]=Math.max(t[0],r[0]),e[1]=Math.max(t[1],r[1]),e[2]=Math.max(t[2],r[2]),e}function c1(e,t){return e[0]=xa(t[0]),e[1]=xa(t[1]),e[2]=xa(t[2]),e}function d1(e,t,r){return e[0]=t[0]*r,e[1]=t[1]*r,e[2]=t[2]*r,e}function u1(e,t,r,n){return e[0]=t[0]+r[0]*n,e[1]=t[1]+r[1]*n,e[2]=t[2]+r[2]*n,e}function Nu(e,t){var r=t[0]-e[0],n=t[1]-e[1],i=t[2]-e[2];return Math.sqrt(r*r+n*n+i*i)}function Uu(e,t){var r=t[0]-e[0],n=t[1]-e[1],i=t[2]-e[2];return r*r+n*n+i*i}function Hu(e){var t=e[0],r=e[1],n=e[2];return t*t+r*r+n*n}function f1(e,t){return e[0]=-t[0],e[1]=-t[1],e[2]=-t[2],e}function h1(e,t){return e[0]=1/t[0],e[1]=1/t[1],e[2]=1/t[2],e}function m1(e,t){var r=t[0],n=t[1],i=t[2],s=r*r+n*n+i*i;return s>0&&(s=1/Math.sqrt(s)),e[0]=t[0]*s,e[1]=t[1]*s,e[2]=t[2]*s,e}function Jl(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function p1(e,t,r){var n=t[0],i=t[1],s=t[2],o=r[0],a=r[1],c=r[2];return e[0]=i*c-s*a,e[1]=s*o-n*c,e[2]=n*a-i*o,e}function g1(e,t,r,n){var i=t[0],s=t[1],o=t[2];return e[0]=i+n*(r[0]-i),e[1]=s+n*(r[1]-s),e[2]=o+n*(r[2]-o),e}function y1(e,t,r,n){var i=Math.acos(Math.min(Math.max(Jl(t,r),-1),1)),s=Math.sin(i),o=Math.sin((1-n)*i)/s,a=Math.sin(n*i)/s;return e[0]=o*t[0]+a*r[0],e[1]=o*t[1]+a*r[1],e[2]=o*t[2]+a*r[2],e}function x1(e,t,r,n,i,s){var o=s*s,a=o*(2*s-3)+1,c=o*(s-2)+s,l=o*(s-1),d=o*(3-2*s);return e[0]=t[0]*a+r[0]*c+n[0]*l+i[0]*d,e[1]=t[1]*a+r[1]*c+n[1]*l+i[1]*d,e[2]=t[2]*a+r[2]*c+n[2]*l+i[2]*d,e}function b1(e,t,r,n,i,s){var o=1-s,a=o*o,c=s*s,l=a*o,d=3*s*a,f=3*c*o,u=c*s;return e[0]=t[0]*l+r[0]*d+n[0]*f+i[0]*u,e[1]=t[1]*l+r[1]*d+n[1]*f+i[1]*u,e[2]=t[2]*l+r[2]*d+n[2]*f+i[2]*u,e}function _1(e,t){t=t===void 0?1:t;var r=Ql()*2*Math.PI,n=Ql()*2-1,i=Math.sqrt(1-n*n)*t;return e[0]=Math.cos(r)*i,e[1]=Math.sin(r)*i,e[2]=n*t,e}function v1(e,t,r){var n=t[0],i=t[1],s=t[2],o=r[3]*n+r[7]*i+r[11]*s+r[15];return o=o||1,e[0]=(r[0]*n+r[4]*i+r[8]*s+r[12])/o,e[1]=(r[1]*n+r[5]*i+r[9]*s+r[13])/o,e[2]=(r[2]*n+r[6]*i+r[10]*s+r[14])/o,e}function S1(e,t,r){var n=t[0],i=t[1],s=t[2];return e[0]=n*r[0]+i*r[3]+s*r[6],e[1]=n*r[1]+i*r[4]+s*r[7],e[2]=n*r[2]+i*r[5]+s*r[8],e}function w1(e,t,r){var n=r[0],i=r[1],s=r[2],o=r[3],a=t[0],c=t[1],l=t[2],d=i*l-s*c,f=s*a-n*l,u=n*c-i*a;return d=d+d,f=f+f,u=u+u,e[0]=a+o*d+i*u-s*f,e[1]=c+o*f+s*d-n*u,e[2]=l+o*u+n*f-i*d,e}function A1(e,t,r,n){var i=[],s=[];return i[0]=t[0]-r[0],i[1]=t[1]-r[1],i[2]=t[2]-r[2],s[0]=i[0],s[1]=i[1]*Math.cos(n)-i[2]*Math.sin(n),s[2]=i[1]*Math.sin(n)+i[2]*Math.cos(n),e[0]=s[0]+r[0],e[1]=s[1]+r[1],e[2]=s[2]+r[2],e}function M1(e,t,r,n){var i=[],s=[];return i[0]=t[0]-r[0],i[1]=t[1]-r[1],i[2]=t[2]-r[2],s[0]=i[2]*Math.sin(n)+i[0]*Math.cos(n),s[1]=i[1],s[2]=i[2]*Math.cos(n)-i[0]*Math.sin(n),e[0]=s[0]+r[0],e[1]=s[1]+r[1],e[2]=s[2]+r[2],e}function E1(e,t,r,n){var i=[],s=[];return i[0]=t[0]-r[0],i[1]=t[1]-r[1],i[2]=t[2]-r[2],s[0]=i[0]*Math.cos(n)-i[1]*Math.sin(n),s[1]=i[0]*Math.sin(n)+i[1]*Math.cos(n),s[2]=i[2],e[0]=s[0]+r[0],e[1]=s[1]+r[1],e[2]=s[2]+r[2],e}function L1(e,t){var r=e[0],n=e[1],i=e[2],s=t[0],o=t[1],a=t[2],c=Math.sqrt((r*r+n*n+i*i)*(s*s+o*o+a*a)),l=c&&Jl(e,t)/c;return Math.acos(Math.min(Math.max(l,-1),1))}function T1(e){return e[0]=0,e[1]=0,e[2]=0,e}function I1(e){return"vec3("+e[0]+", "+e[1]+", "+e[2]+")"}function C1(e,t){return e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]}function R1(e,t){var r=e[0],n=e[1],i=e[2],s=t[0],o=t[1],a=t[2];return Math.abs(r-s)<=ee*Math.max(1,Math.abs(r),Math.abs(s))&&Math.abs(n-o)<=ee*Math.max(1,Math.abs(n),Math.abs(o))&&Math.abs(i-a)<=ee*Math.max(1,Math.abs(i),Math.abs(a))}var k1=Du,F1=Bu,P1=Ou,z1=Nu,D1=Uu,B1=zu,O1=Hu,N1=(function(){var e=Pu();return function(t,r,n,i,s,o){var a,c;for(r||(r=3),n||(n=0),i?c=Math.min(i*r+n,t.length):c=t.length,a=n;a<c;a+=r)e[0]=t[a],e[1]=t[a+1],e[2]=t[a+2],s(e,e,o),t[a]=e[0],t[a+1]=e[1],t[a+2]=e[2];return t}})();var ba=class{constructor(){this._position=z.create();this._angles=z.create();this._bobAngles=z.create();this._bobOffset=z.create();this._kickAngles=z.create();this._rollAngle=0;this._fov=90;this._aspect=1;this._near=.1;this._far=1e3;this._viewMatrix=ce.create();this._projectionMatrix=ce.create();this._viewProjectionMatrix=ce.create();this._dirty=!0}get position(){return this._position}set position(t){z.equals(this._position,t)||(z.copy(this._position,t),this._dirty=!0,this.triggerMoveEvent())}get angles(){return this._angles}set angles(t){z.equals(this._angles,t)||(z.copy(this._angles,t),this._dirty=!0,this.triggerMoveEvent())}get bobAngles(){return this._bobAngles}set bobAngles(t){z.copy(this._bobAngles,t),this._dirty=!0}get kickAngles(){return this._kickAngles}set kickAngles(t){z.copy(this._kickAngles,t),this._dirty=!0}get bobOffset(){return this._bobOffset}set bobOffset(t){z.copy(this._bobOffset,t),this._dirty=!0}get rollAngle(){return this._rollAngle}set rollAngle(t){this._rollAngle=t,this._dirty=!0}get fov(){return this._fov}set fov(t){this._fov=t,this._dirty=!0}get aspect(){return this._aspect}set aspect(t){this._aspect=t,this._dirty=!0}setPosition(t,r,n){let i=z.fromValues(t,r,n);z.equals(this._position,i)||(z.copy(this._position,i),this._dirty=!0,this.triggerMoveEvent())}setRotation(t,r,n){let i=z.fromValues(t,r,n);z.equals(this._angles,i)||(z.copy(this._angles,i),this._dirty=!0,this.triggerMoveEvent())}setFov(t){this.fov=t}setAspectRatio(t){this.aspect=t}lookAt(t){let r=z.create();if(z.subtract(r,t,this._position),z.length(r)<.001)return;let i=Math.atan2(r[1],r[0])*Ka,s=Math.hypot(r[0],r[1]),o=-Math.atan2(r[2],s)*Ka;this.setRotation(o,i,0)}triggerMoveEvent(){this.onCameraMove&&this.onCameraMove({position:z.clone(this._position),angles:z.clone(this._angles)})}get viewMatrix(){return this.updateMatrices(),this._viewMatrix}get projectionMatrix(){return this.updateMatrices(),this._projectionMatrix}get viewProjectionMatrix(){return this.updateMatrices(),this._viewProjectionMatrix}getViewmodelProjectionMatrix(t){let r=ce.create();return ce.perspective(r,t*Wr,this._aspect,this._near,this._far),r}screenToWorldRay(t,r){let n=t*2-1,i=1-r*2,s=z.fromValues(n,i,-1),o=z.fromValues(n,i,1),a=ce.create();ce.invert(a,this.viewProjectionMatrix);let c=z.create(),l=z.create();z.transformMat4(c,s,a),z.transformMat4(l,o,a);let d=z.create();return z.subtract(d,l,c),z.normalize(d,d),{origin:z.clone(this._position),direction:d}}updateMatrices(){if(!this._dirty)return;ce.perspective(this._projectionMatrix,this._fov*Wr,this._aspect,this._near,this._far);let t=ce.fromValues(0,0,-1,0,-1,0,0,0,0,1,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],i=this._angles[2]+this._bobAngles[2]+this._kickAngles[2]+this._rollAngle,s=r*Wr,o=n*Wr,a=i*Wr,c=ce.create();ce.identity(c),ce.rotateZ(c,c,-o),ce.rotateY(c,c,-s),ce.rotateX(c,c,-a);let l=ce.create();ce.multiply(l,t,c);let d=z.add(z.create(),this._position,this._bobOffset),f=z.negate(z.create(),d),u=z.create();z.transformMat4(u,f,c);let h=z.fromValues(u[1]?-u[1]:0,u[2]||0,u[0]?-u[0]:0);ce.copy(this._viewMatrix,l),this._viewMatrix[12]=h[0],this._viewMatrix[13]=h[1],this._viewMatrix[14]=h[2],ce.multiply(this._viewProjectionMatrix,this._projectionMatrix,this._viewMatrix),this._dirty=!1}};var U1=[.2,.2,.2],H1={x:0,y:0,z:1},V1=[.8,.8,.8];function ec(e,t,r){return e+(t-e)*r}function En(e,t,r){return{x:ec(e.x,t.x,r),y:ec(e.y,t.y,r),z:ec(e.z,t.z,r)}}function Mn(e){return e<0?0:e>1?1:e}function tc(e){let t=[],r=[];for(let n of e.triangles){let i=t.length,[s,o,a]=n.indices,c=e.texCoords[s],l=e.texCoords[o],d=e.texCoords[a];if(!c||!l||!d)throw new Error(`Missing texCoord for triangle in surface ${e.name}`);t.push({vertexIndex:s,texCoord:[c.s,1-c.t]},{vertexIndex:o,texCoord:[l.s,1-l.t]},{vertexIndex:a,texCoord:[d.s,1-d.t]}),r.push(i,i+1,i+2)}return{vertices:t,indices:new Uint16Array(r)}}function G1(e,t,r){let n=r?.ambient??U1,i=r?.directional??{direction:H1,color:V1},s=et(e),o=et(i.direction),a=Mn(s.x*o.x+s.y*o.y+s.z*o.z),c=n[0]+i.color[0]*a,l=n[1]+i.color[1]*a,d=n[2]+i.color[2]*a;if(r?.dynamicLights){let f=r.modelMatrix?ed(r.modelMatrix,t):t;for(let u of r.dynamicLights){let h=f.x-u.origin.x,m=f.y-u.origin.y,g=f.z-u.origin.z,p=h*h+m*m+g*g,y=u.radius*u.radius;if(p<y&&y>0){let _=1-Math.sqrt(p)/u.radius,b=Math.sqrt(p),x=b>0?Mn(-(h*s.x+m*s.y+g*s.z)/b):0,v=Mn(_*x);c+=u.color[0]*v,l+=u.color[1]*v,d+=u.color[2]*v}}}return[Mn(c),Mn(l),Mn(d)]}function rc(e,t,r,n){let i=e.vertices[r.frame0],s=e.vertices[r.frame1];if(!i||!s)throw new Error("Requested MD3 frames are out of range");let o=new Float32Array(t.vertices.length*12);return t.vertices.forEach((a,c)=>{let l=i[a.vertexIndex],d=s[a.vertexIndex];if(!l||!d)throw new Error(`Vertex index ${a.vertexIndex} missing for frame`);let f=En(l.position,d.position,r.lerp),u=et(En(l.normal,d.normal,r.lerp)),h=G1(u,f,n),m=c*12;o[m]=f.x,o[m+1]=f.y,o[m+2]=f.z,o[m+3]=u.x,o[m+4]=u.y,o[m+5]=u.z,o[m+6]=a.texCoord[0],o[m+7]=a.texCoord[1],o[m+8]=h[0],o[m+9]=h[1],o[m+10]=h[2],o[m+11]=1}),o}function Vu(e,t,r){let n=e.tags[0];if(!n)return null;let i=n.findIndex(g=>g.name===r);if(i===-1)return null;let s=e.tags[t.frame0]?.[i],o=e.tags[t.frame1]?.[i];if(!s||!o)throw new Error(`Tag ${r} is missing for one of the interpolated frames`);let a=En(s.origin,o.origin,t.lerp),c=et(En(s.axis[0],o.axis[0],t.lerp)),l=et(En(s.axis[1],o.axis[1],t.lerp)),d=et(En(s.axis[2],o.axis[2],t.lerp)),f=c,u=et({x:l.x-f.x*(f.x*l.x+f.y*l.y+f.z*l.z),y:l.y-f.y*(f.x*l.x+f.y*l.y+f.z*l.z),z:l.z-f.z*(f.x*l.x+f.y*l.y+f.z*l.z)}),h=et({x:f.y*u.z-f.z*u.y,y:f.z*u.x-f.x*u.z,z:f.x*u.y-f.y*u.x}),m=[f,u,h];return{origin:a,axis:m,matrix:td(a,m)}}var nc=`#version 300 es
|
|
407
407
|
precision highp float;
|
|
408
408
|
|
|
409
409
|
layout(location = 0) in vec3 a_position;
|
|
@@ -422,7 +422,7 @@ void main() {
|
|
|
422
422
|
v_color = a_color;
|
|
423
423
|
v_position = a_position; // Model space, assuming single mesh pass
|
|
424
424
|
gl_Position = u_modelViewProjection * vec4(a_position, 1.0);
|
|
425
|
-
}`,
|
|
425
|
+
}`,ic=`#version 300 es
|
|
426
426
|
precision highp float;
|
|
427
427
|
|
|
428
428
|
in vec2 v_texCoord;
|
|
@@ -458,7 +458,7 @@ void main() {
|
|
|
458
458
|
}
|
|
459
459
|
|
|
460
460
|
o_color = finalColor;
|
|
461
|
-
}`,
|
|
461
|
+
}`,ns=class{constructor(t,r,n,i){this.gl=t,this.geometry=tc(r),this.vertexBuffer=new Le(t,t.STATIC_DRAW),this.indexBuffer=new xe(t,t.STATIC_DRAW),this.vertexArray=new ke(t),this.indexCount=this.geometry.indices.length,this.vertexArray.configureAttributes([{index:0,size:3,type:t.FLOAT,stride:48,offset:0},{index:1,size:3,type:t.FLOAT,stride:48,offset:12},{index:2,size:2,type:t.FLOAT,stride:48,offset:24},{index:3,size:4,type:t.FLOAT,stride:48,offset:32}],this.vertexBuffer),this.vertexArray.bind(),this.indexBuffer.bind(),this.indexBuffer.upload(this.geometry.indices,t.STATIC_DRAW),this.update(r,n,i)}update(t,r,n){let i=rc(t,this.geometry,r,n);this.vertexBuffer.upload(i,this.gl.STATIC_DRAW)}bind(){this.vertexArray.bind(),this.indexBuffer.bind()}dispose(){this.vertexBuffer.dispose(),this.indexBuffer.dispose(),this.vertexArray.dispose(),this.wireframeIndexBuffer?.dispose()}},_a=class{constructor(t,r,n,i){this.surfaces=new Map;this.gl=t,this.model=r,this.blend=n,this.lighting=i,r.surfaces.forEach(s=>{this.surfaces.set(s.name,new ns(t,s,n,i))})}update(t,r){this.blend=t,this.lighting=r??this.lighting;for(let n of this.model.surfaces)this.surfaces.get(n.name)?.update(n,t,this.lighting)}dispose(){for(let t of this.surfaces.values())t.dispose();this.surfaces.clear()}},va=class{constructor(t){this.gl=t,this.program=Ee.create(t,{vertex:nc,fragment:ic},{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"),this.uniformRenderMode=this.program.getUniformLocation("u_renderMode"),this.uniformSolidColor=this.program.getUniformLocation("u_solidColor")}bind(t,r=[1,1,1,1],n=0){this.program.use(),this.gl.uniformMatrix4fv(this.uniformMvp,!1,t),this.gl.uniform4fv(this.uniformTint,new Float32Array(r)),this.gl.uniform1i(this.uniformDiffuse,n),this.gl.uniform1i(this.uniformRenderMode,0),this.gl.uniform4f(this.uniformSolidColor,1,1,1,1)}drawSurface(t,r){let n=r?.diffuseSampler??0,i=r?.tint??[1,1,1,1],s=r?.renderMode;this.gl.uniform4fv(this.uniformTint,new Float32Array(i)),this.gl.uniform1i(this.uniformDiffuse,n);let o=0,a=[1,1,1,1];if(s&&(s.mode==="solid"||s.mode==="wireframe"?o=1:s.mode==="solid-faceted"&&(o=2),s.color&&(a=[...s.color])),this.gl.uniform1i(this.uniformRenderMode,o),this.gl.uniform4f(this.uniformSolidColor,a[0],a[1],a[2],a[3]),t.vertexArray.bind(),s&&s.mode==="wireframe"){if(!t.wireframeIndexBuffer){t.wireframeIndexBuffer=new xe(this.gl,this.gl.STATIC_DRAW);let c=An(t.geometry.indices);t.wireframeIndexBuffer.upload(c),t.wireframeIndexCount=c.length}t.wireframeIndexBuffer.bind(),this.gl.drawElements(this.gl.LINES,t.wireframeIndexCount,this.gl.UNSIGNED_SHORT,0)}else t.indexBuffer.bind(),this.gl.drawElements(this.gl.TRIANGLES,t.indexCount,this.gl.UNSIGNED_SHORT,0)}dispose(){this.program.dispose()}};var W1=[1,1,1,1],Sa=class{constructor(t,r){this.maxParticles=t,this.rng=r,this.alive=new Uint8Array(t),this.positionX=new Float32Array(t),this.positionY=new Float32Array(t),this.positionZ=new Float32Array(t),this.velocityX=new Float32Array(t),this.velocityY=new Float32Array(t),this.velocityZ=new Float32Array(t),this.colorR=new Float32Array(t),this.colorG=new Float32Array(t),this.colorB=new Float32Array(t),this.colorA=new Float32Array(t),this.size=new Float32Array(t),this.lifetime=new Float32Array(t),this.remaining=new Float32Array(t),this.gravity=new Float32Array(t),this.damping=new Float32Array(t),this.bounce=new Float32Array(t),this.fade=new Uint8Array(t),this.blendMode=new Uint8Array(t)}spawn(t){let r=this.findFreeSlot();if(r===-1)return null;let n=t.color??W1,i=t.velocity??{x:0,y:0,z:0};return this.alive[r]=1,this.positionX[r]=t.position.x,this.positionY[r]=t.position.y,this.positionZ[r]=t.position.z,this.velocityX[r]=i.x,this.velocityY[r]=i.y,this.velocityZ[r]=i.z,this.colorR[r]=n[0],this.colorG[r]=n[1],this.colorB[r]=n[2],this.colorA[r]=n[3],this.size[r]=t.size??2.5,this.lifetime[r]=t.lifetime,this.remaining[r]=t.lifetime,this.gravity[r]=t.gravity??800,this.damping[r]=t.damping??0,this.bounce[r]=t.bounce??.25,this.fade[r]=t.fade?1:0,this.blendMode[r]=t.blendMode==="additive"?1:0,r}update(t,r={}){let n=r.floorZ??-1/0;for(let i=0;i<this.maxParticles;i+=1){if(!this.alive[i])continue;if(this.remaining[i]-=t,this.remaining[i]<=0){this.alive[i]=0;continue}let s=Math.max(0,1-this.damping[i]*t);this.velocityX[i]*=s,this.velocityY[i]*=s,this.velocityZ[i]=this.velocityZ[i]*s-this.gravity[i]*t,this.positionX[i]+=this.velocityX[i]*t,this.positionY[i]+=this.velocityY[i]*t,this.positionZ[i]+=this.velocityZ[i]*t,this.positionZ[i]<n&&(this.positionZ[i]=n,this.velocityZ[i]=-this.velocityZ[i]*this.bounce[i],this.velocityX[i]*=.7,this.velocityY[i]*=.7)}}killAll(){this.alive.fill(0)}aliveCount(){let t=0;for(let r=0;r<this.maxParticles;r+=1)this.alive[r]&&(t+=1);return t}getState(t){return{alive:this.alive[t]===1,position:{x:this.positionX[t],y:this.positionY[t],z:this.positionZ[t]},velocity:{x:this.velocityX[t],y:this.velocityY[t],z:this.velocityZ[t]},remaining:this.remaining[t],color:[this.colorR[t],this.colorG[t],this.colorB[t],this.colorA[t]],size:this.size[t],blendMode:this.blendMode[t]===1?"additive":"alpha"}}buildMesh(t,r){let n=[],i=[],s=[],o=a=>{let c=i.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 f=n.length/9,u=this.size[d]*.5,h=this.fade[d]?Math.max(this.remaining[d]/this.lifetime[d],0):1,m=this.blendMode[d]===1?1.2:1,g=this.colorR[d]*m,p=this.colorG[d]*m,y=this.colorB[d]*m,_=this.colorA[d]*h,b=this.positionX[d],x=this.positionY[d],v=this.positionZ[d],A=t.x*u,S=t.y*u,M=t.z*u,L=r.x*u,w=r.y*u,T=r.z*u,F=[{x:b-A-L,y:x-S-w,z:v-M-T},{x:b+A-L,y:x+S-w,z:v+M-T},{x:b-A+L,y:x-S+w,z:v-M+T},{x:b+A+L,y:x+S+w,z:v+M+T}],U=[[0,1],[1,1],[0,0],[1,0]];F.forEach((C,Z)=>{n.push(C.x,C.y,C.z,U[Z]?.[0]??0,U[Z]?.[1]??0,g,p,y,_)}),i.push(f,f+1,f+2,f+2,f+1,f+3)}l>0&&s.push({blendMode:a,start:c,count:i.length-c})};return o("alpha"),o("additive"),{vertices:new Float32Array(n),indices:new Uint16Array(i),batches:s}}findFreeSlot(){for(let t=0;t<this.maxParticles;t+=1)if(!this.alive[t])return t;return-1}},sc=`#version 300 es
|
|
462
462
|
precision highp float;
|
|
463
463
|
|
|
464
464
|
layout(location = 0) in vec3 a_position;
|
|
@@ -474,7 +474,7 @@ void main() {
|
|
|
474
474
|
v_uv = a_uv;
|
|
475
475
|
v_color = a_color;
|
|
476
476
|
gl_Position = u_viewProjection * vec4(a_position, 1.0);
|
|
477
|
-
}`,
|
|
477
|
+
}`,oc=`#version 300 es
|
|
478
478
|
precision highp float;
|
|
479
479
|
|
|
480
480
|
in vec2 v_uv;
|
|
@@ -486,7 +486,7 @@ void main() {
|
|
|
486
486
|
float dist = distance(v_uv, vec2(0.5));
|
|
487
487
|
float alpha = v_color.a * (1.0 - smoothstep(0.35, 0.5, dist));
|
|
488
488
|
o_color = vec4(v_color.rgb, alpha);
|
|
489
|
-
}`,Wo=class{constructor(t,r){this.vertexCapacity=0;this.indexCapacity=0;this.gl=t,this.system=r,this.program=Ee.create(t,{vertex:Il,fragment:Cl}),this.vertexBuffer=new Le(t,t.DYNAMIC_DRAW),this.indexBuffer=new xe(t,t.DYNAMIC_DRAW),this.vertexArray=new Fe(t),this.vertexArray.configureAttributes([{index:0,size:3,type:t.FLOAT,stride:36,offset:0},{index:1,size:2,type:t.FLOAT,stride:36,offset:12},{index:2,size:4,type:t.FLOAT,stride:36,offset:20}],this.vertexBuffer)}render(t){let r=this.system.buildMesh(t.viewRight,t.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 i=r.indices;r.indices.byteLength>this.indexCapacity?(this.indexCapacity=r.indices.byteLength,this.indexBuffer.upload(i,this.gl.DYNAMIC_DRAW)):this.indexBuffer.update(i),this.gl.depthMask(!1),this.program.use();let s=this.program.getUniformLocation("u_viewProjection");this.gl.uniformMatrix4fv(s,!1,t.viewProjection),this.vertexArray.bind();for(let o of r.batches)o.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,o.count,this.gl.UNSIGNED_SHORT,o.start*2);this.gl.depthMask(!0)}dispose(){this.program.dispose(),this.vertexBuffer.dispose(),this.indexBuffer.dispose(),this.vertexArray.dispose()}};function Du(e){let{system:t,origin:r,normal:n={x:0,y:0,z:1}}=e;for(let i=0;i<12;i+=1){let s=200+t.rng.frandom()*180,o=t.rng.frandom()*.35;t.spawn({position:r,velocity:{x:n.x*s+(t.rng.frandom()-.5)*80,y:n.y*s+(t.rng.frandom()-.5)*80,z:Math.max(n.z*s,120)+o*80},color:[1,.8,.4,1],size:2.5,lifetime:.45+t.rng.frandom()*.1,gravity:600,damping:2,bounce:.45,blendMode:"additive",fade:!0})}for(let i=0;i<8;i+=1)t.spawn({position:r,velocity:{x:(t.rng.frandom()-.5)*40,y:(t.rng.frandom()-.5)*40,z:80+t.rng.frandom()*40},color:[.45,.45,.45,.75],size:6,lifetime:.6,gravity:200,damping:4,bounce:.15,blendMode:"alpha",fade:!0})}function Bu(e){let{system:t,origin:r}=e;for(let n=0;n<40;n+=1){let i=t.rng.frandom()*Math.PI*2,s=Math.acos(2*t.rng.frandom()-1),o=220+t.rng.frandom()*260,a={x:Math.sin(s)*Math.cos(i),y:Math.sin(s)*Math.sin(i),z:Math.cos(s)};t.spawn({position:r,velocity:{x:a.x*o,y:a.y*o,z:a.z*o},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)t.spawn({position:r,velocity:{x:(t.rng.frandom()-.5)*30,y:(t.rng.frandom()-.5)*30,z:120+t.rng.frandom()*120},color:[.25,.25,.25,.9],size:12,lifetime:1.2,gravity:300,damping:3,blendMode:"alpha",fade:!0})}function Ou(e){let{system:t,origin:r,direction:n={x:0,y:0,z:1}}=e;for(let i=0;i<24;i+=1){let s=120+t.rng.frandom()*180;t.spawn({position:r,velocity:{x:n.x*s+(t.rng.frandom()-.5)*70,y:n.y*s+(t.rng.frandom()-.5)*70,z:n.z*s+t.rng.frandom()*80},color:[.6,0,0,.95],size:3,lifetime:.8,gravity:900,damping:1,bounce:.2,blendMode:"alpha",fade:!0})}}function Nu(e){let{system:t,origin:r}=e;for(let n=0;n<30;n+=1){let i=t.rng.frandom()*Math.PI*2,s=8+t.rng.frandom()*8;t.spawn({position:r,velocity:{x:Math.cos(i)*s,y:Math.sin(i)*s,z:100+t.rng.frandom()*80},color:[.4,.6,1,.9],size:4,lifetime:.5,gravity:300,damping:2,blendMode:"additive",fade:!0})}}function Uu(e){let{system:t,origin:r,direction:n={x:1,y:0,z:0}}=e;for(let i=0;i<10;i+=1){let s=350+t.rng.frandom()*100;t.spawn({position:r,velocity:{x:n.x*s+(t.rng.frandom()-.5)*30,y:n.y*s+(t.rng.frandom()-.5)*30,z:n.z*s+(t.rng.frandom()-.5)*30},color:[1,.8,.3,1],size:3,lifetime:.25,gravity:200,damping:1,blendMode:"additive",fade:!0})}}function Hu(e){let{system:t,origin:r,direction:n={x:0,y:0,z:0}}=e;for(let i=0;i<6;i+=1)t.spawn({position:{x:r.x+n.x*i*2,y:r.y+n.y*i*2,z:r.z+n.z*i*2},velocity:{x:(t.rng.frandom()-.5)*15,y:(t.rng.frandom()-.5)*15,z:20+t.rng.frandom()*15},color:[.6,.6,.6,.8],size:2.2,lifetime:.6,gravity:200,damping:1.5,blendMode:"alpha",fade:!0})}function Vu(e){let{system:t,origin:r,normal:n={x:0,y:0,z:1}}=e;for(let i=0;i<30;i+=1){let s=100+t.rng.frandom()*150;t.spawn({position:r,velocity:{x:n.x*s+(t.rng.frandom()-.5)*80,y:n.y*s+(t.rng.frandom()-.5)*80,z:100+t.rng.frandom()*120},color:[.5,.6,.8,.5],size:3,lifetime:.5+t.rng.frandom()*.3,gravity:800,damping:1.5,blendMode:"alpha",fade:!0})}}function Gu(e){let{system:t,origin:r}=e;for(let n=0;n<8;n+=1)t.spawn({position:{x:r.x+(t.rng.frandom()-.5)*10,y:r.y+(t.rng.frandom()-.5)*10,z:r.z+(t.rng.frandom()-.5)*10},velocity:{x:(t.rng.frandom()-.5)*20,y:(t.rng.frandom()-.5)*20,z:40+t.rng.frandom()*20},color:[.8,.8,.8,.3],size:5+t.rng.frandom()*4,lifetime:1.5+t.rng.frandom()*.5,gravity:-50,damping:.5,blendMode:"alpha",fade:!0})}var Ct=class{constructor(t){this.messageOffsets=[];this.buffer=t,this.view=new DataView(t),this.offset=0,this.scan()}scan(){let t=0;for(this.messageOffsets=[];t+4<=this.buffer.byteLength;){let r=this.view.getInt32(t,!0);if(r<0||r>2097152){console.warn(`DemoReader: Invalid block length ${r} at offset ${t} during scan`);break}if(t+4+r>this.buffer.byteLength){console.warn(`DemoReader: Incomplete block at offset ${t} during scan`);break}this.messageOffsets.push(t),t+=4+r}}hasMore(){return this.offset<this.buffer.byteLength}readNextBlock(){if(this.offset+4>this.buffer.byteLength)return null;let t=this.view.getInt32(this.offset,!0);if(t<0||this.offset+4+t>this.buffer.byteLength)return null;this.offset+=4;let r=this.buffer.slice(this.offset,this.offset+t);return this.offset+=t,{length:t,data:new Wr(r)}}readAllBlocksToBuffer(){let t=0,r=this.offset,n=[],i=this.offset;for(;i+4<=this.buffer.byteLength;){let d=this.view.getInt32(i,!0);if(d<0||i+4+d>this.buffer.byteLength)break;n.push({offset:i+4,length:d}),t+=d,i+=4+d}let s=new Uint8Array(t),o=0,a=new Uint8Array(this.buffer);for(let d of n)s.set(a.subarray(d.offset,d.offset+d.length),o),o+=d.length;return this.offset=i,s.buffer}reset(){this.offset=0}seekToMessage(t){return t<0||t>=this.messageOffsets.length?!1:(this.offset=this.messageOffsets[t],!0)}getMessageCount(){return this.messageOffsets.length}getOffset(){return this.offset}getProgress(){let t=this.offset,r=this.buffer.byteLength;return{current:t,total:r,percent:r>0?t/r*100:0}}};function Rn(e){let t=e.length;for(;--t>=0;)e[t]=0}var O1=0,If=1,N1=2,U1=3,H1=258,ec=29,us=256,ns=us+1+ec,Tn=30,tc=19,Cf=2*ns+1,Cr=15,Rl=16,V1=7,rc=256,Rf=16,Ff=17,kf=18,Xl=new Uint8Array([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]),qo=new Uint8Array([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]),G1=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]),zf=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),W1=512,Ft=new Array((ns+2)*2);Rn(Ft);var es=new Array(Tn*2);Rn(es);var is=new Array(W1);Rn(is);var ss=new Array(H1-U1+1);Rn(ss);var nc=new Array(ec);Rn(nc);var jo=new Array(Tn);Rn(jo);function Fl(e,t,r,n,i){this.static_tree=e,this.extra_bits=t,this.extra_base=r,this.elems=n,this.max_length=i,this.has_stree=e&&e.length}var Pf,Df,Bf;function kl(e,t){this.dyn_tree=e,this.max_code=0,this.stat_desc=t}var Of=e=>e<256?is[e]:is[256+(e>>>7)],os=(e,t)=>{e.pending_buf[e.pending++]=t&255,e.pending_buf[e.pending++]=t>>>8&255},ke=(e,t,r)=>{e.bi_valid>Rl-r?(e.bi_buf|=t<<e.bi_valid&65535,os(e,e.bi_buf),e.bi_buf=t>>Rl-e.bi_valid,e.bi_valid+=r-Rl):(e.bi_buf|=t<<e.bi_valid&65535,e.bi_valid+=r)},mt=(e,t,r)=>{ke(e,r[t*2],r[t*2+1])},Nf=(e,t)=>{let r=0;do r|=e&1,e>>>=1,r<<=1;while(--t>0);return r>>>1},X1=e=>{e.bi_valid===16?(os(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):e.bi_valid>=8&&(e.pending_buf[e.pending++]=e.bi_buf&255,e.bi_buf>>=8,e.bi_valid-=8)},K1=(e,t)=>{let r=t.dyn_tree,n=t.max_code,i=t.stat_desc.static_tree,s=t.stat_desc.has_stree,o=t.stat_desc.extra_bits,a=t.stat_desc.extra_base,d=t.stat_desc.max_length,l,c,f,u,h,m,g=0;for(u=0;u<=Cr;u++)e.bl_count[u]=0;for(r[e.heap[e.heap_max]*2+1]=0,l=e.heap_max+1;l<Cf;l++)c=e.heap[l],u=r[r[c*2+1]*2+1]+1,u>d&&(u=d,g++),r[c*2+1]=u,!(c>n)&&(e.bl_count[u]++,h=0,c>=a&&(h=o[c-a]),m=r[c*2],e.opt_len+=m*(u+h),s&&(e.static_len+=m*(i[c*2+1]+h)));if(g!==0){do{for(u=d-1;e.bl_count[u]===0;)u--;e.bl_count[u]--,e.bl_count[u+1]+=2,e.bl_count[d]--,g-=2}while(g>0);for(u=d;u!==0;u--)for(c=e.bl_count[u];c!==0;)f=e.heap[--l],!(f>n)&&(r[f*2+1]!==u&&(e.opt_len+=(u-r[f*2+1])*r[f*2],r[f*2+1]=u),c--)}},Uf=(e,t,r)=>{let n=new Array(Cr+1),i=0,s,o;for(s=1;s<=Cr;s++)i=i+r[s-1]<<1,n[s]=i;for(o=0;o<=t;o++){let a=e[o*2+1];a!==0&&(e[o*2]=Nf(n[a]++,a))}},$1=()=>{let e,t,r,n,i,s=new Array(Cr+1);for(r=0,n=0;n<ec-1;n++)for(nc[n]=r,e=0;e<1<<Xl[n];e++)ss[r++]=n;for(ss[r-1]=n,i=0,n=0;n<16;n++)for(jo[n]=i,e=0;e<1<<qo[n];e++)is[i++]=n;for(i>>=7;n<Tn;n++)for(jo[n]=i<<7,e=0;e<1<<qo[n]-7;e++)is[256+i++]=n;for(t=0;t<=Cr;t++)s[t]=0;for(e=0;e<=143;)Ft[e*2+1]=8,e++,s[8]++;for(;e<=255;)Ft[e*2+1]=9,e++,s[9]++;for(;e<=279;)Ft[e*2+1]=7,e++,s[7]++;for(;e<=287;)Ft[e*2+1]=8,e++,s[8]++;for(Uf(Ft,ns+1,s),e=0;e<Tn;e++)es[e*2+1]=5,es[e*2]=Nf(e,5);Pf=new Fl(Ft,Xl,us+1,ns,Cr),Df=new Fl(es,qo,0,Tn,Cr),Bf=new Fl(new Array(0),G1,0,tc,V1)},Hf=e=>{let t;for(t=0;t<ns;t++)e.dyn_ltree[t*2]=0;for(t=0;t<Tn;t++)e.dyn_dtree[t*2]=0;for(t=0;t<tc;t++)e.bl_tree[t*2]=0;e.dyn_ltree[rc*2]=1,e.opt_len=e.static_len=0,e.sym_next=e.matches=0},Vf=e=>{e.bi_valid>8?os(e,e.bi_buf):e.bi_valid>0&&(e.pending_buf[e.pending++]=e.bi_buf),e.bi_buf=0,e.bi_valid=0},Wu=(e,t,r,n)=>{let i=t*2,s=r*2;return e[i]<e[s]||e[i]===e[s]&&n[t]<=n[r]},zl=(e,t,r)=>{let n=e.heap[r],i=r<<1;for(;i<=e.heap_len&&(i<e.heap_len&&Wu(t,e.heap[i+1],e.heap[i],e.depth)&&i++,!Wu(t,n,e.heap[i],e.depth));)e.heap[r]=e.heap[i],r=i,i<<=1;e.heap[r]=n},Xu=(e,t,r)=>{let n,i,s=0,o,a;if(e.sym_next!==0)do n=e.pending_buf[e.sym_buf+s++]&255,n+=(e.pending_buf[e.sym_buf+s++]&255)<<8,i=e.pending_buf[e.sym_buf+s++],n===0?mt(e,i,t):(o=ss[i],mt(e,o+us+1,t),a=Xl[o],a!==0&&(i-=nc[o],ke(e,i,a)),n--,o=Of(n),mt(e,o,r),a=qo[o],a!==0&&(n-=jo[o],ke(e,n,a)));while(s<e.sym_next);mt(e,rc,t)},Kl=(e,t)=>{let r=t.dyn_tree,n=t.stat_desc.static_tree,i=t.stat_desc.has_stree,s=t.stat_desc.elems,o,a,d=-1,l;for(e.heap_len=0,e.heap_max=Cf,o=0;o<s;o++)r[o*2]!==0?(e.heap[++e.heap_len]=d=o,e.depth[o]=0):r[o*2+1]=0;for(;e.heap_len<2;)l=e.heap[++e.heap_len]=d<2?++d:0,r[l*2]=1,e.depth[l]=0,e.opt_len--,i&&(e.static_len-=n[l*2+1]);for(t.max_code=d,o=e.heap_len>>1;o>=1;o--)zl(e,r,o);l=s;do o=e.heap[1],e.heap[1]=e.heap[e.heap_len--],zl(e,r,1),a=e.heap[1],e.heap[--e.heap_max]=o,e.heap[--e.heap_max]=a,r[l*2]=r[o*2]+r[a*2],e.depth[l]=(e.depth[o]>=e.depth[a]?e.depth[o]:e.depth[a])+1,r[o*2+1]=r[a*2+1]=l,e.heap[1]=l++,zl(e,r,1);while(e.heap_len>=2);e.heap[--e.heap_max]=e.heap[1],K1(e,t),Uf(r,d,e.bl_count)},Ku=(e,t,r)=>{let n,i=-1,s,o=t[1],a=0,d=7,l=4;for(o===0&&(d=138,l=3),t[(r+1)*2+1]=65535,n=0;n<=r;n++)s=o,o=t[(n+1)*2+1],!(++a<d&&s===o)&&(a<l?e.bl_tree[s*2]+=a:s!==0?(s!==i&&e.bl_tree[s*2]++,e.bl_tree[Rf*2]++):a<=10?e.bl_tree[Ff*2]++:e.bl_tree[kf*2]++,a=0,i=s,o===0?(d=138,l=3):s===o?(d=6,l=3):(d=7,l=4))},$u=(e,t,r)=>{let n,i=-1,s,o=t[1],a=0,d=7,l=4;for(o===0&&(d=138,l=3),n=0;n<=r;n++)if(s=o,o=t[(n+1)*2+1],!(++a<d&&s===o)){if(a<l)do mt(e,s,e.bl_tree);while(--a!==0);else s!==0?(s!==i&&(mt(e,s,e.bl_tree),a--),mt(e,Rf,e.bl_tree),ke(e,a-3,2)):a<=10?(mt(e,Ff,e.bl_tree),ke(e,a-3,3)):(mt(e,kf,e.bl_tree),ke(e,a-11,7));a=0,i=s,o===0?(d=138,l=3):s===o?(d=6,l=3):(d=7,l=4)}},Z1=e=>{let t;for(Ku(e,e.dyn_ltree,e.l_desc.max_code),Ku(e,e.dyn_dtree,e.d_desc.max_code),Kl(e,e.bl_desc),t=tc-1;t>=3&&e.bl_tree[zf[t]*2+1]===0;t--);return e.opt_len+=3*(t+1)+5+5+4,t},Y1=(e,t,r,n)=>{let i;for(ke(e,t-257,5),ke(e,r-1,5),ke(e,n-4,4),i=0;i<n;i++)ke(e,e.bl_tree[zf[i]*2+1],3);$u(e,e.dyn_ltree,t-1),$u(e,e.dyn_dtree,r-1)},q1=e=>{let t=4093624447,r;for(r=0;r<=31;r++,t>>>=1)if(t&1&&e.dyn_ltree[r*2]!==0)return 0;if(e.dyn_ltree[18]!==0||e.dyn_ltree[20]!==0||e.dyn_ltree[26]!==0)return 1;for(r=32;r<us;r++)if(e.dyn_ltree[r*2]!==0)return 1;return 0},Zu=!1,j1=e=>{Zu||($1(),Zu=!0),e.l_desc=new kl(e.dyn_ltree,Pf),e.d_desc=new kl(e.dyn_dtree,Df),e.bl_desc=new kl(e.bl_tree,Bf),e.bi_buf=0,e.bi_valid=0,Hf(e)},Gf=(e,t,r,n)=>{ke(e,(O1<<1)+(n?1:0),3),Vf(e),os(e,r),os(e,~r),r&&e.pending_buf.set(e.window.subarray(t,t+r),e.pending),e.pending+=r},Q1=e=>{ke(e,If<<1,3),mt(e,rc,Ft),X1(e)},J1=(e,t,r,n)=>{let i,s,o=0;e.level>0?(e.strm.data_type===2&&(e.strm.data_type=q1(e)),Kl(e,e.l_desc),Kl(e,e.d_desc),o=Z1(e),i=e.opt_len+3+7>>>3,s=e.static_len+3+7>>>3,s<=i&&(i=s)):i=s=r+5,r+4<=i&&t!==-1?Gf(e,t,r,n):e.strategy===4||s===i?(ke(e,(If<<1)+(n?1:0),3),Xu(e,Ft,es)):(ke(e,(N1<<1)+(n?1:0),3),Y1(e,e.l_desc.max_code+1,e.d_desc.max_code+1,o+1),Xu(e,e.dyn_ltree,e.dyn_dtree)),Hf(e),n&&Vf(e)},eg=(e,t,r)=>(e.pending_buf[e.sym_buf+e.sym_next++]=t,e.pending_buf[e.sym_buf+e.sym_next++]=t>>8,e.pending_buf[e.sym_buf+e.sym_next++]=r,t===0?e.dyn_ltree[r*2]++:(e.matches++,t--,e.dyn_ltree[(ss[r]+us+1)*2]++,e.dyn_dtree[Of(t)*2]++),e.sym_next===e.sym_end),tg=j1,rg=Gf,ng=J1,ig=eg,sg=Q1,og={_tr_init:tg,_tr_stored_block:rg,_tr_flush_block:ng,_tr_tally:ig,_tr_align:sg},ag=(e,t,r,n)=>{let i=e&65535|0,s=e>>>16&65535|0,o=0;for(;r!==0;){o=r>2e3?2e3:r,r-=o;do i=i+t[n++]|0,s=s+i|0;while(--o);i%=65521,s%=65521}return i|s<<16|0},as=ag,lg=()=>{let e,t=[];for(var r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=e&1?3988292384^e>>>1:e>>>1;t[r]=e}return t},cg=new Uint32Array(lg()),dg=(e,t,r,n)=>{let i=cg,s=n+r;e^=-1;for(let o=n;o<s;o++)e=e>>>8^i[(e^t[o])&255];return e^-1},fe=dg,kr={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"},Dr={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8},{_tr_init:ug,_tr_stored_block:$l,_tr_flush_block:fg,_tr_tally:ar,_tr_align:hg}=og,{Z_NO_FLUSH:lr,Z_PARTIAL_FLUSH:mg,Z_FULL_FLUSH:pg,Z_FINISH:je,Z_BLOCK:Yu,Z_OK:he,Z_STREAM_END:qu,Z_STREAM_ERROR:pt,Z_DATA_ERROR:gg,Z_BUF_ERROR:Pl,Z_DEFAULT_COMPRESSION:yg,Z_FILTERED:xg,Z_HUFFMAN_ONLY:Xo,Z_RLE:bg,Z_FIXED:_g,Z_DEFAULT_STRATEGY:vg,Z_UNKNOWN:Sg,Z_DEFLATED:ea}=Dr,wg=9,Ag=15,Mg=8,Eg=29,Lg=256,Zl=Lg+1+Eg,Tg=30,Ig=19,Cg=2*Zl+1,Rg=15,G=3,or=258,gt=or+G+1,Fg=32,In=42,ic=57,Yl=69,ql=73,jl=91,Ql=103,Rr=113,Qi=666,Te=1,Fn=2,zr=3,kn=4,kg=3,Fr=(e,t)=>(e.msg=kr[t],t),ju=e=>e*2-(e>4?9:0),sr=e=>{let t=e.length;for(;--t>=0;)e[t]=0},zg=e=>{let t,r,n,i=e.w_size;t=e.hash_size,n=t;do r=e.head[--n],e.head[n]=r>=i?r-i:0;while(--t);t=i,n=t;do r=e.prev[--n],e.prev[n]=r>=i?r-i:0;while(--t)},Pg=(e,t,r)=>(t<<e.hash_shift^r)&e.hash_mask,cr=Pg,Ne=e=>{let t=e.state,r=t.pending;r>e.avail_out&&(r=e.avail_out),r!==0&&(e.output.set(t.pending_buf.subarray(t.pending_out,t.pending_out+r),e.next_out),e.next_out+=r,t.pending_out+=r,e.total_out+=r,e.avail_out-=r,t.pending-=r,t.pending===0&&(t.pending_out=0))},Ue=(e,t)=>{fg(e,e.block_start>=0?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,Ne(e.strm)},K=(e,t)=>{e.pending_buf[e.pending++]=t},ji=(e,t)=>{e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=t&255},Jl=(e,t,r,n)=>{let i=e.avail_in;return i>n&&(i=n),i===0?0:(e.avail_in-=i,t.set(e.input.subarray(e.next_in,e.next_in+i),r),e.state.wrap===1?e.adler=as(e.adler,t,i,r):e.state.wrap===2&&(e.adler=fe(e.adler,t,i,r)),e.next_in+=i,e.total_in+=i,i)},Wf=(e,t)=>{let r=e.max_chain_length,n=e.strstart,i,s,o=e.prev_length,a=e.nice_match,d=e.strstart>e.w_size-gt?e.strstart-(e.w_size-gt):0,l=e.window,c=e.w_mask,f=e.prev,u=e.strstart+or,h=l[n+o-1],m=l[n+o];e.prev_length>=e.good_match&&(r>>=2),a>e.lookahead&&(a=e.lookahead);do if(i=t,!(l[i+o]!==m||l[i+o-1]!==h||l[i]!==l[n]||l[++i]!==l[n+1])){n+=2,i++;do;while(l[++n]===l[++i]&&l[++n]===l[++i]&&l[++n]===l[++i]&&l[++n]===l[++i]&&l[++n]===l[++i]&&l[++n]===l[++i]&&l[++n]===l[++i]&&l[++n]===l[++i]&&n<u);if(s=or-(u-n),n=u-or,s>o){if(e.match_start=t,o=s,s>=a)break;h=l[n+o-1],m=l[n+o]}}while((t=f[t&c])>d&&--r!==0);return o<=e.lookahead?o:e.lookahead},Cn=e=>{let t=e.w_size,r,n,i;do{if(n=e.window_size-e.lookahead-e.strstart,e.strstart>=t+(t-gt)&&(e.window.set(e.window.subarray(t,t+t-n),0),e.match_start-=t,e.strstart-=t,e.block_start-=t,e.insert>e.strstart&&(e.insert=e.strstart),zg(e),n+=t),e.strm.avail_in===0)break;if(r=Jl(e.strm,e.window,e.strstart+e.lookahead,n),e.lookahead+=r,e.lookahead+e.insert>=G)for(i=e.strstart-e.insert,e.ins_h=e.window[i],e.ins_h=cr(e,e.ins_h,e.window[i+1]);e.insert&&(e.ins_h=cr(e,e.ins_h,e.window[i+G-1]),e.prev[i&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=i,i++,e.insert--,!(e.lookahead+e.insert<G)););}while(e.lookahead<gt&&e.strm.avail_in!==0)},Xf=(e,t)=>{let r=e.pending_buf_size-5>e.w_size?e.w_size:e.pending_buf_size-5,n,i,s,o=0,a=e.strm.avail_in;do{if(n=65535,s=e.bi_valid+42>>3,e.strm.avail_out<s||(s=e.strm.avail_out-s,i=e.strstart-e.block_start,n>i+e.strm.avail_in&&(n=i+e.strm.avail_in),n>s&&(n=s),n<r&&(n===0&&t!==je||t===lr||n!==i+e.strm.avail_in)))break;o=t===je&&n===i+e.strm.avail_in?1:0,$l(e,0,0,o),e.pending_buf[e.pending-4]=n,e.pending_buf[e.pending-3]=n>>8,e.pending_buf[e.pending-2]=~n,e.pending_buf[e.pending-1]=~n>>8,Ne(e.strm),i&&(i>n&&(i=n),e.strm.output.set(e.window.subarray(e.block_start,e.block_start+i),e.strm.next_out),e.strm.next_out+=i,e.strm.avail_out-=i,e.strm.total_out+=i,e.block_start+=i,n-=i),n&&(Jl(e.strm,e.strm.output,e.strm.next_out,n),e.strm.next_out+=n,e.strm.avail_out-=n,e.strm.total_out+=n)}while(o===0);return a-=e.strm.avail_in,a&&(a>=e.w_size?(e.matches=2,e.window.set(e.strm.input.subarray(e.strm.next_in-e.w_size,e.strm.next_in),0),e.strstart=e.w_size,e.insert=e.strstart):(e.window_size-e.strstart<=a&&(e.strstart-=e.w_size,e.window.set(e.window.subarray(e.w_size,e.w_size+e.strstart),0),e.matches<2&&e.matches++,e.insert>e.strstart&&(e.insert=e.strstart)),e.window.set(e.strm.input.subarray(e.strm.next_in-a,e.strm.next_in),e.strstart),e.strstart+=a,e.insert+=a>e.w_size-e.insert?e.w_size-e.insert:a),e.block_start=e.strstart),e.high_water<e.strstart&&(e.high_water=e.strstart),o?kn:t!==lr&&t!==je&&e.strm.avail_in===0&&e.strstart===e.block_start?Fn:(s=e.window_size-e.strstart,e.strm.avail_in>s&&e.block_start>=e.w_size&&(e.block_start-=e.w_size,e.strstart-=e.w_size,e.window.set(e.window.subarray(e.w_size,e.w_size+e.strstart),0),e.matches<2&&e.matches++,s+=e.w_size,e.insert>e.strstart&&(e.insert=e.strstart)),s>e.strm.avail_in&&(s=e.strm.avail_in),s&&(Jl(e.strm,e.window,e.strstart,s),e.strstart+=s,e.insert+=s>e.w_size-e.insert?e.w_size-e.insert:s),e.high_water<e.strstart&&(e.high_water=e.strstart),s=e.bi_valid+42>>3,s=e.pending_buf_size-s>65535?65535:e.pending_buf_size-s,r=s>e.w_size?e.w_size:s,i=e.strstart-e.block_start,(i>=r||(i||t===je)&&t!==lr&&e.strm.avail_in===0&&i<=s)&&(n=i>s?s:i,o=t===je&&e.strm.avail_in===0&&n===i?1:0,$l(e,e.block_start,n,o),e.block_start+=n,Ne(e.strm)),o?zr:Te)},Dl=(e,t)=>{let r,n;for(;;){if(e.lookahead<gt){if(Cn(e),e.lookahead<gt&&t===lr)return Te;if(e.lookahead===0)break}if(r=0,e.lookahead>=G&&(e.ins_h=cr(e,e.ins_h,e.window[e.strstart+G-1]),r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),r!==0&&e.strstart-r<=e.w_size-gt&&(e.match_length=Wf(e,r)),e.match_length>=G)if(n=ar(e,e.strstart-e.match_start,e.match_length-G),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=G){e.match_length--;do e.strstart++,e.ins_h=cr(e,e.ins_h,e.window[e.strstart+G-1]),r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart;while(--e.match_length!==0);e.strstart++}else e.strstart+=e.match_length,e.match_length=0,e.ins_h=e.window[e.strstart],e.ins_h=cr(e,e.ins_h,e.window[e.strstart+1]);else n=ar(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++;if(n&&(Ue(e,!1),e.strm.avail_out===0))return Te}return e.insert=e.strstart<G-1?e.strstart:G-1,t===je?(Ue(e,!0),e.strm.avail_out===0?zr:kn):e.sym_next&&(Ue(e,!1),e.strm.avail_out===0)?Te:Fn},En=(e,t)=>{let r,n,i;for(;;){if(e.lookahead<gt){if(Cn(e),e.lookahead<gt&&t===lr)return Te;if(e.lookahead===0)break}if(r=0,e.lookahead>=G&&(e.ins_h=cr(e,e.ins_h,e.window[e.strstart+G-1]),r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),e.prev_length=e.match_length,e.prev_match=e.match_start,e.match_length=G-1,r!==0&&e.prev_length<e.max_lazy_match&&e.strstart-r<=e.w_size-gt&&(e.match_length=Wf(e,r),e.match_length<=5&&(e.strategy===xg||e.match_length===G&&e.strstart-e.match_start>4096)&&(e.match_length=G-1)),e.prev_length>=G&&e.match_length<=e.prev_length){i=e.strstart+e.lookahead-G,n=ar(e,e.strstart-1-e.prev_match,e.prev_length-G),e.lookahead-=e.prev_length-1,e.prev_length-=2;do++e.strstart<=i&&(e.ins_h=cr(e,e.ins_h,e.window[e.strstart+G-1]),r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart);while(--e.prev_length!==0);if(e.match_available=0,e.match_length=G-1,e.strstart++,n&&(Ue(e,!1),e.strm.avail_out===0))return Te}else if(e.match_available){if(n=ar(e,0,e.window[e.strstart-1]),n&&Ue(e,!1),e.strstart++,e.lookahead--,e.strm.avail_out===0)return Te}else e.match_available=1,e.strstart++,e.lookahead--}return e.match_available&&(n=ar(e,0,e.window[e.strstart-1]),e.match_available=0),e.insert=e.strstart<G-1?e.strstart:G-1,t===je?(Ue(e,!0),e.strm.avail_out===0?zr:kn):e.sym_next&&(Ue(e,!1),e.strm.avail_out===0)?Te:Fn},Dg=(e,t)=>{let r,n,i,s,o=e.window;for(;;){if(e.lookahead<=or){if(Cn(e),e.lookahead<=or&&t===lr)return Te;if(e.lookahead===0)break}if(e.match_length=0,e.lookahead>=G&&e.strstart>0&&(i=e.strstart-1,n=o[i],n===o[++i]&&n===o[++i]&&n===o[++i])){s=e.strstart+or;do;while(n===o[++i]&&n===o[++i]&&n===o[++i]&&n===o[++i]&&n===o[++i]&&n===o[++i]&&n===o[++i]&&n===o[++i]&&i<s);e.match_length=or-(s-i),e.match_length>e.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=G?(r=ar(e,1,e.match_length-G),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(r=ar(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),r&&(Ue(e,!1),e.strm.avail_out===0))return Te}return e.insert=0,t===je?(Ue(e,!0),e.strm.avail_out===0?zr:kn):e.sym_next&&(Ue(e,!1),e.strm.avail_out===0)?Te:Fn},Bg=(e,t)=>{let r;for(;;){if(e.lookahead===0&&(Cn(e),e.lookahead===0)){if(t===lr)return Te;break}if(e.match_length=0,r=ar(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,r&&(Ue(e,!1),e.strm.avail_out===0))return Te}return e.insert=0,t===je?(Ue(e,!0),e.strm.avail_out===0?zr:kn):e.sym_next&&(Ue(e,!1),e.strm.avail_out===0)?Te:Fn};function ht(e,t,r,n,i){this.good_length=e,this.max_lazy=t,this.nice_length=r,this.max_chain=n,this.func=i}var Ji=[new ht(0,0,0,0,Xf),new ht(4,4,8,4,Dl),new ht(4,5,16,8,Dl),new ht(4,6,32,32,Dl),new ht(4,4,16,16,En),new ht(8,16,32,32,En),new ht(8,16,128,128,En),new ht(8,32,128,256,En),new ht(32,128,258,1024,En),new ht(32,258,258,4096,En)],Og=e=>{e.window_size=2*e.w_size,sr(e.head),e.max_lazy_match=Ji[e.level].max_lazy,e.good_match=Ji[e.level].good_length,e.nice_match=Ji[e.level].nice_length,e.max_chain_length=Ji[e.level].max_chain,e.strstart=0,e.block_start=0,e.lookahead=0,e.insert=0,e.match_length=e.prev_length=G-1,e.match_available=0,e.ins_h=0};function Ng(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=ea,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new Uint16Array(Cg*2),this.dyn_dtree=new Uint16Array((2*Tg+1)*2),this.bl_tree=new Uint16Array((2*Ig+1)*2),sr(this.dyn_ltree),sr(this.dyn_dtree),sr(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new Uint16Array(Rg+1),this.heap=new Uint16Array(2*Zl+1),sr(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new Uint16Array(2*Zl+1),sr(this.depth),this.sym_buf=0,this.lit_bufsize=0,this.sym_next=0,this.sym_end=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}var fs=e=>{if(!e)return 1;let t=e.state;return!t||t.strm!==e||t.status!==In&&t.status!==ic&&t.status!==Yl&&t.status!==ql&&t.status!==jl&&t.status!==Ql&&t.status!==Rr&&t.status!==Qi?1:0},Kf=e=>{if(fs(e))return Fr(e,pt);e.total_in=e.total_out=0,e.data_type=Sg;let t=e.state;return t.pending=0,t.pending_out=0,t.wrap<0&&(t.wrap=-t.wrap),t.status=t.wrap===2?ic:t.wrap?In:Rr,e.adler=t.wrap===2?0:1,t.last_flush=-2,ug(t),he},$f=e=>{let t=Kf(e);return t===he&&Og(e.state),t},Ug=(e,t)=>fs(e)||e.state.wrap!==2?pt:(e.state.gzhead=t,he),Zf=(e,t,r,n,i,s)=>{if(!e)return pt;let o=1;if(t===yg&&(t=6),n<0?(o=0,n=-n):n>15&&(o=2,n-=16),i<1||i>wg||r!==ea||n<8||n>15||t<0||t>9||s<0||s>_g||n===8&&o!==1)return Fr(e,pt);n===8&&(n=9);let a=new Ng;return e.state=a,a.strm=e,a.status=In,a.wrap=o,a.gzhead=null,a.w_bits=n,a.w_size=1<<a.w_bits,a.w_mask=a.w_size-1,a.hash_bits=i+7,a.hash_size=1<<a.hash_bits,a.hash_mask=a.hash_size-1,a.hash_shift=~~((a.hash_bits+G-1)/G),a.window=new Uint8Array(a.w_size*2),a.head=new Uint16Array(a.hash_size),a.prev=new Uint16Array(a.w_size),a.lit_bufsize=1<<i+6,a.pending_buf_size=a.lit_bufsize*4,a.pending_buf=new Uint8Array(a.pending_buf_size),a.sym_buf=a.lit_bufsize,a.sym_end=(a.lit_bufsize-1)*3,a.level=t,a.strategy=s,a.method=r,$f(e)},Hg=(e,t)=>Zf(e,t,ea,Ag,Mg,vg),Vg=(e,t)=>{if(fs(e)||t>Yu||t<0)return e?Fr(e,pt):pt;let r=e.state;if(!e.output||e.avail_in!==0&&!e.input||r.status===Qi&&t!==je)return Fr(e,e.avail_out===0?Pl:pt);let n=r.last_flush;if(r.last_flush=t,r.pending!==0){if(Ne(e),e.avail_out===0)return r.last_flush=-1,he}else if(e.avail_in===0&&ju(t)<=ju(n)&&t!==je)return Fr(e,Pl);if(r.status===Qi&&e.avail_in!==0)return Fr(e,Pl);if(r.status===In&&r.wrap===0&&(r.status=Rr),r.status===In){let i=ea+(r.w_bits-8<<4)<<8,s=-1;if(r.strategy>=Xo||r.level<2?s=0:r.level<6?s=1:r.level===6?s=2:s=3,i|=s<<6,r.strstart!==0&&(i|=Fg),i+=31-i%31,ji(r,i),r.strstart!==0&&(ji(r,e.adler>>>16),ji(r,e.adler&65535)),e.adler=1,r.status=Rr,Ne(e),r.pending!==0)return r.last_flush=-1,he}if(r.status===ic){if(e.adler=0,K(r,31),K(r,139),K(r,8),r.gzhead)K(r,(r.gzhead.text?1:0)+(r.gzhead.hcrc?2:0)+(r.gzhead.extra?4:0)+(r.gzhead.name?8:0)+(r.gzhead.comment?16:0)),K(r,r.gzhead.time&255),K(r,r.gzhead.time>>8&255),K(r,r.gzhead.time>>16&255),K(r,r.gzhead.time>>24&255),K(r,r.level===9?2:r.strategy>=Xo||r.level<2?4:0),K(r,r.gzhead.os&255),r.gzhead.extra&&r.gzhead.extra.length&&(K(r,r.gzhead.extra.length&255),K(r,r.gzhead.extra.length>>8&255)),r.gzhead.hcrc&&(e.adler=fe(e.adler,r.pending_buf,r.pending,0)),r.gzindex=0,r.status=Yl;else if(K(r,0),K(r,0),K(r,0),K(r,0),K(r,0),K(r,r.level===9?2:r.strategy>=Xo||r.level<2?4:0),K(r,kg),r.status=Rr,Ne(e),r.pending!==0)return r.last_flush=-1,he}if(r.status===Yl){if(r.gzhead.extra){let i=r.pending,s=(r.gzhead.extra.length&65535)-r.gzindex;for(;r.pending+s>r.pending_buf_size;){let a=r.pending_buf_size-r.pending;if(r.pending_buf.set(r.gzhead.extra.subarray(r.gzindex,r.gzindex+a),r.pending),r.pending=r.pending_buf_size,r.gzhead.hcrc&&r.pending>i&&(e.adler=fe(e.adler,r.pending_buf,r.pending-i,i)),r.gzindex+=a,Ne(e),r.pending!==0)return r.last_flush=-1,he;i=0,s-=a}let o=new Uint8Array(r.gzhead.extra);r.pending_buf.set(o.subarray(r.gzindex,r.gzindex+s),r.pending),r.pending+=s,r.gzhead.hcrc&&r.pending>i&&(e.adler=fe(e.adler,r.pending_buf,r.pending-i,i)),r.gzindex=0}r.status=ql}if(r.status===ql){if(r.gzhead.name){let i=r.pending,s;do{if(r.pending===r.pending_buf_size){if(r.gzhead.hcrc&&r.pending>i&&(e.adler=fe(e.adler,r.pending_buf,r.pending-i,i)),Ne(e),r.pending!==0)return r.last_flush=-1,he;i=0}r.gzindex<r.gzhead.name.length?s=r.gzhead.name.charCodeAt(r.gzindex++)&255:s=0,K(r,s)}while(s!==0);r.gzhead.hcrc&&r.pending>i&&(e.adler=fe(e.adler,r.pending_buf,r.pending-i,i)),r.gzindex=0}r.status=jl}if(r.status===jl){if(r.gzhead.comment){let i=r.pending,s;do{if(r.pending===r.pending_buf_size){if(r.gzhead.hcrc&&r.pending>i&&(e.adler=fe(e.adler,r.pending_buf,r.pending-i,i)),Ne(e),r.pending!==0)return r.last_flush=-1,he;i=0}r.gzindex<r.gzhead.comment.length?s=r.gzhead.comment.charCodeAt(r.gzindex++)&255:s=0,K(r,s)}while(s!==0);r.gzhead.hcrc&&r.pending>i&&(e.adler=fe(e.adler,r.pending_buf,r.pending-i,i))}r.status=Ql}if(r.status===Ql){if(r.gzhead.hcrc){if(r.pending+2>r.pending_buf_size&&(Ne(e),r.pending!==0))return r.last_flush=-1,he;K(r,e.adler&255),K(r,e.adler>>8&255),e.adler=0}if(r.status=Rr,Ne(e),r.pending!==0)return r.last_flush=-1,he}if(e.avail_in!==0||r.lookahead!==0||t!==lr&&r.status!==Qi){let i=r.level===0?Xf(r,t):r.strategy===Xo?Bg(r,t):r.strategy===bg?Dg(r,t):Ji[r.level].func(r,t);if((i===zr||i===kn)&&(r.status=Qi),i===Te||i===zr)return e.avail_out===0&&(r.last_flush=-1),he;if(i===Fn&&(t===mg?hg(r):t!==Yu&&($l(r,0,0,!1),t===pg&&(sr(r.head),r.lookahead===0&&(r.strstart=0,r.block_start=0,r.insert=0))),Ne(e),e.avail_out===0))return r.last_flush=-1,he}return t!==je?he:r.wrap<=0?qu:(r.wrap===2?(K(r,e.adler&255),K(r,e.adler>>8&255),K(r,e.adler>>16&255),K(r,e.adler>>24&255),K(r,e.total_in&255),K(r,e.total_in>>8&255),K(r,e.total_in>>16&255),K(r,e.total_in>>24&255)):(ji(r,e.adler>>>16),ji(r,e.adler&65535)),Ne(e),r.wrap>0&&(r.wrap=-r.wrap),r.pending!==0?he:qu)},Gg=e=>{if(fs(e))return pt;let t=e.state.status;return e.state=null,t===Rr?Fr(e,gg):he},Wg=(e,t)=>{let r=t.length;if(fs(e))return pt;let n=e.state,i=n.wrap;if(i===2||i===1&&n.status!==In||n.lookahead)return pt;if(i===1&&(e.adler=as(e.adler,t,r,0)),n.wrap=0,r>=n.w_size){i===0&&(sr(n.head),n.strstart=0,n.block_start=0,n.insert=0);let d=new Uint8Array(n.w_size);d.set(t.subarray(r-n.w_size,r),0),t=d,r=n.w_size}let s=e.avail_in,o=e.next_in,a=e.input;for(e.avail_in=r,e.next_in=0,e.input=t,Cn(n);n.lookahead>=G;){let d=n.strstart,l=n.lookahead-(G-1);do n.ins_h=cr(n,n.ins_h,n.window[d+G-1]),n.prev[d&n.w_mask]=n.head[n.ins_h],n.head[n.ins_h]=d,d++;while(--l);n.strstart=d,n.lookahead=G-1,Cn(n)}return n.strstart+=n.lookahead,n.block_start=n.strstart,n.insert=n.lookahead,n.lookahead=0,n.match_length=n.prev_length=G-1,n.match_available=0,e.next_in=o,e.input=a,e.avail_in=s,n.wrap=i,he},Xg=Hg,Kg=Zf,$g=$f,Zg=Kf,Yg=Ug,qg=Vg,jg=Gg,Qg=Wg,Jg="pako deflate (from Nodeca project)",ts={deflateInit:Xg,deflateInit2:Kg,deflateReset:$g,deflateResetKeep:Zg,deflateSetHeader:Yg,deflate:qg,deflateEnd:jg,deflateSetDictionary:Qg,deflateInfo:Jg},ey=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),ty=function(e){let t=Array.prototype.slice.call(arguments,1);for(;t.length;){let r=t.shift();if(r){if(typeof r!="object")throw new TypeError(r+"must be non-object");for(let n in r)ey(r,n)&&(e[n]=r[n])}}return e},ry=e=>{let t=0;for(let n=0,i=e.length;n<i;n++)t+=e[n].length;let r=new Uint8Array(t);for(let n=0,i=0,s=e.length;n<s;n++){let o=e[n];r.set(o,i),i+=o.length}return r},ta={assign:ty,flattenChunks:ry},Yf=!0;try{String.fromCharCode.apply(null,new Uint8Array(1))}catch{Yf=!1}var ls=new Uint8Array(256);for(let e=0;e<256;e++)ls[e]=e>=252?6:e>=248?5:e>=240?4:e>=224?3:e>=192?2:1;ls[254]=ls[254]=1;var ny=e=>{if(typeof TextEncoder=="function"&&TextEncoder.prototype.encode)return new TextEncoder().encode(e);let t,r,n,i,s,o=e.length,a=0;for(i=0;i<o;i++)r=e.charCodeAt(i),(r&64512)===55296&&i+1<o&&(n=e.charCodeAt(i+1),(n&64512)===56320&&(r=65536+(r-55296<<10)+(n-56320),i++)),a+=r<128?1:r<2048?2:r<65536?3:4;for(t=new Uint8Array(a),s=0,i=0;s<a;i++)r=e.charCodeAt(i),(r&64512)===55296&&i+1<o&&(n=e.charCodeAt(i+1),(n&64512)===56320&&(r=65536+(r-55296<<10)+(n-56320),i++)),r<128?t[s++]=r:r<2048?(t[s++]=192|r>>>6,t[s++]=128|r&63):r<65536?(t[s++]=224|r>>>12,t[s++]=128|r>>>6&63,t[s++]=128|r&63):(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63,t[s++]=128|r>>>6&63,t[s++]=128|r&63);return t},iy=(e,t)=>{if(t<65534&&e.subarray&&Yf)return String.fromCharCode.apply(null,e.length===t?e:e.subarray(0,t));let r="";for(let n=0;n<t;n++)r+=String.fromCharCode(e[n]);return r},sy=(e,t)=>{let r=t||e.length;if(typeof TextDecoder=="function"&&TextDecoder.prototype.decode)return new TextDecoder().decode(e.subarray(0,t));let n,i,s=new Array(r*2);for(i=0,n=0;n<r;){let o=e[n++];if(o<128){s[i++]=o;continue}let a=ls[o];if(a>4){s[i++]=65533,n+=a-1;continue}for(o&=a===2?31:a===3?15:7;a>1&&n<r;)o=o<<6|e[n++]&63,a--;if(a>1){s[i++]=65533;continue}o<65536?s[i++]=o:(o-=65536,s[i++]=55296|o>>10&1023,s[i++]=56320|o&1023)}return iy(s,i)},oy=(e,t)=>{t=t||e.length,t>e.length&&(t=e.length);let r=t-1;for(;r>=0&&(e[r]&192)===128;)r--;return r<0||r===0?t:r+ls[e[r]]>t?r:t},cs={string2buf:ny,buf2string:sy,utf8border:oy};function ay(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}var qf=ay,jf=Object.prototype.toString,{Z_NO_FLUSH:ly,Z_SYNC_FLUSH:cy,Z_FULL_FLUSH:dy,Z_FINISH:uy,Z_OK:Qo,Z_STREAM_END:fy,Z_DEFAULT_COMPRESSION:hy,Z_DEFAULT_STRATEGY:my,Z_DEFLATED:py}=Dr;function hs(e){this.options=ta.assign({level:hy,method:py,chunkSize:16384,windowBits:15,memLevel:8,strategy:my},e||{});let t=this.options;t.raw&&t.windowBits>0?t.windowBits=-t.windowBits:t.gzip&&t.windowBits>0&&t.windowBits<16&&(t.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new qf,this.strm.avail_out=0;let r=ts.deflateInit2(this.strm,t.level,t.method,t.windowBits,t.memLevel,t.strategy);if(r!==Qo)throw new Error(kr[r]);if(t.header&&ts.deflateSetHeader(this.strm,t.header),t.dictionary){let n;if(typeof t.dictionary=="string"?n=cs.string2buf(t.dictionary):jf.call(t.dictionary)==="[object ArrayBuffer]"?n=new Uint8Array(t.dictionary):n=t.dictionary,r=ts.deflateSetDictionary(this.strm,n),r!==Qo)throw new Error(kr[r]);this._dict_set=!0}}hs.prototype.push=function(e,t){let r=this.strm,n=this.options.chunkSize,i,s;if(this.ended)return!1;for(t===~~t?s=t:s=t===!0?uy:ly,typeof e=="string"?r.input=cs.string2buf(e):jf.call(e)==="[object ArrayBuffer]"?r.input=new Uint8Array(e):r.input=e,r.next_in=0,r.avail_in=r.input.length;;){if(r.avail_out===0&&(r.output=new Uint8Array(n),r.next_out=0,r.avail_out=n),(s===cy||s===dy)&&r.avail_out<=6){this.onData(r.output.subarray(0,r.next_out)),r.avail_out=0;continue}if(i=ts.deflate(r,s),i===fy)return r.next_out>0&&this.onData(r.output.subarray(0,r.next_out)),i=ts.deflateEnd(this.strm),this.onEnd(i),this.ended=!0,i===Qo;if(r.avail_out===0){this.onData(r.output);continue}if(s>0&&r.next_out>0){this.onData(r.output.subarray(0,r.next_out)),r.avail_out=0;continue}if(r.avail_in===0)break}return!0};hs.prototype.onData=function(e){this.chunks.push(e)};hs.prototype.onEnd=function(e){e===Qo&&(this.result=ta.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg};function sc(e,t){let r=new hs(t);if(r.push(e,!0),r.err)throw r.msg||kr[r.err];return r.result}function gy(e,t){return t=t||{},t.raw=!0,sc(e,t)}function yy(e,t){return t=t||{},t.gzip=!0,sc(e,t)}var xy=hs,by=sc,_y=gy,vy=yy,Sy=Dr,wy={Deflate:xy,deflate:by,deflateRaw:_y,gzip:vy,constants:Sy},Ko=16209,Ay=16191,My=function(t,r){let n,i,s,o,a,d,l,c,f,u,h,m,g,p,y,v,b,x,_,A,S,M,L,w,T=t.state;n=t.next_in,L=t.input,i=n+(t.avail_in-5),s=t.next_out,w=t.output,o=s-(r-t.avail_out),a=s+(t.avail_out-257),d=T.dmax,l=T.wsize,c=T.whave,f=T.wnext,u=T.window,h=T.hold,m=T.bits,g=T.lencode,p=T.distcode,y=(1<<T.lenbits)-1,v=(1<<T.distbits)-1;e:do{m<15&&(h+=L[n++]<<m,m+=8,h+=L[n++]<<m,m+=8),b=g[h&y];t:for(;;){if(x=b>>>24,h>>>=x,m-=x,x=b>>>16&255,x===0)w[s++]=b&65535;else if(x&16){_=b&65535,x&=15,x&&(m<x&&(h+=L[n++]<<m,m+=8),_+=h&(1<<x)-1,h>>>=x,m-=x),m<15&&(h+=L[n++]<<m,m+=8,h+=L[n++]<<m,m+=8),b=p[h&v];r:for(;;){if(x=b>>>24,h>>>=x,m-=x,x=b>>>16&255,x&16){if(A=b&65535,x&=15,m<x&&(h+=L[n++]<<m,m+=8,m<x&&(h+=L[n++]<<m,m+=8)),A+=h&(1<<x)-1,A>d){t.msg="invalid distance too far back",T.mode=Ko;break e}if(h>>>=x,m-=x,x=s-o,A>x){if(x=A-x,x>c&&T.sane){t.msg="invalid distance too far back",T.mode=Ko;break e}if(S=0,M=u,f===0){if(S+=l-x,x<_){_-=x;do w[s++]=u[S++];while(--x);S=s-A,M=w}}else if(f<x){if(S+=l+f-x,x-=f,x<_){_-=x;do w[s++]=u[S++];while(--x);if(S=0,f<_){x=f,_-=x;do w[s++]=u[S++];while(--x);S=s-A,M=w}}}else if(S+=f-x,x<_){_-=x;do w[s++]=u[S++];while(--x);S=s-A,M=w}for(;_>2;)w[s++]=M[S++],w[s++]=M[S++],w[s++]=M[S++],_-=3;_&&(w[s++]=M[S++],_>1&&(w[s++]=M[S++]))}else{S=s-A;do w[s++]=w[S++],w[s++]=w[S++],w[s++]=w[S++],_-=3;while(_>2);_&&(w[s++]=w[S++],_>1&&(w[s++]=w[S++]))}}else if((x&64)===0){b=p[(b&65535)+(h&(1<<x)-1)];continue r}else{t.msg="invalid distance code",T.mode=Ko;break e}break}}else if((x&64)===0){b=g[(b&65535)+(h&(1<<x)-1)];continue t}else if(x&32){T.mode=Ay;break e}else{t.msg="invalid literal/length code",T.mode=Ko;break e}break}}while(n<i&&s<a);_=m>>3,n-=_,m-=_<<3,h&=(1<<m)-1,t.next_in=n,t.next_out=s,t.avail_in=n<i?5+(i-n):5-(n-i),t.avail_out=s<a?257+(a-s):257-(s-a),T.hold=h,T.bits=m},Ln=15,Qu=852,Ju=592,ef=0,Bl=1,tf=2,Ey=new Uint16Array([3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0]),Ly=new Uint8Array([16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78]),Ty=new Uint16Array([1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0]),Iy=new Uint8Array([16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64]),Cy=(e,t,r,n,i,s,o,a)=>{let d=a.bits,l=0,c=0,f=0,u=0,h=0,m=0,g=0,p=0,y=0,v=0,b,x,_,A,S,M=null,L,w=new Uint16Array(Ln+1),T=new Uint16Array(Ln+1),k=null,U,C,Z;for(l=0;l<=Ln;l++)w[l]=0;for(c=0;c<n;c++)w[t[r+c]]++;for(h=d,u=Ln;u>=1&&w[u]===0;u--);if(h>u&&(h=u),u===0)return i[s++]=1<<24|64<<16|0,i[s++]=1<<24|64<<16|0,a.bits=1,0;for(f=1;f<u&&w[f]===0;f++);for(h<f&&(h=f),p=1,l=1;l<=Ln;l++)if(p<<=1,p-=w[l],p<0)return-1;if(p>0&&(e===ef||u!==1))return-1;for(T[1]=0,l=1;l<Ln;l++)T[l+1]=T[l]+w[l];for(c=0;c<n;c++)t[r+c]!==0&&(o[T[t[r+c]]++]=c);if(e===ef?(M=k=o,L=20):e===Bl?(M=Ey,k=Ly,L=257):(M=Ty,k=Iy,L=0),v=0,c=0,l=f,S=s,m=h,g=0,_=-1,y=1<<h,A=y-1,e===Bl&&y>Qu||e===tf&&y>Ju)return 1;for(;;){U=l-g,o[c]+1<L?(C=0,Z=o[c]):o[c]>=L?(C=k[o[c]-L],Z=M[o[c]-L]):(C=96,Z=0),b=1<<l-g,x=1<<m,f=x;do x-=b,i[S+(v>>g)+x]=U<<24|C<<16|Z|0;while(x!==0);for(b=1<<l-1;v&b;)b>>=1;if(b!==0?(v&=b-1,v+=b):v=0,c++,--w[l]===0){if(l===u)break;l=t[r+o[c]]}if(l>h&&(v&A)!==_){for(g===0&&(g=h),S+=f,m=l-g,p=1<<m;m+g<u&&(p-=w[m+g],!(p<=0));)m++,p<<=1;if(y+=1<<m,e===Bl&&y>Qu||e===tf&&y>Ju)return 1;_=v&A,i[_]=h<<24|m<<16|S-s|0}}return v!==0&&(i[S+v]=l-g<<24|64<<16|0),a.bits=h,0},rs=Cy,Ry=0,Qf=1,Jf=2,{Z_FINISH:rf,Z_BLOCK:Fy,Z_TREES:$o,Z_OK:Pr,Z_STREAM_END:ky,Z_NEED_DICT:zy,Z_STREAM_ERROR:Qe,Z_DATA_ERROR:e0,Z_MEM_ERROR:t0,Z_BUF_ERROR:Py,Z_DEFLATED:nf}=Dr,ra=16180,sf=16181,of=16182,af=16183,lf=16184,cf=16185,df=16186,uf=16187,ff=16188,hf=16189,Jo=16190,Rt=16191,Ol=16192,mf=16193,Nl=16194,pf=16195,gf=16196,yf=16197,xf=16198,Zo=16199,Yo=16200,bf=16201,_f=16202,vf=16203,Sf=16204,wf=16205,Ul=16206,Af=16207,Mf=16208,ie=16209,r0=16210,n0=16211,Dy=852,By=592,Oy=15,Ny=Oy,Ef=e=>(e>>>24&255)+(e>>>8&65280)+((e&65280)<<8)+((e&255)<<24);function Uy(){this.strm=null,this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new Uint16Array(320),this.work=new Uint16Array(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}var Br=e=>{if(!e)return 1;let t=e.state;return!t||t.strm!==e||t.mode<ra||t.mode>n0?1:0},i0=e=>{if(Br(e))return Qe;let t=e.state;return e.total_in=e.total_out=t.total=0,e.msg="",t.wrap&&(e.adler=t.wrap&1),t.mode=ra,t.last=0,t.havedict=0,t.flags=-1,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new Int32Array(Dy),t.distcode=t.distdyn=new Int32Array(By),t.sane=1,t.back=-1,Pr},s0=e=>{if(Br(e))return Qe;let t=e.state;return t.wsize=0,t.whave=0,t.wnext=0,i0(e)},o0=(e,t)=>{let r;if(Br(e))return Qe;let n=e.state;return t<0?(r=0,t=-t):(r=(t>>4)+5,t<48&&(t&=15)),t&&(t<8||t>15)?Qe:(n.window!==null&&n.wbits!==t&&(n.window=null),n.wrap=r,n.wbits=t,s0(e))},a0=(e,t)=>{if(!e)return Qe;let r=new Uy;e.state=r,r.strm=e,r.window=null,r.mode=ra;let n=o0(e,t);return n!==Pr&&(e.state=null),n},Hy=e=>a0(e,Ny),Lf=!0,Hl,Vl,Vy=e=>{if(Lf){Hl=new Int32Array(512),Vl=new Int32Array(32);let t=0;for(;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(rs(Qf,e.lens,0,288,Hl,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;rs(Jf,e.lens,0,32,Vl,0,e.work,{bits:5}),Lf=!1}e.lencode=Hl,e.lenbits=9,e.distcode=Vl,e.distbits=5},l0=(e,t,r,n)=>{let i,s=e.state;return s.window===null&&(s.wsize=1<<s.wbits,s.wnext=0,s.whave=0,s.window=new Uint8Array(s.wsize)),n>=s.wsize?(s.window.set(t.subarray(r-s.wsize,r),0),s.wnext=0,s.whave=s.wsize):(i=s.wsize-s.wnext,i>n&&(i=n),s.window.set(t.subarray(r-n,r-n+i),s.wnext),n-=i,n?(s.window.set(t.subarray(r-n,r),0),s.wnext=n,s.whave=s.wsize):(s.wnext+=i,s.wnext===s.wsize&&(s.wnext=0),s.whave<s.wsize&&(s.whave+=i))),0},Gy=(e,t)=>{let r,n,i,s,o,a,d,l,c,f,u,h,m,g,p=0,y,v,b,x,_,A,S,M,L=new Uint8Array(4),w,T,k=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);if(Br(e)||!e.output||!e.input&&e.avail_in!==0)return Qe;r=e.state,r.mode===Rt&&(r.mode=Ol),o=e.next_out,i=e.output,d=e.avail_out,s=e.next_in,n=e.input,a=e.avail_in,l=r.hold,c=r.bits,f=a,u=d,M=Pr;e:for(;;)switch(r.mode){case ra:if(r.wrap===0){r.mode=Ol;break}for(;c<16;){if(a===0)break e;a--,l+=n[s++]<<c,c+=8}if(r.wrap&2&&l===35615){r.wbits===0&&(r.wbits=15),r.check=0,L[0]=l&255,L[1]=l>>>8&255,r.check=fe(r.check,L,2,0),l=0,c=0,r.mode=sf;break}if(r.head&&(r.head.done=!1),!(r.wrap&1)||(((l&255)<<8)+(l>>8))%31){e.msg="incorrect header check",r.mode=ie;break}if((l&15)!==nf){e.msg="unknown compression method",r.mode=ie;break}if(l>>>=4,c-=4,S=(l&15)+8,r.wbits===0&&(r.wbits=S),S>15||S>r.wbits){e.msg="invalid window size",r.mode=ie;break}r.dmax=1<<r.wbits,r.flags=0,e.adler=r.check=1,r.mode=l&512?hf:Rt,l=0,c=0;break;case sf:for(;c<16;){if(a===0)break e;a--,l+=n[s++]<<c,c+=8}if(r.flags=l,(r.flags&255)!==nf){e.msg="unknown compression method",r.mode=ie;break}if(r.flags&57344){e.msg="unknown header flags set",r.mode=ie;break}r.head&&(r.head.text=l>>8&1),r.flags&512&&r.wrap&4&&(L[0]=l&255,L[1]=l>>>8&255,r.check=fe(r.check,L,2,0)),l=0,c=0,r.mode=of;case of:for(;c<32;){if(a===0)break e;a--,l+=n[s++]<<c,c+=8}r.head&&(r.head.time=l),r.flags&512&&r.wrap&4&&(L[0]=l&255,L[1]=l>>>8&255,L[2]=l>>>16&255,L[3]=l>>>24&255,r.check=fe(r.check,L,4,0)),l=0,c=0,r.mode=af;case af:for(;c<16;){if(a===0)break e;a--,l+=n[s++]<<c,c+=8}r.head&&(r.head.xflags=l&255,r.head.os=l>>8),r.flags&512&&r.wrap&4&&(L[0]=l&255,L[1]=l>>>8&255,r.check=fe(r.check,L,2,0)),l=0,c=0,r.mode=lf;case lf:if(r.flags&1024){for(;c<16;){if(a===0)break e;a--,l+=n[s++]<<c,c+=8}r.length=l,r.head&&(r.head.extra_len=l),r.flags&512&&r.wrap&4&&(L[0]=l&255,L[1]=l>>>8&255,r.check=fe(r.check,L,2,0)),l=0,c=0}else r.head&&(r.head.extra=null);r.mode=cf;case cf:if(r.flags&1024&&(h=r.length,h>a&&(h=a),h&&(r.head&&(S=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Uint8Array(r.head.extra_len)),r.head.extra.set(n.subarray(s,s+h),S)),r.flags&512&&r.wrap&4&&(r.check=fe(r.check,n,h,s)),a-=h,s+=h,r.length-=h),r.length))break e;r.length=0,r.mode=df;case df:if(r.flags&2048){if(a===0)break e;h=0;do S=n[s+h++],r.head&&S&&r.length<65536&&(r.head.name+=String.fromCharCode(S));while(S&&h<a);if(r.flags&512&&r.wrap&4&&(r.check=fe(r.check,n,h,s)),a-=h,s+=h,S)break e}else r.head&&(r.head.name=null);r.length=0,r.mode=uf;case uf:if(r.flags&4096){if(a===0)break e;h=0;do S=n[s+h++],r.head&&S&&r.length<65536&&(r.head.comment+=String.fromCharCode(S));while(S&&h<a);if(r.flags&512&&r.wrap&4&&(r.check=fe(r.check,n,h,s)),a-=h,s+=h,S)break e}else r.head&&(r.head.comment=null);r.mode=ff;case ff:if(r.flags&512){for(;c<16;){if(a===0)break e;a--,l+=n[s++]<<c,c+=8}if(r.wrap&4&&l!==(r.check&65535)){e.msg="header crc mismatch",r.mode=ie;break}l=0,c=0}r.head&&(r.head.hcrc=r.flags>>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=Rt;break;case hf:for(;c<32;){if(a===0)break e;a--,l+=n[s++]<<c,c+=8}e.adler=r.check=Ef(l),l=0,c=0,r.mode=Jo;case Jo:if(r.havedict===0)return e.next_out=o,e.avail_out=d,e.next_in=s,e.avail_in=a,r.hold=l,r.bits=c,zy;e.adler=r.check=1,r.mode=Rt;case Rt:if(t===Fy||t===$o)break e;case Ol:if(r.last){l>>>=c&7,c-=c&7,r.mode=Ul;break}for(;c<3;){if(a===0)break e;a--,l+=n[s++]<<c,c+=8}switch(r.last=l&1,l>>>=1,c-=1,l&3){case 0:r.mode=mf;break;case 1:if(Vy(r),r.mode=Zo,t===$o){l>>>=2,c-=2;break e}break;case 2:r.mode=gf;break;case 3:e.msg="invalid block type",r.mode=ie}l>>>=2,c-=2;break;case mf:for(l>>>=c&7,c-=c&7;c<32;){if(a===0)break e;a--,l+=n[s++]<<c,c+=8}if((l&65535)!==(l>>>16^65535)){e.msg="invalid stored block lengths",r.mode=ie;break}if(r.length=l&65535,l=0,c=0,r.mode=Nl,t===$o)break e;case Nl:r.mode=pf;case pf:if(h=r.length,h){if(h>a&&(h=a),h>d&&(h=d),h===0)break e;i.set(n.subarray(s,s+h),o),a-=h,s+=h,d-=h,o+=h,r.length-=h;break}r.mode=Rt;break;case gf:for(;c<14;){if(a===0)break e;a--,l+=n[s++]<<c,c+=8}if(r.nlen=(l&31)+257,l>>>=5,c-=5,r.ndist=(l&31)+1,l>>>=5,c-=5,r.ncode=(l&15)+4,l>>>=4,c-=4,r.nlen>286||r.ndist>30){e.msg="too many length or distance symbols",r.mode=ie;break}r.have=0,r.mode=yf;case yf:for(;r.have<r.ncode;){for(;c<3;){if(a===0)break e;a--,l+=n[s++]<<c,c+=8}r.lens[k[r.have++]]=l&7,l>>>=3,c-=3}for(;r.have<19;)r.lens[k[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,w={bits:r.lenbits},M=rs(Ry,r.lens,0,19,r.lencode,0,r.work,w),r.lenbits=w.bits,M){e.msg="invalid code lengths set",r.mode=ie;break}r.have=0,r.mode=xf;case xf:for(;r.have<r.nlen+r.ndist;){for(;p=r.lencode[l&(1<<r.lenbits)-1],y=p>>>24,v=p>>>16&255,b=p&65535,!(y<=c);){if(a===0)break e;a--,l+=n[s++]<<c,c+=8}if(b<16)l>>>=y,c-=y,r.lens[r.have++]=b;else{if(b===16){for(T=y+2;c<T;){if(a===0)break e;a--,l+=n[s++]<<c,c+=8}if(l>>>=y,c-=y,r.have===0){e.msg="invalid bit length repeat",r.mode=ie;break}S=r.lens[r.have-1],h=3+(l&3),l>>>=2,c-=2}else if(b===17){for(T=y+3;c<T;){if(a===0)break e;a--,l+=n[s++]<<c,c+=8}l>>>=y,c-=y,S=0,h=3+(l&7),l>>>=3,c-=3}else{for(T=y+7;c<T;){if(a===0)break e;a--,l+=n[s++]<<c,c+=8}l>>>=y,c-=y,S=0,h=11+(l&127),l>>>=7,c-=7}if(r.have+h>r.nlen+r.ndist){e.msg="invalid bit length repeat",r.mode=ie;break}for(;h--;)r.lens[r.have++]=S}}if(r.mode===ie)break;if(r.lens[256]===0){e.msg="invalid code -- missing end-of-block",r.mode=ie;break}if(r.lenbits=9,w={bits:r.lenbits},M=rs(Qf,r.lens,0,r.nlen,r.lencode,0,r.work,w),r.lenbits=w.bits,M){e.msg="invalid literal/lengths set",r.mode=ie;break}if(r.distbits=6,r.distcode=r.distdyn,w={bits:r.distbits},M=rs(Jf,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,w),r.distbits=w.bits,M){e.msg="invalid distances set",r.mode=ie;break}if(r.mode=Zo,t===$o)break e;case Zo:r.mode=Yo;case Yo:if(a>=6&&d>=258){e.next_out=o,e.avail_out=d,e.next_in=s,e.avail_in=a,r.hold=l,r.bits=c,My(e,u),o=e.next_out,i=e.output,d=e.avail_out,s=e.next_in,n=e.input,a=e.avail_in,l=r.hold,c=r.bits,r.mode===Rt&&(r.back=-1);break}for(r.back=0;p=r.lencode[l&(1<<r.lenbits)-1],y=p>>>24,v=p>>>16&255,b=p&65535,!(y<=c);){if(a===0)break e;a--,l+=n[s++]<<c,c+=8}if(v&&(v&240)===0){for(x=y,_=v,A=b;p=r.lencode[A+((l&(1<<x+_)-1)>>x)],y=p>>>24,v=p>>>16&255,b=p&65535,!(x+y<=c);){if(a===0)break e;a--,l+=n[s++]<<c,c+=8}l>>>=x,c-=x,r.back+=x}if(l>>>=y,c-=y,r.back+=y,r.length=b,v===0){r.mode=wf;break}if(v&32){r.back=-1,r.mode=Rt;break}if(v&64){e.msg="invalid literal/length code",r.mode=ie;break}r.extra=v&15,r.mode=bf;case bf:if(r.extra){for(T=r.extra;c<T;){if(a===0)break e;a--,l+=n[s++]<<c,c+=8}r.length+=l&(1<<r.extra)-1,l>>>=r.extra,c-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=_f;case _f:for(;p=r.distcode[l&(1<<r.distbits)-1],y=p>>>24,v=p>>>16&255,b=p&65535,!(y<=c);){if(a===0)break e;a--,l+=n[s++]<<c,c+=8}if((v&240)===0){for(x=y,_=v,A=b;p=r.distcode[A+((l&(1<<x+_)-1)>>x)],y=p>>>24,v=p>>>16&255,b=p&65535,!(x+y<=c);){if(a===0)break e;a--,l+=n[s++]<<c,c+=8}l>>>=x,c-=x,r.back+=x}if(l>>>=y,c-=y,r.back+=y,v&64){e.msg="invalid distance code",r.mode=ie;break}r.offset=b,r.extra=v&15,r.mode=vf;case vf:if(r.extra){for(T=r.extra;c<T;){if(a===0)break e;a--,l+=n[s++]<<c,c+=8}r.offset+=l&(1<<r.extra)-1,l>>>=r.extra,c-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){e.msg="invalid distance too far back",r.mode=ie;break}r.mode=Sf;case Sf:if(d===0)break e;if(h=u-d,r.offset>h){if(h=r.offset-h,h>r.whave&&r.sane){e.msg="invalid distance too far back",r.mode=ie;break}h>r.wnext?(h-=r.wnext,m=r.wsize-h):m=r.wnext-h,h>r.length&&(h=r.length),g=r.window}else g=i,m=o-r.offset,h=r.length;h>d&&(h=d),d-=h,r.length-=h;do i[o++]=g[m++];while(--h);r.length===0&&(r.mode=Yo);break;case wf:if(d===0)break e;i[o++]=r.length,d--,r.mode=Yo;break;case Ul:if(r.wrap){for(;c<32;){if(a===0)break e;a--,l|=n[s++]<<c,c+=8}if(u-=d,e.total_out+=u,r.total+=u,r.wrap&4&&u&&(e.adler=r.check=r.flags?fe(r.check,i,u,o-u):as(r.check,i,u,o-u)),u=d,r.wrap&4&&(r.flags?l:Ef(l))!==r.check){e.msg="incorrect data check",r.mode=ie;break}l=0,c=0}r.mode=Af;case Af:if(r.wrap&&r.flags){for(;c<32;){if(a===0)break e;a--,l+=n[s++]<<c,c+=8}if(r.wrap&4&&l!==(r.total&4294967295)){e.msg="incorrect length check",r.mode=ie;break}l=0,c=0}r.mode=Mf;case Mf:M=ky;break e;case ie:M=e0;break e;case r0:return t0;case n0:default:return Qe}return e.next_out=o,e.avail_out=d,e.next_in=s,e.avail_in=a,r.hold=l,r.bits=c,(r.wsize||u!==e.avail_out&&r.mode<ie&&(r.mode<Ul||t!==rf))&&l0(e,e.output,e.next_out,u-e.avail_out),f-=e.avail_in,u-=e.avail_out,e.total_in+=f,e.total_out+=u,r.total+=u,r.wrap&4&&u&&(e.adler=r.check=r.flags?fe(r.check,i,u,e.next_out-u):as(r.check,i,u,e.next_out-u)),e.data_type=r.bits+(r.last?64:0)+(r.mode===Rt?128:0)+(r.mode===Zo||r.mode===Nl?256:0),(f===0&&u===0||t===rf)&&M===Pr&&(M=Py),M},Wy=e=>{if(Br(e))return Qe;let t=e.state;return t.window&&(t.window=null),e.state=null,Pr},Xy=(e,t)=>{if(Br(e))return Qe;let r=e.state;return(r.wrap&2)===0?Qe:(r.head=t,t.done=!1,Pr)},Ky=(e,t)=>{let r=t.length,n,i,s;return Br(e)||(n=e.state,n.wrap!==0&&n.mode!==Jo)?Qe:n.mode===Jo&&(i=1,i=as(i,t,r,0),i!==n.check)?e0:(s=l0(e,t,r,r),s?(n.mode=r0,t0):(n.havedict=1,Pr))},$y=s0,Zy=o0,Yy=i0,qy=Hy,jy=a0,Qy=Gy,Jy=Wy,ex=Xy,tx=Ky,rx="pako inflate (from Nodeca project)",kt={inflateReset:$y,inflateReset2:Zy,inflateResetKeep:Yy,inflateInit:qy,inflateInit2:jy,inflate:Qy,inflateEnd:Jy,inflateGetHeader:ex,inflateSetDictionary:tx,inflateInfo:rx};function nx(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}var ix=nx,c0=Object.prototype.toString,{Z_NO_FLUSH:sx,Z_FINISH:ox,Z_OK:ds,Z_STREAM_END:Gl,Z_NEED_DICT:Wl,Z_STREAM_ERROR:ax,Z_DATA_ERROR:Tf,Z_MEM_ERROR:lx}=Dr;function ms(e){this.options=ta.assign({chunkSize:1024*64,windowBits:15,to:""},e||{});let t=this.options;t.raw&&t.windowBits>=0&&t.windowBits<16&&(t.windowBits=-t.windowBits,t.windowBits===0&&(t.windowBits=-15)),t.windowBits>=0&&t.windowBits<16&&!(e&&e.windowBits)&&(t.windowBits+=32),t.windowBits>15&&t.windowBits<48&&(t.windowBits&15)===0&&(t.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new qf,this.strm.avail_out=0;let r=kt.inflateInit2(this.strm,t.windowBits);if(r!==ds)throw new Error(kr[r]);if(this.header=new ix,kt.inflateGetHeader(this.strm,this.header),t.dictionary&&(typeof t.dictionary=="string"?t.dictionary=cs.string2buf(t.dictionary):c0.call(t.dictionary)==="[object ArrayBuffer]"&&(t.dictionary=new Uint8Array(t.dictionary)),t.raw&&(r=kt.inflateSetDictionary(this.strm,t.dictionary),r!==ds)))throw new Error(kr[r])}ms.prototype.push=function(e,t){let r=this.strm,n=this.options.chunkSize,i=this.options.dictionary,s,o,a;if(this.ended)return!1;for(t===~~t?o=t:o=t===!0?ox:sx,c0.call(e)==="[object ArrayBuffer]"?r.input=new Uint8Array(e):r.input=e,r.next_in=0,r.avail_in=r.input.length;;){for(r.avail_out===0&&(r.output=new Uint8Array(n),r.next_out=0,r.avail_out=n),s=kt.inflate(r,o),s===Wl&&i&&(s=kt.inflateSetDictionary(r,i),s===ds?s=kt.inflate(r,o):s===Tf&&(s=Wl));r.avail_in>0&&s===Gl&&r.state.wrap>0&&e[r.next_in]!==0;)kt.inflateReset(r),s=kt.inflate(r,o);switch(s){case ax:case Tf:case Wl:case lx:return this.onEnd(s),this.ended=!0,!1}if(a=r.avail_out,r.next_out&&(r.avail_out===0||s===Gl))if(this.options.to==="string"){let d=cs.utf8border(r.output,r.next_out),l=r.next_out-d,c=cs.buf2string(r.output,d);r.next_out=l,r.avail_out=n-l,l&&r.output.set(r.output.subarray(d,d+l),0),this.onData(c)}else this.onData(r.output.length===r.next_out?r.output:r.output.subarray(0,r.next_out));if(!(s===ds&&a===0)){if(s===Gl)return s=kt.inflateEnd(this.strm),this.onEnd(s),this.ended=!0,!0;if(r.avail_in===0)break}}return!0};ms.prototype.onData=function(e){this.chunks.push(e)};ms.prototype.onEnd=function(e){e===ds&&(this.options.to==="string"?this.result=this.chunks.join(""):this.result=ta.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg};function oc(e,t){let r=new ms(t);if(r.push(e),r.err)throw r.msg||kr[r.err];return r.result}function cx(e,t){return t=t||{},t.raw=!0,oc(e,t)}var dx=ms,ux=oc,fx=cx,hx=oc,mx=Dr,px={Inflate:dx,inflate:ux,inflateRaw:fx,ungzip:hx,constants:mx},{Deflate:gx,deflate:yx,deflateRaw:xx,gzip:bx}=wy,{Inflate:_x,inflate:vx,inflateRaw:Sx,ungzip:wx}=px,Ax=gx,Mx=yx,Ex=xx,Lx=bx,Tx=_x,Ix=vx,Cx=Sx,Rx=wx,Fx=Dr,ac={Deflate:Ax,deflate:Mx,deflateRaw:Ex,gzip:Lx,Inflate:Tx,inflate:Ix,inflateRaw:Cx,ungzip:Rx,constants:Fx};var zn=class zn{constructor(t=zn.INITIAL_SIZE){this.buffer=new Uint8Array(t),this.readOffset=0,this.writeOffset=0}append(t){let r=t instanceof Uint8Array?t:new Uint8Array(t),n=this.writeOffset+r.length;n>this.buffer.length&&this.grow(n),this.buffer.set(r,this.writeOffset),this.writeOffset+=r.length}hasBytes(t){return this.writeOffset-this.readOffset>=t}available(){return this.writeOffset-this.readOffset}readByte(){if(!this.hasBytes(1))throw new Error("Buffer underflow");return this.buffer[this.readOffset++]}readShort(){if(!this.hasBytes(2))throw new Error("Buffer underflow");let t=this.buffer[this.readOffset]|this.buffer[this.readOffset+1]<<8;return this.readOffset+=2,t>32767?t-65536:t}readLong(){if(!this.hasBytes(4))throw new Error("Buffer underflow");let t=this.buffer[this.readOffset]|this.buffer[this.readOffset+1]<<8|this.buffer[this.readOffset+2]<<16|this.buffer[this.readOffset+3]<<24;return this.readOffset+=4,t}readFloat(){if(!this.hasBytes(4))throw new Error("Buffer underflow");let r=new DataView(this.buffer.buffer,this.buffer.byteOffset+this.readOffset,4).getFloat32(0,!0);return this.readOffset+=4,r}readString(){let t=Math.min(zn.MAX_STRING_LENGTH,this.writeOffset-this.readOffset),r=0;for(;r<t&&this.buffer[this.readOffset+r]!==0;)r++;if(r>=t)throw this.writeOffset-this.readOffset<=t?new Error("Buffer underflow"):new Error("String exceeds max length");let n=this.buffer.slice(this.readOffset,this.readOffset+r);return this.readOffset+=r+1,new TextDecoder("latin1").decode(n)}peekBytes(t){if(!this.hasBytes(t))throw new Error("Buffer underflow");return this.buffer.slice(this.readOffset,this.readOffset+t)}readBytes(t){if(!this.hasBytes(t))throw new Error("Buffer underflow");let r=this.buffer.slice(this.readOffset,this.readOffset+t);return this.readOffset+=t,r}readData(t){return this.readBytes(t)}getReadPosition(){return this.readOffset}getWritePosition(){return this.writeOffset}setReadPosition(t){if(t<0||t>this.writeOffset)throw new Error("Invalid read position");this.readOffset=t}grow(t){let r=t?Math.max(t,this.buffer.length*2):this.buffer.length*2,n=new Uint8Array(r);n.set(this.buffer),this.buffer=n}compact(){if(this.readOffset===0)return;let t=this.writeOffset-this.readOffset;if(t===0){this.readOffset=0,this.writeOffset=0;return}this.buffer.copyWithin(0,this.readOffset,this.writeOffset),this.readOffset=0,this.writeOffset=t}getCapacity(){return this.buffer.length}reset(){this.readOffset=0,this.writeOffset=0}};zn.INITIAL_SIZE=64*1024,zn.MAX_STRING_LENGTH=2048;var na=zn;var Pn=2023,cc=1,dc=2,uc=4,fc=8,hc=16,mc=32,pc=64,d0=128,kx=256,gc=512,yc=1024,xc=2048,ia=4096,bc=8192,sa=16384,zx=32768,oa=65536,_c=1<<17,aa=1<<18,la=1<<19,vc=1<<20,Sc=1<<21,wc=1<<22,Px=1<<23,Ac=1<<24,ca=1<<25,Mc=1<<26,Ec=1<<27,Lc=1<<28,Tc=1<<29,Ic=1<<30,Dx=-2147483648,Cc=1,Rc=2,Fc=4;var Bx=1,Ox=2,Nx=128,Or=()=>({number:0,modelindex:0,modelindex2:0,modelindex3:0,modelindex4:0,frame:0,skinnum:0,effects:0,renderfx:0,origin:{x:0,y:0,z:0},old_origin:{x:0,y:0,z:0},angles:{x:0,y:0,z:0},sound:0,event:0,solid:0,bits:0,bitsHigh:0,alpha:0,scale:0,instanceBits:0,loopVolume:0,loopAttenuation:0,owner:0,oldFrame:0}),ps=()=>({pm_type:0,origin:{x:0,y:0,z:0},velocity:{x:0,y:0,z:0},pm_time:0,pm_flags:0,gravity:0,delta_angles:{x:0,y:0,z:0},viewoffset:{x:0,y:0,z:0},viewangles:{x:0,y:0,z:0},kick_angles:{x:0,y:0,z:0},gun_index:0,gun_frame:0,gun_offset:{x:0,y:0,z:0},gun_angles:{x:0,y:0,z:0},blend:[0,0,0,0],fov:0,rdflags:0,stats:new Array(32).fill(0),gunskin:0,gunrate:0,damage_blend:[0,0,0,0],team_id:0}),lc=class extends na{constructor(r){super(0);this.stream=r}readByte(){return this.stream.readByte()}readShort(){return this.stream.readShort()}readLong(){return this.stream.readLong()}readFloat(){return this.stream.readFloat()}readString(){return this.stream.readString()}readData(r){return this.stream.readData(r)}hasBytes(r){return this.stream.hasMore()}available(){return this.stream.getRemaining()}getReadPosition(){return this.stream.getPosition()}peekBytes(r){throw new Error("peekBytes not implemented for BinaryStreamAdapter")}},zt=class e{constructor(t,r,n=!1){this.protocolVersion=0;this.isDemo=Bx;this.strictMode=!1;this.errorCount=0;t instanceof Wr?this.stream=new lc(t):this.stream=t,this.handler=r,this.strictMode=n}setProtocolVersion(t){this.protocolVersion=t}getProtocolVersion(){return this.protocolVersion}getErrorCount(){return this.errorCount}translateCommand(t){if(this.protocolVersion===0)return t===7?F.serverdata:t===12?F.serverdata:t;if(this.protocolVersion===Pn)return t;if(this.protocolVersion===25||this.protocolVersion===26){if(t===0)return F.bad;let r=t+5;return r>=F.nop&&r<=F.frame?r:F.bad}return this.protocolVersion===34?t<=F.frame?t:F.bad:t}parseMessage(){for(;this.stream.hasBytes(1);){let t=this.stream.getReadPosition(),r=-1;try{if(r=this.stream.readByte(),r===-1)break;let n=r;switch(r=this.translateCommand(r),r){case F.bad:return;case F.nop:break;case F.disconnect:this.handler?.onDisconnect&&this.handler.onDisconnect();break;case F.reconnect:this.handler?.onReconnect&&this.handler.onReconnect();break;case F.print:this.parsePrint();break;case F.serverdata:this.parseServerData();break;case F.configstring:this.parseConfigString();break;case F.spawnbaseline:this.parseSpawnBaseline();break;case F.centerprint:this.parseCenterPrint();break;case F.download:this.parseDownload();break;case F.frame:this.parseFrame();break;case F.packetentities:this.parsePacketEntities(!1);break;case F.deltapacketentities:this.parsePacketEntities(!0);break;case F.playerinfo:this.parsePlayerState();break;case F.stufftext:this.parseStuffText();break;case F.layout:this.parseLayout();break;case F.inventory:this.parseInventory();break;case F.sound:this.parseSound();break;case F.muzzleflash:this.parseMuzzleFlash();break;case F.muzzleflash2:this.parseMuzzleFlash2();break;case F.temp_entity:this.parseTempEntity();break;case F.splitclient:this.parseSplitClient();break;case F.configblast:this.parseConfigBlast();break;case F.spawnbaselineblast:this.parseSpawnBaselineBlast();break;case F.level_restart:this.handler?.onLevelRestart&&this.handler.onLevelRestart();break;case F.damage:this.parseDamage();break;case F.locprint:this.parseLocPrint();break;case F.fog:this.parseFog();break;case F.waitingforplayers:this.parseWaitingForPlayers();break;case F.bot_chat:this.parseBotChat();break;case F.poi:this.parsePoi();break;case F.help_path:this.parseHelpPath();break;case F.muzzleflash3:this.parseMuzzleFlash3();break;case F.achievement:this.parseAchievement();break;default:let i=`Unknown server command: ${n} (translated: ${r}) at offset ${t}`;if(this.strictMode)throw new Error(i);console.warn(i),this.errorCount++;return}}catch(n){let i=n.message;if(i==="Buffer underflow"||i.includes("StreamingBuffer")){try{this.stream.setReadPosition(t)}catch(o){console.error("Failed to rollback stream position",o)}return}let s=`offset ${t}, cmd ${r}, protocol ${this.protocolVersion}`;if(console.warn(`Error parsing command ${r} (${s}): ${i}`),this.errorCount++,this.strictMode)throw n;return}}}readAngle16(){return this.stream.readShort()*(360/65536)}readCoord(){return this.stream.readShort()*.125}readAngle(){return this.stream.readByte()*(360/256)}readPos(t){t.x=this.stream.readShort()*.125,t.y=this.stream.readShort()*.125,t.z=this.stream.readShort()*.125}readDir(t){let r=this.stream.readByte();if(r>=Hr.length)t.x=0,t.y=0,t.z=0;else{let n=Hr[r];t.x=n[0],t.y=n[1],t.z=n[2]}}parsePrint(){let t=this.stream.readByte(),r=this.stream.readString();this.handler&&this.handler.onPrint(t,r)}parseStuffText(){let t=this.stream.readString();this.handler&&this.handler.onStuffText(t)}parseLayout(){let t=this.stream.readString();this.handler&&this.handler.onLayout(t)}parseCenterPrint(){let t=this.stream.readString();this.handler&&this.handler.onCenterPrint(t)}parseServerData(){if(this.protocolVersion=this.stream.readLong(),this.protocolVersion===Pn){let t=this.stream.readLong(),r=this.stream.readByte();this.isDemo=r;let n=this.stream.readByte(),i=this.stream.readString(),s=this.stream.readShort();if(s===-2){let a=this.stream.readShort();for(let d=0;d<a;d++)this.stream.readShort();s=0}else s===-1&&(s=-1);let o=this.stream.readString();this.handler&&this.handler.onServerData(this.protocolVersion,t,0,i,s,o,n,r)}else{let t=this.stream.readLong(),r=this.stream.readByte();this.isDemo=r;let n=this.stream.readString(),i=this.stream.readShort(),s=this.stream.readString();this.handler&&this.handler.onServerData(this.protocolVersion,t,r,n,i,s)}}parseConfigString(){let t=this.stream.readShort(),r=this.stream.readString();this.handler&&this.handler.onConfigString(t,r)}parseSplitClient(){let t=this.stream.readByte();this.handler?.onSplitClient&&this.handler.onSplitClient(t)}parseConfigBlast(){let t=this.stream.readShort(),r=this.stream.readShort(),n=this.stream.readData(t);try{let i=ac.inflate(n),s=new Wr(i.buffer);for(;s.hasMore();){let o=s.readUShort(),a=s.readString();this.handler&&this.handler.onConfigString(o,a)}}catch(i){console.error("svc_configblast error",i)}}parseSpawnBaselineBlast(){let t=this.stream.readShort(),r=this.stream.readShort(),n=this.stream.readData(t);try{let i=ac.inflate(n),s=new Wr(i.buffer),o=new e(s,this.handler,this.strictMode);for(o.setProtocolVersion(this.protocolVersion);s.hasMore();)o.parseSpawnBaseline()}catch(i){console.error("svc_spawnbaselineblast error",i)}}parseLocPrint(){let t=this.stream.readByte(),r=this.stream.readString(),n=this.stream.readByte(),i=[];for(let s=0;s<n;s++)i.push(this.stream.readString());this.handler?.onLocPrint&&this.handler.onLocPrint(t,r,i)}parseWaitingForPlayers(){let t=this.stream.readByte();this.handler?.onWaitingForPlayers&&this.handler.onWaitingForPlayers(t)}parseBotChat(){let t=this.stream.readString(),r=this.stream.readShort(),n=this.stream.readString();this.handler?.onBotChat&&this.handler.onBotChat(n)}parsePoi(){let t=this.stream.readShort(),r=this.stream.readShort(),n={x:0,y:0,z:0};this.readPos(n);let i=this.stream.readShort(),s=this.stream.readByte(),o=this.stream.readByte();this.handler?.onPoi&&this.handler.onPoi(o,n)}parseHelpPath(){let t=this.stream.readByte(),r={x:0,y:0,z:0};this.readPos(r);let n={x:0,y:0,z:0};this.readDir(n),this.handler?.onHelpPath&&this.handler.onHelpPath(r)}parseAchievement(){let t=this.stream.readString();this.handler?.onAchievement&&this.handler.onAchievement(t)}parseDownload(){let t=this.stream.readShort(),r=this.stream.readByte(),n;t>0&&(n=this.stream.readData(t)),this.handler&&this.handler.onDownload(t,r,n)}parseInventory(){let r=new Array(256);for(let n=0;n<256;n++)r[n]=this.stream.readShort();this.handler&&this.handler.onInventory(r)}parseSound(){let t=this.stream.readByte(),r=this.stream.readByte(),n,i,s,o,a;if(t&1&&(n=this.stream.readByte()),t&2&&(i=this.stream.readByte()),t&16&&(s=this.stream.readByte()),t&8&&(o=this.stream.readShort()),t&4){let d={x:0,y:0,z:0};this.readPos(d),a=d}this.handler&&this.handler.onSound(t,r,n,i,s,o,a)}parseMuzzleFlash(){let t=this.stream.readShort(),r=this.stream.readByte();this.handler&&this.handler.onMuzzleFlash(t,r)}parseMuzzleFlash2(){let t=this.stream.readShort(),r=this.stream.readByte();this.handler&&this.handler.onMuzzleFlash2(t,r)}parseMuzzleFlash3(){let t=this.stream.readShort(),r=this.stream.readShort();this.handler?.onMuzzleFlash3&&this.handler.onMuzzleFlash3(t,r)}parseFog(){let t=this.stream.readByte();if(t&128){let n=this.stream.readByte();t|=n<<8}let r={};t&1&&(r.density=this.stream.readFloat(),r.skyfactor=this.stream.readByte()),t&2&&(r.red=this.stream.readByte()),t&4&&(r.green=this.stream.readByte()),t&8&&(r.blue=this.stream.readByte()),t&16&&(r.time=this.stream.readShort()),t&32&&(r.hf_falloff=this.stream.readFloat()),t&64&&(r.hf_density=this.stream.readFloat()),t&256&&(r.hf_start_r=this.stream.readByte()),t&512&&(r.hf_start_g=this.stream.readByte()),t&1024&&(r.hf_start_b=this.stream.readByte()),t&2048&&(r.hf_start_dist=this.stream.readLong()),t&4096&&(r.hf_end_r=this.stream.readByte()),t&8192&&(r.hf_end_g=this.stream.readByte()),t&16384&&(r.hf_end_b=this.stream.readByte()),t&32768&&(r.hf_end_dist=this.stream.readLong()),this.handler?.onFog&&this.handler.onFog(r)}parseDamage(){let t=this.stream.readByte(),r=[];for(let n=0;n<t;n++){let i=this.stream.readByte(),s={x:0,y:0,z:0};this.readDir(s);let o=i&31,a=(i&32)!==0,d=(i&64)!==0,l=(i&128)!==0;r.push({damage:o,health:a,armor:d,power:l,dir:s})}this.handler?.onDamage&&this.handler.onDamage(r)}parseTempEntity(){let t=this.stream.readByte(),r={x:0,y:0,z:0},n={x:0,y:0,z:0},i={x:0,y:0,z:0},s,o,a,d,l;switch(t){case I.EXPLOSION1:case I.EXPLOSION2:case I.ROCKET_EXPLOSION:case I.GRENADE_EXPLOSION:case I.ROCKET_EXPLOSION_WATER:case I.GRENADE_EXPLOSION_WATER:case I.BFG_EXPLOSION:case I.BFG_BIGEXPLOSION:case I.BOSSTPORT:case I.PLASMA_EXPLOSION:case I.PLAIN_EXPLOSION:case I.CHAINFIST_SMOKE:case I.TRACKER_EXPLOSION:case I.TELEPORT_EFFECT:case I.DBALL_GOAL:case I.NUKEBLAST:case I.WIDOWSPLASH:case I.EXPLOSION1_BIG:case I.EXPLOSION1_NP:this.readPos(r);break;case I.GUNSHOT:case I.BLOOD:case I.BLASTER:case I.SHOTGUN:case I.SPARKS:case I.BULLET_SPARKS:case I.SCREEN_SPARKS:case I.SHIELD_SPARKS:case I.BLASTER2:case I.FLECHETTE:case I.MOREBLOOD:case I.ELECTRIC_SPARKS:case I.HEATBEAM_SPARKS:case I.HEATBEAM_STEAM:this.readPos(r),this.readDir(i);break;case I.SPLASH:case I.LASER_SPARKS:case I.WELDING_SPARKS:case I.TUNNEL_SPARKS:s=this.stream.readByte(),this.readPos(r),this.readDir(i),o=this.stream.readByte();break;case I.BLUEHYPERBLASTER:this.protocolVersion>=32?(this.readPos(r),this.readPos(n)):(this.readPos(r),this.readDir(i));break;case I.GREENBLOOD:this.protocolVersion>=32?(this.readPos(r),this.readDir(i)):(this.readPos(r),this.readPos(n));break;case I.RAILTRAIL:case I.BUBBLETRAIL:case I.BFG_LASER:case I.DEBUGTRAIL:case I.BUBBLETRAIL2:this.readPos(r),this.readPos(n);break;case I.PARASITE_ATTACK:case I.MEDIC_CABLE_ATTACK:this.stream.readShort(),this.readPos(r),this.readPos(n);break;case I.GRAPPLE_CABLE:a=this.stream.readShort(),this.readPos(r),this.readPos(n),this.readPos(i);break;case I.LIGHTNING:d=this.stream.readShort(),l=this.stream.readShort(),this.readPos(r),this.readPos(n);break;case I.FLASHLIGHT:this.readPos(r),a=this.stream.readShort();break;case I.FORCEWALL:this.readPos(r),this.readPos(n),o=this.stream.readByte();break;case I.STEAM:let c=this.stream.readShort();s=this.stream.readByte(),this.readPos(r),this.readDir(i),o=this.stream.readByte(),this.stream.readShort(),c!==-1&&this.stream.readLong();break;case I.WIDOWBEAMOUT:this.stream.readShort();case I.HEATBEAM:case I.MONSTER_HEATBEAM:a=this.stream.readShort(),this.readPos(r),this.readPos(n),this.readDir(i);break}this.handler&&this.handler.onTempEntity(t,r,n,i,s,o,a,d,l)}parseSpawnBaseline(){let t=this.parseEntityBits(),r=Or();this.parseDelta(Or(),r,t.number,t.bits,t.bitsHigh),this.handler&&this.handler.onSpawnBaseline(r)}parseFrame(){let t=this.stream.readLong(),r=this.stream.readLong(),n=0;this.protocolVersion!==26&&this.protocolVersion!==25&&(n=this.stream.readByte());let i=this.stream.readByte(),s=this.stream.readData(i),o=this.stream.readByte();if(o=this.translateCommand(o),o!==F.playerinfo){if(this.strictMode)throw new Error(`Expected svc_playerinfo after svc_frame, got ${o}`);return}let a=this.parsePlayerState(),d=this.stream.readByte();if(d=this.translateCommand(d),d!==F.packetentities){if(this.strictMode)throw new Error(`Expected svc_packetentities after svc_playerinfo, got ${d}`);return}let l=this.collectPacketEntities();if(this.isDemo===Nx){let c=this.stream.readByte();for(let f=0;f<c;f++)this.stream.readByte()}this.isDemo===Ox&&this.stream.readLong(),this.handler&&this.handler.onFrame({serverFrame:t,deltaFrame:r,surpressCount:n,areaBytes:i,areaBits:s,playerState:a,packetEntities:{delta:!0,entities:l}})}parsePlayerState(){let t=ps(),r=this.stream.readShort();r&1&&(t.pm_type=this.stream.readByte()),r&2&&(t.origin.x=this.readCoord(),t.origin.y=this.readCoord(),t.origin.z=this.readCoord()),r&4&&(t.velocity.x=this.readCoord(),t.velocity.y=this.readCoord(),t.velocity.z=this.readCoord()),r&8&&(t.pm_time=this.stream.readByte()),r&16&&(t.pm_flags=this.stream.readByte()),r&32&&(t.gravity=this.stream.readShort()),r&64&&(t.delta_angles.x=this.stream.readShort()*(180/32768),t.delta_angles.y=this.stream.readShort()*(180/32768),t.delta_angles.z=this.stream.readShort()*(180/32768)),r&128&&(t.viewoffset.x=(this.stream.readByte()<<24>>24)*.25,t.viewoffset.y=(this.stream.readByte()<<24>>24)*.25,t.viewoffset.z=(this.stream.readByte()<<24>>24)*.25),r&256&&(t.viewangles.x=this.readAngle16(),t.viewangles.y=this.readAngle16(),t.viewangles.z=this.readAngle16()),r&512&&(t.kick_angles.x=(this.stream.readByte()<<24>>24)*.25,t.kick_angles.y=(this.stream.readByte()<<24>>24)*.25,t.kick_angles.z=(this.stream.readByte()<<24>>24)*.25),r&4096&&(t.gun_index=this.stream.readByte()),r&8192&&(t.gun_frame=this.stream.readByte(),t.gun_offset.x=(this.stream.readByte()<<24>>24)*.25,t.gun_offset.y=(this.stream.readByte()<<24>>24)*.25,t.gun_offset.z=(this.stream.readByte()<<24>>24)*.25,t.gun_angles.x=(this.stream.readByte()<<24>>24)*.25,t.gun_angles.y=(this.stream.readByte()<<24>>24)*.25,t.gun_angles.z=(this.stream.readByte()<<24>>24)*.25),r&1024&&(t.blend[0]=this.stream.readByte(),t.blend[1]=this.stream.readByte(),t.blend[2]=this.stream.readByte(),t.blend[3]=this.stream.readByte()),r&2048&&(t.fov=this.stream.readByte()),r&16384&&(t.rdflags=this.stream.readByte());let n=this.stream.readLong();for(let i=0;i<32;i++)n&1<<i&&(t.stats[i]=this.stream.readShort());return t}parsePacketEntities(t){let r=this.collectPacketEntities();this.handler&&this.handler.onFrame({serverFrame:0,deltaFrame:0,surpressCount:0,areaBytes:0,areaBits:new Uint8Array,playerState:ps(),packetEntities:{delta:t,entities:r}})}collectPacketEntities(){let t=[];for(;;){let r=this.parseEntityBits();if(r.bits&pc){if(r.number===0)break;continue}let n=Or(),i=r.number===0&&!(r.bits&d0);if((r.number!==0||i)&&this.parseDelta(Or(),n,r.number,r.bits,r.bitsHigh),r.number===0)break;t.push(n)}return t}parseEntityBits(){let t=this.stream.readByte();t&d0&&(t|=this.stream.readByte()<<8),t&zx&&(t|=this.stream.readByte()<<16),t&Px&&(t|=this.stream.readByte()<<24);let r=0;this.protocolVersion===Pn&&t&Dx&&(r=this.stream.readByte());let n;return t&kx?n=this.stream.readShort():n=this.stream.readByte(),{number:n,bits:t,bitsHigh:r}}parseDelta(t,r,n,i,s=0){r.number=t.number,r.modelindex=t.modelindex,r.modelindex2=t.modelindex2,r.modelindex3=t.modelindex3,r.modelindex4=t.modelindex4,r.frame=t.frame,r.skinnum=t.skinnum,r.effects=t.effects,r.renderfx=t.renderfx,r.origin.x=t.origin.x,r.origin.y=t.origin.y,r.origin.z=t.origin.z,r.old_origin.x=t.origin.x,r.old_origin.y=t.origin.y,r.old_origin.z=t.origin.z,r.angles.x=t.angles.x,r.angles.y=t.angles.y,r.angles.z=t.angles.z,r.sound=t.sound,r.event=t.event,r.solid=t.solid,r.alpha=t.alpha,r.scale=t.scale,r.instanceBits=t.instanceBits,r.loopVolume=t.loopVolume,r.loopAttenuation=t.loopAttenuation,r.owner=t.owner,r.oldFrame=t.oldFrame,r.number=n,r.bits=i,r.bitsHigh=s,i&xc&&(r.modelindex=this.stream.readByte()),i&vc&&(r.modelindex2=this.stream.readByte()),i&Sc&&(r.modelindex3=this.stream.readByte()),i&wc&&(r.modelindex4=this.stream.readByte()),i&hc&&(r.frame=this.stream.readByte()),i&_c&&(r.frame=this.stream.readShort()),i&oa&&i&ca?r.skinnum=this.stream.readLong():i&oa?r.skinnum=this.stream.readByte():i&ca&&(r.skinnum=this.stream.readShort()),i&sa&&i&la?r.effects=this.stream.readLong():i&sa?r.effects=this.stream.readByte():i&la&&(r.effects=this.stream.readShort()),i&ia&&i&aa?r.renderfx=this.stream.readLong():i&ia?r.renderfx=this.stream.readByte():i&aa&&(r.renderfx=this.stream.readShort()),i&cc&&(r.origin.x=this.readCoord()),i&dc&&(r.origin.y=this.readCoord()),i&gc&&(r.origin.z=this.readCoord()),i&yc&&(r.angles.x=this.readAngle()),i&uc&&(r.angles.y=this.readAngle()),i&fc&&(r.angles.z=this.readAngle()),i&Ac&&this.readPos(r.old_origin),i&Mc&&(r.sound=this.stream.readByte()),i&mc?r.event=this.stream.readByte():r.event=0,i&Ec&&(r.solid=this.stream.readShort()),this.protocolVersion===Pn&&(i&bc&&(r.alpha=this.stream.readByte()/255),i&Lc&&(r.scale=this.stream.readFloat()),i&Tc&&(r.instanceBits=this.stream.readLong()),i&Ic&&(r.loopVolume=this.stream.readByte()/255),s&Cc&&(r.loopAttenuation=this.stream.readByte()/255),s&Rc&&(r.owner=this.stream.readShort()),s&Fc&&(r.oldFrame=this.stream.readShort()))}};var kc=(a=>(a[a.WeaponFire=0]="WeaponFire",a[a.DamageDealt=1]="DamageDealt",a[a.DamageReceived=2]="DamageReceived",a[a.Pickup=3]="Pickup",a[a.Death=4]="Death",a[a.Spawn=5]="Spawn",a[a.PlayerInfo=6]="PlayerInfo",a))(kc||{});var Dn=class{constructor(t){this.events=[];this.summary={totalKills:0,totalDeaths:0,damageDealt:0,damageReceived:0,weaponUsage:new Map};this.header=null;this.configStrings=new Map;this.serverInfo={};this.statistics=null;this.playerStats=new Map;this.weaponStats=new Map;this.activeEntities=new Set;this.buffer=t}analyze(){let t=new Ct(this.buffer),r=-1,n=0,i=.1,s=0,o={onServerData:(a,d,l,c,f,u,h,m)=>{s=a,this.header={protocolVersion:a,gameDir:c,levelName:u,playerNum:f,serverCount:d,spawnCount:d,tickRate:h,demoType:m},h&&h>0&&(i=1/h)},onConfigString:(a,d)=>{this.configStrings.set(a,d),a===0&&this.parseServerInfo(d)},onSpawnBaseline:a=>{},onFrame:a=>{let d=new Set;if(a.packetEntities&&a.packetEntities.entities)for(let l of a.packetEntities.entities)d.add(l.number),this.activeEntities.has(l.number)||this.recordEvent({type:5,frame:r,time:n,entityId:l.number,position:{x:l.origin.x,y:l.origin.y,z:l.origin.z},description:`Entity ${l.number} spawned`});this.activeEntities=d,a.playerState&&this.header},onPrint:(a,d)=>{(d.includes("died")||d.includes("killed")||d.includes("suicide"))&&(this.summary.totalDeaths++,this.recordEvent({type:4,frame:r,time:n,description:d.trim()})),d.startsWith("You got the ")&&this.recordEvent({type:3,frame:r,time:n,description:d.trim()})},onCenterPrint:()=>{},onStuffText:()=>{},onSound:()=>{},onTempEntity:()=>{},onLayout:()=>{},onInventory:()=>{},onMuzzleFlash:(a,d)=>{this.handleWeaponFire(a,d,r,n)},onMuzzleFlash2:(a,d)=>{this.handleWeaponFire(a,d,r,n)},onMuzzleFlash3:(a,d)=>{this.handleWeaponFire(a,d,r,n)},onDisconnect:()=>{},onReconnect:()=>{},onDownload:()=>{},onDamage:a=>{for(let d of a)if(this.recordEvent({type:2,frame:r,time:n,value:d.damage,position:d.dir,description:`Took ${d.damage} damage`}),this.summary.damageReceived+=d.damage,this.header){let l=this.getOrCreatePlayerStats(this.header.playerNum);l.damageReceived+=d.damage}}};for(;t.hasMore();){let a=t.readNextBlock();if(!a)break;r++,n=r*i;let d=new zt(a.data,o);d.setProtocolVersion(s),d.parseMessage(),s=d.getProtocolVersion()}return this.statistics={duration:n,frameCount:r+1,averageFps:(r+1)/(n||1),mapName:this.header?.levelName||"unknown",playerCount:1},{events:this.events,summary:this.summary,header:this.header,configStrings:this.configStrings,serverInfo:this.serverInfo,statistics:this.statistics,playerStats:this.playerStats,weaponStats:this.weaponStats}}handleWeaponFire(t,r,n,i){this.recordEvent({type:0,frame:n,time:i,entityId:t,value:r,description:`Weapon ${r} fired by ${t}`});let s=this.summary.weaponUsage.get(r)||0;this.summary.weaponUsage.set(r,s+1);let o=this.getOrCreateWeaponStat(t,r);o.shotsFired++}recordEvent(t){this.events.push(t)}parseServerInfo(t){let r=t.split("\\");for(let n=1;n<r.length;n+=2)n+1<r.length&&(this.serverInfo[r[n]]=r[n+1])}getOrCreatePlayerStats(t){let r=this.playerStats.get(t);return r||(r={kills:0,deaths:0,damageDealt:0,damageReceived:0,suicides:0},this.playerStats.set(t,r)),r}getOrCreateWeaponStat(t,r){let n=this.weaponStats.get(t);n||(n=[],this.weaponStats.set(t,n));let i=n.find(s=>s.weaponId===r);return i||(i={weaponId:r,shotsFired:0,hits:0,kills:0},n.push(i)),i}};var zc=(i=>(i[i.FirstPerson=0]="FirstPerson",i[i.ThirdPerson=1]="ThirdPerson",i[i.Free=2]="Free",i[i.Follow=3]="Follow",i))(zc||{});var da=(i=>(i[i.Stopped=0]="Stopped",i[i.Playing=1]="Playing",i[i.Paused=2]="Paused",i[i.Finished=3]="Finished",i))(da||{}),gs=class{constructor(){this.reader=null;this.buffer=null;this.state=0;this.playbackSpeed=1;this.currentProtocolVersion=0;this.currentFrameIndex=-1;this.lastFrameData=null;this.accumulatedTime=0;this.frameDuration=100;this.snapshotInterval=100;this.snapshots=new Map;this.cachedEvents=null;this.cachedSummary=null;this.cachedHeader=null;this.cachedConfigStrings=null;this.cachedServerInfo=null;this.cachedStatistics=null;this.cachedPlayerStats=null;this.cachedWeaponStats=null;this.cameraMode=0;this.thirdPersonDistance=80;this.thirdPersonOffset={x:0,y:0,z:0}}setHandler(t){this.handler=t}setCallbacks(t){this.callbacks=t}loadDemo(t){this.buffer=t,this.reader=new Ct(t),this.transitionState(0),this.accumulatedTime=0,this.currentProtocolVersion=0,this.currentFrameIndex=-1,this.snapshots.clear(),this.lastFrameData=null,this.cachedEvents=null,this.cachedSummary=null,this.cachedHeader=null,this.cachedConfigStrings=null,this.cachedServerInfo=null,this.cachedStatistics=null,this.cachedPlayerStats=null,this.cachedWeaponStats=null}play(){this.reader&&this.state!==1&&this.transitionState(1)}pause(){this.state===1&&this.transitionState(2)}stop(){this.transitionState(0),this.reader&&this.reader.reset(),this.accumulatedTime=0,this.currentProtocolVersion=0,this.currentFrameIndex=-1,this.lastFrameData=null}transitionState(t){this.state!==t&&(this.state=t,this.callbacks?.onPlaybackStateChange&&this.callbacks.onPlaybackStateChange(t))}setFrameDuration(t){this.frameDuration=t}setSpeed(t){this.playbackSpeed=Math.max(.1,Math.min(t,16))}getSpeed(){return this.playbackSpeed}getPlaybackSpeed(){return this.playbackSpeed}getInterpolationFactor(){return this.frameDuration<=0?0:Math.max(0,Math.min(1,this.accumulatedTime/this.frameDuration))}update(t){if(!(this.state!==1||!this.reader))for(this.accumulatedTime+=t*1e3*this.playbackSpeed;this.accumulatedTime>=this.frameDuration;){if(!this.processNextFrame())return;this.accumulatedTime-=this.frameDuration,this.callbacks?.onTimeUpdate&&this.callbacks.onTimeUpdate(this.getCurrentTime())}}stepForward(){this.reader&&(this.processNextFrame(),this.callbacks?.onTimeUpdate&&this.callbacks.onTimeUpdate(this.getCurrentTime()))}stepBackward(){this.reader&&this.currentFrameIndex>0&&this.seek(this.currentFrameIndex-1)}seekToTime(t){let r=Math.floor(t*1e3/this.frameDuration);this.seek(r)}seekToFrame(t){this.seek(t)}seek(t){if(!this.reader)return;let r=this.getTotalFrames();if(t<0&&(t=0),t>=r&&(t=r-1),t===this.currentFrameIndex+1){this.processNextFrame(),this.callbacks?.onSeekComplete&&this.callbacks.onSeekComplete();return}let n=-1,i=null;if(t>this.currentFrameIndex&&this.currentFrameIndex!==-1&&(n=this.currentFrameIndex),this.callbacks?.onRestoreSnapshot)for(let[s,o]of this.snapshots)s<=t&&s>n&&(n=s,i=o);for(n===-1&&this.currentFrameIndex>t?(this.reader.reset(),this.currentFrameIndex=-1,this.currentProtocolVersion=0):n===-1&&(this.reader.reset(),this.currentFrameIndex=-1,this.currentProtocolVersion=0),i&&this.callbacks?.onRestoreSnapshot&&(this.callbacks.onRestoreSnapshot(i),this.reader.seekToMessage(n+1)?this.currentFrameIndex=n:(this.reader.reset(),this.currentFrameIndex=-1,this.currentProtocolVersion=0));this.currentFrameIndex<t&&(this.callbacks?.onCaptureSnapshot&&(this.currentFrameIndex+1)%this.snapshotInterval,!!this.processNextFrame()););this.accumulatedTime=0,this.callbacks?.onSeekComplete&&this.callbacks.onSeekComplete(),this.callbacks?.onTimeUpdate&&this.callbacks.onTimeUpdate(this.getCurrentTime())}processNextFrame(){if(!this.reader||!this.reader.hasMore())return this.transitionState(3),this.callbacks?.onPlaybackComplete&&this.callbacks.onPlaybackComplete(),!1;let t=this.reader.readNextBlock();if(!t)return this.transitionState(3),this.callbacks?.onPlaybackComplete&&this.callbacks.onPlaybackComplete(),!1;this.currentFrameIndex++;try{let r={...this.handler,onFrame:i=>{this.lastFrameData=i,this.handler?.onFrame&&this.handler.onFrame(i),this.callbacks?.onFrameUpdate&&this.callbacks.onFrameUpdate(i)}},n=new zt(t.data,this.handler?r:void 0);if(n.setProtocolVersion(this.currentProtocolVersion),n.parseMessage(),this.currentProtocolVersion=n.getProtocolVersion(),this.callbacks?.onCaptureSnapshot&&this.currentFrameIndex%this.snapshotInterval===0&&this.currentFrameIndex>0){let i=this.callbacks.onCaptureSnapshot(this.currentFrameIndex);i&&this.snapshots.set(this.currentFrameIndex,i)}}catch(r){return console.error("Error processing demo frame",r),this.callbacks?.onPlaybackError&&this.callbacks.onPlaybackError(r instanceof Error?r:new Error(String(r))),!1}return!0}getState(){return this.state}getCurrentTime(){return this.currentFrameIndex<0?this.accumulatedTime:this.currentFrameIndex*this.frameDuration+this.accumulatedTime}getFrameCount(){return this.reader?this.reader.getMessageCount():0}getTotalFrames(){return this.getFrameCount()}getCurrentFrame(){return this.currentFrameIndex<0?0:this.currentFrameIndex}getDuration(){return this.getFrameCount()*this.frameDuration/1e3}getTotalBytes(){return this.reader?this.reader.getProgress().total:0}getProcessedBytes(){return this.reader?this.reader.getOffset():0}getFrameData(t){if(t===this.currentFrameIndex&&this.lastFrameData)return this.lastFrameData;let r=this.state;return this.pause(),this.seek(t),r===1&&this.play(),this.lastFrameData}getFramePlayerState(t){if(t===this.currentFrameIndex&&this.handler?.getPlayerState){let n=this.handler.getPlayerState();if(n)return n}let r=this.getFrameData(t);return r?r.playerState:null}getFrameEntities(t){if(t===this.currentFrameIndex&&this.handler?.getEntities){let r=this.handler.getEntities();if(r)return Array.from(r.values())}if(this.seek(t),this.handler?.getEntities){let r=this.handler.getEntities();return r?Array.from(r.values()):[]}return[]}compareFrames(t,r){let n=this.getFramePlayerState(t),i=this.getFrameEntities(t),s=new Map;i.forEach(c=>s.set(c.number,c));let o=this.getFramePlayerState(r),a=this.getFrameEntities(r),d=new Map;a.forEach(c=>d.set(c.number,c));let l={frameA:t,frameB:r,playerStateDiff:{origin:null,viewangles:null,health:null,ammo:null},entityDiffs:{added:[],removed:[],moved:[]}};n&&o&&((n.origin.x!==o.origin.x||n.origin.y!==o.origin.y||n.origin.z!==o.origin.z)&&(l.playerStateDiff.origin={x:o.origin.x-n.origin.x,y:o.origin.y-n.origin.y,z:o.origin.z-n.origin.z}),n.stats[1]!==o.stats[1]&&(l.playerStateDiff.health=o.stats[1]-n.stats[1]),n.stats[2]!==o.stats[2]&&(l.playerStateDiff.ammo=o.stats[2]-n.stats[2]));for(let[c,f]of d){let u=s.get(c);u?(u.origin.x!==f.origin.x||u.origin.y!==f.origin.y||u.origin.z!==f.origin.z)&&l.entityDiffs.moved.push({id:c,delta:{x:f.origin.x-u.origin.x,y:f.origin.y-u.origin.y,z:f.origin.z-u.origin.z}}):l.entityDiffs.added.push(c)}for(let[c,f]of s)d.has(c)||l.entityDiffs.removed.push(c);return l}getEntityTrajectory(t,r,n){let i=[],s=this.getCurrentFrame();for(this.seek(r);this.getCurrentFrame()<=n&&this.state!==3;){let o=null;if(t===-1){let a=this.getFramePlayerState(this.getCurrentFrame());a&&(o={...a.origin})}else if(this.handler?.getEntities){let a=this.handler.getEntities().get(t);a&&(o={...a.origin})}if(o&&i.push(o),this.getCurrentFrame()===n)break;this.stepForward()}return this.seek(s),i}getDemoEvents(){return this.ensureAnalysis(),this.cachedEvents||[]}filterEvents(t,r){return this.getDemoEvents().filter(i=>!(i.type!==t||r!==void 0&&i.entityId!==r))}getEventSummary(){return this.ensureAnalysis(),this.cachedSummary||{totalKills:0,totalDeaths:0,damageDealt:0,damageReceived:0,weaponUsage:new Map}}getDemoHeader(){return this.ensureAnalysis(),this.cachedHeader}getDemoConfigStrings(){return this.ensureAnalysis(),this.cachedConfigStrings||new Map}getDemoServerInfo(){return this.ensureAnalysis(),this.cachedServerInfo||{}}getDemoStatistics(){return this.ensureAnalysis(),this.cachedStatistics}getPlayerStatistics(t){return this.ensureAnalysis(),this.cachedPlayerStats?.get(t)||null}getWeaponStatistics(t){return this.ensureAnalysis(),this.cachedWeaponStats?.get(t)||null}ensureAnalysis(){if(!this.cachedEvents&&this.buffer){let r=new Dn(this.buffer).analyze();this.cachedEvents=r.events,this.cachedSummary=r.summary,this.cachedHeader=r.header,this.cachedConfigStrings=r.configStrings,this.cachedServerInfo=r.serverInfo,this.cachedStatistics=r.statistics,this.cachedPlayerStats=r.playerStats,this.cachedWeaponStats=r.weaponStats}}setCameraMode(t){this.cameraMode=t}getCameraMode(){return this.cameraMode}setThirdPersonDistance(t){this.thirdPersonDistance=t}setThirdPersonOffset(t){this.thirdPersonOffset=t}};var ys=class{constructor(){this.isRecording=!1;this.startTime=0;this.frameCount=0;this.filename=null;this.lastMessageSize=-1;this.messageBuffer=new Ea(1024*1024)}startRecording(t,r=0){this.isRecording||(this.isRecording=!0,this.filename=t,this.startTime=r,this.frameCount=0,this.messageBuffer.reset(),console.log(`DemoRecorder: Started recording to ${t}`))}recordMessage(t){if(this.isRecording){this.messageBuffer.writeLong(t.byteLength);for(let r=0;r<t.length;r++)this.messageBuffer.writeByte(t[r]);this.frameCount++}}stopRecording(){return this.isRecording?(this.isRecording=!1,this.messageBuffer.writeLong(-1),console.log(`DemoRecorder: Stopped recording. Frames: ${this.frameCount}, Size: ${this.messageBuffer.getOffset()} bytes`),this.messageBuffer.getData()):null}getIsRecording(){return this.isRecording}};var ua=class{static validate(t,r){if(r&&!r.toLowerCase().endsWith(".dm2"))return{valid:!1,error:"Invalid file extension (expected .dm2)"};if(t.byteLength<5)return{valid:!1,error:"File too small to be a valid demo"};let n=new DataView(t),i=n.getInt32(0,!0);if(i<=0||i>t.byteLength-4)return{valid:!1,error:`Invalid first block length: ${i}`};let s=n.getUint8(4);if(s!==F.serverdata)return{valid:!1,error:`First command is not svc_serverdata (expected ${F.serverdata}, got ${s})`};let o=-1;return i>=5&&(o=n.getInt32(5,!0)),{valid:!0,version:o}}};var Pc=(u=>(u.Unknown="unknown",u.BSP="bsp",u.MD2="md2",u.MD3="md3",u.WAL="wal",u.PCX="pcx",u.TGA="tga",u.WAV="wav",u.OGG="ogg",u.TXT="txt",u.CFG="cfg",u.DEM="dem",u))(Pc||{}),u0={".bsp":"bsp",".md2":"md2",".md3":"md3",".wal":"wal",".pcx":"pcx",".tga":"tga",".wav":"wav",".ogg":"ogg",".txt":"txt",".cfg":"cfg",".dm2":"dem"};function xs(e,t){if(e.length<t.length)return!1;for(let r=0;r<t.length;r++)if(e[r]!==t[r])return!1;return!0}var Ux=[73,66,83,80],Hx=[73,68,80,50],Vx=[73,68,80,51];var Gx=[82,73,70,70];var Wx=[79,103,103,83];function Dc(e,t){let r=e.slice(e.lastIndexOf(".")).toLowerCase();if(t){if(xs(t,Ux))return"bsp";if(xs(t,Hx))return"md2";if(xs(t,Vx))return"md3";if(xs(t,Wx))return"ogg";if(t.length>128&&t[0]===10&&t[1]<6)return"pcx";if(xs(t,Gx)&&t.length>=12&&t[8]===87&&t[9]===65&&t[10]===86&&t[11]===69)return"wav"}return u0[r]?u0[r]:"unknown"}function Bc(e){let t=Dc(e);return t==="txt"||t==="cfg"}function f0(e){return!Bc(e)}function Xx(e,t,r,n,i){let s=new Uint8ClampedArray(n*i*4),o=t/n,a=r/i;for(let d=0;d<i;d++)for(let l=0;l<n;l++){let c=l*o,f=d*a,u=Math.floor(c),h=Math.floor(f),m=c-u,g=f-h,p=Math.min(u+1,t-1),y=Math.min(h+1,r-1),v=(h*t+u)*4,b=(h*t+p)*4,x=(y*t+u)*4,_=(y*t+p)*4,A=(d*n+l)*4;for(let S=0;S<4;S++){let M=e[v+S],L=e[b+S],w=e[x+S],T=e[_+S],k=M*(1-m)+L*m,U=w*(1-m)+T*m,C=k*(1-g)+U*g;s[A+S]=C}}return s}function Kx(e,t,r,n,i,s,o,a,d,l,c){n=Math.floor(n),i=Math.floor(i),s=Math.floor(s),o=Math.floor(o);let f=Math.abs(s-n),u=Math.abs(o-i),h=n<s?1:-1,m=i<o?1:-1,g=f-u;for(;;){if(n>=0&&n<t&&i>=0&&i<r){let y=(i*t+n)*4,v=1-c/255;e[y]=a*(c/255)+e[y]*v,e[y+1]=d*(c/255)+e[y+1]*v,e[y+2]=l*(c/255)+e[y+2]*v,e[y+3]=255}if(n===s&&i===o)break;let p=2*g;p>-u&&(g-=u,n+=h),p<f&&(g+=f,i+=m)}}function h0(e,t,r,n,i){let a=(e.x-n.x)*.707-(e.y-n.y)*.707,d=(e.x-n.x)*.707+(e.y-n.y)*.707,l=e.z-n.z,c=.866,f=.5,u=d*c-l*f,h=d*f+l*c,m=t/2+a*i,g=r/2-h*i;return{x:m,y:g}}var fa=class{constructor(t){this.assetManager=t}async generateTextureThumbnail(t,r){try{let n=await this.assetManager.loadTexture(t);if(!n||n.levels.length===0)return null;let i=n.levels[0],s=i.width/i.height,o=r,a=r;s>1?a=Math.floor(r/s):o=Math.floor(r*s),o=Math.max(1,o),a=Math.max(1,a);let d=Xx(i.rgba,i.width,i.height,o,a);return new ImageData(d,o,a)}catch(n){return console.error(`Failed to generate thumbnail for ${t}`,n),null}}async generateModelThumbnail(t,r){try{let n=[],i=[],s=t.split(".").pop()?.toLowerCase();if(s==="md2"){let p=await this.assetManager.loadMd2Model(t);if(!p||p.frames.length===0)return null;n=p.frames[0].vertices.map(v=>v.position);for(let v of p.triangles)i.push(v.vertexIndices[0],v.vertexIndices[1]),i.push(v.vertexIndices[1],v.vertexIndices[2]),i.push(v.vertexIndices[2],v.vertexIndices[0])}else if(s==="md3"){let p=await this.assetManager.loadMd3Model(t);if(!p||p.surfaces.length===0)return null;let y=0;for(let v of p.surfaces){if(v.vertices.length===0)continue;let b=v.vertices[0];n.push(...b.map(x=>({x:x.position.x,y:x.position.y,z:x.position.z})));for(let x of v.triangles)i.push(y+x.indices[0],y+x.indices[1]),i.push(y+x.indices[1],y+x.indices[2]),i.push(y+x.indices[2],y+x.indices[0]);y+=b.length}}else return null;if(n.length===0)return null;let o={x:1/0,y:1/0,z:1/0},a={x:-1/0,y:-1/0,z:-1/0};for(let p of n)o.x=Math.min(o.x,p.x),o.y=Math.min(o.y,p.y),o.z=Math.min(o.z,p.z),a.x=Math.max(a.x,p.x),a.y=Math.max(a.y,p.y),a.z=Math.max(a.z,p.z);let d={x:(o.x+a.x)/2,y:(o.y+a.y)/2,z:(o.z+a.z)/2},l=a.x-o.x,c=a.y-o.y,f=a.z-o.z,u=Math.max(l,c,f),h=Math.max(u,.001),m=r*.8/h,g=new Uint8ClampedArray(r*r*4);for(let p=0;p<i.length;p+=2){let y=i[p],v=i[p+1],b=n[y],x=n[v],_=h0(b,r,r,d,m),A=h0(x,r,r,d,m);Kx(g,r,r,_.x,_.y,A.x,A.y,0,255,0,255)}return new ImageData(g,r,r)}catch(n){return console.error(`Failed to generate model thumbnail for ${t}`,n),null}}async getMapBounds(t,r){try{let n=$n(r);if(n.models.length>0){let i=n.models[0];return{mins:{x:i.mins[0],y:i.mins[1],z:i.mins[2]},maxs:{x:i.maxs[0],y:i.maxs[1],z:i.maxs[2]}}}return null}catch(n){return console.error("Failed to get map bounds",n),null}}async extractMapScreenshot(t){return null}};var ha=class{constructor(t){this.loader=t}async getMapStatistics(t){let r=await this.loader.load(t),n=r.faces.filter(o=>o.lightOffset!==-1).length,i=r.models[0],s=i?{mins:i.mins,maxs:i.maxs}:{mins:[0,0,0],maxs:[0,0,0]};return{entityCount:r.entities.entities.length,surfaceCount:r.faces.length,lightmapCount:n,vertexCount:r.vertices.length,bounds:s}}async getUsedTextures(t){let r=await this.loader.load(t),n=new Set;for(let i of r.texInfo)i.texture&&n.add(i.texture);return Array.from(n).sort()}async getUsedModels(t){let r=await this.loader.load(t),n=new Set;for(let i of r.entities.entities)i.properties.model&&!i.properties.model.startsWith("*")&&n.add(i.properties.model);return Array.from(n).sort()}async getUsedSounds(t){let r=await this.loader.load(t),n=new Set;for(let i of r.entities.entities){i.properties.noise&&n.add(i.properties.noise);for(let[s,o]of Object.entries(i.properties))(s==="noise"||s.endsWith("_sound")||s==="sound")&&typeof o=="string"&&n.add(o)}return Array.from(n).sort()}};function $x(e){return{init(){e.trace({x:0,y:0,z:0},{x:0,y:0,z:0})},shutdown(){},createMainLoop(t,r){return new ur(t,r)}}}return w0(Zx);})();
|
|
489
|
+
}`,wa=class{constructor(t,r){this.vertexCapacity=0;this.indexCapacity=0;this.gl=t,this.system=r,this.program=Ee.create(t,{vertex:sc,fragment:oc}),this.vertexBuffer=new Le(t,t.DYNAMIC_DRAW),this.indexBuffer=new xe(t,t.DYNAMIC_DRAW),this.vertexArray=new ke(t),this.vertexArray.configureAttributes([{index:0,size:3,type:t.FLOAT,stride:36,offset:0},{index:1,size:2,type:t.FLOAT,stride:36,offset:12},{index:2,size:4,type:t.FLOAT,stride:36,offset:20}],this.vertexBuffer)}render(t){let r=this.system.buildMesh(t.viewRight,t.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 i=r.indices;r.indices.byteLength>this.indexCapacity?(this.indexCapacity=r.indices.byteLength,this.indexBuffer.upload(i,this.gl.DYNAMIC_DRAW)):this.indexBuffer.update(i),this.gl.depthMask(!1),this.program.use();let s=this.program.getUniformLocation("u_viewProjection");this.gl.uniformMatrix4fv(s,!1,t.viewProjection),this.vertexArray.bind();for(let o of r.batches)o.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,o.count,this.gl.UNSIGNED_SHORT,o.start*2);this.gl.depthMask(!0)}dispose(){this.program.dispose(),this.vertexBuffer.dispose(),this.indexBuffer.dispose(),this.vertexArray.dispose()}};function Gu(e){let{system:t,origin:r,normal:n={x:0,y:0,z:1}}=e;for(let i=0;i<12;i+=1){let s=200+t.rng.frandom()*180,o=t.rng.frandom()*.35;t.spawn({position:r,velocity:{x:n.x*s+(t.rng.frandom()-.5)*80,y:n.y*s+(t.rng.frandom()-.5)*80,z:Math.max(n.z*s,120)+o*80},color:[1,.8,.4,1],size:2.5,lifetime:.45+t.rng.frandom()*.1,gravity:600,damping:2,bounce:.45,blendMode:"additive",fade:!0})}for(let i=0;i<8;i+=1)t.spawn({position:r,velocity:{x:(t.rng.frandom()-.5)*40,y:(t.rng.frandom()-.5)*40,z:80+t.rng.frandom()*40},color:[.45,.45,.45,.75],size:6,lifetime:.6,gravity:200,damping:4,bounce:.15,blendMode:"alpha",fade:!0})}function Wu(e){let{system:t,origin:r}=e;for(let n=0;n<40;n+=1){let i=t.rng.frandom()*Math.PI*2,s=Math.acos(2*t.rng.frandom()-1),o=220+t.rng.frandom()*260,a={x:Math.sin(s)*Math.cos(i),y:Math.sin(s)*Math.sin(i),z:Math.cos(s)};t.spawn({position:r,velocity:{x:a.x*o,y:a.y*o,z:a.z*o},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)t.spawn({position:r,velocity:{x:(t.rng.frandom()-.5)*30,y:(t.rng.frandom()-.5)*30,z:120+t.rng.frandom()*120},color:[.25,.25,.25,.9],size:12,lifetime:1.2,gravity:300,damping:3,blendMode:"alpha",fade:!0})}function Xu(e){let{system:t,origin:r,direction:n={x:0,y:0,z:1}}=e;for(let i=0;i<24;i+=1){let s=120+t.rng.frandom()*180;t.spawn({position:r,velocity:{x:n.x*s+(t.rng.frandom()-.5)*70,y:n.y*s+(t.rng.frandom()-.5)*70,z:n.z*s+t.rng.frandom()*80},color:[.6,0,0,.95],size:3,lifetime:.8,gravity:900,damping:1,bounce:.2,blendMode:"alpha",fade:!0})}}function Ku(e){let{system:t,origin:r}=e;for(let n=0;n<30;n+=1){let i=t.rng.frandom()*Math.PI*2,s=8+t.rng.frandom()*8;t.spawn({position:r,velocity:{x:Math.cos(i)*s,y:Math.sin(i)*s,z:100+t.rng.frandom()*80},color:[.4,.6,1,.9],size:4,lifetime:.5,gravity:300,damping:2,blendMode:"additive",fade:!0})}}function $u(e){let{system:t,origin:r,direction:n={x:1,y:0,z:0}}=e;for(let i=0;i<10;i+=1){let s=350+t.rng.frandom()*100;t.spawn({position:r,velocity:{x:n.x*s+(t.rng.frandom()-.5)*30,y:n.y*s+(t.rng.frandom()-.5)*30,z:n.z*s+(t.rng.frandom()-.5)*30},color:[1,.8,.3,1],size:3,lifetime:.25,gravity:200,damping:1,blendMode:"additive",fade:!0})}}function Zu(e){let{system:t,origin:r,direction:n={x:0,y:0,z:0}}=e;for(let i=0;i<6;i+=1)t.spawn({position:{x:r.x+n.x*i*2,y:r.y+n.y*i*2,z:r.z+n.z*i*2},velocity:{x:(t.rng.frandom()-.5)*15,y:(t.rng.frandom()-.5)*15,z:20+t.rng.frandom()*15},color:[.6,.6,.6,.8],size:2.2,lifetime:.6,gravity:200,damping:1.5,blendMode:"alpha",fade:!0})}function Yu(e){let{system:t,origin:r,normal:n={x:0,y:0,z:1}}=e;for(let i=0;i<30;i+=1){let s=100+t.rng.frandom()*150;t.spawn({position:r,velocity:{x:n.x*s+(t.rng.frandom()-.5)*80,y:n.y*s+(t.rng.frandom()-.5)*80,z:100+t.rng.frandom()*120},color:[.5,.6,.8,.5],size:3,lifetime:.5+t.rng.frandom()*.3,gravity:800,damping:1.5,blendMode:"alpha",fade:!0})}}function qu(e){let{system:t,origin:r}=e;for(let n=0;n<8;n+=1)t.spawn({position:{x:r.x+(t.rng.frandom()-.5)*10,y:r.y+(t.rng.frandom()-.5)*10,z:r.z+(t.rng.frandom()-.5)*10},velocity:{x:(t.rng.frandom()-.5)*20,y:(t.rng.frandom()-.5)*20,z:40+t.rng.frandom()*20},color:[.8,.8,.8,.3],size:5+t.rng.frandom()*4,lifetime:1.5+t.rng.frandom()*.5,gravity:-50,damping:.5,blendMode:"alpha",fade:!0})}var je=class{constructor(t){this.messageOffsets=[];this.buffer=t,this.view=new DataView(t),this.offset=0,this.scan()}scan(){let t=0;for(this.messageOffsets=[];t+4<=this.buffer.byteLength;){let r=this.view.getInt32(t,!0);if(r<0||r>2097152){console.warn(`DemoReader: Invalid block length ${r} at offset ${t} during scan`);break}if(t+4+r>this.buffer.byteLength){console.warn(`DemoReader: Incomplete block at offset ${t} during scan`);break}this.messageOffsets.push(t),t+=4+r}}hasMore(){return this.offset<this.buffer.byteLength}readNextBlock(){if(this.offset+4>this.buffer.byteLength)return null;let t=this.view.getInt32(this.offset,!0);if(t<0||this.offset+4+t>this.buffer.byteLength)return null;this.offset+=4;let r=this.buffer.slice(this.offset,this.offset+t);return this.offset+=t,{length:t,data:new Xr(r)}}readAllBlocksToBuffer(){let t=0,r=this.offset,n=[],i=this.offset;for(;i+4<=this.buffer.byteLength;){let c=this.view.getInt32(i,!0);if(c<0||i+4+c>this.buffer.byteLength)break;n.push({offset:i+4,length:c}),t+=c,i+=4+c}let s=new Uint8Array(t),o=0,a=new Uint8Array(this.buffer);for(let c of n)s.set(a.subarray(c.offset,c.offset+c.length),o),o+=c.length;return this.offset=i,s.buffer}reset(){this.offset=0}seekToMessage(t){return t<0||t>=this.messageOffsets.length?!1:(this.offset=this.messageOffsets[t],!0)}getMessageCount(){return this.messageOffsets.length}getOffset(){return this.offset}getProgress(){let t=this.offset,r=this.buffer.byteLength;return{current:t,total:r,percent:r>0?t/r*100:0}}};function kn(e){let t=e.length;for(;--t>=0;)e[t]=0}var X1=0,Df=1,K1=2,$1=3,Z1=258,Cc=29,xs=256,ds=xs+1+Cc,In=30,Rc=19,Bf=2*ds+1,Rr=15,ac=16,Y1=7,kc=256,Of=16,Nf=17,Uf=18,vc=new Uint8Array([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]),Ia=new Uint8Array([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]),q1=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]),Hf=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),j1=512,Ft=new Array((ds+2)*2);kn(Ft);var as=new Array(In*2);kn(as);var us=new Array(j1);kn(us);var fs=new Array(Z1-$1+1);kn(fs);var Fc=new Array(Cc);kn(Fc);var Ca=new Array(In);kn(Ca);function lc(e,t,r,n,i){this.static_tree=e,this.extra_bits=t,this.extra_base=r,this.elems=n,this.max_length=i,this.has_stree=e&&e.length}var Vf,Gf,Wf;function cc(e,t){this.dyn_tree=e,this.max_code=0,this.stat_desc=t}var Xf=e=>e<256?us[e]:us[256+(e>>>7)],hs=(e,t)=>{e.pending_buf[e.pending++]=t&255,e.pending_buf[e.pending++]=t>>>8&255},Fe=(e,t,r)=>{e.bi_valid>ac-r?(e.bi_buf|=t<<e.bi_valid&65535,hs(e,e.bi_buf),e.bi_buf=t>>ac-e.bi_valid,e.bi_valid+=r-ac):(e.bi_buf|=t<<e.bi_valid&65535,e.bi_valid+=r)},gt=(e,t,r)=>{Fe(e,r[t*2],r[t*2+1])},Kf=(e,t)=>{let r=0;do r|=e&1,e>>>=1,r<<=1;while(--t>0);return r>>>1},Q1=e=>{e.bi_valid===16?(hs(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):e.bi_valid>=8&&(e.pending_buf[e.pending++]=e.bi_buf&255,e.bi_buf>>=8,e.bi_valid-=8)},J1=(e,t)=>{let r=t.dyn_tree,n=t.max_code,i=t.stat_desc.static_tree,s=t.stat_desc.has_stree,o=t.stat_desc.extra_bits,a=t.stat_desc.extra_base,c=t.stat_desc.max_length,l,d,f,u,h,m,g=0;for(u=0;u<=Rr;u++)e.bl_count[u]=0;for(r[e.heap[e.heap_max]*2+1]=0,l=e.heap_max+1;l<Bf;l++)d=e.heap[l],u=r[r[d*2+1]*2+1]+1,u>c&&(u=c,g++),r[d*2+1]=u,!(d>n)&&(e.bl_count[u]++,h=0,d>=a&&(h=o[d-a]),m=r[d*2],e.opt_len+=m*(u+h),s&&(e.static_len+=m*(i[d*2+1]+h)));if(g!==0){do{for(u=c-1;e.bl_count[u]===0;)u--;e.bl_count[u]--,e.bl_count[u+1]+=2,e.bl_count[c]--,g-=2}while(g>0);for(u=c;u!==0;u--)for(d=e.bl_count[u];d!==0;)f=e.heap[--l],!(f>n)&&(r[f*2+1]!==u&&(e.opt_len+=(u-r[f*2+1])*r[f*2],r[f*2+1]=u),d--)}},$f=(e,t,r)=>{let n=new Array(Rr+1),i=0,s,o;for(s=1;s<=Rr;s++)i=i+r[s-1]<<1,n[s]=i;for(o=0;o<=t;o++){let a=e[o*2+1];a!==0&&(e[o*2]=Kf(n[a]++,a))}},eg=()=>{let e,t,r,n,i,s=new Array(Rr+1);for(r=0,n=0;n<Cc-1;n++)for(Fc[n]=r,e=0;e<1<<vc[n];e++)fs[r++]=n;for(fs[r-1]=n,i=0,n=0;n<16;n++)for(Ca[n]=i,e=0;e<1<<Ia[n];e++)us[i++]=n;for(i>>=7;n<In;n++)for(Ca[n]=i<<7,e=0;e<1<<Ia[n]-7;e++)us[256+i++]=n;for(t=0;t<=Rr;t++)s[t]=0;for(e=0;e<=143;)Ft[e*2+1]=8,e++,s[8]++;for(;e<=255;)Ft[e*2+1]=9,e++,s[9]++;for(;e<=279;)Ft[e*2+1]=7,e++,s[7]++;for(;e<=287;)Ft[e*2+1]=8,e++,s[8]++;for($f(Ft,ds+1,s),e=0;e<In;e++)as[e*2+1]=5,as[e*2]=Kf(e,5);Vf=new lc(Ft,vc,xs+1,ds,Rr),Gf=new lc(as,Ia,0,In,Rr),Wf=new lc(new Array(0),q1,0,Rc,Y1)},Zf=e=>{let t;for(t=0;t<ds;t++)e.dyn_ltree[t*2]=0;for(t=0;t<In;t++)e.dyn_dtree[t*2]=0;for(t=0;t<Rc;t++)e.bl_tree[t*2]=0;e.dyn_ltree[kc*2]=1,e.opt_len=e.static_len=0,e.sym_next=e.matches=0},Yf=e=>{e.bi_valid>8?hs(e,e.bi_buf):e.bi_valid>0&&(e.pending_buf[e.pending++]=e.bi_buf),e.bi_buf=0,e.bi_valid=0},ju=(e,t,r,n)=>{let i=t*2,s=r*2;return e[i]<e[s]||e[i]===e[s]&&n[t]<=n[r]},dc=(e,t,r)=>{let n=e.heap[r],i=r<<1;for(;i<=e.heap_len&&(i<e.heap_len&&ju(t,e.heap[i+1],e.heap[i],e.depth)&&i++,!ju(t,n,e.heap[i],e.depth));)e.heap[r]=e.heap[i],r=i,i<<=1;e.heap[r]=n},Qu=(e,t,r)=>{let n,i,s=0,o,a;if(e.sym_next!==0)do n=e.pending_buf[e.sym_buf+s++]&255,n+=(e.pending_buf[e.sym_buf+s++]&255)<<8,i=e.pending_buf[e.sym_buf+s++],n===0?gt(e,i,t):(o=fs[i],gt(e,o+xs+1,t),a=vc[o],a!==0&&(i-=Fc[o],Fe(e,i,a)),n--,o=Xf(n),gt(e,o,r),a=Ia[o],a!==0&&(n-=Ca[o],Fe(e,n,a)));while(s<e.sym_next);gt(e,kc,t)},Sc=(e,t)=>{let r=t.dyn_tree,n=t.stat_desc.static_tree,i=t.stat_desc.has_stree,s=t.stat_desc.elems,o,a,c=-1,l;for(e.heap_len=0,e.heap_max=Bf,o=0;o<s;o++)r[o*2]!==0?(e.heap[++e.heap_len]=c=o,e.depth[o]=0):r[o*2+1]=0;for(;e.heap_len<2;)l=e.heap[++e.heap_len]=c<2?++c:0,r[l*2]=1,e.depth[l]=0,e.opt_len--,i&&(e.static_len-=n[l*2+1]);for(t.max_code=c,o=e.heap_len>>1;o>=1;o--)dc(e,r,o);l=s;do o=e.heap[1],e.heap[1]=e.heap[e.heap_len--],dc(e,r,1),a=e.heap[1],e.heap[--e.heap_max]=o,e.heap[--e.heap_max]=a,r[l*2]=r[o*2]+r[a*2],e.depth[l]=(e.depth[o]>=e.depth[a]?e.depth[o]:e.depth[a])+1,r[o*2+1]=r[a*2+1]=l,e.heap[1]=l++,dc(e,r,1);while(e.heap_len>=2);e.heap[--e.heap_max]=e.heap[1],J1(e,t),$f(r,c,e.bl_count)},Ju=(e,t,r)=>{let n,i=-1,s,o=t[1],a=0,c=7,l=4;for(o===0&&(c=138,l=3),t[(r+1)*2+1]=65535,n=0;n<=r;n++)s=o,o=t[(n+1)*2+1],!(++a<c&&s===o)&&(a<l?e.bl_tree[s*2]+=a:s!==0?(s!==i&&e.bl_tree[s*2]++,e.bl_tree[Of*2]++):a<=10?e.bl_tree[Nf*2]++:e.bl_tree[Uf*2]++,a=0,i=s,o===0?(c=138,l=3):s===o?(c=6,l=3):(c=7,l=4))},ef=(e,t,r)=>{let n,i=-1,s,o=t[1],a=0,c=7,l=4;for(o===0&&(c=138,l=3),n=0;n<=r;n++)if(s=o,o=t[(n+1)*2+1],!(++a<c&&s===o)){if(a<l)do gt(e,s,e.bl_tree);while(--a!==0);else s!==0?(s!==i&&(gt(e,s,e.bl_tree),a--),gt(e,Of,e.bl_tree),Fe(e,a-3,2)):a<=10?(gt(e,Nf,e.bl_tree),Fe(e,a-3,3)):(gt(e,Uf,e.bl_tree),Fe(e,a-11,7));a=0,i=s,o===0?(c=138,l=3):s===o?(c=6,l=3):(c=7,l=4)}},tg=e=>{let t;for(Ju(e,e.dyn_ltree,e.l_desc.max_code),Ju(e,e.dyn_dtree,e.d_desc.max_code),Sc(e,e.bl_desc),t=Rc-1;t>=3&&e.bl_tree[Hf[t]*2+1]===0;t--);return e.opt_len+=3*(t+1)+5+5+4,t},rg=(e,t,r,n)=>{let i;for(Fe(e,t-257,5),Fe(e,r-1,5),Fe(e,n-4,4),i=0;i<n;i++)Fe(e,e.bl_tree[Hf[i]*2+1],3);ef(e,e.dyn_ltree,t-1),ef(e,e.dyn_dtree,r-1)},ng=e=>{let t=4093624447,r;for(r=0;r<=31;r++,t>>>=1)if(t&1&&e.dyn_ltree[r*2]!==0)return 0;if(e.dyn_ltree[18]!==0||e.dyn_ltree[20]!==0||e.dyn_ltree[26]!==0)return 1;for(r=32;r<xs;r++)if(e.dyn_ltree[r*2]!==0)return 1;return 0},tf=!1,ig=e=>{tf||(eg(),tf=!0),e.l_desc=new cc(e.dyn_ltree,Vf),e.d_desc=new cc(e.dyn_dtree,Gf),e.bl_desc=new cc(e.bl_tree,Wf),e.bi_buf=0,e.bi_valid=0,Zf(e)},qf=(e,t,r,n)=>{Fe(e,(X1<<1)+(n?1:0),3),Yf(e),hs(e,r),hs(e,~r),r&&e.pending_buf.set(e.window.subarray(t,t+r),e.pending),e.pending+=r},sg=e=>{Fe(e,Df<<1,3),gt(e,kc,Ft),Q1(e)},og=(e,t,r,n)=>{let i,s,o=0;e.level>0?(e.strm.data_type===2&&(e.strm.data_type=ng(e)),Sc(e,e.l_desc),Sc(e,e.d_desc),o=tg(e),i=e.opt_len+3+7>>>3,s=e.static_len+3+7>>>3,s<=i&&(i=s)):i=s=r+5,r+4<=i&&t!==-1?qf(e,t,r,n):e.strategy===4||s===i?(Fe(e,(Df<<1)+(n?1:0),3),Qu(e,Ft,as)):(Fe(e,(K1<<1)+(n?1:0),3),rg(e,e.l_desc.max_code+1,e.d_desc.max_code+1,o+1),Qu(e,e.dyn_ltree,e.dyn_dtree)),Zf(e),n&&Yf(e)},ag=(e,t,r)=>(e.pending_buf[e.sym_buf+e.sym_next++]=t,e.pending_buf[e.sym_buf+e.sym_next++]=t>>8,e.pending_buf[e.sym_buf+e.sym_next++]=r,t===0?e.dyn_ltree[r*2]++:(e.matches++,t--,e.dyn_ltree[(fs[r]+xs+1)*2]++,e.dyn_dtree[Xf(t)*2]++),e.sym_next===e.sym_end),lg=ig,cg=qf,dg=og,ug=ag,fg=sg,hg={_tr_init:lg,_tr_stored_block:cg,_tr_flush_block:dg,_tr_tally:ug,_tr_align:fg},mg=(e,t,r,n)=>{let i=e&65535|0,s=e>>>16&65535|0,o=0;for(;r!==0;){o=r>2e3?2e3:r,r-=o;do i=i+t[n++]|0,s=s+i|0;while(--o);i%=65521,s%=65521}return i|s<<16|0},ms=mg,pg=()=>{let e,t=[];for(var r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=e&1?3988292384^e>>>1:e>>>1;t[r]=e}return t},gg=new Uint32Array(pg()),yg=(e,t,r,n)=>{let i=gg,s=n+r;e^=-1;for(let o=n;o<s;o++)e=e>>>8^i[(e^t[o])&255];return e^-1},fe=yg,Pr={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"},Br={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8},{_tr_init:xg,_tr_stored_block:wc,_tr_flush_block:bg,_tr_tally:lr,_tr_align:_g}=hg,{Z_NO_FLUSH:cr,Z_PARTIAL_FLUSH:vg,Z_FULL_FLUSH:Sg,Z_FINISH:Qe,Z_BLOCK:rf,Z_OK:he,Z_STREAM_END:nf,Z_STREAM_ERROR:yt,Z_DATA_ERROR:wg,Z_BUF_ERROR:uc,Z_DEFAULT_COMPRESSION:Ag,Z_FILTERED:Mg,Z_HUFFMAN_ONLY:Aa,Z_RLE:Eg,Z_FIXED:Lg,Z_DEFAULT_STRATEGY:Tg,Z_UNKNOWN:Ig,Z_DEFLATED:Fa}=Br,Cg=9,Rg=15,kg=8,Fg=29,Pg=256,Ac=Pg+1+Fg,zg=30,Dg=19,Bg=2*Ac+1,Og=15,G=3,ar=258,xt=ar+G+1,Ng=32,Cn=42,Pc=57,Mc=69,Ec=73,Lc=91,Tc=103,kr=113,ss=666,Te=1,Fn=2,zr=3,Pn=4,Ug=3,Fr=(e,t)=>(e.msg=Pr[t],t),sf=e=>e*2-(e>4?9:0),or=e=>{let t=e.length;for(;--t>=0;)e[t]=0},Hg=e=>{let t,r,n,i=e.w_size;t=e.hash_size,n=t;do r=e.head[--n],e.head[n]=r>=i?r-i:0;while(--t);t=i,n=t;do r=e.prev[--n],e.prev[n]=r>=i?r-i:0;while(--t)},Vg=(e,t,r)=>(t<<e.hash_shift^r)&e.hash_mask,dr=Vg,Ne=e=>{let t=e.state,r=t.pending;r>e.avail_out&&(r=e.avail_out),r!==0&&(e.output.set(t.pending_buf.subarray(t.pending_out,t.pending_out+r),e.next_out),e.next_out+=r,t.pending_out+=r,e.total_out+=r,e.avail_out-=r,t.pending-=r,t.pending===0&&(t.pending_out=0))},Ue=(e,t)=>{bg(e,e.block_start>=0?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,Ne(e.strm)},K=(e,t)=>{e.pending_buf[e.pending++]=t},is=(e,t)=>{e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=t&255},Ic=(e,t,r,n)=>{let i=e.avail_in;return i>n&&(i=n),i===0?0:(e.avail_in-=i,t.set(e.input.subarray(e.next_in,e.next_in+i),r),e.state.wrap===1?e.adler=ms(e.adler,t,i,r):e.state.wrap===2&&(e.adler=fe(e.adler,t,i,r)),e.next_in+=i,e.total_in+=i,i)},jf=(e,t)=>{let r=e.max_chain_length,n=e.strstart,i,s,o=e.prev_length,a=e.nice_match,c=e.strstart>e.w_size-xt?e.strstart-(e.w_size-xt):0,l=e.window,d=e.w_mask,f=e.prev,u=e.strstart+ar,h=l[n+o-1],m=l[n+o];e.prev_length>=e.good_match&&(r>>=2),a>e.lookahead&&(a=e.lookahead);do if(i=t,!(l[i+o]!==m||l[i+o-1]!==h||l[i]!==l[n]||l[++i]!==l[n+1])){n+=2,i++;do;while(l[++n]===l[++i]&&l[++n]===l[++i]&&l[++n]===l[++i]&&l[++n]===l[++i]&&l[++n]===l[++i]&&l[++n]===l[++i]&&l[++n]===l[++i]&&l[++n]===l[++i]&&n<u);if(s=ar-(u-n),n=u-ar,s>o){if(e.match_start=t,o=s,s>=a)break;h=l[n+o-1],m=l[n+o]}}while((t=f[t&d])>c&&--r!==0);return o<=e.lookahead?o:e.lookahead},Rn=e=>{let t=e.w_size,r,n,i;do{if(n=e.window_size-e.lookahead-e.strstart,e.strstart>=t+(t-xt)&&(e.window.set(e.window.subarray(t,t+t-n),0),e.match_start-=t,e.strstart-=t,e.block_start-=t,e.insert>e.strstart&&(e.insert=e.strstart),Hg(e),n+=t),e.strm.avail_in===0)break;if(r=Ic(e.strm,e.window,e.strstart+e.lookahead,n),e.lookahead+=r,e.lookahead+e.insert>=G)for(i=e.strstart-e.insert,e.ins_h=e.window[i],e.ins_h=dr(e,e.ins_h,e.window[i+1]);e.insert&&(e.ins_h=dr(e,e.ins_h,e.window[i+G-1]),e.prev[i&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=i,i++,e.insert--,!(e.lookahead+e.insert<G)););}while(e.lookahead<xt&&e.strm.avail_in!==0)},Qf=(e,t)=>{let r=e.pending_buf_size-5>e.w_size?e.w_size:e.pending_buf_size-5,n,i,s,o=0,a=e.strm.avail_in;do{if(n=65535,s=e.bi_valid+42>>3,e.strm.avail_out<s||(s=e.strm.avail_out-s,i=e.strstart-e.block_start,n>i+e.strm.avail_in&&(n=i+e.strm.avail_in),n>s&&(n=s),n<r&&(n===0&&t!==Qe||t===cr||n!==i+e.strm.avail_in)))break;o=t===Qe&&n===i+e.strm.avail_in?1:0,wc(e,0,0,o),e.pending_buf[e.pending-4]=n,e.pending_buf[e.pending-3]=n>>8,e.pending_buf[e.pending-2]=~n,e.pending_buf[e.pending-1]=~n>>8,Ne(e.strm),i&&(i>n&&(i=n),e.strm.output.set(e.window.subarray(e.block_start,e.block_start+i),e.strm.next_out),e.strm.next_out+=i,e.strm.avail_out-=i,e.strm.total_out+=i,e.block_start+=i,n-=i),n&&(Ic(e.strm,e.strm.output,e.strm.next_out,n),e.strm.next_out+=n,e.strm.avail_out-=n,e.strm.total_out+=n)}while(o===0);return a-=e.strm.avail_in,a&&(a>=e.w_size?(e.matches=2,e.window.set(e.strm.input.subarray(e.strm.next_in-e.w_size,e.strm.next_in),0),e.strstart=e.w_size,e.insert=e.strstart):(e.window_size-e.strstart<=a&&(e.strstart-=e.w_size,e.window.set(e.window.subarray(e.w_size,e.w_size+e.strstart),0),e.matches<2&&e.matches++,e.insert>e.strstart&&(e.insert=e.strstart)),e.window.set(e.strm.input.subarray(e.strm.next_in-a,e.strm.next_in),e.strstart),e.strstart+=a,e.insert+=a>e.w_size-e.insert?e.w_size-e.insert:a),e.block_start=e.strstart),e.high_water<e.strstart&&(e.high_water=e.strstart),o?Pn:t!==cr&&t!==Qe&&e.strm.avail_in===0&&e.strstart===e.block_start?Fn:(s=e.window_size-e.strstart,e.strm.avail_in>s&&e.block_start>=e.w_size&&(e.block_start-=e.w_size,e.strstart-=e.w_size,e.window.set(e.window.subarray(e.w_size,e.w_size+e.strstart),0),e.matches<2&&e.matches++,s+=e.w_size,e.insert>e.strstart&&(e.insert=e.strstart)),s>e.strm.avail_in&&(s=e.strm.avail_in),s&&(Ic(e.strm,e.window,e.strstart,s),e.strstart+=s,e.insert+=s>e.w_size-e.insert?e.w_size-e.insert:s),e.high_water<e.strstart&&(e.high_water=e.strstart),s=e.bi_valid+42>>3,s=e.pending_buf_size-s>65535?65535:e.pending_buf_size-s,r=s>e.w_size?e.w_size:s,i=e.strstart-e.block_start,(i>=r||(i||t===Qe)&&t!==cr&&e.strm.avail_in===0&&i<=s)&&(n=i>s?s:i,o=t===Qe&&e.strm.avail_in===0&&n===i?1:0,wc(e,e.block_start,n,o),e.block_start+=n,Ne(e.strm)),o?zr:Te)},fc=(e,t)=>{let r,n;for(;;){if(e.lookahead<xt){if(Rn(e),e.lookahead<xt&&t===cr)return Te;if(e.lookahead===0)break}if(r=0,e.lookahead>=G&&(e.ins_h=dr(e,e.ins_h,e.window[e.strstart+G-1]),r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),r!==0&&e.strstart-r<=e.w_size-xt&&(e.match_length=jf(e,r)),e.match_length>=G)if(n=lr(e,e.strstart-e.match_start,e.match_length-G),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=G){e.match_length--;do e.strstart++,e.ins_h=dr(e,e.ins_h,e.window[e.strstart+G-1]),r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart;while(--e.match_length!==0);e.strstart++}else e.strstart+=e.match_length,e.match_length=0,e.ins_h=e.window[e.strstart],e.ins_h=dr(e,e.ins_h,e.window[e.strstart+1]);else n=lr(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++;if(n&&(Ue(e,!1),e.strm.avail_out===0))return Te}return e.insert=e.strstart<G-1?e.strstart:G-1,t===Qe?(Ue(e,!0),e.strm.avail_out===0?zr:Pn):e.sym_next&&(Ue(e,!1),e.strm.avail_out===0)?Te:Fn},Ln=(e,t)=>{let r,n,i;for(;;){if(e.lookahead<xt){if(Rn(e),e.lookahead<xt&&t===cr)return Te;if(e.lookahead===0)break}if(r=0,e.lookahead>=G&&(e.ins_h=dr(e,e.ins_h,e.window[e.strstart+G-1]),r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),e.prev_length=e.match_length,e.prev_match=e.match_start,e.match_length=G-1,r!==0&&e.prev_length<e.max_lazy_match&&e.strstart-r<=e.w_size-xt&&(e.match_length=jf(e,r),e.match_length<=5&&(e.strategy===Mg||e.match_length===G&&e.strstart-e.match_start>4096)&&(e.match_length=G-1)),e.prev_length>=G&&e.match_length<=e.prev_length){i=e.strstart+e.lookahead-G,n=lr(e,e.strstart-1-e.prev_match,e.prev_length-G),e.lookahead-=e.prev_length-1,e.prev_length-=2;do++e.strstart<=i&&(e.ins_h=dr(e,e.ins_h,e.window[e.strstart+G-1]),r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart);while(--e.prev_length!==0);if(e.match_available=0,e.match_length=G-1,e.strstart++,n&&(Ue(e,!1),e.strm.avail_out===0))return Te}else if(e.match_available){if(n=lr(e,0,e.window[e.strstart-1]),n&&Ue(e,!1),e.strstart++,e.lookahead--,e.strm.avail_out===0)return Te}else e.match_available=1,e.strstart++,e.lookahead--}return e.match_available&&(n=lr(e,0,e.window[e.strstart-1]),e.match_available=0),e.insert=e.strstart<G-1?e.strstart:G-1,t===Qe?(Ue(e,!0),e.strm.avail_out===0?zr:Pn):e.sym_next&&(Ue(e,!1),e.strm.avail_out===0)?Te:Fn},Gg=(e,t)=>{let r,n,i,s,o=e.window;for(;;){if(e.lookahead<=ar){if(Rn(e),e.lookahead<=ar&&t===cr)return Te;if(e.lookahead===0)break}if(e.match_length=0,e.lookahead>=G&&e.strstart>0&&(i=e.strstart-1,n=o[i],n===o[++i]&&n===o[++i]&&n===o[++i])){s=e.strstart+ar;do;while(n===o[++i]&&n===o[++i]&&n===o[++i]&&n===o[++i]&&n===o[++i]&&n===o[++i]&&n===o[++i]&&n===o[++i]&&i<s);e.match_length=ar-(s-i),e.match_length>e.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=G?(r=lr(e,1,e.match_length-G),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(r=lr(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),r&&(Ue(e,!1),e.strm.avail_out===0))return Te}return e.insert=0,t===Qe?(Ue(e,!0),e.strm.avail_out===0?zr:Pn):e.sym_next&&(Ue(e,!1),e.strm.avail_out===0)?Te:Fn},Wg=(e,t)=>{let r;for(;;){if(e.lookahead===0&&(Rn(e),e.lookahead===0)){if(t===cr)return Te;break}if(e.match_length=0,r=lr(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,r&&(Ue(e,!1),e.strm.avail_out===0))return Te}return e.insert=0,t===Qe?(Ue(e,!0),e.strm.avail_out===0?zr:Pn):e.sym_next&&(Ue(e,!1),e.strm.avail_out===0)?Te:Fn};function pt(e,t,r,n,i){this.good_length=e,this.max_lazy=t,this.nice_length=r,this.max_chain=n,this.func=i}var os=[new pt(0,0,0,0,Qf),new pt(4,4,8,4,fc),new pt(4,5,16,8,fc),new pt(4,6,32,32,fc),new pt(4,4,16,16,Ln),new pt(8,16,32,32,Ln),new pt(8,16,128,128,Ln),new pt(8,32,128,256,Ln),new pt(32,128,258,1024,Ln),new pt(32,258,258,4096,Ln)],Xg=e=>{e.window_size=2*e.w_size,or(e.head),e.max_lazy_match=os[e.level].max_lazy,e.good_match=os[e.level].good_length,e.nice_match=os[e.level].nice_length,e.max_chain_length=os[e.level].max_chain,e.strstart=0,e.block_start=0,e.lookahead=0,e.insert=0,e.match_length=e.prev_length=G-1,e.match_available=0,e.ins_h=0};function Kg(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=Fa,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new Uint16Array(Bg*2),this.dyn_dtree=new Uint16Array((2*zg+1)*2),this.bl_tree=new Uint16Array((2*Dg+1)*2),or(this.dyn_ltree),or(this.dyn_dtree),or(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new Uint16Array(Og+1),this.heap=new Uint16Array(2*Ac+1),or(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new Uint16Array(2*Ac+1),or(this.depth),this.sym_buf=0,this.lit_bufsize=0,this.sym_next=0,this.sym_end=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}var bs=e=>{if(!e)return 1;let t=e.state;return!t||t.strm!==e||t.status!==Cn&&t.status!==Pc&&t.status!==Mc&&t.status!==Ec&&t.status!==Lc&&t.status!==Tc&&t.status!==kr&&t.status!==ss?1:0},Jf=e=>{if(bs(e))return Fr(e,yt);e.total_in=e.total_out=0,e.data_type=Ig;let t=e.state;return t.pending=0,t.pending_out=0,t.wrap<0&&(t.wrap=-t.wrap),t.status=t.wrap===2?Pc:t.wrap?Cn:kr,e.adler=t.wrap===2?0:1,t.last_flush=-2,xg(t),he},e0=e=>{let t=Jf(e);return t===he&&Xg(e.state),t},$g=(e,t)=>bs(e)||e.state.wrap!==2?yt:(e.state.gzhead=t,he),t0=(e,t,r,n,i,s)=>{if(!e)return yt;let o=1;if(t===Ag&&(t=6),n<0?(o=0,n=-n):n>15&&(o=2,n-=16),i<1||i>Cg||r!==Fa||n<8||n>15||t<0||t>9||s<0||s>Lg||n===8&&o!==1)return Fr(e,yt);n===8&&(n=9);let a=new Kg;return e.state=a,a.strm=e,a.status=Cn,a.wrap=o,a.gzhead=null,a.w_bits=n,a.w_size=1<<a.w_bits,a.w_mask=a.w_size-1,a.hash_bits=i+7,a.hash_size=1<<a.hash_bits,a.hash_mask=a.hash_size-1,a.hash_shift=~~((a.hash_bits+G-1)/G),a.window=new Uint8Array(a.w_size*2),a.head=new Uint16Array(a.hash_size),a.prev=new Uint16Array(a.w_size),a.lit_bufsize=1<<i+6,a.pending_buf_size=a.lit_bufsize*4,a.pending_buf=new Uint8Array(a.pending_buf_size),a.sym_buf=a.lit_bufsize,a.sym_end=(a.lit_bufsize-1)*3,a.level=t,a.strategy=s,a.method=r,e0(e)},Zg=(e,t)=>t0(e,t,Fa,Rg,kg,Tg),Yg=(e,t)=>{if(bs(e)||t>rf||t<0)return e?Fr(e,yt):yt;let r=e.state;if(!e.output||e.avail_in!==0&&!e.input||r.status===ss&&t!==Qe)return Fr(e,e.avail_out===0?uc:yt);let n=r.last_flush;if(r.last_flush=t,r.pending!==0){if(Ne(e),e.avail_out===0)return r.last_flush=-1,he}else if(e.avail_in===0&&sf(t)<=sf(n)&&t!==Qe)return Fr(e,uc);if(r.status===ss&&e.avail_in!==0)return Fr(e,uc);if(r.status===Cn&&r.wrap===0&&(r.status=kr),r.status===Cn){let i=Fa+(r.w_bits-8<<4)<<8,s=-1;if(r.strategy>=Aa||r.level<2?s=0:r.level<6?s=1:r.level===6?s=2:s=3,i|=s<<6,r.strstart!==0&&(i|=Ng),i+=31-i%31,is(r,i),r.strstart!==0&&(is(r,e.adler>>>16),is(r,e.adler&65535)),e.adler=1,r.status=kr,Ne(e),r.pending!==0)return r.last_flush=-1,he}if(r.status===Pc){if(e.adler=0,K(r,31),K(r,139),K(r,8),r.gzhead)K(r,(r.gzhead.text?1:0)+(r.gzhead.hcrc?2:0)+(r.gzhead.extra?4:0)+(r.gzhead.name?8:0)+(r.gzhead.comment?16:0)),K(r,r.gzhead.time&255),K(r,r.gzhead.time>>8&255),K(r,r.gzhead.time>>16&255),K(r,r.gzhead.time>>24&255),K(r,r.level===9?2:r.strategy>=Aa||r.level<2?4:0),K(r,r.gzhead.os&255),r.gzhead.extra&&r.gzhead.extra.length&&(K(r,r.gzhead.extra.length&255),K(r,r.gzhead.extra.length>>8&255)),r.gzhead.hcrc&&(e.adler=fe(e.adler,r.pending_buf,r.pending,0)),r.gzindex=0,r.status=Mc;else if(K(r,0),K(r,0),K(r,0),K(r,0),K(r,0),K(r,r.level===9?2:r.strategy>=Aa||r.level<2?4:0),K(r,Ug),r.status=kr,Ne(e),r.pending!==0)return r.last_flush=-1,he}if(r.status===Mc){if(r.gzhead.extra){let i=r.pending,s=(r.gzhead.extra.length&65535)-r.gzindex;for(;r.pending+s>r.pending_buf_size;){let a=r.pending_buf_size-r.pending;if(r.pending_buf.set(r.gzhead.extra.subarray(r.gzindex,r.gzindex+a),r.pending),r.pending=r.pending_buf_size,r.gzhead.hcrc&&r.pending>i&&(e.adler=fe(e.adler,r.pending_buf,r.pending-i,i)),r.gzindex+=a,Ne(e),r.pending!==0)return r.last_flush=-1,he;i=0,s-=a}let o=new Uint8Array(r.gzhead.extra);r.pending_buf.set(o.subarray(r.gzindex,r.gzindex+s),r.pending),r.pending+=s,r.gzhead.hcrc&&r.pending>i&&(e.adler=fe(e.adler,r.pending_buf,r.pending-i,i)),r.gzindex=0}r.status=Ec}if(r.status===Ec){if(r.gzhead.name){let i=r.pending,s;do{if(r.pending===r.pending_buf_size){if(r.gzhead.hcrc&&r.pending>i&&(e.adler=fe(e.adler,r.pending_buf,r.pending-i,i)),Ne(e),r.pending!==0)return r.last_flush=-1,he;i=0}r.gzindex<r.gzhead.name.length?s=r.gzhead.name.charCodeAt(r.gzindex++)&255:s=0,K(r,s)}while(s!==0);r.gzhead.hcrc&&r.pending>i&&(e.adler=fe(e.adler,r.pending_buf,r.pending-i,i)),r.gzindex=0}r.status=Lc}if(r.status===Lc){if(r.gzhead.comment){let i=r.pending,s;do{if(r.pending===r.pending_buf_size){if(r.gzhead.hcrc&&r.pending>i&&(e.adler=fe(e.adler,r.pending_buf,r.pending-i,i)),Ne(e),r.pending!==0)return r.last_flush=-1,he;i=0}r.gzindex<r.gzhead.comment.length?s=r.gzhead.comment.charCodeAt(r.gzindex++)&255:s=0,K(r,s)}while(s!==0);r.gzhead.hcrc&&r.pending>i&&(e.adler=fe(e.adler,r.pending_buf,r.pending-i,i))}r.status=Tc}if(r.status===Tc){if(r.gzhead.hcrc){if(r.pending+2>r.pending_buf_size&&(Ne(e),r.pending!==0))return r.last_flush=-1,he;K(r,e.adler&255),K(r,e.adler>>8&255),e.adler=0}if(r.status=kr,Ne(e),r.pending!==0)return r.last_flush=-1,he}if(e.avail_in!==0||r.lookahead!==0||t!==cr&&r.status!==ss){let i=r.level===0?Qf(r,t):r.strategy===Aa?Wg(r,t):r.strategy===Eg?Gg(r,t):os[r.level].func(r,t);if((i===zr||i===Pn)&&(r.status=ss),i===Te||i===zr)return e.avail_out===0&&(r.last_flush=-1),he;if(i===Fn&&(t===vg?_g(r):t!==rf&&(wc(r,0,0,!1),t===Sg&&(or(r.head),r.lookahead===0&&(r.strstart=0,r.block_start=0,r.insert=0))),Ne(e),e.avail_out===0))return r.last_flush=-1,he}return t!==Qe?he:r.wrap<=0?nf:(r.wrap===2?(K(r,e.adler&255),K(r,e.adler>>8&255),K(r,e.adler>>16&255),K(r,e.adler>>24&255),K(r,e.total_in&255),K(r,e.total_in>>8&255),K(r,e.total_in>>16&255),K(r,e.total_in>>24&255)):(is(r,e.adler>>>16),is(r,e.adler&65535)),Ne(e),r.wrap>0&&(r.wrap=-r.wrap),r.pending!==0?he:nf)},qg=e=>{if(bs(e))return yt;let t=e.state.status;return e.state=null,t===kr?Fr(e,wg):he},jg=(e,t)=>{let r=t.length;if(bs(e))return yt;let n=e.state,i=n.wrap;if(i===2||i===1&&n.status!==Cn||n.lookahead)return yt;if(i===1&&(e.adler=ms(e.adler,t,r,0)),n.wrap=0,r>=n.w_size){i===0&&(or(n.head),n.strstart=0,n.block_start=0,n.insert=0);let c=new Uint8Array(n.w_size);c.set(t.subarray(r-n.w_size,r),0),t=c,r=n.w_size}let s=e.avail_in,o=e.next_in,a=e.input;for(e.avail_in=r,e.next_in=0,e.input=t,Rn(n);n.lookahead>=G;){let c=n.strstart,l=n.lookahead-(G-1);do n.ins_h=dr(n,n.ins_h,n.window[c+G-1]),n.prev[c&n.w_mask]=n.head[n.ins_h],n.head[n.ins_h]=c,c++;while(--l);n.strstart=c,n.lookahead=G-1,Rn(n)}return n.strstart+=n.lookahead,n.block_start=n.strstart,n.insert=n.lookahead,n.lookahead=0,n.match_length=n.prev_length=G-1,n.match_available=0,e.next_in=o,e.input=a,e.avail_in=s,n.wrap=i,he},Qg=Zg,Jg=t0,ey=e0,ty=Jf,ry=$g,ny=Yg,iy=qg,sy=jg,oy="pako deflate (from Nodeca project)",ls={deflateInit:Qg,deflateInit2:Jg,deflateReset:ey,deflateResetKeep:ty,deflateSetHeader:ry,deflate:ny,deflateEnd:iy,deflateSetDictionary:sy,deflateInfo:oy},ay=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),ly=function(e){let t=Array.prototype.slice.call(arguments,1);for(;t.length;){let r=t.shift();if(r){if(typeof r!="object")throw new TypeError(r+"must be non-object");for(let n in r)ay(r,n)&&(e[n]=r[n])}}return e},cy=e=>{let t=0;for(let n=0,i=e.length;n<i;n++)t+=e[n].length;let r=new Uint8Array(t);for(let n=0,i=0,s=e.length;n<s;n++){let o=e[n];r.set(o,i),i+=o.length}return r},Pa={assign:ly,flattenChunks:cy},r0=!0;try{String.fromCharCode.apply(null,new Uint8Array(1))}catch{r0=!1}var ps=new Uint8Array(256);for(let e=0;e<256;e++)ps[e]=e>=252?6:e>=248?5:e>=240?4:e>=224?3:e>=192?2:1;ps[254]=ps[254]=1;var dy=e=>{if(typeof TextEncoder=="function"&&TextEncoder.prototype.encode)return new TextEncoder().encode(e);let t,r,n,i,s,o=e.length,a=0;for(i=0;i<o;i++)r=e.charCodeAt(i),(r&64512)===55296&&i+1<o&&(n=e.charCodeAt(i+1),(n&64512)===56320&&(r=65536+(r-55296<<10)+(n-56320),i++)),a+=r<128?1:r<2048?2:r<65536?3:4;for(t=new Uint8Array(a),s=0,i=0;s<a;i++)r=e.charCodeAt(i),(r&64512)===55296&&i+1<o&&(n=e.charCodeAt(i+1),(n&64512)===56320&&(r=65536+(r-55296<<10)+(n-56320),i++)),r<128?t[s++]=r:r<2048?(t[s++]=192|r>>>6,t[s++]=128|r&63):r<65536?(t[s++]=224|r>>>12,t[s++]=128|r>>>6&63,t[s++]=128|r&63):(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63,t[s++]=128|r>>>6&63,t[s++]=128|r&63);return t},uy=(e,t)=>{if(t<65534&&e.subarray&&r0)return String.fromCharCode.apply(null,e.length===t?e:e.subarray(0,t));let r="";for(let n=0;n<t;n++)r+=String.fromCharCode(e[n]);return r},fy=(e,t)=>{let r=t||e.length;if(typeof TextDecoder=="function"&&TextDecoder.prototype.decode)return new TextDecoder().decode(e.subarray(0,t));let n,i,s=new Array(r*2);for(i=0,n=0;n<r;){let o=e[n++];if(o<128){s[i++]=o;continue}let a=ps[o];if(a>4){s[i++]=65533,n+=a-1;continue}for(o&=a===2?31:a===3?15:7;a>1&&n<r;)o=o<<6|e[n++]&63,a--;if(a>1){s[i++]=65533;continue}o<65536?s[i++]=o:(o-=65536,s[i++]=55296|o>>10&1023,s[i++]=56320|o&1023)}return uy(s,i)},hy=(e,t)=>{t=t||e.length,t>e.length&&(t=e.length);let r=t-1;for(;r>=0&&(e[r]&192)===128;)r--;return r<0||r===0?t:r+ps[e[r]]>t?r:t},gs={string2buf:dy,buf2string:fy,utf8border:hy};function my(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}var n0=my,i0=Object.prototype.toString,{Z_NO_FLUSH:py,Z_SYNC_FLUSH:gy,Z_FULL_FLUSH:yy,Z_FINISH:xy,Z_OK:Ra,Z_STREAM_END:by,Z_DEFAULT_COMPRESSION:_y,Z_DEFAULT_STRATEGY:vy,Z_DEFLATED:Sy}=Br;function _s(e){this.options=Pa.assign({level:_y,method:Sy,chunkSize:16384,windowBits:15,memLevel:8,strategy:vy},e||{});let t=this.options;t.raw&&t.windowBits>0?t.windowBits=-t.windowBits:t.gzip&&t.windowBits>0&&t.windowBits<16&&(t.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new n0,this.strm.avail_out=0;let r=ls.deflateInit2(this.strm,t.level,t.method,t.windowBits,t.memLevel,t.strategy);if(r!==Ra)throw new Error(Pr[r]);if(t.header&&ls.deflateSetHeader(this.strm,t.header),t.dictionary){let n;if(typeof t.dictionary=="string"?n=gs.string2buf(t.dictionary):i0.call(t.dictionary)==="[object ArrayBuffer]"?n=new Uint8Array(t.dictionary):n=t.dictionary,r=ls.deflateSetDictionary(this.strm,n),r!==Ra)throw new Error(Pr[r]);this._dict_set=!0}}_s.prototype.push=function(e,t){let r=this.strm,n=this.options.chunkSize,i,s;if(this.ended)return!1;for(t===~~t?s=t:s=t===!0?xy:py,typeof e=="string"?r.input=gs.string2buf(e):i0.call(e)==="[object ArrayBuffer]"?r.input=new Uint8Array(e):r.input=e,r.next_in=0,r.avail_in=r.input.length;;){if(r.avail_out===0&&(r.output=new Uint8Array(n),r.next_out=0,r.avail_out=n),(s===gy||s===yy)&&r.avail_out<=6){this.onData(r.output.subarray(0,r.next_out)),r.avail_out=0;continue}if(i=ls.deflate(r,s),i===by)return r.next_out>0&&this.onData(r.output.subarray(0,r.next_out)),i=ls.deflateEnd(this.strm),this.onEnd(i),this.ended=!0,i===Ra;if(r.avail_out===0){this.onData(r.output);continue}if(s>0&&r.next_out>0){this.onData(r.output.subarray(0,r.next_out)),r.avail_out=0;continue}if(r.avail_in===0)break}return!0};_s.prototype.onData=function(e){this.chunks.push(e)};_s.prototype.onEnd=function(e){e===Ra&&(this.result=Pa.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg};function zc(e,t){let r=new _s(t);if(r.push(e,!0),r.err)throw r.msg||Pr[r.err];return r.result}function wy(e,t){return t=t||{},t.raw=!0,zc(e,t)}function Ay(e,t){return t=t||{},t.gzip=!0,zc(e,t)}var My=_s,Ey=zc,Ly=wy,Ty=Ay,Iy=Br,Cy={Deflate:My,deflate:Ey,deflateRaw:Ly,gzip:Ty,constants:Iy},Ma=16209,Ry=16191,ky=function(t,r){let n,i,s,o,a,c,l,d,f,u,h,m,g,p,y,_,b,x,v,A,S,M,L,w,T=t.state;n=t.next_in,L=t.input,i=n+(t.avail_in-5),s=t.next_out,w=t.output,o=s-(r-t.avail_out),a=s+(t.avail_out-257),c=T.dmax,l=T.wsize,d=T.whave,f=T.wnext,u=T.window,h=T.hold,m=T.bits,g=T.lencode,p=T.distcode,y=(1<<T.lenbits)-1,_=(1<<T.distbits)-1;e:do{m<15&&(h+=L[n++]<<m,m+=8,h+=L[n++]<<m,m+=8),b=g[h&y];t:for(;;){if(x=b>>>24,h>>>=x,m-=x,x=b>>>16&255,x===0)w[s++]=b&65535;else if(x&16){v=b&65535,x&=15,x&&(m<x&&(h+=L[n++]<<m,m+=8),v+=h&(1<<x)-1,h>>>=x,m-=x),m<15&&(h+=L[n++]<<m,m+=8,h+=L[n++]<<m,m+=8),b=p[h&_];r:for(;;){if(x=b>>>24,h>>>=x,m-=x,x=b>>>16&255,x&16){if(A=b&65535,x&=15,m<x&&(h+=L[n++]<<m,m+=8,m<x&&(h+=L[n++]<<m,m+=8)),A+=h&(1<<x)-1,A>c){t.msg="invalid distance too far back",T.mode=Ma;break e}if(h>>>=x,m-=x,x=s-o,A>x){if(x=A-x,x>d&&T.sane){t.msg="invalid distance too far back",T.mode=Ma;break e}if(S=0,M=u,f===0){if(S+=l-x,x<v){v-=x;do w[s++]=u[S++];while(--x);S=s-A,M=w}}else if(f<x){if(S+=l+f-x,x-=f,x<v){v-=x;do w[s++]=u[S++];while(--x);if(S=0,f<v){x=f,v-=x;do w[s++]=u[S++];while(--x);S=s-A,M=w}}}else if(S+=f-x,x<v){v-=x;do w[s++]=u[S++];while(--x);S=s-A,M=w}for(;v>2;)w[s++]=M[S++],w[s++]=M[S++],w[s++]=M[S++],v-=3;v&&(w[s++]=M[S++],v>1&&(w[s++]=M[S++]))}else{S=s-A;do w[s++]=w[S++],w[s++]=w[S++],w[s++]=w[S++],v-=3;while(v>2);v&&(w[s++]=w[S++],v>1&&(w[s++]=w[S++]))}}else if((x&64)===0){b=p[(b&65535)+(h&(1<<x)-1)];continue r}else{t.msg="invalid distance code",T.mode=Ma;break e}break}}else if((x&64)===0){b=g[(b&65535)+(h&(1<<x)-1)];continue t}else if(x&32){T.mode=Ry;break e}else{t.msg="invalid literal/length code",T.mode=Ma;break e}break}}while(n<i&&s<a);v=m>>3,n-=v,m-=v<<3,h&=(1<<m)-1,t.next_in=n,t.next_out=s,t.avail_in=n<i?5+(i-n):5-(n-i),t.avail_out=s<a?257+(a-s):257-(s-a),T.hold=h,T.bits=m},Tn=15,of=852,af=592,lf=0,hc=1,cf=2,Fy=new Uint16Array([3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0]),Py=new Uint8Array([16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78]),zy=new Uint16Array([1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0]),Dy=new Uint8Array([16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64]),By=(e,t,r,n,i,s,o,a)=>{let c=a.bits,l=0,d=0,f=0,u=0,h=0,m=0,g=0,p=0,y=0,_=0,b,x,v,A,S,M=null,L,w=new Uint16Array(Tn+1),T=new Uint16Array(Tn+1),F=null,U,C,Z;for(l=0;l<=Tn;l++)w[l]=0;for(d=0;d<n;d++)w[t[r+d]]++;for(h=c,u=Tn;u>=1&&w[u]===0;u--);if(h>u&&(h=u),u===0)return i[s++]=1<<24|64<<16|0,i[s++]=1<<24|64<<16|0,a.bits=1,0;for(f=1;f<u&&w[f]===0;f++);for(h<f&&(h=f),p=1,l=1;l<=Tn;l++)if(p<<=1,p-=w[l],p<0)return-1;if(p>0&&(e===lf||u!==1))return-1;for(T[1]=0,l=1;l<Tn;l++)T[l+1]=T[l]+w[l];for(d=0;d<n;d++)t[r+d]!==0&&(o[T[t[r+d]]++]=d);if(e===lf?(M=F=o,L=20):e===hc?(M=Fy,F=Py,L=257):(M=zy,F=Dy,L=0),_=0,d=0,l=f,S=s,m=h,g=0,v=-1,y=1<<h,A=y-1,e===hc&&y>of||e===cf&&y>af)return 1;for(;;){U=l-g,o[d]+1<L?(C=0,Z=o[d]):o[d]>=L?(C=F[o[d]-L],Z=M[o[d]-L]):(C=96,Z=0),b=1<<l-g,x=1<<m,f=x;do x-=b,i[S+(_>>g)+x]=U<<24|C<<16|Z|0;while(x!==0);for(b=1<<l-1;_&b;)b>>=1;if(b!==0?(_&=b-1,_+=b):_=0,d++,--w[l]===0){if(l===u)break;l=t[r+o[d]]}if(l>h&&(_&A)!==v){for(g===0&&(g=h),S+=f,m=l-g,p=1<<m;m+g<u&&(p-=w[m+g],!(p<=0));)m++,p<<=1;if(y+=1<<m,e===hc&&y>of||e===cf&&y>af)return 1;v=_&A,i[v]=h<<24|m<<16|S-s|0}}return _!==0&&(i[S+_]=l-g<<24|64<<16|0),a.bits=h,0},cs=By,Oy=0,s0=1,o0=2,{Z_FINISH:df,Z_BLOCK:Ny,Z_TREES:Ea,Z_OK:Dr,Z_STREAM_END:Uy,Z_NEED_DICT:Hy,Z_STREAM_ERROR:Je,Z_DATA_ERROR:a0,Z_MEM_ERROR:l0,Z_BUF_ERROR:Vy,Z_DEFLATED:uf}=Br,za=16180,ff=16181,hf=16182,mf=16183,pf=16184,gf=16185,yf=16186,xf=16187,bf=16188,_f=16189,ka=16190,kt=16191,mc=16192,vf=16193,pc=16194,Sf=16195,wf=16196,Af=16197,Mf=16198,La=16199,Ta=16200,Ef=16201,Lf=16202,Tf=16203,If=16204,Cf=16205,gc=16206,Rf=16207,kf=16208,ie=16209,c0=16210,d0=16211,Gy=852,Wy=592,Xy=15,Ky=Xy,Ff=e=>(e>>>24&255)+(e>>>8&65280)+((e&65280)<<8)+((e&255)<<24);function $y(){this.strm=null,this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new Uint16Array(320),this.work=new Uint16Array(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}var Or=e=>{if(!e)return 1;let t=e.state;return!t||t.strm!==e||t.mode<za||t.mode>d0?1:0},u0=e=>{if(Or(e))return Je;let t=e.state;return e.total_in=e.total_out=t.total=0,e.msg="",t.wrap&&(e.adler=t.wrap&1),t.mode=za,t.last=0,t.havedict=0,t.flags=-1,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new Int32Array(Gy),t.distcode=t.distdyn=new Int32Array(Wy),t.sane=1,t.back=-1,Dr},f0=e=>{if(Or(e))return Je;let t=e.state;return t.wsize=0,t.whave=0,t.wnext=0,u0(e)},h0=(e,t)=>{let r;if(Or(e))return Je;let n=e.state;return t<0?(r=0,t=-t):(r=(t>>4)+5,t<48&&(t&=15)),t&&(t<8||t>15)?Je:(n.window!==null&&n.wbits!==t&&(n.window=null),n.wrap=r,n.wbits=t,f0(e))},m0=(e,t)=>{if(!e)return Je;let r=new $y;e.state=r,r.strm=e,r.window=null,r.mode=za;let n=h0(e,t);return n!==Dr&&(e.state=null),n},Zy=e=>m0(e,Ky),Pf=!0,yc,xc,Yy=e=>{if(Pf){yc=new Int32Array(512),xc=new Int32Array(32);let t=0;for(;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(cs(s0,e.lens,0,288,yc,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;cs(o0,e.lens,0,32,xc,0,e.work,{bits:5}),Pf=!1}e.lencode=yc,e.lenbits=9,e.distcode=xc,e.distbits=5},p0=(e,t,r,n)=>{let i,s=e.state;return s.window===null&&(s.wsize=1<<s.wbits,s.wnext=0,s.whave=0,s.window=new Uint8Array(s.wsize)),n>=s.wsize?(s.window.set(t.subarray(r-s.wsize,r),0),s.wnext=0,s.whave=s.wsize):(i=s.wsize-s.wnext,i>n&&(i=n),s.window.set(t.subarray(r-n,r-n+i),s.wnext),n-=i,n?(s.window.set(t.subarray(r-n,r),0),s.wnext=n,s.whave=s.wsize):(s.wnext+=i,s.wnext===s.wsize&&(s.wnext=0),s.whave<s.wsize&&(s.whave+=i))),0},qy=(e,t)=>{let r,n,i,s,o,a,c,l,d,f,u,h,m,g,p=0,y,_,b,x,v,A,S,M,L=new Uint8Array(4),w,T,F=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);if(Or(e)||!e.output||!e.input&&e.avail_in!==0)return Je;r=e.state,r.mode===kt&&(r.mode=mc),o=e.next_out,i=e.output,c=e.avail_out,s=e.next_in,n=e.input,a=e.avail_in,l=r.hold,d=r.bits,f=a,u=c,M=Dr;e:for(;;)switch(r.mode){case za:if(r.wrap===0){r.mode=mc;break}for(;d<16;){if(a===0)break e;a--,l+=n[s++]<<d,d+=8}if(r.wrap&2&&l===35615){r.wbits===0&&(r.wbits=15),r.check=0,L[0]=l&255,L[1]=l>>>8&255,r.check=fe(r.check,L,2,0),l=0,d=0,r.mode=ff;break}if(r.head&&(r.head.done=!1),!(r.wrap&1)||(((l&255)<<8)+(l>>8))%31){e.msg="incorrect header check",r.mode=ie;break}if((l&15)!==uf){e.msg="unknown compression method",r.mode=ie;break}if(l>>>=4,d-=4,S=(l&15)+8,r.wbits===0&&(r.wbits=S),S>15||S>r.wbits){e.msg="invalid window size",r.mode=ie;break}r.dmax=1<<r.wbits,r.flags=0,e.adler=r.check=1,r.mode=l&512?_f:kt,l=0,d=0;break;case ff:for(;d<16;){if(a===0)break e;a--,l+=n[s++]<<d,d+=8}if(r.flags=l,(r.flags&255)!==uf){e.msg="unknown compression method",r.mode=ie;break}if(r.flags&57344){e.msg="unknown header flags set",r.mode=ie;break}r.head&&(r.head.text=l>>8&1),r.flags&512&&r.wrap&4&&(L[0]=l&255,L[1]=l>>>8&255,r.check=fe(r.check,L,2,0)),l=0,d=0,r.mode=hf;case hf:for(;d<32;){if(a===0)break e;a--,l+=n[s++]<<d,d+=8}r.head&&(r.head.time=l),r.flags&512&&r.wrap&4&&(L[0]=l&255,L[1]=l>>>8&255,L[2]=l>>>16&255,L[3]=l>>>24&255,r.check=fe(r.check,L,4,0)),l=0,d=0,r.mode=mf;case mf:for(;d<16;){if(a===0)break e;a--,l+=n[s++]<<d,d+=8}r.head&&(r.head.xflags=l&255,r.head.os=l>>8),r.flags&512&&r.wrap&4&&(L[0]=l&255,L[1]=l>>>8&255,r.check=fe(r.check,L,2,0)),l=0,d=0,r.mode=pf;case pf:if(r.flags&1024){for(;d<16;){if(a===0)break e;a--,l+=n[s++]<<d,d+=8}r.length=l,r.head&&(r.head.extra_len=l),r.flags&512&&r.wrap&4&&(L[0]=l&255,L[1]=l>>>8&255,r.check=fe(r.check,L,2,0)),l=0,d=0}else r.head&&(r.head.extra=null);r.mode=gf;case gf:if(r.flags&1024&&(h=r.length,h>a&&(h=a),h&&(r.head&&(S=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Uint8Array(r.head.extra_len)),r.head.extra.set(n.subarray(s,s+h),S)),r.flags&512&&r.wrap&4&&(r.check=fe(r.check,n,h,s)),a-=h,s+=h,r.length-=h),r.length))break e;r.length=0,r.mode=yf;case yf:if(r.flags&2048){if(a===0)break e;h=0;do S=n[s+h++],r.head&&S&&r.length<65536&&(r.head.name+=String.fromCharCode(S));while(S&&h<a);if(r.flags&512&&r.wrap&4&&(r.check=fe(r.check,n,h,s)),a-=h,s+=h,S)break e}else r.head&&(r.head.name=null);r.length=0,r.mode=xf;case xf:if(r.flags&4096){if(a===0)break e;h=0;do S=n[s+h++],r.head&&S&&r.length<65536&&(r.head.comment+=String.fromCharCode(S));while(S&&h<a);if(r.flags&512&&r.wrap&4&&(r.check=fe(r.check,n,h,s)),a-=h,s+=h,S)break e}else r.head&&(r.head.comment=null);r.mode=bf;case bf:if(r.flags&512){for(;d<16;){if(a===0)break e;a--,l+=n[s++]<<d,d+=8}if(r.wrap&4&&l!==(r.check&65535)){e.msg="header crc mismatch",r.mode=ie;break}l=0,d=0}r.head&&(r.head.hcrc=r.flags>>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=kt;break;case _f:for(;d<32;){if(a===0)break e;a--,l+=n[s++]<<d,d+=8}e.adler=r.check=Ff(l),l=0,d=0,r.mode=ka;case ka:if(r.havedict===0)return e.next_out=o,e.avail_out=c,e.next_in=s,e.avail_in=a,r.hold=l,r.bits=d,Hy;e.adler=r.check=1,r.mode=kt;case kt:if(t===Ny||t===Ea)break e;case mc:if(r.last){l>>>=d&7,d-=d&7,r.mode=gc;break}for(;d<3;){if(a===0)break e;a--,l+=n[s++]<<d,d+=8}switch(r.last=l&1,l>>>=1,d-=1,l&3){case 0:r.mode=vf;break;case 1:if(Yy(r),r.mode=La,t===Ea){l>>>=2,d-=2;break e}break;case 2:r.mode=wf;break;case 3:e.msg="invalid block type",r.mode=ie}l>>>=2,d-=2;break;case vf:for(l>>>=d&7,d-=d&7;d<32;){if(a===0)break e;a--,l+=n[s++]<<d,d+=8}if((l&65535)!==(l>>>16^65535)){e.msg="invalid stored block lengths",r.mode=ie;break}if(r.length=l&65535,l=0,d=0,r.mode=pc,t===Ea)break e;case pc:r.mode=Sf;case Sf:if(h=r.length,h){if(h>a&&(h=a),h>c&&(h=c),h===0)break e;i.set(n.subarray(s,s+h),o),a-=h,s+=h,c-=h,o+=h,r.length-=h;break}r.mode=kt;break;case wf:for(;d<14;){if(a===0)break e;a--,l+=n[s++]<<d,d+=8}if(r.nlen=(l&31)+257,l>>>=5,d-=5,r.ndist=(l&31)+1,l>>>=5,d-=5,r.ncode=(l&15)+4,l>>>=4,d-=4,r.nlen>286||r.ndist>30){e.msg="too many length or distance symbols",r.mode=ie;break}r.have=0,r.mode=Af;case Af:for(;r.have<r.ncode;){for(;d<3;){if(a===0)break e;a--,l+=n[s++]<<d,d+=8}r.lens[F[r.have++]]=l&7,l>>>=3,d-=3}for(;r.have<19;)r.lens[F[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,w={bits:r.lenbits},M=cs(Oy,r.lens,0,19,r.lencode,0,r.work,w),r.lenbits=w.bits,M){e.msg="invalid code lengths set",r.mode=ie;break}r.have=0,r.mode=Mf;case Mf:for(;r.have<r.nlen+r.ndist;){for(;p=r.lencode[l&(1<<r.lenbits)-1],y=p>>>24,_=p>>>16&255,b=p&65535,!(y<=d);){if(a===0)break e;a--,l+=n[s++]<<d,d+=8}if(b<16)l>>>=y,d-=y,r.lens[r.have++]=b;else{if(b===16){for(T=y+2;d<T;){if(a===0)break e;a--,l+=n[s++]<<d,d+=8}if(l>>>=y,d-=y,r.have===0){e.msg="invalid bit length repeat",r.mode=ie;break}S=r.lens[r.have-1],h=3+(l&3),l>>>=2,d-=2}else if(b===17){for(T=y+3;d<T;){if(a===0)break e;a--,l+=n[s++]<<d,d+=8}l>>>=y,d-=y,S=0,h=3+(l&7),l>>>=3,d-=3}else{for(T=y+7;d<T;){if(a===0)break e;a--,l+=n[s++]<<d,d+=8}l>>>=y,d-=y,S=0,h=11+(l&127),l>>>=7,d-=7}if(r.have+h>r.nlen+r.ndist){e.msg="invalid bit length repeat",r.mode=ie;break}for(;h--;)r.lens[r.have++]=S}}if(r.mode===ie)break;if(r.lens[256]===0){e.msg="invalid code -- missing end-of-block",r.mode=ie;break}if(r.lenbits=9,w={bits:r.lenbits},M=cs(s0,r.lens,0,r.nlen,r.lencode,0,r.work,w),r.lenbits=w.bits,M){e.msg="invalid literal/lengths set",r.mode=ie;break}if(r.distbits=6,r.distcode=r.distdyn,w={bits:r.distbits},M=cs(o0,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,w),r.distbits=w.bits,M){e.msg="invalid distances set",r.mode=ie;break}if(r.mode=La,t===Ea)break e;case La:r.mode=Ta;case Ta:if(a>=6&&c>=258){e.next_out=o,e.avail_out=c,e.next_in=s,e.avail_in=a,r.hold=l,r.bits=d,ky(e,u),o=e.next_out,i=e.output,c=e.avail_out,s=e.next_in,n=e.input,a=e.avail_in,l=r.hold,d=r.bits,r.mode===kt&&(r.back=-1);break}for(r.back=0;p=r.lencode[l&(1<<r.lenbits)-1],y=p>>>24,_=p>>>16&255,b=p&65535,!(y<=d);){if(a===0)break e;a--,l+=n[s++]<<d,d+=8}if(_&&(_&240)===0){for(x=y,v=_,A=b;p=r.lencode[A+((l&(1<<x+v)-1)>>x)],y=p>>>24,_=p>>>16&255,b=p&65535,!(x+y<=d);){if(a===0)break e;a--,l+=n[s++]<<d,d+=8}l>>>=x,d-=x,r.back+=x}if(l>>>=y,d-=y,r.back+=y,r.length=b,_===0){r.mode=Cf;break}if(_&32){r.back=-1,r.mode=kt;break}if(_&64){e.msg="invalid literal/length code",r.mode=ie;break}r.extra=_&15,r.mode=Ef;case Ef:if(r.extra){for(T=r.extra;d<T;){if(a===0)break e;a--,l+=n[s++]<<d,d+=8}r.length+=l&(1<<r.extra)-1,l>>>=r.extra,d-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=Lf;case Lf:for(;p=r.distcode[l&(1<<r.distbits)-1],y=p>>>24,_=p>>>16&255,b=p&65535,!(y<=d);){if(a===0)break e;a--,l+=n[s++]<<d,d+=8}if((_&240)===0){for(x=y,v=_,A=b;p=r.distcode[A+((l&(1<<x+v)-1)>>x)],y=p>>>24,_=p>>>16&255,b=p&65535,!(x+y<=d);){if(a===0)break e;a--,l+=n[s++]<<d,d+=8}l>>>=x,d-=x,r.back+=x}if(l>>>=y,d-=y,r.back+=y,_&64){e.msg="invalid distance code",r.mode=ie;break}r.offset=b,r.extra=_&15,r.mode=Tf;case Tf:if(r.extra){for(T=r.extra;d<T;){if(a===0)break e;a--,l+=n[s++]<<d,d+=8}r.offset+=l&(1<<r.extra)-1,l>>>=r.extra,d-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){e.msg="invalid distance too far back",r.mode=ie;break}r.mode=If;case If:if(c===0)break e;if(h=u-c,r.offset>h){if(h=r.offset-h,h>r.whave&&r.sane){e.msg="invalid distance too far back",r.mode=ie;break}h>r.wnext?(h-=r.wnext,m=r.wsize-h):m=r.wnext-h,h>r.length&&(h=r.length),g=r.window}else g=i,m=o-r.offset,h=r.length;h>c&&(h=c),c-=h,r.length-=h;do i[o++]=g[m++];while(--h);r.length===0&&(r.mode=Ta);break;case Cf:if(c===0)break e;i[o++]=r.length,c--,r.mode=Ta;break;case gc:if(r.wrap){for(;d<32;){if(a===0)break e;a--,l|=n[s++]<<d,d+=8}if(u-=c,e.total_out+=u,r.total+=u,r.wrap&4&&u&&(e.adler=r.check=r.flags?fe(r.check,i,u,o-u):ms(r.check,i,u,o-u)),u=c,r.wrap&4&&(r.flags?l:Ff(l))!==r.check){e.msg="incorrect data check",r.mode=ie;break}l=0,d=0}r.mode=Rf;case Rf:if(r.wrap&&r.flags){for(;d<32;){if(a===0)break e;a--,l+=n[s++]<<d,d+=8}if(r.wrap&4&&l!==(r.total&4294967295)){e.msg="incorrect length check",r.mode=ie;break}l=0,d=0}r.mode=kf;case kf:M=Uy;break e;case ie:M=a0;break e;case c0:return l0;case d0:default:return Je}return e.next_out=o,e.avail_out=c,e.next_in=s,e.avail_in=a,r.hold=l,r.bits=d,(r.wsize||u!==e.avail_out&&r.mode<ie&&(r.mode<gc||t!==df))&&p0(e,e.output,e.next_out,u-e.avail_out),f-=e.avail_in,u-=e.avail_out,e.total_in+=f,e.total_out+=u,r.total+=u,r.wrap&4&&u&&(e.adler=r.check=r.flags?fe(r.check,i,u,e.next_out-u):ms(r.check,i,u,e.next_out-u)),e.data_type=r.bits+(r.last?64:0)+(r.mode===kt?128:0)+(r.mode===La||r.mode===pc?256:0),(f===0&&u===0||t===df)&&M===Dr&&(M=Vy),M},jy=e=>{if(Or(e))return Je;let t=e.state;return t.window&&(t.window=null),e.state=null,Dr},Qy=(e,t)=>{if(Or(e))return Je;let r=e.state;return(r.wrap&2)===0?Je:(r.head=t,t.done=!1,Dr)},Jy=(e,t)=>{let r=t.length,n,i,s;return Or(e)||(n=e.state,n.wrap!==0&&n.mode!==ka)?Je:n.mode===ka&&(i=1,i=ms(i,t,r,0),i!==n.check)?a0:(s=p0(e,t,r,r),s?(n.mode=c0,l0):(n.havedict=1,Dr))},ex=f0,tx=h0,rx=u0,nx=Zy,ix=m0,sx=qy,ox=jy,ax=Qy,lx=Jy,cx="pako inflate (from Nodeca project)",Pt={inflateReset:ex,inflateReset2:tx,inflateResetKeep:rx,inflateInit:nx,inflateInit2:ix,inflate:sx,inflateEnd:ox,inflateGetHeader:ax,inflateSetDictionary:lx,inflateInfo:cx};function dx(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}var ux=dx,g0=Object.prototype.toString,{Z_NO_FLUSH:fx,Z_FINISH:hx,Z_OK:ys,Z_STREAM_END:bc,Z_NEED_DICT:_c,Z_STREAM_ERROR:mx,Z_DATA_ERROR:zf,Z_MEM_ERROR:px}=Br;function vs(e){this.options=Pa.assign({chunkSize:1024*64,windowBits:15,to:""},e||{});let t=this.options;t.raw&&t.windowBits>=0&&t.windowBits<16&&(t.windowBits=-t.windowBits,t.windowBits===0&&(t.windowBits=-15)),t.windowBits>=0&&t.windowBits<16&&!(e&&e.windowBits)&&(t.windowBits+=32),t.windowBits>15&&t.windowBits<48&&(t.windowBits&15)===0&&(t.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new n0,this.strm.avail_out=0;let r=Pt.inflateInit2(this.strm,t.windowBits);if(r!==ys)throw new Error(Pr[r]);if(this.header=new ux,Pt.inflateGetHeader(this.strm,this.header),t.dictionary&&(typeof t.dictionary=="string"?t.dictionary=gs.string2buf(t.dictionary):g0.call(t.dictionary)==="[object ArrayBuffer]"&&(t.dictionary=new Uint8Array(t.dictionary)),t.raw&&(r=Pt.inflateSetDictionary(this.strm,t.dictionary),r!==ys)))throw new Error(Pr[r])}vs.prototype.push=function(e,t){let r=this.strm,n=this.options.chunkSize,i=this.options.dictionary,s,o,a;if(this.ended)return!1;for(t===~~t?o=t:o=t===!0?hx:fx,g0.call(e)==="[object ArrayBuffer]"?r.input=new Uint8Array(e):r.input=e,r.next_in=0,r.avail_in=r.input.length;;){for(r.avail_out===0&&(r.output=new Uint8Array(n),r.next_out=0,r.avail_out=n),s=Pt.inflate(r,o),s===_c&&i&&(s=Pt.inflateSetDictionary(r,i),s===ys?s=Pt.inflate(r,o):s===zf&&(s=_c));r.avail_in>0&&s===bc&&r.state.wrap>0&&e[r.next_in]!==0;)Pt.inflateReset(r),s=Pt.inflate(r,o);switch(s){case mx:case zf:case _c:case px:return this.onEnd(s),this.ended=!0,!1}if(a=r.avail_out,r.next_out&&(r.avail_out===0||s===bc))if(this.options.to==="string"){let c=gs.utf8border(r.output,r.next_out),l=r.next_out-c,d=gs.buf2string(r.output,c);r.next_out=l,r.avail_out=n-l,l&&r.output.set(r.output.subarray(c,c+l),0),this.onData(d)}else this.onData(r.output.length===r.next_out?r.output:r.output.subarray(0,r.next_out));if(!(s===ys&&a===0)){if(s===bc)return s=Pt.inflateEnd(this.strm),this.onEnd(s),this.ended=!0,!0;if(r.avail_in===0)break}}return!0};vs.prototype.onData=function(e){this.chunks.push(e)};vs.prototype.onEnd=function(e){e===ys&&(this.options.to==="string"?this.result=this.chunks.join(""):this.result=Pa.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg};function Dc(e,t){let r=new vs(t);if(r.push(e),r.err)throw r.msg||Pr[r.err];return r.result}function gx(e,t){return t=t||{},t.raw=!0,Dc(e,t)}var yx=vs,xx=Dc,bx=gx,_x=Dc,vx=Br,Sx={Inflate:yx,inflate:xx,inflateRaw:bx,ungzip:_x,constants:vx},{Deflate:wx,deflate:Ax,deflateRaw:Mx,gzip:Ex}=Cy,{Inflate:Lx,inflate:Tx,inflateRaw:Ix,ungzip:Cx}=Sx,Rx=wx,kx=Ax,Fx=Mx,Px=Ex,zx=Lx,Dx=Tx,Bx=Ix,Ox=Cx,Nx=Br,Bc={Deflate:Rx,deflate:kx,deflateRaw:Fx,gzip:Px,Inflate:zx,inflate:Dx,inflateRaw:Bx,ungzip:Ox,constants:Nx};var zn=class zn{constructor(t=zn.INITIAL_SIZE){this.buffer=new Uint8Array(t),this.readOffset=0,this.writeOffset=0}append(t){let r=t instanceof Uint8Array?t:new Uint8Array(t),n=this.writeOffset+r.length;n>this.buffer.length&&this.grow(n),this.buffer.set(r,this.writeOffset),this.writeOffset+=r.length}hasBytes(t){return this.writeOffset-this.readOffset>=t}available(){return this.writeOffset-this.readOffset}readByte(){if(!this.hasBytes(1))throw new Error("Buffer underflow");return this.buffer[this.readOffset++]}readShort(){if(!this.hasBytes(2))throw new Error("Buffer underflow");let t=this.buffer[this.readOffset]|this.buffer[this.readOffset+1]<<8;return this.readOffset+=2,t>32767?t-65536:t}readLong(){if(!this.hasBytes(4))throw new Error("Buffer underflow");let t=this.buffer[this.readOffset]|this.buffer[this.readOffset+1]<<8|this.buffer[this.readOffset+2]<<16|this.buffer[this.readOffset+3]<<24;return this.readOffset+=4,t}readFloat(){if(!this.hasBytes(4))throw new Error("Buffer underflow");let r=new DataView(this.buffer.buffer,this.buffer.byteOffset+this.readOffset,4).getFloat32(0,!0);return this.readOffset+=4,r}readString(){let t=Math.min(zn.MAX_STRING_LENGTH,this.writeOffset-this.readOffset),r=0;for(;r<t&&this.buffer[this.readOffset+r]!==0;)r++;if(r>=t)throw this.writeOffset-this.readOffset<=t?new Error("Buffer underflow"):new Error("String exceeds max length");let n=this.buffer.slice(this.readOffset,this.readOffset+r);return this.readOffset+=r+1,new TextDecoder("latin1").decode(n)}peekBytes(t){if(!this.hasBytes(t))throw new Error("Buffer underflow");return this.buffer.slice(this.readOffset,this.readOffset+t)}readBytes(t){if(!this.hasBytes(t))throw new Error("Buffer underflow");let r=this.buffer.slice(this.readOffset,this.readOffset+t);return this.readOffset+=t,r}readData(t){return this.readBytes(t)}getReadPosition(){return this.readOffset}getWritePosition(){return this.writeOffset}setReadPosition(t){if(t<0||t>this.writeOffset)throw new Error("Invalid read position");this.readOffset=t}grow(t){let r=t?Math.max(t,this.buffer.length*2):this.buffer.length*2,n=new Uint8Array(r);n.set(this.buffer),this.buffer=n}compact(){if(this.readOffset===0)return;let t=this.writeOffset-this.readOffset;if(t===0){this.readOffset=0,this.writeOffset=0;return}this.buffer.copyWithin(0,this.readOffset,this.writeOffset),this.readOffset=0,this.writeOffset=t}getCapacity(){return this.buffer.length}reset(){this.readOffset=0,this.writeOffset=0}};zn.INITIAL_SIZE=64*1024,zn.MAX_STRING_LENGTH=2048;var Da=zn;var Dn=2023,Ss=1,ws=2,As=4,Ms=8,Es=16,Ls=32,Ts=64,y0=128,Ux=256,Is=512,Cs=1024,Rs=2048,Bn=4096,ks=8192,On=16384,Hx=32768,Nn=65536,Fs=1<<17,Un=1<<18,Hn=1<<19,Ps=1<<20,zs=1<<21,Ds=1<<22,Vx=1<<23,Bs=1<<24,Vn=1<<25,Os=1<<26,Ns=1<<27,Us=1<<28,Hs=1<<29,Vs=1<<30,Gx=-2147483648,Gs=1,Ws=2,Xs=4;var Wx=1,Xx=2,Kx=128,zt=()=>({number:0,modelindex:0,modelindex2:0,modelindex3:0,modelindex4:0,frame:0,skinnum:0,effects:0,renderfx:0,origin:{x:0,y:0,z:0},old_origin:{x:0,y:0,z:0},angles:{x:0,y:0,z:0},sound:0,event:0,solid:0,bits:0,bitsHigh:0,alpha:0,scale:0,instanceBits:0,loopVolume:0,loopAttenuation:0,owner:0,oldFrame:0}),Nr=()=>({pm_type:0,origin:{x:0,y:0,z:0},velocity:{x:0,y:0,z:0},pm_time:0,pm_flags:0,gravity:0,delta_angles:{x:0,y:0,z:0},viewoffset:{x:0,y:0,z:0},viewangles:{x:0,y:0,z:0},kick_angles:{x:0,y:0,z:0},gun_index:0,gun_frame:0,gun_offset:{x:0,y:0,z:0},gun_angles:{x:0,y:0,z:0},blend:[0,0,0,0],fov:0,rdflags:0,stats:new Array(32).fill(0),gunskin:0,gunrate:0,damage_blend:[0,0,0,0],team_id:0}),Oc=class extends Da{constructor(r){super(0);this.stream=r}readByte(){return this.stream.readByte()}readShort(){return this.stream.readShort()}readLong(){return this.stream.readLong()}readFloat(){return this.stream.readFloat()}readString(){return this.stream.readString()}readData(r){return this.stream.readData(r)}hasBytes(r){return this.stream.hasMore()}available(){return this.stream.getRemaining()}getReadPosition(){return this.stream.getPosition()}peekBytes(r){throw new Error("peekBytes not implemented for BinaryStreamAdapter")}},st=class e{constructor(t,r,n=!1){this.protocolVersion=0;this.isDemo=Wx;this.strictMode=!1;this.errorCount=0;t instanceof Xr?this.stream=new Oc(t):this.stream=t,this.handler=r,this.strictMode=n}setProtocolVersion(t){this.protocolVersion=t}getProtocolVersion(){return this.protocolVersion}getErrorCount(){return this.errorCount}translateCommand(t){if(this.protocolVersion===0)return t===7?k.serverdata:t===12?k.serverdata:t;if(this.protocolVersion===Dn)return t;if(this.protocolVersion===25||this.protocolVersion===26){if(t===0)return k.bad;let r=t+5;return r>=k.nop&&r<=k.frame?r:k.bad}return this.protocolVersion===34?t<=k.frame?t:k.bad:t}parseMessage(){for(;this.stream.hasBytes(1);){let t=this.stream.getReadPosition(),r=-1;try{if(r=this.stream.readByte(),r===-1)break;let n=r;switch(r=this.translateCommand(r),r){case k.bad:return;case k.nop:break;case k.disconnect:this.handler?.onDisconnect&&this.handler.onDisconnect();break;case k.reconnect:this.handler?.onReconnect&&this.handler.onReconnect();break;case k.print:this.parsePrint();break;case k.serverdata:this.parseServerData();break;case k.configstring:this.parseConfigString();break;case k.spawnbaseline:this.parseSpawnBaseline();break;case k.centerprint:this.parseCenterPrint();break;case k.download:this.parseDownload();break;case k.frame:this.parseFrame();break;case k.packetentities:this.parsePacketEntities(!1);break;case k.deltapacketentities:this.parsePacketEntities(!0);break;case k.playerinfo:this.parsePlayerState();break;case k.stufftext:this.parseStuffText();break;case k.layout:this.parseLayout();break;case k.inventory:this.parseInventory();break;case k.sound:this.parseSound();break;case k.muzzleflash:this.parseMuzzleFlash();break;case k.muzzleflash2:this.parseMuzzleFlash2();break;case k.temp_entity:this.parseTempEntity();break;case k.splitclient:this.parseSplitClient();break;case k.configblast:this.parseConfigBlast();break;case k.spawnbaselineblast:this.parseSpawnBaselineBlast();break;case k.level_restart:this.handler?.onLevelRestart&&this.handler.onLevelRestart();break;case k.damage:this.parseDamage();break;case k.locprint:this.parseLocPrint();break;case k.fog:this.parseFog();break;case k.waitingforplayers:this.parseWaitingForPlayers();break;case k.bot_chat:this.parseBotChat();break;case k.poi:this.parsePoi();break;case k.help_path:this.parseHelpPath();break;case k.muzzleflash3:this.parseMuzzleFlash3();break;case k.achievement:this.parseAchievement();break;default:let i=`Unknown server command: ${n} (translated: ${r}) at offset ${t}`;if(this.strictMode)throw new Error(i);console.warn(i),this.errorCount++;return}}catch(n){let i=n.message;if(i==="Buffer underflow"||i.includes("StreamingBuffer")){try{this.stream.setReadPosition(t)}catch(o){console.error("Failed to rollback stream position",o)}return}let s=`offset ${t}, cmd ${r}, protocol ${this.protocolVersion}`;if(console.warn(`Error parsing command ${r} (${s}): ${i}`),this.errorCount++,this.strictMode)throw n;return}}}readAngle16(){return this.stream.readShort()*(360/65536)}readCoord(){return this.stream.readShort()*.125}readAngle(){return this.stream.readByte()*(360/256)}readPos(t){t.x=this.stream.readShort()*.125,t.y=this.stream.readShort()*.125,t.z=this.stream.readShort()*.125}readDir(t){let r=this.stream.readByte();if(r>=Vr.length)t.x=0,t.y=0,t.z=0;else{let n=Vr[r];t.x=n[0],t.y=n[1],t.z=n[2]}}parsePrint(){let t=this.stream.readByte(),r=this.stream.readString();this.handler&&this.handler.onPrint(t,r)}parseStuffText(){let t=this.stream.readString();this.handler&&this.handler.onStuffText(t)}parseLayout(){let t=this.stream.readString();this.handler&&this.handler.onLayout(t)}parseCenterPrint(){let t=this.stream.readString();this.handler&&this.handler.onCenterPrint(t)}parseServerData(){if(this.protocolVersion=this.stream.readLong(),this.protocolVersion===Dn){let t=this.stream.readLong(),r=this.stream.readByte();this.isDemo=r;let n=this.stream.readByte(),i=this.stream.readString(),s=this.stream.readShort();if(s===-2){let a=this.stream.readShort();for(let c=0;c<a;c++)this.stream.readShort();s=0}else s===-1&&(s=-1);let o=this.stream.readString();this.handler&&this.handler.onServerData(this.protocolVersion,t,0,i,s,o,n,r)}else{let t=this.stream.readLong(),r=this.stream.readByte();this.isDemo=r;let n=this.stream.readString(),i=this.stream.readShort(),s=this.stream.readString();this.handler&&this.handler.onServerData(this.protocolVersion,t,r,n,i,s)}}parseConfigString(){let t=this.stream.readShort(),r=this.stream.readString();this.handler&&this.handler.onConfigString(t,r)}parseSplitClient(){let t=this.stream.readByte();this.handler?.onSplitClient&&this.handler.onSplitClient(t)}parseConfigBlast(){let t=this.stream.readShort(),r=this.stream.readShort(),n=this.stream.readData(t);try{let i=Bc.inflate(n),s=new Xr(i.buffer);for(;s.hasMore();){let o=s.readUShort(),a=s.readString();this.handler&&this.handler.onConfigString(o,a)}}catch(i){console.error("svc_configblast error",i)}}parseSpawnBaselineBlast(){let t=this.stream.readShort(),r=this.stream.readShort(),n=this.stream.readData(t);try{let i=Bc.inflate(n),s=new Xr(i.buffer),o=new e(s,this.handler,this.strictMode);for(o.setProtocolVersion(this.protocolVersion);s.hasMore();)o.parseSpawnBaseline()}catch(i){console.error("svc_spawnbaselineblast error",i)}}parseLocPrint(){let t=this.stream.readByte(),r=this.stream.readString(),n=this.stream.readByte(),i=[];for(let s=0;s<n;s++)i.push(this.stream.readString());this.handler?.onLocPrint&&this.handler.onLocPrint(t,r,i)}parseWaitingForPlayers(){let t=this.stream.readByte();this.handler?.onWaitingForPlayers&&this.handler.onWaitingForPlayers(t)}parseBotChat(){let t=this.stream.readString(),r=this.stream.readShort(),n=this.stream.readString();this.handler?.onBotChat&&this.handler.onBotChat(n)}parsePoi(){let t=this.stream.readShort(),r=this.stream.readShort(),n={x:0,y:0,z:0};this.readPos(n);let i=this.stream.readShort(),s=this.stream.readByte(),o=this.stream.readByte();this.handler?.onPoi&&this.handler.onPoi(o,n)}parseHelpPath(){let t=this.stream.readByte(),r={x:0,y:0,z:0};this.readPos(r);let n={x:0,y:0,z:0};this.readDir(n),this.handler?.onHelpPath&&this.handler.onHelpPath(r)}parseAchievement(){let t=this.stream.readString();this.handler?.onAchievement&&this.handler.onAchievement(t)}parseDownload(){let t=this.stream.readShort(),r=this.stream.readByte(),n;t>0&&(n=this.stream.readData(t)),this.handler&&this.handler.onDownload(t,r,n)}parseInventory(){let r=new Array(256);for(let n=0;n<256;n++)r[n]=this.stream.readShort();this.handler&&this.handler.onInventory(r)}parseSound(){let t=this.stream.readByte(),r=this.stream.readByte(),n,i,s,o,a;if(t&1&&(n=this.stream.readByte()),t&2&&(i=this.stream.readByte()),t&16&&(s=this.stream.readByte()),t&8&&(o=this.stream.readShort()),t&4){let c={x:0,y:0,z:0};this.readPos(c),a=c}this.handler&&this.handler.onSound(t,r,n,i,s,o,a)}parseMuzzleFlash(){let t=this.stream.readShort(),r=this.stream.readByte();this.handler&&this.handler.onMuzzleFlash(t,r)}parseMuzzleFlash2(){let t=this.stream.readShort(),r=this.stream.readByte();this.handler&&this.handler.onMuzzleFlash2(t,r)}parseMuzzleFlash3(){let t=this.stream.readShort(),r=this.stream.readShort();this.handler?.onMuzzleFlash3&&this.handler.onMuzzleFlash3(t,r)}parseFog(){let t=this.stream.readByte();if(t&128){let n=this.stream.readByte();t|=n<<8}let r={};t&1&&(r.density=this.stream.readFloat(),r.skyfactor=this.stream.readByte()),t&2&&(r.red=this.stream.readByte()),t&4&&(r.green=this.stream.readByte()),t&8&&(r.blue=this.stream.readByte()),t&16&&(r.time=this.stream.readShort()),t&32&&(r.hf_falloff=this.stream.readFloat()),t&64&&(r.hf_density=this.stream.readFloat()),t&256&&(r.hf_start_r=this.stream.readByte()),t&512&&(r.hf_start_g=this.stream.readByte()),t&1024&&(r.hf_start_b=this.stream.readByte()),t&2048&&(r.hf_start_dist=this.stream.readLong()),t&4096&&(r.hf_end_r=this.stream.readByte()),t&8192&&(r.hf_end_g=this.stream.readByte()),t&16384&&(r.hf_end_b=this.stream.readByte()),t&32768&&(r.hf_end_dist=this.stream.readLong()),this.handler?.onFog&&this.handler.onFog(r)}parseDamage(){let t=this.stream.readByte(),r=[];for(let n=0;n<t;n++){let i=this.stream.readByte(),s={x:0,y:0,z:0};this.readDir(s);let o=i&31,a=(i&32)!==0,c=(i&64)!==0,l=(i&128)!==0;r.push({damage:o,health:a,armor:c,power:l,dir:s})}this.handler?.onDamage&&this.handler.onDamage(r)}parseTempEntity(){let t=this.stream.readByte(),r={x:0,y:0,z:0},n={x:0,y:0,z:0},i={x:0,y:0,z:0},s,o,a,c,l;switch(t){case I.EXPLOSION1:case I.EXPLOSION2:case I.ROCKET_EXPLOSION:case I.GRENADE_EXPLOSION:case I.ROCKET_EXPLOSION_WATER:case I.GRENADE_EXPLOSION_WATER:case I.BFG_EXPLOSION:case I.BFG_BIGEXPLOSION:case I.BOSSTPORT:case I.PLASMA_EXPLOSION:case I.PLAIN_EXPLOSION:case I.CHAINFIST_SMOKE:case I.TRACKER_EXPLOSION:case I.TELEPORT_EFFECT:case I.DBALL_GOAL:case I.NUKEBLAST:case I.WIDOWSPLASH:case I.EXPLOSION1_BIG:case I.EXPLOSION1_NP:this.readPos(r);break;case I.GUNSHOT:case I.BLOOD:case I.BLASTER:case I.SHOTGUN:case I.SPARKS:case I.BULLET_SPARKS:case I.SCREEN_SPARKS:case I.SHIELD_SPARKS:case I.BLASTER2:case I.FLECHETTE:case I.MOREBLOOD:case I.ELECTRIC_SPARKS:case I.HEATBEAM_SPARKS:case I.HEATBEAM_STEAM:this.readPos(r),this.readDir(i);break;case I.SPLASH:case I.LASER_SPARKS:case I.WELDING_SPARKS:case I.TUNNEL_SPARKS:s=this.stream.readByte(),this.readPos(r),this.readDir(i),o=this.stream.readByte();break;case I.BLUEHYPERBLASTER:this.protocolVersion>=32?(this.readPos(r),this.readPos(n)):(this.readPos(r),this.readDir(i));break;case I.GREENBLOOD:this.protocolVersion>=32?(this.readPos(r),this.readDir(i)):(this.readPos(r),this.readPos(n));break;case I.RAILTRAIL:case I.BUBBLETRAIL:case I.BFG_LASER:case I.DEBUGTRAIL:case I.BUBBLETRAIL2:this.readPos(r),this.readPos(n);break;case I.PARASITE_ATTACK:case I.MEDIC_CABLE_ATTACK:this.stream.readShort(),this.readPos(r),this.readPos(n);break;case I.GRAPPLE_CABLE:a=this.stream.readShort(),this.readPos(r),this.readPos(n),this.readPos(i);break;case I.LIGHTNING:c=this.stream.readShort(),l=this.stream.readShort(),this.readPos(r),this.readPos(n);break;case I.FLASHLIGHT:this.readPos(r),a=this.stream.readShort();break;case I.FORCEWALL:this.readPos(r),this.readPos(n),o=this.stream.readByte();break;case I.STEAM:let d=this.stream.readShort();s=this.stream.readByte(),this.readPos(r),this.readDir(i),o=this.stream.readByte(),this.stream.readShort(),d!==-1&&this.stream.readLong();break;case I.WIDOWBEAMOUT:this.stream.readShort();case I.HEATBEAM:case I.MONSTER_HEATBEAM:a=this.stream.readShort(),this.readPos(r),this.readPos(n),this.readDir(i);break}this.handler&&this.handler.onTempEntity(t,r,n,i,s,o,a,c,l)}parseSpawnBaseline(){let t=this.parseEntityBits(),r=zt();this.parseDelta(zt(),r,t.number,t.bits,t.bitsHigh),this.handler&&this.handler.onSpawnBaseline(r)}parseFrame(){let t=this.stream.readLong(),r=this.stream.readLong(),n=0;this.protocolVersion!==26&&this.protocolVersion!==25&&(n=this.stream.readByte());let i=this.stream.readByte(),s=this.stream.readData(i),o=this.stream.readByte();if(o=this.translateCommand(o),o!==k.playerinfo){if(this.strictMode)throw new Error(`Expected svc_playerinfo after svc_frame, got ${o}`);return}let a=this.parsePlayerState(),c=this.stream.readByte();if(c=this.translateCommand(c),c!==k.packetentities){if(this.strictMode)throw new Error(`Expected svc_packetentities after svc_playerinfo, got ${c}`);return}let l=this.collectPacketEntities();if(this.isDemo===Kx){let d=this.stream.readByte();for(let f=0;f<d;f++)this.stream.readByte()}this.isDemo===Xx&&this.stream.readLong(),this.handler&&this.handler.onFrame({serverFrame:t,deltaFrame:r,surpressCount:n,areaBytes:i,areaBits:s,playerState:a,packetEntities:{delta:!0,entities:l}})}parsePlayerState(){let t=Nr(),r=this.stream.readShort();r&1&&(t.pm_type=this.stream.readByte()),r&2&&(t.origin.x=this.readCoord(),t.origin.y=this.readCoord(),t.origin.z=this.readCoord()),r&4&&(t.velocity.x=this.readCoord(),t.velocity.y=this.readCoord(),t.velocity.z=this.readCoord()),r&8&&(t.pm_time=this.stream.readByte()),r&16&&(t.pm_flags=this.stream.readByte()),r&32&&(t.gravity=this.stream.readShort()),r&64&&(t.delta_angles.x=this.stream.readShort()*(180/32768),t.delta_angles.y=this.stream.readShort()*(180/32768),t.delta_angles.z=this.stream.readShort()*(180/32768)),r&128&&(t.viewoffset.x=(this.stream.readByte()<<24>>24)*.25,t.viewoffset.y=(this.stream.readByte()<<24>>24)*.25,t.viewoffset.z=(this.stream.readByte()<<24>>24)*.25),r&256&&(t.viewangles.x=this.readAngle16(),t.viewangles.y=this.readAngle16(),t.viewangles.z=this.readAngle16()),r&512&&(t.kick_angles.x=(this.stream.readByte()<<24>>24)*.25,t.kick_angles.y=(this.stream.readByte()<<24>>24)*.25,t.kick_angles.z=(this.stream.readByte()<<24>>24)*.25),r&4096&&(t.gun_index=this.stream.readByte()),r&8192&&(t.gun_frame=this.stream.readByte(),t.gun_offset.x=(this.stream.readByte()<<24>>24)*.25,t.gun_offset.y=(this.stream.readByte()<<24>>24)*.25,t.gun_offset.z=(this.stream.readByte()<<24>>24)*.25,t.gun_angles.x=(this.stream.readByte()<<24>>24)*.25,t.gun_angles.y=(this.stream.readByte()<<24>>24)*.25,t.gun_angles.z=(this.stream.readByte()<<24>>24)*.25),r&1024&&(t.blend[0]=this.stream.readByte(),t.blend[1]=this.stream.readByte(),t.blend[2]=this.stream.readByte(),t.blend[3]=this.stream.readByte()),r&2048&&(t.fov=this.stream.readByte()),r&16384&&(t.rdflags=this.stream.readByte());let n=this.stream.readLong();for(let i=0;i<32;i++)n&1<<i&&(t.stats[i]=this.stream.readShort());return t}parsePacketEntities(t){let r=this.collectPacketEntities();this.handler&&this.handler.onFrame({serverFrame:0,deltaFrame:0,surpressCount:0,areaBytes:0,areaBits:new Uint8Array,playerState:Nr(),packetEntities:{delta:t,entities:r}})}collectPacketEntities(){let t=[];for(;;){let r=this.parseEntityBits();if(r.bits&Ts){if(r.number===0)break;continue}let n=zt(),i=r.number===0&&!(r.bits&y0);if((r.number!==0||i)&&this.parseDelta(zt(),n,r.number,r.bits,r.bitsHigh),r.number===0)break;t.push(n)}return t}parseEntityBits(){let t=this.stream.readByte();t&y0&&(t|=this.stream.readByte()<<8),t&Hx&&(t|=this.stream.readByte()<<16),t&Vx&&(t|=this.stream.readByte()<<24);let r=0;this.protocolVersion===Dn&&t&Gx&&(r=this.stream.readByte());let n;return t&Ux?n=this.stream.readShort():n=this.stream.readByte(),{number:n,bits:t,bitsHigh:r}}parseDelta(t,r,n,i,s=0){r.number=t.number,r.modelindex=t.modelindex,r.modelindex2=t.modelindex2,r.modelindex3=t.modelindex3,r.modelindex4=t.modelindex4,r.frame=t.frame,r.skinnum=t.skinnum,r.effects=t.effects,r.renderfx=t.renderfx,r.origin.x=t.origin.x,r.origin.y=t.origin.y,r.origin.z=t.origin.z,r.old_origin.x=t.origin.x,r.old_origin.y=t.origin.y,r.old_origin.z=t.origin.z,r.angles.x=t.angles.x,r.angles.y=t.angles.y,r.angles.z=t.angles.z,r.sound=t.sound,r.event=t.event,r.solid=t.solid,r.alpha=t.alpha,r.scale=t.scale,r.instanceBits=t.instanceBits,r.loopVolume=t.loopVolume,r.loopAttenuation=t.loopAttenuation,r.owner=t.owner,r.oldFrame=t.oldFrame,r.number=n,r.bits=i,r.bitsHigh=s,i&Rs&&(r.modelindex=this.stream.readByte()),i&Ps&&(r.modelindex2=this.stream.readByte()),i&zs&&(r.modelindex3=this.stream.readByte()),i&Ds&&(r.modelindex4=this.stream.readByte()),i&Es&&(r.frame=this.stream.readByte()),i&Fs&&(r.frame=this.stream.readShort()),i&Nn&&i&Vn?r.skinnum=this.stream.readLong():i&Nn?r.skinnum=this.stream.readByte():i&Vn&&(r.skinnum=this.stream.readShort()),i&On&&i&Hn?r.effects=this.stream.readLong():i&On?r.effects=this.stream.readByte():i&Hn&&(r.effects=this.stream.readShort()),i&Bn&&i&Un?r.renderfx=this.stream.readLong():i&Bn?r.renderfx=this.stream.readByte():i&Un&&(r.renderfx=this.stream.readShort()),i&Ss&&(r.origin.x=this.readCoord()),i&ws&&(r.origin.y=this.readCoord()),i&Is&&(r.origin.z=this.readCoord()),i&Cs&&(r.angles.x=this.readAngle()),i&As&&(r.angles.y=this.readAngle()),i&Ms&&(r.angles.z=this.readAngle()),i&Bs&&this.readPos(r.old_origin),i&Os&&(r.sound=this.stream.readByte()),i&Ls?r.event=this.stream.readByte():r.event=0,i&Ns&&(r.solid=this.stream.readShort()),this.protocolVersion===Dn&&(i&ks&&(r.alpha=this.stream.readByte()/255),i&Us&&(r.scale=this.stream.readFloat()),i&Hs&&(r.instanceBits=this.stream.readLong()),i&Vs&&(r.loopVolume=this.stream.readByte()/255),s&Gs&&(r.loopAttenuation=this.stream.readByte()/255),s&Ws&&(r.owner=this.stream.readShort()),s&Xs&&(r.oldFrame=this.stream.readShort()))}};var Nc=(a=>(a[a.WeaponFire=0]="WeaponFire",a[a.DamageDealt=1]="DamageDealt",a[a.DamageReceived=2]="DamageReceived",a[a.Pickup=3]="Pickup",a[a.Death=4]="Death",a[a.Spawn=5]="Spawn",a[a.PlayerInfo=6]="PlayerInfo",a))(Nc||{});var Gn=class{constructor(t){this.events=[];this.summary={totalKills:0,totalDeaths:0,damageDealt:0,damageReceived:0,weaponUsage:new Map};this.header=null;this.configStrings=new Map;this.serverInfo={};this.statistics=null;this.playerStats=new Map;this.weaponStats=new Map;this.activeEntities=new Set;this.buffer=t}analyze(){let t=new je(this.buffer),r=-1,n=0,i=.1,s=0,o={onServerData:(a,c,l,d,f,u,h,m)=>{s=a,this.header={protocolVersion:a,gameDir:d,levelName:u,playerNum:f,serverCount:c,spawnCount:c,tickRate:h,demoType:m},h&&h>0&&(i=1/h)},onConfigString:(a,c)=>{this.configStrings.set(a,c),a===0&&this.parseServerInfo(c)},onSpawnBaseline:a=>{},onFrame:a=>{let c=new Set;if(a.packetEntities&&a.packetEntities.entities)for(let l of a.packetEntities.entities)c.add(l.number),this.activeEntities.has(l.number)||this.recordEvent({type:5,frame:r,time:n,entityId:l.number,position:{x:l.origin.x,y:l.origin.y,z:l.origin.z},description:`Entity ${l.number} spawned`});this.activeEntities=c,a.playerState&&this.header},onPrint:(a,c)=>{(c.includes("died")||c.includes("killed")||c.includes("suicide"))&&(this.summary.totalDeaths++,this.recordEvent({type:4,frame:r,time:n,description:c.trim()})),c.startsWith("You got the ")&&this.recordEvent({type:3,frame:r,time:n,description:c.trim()})},onCenterPrint:()=>{},onStuffText:()=>{},onSound:()=>{},onTempEntity:()=>{},onLayout:()=>{},onInventory:()=>{},onMuzzleFlash:(a,c)=>{this.handleWeaponFire(a,c,r,n)},onMuzzleFlash2:(a,c)=>{this.handleWeaponFire(a,c,r,n)},onMuzzleFlash3:(a,c)=>{this.handleWeaponFire(a,c,r,n)},onDisconnect:()=>{},onReconnect:()=>{},onDownload:()=>{},onDamage:a=>{for(let c of a)if(this.recordEvent({type:2,frame:r,time:n,value:c.damage,position:c.dir,description:`Took ${c.damage} damage`}),this.summary.damageReceived+=c.damage,this.header){let l=this.getOrCreatePlayerStats(this.header.playerNum);l.damageReceived+=c.damage}}};for(;t.hasMore();){let a=t.readNextBlock();if(!a)break;r++,n=r*i;let c=new st(a.data,o);c.setProtocolVersion(s),c.parseMessage(),s=c.getProtocolVersion()}return this.statistics={duration:n,frameCount:r+1,averageFps:(r+1)/(n||1),mapName:this.header?.levelName||"unknown",playerCount:1},{events:this.events,summary:this.summary,header:this.header,configStrings:this.configStrings,serverInfo:this.serverInfo,statistics:this.statistics,playerStats:this.playerStats,weaponStats:this.weaponStats}}handleWeaponFire(t,r,n,i){this.recordEvent({type:0,frame:n,time:i,entityId:t,value:r,description:`Weapon ${r} fired by ${t}`});let s=this.summary.weaponUsage.get(r)||0;this.summary.weaponUsage.set(r,s+1);let o=this.getOrCreateWeaponStat(t,r);o.shotsFired++}recordEvent(t){this.events.push(t)}parseServerInfo(t){let r=t.split("\\");for(let n=1;n<r.length;n+=2)n+1<r.length&&(this.serverInfo[r[n]]=r[n+1])}getOrCreatePlayerStats(t){let r=this.playerStats.get(t);return r||(r={kills:0,deaths:0,damageDealt:0,damageReceived:0,suicides:0},this.playerStats.set(t,r)),r}getOrCreateWeaponStat(t,r){let n=this.weaponStats.get(t);n||(n=[],this.weaponStats.set(t,n));let i=n.find(s=>s.weaponId===r);return i||(i={weaponId:r,shotsFired:0,hits:0,kills:0},n.push(i)),i}};var Uc=(i=>(i[i.FirstPerson=0]="FirstPerson",i[i.ThirdPerson=1]="ThirdPerson",i[i.Free=2]="Free",i[i.Follow=3]="Follow",i))(Uc||{});var Ba=(i=>(i[i.Stopped=0]="Stopped",i[i.Playing=1]="Playing",i[i.Paused=2]="Paused",i[i.Finished=3]="Finished",i))(Ba||{}),Ks=class{constructor(){this.reader=null;this.buffer=null;this.state=0;this.playbackSpeed=1;this.currentProtocolVersion=0;this.currentFrameIndex=-1;this.lastFrameData=null;this.accumulatedTime=0;this.frameDuration=100;this.snapshotInterval=100;this.snapshots=new Map;this.cachedEvents=null;this.cachedSummary=null;this.cachedHeader=null;this.cachedConfigStrings=null;this.cachedServerInfo=null;this.cachedStatistics=null;this.cachedPlayerStats=null;this.cachedWeaponStats=null;this.tracker=null;this.cameraMode=0;this.thirdPersonDistance=80;this.thirdPersonOffset={x:0,y:0,z:0}}setHandler(t){this.handler=t}setCallbacks(t){this.callbacks=t}loadDemo(t){this.buffer=t,this.reader=new je(t),this.transitionState(0),this.accumulatedTime=0,this.currentProtocolVersion=0,this.currentFrameIndex=-1,this.snapshots.clear(),this.lastFrameData=null,this.cachedEvents=null,this.cachedSummary=null,this.cachedHeader=null,this.cachedConfigStrings=null,this.cachedServerInfo=null,this.cachedStatistics=null,this.cachedPlayerStats=null,this.cachedWeaponStats=null}play(){this.reader&&this.state!==1&&this.transitionState(1)}pause(){this.state===1&&this.transitionState(2)}stop(){this.transitionState(0),this.reader&&this.reader.reset(),this.accumulatedTime=0,this.currentProtocolVersion=0,this.currentFrameIndex=-1,this.lastFrameData=null}transitionState(t){this.state!==t&&(this.state=t,this.callbacks?.onPlaybackStateChange&&this.callbacks.onPlaybackStateChange(t))}setFrameDuration(t){this.frameDuration=t}setSpeed(t){this.playbackSpeed=Math.max(.1,Math.min(t,16))}getSpeed(){return this.playbackSpeed}getPlaybackSpeed(){return this.playbackSpeed}getInterpolationFactor(){return this.frameDuration<=0?0:Math.max(0,Math.min(1,this.accumulatedTime/this.frameDuration))}update(t){if(!(this.state!==1||!this.reader))for(this.accumulatedTime+=t*1e3*this.playbackSpeed;this.accumulatedTime>=this.frameDuration;){if(!this.processNextFrame())return;this.accumulatedTime-=this.frameDuration,this.callbacks?.onTimeUpdate&&this.callbacks.onTimeUpdate(this.getCurrentTime())}}stepForward(){this.reader&&(this.processNextFrame(),this.callbacks?.onTimeUpdate&&this.callbacks.onTimeUpdate(this.getCurrentTime()))}stepBackward(){this.reader&&this.currentFrameIndex>0&&this.seek(this.currentFrameIndex-1)}seekToTime(t){let r=Math.floor(t*1e3/this.frameDuration);this.seek(r)}seekToFrame(t){this.seek(t)}frameToTime(t){return t*this.frameDuration/1e3}timeToFrame(t){return Math.floor(t*1e3/this.frameDuration)}playFrom(t){t.type==="frame"?this.seek(t.frame):this.seekToTime(t.seconds),this.play()}playRange(t,r){this.playFrom(t);let n=r.type==="frame"?r.frame:this.timeToFrame(r.seconds),i=this.callbacks?.onFrameUpdate,s={...this.callbacks,onFrameUpdate:o=>{i&&i(o),this.currentFrameIndex>=n&&(this.pause(),this.callbacks===s&&this.setCallbacks({...this.callbacks,onFrameUpdate:i}),this.callbacks?.onPlaybackComplete&&this.callbacks.onPlaybackComplete())}};this.setCallbacks(s)}seek(t){if(!this.reader)return;let r=this.getTotalFrames();if(t<0&&(t=0),t>=r&&(t=r-1),t===this.currentFrameIndex+1){this.processNextFrame(),this.callbacks?.onSeekComplete&&this.callbacks.onSeekComplete();return}let n=-1,i=null;if(t>this.currentFrameIndex&&this.currentFrameIndex!==-1&&(n=this.currentFrameIndex),this.callbacks?.onRestoreSnapshot)for(let[s,o]of this.snapshots)s<=t&&s>n&&(n=s,i=o);for(n===-1&&this.currentFrameIndex>t?(this.reader.reset(),this.currentFrameIndex=-1,this.currentProtocolVersion=0):n===-1&&(this.reader.reset(),this.currentFrameIndex=-1,this.currentProtocolVersion=0),i&&this.callbacks?.onRestoreSnapshot&&(this.callbacks.onRestoreSnapshot(i),this.reader.seekToMessage(n+1)?this.currentFrameIndex=n:(this.reader.reset(),this.currentFrameIndex=-1,this.currentProtocolVersion=0));this.currentFrameIndex<t&&(this.callbacks?.onCaptureSnapshot&&(this.currentFrameIndex+1)%this.snapshotInterval,!!this.processNextFrame()););this.accumulatedTime=0,this.callbacks?.onSeekComplete&&this.callbacks.onSeekComplete(),this.callbacks?.onTimeUpdate&&this.callbacks.onTimeUpdate(this.getCurrentTime())}processNextFrame(){if(!this.reader||!this.reader.hasMore())return this.transitionState(3),this.callbacks?.onPlaybackComplete&&this.callbacks.onPlaybackComplete(),!1;let t=this.reader.readNextBlock();if(!t)return this.transitionState(3),this.callbacks?.onPlaybackComplete&&this.callbacks.onPlaybackComplete(),!1;this.currentFrameIndex++,this.tracker&&(this.tracker.setCurrentFrame(this.currentFrameIndex),this.tracker.setCurrentTime(this.getCurrentTime()));try{let r={...this.handler,onFrame:i=>{this.lastFrameData=i,this.handler?.onFrame&&this.handler.onFrame(i),this.callbacks?.onFrameUpdate&&this.callbacks.onFrameUpdate(i)}},n=new st(t.data,this.handler?r:void 0);if(n.setProtocolVersion(this.currentProtocolVersion),n.parseMessage(),this.currentProtocolVersion=n.getProtocolVersion(),this.callbacks?.onCaptureSnapshot&&this.currentFrameIndex%this.snapshotInterval===0&&this.currentFrameIndex>0){let i=this.callbacks.onCaptureSnapshot(this.currentFrameIndex);i&&this.snapshots.set(this.currentFrameIndex,i)}}catch(r){return console.error("Error processing demo frame",r),this.callbacks?.onPlaybackError&&this.callbacks.onPlaybackError(r instanceof Error?r:new Error(String(r))),!1}return!0}getState(){return this.state}getCurrentTime(){return this.currentFrameIndex<0?this.accumulatedTime:this.currentFrameIndex*this.frameDuration+this.accumulatedTime}getFrameCount(){return this.reader?this.reader.getMessageCount():0}getTotalFrames(){return this.getFrameCount()}getCurrentFrame(){return this.currentFrameIndex<0?0:this.currentFrameIndex}getDuration(){return this.getFrameCount()*this.frameDuration/1e3}getTotalBytes(){return this.reader?this.reader.getProgress().total:0}getProcessedBytes(){return this.reader?this.reader.getOffset():0}getFrameData(t){if(t===this.currentFrameIndex&&this.lastFrameData)return this.lastFrameData;let r=this.state;return this.pause(),this.seek(t),r===1&&this.play(),this.lastFrameData}getFramePlayerState(t){if(t===this.currentFrameIndex&&this.handler?.getPlayerState){let n=this.handler.getPlayerState();if(n)return n}let r=this.getFrameData(t);return r?r.playerState:null}getFrameEntities(t){if(t===this.currentFrameIndex&&this.handler?.getEntities){let r=this.handler.getEntities();if(r)return Array.from(r.values())}if(this.seek(t),this.handler?.getEntities){let r=this.handler.getEntities();return r?Array.from(r.values()):[]}return[]}compareFrames(t,r){let n=this.getFramePlayerState(t),i=this.getFrameEntities(t),s=new Map;i.forEach(d=>s.set(d.number,d));let o=this.getFramePlayerState(r),a=this.getFrameEntities(r),c=new Map;a.forEach(d=>c.set(d.number,d));let l={frameA:t,frameB:r,playerStateDiff:{origin:null,viewangles:null,health:null,ammo:null},entityDiffs:{added:[],removed:[],moved:[]}};n&&o&&((n.origin.x!==o.origin.x||n.origin.y!==o.origin.y||n.origin.z!==o.origin.z)&&(l.playerStateDiff.origin={x:o.origin.x-n.origin.x,y:o.origin.y-n.origin.y,z:o.origin.z-n.origin.z}),n.stats[1]!==o.stats[1]&&(l.playerStateDiff.health=o.stats[1]-n.stats[1]),n.stats[2]!==o.stats[2]&&(l.playerStateDiff.ammo=o.stats[2]-n.stats[2]));for(let[d,f]of c){let u=s.get(d);u?(u.origin.x!==f.origin.x||u.origin.y!==f.origin.y||u.origin.z!==f.origin.z)&&l.entityDiffs.moved.push({id:d,delta:{x:f.origin.x-u.origin.x,y:f.origin.y-u.origin.y,z:f.origin.z-u.origin.z}}):l.entityDiffs.added.push(d)}for(let[d,f]of s)c.has(d)||l.entityDiffs.removed.push(d);return l}getEntityTrajectory(t,r,n){let i=[],s=this.getCurrentFrame();for(this.seek(r);this.getCurrentFrame()<=n&&this.state!==3;){let o=null;if(t===-1){let a=this.getFramePlayerState(this.getCurrentFrame());a&&(o={...a.origin})}else if(this.handler?.getEntities){let a=this.handler.getEntities().get(t);a&&(o={...a.origin})}if(o&&i.push(o),this.getCurrentFrame()===n)break;this.stepForward()}return this.seek(s),i}getDemoEvents(){return this.ensureAnalysis(),this.cachedEvents||[]}filterEvents(t,r){return this.getDemoEvents().filter(i=>!(i.type!==t||r!==void 0&&i.entityId!==r))}getEventSummary(){return this.ensureAnalysis(),this.cachedSummary||{totalKills:0,totalDeaths:0,damageDealt:0,damageReceived:0,weaponUsage:new Map}}getDemoHeader(){return this.ensureAnalysis(),this.cachedHeader}getDemoConfigStrings(){return this.ensureAnalysis(),this.cachedConfigStrings||new Map}getDemoServerInfo(){return this.ensureAnalysis(),this.cachedServerInfo||{}}getDemoStatistics(){return this.ensureAnalysis(),this.cachedStatistics}getPlayerStatistics(t){return this.ensureAnalysis(),this.cachedPlayerStats?.get(t)||null}getWeaponStatistics(t){return this.ensureAnalysis(),this.cachedWeaponStats?.get(t)||null}ensureAnalysis(){if(!this.cachedEvents&&this.buffer){let r=new Gn(this.buffer).analyze();this.cachedEvents=r.events,this.cachedSummary=r.summary,this.cachedHeader=r.header,this.cachedConfigStrings=r.configStrings,this.cachedServerInfo=r.serverInfo,this.cachedStatistics=r.statistics,this.cachedPlayerStats=r.playerStats,this.cachedWeaponStats=r.weaponStats}}setCameraMode(t){this.cameraMode=t}getCameraMode(){return this.cameraMode}setThirdPersonDistance(t){this.thirdPersonDistance=t}setThirdPersonOffset(t){this.thirdPersonOffset=t}async playWithTracking(t,r={}){if(this.tracker=t,t.startTracking(),r.fastForward)try{this.state===0&&this.reader,this.transitionState(1);let n=100,i=async()=>{if(this.state!==1)throw new Error("Playback stopped unexpectedly during fast forward");let s=0;for(;s<n;){if(!this.processNextFrame()){let o=t.stopTracking();return this.tracker=null,this.callbacks?.onPlaybackComplete&&this.callbacks.onPlaybackComplete(),o}s++}return await new Promise(o=>setTimeout(o,0)),i()};return await i()}catch(n){throw t.stopTracking(),this.tracker=null,n}else return new Promise((n,i)=>{let s=this.callbacks?.onPlaybackComplete,o=this.callbacks?.onPlaybackError,a=()=>{this.setCallbacks({...this.callbacks,onPlaybackComplete:s,onPlaybackError:o}),this.tracker=null};this.setCallbacks({...this.callbacks,onPlaybackComplete:()=>{let c=t.stopTracking();s&&s(),a(),n(c)},onPlaybackError:c=>{t.stopTracking(),o&&o(c),a(),i(c)}}),this.play()})}async playRangeWithTracking(t,r,n){return this.tracker=n,n.startTracking(),new Promise((i,s)=>{let o=this.callbacks?.onPlaybackComplete,a=this.callbacks?.onPlaybackError,c=()=>{this.setCallbacks({...this.callbacks,onPlaybackComplete:o,onPlaybackError:a}),this.tracker=null};this.setCallbacks({...this.callbacks,onPlaybackComplete:()=>{let l=n.stopTracking();o&&o(),c(),i(l)},onPlaybackError:l=>{n.stopTracking(),a&&a(l),c(),s(l)}}),this.playRange(t,r)})}};var $s=class{constructor(){this.isRecording=!1;this.startTime=0;this.frameCount=0;this.filename=null;this.lastMessageSize=-1;this.messageBuffer=new tl(1024*1024)}startRecording(t,r=0){this.isRecording||(this.isRecording=!0,this.filename=t,this.startTime=r,this.frameCount=0,this.messageBuffer.reset(),console.log(`DemoRecorder: Started recording to ${t}`))}recordMessage(t){if(this.isRecording){this.messageBuffer.writeLong(t.byteLength);for(let r=0;r<t.length;r++)this.messageBuffer.writeByte(t[r]);this.frameCount++}}stopRecording(){return this.isRecording?(this.isRecording=!1,this.messageBuffer.writeLong(-1),console.log(`DemoRecorder: Stopped recording. Frames: ${this.frameCount}, Size: ${this.messageBuffer.getOffset()} bytes`),this.messageBuffer.getData()):null}getIsRecording(){return this.isRecording}};var Oa=class{static validate(t,r){if(r&&!r.toLowerCase().endsWith(".dm2"))return{valid:!1,error:"Invalid file extension (expected .dm2)"};if(t.byteLength<5)return{valid:!1,error:"File too small to be a valid demo"};let n=new DataView(t),i=n.getInt32(0,!0);if(i<=0||i>t.byteLength-4)return{valid:!1,error:`Invalid first block length: ${i}`};let s=n.getUint8(4);if(s!==k.serverdata)return{valid:!1,error:`First command is not svc_serverdata (expected ${k.serverdata}, got ${s})`};let o=-1;return i>=5&&(o=n.getInt32(5,!0)),{valid:!0,version:o}}};function Na(e,t){let r=t.bits,n=t.bitsHigh;e.number=t.number,r&Rs&&(e.modelindex=t.modelindex),r&Ps&&(e.modelindex2=t.modelindex2),r&zs&&(e.modelindex3=t.modelindex3),r&Ds&&(e.modelindex4=t.modelindex4),r&Es&&(e.frame=t.frame),r&Fs&&(e.frame=t.frame),(r&Nn||r&Vn)&&(e.skinnum=t.skinnum),(r&On||r&Hn)&&(e.effects=t.effects),(r&Bn||r&Un)&&(e.renderfx=t.renderfx),r&Ss&&(e.origin.x=t.origin.x),r&ws&&(e.origin.y=t.origin.y),r&Is&&(e.origin.z=t.origin.z),r&Cs&&(e.angles.x=t.angles.x),r&As&&(e.angles.y=t.angles.y),r&Ms&&(e.angles.z=t.angles.z),r&Bs&&(e.old_origin.x=t.old_origin.x,e.old_origin.y=t.old_origin.y,e.old_origin.z=t.old_origin.z),r&Os&&(e.sound=t.sound),r&Ls&&(e.event=t.event),r&Ns&&(e.solid=t.solid),r&ks&&(e.alpha=t.alpha),r&Us&&(e.scale=t.scale),r&Hs&&(e.instanceBits=t.instanceBits),r&Vs&&(e.loopVolume=t.loopVolume),n&Gs&&(e.loopAttenuation=t.loopAttenuation),n&Ws&&(e.owner=t.owner),n&Xs&&(e.oldFrame=t.oldFrame)}var Ua=class{static extractClip(t,r,n){let i=new je(t);if(!i.seekToMessage(r))throw new Error(`Start frame ${r} out of bounds`);let s=i.getOffset(),o=t.byteLength;n<i.getMessageCount()&&i.seekToMessage(n)&&(o=i.getOffset());let a=o-s,c=new Uint8Array(a+4),l=new Uint8Array(t);return c.set(l.subarray(s,o),0),new DataView(c.buffer).setInt32(a,-1,!0),c}static async captureWorldState(t,r){let n=new je(t),i=new Map,s=new Map,o=null,a=Nr(),c=new Map,l=-1,d={onServerData:(f,u,h,m,g,p,y,_)=>{o={protocolVersion:f,serverCount:u,attractLoop:h!==0,gameDirectory:m,levelName:p}},onConfigString:(f,u)=>{i.set(f,u)},onSpawnBaseline:f=>{s.set(f.number,f)},onFrame:f=>{a=f.playerState;let u=f.packetEntities;u.delta||c.clear();for(let h of u.entities){if(h.bits&Ts){c.delete(h.number);continue}let m=h.number,g;u.delta&&c.has(m)?g=c.get(m):s.has(m)?g=s.get(m):g=zt();let p=structuredClone(g);Na(p,h),c.set(m,p)}},onCenterPrint:()=>{},onStuffText:()=>{},onSound:()=>{},onPrint:()=>{},onMuzzleFlash:()=>{},onMuzzleFlash2:()=>{},onTempEntity:()=>{},onLayout:()=>{},onInventory:()=>{},onDisconnect:()=>{},onReconnect:()=>{},onDownload:()=>{}};for(;n.hasMore()&&!(l>=r);){let f=n.readNextBlock();if(!f)break;l++;let u=new st(f.data,d),h=o?o.protocolVersion:34;u.setProtocolVersion(h),u.parseMessage()}return{serverData:o,configStrings:i,entityBaselines:s,playerState:a,entities:c,gameTime:0}}static extractStandaloneClip(t,r,n,i){throw new Error("extractStandaloneClip not fully implemented: requires NetworkMessageWriter")}};var Hc=(u=>(u.Unknown="unknown",u.BSP="bsp",u.MD2="md2",u.MD3="md3",u.WAL="wal",u.PCX="pcx",u.TGA="tga",u.WAV="wav",u.OGG="ogg",u.TXT="txt",u.CFG="cfg",u.DEM="dem",u))(Hc||{}),x0={".bsp":"bsp",".md2":"md2",".md3":"md3",".wal":"wal",".pcx":"pcx",".tga":"tga",".wav":"wav",".ogg":"ogg",".txt":"txt",".cfg":"cfg",".dm2":"dem"};function Zs(e,t){if(e.length<t.length)return!1;for(let r=0;r<t.length;r++)if(e[r]!==t[r])return!1;return!0}var $x=[73,66,83,80],Zx=[73,68,80,50],Yx=[73,68,80,51];var qx=[82,73,70,70];var jx=[79,103,103,83];function Vc(e,t){let r=e.slice(e.lastIndexOf(".")).toLowerCase();if(t){if(Zs(t,$x))return"bsp";if(Zs(t,Zx))return"md2";if(Zs(t,Yx))return"md3";if(Zs(t,jx))return"ogg";if(t.length>128&&t[0]===10&&t[1]<6)return"pcx";if(Zs(t,qx)&&t.length>=12&&t[8]===87&&t[9]===65&&t[10]===86&&t[11]===69)return"wav"}return x0[r]?x0[r]:"unknown"}function Gc(e){let t=Vc(e);return t==="txt"||t==="cfg"}function b0(e){return!Gc(e)}function Qx(e,t,r,n,i){let s=new Uint8ClampedArray(n*i*4),o=t/n,a=r/i;for(let c=0;c<i;c++)for(let l=0;l<n;l++){let d=l*o,f=c*a,u=Math.floor(d),h=Math.floor(f),m=d-u,g=f-h,p=Math.min(u+1,t-1),y=Math.min(h+1,r-1),_=(h*t+u)*4,b=(h*t+p)*4,x=(y*t+u)*4,v=(y*t+p)*4,A=(c*n+l)*4;for(let S=0;S<4;S++){let M=e[_+S],L=e[b+S],w=e[x+S],T=e[v+S],F=M*(1-m)+L*m,U=w*(1-m)+T*m,C=F*(1-g)+U*g;s[A+S]=C}}return s}function Jx(e,t,r,n,i,s,o,a,c,l,d){n=Math.floor(n),i=Math.floor(i),s=Math.floor(s),o=Math.floor(o);let f=Math.abs(s-n),u=Math.abs(o-i),h=n<s?1:-1,m=i<o?1:-1,g=f-u;for(;;){if(n>=0&&n<t&&i>=0&&i<r){let y=(i*t+n)*4,_=1-d/255;e[y]=a*(d/255)+e[y]*_,e[y+1]=c*(d/255)+e[y+1]*_,e[y+2]=l*(d/255)+e[y+2]*_,e[y+3]=255}if(n===s&&i===o)break;let p=2*g;p>-u&&(g-=u,n+=h),p<f&&(g+=f,i+=m)}}function _0(e,t,r,n,i){let a=(e.x-n.x)*.707-(e.y-n.y)*.707,c=(e.x-n.x)*.707+(e.y-n.y)*.707,l=e.z-n.z,d=.866,f=.5,u=c*d-l*f,h=c*f+l*d,m=t/2+a*i,g=r/2-h*i;return{x:m,y:g}}var Ha=class{constructor(t){this.assetManager=t}async generateTextureThumbnail(t,r){try{let n=await this.assetManager.loadTexture(t);if(!n||n.levels.length===0)return null;let i=n.levels[0],s=i.width/i.height,o=r,a=r;s>1?a=Math.floor(r/s):o=Math.floor(r*s),o=Math.max(1,o),a=Math.max(1,a);let c=Qx(i.rgba,i.width,i.height,o,a);return new ImageData(c,o,a)}catch(n){return console.error(`Failed to generate thumbnail for ${t}`,n),null}}async generateModelThumbnail(t,r){try{let n=[],i=[],s=t.split(".").pop()?.toLowerCase();if(s==="md2"){let p=await this.assetManager.loadMd2Model(t);if(!p||p.frames.length===0)return null;n=p.frames[0].vertices.map(_=>_.position);for(let _ of p.triangles)i.push(_.vertexIndices[0],_.vertexIndices[1]),i.push(_.vertexIndices[1],_.vertexIndices[2]),i.push(_.vertexIndices[2],_.vertexIndices[0])}else if(s==="md3"){let p=await this.assetManager.loadMd3Model(t);if(!p||p.surfaces.length===0)return null;let y=0;for(let _ of p.surfaces){if(_.vertices.length===0)continue;let b=_.vertices[0];n.push(...b.map(x=>({x:x.position.x,y:x.position.y,z:x.position.z})));for(let x of _.triangles)i.push(y+x.indices[0],y+x.indices[1]),i.push(y+x.indices[1],y+x.indices[2]),i.push(y+x.indices[2],y+x.indices[0]);y+=b.length}}else return null;if(n.length===0)return null;let o={x:1/0,y:1/0,z:1/0},a={x:-1/0,y:-1/0,z:-1/0};for(let p of n)o.x=Math.min(o.x,p.x),o.y=Math.min(o.y,p.y),o.z=Math.min(o.z,p.z),a.x=Math.max(a.x,p.x),a.y=Math.max(a.y,p.y),a.z=Math.max(a.z,p.z);let c={x:(o.x+a.x)/2,y:(o.y+a.y)/2,z:(o.z+a.z)/2},l=a.x-o.x,d=a.y-o.y,f=a.z-o.z,u=Math.max(l,d,f),h=Math.max(u,.001),m=r*.8/h,g=new Uint8ClampedArray(r*r*4);for(let p=0;p<i.length;p+=2){let y=i[p],_=i[p+1],b=n[y],x=n[_],v=_0(b,r,r,c,m),A=_0(x,r,r,c,m);Jx(g,r,r,v.x,v.y,A.x,A.y,0,255,0,255)}return new ImageData(g,r,r)}catch(n){return console.error(`Failed to generate model thumbnail for ${t}`,n),null}}async getMapBounds(t,r){try{let n=ei(r);if(n.models.length>0){let i=n.models[0];return{mins:{x:i.mins[0],y:i.mins[1],z:i.mins[2]},maxs:{x:i.maxs[0],y:i.maxs[1],z:i.maxs[2]}}}return null}catch(n){return console.error("Failed to get map bounds",n),null}}async extractMapScreenshot(t){return null}};var Va=class{constructor(t){this.loader=t}async getMapStatistics(t){let r=await this.loader.load(t),n=r.faces.filter(o=>o.lightOffset!==-1).length,i=r.models[0],s=i?{mins:i.mins,maxs:i.maxs}:{mins:[0,0,0],maxs:[0,0,0]};return{entityCount:r.entities.entities.length,surfaceCount:r.faces.length,lightmapCount:n,vertexCount:r.vertices.length,bounds:s}}async getUsedTextures(t){let r=await this.loader.load(t),n=new Set;for(let i of r.texInfo)i.texture&&n.add(i.texture);return Array.from(n).sort()}async getUsedModels(t){let r=await this.loader.load(t),n=new Set;for(let i of r.entities.entities)i.properties.model&&!i.properties.model.startsWith("*")&&n.add(i.properties.model);return Array.from(n).sort()}async getUsedSounds(t){let r=await this.loader.load(t),n=new Set;for(let i of r.entities.entities){i.properties.noise&&n.add(i.properties.noise);for(let[s,o]of Object.entries(i.properties))(s==="noise"||s.endsWith("_sound")||s==="sound")&&typeof o=="string"&&n.add(o)}return Array.from(n).sort()}};function eb(e){return{init(){e.trace({x:0,y:0,z:0},{x:0,y:0,z:0})},shutdown(){},createMainLoop(t,r){return new fr(t,r)}}}return C0(tb);})();
|
|
490
490
|
/*! Bundled license information:
|
|
491
491
|
|
|
492
492
|
pako/dist/pako.esm.mjs:
|